packages feed

ghc-events 0.4.4.0 → 0.6.0

raw patch · 38 files changed

+11914/−3559 lines, 38 filesdep +ghc-eventsdep −mtldep ~arraydep ~basedep ~binarynew-uploaderbinary-addedPVP ok

version bump matches the API change (PVP)

Dependencies added: ghc-events

Dependencies removed: mtl

Dependency ranges changed: array, base, binary, bytestring, containers

API changes (from Hackage documentation)

- GHC.RTS.Events: allocAreaSize :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: allocBytes :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: args :: EventInfo -> [String]
- GHC.RTS.Events: blockSize :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: block_events :: EventInfo -> [Event]
- GHC.RTS.Events: cap :: EventInfo -> {-# UNPACK #-} !Int
- GHC.RTS.Events: capset :: EventInfo -> {-# UNPACK #-} !Capset
- GHC.RTS.Events: capsetType :: EventInfo -> CapsetType
- GHC.RTS.Events: ce_cap :: CapEvent -> Maybe Int
- GHC.RTS.Events: ce_event :: CapEvent -> Event
- GHC.RTS.Events: commandline :: EventInfo -> String
- GHC.RTS.Events: copied :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: dat :: EventLog -> Data
- GHC.RTS.Events: desc :: EventType -> EventTypeDesc
- GHC.RTS.Events: dyn_id :: EventInfo -> {-# UNPACK #-} !ParConjDynId
- GHC.RTS.Events: end_time :: EventInfo -> Timestamp
- GHC.RTS.Events: env :: EventInfo -> [String]
- GHC.RTS.Events: eventTypes :: Header -> [EventType]
- GHC.RTS.Events: events :: Data -> [Event]
- GHC.RTS.Events: frag :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: future_id :: EventInfo -> {-# UNPACK #-} !FutureId
- GHC.RTS.Events: gen :: EventInfo -> {-# UNPACK #-} !Int
- GHC.RTS.Events: gens :: EventInfo -> {-# UNPACK #-} !Int
- GHC.RTS.Events: getEventLog :: ExceptT String Get EventLog
- GHC.RTS.Events: groupEvents :: [Event] -> [(Maybe Int, [Event])]
- GHC.RTS.Events: header :: EventLog -> Header
- GHC.RTS.Events: heapCapset :: EventInfo -> {-# UNPACK #-} !Capset
- GHC.RTS.Events: kernelThreadId :: KernelThreadId -> Word64
- GHC.RTS.Events: liveBytes :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: machine :: EventInfo -> {-# UNPACK #-} !MachineId
- GHC.RTS.Events: markername :: EventInfo -> String
- GHC.RTS.Events: maxHeapSize :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: mblockSize :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: mesTag :: EventInfo -> !MessageTag
- GHC.RTS.Events: messageSize :: EventInfo -> {-# UNPACK #-} !MessageSize
- GHC.RTS.Events: msg :: EventInfo -> String
- GHC.RTS.Events: n_caps :: EventInfo -> Int
- GHC.RTS.Events: name :: EventInfo -> String
- GHC.RTS.Events: name_id :: EventInfo -> {-# UNPACK #-} !StringId
- GHC.RTS.Events: newCap :: EventInfo -> {-# UNPACK #-} !Int
- GHC.RTS.Events: new_cap :: EventInfo -> {-# UNPACK #-} !Int
- GHC.RTS.Events: nsec :: EventInfo -> {-# UNPACK #-} !Word32
- GHC.RTS.Events: num :: EventType -> EventTypeNum
- GHC.RTS.Events: otherCap :: EventInfo -> {-# UNPACK #-} !Int
- GHC.RTS.Events: parMaxCopied :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: parNThreads :: EventInfo -> {-# UNPACK #-} !Int
- GHC.RTS.Events: parTotCopied :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: perfNum :: EventInfo -> {-# UNPACK #-} !PerfEventTypeNum
- GHC.RTS.Events: period :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: pid :: EventInfo -> {-# UNPACK #-} !PID
- GHC.RTS.Events: ppid :: EventInfo -> {-# UNPACK #-} !PID
- GHC.RTS.Events: process :: EventInfo -> {-# UNPACK #-} !ProcessId
- GHC.RTS.Events: realtime :: EventInfo -> {-# UNPACK #-} !Timestamp
- GHC.RTS.Events: receiverInport :: EventInfo -> {-# UNPACK #-} !PortId
- GHC.RTS.Events: receiverMachine :: EventInfo -> {-# UNPACK #-} !MachineId
- GHC.RTS.Events: receiverProcess :: EventInfo -> {-# UNPACK #-} !ProcessId
- GHC.RTS.Events: ref :: EventInfo -> {-# UNPACK #-} !EventTypeNum
- GHC.RTS.Events: rtsident :: EventInfo -> String
- GHC.RTS.Events: sId :: EventInfo -> {-# UNPACK #-} !StringId
- GHC.RTS.Events: sec :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: senderMachine :: EventInfo -> {-# UNPACK #-} !MachineId
- GHC.RTS.Events: senderProcess :: EventInfo -> {-# UNPACK #-} !ProcessId
- GHC.RTS.Events: senderThread :: EventInfo -> {-# UNPACK #-} !ThreadId
- GHC.RTS.Events: size :: EventType -> Maybe EventTypeSize
- GHC.RTS.Events: sizeBytes :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: slop :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: sortGroups :: [(Maybe Int, [Event])] -> [CapEvent]
- GHC.RTS.Events: sparkThread :: EventInfo -> {-# UNPACK #-} !ThreadId
- GHC.RTS.Events: spark_id :: EventInfo -> {-# UNPACK #-} !SparkId
- GHC.RTS.Events: sparksConverted :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: sparksCreated :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: sparksDud :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: sparksFizzled :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: sparksGCd :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: sparksOverflowed :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: sparksRemaining :: EventInfo -> {-# UNPACK #-} !Word64
- GHC.RTS.Events: static_id :: EventInfo -> {-# UNPACK #-} !ParConjStaticId
- GHC.RTS.Events: status :: EventInfo -> ThreadStopStatus
- GHC.RTS.Events: str :: EventInfo -> String
- GHC.RTS.Events: taskId :: EventInfo -> TaskId
- GHC.RTS.Events: thread :: EventInfo -> {-# UNPACK #-} !ThreadId
- GHC.RTS.Events: thread_id :: EventInfo -> {-# UNPACK #-} !ThreadId
- GHC.RTS.Events: threadlabel :: EventInfo -> String
- GHC.RTS.Events: tid :: EventInfo -> {-# UNPACK #-} !KernelThreadId
- GHC.RTS.Events: version :: EventInfo -> String
- GHC.RTS.Events: victimCap :: EventInfo -> {-# UNPACK #-} !Int
- GHC.RTS.Events.Analysis: alpha :: Machine s i -> i -> Bool
- GHC.RTS.Events.Analysis: delta :: Machine s i -> s -> i -> Maybe s
- GHC.RTS.Events.Analysis: final :: Machine s i -> s -> Bool
- GHC.RTS.Events.Analysis: initial :: Machine s i -> s
- GHC.RTS.Events.Analysis: instance (Show e, Show a) => Show (Process e a)
- GHC.RTS.Events.Analysis: instance Show s => Show (Profile s)
- GHC.RTS.Events.Analysis: profileState :: Profile s -> s
- GHC.RTS.Events.Analysis: profileTime :: Profile s -> Timestamp
- GHC.RTS.Events.Analysis.SparkThread: instance Eq SparkThreadState
- GHC.RTS.Events.Analysis.SparkThread: instance Ord SparkThreadState
- GHC.RTS.Events.Analysis.SparkThread: instance Show SparkThreadState
- GHC.RTS.Events.Analysis.Thread: instance Eq ThreadState
- GHC.RTS.Events.Analysis.Thread: instance Ord ThreadState
- GHC.RTS.Events.Analysis.Thread: instance Show ThreadState
- GHC.RTS.Events.Merge: instance Monoid MaxVars
+ GHC.RTS.Events: [allocAreaSize] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [allocBytes] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [args] :: EventInfo -> [String]
+ GHC.RTS.Events: [blockSize] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [block_size] :: EventInfo -> BlockSize
+ GHC.RTS.Events: [cap] :: EventInfo -> {-# UNPACK #-} !Int
+ GHC.RTS.Events: [capsetType] :: EventInfo -> CapsetType
+ GHC.RTS.Events: [capset] :: EventInfo -> {-# UNPACK #-} !Capset
+ GHC.RTS.Events: [ce_cap] :: CapEvent -> Maybe Int
+ GHC.RTS.Events: [ce_event] :: CapEvent -> Event
+ GHC.RTS.Events: [commandline] :: EventInfo -> String
+ GHC.RTS.Events: [copied] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [dat] :: EventLog -> Data
+ GHC.RTS.Events: [desc] :: EventType -> EventTypeDesc
+ GHC.RTS.Events: [dyn_id] :: EventInfo -> {-# UNPACK #-} !ParConjDynId
+ GHC.RTS.Events: [end_time] :: EventInfo -> Timestamp
+ GHC.RTS.Events: [env] :: EventInfo -> [String]
+ GHC.RTS.Events: [evCap] :: Event -> Maybe Int
+ GHC.RTS.Events: [evSpec] :: Event -> EventInfo
+ GHC.RTS.Events: [evTime] :: Event -> {-# UNPACK #-} !Timestamp
+ GHC.RTS.Events: [eventTypes] :: Header -> [EventType]
+ GHC.RTS.Events: [events] :: Data -> [Event]
+ GHC.RTS.Events: [future_id] :: EventInfo -> {-# UNPACK #-} !FutureId
+ GHC.RTS.Events: [gen] :: EventInfo -> {-# UNPACK #-} !Int
+ GHC.RTS.Events: [gens] :: EventInfo -> {-# UNPACK #-} !Int
+ GHC.RTS.Events: [header] :: EventLog -> Header
+ GHC.RTS.Events: [heapCapset] :: EventInfo -> {-# UNPACK #-} !Capset
+ GHC.RTS.Events: [kernelThreadId] :: KernelThreadId -> Word64
+ GHC.RTS.Events: [liveBytes] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [machine] :: EventInfo -> {-# UNPACK #-} !MachineId
+ GHC.RTS.Events: [markername] :: EventInfo -> String
+ GHC.RTS.Events: [maxHeapSize] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [mblockSize] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [mesTag] :: EventInfo -> !MessageTag
+ GHC.RTS.Events: [messageSize] :: EventInfo -> {-# UNPACK #-} !MessageSize
+ GHC.RTS.Events: [msg] :: EventInfo -> String
+ GHC.RTS.Events: [n_caps] :: EventInfo -> Int
+ GHC.RTS.Events: [name] :: EventInfo -> String
+ GHC.RTS.Events: [name_id] :: EventInfo -> {-# UNPACK #-} !StringId
+ GHC.RTS.Events: [newCap] :: EventInfo -> {-# UNPACK #-} !Int
+ GHC.RTS.Events: [new_cap] :: EventInfo -> {-# UNPACK #-} !Int
+ GHC.RTS.Events: [nsec] :: EventInfo -> {-# UNPACK #-} !Word32
+ GHC.RTS.Events: [num] :: EventType -> EventTypeNum
+ GHC.RTS.Events: [otherCap] :: EventInfo -> {-# UNPACK #-} !Int
+ GHC.RTS.Events: [parMaxCopied] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [parNThreads] :: EventInfo -> {-# UNPACK #-} !Int
+ GHC.RTS.Events: [parTotCopied] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [perfNum] :: EventInfo -> {-# UNPACK #-} !PerfEventTypeNum
+ GHC.RTS.Events: [period] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [pid] :: EventInfo -> {-# UNPACK #-} !PID
+ GHC.RTS.Events: [ppid] :: EventInfo -> {-# UNPACK #-} !PID
+ GHC.RTS.Events: [process] :: EventInfo -> {-# UNPACK #-} !ProcessId
+ GHC.RTS.Events: [realtime] :: EventInfo -> {-# UNPACK #-} !Timestamp
+ GHC.RTS.Events: [receiverInport] :: EventInfo -> {-# UNPACK #-} !PortId
+ GHC.RTS.Events: [receiverMachine] :: EventInfo -> {-# UNPACK #-} !MachineId
+ GHC.RTS.Events: [receiverProcess] :: EventInfo -> {-# UNPACK #-} !ProcessId
+ GHC.RTS.Events: [ref] :: EventInfo -> {-# UNPACK #-} !EventTypeNum
+ GHC.RTS.Events: [rtsident] :: EventInfo -> String
+ GHC.RTS.Events: [sId] :: EventInfo -> {-# UNPACK #-} !StringId
+ GHC.RTS.Events: [sec] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [senderMachine] :: EventInfo -> {-# UNPACK #-} !MachineId
+ GHC.RTS.Events: [senderProcess] :: EventInfo -> {-# UNPACK #-} !ProcessId
+ GHC.RTS.Events: [senderThread] :: EventInfo -> {-# UNPACK #-} !ThreadId
+ GHC.RTS.Events: [sizeBytes] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [size] :: EventType -> Maybe EventTypeSize
+ GHC.RTS.Events: [slop, frag] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [sparkThread] :: EventInfo -> {-# UNPACK #-} !ThreadId
+ GHC.RTS.Events: [spark_id] :: EventInfo -> {-# UNPACK #-} !SparkId
+ GHC.RTS.Events: [sparksCreated, sparksDud, sparksOverflowed, sparksConverted, sparksFizzled, sparksGCd, sparksRemaining] :: EventInfo -> {-# UNPACK #-} !Word64
+ GHC.RTS.Events: [static_id] :: EventInfo -> {-# UNPACK #-} !ParConjStaticId
+ GHC.RTS.Events: [status] :: EventInfo -> !ThreadStopStatus
+ GHC.RTS.Events: [str] :: EventInfo -> String
+ GHC.RTS.Events: [taskId] :: EventInfo -> TaskId
+ GHC.RTS.Events: [thread] :: EventInfo -> {-# UNPACK #-} !ThreadId
+ GHC.RTS.Events: [thread_id] :: EventInfo -> {-# UNPACK #-} !ThreadId
+ GHC.RTS.Events: [threadlabel] :: EventInfo -> String
+ GHC.RTS.Events: [tid] :: EventInfo -> {-# UNPACK #-} !KernelThreadId
+ GHC.RTS.Events: [version] :: EventInfo -> String
+ GHC.RTS.Events: [victimCap] :: EventInfo -> {-# UNPACK #-} !Int
+ GHC.RTS.Events: buildEvent :: IntMap EventType -> Event -> Builder
+ GHC.RTS.Events: buildEvent' :: Event -> Builder
+ GHC.RTS.Events: buildEventInfo :: EventInfo -> Builder
+ GHC.RTS.Events: printEventsIncremental :: Bool -> FilePath -> IO ()
+ GHC.RTS.Events: serialiseEventLog :: EventLog -> ByteString
+ GHC.RTS.Events: type BlockSize = Word32
+ GHC.RTS.Events: type Capset = Word32
+ GHC.RTS.Events: type EventTypeDesc = String
+ GHC.RTS.Events: type EventTypeNum = Word16
+ GHC.RTS.Events: type EventTypeSize = Word16
+ GHC.RTS.Events: type FutureId = Word64
+ GHC.RTS.Events: type ParConjDynId = Word64
+ GHC.RTS.Events: type ParConjStaticId = StringId
+ GHC.RTS.Events: type PerfEventTypeNum = Word32
+ GHC.RTS.Events: type SparkId = Word32
+ GHC.RTS.Events: type StringId = Word32
+ GHC.RTS.Events.Analysis: [alpha] :: Machine s i -> i -> Bool
+ GHC.RTS.Events.Analysis: [delta] :: Machine s i -> s -> i -> Maybe s
+ GHC.RTS.Events.Analysis: [final] :: Machine s i -> s -> Bool
+ GHC.RTS.Events.Analysis: [initial] :: Machine s i -> s
+ GHC.RTS.Events.Analysis: [profileState] :: Profile s -> s
+ GHC.RTS.Events.Analysis: [profileTime] :: Profile s -> Timestamp
+ GHC.RTS.Events.Analysis: instance (GHC.Show.Show a, GHC.Show.Show e) => GHC.Show.Show (GHC.RTS.Events.Analysis.Process e a)
+ GHC.RTS.Events.Analysis: instance GHC.Show.Show s => GHC.Show.Show (GHC.RTS.Events.Analysis.Profile s)
+ GHC.RTS.Events.Analysis.SparkThread: instance GHC.Classes.Eq GHC.RTS.Events.Analysis.SparkThread.SparkThreadState
+ GHC.RTS.Events.Analysis.SparkThread: instance GHC.Classes.Ord GHC.RTS.Events.Analysis.SparkThread.SparkThreadState
+ GHC.RTS.Events.Analysis.SparkThread: instance GHC.Show.Show GHC.RTS.Events.Analysis.SparkThread.SparkThreadState
+ GHC.RTS.Events.Analysis.Thread: instance GHC.Classes.Eq GHC.RTS.Events.Analysis.Thread.ThreadState
+ GHC.RTS.Events.Analysis.Thread: instance GHC.Classes.Ord GHC.RTS.Events.Analysis.Thread.ThreadState
+ GHC.RTS.Events.Analysis.Thread: instance GHC.Show.Show GHC.RTS.Events.Analysis.Thread.ThreadState
+ GHC.RTS.Events.Incremental: Consume :: (ByteString -> Decoder a) -> Decoder a
+ GHC.RTS.Events.Incremental: Done :: ByteString -> Decoder a
+ GHC.RTS.Events.Incremental: Error :: ByteString -> String -> Decoder a
+ GHC.RTS.Events.Incremental: Produce :: !a -> (Decoder a) -> Decoder a
+ GHC.RTS.Events.Incremental: data Decoder a
+ GHC.RTS.Events.Incremental: decodeEventLog :: Decoder Event
+ GHC.RTS.Events.Incremental: decodeEvents :: Header -> Decoder Event
+ GHC.RTS.Events.Incremental: decodeHeader :: Decoder Header
+ GHC.RTS.Events.Incremental: readEventLog :: ByteString -> Either String (EventLog, Maybe String)
+ GHC.RTS.Events.Incremental: readEvents :: Header -> ByteString -> ([Event], Maybe String)
+ GHC.RTS.Events.Incremental: readHeader :: ByteString -> Either String (Header, ByteString)
+ GHC.RTS.Events.Merge: instance GHC.Base.Monoid GHC.RTS.Events.Merge.MaxVars
- GHC.RTS.Events: Event :: {-# UNPACK #-} !Timestamp -> EventInfo -> Event
+ GHC.RTS.Events: Event :: {-# UNPACK #-} !Timestamp -> EventInfo -> Maybe Int -> Event
- GHC.RTS.Events: EventBlock :: Timestamp -> Int -> [Event] -> EventInfo
+ GHC.RTS.Events: EventBlock :: Timestamp -> Int -> BlockSize -> EventInfo
- GHC.RTS.Events: GCStatsGHC :: {-# UNPACK #-} !Capset -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> EventInfo
+ GHC.RTS.Events: GCStatsGHC :: {-# UNPACK #-} !Capset -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> EventInfo
- GHC.RTS.Events: SparkCounters :: {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> EventInfo
+ GHC.RTS.Events: SparkCounters :: {-# UNPACK #-} !Word64 -> EventInfo
- GHC.RTS.Events: StopThread :: {-# UNPACK #-} !ThreadId -> ThreadStopStatus -> EventInfo
+ GHC.RTS.Events: StopThread :: {-# UNPACK #-} !ThreadId -> !ThreadStopStatus -> EventInfo
- GHC.RTS.Events: ppEvent :: IntMap EventType -> CapEvent -> String
+ GHC.RTS.Events: ppEvent :: IntMap EventType -> Event -> String
- GHC.RTS.Events: sortEvents :: [Event] -> [CapEvent]
+ GHC.RTS.Events: sortEvents :: [Event] -> [Event]
- GHC.RTS.Events: time :: Event -> {-# UNPACK #-} !Timestamp
+ GHC.RTS.Events: time :: Event -> Timestamp
- GHC.RTS.Events.Analysis: routeM :: Ord k => Machine r i -> (r -> i -> Maybe k) -> Machine s i -> Machine (Map k s, r) i
+ GHC.RTS.Events.Analysis: routeM :: (Ord k) => Machine r i -> (r -> i -> Maybe k) -> Machine s i -> Machine (Map k s, r) i
- GHC.RTS.Events.Analysis.Capability: capabilityTaskOSMachine :: Machine (Map KernelThreadId Int, Map TaskId KernelThreadId) CapEvent
+ GHC.RTS.Events.Analysis.Capability: capabilityTaskOSMachine :: Machine (Map KernelThreadId Int, Map TaskId KernelThreadId) Event
- GHC.RTS.Events.Analysis.Capability: capabilityTaskPoolMachine :: Machine (Map TaskId Int) CapEvent
+ GHC.RTS.Events.Analysis.Capability: capabilityTaskPoolMachine :: Machine (Map TaskId Int) Event
- GHC.RTS.Events.Analysis.Capability: capabilityThreadIndexer :: Map Int ThreadId -> CapEvent -> Maybe ThreadId
+ GHC.RTS.Events.Analysis.Capability: capabilityThreadIndexer :: Map Int ThreadId -> Event -> Maybe ThreadId
- GHC.RTS.Events.Analysis.Capability: capabilityThreadPoolMachine :: Machine (Map ThreadId Int) CapEvent
+ GHC.RTS.Events.Analysis.Capability: capabilityThreadPoolMachine :: Machine (Map ThreadId Int) Event
- GHC.RTS.Events.Analysis.Capability: capabilityThreadRunMachine :: Machine (Map Int ThreadId) CapEvent
+ GHC.RTS.Events.Analysis.Capability: capabilityThreadRunMachine :: Machine (Map Int ThreadId) Event
- GHC.RTS.Events.Analysis.SparkThread: capabilitySparkThreadIndexer :: (Map Int ThreadId, Set ThreadId) -> CapEvent -> Maybe ThreadId
+ GHC.RTS.Events.Analysis.SparkThread: capabilitySparkThreadIndexer :: (Map Int ThreadId, Set ThreadId) -> Event -> Maybe ThreadId
- GHC.RTS.Events.Analysis.SparkThread: capabilitySparkThreadMachine :: Machine (Map Int ThreadId, Set ThreadId) CapEvent
+ GHC.RTS.Events.Analysis.SparkThread: capabilitySparkThreadMachine :: Machine (Map Int ThreadId, Set ThreadId) Event

Files

+ CHANGELOG.md view
@@ -0,0 +1,32 @@+# Change Log++## Unreleased++## 0.6.0 - 2017-05-31++This contains breaking changes.++* The deprecation notice on `readEventLogFromFile` has been retracted+* The incremental API has been refactored++The details are as follows:++* Update bug tracker URL ([#10](https://github.com/haskell/ghc-events/pull/10))+* New test for Eden events ([#11](https://github.com/haskell/ghc-events/pull/11))+* Relax version bound for binary ([#15](https://github.com/haskell/ghc-events/pull/15))+* Enable Travis CI ([#19](https://github.com/haskell/ghc-events/pull/19))+* Refactor the incremental API which was introduced in 0.5.0.0 ([#22](https://github.com/haskell/ghc-events/pull/22))+* Some speed/memory usage improvements ([#18](https://github.com/haskell/ghc-events/pull/18), [#22](https://github.com/haskell/ghc-events/pull/22))++## 0.5.0.0 - unreleased++* Readme added :)+* Old parser replaced with an incremental implementation+* General overhaul of the codebase+* Partial Haddock coverage++The 0.5.* releases should be able to handle large event logs and logs that have been cut off abruptly, e.g. from executable runs that resulted in crashes.++This release should be *mostly* backwards compatible, however the "old" way of reading event logs, namely the `readEventLogFromFile`  function is now **deprecated**.++**NOTE:** Users parsing large logs may notice that this version of the library is noticably slower than the older versions. The incremental parser is at fault here - previous versions of the libray used a "trick" that would let them essentially skip the first step of the mergesort algorithm since `EventBlock`s were already sorted in time order. The new parser reads the file incrementally and cannot take the advantage of this. Apologies for any inconvenience this may have caused.
− GHC/RTS/EventLogFormat.h
@@ -1,312 +0,0 @@-/* ------------------------------------------------------------------------------ *- * (c) The GHC Team, 2008-2012- *- * Event log format- * - * The log format is designed to be extensible: old tools should be- * able to parse (but not necessarily understand all of) new versions- * of the format, and new tools will be able to understand old log- * files.- * - * Each event has a specific format.  If you add new events, give them- * new numbers: we never re-use old event numbers.- *- * - The format is endian-independent: all values are represented in - *    bigendian order.- *- * - The format is extensible:- *- *    - The header describes each event type and its length.  Tools- *      that don't recognise a particular event type can skip those events.- *- *    - There is room for extra information in the event type- *      specification, which can be ignored by older tools.- *- *    - Events can have extra information added, but existing fields- *      cannot be changed.  Tools should ignore extra fields at the- *      end of the event record.- *- *    - Old event type ids are never re-used; just take a new identifier.- *- *- * The format- * ----------- *- * log : EVENT_HEADER_BEGIN- *       EventType*- *       EVENT_HEADER_END- *       EVENT_DATA_BEGIN- *       Event*- *       EVENT_DATA_END- *- * EventType :- *       EVENT_ET_BEGIN- *       Word16         -- unique identifier for this event- *       Int16          -- >=0  size of the event in bytes (minus the header)- *                      -- -1   variable size- *       Word32         -- length of the next field in bytes- *       Word8*         -- string describing the event- *       Word32         -- length of the next field in bytes- *       Word8*         -- extra info (for future extensions)- *       EVENT_ET_END- *- * Event : - *       Word16         -- event_type- *       Word64         -- time (nanosecs)- *       [Word16]       -- length of the rest (for variable-sized events only)- *       ... extra event-specific info ...- *- *- * To add a new event- * ------------------- *- *  - In this file:- *    - give it a new number, add a new #define EVENT_XXX below- *  - In EventLog.c- *    - add it to the EventDesc array- *    - emit the event type in initEventLogging()- *    - emit the new event in postEvent_()- *    - generate the event itself by calling postEvent() somewhere- *  - In the Haskell code to parse the event log file:- *    - add types and code to read the new event- *- * -------------------------------------------------------------------------- */--#ifndef RTS_EVENTLOGFORMAT_H-#define RTS_EVENTLOGFORMAT_H--/*- * Markers for begin/end of the Header.- */-#define EVENT_HEADER_BEGIN    0x68647262 /* 'h' 'd' 'r' 'b' */-#define EVENT_HEADER_END      0x68647265 /* 'h' 'd' 'r' 'e' */--#define EVENT_DATA_BEGIN      0x64617462 /* 'd' 'a' 't' 'b' */-#define EVENT_DATA_END        0xffff--/*- * Markers for begin/end of the list of Event Types in the Header.- * Header, Event Type, Begin = hetb- * Header, Event Type, End = hete- */-#define EVENT_HET_BEGIN       0x68657462 /* 'h' 'e' 't' 'b' */-#define EVENT_HET_END         0x68657465 /* 'h' 'e' 't' 'e' */--#define EVENT_ET_BEGIN        0x65746200 /* 'e' 't' 'b' 0 */-#define EVENT_ET_END          0x65746500 /* 'e' 't' 'e' 0 */--/*- * Types of event- */-#define EVENT_CREATE_THREAD        0 /* (thread)               */-#define EVENT_RUN_THREAD           1 /* (thread)               */-#define EVENT_STOP_THREAD          2 /* (thread, status, blockinfo) */-#define EVENT_THREAD_RUNNABLE      3 /* (thread)               */-#define EVENT_MIGRATE_THREAD       4 /* (thread, new_cap)      */-/* 5, 6, 7 deprecated */-#define EVENT_THREAD_WAKEUP        8 /* (thread, other_cap)    */-#define EVENT_GC_START             9 /* ()                     */-#define EVENT_GC_END              10 /* ()                     */-#define EVENT_REQUEST_SEQ_GC      11 /* ()                     */-#define EVENT_REQUEST_PAR_GC      12 /* ()                     */-/* 13, 14 deprecated */-#define EVENT_CREATE_SPARK_THREAD 15 /* (spark_thread)         */-#define EVENT_LOG_MSG             16 /* (message ...)          */-/* EVENT_STARTUP should be deprecated at some point */-#define EVENT_STARTUP             17 /* (num_capabilities)     */-#define EVENT_BLOCK_MARKER        18 /* (size, end_time, capability) */-#define EVENT_USER_MSG            19 /* (message ...)          */-#define EVENT_GC_IDLE             20 /* () */-#define EVENT_GC_WORK             21 /* () */-#define EVENT_GC_DONE             22 /* () */-/* 23, 24 used by eden */-#define EVENT_CAPSET_CREATE       25 /* (capset, capset_type)  */-#define EVENT_CAPSET_DELETE       26 /* (capset)               */-#define EVENT_CAPSET_ASSIGN_CAP   27 /* (capset, cap)          */-#define EVENT_CAPSET_REMOVE_CAP   28 /* (capset, cap)          */-/* the RTS identifier is in the form of "GHC-version rts_way"  */-#define EVENT_RTS_IDENTIFIER      29 /* (capset, name_version_string) */-/* the vectors in these events are null separated strings             */-#define EVENT_PROGRAM_ARGS        30 /* (capset, commandline_vector)  */-#define EVENT_PROGRAM_ENV         31 /* (capset, environment_vector)  */-#define EVENT_OSPROCESS_PID       32 /* (capset, pid)          */-#define EVENT_OSPROCESS_PPID      33 /* (capset, parent_pid)   */-#define EVENT_SPARK_COUNTERS      34 /* (crt,dud,ovf,cnv,gcd,fiz,rem) */-#define EVENT_SPARK_CREATE        35 /* ()                     */-#define EVENT_SPARK_DUD           36 /* ()                     */-#define EVENT_SPARK_OVERFLOW      37 /* ()                     */-#define EVENT_SPARK_RUN           38 /* ()                     */-#define EVENT_SPARK_STEAL         39 /* (victim_cap)           */-#define EVENT_SPARK_FIZZLE        40 /* ()                     */-#define EVENT_SPARK_GC            41 /* ()                     */-#define EVENT_INTERN_STRING       42 /* (string, id) {not used by ghc} */-#define EVENT_WALL_CLOCK_TIME     43 /* (capset, unix_epoch_seconds, nanoseconds) */-#define EVENT_THREAD_LABEL        44 /* (thread, name_string)  */-#define EVENT_CAP_CREATE          45 /* (cap)                  */-#define EVENT_CAP_DELETE          46 /* (cap)                  */-#define EVENT_CAP_DISABLE         47 /* (cap)                  */-#define EVENT_CAP_ENABLE          48 /* (cap)                  */-#define EVENT_HEAP_ALLOCATED      49 /* (heap_capset, alloc_bytes) */-#define EVENT_HEAP_SIZE           50 /* (heap_capset, size_bytes) */-#define EVENT_HEAP_LIVE           51 /* (heap_capset, live_bytes) */-#define EVENT_HEAP_INFO_GHC       52 /* (heap_capset, n_generations,-                                         max_heap_size, alloc_area_size,-                                         mblock_size, block_size) */-#define EVENT_GC_STATS_GHC        53 /* (heap_capset, generation,-                                         copied_bytes, slop_bytes, frag_bytes,-                                         par_n_threads,-                                         par_max_copied, par_tot_copied) */-#define EVENT_GC_GLOBAL_SYNC      54 /* ()                     */-#define EVENT_TASK_CREATE         55 /* (taskID, cap, tid)       */-#define EVENT_TASK_MIGRATE        56 /* (taskID, cap, new_cap)   */-#define EVENT_TASK_DELETE         57 /* (taskID)                 */-#define EVENT_USER_MARKER         58 /* (marker_name) */-#define EVENT_HACK_BUG_T9003      59 /* Hack: see trac #9003 */--/* Range 59 - 59 is available for new GHC and common events. */--/* Range 60 - 80 is used by eden for parallel tracing- * see http://www.mathematik.uni-marburg.de/~eden/- */--/* these are used by eden but are replaced by new alternatives for ghc */-#define EVENT_VERSION                   23 /* (version_string) */-#define EVENT_PROGRAM_INVOCATION        24 /* (commandline_string) */--/* start of parallel trace events */-#define EVENT_EDEN_START_RECEIVE         60 /* () */-#define EVENT_EDEN_END_RECEIVE           61 /* () */-#define EVENT_CREATE_PROCESS             62 /* (process) */-#define EVENT_KILL_PROCESS               63 /* (process) */-#define EVENT_ASSIGN_THREAD_TO_PROCESS   64 /* (thread, process) */-#define EVENT_CREATE_MACHINE             65 /* (machine, startupTime(in 10^-8 seconds after 19xx)) */-#define EVENT_KILL_MACHINE               66 /* (machine) */-#define EVENT_SEND_MESSAGE               67 /* (tag, sender_process, sender_thread, receiver_machine, receiver_process, receiver_inport) */-#define EVENT_RECEIVE_MESSAGE            68 /* (tag, receiver_process, receiver_inport, sender_machine, sender_process, sender_outport, message_size) */-#define EVENT_SEND_RECEIVE_LOCAL_MESSAGE 69 /* (tag, sender_process, sender_thread, receiver_process, receiver_inport) */---/* Range 100 - 139 is reserved for Mercury, see below. */--/* Range 140 - 159 is reserved for Perf events, see below. */--/*- * The highest event code +1 that ghc itself emits. Note that some event- * ranges higher than this are reserved but not currently emitted by ghc.- * This must match the size of the EventDesc[] array in EventLog.c- */-#define NUM_GHC_EVENT_TAGS        70---/* DEPRECATED EVENTS: */-/* These two are deprecated because we don't need to record the thread, it's-   implicit. We have to keep these #defines because for tiresome reasons we-   still need to parse them, see GHC.RTS.Events.ghc6Parsers for details. */-#define EVENT_RUN_SPARK            5 /* (thread)               */-#define EVENT_STEAL_SPARK          6 /* (thread, victim_cap)   */-/* shutdown replaced by EVENT_CAP_DELETE */-#define EVENT_SHUTDOWN             7 /* ()                     */-#if 0-/* ghc changed how it handles sparks so these are no longer applicable */-#define EVENT_CREATE_SPARK        13 /* (cap, thread) */-#define EVENT_SPARK_TO_THREAD     14 /* (cap, thread, spark_thread) */-#endif---/*- * These event types are Mercury specific, Mercury may use up to event number- * 139- */-#define EVENT_FIRST_MER_EVENT       100-#define NUM_MER_EVENTS               14--#define EVENT_MER_START_PAR_CONJUNCTION 100 /* (dyn id, static id) */-#define EVENT_MER_STOP_PAR_CONJUNCTION  101 /* (dyn id) */-#define EVENT_MER_STOP_PAR_CONJUNCT     102 /* (dyn id) */-#define EVENT_MER_CREATE_SPARK          103 /* (dyn id, spark id) */-#define EVENT_MER_FUT_CREATE            104 /* (fut id, memo'd name id) */-#define EVENT_MER_FUT_WAIT_NOSUSPEND    105 /* (fut id) */-#define EVENT_MER_FUT_WAIT_SUSPENDED    106 /* (fut id) */-#define EVENT_MER_FUT_SIGNAL            107 /* (fut id) */-#define EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT \-                                        108 /* () */-#define EVENT_MER_WORK_STEALING         109 /* () */-#define EVENT_MER_LOOKING_FOR_LOCAL_SPARK \-                                        112 /* () */-#define EVENT_MER_RELEASE_CONTEXT       110 /* (context id) */-#define EVENT_MER_ENGINE_SLEEPING       111 /* () */-#define EVENT_MER_CALLING_MAIN          113 /* () */---/*- * These event types are parsed from hardware performance counters logs,- * such as the Linux Performance Counters data available through- * the perf subsystem.- */--#define EVENT_PERF_NAME           140 /* (perf_num, name) */-#define EVENT_PERF_COUNTER        141 /* (perf_num, tid, period) */-#define EVENT_PERF_TRACEPOINT     142 /* (perf_num, tid) */---/*- * Status values for EVENT_STOP_THREAD- *- * 1-5 are the StgRun return values (from includes/rts/Constants.h):- *- * #define HeapOverflow   1- * #define StackOverflow  2- * #define ThreadYielding 3- * #define ThreadBlocked  4- * #define ThreadFinished 5- * #define ForeignCall                  6- * #define BlockedOnMVar                7- * #define BlockedOnMVarRead            20- * NOTE: in GHC-7.8.2, this was 8, and following states shifted one up- * #define BlockedOnBlackHole           8- * #define BlockedOnRead                9- * #define BlockedOnWrite               10- * #define BlockedOnDelay               11- * #define BlockedOnSTM                 12- * #define BlockedOnDoProc              13- * NOTE: unused GUM states 8, 9 (here: 14,15) in rts/Constants.h- * #define BlockedOnCCall               -- not used (see ForeignCall)- * #define BlockedOnCCall_NoUnblockExc  -- not used (see ForeignCall)- * #define BlockedOnMsgThrowTo          16- * NOTE: 16 because unused GUM states ignored in ghc-events lib- *       Otherwise it would be 18, following would be 19, 20- * TODO: verify the above is what GHC does (16/17 could be 18/19) - * #define ThreadMigrating              17- * #define BlockedOnMsgGlobalise        18 - * NOTE: not present in GHC. Mercury-Event?- */-#define THREAD_SUSPENDED_FOREIGN_CALL 6--/*- * Capset type values for EVENT_CAPSET_CREATE- */-#define CAPSET_TYPE_CUSTOM      1  /* reserved for end-user applications */-#define CAPSET_TYPE_OSPROCESS   2  /* caps belong to the same OS process */-#define CAPSET_TYPE_CLOCKDOMAIN 3  /* caps share a local clock/time      */--#ifndef EVENTLOG_CONSTANTS_ONLY--typedef StgWord16 EventTypeNum;-typedef StgWord64 EventTimestamp; /* in nanoseconds */-typedef StgWord32 EventThreadID;-typedef StgWord16 EventCapNo;-typedef StgWord16 EventPayloadSize; /* variable-size events */-typedef StgWord16 EventThreadStatus; /* status for EVENT_STOP_THREAD */-typedef StgWord32 EventCapsetID;-typedef StgWord16 EventCapsetType;   /* types for EVENT_CAPSET_CREATE */-typedef StgWord64 EventTaskId;         /* for EVENT_TASK_* */-typedef StgWord64 EventKernelThreadId; /* for EVENT_TASK_CREATE */--typedef StgWord32 EventProcessID;-typedef StgWord16 EventMachineID;-typedef EventThreadID EventPortID;--#endif--#endif /* RTS_EVENTLOGFORMAT_H */
− GHC/RTS/EventParserUtils.hs
@@ -1,199 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleContexts #-}-{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}--module GHC.RTS.EventParserUtils (-        EventParser(..),-        EventParsers(..),-        GetEvents,-        GetHeader,--        getE,-        getH,-        getString,-        mkEventTypeParsers,-        simpleEvent,-        skip,-    ) where--import Control.Monad-import Control.Monad.Except-import Control.Monad.Reader-import Data.Array-import Data.Binary-import Data.Binary.Get hiding (skip)-import qualified Data.Binary.Get as G-import Data.Binary.Put-import Data.Char-import Data.Function-import Data.IntMap (IntMap)-import qualified Data.IntMap as M-import Data.List--#define EVENTLOG_CONSTANTS_ONLY-#include "EventLogFormat.h"--import GHC.RTS.EventTypes---- reader/Get monad that passes around the event types-type GetEvents a = ReaderT EventParsers (ExceptT String Get) a--newtype EventParsers = EventParsers (Array Int (GetEvents EventInfo))--type GetHeader a = ExceptT String Get a--getH :: Binary a => GetHeader a-getH = lift get--getE :: Binary a => GetEvents a-getE = lift $ lift get--nBytes :: Integral a => a -> GetEvents [Word8]-nBytes n = replicateM (fromIntegral n) getE--getString :: Integral a => a -> GetEvents String-getString len = do-    bytes <- nBytes len-    return $ map (chr . fromIntegral) bytes--skip :: Integral a => a -> GetEvents ()-skip n = lift $ lift $ G.skip (fromIntegral n)------- Code to build the event parser table.---------- Event parser data.  Parsers are either fixed or vairable size.----data EventParser a-    = FixedSizeParser {-        fsp_type        :: Int,-        fsp_size        :: EventTypeSize,-        fsp_parser      :: GetEvents a-    }-    | VariableSizeParser {-        vsp_type        :: Int,-        vsp_parser      :: GetEvents a-    }--get_parser (FixedSizeParser _ _ p) = p-get_parser (VariableSizeParser _ p) = p--get_type (FixedSizeParser t _ _) = t-get_type (VariableSizeParser t _) = t--isFixedSize (FixedSizeParser {}) = True-isFixedSize (VariableSizeParser {}) = False--simpleEvent :: Int -> a -> EventParser a-simpleEvent t p = FixedSizeParser t 0 (return p)---- Our event log format allows new fields to be added to events over--- time.  This means that our parser must be able to handle:------  * old versions of an event, with fewer fields than expected,---  * new versions of an event, with more fields than expected------ The event log file declares the size for each event type, so we can--- select the correct parser for the event type based on its size.  We--- do this once after parsing the header: given the EventTypes, we build--- an array of event parsers indexed by event type.------ For each event type, we may have multiple parsers for different--- versions of the event, indexed by size.  These are listed in the--- eventTypeParsers list below.  For the given log file we select the--- parser for the most recent version (largest size less than the size--- declared in the header).  If this is a newer version of the event--- than we understand, there may be extra bytes that we have to read--- and discard in the parser for this event type.------ Summary:---   if size is smaller that we expect:---     parse the earier version, or ignore the event---   if size is just right:---     parse it---   if size is too big:---     parse the bits we understand and discard the rest--mkEventTypeParsers :: IntMap EventType-                   -> [EventParser EventInfo]-                   -> Array Int (GetEvents EventInfo)-mkEventTypeParsers etypes event_parsers- = accumArray (flip const) undefined (0, max_event_num)-    [ (num, parser num) | num <- [0..max_event_num] ]-    --([ (num, undeclared_etype num) | num <- [0..max_event_num] ] ++-    -- [ (num, parser num etype) | (num, etype) <- M.toList etypes ])-  where-    max_event_num = maximum (M.keys etypes)-    undeclared_etype num = throwError ("undeclared event type: " ++ show num)-    parser_map = makeParserMap event_parsers-    parser num =-            -- Get the event's size from the header,-            -- the first Maybe describes whether the event was declared in the header.-            -- the second Maybe selects between variable and fixed size events.-        let mb_mb_et_size = do et <- M.lookup num etypes-                               return $ size et-            -- Find a parser for the event with the given size.-            maybe_parser mb_et_size = do possible <- M.lookup num parser_map-                                         best_parser <- case mb_et_size of-                                            Nothing -> getVariableParser possible-                                            Just et_size -> getFixedParser et_size possible-                                         return $ get_parser best_parser-            in case mb_mb_et_size of-                -- This event is declared in the log file's header-                Just mb_et_size -> case maybe_parser mb_et_size of-                    -- And we have a valid parser for it.-                    Just p -> p-                    -- But we don't have a valid parser for it.-                    Nothing -> noEventTypeParser num mb_et_size-                -- This event is not declared in the log file's header-                Nothing -> undeclared_etype num---- Find the first variable length parser.-getVariableParser :: [EventParser a] -> Maybe (EventParser a)-getVariableParser [] = Nothing-getVariableParser (x:xs) = case x of-    FixedSizeParser _ _ _ -> getVariableParser xs-    VariableSizeParser _ _ -> Just x---- Find the best fixed size parser, that is to say, the parser for the largest--- event that does not exceed the size of the event as declared in the log--- file's header.-getFixedParser :: EventTypeSize -> [EventParser a] -> Maybe (EventParser a)-getFixedParser size parsers =-        do parser <- ((filter isFixedSize) `pipe`-                      (filter (\x -> (fsp_size x) <= size)) `pipe`-                      (sortBy descending_size) `pipe`-                      maybe_head) parsers-           return $ padParser size parser-    where pipe f g = g . f-          descending_size (FixedSizeParser _ s1 _) (FixedSizeParser _ s2 _) =-            compare s2 s1-          descending_size _ _ = undefined-          maybe_head [] = Nothing-          maybe_head (x:xs) = Just x--padParser :: EventTypeSize -> (EventParser a) -> (EventParser a)-padParser size (VariableSizeParser t p) = VariableSizeParser t p-padParser size (FixedSizeParser t orig_size orig_p) = FixedSizeParser t size p-    where p = if (size == orig_size)-                then orig_p-                else do d <- orig_p-                        skip (size - orig_size)-                        return d--makeParserMap :: [EventParser a] -> IntMap [EventParser a]-makeParserMap = foldl buildParserMap M.empty-    where buildParserMap map parser = M.alter (addParser parser) (get_type parser) map-          addParser p Nothing = Just [p]-          addParser p (Just ps) = Just (p:ps)--noEventTypeParser :: Int -> Maybe EventTypeSize-                  -> GetEvents EventInfo-noEventTypeParser num mb_size = do-  bytes <- case mb_size of-             Just n  -> return n-             Nothing -> getE :: GetEvents Word16-  skip bytes-  return UnknownEvent{ ref = fromIntegral num }
− GHC/RTS/EventTypes.hs
@@ -1,513 +0,0 @@-{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}--module GHC.RTS.EventTypes where--import Data.Word (Word8, Word16, Word32, Word64)-import Data.Binary---- EventType.-type EventTypeNum = Word16-type EventTypeDescLen = Word32-type EventTypeDesc = String-type EventTypeSize = Word16--- Event.-type EventDescription = String-type Timestamp = Word64-type ThreadId = Word32-type CapNo = Word16-type Marker = Word32-type BlockSize = Word32-type RawThreadStopStatus = Word16-type StringId = Word32-type Capset   = Word32-type PerfEventTypeNum = Word32-type TaskId = Word64-type PID = Word32--newtype KernelThreadId = KernelThreadId { kernelThreadId :: Word64 }-  deriving (Eq, Ord, Show)-instance Binary KernelThreadId where-  put (KernelThreadId tid) = put tid-  get = fmap KernelThreadId get---- Types for Parallel-RTS Extension-type ProcessId = Word32-type MachineId = Word16-type PortId = ThreadId-type MessageSize = Word32-type RawMsgTag = Word8---- These types are used by Mercury events.-type ParConjDynId = Word64-type ParConjStaticId = StringId-type SparkId = Word32-type FutureId = Word64--sz_event_type_num :: EventTypeSize-sz_event_type_num = 2-sz_cap :: EventTypeSize-sz_cap  = 2-sz_time :: EventTypeSize-sz_time = 8-sz_tid :: EventTypeSize-sz_tid  = 4-sz_old_tid :: EventTypeSize-sz_old_tid  = 8 -- GHC 6.12 was using 8 for ThreadID when declaring the size-                -- of events, but was actually using 32 bits for ThreadIDs-sz_capset :: EventTypeSize-sz_capset = 4-sz_capset_type :: EventTypeSize-sz_capset_type = 2-sz_block_size :: EventTypeSize-sz_block_size = 4-sz_block_event :: EventTypeSize-sz_block_event = fromIntegral (sz_event_type_num + sz_time + sz_block_size-    + sz_time + sz_cap)-sz_pid :: EventTypeSize-sz_pid = 4-sz_taskid :: EventTypeSize-sz_taskid = 8-sz_kernel_tid :: EventTypeSize-sz_kernel_tid = 8-sz_th_stop_status :: EventTypeSize-sz_th_stop_status = 2-sz_string_id :: EventTypeSize-sz_string_id = 4-sz_perf_num :: EventTypeSize-sz_perf_num = 4---- Sizes for Parallel-RTS event fields-sz_procid, sz_mid, sz_mes, sz_realtime, sz_msgtag :: EventTypeSize-sz_procid  = 4-sz_mid  = 2-sz_mes  = 4-sz_realtime = 8-sz_msgtag  = 1---- Sizes for Mercury event fields.-sz_par_conj_dyn_id :: EventTypeSize-sz_par_conj_dyn_id = 8-sz_par_conj_static_id :: EventTypeSize-sz_par_conj_static_id = sz_string_id-sz_spark_id :: EventTypeSize-sz_spark_id = 4-sz_future_id :: EventTypeSize-sz_future_id = 8--{-- - Data type delcarations to build the GHC RTS data format,- - which is a (header, data) pair.- -- - Header contains EventTypes.- - Data contains Events.- -}-data EventLog =-  EventLog {-    header :: Header,-    dat    :: Data-  } deriving Show--newtype Header = Header {-     eventTypes :: [EventType]-  } deriving (Show, Eq)--data Data = Data {-     events :: [Event]-  } deriving Show--data EventType =-  EventType {-    num  :: EventTypeNum,-    desc :: EventTypeDesc,-    size :: Maybe EventTypeSize -- ^ 'Nothing' indicates variable size-  } deriving (Show, Eq)--data Event =-  Event {-    time :: {-# UNPACK #-}!Timestamp,-    spec :: EventInfo-  } deriving Show--data EventInfo--  -- pseudo events-  = EventBlock         { end_time     :: Timestamp,-                         cap          :: Int,-                         block_events :: [Event]-                       }-  | UnknownEvent       { ref  :: {-# UNPACK #-}!EventTypeNum }--  -- init and shutdown-  | Startup            { n_caps :: Int-                       }-  -- EVENT_SHUTDOWN is replaced by EVENT_CAP_DELETE and GHC 7.6+-  -- no longer generate the event; should be removed at some point-  | Shutdown           { }--  -- thread scheduling-  | CreateThread       { thread :: {-# UNPACK #-}!ThreadId-                       }-  | RunThread          { thread :: {-# UNPACK #-}!ThreadId-                       }-  | StopThread         { thread :: {-# UNPACK #-}!ThreadId,-                         status :: ThreadStopStatus-                       }-  | ThreadRunnable     { thread :: {-# UNPACK #-}!ThreadId-                       }-  | MigrateThread      { thread :: {-# UNPACK #-}!ThreadId,-                         newCap :: {-# UNPACK #-}!Int-                       }-  | WakeupThread       { thread :: {-# UNPACK #-}!ThreadId,-                         otherCap :: {-# UNPACK #-}!Int-                       }-  | ThreadLabel        { thread :: {-# UNPACK #-}!ThreadId,-                         threadlabel :: String-                       }--  -- par sparks-  | CreateSparkThread  { sparkThread :: {-# UNPACK #-}!ThreadId-                       }-  | SparkCounters      { sparksCreated, sparksDud, sparksOverflowed,-                         sparksConverted, sparksFizzled, sparksGCd,-                         sparksRemaining :: {-# UNPACK #-}! Word64-                       }-  | SparkCreate        { }-  | SparkDud           { }-  | SparkOverflow      { }-  | SparkRun           { }-  | SparkSteal         { victimCap :: {-# UNPACK #-}!Int }-  | SparkFizzle        { }-  | SparkGC            { }--  -- tasks-  | TaskCreate         { taskId :: TaskId,-                         cap :: {-# UNPACK #-}!Int,-                         tid :: {-# UNPACK #-}!KernelThreadId-                       }-  | TaskMigrate        { taskId :: TaskId,-                         cap :: {-# UNPACK #-}!Int,-                         new_cap :: {-# UNPACK #-}!Int-                       }-  | TaskDelete         { taskId :: TaskId }--  -- garbage collection-  | RequestSeqGC       { }-  | RequestParGC       { }-  | StartGC            { }-  | GCWork             { }-  | GCIdle             { }-  | GCDone             { }-  | EndGC              { }-  | GlobalSyncGC       { }-  | GCStatsGHC         { heapCapset   :: {-# UNPACK #-}!Capset-                       , gen          :: {-# UNPACK #-}!Int-                       , copied       :: {-# UNPACK #-}!Word64-                       , slop, frag   :: {-# UNPACK #-}!Word64-                       , parNThreads  :: {-# UNPACK #-}!Int-                       , parMaxCopied :: {-# UNPACK #-}!Word64-                       , parTotCopied :: {-# UNPACK #-}!Word64-                       }--  -- heap statistics-  | HeapAllocated      { heapCapset  :: {-# UNPACK #-}!Capset-                       , allocBytes  :: {-# UNPACK #-}!Word64-                       }-  | HeapSize           { heapCapset  :: {-# UNPACK #-}!Capset-                       , sizeBytes   :: {-# UNPACK #-}!Word64-                       }-  | HeapLive           { heapCapset  :: {-# UNPACK #-}!Capset-                       , liveBytes   :: {-# UNPACK #-}!Word64-                       }-  | HeapInfoGHC        { heapCapset    :: {-# UNPACK #-}!Capset-                       , gens          :: {-# UNPACK #-}!Int-                       , maxHeapSize   :: {-# UNPACK #-}!Word64-                       , allocAreaSize :: {-# UNPACK #-}!Word64-                       , mblockSize    :: {-# UNPACK #-}!Word64-                       , blockSize     :: {-# UNPACK #-}!Word64-                       }--  -- adjusting the number of capabilities on the fly-  | CapCreate          { cap :: {-# UNPACK #-}!Int-                       }-  | CapDelete          { cap :: {-# UNPACK #-}!Int-                       }-  | CapDisable         { cap :: {-# UNPACK #-}!Int-                       }-  | CapEnable          { cap :: {-# UNPACK #-}!Int-                       }--  -- capability sets-  | CapsetCreate       { capset     :: {-# UNPACK #-}!Capset-                       , capsetType :: CapsetType-                       }-  | CapsetDelete       { capset :: {-# UNPACK #-}!Capset-                       }-  | CapsetAssignCap    { capset :: {-# UNPACK #-}!Capset-                       , cap    :: {-# UNPACK #-}!Int-                       }-  | CapsetRemoveCap    { capset :: {-# UNPACK #-}!Capset-                       , cap    :: {-# UNPACK #-}!Int-                       }--  -- program/process info-  | RtsIdentifier      { capset :: {-# UNPACK #-}!Capset-                       , rtsident :: String-                       }-  | ProgramArgs        { capset :: {-# UNPACK #-}!Capset-                       , args   :: [String]-                       }-  | ProgramEnv         { capset :: {-# UNPACK #-}!Capset-                       , env    :: [String]-                       }-  | OsProcessPid       { capset :: {-# UNPACK #-}!Capset-                       , pid    :: {-# UNPACK #-}!PID-                       }-  | OsProcessParentPid { capset :: {-# UNPACK #-}!Capset-                       , ppid   :: {-# UNPACK #-}!PID-                       }-  | WallClockTime      { capset :: {-# UNPACK #-}!Capset-                       , sec    :: {-# UNPACK #-}!Word64-                       , nsec   :: {-# UNPACK #-}!Word32-                       }--  -- messages-  | Message            { msg :: String }-  | UserMessage        { msg :: String }-  | UserMarker         { markername :: String }--  -- Events emitted by a parallel RTS-   -- Program /process info (tools might prefer newer variants above)-  | Version            { version :: String }-  | ProgramInvocation  { commandline :: String }-   -- startup and shutdown (incl. real start time, not first log entry)-  | CreateMachine      { machine :: {-# UNPACK #-} !MachineId,-                         realtime    :: {-# UNPACK #-} !Timestamp}-  | KillMachine        { machine ::  {-# UNPACK #-} !MachineId }-   -- Haskell processes mgmt (thread groups that share heap and communicate)-  | CreateProcess      { process :: {-# UNPACK #-} !ProcessId }-  | KillProcess        { process :: {-# UNPACK #-} !ProcessId }-  | AssignThreadToProcess { thread :: {-# UNPACK #-} !ThreadId,-                            process :: {-# UNPACK #-} !ProcessId-                          }-   -- communication between processes-  | EdenStartReceive   { }-  | EdenEndReceive     { }-  | SendMessage        { mesTag :: !MessageTag,-                         senderProcess :: {-# UNPACK #-} !ProcessId,-                         senderThread :: {-# UNPACK #-} !ThreadId,-                         receiverMachine ::  {-# UNPACK #-} !MachineId,-                         receiverProcess :: {-# UNPACK #-} !ProcessId,-                         receiverInport :: {-# UNPACK #-} !PortId-                       }-  | ReceiveMessage     { mesTag :: !MessageTag,-                         receiverProcess :: {-# UNPACK #-} !ProcessId,-                         receiverInport :: {-# UNPACK #-} !PortId,-                         senderMachine ::  {-# UNPACK #-} !MachineId,-                         senderProcess :: {-# UNPACK #-} !ProcessId,-                         senderThread :: {-# UNPACK #-} !ThreadId,-                         messageSize :: {-# UNPACK #-} !MessageSize-                       }-  | SendReceiveLocalMessage { mesTag :: !MessageTag,-                              senderProcess :: {-# UNPACK #-} !ProcessId,-                              senderThread :: {-# UNPACK #-} !ThreadId,-                              receiverProcess :: {-# UNPACK #-} !ProcessId,-                              receiverInport :: {-# UNPACK #-} !PortId-                            }--  -- These events have been added for Mercury's benifit but are generally-  -- useful.-  | InternString       { str :: String, sId :: {-# UNPACK #-}!StringId }--  -- Mercury specific events.-  | MerStartParConjunction {-        dyn_id      :: {-# UNPACK #-}!ParConjDynId,-        static_id   :: {-# UNPACK #-}!ParConjStaticId-    }-  | MerEndParConjunction {-        dyn_id      :: {-# UNPACK #-}!ParConjDynId-    }-  | MerEndParConjunct {-        dyn_id      :: {-# UNPACK #-}!ParConjDynId-    }-  | MerCreateSpark {-        dyn_id      :: {-# UNPACK #-}!ParConjDynId,-        spark_id    :: {-# UNPACK #-}!SparkId-    }-  | MerFutureCreate {-        future_id   :: {-# UNPACK #-}!FutureId,-        name_id     :: {-# UNPACK #-}!StringId-    }-  | MerFutureWaitNosuspend {-        future_id   :: {-# UNPACK #-}!FutureId-    }-  | MerFutureWaitSuspended {-        future_id   :: {-# UNPACK #-}!FutureId-    }-  | MerFutureSignal {-        future_id   :: {-# UNPACK #-}!FutureId-    }-  | MerLookingForGlobalThread-  | MerWorkStealing-  | MerLookingForLocalSpark-  | MerReleaseThread {-        thread_id   :: {-# UNPACK #-}!ThreadId-    }-  | MerCapSleeping-  | MerCallingMain--  -- perf events-  | PerfName           { perfNum :: {-# UNPACK #-}!PerfEventTypeNum-                       , name    :: String-                       }-  | PerfCounter        { perfNum :: {-# UNPACK #-}!PerfEventTypeNum-                       , tid     :: {-# UNPACK #-}!KernelThreadId-                       , period  :: {-# UNPACK #-}!Word64-                       }-  | PerfTracepoint     { perfNum :: {-# UNPACK #-}!PerfEventTypeNum-                       , tid     :: {-# UNPACK #-}!KernelThreadId-                       }--  deriving Show--{- [Note: Stop status in GHC-7.8.2]--In GHC-7.7, a new thread block reason "BlockedOnMVarRead" was-introduced, and placed adjacent to BlockedOnMVar (7). Therefore, event-logs produced by GHC pre-7.8.2 encode BlockedOnBlackHole and following-as 8..18, whereas GHC-7.8.2 event logs encode them as 9..19.-Later, the prior event numbering was restored for GHC-7.8.3.-See GHC bug #9003 for a discussion.--The parsers in Events.hs have to be adapted accordingly, providing-special ghc-7.8.2 parsers for the thread-stop event if GHC-7.8.2-produced the eventlog.-The EVENT_USER_MARKER was not present in GHC-7.6.3, and a new event-EVENT_HACK_BUG_T9003 was added in GHC-7.8.3, so we take presence of-USER_MARKER and absence of HACK_BUG_T9003 as an indication that-ghc-7.8.2 parsers should be used.--}----sync with ghc/includes/Constants.h-data ThreadStopStatus- = NoStatus- | HeapOverflow- | StackOverflow- | ThreadYielding- | ThreadBlocked- | ThreadFinished- | ForeignCall- | BlockedOnMVar- | BlockedOnMVarRead   -- since GHC-7.8, see [Stop status since GHC-7.7]- | BlockedOnBlackHole- | BlockedOnRead- | BlockedOnWrite- | BlockedOnDelay- | BlockedOnSTM- | BlockedOnDoProc- | BlockedOnCCall- | BlockedOnCCall_NoUnblockExc- | BlockedOnMsgThrowTo- | ThreadMigrating- | BlockedOnMsgGlobalise- | BlockedOnBlackHoleOwnedBy {-# UNPACK #-}!ThreadId- deriving (Show)---- normal GHC encoding, see [Stop status in GHC-7.8.2]-mkStopStatus :: RawThreadStopStatus -> ThreadStopStatus-mkStopStatus n = case n of- 0  ->  NoStatus- 1  ->  HeapOverflow- 2  ->  StackOverflow- 3  ->  ThreadYielding- 4  ->  ThreadBlocked- 5  ->  ThreadFinished- 6  ->  ForeignCall- 7  ->  BlockedOnMVar- 8  ->  BlockedOnBlackHole- 9  ->  BlockedOnRead- 10 ->  BlockedOnWrite- 11 ->  BlockedOnDelay- 12 ->  BlockedOnSTM- 13 ->  BlockedOnDoProc- 14 ->  BlockedOnCCall- 15 ->  BlockedOnCCall_NoUnblockExc- 16 ->  BlockedOnMsgThrowTo- 17 ->  ThreadMigrating- 18 ->  BlockedOnMsgGlobalise- 19 ->  NoStatus -- yeuch... this one does not actually exist in GHC eventlogs- 20 ->  BlockedOnMVarRead -- since GHC-7.8.3- _  ->  error "mkStat"---- GHC 7.8.2 encoding, see [Stop status in GHC-7.8.2]-mkStopStatus782 :: RawThreadStopStatus -> ThreadStopStatus-mkStopStatus782 n = case n of- 0  ->  NoStatus- 1  ->  HeapOverflow- 2  ->  StackOverflow- 3  ->  ThreadYielding- 4  ->  ThreadBlocked- 5  ->  ThreadFinished- 6  ->  ForeignCall- 7  ->  BlockedOnMVar- 8  ->  BlockedOnMVarRead -- in GHC-7.8.2- 9  ->  BlockedOnBlackHole- 10 ->  BlockedOnRead- 11 ->  BlockedOnWrite- 12 ->  BlockedOnDelay- 13 ->  BlockedOnSTM- 14 ->  BlockedOnDoProc- 15 ->  BlockedOnCCall- 16 ->  BlockedOnCCall_NoUnblockExc- 17 ->  BlockedOnMsgThrowTo- 18 ->  ThreadMigrating- 19 ->  BlockedOnMsgGlobalise- _  ->  error "mkStat"--maxThreadStopStatusPre77, maxThreadStopStatus782, maxThreadStopStatus -    :: RawThreadStopStatus-maxThreadStopStatusPre77  = 18 -- see [Stop status in GHC-7.8.2]-maxThreadStopStatus782    = 19 -- need to distinguish three cases-maxThreadStopStatus = 20--data CapsetType- = CapsetCustom- | CapsetOsProcess- | CapsetClockDomain- | CapsetUnknown- deriving Show--mkCapsetType :: Word16 -> CapsetType-mkCapsetType n = case n of- 1 -> CapsetCustom- 2 -> CapsetOsProcess- 3 -> CapsetClockDomain- _ -> CapsetUnknown---- | An event annotated with the Capability that generated it, if any-data CapEvent-  = CapEvent { ce_cap   :: Maybe Int,-               ce_event :: Event-               -- we could UNPACK ce_event, but the Event constructor-               -- might be shared, in which case we could end up-               -- increasing the space usage.-             } deriving Show----sync with ghc/parallel/PEOpCodes.h-data MessageTag-  = Ready | NewPE | PETIDS | Finish-  | FailPE | RFork | Connect | DataMes-  | Head | Constr | Part | Terminate-  | Packet-  -- with GUM and its variants, add:-  -- ...| Fetch | Resume | Ack-  -- ...| Fish | Schedule | Free | Reval | Shark-  deriving (Enum, Show)-offset :: RawMsgTag-offset = 0x50---- decoder and encoder-toMsgTag :: RawMsgTag -> MessageTag-toMsgTag = toEnum . fromIntegral . (\n -> n - offset)--fromMsgTag :: MessageTag -> RawMsgTag-fromMsgTag = (+ offset) . fromIntegral . fromEnum
− GHC/RTS/Events.hs
@@ -1,1643 +0,0 @@-{-# LANGUAGE CPP,BangPatterns,PatternGuards #-}-{-# OPTIONS_GHC -funbox-strict-fields -fwarn-incomplete-patterns #-}-{-- -   Parser functions for GHC RTS EventLog framework.- -}--module GHC.RTS.Events (-       -- * The event log types-       EventLog(..),-       EventType(..),-       Event(..),-       EventInfo(..),-       ThreadStopStatus(..),-       Header(..),-       Data(..),-       CapsetType(..),-       Timestamp,-       ThreadId,-       TaskId,-       KernelThreadId(..),-       -- some types for the parallel RTS-       ProcessId,-       MachineId,-       PortId,-       MessageSize,-       MessageTag(..),--       -- * Reading and writing event logs-       readEventLogFromFile, getEventLog,-       writeEventLogToFile,--       -- * Utilities-       CapEvent(..), sortEvents, groupEvents, sortGroups,-       buildEventTypeMap,--       -- * Printing-       showEventInfo, showThreadStopStatus,-       ppEventLog, ppEventType, ppEvent,--       -- * Perf events-       nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT,-       sz_perf_num, sz_kernel_tid-  ) where--{- Libraries. -}-import Data.Binary-import Data.Binary.Get hiding (skip)-import qualified Data.Binary.Get as G-import Data.Binary.Put-import Control.Monad-import Data.IntMap (IntMap)-import qualified Data.IntMap as M-import Control.Monad.Reader-import Control.Monad.Except-import qualified Data.ByteString.Lazy as L-import Data.Function-import Data.List-import Data.Either-import Data.Maybe-import Text.Printf-import Data.Array--import GHC.RTS.EventTypes-import GHC.RTS.EventParserUtils--#define EVENTLOG_CONSTANTS_ONLY-#include "EventLogFormat.h"----------------------------------------------------------------------------------- Binary instances--getEventType :: GetHeader EventType-getEventType = do-           etNum <- getH-           size <- getH :: GetHeader EventTypeSize-           let etSize = if size == 0xffff then Nothing else Just size-           -- 0xffff indicates variable-sized event-           etDescLen <- getH :: GetHeader EventTypeDescLen-           etDesc <- getEtDesc (fromIntegral etDescLen)-           etExtraLen <- getH :: GetHeader Word32-           lift $ G.skip (fromIntegral etExtraLen)-           ete <- getH :: GetHeader Marker-           when (ete /= EVENT_ET_END) $-              throwError ("Event Type end marker not found.")-           return (EventType etNum etDesc etSize)-           where-             getEtDesc :: Int -> GetHeader [Char]-             getEtDesc s = replicateM s (getH :: GetHeader Char)--getHeader :: GetHeader Header-getHeader = do-           hdrb <- getH :: GetHeader Marker-           when (hdrb /= EVENT_HEADER_BEGIN) $-                throwError "Header begin marker not found"-           hetm <- getH :: GetHeader Marker-           when (hetm /= EVENT_HET_BEGIN) $-                throwError "Header Event Type begin marker not found"-           ets <- getEventTypes-           emark <- getH :: GetHeader Marker-           when (emark /= EVENT_HEADER_END) $-                throwError "Header end marker not found"-           return (Header ets)-     where-       getEventTypes :: GetHeader [EventType]-       getEventTypes = do-           m <- getH :: GetHeader Marker-           case () of-            _ | m == EVENT_ET_BEGIN -> do-                   et <- getEventType-                   nextET <- getEventTypes-                   return (et : nextET)-              | m == EVENT_HET_END ->-                   return []-              | otherwise ->-                   throwError "Malformed list of Event Types in header"--getEvent :: EventParsers -> GetEvents (Maybe Event)-getEvent (EventParsers parsers) = do-  etRef <- getE :: GetEvents EventTypeNum-  if (etRef == EVENT_DATA_END)-     then return Nothing-     else do !ts   <- getE-             -- trace ("event: " ++ show etRef) $ do-             spec <- parsers ! fromIntegral etRef-             return (Just (Event ts spec))------- standardEventParsers.----standardParsers :: [EventParser EventInfo]-standardParsers = [- (FixedSizeParser EVENT_STARTUP sz_cap (do -- (n_caps)-      c <- getE :: GetEvents CapNo-      return Startup{ n_caps = fromIntegral c }-   )),-- (FixedSizeParser EVENT_BLOCK_MARKER (sz_block_size + sz_time + sz_cap) (do -- (size, end_time, cap)-      block_size <- getE :: GetEvents BlockSize-      end_time <- getE :: GetEvents Timestamp-      c <- getE :: GetEvents CapNo-      lbs <- lift . lift $ getLazyByteString ((fromIntegral block_size) --                                              (fromIntegral sz_block_event))-      eparsers <- ask-      let e_events = runGet (runExceptT $ runReaderT (getEventBlock eparsers) eparsers) lbs-      return EventBlock{ end_time=end_time,-                         cap= fromIntegral c,-                         block_events=case e_events of-                                        Left s -> error s-                                        Right es -> es }-   )),-- -- EVENT_SHUTDOWN is replaced by EVENT_CAP_DELETE and GHC 7.6+- -- no longer generate the event; should be removed at some point- (simpleEvent EVENT_SHUTDOWN Shutdown),-- (simpleEvent EVENT_REQUEST_SEQ_GC RequestSeqGC),-- (simpleEvent EVENT_REQUEST_PAR_GC RequestParGC),-- (simpleEvent EVENT_GC_START StartGC),-- (simpleEvent EVENT_GC_WORK GCWork),-- (simpleEvent EVENT_GC_IDLE GCIdle),-- (simpleEvent EVENT_GC_DONE GCDone),-- (simpleEvent EVENT_GC_END EndGC),-- (simpleEvent EVENT_GC_GLOBAL_SYNC GlobalSyncGC),-- (FixedSizeParser EVENT_GC_STATS_GHC (sz_capset + 2 + 5*8 + 4) (do  -- (heap_capset, generation, copied_bytes, slop_bytes, frag_bytes, par_n_threads, par_max_copied, par_tot_copied)-      heapCapset   <- getE-      gen          <- getE :: GetEvents Word16-      copied       <- getE :: GetEvents Word64-      slop         <- getE :: GetEvents Word64-      frag         <- getE :: GetEvents Word64-      parNThreads  <- getE :: GetEvents Word32-      parMaxCopied <- getE :: GetEvents Word64-      parTotCopied <- getE :: GetEvents Word64-      return GCStatsGHC{ gen = fromIntegral gen-                       , parNThreads = fromIntegral parNThreads-                       , ..}- )),-- (FixedSizeParser EVENT_HEAP_ALLOCATED (sz_capset + 8) (do  -- (heap_capset, alloc_bytes)-      heapCapset <- getE-      allocBytes <- getE-      return HeapAllocated{..}- )),-- (FixedSizeParser EVENT_HEAP_SIZE (sz_capset + 8) (do  -- (heap_capset, size_bytes)-      heapCapset <- getE-      sizeBytes  <- getE-      return HeapSize{..}- )),-- (FixedSizeParser EVENT_HEAP_LIVE (sz_capset + 8) (do  -- (heap_capset, live_bytes)-      heapCapset <- getE-      liveBytes  <- getE-      return HeapLive{..}- )),-- (FixedSizeParser EVENT_HEAP_INFO_GHC (sz_capset + 2 + 4*8) (do  -- (heap_capset, n_generations, max_heap_size, alloc_area_size, mblock_size, block_size)-      heapCapset    <- getE-      gens          <- getE :: GetEvents Word16-      maxHeapSize   <- getE :: GetEvents Word64-      allocAreaSize <- getE :: GetEvents Word64-      mblockSize    <- getE :: GetEvents Word64-      blockSize     <- getE :: GetEvents Word64-      return HeapInfoGHC{gens = fromIntegral gens, ..}- )),-- (FixedSizeParser EVENT_CAP_CREATE (sz_cap) (do  -- (cap)-      cap <- getE :: GetEvents CapNo-      return CapCreate{cap = fromIntegral cap}- )),-- (FixedSizeParser EVENT_CAP_DELETE (sz_cap) (do  -- (cap)-      cap <- getE :: GetEvents CapNo-      return CapDelete{cap = fromIntegral cap}- )),-- (FixedSizeParser EVENT_CAP_DISABLE (sz_cap) (do  -- (cap)-      cap <- getE :: GetEvents CapNo-      return CapDisable{cap = fromIntegral cap}- )),-- (FixedSizeParser EVENT_CAP_ENABLE (sz_cap) (do  -- (cap)-      cap <- getE :: GetEvents CapNo-      return CapEnable{cap = fromIntegral cap}- )),-- (FixedSizeParser EVENT_CAPSET_CREATE (sz_capset + sz_capset_type) (do -- (capset, capset_type)-      cs <- getE-      ct <- fmap mkCapsetType getE-      return CapsetCreate{capset=cs,capsetType=ct}-   )),-- (FixedSizeParser EVENT_CAPSET_DELETE sz_capset (do -- (capset)-      cs <- getE-      return CapsetDelete{capset=cs}-   )),-- (FixedSizeParser EVENT_CAPSET_ASSIGN_CAP (sz_capset + sz_cap) (do -- (capset, cap)-      cs <- getE-      cp <- getE :: GetEvents CapNo-      return CapsetAssignCap{capset=cs,cap=fromIntegral cp}-   )),-- (FixedSizeParser EVENT_CAPSET_REMOVE_CAP (sz_capset + sz_cap) (do -- (capset, cap)-      cs <- getE-      cp <- getE :: GetEvents CapNo-      return CapsetRemoveCap{capset=cs,cap=fromIntegral cp}-   )),-- (FixedSizeParser EVENT_OSPROCESS_PID (sz_capset + sz_pid) (do -- (capset, pid)-      cs <- getE-      pd <- getE-      return OsProcessPid{capset=cs,pid=pd}-   )),-- (FixedSizeParser EVENT_OSPROCESS_PPID (sz_capset + sz_pid) (do -- (capset, ppid)-      cs <- getE-      pd <- getE-      return OsProcessParentPid{capset=cs,ppid=pd}-  )),-- (FixedSizeParser EVENT_WALL_CLOCK_TIME (sz_capset + 8 + 4) (do -- (capset, unix_epoch_seconds, nanoseconds)-      cs <- getE-      s  <- getE-      ns <- getE-      return WallClockTime{capset=cs,sec=s,nsec=ns}-  )),-- (VariableSizeParser EVENT_LOG_MSG (do -- (msg)-      num <- getE :: GetEvents Word16-      string <- getString num-      return Message{ msg = string }-   )),- (VariableSizeParser EVENT_USER_MSG (do -- (msg)-      num <- getE :: GetEvents Word16-      string <- getString num-      return UserMessage{ msg = string }-   )),-    (VariableSizeParser EVENT_USER_MARKER (do -- (markername)-      num <- getE :: GetEvents Word16-      string <- getString num-      return UserMarker{ markername = string }-   )),- (VariableSizeParser EVENT_PROGRAM_ARGS (do -- (capset, [arg])-      num <- getE :: GetEvents Word16-      cs <- getE-      string <- getString (num - sz_capset)-      return ProgramArgs{ capset = cs-                        , args = splitNull string }-   )),- (VariableSizeParser EVENT_PROGRAM_ENV (do -- (capset, [arg])-      num <- getE :: GetEvents Word16-      cs <- getE-      string <- getString (num - sz_capset)-      return ProgramEnv{ capset = cs-                       , env = splitNull string }-   )),- (VariableSizeParser EVENT_RTS_IDENTIFIER (do -- (capset, str)-      num <- getE :: GetEvents Word16-      cs <- getE-      string <- getString (num - sz_capset)-      return RtsIdentifier{ capset = cs-                          , rtsident = string }-   )),-- (VariableSizeParser EVENT_INTERN_STRING (do -- (str, id)-      num <- getE :: GetEvents Word16-      string <- getString (num - sz_string_id)-      sId <- getE :: GetEvents StringId-      return (InternString string sId)-    )),-- (VariableSizeParser EVENT_THREAD_LABEL (do -- (thread, str)-      num <- getE :: GetEvents Word16-      tid <- getE-      str <- getString (num - sz_tid)-      return ThreadLabel{ thread      = tid-                        , threadlabel = str }-    ))- ]---- Parsers valid for GHC7 but not GHC6.-ghc7Parsers :: [EventParser EventInfo]-ghc7Parsers = [- (FixedSizeParser EVENT_CREATE_THREAD sz_tid (do  -- (thread)-      t <- getE-      return CreateThread{thread=t}-   )),-- (FixedSizeParser EVENT_RUN_THREAD sz_tid (do  --  (thread)-      t <- getE-      return RunThread{thread=t}-   )),-- (FixedSizeParser EVENT_THREAD_RUNNABLE sz_tid (do  -- (thread)-      t <- getE-      return ThreadRunnable{thread=t}-   )),-- (FixedSizeParser EVENT_MIGRATE_THREAD (sz_tid + sz_cap) (do  --  (thread, newCap)-      t  <- getE-      nc <- getE :: GetEvents CapNo-      return MigrateThread{thread=t,newCap=fromIntegral nc}-   )),-- -- Yes, EVENT_RUN/STEAL_SPARK are deprecated, but see the explanation in the- -- 'ghc6Parsers' section below. Since we're parsing them anyway, we might- -- as well convert them to the new SparkRun/SparkSteal events.- (FixedSizeParser EVENT_RUN_SPARK sz_tid (do  -- (thread)-      _ <- getE :: GetEvents ThreadId-      return SparkRun-   )),-- (FixedSizeParser EVENT_STEAL_SPARK (sz_tid + sz_cap) (do  -- (thread, victimCap)-      _  <- getE :: GetEvents ThreadId-      vc <- getE :: GetEvents CapNo-      return SparkSteal{victimCap=fromIntegral vc}-   )),-- (FixedSizeParser EVENT_CREATE_SPARK_THREAD sz_tid (do  -- (sparkThread)-      st <- getE :: GetEvents ThreadId-      return CreateSparkThread{sparkThread=st}-   )),-- (FixedSizeParser EVENT_SPARK_COUNTERS (7*8) (do -- (crt,dud,ovf,cnv,gcd,fiz,rem)-      crt <- getE :: GetEvents Word64-      dud <- getE :: GetEvents Word64-      ovf <- getE :: GetEvents Word64-      cnv <- getE :: GetEvents Word64-      gcd <- getE :: GetEvents Word64-      fiz <- getE :: GetEvents Word64-      rem <- getE :: GetEvents Word64-      return SparkCounters{sparksCreated    = crt, sparksDud       = dud,-                           sparksOverflowed = ovf, sparksConverted = cnv,-                           -- Warning: order of fiz and gcd reversed!-                           sparksFizzled    = fiz, sparksGCd       = gcd,-                           sparksRemaining  = rem}-   )),-- (simpleEvent EVENT_SPARK_CREATE   SparkCreate),- (simpleEvent EVENT_SPARK_DUD      SparkDud),- (simpleEvent EVENT_SPARK_OVERFLOW SparkOverflow),- (simpleEvent EVENT_SPARK_RUN      SparkRun),- (FixedSizeParser EVENT_SPARK_STEAL sz_cap (do  -- (victimCap)-      vc <- getE :: GetEvents CapNo-      return SparkSteal{victimCap=fromIntegral vc}-   )),- (simpleEvent EVENT_SPARK_FIZZLE   SparkFizzle),- (simpleEvent EVENT_SPARK_GC       SparkGC),-- (FixedSizeParser EVENT_TASK_CREATE (sz_taskid + sz_cap + sz_kernel_tid) (do  -- (taskID, cap, tid)-      taskId <- getE :: GetEvents TaskId-      cap    <- getE :: GetEvents CapNo-      tid    <- getE :: GetEvents KernelThreadId-      return TaskCreate{ taskId, cap = fromIntegral cap, tid }-   )),- (FixedSizeParser EVENT_TASK_MIGRATE (sz_taskid + sz_cap*2) (do  -- (taskID, cap, new_cap)-      taskId  <- getE :: GetEvents TaskId-      cap     <- getE :: GetEvents CapNo-      new_cap <- getE :: GetEvents CapNo-      return TaskMigrate{ taskId, cap = fromIntegral cap-                                , new_cap = fromIntegral new_cap-                        }-   )),- (FixedSizeParser EVENT_TASK_DELETE (sz_taskid) (do  -- (taskID)-      taskId <- getE :: GetEvents TaskId-      return TaskDelete{ taskId }-   )),-- (FixedSizeParser EVENT_THREAD_WAKEUP (sz_tid + sz_cap) (do  -- (thread, other_cap)-      t <- getE-      oc <- getE :: GetEvents CapNo-      return WakeupThread{thread=t,otherCap=fromIntegral oc}-   ))- ]---- special thread stop event parsers for GHC version 7.8.2--- see [Stop status in GHC-7.8.2] in EventTypes.hs-ghc782StopParser :: EventParser EventInfo-ghc782StopParser =- (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid) (do-      -- (thread, status, info)-      t <- getE-      s <- getE :: GetEvents RawThreadStopStatus-      i <- getE :: GetEvents ThreadId-      return StopThread{thread = t,-                        status = case () of-                                  _ | s > maxThreadStopStatus782-                                    -> NoStatus-                                    | s == 9 {- XXX yeuch -}-                                      -- GHC-7.8.2: 9 == BlockedOnBlackHole-                                    -> BlockedOnBlackHoleOwnedBy i-                                    | otherwise-                                    -> mkStopStatus782 s}-   ))---- parsers for GHC < 7.8.2. Older versions do not use block info--- (different length).  See [Stop status in GHC-7.8.2] in--- EventTypes.hs-pre77StopParsers :: [EventParser EventInfo]-pre77StopParsers = [- (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status) (do-      -- (thread, status)-      t <- getE-      s <- getE :: GetEvents RawThreadStopStatus-      return StopThread{thread=t, status = if s > maxThreadStopStatusPre77-                                              then NoStatus-                                              else mkStopStatus s}-                        -- older version of the event, no block info-   )),-- (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid) -    (do-      -- (thread, status, info)-      t <- getE-      s <- getE :: GetEvents RawThreadStopStatus-      i <- getE :: GetEvents ThreadId-      return StopThread{thread = t,-                        status = case () of-                                  _ | s > maxThreadStopStatusPre77-                                    -> NoStatus-                                    | s == 8 {- XXX yeuch -}-                                      -- pre-7.7: 8==BlockedOnBlackhole-                                    -> BlockedOnBlackHoleOwnedBy i-                                    | otherwise-                                    -> mkStopStatus s}-    ))-  ]---- parsers for GHC >= 7.8.3, always using block info field parser.--- See [Stop status in GHC-7.8.2] in EventTypes.hs-post782StopParser :: EventParser EventInfo-post782StopParser = - (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid) -    (do-      -- (thread, status, info)-      t <- getE-      s <- getE :: GetEvents RawThreadStopStatus-      i <- getE :: GetEvents ThreadId-      return StopThread{thread = t,-                        status = case () of-                                  _ | s > maxThreadStopStatus-                                    -> NoStatus-                                    | s == 8 {- XXX yeuch -}-                                      -- post-7.8.2: 8==BlockedOnBlackhole-                                    -> BlockedOnBlackHoleOwnedBy i-                                    | otherwise-                                    -> mkStopStatus s}-    ))-- ------------------------ -- GHC 6.12 compat: GHC 6.12 reported the wrong sizes for some events,- -- so we have to recognise those wrong sizes here for backwards- -- compatibility.-ghc6Parsers :: [EventParser EventInfo]-ghc6Parsers = [- (FixedSizeParser EVENT_STARTUP 0 (do-      -- BUG in GHC 6.12: the startup event was incorrectly-      -- declared as size 0, so we accept it here.-      c <- getE :: GetEvents CapNo-      return Startup{ n_caps = fromIntegral c }-   )),-- (FixedSizeParser EVENT_CREATE_THREAD sz_old_tid (do  -- (thread)-      t <- getE-      return CreateThread{thread=t}-   )),-- (FixedSizeParser EVENT_RUN_THREAD sz_old_tid (do  --  (thread)-      t <- getE-      return RunThread{thread=t}-   )),-- (FixedSizeParser EVENT_STOP_THREAD (sz_old_tid + 2) (do  -- (thread, status)-      t <- getE-      s <- getE :: GetEvents RawThreadStopStatus-      return StopThread{thread=t, status = if s > maxThreadStopStatusPre77-                                              then NoStatus-                                              else mkStopStatus s}-                        -- older version of the event uses pre-77 encoding-                        -- (actually, it only uses encodings 0 to 5)-                        -- see [Stop status in GHC-7.8.2] in EventTypes.hs-   )),-- (FixedSizeParser EVENT_THREAD_RUNNABLE sz_old_tid (do  -- (thread)-      t <- getE-      return ThreadRunnable{thread=t}-   )),-- (FixedSizeParser EVENT_MIGRATE_THREAD (sz_old_tid + sz_cap) (do  --  (thread, newCap)-      t  <- getE-      nc <- getE :: GetEvents CapNo-      return MigrateThread{thread=t,newCap=fromIntegral nc}-   )),-- -- Note: it is vital that these two (EVENT_RUN/STEAL_SPARK) remain here (at- -- least in the ghc6Parsers section) even though both events are deprecated.- -- The reason is that .eventlog files created by the buggy GHC-6.12- -- mis-declare the size of these two events. So we have to handle them- -- specially here otherwise we'll get the wrong size, leading to us getting- -- out of sync and eventual parse failure. Since we're parsing them anyway,- -- we might as well convert them to the new SparkRun/SparkSteal events.- (FixedSizeParser EVENT_RUN_SPARK sz_old_tid (do  -- (thread)-      _ <- getE :: GetEvents ThreadId-      return SparkRun-   )),-- (FixedSizeParser EVENT_STEAL_SPARK (sz_old_tid + sz_cap) (do  -- (thread, victimCap)-      _  <- getE :: GetEvents ThreadId-      vc <- getE :: GetEvents CapNo-      return SparkSteal{victimCap=fromIntegral vc}-   )),-- (FixedSizeParser EVENT_CREATE_SPARK_THREAD sz_old_tid (do  -- (sparkThread)-      st <- getE :: GetEvents ThreadId-      return CreateSparkThread{sparkThread=st}-   )),-- (FixedSizeParser EVENT_THREAD_WAKEUP (sz_old_tid + sz_cap) (do  -- (thread, other_cap)-      t <- getE-      oc <- getE :: GetEvents CapNo-      return WakeupThread{thread=t,otherCap=fromIntegral oc}-   ))- ]---- Parsers for parallel events. Parameter is the thread_id size, to create--- ghc6-parsers (using the wrong size) where necessary.-parRTSParsers :: EventTypeSize -> [EventParser EventInfo]-parRTSParsers sz_tid = [- (VariableSizeParser EVENT_VERSION (do -- (version)-      num <- getE :: GetEvents Word16-      string <- getString num-      return Version{ version = string }-   )),-- (VariableSizeParser EVENT_PROGRAM_INVOCATION (do -- (cmd. line)-      num <- getE :: GetEvents Word16-      string <- getString num-      return ProgramInvocation{ commandline = string }-   )),-- (simpleEvent EVENT_EDEN_START_RECEIVE EdenStartReceive),- (simpleEvent EVENT_EDEN_END_RECEIVE   EdenEndReceive),-- (FixedSizeParser EVENT_CREATE_PROCESS sz_procid-    (do p <- getE-        return CreateProcess{ process = p })- ),-- (FixedSizeParser EVENT_KILL_PROCESS sz_procid-    (do p <- getE-        return KillProcess{ process = p })- ),-- (FixedSizeParser EVENT_ASSIGN_THREAD_TO_PROCESS (sz_tid + sz_procid)-    (do t <- getE-        p <- getE-        return AssignThreadToProcess { thread = t, process = p })- ),-- (FixedSizeParser EVENT_CREATE_MACHINE (sz_mid + sz_realtime)-    (do m <- getE-        t <- getE-        return CreateMachine { machine = m, realtime = t })- ),-- (FixedSizeParser EVENT_KILL_MACHINE sz_mid-    (do m <- getE :: GetEvents MachineId-        return KillMachine { machine = m })- ),-- (FixedSizeParser EVENT_SEND_MESSAGE-    (sz_msgtag + 2*sz_procid + 2*sz_tid + sz_mid)-    (do tag <- getE :: GetEvents RawMsgTag-        sP  <- getE :: GetEvents ProcessId-        sT  <- getE :: GetEvents ThreadId-        rM  <- getE :: GetEvents MachineId-        rP  <- getE :: GetEvents ProcessId-        rIP <- getE :: GetEvents PortId-        return SendMessage { mesTag = toMsgTag tag,-                             senderProcess = sP,-                             senderThread = sT,-                             receiverMachine = rM,-                             receiverProcess = rP,-                             receiverInport = rIP-                           })- ),-- (FixedSizeParser EVENT_RECEIVE_MESSAGE-    (sz_msgtag + 2*sz_procid + 2*sz_tid + sz_mid + sz_mes)-    (do tag <- getE :: GetEvents Word8-        rP  <- getE :: GetEvents ProcessId-        rIP <- getE :: GetEvents PortId-        sM  <- getE :: GetEvents MachineId-        sP  <- getE :: GetEvents ProcessId-        sT  <- getE :: GetEvents ThreadId-        mS  <- getE :: GetEvents MessageSize-        return  ReceiveMessage { mesTag = toMsgTag tag,-                                 receiverProcess = rP,-                                 receiverInport = rIP,-                                 senderMachine = sM,-                                 senderProcess = sP,-                                 senderThread= sT,-                                 messageSize = mS-                               })- ),-- (FixedSizeParser EVENT_SEND_RECEIVE_LOCAL_MESSAGE-    (sz_msgtag + 2*sz_procid + 2*sz_tid)-    (do tag <- getE :: GetEvents Word8-        sP  <- getE :: GetEvents ProcessId-        sT  <- getE :: GetEvents ThreadId-        rP  <- getE :: GetEvents ProcessId-        rIP <- getE :: GetEvents PortId-        return SendReceiveLocalMessage { mesTag = toMsgTag tag,-                                         senderProcess = sP,-                                         senderThread = sT,-                                         receiverProcess = rP,-                                         receiverInport = rIP-                                       })- )]--mercuryParsers = [- (FixedSizeParser EVENT_MER_START_PAR_CONJUNCTION-    (sz_par_conj_dyn_id + sz_par_conj_static_id)-    (do dyn_id <- getE-        static_id <- getE-        return (MerStartParConjunction dyn_id static_id))- ),-- (FixedSizeParser EVENT_MER_STOP_PAR_CONJUNCTION sz_par_conj_dyn_id-    (do dyn_id <- getE-        return (MerEndParConjunction dyn_id))- ),-- (FixedSizeParser EVENT_MER_STOP_PAR_CONJUNCT sz_par_conj_dyn_id-    (do dyn_id <- getE-        return (MerEndParConjunct dyn_id))- ),-- (FixedSizeParser EVENT_MER_CREATE_SPARK (sz_par_conj_dyn_id + sz_spark_id)-    (do dyn_id <- getE-        spark_id <- getE-        return (MerCreateSpark dyn_id spark_id))- ),-- (FixedSizeParser EVENT_MER_FUT_CREATE (sz_future_id + sz_string_id)-    (do future_id <- getE-        name_id <- getE-        return (MerFutureCreate future_id name_id))- ),-- (FixedSizeParser EVENT_MER_FUT_WAIT_NOSUSPEND (sz_future_id)-    (do future_id <- getE-        return (MerFutureWaitNosuspend future_id))- ),-- (FixedSizeParser EVENT_MER_FUT_WAIT_SUSPENDED (sz_future_id)-    (do future_id <- getE-        return (MerFutureWaitSuspended future_id))- ),-- (FixedSizeParser EVENT_MER_FUT_SIGNAL (sz_future_id)-    (do future_id <- getE-        return (MerFutureSignal future_id))- ),-- (simpleEvent EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT MerLookingForGlobalThread),- (simpleEvent EVENT_MER_WORK_STEALING MerWorkStealing),- (simpleEvent EVENT_MER_LOOKING_FOR_LOCAL_SPARK MerLookingForLocalSpark),-- (FixedSizeParser EVENT_MER_RELEASE_CONTEXT sz_tid-    (do thread_id <- getE-        return (MerReleaseThread thread_id))- ),-- (simpleEvent EVENT_MER_ENGINE_SLEEPING MerCapSleeping),- (simpleEvent EVENT_MER_CALLING_MAIN MerCallingMain)-- ]--perfParsers = [- (VariableSizeParser EVENT_PERF_NAME (do -- (perf_num, name)-      num     <- getE :: GetEvents Word16-      perfNum <- getE-      name    <- getString (num - sz_perf_num)-      return PerfName{perfNum, name}-   )),-- (FixedSizeParser EVENT_PERF_COUNTER (sz_perf_num + sz_kernel_tid + 8) (do -- (perf_num, tid, period)-      perfNum <- getE-      tid     <- getE-      period  <- getE-      return PerfCounter{perfNum, tid, period}-  )),-- (FixedSizeParser EVENT_PERF_TRACEPOINT (sz_perf_num + sz_kernel_tid) (do -- (perf_num, tid)-      perfNum <- getE-      tid     <- getE-      return PerfTracepoint{perfNum, tid}-  ))- ]--getData :: GetEvents Data-getData = do-   db <- getE :: GetEvents Marker-   when (db /= EVENT_DATA_BEGIN) $ throwError "Data begin marker not found"-   eparsers <- ask-   let-       getEvents :: [Event] -> GetEvents Data-       getEvents events = do-         mb_e <- getEvent eparsers-         case mb_e of-           Nothing -> return (Data (reverse events))-           Just e  -> getEvents (e:events)-   -- in-   getEvents []--getEventBlock :: EventParsers -> GetEvents [Event]-getEventBlock parsers = do-  b <- lift . lift $ isEmpty-  if b then return [] else do-  mb_e <- getEvent parsers-  case mb_e of-    Nothing -> return []-    Just e  -> do-      es <- getEventBlock parsers-      return (e:es)--getEventLog :: ExceptT String Get EventLog-getEventLog = do-    header <- getHeader-    let imap = M.fromList [ (fromIntegral (num t),t) | t <- eventTypes header]-        -- This test is complete, no-one has extended this event yet and all future-        -- extensions will use newly allocated event IDs.-        is_ghc_6 = Just sz_old_tid == do create_et <- M.lookup EVENT_CREATE_THREAD imap-                                         size create_et-        {--        -- GHC6 writes an invalid header, we handle it here by using a-        -- different set of event parsers.  Note that the ghc7 event parsers-        -- are standard events, and can be used by other runtime systems that-        -- make use of threadscope.-        -}--        -- GHC-7.8.2 uses a different thread block status encoding,-        -- and therefore requires a different parser for the stop-        -- event. Later, in GHC-7.8.3, the old encoding was restored.-        -- GHC-7.8.2 can be recognised by presence and absence of-        -- events in the header:-        --   * User markers were added in GHC-7.8 -        --   * an empty event HACK_BUG_T9003 was added in GHC-7.8.3-        -- This fix breaks software which uses ghc-events and combines-        -- user markers with the older stop status encoding. We don't-        -- know of any such software, though.-        is_pre77  = M.notMember EVENT_USER_MARKER imap-        is_ghc782 = M.member EVENT_USER_MARKER imap &&-                    M.notMember EVENT_HACK_BUG_T9003 imap--        stopParsers = if is_pre77 then pre77StopParsers-                      else if is_ghc782 then [ghc782StopParser]-                           else [post782StopParser]--        event_parsers = if is_ghc_6-                            then standardParsers ++ ghc6Parsers ++-                                parRTSParsers sz_old_tid-                            else standardParsers ++ ghc7Parsers ++-                                stopParsers ++ parRTSParsers sz_tid ++-                                mercuryParsers ++ perfParsers-        parsers = mkEventTypeParsers imap event_parsers-    dat <- runReaderT getData (EventParsers parsers)-    return (EventLog header dat)--readEventLogFromFile :: FilePath -> IO (Either String EventLog)-readEventLogFromFile f = do-    s <- L.readFile f-    return $ runGet (do v <- runExceptT getEventLog-                        m <- isEmpty-                        m `seq` return v)  s---- -------------------------------------------------------------------------------- Utilities--sortEvents :: [Event] -> [CapEvent]-sortEvents = sortGroups . groupEvents---- | Sort the raw event stream by time, annotating each event with the--- capability that generated it.-sortGroups :: [(Maybe Int, [Event])] -> [CapEvent]-sortGroups groups = mergesort' (compare `on` (time . ce_event)) $-                      [ [ CapEvent cap e | e <- es ]-                      | (cap, es) <- groups ]-     -- sorting is made much faster by the way that the event stream is-     -- divided into blocks of events.-     --  - All events in a block belong to a particular capability-     --  - The events in a block are ordered by time-     --  - blocks for the same capability appear in time order in the event-     --    stream and do not overlap.-     ---     -- So to sort the events we make one list of events for each-     -- capability (basically just concat . filter), and then-     -- merge the resulting lists.--groupEvents :: [Event] -> [(Maybe Int, [Event])]-groupEvents es = (Nothing, n_events) :-                 [ (Just (cap (head blocks)), concatMap block_events blocks)-                 | blocks <- groups ]-  where-   (blocks, anon_events) = partitionEithers (map separate es)-      where separate e | b@EventBlock{} <- spec e = Left  b-                       | otherwise                = Right e--   (cap_blocks, gbl_blocks) = partition (is_cap . cap) blocks-      where is_cap c = fromIntegral c /= ((-1) :: Word16)--   groups = groupBy ((==) `on` cap) $ sortBy (compare `on` cap) cap_blocks--     -- There are two sources of events without a capability: events-     -- in the raw stream not inside an EventBlock, and EventBlocks-     -- with cap == -1.  We have to merge those two streams.-     -- In light of merged logs, global blocks may have overlapping-     -- time spans, thus the blocks are mergesorted-   n_events = mergesort' (compare `on` time) (anon_events : map block_events gbl_blocks)--mergesort' :: (a -> a -> Ordering) -> [[a]] -> [a]-mergesort' _   [] = []-mergesort' _   [xs] = xs-mergesort' cmp xss = mergesort' cmp (merge_pairs cmp xss)--merge_pairs :: (a -> a -> Ordering) -> [[a]] -> [[a]]-merge_pairs _   [] = []-merge_pairs _   [xs] = [xs]-merge_pairs cmp (xs:ys:xss) = merge cmp xs ys : merge_pairs cmp xss--merge :: (a -> a -> Ordering) -> [a] -> [a] -> [a]-merge _   [] ys = ys-merge _   xs [] = xs-merge cmp (x:xs) (y:ys)- = case x `cmp` y of-        GT -> y : merge cmp (x:xs)   ys-        _  -> x : merge cmp    xs (y:ys)---buildEventTypeMap :: [EventType] -> IntMap EventType-buildEventTypeMap etypes = M.fromList [ (fromIntegral (num t),t) | t <- etypes ]---------------------------------------------------------------------------------- Some pretty-printing support--showEventInfo :: EventInfo -> String-showEventInfo spec =-    case spec of-        EventBlock end_time cap _block_events ->-          printf "event block: cap %d, end time: %d\n" cap end_time-        Startup n_caps ->-          printf "startup: %d capabilities" n_caps-        CreateThread thread ->-          printf "creating thread %d" thread-        RunThread thread ->-          printf "running thread %d" thread-        StopThread thread status ->-          printf "stopping thread %d (%s)" thread (showThreadStopStatus status)-        ThreadRunnable thread ->-          printf "thread %d is runnable" thread-        MigrateThread thread newCap  ->-          printf "migrating thread %d to cap %d" thread newCap-        CreateSparkThread sparkThread ->-          printf "creating spark thread %d" sparkThread-        SparkCounters crt dud ovf cnv fiz gcd rem ->-          printf "spark stats: %d created, %d converted, %d remaining (%d overflowed, %d dud, %d GC'd, %d fizzled)" crt cnv rem ovf dud gcd fiz-        SparkCreate ->-          printf "spark created"-        SparkDud ->-          printf "dud spark discarded"-        SparkOverflow ->-          printf "overflowed spark discarded"-        SparkRun ->-          printf "running a local spark"-        SparkSteal victimCap ->-          printf "stealing a spark from cap %d" victimCap-        SparkFizzle ->-          printf "spark fizzled"-        SparkGC ->-          printf "spark GCed"-        TaskCreate taskId cap tid ->-          printf "task 0x%x created on cap %d with OS kernel thread %d"-                 taskId cap (kernelThreadId tid)-        TaskMigrate taskId cap new_cap ->-          printf "task 0x%x migrated from cap %d to cap %d"-                 taskId cap new_cap-        TaskDelete taskId ->-          printf "task 0x%x deleted" taskId-        Shutdown ->-          printf "shutting down"-        WakeupThread thread otherCap ->-          printf "waking up thread %d on cap %d" thread otherCap-        ThreadLabel thread label ->-          printf "thread %d has label \"%s\"" thread label-        RequestSeqGC ->-          printf "requesting sequential GC"-        RequestParGC ->-          printf "requesting parallel GC"-        StartGC ->-          printf "starting GC"-        EndGC ->-          printf "finished GC"-        GCWork ->-          printf "GC working"-        GCIdle ->-          printf "GC idle"-        GCDone ->-          printf "GC done"-        GlobalSyncGC ->-          printf "all caps stopped for GC"-        GCStatsGHC{..} ->-          printf "GC stats for heap capset %d: generation %d, %d bytes copied, %d bytes slop, %d bytes fragmentation, %d par threads, %d bytes max par copied, %d bytes total par copied" heapCapset gen copied slop frag parNThreads parMaxCopied parTotCopied-        HeapAllocated{..} ->-          printf "allocated on heap capset %d: %d total bytes till now" heapCapset allocBytes-        HeapSize{..} ->-          printf "size of heap capset %d: %d bytes" heapCapset sizeBytes-        HeapLive{..} ->-          printf "live data in heap capset %d: %d bytes" heapCapset liveBytes-        HeapInfoGHC{..} ->-          printf "heap stats for heap capset %d: generations %d, %d bytes max heap size, %d bytes alloc area size, %d bytes mblock size, %d bytes block size" heapCapset gens maxHeapSize allocAreaSize mblockSize blockSize-        CapCreate{cap} ->-          printf "created cap %d" cap-        CapDelete{cap} ->-          printf "deleted cap %d" cap-        CapDisable{cap} ->-          printf "disabled cap %d" cap-        CapEnable{cap} ->-          printf "enabled cap %d" cap-        Message msg ->-          msg-        UserMessage msg ->-          msg-        UserMarker markername ->-          printf "marker: %s" markername-        CapsetCreate cs ct ->-          printf "created capset %d of type %s" cs (show ct)-        CapsetDelete cs ->-          printf "deleted capset %d" cs-        CapsetAssignCap cs cp ->-          printf "assigned cap %d to capset %d" cp cs-        CapsetRemoveCap cs cp ->-          printf "removed cap %d from capset %d" cp cs-        OsProcessPid cs pid ->-          printf "capset %d: pid %d" cs pid-        OsProcessParentPid cs ppid ->-          printf "capset %d: parent pid %d" cs ppid-        WallClockTime cs sec nsec ->-          printf "capset %d: wall clock time %ds %dns (unix epoch)" cs sec nsec-        RtsIdentifier cs i ->-          printf "capset %d: RTS version \"%s\"" cs i-        ProgramArgs cs args ->-          printf "capset %d: args: %s" cs (show args)-        ProgramEnv cs env ->-          printf "capset %d: env: %s" cs (show env)-        UnknownEvent n ->-          printf "Unknown event type %d" n-        InternString str sId ->-          printf "Interned string: \"%s\" with id %d" str sId-        -- events for the parallel RTS-        Version version ->-          printf "compiler version is %s" version-        ProgramInvocation  commandline ->-          printf "program invocation: %s" commandline-        EdenStartReceive ->-          printf "starting to receive"-        EdenEndReceive ->-          printf "stop receiving"-        CreateProcess  process ->-          printf "creating process %d" process-        KillProcess process ->-          printf "killing process %d" process-        AssignThreadToProcess thread process ->-          printf "assigning thread %d to process %d" thread process-        CreateMachine machine realtime ->-          printf "creating machine %d at %d" machine realtime-        KillMachine machine ->-          printf "killing machine %d" machine-        SendMessage mesTag senderProcess senderThread-          receiverMachine receiverProcess receiverInport ->-            printf "sending message with tag %s from process %d, thread %d to machine %d, process %d on inport %d"-            (show mesTag) senderProcess senderThread receiverMachine receiverProcess receiverInport-        ReceiveMessage mesTag receiverProcess receiverInport-          senderMachine senderProcess senderThread messageSize ->-            printf "receiving message with tag %s at process %d, inport %d from machine %d, process %d, thread %d with size %d"-            (show mesTag) receiverProcess receiverInport-            senderMachine senderProcess senderThread messageSize-        SendReceiveLocalMessage mesTag senderProcess senderThread-          receiverProcess receiverInport ->-            printf "sending/receiving message with tag %s from process %d, thread %d to process %d on inport %d"-            (show mesTag) senderProcess senderThread receiverProcess receiverInport-        MerStartParConjunction dyn_id static_id ->-          printf "Start a parallel conjunction 0x%x, static_id: %d" dyn_id static_id-        MerEndParConjunction dyn_id ->-          printf "End par conjunction: 0x%x" dyn_id-        MerEndParConjunct dyn_id ->-          printf "End par conjunct: 0x%x" dyn_id-        MerCreateSpark dyn_id spark_id ->-          printf "Create spark for conjunction: 0x%x spark: 0x%x" dyn_id spark_id-        MerFutureCreate future_id name_id ->-          printf "Create future 0x%x named %d" future_id name_id-        MerFutureWaitNosuspend future_id ->-          printf "Wait didn't suspend for future: 0x%x" future_id-        MerFutureWaitSuspended future_id ->-          printf "Wait suspended on future: 0x%x" future_id-        MerFutureSignal future_id ->-          printf "Signaled future 0x%x" future_id-        MerLookingForGlobalThread ->-          "Looking for global thread to resume"-        MerWorkStealing ->-          "Trying to steal a spark"-        MerLookingForLocalSpark ->-          "Looking for a local spark to execute"-        MerReleaseThread thread_id ->-          printf "Releasing thread %d to the free pool" thread_id-        MerCapSleeping ->-          "Capability going to sleep"-        MerCallingMain ->-          "About to call the program entry point"-        PerfName{perfNum, name} ->-          printf "perf event %d named \"%s\"" perfNum name-        PerfCounter{perfNum, tid, period} ->-          printf "perf event counter %d incremented by %d in OS thread %d"-                 perfNum (period + 1) (kernelThreadId tid)-        PerfTracepoint{perfNum, tid} ->-          printf "perf event tracepoint %d reached in OS thread %d"-                 perfNum (kernelThreadId tid)--showThreadStopStatus :: ThreadStopStatus -> String-showThreadStopStatus HeapOverflow   = "heap overflow"-showThreadStopStatus StackOverflow  = "stack overflow"-showThreadStopStatus ThreadYielding = "thread yielding"-showThreadStopStatus ThreadBlocked  = "thread blocked"-showThreadStopStatus ThreadFinished = "thread finished"-showThreadStopStatus ForeignCall    = "making a foreign call"-showThreadStopStatus BlockedOnMVar  = "blocked on an MVar"-showThreadStopStatus BlockedOnMVarRead = "blocked reading an MVar"-showThreadStopStatus BlockedOnBlackHole = "blocked on a black hole"-showThreadStopStatus BlockedOnRead = "blocked on I/O read"-showThreadStopStatus BlockedOnWrite = "blocked on I/O write"-showThreadStopStatus BlockedOnDelay = "blocked on threadDelay"-showThreadStopStatus BlockedOnSTM = "blocked in STM retry"-showThreadStopStatus BlockedOnDoProc = "blocked on asyncDoProc"-showThreadStopStatus BlockedOnCCall = "blocked in a foreign call"-showThreadStopStatus BlockedOnCCall_NoUnblockExc = "blocked in a foreign call"-showThreadStopStatus BlockedOnMsgThrowTo = "blocked in throwTo"-showThreadStopStatus ThreadMigrating = "thread migrating"-showThreadStopStatus BlockedOnMsgGlobalise = "waiting for data to be globalised"-showThreadStopStatus (BlockedOnBlackHoleOwnedBy target) =-          "blocked on black hole owned by thread " ++ show target-showThreadStopStatus NoStatus = "No stop thread status"--ppEventLog :: EventLog -> String-ppEventLog (EventLog (Header ets) (Data es)) = unlines $ concat (-    [ ["Event Types:"]-    , map ppEventType ets-    , [""] -- newline-    , ["Events:"]-    , map (ppEvent imap) sorted-    , [""] ]) -- extra trailing newline- where-    imap = buildEventTypeMap ets-    sorted = sortEvents es--ppEventType :: EventType -> String-ppEventType (EventType num dsc msz) = printf "%4d: %s (size %s)" num dsc-   (case msz of Nothing -> "variable"; Just x -> show x)--ppEvent :: IntMap EventType -> CapEvent -> String-ppEvent imap (CapEvent cap (Event time spec)) =-  printf "%9d: " time ++-  (case cap of-    Nothing -> ""-    Just c  -> printf "cap %d: " c) ++-  case spec of-    UnknownEvent{ ref=ref } ->-      printf (desc (fromJust (M.lookup (fromIntegral ref) imap)))--    other -> showEventInfo spec--type PutEvents a = PutM a--putE :: Binary a => a -> PutEvents ()-putE = put--runPutEBS :: PutEvents () -> L.ByteString-runPutEBS = runPut--writeEventLogToFile f el = L.writeFile f $ runPutEBS $ putEventLog el--putType :: EventTypeNum -> PutEvents ()-putType = putE--putCap :: Int -> PutEvents ()-putCap c = putE (fromIntegral c :: CapNo)--putMarker :: Word32 -> PutEvents ()-putMarker = putE--putEStr :: String -> PutEvents ()-putEStr = mapM_ putE--putEventLog :: EventLog -> PutEvents ()-putEventLog (EventLog hdr es) = do-    putHeader hdr-    putData es--putHeader :: Header -> PutEvents ()-putHeader (Header ets) = do-    putMarker EVENT_HEADER_BEGIN-    putMarker EVENT_HET_BEGIN-    mapM_ putEventType ets-    putMarker EVENT_HET_END-    putMarker EVENT_HEADER_END- where-    putEventType (EventType n d msz) = do-        putMarker EVENT_ET_BEGIN-        putType n-        putE $ fromMaybe 0xffff msz-        putE (fromIntegral $ length d :: EventTypeDescLen)-        mapM_ put d-        -- the event type header allows for extra data, which we don't use:-        putE (0 :: Word32)-        putMarker EVENT_ET_END--putData :: Data -> PutEvents ()-putData (Data es) = do-    putMarker EVENT_DATA_BEGIN -- Word32-    mapM_ putEvent es-    putType EVENT_DATA_END -- Word16--eventTypeNum :: EventInfo -> EventTypeNum-eventTypeNum e = case e of-    CreateThread {} -> EVENT_CREATE_THREAD-    RunThread {} -> EVENT_RUN_THREAD-    StopThread {} -> EVENT_STOP_THREAD-    ThreadRunnable {} -> EVENT_THREAD_RUNNABLE-    MigrateThread {} -> EVENT_MIGRATE_THREAD-    Shutdown {} -> EVENT_SHUTDOWN-    WakeupThread {} -> EVENT_THREAD_WAKEUP-    ThreadLabel {}  -> EVENT_THREAD_LABEL-    StartGC {} -> EVENT_GC_START-    EndGC {} -> EVENT_GC_END-    GlobalSyncGC {} -> EVENT_GC_GLOBAL_SYNC-    RequestSeqGC {} -> EVENT_REQUEST_SEQ_GC-    RequestParGC {} -> EVENT_REQUEST_PAR_GC-    CreateSparkThread {} -> EVENT_CREATE_SPARK_THREAD-    SparkCounters {} -> EVENT_SPARK_COUNTERS-    SparkCreate   {} -> EVENT_SPARK_CREATE-    SparkDud      {} -> EVENT_SPARK_DUD-    SparkOverflow {} -> EVENT_SPARK_OVERFLOW-    SparkRun      {} -> EVENT_SPARK_RUN-    SparkSteal    {} -> EVENT_SPARK_STEAL-    SparkFizzle   {} -> EVENT_SPARK_FIZZLE-    SparkGC       {} -> EVENT_SPARK_GC-    TaskCreate  {} -> EVENT_TASK_CREATE-    TaskMigrate {} -> EVENT_TASK_MIGRATE-    TaskDelete  {} -> EVENT_TASK_DELETE-    Message {} -> EVENT_LOG_MSG-    Startup {} -> EVENT_STARTUP-    EventBlock {} -> EVENT_BLOCK_MARKER-    UserMessage {} -> EVENT_USER_MSG-    UserMarker  {} -> EVENT_USER_MARKER-    GCIdle {} -> EVENT_GC_IDLE-    GCWork {} -> EVENT_GC_WORK-    GCDone {} -> EVENT_GC_DONE-    GCStatsGHC{} -> EVENT_GC_STATS_GHC-    HeapAllocated{} -> EVENT_HEAP_ALLOCATED-    HeapSize{} -> EVENT_HEAP_SIZE-    HeapLive{} -> EVENT_HEAP_LIVE-    HeapInfoGHC{} -> EVENT_HEAP_INFO_GHC-    CapCreate{} -> EVENT_CAP_CREATE-    CapDelete{} -> EVENT_CAP_DELETE-    CapDisable{} -> EVENT_CAP_DISABLE-    CapEnable{} -> EVENT_CAP_ENABLE-    CapsetCreate {} -> EVENT_CAPSET_CREATE-    CapsetDelete {} -> EVENT_CAPSET_DELETE-    CapsetAssignCap {} -> EVENT_CAPSET_ASSIGN_CAP-    CapsetRemoveCap {} -> EVENT_CAPSET_REMOVE_CAP-    RtsIdentifier {} -> EVENT_RTS_IDENTIFIER-    ProgramArgs {} -> EVENT_PROGRAM_ARGS-    ProgramEnv {} -> EVENT_PROGRAM_ENV-    OsProcessPid {} -> EVENT_OSPROCESS_PID-    OsProcessParentPid{} -> EVENT_OSPROCESS_PPID-    WallClockTime{} -> EVENT_WALL_CLOCK_TIME-    UnknownEvent {} -> error "eventTypeNum UnknownEvent"-    InternString {} -> EVENT_INTERN_STRING-    Version {} -> EVENT_VERSION-    ProgramInvocation {} -> EVENT_PROGRAM_INVOCATION-    EdenStartReceive {} -> EVENT_EDEN_START_RECEIVE-    EdenEndReceive {} -> EVENT_EDEN_END_RECEIVE-    CreateProcess {} -> EVENT_CREATE_PROCESS-    KillProcess {} -> EVENT_KILL_PROCESS-    AssignThreadToProcess {} -> EVENT_ASSIGN_THREAD_TO_PROCESS-    CreateMachine {} -> EVENT_CREATE_MACHINE-    KillMachine {} -> EVENT_KILL_MACHINE-    SendMessage {} -> EVENT_SEND_MESSAGE-    ReceiveMessage {} -> EVENT_RECEIVE_MESSAGE-    SendReceiveLocalMessage {} -> EVENT_SEND_RECEIVE_LOCAL_MESSAGE-    MerStartParConjunction {} -> EVENT_MER_START_PAR_CONJUNCTION-    MerEndParConjunction _ -> EVENT_MER_STOP_PAR_CONJUNCTION-    MerEndParConjunct _ -> EVENT_MER_STOP_PAR_CONJUNCT-    MerCreateSpark {} -> EVENT_MER_CREATE_SPARK-    MerFutureCreate {} -> EVENT_MER_FUT_CREATE-    MerFutureWaitNosuspend _ -> EVENT_MER_FUT_WAIT_NOSUSPEND-    MerFutureWaitSuspended _ -> EVENT_MER_FUT_WAIT_SUSPENDED-    MerFutureSignal _ -> EVENT_MER_FUT_SIGNAL-    MerLookingForGlobalThread -> EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT-    MerWorkStealing -> EVENT_MER_WORK_STEALING-    MerLookingForLocalSpark -> EVENT_MER_LOOKING_FOR_LOCAL_SPARK-    MerReleaseThread _ -> EVENT_MER_RELEASE_CONTEXT-    MerCapSleeping -> EVENT_MER_ENGINE_SLEEPING-    MerCallingMain -> EVENT_MER_CALLING_MAIN-    PerfName       {} -> nEVENT_PERF_NAME-    PerfCounter    {} -> nEVENT_PERF_COUNTER-    PerfTracepoint {} -> nEVENT_PERF_TRACEPOINT--nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT :: EventTypeNum-nEVENT_PERF_NAME = EVENT_PERF_NAME-nEVENT_PERF_COUNTER = EVENT_PERF_COUNTER-nEVENT_PERF_TRACEPOINT = EVENT_PERF_TRACEPOINT--putEvent :: Event -> PutEvents ()-putEvent (Event t spec) = do-    putType (eventTypeNum spec)-    put t-    putEventSpec spec--putEventSpec (Startup caps) = do-    putCap (fromIntegral caps)--putEventSpec (EventBlock end cap es) = do-    let block = runPutEBS (mapM_ putEvent es)-    put (fromIntegral (L.length block) + 24 :: Word32)-    putE end-    putE (fromIntegral cap :: CapNo)-    putLazyByteString block--putEventSpec (CreateThread t) = do-    putE t--putEventSpec (RunThread t) = do-    putE t---- here we assume that ThreadStopStatus fromEnum matches the definitions in--- EventLogFormat.h--- The standard encoding is used here, which is wrong for eventlogs--- produced by GHC-7.8.2 ([Stop status in GHC-7.8.2] in EventTypes.hs-putEventSpec (StopThread t s) = do-    putE t-    putE $ case s of-            NoStatus -> 0 :: Word16-            HeapOverflow -> 1-            StackOverflow -> 2-            ThreadYielding -> 3-            ThreadBlocked -> 4-            ThreadFinished -> 5-            ForeignCall -> 6-            BlockedOnMVar -> 7-            BlockedOnMVarRead -> 20 -- since GHC-7.8.3-            BlockedOnBlackHole -> 8-            BlockedOnBlackHoleOwnedBy _ -> 8-            BlockedOnRead -> 9-            BlockedOnWrite -> 10-            BlockedOnDelay -> 11-            BlockedOnSTM -> 12-            BlockedOnDoProc -> 13-            BlockedOnCCall -> 14-            BlockedOnCCall_NoUnblockExc -> 15-            BlockedOnMsgThrowTo -> 16-            ThreadMigrating -> 17-            BlockedOnMsgGlobalise -> 18-    putE $ case s of-            BlockedOnBlackHoleOwnedBy i -> i-            _                           -> 0--putEventSpec (ThreadRunnable t) = do-    putE t--putEventSpec (MigrateThread t c) = do-    putE t-    putCap c--putEventSpec (CreateSparkThread t) = do-    putE t--putEventSpec (SparkCounters crt dud ovf cnv fiz gcd rem) = do-    putE crt-    putE dud-    putE ovf-    putE cnv-    -- Warning: order of fiz and gcd reversed!-    putE gcd-    putE fiz-    putE rem--putEventSpec SparkCreate = do-    return ()--putEventSpec SparkDud = do-    return ()--putEventSpec SparkOverflow = do-    return ()--putEventSpec SparkRun = do-    return ()--putEventSpec (SparkSteal c) = do-    putCap c--putEventSpec SparkFizzle = do-    return ()--putEventSpec SparkGC = do-    return ()--putEventSpec (WakeupThread t c) = do-    putE t-    putCap c--putEventSpec (ThreadLabel t l) = do-    putE (fromIntegral (length l) + sz_tid :: Word16)-    putE t-    putEStr l--putEventSpec Shutdown = do-    return ()--putEventSpec RequestSeqGC = do-    return ()--putEventSpec RequestParGC = do-    return ()--putEventSpec StartGC = do-    return ()--putEventSpec GCWork = do-    return ()--putEventSpec GCIdle = do-    return ()--putEventSpec GCDone = do-    return ()--putEventSpec EndGC = do-    return ()--putEventSpec GlobalSyncGC = do-    return ()--putEventSpec (TaskCreate taskId cap tid) = do-    putE taskId-    putCap cap-    putE tid--putEventSpec (TaskMigrate taskId cap new_cap) = do-    putE taskId-    putCap cap-    putCap new_cap--putEventSpec (TaskDelete taskId) = do-    putE taskId--putEventSpec GCStatsGHC{..} = do-    putE heapCapset-    putE (fromIntegral gen :: Word16)-    putE copied-    putE slop-    putE frag-    putE (fromIntegral parNThreads :: Word32)-    putE parMaxCopied-    putE parTotCopied--putEventSpec HeapAllocated{..} = do-    putE heapCapset-    putE allocBytes--putEventSpec HeapSize{..} = do-    putE heapCapset-    putE sizeBytes--putEventSpec HeapLive{..} = do-    putE heapCapset-    putE liveBytes--putEventSpec HeapInfoGHC{..} = do-    putE heapCapset-    putE (fromIntegral gens :: Word16)-    putE maxHeapSize-    putE allocAreaSize-    putE mblockSize-    putE blockSize--putEventSpec CapCreate{cap} = do-    putCap cap--putEventSpec CapDelete{cap} = do-    putCap cap--putEventSpec CapDisable{cap} = do-    putCap cap--putEventSpec CapEnable{cap} = do-    putCap cap--putEventSpec (CapsetCreate cs ct) = do-    putE cs-    putE $ case ct of-            CapsetCustom -> 1 :: Word16-            CapsetOsProcess -> 2-            CapsetClockDomain -> 3-            CapsetUnknown -> 0--putEventSpec (CapsetDelete cs) = do-    putE cs--putEventSpec (CapsetAssignCap cs cp) = do-    putE cs-    putCap cp--putEventSpec (CapsetRemoveCap cs cp) = do-    putE cs-    putCap cp--putEventSpec (RtsIdentifier cs rts) = do-    putE (fromIntegral (length rts) + sz_capset :: Word16)-    putE cs-    putEStr rts--putEventSpec (ProgramArgs cs as) = do-    let as' = unsep as-    putE (fromIntegral (length as') + sz_capset :: Word16)-    putE cs-    mapM_ putE as'--putEventSpec (ProgramEnv cs es) = do-    let es' = unsep es-    putE (fromIntegral (length es') + sz_capset :: Word16)-    putE cs-    mapM_ putE es'--putEventSpec (OsProcessPid cs pid) = do-    putE cs-    putE pid--putEventSpec (OsProcessParentPid cs ppid) = do-    putE cs-    putE ppid--putEventSpec (WallClockTime cs sec nsec) = do-    putE cs-    putE sec-    putE nsec--putEventSpec (Message s) = do-    putE (fromIntegral (length s) :: Word16)-    mapM_ putE s--putEventSpec (UserMessage s) = do-    putE (fromIntegral (length s) :: Word16)-    mapM_ putE s--putEventSpec (UserMarker s) = do-    putE (fromIntegral (length s) :: Word16)-    mapM_ putE s--putEventSpec (UnknownEvent {}) = error "putEventSpec UnknownEvent"--putEventSpec (InternString str id) = do-    putE len-    mapM_ putE str-    putE id-  where len = (fromIntegral (length str) :: Word16) + sz_string_id--putEventSpec (Version s) = do-    putE (fromIntegral (length s) :: Word16)-    mapM_ putE s--putEventSpec (ProgramInvocation s) = do-    putE (fromIntegral (length s) :: Word16)-    mapM_ putE s--putEventSpec ( EdenStartReceive ) = return ()--putEventSpec ( EdenEndReceive ) = return ()--putEventSpec ( CreateProcess  process ) = do-    putE process--putEventSpec ( KillProcess process ) = do-    putE process--putEventSpec ( AssignThreadToProcess thread process ) = do-    putE thread-    putE process--putEventSpec ( CreateMachine machine realtime ) = do-    putE machine-    putE realtime--putEventSpec ( KillMachine machine ) = do-    putE machine--putEventSpec ( SendMessage mesTag senderProcess senderThread-                 receiverMachine receiverProcess receiverInport ) = do-    putE (fromMsgTag mesTag)-    putE senderProcess-    putE senderThread-    putE receiverMachine-    putE receiverProcess-    putE receiverInport--putEventSpec ( ReceiveMessage mesTag receiverProcess receiverInport-                 senderMachine senderProcess senderThread messageSize ) = do-    putE (fromMsgTag mesTag)-    putE receiverProcess-    putE receiverInport-    putE senderMachine-    putE senderProcess-    putE senderThread-    putE messageSize--putEventSpec ( SendReceiveLocalMessage mesTag senderProcess senderThread-                 receiverProcess receiverInport ) = do-    putE (fromMsgTag mesTag)-    putE senderProcess-    putE senderThread-    putE receiverProcess-    putE receiverInport--putEventSpec (MerStartParConjunction dyn_id static_id) = do-    putE dyn_id-    putE static_id--putEventSpec (MerEndParConjunction dyn_id) = do-    putE dyn_id--putEventSpec (MerEndParConjunct dyn_id) = do-    putE dyn_id--putEventSpec (MerCreateSpark dyn_id spark_id) = do-    putE dyn_id-    putE spark_id--putEventSpec (MerFutureCreate future_id name_id) = do-    putE future_id-    putE name_id--putEventSpec (MerFutureWaitNosuspend future_id) = do-    putE future_id--putEventSpec (MerFutureWaitSuspended future_id) = do-    putE future_id--putEventSpec (MerFutureSignal future_id) = do-    putE future_id--putEventSpec MerLookingForGlobalThread = return ()-putEventSpec MerWorkStealing = return ()-putEventSpec MerLookingForLocalSpark = return ()--putEventSpec (MerReleaseThread thread_id) = do-    putE thread_id--putEventSpec MerCapSleeping = return ()-putEventSpec MerCallingMain = return ()--putEventSpec PerfName{..} = do-    putE (fromIntegral (length name) + sz_perf_num :: Word16)-    putE perfNum-    mapM_ putE name--putEventSpec PerfCounter{..} = do-    putE perfNum-    putE tid-    putE period--putEventSpec PerfTracepoint{..} = do-    putE perfNum-    putE tid---- [] == []--- [x] == x\0--- [x, y, z] == x\0y\0-unsep :: [String] -> String-unsep = concatMap (++"\0") -- not the most efficient, but should be ok--splitNull :: String -> [String]-splitNull [] = []-splitNull xs = case span (/= '\0') xs of-                (x, xs') -> x : splitNull (drop 1 xs')
− GHC/RTS/Events/Analysis.hs
@@ -1,282 +0,0 @@-module GHC.RTS.Events.Analysis-  ( Machine (..)-  , validate-  , validates-  , simulate-  , Profile (..)-  , profile-  , profileIndexed-  , profileRouted-  , extractIndexed-  , refineM-  , profileM-  , indexM-  , toList-  , toMaybe-  , Process (..)-  , routeM-  )- where--import GHC.RTS.Events--import Data.Map (Map)-import qualified Data.Map as M-import Data.Maybe (fromMaybe, catMaybes)-import Data.Either (rights)------------------------------------------------------------------------------------- | This is based on a simple finite state machine hence the names `delta`--- for the state transition function.--- Since states might be more than simple pattern matched constructors, we--- use `finals :: state -> Bool`, rather than `Set state`, to indicate that--- the machine is in some final state. Similarly for `alpha`, which--- indicates the alphabet of inputs to a machine.--- The function `delta` returns `Maybe` values, where `Nothing`--- indicates that no valid transition is possible: ie, there has been an--- error.-data Machine s i = Machine-  { initial :: s                 -- ^ Initial state-  , final   :: s -> Bool         -- ^ Valid final states-  , alpha   :: i -> Bool         -- ^ Valid input alphabet-  , delta   :: s -> i -> Maybe s -- ^ State transition function-  }---- | This machine always accepts, never terminates, and always has unit state.-unitMachine :: Machine () i-unitMachine = Machine-  { initial  = ()-  , final    = const False-  , alpha    = const True-  , delta    = (\s i -> Just ())-  }---- | The `step` function runs a machine in a state against a single input.--- The state remains fixed once a final state is encountered. The--- result is `Left state input` if some `state` failed for an `ìnput`, and--- `Right state` for a successful state.-step :: Machine s i -> s -> i -> Either (s, i) s-step m s i-  | final m s = Right s-  | alpha m i = case delta m s i of-      Just s' -> Right s'-      Nothing -> Left (s, i)-  | otherwise = Right s---- | The `validate` function takes a machine and a list of inputs. The machine--- is started from its initial state and run against the inputs in turn.--- It returns the state and input on failure, and just the state on success.-validate :: Machine s i -> [i] -> Either (s, i) s-validate m = foldl (>>=) (Right (initial m)) . map (flip (step m))---- | This function is similar to `validate`, but outputs each intermediary--- state as well. For an incremental version, use `simulate`.-validates :: Machine s i -> [i] -> [Either (s, i) s]-validates m = scanl (>>=) (Right (initial m)) . map (flip (step m))------------------------------------------------------------------------------------- A Process is a list of successful values, followed by an error if one--- occured. This captures the idea that a computation may produce a list of--- elements before possibly failing. This gives us an incremental interface--- to data processed from machine transitions.-data Process e a-  = Done-  | Fail e-  | Prod a (Process e a)- deriving Show--toList :: Process e a -> [a]-toList (Fail _)    = []-toList Done        = []-toList (Prod a as) = a : toList as--toMaybe :: Process e a -> Maybe e-toMaybe (Fail e)    = Just e-toMaybe Done        = Nothing-toMaybe (Prod _ as) = toMaybe as---- | A machine can be analysed while it is accepting input in order to extract--- some information. This function takes a machine and a function that extracts--- data and produces output. On failure, the machine state and input are--- produced. Note that when an input is not in the machine's alphabet,--- then there is no transition, and so no output is produced in response--- to that input.-analyse :: Machine s i          -- ^ The machine used-        -> (s -> i -> Maybe o)  -- ^ An extraction function that may produce output-        -> [i]                  -- ^ A list of input-        -> Process (s, i) o     -- ^ A process that produces output-analyse machine extract is = go (initial machine) is- where-  -- go :: s -> [i] -> Process (s, i) o-  go _ [] = Done-  go s (i:is)-    | final machine s = Done-    | alpha machine i =-        case delta machine s i of-          Nothing -> Fail (s, i)-          Just s' ->-            case extract s i of-              Nothing -> go s' is-              Just o  -> Prod o (go s' is)-    | otherwise = go s is---- | Machines sometimes need to operate on coarser input than they are defined--- for. This function takes a function that refines input and a machine that--- works on refined input, and produces a machine that can work on coarse input.-refineM :: (i -> j) -> Machine s j -> Machine s i-refineM refine machine = Machine-  { initial = initial machine-  , final   = final machine-  , alpha   = alpha machine . refine-  , delta   = \s -> delta machine s . refine-  }------------------------------------------------------------------------------------- | This function produces a process that outputs all the states that a--- machine goes through.-simulate :: Machine s i -> [i] -> Process (s, i) (s, i)-simulate machine = analyse machine (\s i -> delta machine s i >>= \s' -> return (s', i))------------------------------------------------------------------------------------- | A state augmented by Timestamp information is held in `profileState`.--- When the state changes, `profileMap` stores a map between each state--- and its cumulative time.-data Profile s = Profile-  { profileState :: s               -- ^ The current state-  , profileTime  :: Timestamp       -- ^ The entry time of the state-  } deriving (Show)---- | This function takes a machine and profiles its state.-profileM :: Ord s-         => (i -> Timestamp)-         -> Machine s i-         -> Machine (Profile s) i-profileM timer machine = Machine-  { initial = Profile (initial machine) 0-  , final   = final machine . profileState-  , alpha   = alpha machine-  , delta   = profileMDelta-  }- where-  profileMDelta (Profile s _) i = do-    s' <- delta machine s i-    return $ Profile s' (timer i)---- | extractProfile returns the state, the time this state was made,--- and the time spent in this state.-extractProfile :: (i -> Timestamp)                -- ^ Extracts current timestamp-               -> Profile s                       -- ^ A profiled state-               -> i                               -- ^ Some input-               -> Maybe (s, Timestamp, Timestamp) -- ^ (state, currentTime, elapsedTime)-extractProfile timer p i = Just (profileState p, profileTime p, timer i - profileTime p)--profile :: (Ord s, Eq s)-        => Machine s i       -- ^ A machine to profile-        -> (i -> Timestamp)  -- ^ Converts input to timestamps-        -> [i]               -- ^ The list of input-        -> Process (Profile s, i) (s, Timestamp, Timestamp)-profile machine timer =-  analyse (profileM timer machine)-          (extractProfile timer)--profileIndexed :: (Ord k, Ord s, Eq s)-               => Machine s i-               -> (i -> Maybe k)-               -> (i -> Timestamp)-               -> [i]-               -> Process (Map k (Profile s), i) (k, (s, Timestamp, Timestamp))-profileIndexed machine index timer =-  analyse (indexM index (profileM timer machine))-          (extractIndexed (extractProfile timer) index)--extractIndexed :: Ord k => (s -> i -> Maybe o) -> (i -> Maybe k) -> (Map k s -> i -> Maybe (k, o))-extractIndexed extract index m i = do-  k <- index i-  s <- M.lookup k m-  o <- extract s i-  return (k, o)---- | An indexed machine takes a function that multiplexes the input to a key--- and then takes a machine description to an indexed machine.-indexM :: Ord k-       => (i -> Maybe k)        -- ^ An indexing function-       -> Machine s i           -- ^ A machine to index with-       -> Machine (Map k s) i   -- ^ The indexed machine-indexM index machine = Machine-  { initial = M.empty-  , final   = indexMFinal-  , alpha   = indexMAlpha-  , delta   = indexMDelta-  }- where-  -- An indexer never reaches a final state: it is always possible that-  -- an event comes along that is accepted by a machine that is not-  -- yet in in the index.-  ---  -- An alternative view is that the indexer is in a final state if all its-  -- elements are, but this would not allow the creation of new indexes:-  --     indexMFinal m = not (M.null m) && (all (final machine) . M.elems $ m)-  indexMFinal = const False--  -- The alphabet of the indexer is that of its elements.-  indexMAlpha = alpha machine--  -- If the index is not yet in the mapping, we start a new machine in its-  -- initial state. The indexer fails if indexed state fails.-  indexMDelta m i = do-    k <- index i-    let state = fromMaybe (initial machine) (M.lookup k m)-    state' <- delta machine state i-    return $ M.insert k state' m--profileRouted :: (Ord k, Ord s, Eq s, Eq r)-              => Machine s i-              -> Machine r i-              -> (r -> i -> Maybe k)-              -> (i -> Timestamp)-              -> [i]-              -> Process ((Map k (Profile s), r), i) (k, (s, Timestamp, Timestamp))-profileRouted machine router index timer =-  analyse (routeM router index (profileM timer machine))-          (extractRouted (extractProfile timer) index)--extractRouted :: Ord k => (s -> i -> Maybe o) -> (r -> i -> Maybe k) -> ((Map k s, r)  -> i -> Maybe (k, o))-extractRouted extract index (m, r) i = do-  k <- index r i-  s <- M.lookup k m-  o <- extract s i-  return (k, o)----- | A machine can be indexed not only by the inputs, but also by the state--- of an intermediary routing machine. This is a generalisation of indexM.-routeM :: (Ord k)-       => Machine r i-       -> (r -> i -> Maybe k)-       -> Machine s i-       -> Machine (Map k s, r) i-routeM router index machine = Machine-  { initial = (M.empty, initial router)-  , final   = routeMFinal-  , alpha   = routeMAlpha-  , delta   = routeMDelta-  }- where-  -- As with indexers, there is no final state.-  routeMFinal = const False--  -- The alphabet is that of the router combined with the machine-  routeMAlpha i = alpha router i || alpha machine i--  routeMDelta (m, r) i = do-    r' <- if alpha router i-          then delta router r i-          else return r-    m' <- if alpha machine i-          then case index r' i of-            Just k -> do-              s' <- delta machine (fromMaybe (initial machine) (M.lookup k m)) i-              return $ M.insert k s' m-            Nothing -> return m-          else return m-    return (m', r')
− GHC/RTS/Events/Analysis/Capability.hs
@@ -1,209 +0,0 @@-module GHC.RTS.Events.Analysis.Capability-  ( capabilityThreadPoolMachine-  , capabilityThreadRunMachine-  , capabilityThreadIndexer-  , capabilityTaskPoolMachine-  , capabilityTaskOSMachine-  )- where--import GHC.RTS.Events-import GHC.RTS.Events.Analysis--import Data.Map (Map)-import qualified Data.Map as M---- | This state machine tracks threads residing on capabilities.--- Each thread can only reside on one capability, but can be migrated between--- them.-capabilityThreadPoolMachine :: Machine (Map ThreadId Int) CapEvent-capabilityThreadPoolMachine = Machine-  { initial = M.empty-  , final   = const False-  , alpha   = capabilityThreadPoolMachineAlpha-  , delta   = capabilityThreadPoolMachineDelta-  }- where-  capabilityThreadPoolMachineAlpha capEvent = case spec . ce_event $ capEvent of-     (CreateThread _)    -> True-     (StopThread _ _)    -> True-     (MigrateThread _ _) -> True-     _                   -> False--  capabilityThreadPoolMachineDelta mapping capEvent = do-    capId <- ce_cap capEvent-    case spec . ce_event $ capEvent of-      (CreateThread threadId)              -> insertThread threadId capId mapping-      (StopThread threadId ThreadFinished) -> deleteThread threadId mapping-      (StopThread _ _)                     -> Just mapping-      (MigrateThread threadId capId')      -> deleteThread threadId mapping >>=-                                                insertThread threadId capId'-      _                                    -> Nothing-   where-    insertThread :: ThreadId -> Int -> Map ThreadId Int -> Maybe (Map ThreadId Int)-    insertThread threadId capId m-      | threadId `M.member` m = Nothing -- The thread already exists-      | otherwise             = Just $ M.insert threadId capId m--    deleteThread :: ThreadId -> Map ThreadId Int -> Maybe (Map ThreadId Int)-    deleteThread threadId m-      | threadId `M.notMember` m = Nothing -- The thread doesn't exist-      | otherwise                = Just $ M.delete threadId m---- | This state machine tracks threads running on capabilities, only one thread--- may run on a capability at a time.-capabilityThreadRunMachine :: Machine (Map Int ThreadId) CapEvent-capabilityThreadRunMachine = Machine-  { initial = M.empty-  , final   = const False-  , alpha   = threadRunAlpha-  , delta   = threadRunDelta-  }- where-  threadRunAlpha capEvent = case spec . ce_event $ capEvent of-    -- TODO: can threads be migrated while they are running?-    -- TODO: take into account paused threads-    (RunThread _)     -> True-    (StopThread _ _ ) -> True-    _                 -> False--  -- The indexer fails if a thread is inserted where one already exists,-  -- or if a thread is deleted that doesn't exist.-  threadRunDelta mapping e = do-    capId <- ce_cap e-    case spec . ce_event $ e of-      (RunThread threadId)     -> runThread capId threadId mapping-      (StopThread threadId _ ) -> stopThread threadId mapping-      _                        -> Just mapping-   where-    runThread :: Int -> ThreadId -> Map Int ThreadId -> Maybe (Map Int ThreadId)-    runThread capId threadId m-      | capId `M.member` m        = Nothing -- A thread is already on this cap-      | threadId `elem` M.elems m = Nothing -- This thread is already on a cap-      | otherwise                 = Just $ M.insert capId threadId m-    stopThread :: ThreadId -> Map Int ThreadId -> Maybe (Map Int ThreadId)-    stopThread threadId m-      | notElem threadId . M.elems $ m = Nothing -- The thread doesn't exist-      | otherwise                      = Just $ M.filter (/= threadId) m--capabilityThreadIndexer :: Map Int ThreadId -> CapEvent -> Maybe ThreadId-capabilityThreadIndexer m capEvent = case spec . ce_event $ capEvent of-  (CreateSparkThread threadId)  -> Just threadId-  (CreateThread threadId)       -> Just threadId-  (RunThread threadId)          -> Just threadId-  (StopThread threadId _)       -> Just threadId-  (ThreadRunnable threadId)     -> Just threadId-  (MigrateThread threadId _)    -> Just threadId-  (WakeupThread threadId capId) -> if Just capId == ce_cap capEvent-                                   then Just threadId-                                   else Nothing-  _                             -> mThreadId- where-  mThreadId = ce_cap capEvent >>= (\capId -> M.lookup capId m)---- | This state machine tracks Haskell tasks, represented by TaskId,--- residing on capabilities.--- Each Haskell task can only reside on one capability, but can be migrated--- between them.-capabilityTaskPoolMachine :: Machine (Map TaskId Int) CapEvent-capabilityTaskPoolMachine = Machine-  { initial = M.empty-  , final   = const False-  , alpha   = capabilityTaskPoolMachineAlpha-  , delta   = capabilityTaskPoolMachineDelta-  }- where-  capabilityTaskPoolMachineAlpha capEvent = case spec . ce_event $ capEvent of-     TaskCreate{}  -> True-     TaskDelete{}  -> True-     TaskMigrate{} -> True-     _             -> False--  capabilityTaskPoolMachineDelta mapping capEvent = do-    case spec . ce_event $ capEvent of-      TaskCreate {taskId, cap}           -> insertTask taskId cap mapping-      TaskDelete {taskId}                -> deleteTask taskId Nothing mapping-      TaskMigrate {taskId, cap, new_cap} ->-        deleteTask taskId (Just cap) mapping >>=-          insertTask taskId new_cap-      _                                  -> Nothing-   where-    insertTask :: TaskId -> Int -> Map TaskId Int-               -> Maybe (Map TaskId Int)-    insertTask taskId cap m-      | taskId `M.member` m = Nothing  -- The task already exists.-      | otherwise           = Just $ M.insert taskId cap m--    deleteTask :: TaskId -> Maybe Int -> Map TaskId Int-               -> Maybe (Map TaskId Int)-    deleteTask taskId expectedcap m-      | Just oldcap <- M.lookup taskId m-      , maybe True (==oldcap) expectedcap-      = Just $ M.delete taskId m-      | otherwise-      = Nothing  -- The task doesn't exist, or does but with an unexpected cap.---- | This state machine tracks Haskell tasks (represented by the KernelThreadId--- of their OS thread) residing on capabilities and additionally--- tracks the (immutable) assignment of OS thread ids (KernelThreadId)--- to tasks ids (TaskId).--- Each Haskell task can only reside on one capability, but can be migrated--- between them.------ Invariant for the @(Map KernelThreadId Int, Map TaskId KernelThreadId)@ --- type: the second map is an injection (verified by the machine --- in 'insertTaskOS') and the following sets are equal: --- keys of the fist map and values of the second--- (follows from the construction of the maps by the machine).------ The machine verifies as much as 'capabilityTaskPoolMachine' and additionally--- the data invariant, and offers a richer verification profile.-capabilityTaskOSMachine :: Machine (Map KernelThreadId Int,-                                    Map TaskId KernelThreadId)-                                   CapEvent-capabilityTaskOSMachine = Machine-  { initial = (M.empty, M.empty)-  , final   = const False-  , alpha   = capabilityTaskOSMachineAlpha-  , delta   = capabilityTaskOSMachineDelta-  }- where-  capabilityTaskOSMachineAlpha capEvent = case spec . ce_event $ capEvent of-     TaskCreate{}  -> True-     TaskDelete{}  -> True-     TaskMigrate{} -> True-     _             -> False--  capabilityTaskOSMachineDelta mapping capEvent = do-    case spec . ce_event $ capEvent of-      TaskCreate {taskId, cap, tid} -> insertTaskOS taskId cap tid mapping-      TaskDelete {taskId}           -> deleteTaskOS taskId mapping-      TaskMigrate {taskId, new_cap} -> migrateTaskOS taskId new_cap mapping-      _                             -> Nothing-   where-    insertTaskOS :: TaskId -> Int -> KernelThreadId-                 -> (Map KernelThreadId Int, Map TaskId KernelThreadId)-                 -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)-    insertTaskOS taskId cap tid (m, ma)-      | taskId `M.member` ma = Nothing  -- The task already exists.-      | tid `M.member` m     = Nothing  -- The OS thread already exists.-      | otherwise            = Just (M.insert tid cap m,-                                     M.insert taskId tid ma)--    deleteTaskOS :: TaskId -> (Map KernelThreadId Int,-                               Map TaskId KernelThreadId)-                 -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)-    deleteTaskOS taskId (m, ma) =-      case M.lookup taskId ma of-        Nothing  -> Nothing  -- The task doesn't exist.-        Just tid -> Just (M.delete tid m,-                          M.delete taskId ma)--    migrateTaskOS :: TaskId -> Int -> (Map KernelThreadId Int,-                                       Map TaskId KernelThreadId)-                  -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)-    migrateTaskOS taskId new_cap (m, ma) =-      case M.lookup taskId ma of-        Nothing -> Nothing  -- The task doesn't exist.-        Just tid -> Just (M.insert tid new_cap m,-                          ma)  -- The assignment is immutable.
− GHC/RTS/Events/Analysis/SparkThread.hs
@@ -1,114 +0,0 @@-module GHC.RTS.Events.Analysis.SparkThread-  ( SparkThreadState (..)-  , sparkThreadMachine-  , capabilitySparkThreadMachine-  , capabilitySparkThreadIndexer-  )- where--import GHC.RTS.Events-import GHC.RTS.Events.Analysis--import Data.Map (Map)-import qualified Data.Map as M-import Data.Set (Set)-import qualified Data.Set as S--import Debug.Trace--data SparkThreadState-  = SparkThreadInitial-  | SparkThreadCreated-  | SparkThreadRunning Int-  | SparkThreadPaused Int-  | SparkThreadFinal-  deriving (Eq, Ord, Show)--sparkThreadMachine :: Machine SparkThreadState EventInfo-sparkThreadMachine = Machine-  { initial = SparkThreadInitial-  , final   = sparkThreadFinal-  , alpha   = sparkThreadAlpha-  , delta   = sparkThreadDelta-  }- where-  sparkThreadFinal SparkThreadFinal = True-  sparkThreadFinal _                = False--  -- sparkThreadAlpha (CreateSparkThread _) = True-  sparkThreadAlpha (RunThread _)         = True-  sparkThreadAlpha (StopThread _ _)      = True-  sparkThreadAlpha SparkRun              = True-  sparkThreadAlpha (SparkSteal _)        = True-  sparkThreadAlpha _                     = False--  -- SparkThreadInitial-  -- sparkThreadDelta SparkThreadInitial (CreateSparkThread _) = Just SparkThreadInitial-  sparkThreadDelta SparkThreadInitial (RunThread _)         = Just SparkThreadCreated-  -- SparkThreadCreated-  sparkThreadDelta SparkThreadCreated SparkRun                      = Just (SparkThreadRunning 0)-  sparkThreadDelta SparkThreadCreated (SparkSteal _)                = Just (SparkThreadRunning 0)-  sparkThreadDelta SparkThreadCreated (StopThread _ ThreadFinished) = Just SparkThreadFinal-  -- SparkThreadRunning-  sparkThreadDelta (SparkThreadRunning n) (StopThread _ ThreadFinished) = Just SparkThreadFinal-  sparkThreadDelta (SparkThreadRunning n) (StopThread _ _)              = Just (SparkThreadPaused n)-  sparkThreadDelta (SparkThreadRunning n) SparkRun                      = Just (SparkThreadRunning (n+1))-  sparkThreadDelta (SparkThreadRunning n) (SparkSteal _)                = Just (SparkThreadRunning (n+1))-  -- SparkThreadPaused-  sparkThreadDelta (SparkThreadPaused n) (RunThread _) = Just (SparkThreadRunning n)-  -- Other-  sparkThreadDelta _ _ = Nothing--capabilitySparkThreadMachine :: Machine (Map Int ThreadId, Set ThreadId) CapEvent-capabilitySparkThreadMachine = Machine-  { initial = (M.empty, S.empty)-  , final   = const False-  , alpha   = capabilitySparkThreadAlpha-  , delta   = capabilitySparkThreadDelta-  }- where-  capabilitySparkThreadAlpha capEvent = case spec . ce_event $ capEvent of-    (CreateSparkThread _)         -> True-    (RunThread _)                 -> True-    (StopThread _ _)              -> True-    _                             -> False-  capabilitySparkThreadDelta (m, s) e = do-    capId <- ce_cap e-    case spec . ce_event $ e of-      (CreateSparkThread threadId)         -> createThread threadId-      -- (StopThread threadId ThreadFinished) -> stopThread threadId-      (StopThread threadId _)              -> pauseThread threadId-      (RunThread threadId)                 -> runThread capId threadId-      _                                    -> Just (m, s)-   where-    createThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)-    createThread threadId-      | S.member threadId s = Nothing -- A spark thread with this Id already created-      | otherwise           = Just (m, S.insert threadId s)--    runThread :: Int -> ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)-    runThread capId threadId-      | M.member capId m          = Nothing      -- A thread is already on this cap-      | threadId `elem` M.elems m = Nothing      -- This thread is already on a cap-      | S.notMember threadId s    = Just (m, s)  -- Not a spark thread-      | otherwise                 = Just (M.insert capId threadId m, S.insert threadId s)--    stopThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)-    stopThread threadId = Just (M.filter (/= threadId) m, S.delete threadId s)--    pauseThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)-    pauseThread threadId = Just (M.filter (/= threadId) m, s)--capabilitySparkThreadIndexer :: (Map Int ThreadId, Set ThreadId) -> CapEvent -> Maybe ThreadId-capabilitySparkThreadIndexer (m, s) capEvent = case spec . ce_event $ capEvent of-  (CreateThread threadId)   -> inSparkThreadPool threadId-  (RunThread threadId)      -> inSparkThreadPool threadId-  (StopThread threadId _)   -> inSparkThreadPool threadId-  -- (WakeupThread threadId _) -> inSparkThreadPool threadId-  _                         -> ce_cap capEvent >>= (\capId -> M.lookup capId m)- where-  inSparkThreadPool :: ThreadId -> Maybe ThreadId-  inSparkThreadPool threadId-    | S.member threadId s = Just threadId-    | otherwise           = Nothing-
− GHC/RTS/Events/Analysis/Thread.hs
@@ -1,53 +0,0 @@-module GHC.RTS.Events.Analysis.Thread-  ( ThreadState (..)-  , threadMachine-  )- where--import GHC.RTS.Events-import GHC.RTS.Events.Analysis------------------------------------------------------------------------------------- | This datatype defines the state machine for a single thread.-data ThreadState-  = ThreadInitial-  | ThreadQueued-  | ThreadRunning-  | ThreadStopped-  | ThreadFinal-  deriving (Show, Eq, Ord)---- | This state machine tracks the events processed by a thread.-threadMachine :: Machine ThreadState EventInfo-threadMachine = Machine-  { initial = ThreadInitial-  , final   = threadFinal-  , alpha   = threadAlpha-  , delta   = threadDelta-  }- where-  threadFinal ThreadFinal   = True-  threadFinal _             = False--  threadAlpha (CreateThread _)   = True-  threadAlpha (RunThread _)      = True-  threadAlpha (StopThread _ _)   = True-  threadAlpha (WakeupThread _ _) = True-  threadAlpha _                  = False--  -- ThreadInitial-  threadDelta ThreadInitial (CreateThread _) = Just ThreadQueued-  -- ThreadQueued-  threadDelta ThreadQueued (RunThread _)      = Just ThreadRunning-  threadDelta ThreadQueued (WakeupThread _ _) = Just ThreadQueued-  -- ThreadRunning-  threadDelta ThreadRunning (StopThread _ StackOverflow)  = Just ThreadQueued-  threadDelta ThreadRunning (StopThread _ HeapOverflow)   = Just ThreadQueued-  threadDelta ThreadRunning (StopThread _ ForeignCall)    = Just ThreadQueued-  threadDelta ThreadRunning (StopThread _ ThreadFinished) = Just ThreadFinal-  threadDelta ThreadRunning (StopThread _ _)              = Just ThreadStopped-  -- ThreadStopped-  threadDelta ThreadStopped (RunThread _)      = Just ThreadRunning-  threadDelta ThreadStopped (WakeupThread _ _) = Just ThreadQueued-  -- Unknown-  threadDelta _ _ = Nothing
− GHC/RTS/Events/Merge.hs
@@ -1,118 +0,0 @@-{-# OPTIONS_GHC -funbox-strict-fields #-}--module GHC.RTS.Events.Merge (mergeEventLogs) where--import GHC.RTS.Events-import Data.Monoid-import Data.List (foldl')-import qualified Data.Map as M-import Data.Word (Word32, Word16)---- TODO: add a merge mode where the events are synchronized using--- the wall clock time event at the start of both eventlogs (for newer GHCs).--- Such merge is not associative so we either need to take many arguments--- or cope with eventlogs with many wall clock time events (assume they--- are products of previous merges). To decide.--{--GHC numbers caps and capsets in sequential order, starting at 0.  Threads are-similarly numbered, but start at 1.  In order to merge logs 'x' and 'y',-we find the # of occupied numbers for each variable type in 'x',-then increment each variable in 'y' by that amount.-We assume that if a number is occupied, so are all lower numbers.-This guarantees that variables in each log don't clash,-and that the meaning of each reference to a thread/cap/capset is-preserved.--}--mergeEventLogs :: EventLog -> EventLog -> EventLog-mergeEventLogs (EventLog h1 (Data xs)) (EventLog h2 (Data ys)) =-  let headerMap = M.fromList . map (\ et@EventType {num} -> (num, et))-      m1 = headerMap $ eventTypes h1-      m2 = headerMap $ eventTypes h2-      combine et1 et2 | et1 == et2 = et1-      combine _ _ = error "can't merge eventlogs with inconsistent headers"-      m = M.unionWith combine m1 m2-      h = Header $ M.elems m-  in h == h `seq`  -- Detect inconsistency ASAP.-     EventLog h . Data . mergeOn time xs $ shift (maxVars xs) ys--mergeOn :: Ord b => (a -> b) -> [a] -> [a] -> [a]-mergeOn f [] ys = ys-mergeOn f xs [] = xs-mergeOn f (x:xs) (y:ys) | f x <= f y = x : mergeOn f xs (y:ys)-                        | otherwise  = y : mergeOn f (x:xs) ys---- TODO: rename, since these are not maximal values, but numbers of used values-data MaxVars = MaxVars { mcapset :: !Word32-                       , mcap :: !Int-                       , mthread :: !ThreadId }--- TODO introduce parallel RTS process and machine var.s--instance Monoid MaxVars where-    mempty  = MaxVars 0 0 0-    mappend (MaxVars a b c) (MaxVars x y z) =-      MaxVars (max a x) (b + y) (max c z)-    -- avoid space leaks:-    mconcat = foldl' mappend mempty---- Capabilities are represented as Word16.  An event block marked with the--- capability of 0xffff belongs to no capability-isCap :: Int -> Bool-isCap x = fromIntegral x /= ((-1) :: Word16)---- For caps we find the maximum value by summing the @Startup@ declarations.--- TODO: it's not trivial to add CapCreate since we don't know--- if created caps are guaranteed to be numbered consecutively or not--- (are they? is it asserted in GHC code somewhere?). We might instead--- just scan all events mentioning a cap and take the maximum,--- but it's a slower and much longer code, requiring constant maintenance.-maxVars :: [Event] -> MaxVars-maxVars = mconcat . map (maxSpec . spec)- where-    -- only checking binding sites right now, sufficient?-    maxSpec (Startup n) = mempty { mcap = n }-    -- Threads start at 1.-    maxSpec (CreateThread t) = mempty { mthread = t }-    maxSpec (CreateSparkThread t) = mempty { mthread = t }-    -- Capsets start at 0.-    maxSpec (CapsetCreate cs _) = mempty {mcapset = cs + 1 }-    maxSpec (EventBlock _ _ es) = maxVars es-    maxSpec _  = mempty--sh :: Num a => a -> a -> a-sh x y = x + y--shift :: MaxVars -> [Event] -> [Event]-shift mv@(MaxVars mcs mc mt) = map (\(Event t s) -> Event t $ shift' s)- where-    -- -1 marks a block that isn't attached to a particular capability-    shift' (EventBlock et c bs) = EventBlock et (msh c) $ shift mv bs-     where msh x = if isCap x then sh mc x else x-    shift' (CreateThread t) = CreateThread $ sh mt t-    shift' (RunThread t) = RunThread $ sh mt t-    shift' (StopThread t s) = StopThread (sh mt t) s-    shift' (ThreadRunnable t) = ThreadRunnable $ sh mt t-    shift' (MigrateThread t c) = MigrateThread (sh mt t) (sh mc c)-    shift' (WakeupThread t c) = WakeupThread (sh mt t) (sh mc c)-    shift' (ThreadLabel t l) = ThreadLabel (sh mt t) l-    shift' (CreateSparkThread t) = CreateSparkThread (sh mt t)-    shift' (SparkSteal c) = SparkSteal (sh mc c)-    shift' (TaskCreate tk c tid) = TaskCreate tk (sh mc c) tid-    shift' (TaskMigrate tk c1 c2) = TaskMigrate tk (sh mc c1) (sh mc c2)-    shift' (CapCreate c) = CapCreate (sh mc c)  -- TODO: correct?-    shift' (CapDelete c) = CapDelete (sh mc c)  -- TODO: correct?-    shift' (CapDisable c) = CapDisable (sh mc c)-    shift' (CapEnable c) = CapEnable (sh mc c)-    shift' (CapsetCreate cs cst) = CapsetCreate (sh mcs cs) cst-    shift' (CapsetDelete cs) = CapsetDelete (sh mcs cs)-    shift' (CapsetAssignCap cs c) = CapsetAssignCap (sh mcs cs) (sh mc c)-    shift' (CapsetRemoveCap cs c) = CapsetRemoveCap (sh mcs cs) (sh mc c)-    shift' (RtsIdentifier cs rts) = RtsIdentifier (sh mcs cs) rts-    shift' (ProgramArgs cs as) = ProgramArgs (sh mcs cs) as-    shift' (ProgramEnv cs es) = ProgramEnv (sh mcs cs) es-    shift' (OsProcessPid cs pid) = OsProcessPid (sh mcs cs) pid-    shift' (OsProcessParentPid cs ppid) = OsProcessParentPid (sh mcs cs) ppid-    shift' (WallClockTime cs sec nsec) = WallClockTime (sh mcs cs) sec nsec-    shift' x = x-    -- TODO extend by new shift for Eden events
GhcEvents.hs view
@@ -1,41 +1,42 @@ {-# LANGUAGE CPP #-}+ module Main where  import GHC.RTS.Events+import GHC.RTS.Events.Incremental import GHC.RTS.Events.Merge import GHC.RTS.Events.Analysis import GHC.RTS.Events.Analysis.SparkThread import GHC.RTS.Events.Analysis.Thread import GHC.RTS.Events.Analysis.Capability -import System.Environment-import Text.Printf-import Data.List+import System.Environment (getArgs) import Data.Either (rights)-import Data.Function-import Data.IntMap (IntMap)-import Data.Map (Map) import qualified Data.Map as M-import Data.Maybe import System.IO import System.Exit +main :: IO () main = getArgs >>= command -command ["--help"] = do-    putStr usage+command :: [String] -> IO ()+command ["--help"] = putStr usage +command ["inc", file] = printEventsIncremental False file++command ["inc", "force", file] = printEventsIncremental True file+ command ["show", file] = do-    log <- readLogOrDie file-    putStrLn $ ppEventLog log+    evtLog <- readLogOrDie file+    putStrLn $ ppEventLog evtLog  command ["show", "threads", file] = do     eventLog <- readLogOrDie file     let eventTypeMap = buildEventTypeMap . eventTypes . header $ eventLog-    let capEvents = sortEvents . events . dat $ eventLog-    let mappings  = rights . validates capabilityThreadRunMachine $ capEvents-    let indexes = map (uncurry capabilityThreadIndexer) $ zip mappings capEvents-    let threadMap = M.fromListWith (++) . reverse $ zip indexes (map return capEvents)+        evts = sortEvents $ events $ dat eventLog+        mappings  = rights . validates capabilityThreadRunMachine $ evts+        indexes = zipWith capabilityThreadIndexer mappings evts+        threadMap = M.fromListWith (++) . reverse $ zip indexes (map return evts)     putStrLn "Event Types:"     putStrLn . unlines . map ppEventType . eventTypes . header $ eventLog     putStrLn "Thread Indexed Events:"@@ -47,9 +48,9 @@ command ["show", "caps", file] = do     eventLog <- readLogOrDie file     let eventTypeMap = buildEventTypeMap . eventTypes . header $ eventLog-    let capEvents = sortEvents . events . dat $ eventLog-    let indexes = map ce_cap capEvents-    let capMap = M.fromListWith (++) . reverse $ zip indexes (map return capEvents)+    let evts = sortEvents . events . dat $ eventLog+        indexes = map evCap evts+        capMap = M.fromListWith (++) . reverse $ zip indexes (map return evts)     putStrLn "Event Types:"     putStrLn . unlines . map ppEventType . eventTypes . header $ eventLog     putStrLn "Cap Indexed Events:"@@ -66,11 +67,11 @@  command ["validate", "threads", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog+    let evts = sortEvents . events . dat $ eventLog     let result = validate (routeM capabilityThreadRunMachine                                   capabilityThreadIndexer-                                  (refineM (spec . ce_event) threadMachine))-                          capEvents+                                  (refineM evSpec threadMachine))+                          evts     putStrLn $ showValidate (\(m, n) ->                                "\nThread States:\n" ++ showIndexed show show m ++                                "\nCap States:\n" ++ showIndexed show show n)@@ -78,110 +79,115 @@  command ["validate", "threadpool", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog-    let result = validate capabilityThreadPoolMachine capEvents+    let evts = sortEvents . events . dat $ eventLog+    let result = validate capabilityThreadPoolMachine evts     putStrLn $ showValidate show show result  command ["validate", "threadrun", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog-    let result = validate capabilityThreadRunMachine capEvents+    let evts = sortEvents . events . dat $ eventLog+    let result = validate capabilityThreadRunMachine evts     putStrLn $ showValidate show show result  command ["validate", "taskpool", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog-    let result = validate capabilityTaskPoolMachine capEvents+    let evts = sortEvents . events . dat $ eventLog+    let result = validate capabilityTaskPoolMachine evts     putStrLn $ showValidate show show result  command ["validate", "tasks", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog-    let result = validate capabilityTaskOSMachine capEvents+    let evts = sortEvents . events . dat $ eventLog+    let result = validate capabilityTaskOSMachine evts     putStrLn $ showValidate show show result  command ["validate", "sparks", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog+    let evts = sortEvents . events . dat $ eventLog     let result = validate                    (routeM capabilitySparkThreadMachine capabilitySparkThreadIndexer-                     (refineM (spec . ce_event) sparkThreadMachine))-                   capEvents+                     (refineM evSpec sparkThreadMachine))+                   evts     putStrLn $ showValidate show show result  command ["simulate", "threads", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog+    let evts = sortEvents . events . dat $ eventLog     let result = simulate (routeM capabilityThreadRunMachine                                   capabilityThreadIndexer-                                  (refineM (spec . ce_event) threadMachine))-                          capEvents+                                  (refineM evSpec threadMachine))+                          evts     putStrLn . showProcess $ result  command ["simulate", "threadpool", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog-    let result = simulate capabilityThreadPoolMachine capEvents+    let evts = sortEvents . events . dat $ eventLog+    let result = simulate capabilityThreadPoolMachine evts     putStrLn . showProcess $ result  command ["simulate", "threadrun", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog-    let result = simulate capabilityThreadRunMachine capEvents+    let evts = sortEvents . events . dat $ eventLog+    let result = simulate capabilityThreadRunMachine evts     putStrLn . showProcess $ result  command ["simulate", "taskpool", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog-    let result = simulate capabilityTaskPoolMachine capEvents+    let evts = sortEvents . events . dat $ eventLog+    let result = simulate capabilityTaskPoolMachine evts     putStrLn . showProcess $ result  command ["simulate", "tasks", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog-    let result = simulate capabilityTaskOSMachine capEvents+    let evts = sortEvents . events . dat $ eventLog+    let result = simulate capabilityTaskOSMachine evts     putStrLn . showProcess $ result  command ["simulate", "sparks", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog+    let evts = sortEvents . events . dat $ eventLog     let result = simulate               (routeM capabilitySparkThreadMachine                   capabilitySparkThreadIndexer-                  (refineM (spec . ce_event) sparkThreadMachine))-              capEvents+                  (refineM evSpec sparkThreadMachine)) evts     putStrLn . showProcess $ result  command ["profile", "threads", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog+    let evts = sortEvents . events . dat $ eventLog     let result = profileRouted-                   (refineM (spec. ce_event) threadMachine)+                   (refineM evSpec threadMachine)                    capabilityThreadRunMachine-                   capabilityThreadIndexer-                   (time . ce_event)-                   capEvents+                   capabilityThreadIndexer evTime evts     putStrLn . showProcess $ result  command ["profile", "sparks", file] = do     eventLog <- readLogOrDie file-    let capEvents = sortEvents . events . dat $ eventLog+    let evts = sortEvents . events . dat $ eventLog     let result = profileRouted-                   (refineM (spec . ce_event) sparkThreadMachine)+                   (refineM evSpec sparkThreadMachine)                    capabilitySparkThreadMachine                    capabilitySparkThreadIndexer-                   (time . ce_event)-                   capEvents+                   evTime evts     putStrLn . showProcess $ result  command _ = putStr usage >> die "Unrecognized command" +readLogOrDie :: FilePath -> IO EventLog+readLogOrDie file = do+    e <- readEventLogFromFile file+    case e of+        Left s    -> die ("Failed to parse " ++ file ++ ": " ++ s)+        Right evtLog -> return evtLog++usage :: String usage = unlines $ map pad strings  where     align = 4 + (maximum . map (length . fst) $ strings)     pad (x, y) = zipWith const (x ++ repeat ' ') (replicate align ()) ++ y     strings = [ ("ghc-events --help:",                     "Display this help.")-+              , ("ghc-events inc <file>:",                 "Pretty print an event log incrementally")+              , ("ghc-events inc force <file>:",           "Pretty print an event log incrementally. Retry on incomplete input (aka 'tail -f').")               , ("ghc-events show <file>:",                "Pretty print an event log.")               , ("ghc-events show threads <file>:",        "Pretty print an event log, ordered by threads.")               , ("ghc-events show caps <file>:",           "Pretty print an event log, ordered by capabilities.")@@ -206,23 +212,13 @@               , ("ghc-events profile sparks <file>:",      "Profile spark thread states.")               ] -readLogOrDie file = do-    e <- readEventLogFromFile file-    case e of-        Left s    -> die ("Failed to parse " ++ file ++ ": " ++ s)-        Right log -> return log--#if ! MIN_VERSION_base(4,8,0)-die s = do hPutStrLn stderr s; exitWith (ExitFailure 1)-#endif- showValidate :: (s -> String) -> (i -> String) -> Either (s, i) s -> String showValidate showState showInput (Left (state, input)) =   "Invalid eventlog:"-  ++ "\nState:\n" ++ ( showState state )-  ++ "\nInput:\n" ++ ( showInput input )+  ++ "\nState:\n" ++ showState state+  ++ "\nInput:\n" ++ showInput input showValidate showState _ (Right state) =-  "Valid eventlog: " ++ ( showState state )+  "Valid eventlog: " ++ showState state  showProcess :: (Show e, Show a) => Process e a -> String showProcess process =@@ -231,12 +227,12 @@   ++ "\n"   ++ (maybe "Valid." (("Invalid:\n" ++) . show) . toMaybe) process -showIndexed :: (k -> String) -> (v -> String) -> Map k v -> String+showIndexed :: (k -> String) -> (v -> String) -> M.Map k v -> String showIndexed showKey showValue m   | M.null m  = "Empty map\n"   | otherwise = "Indexed output:\n" ++-      concatMap (\(k, v) -> "Key: " ++ ( showKey k ) ++ ", Value: "-          ++ ( showValue v ) ++ "\n")+      concatMap (\(k, v) -> "Key: " ++ showKey k ++ ", Value: "+          ++ showValue v ++ "\n")         (M.toList m)  showMap :: Ord k => (k -> String) -> (a -> String) -> M.Map k a -> String@@ -244,3 +240,8 @@   concat $ zipWith (++)     (map showKey . M.keys $ m :: [String])     (map (showValue . (M.!) m) . M.keys $ m :: [String])++#if !MIN_VERSION_base(4,8,0)+die :: String -> IO a+die err = hPutStrLn stderr err >> exitFailure+#endif
+ README.md view
@@ -0,0 +1,13 @@+# ghc-events+[![Build Status](https://travis-ci.org/haskell/ghc-events.svg?branch=master)](https://travis-ci.org/haskell/ghc-events)+[![Hackage](https://img.shields.io/hackage/v/ghc-events.svg)](https://hackage.haskell.org/package/ghc-events)+[![Hackage-Deps](https://img.shields.io/hackage-deps/v/ghc-events.svg)](http://packdeps.haskellers.com/feed?needle=ghc-events)++A Haskell library for parsing .eventlog files emitted by the GHC runtime system.+The package also includes an executable, `ghc-events` that can be used to display the contents of .eventlog files++## TODO+* Add example usage/tutorial of the new API to this readme++## Known Issues+* Writing event logs back to file does not work. It is hard to say how long has this been broken or how difficult will it be to fix ([#14](https://github.com/haskell/ghc-events/issues/14))
ghc-events.cabal view
@@ -1,5 +1,5 @@ name:             ghc-events-version:          0.4.4.0+version:          0.6.0 synopsis:         Library and tool for parsing .eventlog files from GHC description:      Parses .eventlog files emitted by GHC 6.12.1 and later.                   Includes the ghc-events tool permitting, in particular,@@ -7,7 +7,7 @@ category:         Development, GHC, Debug, Profiling, Trace license:          BSD3 license-file:     LICENSE-author:           Donnie Jones <donnie@darthik.com>, +author:           Donnie Jones <donnie@darthik.com>,                   Simon Marlow <marlowsd@gmail.com>,                   Paul Bone <pbone@csse.unimelb.edu.au>,                   Mischa Dieterle <dieterle@mathematik.uni-marburg.de>,@@ -16,14 +16,32 @@                   Nicolas Wu <nick@well-typed.com>,                   Jost Berthold <berthold@diku.dk>                   Mikolaj Konarski <mikolaj@well-typed.com>+                  Karolis Velicka <karolis.velicka@gmail.com> maintainer:       Simon Marlow <marlowsd@gmail.com>-bug-reports:      https://github.com/haskell/ThreadScope/issues+bug-reports:      https://github.com/haskell/ghc-events/issues build-type:       Simple-tested-with:      GHC == 6.12.3, GHC == 7.4.1, GHC == 7.6.1, GHC == 7.6.3, GHC == 7.8.2, GHC == 7.8.3, GHC == 7.10.1+tested-with:      GHC == 7.6.1, GHC == 7.6.3, GHC == 7.8.2, GHC == 7.8.3, GHC == 7.10.1,+                  GHC == 8.0.2 cabal-version:    >= 1.8-extra-source-files: GHC/RTS/EventLogFormat.h,-                    test/*.eventlog+extra-source-files: include/EventLogFormat.h+                    test/queens-ghc-6.12.1.eventlog+                    test/queens-ghc-6.12.1.eventlog.reference+                    test/queens-ghc-7.0.2.eventlog+                    test/queens-ghc-7.0.2.eventlog.reference+                    test/mandelbrot-mmc-2011-06-14.eventlog+                    test/mandelbrot-mmc-2011-06-14.eventlog.reference+                    test/parallelTest.eventlog+                    test/parallelTest.eventlog.reference+                    test/pre77stop.eventlog+                    test/pre77stop.eventlog.reference+                    test/782stop.eventlog+                    test/782stop.eventlog.reference+                    test/783stop.eventlog+                    test/783stop.eventlog.reference+                    test/Utils.hs                     test/stop.hs+                    README.md+                    CHANGELOG.md  source-repository head   type: git@@ -31,12 +49,12 @@  library   build-depends:    base       == 4.*,-                    mtl        >= 2.2.1 && < 3.0,-                    containers >= 0.2 && < 0.6,-                    binary     >= 0.5 && < 0.8,-                    bytestring >= 0.9.0,+                    containers >= 0.5 && < 0.6,+                    binary     >= 0.7 && < 0.10,+                    bytestring >= 0.10.4,                     array      >= 0.2 && < 0.6   exposed-modules:  GHC.RTS.Events,+                    GHC.RTS.Events.Incremental                     GHC.RTS.Events.Merge                     GHC.RTS.Events.Analysis                     GHC.RTS.Events.Analysis.Capability@@ -44,17 +62,31 @@                     GHC.RTS.Events.Analysis.Thread   other-modules:    GHC.RTS.EventParserUtils,                     GHC.RTS.EventTypes-  include-dirs:     GHC/RTS+                    GHC.RTS.Events.Binary+  hs-source-dirs:   src+  include-dirs:     include   extensions:	    RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards   other-extensions: FlexibleContexts, CPP+  ghc-options:      -Wall  executable ghc-events   main-is:          GhcEvents.hs-  build-depends:    base, mtl, containers, binary, bytestring, array+  build-depends:    ghc-events, base, containers   extensions:	    RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards  test-suite test-versions   type:             exitcode-stdio-1.0-  main-is:          test/TestVersions.hs-  build-depends:    base, mtl, containers, binary, bytestring, array+  main-is:          TestVersions.hs+  other-modules:    Utils+  hs-source-dirs:   ., test+  build-depends:    ghc-events, base   extensions:	    RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards++test-suite write-merge+  type:             exitcode-stdio-1.0+  main-is:          WriteMerge.hs+  other-modules:    Utils+  hs-source-dirs:   ., test+  build-depends:    ghc-events, base, bytestring+  extensions:	    RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards+  buildable:        False
+ include/EventLogFormat.h view
@@ -0,0 +1,312 @@+/* -----------------------------------------------------------------------------+ *+ * (c) The GHC Team, 2008-2012+ *+ * Event log format+ * + * The log format is designed to be extensible: old tools should be+ * able to parse (but not necessarily understand all of) new versions+ * of the format, and new tools will be able to understand old log+ * files.+ * + * Each event has a specific format.  If you add new events, give them+ * new numbers: we never re-use old event numbers.+ *+ * - The format is endian-independent: all values are represented in + *    bigendian order.+ *+ * - The format is extensible:+ *+ *    - The header describes each event type and its length.  Tools+ *      that don't recognise a particular event type can skip those events.+ *+ *    - There is room for extra information in the event type+ *      specification, which can be ignored by older tools.+ *+ *    - Events can have extra information added, but existing fields+ *      cannot be changed.  Tools should ignore extra fields at the+ *      end of the event record.+ *+ *    - Old event type ids are never re-used; just take a new identifier.+ *+ *+ * The format+ * ----------+ *+ * log : EVENT_HEADER_BEGIN+ *       EventType*+ *       EVENT_HEADER_END+ *       EVENT_DATA_BEGIN+ *       Event*+ *       EVENT_DATA_END+ *+ * EventType :+ *       EVENT_ET_BEGIN+ *       Word16         -- unique identifier for this event+ *       Int16          -- >=0  size of the event in bytes (minus the header)+ *                      -- -1   variable size+ *       Word32         -- length of the next field in bytes+ *       Word8*         -- string describing the event+ *       Word32         -- length of the next field in bytes+ *       Word8*         -- extra info (for future extensions)+ *       EVENT_ET_END+ *+ * Event : + *       Word16         -- event_type+ *       Word64         -- time (nanosecs)+ *       [Word16]       -- length of the rest (for variable-sized events only)+ *       ... extra event-specific info ...+ *+ *+ * To add a new event+ * ------------------+ *+ *  - In this file:+ *    - give it a new number, add a new #define EVENT_XXX below+ *  - In EventLog.c+ *    - add it to the EventDesc array+ *    - emit the event type in initEventLogging()+ *    - emit the new event in postEvent_()+ *    - generate the event itself by calling postEvent() somewhere+ *  - In the Haskell code to parse the event log file:+ *    - add types and code to read the new event+ *+ * -------------------------------------------------------------------------- */++#ifndef RTS_EVENTLOGFORMAT_H+#define RTS_EVENTLOGFORMAT_H++/*+ * Markers for begin/end of the Header.+ */+#define EVENT_HEADER_BEGIN    0x68647262 /* 'h' 'd' 'r' 'b' */+#define EVENT_HEADER_END      0x68647265 /* 'h' 'd' 'r' 'e' */++#define EVENT_DATA_BEGIN      0x64617462 /* 'd' 'a' 't' 'b' */+#define EVENT_DATA_END        0xffff++/*+ * Markers for begin/end of the list of Event Types in the Header.+ * Header, Event Type, Begin = hetb+ * Header, Event Type, End = hete+ */+#define EVENT_HET_BEGIN       0x68657462 /* 'h' 'e' 't' 'b' */+#define EVENT_HET_END         0x68657465 /* 'h' 'e' 't' 'e' */++#define EVENT_ET_BEGIN        0x65746200 /* 'e' 't' 'b' 0 */+#define EVENT_ET_END          0x65746500 /* 'e' 't' 'e' 0 */++/*+ * Types of event+ */+#define EVENT_CREATE_THREAD        0 /* (thread)               */+#define EVENT_RUN_THREAD           1 /* (thread)               */+#define EVENT_STOP_THREAD          2 /* (thread, status, blockinfo) */+#define EVENT_THREAD_RUNNABLE      3 /* (thread)               */+#define EVENT_MIGRATE_THREAD       4 /* (thread, new_cap)      */+/* 5, 6, 7 deprecated */+#define EVENT_THREAD_WAKEUP        8 /* (thread, other_cap)    */+#define EVENT_GC_START             9 /* ()                     */+#define EVENT_GC_END              10 /* ()                     */+#define EVENT_REQUEST_SEQ_GC      11 /* ()                     */+#define EVENT_REQUEST_PAR_GC      12 /* ()                     */+/* 13, 14 deprecated */+#define EVENT_CREATE_SPARK_THREAD 15 /* (spark_thread)         */+#define EVENT_LOG_MSG             16 /* (message ...)          */+/* EVENT_STARTUP should be deprecated at some point */+#define EVENT_STARTUP             17 /* (num_capabilities)     */+#define EVENT_BLOCK_MARKER        18 /* (size, end_time, capability) */+#define EVENT_USER_MSG            19 /* (message ...)          */+#define EVENT_GC_IDLE             20 /* () */+#define EVENT_GC_WORK             21 /* () */+#define EVENT_GC_DONE             22 /* () */+/* 23, 24 used by eden */+#define EVENT_CAPSET_CREATE       25 /* (capset, capset_type)  */+#define EVENT_CAPSET_DELETE       26 /* (capset)               */+#define EVENT_CAPSET_ASSIGN_CAP   27 /* (capset, cap)          */+#define EVENT_CAPSET_REMOVE_CAP   28 /* (capset, cap)          */+/* the RTS identifier is in the form of "GHC-version rts_way"  */+#define EVENT_RTS_IDENTIFIER      29 /* (capset, name_version_string) */+/* the vectors in these events are null separated strings             */+#define EVENT_PROGRAM_ARGS        30 /* (capset, commandline_vector)  */+#define EVENT_PROGRAM_ENV         31 /* (capset, environment_vector)  */+#define EVENT_OSPROCESS_PID       32 /* (capset, pid)          */+#define EVENT_OSPROCESS_PPID      33 /* (capset, parent_pid)   */+#define EVENT_SPARK_COUNTERS      34 /* (crt,dud,ovf,cnv,gcd,fiz,rem) */+#define EVENT_SPARK_CREATE        35 /* ()                     */+#define EVENT_SPARK_DUD           36 /* ()                     */+#define EVENT_SPARK_OVERFLOW      37 /* ()                     */+#define EVENT_SPARK_RUN           38 /* ()                     */+#define EVENT_SPARK_STEAL         39 /* (victim_cap)           */+#define EVENT_SPARK_FIZZLE        40 /* ()                     */+#define EVENT_SPARK_GC            41 /* ()                     */+#define EVENT_INTERN_STRING       42 /* (string, id) {not used by ghc} */+#define EVENT_WALL_CLOCK_TIME     43 /* (capset, unix_epoch_seconds, nanoseconds) */+#define EVENT_THREAD_LABEL        44 /* (thread, name_string)  */+#define EVENT_CAP_CREATE          45 /* (cap)                  */+#define EVENT_CAP_DELETE          46 /* (cap)                  */+#define EVENT_CAP_DISABLE         47 /* (cap)                  */+#define EVENT_CAP_ENABLE          48 /* (cap)                  */+#define EVENT_HEAP_ALLOCATED      49 /* (heap_capset, alloc_bytes) */+#define EVENT_HEAP_SIZE           50 /* (heap_capset, size_bytes) */+#define EVENT_HEAP_LIVE           51 /* (heap_capset, live_bytes) */+#define EVENT_HEAP_INFO_GHC       52 /* (heap_capset, n_generations,+                                         max_heap_size, alloc_area_size,+                                         mblock_size, block_size) */+#define EVENT_GC_STATS_GHC        53 /* (heap_capset, generation,+                                         copied_bytes, slop_bytes, frag_bytes,+                                         par_n_threads,+                                         par_max_copied, par_tot_copied) */+#define EVENT_GC_GLOBAL_SYNC      54 /* ()                     */+#define EVENT_TASK_CREATE         55 /* (taskID, cap, tid)       */+#define EVENT_TASK_MIGRATE        56 /* (taskID, cap, new_cap)   */+#define EVENT_TASK_DELETE         57 /* (taskID)                 */+#define EVENT_USER_MARKER         58 /* (marker_name) */+#define EVENT_HACK_BUG_T9003      59 /* Hack: see trac #9003 */++/* Range 59 - 59 is available for new GHC and common events. */++/* Range 60 - 80 is used by eden for parallel tracing+ * see http://www.mathematik.uni-marburg.de/~eden/+ */++/* these are used by eden but are replaced by new alternatives for ghc */+#define EVENT_VERSION                   23 /* (version_string) */+#define EVENT_PROGRAM_INVOCATION        24 /* (commandline_string) */++/* start of parallel trace events */+#define EVENT_EDEN_START_RECEIVE         60 /* () */+#define EVENT_EDEN_END_RECEIVE           61 /* () */+#define EVENT_CREATE_PROCESS             62 /* (process) */+#define EVENT_KILL_PROCESS               63 /* (process) */+#define EVENT_ASSIGN_THREAD_TO_PROCESS   64 /* (thread, process) */+#define EVENT_CREATE_MACHINE             65 /* (machine, startupTime(in 10^-8 seconds after 19xx)) */+#define EVENT_KILL_MACHINE               66 /* (machine) */+#define EVENT_SEND_MESSAGE               67 /* (tag, sender_process, sender_thread, receiver_machine, receiver_process, receiver_inport) */+#define EVENT_RECEIVE_MESSAGE            68 /* (tag, receiver_process, receiver_inport, sender_machine, sender_process, sender_outport, message_size) */+#define EVENT_SEND_RECEIVE_LOCAL_MESSAGE 69 /* (tag, sender_process, sender_thread, receiver_process, receiver_inport) */+++/* Range 100 - 139 is reserved for Mercury, see below. */++/* Range 140 - 159 is reserved for Perf events, see below. */++/*+ * The highest event code +1 that ghc itself emits. Note that some event+ * ranges higher than this are reserved but not currently emitted by ghc.+ * This must match the size of the EventDesc[] array in EventLog.c+ */+#define NUM_GHC_EVENT_TAGS        70+++/* DEPRECATED EVENTS: */+/* These two are deprecated because we don't need to record the thread, it's+   implicit. We have to keep these #defines because for tiresome reasons we+   still need to parse them, see GHC.RTS.Events.ghc6Parsers for details. */+#define EVENT_RUN_SPARK            5 /* (thread)               */+#define EVENT_STEAL_SPARK          6 /* (thread, victim_cap)   */+/* shutdown replaced by EVENT_CAP_DELETE */+#define EVENT_SHUTDOWN             7 /* ()                     */+#if 0+/* ghc changed how it handles sparks so these are no longer applicable */+#define EVENT_CREATE_SPARK        13 /* (cap, thread) */+#define EVENT_SPARK_TO_THREAD     14 /* (cap, thread, spark_thread) */+#endif+++/*+ * These event types are Mercury specific, Mercury may use up to event number+ * 139+ */+#define EVENT_FIRST_MER_EVENT       100+#define NUM_MER_EVENTS               14++#define EVENT_MER_START_PAR_CONJUNCTION 100 /* (dyn id, static id) */+#define EVENT_MER_STOP_PAR_CONJUNCTION  101 /* (dyn id) */+#define EVENT_MER_STOP_PAR_CONJUNCT     102 /* (dyn id) */+#define EVENT_MER_CREATE_SPARK          103 /* (dyn id, spark id) */+#define EVENT_MER_FUT_CREATE            104 /* (fut id, memo'd name id) */+#define EVENT_MER_FUT_WAIT_NOSUSPEND    105 /* (fut id) */+#define EVENT_MER_FUT_WAIT_SUSPENDED    106 /* (fut id) */+#define EVENT_MER_FUT_SIGNAL            107 /* (fut id) */+#define EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT \+                                        108 /* () */+#define EVENT_MER_WORK_STEALING         109 /* () */+#define EVENT_MER_LOOKING_FOR_LOCAL_SPARK \+                                        112 /* () */+#define EVENT_MER_RELEASE_CONTEXT       110 /* (context id) */+#define EVENT_MER_ENGINE_SLEEPING       111 /* () */+#define EVENT_MER_CALLING_MAIN          113 /* () */+++/*+ * These event types are parsed from hardware performance counters logs,+ * such as the Linux Performance Counters data available through+ * the perf subsystem.+ */++#define EVENT_PERF_NAME           140 /* (perf_num, name) */+#define EVENT_PERF_COUNTER        141 /* (perf_num, tid, period) */+#define EVENT_PERF_TRACEPOINT     142 /* (perf_num, tid) */+++/*+ * Status values for EVENT_STOP_THREAD+ *+ * 1-5 are the StgRun return values (from includes/rts/Constants.h):+ *+ * #define HeapOverflow   1+ * #define StackOverflow  2+ * #define ThreadYielding 3+ * #define ThreadBlocked  4+ * #define ThreadFinished 5+ * #define ForeignCall                  6+ * #define BlockedOnMVar                7+ * #define BlockedOnMVarRead            20+ * NOTE: in GHC-7.8.2, this was 8, and following states shifted one up+ * #define BlockedOnBlackHole           8+ * #define BlockedOnRead                9+ * #define BlockedOnWrite               10+ * #define BlockedOnDelay               11+ * #define BlockedOnSTM                 12+ * #define BlockedOnDoProc              13+ * NOTE: unused GUM states 8, 9 (here: 14,15) in rts/Constants.h+ * #define BlockedOnCCall               -- not used (see ForeignCall)+ * #define BlockedOnCCall_NoUnblockExc  -- not used (see ForeignCall)+ * #define BlockedOnMsgThrowTo          16+ * NOTE: 16 because unused GUM states ignored in ghc-events lib+ *       Otherwise it would be 18, following would be 19, 20+ * TODO: verify the above is what GHC does (16/17 could be 18/19) + * #define ThreadMigrating              17+ * #define BlockedOnMsgGlobalise        18 + * NOTE: not present in GHC. Mercury-Event?+ */+#define THREAD_SUSPENDED_FOREIGN_CALL 6++/*+ * Capset type values for EVENT_CAPSET_CREATE+ */+#define CAPSET_TYPE_CUSTOM      1  /* reserved for end-user applications */+#define CAPSET_TYPE_OSPROCESS   2  /* caps belong to the same OS process */+#define CAPSET_TYPE_CLOCKDOMAIN 3  /* caps share a local clock/time      */++#ifndef EVENTLOG_CONSTANTS_ONLY++typedef StgWord16 EventTypeNum;+typedef StgWord64 EventTimestamp; /* in nanoseconds */+typedef StgWord32 EventThreadID;+typedef StgWord16 EventCapNo;+typedef StgWord16 EventPayloadSize; /* variable-size events */+typedef StgWord16 EventThreadStatus; /* status for EVENT_STOP_THREAD */+typedef StgWord32 EventCapsetID;+typedef StgWord16 EventCapsetType;   /* types for EVENT_CAPSET_CREATE */+typedef StgWord64 EventTaskId;         /* for EVENT_TASK_* */+typedef StgWord64 EventKernelThreadId; /* for EVENT_TASK_CREATE */++typedef StgWord32 EventProcessID;+typedef StgWord16 EventMachineID;+typedef EventThreadID EventPortID;++#endif++#endif /* RTS_EVENTLOGFORMAT_H */
+ src/GHC/RTS/EventParserUtils.hs view
@@ -0,0 +1,181 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-}+module GHC.RTS.EventParserUtils (+        EventParser(..),+        EventParsers(..),++        getString,+        mkEventTypeParsers,+        simpleEvent,+        skip,+    ) where++import Control.Monad+import Data.Array+import Data.Binary+import Data.Binary.Get ()+import qualified Data.Binary.Get as G+import Data.Binary.Put ()+import Data.Char+import Data.IntMap (IntMap)+import qualified Data.IntMap as M+import Data.List++#define EVENTLOG_CONSTANTS_ONLY+#include "EventLogFormat.h"++import GHC.RTS.EventTypes++newtype EventParsers = EventParsers (Array Int (Get EventInfo))++nBytes :: Integral a => a -> Get [Word8]+nBytes n = replicateM (fromIntegral n) get++getString :: Integral a => a -> Get String+getString len = do+    bytes <- nBytes len+    return $ map (chr . fromIntegral) bytes++skip :: Integral a => a -> Get ()+skip n = G.skip (fromIntegral n)++--+-- Code to build the event parser table.+--++--+-- | Event parser data. Parsers are either fixed or vairable size.+--+data EventParser a+    = FixedSizeParser {+        fsp_type        :: Int,+        fsp_size        :: EventTypeSize,+        fsp_parser      :: Get a+    }+    | VariableSizeParser {+        vsp_type        :: Int,+        vsp_parser      :: Get a+    }++getParser :: EventParser a -> Get a+getParser (FixedSizeParser _ _ p) = p+getParser (VariableSizeParser _ p) = p++getType :: EventParser a -> Int+getType (FixedSizeParser t _ _) = t+getType (VariableSizeParser t _) = t++isFixedSize :: EventParser a -> Bool+isFixedSize (FixedSizeParser {}) = True+isFixedSize (VariableSizeParser {}) = False++simpleEvent :: Int -> a -> EventParser a+simpleEvent t p = FixedSizeParser t 0 (return p)++-- Our event log format allows new fields to be added to events over+-- time.  This means that our parser must be able to handle:+--+--  * old versions of an event, with fewer fields than expected,+--  * new versions of an event, with more fields than expected+--+-- The event log file declares the size for each event type, so we can+-- select the correct parser for the event type based on its size.  We+-- do this once after parsing the header: given the EventTypes, we build+-- an array of event parsers indexed by event type.+--+-- For each event type, we may have multiple parsers for different+-- versions of the event, indexed by size.  These are listed in the+-- eventTypeParsers list below.  For the given log file we select the+-- parser for the most recent version (largest size less than the size+-- declared in the header).  If this is a newer version of the event+-- than we understand, there may be extra bytes that we have to read+-- and discard in the parser for this event type.+--+-- Summary:+--   if size is smaller that we expect:+--     parse the earier version, or ignore the event+--   if size is just right:+--     parse it+--   if size is too big:+--     parse the bits we understand and discard the rest++mkEventTypeParsers :: IntMap EventType+                   -> [EventParser EventInfo]+                   -> Array Int (Get EventInfo)+mkEventTypeParsers etypes event_parsers+ = accumArray (flip const) undefined (0, max_event_num)+    [ (num, parser num) | num <- [0..max_event_num] ]+  where+    max_event_num = maximum (M.keys etypes)+    undeclared_etype num = fail ("undeclared event type: " ++ show num)+    parser_map = makeParserMap event_parsers+    parser num =+            -- Get the event's size from the header,+            -- the first Maybe describes whether the event was declared in the header.+            -- the second Maybe selects between variable and fixed size events.+        let mb_mb_et_size = do et <- M.lookup num etypes+                               return $ size et+            -- Find a parser for the event with the given size.+            maybe_parser mb_et_size = do possible <- M.lookup num parser_map+                                         best_parser <- case mb_et_size of+                                            Nothing -> getVariableParser possible+                                            Just et_size -> getFixedParser et_size possible+                                         return $ getParser best_parser+            in case mb_mb_et_size of+                -- This event is declared in the log file's header+                Just mb_et_size -> case maybe_parser mb_et_size of+                    -- And we have a valid parser for it.+                    Just p -> p+                    -- But we don't have a valid parser for it.+                    Nothing -> noEventTypeParser num mb_et_size+                -- This event is not declared in the log file's header+                Nothing -> undeclared_etype num++-- Find the first variable length parser.+getVariableParser :: [EventParser a] -> Maybe (EventParser a)+getVariableParser [] = Nothing+getVariableParser (x:xs) = case x of+    FixedSizeParser _ _ _ -> getVariableParser xs+    VariableSizeParser _ _ -> Just x++-- Find the best fixed size parser, that is to say, the parser for the largest+-- event that does not exceed the size of the event as declared in the log+-- file's header.+getFixedParser :: EventTypeSize -> [EventParser a] -> Maybe (EventParser a)+getFixedParser size parsers =+        do parser <- ((filter isFixedSize) `pipe`+                      (filter (\x -> (fsp_size x) <= size)) `pipe`+                      (sortBy descending_size) `pipe`+                      maybe_head) parsers+           return $ padParser size parser+    where pipe f g = g . f+          descending_size (FixedSizeParser _ s1 _) (FixedSizeParser _ s2 _) =+            compare s2 s1+          descending_size _ _ = undefined+          maybe_head [] = Nothing+          maybe_head (x:_) = Just x++padParser :: EventTypeSize -> (EventParser a) -> (EventParser a)+padParser _    (VariableSizeParser t p) = VariableSizeParser t p+padParser size (FixedSizeParser t orig_size orig_p) = FixedSizeParser t size p+    where p = if (size == orig_size)+                then orig_p+                else do d <- orig_p+                        skip (size - orig_size)+                        return d++makeParserMap :: [EventParser a] -> IntMap [EventParser a]+makeParserMap = foldl buildParserMap M.empty+    where buildParserMap map' parser =+              M.alter (addParser parser) (getType parser) map'+          addParser p Nothing = Just [p]+          addParser p (Just ps) = Just (p:ps)++noEventTypeParser :: Int -> Maybe EventTypeSize+                  -> Get EventInfo+noEventTypeParser num mb_size = do+  bytes <- case mb_size of+             Just n  -> return n+             Nothing -> get :: Get Word16+  skip bytes+  return UnknownEvent{ ref = fromIntegral num }
+ src/GHC/RTS/EventTypes.hs view
@@ -0,0 +1,528 @@+module GHC.RTS.EventTypes where+import Control.Monad++import Data.Binary++-- EventType.+type EventTypeNum = Word16+type EventTypeDescLen = Word32+type EventTypeDesc = String+type EventTypeSize = Word16+-- Event.+type EventDescription = String+type Timestamp = Word64+type ThreadId = Word32+type CapNo = Word16+type Marker = Word32+type BlockSize = Word32+type RawThreadStopStatus = Word16+type StringId = Word32+type Capset   = Word32+type PerfEventTypeNum = Word32+type TaskId = Word64+type PID = Word32++newtype KernelThreadId = KernelThreadId { kernelThreadId :: Word64 }+  deriving (Eq, Ord, Show)+instance Binary KernelThreadId where+  put (KernelThreadId tid) = put tid+  get = fmap KernelThreadId get++-- Types for Parallel-RTS Extension+type ProcessId = Word32+type MachineId = Word16+type PortId = ThreadId+type MessageSize = Word32+type RawMsgTag = Word8++-- These types are used by Mercury events.+type ParConjDynId = Word64+type ParConjStaticId = StringId+type SparkId = Word32+type FutureId = Word64++sz_event_type_num :: EventTypeSize+sz_event_type_num = 2+sz_cap :: EventTypeSize+sz_cap  = 2+sz_time :: EventTypeSize+sz_time = 8+sz_tid :: EventTypeSize+sz_tid  = 4+sz_old_tid :: EventTypeSize+sz_old_tid  = 8 -- GHC 6.12 was using 8 for ThreadID when declaring the size+                -- of events, but was actually using 32 bits for ThreadIDs+sz_capset :: EventTypeSize+sz_capset = 4+sz_capset_type :: EventTypeSize+sz_capset_type = 2+sz_block_size :: EventTypeSize+sz_block_size = 4+sz_block_event :: EventTypeSize+sz_block_event = fromIntegral (sz_event_type_num + sz_time + sz_block_size+    + sz_time + sz_cap)+sz_pid :: EventTypeSize+sz_pid = 4+sz_taskid :: EventTypeSize+sz_taskid = 8+sz_kernel_tid :: EventTypeSize+sz_kernel_tid = 8+sz_th_stop_status :: EventTypeSize+sz_th_stop_status = 2+sz_string_id :: EventTypeSize+sz_string_id = 4+sz_perf_num :: EventTypeSize+sz_perf_num = 4++-- Sizes for Parallel-RTS event fields+sz_procid, sz_mid, sz_mes, sz_realtime, sz_msgtag :: EventTypeSize+sz_procid  = 4+sz_mid  = 2+sz_mes  = 4+sz_realtime = 8+sz_msgtag  = 1++-- Sizes for Mercury event fields.+sz_par_conj_dyn_id :: EventTypeSize+sz_par_conj_dyn_id = 8+sz_par_conj_static_id :: EventTypeSize+sz_par_conj_static_id = sz_string_id+sz_spark_id :: EventTypeSize+sz_spark_id = 4+sz_future_id :: EventTypeSize+sz_future_id = 8++{-+ - Data type delcarations to build the GHC RTS data format,+ - which is a (header, data) pair.+ -+ - Header contains EventTypes.+ - Data contains Events.+ -}+data EventLog =+  EventLog {+    header :: Header,+    dat    :: Data+  } deriving Show++newtype Header = Header {+     eventTypes :: [EventType]+  } deriving (Show, Eq)++data Data = Data {+     events :: [Event]+  } deriving Show++data EventType =+  EventType {+    num  :: EventTypeNum,+    desc :: EventTypeDesc,+    size :: Maybe EventTypeSize -- ^ 'Nothing' indicates variable size+  } deriving (Show, Eq)++data Event =+  Event {+    evTime  :: {-# UNPACK #-}!Timestamp,+    evSpec  :: EventInfo,+    evCap :: Maybe Int+  } deriving Show++{-# DEPRECATED time "The field is now called evTime" #-}+time :: Event -> Timestamp+time = evTime++{-# DEPRECATED spec "The field is now called evSpec" #-}+spec :: Event -> EventInfo+spec = evSpec++data EventInfo++  -- pseudo events+  = EventBlock         { end_time   :: Timestamp,+                         cap        :: Int,+                         block_size :: BlockSize+                       }+  | UnknownEvent       { ref  :: {-# UNPACK #-}!EventTypeNum }++  -- init and shutdown+  | Startup            { n_caps :: Int+                       }+  -- EVENT_SHUTDOWN is replaced by EVENT_CAP_DELETE and GHC 7.6++  -- no longer generate the event; should be removed at some point+  | Shutdown           { }++  -- thread scheduling+  | CreateThread       { thread :: {-# UNPACK #-}!ThreadId+                       }+  | RunThread          { thread :: {-# UNPACK #-}!ThreadId+                       }+  | StopThread         { thread :: {-# UNPACK #-}!ThreadId,+                         status :: !ThreadStopStatus+                       }+  | ThreadRunnable     { thread :: {-# UNPACK #-}!ThreadId+                       }+  | MigrateThread      { thread :: {-# UNPACK #-}!ThreadId,+                         newCap :: {-# UNPACK #-}!Int+                       }+  | WakeupThread       { thread :: {-# UNPACK #-}!ThreadId,+                         otherCap :: {-# UNPACK #-}!Int+                       }+  | ThreadLabel        { thread :: {-# UNPACK #-}!ThreadId,+                         threadlabel :: String+                       }++  -- par sparks+  | CreateSparkThread  { sparkThread :: {-# UNPACK #-}!ThreadId+                       }+  | SparkCounters      { sparksCreated, sparksDud, sparksOverflowed,+                         sparksConverted, sparksFizzled, sparksGCd,+                         sparksRemaining :: {-# UNPACK #-}! Word64+                       }+  | SparkCreate        { }+  | SparkDud           { }+  | SparkOverflow      { }+  | SparkRun           { }+  | SparkSteal         { victimCap :: {-# UNPACK #-}!Int }+  | SparkFizzle        { }+  | SparkGC            { }++  -- tasks+  | TaskCreate         { taskId :: TaskId,+                         cap :: {-# UNPACK #-}!Int,+                         tid :: {-# UNPACK #-}!KernelThreadId+                       }+  | TaskMigrate        { taskId :: TaskId,+                         cap :: {-# UNPACK #-}!Int,+                         new_cap :: {-# UNPACK #-}!Int+                       }+  | TaskDelete         { taskId :: TaskId }++  -- garbage collection+  | RequestSeqGC       { }+  | RequestParGC       { }+  | StartGC            { }+  | GCWork             { }+  | GCIdle             { }+  | GCDone             { }+  | EndGC              { }+  | GlobalSyncGC       { }+  | GCStatsGHC         { heapCapset   :: {-# UNPACK #-}!Capset+                       , gen          :: {-# UNPACK #-}!Int+                       , copied       :: {-# UNPACK #-}!Word64+                       , slop, frag   :: {-# UNPACK #-}!Word64+                       , parNThreads  :: {-# UNPACK #-}!Int+                       , parMaxCopied :: {-# UNPACK #-}!Word64+                       , parTotCopied :: {-# UNPACK #-}!Word64+                       }++  -- heap statistics+  | HeapAllocated      { heapCapset  :: {-# UNPACK #-}!Capset+                       , allocBytes  :: {-# UNPACK #-}!Word64+                       }+  | HeapSize           { heapCapset  :: {-# UNPACK #-}!Capset+                       , sizeBytes   :: {-# UNPACK #-}!Word64+                       }+  | HeapLive           { heapCapset  :: {-# UNPACK #-}!Capset+                       , liveBytes   :: {-# UNPACK #-}!Word64+                       }+  | HeapInfoGHC        { heapCapset    :: {-# UNPACK #-}!Capset+                       , gens          :: {-# UNPACK #-}!Int+                       , maxHeapSize   :: {-# UNPACK #-}!Word64+                       , allocAreaSize :: {-# UNPACK #-}!Word64+                       , mblockSize    :: {-# UNPACK #-}!Word64+                       , blockSize     :: {-# UNPACK #-}!Word64+                       }++  -- adjusting the number of capabilities on the fly+  | CapCreate          { cap :: {-# UNPACK #-}!Int+                       }+  | CapDelete          { cap :: {-# UNPACK #-}!Int+                       }+  | CapDisable         { cap :: {-# UNPACK #-}!Int+                       }+  | CapEnable          { cap :: {-# UNPACK #-}!Int+                       }++  -- capability sets+  | CapsetCreate       { capset     :: {-# UNPACK #-}!Capset+                       , capsetType :: CapsetType+                       }+  | CapsetDelete       { capset :: {-# UNPACK #-}!Capset+                       }+  | CapsetAssignCap    { capset :: {-# UNPACK #-}!Capset+                       , cap    :: {-# UNPACK #-}!Int+                       }+  | CapsetRemoveCap    { capset :: {-# UNPACK #-}!Capset+                       , cap    :: {-# UNPACK #-}!Int+                       }++  -- program/process info+  | RtsIdentifier      { capset :: {-# UNPACK #-}!Capset+                       , rtsident :: String+                       }+  | ProgramArgs        { capset :: {-# UNPACK #-}!Capset+                       , args   :: [String]+                       }+  | ProgramEnv         { capset :: {-# UNPACK #-}!Capset+                       , env    :: [String]+                       }+  | OsProcessPid       { capset :: {-# UNPACK #-}!Capset+                       , pid    :: {-# UNPACK #-}!PID+                       }+  | OsProcessParentPid { capset :: {-# UNPACK #-}!Capset+                       , ppid   :: {-# UNPACK #-}!PID+                       }+  | WallClockTime      { capset :: {-# UNPACK #-}!Capset+                       , sec    :: {-# UNPACK #-}!Word64+                       , nsec   :: {-# UNPACK #-}!Word32+                       }++  -- messages+  | Message            { msg :: String }+  | UserMessage        { msg :: String }+  | UserMarker         { markername :: String }++  -- Events emitted by a parallel RTS+   -- Program /process info (tools might prefer newer variants above)+  | Version            { version :: String }+  | ProgramInvocation  { commandline :: String }+   -- startup and shutdown (incl. real start time, not first log entry)+  | CreateMachine      { machine :: {-# UNPACK #-} !MachineId,+                         realtime    :: {-# UNPACK #-} !Timestamp}+  | KillMachine        { machine ::  {-# UNPACK #-} !MachineId }+   -- Haskell processes mgmt (thread groups that share heap and communicate)+  | CreateProcess      { process :: {-# UNPACK #-} !ProcessId }+  | KillProcess        { process :: {-# UNPACK #-} !ProcessId }+  | AssignThreadToProcess { thread :: {-# UNPACK #-} !ThreadId,+                            process :: {-# UNPACK #-} !ProcessId+                          }+   -- communication between processes+  | EdenStartReceive   { }+  | EdenEndReceive     { }+  | SendMessage        { mesTag :: !MessageTag,+                         senderProcess :: {-# UNPACK #-} !ProcessId,+                         senderThread :: {-# UNPACK #-} !ThreadId,+                         receiverMachine ::  {-# UNPACK #-} !MachineId,+                         receiverProcess :: {-# UNPACK #-} !ProcessId,+                         receiverInport :: {-# UNPACK #-} !PortId+                       }+  | ReceiveMessage     { mesTag :: !MessageTag,+                         receiverProcess :: {-# UNPACK #-} !ProcessId,+                         receiverInport :: {-# UNPACK #-} !PortId,+                         senderMachine ::  {-# UNPACK #-} !MachineId,+                         senderProcess :: {-# UNPACK #-} !ProcessId,+                         senderThread :: {-# UNPACK #-} !ThreadId,+                         messageSize :: {-# UNPACK #-} !MessageSize+                       }+  | SendReceiveLocalMessage { mesTag :: !MessageTag,+                              senderProcess :: {-# UNPACK #-} !ProcessId,+                              senderThread :: {-# UNPACK #-} !ThreadId,+                              receiverProcess :: {-# UNPACK #-} !ProcessId,+                              receiverInport :: {-# UNPACK #-} !PortId+                            }++  -- These events have been added for Mercury's benifit but are generally+  -- useful.+  | InternString       { str :: String, sId :: {-# UNPACK #-}!StringId }++  -- Mercury specific events.+  | MerStartParConjunction {+        dyn_id      :: {-# UNPACK #-}!ParConjDynId,+        static_id   :: {-# UNPACK #-}!ParConjStaticId+    }+  | MerEndParConjunction {+        dyn_id      :: {-# UNPACK #-}!ParConjDynId+    }+  | MerEndParConjunct {+        dyn_id      :: {-# UNPACK #-}!ParConjDynId+    }+  | MerCreateSpark {+        dyn_id      :: {-# UNPACK #-}!ParConjDynId,+        spark_id    :: {-# UNPACK #-}!SparkId+    }+  | MerFutureCreate {+        future_id   :: {-# UNPACK #-}!FutureId,+        name_id     :: {-# UNPACK #-}!StringId+    }+  | MerFutureWaitNosuspend {+        future_id   :: {-# UNPACK #-}!FutureId+    }+  | MerFutureWaitSuspended {+        future_id   :: {-# UNPACK #-}!FutureId+    }+  | MerFutureSignal {+        future_id   :: {-# UNPACK #-}!FutureId+    }+  | MerLookingForGlobalThread+  | MerWorkStealing+  | MerLookingForLocalSpark+  | MerReleaseThread {+        thread_id   :: {-# UNPACK #-}!ThreadId+    }+  | MerCapSleeping+  | MerCallingMain++  -- perf events+  | PerfName           { perfNum :: {-# UNPACK #-}!PerfEventTypeNum+                       , name    :: String+                       }+  | PerfCounter        { perfNum :: {-# UNPACK #-}!PerfEventTypeNum+                       , tid     :: {-# UNPACK #-}!KernelThreadId+                       , period  :: {-# UNPACK #-}!Word64+                       }+  | PerfTracepoint     { perfNum :: {-# UNPACK #-}!PerfEventTypeNum+                       , tid     :: {-# UNPACK #-}!KernelThreadId+                       }++  deriving Show++{- [Note: Stop status in GHC-7.8.2]++In GHC-7.7, a new thread block reason "BlockedOnMVarRead" was+introduced, and placed adjacent to BlockedOnMVar (7). Therefore, event+logs produced by GHC pre-7.8.2 encode BlockedOnBlackHole and following+as 8..18, whereas GHC-7.8.2 event logs encode them as 9..19.+Later, the prior event numbering was restored for GHC-7.8.3.+See GHC bug #9003 for a discussion.++The parsers in Events.hs have to be adapted accordingly, providing+special ghc-7.8.2 parsers for the thread-stop event if GHC-7.8.2+produced the eventlog.+The EVENT_USER_MARKER was not present in GHC-7.6.3, and a new event+EVENT_HACK_BUG_T9003 was added in GHC-7.8.3, so we take presence of+USER_MARKER and absence of HACK_BUG_T9003 as an indication that+ghc-7.8.2 parsers should be used.+-}++--sync with ghc/includes/Constants.h+data ThreadStopStatus+ = NoStatus+ | HeapOverflow+ | StackOverflow+ | ThreadYielding+ | ThreadBlocked+ | ThreadFinished+ | ForeignCall+ | BlockedOnMVar+ | BlockedOnMVarRead   -- since GHC-7.8, see [Stop status since GHC-7.7]+ | BlockedOnBlackHole+ | BlockedOnRead+ | BlockedOnWrite+ | BlockedOnDelay+ | BlockedOnSTM+ | BlockedOnDoProc+ | BlockedOnCCall+ | BlockedOnCCall_NoUnblockExc+ | BlockedOnMsgThrowTo+ | ThreadMigrating+ | BlockedOnMsgGlobalise+ | BlockedOnBlackHoleOwnedBy {-# UNPACK #-}!ThreadId+ deriving (Show)++-- normal GHC encoding, see [Stop status in GHC-7.8.2]+mkStopStatus :: RawThreadStopStatus -> ThreadStopStatus+mkStopStatus n = case n of+ 0  ->  NoStatus+ 1  ->  HeapOverflow+ 2  ->  StackOverflow+ 3  ->  ThreadYielding+ 4  ->  ThreadBlocked+ 5  ->  ThreadFinished+ 6  ->  ForeignCall+ 7  ->  BlockedOnMVar+ 8  ->  BlockedOnBlackHole+ 9  ->  BlockedOnRead+ 10 ->  BlockedOnWrite+ 11 ->  BlockedOnDelay+ 12 ->  BlockedOnSTM+ 13 ->  BlockedOnDoProc+ 14 ->  BlockedOnCCall+ 15 ->  BlockedOnCCall_NoUnblockExc+ 16 ->  BlockedOnMsgThrowTo+ 17 ->  ThreadMigrating+ 18 ->  BlockedOnMsgGlobalise+ 19 ->  NoStatus -- yeuch... this one does not actually exist in GHC eventlogs+ 20 ->  BlockedOnMVarRead -- since GHC-7.8.3+ _  ->  error "mkStat"++-- GHC 7.8.2 encoding, see [Stop status in GHC-7.8.2]+mkStopStatus782 :: RawThreadStopStatus -> ThreadStopStatus+mkStopStatus782 n = case n of+ 0  ->  NoStatus+ 1  ->  HeapOverflow+ 2  ->  StackOverflow+ 3  ->  ThreadYielding+ 4  ->  ThreadBlocked+ 5  ->  ThreadFinished+ 6  ->  ForeignCall+ 7  ->  BlockedOnMVar+ 8  ->  BlockedOnMVarRead -- in GHC-7.8.2+ 9  ->  BlockedOnBlackHole+ 10 ->  BlockedOnRead+ 11 ->  BlockedOnWrite+ 12 ->  BlockedOnDelay+ 13 ->  BlockedOnSTM+ 14 ->  BlockedOnDoProc+ 15 ->  BlockedOnCCall+ 16 ->  BlockedOnCCall_NoUnblockExc+ 17 ->  BlockedOnMsgThrowTo+ 18 ->  ThreadMigrating+ 19 ->  BlockedOnMsgGlobalise+ _  ->  error "mkStat"++maxThreadStopStatusPre77, maxThreadStopStatus782, maxThreadStopStatus+    :: RawThreadStopStatus+maxThreadStopStatusPre77  = 18 -- see [Stop status in GHC-7.8.2]+maxThreadStopStatus782    = 19 -- need to distinguish three cases+maxThreadStopStatus = 20++data CapsetType+ = CapsetCustom+ | CapsetOsProcess+ | CapsetClockDomain+ | CapsetUnknown+ deriving Show++mkCapsetType :: Word16 -> CapsetType+mkCapsetType n = case n of+ 1 -> CapsetCustom+ 2 -> CapsetOsProcess+ 3 -> CapsetClockDomain+ _ -> CapsetUnknown++-- | An event annotated with the Capability that generated it, if any+{-# DEPRECATED CapEvent "CapEvents will be removed soon, now Event has a field evCap" #-}+data CapEvent+  = CapEvent { ce_cap   :: Maybe Int,+               ce_event :: Event+               -- we could UNPACK ce_event, but the Event constructor+               -- might be shared, in which case we could end up+               -- increasing the space usage.+             } deriving Show++--sync with ghc/parallel/PEOpCodes.h+data MessageTag+  = Ready | NewPE | PETIDS | Finish+  | FailPE | RFork | Connect | DataMes+  | Head | Constr | Part | Terminate+  | Packet+  -- with GUM and its variants, add:+  -- ...| Fetch | Resume | Ack+  -- ...| Fish | Schedule | Free | Reval | Shark+  deriving (Enum, Show)+offset :: RawMsgTag+offset = 0x50++-- decoder and encoder+toMsgTag :: RawMsgTag -> MessageTag+toMsgTag = toEnum . fromIntegral . (\n -> n - offset)++fromMsgTag :: MessageTag -> RawMsgTag+fromMsgTag = (+ offset) . fromIntegral . fromEnum++-- Checks if the capability is not -1 (which indicates a global eventblock), so+-- has no associated capability+mkCap :: Int -> Maybe Int+mkCap cap = do+  guard $ fromIntegral cap /= (maxBound :: Word16)+  return cap
+ src/GHC/RTS/Events.hs view
@@ -0,0 +1,495 @@+{-# LANGUAGE CPP,BangPatterns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE MultiWayIf #-}+{-# OPTIONS_GHC -fsimpl-tick-factor=150 #-}+{-+ -   Parser functions for GHC RTS EventLog framework.+ -}++module GHC.RTS.Events (+       -- * The event log types+       EventLog(..),+       Header(..),+       Data(..),+       EventType(..),+       Event(..),+       EventInfo(..),+       ThreadStopStatus(..),+       CapsetType(..),+       Timestamp,+       ThreadId,+       TaskId,+       KernelThreadId(..),+       EventTypeNum,+       EventTypeDesc,+       EventTypeSize,+       BlockSize,+       Capset,+       StringId,+       -- some types for the parallel RTS+       ProcessId,+       MachineId,+       PortId,+       MessageSize,+       MessageTag(..),+       ParConjDynId,+       ParConjStaticId,+       SparkId,+       FutureId,+       PerfEventTypeNum,++       -- * Reading and writing event logs+       readEventLogFromFile,+       writeEventLogToFile,++       serialiseEventLog,++       -- * Utilities+       CapEvent(..), sortEvents,+       buildEventTypeMap,++       -- * Printing+       printEventsIncremental,+       showEventInfo, buildEventInfo,+       showThreadStopStatus,+       ppEventLog, ppEventType,+       ppEvent, buildEvent, buildEvent',++       -- * Perf events+       nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT,+       sz_perf_num, sz_kernel_tid,++       -- * For compatibility with old clients+       -- readEventLogFromFile, TODO+       spec,+       time,+  ) where++{- Libraries. -}+import Control.Applicative+import Control.Concurrent hiding (ThreadId)+import qualified Data.Binary.Put as P+import qualified Data.ByteString as B+import qualified Data.ByteString.Builder as BB+import qualified Data.ByteString.Lazy as BL+import qualified Data.ByteString.Lazy.Char8 as BL8+import Data.IntMap (IntMap)+import qualified Data.IntMap as IM+import Data.Foldable (foldMap)+import Data.Function hiding (id)+import Data.List+import Data.Monoid ((<>))+import System.IO+import Prelude hiding (gcd, rem, id)++import GHC.RTS.EventTypes+import GHC.RTS.Events.Binary+import GHC.RTS.Events.Incremental++-- | Read an entire eventlog file. It returns an error message if it+-- encouters an error while decoding.+--+-- Note that it doesn't fail if it consumes all input in the middle of decoding+-- of an event.+readEventLogFromFile :: FilePath -> IO (Either String EventLog)+readEventLogFromFile path = fmap fst . readEventLog <$> BL.readFile path++-- | Read an eventlog file and pretty print it to stdout+printEventsIncremental+  :: Bool -- ^ Follow the file or not+  -> FilePath+  -> IO ()+printEventsIncremental follow path =+  withFile path ReadMode (hPrintEventsIncremental follow)++-- | Read an eventlog from the Handle and pretty print it to stdout+hPrintEventsIncremental+  :: Bool -- ^ Follow the handle or not+  -> Handle+  -> IO ()+hPrintEventsIncremental follow hdl = go decodeEventLog+  where+    go decoder = case decoder of+      Produce event decoder' -> do+        BB.hPutBuilder stdout $ buildEvent' event <> "\n"+        go decoder'+      Consume k -> do+        chunk <- B.hGetSome hdl 4096+        if+          | not (B.null chunk) -> go $ k chunk+          | follow -> threadDelay 1000000 >> go decoder+          | otherwise -> return ()+      Done {} -> return ()+      Error _ err -> fail err+++-- | Writes the 'EventLog' to file. The log is expected to __NOT__ have 'EventBlock'+-- markers/events - the parsers no longer emit them and they are handled behind+-- the scenes.+writeEventLogToFile :: FilePath -> EventLog -> IO ()+writeEventLogToFile fp = BL.writeFile fp . serialiseEventLog+++-- | Serialises an 'EventLog' back to a 'ByteString', usually for writing it+-- back to a file.+serialiseEventLog :: EventLog -> BL.ByteString+serialiseEventLog el@(EventLog _ (Data events)) =+  P.runPut $ putEventLog blockedEl+  where+    eventsMap = capSplitEvents events+    blockedEventsMap = IM.mapWithKey addBlockMarker eventsMap+    blockedEl = el{dat = Data blockedEvents}+    blockedEvents = IM.foldr (++) [] blockedEventsMap++-- Gets the Capability of an event in numeric form+getIntCap :: Event -> Int+getIntCap Event{evCap = cap} =+  case cap of+  Just capNo -> capNo+  Nothing    -> -1++-- Creates an IntMap of the events with capability number as the key.+-- Key -1 indicates global (capless) event+capSplitEvents :: [Event] -> IM.IntMap [Event]+capSplitEvents evts = capSplitEvents' evts IM.empty++capSplitEvents' :: [Event] -> IM.IntMap [Event] -> IM.IntMap [Event]+capSplitEvents' evts imap =+  case evts of+  (x:xs) -> capSplitEvents' xs (IM.insertWith (++) (getIntCap x) [x] imap)+  []     -> imap++-- Adds a block marker to the beginnng of a list of events, annotated with+-- its capability. All events are expected to belong to the same cap.+addBlockMarker :: Int -> [Event] -> [Event]+addBlockMarker cap evts =+  (Event startTime (EventBlock endTime cap sz) (mkCap cap)) : sortedEvts+  where+    sz = fromIntegral . BL.length $ P.runPut $ mapM_ putEvent evts+    startTime = case sortedEvts of+      (x:_) -> evTime x+      [] -> error "Cannot add block marker to an empty list of events"+    sortedEvts = sortEvents evts+    endTime = evTime $ last sortedEvts++-- -----------------------------------------------------------------------------+-- Utilities+sortEvents :: [Event] -> [Event]+sortEvents = sortBy (compare `on` evTime)++buildEventTypeMap :: [EventType] -> IntMap EventType+buildEventTypeMap etypes =+  IM.fromList [ (fromIntegral (num t),t) | t <- etypes ]++-----------------------------------------------------------------------------+-- Some pretty-printing support++showEventInfo :: EventInfo -> String+showEventInfo = BL8.unpack . BB.toLazyByteString . buildEventInfo++buildEventInfo :: EventInfo -> BB.Builder+buildEventInfo spec' =+    case spec' of+        EventBlock end_time cap _block_events ->+          "event block: cap " <> BB.intDec cap+          <> ", end time: " <> BB.word64Dec end_time <> "\n"+        Startup n_caps ->+          "startup: " <> BB.intDec n_caps <> " capabilities"+        CreateThread thread ->+          "creating thread " <> BB.word32Dec thread+        RunThread thread ->+          "running thread " <> BB.word32Dec thread+        StopThread thread status ->+          "stopping thread " <> BB.word32Dec thread+          <> " (" <> BB.stringUtf8 (showThreadStopStatus status) <> ")"+        ThreadRunnable thread ->+          "thread " <> BB.word32Dec thread <> " is runnable"+        MigrateThread thread newCap  ->+          "migrating thread " <> BB.word32Dec thread+          <> " to cap " <> BB.intDec newCap+        CreateSparkThread sparkThread ->+          "creating spark thread " <> BB.word32Dec sparkThread+        SparkCounters crt dud ovf cnv fiz gcd rem ->+          "spark stats: "+          <> BB.word64Dec crt <> " created, "+          <> BB.word64Dec cnv <> " converted, "+          <> BB.word64Dec rem <> " remaining ("+          <> BB.word64Dec ovf <> " overflowed, "+          <> BB.word64Dec dud <> " dud, "+          <> BB.word64Dec gcd <> " GC'd, "+          <> BB.word64Dec fiz <> " fizzled)"+        SparkCreate ->+          "spark created"+        SparkDud ->+          "dud spark discarded"+        SparkOverflow ->+          "overflowed spark discarded"+        SparkRun ->+          "running a local spark"+        SparkSteal victimCap ->+          "stealing a spark from cap " <> BB.intDec victimCap+        SparkFizzle ->+          "spark fizzled"+        SparkGC ->+          "spark GCed"+        TaskCreate taskId cap tid ->+          "task 0x" <> BB.word64Hex taskId+          <> " created on cap " <> BB.intDec cap+          <>" with OS kernel thread " <> BB.word64Dec (kernelThreadId tid)+        TaskMigrate taskId cap new_cap ->+          "task 0x" <> BB.word64Hex taskId+          <> " migrated from cap " <> BB.intDec cap+          <> " to cap " <> BB.intDec new_cap+        TaskDelete taskId ->+          "task 0x" <> BB.word64Hex taskId <> " deleted"+        Shutdown ->+          "shutting down"+        WakeupThread thread otherCap ->+          "waking up thread " <> BB.word32Dec thread+          <> " on cap " <> BB.intDec otherCap+        ThreadLabel thread label ->+          "thread " <> BB.word32Dec thread+          <> " has label \"" <> BB.stringUtf8 label <> "\""+        RequestSeqGC ->+          "requesting sequential GC"+        RequestParGC ->+          "requesting parallel GC"+        StartGC ->+          "starting GC"+        EndGC ->+          "finished GC"+        GCWork ->+          "GC working"+        GCIdle ->+          "GC idle"+        GCDone ->+          "GC done"+        GlobalSyncGC ->+          "all caps stopped for GC"+        GCStatsGHC{..} ->+          "GC stats for heap capset " <> BB.word32Dec heapCapset+          <> ": generation " <> BB.intDec gen <> ", "+          <> BB.word64Dec copied <> " bytes copied, "+          <> BB.word64Dec slop <> " bytes slop, "+          <> BB.word64Dec frag <> " bytes fragmentation, "+          <> BB.intDec parNThreads <> " par threads, "+          <> BB.word64Dec parMaxCopied <> " bytes max par copied, "+          <> BB.word64Dec parTotCopied <> " bytes total par copied"+        HeapAllocated{..} ->+          "allocated on heap capset " <> BB.word32Dec heapCapset+          <> ": " <> BB.word64Dec allocBytes <> " total bytes till now"+        HeapSize{..} ->+          "size of heap capset " <> BB.word32Dec heapCapset+          <> ": " <> BB.word64Dec sizeBytes <> " bytes"+        HeapLive{..} ->+          "live data in heap capset " <> BB.word32Dec heapCapset+          <> ": " <> BB.word64Dec liveBytes <> " bytes"+        HeapInfoGHC{..} ->+          "heap stats for heap capset " <> BB.word32Dec heapCapset+          <> ": generations " <> BB.intDec gens <> ", "+          <> BB.word64Dec maxHeapSize <> " bytes max heap size, "+          <> BB.word64Dec allocAreaSize <> " bytes alloc area size, "+          <> BB.word64Dec mblockSize <> " bytes mblock size, "+          <> BB.word64Dec blockSize <> " bytes block size"+        CapCreate{cap} ->+          "created cap " <> BB.intDec cap+        CapDelete{cap} ->+          "deleted cap " <> BB.intDec cap+        CapDisable{cap} ->+          "disabled cap " <> BB.intDec cap+        CapEnable{cap} ->+          "enabled cap " <> BB.intDec cap+        Message msg ->+          BB.stringUtf8 msg+        UserMessage msg ->+          BB.stringUtf8 msg+        UserMarker markername ->+          "marker: " <> BB.stringUtf8 markername+        CapsetCreate cs ct ->+          "created capset " <> BB.word32Dec cs+          <> " of type " <> BB.stringUtf8 (show ct)+        CapsetDelete cs ->+          "deleted capset " <> BB.word32Dec cs+        CapsetAssignCap cs cp ->+          "assigned cap " <> BB.intDec cp <> " to capset " <> BB.word32Dec cs+        CapsetRemoveCap cs cp ->+          "removed cap " <> BB.intDec cp <> " from capset " <> BB.word32Dec cs+        OsProcessPid cs pid ->+          "capset " <> BB.word32Dec cs <> ": pid " <> BB.word32Dec pid+        OsProcessParentPid cs ppid ->+          "capset " <> BB.word32Dec cs <> ": parent pid " <> BB.word32Dec ppid+        WallClockTime cs sec nsec ->+          "capset " <> BB.word32Dec cs <> ": wall clock time "+          <> BB.word64Dec sec <> "s "+          <> BB.word32Dec nsec <> "ns (unix epoch)"+        RtsIdentifier cs i ->+          "capset " <> BB.word32Dec cs+          <> ": RTS version \"" <> BB.stringUtf8 i <> "\""+        ProgramArgs cs args ->+          "capset " <> BB.word32Dec cs+          <> ": args: " <> BB.stringUtf8 (show args)+        ProgramEnv cs env ->+          "capset " <> BB.word32Dec cs+          <> ": env: " <> BB.stringUtf8 (show env)+        UnknownEvent n ->+          "Unknown event type " <> BB.word16Dec n+        InternString str sId ->+          "Interned string: \"" <> BB.stringUtf8 str+          <> "\" with id " <> BB.word32Dec sId+        -- events for the parallel RTS+        Version version ->+          "compiler version is " <> BB.stringUtf8 version+        ProgramInvocation  commandline ->+          "program invocation: " <> BB.stringUtf8 commandline+        EdenStartReceive ->+          "starting to receive"+        EdenEndReceive ->+          "stop receiving"+        CreateProcess  process ->+          "creating process " <> BB.word32Dec process+        KillProcess process ->+          "killing process " <> BB.word32Dec process+        AssignThreadToProcess thread process ->+          "assigning thread " <> BB.word32Dec thread+          <> " to process " <> BB.word32Dec process+        CreateMachine machine realtime ->+          "creating machine " <> BB.word16Dec machine+          <> " at " <> BB.word64Dec realtime+        KillMachine machine ->+          "killing machine " <> BB.word16Dec machine+        SendMessage mesTag senderProcess senderThread+          receiverMachine receiverProcess receiverInport ->+            "sending message with tag " <> BB.stringUtf8 (show mesTag)+            <> " from process " <> BB.word32Dec senderProcess+            <> ", thread " <> BB.word32Dec senderThread+            <> " to machine " <> BB.word16Dec receiverMachine+            <> ", process " <> BB.word32Dec receiverProcess+            <> " on inport " <> BB.word32Dec receiverInport+        ReceiveMessage mesTag receiverProcess receiverInport+          senderMachine senderProcess senderThread messageSize ->+            "receiving message with tag " <> BB.stringUtf8 (show mesTag)+            <> " at process " <> BB.word32Dec receiverProcess+            <> ", inport " <> BB.word32Dec receiverInport+            <> " from machine " <> BB.word16Dec senderMachine+            <> ", process " <> BB.word32Dec senderProcess+            <> ", thread " <> BB.word32Dec senderThread+            <> " with size " <> BB.word32Dec messageSize+        SendReceiveLocalMessage mesTag senderProcess senderThread+          receiverProcess receiverInport ->+            "sending/receiving message with tag " <> BB.stringUtf8 (show mesTag)+            <> " from process " <> BB.word32Dec senderProcess+            <> ", thread " <> BB.word32Dec senderThread+            <> " to process " <> BB.word32Dec receiverProcess+            <> " on inport " <> BB.word32Dec receiverInport+        MerStartParConjunction dyn_id static_id ->+          "Start a parallel conjunction 0x" <> BB.word64Hex dyn_id+          <> ", static_id: " <> BB.word32Dec static_id+        MerEndParConjunction dyn_id ->+          "End par conjunction: 0x" <> BB.word64Hex dyn_id+        MerEndParConjunct dyn_id ->+          "End par conjunct: 0x" <> BB.word64Hex dyn_id+        MerCreateSpark dyn_id spark_id ->+          "Create spark for conjunction: 0x" <> BB.word64Hex dyn_id+          <> " spark: 0x" <> BB.word32Hex spark_id+        MerFutureCreate future_id name_id ->+          "Create future 0x" <> BB.word64Hex future_id+          <> " named " <> BB.word32Dec name_id+        MerFutureWaitNosuspend future_id ->+          "Wait didn't suspend for future: 0x" <> BB.word64Hex future_id+        MerFutureWaitSuspended future_id ->+          "Wait suspended on future: 0x" <> BB.word64Hex future_id+        MerFutureSignal future_id ->+          "Signaled future 0x" <> BB.word64Hex future_id+        MerLookingForGlobalThread ->+          "Looking for global thread to resume"+        MerWorkStealing ->+          "Trying to steal a spark"+        MerLookingForLocalSpark ->+          "Looking for a local spark to execute"+        MerReleaseThread thread_id ->+          "Releasing thread " <> BB.word32Dec thread_id <> " to the free pool"+        MerCapSleeping ->+          "Capability going to sleep"+        MerCallingMain ->+          "About to call the program entry point"+        PerfName{perfNum, name} ->+          "perf event " <> BB.word32Dec perfNum+          <> " named \"" <> BB.stringUtf8 name <> "\""+        PerfCounter{perfNum, tid, period} ->+          "perf event counter " <> BB.word32Dec perfNum+          <> " incremented by " <> BB.word64Dec (period + 1)+          <> " in OS thread " <> BB.word64Dec (kernelThreadId tid)+        PerfTracepoint{perfNum, tid} ->+          "perf event tracepoint " <> BB.word32Dec perfNum+          <> " reached in OS thread " <> BB.word64Dec (kernelThreadId tid)++showThreadStopStatus :: ThreadStopStatus -> String+showThreadStopStatus HeapOverflow   = "heap overflow"+showThreadStopStatus StackOverflow  = "stack overflow"+showThreadStopStatus ThreadYielding = "thread yielding"+showThreadStopStatus ThreadBlocked  = "thread blocked"+showThreadStopStatus ThreadFinished = "thread finished"+showThreadStopStatus ForeignCall    = "making a foreign call"+showThreadStopStatus BlockedOnMVar  = "blocked on an MVar"+showThreadStopStatus BlockedOnMVarRead = "blocked reading an MVar"+showThreadStopStatus BlockedOnBlackHole = "blocked on a black hole"+showThreadStopStatus BlockedOnRead = "blocked on I/O read"+showThreadStopStatus BlockedOnWrite = "blocked on I/O write"+showThreadStopStatus BlockedOnDelay = "blocked on threadDelay"+showThreadStopStatus BlockedOnSTM = "blocked in STM retry"+showThreadStopStatus BlockedOnDoProc = "blocked on asyncDoProc"+showThreadStopStatus BlockedOnCCall = "blocked in a foreign call"+showThreadStopStatus BlockedOnCCall_NoUnblockExc = "blocked in a foreign call"+showThreadStopStatus BlockedOnMsgThrowTo = "blocked in throwTo"+showThreadStopStatus ThreadMigrating = "thread migrating"+showThreadStopStatus BlockedOnMsgGlobalise = "waiting for data to be globalised"+showThreadStopStatus (BlockedOnBlackHoleOwnedBy target) =+          "blocked on black hole owned by thread " ++ show target+showThreadStopStatus NoStatus = "No stop thread status"++ppEventLog :: EventLog -> String+ppEventLog = BL8.unpack . BB.toLazyByteString . buildEventLog++buildEventLog :: EventLog -> BB.Builder+buildEventLog (EventLog (Header ets) (Data es)) =+  "Event Types:\n"+  <> foldMap (\evType -> buildEventType evType <> "\n") ets+  <> "\n"+  <> "Events:\n"+  <> foldMap (\ev -> buildEvent imap ev <> "\n") sorted+  where+    imap = buildEventTypeMap ets+    sorted = sortEvents es++ppEventType :: EventType -> String+ppEventType = BL8.unpack . BB.toLazyByteString . buildEventType++buildEventType :: EventType -> BB.Builder+buildEventType (EventType num dsc msz) =+  BB.word16Dec num <> ": "+  <> BB.stringUtf8 dsc <> " (size "+  <> maybe "variable" BB.word16Dec msz <> ")"++-- | Pretty prints an 'Event', with clean handling for 'UnknownEvent'+ppEvent :: IntMap EventType -> Event -> String+ppEvent imap = BL8.unpack . BB.toLazyByteString . buildEvent imap++buildEvent :: IntMap EventType -> Event -> BB.Builder+buildEvent imap Event {..} =+  BB.word64Dec evTime+  <> ": "+  <> maybe "" (\c -> "cap " <> BB.intDec c <> ": ") evCap+  <> case evSpec of+    UnknownEvent{ ref=ref } ->+      maybe "" (BB.stringUtf8 . desc) $ IM.lookup (fromIntegral ref) imap+    _ -> buildEventInfo evSpec++buildEvent' :: Event -> BB.Builder+buildEvent' Event {..} =+   BB.word64Dec evTime+   <> ": "+   <> maybe "" (\c -> "cap " <> BB.intDec c <> ": ") evCap+   <> case evSpec of+     UnknownEvent{ ref=ref } ->+      "Unknown Event (ref: " <> BB.word16Dec ref <> ")"+     _ -> buildEventInfo evSpec
+ src/GHC/RTS/Events/Analysis.hs view
@@ -0,0 +1,272 @@+module GHC.RTS.Events.Analysis+  ( Machine (..)+  , validate+  , validates+  , simulate+  , Profile (..)+  , profile+  , profileIndexed+  , profileRouted+  , extractIndexed+  , refineM+  , profileM+  , indexM+  , toList+  , toMaybe+  , Process (..)+  , routeM+  )+ where++import GHC.RTS.Events++import Data.Map (Map)+import qualified Data.Map as M+import Data.Maybe (fromMaybe)++--------------------------------------------------------------------------------+-- | This is based on a simple finite state machine hence the names `delta`+-- for the state transition function.+-- Since states might be more than simple pattern matched constructors, we+-- use `finals :: state -> Bool`, rather than `Set state`, to indicate that+-- the machine is in some final state. Similarly for `alpha`, which+-- indicates the alphabet of inputs to a machine.+-- The function `delta` returns `Maybe` values, where `Nothing`+-- indicates that no valid transition is possible: ie, there has been an+-- error.+data Machine s i = Machine+  { initial :: s                 -- ^ Initial state+  , final   :: s -> Bool         -- ^ Valid final states+  , alpha   :: i -> Bool         -- ^ Valid input alphabet+  , delta   :: s -> i -> Maybe s -- ^ State transition function+  }++-- | The `step` function runs a machine in a state against a single input.+-- The state remains fixed once a final state is encountered. The+-- result is `Left state input` if some `state` failed for an `ìnput`, and+-- `Right state` for a successful state.+step :: Machine s i -> s -> i -> Either (s, i) s+step m s i+  | final m s = Right s+  | alpha m i = case delta m s i of+      Just s' -> Right s'+      Nothing -> Left (s, i)+  | otherwise = Right s++-- | The `validate` function takes a machine and a list of inputs. The machine+-- is started from its initial state and run against the inputs in turn.+-- It returns the state and input on failure, and just the state on success.+validate :: Machine s i -> [i] -> Either (s, i) s+validate m = foldl (>>=) (Right (initial m)) . map (flip (step m))++-- | This function is similar to `validate`, but outputs each intermediary+-- state as well. For an incremental version, use `simulate`.+validates :: Machine s i -> [i] -> [Either (s, i) s]+validates m = scanl (>>=) (Right (initial m)) . map (flip (step m))++--------------------------------------------------------------------------------+-- A Process is a list of successful values, followed by an error if one+-- occured. This captures the idea that a computation may produce a list of+-- elements before possibly failing. This gives us an incremental interface+-- to data processed from machine transitions.+data Process e a+  = Done+  | Fail e+  | Prod a (Process e a)+ deriving Show++toList :: Process e a -> [a]+toList (Fail _)    = []+toList Done        = []+toList (Prod a as) = a : toList as++toMaybe :: Process e a -> Maybe e+toMaybe (Fail e)    = Just e+toMaybe Done        = Nothing+toMaybe (Prod _ as) = toMaybe as++-- | A machine can be analysed while it is accepting input in order to extract+-- some information. This function takes a machine and a function that extracts+-- data and produces output. On failure, the machine state and input are+-- produced. Note that when an input is not in the machine's alphabet,+-- then there is no transition, and so no output is produced in response+-- to that input.+analyse :: Machine s i          -- ^ The machine used+        -> (s -> i -> Maybe o)  -- ^ An extraction function that may produce output+        -> [i]                  -- ^ A list of input+        -> Process (s, i) o     -- ^ A process that produces output+analyse machine extract = go (initial machine)+ where+  -- go :: s -> [i] -> Process (s, i) o+  go _ [] = Done+  go s (i:is)+    | final machine s = Done+    | alpha machine i =+        case delta machine s i of+          Nothing -> Fail (s, i)+          Just s' ->+            case extract s i of+              Nothing -> go s' is+              Just o  -> Prod o (go s' is)+    | otherwise = go s is++-- | Machines sometimes need to operate on coarser input than they are defined+-- for. This function takes a function that refines input and a machine that+-- works on refined input, and produces a machine that can work on coarse input.+refineM :: (i -> j) -> Machine s j -> Machine s i+refineM refine machine = Machine+  { initial = initial machine+  , final   = final machine+  , alpha   = alpha machine . refine+  , delta   = \s -> delta machine s . refine+  }++--------------------------------------------------------------------------------+-- | This function produces a process that outputs all the states that a+-- machine goes through.+simulate :: Machine s i -> [i] -> Process (s, i) (s, i)+simulate machine = analyse machine (\s i -> delta machine s i >>= \s' -> return (s', i))++--------------------------------------------------------------------------------+-- | A state augmented by Timestamp information is held in `profileState`.+-- When the state changes, `profileMap` stores a map between each state+-- and its cumulative time.+data Profile s = Profile+  { profileState :: s               -- ^ The current state+  , profileTime  :: Timestamp       -- ^ The entry time of the state+  } deriving (Show)++-- | This function takes a machine and profiles its state.+profileM :: Ord s+         => (i -> Timestamp)+         -> Machine s i+         -> Machine (Profile s) i+profileM timer machine = Machine+  { initial = Profile (initial machine) 0+  , final   = final machine . profileState+  , alpha   = alpha machine+  , delta   = profileMDelta+  }+ where+  profileMDelta (Profile s _) i = do+    s' <- delta machine s i+    return $ Profile s' (timer i)++-- | extractProfile returns the state, the time this state was made,+-- and the time spent in this state.+extractProfile :: (i -> Timestamp)                -- ^ Extracts current timestamp+               -> Profile s                       -- ^ A profiled state+               -> i                               -- ^ Some input+               -> Maybe (s, Timestamp, Timestamp) -- ^ (state, currentTime, elapsedTime)+extractProfile timer p i = Just (profileState p, profileTime p, timer i - profileTime p)++profile :: (Ord s, Eq s)+        => Machine s i       -- ^ A machine to profile+        -> (i -> Timestamp)  -- ^ Converts input to timestamps+        -> [i]               -- ^ The list of input+        -> Process (Profile s, i) (s, Timestamp, Timestamp)+profile machine timer =+  analyse (profileM timer machine)+          (extractProfile timer)++profileIndexed :: (Ord k, Ord s, Eq s)+               => Machine s i+               -> (i -> Maybe k)+               -> (i -> Timestamp)+               -> [i]+               -> Process (Map k (Profile s), i) (k, (s, Timestamp, Timestamp))+profileIndexed machine index timer =+  analyse (indexM index (profileM timer machine))+          (extractIndexed (extractProfile timer) index)++extractIndexed :: Ord k => (s -> i -> Maybe o) -> (i -> Maybe k) -> (Map k s -> i -> Maybe (k, o))+extractIndexed extract index m i = do+  k <- index i+  s <- M.lookup k m+  o <- extract s i+  return (k, o)++-- | An indexed machine takes a function that multiplexes the input to a key+-- and then takes a machine description to an indexed machine.+indexM :: Ord k+       => (i -> Maybe k)        -- ^ An indexing function+       -> Machine s i           -- ^ A machine to index with+       -> Machine (Map k s) i   -- ^ The indexed machine+indexM index machine = Machine+  { initial = M.empty+  , final   = indexMFinal+  , alpha   = indexMAlpha+  , delta   = indexMDelta+  }+ where+  -- An indexer never reaches a final state: it is always possible that+  -- an event comes along that is accepted by a machine that is not+  -- yet in in the index.+  --+  -- An alternative view is that the indexer is in a final state if all its+  -- elements are, but this would not allow the creation of new indexes:+  --     indexMFinal m = not (M.null m) && (all (final machine) . M.elems $ m)+  indexMFinal = const False++  -- The alphabet of the indexer is that of its elements.+  indexMAlpha = alpha machine++  -- If the index is not yet in the mapping, we start a new machine in its+  -- initial state. The indexer fails if indexed state fails.+  indexMDelta m i = do+    k <- index i+    let state = fromMaybe (initial machine) (M.lookup k m)+    state' <- delta machine state i+    return $ M.insert k state' m++profileRouted :: (Ord k, Ord s, Eq s, Eq r)+              => Machine s i+              -> Machine r i+              -> (r -> i -> Maybe k)+              -> (i -> Timestamp)+              -> [i]+              -> Process ((Map k (Profile s), r), i) (k, (s, Timestamp, Timestamp))+profileRouted machine router index timer =+  analyse (routeM router index (profileM timer machine))+          (extractRouted (extractProfile timer) index)++extractRouted :: Ord k => (s -> i -> Maybe o) -> (r -> i -> Maybe k) -> ((Map k s, r)  -> i -> Maybe (k, o))+extractRouted extract index (m, r) i = do+  k <- index r i+  s <- M.lookup k m+  o <- extract s i+  return (k, o)+++-- | A machine can be indexed not only by the inputs, but also by the state+-- of an intermediary routing machine. This is a generalisation of indexM.+routeM :: (Ord k)+       => Machine r i+       -> (r -> i -> Maybe k)+       -> Machine s i+       -> Machine (Map k s, r) i+routeM router index machine = Machine+  { initial = (M.empty, initial router)+  , final   = routeMFinal+  , alpha   = routeMAlpha+  , delta   = routeMDelta+  }+ where+  -- As with indexers, there is no final state.+  routeMFinal = const False++  -- The alphabet is that of the router combined with the machine+  routeMAlpha i = alpha router i || alpha machine i++  routeMDelta (m, r) i = do+    r' <- if alpha router i+          then delta router r i+          else return r+    m' <- if alpha machine i+          then case index r' i of+            Just k -> do+              s' <- delta machine (fromMaybe (initial machine) (M.lookup k m)) i+              return $ M.insert k s' m+            Nothing -> return m+          else return m+    return (m', r')
+ src/GHC/RTS/Events/Analysis/Capability.hs view
@@ -0,0 +1,209 @@+module GHC.RTS.Events.Analysis.Capability+  ( capabilityThreadPoolMachine+  , capabilityThreadRunMachine+  , capabilityThreadIndexer+  , capabilityTaskPoolMachine+  , capabilityTaskOSMachine+  )+ where++import GHC.RTS.Events+import GHC.RTS.Events.Analysis++import Data.Map (Map)+import qualified Data.Map as M++-- | This state machine tracks threads residing on capabilities.+-- Each thread can only reside on one capability, but can be migrated between+-- them.+capabilityThreadPoolMachine :: Machine (Map ThreadId Int) Event+capabilityThreadPoolMachine = Machine+  { initial = M.empty+  , final   = const False+  , alpha   = capabilityThreadPoolMachineAlpha+  , delta   = capabilityThreadPoolMachineDelta+  }+ where+  capabilityThreadPoolMachineAlpha evt = case evSpec evt of+     (CreateThread _)    -> True+     (StopThread _ _)    -> True+     (MigrateThread _ _) -> True+     _                   -> False++  capabilityThreadPoolMachineDelta mapping evt = do+    capId <- evCap evt+    case evSpec evt of+      (CreateThread threadId)              -> insertThread threadId capId mapping+      (StopThread threadId ThreadFinished) -> deleteThread threadId mapping+      (StopThread _ _)                     -> Just mapping+      (MigrateThread threadId capId')      -> deleteThread threadId mapping >>=+                                                insertThread threadId capId'+      _                                    -> Nothing+   where+    insertThread :: ThreadId -> Int -> Map ThreadId Int -> Maybe (Map ThreadId Int)+    insertThread threadId capId m+      | threadId `M.member` m = Nothing -- The thread already exists+      | otherwise             = Just $ M.insert threadId capId m++    deleteThread :: ThreadId -> Map ThreadId Int -> Maybe (Map ThreadId Int)+    deleteThread threadId m+      | threadId `M.notMember` m = Nothing -- The thread doesn't exist+      | otherwise                = Just $ M.delete threadId m++-- | This state machine tracks threads running on capabilities, only one thread+-- may run on a capability at a time.+capabilityThreadRunMachine :: Machine (Map Int ThreadId) Event+capabilityThreadRunMachine = Machine+  { initial = M.empty+  , final   = const False+  , alpha   = threadRunAlpha+  , delta   = threadRunDelta+  }+ where+  threadRunAlpha event = case evSpec event of+    -- TODO: can threads be migrated while they are running?+    -- TODO: take into account paused threads+    (RunThread _)     -> True+    (StopThread _ _ ) -> True+    _                 -> False++  -- The indexer fails if a thread is inserted where one already exists,+  -- or if a thread is deleted that doesn't exist.+  threadRunDelta mapping e = do+    capId <- evCap e+    case evSpec $ e of+      (RunThread threadId)     -> runThread capId threadId mapping+      (StopThread threadId _ ) -> stopThread threadId mapping+      _                        -> Just mapping+   where+    runThread :: Int -> ThreadId -> Map Int ThreadId -> Maybe (Map Int ThreadId)+    runThread capId threadId m+      | capId `M.member` m        = Nothing -- A thread is already on this cap+      | threadId `elem` M.elems m = Nothing -- This thread is already on a cap+      | otherwise                 = Just $ M.insert capId threadId m+    stopThread :: ThreadId -> Map Int ThreadId -> Maybe (Map Int ThreadId)+    stopThread threadId m+      | notElem threadId . M.elems $ m = Nothing -- The thread doesn't exist+      | otherwise                      = Just $ M.filter (/= threadId) m++capabilityThreadIndexer :: Map Int ThreadId -> Event -> Maybe ThreadId+capabilityThreadIndexer m evt = case evSpec evt of+  (CreateSparkThread threadId)  -> Just threadId+  (CreateThread threadId)       -> Just threadId+  (RunThread threadId)          -> Just threadId+  (StopThread threadId _)       -> Just threadId+  (ThreadRunnable threadId)     -> Just threadId+  (MigrateThread threadId _)    -> Just threadId+  (WakeupThread threadId capId) -> if Just capId == evCap evt+                                   then Just threadId+                                   else Nothing+  _                             -> mThreadId+ where+  mThreadId = evCap evt >>= (\capId -> M.lookup capId m)++-- | This state machine tracks Haskell tasks, represented by TaskId,+-- residing on capabilities.+-- Each Haskell task can only reside on one capability, but can be migrated+-- between them.+capabilityTaskPoolMachine :: Machine (Map TaskId Int) Event+capabilityTaskPoolMachine = Machine+  { initial = M.empty+  , final   = const False+  , alpha   = capabilityTaskPoolMachineAlpha+  , delta   = capabilityTaskPoolMachineDelta+  }+ where+  capabilityTaskPoolMachineAlpha evt = case evSpec evt of+     TaskCreate{}  -> True+     TaskDelete{}  -> True+     TaskMigrate{} -> True+     _             -> False++  capabilityTaskPoolMachineDelta mapping evt = do+    case evSpec evt of+      TaskCreate {taskId, cap}           -> insertTask taskId cap mapping+      TaskDelete {taskId}                -> deleteTask taskId Nothing mapping+      TaskMigrate {taskId, cap, new_cap} ->+        deleteTask taskId (Just cap) mapping >>=+          insertTask taskId new_cap+      _                                  -> Nothing+   where+    insertTask :: TaskId -> Int -> Map TaskId Int+               -> Maybe (Map TaskId Int)+    insertTask taskId cap m+      | taskId `M.member` m = Nothing  -- The task already exists.+      | otherwise           = Just $ M.insert taskId cap m++    deleteTask :: TaskId -> Maybe Int -> Map TaskId Int+               -> Maybe (Map TaskId Int)+    deleteTask taskId expectedcap m+      | Just oldcap <- M.lookup taskId m+      , maybe True (==oldcap) expectedcap+      = Just $ M.delete taskId m+      | otherwise+      = Nothing  -- The task doesn't exist, or does but with an unexpected cap.++-- | This state machine tracks Haskell tasks (represented by the KernelThreadId+-- of their OS thread) residing on capabilities and additionally+-- tracks the (immutable) assignment of OS thread ids (KernelThreadId)+-- to tasks ids (TaskId).+-- Each Haskell task can only reside on one capability, but can be migrated+-- between them.+--+-- Invariant for the @(Map KernelThreadId Int, Map TaskId KernelThreadId)@ +-- type: the second map is an injection (verified by the machine +-- in 'insertTaskOS') and the following sets are equal: +-- keys of the fist map and values of the second+-- (follows from the construction of the maps by the machine).+--+-- The machine verifies as much as 'capabilityTaskPoolMachine' and additionally+-- the data invariant, and offers a richer verification profile.+capabilityTaskOSMachine :: Machine (Map KernelThreadId Int,+                                    Map TaskId KernelThreadId)+                                   Event+capabilityTaskOSMachine = Machine+  { initial = (M.empty, M.empty)+  , final   = const False+  , alpha   = capabilityTaskOSMachineAlpha+  , delta   = capabilityTaskOSMachineDelta+  }+ where+  capabilityTaskOSMachineAlpha evt = case evSpec evt of+     TaskCreate{}  -> True+     TaskDelete{}  -> True+     TaskMigrate{} -> True+     _             -> False++  capabilityTaskOSMachineDelta mapping evt = do+    case evSpec evt of+      TaskCreate {taskId, cap, tid} -> insertTaskOS taskId cap tid mapping+      TaskDelete {taskId}           -> deleteTaskOS taskId mapping+      TaskMigrate {taskId, new_cap} -> migrateTaskOS taskId new_cap mapping+      _                             -> Nothing+   where+    insertTaskOS :: TaskId -> Int -> KernelThreadId+                 -> (Map KernelThreadId Int, Map TaskId KernelThreadId)+                 -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)+    insertTaskOS taskId cap tid (m, ma)+      | taskId `M.member` ma = Nothing  -- The task already exists.+      | tid `M.member` m     = Nothing  -- The OS thread already exists.+      | otherwise            = Just (M.insert tid cap m,+                                     M.insert taskId tid ma)++    deleteTaskOS :: TaskId -> (Map KernelThreadId Int,+                               Map TaskId KernelThreadId)+                 -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)+    deleteTaskOS taskId (m, ma) =+      case M.lookup taskId ma of+        Nothing  -> Nothing  -- The task doesn't exist.+        Just tid -> Just (M.delete tid m,+                          M.delete taskId ma)++    migrateTaskOS :: TaskId -> Int -> (Map KernelThreadId Int,+                                       Map TaskId KernelThreadId)+                  -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)+    migrateTaskOS taskId new_cap (m, ma) =+      case M.lookup taskId ma of+        Nothing -> Nothing  -- The task doesn't exist.+        Just tid -> Just (M.insert tid new_cap m,+                          ma)  -- The assignment is immutable.
+ src/GHC/RTS/Events/Analysis/SparkThread.hs view
@@ -0,0 +1,110 @@+module GHC.RTS.Events.Analysis.SparkThread+  ( SparkThreadState (..)+  , sparkThreadMachine+  , capabilitySparkThreadMachine+  , capabilitySparkThreadIndexer+  )+ where++import GHC.RTS.Events+import GHC.RTS.Events.Analysis++import Data.Map (Map)+import qualified Data.Map as M+import Data.Set (Set)+import qualified Data.Set as S++data SparkThreadState+  = SparkThreadInitial+  | SparkThreadCreated+  | SparkThreadRunning Int+  | SparkThreadPaused Int+  | SparkThreadFinal+  deriving (Eq, Ord, Show)++sparkThreadMachine :: Machine SparkThreadState EventInfo+sparkThreadMachine = Machine+  { initial = SparkThreadInitial+  , final   = sparkThreadFinal+  , alpha   = sparkThreadAlpha+  , delta   = sparkThreadDelta+  }+ where+  sparkThreadFinal SparkThreadFinal = True+  sparkThreadFinal _                = False++  -- sparkThreadAlpha (CreateSparkThread _) = True+  sparkThreadAlpha (RunThread _)         = True+  sparkThreadAlpha (StopThread _ _)      = True+  sparkThreadAlpha SparkRun              = True+  sparkThreadAlpha (SparkSteal _)        = True+  sparkThreadAlpha _                     = False++  -- SparkThreadInitial+  -- sparkThreadDelta SparkThreadInitial (CreateSparkThread _) = Just SparkThreadInitial+  sparkThreadDelta SparkThreadInitial (RunThread _)         = Just SparkThreadCreated+  -- SparkThreadCreated+  sparkThreadDelta SparkThreadCreated SparkRun                      = Just (SparkThreadRunning 0)+  sparkThreadDelta SparkThreadCreated (SparkSteal _)                = Just (SparkThreadRunning 0)+  sparkThreadDelta SparkThreadCreated (StopThread _ ThreadFinished) = Just SparkThreadFinal+  -- SparkThreadRunning+  sparkThreadDelta (SparkThreadRunning _) (StopThread _ ThreadFinished) = Just SparkThreadFinal+  sparkThreadDelta (SparkThreadRunning n) (StopThread _ _)              = Just (SparkThreadPaused n)+  sparkThreadDelta (SparkThreadRunning n) SparkRun                      = Just (SparkThreadRunning (n+1))+  sparkThreadDelta (SparkThreadRunning n) (SparkSteal _)                = Just (SparkThreadRunning (n+1))+  -- SparkThreadPaused+  sparkThreadDelta (SparkThreadPaused n) (RunThread _) = Just (SparkThreadRunning n)+  -- Other+  sparkThreadDelta _ _ = Nothing++capabilitySparkThreadMachine :: Machine (Map Int ThreadId, Set ThreadId) Event+capabilitySparkThreadMachine = Machine+  { initial = (M.empty, S.empty)+  , final   = const False+  , alpha   = capabilitySparkThreadAlpha+  , delta   = capabilitySparkThreadDelta+  }+ where+  capabilitySparkThreadAlpha evt = case evSpec evt of+    (CreateSparkThread _)         -> True+    (RunThread _)                 -> True+    (StopThread _ _)              -> True+    _                             -> False+  capabilitySparkThreadDelta (m, s) evt = do+    capId <- evCap evt+    case evSpec evt of+      (CreateSparkThread threadId)         -> createThread threadId+      (StopThread threadId _)              -> pauseThread threadId+      (RunThread threadId)                 -> runThread capId threadId+      _                                    -> Just (m, s)+   where+    createThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)+    createThread threadId+      | S.member threadId s = Nothing -- A spark thread with this Id already created+      | otherwise           = Just (m, S.insert threadId s)++    runThread :: Int -> ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)+    runThread capId threadId+      | M.member capId m          = Nothing      -- A thread is already on this cap+      | threadId `elem` M.elems m = Nothing      -- This thread is already on a cap+      | S.notMember threadId s    = Just (m, s)  -- Not a spark thread+      | otherwise                 = Just (M.insert capId threadId m, S.insert threadId s)++    stopThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)+    stopThread threadId = Just (M.filter (/= threadId) m, S.delete threadId s)++    pauseThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)+    pauseThread threadId = Just (M.filter (/= threadId) m, s)++capabilitySparkThreadIndexer :: (Map Int ThreadId, Set ThreadId) -> Event -> Maybe ThreadId+capabilitySparkThreadIndexer (m, s) evt = case evSpec evt of+  (CreateThread threadId)   -> inSparkThreadPool threadId+  (RunThread threadId)      -> inSparkThreadPool threadId+  (StopThread threadId _)   -> inSparkThreadPool threadId+  _                         -> evCap evt >>= (\capId -> M.lookup capId m)+ where+  inSparkThreadPool :: ThreadId -> Maybe ThreadId+  inSparkThreadPool threadId+    | S.member threadId s = Just threadId+    | otherwise           = Nothing+
+ src/GHC/RTS/Events/Analysis/Thread.hs view
@@ -0,0 +1,53 @@+module GHC.RTS.Events.Analysis.Thread+  ( ThreadState (..)+  , threadMachine+  )+ where++import GHC.RTS.Events+import GHC.RTS.Events.Analysis++--------------------------------------------------------------------------------+-- | This datatype defines the state machine for a single thread.+data ThreadState+  = ThreadInitial+  | ThreadQueued+  | ThreadRunning+  | ThreadStopped+  | ThreadFinal+  deriving (Show, Eq, Ord)++-- | This state machine tracks the events processed by a thread.+threadMachine :: Machine ThreadState EventInfo+threadMachine = Machine+  { initial = ThreadInitial+  , final   = threadFinal+  , alpha   = threadAlpha+  , delta   = threadDelta+  }+ where+  threadFinal ThreadFinal   = True+  threadFinal _             = False++  threadAlpha (CreateThread _)   = True+  threadAlpha (RunThread _)      = True+  threadAlpha (StopThread _ _)   = True+  threadAlpha (WakeupThread _ _) = True+  threadAlpha _                  = False++  -- ThreadInitial+  threadDelta ThreadInitial (CreateThread _) = Just ThreadQueued+  -- ThreadQueued+  threadDelta ThreadQueued (RunThread _)      = Just ThreadRunning+  threadDelta ThreadQueued (WakeupThread _ _) = Just ThreadQueued+  -- ThreadRunning+  threadDelta ThreadRunning (StopThread _ StackOverflow)  = Just ThreadQueued+  threadDelta ThreadRunning (StopThread _ HeapOverflow)   = Just ThreadQueued+  threadDelta ThreadRunning (StopThread _ ForeignCall)    = Just ThreadQueued+  threadDelta ThreadRunning (StopThread _ ThreadFinished) = Just ThreadFinal+  threadDelta ThreadRunning (StopThread _ _)              = Just ThreadStopped+  -- ThreadStopped+  threadDelta ThreadStopped (RunThread _)      = Just ThreadRunning+  threadDelta ThreadStopped (WakeupThread _ _) = Just ThreadQueued+  -- Unknown+  threadDelta _ _ = Nothing
+ src/GHC/RTS/Events/Binary.hs view
@@ -0,0 +1,1228 @@+{-# LANGUAGE CPP #-}+module GHC.RTS.Events.Binary+  ( -- * Readers+    getHeader+  , getEvent+  , standardParsers+  , ghc6Parsers+  , ghc7Parsers+  , mercuryParsers+  , perfParsers+  , pre77StopParsers+  , ghc782StopParser+  , post782StopParser+  , parRTSParsers++  -- * Writers+  , putEventLog+  , putHeader+  , putEvent++  -- * Perf events+  , nEVENT_PERF_NAME+  , nEVENT_PERF_COUNTER+  , nEVENT_PERF_TRACEPOINT++  ) where+import Control.Monad+import Data.Maybe+import Prelude hiding (gcd, rem, id)++import Data.Array+import Data.Binary+import Data.Binary.Put+import qualified Data.Binary.Get as G++import GHC.RTS.EventTypes+import GHC.RTS.EventParserUtils++#define EVENTLOG_CONSTANTS_ONLY+#include "EventLogFormat.h"++getEventType :: Get EventType+getEventType = do+           etNum <- get+           size <- get :: Get EventTypeSize+           let etSize = if size == 0xffff then Nothing else Just size+           -- 0xffff indicates variable-sized event+           etDescLen <- get :: Get EventTypeDescLen+           etDesc <- getEtDesc (fromIntegral etDescLen)+           etExtraLen <- get :: Get Word32+           G.skip (fromIntegral etExtraLen)+           ete <- get :: Get Marker+           when (ete /= EVENT_ET_END) $+              fail "Event Type end marker not found."+           return (EventType etNum etDesc etSize)+           where+             getEtDesc :: Int -> Get [Char]+             getEtDesc s = replicateM s (get :: Get Char)++getHeader :: Get Header+getHeader = do+            hdrb <- get :: Get Marker+            when (hdrb /= EVENT_HEADER_BEGIN) $+                 fail "Header begin marker not found"+            hetm <- get :: Get Marker+            when (hetm /= EVENT_HET_BEGIN) $+                 fail "Header Event Type begin marker not found"+            ets <- getEventTypes+            emark <- get :: Get Marker+            when (emark /= EVENT_HEADER_END) $+                 fail "Header end marker not found"+            db <- get :: Get Marker+            when (db /= EVENT_DATA_BEGIN) $+                  fail "My Data begin marker not found"+            return $ Header ets+     where+      getEventTypes :: Get [EventType]+      getEventTypes = do+          m <- get :: Get Marker+          case m of+             EVENT_ET_BEGIN -> do+                  et <- getEventType+                  nextET <- getEventTypes+                  return (et : nextET)+             EVENT_HET_END ->+                  return []+             _ ->+                  fail "Malformed list of Event Types in header"++getEvent :: EventParsers -> Get (Maybe Event)+getEvent (EventParsers parsers) = do+  etRef <- get :: Get EventTypeNum+  if etRef == EVENT_DATA_END+     then return Nothing+     else do !evTime   <- get+             evSpec <- parsers ! fromIntegral etRef+             return $ Just Event { evCap = undefined, .. }++--+-- standardEventParsers.+--+standardParsers :: [EventParser EventInfo]+standardParsers = [+ (FixedSizeParser EVENT_STARTUP sz_cap (do -- (n_caps)+      c <- get :: Get CapNo+      return Startup{ n_caps = fromIntegral c }+   )),++ (FixedSizeParser EVENT_BLOCK_MARKER (sz_block_size + sz_time + sz_cap) (do -- (size, end_time, cap)+      block_size <- get :: Get BlockSize+      end_time <- get :: Get Timestamp+      c <- get :: Get CapNo+      return EventBlock { end_time   = end_time,+                          cap        = fromIntegral c,+                          block_size = ((fromIntegral block_size) -+                                        (fromIntegral sz_block_event))+                        }+   )),++ -- EVENT_SHUTDOWN is replaced by EVENT_CAP_DELETE and GHC 7.6++ -- no longer generate the event; should be removed at some point+ (simpleEvent EVENT_SHUTDOWN Shutdown),++ (simpleEvent EVENT_REQUEST_SEQ_GC RequestSeqGC),++ (simpleEvent EVENT_REQUEST_PAR_GC RequestParGC),++ (simpleEvent EVENT_GC_START StartGC),++ (simpleEvent EVENT_GC_WORK GCWork),++ (simpleEvent EVENT_GC_IDLE GCIdle),++ (simpleEvent EVENT_GC_DONE GCDone),++ (simpleEvent EVENT_GC_END EndGC),++ (simpleEvent EVENT_GC_GLOBAL_SYNC GlobalSyncGC),++ (FixedSizeParser EVENT_GC_STATS_GHC (sz_capset + 2 + 5*8 + 4) (do  -- (heap_capset, generation, copied_bytes, slop_bytes, frag_bytes, par_n_threads, par_max_copied, par_tot_copied)+      heapCapset   <- get+      gen          <- get :: Get Word16+      copied       <- get :: Get Word64+      slop         <- get :: Get Word64+      frag         <- get :: Get Word64+      parNThreads  <- get :: Get Word32+      parMaxCopied <- get :: Get Word64+      parTotCopied <- get :: Get Word64+      return GCStatsGHC{ gen = fromIntegral gen+                       , parNThreads = fromIntegral parNThreads+                       , ..}+ )),++ (FixedSizeParser EVENT_HEAP_ALLOCATED (sz_capset + 8) (do  -- (heap_capset, alloc_bytes)+      heapCapset <- get+      allocBytes <- get+      return HeapAllocated{..}+ )),++ (FixedSizeParser EVENT_HEAP_SIZE (sz_capset + 8) (do  -- (heap_capset, size_bytes)+      heapCapset <- get+      sizeBytes  <- get+      return HeapSize{..}+ )),++ (FixedSizeParser EVENT_HEAP_LIVE (sz_capset + 8) (do  -- (heap_capset, live_bytes)+      heapCapset <- get+      liveBytes  <- get+      return HeapLive{..}+ )),++ (FixedSizeParser EVENT_HEAP_INFO_GHC (sz_capset + 2 + 4*8) (do  -- (heap_capset, n_generations, max_heap_size, alloc_area_size, mblock_size, block_size)+      heapCapset    <- get+      gens          <- get :: Get Word16+      maxHeapSize   <- get :: Get Word64+      allocAreaSize <- get :: Get Word64+      mblockSize    <- get :: Get Word64+      blockSize     <- get :: Get Word64+      return HeapInfoGHC{gens = fromIntegral gens, ..}+ )),++ (FixedSizeParser EVENT_CAP_CREATE (sz_cap) (do  -- (cap)+      cap <- get :: Get CapNo+      return CapCreate{cap = fromIntegral cap}+ )),++ (FixedSizeParser EVENT_CAP_DELETE (sz_cap) (do  -- (cap)+      cap <- get :: Get CapNo+      return CapDelete{cap = fromIntegral cap}+ )),++ (FixedSizeParser EVENT_CAP_DISABLE (sz_cap) (do  -- (cap)+      cap <- get :: Get CapNo+      return CapDisable{cap = fromIntegral cap}+ )),++ (FixedSizeParser EVENT_CAP_ENABLE (sz_cap) (do  -- (cap)+      cap <- get :: Get CapNo+      return CapEnable{cap = fromIntegral cap}+ )),++ (FixedSizeParser EVENT_CAPSET_CREATE (sz_capset + sz_capset_type) (do -- (capset, capset_type)+      cs <- get+      ct <- fmap mkCapsetType get+      return CapsetCreate{capset=cs,capsetType=ct}+   )),++ (FixedSizeParser EVENT_CAPSET_DELETE sz_capset (do -- (capset)+      cs <- get+      return CapsetDelete{capset=cs}+   )),++ (FixedSizeParser EVENT_CAPSET_ASSIGN_CAP (sz_capset + sz_cap) (do -- (capset, cap)+      cs <- get+      cp <- get :: Get CapNo+      return CapsetAssignCap{capset=cs,cap=fromIntegral cp}+   )),++ (FixedSizeParser EVENT_CAPSET_REMOVE_CAP (sz_capset + sz_cap) (do -- (capset, cap)+      cs <- get+      cp <- get :: Get CapNo+      return CapsetRemoveCap{capset=cs,cap=fromIntegral cp}+   )),++ (FixedSizeParser EVENT_OSPROCESS_PID (sz_capset + sz_pid) (do -- (capset, pid)+      cs <- get+      pd <- get+      return OsProcessPid{capset=cs,pid=pd}+   )),++ (FixedSizeParser EVENT_OSPROCESS_PPID (sz_capset + sz_pid) (do -- (capset, ppid)+      cs <- get+      pd <- get+      return OsProcessParentPid{capset=cs,ppid=pd}+  )),++ (FixedSizeParser EVENT_WALL_CLOCK_TIME (sz_capset + 8 + 4) (do -- (capset, unix_epoch_seconds, nanoseconds)+      cs <- get+      s  <- get+      ns <- get+      return WallClockTime{capset=cs,sec=s,nsec=ns}+  )),++ (VariableSizeParser EVENT_LOG_MSG (do -- (msg)+      num <- get :: Get Word16+      string <- getString num+      return Message{ msg = string }+   )),+ (VariableSizeParser EVENT_USER_MSG (do -- (msg)+      num <- get :: Get Word16+      string <- getString num+      return UserMessage{ msg = string }+   )),+    (VariableSizeParser EVENT_USER_MARKER (do -- (markername)+      num <- get :: Get Word16+      string <- getString num+      return UserMarker{ markername = string }+   )),+ (VariableSizeParser EVENT_PROGRAM_ARGS (do -- (capset, [arg])+      num <- get :: Get Word16+      cs <- get+      string <- getString (num - sz_capset)+      return ProgramArgs{ capset = cs+                        , args = splitNull string }+   )),+ (VariableSizeParser EVENT_PROGRAM_ENV (do -- (capset, [arg])+      num <- get :: Get Word16+      cs <- get+      string <- getString (num - sz_capset)+      return ProgramEnv{ capset = cs+                       , env = splitNull string }+   )),+ (VariableSizeParser EVENT_RTS_IDENTIFIER (do -- (capset, str)+      num <- get :: Get Word16+      cs <- get+      string <- getString (num - sz_capset)+      return RtsIdentifier{ capset = cs+                          , rtsident = string }+   )),++ (VariableSizeParser EVENT_INTERN_STRING (do -- (str, id)+      num <- get :: Get Word16+      string <- getString (num - sz_string_id)+      sId <- get :: Get StringId+      return (InternString string sId)+    )),++ (VariableSizeParser EVENT_THREAD_LABEL (do -- (thread, str)+      num <- get :: Get Word16+      tid <- get+      str <- getString (num - sz_tid)+      return ThreadLabel{ thread      = tid+                        , threadlabel = str }+    ))+ ]++-- Parsers valid for GHC7 but not GHC6.+ghc7Parsers :: [EventParser EventInfo]+ghc7Parsers = [+ (FixedSizeParser EVENT_CREATE_THREAD sz_tid (do  -- (thread)+      t <- get+      return CreateThread{thread=t}+   )),++ (FixedSizeParser EVENT_RUN_THREAD sz_tid (do  --  (thread)+      t <- get+      return RunThread{thread=t}+   )),++ (FixedSizeParser EVENT_THREAD_RUNNABLE sz_tid (do  -- (thread)+      t <- get+      return ThreadRunnable{thread=t}+   )),++ (FixedSizeParser EVENT_MIGRATE_THREAD (sz_tid + sz_cap) (do  --  (thread, newCap)+      t  <- get+      nc <- get :: Get CapNo+      return MigrateThread{thread=t,newCap=fromIntegral nc}+   )),++ -- Yes, EVENT_RUN/STEAL_SPARK are deprecated, but see the explanation in the+ -- 'ghc6Parsers' section below. Since we're parsing them anyway, we might+ -- as well convert them to the new SparkRun/SparkSteal events.+ (FixedSizeParser EVENT_RUN_SPARK sz_tid (do  -- (thread)+      _ <- get :: Get ThreadId+      return SparkRun+   )),++ (FixedSizeParser EVENT_STEAL_SPARK (sz_tid + sz_cap) (do  -- (thread, victimCap)+      _  <- get :: Get ThreadId+      vc <- get :: Get CapNo+      return SparkSteal{victimCap=fromIntegral vc}+   )),++ (FixedSizeParser EVENT_CREATE_SPARK_THREAD sz_tid (do  -- (sparkThread)+      st <- get :: Get ThreadId+      return CreateSparkThread{sparkThread=st}+   )),++ (FixedSizeParser EVENT_SPARK_COUNTERS (7*8) (do -- (crt,dud,ovf,cnv,gcd,fiz,rem)+      crt <- get :: Get Word64+      dud <- get :: Get Word64+      ovf <- get :: Get Word64+      cnv <- get :: Get Word64+      gcd <- get :: Get Word64+      fiz <- get :: Get Word64+      rem <- get :: Get Word64+      return SparkCounters{sparksCreated    = crt, sparksDud       = dud,+                           sparksOverflowed = ovf, sparksConverted = cnv,+                           -- Warning: order of fiz and gcd reversed!+                           sparksFizzled    = fiz, sparksGCd       = gcd,+                           sparksRemaining  = rem}+   )),++ (simpleEvent EVENT_SPARK_CREATE   SparkCreate),+ (simpleEvent EVENT_SPARK_DUD      SparkDud),+ (simpleEvent EVENT_SPARK_OVERFLOW SparkOverflow),+ (simpleEvent EVENT_SPARK_RUN      SparkRun),+ (FixedSizeParser EVENT_SPARK_STEAL sz_cap (do  -- (victimCap)+      vc <- get :: Get CapNo+      return SparkSteal{victimCap=fromIntegral vc}+   )),+ (simpleEvent EVENT_SPARK_FIZZLE   SparkFizzle),+ (simpleEvent EVENT_SPARK_GC       SparkGC),++ (FixedSizeParser EVENT_TASK_CREATE (sz_taskid + sz_cap + sz_kernel_tid) (do  -- (taskID, cap, tid)+      taskId <- get :: Get TaskId+      cap    <- get :: Get CapNo+      tid    <- get :: Get KernelThreadId+      return TaskCreate{ taskId, cap = fromIntegral cap, tid }+   )),+ (FixedSizeParser EVENT_TASK_MIGRATE (sz_taskid + sz_cap*2) (do  -- (taskID, cap, new_cap)+      taskId  <- get :: Get TaskId+      cap     <- get :: Get CapNo+      new_cap <- get :: Get CapNo+      return TaskMigrate{ taskId, cap = fromIntegral cap+                                , new_cap = fromIntegral new_cap+                        }+   )),+ (FixedSizeParser EVENT_TASK_DELETE (sz_taskid) (do  -- (taskID)+      taskId <- get :: Get TaskId+      return TaskDelete{ taskId }+   )),++ (FixedSizeParser EVENT_THREAD_WAKEUP (sz_tid + sz_cap) (do  -- (thread, other_cap)+      t <- get+      oc <- get :: Get CapNo+      return WakeupThread{thread=t,otherCap=fromIntegral oc}+   ))+ ]++-- special thread stop event parsers for GHC version 7.8.2+-- see [Stop status in GHC-7.8.2] in EventTypes.hs+ghc782StopParser :: EventParser EventInfo+ghc782StopParser =+ (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid) (do+      -- (thread, status, info)+      t <- get+      s <- get :: Get RawThreadStopStatus+      i <- get :: Get ThreadId+      return StopThread{thread = t,+                        status = case () of+                                  _ | s > maxThreadStopStatus782+                                    -> NoStatus+                                    | s == 9 {- XXX yeuch -}+                                      -- GHC-7.8.2: 9 == BlockedOnBlackHole+                                    -> BlockedOnBlackHoleOwnedBy i+                                    | otherwise+                                    -> mkStopStatus782 s}+   ))++-- parsers for GHC < 7.8.2. Older versions do not use block info+-- (different length).  See [Stop status in GHC-7.8.2] in+-- EventTypes.hs+pre77StopParsers :: [EventParser EventInfo]+pre77StopParsers = [+ (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status) (do+      -- (thread, status)+      t <- get+      s <- get :: Get RawThreadStopStatus+      return StopThread{thread=t, status = if s > maxThreadStopStatusPre77+                                              then NoStatus+                                              else mkStopStatus s}+                        -- older version of the event, no block info+   )),++ (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid)+    (do+      -- (thread, status, info)+      t <- get+      s <- get :: Get RawThreadStopStatus+      i <- get :: Get ThreadId+      return StopThread{thread = t,+                        status = case () of+                                  _ | s > maxThreadStopStatusPre77+                                    -> NoStatus+                                    | s == 8 {- XXX yeuch -}+                                      -- pre-7.7: 8==BlockedOnBlackhole+                                    -> BlockedOnBlackHoleOwnedBy i+                                    | otherwise+                                    -> mkStopStatus s}+    ))+  ]++-- parsers for GHC >= 7.8.3, always using block info field parser.+-- See [Stop status in GHC-7.8.2] in EventTypes.hs+post782StopParser :: EventParser EventInfo+post782StopParser =+ (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid)+    (do+      -- (thread, status, info)+      t <- get+      s <- get :: Get RawThreadStopStatus+      i <- get :: Get ThreadId+      return StopThread{thread = t,+                        status = case () of+                                  _ | s > maxThreadStopStatus+                                    -> NoStatus+                                    | s == 8 {- XXX yeuch -}+                                      -- post-7.8.2: 8==BlockedOnBlackhole+                                    -> BlockedOnBlackHoleOwnedBy i+                                    | otherwise+                                    -> mkStopStatus s}+    ))++ -----------------------+ -- GHC 6.12 compat: GHC 6.12 reported the wrong sizes for some events,+ -- so we have to recognise those wrong sizes here for backwards+ -- compatibility.+ghc6Parsers :: [EventParser EventInfo]+ghc6Parsers = [+ (FixedSizeParser EVENT_STARTUP 0 (do+      -- BUG in GHC 6.12: the startup event was incorrectly+      -- declared as size 0, so we accept it here.+      c <- get :: Get CapNo+      return Startup{ n_caps = fromIntegral c }+   )),++ (FixedSizeParser EVENT_CREATE_THREAD sz_old_tid (do  -- (thread)+      t <- get+      return CreateThread{thread=t}+   )),++ (FixedSizeParser EVENT_RUN_THREAD sz_old_tid (do  --  (thread)+      t <- get+      return RunThread{thread=t}+   )),++ (FixedSizeParser EVENT_STOP_THREAD (sz_old_tid + 2) (do  -- (thread, status)+      t <- get+      s <- get :: Get RawThreadStopStatus+      return StopThread{thread=t, status = if s > maxThreadStopStatusPre77+                                              then NoStatus+                                              else mkStopStatus s}+                        -- older version of the event uses pre-77 encoding+                        -- (actually, it only uses encodings 0 to 5)+                        -- see [Stop status in GHC-7.8.2] in EventTypes.hs+   )),++ (FixedSizeParser EVENT_THREAD_RUNNABLE sz_old_tid (do  -- (thread)+      t <- get+      return ThreadRunnable{thread=t}+   )),++ (FixedSizeParser EVENT_MIGRATE_THREAD (sz_old_tid + sz_cap) (do  --  (thread, newCap)+      t  <- get+      nc <- get :: Get CapNo+      return MigrateThread{thread=t,newCap=fromIntegral nc}+   )),++ -- Note: it is vital that these two (EVENT_RUN/STEAL_SPARK) remain here (at+ -- least in the ghc6Parsers section) even though both events are deprecated.+ -- The reason is that .eventlog files created by the buggy GHC-6.12+ -- mis-declare the size of these two events. So we have to handle them+ -- specially here otherwise we'll get the wrong size, leading to us getting+ -- out of sync and eventual parse failure. Since we're parsing them anyway,+ -- we might as well convert them to the new SparkRun/SparkSteal events.+ (FixedSizeParser EVENT_RUN_SPARK sz_old_tid (do  -- (thread)+      _ <- get :: Get ThreadId+      return SparkRun+   )),++ (FixedSizeParser EVENT_STEAL_SPARK (sz_old_tid + sz_cap) (do  -- (thread, victimCap)+      _  <- get :: Get ThreadId+      vc <- get :: Get CapNo+      return SparkSteal{victimCap=fromIntegral vc}+   )),++ (FixedSizeParser EVENT_CREATE_SPARK_THREAD sz_old_tid (do  -- (sparkThread)+      st <- get :: Get ThreadId+      return CreateSparkThread{sparkThread=st}+   )),++ (FixedSizeParser EVENT_THREAD_WAKEUP (sz_old_tid + sz_cap) (do  -- (thread, other_cap)+      t <- get+      oc <- get :: Get CapNo+      return WakeupThread{thread=t,otherCap=fromIntegral oc}+   ))+ ]++-- Parsers for parallel events. Parameter is the thread_id size, to create+-- ghc6-parsers (using the wrong size) where necessary.+parRTSParsers :: EventTypeSize -> [EventParser EventInfo]+parRTSParsers sz_tid' = [+ (VariableSizeParser EVENT_VERSION (do -- (version)+      num <- get :: Get Word16+      string <- getString num+      return Version{ version = string }+   )),++ (VariableSizeParser EVENT_PROGRAM_INVOCATION (do -- (cmd. line)+      num <- get :: Get Word16+      string <- getString num+      return ProgramInvocation{ commandline = string }+   )),++ (simpleEvent EVENT_EDEN_START_RECEIVE EdenStartReceive),+ (simpleEvent EVENT_EDEN_END_RECEIVE   EdenEndReceive),++ (FixedSizeParser EVENT_CREATE_PROCESS sz_procid+    (do p <- get+        return CreateProcess{ process = p })+ ),++ (FixedSizeParser EVENT_KILL_PROCESS sz_procid+    (do p <- get+        return KillProcess{ process = p })+ ),++ (FixedSizeParser EVENT_ASSIGN_THREAD_TO_PROCESS (sz_tid' + sz_procid)+    (do t <- get+        p <- get+        return AssignThreadToProcess { thread = t, process = p })+ ),++ (FixedSizeParser EVENT_CREATE_MACHINE (sz_mid + sz_realtime)+    (do m <- get+        t <- get+        return CreateMachine { machine = m, realtime = t })+ ),++ (FixedSizeParser EVENT_KILL_MACHINE sz_mid+    (do m <- get :: Get MachineId+        return KillMachine { machine = m })+ ),++ (FixedSizeParser EVENT_SEND_MESSAGE+    (sz_msgtag + 2*sz_procid + 2*sz_tid' + sz_mid)+    (do tag <- get :: Get RawMsgTag+        sP  <- get :: Get ProcessId+        sT  <- get :: Get ThreadId+        rM  <- get :: Get MachineId+        rP  <- get :: Get ProcessId+        rIP <- get :: Get PortId+        return SendMessage { mesTag = toMsgTag tag,+                             senderProcess = sP,+                             senderThread = sT,+                             receiverMachine = rM,+                             receiverProcess = rP,+                             receiverInport = rIP+                           })+ ),++ (FixedSizeParser EVENT_RECEIVE_MESSAGE+    (sz_msgtag + 2*sz_procid + 2*sz_tid' + sz_mid + sz_mes)+    (do tag <- get :: Get Word8+        rP  <- get :: Get ProcessId+        rIP <- get :: Get PortId+        sM  <- get :: Get MachineId+        sP  <- get :: Get ProcessId+        sT  <- get :: Get ThreadId+        mS  <- get :: Get MessageSize+        return  ReceiveMessage { mesTag = toMsgTag tag,+                                 receiverProcess = rP,+                                 receiverInport = rIP,+                                 senderMachine = sM,+                                 senderProcess = sP,+                                 senderThread= sT,+                                 messageSize = mS+                               })+ ),++ (FixedSizeParser EVENT_SEND_RECEIVE_LOCAL_MESSAGE+    (sz_msgtag + 2*sz_procid + 2*sz_tid')+    (do tag <- get :: Get Word8+        sP  <- get :: Get ProcessId+        sT  <- get :: Get ThreadId+        rP  <- get :: Get ProcessId+        rIP <- get :: Get PortId+        return SendReceiveLocalMessage { mesTag = toMsgTag tag,+                                         senderProcess = sP,+                                         senderThread = sT,+                                         receiverProcess = rP,+                                         receiverInport = rIP+                                       })+ )]++mercuryParsers :: [EventParser EventInfo]+mercuryParsers = [+ (FixedSizeParser EVENT_MER_START_PAR_CONJUNCTION+    (sz_par_conj_dyn_id + sz_par_conj_static_id)+    (do dyn_id <- get+        static_id <- get+        return (MerStartParConjunction dyn_id static_id))+ ),++ (FixedSizeParser EVENT_MER_STOP_PAR_CONJUNCTION sz_par_conj_dyn_id+    (do dyn_id <- get+        return (MerEndParConjunction dyn_id))+ ),++ (FixedSizeParser EVENT_MER_STOP_PAR_CONJUNCT sz_par_conj_dyn_id+    (do dyn_id <- get+        return (MerEndParConjunct dyn_id))+ ),++ (FixedSizeParser EVENT_MER_CREATE_SPARK (sz_par_conj_dyn_id + sz_spark_id)+    (do dyn_id <- get+        spark_id <- get+        return (MerCreateSpark dyn_id spark_id))+ ),++ (FixedSizeParser EVENT_MER_FUT_CREATE (sz_future_id + sz_string_id)+    (do future_id <- get+        name_id <- get+        return (MerFutureCreate future_id name_id))+ ),++ (FixedSizeParser EVENT_MER_FUT_WAIT_NOSUSPEND (sz_future_id)+    (do future_id <- get+        return (MerFutureWaitNosuspend future_id))+ ),++ (FixedSizeParser EVENT_MER_FUT_WAIT_SUSPENDED (sz_future_id)+    (do future_id <- get+        return (MerFutureWaitSuspended future_id))+ ),++ (FixedSizeParser EVENT_MER_FUT_SIGNAL (sz_future_id)+    (do future_id <- get+        return (MerFutureSignal future_id))+ ),++ (simpleEvent EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT MerLookingForGlobalThread),+ (simpleEvent EVENT_MER_WORK_STEALING MerWorkStealing),+ (simpleEvent EVENT_MER_LOOKING_FOR_LOCAL_SPARK MerLookingForLocalSpark),++ (FixedSizeParser EVENT_MER_RELEASE_CONTEXT sz_tid+    (do thread_id <- get+        return (MerReleaseThread thread_id))+ ),++ (simpleEvent EVENT_MER_ENGINE_SLEEPING MerCapSleeping),+ (simpleEvent EVENT_MER_CALLING_MAIN MerCallingMain)++ ]++perfParsers :: [EventParser EventInfo]+perfParsers = [+ (VariableSizeParser EVENT_PERF_NAME (do -- (perf_num, name)+      num     <- get :: Get Word16+      perfNum <- get+      name    <- getString (num - sz_perf_num)+      return PerfName{perfNum, name}+   )),++ (FixedSizeParser EVENT_PERF_COUNTER (sz_perf_num + sz_kernel_tid + 8) (do -- (perf_num, tid, period)+      perfNum <- get+      tid     <- get+      period  <- get+      return PerfCounter{perfNum, tid, period}+  )),++ (FixedSizeParser EVENT_PERF_TRACEPOINT (sz_perf_num + sz_kernel_tid) (do -- (perf_num, tid)+      perfNum <- get+      tid     <- get+      return PerfTracepoint{perfNum, tid}+  ))+ ]++-----------------------------------------------------------++putE :: Binary a => a -> PutM ()+putE = put++putType :: EventTypeNum -> PutM ()+putType = putE++putCap :: Int -> PutM ()+putCap c = putE (fromIntegral c :: CapNo)++putMarker :: Word32 -> PutM ()+putMarker = putE++putEStr :: String -> PutM ()+putEStr = mapM_ putE++putEventLog :: EventLog -> PutM ()+putEventLog (EventLog hdr es) = do+    putHeader hdr+    putData es++putHeader :: Header -> PutM ()+putHeader (Header ets) = do+    putMarker EVENT_HEADER_BEGIN+    putMarker EVENT_HET_BEGIN+    mapM_ putEventType ets+    putMarker EVENT_HET_END+    putMarker EVENT_HEADER_END+ where+    putEventType (EventType n d msz) = do+        putMarker EVENT_ET_BEGIN+        putType n+        putE $ fromMaybe 0xffff msz+        putE (fromIntegral $ length d :: EventTypeDescLen)+        mapM_ put d+        -- the event type header allows for extra data, which we don't use:+        putE (0 :: Word32)+        putMarker EVENT_ET_END++putData :: Data -> PutM ()+putData (Data es) = do+    putMarker EVENT_DATA_BEGIN -- Word32+    mapM_ putEvent es+    putType EVENT_DATA_END -- Word16++eventTypeNum :: EventInfo -> EventTypeNum+eventTypeNum e = case e of+    CreateThread {} -> EVENT_CREATE_THREAD+    RunThread {} -> EVENT_RUN_THREAD+    StopThread {} -> EVENT_STOP_THREAD+    ThreadRunnable {} -> EVENT_THREAD_RUNNABLE+    MigrateThread {} -> EVENT_MIGRATE_THREAD+    Shutdown {} -> EVENT_SHUTDOWN+    WakeupThread {} -> EVENT_THREAD_WAKEUP+    ThreadLabel {}  -> EVENT_THREAD_LABEL+    StartGC {} -> EVENT_GC_START+    EndGC {} -> EVENT_GC_END+    GlobalSyncGC {} -> EVENT_GC_GLOBAL_SYNC+    RequestSeqGC {} -> EVENT_REQUEST_SEQ_GC+    RequestParGC {} -> EVENT_REQUEST_PAR_GC+    CreateSparkThread {} -> EVENT_CREATE_SPARK_THREAD+    SparkCounters {} -> EVENT_SPARK_COUNTERS+    SparkCreate   {} -> EVENT_SPARK_CREATE+    SparkDud      {} -> EVENT_SPARK_DUD+    SparkOverflow {} -> EVENT_SPARK_OVERFLOW+    SparkRun      {} -> EVENT_SPARK_RUN+    SparkSteal    {} -> EVENT_SPARK_STEAL+    SparkFizzle   {} -> EVENT_SPARK_FIZZLE+    SparkGC       {} -> EVENT_SPARK_GC+    TaskCreate  {} -> EVENT_TASK_CREATE+    TaskMigrate {} -> EVENT_TASK_MIGRATE+    TaskDelete  {} -> EVENT_TASK_DELETE+    Message {} -> EVENT_LOG_MSG+    Startup {} -> EVENT_STARTUP+    EventBlock {} -> EVENT_BLOCK_MARKER+    UserMessage {} -> EVENT_USER_MSG+    UserMarker  {} -> EVENT_USER_MARKER+    GCIdle {} -> EVENT_GC_IDLE+    GCWork {} -> EVENT_GC_WORK+    GCDone {} -> EVENT_GC_DONE+    GCStatsGHC{} -> EVENT_GC_STATS_GHC+    HeapAllocated{} -> EVENT_HEAP_ALLOCATED+    HeapSize{} -> EVENT_HEAP_SIZE+    HeapLive{} -> EVENT_HEAP_LIVE+    HeapInfoGHC{} -> EVENT_HEAP_INFO_GHC+    CapCreate{} -> EVENT_CAP_CREATE+    CapDelete{} -> EVENT_CAP_DELETE+    CapDisable{} -> EVENT_CAP_DISABLE+    CapEnable{} -> EVENT_CAP_ENABLE+    CapsetCreate {} -> EVENT_CAPSET_CREATE+    CapsetDelete {} -> EVENT_CAPSET_DELETE+    CapsetAssignCap {} -> EVENT_CAPSET_ASSIGN_CAP+    CapsetRemoveCap {} -> EVENT_CAPSET_REMOVE_CAP+    RtsIdentifier {} -> EVENT_RTS_IDENTIFIER+    ProgramArgs {} -> EVENT_PROGRAM_ARGS+    ProgramEnv {} -> EVENT_PROGRAM_ENV+    OsProcessPid {} -> EVENT_OSPROCESS_PID+    OsProcessParentPid{} -> EVENT_OSPROCESS_PPID+    WallClockTime{} -> EVENT_WALL_CLOCK_TIME+    UnknownEvent {} -> error "eventTypeNum UnknownEvent"+    InternString {} -> EVENT_INTERN_STRING+    Version {} -> EVENT_VERSION+    ProgramInvocation {} -> EVENT_PROGRAM_INVOCATION+    EdenStartReceive {} -> EVENT_EDEN_START_RECEIVE+    EdenEndReceive {} -> EVENT_EDEN_END_RECEIVE+    CreateProcess {} -> EVENT_CREATE_PROCESS+    KillProcess {} -> EVENT_KILL_PROCESS+    AssignThreadToProcess {} -> EVENT_ASSIGN_THREAD_TO_PROCESS+    CreateMachine {} -> EVENT_CREATE_MACHINE+    KillMachine {} -> EVENT_KILL_MACHINE+    SendMessage {} -> EVENT_SEND_MESSAGE+    ReceiveMessage {} -> EVENT_RECEIVE_MESSAGE+    SendReceiveLocalMessage {} -> EVENT_SEND_RECEIVE_LOCAL_MESSAGE+    MerStartParConjunction {} -> EVENT_MER_START_PAR_CONJUNCTION+    MerEndParConjunction _ -> EVENT_MER_STOP_PAR_CONJUNCTION+    MerEndParConjunct _ -> EVENT_MER_STOP_PAR_CONJUNCT+    MerCreateSpark {} -> EVENT_MER_CREATE_SPARK+    MerFutureCreate {} -> EVENT_MER_FUT_CREATE+    MerFutureWaitNosuspend _ -> EVENT_MER_FUT_WAIT_NOSUSPEND+    MerFutureWaitSuspended _ -> EVENT_MER_FUT_WAIT_SUSPENDED+    MerFutureSignal _ -> EVENT_MER_FUT_SIGNAL+    MerLookingForGlobalThread -> EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT+    MerWorkStealing -> EVENT_MER_WORK_STEALING+    MerLookingForLocalSpark -> EVENT_MER_LOOKING_FOR_LOCAL_SPARK+    MerReleaseThread _ -> EVENT_MER_RELEASE_CONTEXT+    MerCapSleeping -> EVENT_MER_ENGINE_SLEEPING+    MerCallingMain -> EVENT_MER_CALLING_MAIN+    PerfName       {} -> nEVENT_PERF_NAME+    PerfCounter    {} -> nEVENT_PERF_COUNTER+    PerfTracepoint {} -> nEVENT_PERF_TRACEPOINT++nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT :: EventTypeNum+nEVENT_PERF_NAME = EVENT_PERF_NAME+nEVENT_PERF_COUNTER = EVENT_PERF_COUNTER+nEVENT_PERF_TRACEPOINT = EVENT_PERF_TRACEPOINT++putEvent :: Event -> PutM ()+putEvent Event {..} = do+    putType (eventTypeNum evSpec)+    put evTime+    putEventSpec evSpec++putEventSpec :: EventInfo -> PutM ()+putEventSpec (Startup caps) = do+    putCap (fromIntegral caps)++putEventSpec (EventBlock end cap sz) = do+    putE (fromIntegral (sz+24) :: BlockSize)+    putE end+    putE (fromIntegral cap :: CapNo)++putEventSpec (CreateThread t) =+    putE t++putEventSpec (RunThread t) =+    putE t++-- here we assume that ThreadStopStatus fromEnum matches the definitions in+-- EventLogFormat.h+-- The standard encoding is used here, which is wrong for eventlogs+-- produced by GHC-7.8.2 ([Stop status in GHC-7.8.2] in EventTypes.hs+putEventSpec (StopThread t s) = do+    putE t+    putE $ case s of+            NoStatus -> 0 :: Word16+            HeapOverflow -> 1+            StackOverflow -> 2+            ThreadYielding -> 3+            ThreadBlocked -> 4+            ThreadFinished -> 5+            ForeignCall -> 6+            BlockedOnMVar -> 7+            BlockedOnMVarRead -> 20 -- since GHC-7.8.3+            BlockedOnBlackHole -> 8+            BlockedOnBlackHoleOwnedBy _ -> 8+            BlockedOnRead -> 9+            BlockedOnWrite -> 10+            BlockedOnDelay -> 11+            BlockedOnSTM -> 12+            BlockedOnDoProc -> 13+            BlockedOnCCall -> 14+            BlockedOnCCall_NoUnblockExc -> 15+            BlockedOnMsgThrowTo -> 16+            ThreadMigrating -> 17+            BlockedOnMsgGlobalise -> 18+    putE $ case s of+            BlockedOnBlackHoleOwnedBy i -> i+            _                           -> 0++putEventSpec (ThreadRunnable t) =+    putE t++putEventSpec (MigrateThread t c) = do+    putE t+    putCap c++putEventSpec (CreateSparkThread t) =+    putE t++putEventSpec (SparkCounters crt dud ovf cnv fiz gcd rem) = do+    putE crt+    putE dud+    putE ovf+    putE cnv+    -- Warning: order of fiz and gcd reversed!+    putE gcd+    putE fiz+    putE rem++putEventSpec SparkCreate =+    return ()++putEventSpec SparkDud =+    return ()++putEventSpec SparkOverflow =+    return ()++putEventSpec SparkRun =+    return ()++putEventSpec (SparkSteal c) =+    putCap c++putEventSpec SparkFizzle =+    return ()++putEventSpec SparkGC =+    return ()++putEventSpec (WakeupThread t c) = do+    putE t+    putCap c++putEventSpec (ThreadLabel t l) = do+    putE (fromIntegral (length l) + sz_tid :: Word16)+    putE t+    putEStr l++putEventSpec Shutdown =+    return ()++putEventSpec RequestSeqGC =+    return ()++putEventSpec RequestParGC =+    return ()++putEventSpec StartGC =+    return ()++putEventSpec GCWork =+    return ()++putEventSpec GCIdle =+    return ()++putEventSpec GCDone =+    return ()++putEventSpec EndGC =+    return ()++putEventSpec GlobalSyncGC =+    return ()++putEventSpec (TaskCreate taskId cap tid) = do+    putE taskId+    putCap cap+    putE tid++putEventSpec (TaskMigrate taskId cap new_cap) = do+    putE taskId+    putCap cap+    putCap new_cap++putEventSpec (TaskDelete taskId) =+    putE taskId++putEventSpec GCStatsGHC{..} = do+    putE heapCapset+    putE (fromIntegral gen :: Word16)+    putE copied+    putE slop+    putE frag+    putE (fromIntegral parNThreads :: Word32)+    putE parMaxCopied+    putE parTotCopied++putEventSpec HeapAllocated{..} = do+    putE heapCapset+    putE allocBytes++putEventSpec HeapSize{..} = do+    putE heapCapset+    putE sizeBytes++putEventSpec HeapLive{..} = do+    putE heapCapset+    putE liveBytes++putEventSpec HeapInfoGHC{..} = do+    putE heapCapset+    putE (fromIntegral gens :: Word16)+    putE maxHeapSize+    putE allocAreaSize+    putE mblockSize+    putE blockSize++putEventSpec CapCreate{cap} =+    putCap cap++putEventSpec CapDelete{cap} =+    putCap cap++putEventSpec CapDisable{cap} =+    putCap cap++putEventSpec CapEnable{cap} =+    putCap cap++putEventSpec (CapsetCreate cs ct) = do+    putE cs+    putE $ case ct of+            CapsetCustom -> 1 :: Word16+            CapsetOsProcess -> 2+            CapsetClockDomain -> 3+            CapsetUnknown -> 0++putEventSpec (CapsetDelete cs) =+    putE cs++putEventSpec (CapsetAssignCap cs cp) = do+    putE cs+    putCap cp++putEventSpec (CapsetRemoveCap cs cp) = do+    putE cs+    putCap cp++putEventSpec (RtsIdentifier cs rts) = do+    putE (fromIntegral (length rts) + sz_capset :: Word16)+    putE cs+    putEStr rts++putEventSpec (ProgramArgs cs as) = do+    let as' = unsep as+    putE (fromIntegral (length as') + sz_capset :: Word16)+    putE cs+    mapM_ putE as'++putEventSpec (ProgramEnv cs es) = do+    let es' = unsep es+    putE (fromIntegral (length es') + sz_capset :: Word16)+    putE cs+    mapM_ putE es'++putEventSpec (OsProcessPid cs pid) = do+    putE cs+    putE pid++putEventSpec (OsProcessParentPid cs ppid) = do+    putE cs+    putE ppid++putEventSpec (WallClockTime cs sec nsec) = do+    putE cs+    putE sec+    putE nsec++putEventSpec (Message s) = do+    putE (fromIntegral (length s) :: Word16)+    mapM_ putE s++putEventSpec (UserMessage s) = do+    putE (fromIntegral (length s) :: Word16)+    mapM_ putE s++putEventSpec (UserMarker s) = do+    putE (fromIntegral (length s) :: Word16)+    mapM_ putE s++putEventSpec (UnknownEvent {}) = error "putEventSpec UnknownEvent"++putEventSpec (InternString str id) = do+    putE len+    mapM_ putE str+    putE id+  where len = (fromIntegral (length str) :: Word16) + sz_string_id++putEventSpec (Version s) = do+    putE (fromIntegral (length s) :: Word16)+    mapM_ putE s++putEventSpec (ProgramInvocation s) = do+    putE (fromIntegral (length s) :: Word16)+    mapM_ putE s++putEventSpec ( EdenStartReceive ) = return ()++putEventSpec ( EdenEndReceive ) = return ()++putEventSpec ( CreateProcess  process ) = do+    putE process++putEventSpec ( KillProcess process ) = do+    putE process++putEventSpec ( AssignThreadToProcess thread process ) = do+    putE thread+    putE process++putEventSpec ( CreateMachine machine realtime ) = do+    putE machine+    putE realtime++putEventSpec ( KillMachine machine ) = do+    putE machine++putEventSpec ( SendMessage mesTag senderProcess senderThread+                 receiverMachine receiverProcess receiverInport ) = do+    putE (fromMsgTag mesTag)+    putE senderProcess+    putE senderThread+    putE receiverMachine+    putE receiverProcess+    putE receiverInport++putEventSpec ( ReceiveMessage mesTag receiverProcess receiverInport+                 senderMachine senderProcess senderThread messageSize ) = do+    putE (fromMsgTag mesTag)+    putE receiverProcess+    putE receiverInport+    putE senderMachine+    putE senderProcess+    putE senderThread+    putE messageSize++putEventSpec ( SendReceiveLocalMessage mesTag senderProcess senderThread+                 receiverProcess receiverInport ) = do+    putE (fromMsgTag mesTag)+    putE senderProcess+    putE senderThread+    putE receiverProcess+    putE receiverInport++putEventSpec (MerStartParConjunction dyn_id static_id) = do+    putE dyn_id+    putE static_id++putEventSpec (MerEndParConjunction dyn_id) =+    putE dyn_id++putEventSpec (MerEndParConjunct dyn_id) =+    putE dyn_id++putEventSpec (MerCreateSpark dyn_id spark_id) = do+    putE dyn_id+    putE spark_id++putEventSpec (MerFutureCreate future_id name_id) = do+    putE future_id+    putE name_id++putEventSpec (MerFutureWaitNosuspend future_id) =+    putE future_id++putEventSpec (MerFutureWaitSuspended future_id) =+    putE future_id++putEventSpec (MerFutureSignal future_id) =+    putE future_id++putEventSpec MerLookingForGlobalThread = return ()+putEventSpec MerWorkStealing = return ()+putEventSpec MerLookingForLocalSpark = return ()++putEventSpec (MerReleaseThread thread_id) =+    putE thread_id++putEventSpec MerCapSleeping = return ()+putEventSpec MerCallingMain = return ()++putEventSpec PerfName{..} = do+    putE (fromIntegral (length name) + sz_perf_num :: Word16)+    putE perfNum+    mapM_ putE name++putEventSpec PerfCounter{..} = do+    putE perfNum+    putE tid+    putE period++putEventSpec PerfTracepoint{..} = do+    putE perfNum+    putE tid++-- [] == []+-- [x] == x\0+-- [x, y, z] == x\0y\0+unsep :: [String] -> String+unsep = concatMap (++"\0") -- not the most efficient, but should be ok++splitNull :: String -> [String]+splitNull [] = []+splitNull xs = case span (/= '\0') xs of+                (x, xs') -> x : splitNull (drop 1 xs')
+ src/GHC/RTS/Events/Incremental.hs view
@@ -0,0 +1,205 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE MultiWayIf #-}+module GHC.RTS.Events.Incremental+  ( -- * Incremental API+    Decoder(..)+  , decodeHeader+  , decodeEvents+  , decodeEventLog++  -- * Lazy API+  , readHeader+  , readEvents+  , readEventLog+  ) where+import Control.Monad+import Data.Either+import Data.Maybe+import Prelude++import qualified Data.Binary.Get as G+import qualified Data.ByteString as B+import qualified Data.ByteString.Lazy as BL+import qualified Data.ByteString.Lazy.Internal as BL+import qualified Data.IntMap.Strict as IM++import GHC.RTS.EventParserUtils+import GHC.RTS.EventTypes+import GHC.RTS.Events.Binary++#define EVENTLOG_CONSTANTS_ONLY+#include "EventLogFormat.h"++-- | The unfolding of the decoding process.+data Decoder a+  = Consume (B.ByteString -> Decoder a)+  -- ^ The decoder has consumed all the available input and needs more to+  -- continue.+  | Produce !a (Decoder a)+  -- ^ The decoder has returned a decoded value and the next decoder state to+  -- continue.+  | Done B.ByteString+  -- ^ The decoder has ended with leftover input.+  | Error B.ByteString String+  -- ^ The decoder has encountered an error with lefover input and an error+  -- message.++-- | Push an input chunk to the decoder+pushChunk :: Decoder a -> B.ByteString -> Decoder a+pushChunk decoder chunk = case decoder of+  Consume k -> k chunk+  Produce a decoder' -> Produce a $ decoder' `pushChunk` chunk+  Done leftover -> Done $ leftover `B.append` chunk+  Error leftover err -> Error (leftover `B.append` chunk) err++-- | Decode a header and continue with the provided decoder+withHeader+  :: (Header -> B.ByteString -> Decoder r)+  -- ^ Continuation+  -> Decoder r+withHeader f = go $ G.runGetIncremental getHeader+  where+    go decoder = case decoder of+      G.Done leftover _ header -> f header leftover+      G.Partial k -> Consume $ \chunk -> go $ k $ Just chunk+      G.Fail leftover _ err -> Error leftover err++-- | Decode a header+decodeHeader :: Decoder Header+decodeHeader = withHeader $ \header leftover -> Produce header $ Done leftover++-- | Decode events+decodeEvents :: Header -> Decoder Event+decodeEvents header = go (0 :: Int) Nothing decoder0+  where+    decoder0 = mkEventDecoder header+    go !remaining !blockCap decoder = case decoder of+      G.Done leftover consumed r -> do+        let !decoder' = decoder0 `G.pushChunk` leftover+        case r of+          Just event -> case evSpec event of+            EventBlock {..} ->+              go (fromIntegral block_size) (mkCap cap) decoder'+            _ -> do+              let+                !remaining' = remaining - fromIntegral consumed+                !blockCap' = if remaining' > 0 then blockCap else Nothing+                !event' = event { evCap = blockCap }+              Produce event' $ go remaining' blockCap' decoder'+          Nothing -> go remaining blockCap decoder'+      G.Partial k ->+        Consume $ \chunk -> go remaining blockCap $ k $ Just chunk+      G.Fail leftover _ err ->+        Error leftover err++-- | Decode a header and events+decodeEventLog :: Decoder Event+decodeEventLog = withHeader $ \header leftover ->+  decodeEvents header `pushChunk` leftover++-- | Read a header from a lazy bytestring and return the header and the+-- leftover input for subsequent decoding.+--+-- Note that the input must contain a whole header in one go. If incremental+-- parsing of a header is necessary, use 'decodeHeader' instead.+readHeader :: BL.ByteString -> Either String (Header, BL.ByteString)+readHeader = go $ Left decodeHeader+  where+    go r bytes = case r of+      Left decoder -> case decoder of+        Produce header decoder' -> case decoder' of+          Done leftover -> Right (header, BL.Chunk leftover bytes)+          _ -> fail "readHeader: unexpected decoder"+        Consume k -> case bytes of+          BL.Empty -> fail "readHeader: not enough bytes"+          BL.Chunk chunk chunks -> go (Left $! k chunk) chunks+        Done _ -> fail "readHeader: unexpected termination"+        Error _ err -> fail err+      Right header -> Right (header, bytes)++-- | Read events from a lazy bytestring. It returns an error message if it+-- encouters an error while decoding.+--+-- Note that it doesn't fail if it consumes all input in the middle of decoding+-- of an event.+readEvents :: Header -> BL.ByteString -> ([Event], Maybe String)+readEvents header = f . go (decodeEvents header)+  where+    f :: [Either e a] -> ([a], Maybe e)+    f xs = (rights rs, listToMaybe (lefts ls))+      where+        (rs, ls) = break isLeft xs+#if !MIN_VERSION_base(4, 7, 0)+        isLeft (Left _) = True+        isLeft _ = False+#endif+    go :: Decoder Event -> BL.ByteString -> [Either String Event]+    go decoder bytes = case decoder of+      Produce event decoder' -> Right event : go decoder' bytes+      Consume k -> case bytes of+        BL.Empty -> []+        BL.Chunk chunk chunks -> go (k chunk) chunks+      Done {} -> []+      Error _ err -> [Left err]++-- | Read an entire eventlog from a lazy bytestring. It returns an error message if it+-- encouters an error while decoding.+--+-- Note that it doesn't fail if it consumes all input in the middle of decoding+-- of an event.+readEventLog :: BL.ByteString -> Either String (EventLog, Maybe String)+readEventLog bytes = do+  (header, bytes') <- readHeader bytes+  case readEvents header bytes' of+    (events, err) -> return (EventLog header (Data events), err)++-- | Makes a decoder with all the required parsers when given a Header+mkEventDecoder :: Header -> G.Decoder (Maybe Event)+mkEventDecoder header = G.runGetIncremental $ getEvent parsers+  where+    imap = IM.fromList [(fromIntegral (num t), t) | t <- eventTypes header]+    -- This test is complete, no-one has extended this event yet and all future+    -- extensions will use newly allocated event IDs.+    is_ghc_6 = Just sz_old_tid == do+      create_et <- IM.lookup EVENT_CREATE_THREAD imap+      size create_et+    -- GHC6 writes an invalid header, we handle it here by using a+    -- different set of event parsers.  Note that the ghc7 event parsers+    -- are standard events, and can be used by other runtime systems that+    -- make use of threadscope.++    -- GHC-7.8.2 uses a different thread block status encoding,+    -- and therefore requires a different parser for the stop+    -- event. Later, in GHC-7.8.3, the old encoding was restored.+    -- GHC-7.8.2 can be recognised by presence and absence of+    -- events in the header:+    --   * User markers were added in GHC-7.8+    --   * an empty event HACK_BUG_T9003 was added in GHC-7.8.3+    -- This fix breaks software which uses ghc-events and combines+    -- user markers with the older stop status encoding. We don't+    -- know of any such software, though.+    is_pre77 = IM.notMember EVENT_USER_MARKER imap+    is_ghc782 = IM.member EVENT_USER_MARKER imap+      && IM.notMember EVENT_HACK_BUG_T9003 imap++    stopParsers+      | is_pre77 = pre77StopParsers+      | is_ghc782 = [ghc782StopParser]+      | otherwise = [post782StopParser]++    event_parsers+      | is_ghc_6 = concat+        [ standardParsers+        , ghc6Parsers+        , parRTSParsers sz_old_tid+        ]+      | otherwise = concat+        [ standardParsers+        , ghc7Parsers+        , stopParsers+        , parRTSParsers sz_tid+        , mercuryParsers+        , perfParsers+        ]+    parsers = EventParsers $ mkEventTypeParsers imap event_parsers
+ src/GHC/RTS/Events/Merge.hs view
@@ -0,0 +1,113 @@+module GHC.RTS.Events.Merge (mergeEventLogs) where++import GHC.RTS.Events+import Data.Monoid+import Data.List (foldl')+import qualified Data.Map as M+import Data.Word (Word32)+import Prelude++-- TODO: add a merge mode where the events are synchronized using+-- the wall clock time event at the start of both eventlogs (for newer GHCs).+-- Such merge is not associative so we either need to take many arguments+-- or cope with eventlogs with many wall clock time events (assume they+-- are products of previous merges). To decide.++{-+GHC numbers caps and capsets in sequential order, starting at 0.  Threads are+similarly numbered, but start at 1.  In order to merge logs 'x' and 'y',+we find the # of occupied numbers for each variable type in 'x',+then increment each variable in 'y' by that amount.+We assume that if a number is occupied, so are all lower numbers.+This guarantees that variables in each log don't clash,+and that the meaning of each reference to a thread/cap/capset is+preserved.+-}++mergeEventLogs :: EventLog -> EventLog -> EventLog+mergeEventLogs (EventLog h1 (Data xs)) (EventLog h2 (Data ys)) =+  let headerMap = M.fromList . map (\ et@EventType {num} -> (num, et))+      m1 = headerMap $ eventTypes h1+      m2 = headerMap $ eventTypes h2+      combine et1 et2 | et1 == et2 = et1+      combine _ _ = error "can't merge eventlogs with inconsistent headers"+      m = M.unionWith combine m1 m2+      h = Header $ M.elems m+  in h == h `seq`  -- Detect inconsistency ASAP.+     EventLog h . Data . mergeOn evTime xs $ shift (maxVars xs) ys++mergeOn :: Ord b => (a -> b) -> [a] -> [a] -> [a]+mergeOn _ [] ys = ys+mergeOn _ xs [] = xs+mergeOn f (x:xs) (y:ys) | f x <= f y = x : mergeOn f xs (y:ys)+                        | otherwise  = y : mergeOn f (x:xs) ys++-- TODO: rename, since these are not maximal values, but numbers of used values+data MaxVars = MaxVars { mcapset :: !Word32+                       , mcap :: !Int+                       , mthread :: !ThreadId }+-- TODO introduce parallel RTS process and machine var.s++instance Monoid MaxVars where+    mempty  = MaxVars 0 0 0+    mappend (MaxVars a b c) (MaxVars x y z) =+      MaxVars (max a x) (b + y) (max c z)+    -- avoid space leaks:+    mconcat = foldl' mappend mempty++-- For caps we find the maximum value by summing the @Startup@ declarations.+-- TODO: it's not trivial to add CapCreate since we don't know+-- if created caps are guaranteed to be numbered consecutively or not+-- (are they? is it asserted in GHC code somewhere?). We might instead+-- just scan all events mentioning a cap and take the maximum,+-- but it's a slower and much longer code, requiring constant maintenance.+maxVars :: [Event] -> MaxVars+maxVars = mconcat . map (maxSpec . evSpec)+ where+    -- only checking binding sites right now, sufficient?+    maxSpec (Startup n) = mempty { mcap = n }+    -- Threads start at 1.+    maxSpec (CreateThread t) = mempty { mthread = t }+    maxSpec (CreateSparkThread t) = mempty { mthread = t }+    -- Capsets start at 0.+    maxSpec (CapsetCreate cs _) = mempty {mcapset = cs + 1 }+    maxSpec _  = mempty++sh :: Num a => a -> a -> a+sh x y = x + y++updateSpec :: (EventInfo -> EventInfo) -> Event -> Event+updateSpec f (Event {evTime = t, evSpec = s, evCap = cap}) =+    Event {evTime = t, evSpec = f s, evCap = cap}++shift :: MaxVars -> [Event] -> [Event]+shift (MaxVars mcs mc mt) = map (updateSpec shift')+ where+    -- -1 marks a block that isn't attached to a particular capability+    shift' (CreateThread t) = CreateThread $ sh mt t+    shift' (RunThread t) = RunThread $ sh mt t+    shift' (StopThread t s) = StopThread (sh mt t) s+    shift' (ThreadRunnable t) = ThreadRunnable $ sh mt t+    shift' (MigrateThread t c) = MigrateThread (sh mt t) (sh mc c)+    shift' (WakeupThread t c) = WakeupThread (sh mt t) (sh mc c)+    shift' (ThreadLabel t l) = ThreadLabel (sh mt t) l+    shift' (CreateSparkThread t) = CreateSparkThread (sh mt t)+    shift' (SparkSteal c) = SparkSteal (sh mc c)+    shift' (TaskCreate tk c tid) = TaskCreate tk (sh mc c) tid+    shift' (TaskMigrate tk c1 c2) = TaskMigrate tk (sh mc c1) (sh mc c2)+    shift' (CapCreate c) = CapCreate (sh mc c)  -- TODO: correct?+    shift' (CapDelete c) = CapDelete (sh mc c)  -- TODO: correct?+    shift' (CapDisable c) = CapDisable (sh mc c)+    shift' (CapEnable c) = CapEnable (sh mc c)+    shift' (CapsetCreate cs cst) = CapsetCreate (sh mcs cs) cst+    shift' (CapsetDelete cs) = CapsetDelete (sh mcs cs)+    shift' (CapsetAssignCap cs c) = CapsetAssignCap (sh mcs cs) (sh mc c)+    shift' (CapsetRemoveCap cs c) = CapsetRemoveCap (sh mcs cs) (sh mc c)+    shift' (RtsIdentifier cs rts) = RtsIdentifier (sh mcs cs) rts+    shift' (ProgramArgs cs as) = ProgramArgs (sh mcs cs) as+    shift' (ProgramEnv cs es) = ProgramEnv (sh mcs cs) es+    shift' (OsProcessPid cs pid) = OsProcessPid (sh mcs cs) pid+    shift' (OsProcessParentPid cs ppid) = OsProcessParentPid (sh mcs cs) ppid+    shift' (WallClockTime cs sec nsec) = WallClockTime (sh mcs cs) sec nsec+    shift' x = x+    -- TODO extend by new shift for Eden events
+ test/782stop.eventlog.reference view
@@ -0,0 +1,147 @@+Event Types:+0: Create thread (size 4)+1: Run thread (size 4)+2: Stop thread (size 10)+3: Thread runnable (size 4)+4: Migrate thread (size 6)+8: Wakeup thread (size 6)+9: Starting GC (size 0)+10: Finished GC (size 0)+11: Request sequential GC (size 0)+12: Request parallel GC (size 0)+15: Create spark thread (size 4)+16: Log message (size variable)+17: Create capabilities (size 2)+18: Block marker (size 14)+19: User message (size variable)+20: GC idle (size 0)+21: GC working (size 0)+22: GC done (size 0)+23: Version (size variable)+24: Program invocation (size variable)+25: Create capability set (size 6)+26: Delete capability set (size 4)+27: Add capability to capability set (size 6)+28: Remove capability from capability set (size 6)+29: RTS name and version (size variable)+30: Program arguments (size variable)+31: Program environment variables (size variable)+32: Process ID (size 8)+33: Parent process ID (size 8)+34: Spark counters (size 56)+35: Spark create (size 0)+36: Spark dud (size 0)+37: Spark overflow (size 0)+38: Spark run (size 0)+39: Spark steal (size 2)+40: Spark fizzle (size 0)+41: Spark GC (size 0)+43: Wall clock time (size 16)+44: Thread label (size variable)+45: Create capability (size 2)+46: Delete capability (size 2)+47: Disable capability (size 2)+48: Enable capability (size 2)+49: Total heap mem ever allocated (size 12)+50: Current heap size (size 12)+51: Current heap live data (size 12)+52: Heap static parameters (size 38)+53: GC statistics (size 50)+54: Synchronise stop-the-world GC (size 0)+55: Task create (size 18)+56: Task migrate (size 12)+57: Task delete (size 8)+58: User marker (size variable)+60: Starting message receival (size 0)+61: Finished message receival (size 0)+62: Creating Process (size 4)+63: Killing Process (size 4)+64: Assigning thread to process (size 8)+65: Creating machine (size 10)+66: Killing machine (size 2)+67: Sending message (size 19)+68: Receiving message (size 23)+69: Sending/Receiving local message (size 17)++Events:+431075: startup: 1 capabilities+438021: created capset 0 of type CapsetOsProcess+438382: created capset 1 of type CapsetClockDomain+439886: created cap 0+440061: assigned cap 0 to capset 0+440191: assigned cap 0 to capset 1+446866: capset 1: wall clock time 1405192655s 464811000ns (unix epoch)+447318: capset 0: pid 19951+449452: capset 0: parent pid 18797+453913: capset 0: RTS version "GHC-7.8.20140411 rts_l"+462067: capset 0: args: ["./wrong782","+RTS","-lsu-g-p","-K80m","-k10m","-H200m","-C1s"]+468191: capset 0: env: ["SSH_AGENT_PID=1817","PVM_RSH=/usr/bin/ssh","GPG_AGENT_INFO=/tmp/keyring-yTUMmt/gpg:0:1","TERM=xterm","SHELL=/bin/bash","XDG_SESSION_COOKIE=acf1c79e0e2de67643be755c00000003-1405160974.283591-1531347675","WINDOWID=58743399","OLDPWD=/opt/Eden/edentv/fixFor783/BLD-ghc-events-parallel","GNOME_KEYRING_CONTROL=/tmp/keyring-yTUMmt","USER=jost","LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:","XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0","XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0","PVM_ROOT=/usr/lib/pvm3","SSH_AUTH_SOCK=/tmp/keyring-yTUMmt/ssh","SESSION_MANAGER=local/onAir:@/tmp/.ICE-unix/1781,unix/onAir:/tmp/.ICE-unix/1781","DEFAULTS_PATH=/usr/share/gconf/gnome-fallback.default.path","PVM_ARCH=LINUX64","XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome-fallback:/etc/xdg","PATH=/home/jost/bin:/home/jost/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/jost/.cabal/bin","DESKTOP_SESSION=gnome-fallback","PWD=/opt/Eden/edentv/fixFor783","GNOME_KEYRING_PID=1770","LANG=en_US.UTF-8","MANDATORY_PATH=/usr/share/gconf/gnome-fallback.mandatory.path","UBUNTU_MENUPROXY=libappmenu.so","GDMSESSION=gnome-fallback","SHLVL=1","HOME=/home/jost","LANGUAGE=en_US:en","GNOME_DESKTOP_SESSION_ID=this-is-deprecated","LOGNAME=jost","PVM_EXPORT=DISPLAY","XDG_DATA_DIRS=/usr/share/gnome-fallback:/usr/share/gnome:/usr/local/share/:/usr/share/","DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Mviy2n6D5M,guid=3677210ad991dc7e0dc3a1ae00000012","LESSOPEN=| /usr/bin/lesspipe %s","DISPLAY=:0.0","XDG_CURRENT_DESKTOP=GNOME","LESSCLOSE=/usr/bin/lesspipe %s %s","COLORTERM=gnome-terminal","XAUTHORITY=/home/jost/.Xauthority","_=./wrong782"]+671062: task 0x10130c0 created on cap 0 with OS kernel thread 19951+699893: cap 0: creating thread 1+706834: cap 0: running thread 1+761740: cap 0: stopping thread 1 (heap overflow)+4742525: cap 0: running thread 1+4987428: cap 0: stopping thread 1 (making a foreign call)+4989828: cap 0: running thread 1+5098303: cap 0: forking child thread+5129059: cap 0: creating thread 2+5130773: cap 0: stopping thread 1 (thread yielding)+5132416: cap 0: running thread 2+5139072: cap 0: stopping thread 2 (heap overflow)+5786180: cap 0: running thread 2+5798149: cap 0: child+10666308: cap 0: stopping thread 2 (thread yielding)+10667787: cap 0: running thread 1+10678973: cap 0: stopping thread 1 (blocked on black hole owned by thread 2)+10679120: cap 0: running thread 2+193941318: cap 0: stopping thread 2 (heap overflow)+194546751: cap 0: running thread 2+331983948: cap 0: stopping thread 2 (heap overflow)+332477310: cap 0: running thread 2+469015937: cap 0: stopping thread 2 (heap overflow)+469529035: cap 0: running thread 2+606849548: cap 0: stopping thread 2 (heap overflow)+607359608: cap 0: running thread 2+743648511: cap 0: stopping thread 2 (heap overflow)+744192151: cap 0: running thread 2+837873869: cap 0: waking up thread 1 on cap 0+837889639: cap 0: stopping thread 2 (making a foreign call)+837891084: cap 0: running thread 2+837932390: cap 0: filling full MVar+837934536: cap 0: stopping thread 2 (blocked on an MVar)+837935465: cap 0: running thread 1+837938331: cap 0: stopping thread 1 (making a foreign call)+837938636: cap 0: running thread 1+837948387: cap 0: emptying full MVar+837948906: cap 0: waking up thread 2 on cap 0+837952944: cap 0: stopping thread 1 (making a foreign call)+837953253: cap 0: running thread 1+837980148: cap 0: reading empty MVar+837980980: cap 0: stopping thread 1 (blocked reading an MVar)+837981248: cap 0: running thread 2+837981623: cap 0: stopping thread 2 (thread yielding)+837981784: cap 0: running thread 2+837983458: cap 0: filling empty MVar+837983715: cap 0: waking up thread 1 on cap 0+837983884: cap 0: stopping thread 2 (thread yielding)+837984239: cap 0: running thread 1+837987231: cap 0: stopping thread 1 (making a foreign call)+837987524: cap 0: running thread 1+837994266: cap 0: stopping thread 1 (thread finished)+837995393: task 0x10130c0 deleted+837999453: task 0x10130c0 created on cap 0 with OS kernel thread 19951+838005207: cap 0: creating thread 3+838005677: cap 0: running thread 2+838006764: cap 0: stopping thread 2 (heap overflow)+838522385: cap 0: running thread 2+838528422: cap 0: child finished+838529109: cap 0: stopping thread 2 (thread finished)+838529502: cap 0: running thread 3+838541350: cap 0: stopping thread 3 (thread finished)+838541718: task 0x10130c0 deleted+839458388: removed cap 0 from capset 0+839458655: removed cap 0 from capset 1+839458852: deleted cap 0+839458945: deleted capset 0+839458993: deleted capset 1+
+ test/783stop.eventlog.reference view
@@ -0,0 +1,148 @@+Event Types:+0: Create thread (size 4)+1: Run thread (size 4)+2: Stop thread (size 10)+3: Thread runnable (size 4)+4: Migrate thread (size 6)+8: Wakeup thread (size 6)+9: Starting GC (size 0)+10: Finished GC (size 0)+11: Request sequential GC (size 0)+12: Request parallel GC (size 0)+15: Create spark thread (size 4)+16: Log message (size variable)+17: Create capabilities (size 2)+18: Block marker (size 14)+19: User message (size variable)+20: GC idle (size 0)+21: GC working (size 0)+22: GC done (size 0)+23: Version (size variable)+24: Program invocation (size variable)+25: Create capability set (size 6)+26: Delete capability set (size 4)+27: Add capability to capability set (size 6)+28: Remove capability from capability set (size 6)+29: RTS name and version (size variable)+30: Program arguments (size variable)+31: Program environment variables (size variable)+32: Process ID (size 8)+33: Parent process ID (size 8)+34: Spark counters (size 56)+35: Spark create (size 0)+36: Spark dud (size 0)+37: Spark overflow (size 0)+38: Spark run (size 0)+39: Spark steal (size 2)+40: Spark fizzle (size 0)+41: Spark GC (size 0)+43: Wall clock time (size 16)+44: Thread label (size variable)+45: Create capability (size 2)+46: Delete capability (size 2)+47: Disable capability (size 2)+48: Enable capability (size 2)+49: Total heap mem ever allocated (size 12)+50: Current heap size (size 12)+51: Current heap live data (size 12)+52: Heap static parameters (size 38)+53: GC statistics (size 50)+54: Synchronise stop-the-world GC (size 0)+55: Task create (size 18)+56: Task migrate (size 12)+57: Task delete (size 8)+58: User marker (size variable)+59: Empty event for bug #9003 (size 0)+60: Starting message receival (size 0)+61: Finished message receival (size 0)+62: Creating Process (size 4)+63: Killing Process (size 4)+64: Assigning thread to process (size 8)+65: Creating machine (size 10)+66: Killing machine (size 2)+67: Sending message (size 19)+68: Receiving message (size 23)+69: Sending/Receiving local message (size 17)++Events:+440074: startup: 1 capabilities+446518: created capset 0 of type CapsetOsProcess+446769: created capset 1 of type CapsetClockDomain+448177: created cap 0+448347: assigned cap 0 to capset 0+448483: assigned cap 0 to capset 1+455484: capset 1: wall clock time 1405192714s 116018000ns (unix epoch)+456191: capset 0: pid 19972+458325: capset 0: parent pid 18797+464895: capset 0: RTS version "GHC-7.8.3 rts_l"+473314: capset 0: args: ["./wrong783","+RTS","-lsu-g-p","-K80m","-k10m","-H200m","-C1s"]+479103: capset 0: env: ["SSH_AGENT_PID=1817","PVM_RSH=/usr/bin/ssh","GPG_AGENT_INFO=/tmp/keyring-yTUMmt/gpg:0:1","TERM=xterm","SHELL=/bin/bash","XDG_SESSION_COOKIE=acf1c79e0e2de67643be755c00000003-1405160974.283591-1531347675","WINDOWID=58743399","OLDPWD=/opt/Eden/edentv/fixFor783/BLD-ghc-events-parallel","GNOME_KEYRING_CONTROL=/tmp/keyring-yTUMmt","USER=jost","LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:","XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0","XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0","PVM_ROOT=/usr/lib/pvm3","SSH_AUTH_SOCK=/tmp/keyring-yTUMmt/ssh","SESSION_MANAGER=local/onAir:@/tmp/.ICE-unix/1781,unix/onAir:/tmp/.ICE-unix/1781","DEFAULTS_PATH=/usr/share/gconf/gnome-fallback.default.path","PVM_ARCH=LINUX64","XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome-fallback:/etc/xdg","PATH=/home/jost/bin:/home/jost/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/jost/.cabal/bin","DESKTOP_SESSION=gnome-fallback","PWD=/opt/Eden/edentv/fixFor783","GNOME_KEYRING_PID=1770","LANG=en_US.UTF-8","MANDATORY_PATH=/usr/share/gconf/gnome-fallback.mandatory.path","UBUNTU_MENUPROXY=libappmenu.so","GDMSESSION=gnome-fallback","SHLVL=1","HOME=/home/jost","LANGUAGE=en_US:en","GNOME_DESKTOP_SESSION_ID=this-is-deprecated","LOGNAME=jost","PVM_EXPORT=DISPLAY","XDG_DATA_DIRS=/usr/share/gnome-fallback:/usr/share/gnome:/usr/local/share/:/usr/share/","DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Mviy2n6D5M,guid=3677210ad991dc7e0dc3a1ae00000012","LESSOPEN=| /usr/bin/lesspipe %s","DISPLAY=:0.0","XDG_CURRENT_DESKTOP=GNOME","LESSCLOSE=/usr/bin/lesspipe %s %s","COLORTERM=gnome-terminal","XAUTHORITY=/home/jost/.Xauthority","_=./wrong783"]+699793: task 0x12e70c0 created on cap 0 with OS kernel thread 19972+732448: cap 0: creating thread 1+739574: cap 0: running thread 1+793934: cap 0: stopping thread 1 (heap overflow)+4798987: cap 0: running thread 1+5055994: cap 0: stopping thread 1 (making a foreign call)+5058329: cap 0: running thread 1+5148943: cap 0: forking child thread+5182260: cap 0: creating thread 2+5183843: cap 0: stopping thread 1 (thread yielding)+5185547: cap 0: running thread 2+5192128: cap 0: stopping thread 2 (heap overflow)+6603911: cap 0: running thread 2+6625740: cap 0: child+10691075: cap 0: stopping thread 2 (thread yielding)+10692575: cap 0: running thread 1+10700572: cap 0: stopping thread 1 (blocked on black hole owned by thread 2)+10700759: cap 0: running thread 2+196062624: cap 0: stopping thread 2 (heap overflow)+196666678: cap 0: running thread 2+333935541: cap 0: stopping thread 2 (heap overflow)+334485420: cap 0: running thread 2+471949022: cap 0: stopping thread 2 (heap overflow)+472424843: cap 0: running thread 2+609441585: cap 0: stopping thread 2 (heap overflow)+609951485: cap 0: running thread 2+746397738: cap 0: stopping thread 2 (heap overflow)+746948628: cap 0: running thread 2+840110617: cap 0: waking up thread 1 on cap 0+840126355: cap 0: stopping thread 2 (making a foreign call)+840127652: cap 0: running thread 2+840169975: cap 0: filling full MVar+840172153: cap 0: stopping thread 2 (blocked on an MVar)+840172971: cap 0: running thread 1+840176011: cap 0: stopping thread 1 (making a foreign call)+840176353: cap 0: running thread 1+840188167: cap 0: emptying full MVar+840188906: cap 0: waking up thread 2 on cap 0+840193329: cap 0: stopping thread 1 (making a foreign call)+840193566: cap 0: running thread 1+840223344: cap 0: reading empty MVar+840224025: cap 0: stopping thread 1 (blocked reading an MVar)+840224469: cap 0: running thread 2+840224730: cap 0: stopping thread 2 (thread yielding)+840224861: cap 0: running thread 2+840226951: cap 0: filling empty MVar+840227415: cap 0: waking up thread 1 on cap 0+840227605: cap 0: stopping thread 2 (thread yielding)+840228120: cap 0: running thread 1+840231481: cap 0: stopping thread 1 (making a foreign call)+840231796: cap 0: running thread 1+840239072: cap 0: stopping thread 1 (thread finished)+840240156: task 0x12e70c0 deleted+840243853: task 0x12e70c0 created on cap 0 with OS kernel thread 19972+840249364: cap 0: creating thread 3+840249779: cap 0: running thread 2+840251082: cap 0: stopping thread 2 (heap overflow)+840785630: cap 0: running thread 2+840791099: cap 0: child finished+840792041: cap 0: stopping thread 2 (thread finished)+840792454: cap 0: running thread 3+840801940: cap 0: stopping thread 3 (thread finished)+840802357: task 0x12e70c0 deleted+841728886: removed cap 0 from capset 0+841728999: removed cap 0 from capset 1+841729260: deleted cap 0+841729327: deleted capset 0+841729456: deleted capset 1+
test/TestVersions.hs view
@@ -14,26 +14,19 @@ Where queens.hs is http://darcs.haskell.org/nofib/parallel/queens/Main.hs -} +import System.Exit (exitFailure)+ import GHC.RTS.Events-import System.Exit+import GHC.RTS.Events.Incremental+import Utils (files, diffLines) -files :: [FilePath]-files = map ("test/"++)-    [ "queens-ghc-6.12.1.eventlog"-    , "queens-ghc-7.0.2.eventlog"-    , "mandelbrot-mmc-2011-06-14.eventlog" -    , "mdlLogMPI1.eventlog"-    , "pre77stop.eventlog", "782stop.eventlog", "783stop.eventlog" ] --- returns True on success testFile :: FilePath -> IO Bool testFile f = do     e <- readEventLogFromFile f-    let oops s = putStrLn (f ++ ": failure" ++ s) >> return False-+    let oops s = putStrLn (f ++ ": failure " ++ s) >> return False     case e of         Left m -> oops m-         Right newlogdata -> do             oldlog <- readFile (f ++ ".reference")             let newlog = ppEventLog newlogdata ++ "\n" in@@ -47,21 +40,3 @@     if and successes         then return ()         else exitFailure------- Code to help print the differences between a working test and a failing test.-----diffLines o n = diff 1 (lines o) (lines n)--diff :: Int -> [String] -> [String] -> String-diff _ [] [] = "Logs match"-diff l [] (n:ns) = "Extra lines in new log at line " ++ show l ++ ":\n" ++-    (unlines (n:ns))-diff l (o:os) [] = "Missing lines in new log at line " ++ show l ++ ":\n" ++-    (unlines (o:os))-diff l (o:os) (n:ns) = if (o == n)-                        then diff (l+1) os ns-                        else "Different lines at line " ++ show l ++ ":\n" ++-                            "Original: " ++ o ++ "\n" ++-                            "New:      " ++ n
+ test/Utils.hs view
@@ -0,0 +1,25 @@+module Utils where++files :: [FilePath]+files = map ("test/"++)+    [ "queens-ghc-6.12.1.eventlog"+    , "queens-ghc-7.0.2.eventlog"+    , "mandelbrot-mmc-2011-06-14.eventlog"+    , "parallelTest.eventlog"+    , "pre77stop.eventlog", "782stop.eventlog", "783stop.eventlog" ]+++-- Code to help print the differences between a working test and a failing test.+diffLines o n = diff 1 (lines o) (lines n)++diff :: Int -> [String] -> [String] -> String+diff _ [] [] = "Logs match"+diff l [] (n:ns) = "Extra lines in new log at line " ++ show l ++ ":\n" +++    (unlines (n:ns))+diff l (o:os) [] = "Missing lines in new log at line " ++ show l ++ ":\n" +++    (unlines (o:os))+diff l (o:os) (n:ns) = if (o == n)+                        then diff (l+1) os ns+                        else "Different output at line " ++ show l ++ ":\n" +++                            "Original: " ++ o ++ "\n" +++                            "New:      " ++ n
+ test/WriteMerge.hs view
@@ -0,0 +1,46 @@+{-+  This test checks the functionality of `ghc-events merge` and writeEventLogToFile+-}+import Control.Monad+import qualified Data.ByteString.Lazy as BL+import Data.List (( \\ ))+import Data.Maybe (fromJust)+import System.Exit (exitFailure)++import GHC.RTS.Events+import GHC.RTS.Events.Incremental (readEventLog)+import Utils (files, diffLines)++-- Failing test cases due to changes introduced some time in the past but+-- went unnoticed. Needs fixing. TODO+failingCases :: [FilePath]+failingCases = map ("test/"++)+  [ "queens-ghc-6.12.1.eventlog"+  , "queens-ghc-7.0.2.eventlog"+  , "mandelbrot-mmc-2011-06-14.eventlog"+  , "782stop.eventlog"]++rewriteLog :: EventLog -> EventLog+rewriteLog oldLog = case readEventLog (serialiseEventLog oldLog) of+  Left reason -> error reason+  Right (newLog, _) -> newLog++testFile :: FilePath -> IO Bool+testFile f = do+  e <- readEventLogFromFile f+  let oops s = putStrLn (f ++ ": failure " ++ s) >> return False+  case e of+    Left m -> oops m+    Right log -> do+      let old = ppEventLog log+      let new = ppEventLog $ rewriteLog log+      if old == new+        then putStrLn (f ++ ": success") >> return True+        else do+          putStrLn $ diffLines old new+          oops "re-written file does not match the original"++main :: IO ()+main = do+  successes <- mapM testFile files+  unless (and successes) exitFailure
+ test/mandelbrot-mmc-2011-06-14.eventlog.reference view
@@ -0,0 +1,5596 @@+Event Types:+17: Startup (num_engines) (size 2)+7: Shutdown (size 0)+18: A block of events generated by a specific engine follows (size 14)+0: A context is created or re-used (size 4)+3: The context is being placed on the run queue (size 4)+5: Run a spark from the local stack (size 8)+6: Run a spark stolen from another engine (size 10)+1: Run context (size 4)+2: Context stopped (size 6)+15: Create a context for executing a spark (size 4)+16: A user-provided log message (size variable)+9: Start GC (size 0)+10: Stop GC (size 0)+39: Register an id->string mapping (size variable)+40: About to call main/2 (size 0)+25: Create an engine set (size 6)+26: Detete an engine set (size 4)+27: Add an engine to an engine set (size 6)+28: Add an engine to an engine set (size 6)+29: The type of the runtime system for this capset (size variable)+30: The command line arguments of this process (size variable)+31: The environment variables this process inherited (size variable)+32: The pid and parent pid of this process (size 8)+103: A spark is being created (size 12)+100: Start a parallel conjunction (dyn id, static id) (size 12)+101: End a parallel conjunction (dyn id) (size 8)+102: End a parallel conjunct (dyn id) (size 8)+104: Create a future (future id) (size 12)+105: Wait on a future without suspending (future id) (size 8)+106: Wait on a future by suspending this thread (future id) (size 8)+107: Signal a future (future id) (size 8)+108: Engine begins looking for a context to execute (size 0)+109: Engine begins attempt to steal work (size 0)+110: Release this context to the free context pool (size 4)++Events:+0: created capset 0 of type CapsetOsProcess+0: capset 0: RTS version "mmc-DEV"+0: startup: 4 capabilities+0: Register an id->string mapping+0: Register an id->string mapping+0: Register an id->string mapping+0: Register an id->string mapping+0: assigned cap 0 to capset 0+0: assigned cap 3 to capset 0+0: assigned cap 1 to capset 0+0: assigned cap 2 to capset 0+4198126: cap 0: creating thread 1+4199512: cap 0: running thread 1+9983902: cap 3: Looking for global thread to resume+9987484: cap 3: Trying to steal a spark+10575823: cap 1: Looking for global thread to resume+10577452: cap 1: Trying to steal a spark+10694043: cap 2: Looking for global thread to resume+10694551: cap 2: Trying to steal a spark+10852245: cap 0: spark fizzled+11153997: cap 0: Start a parallel conjunction 0x2515150, static_id: 2+11155725: cap 0: Create spark for conjunction: 0x2515150 spark: 0x0+11165265: cap 0: Start a parallel conjunction 0x25151b0, static_id: 2+11165593: cap 0: Create spark for conjunction: 0x25151b0 spark: 0x1+11169886: cap 0: Start a parallel conjunction 0x2515210, static_id: 2+11170080: cap 0: Create spark for conjunction: 0x2515210 spark: 0x2+11172546: cap 0: Start a parallel conjunction 0x2515270, static_id: 2+11172730: cap 0: Create spark for conjunction: 0x2515270 spark: 0x3+11173041: cap 0: Start a parallel conjunction 0x25152d0, static_id: 2+11173338: cap 0: Create spark for conjunction: 0x25152d0 spark: 0x4+11173905: cap 0: Start a parallel conjunction 0x2515330, static_id: 2+11174107: cap 0: Create spark for conjunction: 0x2515330 spark: 0x5+11174143: cap 2: Trying to steal a spark+11174413: cap 0: Start a parallel conjunction 0x2515390, static_id: 2+11174760: cap 0: Create spark for conjunction: 0x2515390 spark: 0x6+11175034: cap 0: Start a parallel conjunction 0x25153f0, static_id: 2+11175610: cap 0: Create spark for conjunction: 0x25153f0 spark: 0x7+11175853: cap 3: Trying to steal a spark+11175885: cap 0: Start a parallel conjunction 0x2515450, static_id: 2+11177316: cap 2: stealing a spark from cap 0+11178108: cap 3: stealing a spark from cap 0+11198002: cap 0: Create spark for conjunction: 0x2515450 spark: 0x8+11198394: cap 0: Start a parallel conjunction 0x25154b0, static_id: 2+11198601: cap 0: Create spark for conjunction: 0x25154b0 spark: 0x9+11198880: cap 0: Start a parallel conjunction 0x2515510, static_id: 2+11199069: cap 0: Create spark for conjunction: 0x2515510 spark: 0xa+11199352: cap 0: Start a parallel conjunction 0x2515570, static_id: 2+11199541: cap 0: Create spark for conjunction: 0x2515570 spark: 0xb+11199829: cap 0: Start a parallel conjunction 0x25155d0, static_id: 2+11200014: cap 0: Create spark for conjunction: 0x25155d0 spark: 0xc+11200275: cap 0: Start a parallel conjunction 0x2515630, static_id: 2+11200468: cap 0: Create spark for conjunction: 0x2515630 spark: 0xd+11200743: cap 0: Start a parallel conjunction 0x2515690, static_id: 2+11200918: cap 0: Create spark for conjunction: 0x2515690 spark: 0xe+11201206: cap 0: Start a parallel conjunction 0x25156f0, static_id: 2+11201418: cap 0: Create spark for conjunction: 0x25156f0 spark: 0xf+11201719: cap 0: Start a parallel conjunction 0x2515750, static_id: 2+11201899: cap 0: Create spark for conjunction: 0x2515750 spark: 0x10+11202174: cap 0: Start a parallel conjunction 0x25157b0, static_id: 2+11220259: cap 0: Create spark for conjunction: 0x25157b0 spark: 0x11+11220592: cap 0: Start a parallel conjunction 0x2515810, static_id: 2+11220772: cap 0: Create spark for conjunction: 0x2515810 spark: 0x12+11221083: cap 0: Start a parallel conjunction 0x2515870, static_id: 2+11221272: cap 0: Create spark for conjunction: 0x2515870 spark: 0x13+11221533: cap 0: Start a parallel conjunction 0x25158d0, static_id: 2+11221731: cap 0: Create spark for conjunction: 0x25158d0 spark: 0x14+11222005: cap 0: Start a parallel conjunction 0x2515930, static_id: 2+11222199: cap 0: Create spark for conjunction: 0x2515930 spark: 0x15+11222478: cap 0: Start a parallel conjunction 0x2515990, static_id: 2+11222671: cap 0: Create spark for conjunction: 0x2515990 spark: 0x16+11222941: cap 0: Start a parallel conjunction 0x25159f0, static_id: 2+11223130: cap 0: Create spark for conjunction: 0x25159f0 spark: 0x17+11223400: cap 0: Start a parallel conjunction 0x2515a50, static_id: 2+11223580: cap 0: Create spark for conjunction: 0x2515a50 spark: 0x18+11223886: cap 0: Start a parallel conjunction 0x2515ab0, static_id: 2+11224066: cap 0: Create spark for conjunction: 0x2515ab0 spark: 0x19+11224336: cap 0: Start a parallel conjunction 0x2515b10, static_id: 2+11224543: cap 0: Create spark for conjunction: 0x2515b10 spark: 0x1a+11224827: cap 0: Start a parallel conjunction 0x2515b70, static_id: 2+11225007: cap 0: Create spark for conjunction: 0x2515b70 spark: 0x1b+11225286: cap 0: Start a parallel conjunction 0x2515bd0, static_id: 2+11225470: cap 0: Create spark for conjunction: 0x2515bd0 spark: 0x1c+11225758: cap 0: Start a parallel conjunction 0x2515c30, static_id: 2+11225956: cap 0: Create spark for conjunction: 0x2515c30 spark: 0x1d+11226240: cap 0: Start a parallel conjunction 0x2515c90, static_id: 2+11226424: cap 0: Create spark for conjunction: 0x2515c90 spark: 0x1e+11226708: cap 0: Start a parallel conjunction 0x2515cf0, static_id: 2+11226892: cap 0: Create spark for conjunction: 0x2515cf0 spark: 0x1f+11227176: cap 0: Start a parallel conjunction 0x2515d50, static_id: 2+11227374: cap 0: Create spark for conjunction: 0x2515d50 spark: 0x20+11227653: cap 0: Start a parallel conjunction 0x2515db0, static_id: 2+11299891: cap 0: Create spark for conjunction: 0x2515db0 spark: 0x21+11300346: cap 0: Start a parallel conjunction 0x2515e10, static_id: 2+11300535: cap 0: Create spark for conjunction: 0x2515e10 spark: 0x22+11300845: cap 0: Start a parallel conjunction 0x2515e70, static_id: 2+11301034: cap 0: Create spark for conjunction: 0x2515e70 spark: 0x23+11301291: cap 0: Start a parallel conjunction 0x2515ed0, static_id: 2+11301489: cap 0: Create spark for conjunction: 0x2515ed0 spark: 0x24+11301772: cap 0: Start a parallel conjunction 0x2515f30, static_id: 2+11301961: cap 0: Create spark for conjunction: 0x2515f30 spark: 0x25+11302245: cap 0: Start a parallel conjunction 0x2515f90, static_id: 2+11302438: cap 0: Create spark for conjunction: 0x2515f90 spark: 0x26+11302726: cap 0: Start a parallel conjunction 0x2515ff0, static_id: 2+11302929: cap 0: Create spark for conjunction: 0x2515ff0 spark: 0x27+11303212: cap 0: Start a parallel conjunction 0x2516050, static_id: 2+11303401: cap 0: Create spark for conjunction: 0x2516050 spark: 0x28+11303698: cap 0: Start a parallel conjunction 0x25160b0, static_id: 2+11303883: cap 0: Create spark for conjunction: 0x25160b0 spark: 0x29+11304162: cap 0: Start a parallel conjunction 0x2516110, static_id: 2+11304351: cap 0: Create spark for conjunction: 0x2516110 spark: 0x2a+11304630: cap 0: Start a parallel conjunction 0x2516170, static_id: 2+11304814: cap 0: Create spark for conjunction: 0x2516170 spark: 0x2b+11305093: cap 0: Start a parallel conjunction 0x25161d0, static_id: 2+11305287: cap 0: Create spark for conjunction: 0x25161d0 spark: 0x2c+11305566: cap 0: Start a parallel conjunction 0x2516230, static_id: 2+11305759: cap 0: Create spark for conjunction: 0x2516230 spark: 0x2d+11306034: cap 0: Start a parallel conjunction 0x2516290, static_id: 2+11306214: cap 0: Create spark for conjunction: 0x2516290 spark: 0x2e+11306493: cap 0: Start a parallel conjunction 0x25162f0, static_id: 2+11306673: cap 0: Create spark for conjunction: 0x25162f0 spark: 0x2f+11306943: cap 0: Start a parallel conjunction 0x2516350, static_id: 2+11307127: cap 0: Create spark for conjunction: 0x2516350 spark: 0x30+11307402: cap 0: Start a parallel conjunction 0x25163b0, static_id: 2+11307586: cap 0: Create spark for conjunction: 0x25163b0 spark: 0x31+11307852: cap 0: Start a parallel conjunction 0x2516410, static_id: 2+11308036: cap 0: Create spark for conjunction: 0x2516410 spark: 0x32+11308320: cap 0: Start a parallel conjunction 0x2516470, static_id: 2+11308509: cap 0: Create spark for conjunction: 0x2516470 spark: 0x33+11308788: cap 0: Start a parallel conjunction 0x25164d0, static_id: 2+11308990: cap 0: Create spark for conjunction: 0x25164d0 spark: 0x34+11309265: cap 0: Start a parallel conjunction 0x2516530, static_id: 2+11309445: cap 0: Create spark for conjunction: 0x2516530 spark: 0x35+11309751: cap 0: Start a parallel conjunction 0x2516590, static_id: 2+11309931: cap 0: Create spark for conjunction: 0x2516590 spark: 0x36+11310196: cap 0: Start a parallel conjunction 0x25165f0, static_id: 2+11310394: cap 0: Create spark for conjunction: 0x25165f0 spark: 0x37+11310678: cap 0: Start a parallel conjunction 0x2516650, static_id: 2+11310867: cap 0: Create spark for conjunction: 0x2516650 spark: 0x38+11311155: cap 0: Start a parallel conjunction 0x25166b0, static_id: 2+11311339: cap 0: Create spark for conjunction: 0x25166b0 spark: 0x39+11311609: cap 0: Start a parallel conjunction 0x2516710, static_id: 2+11311794: cap 0: Create spark for conjunction: 0x2516710 spark: 0x3a+11312073: cap 0: Start a parallel conjunction 0x2516770, static_id: 2+11312253: cap 0: Create spark for conjunction: 0x2516770 spark: 0x3b+11312532: cap 0: Start a parallel conjunction 0x25167d0, static_id: 2+11312721: cap 0: Create spark for conjunction: 0x25167d0 spark: 0x3c+11313000: cap 0: Start a parallel conjunction 0x2516830, static_id: 2+11313211: cap 0: Create spark for conjunction: 0x2516830 spark: 0x3d+11313490: cap 0: Start a parallel conjunction 0x2516890, static_id: 2+11313670: cap 0: Create spark for conjunction: 0x2516890 spark: 0x3e+11313954: cap 0: Start a parallel conjunction 0x25168f0, static_id: 2+11314138: cap 0: Create spark for conjunction: 0x25168f0 spark: 0x3f+11314399: cap 0: Start a parallel conjunction 0x2516950, static_id: 2+11314593: cap 0: Create spark for conjunction: 0x2516950 spark: 0x40+11314872: cap 0: Start a parallel conjunction 0x25169b0, static_id: 2+11358931: cap 0: Create spark for conjunction: 0x25169b0 spark: 0x41+11359269: cap 0: Start a parallel conjunction 0x2516a10, static_id: 2+11359453: cap 0: Create spark for conjunction: 0x2516a10 spark: 0x42+11359755: cap 0: Start a parallel conjunction 0x2516a70, static_id: 2+11359948: cap 0: Create spark for conjunction: 0x2516a70 spark: 0x43+11360232: cap 0: Start a parallel conjunction 0x2516ad0, static_id: 2+11360421: cap 0: Create spark for conjunction: 0x2516ad0 spark: 0x44+11360700: cap 0: Start a parallel conjunction 0x2516b30, static_id: 2+11360902: cap 0: Create spark for conjunction: 0x2516b30 spark: 0x45+11361181: cap 0: Start a parallel conjunction 0x2516b90, static_id: 2+11361370: cap 0: Create spark for conjunction: 0x2516b90 spark: 0x46+11361645: cap 0: Start a parallel conjunction 0x2516bf0, static_id: 2+11361843: cap 0: Create spark for conjunction: 0x2516bf0 spark: 0x47+11362117: cap 0: Start a parallel conjunction 0x2516c50, static_id: 2+11362302: cap 0: Create spark for conjunction: 0x2516c50 spark: 0x48+11362599: cap 0: Start a parallel conjunction 0x2516cb0, static_id: 2+11362810: cap 0: Create spark for conjunction: 0x2516cb0 spark: 0x49+11363089: cap 0: Start a parallel conjunction 0x2516d10, static_id: 2+11363274: cap 0: Create spark for conjunction: 0x2516d10 spark: 0x4a+11363553: cap 0: Start a parallel conjunction 0x2516d70, static_id: 2+11363742: cap 0: Create spark for conjunction: 0x2516d70 spark: 0x4b+11364021: cap 0: Start a parallel conjunction 0x2516dd0, static_id: 2+11364205: cap 0: Create spark for conjunction: 0x2516dd0 spark: 0x4c+11364480: cap 0: Start a parallel conjunction 0x2516e30, static_id: 2+11364682: cap 0: Create spark for conjunction: 0x2516e30 spark: 0x4d+11364948: cap 0: Start a parallel conjunction 0x2516e90, static_id: 2+11365128: cap 0: Create spark for conjunction: 0x2516e90 spark: 0x4e+11365420: cap 0: Start a parallel conjunction 0x2516ef0, static_id: 2+11365609: cap 0: Create spark for conjunction: 0x2516ef0 spark: 0x4f+11365879: cap 0: Start a parallel conjunction 0x2516f50, static_id: 2+11366059: cap 0: Create spark for conjunction: 0x2516f50 spark: 0x50+11366338: cap 0: Start a parallel conjunction 0x2516fb0, static_id: 2+11366527: cap 0: Create spark for conjunction: 0x2516fb0 spark: 0x51+11366833: cap 0: Start a parallel conjunction 0x2517010, static_id: 2+11367022: cap 0: Create spark for conjunction: 0x2517010 spark: 0x52+11367319: cap 0: Start a parallel conjunction 0x2517070, static_id: 2+11367513: cap 0: Create spark for conjunction: 0x2517070 spark: 0x53+11367778: cap 0: Start a parallel conjunction 0x25170d0, static_id: 2+11367972: cap 0: Create spark for conjunction: 0x25170d0 spark: 0x54+11368246: cap 0: Start a parallel conjunction 0x2517130, static_id: 2+11368444: cap 0: Create spark for conjunction: 0x2517130 spark: 0x55+11368723: cap 0: Start a parallel conjunction 0x2517190, static_id: 2+11368908: cap 0: Create spark for conjunction: 0x2517190 spark: 0x56+11369182: cap 0: Start a parallel conjunction 0x25171f0, static_id: 2+11369385: cap 0: Create spark for conjunction: 0x25171f0 spark: 0x57+11369664: cap 0: Start a parallel conjunction 0x2517250, static_id: 2+11369853: cap 0: Create spark for conjunction: 0x2517250 spark: 0x58+11370136: cap 0: Start a parallel conjunction 0x25172b0, static_id: 2+11370334: cap 0: Create spark for conjunction: 0x25172b0 spark: 0x59+11370609: cap 0: Start a parallel conjunction 0x2517310, static_id: 2+11370811: cap 0: Create spark for conjunction: 0x2517310 spark: 0x5a+11371090: cap 0: Start a parallel conjunction 0x2517370, static_id: 2+11371297: cap 0: Create spark for conjunction: 0x2517370 spark: 0x5b+11371702: cap 0: Start a parallel conjunction 0x25173d0, static_id: 2+11371887: cap 0: Create spark for conjunction: 0x25173d0 spark: 0x5c+11372152: cap 0: Start a parallel conjunction 0x2517430, static_id: 2+11372463: cap 0: Create spark for conjunction: 0x2517430 spark: 0x5d+11372746: cap 0: Start a parallel conjunction 0x2517490, static_id: 2+11372931: cap 0: Create spark for conjunction: 0x2517490 spark: 0x5e+11373349: cap 0: Start a parallel conjunction 0x25174f0, static_id: 2+11373552: cap 0: Create spark for conjunction: 0x25174f0 spark: 0x5f+11373831: cap 0: Start a parallel conjunction 0x2517550, static_id: 2+11374024: cap 0: Create spark for conjunction: 0x2517550 spark: 0x60+11374299: cap 0: Start a parallel conjunction 0x25175b0, static_id: 2+11374492: cap 0: Create spark for conjunction: 0x25175b0 spark: 0x61+11374758: cap 0: Start a parallel conjunction 0x2517610, static_id: 2+11374942: cap 0: Create spark for conjunction: 0x2517610 spark: 0x62+11375221: cap 0: Start a parallel conjunction 0x2517670, static_id: 2+11375415: cap 0: Create spark for conjunction: 0x2517670 spark: 0x63+11375671: cap 0: Start a parallel conjunction 0x25176d0, static_id: 2+11375865: cap 0: Create spark for conjunction: 0x25176d0 spark: 0x64+11376148: cap 0: Start a parallel conjunction 0x2517730, static_id: 2+11376342: cap 0: Create spark for conjunction: 0x2517730 spark: 0x65+11376616: cap 0: Start a parallel conjunction 0x2517790, static_id: 2+11376805: cap 0: Create spark for conjunction: 0x2517790 spark: 0x66+11377062: cap 0: Start a parallel conjunction 0x25177f0, static_id: 2+11377264: cap 0: Create spark for conjunction: 0x25177f0 spark: 0x67+11377539: cap 0: Start a parallel conjunction 0x2517850, static_id: 2+11377723: cap 0: Create spark for conjunction: 0x2517850 spark: 0x68+11378007: cap 0: Start a parallel conjunction 0x25178b0, static_id: 2+11378205: cap 0: Create spark for conjunction: 0x25178b0 spark: 0x69+11378484: cap 0: Start a parallel conjunction 0x2517910, static_id: 2+11378677: cap 0: Create spark for conjunction: 0x2517910 spark: 0x6a+11378965: cap 0: Start a parallel conjunction 0x2517970, static_id: 2+11379168: cap 0: Create spark for conjunction: 0x2517970 spark: 0x6b+11379465: cap 0: Start a parallel conjunction 0x25179d0, static_id: 2+11379649: cap 0: Create spark for conjunction: 0x25179d0 spark: 0x6c+11379915: cap 0: Start a parallel conjunction 0x2517a30, static_id: 2+11380117: cap 0: Create spark for conjunction: 0x2517a30 spark: 0x6d+11380378: cap 0: Start a parallel conjunction 0x2517a90, static_id: 2+11380558: cap 0: Create spark for conjunction: 0x2517a90 spark: 0x6e+11380837: cap 0: Start a parallel conjunction 0x2517af0, static_id: 2+11381040: cap 0: Create spark for conjunction: 0x2517af0 spark: 0x6f+11381296: cap 0: Start a parallel conjunction 0x2517b50, static_id: 2+11381481: cap 0: Create spark for conjunction: 0x2517b50 spark: 0x70+11381751: cap 0: Start a parallel conjunction 0x2517bb0, static_id: 2+11381953: cap 0: Create spark for conjunction: 0x2517bb0 spark: 0x71+11382219: cap 0: Start a parallel conjunction 0x2517c10, static_id: 2+11382412: cap 0: Create spark for conjunction: 0x2517c10 spark: 0x72+11382700: cap 0: Start a parallel conjunction 0x2517c70, static_id: 2+11382912: cap 0: Create spark for conjunction: 0x2517c70 spark: 0x73+11383195: cap 0: Start a parallel conjunction 0x2517cd0, static_id: 2+11383402: cap 0: Create spark for conjunction: 0x2517cd0 spark: 0x74+11383672: cap 0: Start a parallel conjunction 0x2517d30, static_id: 2+11383875: cap 0: Create spark for conjunction: 0x2517d30 spark: 0x75+11384163: cap 0: Start a parallel conjunction 0x2517d90, static_id: 2+11384352: cap 0: Create spark for conjunction: 0x2517d90 spark: 0x76+11384622: cap 0: Start a parallel conjunction 0x2517df0, static_id: 2+11384824: cap 0: Create spark for conjunction: 0x2517df0 spark: 0x77+11385099: cap 0: Start a parallel conjunction 0x2517e50, static_id: 2+11385288: cap 0: Create spark for conjunction: 0x2517e50 spark: 0x78+11385567: cap 0: Start a parallel conjunction 0x2517eb0, static_id: 2+11385765: cap 0: Create spark for conjunction: 0x2517eb0 spark: 0x79+11386021: cap 0: Start a parallel conjunction 0x2517f10, static_id: 2+11386210: cap 0: Create spark for conjunction: 0x2517f10 spark: 0x7a+11386480: cap 0: Start a parallel conjunction 0x2517f70, static_id: 2+11386674: cap 0: Create spark for conjunction: 0x2517f70 spark: 0x7b+11386971: cap 0: Start a parallel conjunction 0x2517fd0, static_id: 2+11387160: cap 0: Create spark for conjunction: 0x2517fd0 spark: 0x7c+11387475: cap 0: Start a parallel conjunction 0x2518030, static_id: 2+11387695: cap 0: Create spark for conjunction: 0x2518030 spark: 0x7d+11388001: cap 0: Start a parallel conjunction 0x2518090, static_id: 2+11388190: cap 0: Create spark for conjunction: 0x2518090 spark: 0x7e+11388496: cap 0: Start a parallel conjunction 0x25180f0, static_id: 2+11388699: cap 0: Create spark for conjunction: 0x25180f0 spark: 0x7f+11388960: cap 0: Start a parallel conjunction 0x2518150, static_id: 2+11389144: cap 0: Create spark for conjunction: 0x2518150 spark: 0x80+11389423: cap 0: Start a parallel conjunction 0x25181b0, static_id: 2+11409403: cap 0: Create spark for conjunction: 0x25181b0 spark: 0x81+11409732: cap 0: Start a parallel conjunction 0x2518210, static_id: 2+11409930: cap 0: Create spark for conjunction: 0x2518210 spark: 0x82+11410236: cap 0: Start a parallel conjunction 0x2518270, static_id: 2+11410425: cap 0: Create spark for conjunction: 0x2518270 spark: 0x83+11410699: cap 0: Start a parallel conjunction 0x25182d0, static_id: 2+11410947: cap 0: Create spark for conjunction: 0x25182d0 spark: 0x84+11411226: cap 0: Start a parallel conjunction 0x2518330, static_id: 2+11411406: cap 0: Create spark for conjunction: 0x2518330 spark: 0x85+11411694: cap 0: Start a parallel conjunction 0x2518390, static_id: 2+11411874: cap 0: Create spark for conjunction: 0x2518390 spark: 0x86+11412135: cap 0: Start a parallel conjunction 0x25183f0, static_id: 2+11412337: cap 0: Create spark for conjunction: 0x25183f0 spark: 0x87+11412621: cap 0: Start a parallel conjunction 0x2518450, static_id: 2+11412868: cap 0: Create spark for conjunction: 0x2518450 spark: 0x88+11413170: cap 0: Start a parallel conjunction 0x25184b0, static_id: 2+11413363: cap 0: Create spark for conjunction: 0x25184b0 spark: 0x89+11413638: cap 0: Start a parallel conjunction 0x2518510, static_id: 2+11413822: cap 0: Create spark for conjunction: 0x2518510 spark: 0x8a+11414218: cap 0: Start a parallel conjunction 0x2518570, static_id: 2+11414461: cap 0: Create spark for conjunction: 0x2518570 spark: 0x8b+11414758: cap 0: Start a parallel conjunction 0x25185d0, static_id: 2+11414938: cap 0: Create spark for conjunction: 0x25185d0 spark: 0x8c+11415213: cap 0: Start a parallel conjunction 0x2518630, static_id: 2+11415415: cap 0: Create spark for conjunction: 0x2518630 spark: 0x8d+11415685: cap 0: Start a parallel conjunction 0x2518690, static_id: 2+11415865: cap 0: Create spark for conjunction: 0x2518690 spark: 0x8e+11416149: cap 0: Start a parallel conjunction 0x25186f0, static_id: 2+11416333: cap 0: Create spark for conjunction: 0x25186f0 spark: 0x8f+11416603: cap 0: Start a parallel conjunction 0x2518750, static_id: 2+11416788: cap 0: Create spark for conjunction: 0x2518750 spark: 0x90+11417067: cap 0: Start a parallel conjunction 0x25187b0, static_id: 2+11417256: cap 0: Create spark for conjunction: 0x25187b0 spark: 0x91+11417530: cap 0: Start a parallel conjunction 0x2518810, static_id: 2+11417715: cap 0: Create spark for conjunction: 0x2518810 spark: 0x92+11418012: cap 0: Start a parallel conjunction 0x2518870, static_id: 2+11418205: cap 0: Create spark for conjunction: 0x2518870 spark: 0x93+11418471: cap 0: Start a parallel conjunction 0x25188d0, static_id: 2+11418669: cap 0: Create spark for conjunction: 0x25188d0 spark: 0x94+11418961: cap 0: Start a parallel conjunction 0x2518930, static_id: 2+11419150: cap 0: Create spark for conjunction: 0x2518930 spark: 0x95+11419434: cap 0: Start a parallel conjunction 0x2518990, static_id: 2+11419618: cap 0: Create spark for conjunction: 0x2518990 spark: 0x96+11419879: cap 0: Start a parallel conjunction 0x25189f0, static_id: 2+11420077: cap 0: Create spark for conjunction: 0x25189f0 spark: 0x97+11420352: cap 0: Start a parallel conjunction 0x2518a50, static_id: 2+11420536: cap 0: Create spark for conjunction: 0x2518a50 spark: 0x98+11420838: cap 0: Start a parallel conjunction 0x2518ab0, static_id: 2+11421036: cap 0: Create spark for conjunction: 0x2518ab0 spark: 0x99+11421315: cap 0: Start a parallel conjunction 0x2518b10, static_id: 2+11421513: cap 0: Create spark for conjunction: 0x2518b10 spark: 0x9a+11421792: cap 0: Start a parallel conjunction 0x2518b70, static_id: 2+11421985: cap 0: Create spark for conjunction: 0x2518b70 spark: 0x9b+11422264: cap 0: Start a parallel conjunction 0x2518bd0, static_id: 2+11422449: cap 0: Create spark for conjunction: 0x2518bd0 spark: 0x9c+11422737: cap 0: Start a parallel conjunction 0x2518c30, static_id: 2+11422939: cap 0: Create spark for conjunction: 0x2518c30 spark: 0x9d+11423209: cap 0: Start a parallel conjunction 0x2518c90, static_id: 2+11423403: cap 0: Create spark for conjunction: 0x2518c90 spark: 0x9e+11423686: cap 0: Start a parallel conjunction 0x2518cf0, static_id: 2+11423871: cap 0: Create spark for conjunction: 0x2518cf0 spark: 0x9f+11424136: cap 0: Start a parallel conjunction 0x2518d50, static_id: 2+11424316: cap 0: Create spark for conjunction: 0x2518d50 spark: 0xa0+11424586: cap 0: Start a parallel conjunction 0x2518db0, static_id: 2+11424780: cap 0: Create spark for conjunction: 0x2518db0 spark: 0xa1+11425050: cap 0: Start a parallel conjunction 0x2518e10, static_id: 2+11425234: cap 0: Create spark for conjunction: 0x2518e10 spark: 0xa2+11425536: cap 0: Start a parallel conjunction 0x2518e70, static_id: 2+11425725: cap 0: Create spark for conjunction: 0x2518e70 spark: 0xa3+11425995: cap 0: Start a parallel conjunction 0x2518ed0, static_id: 2+11426184: cap 0: Create spark for conjunction: 0x2518ed0 spark: 0xa4+11426458: cap 0: Start a parallel conjunction 0x2518f30, static_id: 2+11426643: cap 0: Create spark for conjunction: 0x2518f30 spark: 0xa5+11426935: cap 0: Start a parallel conjunction 0x2518f90, static_id: 2+11427151: cap 0: Create spark for conjunction: 0x2518f90 spark: 0xa6+11427466: cap 0: Start a parallel conjunction 0x2518ff0, static_id: 2+11427673: cap 0: Create spark for conjunction: 0x2518ff0 spark: 0xa7+11427952: cap 0: Start a parallel conjunction 0x2519050, static_id: 2+11428141: cap 0: Create spark for conjunction: 0x2519050 spark: 0xa8+11428429: cap 0: Start a parallel conjunction 0x25190b0, static_id: 2+11428609: cap 0: Create spark for conjunction: 0x25190b0 spark: 0xa9+11428875: cap 0: Start a parallel conjunction 0x2519110, static_id: 2+11429064: cap 0: Create spark for conjunction: 0x2519110 spark: 0xaa+11429365: cap 0: Start a parallel conjunction 0x2519170, static_id: 2+11429554: cap 0: Create spark for conjunction: 0x2519170 spark: 0xab+11429842: cap 0: Start a parallel conjunction 0x25191d0, static_id: 2+11430036: cap 0: Create spark for conjunction: 0x25191d0 spark: 0xac+11430310: cap 0: Start a parallel conjunction 0x2519230, static_id: 2+11430504: cap 0: Create spark for conjunction: 0x2519230 spark: 0xad+11430774: cap 0: Start a parallel conjunction 0x2519290, static_id: 2+11430954: cap 0: Create spark for conjunction: 0x2519290 spark: 0xae+11431246: cap 0: Start a parallel conjunction 0x25192f0, static_id: 2+11431431: cap 0: Create spark for conjunction: 0x25192f0 spark: 0xaf+11431696: cap 0: Start a parallel conjunction 0x2519350, static_id: 2+11431885: cap 0: Create spark for conjunction: 0x2519350 spark: 0xb0+11432164: cap 0: Start a parallel conjunction 0x25193b0, static_id: 2+11432358: cap 0: Create spark for conjunction: 0x25193b0 spark: 0xb1+11432632: cap 0: Start a parallel conjunction 0x2519410, static_id: 2+11432821: cap 0: Create spark for conjunction: 0x2519410 spark: 0xb2+11433213: cap 0: Start a parallel conjunction 0x2519470, static_id: 2+11433406: cap 0: Create spark for conjunction: 0x2519470 spark: 0xb3+11433681: cap 0: Start a parallel conjunction 0x25194d0, static_id: 2+11433892: cap 0: Create spark for conjunction: 0x25194d0 spark: 0xb4+11434185: cap 0: Start a parallel conjunction 0x2519530, static_id: 2+11434378: cap 0: Create spark for conjunction: 0x2519530 spark: 0xb5+11434657: cap 0: Start a parallel conjunction 0x2519590, static_id: 2+11434842: cap 0: Create spark for conjunction: 0x2519590 spark: 0xb6+11435107: cap 0: Start a parallel conjunction 0x25195f0, static_id: 2+11435323: cap 0: Create spark for conjunction: 0x25195f0 spark: 0xb7+11435611: cap 0: Start a parallel conjunction 0x2519650, static_id: 2+11435805: cap 0: Create spark for conjunction: 0x2519650 spark: 0xb8+11436237: cap 0: Start a parallel conjunction 0x25196b0, static_id: 2+11436421: cap 0: Create spark for conjunction: 0x25196b0 spark: 0xb9+11436682: cap 0: Start a parallel conjunction 0x2519710, static_id: 2+11436979: cap 0: Create spark for conjunction: 0x2519710 spark: 0xba+11437285: cap 0: Start a parallel conjunction 0x2519770, static_id: 2+11437488: cap 0: Create spark for conjunction: 0x2519770 spark: 0xbb+11437834: cap 0: Start a parallel conjunction 0x25197d0, static_id: 2+11438028: cap 0: Create spark for conjunction: 0x25197d0 spark: 0xbc+11438311: cap 0: Start a parallel conjunction 0x2519830, static_id: 2+11438500: cap 0: Create spark for conjunction: 0x2519830 spark: 0xbd+11438770: cap 0: Start a parallel conjunction 0x2519890, static_id: 2+11438959: cap 0: Create spark for conjunction: 0x2519890 spark: 0xbe+11439243: cap 0: Start a parallel conjunction 0x25198f0, static_id: 2+11439432: cap 0: Create spark for conjunction: 0x25198f0 spark: 0xbf+11439693: cap 0: Start a parallel conjunction 0x2519950, static_id: 2+11439886: cap 0: Create spark for conjunction: 0x2519950 spark: 0xc0+11440170: cap 0: Start a parallel conjunction 0x25199b0, static_id: 2+11440363: cap 0: Create spark for conjunction: 0x25199b0 spark: 0xc1+11440633: cap 0: Start a parallel conjunction 0x2519a10, static_id: 2+11440818: cap 0: Create spark for conjunction: 0x2519a10 spark: 0xc2+11441097: cap 0: Start a parallel conjunction 0x2519a70, static_id: 2+11441290: cap 0: Create spark for conjunction: 0x2519a70 spark: 0xc3+11441560: cap 0: Start a parallel conjunction 0x2519ad0, static_id: 2+11441749: cap 0: Create spark for conjunction: 0x2519ad0 spark: 0xc4+11442037: cap 0: Start a parallel conjunction 0x2519b30, static_id: 2+11442235: cap 0: Create spark for conjunction: 0x2519b30 spark: 0xc5+11442514: cap 0: Start a parallel conjunction 0x2519b90, static_id: 2+11442699: cap 0: Create spark for conjunction: 0x2519b90 spark: 0xc6+11442964: cap 0: Start a parallel conjunction 0x2519bf0, static_id: 2+11443167: cap 0: Create spark for conjunction: 0x2519bf0 spark: 0xc7+11443446: cap 0: Start a parallel conjunction 0x2519c50, static_id: 2+11443635: cap 0: Create spark for conjunction: 0x2519c50 spark: 0xc8+11444053: cap 0: Start a parallel conjunction 0x2519cb0, static_id: 2+11444251: cap 0: Create spark for conjunction: 0x2519cb0 spark: 0xc9+11444517: cap 0: Start a parallel conjunction 0x2519d10, static_id: 2+11444701: cap 0: Create spark for conjunction: 0x2519d10 spark: 0xca+11444971: cap 0: Start a parallel conjunction 0x2519d70, static_id: 2+11445165: cap 0: Create spark for conjunction: 0x2519d70 spark: 0xcb+11445453: cap 0: Start a parallel conjunction 0x2519dd0, static_id: 2+11445637: cap 0: Create spark for conjunction: 0x2519dd0 spark: 0xcc+11445912: cap 0: Start a parallel conjunction 0x2519e30, static_id: 2+11446101: cap 0: Create spark for conjunction: 0x2519e30 spark: 0xcd+11446380: cap 0: Start a parallel conjunction 0x2519e90, static_id: 2+11446564: cap 0: Create spark for conjunction: 0x2519e90 spark: 0xce+11446848: cap 0: Start a parallel conjunction 0x2519ef0, static_id: 2+11447041: cap 0: Create spark for conjunction: 0x2519ef0 spark: 0xcf+11447316: cap 0: Start a parallel conjunction 0x2519f50, static_id: 2+11447505: cap 0: Create spark for conjunction: 0x2519f50 spark: 0xd0+11447793: cap 0: Start a parallel conjunction 0x2519fb0, static_id: 2+11447991: cap 0: Create spark for conjunction: 0x2519fb0 spark: 0xd1+11448544: cap 0: Start a parallel conjunction 0x251a010, static_id: 2+11448729: cap 0: Create spark for conjunction: 0x251a010 spark: 0xd2+11449026: cap 0: Start a parallel conjunction 0x251a070, static_id: 2+11449206: cap 0: Create spark for conjunction: 0x251a070 spark: 0xd3+11449480: cap 0: Start a parallel conjunction 0x251a0d0, static_id: 2+11449678: cap 0: Create spark for conjunction: 0x251a0d0 spark: 0xd4+11449957: cap 0: Start a parallel conjunction 0x251a130, static_id: 2+11450155: cap 0: Create spark for conjunction: 0x251a130 spark: 0xd5+11450443: cap 0: Start a parallel conjunction 0x251a190, static_id: 2+11450623: cap 0: Create spark for conjunction: 0x251a190 spark: 0xd6+11450884: cap 0: Start a parallel conjunction 0x251a1f0, static_id: 2+11451087: cap 0: Create spark for conjunction: 0x251a1f0 spark: 0xd7+11451370: cap 0: Start a parallel conjunction 0x251a250, static_id: 2+11451555: cap 0: Create spark for conjunction: 0x251a250 spark: 0xd8+11451852: cap 0: Start a parallel conjunction 0x251a2b0, static_id: 2+11452041: cap 0: Create spark for conjunction: 0x251a2b0 spark: 0xd9+11452311: cap 0: Start a parallel conjunction 0x251a310, static_id: 2+11452500: cap 0: Create spark for conjunction: 0x251a310 spark: 0xda+11452779: cap 0: Start a parallel conjunction 0x251a370, static_id: 2+11452968: cap 0: Create spark for conjunction: 0x251a370 spark: 0xdb+11453247: cap 0: Start a parallel conjunction 0x251a3d0, static_id: 2+11453427: cap 0: Create spark for conjunction: 0x251a3d0 spark: 0xdc+11453701: cap 0: Start a parallel conjunction 0x251a430, static_id: 2+11453904: cap 0: Create spark for conjunction: 0x251a430 spark: 0xdd+11454174: cap 0: Start a parallel conjunction 0x251a490, static_id: 2+11454354: cap 0: Create spark for conjunction: 0x251a490 spark: 0xde+11454637: cap 0: Start a parallel conjunction 0x251a4f0, static_id: 2+11454826: cap 0: Create spark for conjunction: 0x251a4f0 spark: 0xdf+11455092: cap 0: Start a parallel conjunction 0x251a550, static_id: 2+11455272: cap 0: Create spark for conjunction: 0x251a550 spark: 0xe0+11455546: cap 0: Start a parallel conjunction 0x251a5b0, static_id: 2+11455731: cap 0: Create spark for conjunction: 0x251a5b0 spark: 0xe1+11456014: cap 0: Start a parallel conjunction 0x251a610, static_id: 2+11456199: cap 0: Create spark for conjunction: 0x251a610 spark: 0xe2+11456487: cap 0: Start a parallel conjunction 0x251a670, static_id: 2+11456676: cap 0: Create spark for conjunction: 0x251a670 spark: 0xe3+11456946: cap 0: Start a parallel conjunction 0x251a6d0, static_id: 2+11457148: cap 0: Create spark for conjunction: 0x251a6d0 spark: 0xe4+11457445: cap 0: Start a parallel conjunction 0x251a730, static_id: 2+11457639: cap 0: Create spark for conjunction: 0x251a730 spark: 0xe5+11457927: cap 0: Start a parallel conjunction 0x251a790, static_id: 2+11458107: cap 0: Create spark for conjunction: 0x251a790 spark: 0xe6+11458372: cap 0: Start a parallel conjunction 0x251a7f0, static_id: 2+11458566: cap 0: Create spark for conjunction: 0x251a7f0 spark: 0xe7+11458836: cap 0: Start a parallel conjunction 0x251a850, static_id: 2+11459020: cap 0: Create spark for conjunction: 0x251a850 spark: 0xe8+11459299: cap 0: Start a parallel conjunction 0x251a8b0, static_id: 2+11459493: cap 0: Create spark for conjunction: 0x251a8b0 spark: 0xe9+11459758: cap 0: Start a parallel conjunction 0x251a910, static_id: 2+11466868: cap 0: Create spark for conjunction: 0x251a910 spark: 0xea+11467057: cap 0: Start a parallel conjunction 0x251a970, static_id: 2+11467179: cap 0: Create spark for conjunction: 0x251a970 spark: 0xeb+11467372: cap 0: Start a parallel conjunction 0x251a9d0, static_id: 2+11467494: cap 0: Create spark for conjunction: 0x251a9d0 spark: 0xec+11467683: cap 0: Start a parallel conjunction 0x251aa30, static_id: 2+11467809: cap 0: Create spark for conjunction: 0x251aa30 spark: 0xed+11467993: cap 0: Start a parallel conjunction 0x251aa90, static_id: 2+11468115: cap 0: Create spark for conjunction: 0x251aa90 spark: 0xee+11468304: cap 0: Start a parallel conjunction 0x251aaf0, static_id: 2+11468434: cap 0: Create spark for conjunction: 0x251aaf0 spark: 0xef+11468619: cap 0: Start a parallel conjunction 0x251ab50, static_id: 2+11468740: cap 0: Create spark for conjunction: 0x251ab50 spark: 0xf0+11468920: cap 0: Start a parallel conjunction 0x251abb0, static_id: 2+11469046: cap 0: Create spark for conjunction: 0x251abb0 spark: 0xf1+11469226: cap 0: Start a parallel conjunction 0x251ac10, static_id: 2+11469348: cap 0: Create spark for conjunction: 0x251ac10 spark: 0xf2+11469532: cap 0: Start a parallel conjunction 0x251ac70, static_id: 2+11469658: cap 0: Create spark for conjunction: 0x251ac70 spark: 0xf3+11469834: cap 0: Start a parallel conjunction 0x251acd0, static_id: 2+11469960: cap 0: Create spark for conjunction: 0x251acd0 spark: 0xf4+11470144: cap 0: Start a parallel conjunction 0x251ad30, static_id: 2+11470270: cap 0: Create spark for conjunction: 0x251ad30 spark: 0xf5+11470464: cap 0: Start a parallel conjunction 0x251ad90, static_id: 2+11470585: cap 0: Create spark for conjunction: 0x251ad90 spark: 0xf6+11470761: cap 0: Start a parallel conjunction 0x251adf0, static_id: 2+11470887: cap 0: Create spark for conjunction: 0x251adf0 spark: 0xf7+11471071: cap 0: Start a parallel conjunction 0x251ae50, static_id: 2+11471193: cap 0: Create spark for conjunction: 0x251ae50 spark: 0xf8+11471391: cap 0: Start a parallel conjunction 0x251aeb0, static_id: 2+11471512: cap 0: Create spark for conjunction: 0x251aeb0 spark: 0xf9+11471692: cap 0: Start a parallel conjunction 0x251af10, static_id: 2+11471818: cap 0: Create spark for conjunction: 0x251af10 spark: 0xfa+11472223: cap 0: Start a parallel conjunction 0x251af70, static_id: 2+11472349: cap 0: Create spark for conjunction: 0x251af70 spark: 0xfb+11472718: cap 0: Start a parallel conjunction 0x251afd0, static_id: 2+11472844: cap 0: Create spark for conjunction: 0x251afd0 spark: 0xfc+11473209: cap 0: Start a parallel conjunction 0x251b030, static_id: 2+11473339: cap 0: Create spark for conjunction: 0x251b030 spark: 0xfd+11473524: cap 0: Start a parallel conjunction 0x251b090, static_id: 2+11473645: cap 0: Create spark for conjunction: 0x251b090 spark: 0xfe+11473834: cap 0: Start a parallel conjunction 0x251b0f0, static_id: 2+11473956: cap 0: Create spark for conjunction: 0x251b0f0 spark: 0xff+11474136: cap 0: Start a parallel conjunction 0x251b150, static_id: 2+11474257: cap 0: Create spark for conjunction: 0x251b150 spark: 0x100+11474446: cap 0: Start a parallel conjunction 0x251b1b0, static_id: 2+11497689: cap 0: Create spark for conjunction: 0x251b1b0 spark: 0x101+11497918: cap 0: Start a parallel conjunction 0x251b210, static_id: 2+11498053: cap 0: Create spark for conjunction: 0x251b210 spark: 0x102+11498256: cap 0: Start a parallel conjunction 0x251b270, static_id: 2+11498391: cap 0: Create spark for conjunction: 0x251b270 spark: 0x103+11498566: cap 0: Start a parallel conjunction 0x251b2d0, static_id: 2+11498742: cap 0: Create spark for conjunction: 0x251b2d0 spark: 0x104+11498926: cap 0: Start a parallel conjunction 0x251b330, static_id: 2+11499057: cap 0: Create spark for conjunction: 0x251b330 spark: 0x105+11499246: cap 0: Start a parallel conjunction 0x251b390, static_id: 2+11499372: cap 0: Create spark for conjunction: 0x251b390 spark: 0x106+11499561: cap 0: Start a parallel conjunction 0x251b3f0, static_id: 2+11499696: cap 0: Create spark for conjunction: 0x251b3f0 spark: 0x107+11499876: cap 0: Start a parallel conjunction 0x251b450, static_id: 2+11500042: cap 0: Create spark for conjunction: 0x251b450 spark: 0x108+11500245: cap 0: Start a parallel conjunction 0x251b4b0, static_id: 2+11500375: cap 0: Create spark for conjunction: 0x251b4b0 spark: 0x109+11500555: cap 0: Start a parallel conjunction 0x251b510, static_id: 2+11500681: cap 0: Create spark for conjunction: 0x251b510 spark: 0x10a+11500866: cap 0: Start a parallel conjunction 0x251b570, static_id: 2+11500987: cap 0: Create spark for conjunction: 0x251b570 spark: 0x10b+11501176: cap 0: Start a parallel conjunction 0x251b5d0, static_id: 2+11501307: cap 0: Create spark for conjunction: 0x251b5d0 spark: 0x10c+11501496: cap 0: Start a parallel conjunction 0x251b630, static_id: 2+11501631: cap 0: Create spark for conjunction: 0x251b630 spark: 0x10d+11501815: cap 0: Start a parallel conjunction 0x251b690, static_id: 2+11501937: cap 0: Create spark for conjunction: 0x251b690 spark: 0x10e+11502135: cap 0: Start a parallel conjunction 0x251b6f0, static_id: 2+11502274: cap 0: Create spark for conjunction: 0x251b6f0 spark: 0x10f+11502445: cap 0: Start a parallel conjunction 0x251b750, static_id: 2+11502567: cap 0: Create spark for conjunction: 0x251b750 spark: 0x110+11502769: cap 0: Start a parallel conjunction 0x251b7b0, static_id: 2+11502895: cap 0: Create spark for conjunction: 0x251b7b0 spark: 0x111+11503075: cap 0: Start a parallel conjunction 0x251b810, static_id: 2+11503192: cap 0: Create spark for conjunction: 0x251b810 spark: 0x112+11503377: cap 0: Start a parallel conjunction 0x251b870, static_id: 2+11503507: cap 0: Create spark for conjunction: 0x251b870 spark: 0x113+11503687: cap 0: Start a parallel conjunction 0x251b8d0, static_id: 2+11503818: cap 0: Create spark for conjunction: 0x251b8d0 spark: 0x114+11504007: cap 0: Start a parallel conjunction 0x251b930, static_id: 2+11504137: cap 0: Create spark for conjunction: 0x251b930 spark: 0x115+11504470: cap 0: Start a parallel conjunction 0x251b990, static_id: 2+11504592: cap 0: Create spark for conjunction: 0x251b990 spark: 0x116+11504790: cap 0: Start a parallel conjunction 0x251b9f0, static_id: 2+11505217: cap 0: Create spark for conjunction: 0x251b9f0 spark: 0x117+11505402: cap 0: Start a parallel conjunction 0x251ba50, static_id: 2+11505523: cap 0: Create spark for conjunction: 0x251ba50 spark: 0x118+11505721: cap 0: Start a parallel conjunction 0x251bab0, static_id: 2+11505852: cap 0: Create spark for conjunction: 0x251bab0 spark: 0x119+11506041: cap 0: Start a parallel conjunction 0x251bb10, static_id: 2+11506167: cap 0: Create spark for conjunction: 0x251bb10 spark: 0x11a+11506369: cap 0: Start a parallel conjunction 0x251bb70, static_id: 2+11506500: cap 0: Create spark for conjunction: 0x251bb70 spark: 0x11b+11506689: cap 0: Start a parallel conjunction 0x251bbd0, static_id: 2+11506810: cap 0: Create spark for conjunction: 0x251bbd0 spark: 0x11c+11506990: cap 0: Start a parallel conjunction 0x251bc30, static_id: 2+11507130: cap 0: Create spark for conjunction: 0x251bc30 spark: 0x11d+11507310: cap 0: Start a parallel conjunction 0x251bc90, static_id: 2+11507431: cap 0: Create spark for conjunction: 0x251bc90 spark: 0x11e+11507620: cap 0: Start a parallel conjunction 0x251bcf0, static_id: 2+11507751: cap 0: Create spark for conjunction: 0x251bcf0 spark: 0x11f+11507926: cap 0: Start a parallel conjunction 0x251bd50, static_id: 2+11508052: cap 0: Create spark for conjunction: 0x251bd50 spark: 0x120+11508237: cap 0: Start a parallel conjunction 0x251bdb0, static_id: 2+11508363: cap 0: Create spark for conjunction: 0x251bdb0 spark: 0x121+11508556: cap 0: Start a parallel conjunction 0x251be10, static_id: 2+11508682: cap 0: Create spark for conjunction: 0x251be10 spark: 0x122+11508889: cap 0: Start a parallel conjunction 0x251be70, static_id: 2+11509020: cap 0: Create spark for conjunction: 0x251be70 spark: 0x123+11509200: cap 0: Start a parallel conjunction 0x251bed0, static_id: 2+11509326: cap 0: Create spark for conjunction: 0x251bed0 spark: 0x124+11509510: cap 0: Start a parallel conjunction 0x251bf30, static_id: 2+11509636: cap 0: Create spark for conjunction: 0x251bf30 spark: 0x125+11509929: cap 0: Start a parallel conjunction 0x251bf90, static_id: 2+11510050: cap 0: Create spark for conjunction: 0x251bf90 spark: 0x126+11510361: cap 0: Start a parallel conjunction 0x251bff0, static_id: 2+11510496: cap 0: Create spark for conjunction: 0x251bff0 spark: 0x127+11510685: cap 0: Start a parallel conjunction 0x251c050, static_id: 2+11510811: cap 0: Create spark for conjunction: 0x251c050 spark: 0x128+11511000: cap 0: Start a parallel conjunction 0x251c0b0, static_id: 2+11511126: cap 0: Create spark for conjunction: 0x251c0b0 spark: 0x129+11511301: cap 0: Start a parallel conjunction 0x251c110, static_id: 2+11511427: cap 0: Create spark for conjunction: 0x251c110 spark: 0x12a+11511612: cap 0: Start a parallel conjunction 0x251c170, static_id: 2+11511733: cap 0: Create spark for conjunction: 0x251c170 spark: 0x12b+11511918: cap 0: Start a parallel conjunction 0x251c1d0, static_id: 2+11512039: cap 0: Create spark for conjunction: 0x251c1d0 spark: 0x12c+11512219: cap 0: Start a parallel conjunction 0x251c230, static_id: 2+11512345: cap 0: Create spark for conjunction: 0x251c230 spark: 0x12d+11512530: cap 0: Start a parallel conjunction 0x251c290, static_id: 2+11512647: cap 0: Create spark for conjunction: 0x251c290 spark: 0x12e+11512939: cap 0: Start a parallel conjunction 0x251c2f0, static_id: 2+11513061: cap 0: Create spark for conjunction: 0x251c2f0 spark: 0x12f+11513232: cap 0: Start a parallel conjunction 0x251c350, static_id: 2+11513353: cap 0: Create spark for conjunction: 0x251c350 spark: 0x130+11513538: cap 0: Start a parallel conjunction 0x251c3b0, static_id: 2+11513664: cap 0: Create spark for conjunction: 0x251c3b0 spark: 0x131+11513839: cap 0: Start a parallel conjunction 0x251c410, static_id: 2+11513961: cap 0: Create spark for conjunction: 0x251c410 spark: 0x132+11514267: cap 0: Start a parallel conjunction 0x251c470, static_id: 2+11514397: cap 0: Create spark for conjunction: 0x251c470 spark: 0x133+11514568: cap 0: Start a parallel conjunction 0x251c4d0, static_id: 2+11514699: cap 0: Create spark for conjunction: 0x251c4d0 spark: 0x134+11514892: cap 0: Start a parallel conjunction 0x251c530, static_id: 2+11515027: cap 0: Create spark for conjunction: 0x251c530 spark: 0x135+11515225: cap 0: Start a parallel conjunction 0x251c590, static_id: 2+11515351: cap 0: Create spark for conjunction: 0x251c590 spark: 0x136+11515531: cap 0: Start a parallel conjunction 0x251c5f0, static_id: 2+11515662: cap 0: Create spark for conjunction: 0x251c5f0 spark: 0x137+11515846: cap 0: Start a parallel conjunction 0x251c650, static_id: 2+11515972: cap 0: Create spark for conjunction: 0x251c650 spark: 0x138+11516175: cap 0: Start a parallel conjunction 0x251c6b0, static_id: 2+11516296: cap 0: Create spark for conjunction: 0x251c6b0 spark: 0x139+11516476: cap 0: Start a parallel conjunction 0x251c710, static_id: 2+11516598: cap 0: Create spark for conjunction: 0x251c710 spark: 0x13a+11516782: cap 0: Start a parallel conjunction 0x251c770, static_id: 2+11516908: cap 0: Create spark for conjunction: 0x251c770 spark: 0x13b+11517093: cap 0: Start a parallel conjunction 0x251c7d0, static_id: 2+11517214: cap 0: Create spark for conjunction: 0x251c7d0 spark: 0x13c+11517394: cap 0: Start a parallel conjunction 0x251c830, static_id: 2+11517529: cap 0: Create spark for conjunction: 0x251c830 spark: 0x13d+11517705: cap 0: Start a parallel conjunction 0x251c890, static_id: 2+11517826: cap 0: Create spark for conjunction: 0x251c890 spark: 0x13e+11518011: cap 0: Start a parallel conjunction 0x251c8f0, static_id: 2+11518141: cap 0: Create spark for conjunction: 0x251c8f0 spark: 0x13f+11518317: cap 0: Start a parallel conjunction 0x251c950, static_id: 2+11518443: cap 0: Create spark for conjunction: 0x251c950 spark: 0x140+11518627: cap 0: Start a parallel conjunction 0x251c9b0, static_id: 2+11518758: cap 0: Create spark for conjunction: 0x251c9b0 spark: 0x141+11518942: cap 0: Start a parallel conjunction 0x251ca10, static_id: 2+11519068: cap 0: Create spark for conjunction: 0x251ca10 spark: 0x142+11519257: cap 0: Start a parallel conjunction 0x251ca70, static_id: 2+11519383: cap 0: Create spark for conjunction: 0x251ca70 spark: 0x143+11519563: cap 0: Start a parallel conjunction 0x251cad0, static_id: 2+11519694: cap 0: Create spark for conjunction: 0x251cad0 spark: 0x144+11519878: cap 0: Start a parallel conjunction 0x251cb30, static_id: 2+11520009: cap 0: Create spark for conjunction: 0x251cb30 spark: 0x145+11520198: cap 0: Start a parallel conjunction 0x251cb90, static_id: 2+11520319: cap 0: Create spark for conjunction: 0x251cb90 spark: 0x146+11520490: cap 0: Start a parallel conjunction 0x251cbf0, static_id: 2+11520621: cap 0: Create spark for conjunction: 0x251cbf0 spark: 0x147+11520801: cap 0: Start a parallel conjunction 0x251cc50, static_id: 2+11520922: cap 0: Create spark for conjunction: 0x251cc50 spark: 0x148+11521111: cap 0: Start a parallel conjunction 0x251ccb0, static_id: 2+11521251: cap 0: Create spark for conjunction: 0x251ccb0 spark: 0x149+11521422: cap 0: Start a parallel conjunction 0x251cd10, static_id: 2+11521548: cap 0: Create spark for conjunction: 0x251cd10 spark: 0x14a+11521741: cap 0: Start a parallel conjunction 0x251cd70, static_id: 2+11521876: cap 0: Create spark for conjunction: 0x251cd70 spark: 0x14b+11522065: cap 0: Start a parallel conjunction 0x251cdd0, static_id: 2+11522187: cap 0: Create spark for conjunction: 0x251cdd0 spark: 0x14c+11522371: cap 0: Start a parallel conjunction 0x251ce30, static_id: 2+11522506: cap 0: Create spark for conjunction: 0x251ce30 spark: 0x14d+11522686: cap 0: Start a parallel conjunction 0x251ce90, static_id: 2+11522808: cap 0: Create spark for conjunction: 0x251ce90 spark: 0x14e+11522992: cap 0: Start a parallel conjunction 0x251cef0, static_id: 2+11523118: cap 0: Create spark for conjunction: 0x251cef0 spark: 0x14f+11523298: cap 0: Start a parallel conjunction 0x251cf50, static_id: 2+11523424: cap 0: Create spark for conjunction: 0x251cf50 spark: 0x150+11523609: cap 0: Start a parallel conjunction 0x251cfb0, static_id: 2+11523739: cap 0: Create spark for conjunction: 0x251cfb0 spark: 0x151+11524059: cap 0: Start a parallel conjunction 0x251d010, static_id: 2+11524180: cap 0: Create spark for conjunction: 0x251d010 spark: 0x152+11524378: cap 0: Start a parallel conjunction 0x251d070, static_id: 2+11524518: cap 0: Create spark for conjunction: 0x251d070 spark: 0x153+11524698: cap 0: Start a parallel conjunction 0x251d0d0, static_id: 2+11524828: cap 0: Create spark for conjunction: 0x251d0d0 spark: 0x154+11525013: cap 0: Start a parallel conjunction 0x251d130, static_id: 2+11525134: cap 0: Create spark for conjunction: 0x251d130 spark: 0x155+11525319: cap 0: Start a parallel conjunction 0x251d190, static_id: 2+11525449: cap 0: Create spark for conjunction: 0x251d190 spark: 0x156+11525625: cap 0: Start a parallel conjunction 0x251d1f0, static_id: 2+11525760: cap 0: Create spark for conjunction: 0x251d1f0 spark: 0x157+11525940: cap 0: Start a parallel conjunction 0x251d250, static_id: 2+11526061: cap 0: Create spark for conjunction: 0x251d250 spark: 0x158+11526250: cap 0: Start a parallel conjunction 0x251d2b0, static_id: 2+11526381: cap 0: Create spark for conjunction: 0x251d2b0 spark: 0x159+11526556: cap 0: Start a parallel conjunction 0x251d310, static_id: 2+11526678: cap 0: Create spark for conjunction: 0x251d310 spark: 0x15a+11527038: cap 0: Start a parallel conjunction 0x251d370, static_id: 2+11527168: cap 0: Create spark for conjunction: 0x251d370 spark: 0x15b+11527357: cap 0: Start a parallel conjunction 0x251d3d0, static_id: 2+11527479: cap 0: Create spark for conjunction: 0x251d3d0 spark: 0x15c+11527659: cap 0: Start a parallel conjunction 0x251d430, static_id: 2+11527794: cap 0: Create spark for conjunction: 0x251d430 spark: 0x15d+11527974: cap 0: Start a parallel conjunction 0x251d490, static_id: 2+11528095: cap 0: Create spark for conjunction: 0x251d490 spark: 0x15e+11528293: cap 0: Start a parallel conjunction 0x251d4f0, static_id: 2+11528424: cap 0: Create spark for conjunction: 0x251d4f0 spark: 0x15f+11528608: cap 0: Start a parallel conjunction 0x251d550, static_id: 2+11528730: cap 0: Create spark for conjunction: 0x251d550 spark: 0x160+11528914: cap 0: Start a parallel conjunction 0x251d5b0, static_id: 2+11529049: cap 0: Create spark for conjunction: 0x251d5b0 spark: 0x161+11529234: cap 0: Start a parallel conjunction 0x251d610, static_id: 2+11529355: cap 0: Create spark for conjunction: 0x251d610 spark: 0x162+11529567: cap 0: Start a parallel conjunction 0x251d670, static_id: 2+11529693: cap 0: Create spark for conjunction: 0x251d670 spark: 0x163+11529877: cap 0: Start a parallel conjunction 0x251d6d0, static_id: 2+11530003: cap 0: Create spark for conjunction: 0x251d6d0 spark: 0x164+11530197: cap 0: Start a parallel conjunction 0x251d730, static_id: 2+11530323: cap 0: Create spark for conjunction: 0x251d730 spark: 0x165+11530512: cap 0: Start a parallel conjunction 0x251d790, static_id: 2+11530633: cap 0: Create spark for conjunction: 0x251d790 spark: 0x166+11530809: cap 0: Start a parallel conjunction 0x251d7f0, static_id: 2+11530944: cap 0: Create spark for conjunction: 0x251d7f0 spark: 0x167+11531124: cap 0: Start a parallel conjunction 0x251d850, static_id: 2+11531245: cap 0: Create spark for conjunction: 0x251d850 spark: 0x168+11531430: cap 0: Start a parallel conjunction 0x251d8b0, static_id: 2+11531556: cap 0: Create spark for conjunction: 0x251d8b0 spark: 0x169+11531731: cap 0: Start a parallel conjunction 0x251d910, static_id: 2+11531853: cap 0: Create spark for conjunction: 0x251d910 spark: 0x16a+11532033: cap 0: Start a parallel conjunction 0x251d970, static_id: 2+11532163: cap 0: Create spark for conjunction: 0x251d970 spark: 0x16b+11532348: cap 0: Start a parallel conjunction 0x251d9d0, static_id: 2+11532469: cap 0: Create spark for conjunction: 0x251d9d0 spark: 0x16c+11532649: cap 0: Start a parallel conjunction 0x251da30, static_id: 2+11532784: cap 0: Create spark for conjunction: 0x251da30 spark: 0x16d+11532969: cap 0: Start a parallel conjunction 0x251da90, static_id: 2+11533090: cap 0: Create spark for conjunction: 0x251da90 spark: 0x16e+11533279: cap 0: Start a parallel conjunction 0x251daf0, static_id: 2+11533405: cap 0: Create spark for conjunction: 0x251daf0 spark: 0x16f+11533590: cap 0: Start a parallel conjunction 0x251db50, static_id: 2+11533711: cap 0: Create spark for conjunction: 0x251db50 spark: 0x170+11533887: cap 0: Start a parallel conjunction 0x251dbb0, static_id: 2+11534017: cap 0: Create spark for conjunction: 0x251dbb0 spark: 0x171+11534202: cap 0: Start a parallel conjunction 0x251dc10, static_id: 2+11534323: cap 0: Create spark for conjunction: 0x251dc10 spark: 0x172+11534656: cap 0: Start a parallel conjunction 0x251dc70, static_id: 2+11534787: cap 0: Create spark for conjunction: 0x251dc70 spark: 0x173+11534962: cap 0: Start a parallel conjunction 0x251dcd0, static_id: 2+11535309: cap 0: Create spark for conjunction: 0x251dcd0 spark: 0x174+11535507: cap 0: Start a parallel conjunction 0x251dd30, static_id: 2+11535633: cap 0: Create spark for conjunction: 0x251dd30 spark: 0x175+11535817: cap 0: Start a parallel conjunction 0x251dd90, static_id: 2+11535939: cap 0: Create spark for conjunction: 0x251dd90 spark: 0x176+11536114: cap 0: Start a parallel conjunction 0x251ddf0, static_id: 2+11536249: cap 0: Create spark for conjunction: 0x251ddf0 spark: 0x177+11536443: cap 0: Start a parallel conjunction 0x251de50, static_id: 2+11536569: cap 0: Create spark for conjunction: 0x251de50 spark: 0x178+11536771: cap 0: Start a parallel conjunction 0x251deb0, static_id: 2+11536902: cap 0: Create spark for conjunction: 0x251deb0 spark: 0x179+11537091: cap 0: Start a parallel conjunction 0x251df10, static_id: 2+11537212: cap 0: Create spark for conjunction: 0x251df10 spark: 0x17a+11537397: cap 0: Start a parallel conjunction 0x251df70, static_id: 2+11537523: cap 0: Create spark for conjunction: 0x251df70 spark: 0x17b+11537820: cap 0: Start a parallel conjunction 0x251dfd0, static_id: 2+11537941: cap 0: Create spark for conjunction: 0x251dfd0 spark: 0x17c+11538261: cap 0: Start a parallel conjunction 0x251e030, static_id: 2+11538396: cap 0: Create spark for conjunction: 0x251e030 spark: 0x17d+11538576: cap 0: Start a parallel conjunction 0x251e090, static_id: 2+11538697: cap 0: Create spark for conjunction: 0x251e090 spark: 0x17e+11538882: cap 0: Start a parallel conjunction 0x251e0f0, static_id: 2+11539012: cap 0: Create spark for conjunction: 0x251e0f0 spark: 0x17f+11539188: cap 0: Start a parallel conjunction 0x251e150, static_id: 2+11539314: cap 0: Create spark for conjunction: 0x251e150 spark: 0x180+11539507: cap 0: Start a parallel conjunction 0x251e1b0, static_id: 2+11539638: cap 0: Create spark for conjunction: 0x251e1b0 spark: 0x181+11539822: cap 0: Start a parallel conjunction 0x251e210, static_id: 2+11539944: cap 0: Create spark for conjunction: 0x251e210 spark: 0x182+11540137: cap 0: Start a parallel conjunction 0x251e270, static_id: 2+11540272: cap 0: Create spark for conjunction: 0x251e270 spark: 0x183+11540448: cap 0: Start a parallel conjunction 0x251e2d0, static_id: 2+11540614: cap 0: Create spark for conjunction: 0x251e2d0 spark: 0x184+11540803: cap 0: Start a parallel conjunction 0x251e330, static_id: 2+11540929: cap 0: Create spark for conjunction: 0x251e330 spark: 0x185+11541118: cap 0: Start a parallel conjunction 0x251e390, static_id: 2+11541240: cap 0: Create spark for conjunction: 0x251e390 spark: 0x186+11541577: cap 0: Start a parallel conjunction 0x251e3f0, static_id: 2+11541712: cap 0: Create spark for conjunction: 0x251e3f0 spark: 0x187+11541897: cap 0: Start a parallel conjunction 0x251e450, static_id: 2+11542059: cap 0: Create spark for conjunction: 0x251e450 spark: 0x188+11542261: cap 0: Start a parallel conjunction 0x251e4b0, static_id: 2+11542383: cap 0: Create spark for conjunction: 0x251e4b0 spark: 0x189+11542558: cap 0: Start a parallel conjunction 0x251e510, static_id: 2+11542680: cap 0: Create spark for conjunction: 0x251e510 spark: 0x18a+11542864: cap 0: Start a parallel conjunction 0x251e570, static_id: 2+11542990: cap 0: Create spark for conjunction: 0x251e570 spark: 0x18b+11543175: cap 0: Start a parallel conjunction 0x251e5d0, static_id: 2+11543296: cap 0: Create spark for conjunction: 0x251e5d0 spark: 0x18c+11543476: cap 0: Start a parallel conjunction 0x251e630, static_id: 2+11543620: cap 0: Create spark for conjunction: 0x251e630 spark: 0x18d+11543800: cap 0: Start a parallel conjunction 0x251e690, static_id: 2+11543922: cap 0: Create spark for conjunction: 0x251e690 spark: 0x18e+11544111: cap 0: Start a parallel conjunction 0x251e6f0, static_id: 2+11544241: cap 0: Create spark for conjunction: 0x251e6f0 spark: 0x18f+11544417: cap 0: Start a parallel conjunction 0x251e750, static_id: 2+11544547: cap 0: Create spark for conjunction: 0x251e750 spark: 0x190+11544732: cap 0: Start a parallel conjunction 0x251e7b0, static_id: 2+11544858: cap 0: Create spark for conjunction: 0x251e7b0 spark: 0x191+11545042: cap 0: Start a parallel conjunction 0x251e810, static_id: 2+11545164: cap 0: Create spark for conjunction: 0x251e810 spark: 0x192+11545353: cap 0: Start a parallel conjunction 0x251e870, static_id: 2+11545479: cap 0: Create spark for conjunction: 0x251e870 spark: 0x193+11545659: cap 0: Start a parallel conjunction 0x251e8d0, static_id: 2+11545785: cap 0: Create spark for conjunction: 0x251e8d0 spark: 0x194+11545974: cap 0: Start a parallel conjunction 0x251e930, static_id: 2+11546100: cap 0: Create spark for conjunction: 0x251e930 spark: 0x195+11546293: cap 0: Start a parallel conjunction 0x251e990, static_id: 2+11546415: cap 0: Create spark for conjunction: 0x251e990 spark: 0x196+11546590: cap 0: Start a parallel conjunction 0x251e9f0, static_id: 2+11546725: cap 0: Create spark for conjunction: 0x251e9f0 spark: 0x197+11546910: cap 0: Start a parallel conjunction 0x251ea50, static_id: 2+11547036: cap 0: Create spark for conjunction: 0x251ea50 spark: 0x198+11547243: cap 0: Start a parallel conjunction 0x251eab0, static_id: 2+11547378: cap 0: Create spark for conjunction: 0x251eab0 spark: 0x199+11547562: cap 0: Start a parallel conjunction 0x251eb10, static_id: 2+11547684: cap 0: Create spark for conjunction: 0x251eb10 spark: 0x19a+11547868: cap 0: Start a parallel conjunction 0x251eb70, static_id: 2+11547990: cap 0: Create spark for conjunction: 0x251eb70 spark: 0x19b+11548174: cap 0: Start a parallel conjunction 0x251ebd0, static_id: 2+11548296: cap 0: Create spark for conjunction: 0x251ebd0 spark: 0x19c+11548476: cap 0: Start a parallel conjunction 0x251ec30, static_id: 2+11548602: cap 0: Create spark for conjunction: 0x251ec30 spark: 0x19d+11548782: cap 0: Start a parallel conjunction 0x251ec90, static_id: 2+11548903: cap 0: Create spark for conjunction: 0x251ec90 spark: 0x19e+11549092: cap 0: Start a parallel conjunction 0x251ecf0, static_id: 2+11549223: cap 0: Create spark for conjunction: 0x251ecf0 spark: 0x19f+11549403: cap 0: Start a parallel conjunction 0x251ed50, static_id: 2+11549524: cap 0: Create spark for conjunction: 0x251ed50 spark: 0x1a0+11549709: cap 0: Start a parallel conjunction 0x251edb0, static_id: 2+11549839: cap 0: Create spark for conjunction: 0x251edb0 spark: 0x1a1+11550019: cap 0: Start a parallel conjunction 0x251ee10, static_id: 2+11550141: cap 0: Create spark for conjunction: 0x251ee10 spark: 0x1a2+11550330: cap 0: Start a parallel conjunction 0x251ee70, static_id: 2+11550465: cap 0: Create spark for conjunction: 0x251ee70 spark: 0x1a3+11550658: cap 0: Start a parallel conjunction 0x251eed0, static_id: 2+11550784: cap 0: Create spark for conjunction: 0x251eed0 spark: 0x1a4+11550982: cap 0: Start a parallel conjunction 0x251ef30, static_id: 2+11551108: cap 0: Create spark for conjunction: 0x251ef30 spark: 0x1a5+11551293: cap 0: Start a parallel conjunction 0x251ef90, static_id: 2+11551419: cap 0: Create spark for conjunction: 0x251ef90 spark: 0x1a6+11551752: cap 0: Start a parallel conjunction 0x251eff0, static_id: 2+11551887: cap 0: Create spark for conjunction: 0x251eff0 spark: 0x1a7+11552076: cap 0: Start a parallel conjunction 0x251f050, static_id: 2+11552197: cap 0: Create spark for conjunction: 0x251f050 spark: 0x1a8+11552386: cap 0: Start a parallel conjunction 0x251f0b0, static_id: 2+11552517: cap 0: Create spark for conjunction: 0x251f0b0 spark: 0x1a9+11552755: cap 0: Start a parallel conjunction 0x251f110, static_id: 2+11552886: cap 0: Create spark for conjunction: 0x251f110 spark: 0x1aa+11553066: cap 0: Start a parallel conjunction 0x251f170, static_id: 2+11553196: cap 0: Create spark for conjunction: 0x251f170 spark: 0x1ab+11553390: cap 0: Start a parallel conjunction 0x251f1d0, static_id: 2+11553511: cap 0: Create spark for conjunction: 0x251f1d0 spark: 0x1ac+11553696: cap 0: Start a parallel conjunction 0x251f230, static_id: 2+11553835: cap 0: Create spark for conjunction: 0x251f230 spark: 0x1ad+11554015: cap 0: Start a parallel conjunction 0x251f290, static_id: 2+11554146: cap 0: Create spark for conjunction: 0x251f290 spark: 0x1ae+11554330: cap 0: Start a parallel conjunction 0x251f2f0, static_id: 2+11554465: cap 0: Create spark for conjunction: 0x251f2f0 spark: 0x1af+11554645: cap 0: Start a parallel conjunction 0x251f350, static_id: 2+11554767: cap 0: Create spark for conjunction: 0x251f350 spark: 0x1b0+11554956: cap 0: Start a parallel conjunction 0x251f3b0, static_id: 2+11555082: cap 0: Create spark for conjunction: 0x251f3b0 spark: 0x1b1+11555262: cap 0: Start a parallel conjunction 0x251f410, static_id: 2+11555383: cap 0: Create spark for conjunction: 0x251f410 spark: 0x1b2+11555662: cap 0: Start a parallel conjunction 0x251f470, static_id: 2+11555788: cap 0: Create spark for conjunction: 0x251f470 spark: 0x1b3+11555964: cap 0: Start a parallel conjunction 0x251f4d0, static_id: 2+11556090: cap 0: Create spark for conjunction: 0x251f4d0 spark: 0x1b4+11556270: cap 0: Start a parallel conjunction 0x251f530, static_id: 2+11556391: cap 0: Create spark for conjunction: 0x251f530 spark: 0x1b5+11556576: cap 0: Start a parallel conjunction 0x251f590, static_id: 2+11556697: cap 0: Create spark for conjunction: 0x251f590 spark: 0x1b6+11556877: cap 0: Start a parallel conjunction 0x251f5f0, static_id: 2+11557008: cap 0: Create spark for conjunction: 0x251f5f0 spark: 0x1b7+11557188: cap 0: Start a parallel conjunction 0x251f650, static_id: 2+11557309: cap 0: Create spark for conjunction: 0x251f650 spark: 0x1b8+11557503: cap 0: Start a parallel conjunction 0x251f6b0, static_id: 2+11557638: cap 0: Create spark for conjunction: 0x251f6b0 spark: 0x1b9+11557818: cap 0: Start a parallel conjunction 0x251f710, static_id: 2+11557944: cap 0: Create spark for conjunction: 0x251f710 spark: 0x1ba+11558137: cap 0: Start a parallel conjunction 0x251f770, static_id: 2+11558268: cap 0: Create spark for conjunction: 0x251f770 spark: 0x1bb+11558452: cap 0: Start a parallel conjunction 0x251f7d0, static_id: 2+11558578: cap 0: Create spark for conjunction: 0x251f7d0 spark: 0x1bc+11558754: cap 0: Start a parallel conjunction 0x251f830, static_id: 2+11558893: cap 0: Create spark for conjunction: 0x251f830 spark: 0x1bd+11559069: cap 0: Start a parallel conjunction 0x251f890, static_id: 2+11559190: cap 0: Create spark for conjunction: 0x251f890 spark: 0x1be+11559375: cap 0: Start a parallel conjunction 0x251f8f0, static_id: 2+11559505: cap 0: Create spark for conjunction: 0x251f8f0 spark: 0x1bf+11559681: cap 0: Start a parallel conjunction 0x251f950, static_id: 2+11559802: cap 0: Create spark for conjunction: 0x251f950 spark: 0x1c0+11559982: cap 0: Start a parallel conjunction 0x251f9b0, static_id: 2+11560099: cap 0: Create spark for conjunction: 0x251f9b0 spark: 0x1c1+11560279: cap 0: Start a parallel conjunction 0x251fa10, static_id: 2+11560396: cap 0: Create spark for conjunction: 0x251fa10 spark: 0x1c2+11560581: cap 0: Start a parallel conjunction 0x251fa70, static_id: 2+11560711: cap 0: Create spark for conjunction: 0x251fa70 spark: 0x1c3+11560896: cap 0: Start a parallel conjunction 0x251fad0, static_id: 2+11561026: cap 0: Create spark for conjunction: 0x251fad0 spark: 0x1c4+11561215: cap 0: Start a parallel conjunction 0x251fb30, static_id: 2+11561350: cap 0: Create spark for conjunction: 0x251fb30 spark: 0x1c5+11561539: cap 0: Start a parallel conjunction 0x251fb90, static_id: 2+11561665: cap 0: Create spark for conjunction: 0x251fb90 spark: 0x1c6+11561836: cap 0: Start a parallel conjunction 0x251fbf0, static_id: 2+11561971: cap 0: Create spark for conjunction: 0x251fbf0 spark: 0x1c7+11562151: cap 0: Start a parallel conjunction 0x251fc50, static_id: 2+11562277: cap 0: Create spark for conjunction: 0x251fc50 spark: 0x1c8+11562466: cap 0: Start a parallel conjunction 0x251fcb0, static_id: 2+11562606: cap 0: Create spark for conjunction: 0x251fcb0 spark: 0x1c9+11562781: cap 0: Start a parallel conjunction 0x251fd10, static_id: 2+11562907: cap 0: Create spark for conjunction: 0x251fd10 spark: 0x1ca+11563087: cap 0: Start a parallel conjunction 0x251fd70, static_id: 2+11563209: cap 0: Create spark for conjunction: 0x251fd70 spark: 0x1cb+11563402: cap 0: Start a parallel conjunction 0x251fdd0, static_id: 2+11563524: cap 0: Create spark for conjunction: 0x251fdd0 spark: 0x1cc+11563713: cap 0: Start a parallel conjunction 0x251fe30, static_id: 2+11563848: cap 0: Create spark for conjunction: 0x251fe30 spark: 0x1cd+11564032: cap 0: Start a parallel conjunction 0x251fe90, static_id: 2+11564154: cap 0: Create spark for conjunction: 0x251fe90 spark: 0x1ce+11564338: cap 0: Start a parallel conjunction 0x251fef0, static_id: 2+11564469: cap 0: Create spark for conjunction: 0x251fef0 spark: 0x1cf+11564640: cap 0: Start a parallel conjunction 0x251ff50, static_id: 2+11564874: cap 0: Create spark for conjunction: 0x251ff50 spark: 0x1d0+11565175: cap 0: Start a parallel conjunction 0x251ffb0, static_id: 2+11565301: cap 0: Create spark for conjunction: 0x251ffb0 spark: 0x1d1+11565711: cap 0: Start a parallel conjunction 0x2520010, static_id: 2+11565832: cap 0: Create spark for conjunction: 0x2520010 spark: 0x1d2+11566026: cap 0: Start a parallel conjunction 0x2520070, static_id: 2+11566152: cap 0: Create spark for conjunction: 0x2520070 spark: 0x1d3+11566327: cap 0: Start a parallel conjunction 0x25200d0, static_id: 2+11566453: cap 0: Create spark for conjunction: 0x25200d0 spark: 0x1d4+11566638: cap 0: Start a parallel conjunction 0x2520130, static_id: 2+11566768: cap 0: Create spark for conjunction: 0x2520130 spark: 0x1d5+11566966: cap 0: Start a parallel conjunction 0x2520190, static_id: 2+11567088: cap 0: Create spark for conjunction: 0x2520190 spark: 0x1d6+11567461: cap 0: Start a parallel conjunction 0x25201f0, static_id: 2+11567596: cap 0: Create spark for conjunction: 0x25201f0 spark: 0x1d7+11567781: cap 0: Start a parallel conjunction 0x2520250, static_id: 2+11567907: cap 0: Create spark for conjunction: 0x2520250 spark: 0x1d8+11568105: cap 0: Start a parallel conjunction 0x25202b0, static_id: 2+11568226: cap 0: Create spark for conjunction: 0x25202b0 spark: 0x1d9+11568397: cap 0: Start a parallel conjunction 0x2520310, static_id: 2+11568523: cap 0: Create spark for conjunction: 0x2520310 spark: 0x1da+11568708: cap 0: Start a parallel conjunction 0x2520370, static_id: 2+11568834: cap 0: Create spark for conjunction: 0x2520370 spark: 0x1db+11569018: cap 0: Start a parallel conjunction 0x25203d0, static_id: 2+11569140: cap 0: Create spark for conjunction: 0x25203d0 spark: 0x1dc+11569320: cap 0: Start a parallel conjunction 0x2520430, static_id: 2+11569455: cap 0: Create spark for conjunction: 0x2520430 spark: 0x1dd+11569630: cap 0: Start a parallel conjunction 0x2520490, static_id: 2+11569752: cap 0: Create spark for conjunction: 0x2520490 spark: 0x1de+11569936: cap 0: Start a parallel conjunction 0x25204f0, static_id: 2+11570067: cap 0: Create spark for conjunction: 0x25204f0 spark: 0x1df+11570242: cap 0: Start a parallel conjunction 0x2520550, static_id: 2+11570364: cap 0: Create spark for conjunction: 0x2520550 spark: 0x1e0+11570544: cap 0: Start a parallel conjunction 0x25205b0, static_id: 2+11570670: cap 0: Create spark for conjunction: 0x25205b0 spark: 0x1e1+11570850: cap 0: Start a parallel conjunction 0x2520610, static_id: 2+11570971: cap 0: Create spark for conjunction: 0x2520610 spark: 0x1e2+11571160: cap 0: Start a parallel conjunction 0x2520670, static_id: 2+11571295: cap 0: Create spark for conjunction: 0x2520670 spark: 0x1e3+11571466: cap 0: Start a parallel conjunction 0x25206d0, static_id: 2+11571601: cap 0: Create spark for conjunction: 0x25206d0 spark: 0x1e4+11571795: cap 0: Start a parallel conjunction 0x2520730, static_id: 2+11571921: cap 0: Create spark for conjunction: 0x2520730 spark: 0x1e5+11572114: cap 0: Start a parallel conjunction 0x2520790, static_id: 2+11572240: cap 0: Create spark for conjunction: 0x2520790 spark: 0x1e6+11572416: cap 0: Start a parallel conjunction 0x25207f0, static_id: 2+11572546: cap 0: Create spark for conjunction: 0x25207f0 spark: 0x1e7+11572735: cap 0: Start a parallel conjunction 0x2520850, static_id: 2+11572861: cap 0: Create spark for conjunction: 0x2520850 spark: 0x1e8+11573055: cap 0: Start a parallel conjunction 0x25208b0, static_id: 2+11573190: cap 0: Create spark for conjunction: 0x25208b0 spark: 0x1e9+11573365: cap 0: Start a parallel conjunction 0x2520910, static_id: 2+11573487: cap 0: Create spark for conjunction: 0x2520910 spark: 0x1ea+11573676: cap 0: Start a parallel conjunction 0x2520970, static_id: 2+11573802: cap 0: Create spark for conjunction: 0x2520970 spark: 0x1eb+11573986: cap 0: Start a parallel conjunction 0x25209d0, static_id: 2+11574112: cap 0: Create spark for conjunction: 0x25209d0 spark: 0x1ec+11574288: cap 0: Start a parallel conjunction 0x2520a30, static_id: 2+11574427: cap 0: Create spark for conjunction: 0x2520a30 spark: 0x1ed+11574603: cap 0: Start a parallel conjunction 0x2520a90, static_id: 2+11574724: cap 0: Create spark for conjunction: 0x2520a90 spark: 0x1ee+11574909: cap 0: Start a parallel conjunction 0x2520af0, static_id: 2+11575039: cap 0: Create spark for conjunction: 0x2520af0 spark: 0x1ef+11575219: cap 0: Start a parallel conjunction 0x2520b50, static_id: 2+11575341: cap 0: Create spark for conjunction: 0x2520b50 spark: 0x1f0+11575521: cap 0: Start a parallel conjunction 0x2520bb0, static_id: 2+11575647: cap 0: Create spark for conjunction: 0x2520bb0 spark: 0x1f1+11575827: cap 0: Start a parallel conjunction 0x2520c10, static_id: 2+11575948: cap 0: Create spark for conjunction: 0x2520c10 spark: 0x1f2+11576137: cap 0: Start a parallel conjunction 0x2520c70, static_id: 2+11576277: cap 0: Create spark for conjunction: 0x2520c70 spark: 0x1f3+11576452: cap 0: Start a parallel conjunction 0x2520cd0, static_id: 2+11576578: cap 0: Create spark for conjunction: 0x2520cd0 spark: 0x1f4+11576772: cap 0: Start a parallel conjunction 0x2520d30, static_id: 2+11576898: cap 0: Create spark for conjunction: 0x2520d30 spark: 0x1f5+11577087: cap 0: Start a parallel conjunction 0x2520d90, static_id: 2+11577208: cap 0: Create spark for conjunction: 0x2520d90 spark: 0x1f6+11577393: cap 0: Start a parallel conjunction 0x2520df0, static_id: 2+11577523: cap 0: Create spark for conjunction: 0x2520df0 spark: 0x1f7+11577712: cap 0: Start a parallel conjunction 0x2520e50, static_id: 2+11577834: cap 0: Create spark for conjunction: 0x2520e50 spark: 0x1f8+11578032: cap 0: Start a parallel conjunction 0x2520eb0, static_id: 2+11578153: cap 0: Create spark for conjunction: 0x2520eb0 spark: 0x1f9+11578324: cap 0: Start a parallel conjunction 0x2520f10, static_id: 2+11578450: cap 0: Create spark for conjunction: 0x2520f10 spark: 0x1fa+11578635: cap 0: Start a parallel conjunction 0x2520f70, static_id: 2+11578765: cap 0: Create spark for conjunction: 0x2520f70 spark: 0x1fb+11579089: cap 0: Start a parallel conjunction 0x2520fd0, static_id: 2+11579211: cap 0: Create spark for conjunction: 0x2520fd0 spark: 0x1fc+11579530: cap 0: Start a parallel conjunction 0x2521030, static_id: 2+11579670: cap 0: Create spark for conjunction: 0x2521030 spark: 0x1fd+11579850: cap 0: Start a parallel conjunction 0x2521090, static_id: 2+11579971: cap 0: Create spark for conjunction: 0x2521090 spark: 0x1fe+11580160: cap 0: Start a parallel conjunction 0x25210f0, static_id: 2+11580291: cap 0: Create spark for conjunction: 0x25210f0 spark: 0x1ff+11580466: cap 0: Start a parallel conjunction 0x2521150, static_id: 2+11580588: cap 0: Create spark for conjunction: 0x2521150 spark: 0x200+11580772: cap 0: Start a parallel conjunction 0x25211b0, static_id: 2+11625201: cap 1: Trying to steal a spark+11626915: cap 1: stealing a spark from cap 0+11631217: cap 0: Create spark for conjunction: 0x25211b0 spark: 0x201+11631456: cap 0: Start a parallel conjunction 0x2521210, static_id: 2+11631586: cap 0: Create spark for conjunction: 0x2521210 spark: 0x202+11631789: cap 0: Start a parallel conjunction 0x2521270, static_id: 2+11631924: cap 0: Create spark for conjunction: 0x2521270 spark: 0x203+11632104: cap 0: Start a parallel conjunction 0x25212d0, static_id: 2+11632243: cap 0: Create spark for conjunction: 0x25212d0 spark: 0x204+11632437: cap 0: Start a parallel conjunction 0x2521330, static_id: 2+11632567: cap 0: Create spark for conjunction: 0x2521330 spark: 0x205+11632756: cap 0: Start a parallel conjunction 0x2521390, static_id: 2+11632882: cap 0: Create spark for conjunction: 0x2521390 spark: 0x206+11633062: cap 0: Start a parallel conjunction 0x25213f0, static_id: 2+11633206: cap 0: Create spark for conjunction: 0x25213f0 spark: 0x207+11633395: cap 0: Start a parallel conjunction 0x2521450, static_id: 2+11633526: cap 0: Create spark for conjunction: 0x2521450 spark: 0x208+11633737: cap 0: Start a parallel conjunction 0x25214b0, static_id: 2+11633872: cap 0: Create spark for conjunction: 0x25214b0 spark: 0x209+11634057: cap 0: Start a parallel conjunction 0x2521510, static_id: 2+11634183: cap 0: Create spark for conjunction: 0x2521510 spark: 0x20a+11634381: cap 0: Start a parallel conjunction 0x2521570, static_id: 2+11634511: cap 0: Create spark for conjunction: 0x2521570 spark: 0x20b+11634705: cap 0: Start a parallel conjunction 0x25215d0, static_id: 2+11634831: cap 0: Create spark for conjunction: 0x25215d0 spark: 0x20c+11635015: cap 0: Start a parallel conjunction 0x2521630, static_id: 2+11635159: cap 0: Create spark for conjunction: 0x2521630 spark: 0x20d+11635344: cap 0: Start a parallel conjunction 0x2521690, static_id: 2+11635465: cap 0: Create spark for conjunction: 0x2521690 spark: 0x20e+11635659: cap 0: Start a parallel conjunction 0x25216f0, static_id: 2+11635789: cap 0: Create spark for conjunction: 0x25216f0 spark: 0x20f+11636037: cap 0: Start a parallel conjunction 0x2521750, static_id: 2+11636158: cap 0: Create spark for conjunction: 0x2521750 spark: 0x210+11636343: cap 0: Start a parallel conjunction 0x25217b0, static_id: 2+11636473: cap 0: Create spark for conjunction: 0x25217b0 spark: 0x211+11636649: cap 0: Start a parallel conjunction 0x2521810, static_id: 2+11636770: cap 0: Create spark for conjunction: 0x2521810 spark: 0x212+11636964: cap 0: Start a parallel conjunction 0x2521870, static_id: 2+11637099: cap 0: Create spark for conjunction: 0x2521870 spark: 0x213+11637283: cap 0: Start a parallel conjunction 0x25218d0, static_id: 2+11637409: cap 0: Create spark for conjunction: 0x25218d0 spark: 0x214+11637589: cap 0: Start a parallel conjunction 0x2521930, static_id: 2+11637729: cap 0: Create spark for conjunction: 0x2521930 spark: 0x215+11637931: cap 0: Start a parallel conjunction 0x2521990, static_id: 2+11638062: cap 0: Create spark for conjunction: 0x2521990 spark: 0x216+11638246: cap 0: Start a parallel conjunction 0x25219f0, static_id: 2+11638377: cap 0: Create spark for conjunction: 0x25219f0 spark: 0x217+11638845: cap 0: Start a parallel conjunction 0x2521a50, static_id: 2+11638971: cap 0: Create spark for conjunction: 0x2521a50 spark: 0x218+11639173: cap 0: Start a parallel conjunction 0x2521ab0, static_id: 2+11639304: cap 0: Create spark for conjunction: 0x2521ab0 spark: 0x219+11639488: cap 0: Start a parallel conjunction 0x2521b10, static_id: 2+11639614: cap 0: Create spark for conjunction: 0x2521b10 spark: 0x21a+11639799: cap 0: Start a parallel conjunction 0x2521b70, static_id: 2+11639929: cap 0: Create spark for conjunction: 0x2521b70 spark: 0x21b+11640118: cap 0: Start a parallel conjunction 0x2521bd0, static_id: 2+11640249: cap 0: Create spark for conjunction: 0x2521bd0 spark: 0x21c+11640438: cap 0: Start a parallel conjunction 0x2521c30, static_id: 2+11640573: cap 0: Create spark for conjunction: 0x2521c30 spark: 0x21d+11640753: cap 0: Start a parallel conjunction 0x2521c90, static_id: 2+11640874: cap 0: Create spark for conjunction: 0x2521c90 spark: 0x21e+11641063: cap 0: Start a parallel conjunction 0x2521cf0, static_id: 2+11641194: cap 0: Create spark for conjunction: 0x2521cf0 spark: 0x21f+11641374: cap 0: Start a parallel conjunction 0x2521d50, static_id: 2+11641495: cap 0: Create spark for conjunction: 0x2521d50 spark: 0x220+11641675: cap 0: Start a parallel conjunction 0x2521db0, static_id: 2+11641810: cap 0: Create spark for conjunction: 0x2521db0 spark: 0x221+11641990: cap 0: Start a parallel conjunction 0x2521e10, static_id: 2+11642121: cap 0: Create spark for conjunction: 0x2521e10 spark: 0x222+11642305: cap 0: Start a parallel conjunction 0x2521e70, static_id: 2+11642436: cap 0: Create spark for conjunction: 0x2521e70 spark: 0x223+11642616: cap 0: Start a parallel conjunction 0x2521ed0, static_id: 2+11642742: cap 0: Create spark for conjunction: 0x2521ed0 spark: 0x224+11642926: cap 0: Start a parallel conjunction 0x2521f30, static_id: 2+11643057: cap 0: Create spark for conjunction: 0x2521f30 spark: 0x225+11643241: cap 0: Start a parallel conjunction 0x2521f90, static_id: 2+11643367: cap 0: Create spark for conjunction: 0x2521f90 spark: 0x226+11643691: cap 0: Start a parallel conjunction 0x2521ff0, static_id: 2+11643826: cap 0: Create spark for conjunction: 0x2521ff0 spark: 0x227+11644011: cap 0: Start a parallel conjunction 0x2522050, static_id: 2+11644137: cap 0: Create spark for conjunction: 0x2522050 spark: 0x228+11644335: cap 0: Start a parallel conjunction 0x25220b0, static_id: 2+11644461: cap 0: Create spark for conjunction: 0x25220b0 spark: 0x229+11644645: cap 0: Start a parallel conjunction 0x2522110, static_id: 2+11644771: cap 0: Create spark for conjunction: 0x2522110 spark: 0x22a+11644960: cap 0: Start a parallel conjunction 0x2522170, static_id: 2+11645100: cap 0: Create spark for conjunction: 0x2522170 spark: 0x22b+11645293: cap 0: Start a parallel conjunction 0x25221d0, static_id: 2+11645419: cap 0: Create spark for conjunction: 0x25221d0 spark: 0x22c+11645599: cap 0: Start a parallel conjunction 0x2522230, static_id: 2+11646090: cap 0: Create spark for conjunction: 0x2522230 spark: 0x22d+11646274: cap 0: Start a parallel conjunction 0x2522290, static_id: 2+11646391: cap 0: Create spark for conjunction: 0x2522290 spark: 0x22e+11646841: cap 0: Start a parallel conjunction 0x25222f0, static_id: 2+11646972: cap 0: Create spark for conjunction: 0x25222f0 spark: 0x22f+11647147: cap 0: Start a parallel conjunction 0x2522350, static_id: 2+11647269: cap 0: Create spark for conjunction: 0x2522350 spark: 0x230+11647453: cap 0: Start a parallel conjunction 0x25223b0, static_id: 2+11647579: cap 0: Create spark for conjunction: 0x25223b0 spark: 0x231+11647759: cap 0: Start a parallel conjunction 0x2522410, static_id: 2+11647881: cap 0: Create spark for conjunction: 0x2522410 spark: 0x232+11648070: cap 0: Start a parallel conjunction 0x2522470, static_id: 2+11648196: cap 0: Create spark for conjunction: 0x2522470 spark: 0x233+11648380: cap 0: Start a parallel conjunction 0x25224d0, static_id: 2+11648506: cap 0: Create spark for conjunction: 0x25224d0 spark: 0x234+11648691: cap 0: Start a parallel conjunction 0x2522530, static_id: 2+11648826: cap 0: Create spark for conjunction: 0x2522530 spark: 0x235+11649024: cap 0: Start a parallel conjunction 0x2522590, static_id: 2+11649150: cap 0: Create spark for conjunction: 0x2522590 spark: 0x236+11649339: cap 0: Start a parallel conjunction 0x25225f0, static_id: 2+11649483: cap 0: Create spark for conjunction: 0x25225f0 spark: 0x237+11649672: cap 0: Start a parallel conjunction 0x2522650, static_id: 2+11649793: cap 0: Create spark for conjunction: 0x2522650 spark: 0x238+11649991: cap 0: Start a parallel conjunction 0x25226b0, static_id: 2+11650117: cap 0: Create spark for conjunction: 0x25226b0 spark: 0x239+11650302: cap 0: Start a parallel conjunction 0x2522710, static_id: 2+11650428: cap 0: Create spark for conjunction: 0x2522710 spark: 0x23a+11650612: cap 0: Start a parallel conjunction 0x2522770, static_id: 2+11650738: cap 0: Create spark for conjunction: 0x2522770 spark: 0x23b+11650936: cap 0: Start a parallel conjunction 0x25227d0, static_id: 2+11651058: cap 0: Create spark for conjunction: 0x25227d0 spark: 0x23c+11651247: cap 0: Start a parallel conjunction 0x2522830, static_id: 2+11651386: cap 0: Create spark for conjunction: 0x2522830 spark: 0x23d+11651562: cap 0: Start a parallel conjunction 0x2522890, static_id: 2+11651688: cap 0: Create spark for conjunction: 0x2522890 spark: 0x23e+11651877: cap 0: Start a parallel conjunction 0x25228f0, static_id: 2+11652007: cap 0: Create spark for conjunction: 0x25228f0 spark: 0x23f+11652183: cap 0: Start a parallel conjunction 0x2522950, static_id: 2+11652304: cap 0: Create spark for conjunction: 0x2522950 spark: 0x240+11652660: cap 0: Start a parallel conjunction 0x25229b0, static_id: 2+11652786: cap 0: Create spark for conjunction: 0x25229b0 spark: 0x241+11652966: cap 0: Start a parallel conjunction 0x2522a10, static_id: 2+11653087: cap 0: Create spark for conjunction: 0x2522a10 spark: 0x242+11653276: cap 0: Start a parallel conjunction 0x2522a70, static_id: 2+11653402: cap 0: Create spark for conjunction: 0x2522a70 spark: 0x243+11653587: cap 0: Start a parallel conjunction 0x2522ad0, static_id: 2+11653713: cap 0: Create spark for conjunction: 0x2522ad0 spark: 0x244+11653897: cap 0: Start a parallel conjunction 0x2522b30, static_id: 2+11654028: cap 0: Create spark for conjunction: 0x2522b30 spark: 0x245+11654221: cap 0: Start a parallel conjunction 0x2522b90, static_id: 2+11654347: cap 0: Create spark for conjunction: 0x2522b90 spark: 0x246+11654532: cap 0: Start a parallel conjunction 0x2522bf0, static_id: 2+11654676: cap 0: Create spark for conjunction: 0x2522bf0 spark: 0x247+11654865: cap 0: Start a parallel conjunction 0x2522c50, static_id: 2+11654986: cap 0: Create spark for conjunction: 0x2522c50 spark: 0x248+11655189: cap 0: Start a parallel conjunction 0x2522cb0, static_id: 2+11655328: cap 0: Create spark for conjunction: 0x2522cb0 spark: 0x249+11655504: cap 0: Start a parallel conjunction 0x2522d10, static_id: 2+11655630: cap 0: Create spark for conjunction: 0x2522d10 spark: 0x24a+11655828: cap 0: Start a parallel conjunction 0x2522d70, static_id: 2+11655958: cap 0: Create spark for conjunction: 0x2522d70 spark: 0x24b+11656152: cap 0: Start a parallel conjunction 0x2522dd0, static_id: 2+11656278: cap 0: Create spark for conjunction: 0x2522dd0 spark: 0x24c+11656462: cap 0: Start a parallel conjunction 0x2522e30, static_id: 2+11656602: cap 0: Create spark for conjunction: 0x2522e30 spark: 0x24d+11656786: cap 0: Start a parallel conjunction 0x2522e90, static_id: 2+11656908: cap 0: Create spark for conjunction: 0x2522e90 spark: 0x24e+11657097: cap 0: Start a parallel conjunction 0x2522ef0, static_id: 2+11657227: cap 0: Create spark for conjunction: 0x2522ef0 spark: 0x24f+11657407: cap 0: Start a parallel conjunction 0x2522f50, static_id: 2+11657524: cap 0: Create spark for conjunction: 0x2522f50 spark: 0x250+11657857: cap 0: Start a parallel conjunction 0x2522fb0, static_id: 2+11657983: cap 0: Create spark for conjunction: 0x2522fb0 spark: 0x251+11658172: cap 0: Start a parallel conjunction 0x2523010, static_id: 2+11658294: cap 0: Create spark for conjunction: 0x2523010 spark: 0x252+11658487: cap 0: Start a parallel conjunction 0x2523070, static_id: 2+11658618: cap 0: Create spark for conjunction: 0x2523070 spark: 0x253+11658802: cap 0: Start a parallel conjunction 0x25230d0, static_id: 2+11658933: cap 0: Create spark for conjunction: 0x25230d0 spark: 0x254+11659126: cap 0: Start a parallel conjunction 0x2523130, static_id: 2+11659252: cap 0: Create spark for conjunction: 0x2523130 spark: 0x255+11659446: cap 0: Start a parallel conjunction 0x2523190, static_id: 2+11659567: cap 0: Create spark for conjunction: 0x2523190 spark: 0x256+11659752: cap 0: Start a parallel conjunction 0x25231f0, static_id: 2+11659896: cap 0: Create spark for conjunction: 0x25231f0 spark: 0x257+11660076: cap 0: Start a parallel conjunction 0x2523250, static_id: 2+11660202: cap 0: Create spark for conjunction: 0x2523250 spark: 0x258+11660395: cap 0: Start a parallel conjunction 0x25232b0, static_id: 2+11660530: cap 0: Create spark for conjunction: 0x25232b0 spark: 0x259+11660710: cap 0: Start a parallel conjunction 0x2523310, static_id: 2+11660832: cap 0: Create spark for conjunction: 0x2523310 spark: 0x25a+11661183: cap 0: Start a parallel conjunction 0x2523370, static_id: 2+11661313: cap 0: Create spark for conjunction: 0x2523370 spark: 0x25b+11661507: cap 0: Start a parallel conjunction 0x25233d0, static_id: 2+11661633: cap 0: Create spark for conjunction: 0x25233d0 spark: 0x25c+11661813: cap 0: Start a parallel conjunction 0x2523430, static_id: 2+11661952: cap 0: Create spark for conjunction: 0x2523430 spark: 0x25d+11662132: cap 0: Start a parallel conjunction 0x2523490, static_id: 2+11662254: cap 0: Create spark for conjunction: 0x2523490 spark: 0x25e+11662447: cap 0: Start a parallel conjunction 0x25234f0, static_id: 2+11662573: cap 0: Create spark for conjunction: 0x25234f0 spark: 0x25f+11662753: cap 0: Start a parallel conjunction 0x2523550, static_id: 2+11662875: cap 0: Create spark for conjunction: 0x2523550 spark: 0x260+11663059: cap 0: Start a parallel conjunction 0x25235b0, static_id: 2+11663190: cap 0: Create spark for conjunction: 0x25235b0 spark: 0x261+11663374: cap 0: Start a parallel conjunction 0x2523610, static_id: 2+11663500: cap 0: Create spark for conjunction: 0x2523610 spark: 0x262+11663689: cap 0: Start a parallel conjunction 0x2523670, static_id: 2+11663824: cap 0: Create spark for conjunction: 0x2523670 spark: 0x263+11664018: cap 0: Start a parallel conjunction 0x25236d0, static_id: 2+11664157: cap 0: Create spark for conjunction: 0x25236d0 spark: 0x264+11664346: cap 0: Start a parallel conjunction 0x2523730, static_id: 2+11664481: cap 0: Create spark for conjunction: 0x2523730 spark: 0x265+11664675: cap 0: Start a parallel conjunction 0x2523790, static_id: 2+11664801: cap 0: Create spark for conjunction: 0x2523790 spark: 0x266+11664985: cap 0: Start a parallel conjunction 0x25237f0, static_id: 2+11665116: cap 0: Create spark for conjunction: 0x25237f0 spark: 0x267+11665300: cap 0: Start a parallel conjunction 0x2523850, static_id: 2+11665422: cap 0: Create spark for conjunction: 0x2523850 spark: 0x268+11665611: cap 0: Start a parallel conjunction 0x25238b0, static_id: 2+11665741: cap 0: Create spark for conjunction: 0x25238b0 spark: 0x269+11665921: cap 0: Start a parallel conjunction 0x2523910, static_id: 2+11666047: cap 0: Create spark for conjunction: 0x2523910 spark: 0x26a+11666232: cap 0: Start a parallel conjunction 0x2523970, static_id: 2+11666367: cap 0: Create spark for conjunction: 0x2523970 spark: 0x26b+11666556: cap 0: Start a parallel conjunction 0x25239d0, static_id: 2+11666677: cap 0: Create spark for conjunction: 0x25239d0 spark: 0x26c+11666862: cap 0: Start a parallel conjunction 0x2523a30, static_id: 2+11666997: cap 0: Create spark for conjunction: 0x2523a30 spark: 0x26d+11667172: cap 0: Start a parallel conjunction 0x2523a90, static_id: 2+11667294: cap 0: Create spark for conjunction: 0x2523a90 spark: 0x26e+11667483: cap 0: Start a parallel conjunction 0x2523af0, static_id: 2+11667609: cap 0: Create spark for conjunction: 0x2523af0 spark: 0x26f+11667793: cap 0: Start a parallel conjunction 0x2523b50, static_id: 2+11667915: cap 0: Create spark for conjunction: 0x2523b50 spark: 0x270+11668099: cap 0: Start a parallel conjunction 0x2523bb0, static_id: 2+11668252: cap 0: Create spark for conjunction: 0x2523bb0 spark: 0x271+11668432: cap 0: Start a parallel conjunction 0x2523c10, static_id: 2+11668554: cap 0: Create spark for conjunction: 0x2523c10 spark: 0x272+11668747: cap 0: Start a parallel conjunction 0x2523c70, static_id: 2+11668878: cap 0: Create spark for conjunction: 0x2523c70 spark: 0x273+11669058: cap 0: Start a parallel conjunction 0x2523cd0, static_id: 2+11669193: cap 0: Create spark for conjunction: 0x2523cd0 spark: 0x274+11669391: cap 0: Start a parallel conjunction 0x2523d30, static_id: 2+11669521: cap 0: Create spark for conjunction: 0x2523d30 spark: 0x275+11669710: cap 0: Start a parallel conjunction 0x2523d90, static_id: 2+11669836: cap 0: Create spark for conjunction: 0x2523d90 spark: 0x276+11670021: cap 0: Start a parallel conjunction 0x2523df0, static_id: 2+11670160: cap 0: Create spark for conjunction: 0x2523df0 spark: 0x277+11670340: cap 0: Start a parallel conjunction 0x2523e50, static_id: 2+11670466: cap 0: Create spark for conjunction: 0x2523e50 spark: 0x278+11670660: cap 0: Start a parallel conjunction 0x2523eb0, static_id: 2+11670790: cap 0: Create spark for conjunction: 0x2523eb0 spark: 0x279+11670970: cap 0: Start a parallel conjunction 0x2523f10, static_id: 2+11671096: cap 0: Create spark for conjunction: 0x2523f10 spark: 0x27a+11671281: cap 0: Start a parallel conjunction 0x2523f70, static_id: 2+11671411: cap 0: Create spark for conjunction: 0x2523f70 spark: 0x27b+11671744: cap 0: Start a parallel conjunction 0x2523fd0, static_id: 2+11671870: cap 0: Create spark for conjunction: 0x2523fd0 spark: 0x27c+11672298: cap 0: Start a parallel conjunction 0x2524030, static_id: 2+11672446: cap 0: Create spark for conjunction: 0x2524030 spark: 0x27d+11672631: cap 0: Start a parallel conjunction 0x2524090, static_id: 2+11672752: cap 0: Create spark for conjunction: 0x2524090 spark: 0x27e+11672941: cap 0: Start a parallel conjunction 0x25240f0, static_id: 2+11673076: cap 0: Create spark for conjunction: 0x25240f0 spark: 0x27f+11673256: cap 0: Start a parallel conjunction 0x2524150, static_id: 2+11673382: cap 0: Create spark for conjunction: 0x2524150 spark: 0x280+11673567: cap 0: Start a parallel conjunction 0x25241b0, static_id: 2+11673697: cap 0: Create spark for conjunction: 0x25241b0 spark: 0x281+11673873: cap 0: Start a parallel conjunction 0x2524210, static_id: 2+11673994: cap 0: Create spark for conjunction: 0x2524210 spark: 0x282+11674183: cap 0: Start a parallel conjunction 0x2524270, static_id: 2+11674318: cap 0: Create spark for conjunction: 0x2524270 spark: 0x283+11674503: cap 0: Start a parallel conjunction 0x25242d0, static_id: 2+11674674: cap 0: Create spark for conjunction: 0x25242d0 spark: 0x284+11674867: cap 0: Start a parallel conjunction 0x2524330, static_id: 2+11675002: cap 0: Create spark for conjunction: 0x2524330 spark: 0x285+11675196: cap 0: Start a parallel conjunction 0x2524390, static_id: 2+11675317: cap 0: Create spark for conjunction: 0x2524390 spark: 0x286+11675493: cap 0: Start a parallel conjunction 0x25243f0, static_id: 2+11675632: cap 0: Create spark for conjunction: 0x25243f0 spark: 0x287+11675817: cap 0: Start a parallel conjunction 0x2524450, static_id: 2+11675983: cap 0: Create spark for conjunction: 0x2524450 spark: 0x288+11676190: cap 0: Start a parallel conjunction 0x25244b0, static_id: 2+11676321: cap 0: Create spark for conjunction: 0x25244b0 spark: 0x289+11676505: cap 0: Start a parallel conjunction 0x2524510, static_id: 2+11676789: cap 0: Create spark for conjunction: 0x2524510 spark: 0x28a+11676969: cap 0: Start a parallel conjunction 0x2524570, static_id: 2+11677131: cap 0: Create spark for conjunction: 0x2524570 spark: 0x28b+11677720: cap 0: Start a parallel conjunction 0x25245d0, static_id: 2+11677842: cap 0: Create spark for conjunction: 0x25245d0 spark: 0x28c+11678026: cap 0: Start a parallel conjunction 0x2524630, static_id: 2+11678166: cap 0: Create spark for conjunction: 0x2524630 spark: 0x28d+11678346: cap 0: Start a parallel conjunction 0x2524690, static_id: 2+11678467: cap 0: Create spark for conjunction: 0x2524690 spark: 0x28e+11678652: cap 0: Start a parallel conjunction 0x25246f0, static_id: 2+11678782: cap 0: Create spark for conjunction: 0x25246f0 spark: 0x28f+11678967: cap 0: Start a parallel conjunction 0x2524750, static_id: 2+11679088: cap 0: Create spark for conjunction: 0x2524750 spark: 0x290+11679268: cap 0: Start a parallel conjunction 0x25247b0, static_id: 2+11679399: cap 0: Create spark for conjunction: 0x25247b0 spark: 0x291+11679583: cap 0: Start a parallel conjunction 0x2524810, static_id: 2+11679714: cap 0: Create spark for conjunction: 0x2524810 spark: 0x292+11679912: cap 0: Start a parallel conjunction 0x2524870, static_id: 2+11680042: cap 0: Create spark for conjunction: 0x2524870 spark: 0x293+11680231: cap 0: Start a parallel conjunction 0x25248d0, static_id: 2+11680366: cap 0: Create spark for conjunction: 0x25248d0 spark: 0x294+11680564: cap 0: Start a parallel conjunction 0x2524930, static_id: 2+11680695: cap 0: Create spark for conjunction: 0x2524930 spark: 0x295+11680888: cap 0: Start a parallel conjunction 0x2524990, static_id: 2+11681014: cap 0: Create spark for conjunction: 0x2524990 spark: 0x296+11681199: cap 0: Start a parallel conjunction 0x25249f0, static_id: 2+11681338: cap 0: Create spark for conjunction: 0x25249f0 spark: 0x297+11681518: cap 0: Start a parallel conjunction 0x2524a50, static_id: 2+11681644: cap 0: Create spark for conjunction: 0x2524a50 spark: 0x298+11681833: cap 0: Start a parallel conjunction 0x2524ab0, static_id: 2+11681959: cap 0: Create spark for conjunction: 0x2524ab0 spark: 0x299+11682139: cap 0: Start a parallel conjunction 0x2524b10, static_id: 2+11682261: cap 0: Create spark for conjunction: 0x2524b10 spark: 0x29a+11682445: cap 0: Start a parallel conjunction 0x2524b70, static_id: 2+11682576: cap 0: Create spark for conjunction: 0x2524b70 spark: 0x29b+11682760: cap 0: Start a parallel conjunction 0x2524bd0, static_id: 2+11682886: cap 0: Create spark for conjunction: 0x2524bd0 spark: 0x29c+11683062: cap 0: Start a parallel conjunction 0x2524c30, static_id: 2+11683206: cap 0: Create spark for conjunction: 0x2524c30 spark: 0x29d+11683386: cap 0: Start a parallel conjunction 0x2524c90, static_id: 2+11683512: cap 0: Create spark for conjunction: 0x2524c90 spark: 0x29e+11683705: cap 0: Start a parallel conjunction 0x2524cf0, static_id: 2+11683836: cap 0: Create spark for conjunction: 0x2524cf0 spark: 0x29f+11684011: cap 0: Start a parallel conjunction 0x2524d50, static_id: 2+11684133: cap 0: Create spark for conjunction: 0x2524d50 spark: 0x2a0+11684317: cap 0: Start a parallel conjunction 0x2524db0, static_id: 2+11684448: cap 0: Create spark for conjunction: 0x2524db0 spark: 0x2a1+11684628: cap 0: Start a parallel conjunction 0x2524e10, static_id: 2+11684749: cap 0: Create spark for conjunction: 0x2524e10 spark: 0x2a2+11684938: cap 0: Start a parallel conjunction 0x2524e70, static_id: 2+11685073: cap 0: Create spark for conjunction: 0x2524e70 spark: 0x2a3+11685253: cap 0: Start a parallel conjunction 0x2524ed0, static_id: 2+11685388: cap 0: Create spark for conjunction: 0x2524ed0 spark: 0x2a4+11685577: cap 0: Start a parallel conjunction 0x2524f30, static_id: 2+11685712: cap 0: Create spark for conjunction: 0x2524f30 spark: 0x2a5+11685901: cap 0: Start a parallel conjunction 0x2524f90, static_id: 2+11686027: cap 0: Create spark for conjunction: 0x2524f90 spark: 0x2a6+11686554: cap 0: Start a parallel conjunction 0x2524ff0, static_id: 2+11686693: cap 0: Create spark for conjunction: 0x2524ff0 spark: 0x2a7+11686882: cap 0: Start a parallel conjunction 0x2525050, static_id: 2+11687008: cap 0: Create spark for conjunction: 0x2525050 spark: 0x2a8+11687202: cap 0: Start a parallel conjunction 0x25250b0, static_id: 2+11687332: cap 0: Create spark for conjunction: 0x25250b0 spark: 0x2a9+11687512: cap 0: Start a parallel conjunction 0x2525110, static_id: 2+11687643: cap 0: Create spark for conjunction: 0x2525110 spark: 0x2aa+11687827: cap 0: Start a parallel conjunction 0x2525170, static_id: 2+11687953: cap 0: Create spark for conjunction: 0x2525170 spark: 0x2ab+11688142: cap 0: Start a parallel conjunction 0x25251d0, static_id: 2+11688264: cap 0: Create spark for conjunction: 0x25251d0 spark: 0x2ac+11688448: cap 0: Start a parallel conjunction 0x2525230, static_id: 2+11688583: cap 0: Create spark for conjunction: 0x2525230 spark: 0x2ad+11688763: cap 0: Start a parallel conjunction 0x2525290, static_id: 2+11688885: cap 0: Create spark for conjunction: 0x2525290 spark: 0x2ae+11689074: cap 0: Start a parallel conjunction 0x25252f0, static_id: 2+11689209: cap 0: Create spark for conjunction: 0x25252f0 spark: 0x2af+11689389: cap 0: Start a parallel conjunction 0x2525350, static_id: 2+11689510: cap 0: Create spark for conjunction: 0x2525350 spark: 0x2b0+11689695: cap 0: Start a parallel conjunction 0x25253b0, static_id: 2+11689825: cap 0: Create spark for conjunction: 0x25253b0 spark: 0x2b1+11690005: cap 0: Start a parallel conjunction 0x2525410, static_id: 2+11690131: cap 0: Create spark for conjunction: 0x2525410 spark: 0x2b2+11690325: cap 0: Start a parallel conjunction 0x2525470, static_id: 2+11690455: cap 0: Create spark for conjunction: 0x2525470 spark: 0x2b3+11690631: cap 0: Start a parallel conjunction 0x25254d0, static_id: 2+11690766: cap 0: Create spark for conjunction: 0x25254d0 spark: 0x2b4+11690955: cap 0: Start a parallel conjunction 0x2525530, static_id: 2+11691090: cap 0: Create spark for conjunction: 0x2525530 spark: 0x2b5+11691279: cap 0: Start a parallel conjunction 0x2525590, static_id: 2+11691405: cap 0: Create spark for conjunction: 0x2525590 spark: 0x2b6+11691585: cap 0: Start a parallel conjunction 0x25255f0, static_id: 2+11691724: cap 0: Create spark for conjunction: 0x25255f0 spark: 0x2b7+11691904: cap 0: Start a parallel conjunction 0x2525650, static_id: 2+11692026: cap 0: Create spark for conjunction: 0x2525650 spark: 0x2b8+11692233: cap 0: Start a parallel conjunction 0x25256b0, static_id: 2+11692363: cap 0: Create spark for conjunction: 0x25256b0 spark: 0x2b9+11692539: cap 0: Start a parallel conjunction 0x2525710, static_id: 2+11692665: cap 0: Create spark for conjunction: 0x2525710 spark: 0x2ba+11692849: cap 0: Start a parallel conjunction 0x2525770, static_id: 2+11692975: cap 0: Create spark for conjunction: 0x2525770 spark: 0x2bb+11693164: cap 0: Start a parallel conjunction 0x25257d0, static_id: 2+11693290: cap 0: Create spark for conjunction: 0x25257d0 spark: 0x2bc+11693475: cap 0: Start a parallel conjunction 0x2525830, static_id: 2+11693610: cap 0: Create spark for conjunction: 0x2525830 spark: 0x2bd+11693794: cap 0: Start a parallel conjunction 0x2525890, static_id: 2+11693916: cap 0: Create spark for conjunction: 0x2525890 spark: 0x2be+11694127: cap 0: Start a parallel conjunction 0x25258f0, static_id: 2+11694258: cap 0: Create spark for conjunction: 0x25258f0 spark: 0x2bf+11694438: cap 0: Start a parallel conjunction 0x2525950, static_id: 2+11694564: cap 0: Create spark for conjunction: 0x2525950 spark: 0x2c0+11694753: cap 0: Start a parallel conjunction 0x25259b0, static_id: 2+11694892: cap 0: Create spark for conjunction: 0x25259b0 spark: 0x2c1+11695081: cap 0: Start a parallel conjunction 0x2525a10, static_id: 2+11695203: cap 0: Create spark for conjunction: 0x2525a10 spark: 0x2c2+11695401: cap 0: Start a parallel conjunction 0x2525a70, static_id: 2+11695531: cap 0: Create spark for conjunction: 0x2525a70 spark: 0x2c3+11695711: cap 0: Start a parallel conjunction 0x2525ad0, static_id: 2+11695842: cap 0: Create spark for conjunction: 0x2525ad0 spark: 0x2c4+11696031: cap 0: Start a parallel conjunction 0x2525b30, static_id: 2+11696161: cap 0: Create spark for conjunction: 0x2525b30 spark: 0x2c5+11696350: cap 0: Start a parallel conjunction 0x2525b90, static_id: 2+11696476: cap 0: Create spark for conjunction: 0x2525b90 spark: 0x2c6+11696656: cap 0: Start a parallel conjunction 0x2525bf0, static_id: 2+11696791: cap 0: Create spark for conjunction: 0x2525bf0 spark: 0x2c7+11696980: cap 0: Start a parallel conjunction 0x2525c50, static_id: 2+11697106: cap 0: Create spark for conjunction: 0x2525c50 spark: 0x2c8+11697300: cap 0: Start a parallel conjunction 0x2525cb0, static_id: 2+11697435: cap 0: Create spark for conjunction: 0x2525cb0 spark: 0x2c9+11697615: cap 0: Start a parallel conjunction 0x2525d10, static_id: 2+11697741: cap 0: Create spark for conjunction: 0x2525d10 spark: 0x2ca+11697925: cap 0: Start a parallel conjunction 0x2525d70, static_id: 2+11698060: cap 0: Create spark for conjunction: 0x2525d70 spark: 0x2cb+11698249: cap 0: Start a parallel conjunction 0x2525dd0, static_id: 2+11698380: cap 0: Create spark for conjunction: 0x2525dd0 spark: 0x2cc+11698560: cap 0: Start a parallel conjunction 0x2525e30, static_id: 2+11698699: cap 0: Create spark for conjunction: 0x2525e30 spark: 0x2cd+11698888: cap 0: Start a parallel conjunction 0x2525e90, static_id: 2+11699014: cap 0: Create spark for conjunction: 0x2525e90 spark: 0x2ce+11699221: cap 0: Start a parallel conjunction 0x2525ef0, static_id: 2+11699356: cap 0: Create spark for conjunction: 0x2525ef0 spark: 0x2cf+11699536: cap 0: Start a parallel conjunction 0x2525f50, static_id: 2+11699662: cap 0: Create spark for conjunction: 0x2525f50 spark: 0x2d0+11700009: cap 0: Start a parallel conjunction 0x2525fb0, static_id: 2+11700139: cap 0: Create spark for conjunction: 0x2525fb0 spark: 0x2d1+11700432: cap 0: Start a parallel conjunction 0x2526010, static_id: 2+11700558: cap 0: Create spark for conjunction: 0x2526010 spark: 0x2d2+11700751: cap 0: Start a parallel conjunction 0x2526070, static_id: 2+11700882: cap 0: Create spark for conjunction: 0x2526070 spark: 0x2d3+11701057: cap 0: Start a parallel conjunction 0x25260d0, static_id: 2+11701183: cap 0: Create spark for conjunction: 0x25260d0 spark: 0x2d4+11701372: cap 0: Start a parallel conjunction 0x2526130, static_id: 2+11701503: cap 0: Create spark for conjunction: 0x2526130 spark: 0x2d5+11701692: cap 0: Start a parallel conjunction 0x2526190, static_id: 2+11701818: cap 0: Create spark for conjunction: 0x2526190 spark: 0x2d6+11702133: cap 0: Start a parallel conjunction 0x25261f0, static_id: 2+11702272: cap 0: Create spark for conjunction: 0x25261f0 spark: 0x2d7+11702457: cap 0: Start a parallel conjunction 0x2526250, static_id: 2+11702578: cap 0: Create spark for conjunction: 0x2526250 spark: 0x2d8+11702763: cap 0: Start a parallel conjunction 0x25262b0, static_id: 2+11702893: cap 0: Create spark for conjunction: 0x25262b0 spark: 0x2d9+11703073: cap 0: Start a parallel conjunction 0x2526310, static_id: 2+11703199: cap 0: Create spark for conjunction: 0x2526310 spark: 0x2da+11703384: cap 0: Start a parallel conjunction 0x2526370, static_id: 2+11703510: cap 0: Create spark for conjunction: 0x2526370 spark: 0x2db+11703825: cap 0: Start a parallel conjunction 0x25263d0, static_id: 2+11703946: cap 0: Create spark for conjunction: 0x25263d0 spark: 0x2dc+11704140: cap 0: Start a parallel conjunction 0x2526430, static_id: 2+11704275: cap 0: Create spark for conjunction: 0x2526430 spark: 0x2dd+11704455: cap 0: Start a parallel conjunction 0x2526490, static_id: 2+11704576: cap 0: Create spark for conjunction: 0x2526490 spark: 0x2de+11704761: cap 0: Start a parallel conjunction 0x25264f0, static_id: 2+11704891: cap 0: Create spark for conjunction: 0x25264f0 spark: 0x2df+11705067: cap 0: Start a parallel conjunction 0x2526550, static_id: 2+11705188: cap 0: Create spark for conjunction: 0x2526550 spark: 0x2e0+11705373: cap 0: Start a parallel conjunction 0x25265b0, static_id: 2+11705499: cap 0: Create spark for conjunction: 0x25265b0 spark: 0x2e1+11705683: cap 0: Start a parallel conjunction 0x2526610, static_id: 2+11705814: cap 0: Create spark for conjunction: 0x2526610 spark: 0x2e2+11706003: cap 0: Start a parallel conjunction 0x2526670, static_id: 2+11706133: cap 0: Create spark for conjunction: 0x2526670 spark: 0x2e3+11706318: cap 0: Start a parallel conjunction 0x25266d0, static_id: 2+11706448: cap 0: Create spark for conjunction: 0x25266d0 spark: 0x2e4+11706642: cap 0: Start a parallel conjunction 0x2526730, static_id: 2+11706777: cap 0: Create spark for conjunction: 0x2526730 spark: 0x2e5+11706966: cap 0: Start a parallel conjunction 0x2526790, static_id: 2+11707092: cap 0: Create spark for conjunction: 0x2526790 spark: 0x2e6+11707272: cap 0: Start a parallel conjunction 0x25267f0, static_id: 2+11707551: cap 0: Create spark for conjunction: 0x25267f0 spark: 0x2e7+11707744: cap 0: Start a parallel conjunction 0x2526850, static_id: 2+11707866: cap 0: Create spark for conjunction: 0x2526850 spark: 0x2e8+11708185: cap 0: Start a parallel conjunction 0x25268b0, static_id: 2+11708316: cap 0: Create spark for conjunction: 0x25268b0 spark: 0x2e9+11708505: cap 0: Start a parallel conjunction 0x2526910, static_id: 2+11708626: cap 0: Create spark for conjunction: 0x2526910 spark: 0x2ea+11708811: cap 0: Start a parallel conjunction 0x2526970, static_id: 2+11708937: cap 0: Create spark for conjunction: 0x2526970 spark: 0x2eb+11709126: cap 0: Start a parallel conjunction 0x25269d0, static_id: 2+11709247: cap 0: Create spark for conjunction: 0x25269d0 spark: 0x2ec+11709427: cap 0: Start a parallel conjunction 0x2526a30, static_id: 2+11709562: cap 0: Create spark for conjunction: 0x2526a30 spark: 0x2ed+11709742: cap 0: Start a parallel conjunction 0x2526a90, static_id: 2+11709864: cap 0: Create spark for conjunction: 0x2526a90 spark: 0x2ee+11710062: cap 0: Start a parallel conjunction 0x2526af0, static_id: 2+11710197: cap 0: Create spark for conjunction: 0x2526af0 spark: 0x2ef+11710372: cap 0: Start a parallel conjunction 0x2526b50, static_id: 2+11710503: cap 0: Create spark for conjunction: 0x2526b50 spark: 0x2f0+11710696: cap 0: Start a parallel conjunction 0x2526bb0, static_id: 2+11710827: cap 0: Create spark for conjunction: 0x2526bb0 spark: 0x2f1+11711011: cap 0: Start a parallel conjunction 0x2526c10, static_id: 2+11711128: cap 0: Create spark for conjunction: 0x2526c10 spark: 0x2f2+11711322: cap 0: Start a parallel conjunction 0x2526c70, static_id: 2+11711457: cap 0: Create spark for conjunction: 0x2526c70 spark: 0x2f3+11711637: cap 0: Start a parallel conjunction 0x2526cd0, static_id: 2+11711763: cap 0: Create spark for conjunction: 0x2526cd0 spark: 0x2f4+11711952: cap 0: Start a parallel conjunction 0x2526d30, static_id: 2+11712082: cap 0: Create spark for conjunction: 0x2526d30 spark: 0x2f5+11712271: cap 0: Start a parallel conjunction 0x2526d90, static_id: 2+11712397: cap 0: Create spark for conjunction: 0x2526d90 spark: 0x2f6+11712577: cap 0: Start a parallel conjunction 0x2526df0, static_id: 2+11712712: cap 0: Create spark for conjunction: 0x2526df0 spark: 0x2f7+11712888: cap 0: Start a parallel conjunction 0x2526e50, static_id: 2+11713009: cap 0: Create spark for conjunction: 0x2526e50 spark: 0x2f8+11713198: cap 0: Start a parallel conjunction 0x2526eb0, static_id: 2+11713329: cap 0: Create spark for conjunction: 0x2526eb0 spark: 0x2f9+11713504: cap 0: Start a parallel conjunction 0x2526f10, static_id: 2+11713626: cap 0: Create spark for conjunction: 0x2526f10 spark: 0x2fa+11713810: cap 0: Start a parallel conjunction 0x2526f70, static_id: 2+11713936: cap 0: Create spark for conjunction: 0x2526f70 spark: 0x2fb+11714130: cap 0: Start a parallel conjunction 0x2526fd0, static_id: 2+11714256: cap 0: Create spark for conjunction: 0x2526fd0 spark: 0x2fc+11714463: cap 0: Start a parallel conjunction 0x2527030, static_id: 2+11714598: cap 0: Create spark for conjunction: 0x2527030 spark: 0x2fd+11714787: cap 0: Start a parallel conjunction 0x2527090, static_id: 2+11714908: cap 0: Create spark for conjunction: 0x2527090 spark: 0x2fe+11715097: cap 0: Start a parallel conjunction 0x25270f0, static_id: 2+11715223: cap 0: Create spark for conjunction: 0x25270f0 spark: 0x2ff+11715403: cap 0: Start a parallel conjunction 0x2527150, static_id: 2+11715525: cap 0: Create spark for conjunction: 0x2527150 spark: 0x300+11715705: cap 0: Start a parallel conjunction 0x25271b0, static_id: 2+11715835: cap 0: Create spark for conjunction: 0x25271b0 spark: 0x301+11716015: cap 0: Start a parallel conjunction 0x2527210, static_id: 2+11716137: cap 0: Create spark for conjunction: 0x2527210 spark: 0x302+11716321: cap 0: Start a parallel conjunction 0x2527270, static_id: 2+11716452: cap 0: Create spark for conjunction: 0x2527270 spark: 0x303+11716632: cap 0: Start a parallel conjunction 0x25272d0, static_id: 2+11716803: cap 0: Create spark for conjunction: 0x25272d0 spark: 0x304+11716987: cap 0: Start a parallel conjunction 0x2527330, static_id: 2+11717113: cap 0: Create spark for conjunction: 0x2527330 spark: 0x305+11717302: cap 0: Start a parallel conjunction 0x2527390, static_id: 2+11717424: cap 0: Create spark for conjunction: 0x2527390 spark: 0x306+11717604: cap 0: Start a parallel conjunction 0x25273f0, static_id: 2+11717743: cap 0: Create spark for conjunction: 0x25273f0 spark: 0x307+11717919: cap 0: Start a parallel conjunction 0x2527450, static_id: 2+11718085: cap 0: Create spark for conjunction: 0x2527450 spark: 0x308+11718288: cap 0: Start a parallel conjunction 0x25274b0, static_id: 2+11718418: cap 0: Create spark for conjunction: 0x25274b0 spark: 0x309+11718594: cap 0: Start a parallel conjunction 0x2527510, static_id: 2+11718720: cap 0: Create spark for conjunction: 0x2527510 spark: 0x30a+11718904: cap 0: Start a parallel conjunction 0x2527570, static_id: 2+11719035: cap 0: Create spark for conjunction: 0x2527570 spark: 0x30b+11719219: cap 0: Start a parallel conjunction 0x25275d0, static_id: 2+11719341: cap 0: Create spark for conjunction: 0x25275d0 spark: 0x30c+11719525: cap 0: Start a parallel conjunction 0x2527630, static_id: 2+11719669: cap 0: Create spark for conjunction: 0x2527630 spark: 0x30d+11719849: cap 0: Start a parallel conjunction 0x2527690, static_id: 2+11719971: cap 0: Create spark for conjunction: 0x2527690 spark: 0x30e+11720155: cap 0: Start a parallel conjunction 0x25276f0, static_id: 2+11720290: cap 0: Create spark for conjunction: 0x25276f0 spark: 0x30f+11720475: cap 0: Start a parallel conjunction 0x2527750, static_id: 2+11720601: cap 0: Create spark for conjunction: 0x2527750 spark: 0x310+11720776: cap 0: Start a parallel conjunction 0x25277b0, static_id: 2+11720907: cap 0: Create spark for conjunction: 0x25277b0 spark: 0x311+11721087: cap 0: Start a parallel conjunction 0x2527810, static_id: 2+11721204: cap 0: Create spark for conjunction: 0x2527810 spark: 0x312+11721393: cap 0: Start a parallel conjunction 0x2527870, static_id: 2+11721528: cap 0: Create spark for conjunction: 0x2527870 spark: 0x313+11721708: cap 0: Start a parallel conjunction 0x25278d0, static_id: 2+11721834: cap 0: Create spark for conjunction: 0x25278d0 spark: 0x314+11722149: cap 0: Start a parallel conjunction 0x2527930, static_id: 2+11722275: cap 0: Create spark for conjunction: 0x2527930 spark: 0x315+11722464: cap 0: Start a parallel conjunction 0x2527990, static_id: 2+11722590: cap 0: Create spark for conjunction: 0x2527990 spark: 0x316+11722770: cap 0: Start a parallel conjunction 0x25279f0, static_id: 2+11722905: cap 0: Create spark for conjunction: 0x25279f0 spark: 0x317+11723089: cap 0: Start a parallel conjunction 0x2527a50, static_id: 2+11723215: cap 0: Create spark for conjunction: 0x2527a50 spark: 0x318+11723400: cap 0: Start a parallel conjunction 0x2527ab0, static_id: 2+11723535: cap 0: Create spark for conjunction: 0x2527ab0 spark: 0x319+11723715: cap 0: Start a parallel conjunction 0x2527b10, static_id: 2+11723836: cap 0: Create spark for conjunction: 0x2527b10 spark: 0x31a+11724021: cap 0: Start a parallel conjunction 0x2527b70, static_id: 2+11724151: cap 0: Create spark for conjunction: 0x2527b70 spark: 0x31b+11724340: cap 0: Start a parallel conjunction 0x2527bd0, static_id: 2+11724462: cap 0: Create spark for conjunction: 0x2527bd0 spark: 0x31c+11724642: cap 0: Start a parallel conjunction 0x2527c30, static_id: 2+11724781: cap 0: Create spark for conjunction: 0x2527c30 spark: 0x31d+11724961: cap 0: Start a parallel conjunction 0x2527c90, static_id: 2+11725092: cap 0: Create spark for conjunction: 0x2527c90 spark: 0x31e+11725285: cap 0: Start a parallel conjunction 0x2527cf0, static_id: 2+11725425: cap 0: Create spark for conjunction: 0x2527cf0 spark: 0x31f+11728597: cap 0: End par conjunct: 0x2527cf0+11730312: cap 0: running a local spark+12148717: cap 3: creating spark thread 3+12149284: cap 3: running thread 3+12335386: cap 2: creating spark thread 2+12336304: cap 2: running thread 2+12609625: cap 1: creating spark thread 4+12610075: cap 1: running thread 4+12877888: cap 3: End par conjunct: 0x25151b0+12878455: cap 3: Trying to steal a spark+12879013: cap 3: stealing a spark from cap 0+13341195: cap 2: End par conjunct: 0x2515150+13342090: cap 2: Trying to steal a spark+13343094: cap 2: stealing a spark from cap 0+13501534: cap 3: End par conjunct: 0x2515270+13501827: cap 3: Trying to steal a spark+13502322: cap 3: stealing a spark from cap 0+13596930: cap 1: End par conjunct: 0x2515210+13597681: cap 1: Trying to steal a spark+13598401: cap 1: stealing a spark from cap 0+14083335: cap 1: stopping thread 4 (heap overflow)+14083542: cap 1: starting GC+14136727: cap 0: stopping thread 1 (thread yielding)+14140219: cap 3: stopping thread 3 (thread yielding)+14149165: cap 2: stopping thread 2 (thread yielding)+23736676: cap 0: running thread 1+23740087: cap 3: running thread 3+23748079: cap 2: running thread 2+23783076: cap 1: finished GC+23783292: cap 1: running thread 4+24076197: cap 2: End par conjunct: 0x25152d0+24078132: cap 2: Trying to steal a spark+24079986: cap 2: stealing a spark from cap 0+24232905: cap 3: End par conjunct: 0x2515330+24233566: cap 3: Trying to steal a spark+24234601: cap 3: stealing a spark from cap 0+24254811: cap 1: End par conjunct: 0x2515390+24255621: cap 1: Trying to steal a spark+24256161: cap 1: stealing a spark from cap 0+24726721: cap 2: End par conjunct: 0x25153f0+24726996: cap 2: Trying to steal a spark+24727351: cap 2: stealing a spark from cap 0+24884374: cap 1: End par conjunct: 0x25154b0+24884775: cap 1: Trying to steal a spark+24884995: cap 1: stealing a spark from cap 0+25181676: cap 3: End par conjunct: 0x2515450+25182256: cap 3: Trying to steal a spark+25182837: cap 3: stealing a spark from cap 0+25332556: cap 2: End par conjunct: 0x2515510+25332939: cap 2: Trying to steal a spark+25333330: cap 2: stealing a spark from cap 0+25496014: cap 1: End par conjunct: 0x2515570+25496253: cap 1: Trying to steal a spark+25496473: cap 1: stealing a spark from cap 0+25927915: cap 2: End par conjunct: 0x2515630+25928122: cap 2: Trying to steal a spark+25928334: cap 2: stealing a spark from cap 0+26084745: cap 3: End par conjunct: 0x25155d0+26085249: cap 3: Trying to steal a spark+26085843: cap 3: stealing a spark from cap 0+26090298: cap 1: End par conjunct: 0x2515690+26090689: cap 1: Trying to steal a spark+26091085: cap 1: stealing a spark from cap 0+26536383: cap 2: End par conjunct: 0x25156f0+26536603: cap 2: Trying to steal a spark+26536914: cap 2: stealing a spark from cap 0+26692762: cap 1: End par conjunct: 0x25157b0+26692992: cap 1: Trying to steal a spark+26693203: cap 1: stealing a spark from cap 0+26979043: cap 3: End par conjunct: 0x2515750+26979642: cap 3: Trying to steal a spark+26980258: cap 3: stealing a spark from cap 0+27137002: cap 2: End par conjunct: 0x2515810+27137416: cap 2: Trying to steal a spark+27137952: cap 2: stealing a spark from cap 0+27307827: cap 1: End par conjunct: 0x2515870+27308056: cap 1: Trying to steal a spark+27308272: cap 1: stealing a spark from cap 0+27746244: cap 2: End par conjunct: 0x2515930+27746469: cap 2: Trying to steal a spark+27746680: cap 2: stealing a spark from cap 0+27876528: cap 3: End par conjunct: 0x25158d0+27877045: cap 3: Trying to steal a spark+27877761: cap 3: stealing a spark from cap 0+27921861: cap 1: End par conjunct: 0x2515990+27922432: cap 1: Trying to steal a spark+27922869: cap 1: stealing a spark from cap 0+28351957: cap 2: End par conjunct: 0x25159f0+28352187: cap 2: Trying to steal a spark+28352407: cap 2: stealing a spark from cap 0+28533199: cap 1: End par conjunct: 0x2515ab0+28533424: cap 1: Trying to steal a spark+28533631: cap 1: stealing a spark from cap 0+28780488: cap 3: End par conjunct: 0x2515a50+28780996: cap 3: Trying to steal a spark+28781604: cap 3: stealing a spark from cap 0+28984594: cap 2: End par conjunct: 0x2515b10+28985049: cap 2: Trying to steal a spark+28985485: cap 2: stealing a spark from cap 0+29173518: cap 1: End par conjunct: 0x2515b70+29173806: cap 1: Trying to steal a spark+29174062: cap 1: stealing a spark from cap 0+29588274: cap 2: End par conjunct: 0x2515c30+29588494: cap 2: Trying to steal a spark+29588706: cap 2: stealing a spark from cap 0+29705886: cap 3: End par conjunct: 0x2515bd0+29706475: cap 3: Trying to steal a spark+29707047: cap 3: stealing a spark from cap 0+29788911: cap 1: End par conjunct: 0x2515c90+29789302: cap 1: Trying to steal a spark+29789694: cap 1: stealing a spark from cap 0+30185464: cap 2: End par conjunct: 0x2515cf0+30185671: cap 2: Trying to steal a spark+30185982: cap 2: stealing a spark from cap 0+30392149: cap 1: End par conjunct: 0x2515db0+30392374: cap 1: Trying to steal a spark+30392590: cap 1: stealing a spark from cap 0+30611209: cap 3: End par conjunct: 0x2515d50+30611916: cap 3: Trying to steal a spark+30612640: cap 3: stealing a spark from cap 0+30809916: cap 2: End par conjunct: 0x2515e10+30810312: cap 2: Trying to steal a spark+30810712: cap 2: stealing a spark from cap 0+31008384: cap 1: End par conjunct: 0x2515e70+31008600: cap 1: Trying to steal a spark+31008901: cap 1: stealing a spark from cap 0+31420368: cap 2: End par conjunct: 0x2515f30+31420593: cap 2: Trying to steal a spark+31420809: cap 2: stealing a spark from cap 0+31533394: cap 3: End par conjunct: 0x2515ed0+31533984: cap 3: Trying to steal a spark+31534591: cap 3: stealing a spark from cap 0+31615168: cap 1: End par conjunct: 0x2515f90+31615596: cap 1: Trying to steal a spark+31615992: cap 1: stealing a spark from cap 0+32033641: cap 2: End par conjunct: 0x2515ff0+32033866: cap 2: Trying to steal a spark+32034177: cap 2: stealing a spark from cap 0+32268591: cap 1: End par conjunct: 0x25160b0+32268874: cap 1: Trying to steal a spark+32269131: cap 1: stealing a spark from cap 0+32468868: cap 3: End par conjunct: 0x2516050+32469426: cap 3: Trying to steal a spark+32470078: cap 3: stealing a spark from cap 0+32677348: cap 2: End par conjunct: 0x2516110+32677776: cap 2: Trying to steal a spark+32678208: cap 2: stealing a spark from cap 0+32876379: cap 1: End par conjunct: 0x2516170+32876590: cap 1: Trying to steal a spark+32876811: cap 1: stealing a spark from cap 0+33304153: cap 2: End par conjunct: 0x2516230+33304374: cap 2: Trying to steal a spark+33304684: cap 2: stealing a spark from cap 0+33398968: cap 3: End par conjunct: 0x25161d0+33399441: cap 3: Trying to steal a spark+33399936: cap 3: stealing a spark from cap 0+33498414: cap 1: End par conjunct: 0x2516290+33498900: cap 1: Trying to steal a spark+33499372: cap 1: stealing a spark from cap 0+33926773: cap 2: End par conjunct: 0x25162f0+33927003: cap 2: Trying to steal a spark+33927219: cap 2: stealing a spark from cap 0+34125759: cap 1: End par conjunct: 0x25163b0+34125984: cap 1: Trying to steal a spark+34126200: cap 1: stealing a spark from cap 0+34343518: cap 3: End par conjunct: 0x2516350+34344018: cap 3: Trying to steal a spark+34344841: cap 3: stealing a spark from cap 0+34555158: cap 2: End par conjunct: 0x2516410+34555585: cap 2: Trying to steal a spark+34555999: cap 2: stealing a spark from cap 0+34755426: cap 1: End par conjunct: 0x2516470+34755651: cap 1: Trying to steal a spark+34755885: cap 1: stealing a spark from cap 0+35181679: cap 2: End par conjunct: 0x2516530+35181904: cap 2: Trying to steal a spark+35182219: cap 2: stealing a spark from cap 0+35299462: cap 3: End par conjunct: 0x25164d0+35300011: cap 3: Trying to steal a spark+35300614: cap 3: stealing a spark from cap 0+35403894: cap 1: End par conjunct: 0x2516590+35404425: cap 1: Trying to steal a spark+35404992: cap 1: stealing a spark from cap 0+35817421: cap 2: End par conjunct: 0x25165f0+35817651: cap 2: Trying to steal a spark+35817867: cap 2: stealing a spark from cap 0+36025614: cap 1: End par conjunct: 0x25166b0+36025843: cap 1: Trying to steal a spark+36026055: cap 1: stealing a spark from cap 0+36222511: cap 3: End par conjunct: 0x2516650+36223024: cap 3: Trying to steal a spark+36223618: cap 3: stealing a spark from cap 0+36455044: cap 2: End par conjunct: 0x2516710+36455602: cap 2: Trying to steal a spark+36456102: cap 2: stealing a spark from cap 0+36668988: cap 1: End par conjunct: 0x2516770+36669204: cap 1: Trying to steal a spark+36669415: cap 1: stealing a spark from cap 0+37113880: cap 2: End par conjunct: 0x2516830+37114330: cap 2: Trying to steal a spark+37114650: cap 2: stealing a spark from cap 0+37175854: cap 3: End par conjunct: 0x25167d0+37176363: cap 3: Trying to steal a spark+37176957: cap 3: stealing a spark from cap 0+37328764: cap 1: End par conjunct: 0x2516890+37329291: cap 1: Trying to steal a spark+37329781: cap 1: stealing a spark from cap 0+37769184: cap 2: End par conjunct: 0x25168f0+37769454: cap 2: Trying to steal a spark+37769818: cap 2: stealing a spark from cap 0+37969281: cap 1: End par conjunct: 0x25169b0+37969506: cap 1: Trying to steal a spark+37969722: cap 1: stealing a spark from cap 0+38118726: cap 3: End par conjunct: 0x2516950+38119275: cap 3: Trying to steal a spark+38119873: cap 3: stealing a spark from cap 0+38409223: cap 2: End par conjunct: 0x2516a10+38409628: cap 2: Trying to steal a spark+38410029: cap 2: stealing a spark from cap 0+38624274: cap 1: End par conjunct: 0x2516a70+38624539: cap 1: Trying to steal a spark+38624760: cap 1: stealing a spark from cap 0+39093678: cap 2: End par conjunct: 0x2516b30+39093957: cap 2: Trying to steal a spark+39094204: cap 2: stealing a spark from cap 0+39133138: cap 3: End par conjunct: 0x2516ad0+39133723: cap 3: Trying to steal a spark+39134574: cap 3: stealing a spark from cap 0+39276504: cap 1: End par conjunct: 0x2516b90+39276913: cap 1: Trying to steal a spark+39277332: cap 1: stealing a spark from cap 0+39746497: cap 2: End par conjunct: 0x2516bf0+39746718: cap 2: Trying to steal a spark+39746938: cap 2: stealing a spark from cap 0+39951765: cap 1: End par conjunct: 0x2516cb0+39952062: cap 1: Trying to steal a spark+39952341: cap 1: stealing a spark from cap 0+40113454: cap 3: End par conjunct: 0x2516c50+40113999: cap 3: Trying to steal a spark+40114507: cap 3: stealing a spark from cap 0+40408366: cap 2: End par conjunct: 0x2516d10+40408816: cap 2: Trying to steal a spark+40409239: cap 2: stealing a spark from cap 0+40619043: cap 1: End par conjunct: 0x2516d70+40619268: cap 1: Trying to steal a spark+40619488: cap 1: stealing a spark from cap 0+41067765: cap 2: End par conjunct: 0x2516e30+41068017: cap 2: Trying to steal a spark+41068260: cap 2: stealing a spark from cap 0+41114754: cap 3: End par conjunct: 0x2516dd0+41115456: cap 3: Trying to steal a spark+41116095: cap 3: stealing a spark from cap 0+41283873: cap 1: End par conjunct: 0x2516e90+41284156: cap 1: Trying to steal a spark+41284548: cap 1: stealing a spark from cap 0+41730048: cap 2: End par conjunct: 0x2516ef0+41730273: cap 2: Trying to steal a spark+41730583: cap 2: stealing a spark from cap 0+41952546: cap 1: End par conjunct: 0x2516fb0+41952771: cap 1: Trying to steal a spark+41952982: cap 1: stealing a spark from cap 0+42100420: cap 3: End par conjunct: 0x2516f50+42100924: cap 3: Trying to steal a spark+42101577: cap 3: stealing a spark from cap 0+42400962: cap 2: End par conjunct: 0x2517010+42401286: cap 2: Trying to steal a spark+42401709: cap 2: stealing a spark from cap 0+42633526: cap 1: End par conjunct: 0x2517070+42633801: cap 1: Trying to steal a spark+42634035: cap 1: stealing a spark from cap 0+43071579: cap 2: End par conjunct: 0x2517130+43071804: cap 2: Trying to steal a spark+43072141: cap 2: stealing a spark from cap 0+43098408: cap 3: End par conjunct: 0x25170d0+43099047: cap 3: Trying to steal a spark+43099650: cap 3: stealing a spark from cap 0+43299085: cap 1: End par conjunct: 0x2517190+43299540: cap 1: Trying to steal a spark+43299994: cap 1: stealing a spark from cap 0+43749342: cap 2: End par conjunct: 0x25171f0+43749675: cap 2: Trying to steal a spark+43749981: cap 2: stealing a spark from cap 0+43987482: cap 1: End par conjunct: 0x25172b0+43987711: cap 1: Trying to steal a spark+43987927: cap 1: stealing a spark from cap 0+44106511: cap 3: End par conjunct: 0x2517250+44107020: cap 3: Trying to steal a spark+44107524: cap 3: stealing a spark from cap 0+44435862: cap 2: End par conjunct: 0x2517310+44436258: cap 2: Trying to steal a spark+44436654: cap 2: stealing a spark from cap 0+44685877: cap 1: End par conjunct: 0x2517370+44686093: cap 1: Trying to steal a spark+44686305: cap 1: stealing a spark from cap 0+45133911: cap 2: End par conjunct: 0x2517430+45134136: cap 2: Trying to steal a spark+45134446: cap 2: stealing a spark from cap 0+45154615: cap 3: End par conjunct: 0x25173d0+45155164: cap 3: Trying to steal a spark+45155763: cap 3: stealing a spark from cap 0+45397935: cap 1: End par conjunct: 0x2517490+45398326: cap 1: Trying to steal a spark+45398718: cap 1: stealing a spark from cap 0+45836001: cap 2: End par conjunct: 0x25174f0+45836226: cap 2: Trying to steal a spark+45836541: cap 2: stealing a spark from cap 0+46110154: cap 1: End par conjunct: 0x25175b0+46110379: cap 1: Trying to steal a spark+46110595: cap 1: stealing a spark from cap 0+46221808: cap 3: End par conjunct: 0x2517550+46222308: cap 3: Trying to steal a spark+46222902: cap 3: stealing a spark from cap 0+46588792: cap 2: End par conjunct: 0x2517610+46589211: cap 2: Trying to steal a spark+46589625: cap 2: stealing a spark from cap 0+46844860: cap 1: End par conjunct: 0x2517670+46845072: cap 1: Trying to steal a spark+46845288: cap 1: stealing a spark from cap 0+47312941: cap 2: End par conjunct: 0x2517730+47313166: cap 2: Trying to steal a spark+47313477: cap 2: stealing a spark from cap 0+47330820: cap 3: End par conjunct: 0x25176d0+47331400: cap 3: Trying to steal a spark+47332035: cap 3: stealing a spark from cap 0+47604280: cap 1: End par conjunct: 0x2517790+47604735: cap 1: Trying to steal a spark+47605203: cap 1: stealing a spark from cap 0+48060094: cap 2: End par conjunct: 0x25177f0+48060297: cap 2: Trying to steal a spark+48060603: cap 2: stealing a spark from cap 0+48358003: cap 1: End par conjunct: 0x25178b0+48358228: cap 1: Trying to steal a spark+48358458: cap 1: stealing a spark from cap 0+48437491: cap 3: End par conjunct: 0x2517850+48437964: cap 3: Trying to steal a spark+48438558: cap 3: stealing a spark from cap 0+48805825: cap 2: End par conjunct: 0x2517910+48806239: cap 2: Trying to steal a spark+48806824: cap 2: stealing a spark from cap 0+49100440: cap 1: End par conjunct: 0x2517970+49100665: cap 1: Trying to steal a spark+49100886: cap 1: stealing a spark from cap 0+49579861: cap 3: End par conjunct: 0x25179d0+49580419: cap 3: Trying to steal a spark+49581022: cap 3: stealing a spark from cap 0+49636854: cap 2: End par conjunct: 0x2517a30+49637754: cap 2: Trying to steal a spark+49638730: cap 2: stealing a spark from cap 0+49870381: cap 1: End par conjunct: 0x2517a90+49870705: cap 1: Trying to steal a spark+49870917: cap 1: stealing a spark from cap 0+50426550: cap 2: End par conjunct: 0x2517b50+50426932: cap 2: Trying to steal a spark+50427261: cap 2: stealing a spark from cap 0+50665230: cap 1: End par conjunct: 0x2517bb0+50665441: cap 1: Trying to steal a spark+50665653: cap 1: stealing a spark from cap 0+50830560: cap 3: End par conjunct: 0x2517af0+50831068: cap 3: Trying to steal a spark+50831662: cap 3: stealing a spark from cap 0+51224148: cap 2: End par conjunct: 0x2517c10+51224454: cap 2: Trying to steal a spark+51225012: cap 2: stealing a spark from cap 0+51483465: cap 1: End par conjunct: 0x2517c70+51483685: cap 1: Trying to steal a spark+51483906: cap 1: stealing a spark from cap 0+52064626: cap 3: End par conjunct: 0x2517cd0+52065135: cap 3: Trying to steal a spark+52065729: cap 3: stealing a spark from cap 0+52247997: cap 2: End par conjunct: 0x2517d30+52248433: cap 2: Trying to steal a spark+52248924: cap 2: stealing a spark from cap 0+52314489: cap 1: End par conjunct: 0x2517d90+52314921: cap 1: Trying to steal a spark+52315168: cap 1: stealing a spark from cap 0+53089573: cap 2: End par conjunct: 0x2517e50+53089983: cap 2: Trying to steal a spark+53090334: cap 2: stealing a spark from cap 0+53148744: cap 1: End par conjunct: 0x2517eb0+53148991: cap 1: Trying to steal a spark+53149203: cap 1: stealing a spark from cap 0+53306419: cap 3: End par conjunct: 0x2517df0+53306928: cap 3: Trying to steal a spark+53307544: cap 3: stealing a spark from cap 0+53907304: cap 2: End par conjunct: 0x2517f10+53907579: cap 2: Trying to steal a spark+53907961: cap 2: stealing a spark from cap 0+54013536: cap 1: End par conjunct: 0x2517f70+54013806: cap 1: Trying to steal a spark+54014022: cap 1: stealing a spark from cap 0+54337927: cap 3: End par conjunct: 0x2517fd0+54338431: cap 3: Trying to steal a spark+54338931: cap 3: stealing a spark from cap 0+54762241: cap 2: End par conjunct: 0x2518030+54762664: cap 2: Trying to steal a spark+54763177: cap 2: stealing a spark from cap 0+54909072: cap 1: End par conjunct: 0x2518090+54909450: cap 1: Trying to steal a spark+54909684: cap 1: stealing a spark from cap 0+55878903: cap 2: End par conjunct: 0x2518150+55879249: cap 2: Trying to steal a spark+55879465: cap 2: stealing a spark from cap 0+55923277: cap 3: End par conjunct: 0x25180f0+55923610: cap 3: Trying to steal a spark+55924101: cap 3: stealing a spark from cap 0+56954371: cap 1: End par conjunct: 0x25181b0+56954632: cap 1: Trying to steal a spark+56955096: cap 1: stealing a spark from cap 0+58131936: cap 2: End par conjunct: 0x2518210+58132260: cap 2: Trying to steal a spark+58132476: cap 2: stealing a spark from cap 0+58232556: cap 3: End par conjunct: 0x2518270+58232889: cap 3: Trying to steal a spark+58233262: cap 3: stealing a spark from cap 0+59230395: cap 1: End par conjunct: 0x25182d0+59231034: cap 1: Trying to steal a spark+59231439: cap 1: stealing a spark from cap 0+59402803: cap 3: End par conjunct: 0x2518390+59403244: cap 3: Trying to steal a spark+59403739: cap 3: stealing a spark from cap 0+59775511: cap 2: End par conjunct: 0x2518330+59775781: cap 2: Trying to steal a spark+59776168: cap 2: stealing a spark from cap 0+60382269: cap 3: End par conjunct: 0x2518450+60382647: cap 3: Trying to steal a spark+60383133: cap 3: stealing a spark from cap 0+60445363: cap 1: End par conjunct: 0x25183f0+60445737: cap 1: Trying to steal a spark+60446155: cap 1: stealing a spark from cap 0+61507039: cap 2: End par conjunct: 0x25184b0+61507665: cap 2: Trying to steal a spark+61508101: cap 2: stealing a spark from cap 0+62346784: cap 1: End par conjunct: 0x2518570+62347000: cap 1: Trying to steal a spark+62347216: cap 1: stealing a spark from cap 0+62512888: cap 3: End par conjunct: 0x2518510+62513284: cap 3: Trying to steal a spark+62513658: cap 3: stealing a spark from cap 0+63392238: cap 2: End par conjunct: 0x25185d0+63392625: cap 2: Trying to steal a spark+63393111: cap 2: stealing a spark from cap 0+63590472: cap 3: End par conjunct: 0x2518690+63590904: cap 3: Trying to steal a spark+63591385: cap 3: stealing a spark from cap 0+64123029: cap 1: End par conjunct: 0x2518630+64123375: cap 1: Trying to steal a spark+64123893: cap 1: stealing a spark from cap 0+64477633: cap 2: End par conjunct: 0x25186f0+64477975: cap 2: Trying to steal a spark+64478223: cap 2: stealing a spark from cap 0+64722933: cap 3: End par conjunct: 0x2518750+64723369: cap 3: Trying to steal a spark+64723851: cap 3: stealing a spark from cap 0+65542941: cap 1: End par conjunct: 0x25187b0+65543301: cap 1: Trying to steal a spark+65543782: cap 1: stealing a spark from cap 0+65650234: cap 2: End par conjunct: 0x2518810+65650576: cap 2: Trying to steal a spark+65650788: cap 2: stealing a spark from cap 0+66578935: cap 3: End par conjunct: 0x2518870+66579484: cap 3: Trying to steal a spark+66580056: cap 3: stealing a spark from cap 0+66854529: cap 2: End par conjunct: 0x2518930+66854853: cap 2: Trying to steal a spark+66855343: cap 2: stealing a spark from cap 0+66946320: cap 1: End par conjunct: 0x25188d0+66946707: cap 1: Trying to steal a spark+66946963: cap 1: stealing a spark from cap 0+67733041: cap 3: End par conjunct: 0x2518990+67733455: cap 3: Trying to steal a spark+67733950: cap 3: stealing a spark from cap 0+68058499: cap 2: End par conjunct: 0x25189f0+68058882: cap 2: Trying to steal a spark+68059377: cap 2: stealing a spark from cap 0+68678649: cap 1: End par conjunct: 0x2518a50+68678982: cap 1: Trying to steal a spark+68679229: cap 1: stealing a spark from cap 0+69240861: cap 3: End par conjunct: 0x2518ab0+69241176: cap 3: Trying to steal a spark+69241567: cap 3: stealing a spark from cap 0+69304954: cap 2: End par conjunct: 0x2518b10+69305319: cap 2: Trying to steal a spark+69305692: cap 2: stealing a spark from cap 0+70140240: cap 1: End par conjunct: 0x2518b70+70140469: cap 1: Trying to steal a spark+70140685: cap 1: stealing a spark from cap 0+70773511: cap 3: End par conjunct: 0x2518bd0+70773885: cap 3: Trying to steal a spark+70774366: cap 3: stealing a spark from cap 0+70808850: cap 2: End par conjunct: 0x2518c30+70809367: cap 2: Trying to steal a spark+70809768: cap 2: stealing a spark from cap 0+71873527: cap 1: End par conjunct: 0x2518c90+71873860: cap 1: Trying to steal a spark+71874072: cap 1: stealing a spark from cap 0+72283689: cap 2: End par conjunct: 0x2518d50+72284017: cap 2: Trying to steal a spark+72284233: cap 2: stealing a spark from cap 0+73054251: cap 3: End par conjunct: 0x2518cf0+73054732: cap 3: Trying to steal a spark+73055466: cap 3: stealing a spark from cap 0+73159285: cap 1: End par conjunct: 0x2518db0+73159722: cap 1: Trying to steal a spark+73160388: cap 1: stealing a spark from cap 0+74440966: cap 3: End par conjunct: 0x2518e70+74441227: cap 3: Trying to steal a spark+74441610: cap 3: stealing a spark from cap 0+74785315: cap 2: End par conjunct: 0x2518e10+74786017: cap 2: Trying to steal a spark+74787043: cap 2: stealing a spark from cap 0+75288483: cap 1: End par conjunct: 0x2518ed0+75288820: cap 1: Trying to steal a spark+75289032: cap 1: stealing a spark from cap 0+77436747: cap 3: End par conjunct: 0x2518f30+77437134: cap 3: Trying to steal a spark+77437759: cap 3: stealing a spark from cap 0+78004147: cap 2: End par conjunct: 0x2518f90+78004602: cap 2: Trying to steal a spark+78005169: cap 2: stealing a spark from cap 0+78438784: cap 1: End par conjunct: 0x2518ff0+78439081: cap 1: Trying to steal a spark+78439360: cap 1: stealing a spark from cap 0+80926996: cap 3: End par conjunct: 0x2519050+80927392: cap 3: Trying to steal a spark+80927775: cap 3: stealing a spark from cap 0+82047559: cap 2: End par conjunct: 0x25190b0+82047987: cap 2: Trying to steal a spark+82048459: cap 2: stealing a spark from cap 0+83968875: cap 1: End par conjunct: 0x2519110+83969217: cap 1: Trying to steal a spark+83969428: cap 1: stealing a spark from cap 0+86729665: cap 3: End par conjunct: 0x2519170+86730021: cap 3: Trying to steal a spark+86730417: cap 3: stealing a spark from cap 0+88351767: cap 2: End par conjunct: 0x25191d0+88352401: cap 2: Trying to steal a spark+88353040: cap 2: stealing a spark from cap 0+91559997: cap 1: End par conjunct: 0x2519230+91560532: cap 1: Trying to steal a spark+91560888: cap 1: stealing a spark from cap 0+94191606: cap 3: End par conjunct: 0x2519290+94192038: cap 3: Trying to steal a spark+94192447: cap 3: stealing a spark from cap 0+96909921: cap 2: End par conjunct: 0x25192f0+96910249: cap 2: Trying to steal a spark+96910677: cap 2: stealing a spark from cap 0+101435247: cap 1: End par conjunct: 0x2519350+101435656: cap 1: Trying to steal a spark+101435913: cap 1: stealing a spark from cap 0+106433743: cap 3: End par conjunct: 0x25193b0+106434189: cap 3: Trying to steal a spark+106434796: cap 3: stealing a spark from cap 0+109706557: cap 2: End par conjunct: 0x2519410+109707070: cap 2: Trying to steal a spark+109707538: cap 2: stealing a spark from cap 0+114820515: cap 1: End par conjunct: 0x2519470+114820857: cap 1: Trying to steal a spark+114821217: cap 1: stealing a spark from cap 0+119917665: cap 3: End par conjunct: 0x25194d0+119918088: cap 3: Trying to steal a spark+119918511: cap 3: stealing a spark from cap 0+123108241: cap 2: End par conjunct: 0x2519530+123108687: cap 2: Trying to steal a spark+123109312: cap 2: stealing a spark from cap 0+128630704: cap 1: End par conjunct: 0x2519590+128631078: cap 1: Trying to steal a spark+128631334: cap 1: stealing a spark from cap 0+134686683: cap 3: End par conjunct: 0x25195f0+134687052: cap 3: Trying to steal a spark+134687601: cap 3: stealing a spark from cap 0+137862301: cap 2: End par conjunct: 0x2519650+137862945: cap 2: Trying to steal a spark+137863800: cap 2: stealing a spark from cap 0+144241731: cap 1: End par conjunct: 0x25196b0+144242343: cap 1: Trying to steal a spark+144242730: cap 1: stealing a spark from cap 0+151251367: cap 3: End par conjunct: 0x2519710+151251804: cap 3: Trying to steal a spark+151252218: cap 3: stealing a spark from cap 0+156148578: cap 2: End par conjunct: 0x2519770+156149059: cap 2: Trying to steal a spark+156149635: cap 2: stealing a spark from cap 0+164802690: cap 1: End par conjunct: 0x25197d0+164803180: cap 1: Trying to steal a spark+164803441: cap 1: stealing a spark from cap 0+172408338: cap 3: End par conjunct: 0x2519830+172408693: cap 3: Trying to steal a spark+172409116: cap 3: stealing a spark from cap 0+178849849: cap 2: End par conjunct: 0x2519890+178850839: cap 2: Trying to steal a spark+178851514: cap 2: stealing a spark from cap 0+190023232: cap 1: End par conjunct: 0x25198f0+190023628: cap 1: Trying to steal a spark+190024060: cap 1: stealing a spark from cap 0+198545305: cap 3: End par conjunct: 0x2519950+198545724: cap 3: Trying to steal a spark+198546151: cap 3: stealing a spark from cap 0+198953811: cap 0: End par conjunct: 0x2527cf0+198958869: cap 0: End par conjunction: 0x2527cf0+198959206: cap 0: End par conjunct: 0x2527c90+198959832: cap 0: running a local spark+204747844: cap 2: End par conjunct: 0x25199b0+204748560: cap 2: Trying to steal a spark+204749253: cap 2: stealing a spark from cap 0+216975420: cap 1: End par conjunct: 0x2519a10+216976068: cap 1: Trying to steal a spark+216976392: cap 1: stealing a spark from cap 0+226126588: cap 3: End par conjunct: 0x2519a70+226127047: cap 3: Trying to steal a spark+226127484: cap 3: stealing a spark from cap 0+231747502: cap 2: End par conjunct: 0x2519ad0+231747970: cap 2: Trying to steal a spark+231748443: cap 2: stealing a spark from cap 0+247099896: cap 1: End par conjunct: 0x2519b30+247100737: cap 1: Trying to steal a spark+247101367: cap 1: stealing a spark from cap 0+255828780: cap 3: End par conjunct: 0x2519b90+255829216: cap 3: Trying to steal a spark+255829729: cap 3: stealing a spark from cap 0+260583750: cap 2: End par conjunct: 0x2519bf0+260584209: cap 2: Trying to steal a spark+260584807: cap 2: stealing a spark from cap 0+274906435: cap 1: End par conjunct: 0x2519c50+274906827: cap 1: Trying to steal a spark+274907083: cap 1: stealing a spark from cap 0+284926387: cap 3: End par conjunct: 0x2519cb0+284926752: cap 3: Trying to steal a spark+284927184: cap 3: stealing a spark from cap 0+290982267: cap 2: End par conjunct: 0x2519d10+290983005: cap 2: Trying to steal a spark+290983702: cap 2: stealing a spark from cap 0+307252908: cap 1: End par conjunct: 0x2519d70+307253191: cap 1: Trying to steal a spark+307253569: cap 1: stealing a spark from cap 0+319299286: cap 3: End par conjunct: 0x2519dd0+319299700: cap 3: Trying to steal a spark+319300159: cap 3: stealing a spark from cap 0+326048778: cap 2: End par conjunct: 0x2519e30+326049336: cap 2: Trying to steal a spark+326049898: cap 2: stealing a spark from cap 0+350669619: cap 1: End par conjunct: 0x2519e90+350670901: cap 1: Trying to steal a spark+350671846: cap 1: stealing a spark from cap 0+358029666: cap 3: End par conjunct: 0x2519ef0+358030057: cap 3: Trying to steal a spark+358030525: cap 3: stealing a spark from cap 0+364705011: cap 2: End par conjunct: 0x2519f50+364706158: cap 2: Trying to steal a spark+364706928: cap 2: stealing a spark from cap 0+365778837: cap 0: End par conjunct: 0x2527c90+365779084: cap 0: End par conjunction: 0x2527c90+365779363: cap 0: End par conjunct: 0x2527c30+365779795: cap 0: running a local spark+391049748: cap 1: End par conjunct: 0x2519fb0+391050117: cap 1: Trying to steal a spark+391050733: cap 1: stealing a spark from cap 0+397728738: cap 3: End par conjunct: 0x251a010+397729296: cap 3: Trying to steal a spark+397729710: cap 3: stealing a spark from cap 0+403134480: cap 2: End par conjunct: 0x251a070+403134916: cap 2: Trying to steal a spark+403135398: cap 2: stealing a spark from cap 0+430105333: cap 1: End par conjunct: 0x251a0d0+430105828: cap 1: Trying to steal a spark+430106098: cap 1: stealing a spark from cap 0+436262724: cap 3: End par conjunct: 0x251a130+436263097: cap 3: Trying to steal a spark+436263556: cap 3: stealing a spark from cap 0+441701977: cap 2: End par conjunct: 0x251a190+441702540: cap 2: Trying to steal a spark+441703102: cap 2: stealing a spark from cap 0+471085258: cap 1: End par conjunct: 0x251a1f0+471085825: cap 1: Trying to steal a spark+471086374: cap 1: stealing a spark from cap 0+477770602: cap 3: End par conjunct: 0x251a250+477771034: cap 3: Trying to steal a spark+477771471: cap 3: stealing a spark from cap 0+484487622: cap 2: End par conjunct: 0x251a2b0+484488301: cap 2: Trying to steal a spark+484488778: cap 2: stealing a spark from cap 0+514659478: cap 1: End par conjunct: 0x251a310+514659942: cap 1: Trying to steal a spark+514660297: cap 1: stealing a spark from cap 0+521906107: cap 3: End par conjunct: 0x251a370+521906481: cap 3: Trying to steal a spark+521906908: cap 3: stealing a spark from cap 0+529207344: cap 2: End par conjunct: 0x251a3d0+529207843: cap 2: Trying to steal a spark+529208352: cap 2: stealing a spark from cap 0+531944473: cap 0: End par conjunct: 0x2527c30+531944712: cap 0: End par conjunction: 0x2527c30+531944883: cap 0: End par conjunct: 0x2527bd0+531945387: cap 0: running a local spark+562630792: cap 1: End par conjunct: 0x251a430+562631112: cap 1: Trying to steal a spark+562631571: cap 1: stealing a spark from cap 0+570400015: cap 3: End par conjunct: 0x251a490+570400758: cap 3: Trying to steal a spark+570401365: cap 3: stealing a spark from cap 0+576937926: cap 2: End par conjunct: 0x251a4f0+576938331: cap 2: Trying to steal a spark+576938812: cap 2: stealing a spark from cap 0+612735025: cap 1: End par conjunct: 0x251a550+612735705: cap 1: Trying to steal a spark+612736429: cap 1: stealing a spark from cap 0+619791169: cap 3: End par conjunct: 0x251a5b0+619791552: cap 3: Trying to steal a spark+619792128: cap 3: stealing a spark from cap 0+626189926: cap 2: End par conjunct: 0x251a610+626190583: cap 2: Trying to steal a spark+626191096: cap 2: stealing a spark from cap 0+663484621: cap 1: End par conjunct: 0x251a670+663484909: cap 1: Trying to steal a spark+663485238: cap 1: stealing a spark from cap 0+671033749: cap 3: End par conjunct: 0x251a6d0+671034276: cap 3: Trying to steal a spark+671034811: cap 3: stealing a spark from cap 0+677780014: cap 2: End par conjunct: 0x251a730+677780779: cap 2: Trying to steal a spark+677781445: cap 2: stealing a spark from cap 0+699230403: cap 0: End par conjunct: 0x2527bd0+699230659: cap 0: End par conjunction: 0x2527bd0+699230835: cap 0: End par conjunct: 0x2527b70+699231397: cap 0: running a local spark+717773436: cap 1: End par conjunct: 0x251a790+717774057: cap 1: Trying to steal a spark+717774921: cap 1: stealing a spark from cap 0+726011095: cap 3: End par conjunct: 0x251a7f0+726011635: cap 3: Trying to steal a spark+726012076: cap 3: stealing a spark from cap 0+730991659: cap 2: End par conjunct: 0x251a850+730992199: cap 2: Trying to steal a spark+730992726: cap 2: stealing a spark from cap 0+774688756: cap 1: End par conjunct: 0x251a8b0+774689584: cap 1: Trying to steal a spark+774690183: cap 1: stealing a spark from cap 0+781757100: cap 3: End par conjunct: 0x251a910+781757734: cap 3: Trying to steal a spark+781758225: cap 3: stealing a spark from cap 0+785501482: cap 2: End par conjunct: 0x251a970+785502193: cap 2: Trying to steal a spark+785502751: cap 2: stealing a spark from cap 0+829932813: cap 1: End par conjunct: 0x251a9d0+829933366: cap 1: Trying to steal a spark+829933677: cap 1: stealing a spark from cap 0+837245920: cap 3: End par conjunct: 0x251aa30+837246307: cap 3: Trying to steal a spark+837246870: cap 3: stealing a spark from cap 0+842193072: cap 2: End par conjunct: 0x251aa90+842193535: cap 2: Trying to steal a spark+842193999: cap 2: stealing a spark from cap 0+865855660: cap 0: End par conjunct: 0x2527b70+865855854: cap 0: End par conjunction: 0x2527b70+865856250: cap 0: End par conjunct: 0x2527b10+865856655: cap 0: running a local spark+891740749: cap 1: End par conjunct: 0x251aaf0+891741532: cap 1: Trying to steal a spark+891742756: cap 1: stealing a spark from cap 0+899877420: cap 3: End par conjunct: 0x251ab50+899877951: cap 3: Trying to steal a spark+899878387: cap 3: stealing a spark from cap 0+904794669: cap 2: End par conjunct: 0x251abb0+904795731: cap 2: Trying to steal a spark+904796541: cap 2: stealing a spark from cap 0+956212956: cap 1: End par conjunct: 0x251ac10+956213617: cap 1: Trying to steal a spark+956213982: cap 1: stealing a spark from cap 0+965154496: cap 3: End par conjunct: 0x251ac70+965154946: cap 3: Trying to steal a spark+965155464: cap 3: stealing a spark from cap 0+968214550: cap 2: End par conjunct: 0x251acd0+968215018: cap 2: Trying to steal a spark+968215549: cap 2: stealing a spark from cap 0+1023491304: cap 1: End par conjunct: 0x251ad30+1023492051: cap 1: Trying to steal a spark+1023492964: cap 1: stealing a spark from cap 0+1033080210: cap 0: End par conjunct: 0x2527b10+1033080399: cap 0: End par conjunction: 0x2527b10+1033080588: cap 0: End par conjunct: 0x2527ab0+1033080961: cap 0: running a local spark+1033241377: cap 3: End par conjunct: 0x251ad90+1033241832: cap 3: Trying to steal a spark+1033242088: cap 3: stealing a spark from cap 0+1035608773: cap 2: End par conjunct: 0x251adf0+1035609259: cap 2: Trying to steal a spark+1035609754: cap 2: stealing a spark from cap 0+1094081674: cap 1: End par conjunct: 0x251ae50+1094082358: cap 1: Trying to steal a spark+1094083029: cap 1: stealing a spark from cap 0+1104048639: cap 3: End par conjunct: 0x251aeb0+1104049210: cap 3: Trying to steal a spark+1104049710: cap 3: stealing a spark from cap 0+1106189802: cap 2: End par conjunct: 0x251af10+1106190369: cap 2: Trying to steal a spark+1106190873: cap 2: stealing a spark from cap 0+1166137375: cap 1: End par conjunct: 0x251af70+1166138239: cap 1: Trying to steal a spark+1166138883: cap 1: stealing a spark from cap 0+1176810660: cap 2: End par conjunct: 0x251b030+1176811240: cap 2: Trying to steal a spark+1176811735: cap 2: stealing a spark from cap 0+1176898396: cap 3: End par conjunct: 0x251afd0+1176898900: cap 3: Trying to steal a spark+1176899553: cap 3: stealing a spark from cap 0+1200629866: cap 0: End par conjunct: 0x2527ab0+1200630069: cap 0: End par conjunction: 0x2527ab0+1200630375: cap 0: End par conjunct: 0x2527a50+1200630640: cap 0: running a local spark+1240834045: cap 1: End par conjunct: 0x251b090+1240834689: cap 1: Trying to steal a spark+1240835539: cap 1: stealing a spark from cap 0+1250312490: cap 2: End par conjunct: 0x251b0f0+1250312809: cap 2: Trying to steal a spark+1250313336: cap 2: stealing a spark from cap 0+1252791828: cap 3: End par conjunct: 0x251b150+1252792251: cap 3: Trying to steal a spark+1252792773: cap 3: stealing a spark from cap 0+1279191181: cap 1: stopping thread 4 (heap overflow)+1279191564: cap 1: starting GC+1279219414: cap 0: stopping thread 1 (thread yielding)+1279228891: cap 3: stopping thread 3 (thread yielding)+1279232685: cap 2: stopping thread 2 (thread yielding)+1288309455: cap 3: running thread 3+1288309464: cap 0: running thread 1+1288379502: cap 2: running thread 2+1288653435: cap 1: finished GC+1288653723: cap 1: running thread 4+1327831524: cap 1: End par conjunct: 0x251b1b0+1327833261: cap 1: Trying to steal a spark+1327835277: cap 1: stealing a spark from cap 0+1336238419: cap 2: End par conjunct: 0x251b210+1336239922: cap 2: Trying to steal a spark+1336240854: cap 2: stealing a spark from cap 0+1342275511: cap 3: End par conjunct: 0x251b270+1342276861: cap 3: Trying to steal a spark+1342278328: cap 3: stealing a spark from cap 0+1377233797: cap 0: End par conjunct: 0x2527a50+1377234085: cap 0: End par conjunction: 0x2527a50+1377234360: cap 0: End par conjunct: 0x25279f0+1377234999: cap 0: running a local spark+1411012053: cap 1: End par conjunct: 0x251b2d0+1411012948: cap 1: Trying to steal a spark+1411014010: cap 1: stealing a spark from cap 0+1416178687: cap 2: End par conjunct: 0x251b330+1416179236: cap 2: Trying to steal a spark+1416179596: cap 2: stealing a spark from cap 0+1425281166: cap 3: End par conjunct: 0x251b390+1425281638: cap 3: Trying to steal a spark+1425282160: cap 3: stealing a spark from cap 0+1495637941: cap 1: End par conjunct: 0x251b3f0+1495639008: cap 1: Trying to steal a spark+1495639872: cap 1: stealing a spark from cap 0+1504078123: cap 2: End par conjunct: 0x251b450+1504080297: cap 2: Trying to steal a spark+1504082367: cap 2: stealing a spark from cap 0+1510001185: cap 3: End par conjunct: 0x251b4b0+1510001685: cap 3: Trying to steal a spark+1510002126: cap 3: stealing a spark from cap 0+1544941570: cap 0: End par conjunct: 0x25279f0+1544941795: cap 0: End par conjunction: 0x25279f0+1544941948: cap 0: End par conjunct: 0x2527990+1544942205: cap 0: running a local spark+1586146329: cap 1: End par conjunct: 0x251b510+1586148417: cap 1: Trying to steal a spark+1586150667: cap 1: stealing a spark from cap 0+1595586420: cap 3: End par conjunct: 0x251b5d0+1595586879: cap 3: Trying to steal a spark+1595587329: cap 3: stealing a spark from cap 0+1617022876: cap 2: End par conjunct: 0x251b570+1617024591: cap 2: Trying to steal a spark+1617026719: cap 2: stealing a spark from cap 0+1672840125: cap 1: End par conjunct: 0x251b630+1672842082: cap 1: Trying to steal a spark+1672843959: cap 1: stealing a spark from cap 0+1682179780: cap 3: End par conjunct: 0x251b690+1682180307: cap 3: Trying to steal a spark+1682180811: cap 3: stealing a spark from cap 0+1712636509: cap 0: End par conjunct: 0x2527990+1712636757: cap 0: End par conjunction: 0x2527990+1712637067: cap 0: End par conjunct: 0x2527930+1712637333: cap 0: running a local spark+1713749616: cap 2: End par conjunct: 0x251b6f0+1713751249: cap 2: Trying to steal a spark+1713752950: cap 2: stealing a spark from cap 0+1760724864: cap 1: End par conjunct: 0x251b750+1760726002: cap 1: Trying to steal a spark+1760727222: cap 1: stealing a spark from cap 0+1768582786: cap 3: End par conjunct: 0x251b7b0+1768583205: cap 3: Trying to steal a spark+1768583812: cap 3: stealing a spark from cap 0+1797995713: cap 2: End par conjunct: 0x251b810+1797996865: cap 2: Trying to steal a spark+1797998157: cap 2: stealing a spark from cap 0+1847496091: cap 1: End par conjunct: 0x251b870+1847496856: cap 1: Trying to steal a spark+1847497662: cap 1: stealing a spark from cap 0+1856177788: cap 3: End par conjunct: 0x251b8d0+1856178396: cap 3: Trying to steal a spark+1856178990: cap 3: stealing a spark from cap 0+1879742844: cap 0: End par conjunct: 0x2527930+1879743100: cap 0: End par conjunction: 0x2527930+1879743289: cap 0: End par conjunct: 0x25278d0+1879743667: cap 0: running a local spark+1883263333: cap 2: End par conjunct: 0x251b930+1883264202: cap 2: Trying to steal a spark+1883265142: cap 2: stealing a spark from cap 0+1937704716: cap 1: End par conjunct: 0x251b990+1937705656: cap 1: Trying to steal a spark+1937706174: cap 1: stealing a spark from cap 0+1947000595: cap 3: End par conjunct: 0x251b9f0+1947001081: cap 3: Trying to steal a spark+1947001675: cap 3: stealing a spark from cap 0+1972568475: cap 2: End par conjunct: 0x251ba50+1972569087: cap 2: Trying to steal a spark+1972569622: cap 2: stealing a spark from cap 0+2030619109: cap 1: End par conjunct: 0x251bab0+2030619519: cap 1: Trying to steal a spark+2030619991: cap 1: stealing a spark from cap 0+2040124135: cap 3: End par conjunct: 0x251bb10+2040124612: cap 3: Trying to steal a spark+2040125067: cap 3: stealing a spark from cap 0+2062369093: cap 2: End par conjunct: 0x251bb70+2062369728: cap 2: Trying to steal a spark+2062370209: cap 2: stealing a spark from cap 0+2078025511: cap 0: End par conjunct: 0x25278d0+2078025673: cap 0: End par conjunction: 0x25278d0+2078028985: cap 0: End par conjunct: 0x2527870+2078029377: cap 0: running a local spark+2124377307: cap 1: End par conjunct: 0x251bbd0+2124378454: cap 1: Trying to steal a spark+2124379426: cap 1: stealing a spark from cap 0+2133988411: cap 3: End par conjunct: 0x251bc30+2133988821: cap 3: Trying to steal a spark+2133989334: cap 3: stealing a spark from cap 0+2154847783: cap 2: End par conjunct: 0x251bc90+2154848440: cap 2: Trying to steal a spark+2154848980: cap 2: stealing a spark from cap 0+2219288427: cap 1: End par conjunct: 0x251bcf0+2219289138: cap 1: Trying to steal a spark+2219289561: cap 1: stealing a spark from cap 0+2229366276: cap 3: End par conjunct: 0x251bd50+2229366739: cap 3: Trying to steal a spark+2229367311: cap 3: stealing a spark from cap 0+2243419969: cap 0: End par conjunct: 0x2527870+2243420307: cap 0: End par conjunction: 0x2527870+2243420500: cap 0: End par conjunct: 0x2527810+2243420883: cap 0: running a local spark+2247777301: cap 2: End par conjunct: 0x251bdb0+2247777895: cap 2: Trying to steal a spark+2247778597: cap 2: stealing a spark from cap 0+2316280018: cap 1: End par conjunct: 0x251be10+2316280662: cap 1: Trying to steal a spark+2316281274: cap 1: stealing a spark from cap 0+2325087283: cap 3: End par conjunct: 0x251be70+2325087769: cap 3: Trying to steal a spark+2325088224: cap 3: stealing a spark from cap 0+2340641119: cap 2: End par conjunct: 0x251bed0+2340641866: cap 2: Trying to steal a spark+2340642622: cap 2: stealing a spark from cap 0+2409047023: cap 0: End par conjunct: 0x2527810+2409047343: cap 0: End par conjunction: 0x2527810+2409047532: cap 0: End par conjunct: 0x25277b0+2409047811: cap 0: running a local spark+2412755536: cap 1: End par conjunct: 0x251bf30+2412756139: cap 1: Trying to steal a spark+2412756859: cap 1: stealing a spark from cap 0+2422017855: cap 3: End par conjunct: 0x251bf90+2422018314: cap 3: Trying to steal a spark+2422018728: cap 3: stealing a spark from cap 0+2434172382: cap 2: End par conjunct: 0x251bff0+2434173223: cap 2: Trying to steal a spark+2434173993: cap 2: stealing a spark from cap 0+2510563581: cap 1: End par conjunct: 0x251c050+2510565430: cap 1: Trying to steal a spark+2510569161: cap 1: stealing a spark from cap 0+2520040482: cap 3: End par conjunct: 0x251c0b0+2520040959: cap 3: Trying to steal a spark+2520041422: cap 3: stealing a spark from cap 0+2558992500: cap 2: End par conjunct: 0x251c110+2558994210: cap 2: Trying to steal a spark+2558995884: cap 2: stealing a spark from cap 0+2574399645: cap 0: End par conjunct: 0x25277b0+2574399816: cap 0: End par conjunction: 0x25277b0+2574399969: cap 0: End par conjunct: 0x2527750+2574400347: cap 0: running a local spark+2610752301: cap 1: End par conjunct: 0x251c170+2610753934: cap 1: Trying to steal a spark+2610755797: cap 1: stealing a spark from cap 0+2620085427: cap 3: End par conjunct: 0x251c1d0+2620086048: cap 3: Trying to steal a spark+2620086768: cap 3: stealing a spark from cap 0+2675306461: cap 2: End par conjunct: 0x251c230+2675308347: cap 2: Trying to steal a spark+2675309980: cap 2: stealing a spark from cap 0+2714796225: cap 1: End par conjunct: 0x251c290+2714797030: cap 1: Trying to steal a spark+2714797593: cap 1: stealing a spark from cap 0+2722951039: cap 3: End par conjunct: 0x251c2f0+2722951467: cap 3: Trying to steal a spark+2722952020: cap 3: stealing a spark from cap 0+2739383973: cap 0: End par conjunct: 0x2527750+2739384166: cap 0: End par conjunction: 0x2527750+2739384342: cap 0: End par conjunct: 0x25276f0+2739384837: cap 0: running a local spark+2774395746: cap 2: End par conjunct: 0x251c350+2774396821: cap 2: Trying to steal a spark+2774397874: cap 2: stealing a spark from cap 0+2823531642: cap 1: End par conjunct: 0x251c3b0+2823532524: cap 1: Trying to steal a spark+2823533046: cap 1: stealing a spark from cap 0+2826237402: cap 3: End par conjunct: 0x251c410+2826237888: cap 3: Trying to steal a spark+2826238351: cap 3: stealing a spark from cap 0+2875559067: cap 2: End par conjunct: 0x251c470+2875559715: cap 2: Trying to steal a spark+2875560331: cap 2: stealing a spark from cap 0+2904336270: cap 0: End par conjunct: 0x25276f0+2904336459: cap 0: End par conjunction: 0x25276f0+2904336598: cap 0: End par conjunct: 0x2527690+2904336945: cap 0: running a local spark+2929743756: cap 1: End par conjunct: 0x251c4d0+2929744462: cap 1: Trying to steal a spark+2929745119: cap 1: stealing a spark from cap 0+2932351546: cap 3: End par conjunct: 0x251c530+2932351933: cap 3: Trying to steal a spark+2932352451: cap 3: stealing a spark from cap 0+2978596588: cap 2: End par conjunct: 0x251c590+2978597187: cap 2: Trying to steal a spark+2978598042: cap 2: stealing a spark from cap 0+3035545497: cap 1: End par conjunct: 0x251c5f0+3035546145: cap 1: Trying to steal a spark+3035546662: cap 1: stealing a spark from cap 0+3036216996: cap 3: End par conjunct: 0x251c650+3036218197: cap 3: Trying to steal a spark+3036218746: cap 3: stealing a spark from cap 0+3070365034: cap 0: End par conjunct: 0x2527690+3070365327: cap 0: End par conjunction: 0x2527690+3070365502: cap 0: End par conjunct: 0x2527630+3070365894: cap 0: running a local spark+3079323792: cap 2: End par conjunct: 0x251c6b0+3079324228: cap 2: Trying to steal a spark+3079324786: cap 2: stealing a spark from cap 0+3139956252: cap 3: End par conjunct: 0x251c770+3139956657: cap 3: Trying to steal a spark+3139957264: cap 3: stealing a spark from cap 0+3140464482: cap 1: End par conjunct: 0x251c710+3140465692: cap 1: Trying to steal a spark+3140466867: cap 1: stealing a spark from cap 0+3185762184: cap 2: End par conjunct: 0x251c7d0+3185764056: cap 2: Trying to steal a spark+3185766328: cap 2: stealing a spark from cap 0+3236157738: cap 0: End par conjunct: 0x2527630+3236157981: cap 0: End par conjunction: 0x2527630+3236158165: cap 0: End par conjunct: 0x25275d0+3236158624: cap 0: running a local spark+3242741305: cap 3: End par conjunct: 0x251c830+3242741967: cap 3: Trying to steal a spark+3242742264: cap 3: stealing a spark from cap 0+3244070614: cap 1: End par conjunct: 0x251c890+3244073584: cap 1: Trying to steal a spark+3244076878: cap 1: stealing a spark from cap 0+3324819811: cap 2: End par conjunct: 0x251c8f0+3324821854: cap 2: Trying to steal a spark+3324823920: cap 2: stealing a spark from cap 0+3346673485: cap 3: End par conjunct: 0x251c950+3346673917: cap 3: Trying to steal a spark+3346674444: cap 3: stealing a spark from cap 0+3349538100: cap 1: End par conjunct: 0x251c9b0+3349539823: cap 1: Trying to steal a spark+3349542892: cap 1: stealing a spark from cap 0+3401577553: cap 0: End par conjunct: 0x25275d0+3401577796: cap 0: End par conjunction: 0x25275d0+3401577976: cap 0: End par conjunct: 0x2527570+3401578467: cap 0: running a local spark+3438720855: cap 2: End par conjunct: 0x251ca10+3438722511: cap 2: Trying to steal a spark+3438724752: cap 2: stealing a spark from cap 0+3450992944: cap 3: End par conjunct: 0x251ca70+3450993430: cap 3: Trying to steal a spark+3450993997: cap 3: stealing a spark from cap 0+3455301627: cap 1: End par conjunct: 0x251cad0+3455302590: cap 1: Trying to steal a spark+3455303166: cap 1: stealing a spark from cap 0+3540340399: cap 2: End par conjunct: 0x251cb30+3540340863: cap 2: Trying to steal a spark+3540341277: cap 2: stealing a spark from cap 0+3555929610: cap 3: End par conjunct: 0x251cb90+3555930127: cap 3: Trying to steal a spark+3555930694: cap 3: stealing a spark from cap 0+3560459175: cap 1: End par conjunct: 0x251cbf0+3560459719: cap 1: Trying to steal a spark+3560460259: cap 1: stealing a spark from cap 0+3566313765: cap 0: End par conjunct: 0x2527570+3566314080: cap 0: End par conjunction: 0x2527570+3566314255: cap 0: End par conjunct: 0x2527510+3566314651: cap 0: running a local spark+3641768923: cap 2: End par conjunct: 0x251cc50+3641769747: cap 2: Trying to steal a spark+3641770408: cap 2: stealing a spark from cap 0+3660900102: cap 3: End par conjunct: 0x251ccb0+3660900511: cap 3: Trying to steal a spark+3660900966: cap 3: stealing a spark from cap 0+3665647633: cap 1: End par conjunct: 0x251cd10+3665648443: cap 1: Trying to steal a spark+3665648970: cap 1: stealing a spark from cap 0+3730731097: cap 0: End par conjunct: 0x2527510+3730731304: cap 0: End par conjunction: 0x2527510+3730731480: cap 0: End par conjunct: 0x25274b0+3730731885: cap 0: running a local spark+3743352760: cap 2: End par conjunct: 0x251cd70+3743353305: cap 2: Trying to steal a spark+3743353944: cap 2: stealing a spark from cap 0+3765799894: cap 3: End par conjunct: 0x251cdd0+3765800340: cap 3: Trying to steal a spark+3765800794: cap 3: stealing a spark from cap 0+3771103450: cap 1: End par conjunct: 0x251ce30+3771103918: cap 1: Trying to steal a spark+3771104539: cap 1: stealing a spark from cap 0+3850822485: cap 2: End par conjunct: 0x251ce90+3850824190: cap 2: Trying to steal a spark+3850826094: cap 2: stealing a spark from cap 0+3871264050: cap 3: End par conjunct: 0x251cef0+3871264590: cap 3: Trying to steal a spark+3871265094: cap 3: stealing a spark from cap 0+3878442486: cap 1: End par conjunct: 0x251cf50+3878443377: cap 1: Trying to steal a spark+3878444070: cap 1: stealing a spark from cap 0+3895063317: cap 0: End par conjunct: 0x25274b0+3895063519: cap 0: End par conjunction: 0x25274b0+3895063668: cap 0: End par conjunct: 0x2527450+3895064023: cap 0: running a local spark+3977831736: cap 3: End par conjunct: 0x251d010+3977832244: cap 3: Trying to steal a spark+3977832685: cap 3: stealing a spark from cap 0+3990236616: cap 2: End par conjunct: 0x251cfb0+3990238492: cap 2: Trying to steal a spark+3990240571: cap 2: stealing a spark from cap 0+3991293468: cap 1: End par conjunct: 0x251d070+3991294359: cap 1: Trying to steal a spark+3991294746: cap 1: stealing a spark from cap 0+4059510961: cap 0: End par conjunct: 0x2527450+4059511191: cap 0: End par conjunction: 0x2527450+4059511479: cap 0: End par conjunct: 0x25273f0+4059511938: cap 0: running a local spark+4084069900: cap 3: End par conjunct: 0x251d0d0+4084070413: cap 3: Trying to steal a spark+4084070827: cap 3: stealing a spark from cap 0+4098127671: cap 1: End par conjunct: 0x251d190+4098129345: cap 1: Trying to steal a spark+4098131190: cap 1: stealing a spark from cap 0+4100764009: cap 2: End par conjunct: 0x251d130+4100764720: cap 2: Trying to steal a spark+4100765107: cap 2: stealing a spark from cap 0+4189030627: cap 3: End par conjunct: 0x251d1f0+4189031041: cap 3: Trying to steal a spark+4189031622: cap 3: stealing a spark from cap 0+4202895316: cap 1: End par conjunct: 0x251d250+4202896761: cap 1: Trying to steal a spark+4202897868: cap 1: stealing a spark from cap 0+4203368370: cap 2: End par conjunct: 0x251d2b0+4203369009: cap 2: Trying to steal a spark+4203369432: cap 2: stealing a spark from cap 0+4224118374: cap 0: End par conjunct: 0x25273f0+4224118594: cap 0: End par conjunction: 0x25273f0+4224118779: cap 0: End par conjunct: 0x2527390+4224119193: cap 0: running a local spark+4293500643: cap 3: End par conjunct: 0x251d310+4293501210: cap 3: Trying to steal a spark+4293501547: cap 3: stealing a spark from cap 0+4303451088: cap 2: End par conjunct: 0x251d3d0+4303451740: cap 2: Trying to steal a spark+4303452370: cap 2: stealing a spark from cap 0+4306702729: cap 1: End par conjunct: 0x251d370+4306703229: cap 1: Trying to steal a spark+4306703593: cap 1: stealing a spark from cap 0+4388432976: cap 0: End par conjunct: 0x2527390+4388433246: cap 0: End par conjunction: 0x2527390+4388433552: cap 0: End par conjunct: 0x2527330+4388433889: cap 0: running a local spark+4396328653: cap 3: End par conjunct: 0x251d430+4396329103: cap 3: Trying to steal a spark+4396329517: cap 3: stealing a spark from cap 0+4403295733: cap 2: End par conjunct: 0x251d490+4403296300: cap 2: Trying to steal a spark+4403297182: cap 2: stealing a spark from cap 0+4410306522: cap 1: End par conjunct: 0x251d4f0+4410306877: cap 1: Trying to steal a spark+4410307246: cap 1: stealing a spark from cap 0+4499511997: cap 3: End par conjunct: 0x251d550+4499512465: cap 3: Trying to steal a spark+4499512956: cap 3: stealing a spark from cap 0+4502380810: cap 2: End par conjunct: 0x251d5b0+4502381359: cap 2: Trying to steal a spark+4502381818: cap 2: stealing a spark from cap 0+4512594357: cap 1: End par conjunct: 0x251d610+4512594910: cap 1: Trying to steal a spark+4512595275: cap 1: stealing a spark from cap 0+4552369659: cap 0: End par conjunct: 0x2527330+4552369816: cap 0: End par conjunction: 0x2527330+4552369951: cap 0: End par conjunct: 0x25272d0+4552370226: cap 0: running a local spark+4600086066: cap 3: End par conjunct: 0x251d670+4600086556: cap 3: Trying to steal a spark+4600086817: cap 3: stealing a spark from cap 0+4604659614: cap 2: End par conjunct: 0x251d6d0+4604661180: cap 2: Trying to steal a spark+4604662786: cap 2: stealing a spark from cap 0+4612849681: cap 1: End par conjunct: 0x251d730+4612850379: cap 1: Trying to steal a spark+4612850883: cap 1: stealing a spark from cap 0+4699006281: cap 3: End par conjunct: 0x251d790+4699006843: cap 3: Trying to steal a spark+4699007370: cap 3: stealing a spark from cap 0+4710339432: cap 1: End par conjunct: 0x251d850+4710341389: cap 1: Trying to steal a spark+4710343032: cap 1: stealing a spark from cap 0+4716631368: cap 0: End par conjunct: 0x25272d0+4716631579: cap 0: End par conjunction: 0x25272d0+4716631741: cap 0: End par conjunct: 0x2527270+4716632142: cap 0: running a local spark+4735995192: cap 2: End par conjunct: 0x251d7f0+4735995916: cap 2: Trying to steal a spark+4735996753: cap 2: stealing a spark from cap 0+4802625774: cap 1: End par conjunct: 0x251d910+4802627380: cap 1: Trying to steal a spark+4802629302: cap 1: stealing a spark from cap 0+4805334769: cap 3: End par conjunct: 0x251d8b0+4805336542: cap 3: Trying to steal a spark+4805338437: cap 3: stealing a spark from cap 0+4831134097: cap 2: End par conjunct: 0x251d970+4831134948: cap 2: Trying to steal a spark+4831135785: cap 2: stealing a spark from cap 0+4880466819: cap 0: End par conjunct: 0x2527270+4880467201: cap 0: End par conjunction: 0x2527270+4880467507: cap 0: End par conjunct: 0x2527210+4880467917: cap 0: running a local spark+4894799611: cap 1: End par conjunct: 0x251d9d0+4894800457: cap 1: Trying to steal a spark+4894801132: cap 1: stealing a spark from cap 0+4896399325: cap 3: End par conjunct: 0x251da30+4896399721: cap 3: Trying to steal a spark+4896400383: cap 3: stealing a spark from cap 0+4919787211: cap 2: End par conjunct: 0x251da90+4919787738: cap 2: Trying to steal a spark+4919788192: cap 2: stealing a spark from cap 0+4987284781: cap 1: End par conjunct: 0x251daf0+4987285263: cap 1: Trying to steal a spark+4987285713: cap 1: stealing a spark from cap 0+4988328228: cap 3: End par conjunct: 0x251db50+4988328700: cap 3: Trying to steal a spark+4988329227: cap 3: stealing a spark from cap 0+5009116779: cap 2: End par conjunct: 0x251dbb0+5009117323: cap 2: Trying to steal a spark+5009117805: cap 2: stealing a spark from cap 0+5044457664: cap 0: End par conjunct: 0x2527210+5044458010: cap 0: End par conjunction: 0x2527210+5044458235: cap 0: End par conjunct: 0x25271b0+5044458622: cap 0: running a local spark+5080150813: cap 1: End par conjunct: 0x251dc10+5080151259: cap 1: Trying to steal a spark+5080151767: cap 1: stealing a spark from cap 0+5081340006: cap 3: End par conjunct: 0x251dc70+5081340672: cap 3: Trying to steal a spark+5081341099: cap 3: stealing a spark from cap 0+5099104935: cap 2: End par conjunct: 0x251dcd0+5099105610: cap 2: Trying to steal a spark+5099106096: cap 2: stealing a spark from cap 0+5174841456: cap 3: End par conjunct: 0x251dd90+5174841910: cap 3: Trying to steal a spark+5174842351: cap 3: stealing a spark from cap 0+5179632331: cap 1: End par conjunct: 0x251dd30+5179633258: cap 1: Trying to steal a spark+5179634032: cap 1: stealing a spark from cap 0+5190281595: cap 2: End par conjunct: 0x251ddf0+5190282031: cap 2: Trying to steal a spark+5190282355: cap 2: stealing a spark from cap 0+5208519726: cap 0: End par conjunct: 0x25271b0+5208519951: cap 0: End par conjunction: 0x25271b0+5208520212: cap 0: End par conjunct: 0x2527150+5208520594: cap 0: running a local spark+5269359082: cap 3: End par conjunct: 0x251de50+5269359537: cap 3: Trying to steal a spark+5269359901: cap 3: stealing a spark from cap 0+5274835857: cap 1: End par conjunct: 0x251deb0+5274836505: cap 1: Trying to steal a spark+5274837094: cap 1: stealing a spark from cap 0+5282239549: cap 2: End par conjunct: 0x251df10+5282239977: cap 2: Trying to steal a spark+5282240287: cap 2: stealing a spark from cap 0+5364891751: cap 3: End par conjunct: 0x251df70+5364892188: cap 3: Trying to steal a spark+5364892642: cap 3: stealing a spark from cap 0+5371093939: cap 1: End par conjunct: 0x251dfd0+5371094565: cap 1: Trying to steal a spark+5371095226: cap 1: stealing a spark from cap 0+5372349538: cap 0: End par conjunct: 0x2527150+5372349732: cap 0: End par conjunction: 0x2527150+5372349907: cap 0: End par conjunct: 0x25270f0+5372350204: cap 0: running a local spark+5375287273: cap 2: End par conjunct: 0x251e030+5375287737: cap 2: Trying to steal a spark+5375288263: cap 2: stealing a spark from cap 0+5460822751: cap 3: End par conjunct: 0x251e090+5460823359: cap 3: Trying to steal a spark+5460824029: cap 3: stealing a spark from cap 0+5468675634: cap 1: End par conjunct: 0x251e0f0+5468677600: cap 1: Trying to steal a spark+5468679922: cap 1: stealing a spark from cap 0+5511468537: cap 2: End par conjunct: 0x251e150+5511470931: cap 2: Trying to steal a spark+5511472380: cap 2: stealing a spark from cap 0+5536802232: cap 0: End par conjunct: 0x25270f0+5536802448: cap 0: End par conjunction: 0x25270f0+5536802619: cap 0: End par conjunct: 0x2527090+5536802916: cap 0: running a local spark+5558417905: cap 3: End par conjunct: 0x251e1b0+5558418310: cap 3: Trying to steal a spark+5558418571: cap 3: stealing a spark from cap 0+5566822195: cap 1: End par conjunct: 0x251e210+5566823829: cap 1: Trying to steal a spark+5566825089: cap 1: stealing a spark from cap 0+5613784794: cap 2: End par conjunct: 0x251e270+5613786652: cap 2: Trying to steal a spark+5613788389: cap 2: stealing a spark from cap 0+5656165357: cap 3: End par conjunct: 0x251e2d0+5656165731: cap 3: Trying to steal a spark+5656166226: cap 3: stealing a spark from cap 0+5667148989: cap 1: End par conjunct: 0x251e330+5667150114: cap 1: Trying to steal a spark+5667151266: cap 1: stealing a spark from cap 0+5702150182: cap 0: End par conjunct: 0x2527090+5702150398: cap 0: End par conjunction: 0x2527090+5702150677: cap 0: End par conjunct: 0x2527030+5702151082: cap 0: running a local spark+5710287978: cap 2: End par conjunct: 0x251e390+5710288504: cap 2: Trying to steal a spark+5710289094: cap 2: stealing a spark from cap 0+5755608112: cap 3: End par conjunct: 0x251e3f0+5755608495: cap 3: Trying to steal a spark+5755608940: cap 3: stealing a spark from cap 0+5767399530: cap 1: End par conjunct: 0x251e450+5767400074: cap 1: Trying to steal a spark+5767400655: cap 1: stealing a spark from cap 0+5806750243: cap 2: End par conjunct: 0x251e4b0+5806750702: cap 2: Trying to steal a spark+5806751017: cap 2: stealing a spark from cap 0+5854923580: cap 3: End par conjunct: 0x251e510+5854924039: cap 3: Trying to steal a spark+5854924462: cap 3: stealing a spark from cap 0+5867308777: cap 1: End par conjunct: 0x251e570+5867309322: cap 1: Trying to steal a spark+5867309866: cap 1: stealing a spark from cap 0+5868694615: cap 0: End par conjunct: 0x2527030+5868694818: cap 0: End par conjunction: 0x2527030+5868694980: cap 0: End par conjunct: 0x2526fd0+5868695389: cap 0: running a local spark+5903779621: cap 2: End par conjunct: 0x251e5d0+5903780049: cap 2: Trying to steal a spark+5903780517: cap 2: stealing a spark from cap 0+5955976417: cap 3: End par conjunct: 0x251e630+5955976791: cap 3: Trying to steal a spark+5955977236: cap 3: stealing a spark from cap 0+5969468290: cap 1: End par conjunct: 0x251e690+5969468898: cap 1: Trying to steal a spark+5969469487: cap 1: stealing a spark from cap 0+6002940645: cap 2: End par conjunct: 0x251e6f0+6002940960: cap 2: Trying to steal a spark+6002941293: cap 2: stealing a spark from cap 0+6036253218: cap 0: End par conjunct: 0x2526fd0+6036253488: cap 0: End par conjunction: 0x2526fd0+6036253771: cap 0: End par conjunct: 0x2526f70+6036254190: cap 0: running a local spark+6058467171: cap 3: End par conjunct: 0x251e750+6058467612: cap 3: Trying to steal a spark+6058467877: cap 3: stealing a spark from cap 0+6073172662: cap 1: End par conjunct: 0x251e7b0+6073173180: cap 1: Trying to steal a spark+6073173729: cap 1: stealing a spark from cap 0+6102897106: cap 2: End par conjunct: 0x251e810+6102897525: cap 2: Trying to steal a spark+6102897934: cap 2: stealing a spark from cap 0+6161465551: cap 3: End par conjunct: 0x251e870+6161465925: cap 3: Trying to steal a spark+6161466361: cap 3: stealing a spark from cap 0+6176467750: cap 1: End par conjunct: 0x251e8d0+6176468272: cap 1: Trying to steal a spark+6176468862: cap 1: stealing a spark from cap 0+6202076346: cap 2: End par conjunct: 0x251e930+6202076782: cap 2: Trying to steal a spark+6202077183: cap 2: stealing a spark from cap 0+6202608786: cap 0: End par conjunct: 0x2526f70+6202608993: cap 0: End par conjunction: 0x2526f70+6202609159: cap 0: End par conjunct: 0x2526f10+6202609461: cap 0: running a local spark+6264545985: cap 3: End par conjunct: 0x251e990+6264546435: cap 3: Trying to steal a spark+6264546718: cap 3: stealing a spark from cap 0+6280029117: cap 1: End par conjunct: 0x251e9f0+6280030134: cap 1: Trying to steal a spark+6280031272: cap 1: stealing a spark from cap 0+6302836035: cap 2: End par conjunct: 0x251ea50+6302836521: cap 2: Trying to steal a spark+6302837034: cap 2: stealing a spark from cap 0+6364841238: cap 0: End par conjunct: 0x2526f10+6364841436: cap 0: End par conjunction: 0x2526f10+6364841580: cap 0: End par conjunct: 0x2526eb0+6364841931: cap 0: running a local spark+6368895904: cap 3: End par conjunct: 0x251eab0+6368896278: cap 3: Trying to steal a spark+6368896660: cap 3: stealing a spark from cap 0+6391330479: cap 1: End par conjunct: 0x251eb10+6391331721: cap 1: Trying to steal a spark+6391332729: cap 1: stealing a spark from cap 0+6406162888: cap 2: End par conjunct: 0x251eb70+6406163248: cap 2: Trying to steal a spark+6406163586: cap 2: stealing a spark from cap 0+6475439569: cap 3: End par conjunct: 0x251ebd0+6475440010: cap 3: Trying to steal a spark+6475440442: cap 3: stealing a spark from cap 0+6498971127: cap 1: End par conjunct: 0x251ec30+6498971671: cap 1: Trying to steal a spark+6498972477: cap 1: stealing a spark from cap 0+6510126928: cap 2: End par conjunct: 0x251ec90+6510127342: cap 2: Trying to steal a spark+6510127675: cap 2: stealing a spark from cap 0+6532580326: cap 0: End par conjunct: 0x2526eb0+6532580713: cap 0: End par conjunction: 0x2526eb0+6532580866: cap 0: End par conjunct: 0x2526e50+6532581163: cap 0: running a local spark+6583930695: cap 3: End par conjunct: 0x251ecf0+6583931239: cap 3: Trying to steal a spark+6583931568: cap 3: stealing a spark from cap 0+6607367370: cap 1: End par conjunct: 0x251ed50+6607367905: cap 1: Trying to steal a spark+6607368616: cap 1: stealing a spark from cap 0+6615017739: cap 2: End par conjunct: 0x251edb0+6615018261: cap 2: Trying to steal a spark+6615018598: cap 2: stealing a spark from cap 0+6692534527: cap 3: End par conjunct: 0x251ee10+6692535103: cap 3: Trying to steal a spark+6692535679: cap 3: stealing a spark from cap 0+6700865737: cap 0: End par conjunct: 0x2526e50+6700865953: cap 0: End par conjunction: 0x2526e50+6700866138: cap 0: End par conjunct: 0x2526df0+6700866475: cap 0: running a local spark+6716408625: cap 1: End par conjunct: 0x251ee70+6716409237: cap 1: Trying to steal a spark+6716410335: cap 1: stealing a spark from cap 0+6720467719: cap 2: End par conjunct: 0x251eed0+6720468286: cap 2: Trying to steal a spark+6720468646: cap 2: stealing a spark from cap 0+6806783403: cap 3: End par conjunct: 0x251ef30+6806785135: cap 3: Trying to steal a spark+6806786967: cap 3: stealing a spark from cap 0+6823963629: cap 2: End par conjunct: 0x251eff0+6823964236: cap 2: Trying to steal a spark+6823964790: cap 2: stealing a spark from cap 0+6825203406: cap 1: End par conjunct: 0x251ef90+6825203973: cap 1: Trying to steal a spark+6825204369: cap 1: stealing a spark from cap 0+6869104015: cap 0: End par conjunct: 0x2526df0+6869104672: cap 0: End par conjunction: 0x2526df0+6869105190: cap 0: End par conjunct: 0x2526d90+6869106378: cap 0: running a local spark+6928249585: cap 2: End par conjunct: 0x251f0b0+6928249995: cap 2: Trying to steal a spark+6928250413: cap 2: stealing a spark from cap 0+6933589821: cap 1: End par conjunct: 0x251f110+6933590262: cap 1: Trying to steal a spark+6933590635: cap 1: stealing a spark from cap 0+6956958510: cap 3: End par conjunct: 0x251f050+6956960251: cap 3: Trying to steal a spark+6956962425: cap 3: stealing a spark from cap 0+7033972122: cap 2: End par conjunct: 0x251f170+7033973503: cap 2: Trying to steal a spark+7033974840: cap 2: stealing a spark from cap 0+7037497476: cap 0: End par conjunct: 0x2526d90+7037497863: cap 0: End par conjunction: 0x2526d90+7037498353: cap 0: End par conjunct: 0x2526d30+7037498799: cap 0: running a local spark+7043018242: cap 1: End par conjunct: 0x251f1d0+7043018877: cap 1: Trying to steal a spark+7043019408: cap 1: stealing a spark from cap 0+7065907465: cap 3: End par conjunct: 0x251f230+7065907906: cap 3: Trying to steal a spark+7065908442: cap 3: stealing a spark from cap 0+7139790391: cap 2: End par conjunct: 0x251f290+7139791053: cap 2: Trying to steal a spark+7139791656: cap 2: stealing a spark from cap 0+7154419621: cap 1: End par conjunct: 0x251f2f0+7154420130: cap 1: Trying to steal a spark+7154420463: cap 1: stealing a spark from cap 0+7178493060: cap 3: End par conjunct: 0x251f350+7178493568: cap 3: Trying to steal a spark+7178494023: cap 3: stealing a spark from cap 0+7205940342: cap 0: End par conjunct: 0x2526d30+7205940661: cap 0: End par conjunction: 0x2526d30+7205940810: cap 0: End par conjunct: 0x2526cd0+7205941197: cap 0: running a local spark+7249679901: cap 2: End par conjunct: 0x251f3b0+7249680679: cap 2: Trying to steal a spark+7249681525: cap 2: stealing a spark from cap 0+7270700197: cap 1: End par conjunct: 0x251f410+7270700742: cap 1: Trying to steal a spark+7270701111: cap 1: stealing a spark from cap 0+7294506664: cap 3: End par conjunct: 0x251f470+7294507105: cap 3: Trying to steal a spark+7294507659: cap 3: stealing a spark from cap 0+7362194377: cap 2: End par conjunct: 0x251f4d0+7362195111: cap 2: Trying to steal a spark+7362195624: cap 2: stealing a spark from cap 0+7374448426: cap 0: End par conjunct: 0x2526cd0+7374448746: cap 0: End par conjunction: 0x2526cd0+7374448917: cap 0: End par conjunct: 0x2526c70+7374449488: cap 0: running a local spark+7388212914: cap 1: End par conjunct: 0x251f530+7388214682: cap 1: Trying to steal a spark+7388216793: cap 1: stealing a spark from cap 0+7409992662: cap 3: End par conjunct: 0x251f590+7409993112: cap 3: Trying to steal a spark+7409993548: cap 3: stealing a spark from cap 0+7505717877: cap 1: End par conjunct: 0x251f650+7505719911: cap 1: Trying to steal a spark+7505722413: cap 1: stealing a spark from cap 0+7516908211: cap 2: End par conjunct: 0x251f5f0+7516909035: cap 2: Trying to steal a spark+7516909422: cap 2: stealing a spark from cap 0+7526619144: cap 3: End par conjunct: 0x251f6b0+7526619607: cap 3: Trying to steal a spark+7526620030: cap 3: stealing a spark from cap 0+7542900904: cap 0: End par conjunct: 0x2526c70+7542901093: cap 0: End par conjunction: 0x2526c70+7542901233: cap 0: End par conjunct: 0x2526c10+7542901593: cap 0: running a local spark+7629785779: cap 1: End par conjunct: 0x251f710+7629787647: cap 1: Trying to steal a spark+7629789586: cap 1: stealing a spark from cap 0+7638019537: cap 2: End par conjunct: 0x251f770+7638020248: cap 2: Trying to steal a spark+7638020640: cap 2: stealing a spark from cap 0+7644842095: cap 3: End par conjunct: 0x251f7d0+7644842563: cap 3: Trying to steal a spark+7644843103: cap 3: stealing a spark from cap 0+7711580452: cap 0: End par conjunct: 0x2526c10+7711580659: cap 0: End par conjunction: 0x2526c10+7711580830: cap 0: End par conjunct: 0x2526bb0+7711581078: cap 0: running a local spark+7748250741: cap 1: End par conjunct: 0x251f830+7748251834: cap 1: Trying to steal a spark+7748253274: cap 1: stealing a spark from cap 0+7752907786: cap 2: End par conjunct: 0x251f890+7752908403: cap 2: Trying to steal a spark+7752908754: cap 2: stealing a spark from cap 0+7762712247: cap 3: End par conjunct: 0x251f8f0+7762712625: cap 3: Trying to steal a spark+7762713061: cap 3: stealing a spark from cap 0+7866824067: cap 1: End par conjunct: 0x251f950+7866824791: cap 1: Trying to steal a spark+7866825435: cap 1: stealing a spark from cap 0+7868129994: cap 2: End par conjunct: 0x251f9b0+7868130318: cap 2: Trying to steal a spark+7868130660: cap 2: stealing a spark from cap 0+7880553090: cap 0: End par conjunct: 0x2526bb0+7880553283: cap 0: End par conjunction: 0x2526bb0+7880553571: cap 0: End par conjunct: 0x2526b50+7880553886: cap 0: running a local spark+7881310125: cap 3: End par conjunct: 0x251fa10+7881310575: cap 3: Trying to steal a spark+7881310930: cap 3: stealing a spark from cap 0+7983051835: cap 2: End par conjunct: 0x251fad0+7983052690: cap 2: Trying to steal a spark+7983053311: cap 2: stealing a spark from cap 0+7986387316: cap 1: End par conjunct: 0x251fa70+7986387856: cap 1: Trying to steal a spark+7986388225: cap 1: stealing a spark from cap 0+7999363462: cap 3: End par conjunct: 0x251fb30+7999363831: cap 3: Trying to steal a spark+7999364371: cap 3: stealing a spark from cap 0+8049000447: cap 0: End par conjunct: 0x2526b50+8049000636: cap 0: End par conjunction: 0x2526b50+8049000807: cap 0: End par conjunct: 0x2526af0+8049001171: cap 0: running a local spark+8097602877: cap 2: End par conjunct: 0x251fb90+8097603786: cap 2: Trying to steal a spark+8097604686: cap 2: stealing a spark from cap 0+8105726808: cap 1: End par conjunct: 0x251fbf0+8105727348: cap 1: Trying to steal a spark+8105727708: cap 1: stealing a spark from cap 0+8122236853: cap 3: End par conjunct: 0x251fc50+8122238694: cap 3: Trying to steal a spark+8122240728: cap 3: stealing a spark from cap 0+8209894459: cap 2: End par conjunct: 0x251fcb0+8209895179: cap 2: Trying to steal a spark+8209895760: cap 2: stealing a spark from cap 0+8217917545: cap 0: End par conjunct: 0x2526af0+8217918414: cap 0: End par conjunction: 0x2526af0+8217918882: cap 0: End par conjunct: 0x2526a90+8217919912: cap 0: running a local spark+8222221260: cap 1: End par conjunct: 0x251fd10+8222221822: cap 1: Trying to steal a spark+8222222331: cap 1: stealing a spark from cap 0+8274741862: cap 3: End par conjunct: 0x251fd70+8274743266: cap 3: Trying to steal a spark+8274745170: cap 3: stealing a spark from cap 0+8322421567: cap 2: End par conjunct: 0x251fdd0+8322422215: cap 2: Trying to steal a spark+8322422940: cap 2: stealing a spark from cap 0+8338848345: cap 1: End par conjunct: 0x251fe30+8338848705: cap 1: Trying to steal a spark+8338849056: cap 1: stealing a spark from cap 0+8387412912: cap 0: End par conjunct: 0x2526a90+8387413497: cap 0: End par conjunction: 0x2526a90+8387414005: cap 0: End par conjunct: 0x2526a30+8387415427: cap 0: running a local spark+8397977359: cap 3: End par conjunct: 0x251fe90+8397978768: cap 3: Trying to steal a spark+8397980046: cap 3: stealing a spark from cap 0+8435992648: cap 2: End par conjunct: 0x251fef0+8435993760: cap 2: Trying to steal a spark+8435994781: cap 2: stealing a spark from cap 0+8456515038: cap 1: End par conjunct: 0x251ff50+8456515564: cap 1: Trying to steal a spark+8456515929: cap 1: stealing a spark from cap 0+8514977890: cap 3: End par conjunct: 0x251ffb0+8514978282: cap 3: Trying to steal a spark+8514978934: cap 3: stealing a spark from cap 0+8550261373: cap 2: End par conjunct: 0x2520010+8550261990: cap 2: Trying to steal a spark+8550262786: cap 2: stealing a spark from cap 0+8556870406: cap 0: End par conjunct: 0x2526a30+8556870582: cap 0: End par conjunction: 0x2526a30+8556870753: cap 0: End par conjunct: 0x25269d0+8556871288: cap 0: running a local spark+8574920581: cap 1: End par conjunct: 0x2520070+8574921054: cap 1: Trying to steal a spark+8574921639: cap 1: stealing a spark from cap 0+8633149510: cap 3: End par conjunct: 0x25200d0+8633150113: cap 3: Trying to steal a spark+8633150716: cap 3: stealing a spark from cap 0+8664787926: cap 2: End par conjunct: 0x2520130+8664788367: cap 2: Trying to steal a spark+8664789078: cap 2: stealing a spark from cap 0+8694223839: cap 1: End par conjunct: 0x2520190+8694224397: cap 1: Trying to steal a spark+8694224788: cap 1: stealing a spark from cap 0+8726062792: cap 0: End par conjunct: 0x25269d0+8726062995: cap 0: End par conjunction: 0x25269d0+8726063166: cap 0: End par conjunct: 0x2526970+8726063571: cap 0: running a local spark+8752188550: cap 3: End par conjunct: 0x25201f0+8752189995: cap 3: Trying to steal a spark+8752191502: cap 3: stealing a spark from cap 0+8780949805: cap 2: End par conjunct: 0x2520250+8780951065: cap 2: Trying to steal a spark+8780952100: cap 2: stealing a spark from cap 0+8819446338: cap 1: End par conjunct: 0x25202b0+8819447175: cap 1: Trying to steal a spark+8819447544: cap 1: stealing a spark from cap 0+8871555856: cap 3: End par conjunct: 0x2520310+8871557584: cap 3: Trying to steal a spark+8871559020: cap 3: stealing a spark from cap 0+8896779094: cap 2: End par conjunct: 0x2520370+8896779801: cap 2: Trying to steal a spark+8896780467: cap 2: stealing a spark from cap 0+8937728199: cap 0: End par conjunct: 0x2526970+8937728946: cap 0: End par conjunction: 0x2526970+8937729603: cap 0: End par conjunct: 0x2526910+8937730624: cap 0: running a local spark+8941134757: cap 1: End par conjunct: 0x25203d0+8941135234: cap 1: Trying to steal a spark+8941135860: cap 1: stealing a spark from cap 0+8994217396: cap 3: End par conjunct: 0x2520430+8994218571: cap 3: Trying to steal a spark+8994220483: cap 3: stealing a spark from cap 0+9016329973: cap 2: End par conjunct: 0x2520490+9016330657: cap 2: Trying to steal a spark+9016331319: cap 2: stealing a spark from cap 0+9065391511: cap 1: End par conjunct: 0x25204f0+9065392182: cap 1: Trying to steal a spark+9065392542: cap 1: stealing a spark from cap 0+9114060033: cap 0: End par conjunct: 0x2526910+9114061369: cap 0: End par conjunction: 0x2526910+9114062017: cap 0: End par conjunct: 0x25268b0+9114063439: cap 0: running a local spark+9118985994: cap 3: End par conjunct: 0x2520550+9118987276: cap 3: Trying to steal a spark+9118988649: cap 3: stealing a spark from cap 0+9137965891: cap 2: End par conjunct: 0x25205b0+9137966944: cap 2: Trying to steal a spark+9137967768: cap 2: stealing a spark from cap 0+9190963782: cap 1: End par conjunct: 0x2520610+9190964430: cap 1: Trying to steal a spark+9190964794: cap 1: stealing a spark from cap 0+9244042654: cap 3: End par conjunct: 0x2520670+9244043077: cap 3: Trying to steal a spark+9244043527: cap 3: stealing a spark from cap 0+9259115341: cap 2: End par conjunct: 0x25206d0+9259115881: cap 2: Trying to steal a spark+9259116448: cap 2: stealing a spark from cap 0+9316672281: cap 1: End par conjunct: 0x2520730+9316672717: cap 1: Trying to steal a spark+9316673172: cap 1: stealing a spark from cap 0+9318656340: cap 0: End par conjunct: 0x25268b0+9318656502: cap 0: End par conjunction: 0x25268b0+9318656637: cap 0: End par conjunct: 0x2526850+9318656965: cap 0: running a local spark+9369180099: cap 3: End par conjunct: 0x2520790+9369180544: cap 3: Trying to steal a spark+9369180931: cap 3: stealing a spark from cap 0+9383760999: cap 2: End par conjunct: 0x25207f0+9383761741: cap 2: Trying to steal a spark+9383762263: cap 2: stealing a spark from cap 0+9449296929: cap 1: End par conjunct: 0x2520850+9449297469: cap 1: Trying to steal a spark+9449297946: cap 1: stealing a spark from cap 0+9485841762: cap 0: End par conjunct: 0x2526850+9485841924: cap 0: End par conjunction: 0x2526850+9485842077: cap 0: End par conjunct: 0x25267f0+9485842509: cap 0: running a local spark+9502258122: cap 3: End par conjunct: 0x25208b0+9502258671: cap 3: Trying to steal a spark+9502258995: cap 3: stealing a spark from cap 0+9514881801: cap 2: End par conjunct: 0x2520910+9514882534: cap 2: Trying to steal a spark+9514883137: cap 2: stealing a spark from cap 0+9586031359: cap 1: End par conjunct: 0x2520970+9586031724: cap 1: Trying to steal a spark+9586032093: cap 1: stealing a spark from cap 0+9638764969: cap 3: End par conjunct: 0x25209d0+9638765464: cap 3: Trying to steal a spark+9638765941: cap 3: stealing a spark from cap 0+9651997687: cap 0: End par conjunct: 0x25267f0+9651998029: cap 0: End par conjunction: 0x25267f0+9651998214: cap 0: End par conjunct: 0x2526790+9651998565: cap 0: running a local spark+9654841575: cap 2: End par conjunct: 0x2520a30+9654843897: cap 2: Trying to steal a spark+9654845958: cap 2: stealing a spark from cap 0+9725912271: cap 1: End par conjunct: 0x2520a90+9725915304: cap 1: Trying to steal a spark+9725918872: cap 1: stealing a spark from cap 0+9777878748: cap 3: End par conjunct: 0x2520af0+9777879166: cap 3: Trying to steal a spark+9777879670: cap 3: stealing a spark from cap 0+9824287432: cap 0: End par conjunct: 0x2526790+9824288269: cap 0: End par conjunction: 0x2526790+9824288706: cap 0: End par conjunct: 0x2526730+9824289768: cap 0: running a local spark+9830543400: cap 2: End par conjunct: 0x2520b50+9830545330: cap 2: Trying to steal a spark+9830547454: cap 2: stealing a spark from cap 0+9867722602: cap 1: End par conjunct: 0x2520bb0+9867723367: cap 1: Trying to steal a spark+9867723768: cap 1: stealing a spark from cap 0+9918449059: cap 3: End par conjunct: 0x2520c10+9918450211: cap 3: Trying to steal a spark+9918451539: cap 3: stealing a spark from cap 0+9967959841: cap 2: End par conjunct: 0x2520c70+9967961182: cap 2: Trying to steal a spark+9967962555: cap 2: stealing a spark from cap 0+9989056377: cap 0: End par conjunct: 0x2526730+9989056579: cap 0: End par conjunction: 0x2526730+9989056858: cap 0: End par conjunct: 0x25266d0+9989057290: cap 0: running a local spark+10015182895: cap 1: End par conjunct: 0x2520cd0+10015183467: cap 1: Trying to steal a spark+10015184277: cap 1: stealing a spark from cap 0+10059675948: cap 3: End par conjunct: 0x2520d30+10059676402: cap 3: Trying to steal a spark+10059676888: cap 3: stealing a spark from cap 0+10105111224: cap 2: End par conjunct: 0x2520d90+10105111881: cap 2: Trying to steal a spark+10105112583: cap 2: stealing a spark from cap 0+10153755009: cap 0: End par conjunct: 0x25266d0+10153755400: cap 0: End par conjunction: 0x25266d0+10153755567: cap 0: End par conjunct: 0x2526670+10153756350: cap 0: running a local spark+10156564170: cap 1: End par conjunct: 0x2520df0+10156564795: cap 1: Trying to steal a spark+10156565889: cap 1: stealing a spark from cap 0+10199449233: cap 3: End par conjunct: 0x2520e50+10199449971: cap 3: Trying to steal a spark+10199450623: cap 3: stealing a spark from cap 0+10242140503: cap 2: End par conjunct: 0x2520eb0+10242141174: cap 2: Trying to steal a spark+10242141844: cap 2: stealing a spark from cap 0+10297449207: cap 1: End par conjunct: 0x2520f10+10297449886: cap 1: Trying to steal a spark+10297450435: cap 1: stealing a spark from cap 0+10317707554: cap 0: End par conjunct: 0x2526670+10317707797: cap 0: End par conjunction: 0x2526670+10317707968: cap 0: End par conjunct: 0x2526610+10317708265: cap 0: running a local spark+10340165916: cap 3: End par conjunct: 0x2520f70+10340166298: cap 3: Trying to steal a spark+10340166829: cap 3: stealing a spark from cap 0+10378737562: cap 2: End par conjunct: 0x2520fd0+10378738183: cap 2: Trying to steal a spark+10378738926: cap 2: stealing a spark from cap 0+10438743933: cap 1: End par conjunct: 0x2521030+10438745697: cap 1: Trying to steal a spark+10438747713: cap 1: stealing a spark from cap 0+10480589802: cap 0: End par conjunct: 0x2526610+10480590054: cap 0: End par conjunction: 0x2526610+10480590229: cap 0: End par conjunct: 0x25265b0+10480590585: cap 0: running a local spark+10481222119: cap 3: End par conjunct: 0x2521090+10481222790: cap 3: Trying to steal a spark+10481223469: cap 3: stealing a spark from cap 0+10563616602: cap 2: End par conjunct: 0x25210f0+10563618640: cap 2: Trying to steal a spark+10563620764: cap 2: stealing a spark from cap 0+10583217459: cap 1: End par conjunct: 0x2521150+10583219313: cap 1: Trying to steal a spark+10583221414: cap 1: stealing a spark from cap 0+10623586666: cap 3: End par conjunct: 0x25211b0+10623587157: cap 3: Trying to steal a spark+10623587679: cap 3: stealing a spark from cap 0+10642220793: cap 0: End par conjunct: 0x25265b0+10642221031: cap 0: End par conjunction: 0x25265b0+10642221202: cap 0: End par conjunct: 0x2526550+10642221454: cap 0: running a local spark+10711376500: cap 2: End par conjunct: 0x2521210+10711378080: cap 2: Trying to steal a spark+10711379547: cap 2: stealing a spark from cap 0+10727115322: cap 1: End par conjunct: 0x2521270+10727115952: cap 1: Trying to steal a spark+10727116326: cap 1: stealing a spark from cap 0+10766963713: cap 3: End par conjunct: 0x25212d0+10766964159: cap 3: Trying to steal a spark+10766964708: cap 3: stealing a spark from cap 0+10803763021: cap 0: End par conjunct: 0x2526550+10803763255: cap 0: End par conjunction: 0x2526550+10803763669: cap 0: End par conjunct: 0x25264f0+10803764065: cap 0: running a local spark+10850931634: cap 2: End par conjunct: 0x2521330+10850932723: cap 2: Trying to steal a spark+10850933682: cap 2: stealing a spark from cap 0+10871063343: cap 1: End par conjunct: 0x2521390+10871063959: cap 1: Trying to steal a spark+10871064324: cap 1: stealing a spark from cap 0+10910143683: cap 3: End par conjunct: 0x25213f0+10910144070: cap 3: Trying to steal a spark+10910144668: cap 3: stealing a spark from cap 0+10964218027: cap 0: End par conjunct: 0x25264f0+10964218221: cap 0: End par conjunction: 0x25264f0+10964218396: cap 0: End par conjunct: 0x2526490+10964218648: cap 0: running a local spark+10990676259: cap 2: End par conjunct: 0x2521450+10990677249: cap 2: Trying to steal a spark+10990677919: cap 2: stealing a spark from cap 0+11016644328: cap 1: End par conjunct: 0x25214b0+11016644814: cap 1: Trying to steal a spark+11016645349: cap 1: stealing a spark from cap 0+11054020212: cap 3: End par conjunct: 0x2521510+11054020747: cap 3: Trying to steal a spark+11054021283: cap 3: stealing a spark from cap 0+11124312552: cap 0: End par conjunct: 0x2526490+11124312741: cap 0: End par conjunction: 0x2526490+11124312912: cap 0: End par conjunct: 0x2526430+11124313141: cap 0: running a local spark+11130237697: cap 2: End par conjunct: 0x2521570+11130238665: cap 2: Trying to steal a spark+11130239587: cap 2: stealing a spark from cap 0+11166443280: cap 1: End par conjunct: 0x25215d0+11166443941: cap 1: Trying to steal a spark+11166444351: cap 1: stealing a spark from cap 0+11198276806: cap 3: End par conjunct: 0x2521630+11198277180: cap 3: Trying to steal a spark+11198277738: cap 3: stealing a spark from cap 0+11284699194: cap 0: End par conjunct: 0x2526430+11284699360: cap 0: End par conjunction: 0x2526430+11284699513: cap 0: End par conjunct: 0x25263d0+11284699761: cap 0: running a local spark+11312440254: cap 1: End par conjunct: 0x25216f0+11312442040: cap 1: Trying to steal a spark+11312444371: cap 1: stealing a spark from cap 0+11312783883: cap 2: End par conjunct: 0x2521690+11312784580: cap 2: Trying to steal a spark+11312784972: cap 2: stealing a spark from cap 0+11342731563: cap 3: End par conjunct: 0x2521750+11342732139: cap 3: Trying to steal a spark+11342732652: cap 3: stealing a spark from cap 0+11445803059: cap 0: End par conjunct: 0x25263d0+11445803433: cap 0: End par conjunction: 0x25263d0+11445803622: cap 0: End par conjunct: 0x2526370+11445804027: cap 0: running a local spark+11458751418: cap 1: End par conjunct: 0x25217b0+11458753222: cap 1: Trying to steal a spark+11458755310: cap 1: stealing a spark from cap 0+11460625096: cap 2: End par conjunct: 0x2521810+11460625893: cap 2: Trying to steal a spark+11460626257: cap 2: stealing a spark from cap 0+11487493503: cap 3: End par conjunct: 0x2521870+11487493921: cap 3: Trying to steal a spark+11487494565: cap 3: stealing a spark from cap 0+11601736843: cap 2: End par conjunct: 0x2521930+11601737851: cap 2: Trying to steal a spark+11601738589: cap 2: stealing a spark from cap 0+11604598339: cap 1: End par conjunct: 0x25218d0+11604598888: cap 1: Trying to steal a spark+11604599257: cap 1: stealing a spark from cap 0+11606569362: cap 0: End par conjunct: 0x2526370+11606569528: cap 0: End par conjunction: 0x2526370+11606569825: cap 0: End par conjunct: 0x2526310+11606570104: cap 0: running a local spark+11633560339: cap 3: End par conjunct: 0x2521990+11633560816: cap 3: Trying to steal a spark+11633561136: cap 3: stealing a spark from cap 0+11743114063: cap 2: End par conjunct: 0x25219f0+11743115157: cap 2: Trying to steal a spark+11743115940: cap 2: stealing a spark from cap 0+11751459736: cap 1: End par conjunct: 0x2521a50+11751460425: cap 1: Trying to steal a spark+11751460942: cap 1: stealing a spark from cap 0+11766982891: cap 0: End par conjunct: 0x2526310+11766983035: cap 0: End par conjunction: 0x2526310+11766983175: cap 0: End par conjunct: 0x25262b0+11766983422: cap 0: running a local spark+11779198884: cap 3: End par conjunct: 0x2521ab0+11779199352: cap 3: Trying to steal a spark+11779199617: cap 3: stealing a spark from cap 0+11883866166: cap 2: End par conjunct: 0x2521b10+11883867021: cap 2: Trying to steal a spark+11883867556: cap 2: stealing a spark from cap 0+11896785247: cap 1: End par conjunct: 0x2521b70+11896785634: cap 1: Trying to steal a spark+11896786044: cap 1: stealing a spark from cap 0+11923061341: cap 3: End par conjunct: 0x2521bd0+11923061922: cap 3: Trying to steal a spark+11923062372: cap 3: stealing a spark from cap 0+11926619131: cap 0: End par conjunct: 0x25262b0+11926619298: cap 0: End par conjunction: 0x25262b0+11926619428: cap 0: End par conjunct: 0x2526250+11926619824: cap 0: running a local spark+12024676044: cap 2: End par conjunct: 0x2521c30+12024677214: cap 2: Trying to steal a spark+12024678789: cap 2: stealing a spark from cap 0+12041377704: cap 1: End par conjunct: 0x2521c90+12041378595: cap 1: Trying to steal a spark+12041378955: cap 1: stealing a spark from cap 0+12086340925: cap 0: End par conjunct: 0x2526250+12086341938: cap 0: End par conjunction: 0x2526250+12086342455: cap 0: End par conjunct: 0x25261f0+12086343774: cap 0: running a local spark+12108682764: cap 3: End par conjunct: 0x2521cf0+12108683965: cap 3: Trying to steal a spark+12108685653: cap 3: stealing a spark from cap 0+12164697918: cap 2: End par conjunct: 0x2521d50+12164699362: cap 2: Trying to steal a spark+12164700856: cap 2: stealing a spark from cap 0+12184922889: cap 1: End par conjunct: 0x2521db0+12184923429: cap 1: Trying to steal a spark+12184923888: cap 1: stealing a spark from cap 0+12251227675: cap 3: End par conjunct: 0x2521e10+12251229313: cap 3: Trying to steal a spark+12251230870: cap 3: stealing a spark from cap 0+12251896699: cap 0: End par conjunct: 0x25261f0+12251897073: cap 0: End par conjunction: 0x25261f0+12251897343: cap 0: End par conjunct: 0x2526190+12251897892: cap 0: running a local spark+12302414905: cap 2: End par conjunct: 0x2521e70+12302415652: cap 2: Trying to steal a spark+12302416246: cap 2: stealing a spark from cap 0+12333407085: cap 1: End par conjunct: 0x2521ed0+12333407895: cap 1: Trying to steal a spark+12333408480: cap 1: stealing a spark from cap 0+12392754678: cap 3: End par conjunct: 0x2521f30+12392755141: cap 3: Trying to steal a spark+12392755785: cap 3: stealing a spark from cap 0+12411366187: cap 0: End par conjunct: 0x2526190+12411366376: cap 0: End par conjunction: 0x2526190+12411366673: cap 0: End par conjunct: 0x2526130+12411367051: cap 0: running a local spark+12440491884: cap 2: End par conjunct: 0x2521f90+12440493301: cap 2: Trying to steal a spark+12440494921: cap 2: stealing a spark from cap 0+12473435754: cap 1: End par conjunct: 0x2521ff0+12473436339: cap 1: Trying to steal a spark+12473436748: cap 1: stealing a spark from cap 0+12530891619: cap 3: End par conjunct: 0x2522050+12530892181: cap 3: Trying to steal a spark+12530892865: cap 3: stealing a spark from cap 0+12570819007: cap 0: End par conjunct: 0x2526130+12570819277: cap 0: End par conjunction: 0x2526130+12570819453: cap 0: End par conjunct: 0x25260d0+12570819714: cap 0: running a local spark+12573405976: cap 2: End par conjunct: 0x25220b0+12573407128: cap 2: Trying to steal a spark+12573407970: cap 2: stealing a spark from cap 0+12609466533: cap 1: End par conjunct: 0x2522110+12609468292: cap 1: Trying to steal a spark+12609469975: cap 1: stealing a spark from cap 0+12665593035: cap 3: End par conjunct: 0x2522170+12665593894: cap 3: Trying to steal a spark+12665594556: cap 3: stealing a spark from cap 0+12730098919: cap 0: End par conjunct: 0x25260d0+12730099153: cap 0: End par conjunction: 0x25260d0+12730099329: cap 0: End par conjunct: 0x2526070+12730099702: cap 0: running a local spark+12746089467: cap 1: End par conjunct: 0x2522230+12746091240: cap 1: Trying to steal a spark+12746093512: cap 1: stealing a spark from cap 0+12747438603: cap 2: End par conjunct: 0x25221d0+12747439525: cap 2: Trying to steal a spark+12747439917: cap 2: stealing a spark from cap 0+12800840445: cap 3: End par conjunct: 0x2522290+12800841079: cap 3: Trying to steal a spark+12800841687: cap 3: stealing a spark from cap 0+12882794319: cap 1: End par conjunct: 0x25222f0+12882795804: cap 1: Trying to steal a spark+12882797946: cap 1: stealing a spark from cap 0+12885226623: cap 2: End par conjunct: 0x2522350+12885227482: cap 2: Trying to steal a spark+12885227986: cap 2: stealing a spark from cap 0+12889340410: cap 0: End par conjunct: 0x2526070+12889340604: cap 0: End par conjunction: 0x2526070+12889340775: cap 0: End par conjunct: 0x2526010+12889341090: cap 0: running a local spark+12936631729: cap 3: End par conjunct: 0x25223b0+12936632161: cap 3: Trying to steal a spark+12936632440: cap 3: stealing a spark from cap 0+13016933113: cap 2: End par conjunct: 0x2522470+13016933599: cap 2: Trying to steal a spark+13016934391: cap 2: stealing a spark from cap 0+13019456101: cap 1: End par conjunct: 0x2522410+13019456655: cap 1: Trying to steal a spark+13019457055: cap 1: stealing a spark from cap 0+13048585978: cap 0: End par conjunct: 0x2526010+13048586176: cap 0: End par conjunction: 0x2526010+13048586469: cap 0: End par conjunct: 0x2525fb0+13048586914: cap 0: running a local spark+13072866543: cap 3: End par conjunct: 0x25224d0+13072866988: cap 3: Trying to steal a spark+13072867348: cap 3: stealing a spark from cap 0+13149420961: cap 2: End par conjunct: 0x2522530+13149421587: cap 2: Trying to steal a spark+13149422266: cap 2: stealing a spark from cap 0+13156455595: cap 1: End par conjunct: 0x2522590+13156456378: cap 1: Trying to steal a spark+13156456887: cap 1: stealing a spark from cap 0+13202327227: cap 0: End par conjunct: 0x2525fb0+13202327430: cap 0: End par conjunction: 0x2525fb0+13202327596: cap 0: End par conjunct: 0x2525f50+13202328006: cap 0: running a local spark+13209541380: cap 3: End par conjunct: 0x25225f0+13209541816: cap 3: Trying to steal a spark+13209542199: cap 3: stealing a spark from cap 0+13294576719: cap 2: End par conjunct: 0x2522650+13294578469: cap 2: Trying to steal a spark+13294580467: cap 2: stealing a spark from cap 0+13295452455: cap 1: End par conjunct: 0x25226b0+13295453157: cap 1: Trying to steal a spark+13295453553: cap 1: stealing a spark from cap 0+13346993713: cap 3: End par conjunct: 0x2522710+13346994289: cap 3: Trying to steal a spark+13346994838: cap 3: stealing a spark from cap 0+13361654686: cap 0: End par conjunct: 0x2525f50+13361654893: cap 0: End par conjunction: 0x2525f50+13361655055: cap 0: End par conjunct: 0x2525ef0+13361655514: cap 0: running a local spark+13434790189: cap 1: End par conjunct: 0x25227d0+13434792075: cap 1: Trying to steal a spark+13434794478: cap 1: stealing a spark from cap 0+13465013116: cap 2: End par conjunct: 0x2522770+13465015015: cap 2: Trying to steal a spark+13465016919: cap 2: stealing a spark from cap 0+13484915806: cap 3: End par conjunct: 0x2522830+13484916477: cap 3: Trying to steal a spark+13484917336: cap 3: stealing a spark from cap 0+13519454503: cap 0: End par conjunct: 0x2525ef0+13519454850: cap 0: End par conjunction: 0x2525ef0+13519455124: cap 0: End par conjunct: 0x2525e90+13519455376: cap 0: running a local spark+13579299810: cap 1: End par conjunct: 0x2522890+13579301457: cap 1: Trying to steal a spark+13579302429: cap 1: stealing a spark from cap 0+13599378765: cap 2: End par conjunct: 0x25228f0+13599379377: cap 2: Trying to steal a spark+13599379800: cap 2: stealing a spark from cap 0+13623892609: cap 3: End par conjunct: 0x2522950+13623893185: cap 3: Trying to steal a spark+13623893649: cap 3: stealing a spark from cap 0+13679082040: cap 0: End par conjunct: 0x2525e90+13679082324: cap 0: End par conjunction: 0x2525e90+13679082490: cap 0: End par conjunct: 0x2525e30+13679082742: cap 0: running a local spark+13719399462: cap 1: End par conjunct: 0x25229b0+13719400780: cap 1: Trying to steal a spark+13719402382: cap 1: stealing a spark from cap 0+13734837477: cap 2: End par conjunct: 0x2522a10+13734837954: cap 2: Trying to steal a spark+13734838345: cap 2: stealing a spark from cap 0+13762870983: cap 3: End par conjunct: 0x2522a70+13762871401: cap 3: Trying to steal a spark+13762871964: cap 3: stealing a spark from cap 0+13839696346: cap 0: End par conjunct: 0x2525e30+13839696603: cap 0: End par conjunction: 0x2525e30+13839696792: cap 0: End par conjunct: 0x2525dd0+13839697048: cap 0: running a local spark+13859145571: cap 1: End par conjunct: 0x2522ad0+13859146750: cap 1: Trying to steal a spark+13859147745: cap 1: stealing a spark from cap 0+13870250689: cap 2: End par conjunct: 0x2522b30+13870251175: cap 2: Trying to steal a spark+13870251544: cap 2: stealing a spark from cap 0+13902688201: cap 3: End par conjunct: 0x2522b90+13902688687: cap 3: Trying to steal a spark+13902689376: cap 3: stealing a spark from cap 0+13999707765: cap 1: End par conjunct: 0x2522bf0+13999709479: cap 1: Trying to steal a spark+13999711612: cap 1: stealing a spark from cap 0+13999929925: cap 0: End par conjunct: 0x2525dd0+13999930159: cap 0: End par conjunction: 0x2525dd0+13999930330: cap 0: End par conjunct: 0x2525d70+13999930789: cap 0: running a local spark+14044262805: cap 3: End par conjunct: 0x2522cb0+14044263592: cap 3: Trying to steal a spark+14044264146: cap 3: stealing a spark from cap 0+14049352827: cap 2: End par conjunct: 0x2522c50+14049355230: cap 2: Trying to steal a spark+14049357529: cap 2: stealing a spark from cap 0+14142702411: cap 1: End par conjunct: 0x2522d10+14142703923: cap 1: Trying to steal a spark+14142705565: cap 1: stealing a spark from cap 0+14159583769: cap 0: End par conjunct: 0x2525d70+14159584620: cap 0: End par conjunction: 0x2525d70+14159585119: cap 0: End par conjunct: 0x2525d10+14159586640: cap 0: running a local spark+14189476360: cap 2: End par conjunct: 0x2522dd0+14189477049: cap 2: Trying to steal a spark+14189477629: cap 2: stealing a spark from cap 0+14204428195: cap 3: End par conjunct: 0x2522d70+14204429865: cap 3: Trying to steal a spark+14204431737: cap 3: stealing a spark from cap 0+14285098071: cap 1: End par conjunct: 0x2522e30+14285098629: cap 1: Trying to steal a spark+14285099290: cap 1: stealing a spark from cap 0+14319386586: cap 0: End par conjunct: 0x2525d10+14319386770: cap 0: End par conjunction: 0x2525d10+14319387045: cap 0: End par conjunct: 0x2525cb0+14319387364: cap 0: running a local spark+14326496716: cap 2: End par conjunct: 0x2522e90+14326497346: cap 2: Trying to steal a spark+14326498039: cap 2: stealing a spark from cap 0+14345105616: cap 3: End par conjunct: 0x2522ef0+14345106169: cap 3: Trying to steal a spark+14345106669: cap 3: stealing a spark from cap 0+14426574268: cap 1: End par conjunct: 0x2522f50+14426574975: cap 1: Trying to steal a spark+14426575848: cap 1: stealing a spark from cap 0+14463282816: cap 2: End par conjunct: 0x2522fb0+14463283608: cap 2: Trying to steal a spark+14463284076: cap 2: stealing a spark from cap 0+14479039764: cap 0: End par conjunct: 0x2525cb0+14479039966: cap 0: End par conjunction: 0x2525cb0+14479040124: cap 0: End par conjunct: 0x2525c50+14479040632: cap 0: running a local spark+14486433358: cap 3: End par conjunct: 0x2523010+14486433831: cap 3: Trying to steal a spark+14486434155: cap 3: stealing a spark from cap 0+14568810984: cap 1: End par conjunct: 0x2523070+14568811731: cap 1: Trying to steal a spark+14568812536: cap 1: stealing a spark from cap 0+14601411877: cap 2: End par conjunct: 0x25230d0+14601412935: cap 2: Trying to steal a spark+14601413380: cap 2: stealing a spark from cap 0+14628823312: cap 3: End par conjunct: 0x2523130+14628823843: cap 3: Trying to steal a spark+14628824293: cap 3: stealing a spark from cap 0+14638176405: cap 0: End par conjunct: 0x2525c50+14638176558: cap 0: End par conjunction: 0x2525c50+14638176837: cap 0: End par conjunct: 0x2525bf0+14638177161: cap 0: running a local spark+14712473970: cap 1: End par conjunct: 0x2523190+14712475869: cap 1: Trying to steal a spark+14712478024: cap 1: stealing a spark from cap 0+14771506563: cap 3: End par conjunct: 0x2523250+14771507184: cap 3: Trying to steal a spark+14771507814: cap 3: stealing a spark from cap 0+14783932206: cap 2: End par conjunct: 0x25231f0+14783933722: cap 2: Trying to steal a spark+14783935815: cap 2: stealing a spark from cap 0+14796214938: cap 0: End par conjunct: 0x2525bf0+14796215145: cap 0: End par conjunction: 0x2525bf0+14796215320: cap 0: End par conjunct: 0x2525b90+14796215667: cap 0: running a local spark+14865487227: cap 1: End par conjunct: 0x25232b0+14865489189: cap 1: Trying to steal a spark+14865491578: cap 1: stealing a spark from cap 0+14916953641: cap 3: End par conjunct: 0x2523310+14916954114: cap 3: Trying to steal a spark+14916954879: cap 3: stealing a spark from cap 0+14933806969: cap 2: End par conjunct: 0x2523370+14933807860: cap 2: Trying to steal a spark+14933808607: cap 2: stealing a spark from cap 0+14954455723: cap 0: End par conjunct: 0x2525b90+14954455980: cap 0: End par conjunction: 0x2525b90+14954456169: cap 0: End par conjunct: 0x2525b30+14954456547: cap 0: running a local spark+15012382698: cap 1: End par conjunct: 0x25233d0+15012383508: cap 1: Trying to steal a spark+15012384228: cap 1: stealing a spark from cap 0+15062862001: cap 3: End par conjunct: 0x2523430+15062862519: cap 3: Trying to steal a spark+15062863090: cap 3: stealing a spark from cap 0+15075263713: cap 2: End par conjunct: 0x2523490+15075264213: cap 2: Trying to steal a spark+15075264712: cap 2: stealing a spark from cap 0+15111651541: cap 0: End par conjunct: 0x2525b30+15111651730: cap 0: End par conjunction: 0x2525b30+15111651901: cap 0: End par conjunct: 0x2525ad0+15111652338: cap 0: running a local spark+15159532509: cap 1: End par conjunct: 0x25234f0+15159532869: cap 1: Trying to steal a spark+15159533517: cap 1: stealing a spark from cap 0+15209371957: cap 3: End par conjunct: 0x2523550+15209372385: cap 3: Trying to steal a spark+15209372830: cap 3: stealing a spark from cap 0+15217142107: cap 2: End par conjunct: 0x25235b0+15217142562: cap 2: Trying to steal a spark+15217143066: cap 2: stealing a spark from cap 0+15269150128: cap 0: End par conjunct: 0x2525ad0+15269150335: cap 0: End par conjunction: 0x2525ad0+15269150470: cap 0: End par conjunct: 0x2525a70+15269150875: cap 0: running a local spark+15307307370: cap 1: End par conjunct: 0x2523610+15307308000: cap 1: Trying to steal a spark+15307308598: cap 1: stealing a spark from cap 0+15356259828: cap 3: End par conjunct: 0x2523670+15356260264: cap 3: Trying to steal a spark+15356260719: cap 3: stealing a spark from cap 0+15359061276: cap 2: End par conjunct: 0x25236d0+15359062068: cap 2: Trying to steal a spark+15359062869: cap 2: stealing a spark from cap 0+15426181422: cap 0: End par conjunct: 0x2525a70+15426181611: cap 0: End par conjunction: 0x2525a70+15426181777: cap 0: End par conjunct: 0x2525a10+15426182079: cap 0: running a local spark+15454049139: cap 1: End par conjunct: 0x2523730+15454049773: cap 1: Trying to steal a spark+15454050367: cap 1: stealing a spark from cap 0+15499701720: cap 2: End par conjunct: 0x25237f0+15499702341: cap 2: Trying to steal a spark+15499702908: cap 2: stealing a spark from cap 0+15501423757: cap 3: End par conjunct: 0x2523790+15501424230: cap 3: Trying to steal a spark+15501424765: cap 3: stealing a spark from cap 0+15583032742: cap 0: End par conjunct: 0x2525a10+15583032940: cap 0: End par conjunction: 0x2525a10+15583033129: cap 0: End par conjunct: 0x25259b0+15583033386: cap 0: running a local spark+15599108277: cap 1: End par conjunct: 0x2523850+15599109303: cap 1: Trying to steal a spark+15599110086: cap 1: stealing a spark from cap 0+15640560369: cap 2: End par conjunct: 0x25238b0+15640561480: cap 2: Trying to steal a spark+15640562115: cap 2: stealing a spark from cap 0+15646349893: cap 3: End par conjunct: 0x2523910+15646350348: cap 3: Trying to steal a spark+15646350793: cap 3: stealing a spark from cap 0+15739566930: cap 0: End par conjunct: 0x25259b0+15739567137: cap 0: End par conjunction: 0x25259b0+15739567308: cap 0: End par conjunct: 0x2525950+15739567560: cap 0: running a local spark+15745644837: cap 1: End par conjunct: 0x2523970+15745645597: cap 1: Trying to steal a spark+15745646556: cap 1: stealing a spark from cap 0+15781384827: cap 2: End par conjunct: 0x25239d0+15781385376: cap 2: Trying to steal a spark+15781385727: cap 2: stealing a spark from cap 0+15791739669: cap 3: End par conjunct: 0x2523a30+15791740051: cap 3: Trying to steal a spark+15791740510: cap 3: stealing a spark from cap 0+15892384153: cap 1: End par conjunct: 0x2523a90+15892385337: cap 1: Trying to steal a spark+15892386390: cap 1: stealing a spark from cap 0+15896202012: cap 0: End par conjunct: 0x2525950+15896202246: cap 0: End par conjunction: 0x2525950+15896202421: cap 0: End par conjunct: 0x25258f0+15896202997: cap 0: running a local spark+15924082396: cap 2: End par conjunct: 0x2523af0+15924083310: cap 2: Trying to steal a spark+15924083980: cap 2: stealing a spark from cap 0+15937728102: cap 3: End par conjunct: 0x2523b50+15937728588: cap 3: Trying to steal a spark+15937729150: cap 3: stealing a spark from cap 0+16045001689: cap 1: End par conjunct: 0x2523bb0+16045003084: cap 1: Trying to steal a spark+16045004160: cap 1: stealing a spark from cap 0+16053299329: cap 0: End par conjunct: 0x25258f0+16053299523: cap 0: End par conjunction: 0x25258f0+16053299671: cap 0: End par conjunct: 0x2525890+16053299982: cap 0: running a local spark+16066608561: cap 2: End par conjunct: 0x2523c10+16066609231: cap 2: Trying to steal a spark+16066609744: cap 2: stealing a spark from cap 0+16084188706: cap 3: End par conjunct: 0x2523c70+16084189174: cap 3: Trying to steal a spark+16084189714: cap 3: stealing a spark from cap 0+16193615319: cap 1: End par conjunct: 0x2523cd0+16193616453: cap 1: Trying to steal a spark+16193617564: cap 1: stealing a spark from cap 0+16210622965: cap 0: End par conjunct: 0x2525890+16210623222: cap 0: End par conjunction: 0x2525890+16210623411: cap 0: End par conjunct: 0x2525830+16210623978: cap 0: running a local spark+16210819453: cap 2: End par conjunct: 0x2523d30+16210819912: cap 2: Trying to steal a spark+16210820493: cap 2: stealing a spark from cap 0+16232694493: cap 3: End par conjunct: 0x2523d90+16232695141: cap 3: Trying to steal a spark+16232695753: cap 3: stealing a spark from cap 0+16342119135: cap 1: End par conjunct: 0x2523df0+16342120183: cap 1: Trying to steal a spark+16342120809: cap 1: stealing a spark from cap 0+16354987947: cap 2: End par conjunct: 0x2523e50+16354988622: cap 2: Trying to steal a spark+16354988977: cap 2: stealing a spark from cap 0+16367815017: cap 0: End par conjunct: 0x2525830+16367815350: cap 0: End par conjunction: 0x2525830+16367815525: cap 0: End par conjunct: 0x25257d0+16367815836: cap 0: running a local spark+16380890707: cap 3: End par conjunct: 0x2523eb0+16380891310: cap 3: Trying to steal a spark+16380891652: cap 3: stealing a spark from cap 0+16492019895: cap 1: End par conjunct: 0x2523f10+16492020795: cap 1: Trying to steal a spark+16492021740: cap 1: stealing a spark from cap 0+16499029032: cap 2: End par conjunct: 0x2523f70+16499029392: cap 2: Trying to steal a spark+16499029711: cap 2: stealing a spark from cap 0+16524922896: cap 0: End par conjunct: 0x25257d0+16524923058: cap 0: End par conjunction: 0x25257d0+16524923215: cap 0: End par conjunct: 0x2525770+16524923607: cap 0: running a local spark+16529886841: cap 3: End par conjunct: 0x2523fd0+16529887332: cap 3: Trying to steal a spark+16529887768: cap 3: stealing a spark from cap 0+16642523817: cap 1: End par conjunct: 0x2524030+16642524627: cap 1: Trying to steal a spark+16642525428: cap 1: stealing a spark from cap 0+16643228026: cap 2: End par conjunct: 0x2524090+16643228620: cap 2: Trying to steal a spark+16643228958: cap 2: stealing a spark from cap 0+16680950910: cap 0: End par conjunct: 0x2525770+16680951099: cap 0: End par conjunction: 0x2525770+16680951247: cap 0: End par conjunct: 0x2525710+16680951499: cap 0: running a local spark+16682200146: cap 3: End par conjunct: 0x25240f0+16682200569: cap 3: Trying to steal a spark+16682200947: cap 3: stealing a spark from cap 0+16793102727: cap 2: End par conjunct: 0x25241b0+16793103429: cap 2: Trying to steal a spark+16793104441: cap 2: stealing a spark from cap 0+16797486150: cap 1: End par conjunct: 0x2524150+16797486825: cap 1: Trying to steal a spark+16797487225: cap 1: stealing a spark from cap 0+16836621975: cap 0: End par conjunct: 0x2525710+16836622141: cap 0: End par conjunction: 0x2525710+16836622321: cap 0: End par conjunct: 0x25256b0+16836622663: cap 0: running a local spark+16837625277: cap 3: End par conjunct: 0x2524210+16837625754: cap 3: Trying to steal a spark+16837626159: cap 3: stealing a spark from cap 0+16945347280: cap 2: End par conjunct: 0x2524270+16945348770: cap 2: Trying to steal a spark+16945349895: cap 2: stealing a spark from cap 0+16955697573: cap 1: End par conjunct: 0x25242d0+16955698000: cap 1: Trying to steal a spark+16955698558: cap 1: stealing a spark from cap 0+16992188572: cap 0: End par conjunct: 0x25256b0+16992188766: cap 0: End par conjunction: 0x25256b0+16992188968: cap 0: End par conjunct: 0x2525650+16992189297: cap 0: running a local spark+16996860166: cap 3: End par conjunct: 0x2524330+16996860612: cap 3: Trying to steal a spark+16996860994: cap 3: stealing a spark from cap 0+17100326358: cap 2: End par conjunct: 0x2524390+17100327078: cap 2: Trying to steal a spark+17100327775: cap 2: stealing a spark from cap 0+17121939421: cap 1: End par conjunct: 0x25243f0+17121940146: cap 1: Trying to steal a spark+17121940542: cap 1: stealing a spark from cap 0+17147488131: cap 0: End par conjunct: 0x2525650+17147488477: cap 0: End par conjunction: 0x2525650+17147488635: cap 0: End par conjunct: 0x25255f0+17147489058: cap 0: running a local spark+17156473344: cap 3: End par conjunct: 0x2524450+17156473798: cap 3: Trying to steal a spark+17156474167: cap 3: stealing a spark from cap 0+17257222408: cap 2: End par conjunct: 0x25244b0+17257223875: cap 2: Trying to steal a spark+17257225095: cap 2: stealing a spark from cap 0+17283512254: cap 1: End par conjunct: 0x2524510+17283513100: cap 1: Trying to steal a spark+17283513496: cap 1: stealing a spark from cap 0+17303152891: cap 0: End par conjunct: 0x25255f0+17303153125: cap 0: End par conjunction: 0x25255f0+17303153301: cap 0: End par conjunct: 0x2525590+17303153638: cap 0: running a local spark+17317260342: cap 3: End par conjunct: 0x2524570+17317260765: cap 3: Trying to steal a spark+17317261179: cap 3: stealing a spark from cap 0+17413679826: cap 2: End par conjunct: 0x25245d0+17413680730: cap 2: Trying to steal a spark+17413681639: cap 2: stealing a spark from cap 0+17445166501: cap 1: End par conjunct: 0x2524630+17445167343: cap 1: Trying to steal a spark+17445167896: cap 1: stealing a spark from cap 0+17459300466: cap 0: End par conjunct: 0x2525590+17459301208: cap 0: End par conjunction: 0x2525590+17459301870: cap 0: End par conjunct: 0x2525530+17459303044: cap 0: running a local spark+17482807381: cap 3: End par conjunct: 0x2524690+17482808547: cap 3: Trying to steal a spark+17482809829: cap 3: stealing a spark from cap 0+17569003230: cap 2: End par conjunct: 0x25246f0+17569004233: cap 2: Trying to steal a spark+17569004854: cap 2: stealing a spark from cap 0+17605677370: cap 1: End par conjunct: 0x2524750+17605677892: cap 1: Trying to steal a spark+17605678446: cap 1: stealing a spark from cap 0+17615119162: cap 0: End par conjunct: 0x2525530+17615120013: cap 0: End par conjunction: 0x2525530+17615120620: cap 0: End par conjunct: 0x25254d0+17615121957: cap 0: running a local spark+17686208227: cap 3: End par conjunct: 0x25247b0+17686209937: cap 3: Trying to steal a spark+17686211638: cap 3: stealing a spark from cap 0+17725139019: cap 2: End par conjunct: 0x2524810+17725140454: cap 2: Trying to steal a spark+17725141692: cap 2: stealing a spark from cap 0+17767218150: cap 1: End par conjunct: 0x2524870+17767218951: cap 1: Trying to steal a spark+17767219387: cap 1: stealing a spark from cap 0+17770340709: cap 0: End par conjunct: 0x25254d0+17770340929: cap 0: End par conjunction: 0x25254d0+17770341208: cap 0: End par conjunct: 0x2525470+17770341649: cap 0: running a local spark+17846979615: cap 3: End par conjunct: 0x25248d0+17846980263: cap 3: Trying to steal a spark+17846980960: cap 3: stealing a spark from cap 0+17882204926: cap 2: End par conjunct: 0x2524930+17882206677: cap 2: Trying to steal a spark+17882208459: cap 2: stealing a spark from cap 0+17925635443: cap 0: End par conjunct: 0x2525470+17925635695: cap 0: End par conjunction: 0x2525470+17925635983: cap 0: End par conjunct: 0x2525410+17925636316: cap 0: running a local spark+17929204371: cap 1: End par conjunct: 0x2524990+17929205428: cap 1: Trying to steal a spark+17929206256: cap 1: stealing a spark from cap 0+18007752343: cap 3: End par conjunct: 0x25249f0+18007752766: cap 3: Trying to steal a spark+18007753437: cap 3: stealing a spark from cap 0+18038756245: cap 2: End par conjunct: 0x2524a50+18038757163: cap 2: Trying to steal a spark+18038757798: cap 2: stealing a spark from cap 0+18080380548: cap 0: End par conjunct: 0x2525410+18080380750: cap 0: End par conjunction: 0x2525410+18080380926: cap 0: End par conjunct: 0x25253b0+18080381268: cap 0: running a local spark+18090447849: cap 1: End par conjunct: 0x2524ab0+18090448285: cap 1: Trying to steal a spark+18090448825: cap 1: stealing a spark from cap 0+18168395116: cap 3: End par conjunct: 0x2524b10+18168395557: cap 3: Trying to steal a spark+18168396106: cap 3: stealing a spark from cap 0+18194295892: cap 2: End par conjunct: 0x2524b70+18194296734: cap 2: Trying to steal a spark+18194297454: cap 2: stealing a spark from cap 0+18235582875: cap 0: End par conjunct: 0x25253b0+18235583064: cap 0: End par conjunction: 0x25253b0+18235583217: cap 0: End par conjunct: 0x2525350+18235583536: cap 0: running a local spark+18251847418: cap 1: End par conjunct: 0x2524bd0+18251847949: cap 1: Trying to steal a spark+18251848642: cap 1: stealing a spark from cap 0+18328247212: cap 3: End par conjunct: 0x2524c30+18328247581: cap 3: Trying to steal a spark+18328248135: cap 3: stealing a spark from cap 0+18349427848: cap 2: End par conjunct: 0x2524c90+18349428879: cap 2: Trying to steal a spark+18349429522: cap 2: stealing a spark from cap 0+18390413767: cap 0: End par conjunct: 0x2525350+18390414015: cap 0: End par conjunction: 0x2525350+18390414307: cap 0: End par conjunct: 0x25252f0+18390414771: cap 0: running a local spark+18418554441: cap 1: End par conjunct: 0x2524cf0+18418556151: cap 1: Trying to steal a spark+18418558081: cap 1: stealing a spark from cap 0+18488594830: cap 3: End par conjunct: 0x2524d50+18488595802: cap 3: Trying to steal a spark+18488596576: cap 3: stealing a spark from cap 0+18545712619: cap 0: End par conjunct: 0x25252f0+18545712975: cap 0: End par conjunction: 0x25252f0+18545713146: cap 0: End par conjunct: 0x2525290+18545713398: cap 0: running a local spark+18548312062: cap 2: End par conjunct: 0x2524db0+18548314159: cap 2: Trying to steal a spark+18548316522: cap 2: stealing a spark from cap 0+18581090584: cap 1: End par conjunct: 0x2524e10+18581091916: cap 1: Trying to steal a spark+18581092528: cap 1: stealing a spark from cap 0+18647874999: cap 3: End par conjunct: 0x2524e70+18647876155: cap 3: Trying to steal a spark+18647877249: cap 3: stealing a spark from cap 0+18701289085: cap 0: End par conjunct: 0x2525290+18701289450: cap 0: End par conjunction: 0x2525290+18701289634: cap 0: End par conjunct: 0x2525230+18701290008: cap 0: running a local spark+18709436227: cap 2: End par conjunct: 0x2524ed0+18709437973: cap 2: Trying to steal a spark+18709439710: cap 2: stealing a spark from cap 0+18740173275: cap 1: End par conjunct: 0x2524f30+18740174184: cap 1: Trying to steal a spark+18740174580: cap 1: stealing a spark from cap 0+18805391203: cap 3: End par conjunct: 0x2524f90+18805391730: cap 3: Trying to steal a spark+18805392283: cap 3: stealing a spark from cap 0+18855587983: cap 0: End par conjunct: 0x2525230+18855588177: cap 0: End par conjunction: 0x2525230+18855588330: cap 0: End par conjunct: 0x25251d0+18855588541: cap 0: running a local spark+18861182568: cap 2: End par conjunct: 0x2524ff0+18861183427: cap 2: Trying to steal a spark+18861184143: cap 2: stealing a spark from cap 0+18895434813: cap 1: End par conjunct: 0x2525050+18895435393: cap 1: Trying to steal a spark+18895435798: cap 1: stealing a spark from cap 0+18959237212: cap 3: End par conjunct: 0x25250b0+18959238031: cap 3: Trying to steal a spark+18959238990: cap 3: Looking for global thread to resume+19010127069: cap 0: End par conjunct: 0x25251d0+19010127645: cap 0: End par conjunction: 0x25251d0+19010128009: cap 0: End par conjunct: 0x2525170+19010128540: cap 0: Trying to steal a spark+19010134809: cap 0: stopping thread 1 (thread blocked)+19010135358: cap 0: Looking for global thread to resume+19010337894: cap 2: End par conjunct: 0x2525110+19010338645: cap 2: Trying to steal a spark+19010339802: cap 2: Looking for global thread to resume+19050343357: cap 1: End par conjunct: 0x2525170+19050344109: cap 1: stopping thread 4 (thread finished)+19050349639: cap 1: thread 1 is runnable+19050352011: cap 1: Releasing thread 4 to the free pool+19050353118: cap 1: running thread 1+19050353397: cap 1: End par conjunction: 0x2525170+19050353689: cap 1: End par conjunct: 0x2525110+19050353869: cap 1: End par conjunction: 0x2525110+19050354108: cap 1: End par conjunct: 0x25250b0+19050354238: cap 1: End par conjunction: 0x25250b0+19050354409: cap 1: End par conjunct: 0x2525050+19050354535: cap 1: End par conjunction: 0x2525050+19050354666: cap 1: End par conjunct: 0x2524ff0+19050354801: cap 1: End par conjunction: 0x2524ff0+19050355021: cap 1: End par conjunct: 0x2524f90+19050355345: cap 1: End par conjunction: 0x2524f90+19050355494: cap 1: End par conjunct: 0x2524f30+19050355620: cap 1: End par conjunction: 0x2524f30+19050369354: cap 1: End par conjunct: 0x2524ed0+19050369520: cap 1: End par conjunction: 0x2524ed0+19050369709: cap 1: End par conjunct: 0x2524e70+19050369849: cap 1: End par conjunction: 0x2524e70+19050370087: cap 1: End par conjunct: 0x2524e10+19050370299: cap 1: End par conjunction: 0x2524e10+19050370429: cap 1: End par conjunct: 0x2524db0+19050370564: cap 1: End par conjunction: 0x2524db0+19050370699: cap 1: End par conjunct: 0x2524d50+19050370825: cap 1: End par conjunction: 0x2524d50+19050370960: cap 1: End par conjunct: 0x2524cf0+19050371086: cap 1: End par conjunction: 0x2524cf0+19050371221: cap 1: End par conjunct: 0x2524c90+19050371352: cap 1: End par conjunction: 0x2524c90+19050371482: cap 1: End par conjunct: 0x2524c30+19050371613: cap 1: End par conjunction: 0x2524c30+19050371739: cap 1: End par conjunct: 0x2524bd0+19050371874: cap 1: End par conjunction: 0x2524bd0+19050372004: cap 1: End par conjunct: 0x2524b70+19050372130: cap 1: End par conjunction: 0x2524b70+19050372306: cap 1: End par conjunct: 0x2524b10+19050372445: cap 1: End par conjunction: 0x2524b10+19050372576: cap 1: End par conjunct: 0x2524ab0+19050372702: cap 1: End par conjunction: 0x2524ab0+19050372828: cap 1: End par conjunct: 0x2524a50+19050372958: cap 1: End par conjunction: 0x2524a50+19050373147: cap 1: End par conjunct: 0x25249f0+19050373273: cap 1: End par conjunction: 0x25249f0+19050373458: cap 1: End par conjunct: 0x2524990+19050373584: cap 1: End par conjunction: 0x2524990+19050373714: cap 1: End par conjunct: 0x2524930+19050373849: cap 1: End par conjunction: 0x2524930+19050373975: cap 1: End par conjunct: 0x25248d0+19050374101: cap 1: End par conjunction: 0x25248d0+19050374232: cap 1: End par conjunct: 0x2524870+19050374367: cap 1: End par conjunction: 0x2524870+19050374497: cap 1: End par conjunct: 0x2524810+19050374623: cap 1: End par conjunction: 0x2524810+19050374749: cap 1: End par conjunct: 0x25247b0+19050374997: cap 1: End par conjunction: 0x25247b0+19050375127: cap 1: End par conjunct: 0x2524750+19050375258: cap 1: End par conjunction: 0x2524750+19050375505: cap 1: End par conjunct: 0x25246f0+19050375627: cap 1: End par conjunction: 0x25246f0+19050375762: cap 1: End par conjunct: 0x2524690+19050375892: cap 1: End par conjunction: 0x2524690+19050376023: cap 1: End par conjunct: 0x2524630+19050376153: cap 1: End par conjunction: 0x2524630+19050376279: cap 1: End par conjunct: 0x25245d0+19050376414: cap 1: End par conjunction: 0x25245d0+19050376540: cap 1: End par conjunct: 0x2524570+19050376671: cap 1: End par conjunction: 0x2524570+19050376797: cap 1: End par conjunct: 0x2524510+19050376932: cap 1: End par conjunction: 0x2524510+19050377062: cap 1: End par conjunct: 0x25244b0+19050377188: cap 1: End par conjunction: 0x25244b0+19050377314: cap 1: End par conjunct: 0x2524450+19050377440: cap 1: End par conjunction: 0x2524450+19050377571: cap 1: End par conjunct: 0x25243f0+19050377697: cap 1: End par conjunction: 0x25243f0+19050377827: cap 1: End par conjunct: 0x2524390+19050377949: cap 1: End par conjunction: 0x2524390+19050378079: cap 1: End par conjunct: 0x2524330+19050378210: cap 1: End par conjunction: 0x2524330+19050378340: cap 1: End par conjunct: 0x25242d0+19050378466: cap 1: End par conjunction: 0x25242d0+19050378597: cap 1: End par conjunct: 0x2524270+19050378727: cap 1: End par conjunction: 0x2524270+19050378858: cap 1: End par conjunct: 0x2524210+19050378984: cap 1: End par conjunction: 0x2524210+19050379110: cap 1: End par conjunct: 0x25241b0+19050379245: cap 1: End par conjunction: 0x25241b0+19050379375: cap 1: End par conjunct: 0x2524150+19050379506: cap 1: End par conjunction: 0x2524150+19050379636: cap 1: End par conjunct: 0x25240f0+19050379762: cap 1: End par conjunction: 0x25240f0+19050379897: cap 1: End par conjunct: 0x2524090+19050380023: cap 1: End par conjunction: 0x2524090+19050380158: cap 1: End par conjunct: 0x2524030+19050380280: cap 1: End par conjunction: 0x2524030+19050380406: cap 1: End par conjunct: 0x2523fd0+19050380712: cap 1: End par conjunction: 0x2523fd0+19050380959: cap 1: End par conjunct: 0x2523f70+19050381207: cap 1: End par conjunction: 0x2523f70+19050381333: cap 1: End par conjunct: 0x2523f10+19050381472: cap 1: End par conjunction: 0x2523f10+19050381603: cap 1: End par conjunct: 0x2523eb0+19050381724: cap 1: End par conjunction: 0x2523eb0+19050381855: cap 1: End par conjunct: 0x2523e50+19050381981: cap 1: End par conjunction: 0x2523e50+19050382111: cap 1: End par conjunct: 0x2523df0+19050382237: cap 1: End par conjunction: 0x2523df0+19050382368: cap 1: End par conjunct: 0x2523d90+19050382494: cap 1: End par conjunction: 0x2523d90+19050382629: cap 1: End par conjunct: 0x2523d30+19050382755: cap 1: End par conjunction: 0x2523d30+19050382885: cap 1: End par conjunct: 0x2523cd0+19050383007: cap 1: End par conjunction: 0x2523cd0+19050383142: cap 1: End par conjunct: 0x2523c70+19050383277: cap 1: End par conjunction: 0x2523c70+19050383407: cap 1: End par conjunct: 0x2523c10+19050383533: cap 1: End par conjunction: 0x2523c10+19050383668: cap 1: End par conjunct: 0x2523bb0+19050383799: cap 1: End par conjunction: 0x2523bb0+19050383929: cap 1: End par conjunct: 0x2523b50+19050384055: cap 1: End par conjunction: 0x2523b50+19050384195: cap 1: End par conjunct: 0x2523af0+19050384321: cap 1: End par conjunction: 0x2523af0+19050384451: cap 1: End par conjunct: 0x2523a90+19050384577: cap 1: End par conjunction: 0x2523a90+19050384726: cap 1: End par conjunct: 0x2523a30+19050384852: cap 1: End par conjunction: 0x2523a30+19050384978: cap 1: End par conjunct: 0x25239d0+19050385113: cap 1: End par conjunction: 0x25239d0+19050385243: cap 1: End par conjunct: 0x2523970+19050385374: cap 1: End par conjunction: 0x2523970+19050385495: cap 1: End par conjunct: 0x2523910+19050385630: cap 1: End par conjunction: 0x2523910+19050385761: cap 1: End par conjunct: 0x25238b0+19050385887: cap 1: End par conjunction: 0x25238b0+19050386013: cap 1: End par conjunct: 0x2523850+19050386143: cap 1: End par conjunction: 0x2523850+19050386274: cap 1: End par conjunct: 0x25237f0+19050386400: cap 1: End par conjunction: 0x25237f0+19050386535: cap 1: End par conjunct: 0x2523790+19050386661: cap 1: End par conjunction: 0x2523790+19050386787: cap 1: End par conjunct: 0x2523730+19050386917: cap 1: End par conjunction: 0x2523730+19050387043: cap 1: End par conjunct: 0x25236d0+19050387169: cap 1: End par conjunction: 0x25236d0+19050387295: cap 1: End par conjunct: 0x2523670+19050387430: cap 1: End par conjunction: 0x2523670+19050387561: cap 1: End par conjunct: 0x2523610+19050387687: cap 1: End par conjunction: 0x2523610+19050387817: cap 1: End par conjunct: 0x25235b0+19050387948: cap 1: End par conjunction: 0x25235b0+19050388078: cap 1: End par conjunct: 0x2523550+19050388209: cap 1: End par conjunction: 0x2523550+19050388344: cap 1: End par conjunct: 0x25234f0+19050388465: cap 1: End par conjunction: 0x25234f0+19050388596: cap 1: End par conjunct: 0x2523490+19050388726: cap 1: End par conjunction: 0x2523490+19050388857: cap 1: End par conjunct: 0x2523430+19050388987: cap 1: End par conjunction: 0x2523430+19050389113: cap 1: End par conjunct: 0x25233d0+19050389248: cap 1: End par conjunction: 0x25233d0+19050389374: cap 1: End par conjunct: 0x2523370+19050389505: cap 1: End par conjunction: 0x2523370+19050389631: cap 1: End par conjunct: 0x2523310+19050389766: cap 1: End par conjunction: 0x2523310+19050389901: cap 1: End par conjunct: 0x25232b0+19050390027: cap 1: End par conjunction: 0x25232b0+19050390153: cap 1: End par conjunct: 0x2523250+19050390283: cap 1: End par conjunction: 0x2523250+19050390414: cap 1: End par conjunct: 0x25231f0+19050390540: cap 1: End par conjunction: 0x25231f0+19050390670: cap 1: End par conjunct: 0x2523190+19050390796: cap 1: End par conjunction: 0x2523190+19050390927: cap 1: End par conjunct: 0x2523130+19050391053: cap 1: End par conjunction: 0x2523130+19050391183: cap 1: End par conjunct: 0x25230d0+19050391305: cap 1: End par conjunction: 0x25230d0+19050391476: cap 1: End par conjunct: 0x2523070+19050391611: cap 1: End par conjunction: 0x2523070+19050391741: cap 1: End par conjunct: 0x2523010+19050391858: cap 1: End par conjunction: 0x2523010+19050392101: cap 1: End par conjunct: 0x2522fb0+19050392407: cap 1: End par conjunction: 0x2522fb0+19050392538: cap 1: End par conjunct: 0x2522f50+19050392749: cap 1: End par conjunction: 0x2522f50+19050392884: cap 1: End par conjunct: 0x2522ef0+19050393010: cap 1: End par conjunction: 0x2522ef0+19050393141: cap 1: End par conjunct: 0x2522e90+19050393271: cap 1: End par conjunction: 0x2522e90+19050393402: cap 1: End par conjunct: 0x2522e30+19050393528: cap 1: End par conjunction: 0x2522e30+19050393658: cap 1: End par conjunct: 0x2522dd0+19050393793: cap 1: End par conjunction: 0x2522dd0+19050393919: cap 1: End par conjunct: 0x2522d70+19050394045: cap 1: End par conjunction: 0x2522d70+19050394176: cap 1: End par conjunct: 0x2522d10+19050394311: cap 1: End par conjunction: 0x2522d10+19050394446: cap 1: End par conjunct: 0x2522cb0+19050394567: cap 1: End par conjunction: 0x2522cb0+19050394698: cap 1: End par conjunct: 0x2522c50+19050394824: cap 1: End par conjunction: 0x2522c50+19050394954: cap 1: End par conjunct: 0x2522bf0+19050395080: cap 1: End par conjunction: 0x2522bf0+19050395211: cap 1: End par conjunct: 0x2522b90+19050395332: cap 1: End par conjunction: 0x2522b90+19050395467: cap 1: End par conjunct: 0x2522b30+19050395598: cap 1: End par conjunction: 0x2522b30+19050395724: cap 1: End par conjunct: 0x2522ad0+19050395850: cap 1: End par conjunction: 0x2522ad0+19050395985: cap 1: End par conjunct: 0x2522a70+19050396120: cap 1: End par conjunction: 0x2522a70+19050396246: cap 1: End par conjunct: 0x2522a10+19050396372: cap 1: End par conjunction: 0x2522a10+19050396507: cap 1: End par conjunct: 0x25229b0+19050396642: cap 1: End par conjunction: 0x25229b0+19050396772: cap 1: End par conjunct: 0x2522950+19050396898: cap 1: End par conjunction: 0x2522950+19050397042: cap 1: End par conjunct: 0x25228f0+19050397168: cap 1: End par conjunction: 0x25228f0+19050397299: cap 1: End par conjunct: 0x2522890+19050397429: cap 1: End par conjunction: 0x2522890+19050397573: cap 1: End par conjunct: 0x2522830+19050397704: cap 1: End par conjunction: 0x2522830+19050397830: cap 1: End par conjunct: 0x25227d0+19050397965: cap 1: End par conjunction: 0x25227d0+19050398095: cap 1: End par conjunct: 0x2522770+19050398221: cap 1: End par conjunction: 0x2522770+19050398347: cap 1: End par conjunct: 0x2522710+19050398482: cap 1: End par conjunction: 0x2522710+19050398617: cap 1: End par conjunct: 0x25226b0+19050398743: cap 1: End par conjunction: 0x25226b0+19050398869: cap 1: End par conjunct: 0x2522650+19050399000: cap 1: End par conjunction: 0x2522650+19050399130: cap 1: End par conjunct: 0x25225f0+19050399256: cap 1: End par conjunction: 0x25225f0+19050399387: cap 1: End par conjunct: 0x2522590+19050399513: cap 1: End par conjunction: 0x2522590+19050399648: cap 1: End par conjunct: 0x2522530+19050399774: cap 1: End par conjunction: 0x2522530+19050399904: cap 1: End par conjunct: 0x25224d0+19050400026: cap 1: End par conjunction: 0x25224d0+19050400161: cap 1: End par conjunct: 0x2522470+19050400296: cap 1: End par conjunction: 0x2522470+19050400422: cap 1: End par conjunct: 0x2522410+19050400548: cap 1: End par conjunction: 0x2522410+19050400683: cap 1: End par conjunct: 0x25223b0+19050400813: cap 1: End par conjunction: 0x25223b0+19050400944: cap 1: End par conjunct: 0x2522350+19050401070: cap 1: End par conjunction: 0x2522350+19050401205: cap 1: End par conjunct: 0x25222f0+19050401331: cap 1: End par conjunction: 0x25222f0+19050401461: cap 1: End par conjunct: 0x2522290+19050401592: cap 1: End par conjunction: 0x2522290+19050401740: cap 1: End par conjunct: 0x2522230+19050401866: cap 1: End par conjunction: 0x2522230+19050401992: cap 1: End par conjunct: 0x25221d0+19050402127: cap 1: End par conjunction: 0x25221d0+19050402258: cap 1: End par conjunct: 0x2522170+19050402384: cap 1: End par conjunction: 0x2522170+19050402510: cap 1: End par conjunct: 0x2522110+19050402649: cap 1: End par conjunction: 0x2522110+19050402780: cap 1: End par conjunct: 0x25220b0+19050403014: cap 1: End par conjunction: 0x25220b0+19050403140: cap 1: End par conjunct: 0x2522050+19050403261: cap 1: End par conjunction: 0x2522050+19050403396: cap 1: End par conjunct: 0x2521ff0+19050403639: cap 1: End par conjunction: 0x2521ff0+19050403770: cap 1: End par conjunct: 0x2521f90+19050403896: cap 1: End par conjunction: 0x2521f90+19050404035: cap 1: End par conjunct: 0x2521f30+19050404170: cap 1: End par conjunction: 0x2521f30+19050404301: cap 1: End par conjunct: 0x2521ed0+19050404427: cap 1: End par conjunction: 0x2521ed0+19050404553: cap 1: End par conjunct: 0x2521e70+19050404683: cap 1: End par conjunction: 0x2521e70+19050404814: cap 1: End par conjunct: 0x2521e10+19050404940: cap 1: End par conjunction: 0x2521e10+19050405075: cap 1: End par conjunct: 0x2521db0+19050405205: cap 1: End par conjunction: 0x2521db0+19050405336: cap 1: End par conjunct: 0x2521d50+19050405466: cap 1: End par conjunction: 0x2521d50+19050405709: cap 1: End par conjunct: 0x2521cf0+19050405835: cap 1: End par conjunction: 0x2521cf0+19050405966: cap 1: End par conjunct: 0x2521c90+19050406096: cap 1: End par conjunction: 0x2521c90+19050406344: cap 1: End par conjunct: 0x2521c30+19050406470: cap 1: End par conjunction: 0x2521c30+19050406596: cap 1: End par conjunct: 0x2521bd0+19050406731: cap 1: End par conjunction: 0x2521bd0+19050406861: cap 1: End par conjunct: 0x2521b70+19050406987: cap 1: End par conjunction: 0x2521b70+19050407113: cap 1: End par conjunct: 0x2521b10+19050407248: cap 1: End par conjunction: 0x2521b10+19050407383: cap 1: End par conjunct: 0x2521ab0+19050407509: cap 1: End par conjunction: 0x2521ab0+19050407635: cap 1: End par conjunct: 0x2521a50+19050407761: cap 1: End par conjunction: 0x2521a50+19050407892: cap 1: End par conjunct: 0x25219f0+19050408018: cap 1: End par conjunction: 0x25219f0+19050408148: cap 1: End par conjunct: 0x2521990+19050408274: cap 1: End par conjunction: 0x2521990+19050408405: cap 1: End par conjunct: 0x2521930+19050408535: cap 1: End par conjunction: 0x2521930+19050408661: cap 1: End par conjunct: 0x25218d0+19050408792: cap 1: End par conjunction: 0x25218d0+19050408918: cap 1: End par conjunct: 0x2521870+19050409053: cap 1: End par conjunction: 0x2521870+19050409179: cap 1: End par conjunct: 0x2521810+19050409305: cap 1: End par conjunction: 0x2521810+19050409440: cap 1: End par conjunct: 0x25217b0+19050409575: cap 1: End par conjunction: 0x25217b0+19050409701: cap 1: End par conjunct: 0x2521750+19050409831: cap 1: End par conjunction: 0x2521750+19050409962: cap 1: End par conjunct: 0x25216f0+19050410088: cap 1: End par conjunction: 0x25216f0+19050410218: cap 1: End par conjunct: 0x2521690+19050410349: cap 1: End par conjunction: 0x2521690+19050410488: cap 1: End par conjunct: 0x2521630+19050410614: cap 1: End par conjunction: 0x2521630+19050410740: cap 1: End par conjunct: 0x25215d0+19050410880: cap 1: End par conjunction: 0x25215d0+19050411051: cap 1: End par conjunct: 0x2521570+19050411177: cap 1: End par conjunction: 0x2521570+19050411348: cap 1: End par conjunct: 0x2521510+19050411483: cap 1: End par conjunction: 0x2521510+19050411658: cap 1: End par conjunct: 0x25214b0+19050411784: cap 1: End par conjunction: 0x25214b0+19050411915: cap 1: End par conjunct: 0x2521450+19050412045: cap 1: End par conjunction: 0x2521450+19050412176: cap 1: End par conjunct: 0x25213f0+19050412302: cap 1: End par conjunction: 0x25213f0+19050412437: cap 1: End par conjunct: 0x2521390+19050412563: cap 1: End par conjunction: 0x2521390+19050412698: cap 1: End par conjunct: 0x2521330+19050412828: cap 1: End par conjunction: 0x2521330+19050412959: cap 1: End par conjunct: 0x25212d0+19050413085: cap 1: End par conjunction: 0x25212d0+19050413220: cap 1: End par conjunct: 0x2521270+19050413355: cap 1: End par conjunction: 0x2521270+19050413481: cap 1: End par conjunct: 0x2521210+19050413607: cap 1: End par conjunction: 0x2521210+19050413742: cap 1: End par conjunct: 0x25211b0+19050413872: cap 1: End par conjunction: 0x25211b0+19050414003: cap 1: End par conjunct: 0x2521150+19050414133: cap 1: End par conjunction: 0x2521150+19050414264: cap 1: End par conjunct: 0x25210f0+19050414390: cap 1: End par conjunction: 0x25210f0+19050414520: cap 1: End par conjunct: 0x2521090+19050414646: cap 1: End par conjunction: 0x2521090+19050414790: cap 1: End par conjunct: 0x2521030+19050414912: cap 1: End par conjunction: 0x2521030+19050415038: cap 1: End par conjunct: 0x2520fd0+19050415303: cap 1: End par conjunction: 0x2520fd0+19050415542: cap 1: End par conjunct: 0x2520f70+19050415785: cap 1: End par conjunction: 0x2520f70+19050415906: cap 1: End par conjunct: 0x2520f10+19050416041: cap 1: End par conjunction: 0x2520f10+19050416176: cap 1: End par conjunct: 0x2520eb0+19050416302: cap 1: End par conjunction: 0x2520eb0+19050416428: cap 1: End par conjunct: 0x2520e50+19050416554: cap 1: End par conjunction: 0x2520e50+19050416689: cap 1: End par conjunct: 0x2520df0+19050416811: cap 1: End par conjunction: 0x2520df0+19050416941: cap 1: End par conjunct: 0x2520d90+19050417072: cap 1: End par conjunction: 0x2520d90+19050417202: cap 1: End par conjunct: 0x2520d30+19050417333: cap 1: End par conjunction: 0x2520d30+19050417463: cap 1: End par conjunct: 0x2520cd0+19050417598: cap 1: End par conjunction: 0x2520cd0+19050417724: cap 1: End par conjunct: 0x2520c70+19050417864: cap 1: End par conjunction: 0x2520c70+19050417990: cap 1: End par conjunct: 0x2520c10+19050418116: cap 1: End par conjunction: 0x2520c10+19050418246: cap 1: End par conjunct: 0x2520bb0+19050418377: cap 1: End par conjunction: 0x2520bb0+19050418512: cap 1: End par conjunct: 0x2520b50+19050418638: cap 1: End par conjunction: 0x2520b50+19050418773: cap 1: End par conjunct: 0x2520af0+19050418894: cap 1: End par conjunction: 0x2520af0+19050419029: cap 1: End par conjunct: 0x2520a90+19050419160: cap 1: End par conjunction: 0x2520a90+19050419295: cap 1: End par conjunct: 0x2520a30+19050419421: cap 1: End par conjunction: 0x2520a30+19050419547: cap 1: End par conjunct: 0x25209d0+19050419686: cap 1: End par conjunction: 0x25209d0+19050419812: cap 1: End par conjunct: 0x2520970+19050419938: cap 1: End par conjunction: 0x2520970+19050420064: cap 1: End par conjunct: 0x2520910+19050420199: cap 1: End par conjunction: 0x2520910+19050420334: cap 1: End par conjunct: 0x25208b0+19050420460: cap 1: End par conjunction: 0x25208b0+19050420586: cap 1: End par conjunct: 0x2520850+19050420717: cap 1: End par conjunction: 0x2520850+19050420847: cap 1: End par conjunct: 0x25207f0+19050420973: cap 1: End par conjunction: 0x25207f0+19050421104: cap 1: End par conjunct: 0x2520790+19050421230: cap 1: End par conjunction: 0x2520790+19050421360: cap 1: End par conjunct: 0x2520730+19050421491: cap 1: End par conjunction: 0x2520730+19050421621: cap 1: End par conjunct: 0x25206d0+19050421747: cap 1: End par conjunction: 0x25206d0+19050421873: cap 1: End par conjunct: 0x2520670+19050422004: cap 1: End par conjunction: 0x2520670+19050422134: cap 1: End par conjunct: 0x2520610+19050422260: cap 1: End par conjunction: 0x2520610+19050422395: cap 1: End par conjunct: 0x25205b0+19050422530: cap 1: End par conjunction: 0x25205b0+19050422661: cap 1: End par conjunct: 0x2520550+19050422787: cap 1: End par conjunction: 0x2520550+19050422922: cap 1: End par conjunct: 0x25204f0+19050423048: cap 1: End par conjunction: 0x25204f0+19050423178: cap 1: End par conjunct: 0x2520490+19050423309: cap 1: End par conjunction: 0x2520490+19050423444: cap 1: End par conjunct: 0x2520430+19050423574: cap 1: End par conjunction: 0x2520430+19050423696: cap 1: End par conjunct: 0x25203d0+19050423831: cap 1: End par conjunction: 0x25203d0+19050423961: cap 1: End par conjunct: 0x2520370+19050424087: cap 1: End par conjunction: 0x2520370+19050424213: cap 1: End par conjunct: 0x2520310+19050424348: cap 1: End par conjunction: 0x2520310+19050424519: cap 1: End par conjunct: 0x25202b0+19050424645: cap 1: End par conjunction: 0x25202b0+19050424771: cap 1: End par conjunct: 0x2520250+19050424897: cap 1: End par conjunction: 0x2520250+19050425028: cap 1: End par conjunct: 0x25201f0+19050425154: cap 1: End par conjunction: 0x25201f0+19050425284: cap 1: End par conjunct: 0x2520190+19050425410: cap 1: End par conjunction: 0x2520190+19050425545: cap 1: End par conjunct: 0x2520130+19050425676: cap 1: End par conjunction: 0x2520130+19050425802: cap 1: End par conjunct: 0x25200d0+19050425928: cap 1: End par conjunction: 0x25200d0+19050426090: cap 1: End par conjunct: 0x2520070+19050426225: cap 1: End par conjunction: 0x2520070+19050426355: cap 1: End par conjunct: 0x2520010+19050426472: cap 1: End par conjunction: 0x2520010+19050426828: cap 1: End par conjunct: 0x251ffb0+19050427093: cap 1: End par conjunction: 0x251ffb0+19050427224: cap 1: End par conjunct: 0x251ff50+19050427458: cap 1: End par conjunction: 0x251ff50+19050427593: cap 1: End par conjunct: 0x251fef0+19050427719: cap 1: End par conjunction: 0x251fef0+19050427849: cap 1: End par conjunct: 0x251fe90+19050427980: cap 1: End par conjunction: 0x251fe90+19050428115: cap 1: End par conjunct: 0x251fe30+19050428241: cap 1: End par conjunction: 0x251fe30+19050428367: cap 1: End par conjunct: 0x251fdd0+19050428502: cap 1: End par conjunction: 0x251fdd0+19050428632: cap 1: End par conjunct: 0x251fd70+19050428763: cap 1: End par conjunction: 0x251fd70+19050428889: cap 1: End par conjunct: 0x251fd10+19050429024: cap 1: End par conjunction: 0x251fd10+19050429159: cap 1: End par conjunct: 0x251fcb0+19050429280: cap 1: End par conjunction: 0x251fcb0+19050429406: cap 1: End par conjunct: 0x251fc50+19050429537: cap 1: End par conjunction: 0x251fc50+19050429667: cap 1: End par conjunct: 0x251fbf0+19050429793: cap 1: End par conjunction: 0x251fbf0+19050429924: cap 1: End par conjunct: 0x251fb90+19050430050: cap 1: End par conjunction: 0x251fb90+19050430180: cap 1: End par conjunct: 0x251fb30+19050430311: cap 1: End par conjunction: 0x251fb30+19050430437: cap 1: End par conjunct: 0x251fad0+19050430563: cap 1: End par conjunction: 0x251fad0+19050430693: cap 1: End par conjunct: 0x251fa70+19050430824: cap 1: End par conjunction: 0x251fa70+19050430950: cap 1: End par conjunct: 0x251fa10+19050431076: cap 1: End par conjunction: 0x251fa10+19050431211: cap 1: End par conjunct: 0x251f9b0+19050431346: cap 1: End par conjunction: 0x251f9b0+19050431476: cap 1: End par conjunct: 0x251f950+19050431602: cap 1: End par conjunction: 0x251f950+19050431737: cap 1: End par conjunct: 0x251f8f0+19050431859: cap 1: End par conjunction: 0x251f8f0+19050431989: cap 1: End par conjunct: 0x251f890+19050432120: cap 1: End par conjunction: 0x251f890+19050432255: cap 1: End par conjunct: 0x251f830+19050432385: cap 1: End par conjunction: 0x251f830+19050432507: cap 1: End par conjunct: 0x251f7d0+19050432646: cap 1: End par conjunction: 0x251f7d0+19050432772: cap 1: End par conjunct: 0x251f770+19050432898: cap 1: End par conjunction: 0x251f770+19050433024: cap 1: End par conjunct: 0x251f710+19050433159: cap 1: End par conjunction: 0x251f710+19050433290: cap 1: End par conjunct: 0x251f6b0+19050433416: cap 1: End par conjunction: 0x251f6b0+19050433542: cap 1: End par conjunct: 0x251f650+19050433672: cap 1: End par conjunction: 0x251f650+19050433803: cap 1: End par conjunct: 0x251f5f0+19050433929: cap 1: End par conjunction: 0x251f5f0+19050434059: cap 1: End par conjunct: 0x251f590+19050434185: cap 1: End par conjunction: 0x251f590+19050434311: cap 1: End par conjunct: 0x251f530+19050434442: cap 1: End par conjunction: 0x251f530+19050434568: cap 1: End par conjunct: 0x251f4d0+19050434694: cap 1: End par conjunction: 0x251f4d0+19050434824: cap 1: End par conjunct: 0x251f470+19050434955: cap 1: End par conjunction: 0x251f470+19050435085: cap 1: End par conjunct: 0x251f410+19050435211: cap 1: End par conjunction: 0x251f410+19050435337: cap 1: End par conjunct: 0x251f3b0+19050435472: cap 1: End par conjunction: 0x251f3b0+19050435603: cap 1: End par conjunct: 0x251f350+19050435729: cap 1: End par conjunction: 0x251f350+19050435873: cap 1: End par conjunct: 0x251f2f0+19050435999: cap 1: End par conjunction: 0x251f2f0+19050436129: cap 1: End par conjunct: 0x251f290+19050436260: cap 1: End par conjunction: 0x251f290+19050436507: cap 1: End par conjunct: 0x251f230+19050436638: cap 1: End par conjunction: 0x251f230+19050436764: cap 1: End par conjunct: 0x251f1d0+19050437007: cap 1: End par conjunction: 0x251f1d0+19050437137: cap 1: End par conjunct: 0x251f170+19050437268: cap 1: End par conjunction: 0x251f170+19050437394: cap 1: End par conjunct: 0x251f110+19050437529: cap 1: End par conjunction: 0x251f110+19050437659: cap 1: End par conjunct: 0x251f0b0+19050437893: cap 1: End par conjunction: 0x251f0b0+19050438024: cap 1: End par conjunct: 0x251f050+19050438145: cap 1: End par conjunction: 0x251f050+19050438280: cap 1: End par conjunct: 0x251eff0+19050438519: cap 1: End par conjunction: 0x251eff0+19050438649: cap 1: End par conjunct: 0x251ef90+19050438780: cap 1: End par conjunction: 0x251ef90+19050438924: cap 1: End par conjunct: 0x251ef30+19050439054: cap 1: End par conjunction: 0x251ef30+19050443919: cap 1: End par conjunct: 0x251eed0+19050444036: cap 1: End par conjunction: 0x251eed0+19050444171: cap 1: End par conjunct: 0x251ee70+19050444306: cap 1: End par conjunction: 0x251ee70+19050444441: cap 1: End par conjunct: 0x251ee10+19050444562: cap 1: End par conjunction: 0x251ee10+19050444693: cap 1: End par conjunct: 0x251edb0+19050444828: cap 1: End par conjunction: 0x251edb0+19050444963: cap 1: End par conjunct: 0x251ed50+19050445089: cap 1: End par conjunction: 0x251ed50+19050445224: cap 1: End par conjunct: 0x251ecf0+19050445350: cap 1: End par conjunction: 0x251ecf0+19050445485: cap 1: End par conjunct: 0x251ec90+19050445611: cap 1: End par conjunction: 0x251ec90+19050445755: cap 1: End par conjunct: 0x251ec30+19050445881: cap 1: End par conjunction: 0x251ec30+19050446007: cap 1: End par conjunct: 0x251ebd0+19050446142: cap 1: End par conjunction: 0x251ebd0+19050446272: cap 1: End par conjunct: 0x251eb70+19050446403: cap 1: End par conjunction: 0x251eb70+19050446524: cap 1: End par conjunct: 0x251eb10+19050446659: cap 1: End par conjunction: 0x251eb10+19050446794: cap 1: End par conjunct: 0x251eab0+19050446916: cap 1: End par conjunction: 0x251eab0+19050447042: cap 1: End par conjunct: 0x251ea50+19050447172: cap 1: End par conjunction: 0x251ea50+19050447303: cap 1: End par conjunct: 0x251e9f0+19050447429: cap 1: End par conjunction: 0x251e9f0+19050447559: cap 1: End par conjunct: 0x251e990+19050447685: cap 1: End par conjunction: 0x251e990+19050447820: cap 1: End par conjunct: 0x251e930+19050447946: cap 1: End par conjunction: 0x251e930+19050448077: cap 1: End par conjunct: 0x251e8d0+19050448198: cap 1: End par conjunction: 0x251e8d0+19050448329: cap 1: End par conjunct: 0x251e870+19050448464: cap 1: End par conjunction: 0x251e870+19050448594: cap 1: End par conjunct: 0x251e810+19050448720: cap 1: End par conjunction: 0x251e810+19050448851: cap 1: End par conjunct: 0x251e7b0+19050448986: cap 1: End par conjunction: 0x251e7b0+19050449116: cap 1: End par conjunct: 0x251e750+19050449242: cap 1: End par conjunction: 0x251e750+19050449377: cap 1: End par conjunct: 0x251e6f0+19050449503: cap 1: End par conjunction: 0x251e6f0+19050449638: cap 1: End par conjunct: 0x251e690+19050449764: cap 1: End par conjunction: 0x251e690+19050449904: cap 1: End par conjunct: 0x251e630+19050450030: cap 1: End par conjunction: 0x251e630+19050450156: cap 1: End par conjunct: 0x251e5d0+19050450295: cap 1: End par conjunction: 0x251e5d0+19050450426: cap 1: End par conjunct: 0x251e570+19050450552: cap 1: End par conjunction: 0x251e570+19050450678: cap 1: End par conjunct: 0x251e510+19050450813: cap 1: End par conjunction: 0x251e510+19050450948: cap 1: End par conjunct: 0x251e4b0+19050451069: cap 1: End par conjunction: 0x251e4b0+19050451195: cap 1: End par conjunct: 0x251e450+19050451330: cap 1: End par conjunction: 0x251e450+19050451461: cap 1: End par conjunct: 0x251e3f0+19050451587: cap 1: End par conjunction: 0x251e3f0+19050451717: cap 1: End par conjunct: 0x251e390+19050451843: cap 1: End par conjunction: 0x251e390+19050451974: cap 1: End par conjunct: 0x251e330+19050452104: cap 1: End par conjunction: 0x251e330+19050452230: cap 1: End par conjunct: 0x251e2d0+19050452356: cap 1: End par conjunction: 0x251e2d0+19050452487: cap 1: End par conjunct: 0x251e270+19050452617: cap 1: End par conjunction: 0x251e270+19050452748: cap 1: End par conjunct: 0x251e210+19050452883: cap 1: End par conjunction: 0x251e210+19050453009: cap 1: End par conjunct: 0x251e1b0+19050453144: cap 1: End par conjunction: 0x251e1b0+19050453270: cap 1: End par conjunct: 0x251e150+19050453396: cap 1: End par conjunction: 0x251e150+19050453531: cap 1: End par conjunct: 0x251e0f0+19050453657: cap 1: End par conjunction: 0x251e0f0+19050453787: cap 1: End par conjunct: 0x251e090+19050453918: cap 1: End par conjunction: 0x251e090+19050454048: cap 1: End par conjunct: 0x251e030+19050454170: cap 1: End par conjunction: 0x251e030+19050454296: cap 1: End par conjunct: 0x251dfd0+19050454566: cap 1: End par conjunction: 0x251dfd0+19050454800: cap 1: End par conjunct: 0x251df70+19050455052: cap 1: End par conjunction: 0x251df70+19050455178: cap 1: End par conjunct: 0x251df10+19050455317: cap 1: End par conjunction: 0x251df10+19050455448: cap 1: End par conjunct: 0x251deb0+19050455574: cap 1: End par conjunction: 0x251deb0+19050455700: cap 1: End par conjunct: 0x251de50+19050455826: cap 1: End par conjunction: 0x251de50+19050455956: cap 1: End par conjunct: 0x251ddf0+19050456082: cap 1: End par conjunction: 0x251ddf0+19050456213: cap 1: End par conjunct: 0x251dd90+19050456339: cap 1: End par conjunction: 0x251dd90+19050456469: cap 1: End par conjunct: 0x251dd30+19050456600: cap 1: End par conjunction: 0x251dd30+19050456726: cap 1: End par conjunct: 0x251dcd0+19050456852: cap 1: End par conjunction: 0x251dcd0+19050456982: cap 1: End par conjunct: 0x251dc70+19050457117: cap 1: End par conjunction: 0x251dc70+19050457248: cap 1: End par conjunct: 0x251dc10+19050457374: cap 1: End par conjunction: 0x251dc10+19050457500: cap 1: End par conjunct: 0x251dbb0+19050457635: cap 1: End par conjunction: 0x251dbb0+19050457761: cap 1: End par conjunct: 0x251db50+19050457891: cap 1: End par conjunction: 0x251db50+19050458022: cap 1: End par conjunct: 0x251daf0+19050458148: cap 1: End par conjunction: 0x251daf0+19050458278: cap 1: End par conjunct: 0x251da90+19050458409: cap 1: End par conjunction: 0x251da90+19050458539: cap 1: End par conjunct: 0x251da30+19050458670: cap 1: End par conjunction: 0x251da30+19050458796: cap 1: End par conjunct: 0x251d9d0+19050458931: cap 1: End par conjunction: 0x251d9d0+19050459061: cap 1: End par conjunct: 0x251d970+19050459192: cap 1: End par conjunction: 0x251d970+19050459318: cap 1: End par conjunct: 0x251d910+19050459453: cap 1: End par conjunction: 0x251d910+19050459579: cap 1: End par conjunct: 0x251d8b0+19050459709: cap 1: End par conjunction: 0x251d8b0+19050459835: cap 1: End par conjunct: 0x251d850+19050459966: cap 1: End par conjunction: 0x251d850+19050460096: cap 1: End par conjunct: 0x251d7f0+19050460222: cap 1: End par conjunction: 0x251d7f0+19050460348: cap 1: End par conjunct: 0x251d790+19050460474: cap 1: End par conjunction: 0x251d790+19050460605: cap 1: End par conjunct: 0x251d730+19050460735: cap 1: End par conjunction: 0x251d730+19050460866: cap 1: End par conjunct: 0x251d6d0+19050460987: cap 1: End par conjunction: 0x251d6d0+19050461118: cap 1: End par conjunct: 0x251d670+19050461248: cap 1: End par conjunction: 0x251d670+19050461379: cap 1: End par conjunct: 0x251d610+19050461509: cap 1: End par conjunction: 0x251d610+19050461635: cap 1: End par conjunct: 0x251d5b0+19050461770: cap 1: End par conjunction: 0x251d5b0+19050461901: cap 1: End par conjunct: 0x251d550+19050462031: cap 1: End par conjunction: 0x251d550+19050462162: cap 1: End par conjunct: 0x251d4f0+19050462288: cap 1: End par conjunction: 0x251d4f0+19050462418: cap 1: End par conjunct: 0x251d490+19050462544: cap 1: End par conjunction: 0x251d490+19050462679: cap 1: End par conjunct: 0x251d430+19050462805: cap 1: End par conjunction: 0x251d430+19050462931: cap 1: End par conjunct: 0x251d3d0+19050463066: cap 1: End par conjunction: 0x251d3d0+19050463197: cap 1: End par conjunct: 0x251d370+19050463323: cap 1: End par conjunction: 0x251d370+19050463453: cap 1: End par conjunct: 0x251d310+19050463588: cap 1: End par conjunction: 0x251d310+19050463719: cap 1: End par conjunct: 0x251d2b0+19050463845: cap 1: End par conjunction: 0x251d2b0+19050463971: cap 1: End par conjunct: 0x251d250+19050464101: cap 1: End par conjunction: 0x251d250+19050464232: cap 1: End par conjunct: 0x251d1f0+19050464353: cap 1: End par conjunction: 0x251d1f0+19050464484: cap 1: End par conjunct: 0x251d190+19050464610: cap 1: End par conjunction: 0x251d190+19050464740: cap 1: End par conjunct: 0x251d130+19050464871: cap 1: End par conjunction: 0x251d130+19050465001: cap 1: End par conjunct: 0x251d0d0+19050465123: cap 1: End par conjunction: 0x251d0d0+19050465258: cap 1: End par conjunct: 0x251d070+19050465388: cap 1: End par conjunction: 0x251d070+19050465519: cap 1: End par conjunct: 0x251d010+19050465640: cap 1: End par conjunction: 0x251d010+19050465883: cap 1: End par conjunct: 0x251cfb0+19050466297: cap 1: End par conjunction: 0x251cfb0+19050466423: cap 1: End par conjunct: 0x251cf50+19050466648: cap 1: End par conjunction: 0x251cf50+19050466783: cap 1: End par conjunct: 0x251cef0+19050466909: cap 1: End par conjunction: 0x251cef0+19050467040: cap 1: End par conjunct: 0x251ce90+19050467170: cap 1: End par conjunction: 0x251ce90+19050467305: cap 1: End par conjunct: 0x251ce30+19050467431: cap 1: End par conjunction: 0x251ce30+19050467557: cap 1: End par conjunct: 0x251cdd0+19050467697: cap 1: End par conjunction: 0x251cdd0+19050467823: cap 1: End par conjunct: 0x251cd70+19050467953: cap 1: End par conjunction: 0x251cd70+19050468079: cap 1: End par conjunct: 0x251cd10+19050468214: cap 1: End par conjunction: 0x251cd10+19050468345: cap 1: End par conjunct: 0x251ccb0+19050468471: cap 1: End par conjunction: 0x251ccb0+19050468597: cap 1: End par conjunct: 0x251cc50+19050468727: cap 1: End par conjunction: 0x251cc50+19050468858: cap 1: End par conjunct: 0x251cbf0+19050468984: cap 1: End par conjunction: 0x251cbf0+19050469110: cap 1: End par conjunct: 0x251cb90+19050469236: cap 1: End par conjunction: 0x251cb90+19050469366: cap 1: End par conjunct: 0x251cb30+19050469497: cap 1: End par conjunction: 0x251cb30+19050469623: cap 1: End par conjunct: 0x251cad0+19050469749: cap 1: End par conjunction: 0x251cad0+19050469879: cap 1: End par conjunct: 0x251ca70+19050470014: cap 1: End par conjunction: 0x251ca70+19050470145: cap 1: End par conjunct: 0x251ca10+19050470266: cap 1: End par conjunction: 0x251ca10+19050470397: cap 1: End par conjunct: 0x251c9b0+19050470532: cap 1: End par conjunction: 0x251c9b0+19050470662: cap 1: End par conjunct: 0x251c950+19050470788: cap 1: End par conjunction: 0x251c950+19050470923: cap 1: End par conjunct: 0x251c8f0+19050471045: cap 1: End par conjunction: 0x251c8f0+19050471175: cap 1: End par conjunct: 0x251c890+19050471306: cap 1: End par conjunction: 0x251c890+19050471441: cap 1: End par conjunct: 0x251c830+19050471567: cap 1: End par conjunction: 0x251c830+19050471693: cap 1: End par conjunct: 0x251c7d0+19050471945: cap 1: End par conjunction: 0x251c7d0+19050472075: cap 1: End par conjunct: 0x251c770+19050472201: cap 1: End par conjunction: 0x251c770+19050472327: cap 1: End par conjunct: 0x251c710+19050472566: cap 1: End par conjunction: 0x251c710+19050472696: cap 1: End par conjunct: 0x251c6b0+19050472822: cap 1: End par conjunction: 0x251c6b0+19050472948: cap 1: End par conjunct: 0x251c650+19050473074: cap 1: End par conjunction: 0x251c650+19050473205: cap 1: End par conjunct: 0x251c5f0+19050473331: cap 1: End par conjunction: 0x251c5f0+19050473461: cap 1: End par conjunct: 0x251c590+19050473587: cap 1: End par conjunction: 0x251c590+19050473718: cap 1: End par conjunct: 0x251c530+19050473848: cap 1: End par conjunction: 0x251c530+19050473974: cap 1: End par conjunct: 0x251c4d0+19050474100: cap 1: End par conjunction: 0x251c4d0+19050474231: cap 1: End par conjunct: 0x251c470+19050474361: cap 1: End par conjunction: 0x251c470+19050474492: cap 1: End par conjunct: 0x251c410+19050474618: cap 1: End par conjunction: 0x251c410+19050474748: cap 1: End par conjunct: 0x251c3b0+19050474879: cap 1: End par conjunction: 0x251c3b0+19050475009: cap 1: End par conjunct: 0x251c350+19050475135: cap 1: End par conjunction: 0x251c350+19050475270: cap 1: End par conjunct: 0x251c2f0+19050475396: cap 1: End par conjunction: 0x251c2f0+19050475527: cap 1: End par conjunct: 0x251c290+19050475657: cap 1: End par conjunction: 0x251c290+19050475788: cap 1: End par conjunct: 0x251c230+19050475914: cap 1: End par conjunction: 0x251c230+19050476040: cap 1: End par conjunct: 0x251c1d0+19050476179: cap 1: End par conjunction: 0x251c1d0+19050476305: cap 1: End par conjunct: 0x251c170+19050476436: cap 1: End par conjunction: 0x251c170+19050476557: cap 1: End par conjunct: 0x251c110+19050476692: cap 1: End par conjunction: 0x251c110+19050476823: cap 1: End par conjunct: 0x251c0b0+19050477061: cap 1: End par conjunction: 0x251c0b0+19050477187: cap 1: End par conjunct: 0x251c050+19050477313: cap 1: End par conjunction: 0x251c050+19050477444: cap 1: End par conjunct: 0x251bff0+19050477678: cap 1: End par conjunction: 0x251bff0+19050477808: cap 1: End par conjunct: 0x251bf90+19050477934: cap 1: End par conjunction: 0x251bf90+19050478069: cap 1: End par conjunct: 0x251bf30+19050478200: cap 1: End par conjunction: 0x251bf30+19050478326: cap 1: End par conjunct: 0x251bed0+19050478452: cap 1: End par conjunction: 0x251bed0+19050478582: cap 1: End par conjunct: 0x251be70+19050478713: cap 1: End par conjunction: 0x251be70+19050478843: cap 1: End par conjunct: 0x251be10+19050478969: cap 1: End par conjunction: 0x251be10+19050479095: cap 1: End par conjunct: 0x251bdb0+19050479230: cap 1: End par conjunction: 0x251bdb0+19050479361: cap 1: End par conjunct: 0x251bd50+19050479487: cap 1: End par conjunction: 0x251bd50+19050479622: cap 1: End par conjunct: 0x251bcf0+19050479748: cap 1: End par conjunction: 0x251bcf0+19050479878: cap 1: End par conjunct: 0x251bc90+19050480009: cap 1: End par conjunction: 0x251bc90+19050480144: cap 1: End par conjunct: 0x251bc30+19050480270: cap 1: End par conjunction: 0x251bc30+19050480396: cap 1: End par conjunct: 0x251bbd0+19050480531: cap 1: End par conjunction: 0x251bbd0+19050480657: cap 1: End par conjunct: 0x251bb70+19050480783: cap 1: End par conjunction: 0x251bb70+19050480909: cap 1: End par conjunct: 0x251bb10+19050481048: cap 1: End par conjunction: 0x251bb10+19050481174: cap 1: End par conjunct: 0x251bab0+19050481300: cap 1: End par conjunction: 0x251bab0+19050481426: cap 1: End par conjunct: 0x251ba50+19050481557: cap 1: End par conjunction: 0x251ba50+19050481687: cap 1: End par conjunct: 0x251b9f0+19050481813: cap 1: End par conjunction: 0x251b9f0+19050481944: cap 1: End par conjunct: 0x251b990+19050482065: cap 1: End par conjunction: 0x251b990+19050482196: cap 1: End par conjunct: 0x251b930+19050482326: cap 1: End par conjunction: 0x251b930+19050482452: cap 1: End par conjunct: 0x251b8d0+19050482578: cap 1: End par conjunction: 0x251b8d0+19050482709: cap 1: End par conjunct: 0x251b870+19050482844: cap 1: End par conjunction: 0x251b870+19050482974: cap 1: End par conjunct: 0x251b810+19050483100: cap 1: End par conjunction: 0x251b810+19050483226: cap 1: End par conjunct: 0x251b7b0+19050483357: cap 1: End par conjunction: 0x251b7b0+19050483487: cap 1: End par conjunct: 0x251b750+19050483618: cap 1: End par conjunction: 0x251b750+19050483748: cap 1: End par conjunct: 0x251b6f0+19050483874: cap 1: End par conjunction: 0x251b6f0+19050484005: cap 1: End par conjunct: 0x251b690+19050484135: cap 1: End par conjunction: 0x251b690+19050484311: cap 1: End par conjunct: 0x251b630+19050484441: cap 1: End par conjunction: 0x251b630+19050484567: cap 1: End par conjunct: 0x251b5d0+19050484702: cap 1: End par conjunction: 0x251b5d0+19050484869: cap 1: End par conjunct: 0x251b570+19050484999: cap 1: End par conjunction: 0x251b570+19050485166: cap 1: End par conjunct: 0x251b510+19050485301: cap 1: End par conjunction: 0x251b510+19050485467: cap 1: End par conjunct: 0x251b4b0+19050485593: cap 1: End par conjunction: 0x251b4b0+19050485724: cap 1: End par conjunct: 0x251b450+19050485854: cap 1: End par conjunction: 0x251b450+19050485989: cap 1: End par conjunct: 0x251b3f0+19050486115: cap 1: End par conjunction: 0x251b3f0+19050486246: cap 1: End par conjunct: 0x251b390+19050486372: cap 1: End par conjunction: 0x251b390+19050486507: cap 1: End par conjunct: 0x251b330+19050486637: cap 1: End par conjunction: 0x251b330+19050486768: cap 1: End par conjunct: 0x251b2d0+19050486894: cap 1: End par conjunction: 0x251b2d0+19050487029: cap 1: End par conjunct: 0x251b270+19050487159: cap 1: End par conjunction: 0x251b270+19050487294: cap 1: End par conjunct: 0x251b210+19050487420: cap 1: End par conjunction: 0x251b210+19050487551: cap 1: End par conjunct: 0x251b1b0+19050487686: cap 1: End par conjunction: 0x251b1b0+19050487816: cap 1: End par conjunct: 0x251b150+19050487947: cap 1: End par conjunction: 0x251b150+19050488082: cap 1: End par conjunct: 0x251b0f0+19050488208: cap 1: End par conjunction: 0x251b0f0+19050488338: cap 1: End par conjunct: 0x251b090+19050488469: cap 1: End par conjunction: 0x251b090+19050488604: cap 1: End par conjunct: 0x251b030+19050488725: cap 1: End par conjunction: 0x251b030+19050488856: cap 1: End par conjunct: 0x251afd0+19050489112: cap 1: End par conjunction: 0x251afd0+19050489355: cap 1: End par conjunct: 0x251af70+19050489598: cap 1: End par conjunction: 0x251af70+19050489724: cap 1: End par conjunct: 0x251af10+19050489859: cap 1: End par conjunction: 0x251af10+19050489985: cap 1: End par conjunct: 0x251aeb0+19050490111: cap 1: End par conjunction: 0x251aeb0+19050490237: cap 1: End par conjunct: 0x251ae50+19050490368: cap 1: End par conjunction: 0x251ae50+19050490494: cap 1: End par conjunct: 0x251adf0+19050490620: cap 1: End par conjunction: 0x251adf0+19050490750: cap 1: End par conjunct: 0x251ad90+19050490876: cap 1: End par conjunction: 0x251ad90+19050491007: cap 1: End par conjunct: 0x251ad30+19050491133: cap 1: End par conjunction: 0x251ad30+19050491263: cap 1: End par conjunct: 0x251acd0+19050491389: cap 1: End par conjunction: 0x251acd0+19050491520: cap 1: End par conjunct: 0x251ac70+19050491650: cap 1: End par conjunction: 0x251ac70+19050491781: cap 1: End par conjunct: 0x251ac10+19050491907: cap 1: End par conjunction: 0x251ac10+19050492033: cap 1: End par conjunct: 0x251abb0+19050492163: cap 1: End par conjunction: 0x251abb0+19050492298: cap 1: End par conjunct: 0x251ab50+19050492424: cap 1: End par conjunction: 0x251ab50+19050492559: cap 1: End par conjunct: 0x251aaf0+19050492685: cap 1: End par conjunction: 0x251aaf0+19050492820: cap 1: End par conjunct: 0x251aa90+19050492951: cap 1: End par conjunction: 0x251aa90+19050493086: cap 1: End par conjunct: 0x251aa30+19050493216: cap 1: End par conjunction: 0x251aa30+19050493342: cap 1: End par conjunct: 0x251a9d0+19050493477: cap 1: End par conjunction: 0x251a9d0+19050493608: cap 1: End par conjunct: 0x251a970+19050493734: cap 1: End par conjunction: 0x251a970+19050493864: cap 1: End par conjunct: 0x251a910+19050493999: cap 1: End par conjunction: 0x251a910+19050494130: cap 1: End par conjunct: 0x251a8b0+19050494256: cap 1: End par conjunction: 0x251a8b0+19050494382: cap 1: End par conjunct: 0x251a850+19050494512: cap 1: End par conjunction: 0x251a850+19050494643: cap 1: End par conjunct: 0x251a7f0+19050494769: cap 1: End par conjunction: 0x251a7f0+19050494899: cap 1: End par conjunct: 0x251a790+19050495025: cap 1: End par conjunction: 0x251a790+19050495151: cap 1: End par conjunct: 0x251a730+19050495282: cap 1: End par conjunction: 0x251a730+19050495412: cap 1: End par conjunct: 0x251a6d0+19050495538: cap 1: End par conjunction: 0x251a6d0+19050495664: cap 1: End par conjunct: 0x251a670+19050495795: cap 1: End par conjunction: 0x251a670+19050495925: cap 1: End par conjunct: 0x251a610+19050496051: cap 1: End par conjunction: 0x251a610+19050496182: cap 1: End par conjunct: 0x251a5b0+19050496317: cap 1: End par conjunction: 0x251a5b0+19050496452: cap 1: End par conjunct: 0x251a550+19050496578: cap 1: End par conjunction: 0x251a550+19050496713: cap 1: End par conjunct: 0x251a4f0+19050496839: cap 1: End par conjunction: 0x251a4f0+19050496974: cap 1: End par conjunct: 0x251a490+19050497100: cap 1: End par conjunction: 0x251a490+19050497235: cap 1: End par conjunct: 0x251a430+19050497361: cap 1: End par conjunction: 0x251a430+19050497491: cap 1: End par conjunct: 0x251a3d0+19050497626: cap 1: End par conjunction: 0x251a3d0+19050497752: cap 1: End par conjunct: 0x251a370+19050497883: cap 1: End par conjunction: 0x251a370+19050498009: cap 1: End par conjunct: 0x251a310+19050498144: cap 1: End par conjunction: 0x251a310+19050498319: cap 1: End par conjunct: 0x251a2b0+19050498441: cap 1: End par conjunction: 0x251a2b0+19050498571: cap 1: End par conjunct: 0x251a250+19050498697: cap 1: End par conjunction: 0x251a250+19050498832: cap 1: End par conjunct: 0x251a1f0+19050498958: cap 1: End par conjunction: 0x251a1f0+19050499089: cap 1: End par conjunct: 0x251a190+19050499210: cap 1: End par conjunction: 0x251a190+19050499345: cap 1: End par conjunct: 0x251a130+19050499471: cap 1: End par conjunction: 0x251a130+19050499602: cap 1: End par conjunct: 0x251a0d0+19050499728: cap 1: End par conjunction: 0x251a0d0+19050499863: cap 1: End par conjunct: 0x251a070+19050499993: cap 1: End par conjunction: 0x251a070+19050500124: cap 1: End par conjunct: 0x251a010+19050500245: cap 1: End par conjunction: 0x251a010+19050500493: cap 1: End par conjunct: 0x2519fb0+19050500740: cap 1: End par conjunction: 0x2519fb0+19050500871: cap 1: End par conjunct: 0x2519f50+19050501078: cap 1: End par conjunction: 0x2519f50+19050501213: cap 1: End par conjunct: 0x2519ef0+19050501334: cap 1: End par conjunction: 0x2519ef0+19050501469: cap 1: End par conjunct: 0x2519e90+19050501595: cap 1: End par conjunction: 0x2519e90+19050501735: cap 1: End par conjunct: 0x2519e30+19050501865: cap 1: End par conjunction: 0x2519e30+19050501991: cap 1: End par conjunct: 0x2519dd0+19050502126: cap 1: End par conjunction: 0x2519dd0+19050502257: cap 1: End par conjunct: 0x2519d70+19050502383: cap 1: End par conjunction: 0x2519d70+19050502513: cap 1: End par conjunct: 0x2519d10+19050502752: cap 1: End par conjunction: 0x2519d10+19050502882: cap 1: End par conjunct: 0x2519cb0+19050503008: cap 1: End par conjunction: 0x2519cb0+19050503134: cap 1: End par conjunct: 0x2519c50+19050503368: cap 1: End par conjunction: 0x2519c50+19050503503: cap 1: End par conjunct: 0x2519bf0+19050503629: cap 1: End par conjunction: 0x2519bf0+19050503760: cap 1: End par conjunct: 0x2519b90+19050503881: cap 1: End par conjunction: 0x2519b90+19050504007: cap 1: End par conjunct: 0x2519b30+19050504138: cap 1: End par conjunction: 0x2519b30+19050504268: cap 1: End par conjunct: 0x2519ad0+19050504390: cap 1: End par conjunction: 0x2519ad0+19050504520: cap 1: End par conjunct: 0x2519a70+19050504651: cap 1: End par conjunction: 0x2519a70+19050504781: cap 1: End par conjunct: 0x2519a10+19050504907: cap 1: End par conjunction: 0x2519a10+19050505033: cap 1: End par conjunct: 0x25199b0+19050505168: cap 1: End par conjunction: 0x25199b0+19050505299: cap 1: End par conjunct: 0x2519950+19050505429: cap 1: End par conjunction: 0x2519950+19050505560: cap 1: End par conjunct: 0x25198f0+19050505686: cap 1: End par conjunction: 0x25198f0+19050505816: cap 1: End par conjunct: 0x2519890+19050505947: cap 1: End par conjunction: 0x2519890+19050506082: cap 1: End par conjunct: 0x2519830+19050506208: cap 1: End par conjunction: 0x2519830+19050506338: cap 1: End par conjunct: 0x25197d0+19050506469: cap 1: End par conjunction: 0x25197d0+19050506599: cap 1: End par conjunct: 0x2519770+19050506725: cap 1: End par conjunction: 0x2519770+19050506851: cap 1: End par conjunct: 0x2519710+19050506986: cap 1: End par conjunction: 0x2519710+19050507117: cap 1: End par conjunct: 0x25196b0+19050507238: cap 1: End par conjunction: 0x25196b0+19050507369: cap 1: End par conjunct: 0x2519650+19050507495: cap 1: End par conjunction: 0x2519650+19050507625: cap 1: End par conjunct: 0x25195f0+19050507751: cap 1: End par conjunction: 0x25195f0+19050507882: cap 1: End par conjunct: 0x2519590+19050508003: cap 1: End par conjunction: 0x2519590+19050508134: cap 1: End par conjunct: 0x2519530+19050508264: cap 1: End par conjunction: 0x2519530+19050508390: cap 1: End par conjunct: 0x25194d0+19050508516: cap 1: End par conjunction: 0x25194d0+19050508647: cap 1: End par conjunct: 0x2519470+19050508782: cap 1: End par conjunction: 0x2519470+19050508908: cap 1: End par conjunct: 0x2519410+19050509034: cap 1: End par conjunction: 0x2519410+19050509169: cap 1: End par conjunct: 0x25193b0+19050509299: cap 1: End par conjunction: 0x25193b0+19050509434: cap 1: End par conjunct: 0x2519350+19050509560: cap 1: End par conjunction: 0x2519350+19050509704: cap 1: End par conjunct: 0x25192f0+19050509830: cap 1: End par conjunction: 0x25192f0+19050509961: cap 1: End par conjunct: 0x2519290+19050510091: cap 1: End par conjunction: 0x2519290+19050510226: cap 1: End par conjunct: 0x2519230+19050510352: cap 1: End par conjunction: 0x2519230+19050510478: cap 1: End par conjunct: 0x25191d0+19050510613: cap 1: End par conjunction: 0x25191d0+19050510739: cap 1: End par conjunct: 0x2519170+19050510870: cap 1: End par conjunction: 0x2519170+19050510996: cap 1: End par conjunct: 0x2519110+19050511131: cap 1: End par conjunction: 0x2519110+19050511261: cap 1: End par conjunct: 0x25190b0+19050511495: cap 1: End par conjunction: 0x25190b0+19050511626: cap 1: End par conjunct: 0x2519050+19050511747: cap 1: End par conjunction: 0x2519050+19050511878: cap 1: End par conjunct: 0x2518ff0+19050512121: cap 1: End par conjunction: 0x2518ff0+19050512251: cap 1: End par conjunct: 0x2518f90+19050512382: cap 1: End par conjunction: 0x2518f90+19050512526: cap 1: End par conjunct: 0x2518f30+19050512652: cap 1: End par conjunction: 0x2518f30+19050517093: cap 1: End par conjunct: 0x2518ed0+19050517215: cap 1: End par conjunction: 0x2518ed0+19050517345: cap 1: End par conjunct: 0x2518e70+19050517485: cap 1: End par conjunction: 0x2518e70+19050517615: cap 1: End par conjunct: 0x2518e10+19050517741: cap 1: End par conjunction: 0x2518e10+19050517867: cap 1: End par conjunct: 0x2518db0+19050518002: cap 1: End par conjunction: 0x2518db0+19050518133: cap 1: End par conjunct: 0x2518d50+19050518259: cap 1: End par conjunction: 0x2518d50+19050518394: cap 1: End par conjunct: 0x2518cf0+19050518520: cap 1: End par conjunction: 0x2518cf0+19050518650: cap 1: End par conjunct: 0x2518c90+19050518781: cap 1: End par conjunction: 0x2518c90+19050518911: cap 1: End par conjunct: 0x2518c30+19050519037: cap 1: End par conjunction: 0x2518c30+19050519163: cap 1: End par conjunct: 0x2518bd0+19050519298: cap 1: End par conjunction: 0x2518bd0+19050519429: cap 1: End par conjunct: 0x2518b70+19050519559: cap 1: End par conjunction: 0x2518b70+19050519681: cap 1: End par conjunct: 0x2518b10+19050519816: cap 1: End par conjunction: 0x2518b10+19050519942: cap 1: End par conjunct: 0x2518ab0+19050520068: cap 1: End par conjunction: 0x2518ab0+19050520194: cap 1: End par conjunct: 0x2518a50+19050520324: cap 1: End par conjunction: 0x2518a50+19050520455: cap 1: End par conjunct: 0x25189f0+19050520581: cap 1: End par conjunction: 0x25189f0+19050520711: cap 1: End par conjunct: 0x2518990+19050520837: cap 1: End par conjunction: 0x2518990+19050520963: cap 1: End par conjunct: 0x2518930+19050521089: cap 1: End par conjunction: 0x2518930+19050521220: cap 1: End par conjunct: 0x25188d0+19050521341: cap 1: End par conjunction: 0x25188d0+19050521472: cap 1: End par conjunct: 0x2518870+19050521607: cap 1: End par conjunction: 0x2518870+19050521737: cap 1: End par conjunct: 0x2518810+19050521863: cap 1: End par conjunction: 0x2518810+19050521989: cap 1: End par conjunct: 0x25187b0+19050522124: cap 1: End par conjunction: 0x25187b0+19050522255: cap 1: End par conjunct: 0x2518750+19050522381: cap 1: End par conjunction: 0x2518750+19050522516: cap 1: End par conjunct: 0x25186f0+19050522642: cap 1: End par conjunction: 0x25186f0+19050522772: cap 1: End par conjunct: 0x2518690+19050522903: cap 1: End par conjunction: 0x2518690+19050523038: cap 1: End par conjunct: 0x2518630+19050523164: cap 1: End par conjunction: 0x2518630+19050523290: cap 1: End par conjunct: 0x25185d0+19050523429: cap 1: End par conjunction: 0x25185d0+19050523555: cap 1: End par conjunct: 0x2518570+19050523686: cap 1: End par conjunction: 0x2518570+19050523812: cap 1: End par conjunct: 0x2518510+19050523947: cap 1: End par conjunction: 0x2518510+19050524073: cap 1: End par conjunct: 0x25184b0+19050524199: cap 1: End par conjunction: 0x25184b0+19050524325: cap 1: End par conjunct: 0x2518450+19050524455: cap 1: End par conjunction: 0x2518450+19050524586: cap 1: End par conjunct: 0x25183f0+19050524712: cap 1: End par conjunction: 0x25183f0+19050524842: cap 1: End par conjunct: 0x2518390+19050524968: cap 1: End par conjunction: 0x2518390+19050525094: cap 1: End par conjunct: 0x2518330+19050525220: cap 1: End par conjunction: 0x2518330+19050525346: cap 1: End par conjunct: 0x25182d0+19050525472: cap 1: End par conjunction: 0x25182d0+19050525603: cap 1: End par conjunct: 0x2518270+19050525733: cap 1: End par conjunction: 0x2518270+19050525868: cap 1: End par conjunct: 0x2518210+19050525994: cap 1: End par conjunction: 0x2518210+19050526120: cap 1: End par conjunct: 0x25181b0+19050526255: cap 1: End par conjunction: 0x25181b0+19050526381: cap 1: End par conjunct: 0x2518150+19050526512: cap 1: End par conjunction: 0x2518150+19050526647: cap 1: End par conjunct: 0x25180f0+19050526773: cap 1: End par conjunction: 0x25180f0+19050526899: cap 1: End par conjunct: 0x2518090+19050527029: cap 1: End par conjunction: 0x2518090+19050527164: cap 1: End par conjunct: 0x2518030+19050527281: cap 1: End par conjunction: 0x2518030+19050527407: cap 1: End par conjunct: 0x2517fd0+19050527682: cap 1: End par conjunction: 0x2517fd0+19050527925: cap 1: End par conjunct: 0x2517f70+19050528172: cap 1: End par conjunction: 0x2517f70+19050528298: cap 1: End par conjunct: 0x2517f10+19050528433: cap 1: End par conjunction: 0x2517f10+19050528564: cap 1: End par conjunct: 0x2517eb0+19050528690: cap 1: End par conjunction: 0x2517eb0+19050528816: cap 1: End par conjunct: 0x2517e50+19050528942: cap 1: End par conjunction: 0x2517e50+19050529077: cap 1: End par conjunct: 0x2517df0+19050529203: cap 1: End par conjunction: 0x2517df0+19050529333: cap 1: End par conjunct: 0x2517d90+19050529459: cap 1: End par conjunction: 0x2517d90+19050529590: cap 1: End par conjunct: 0x2517d30+19050529720: cap 1: End par conjunction: 0x2517d30+19050529846: cap 1: End par conjunct: 0x2517cd0+19050529972: cap 1: End par conjunction: 0x2517cd0+19050530103: cap 1: End par conjunct: 0x2517c70+19050530238: cap 1: End par conjunction: 0x2517c70+19050530373: cap 1: End par conjunct: 0x2517c10+19050530494: cap 1: End par conjunction: 0x2517c10+19050530625: cap 1: End par conjunct: 0x2517bb0+19050530755: cap 1: End par conjunction: 0x2517bb0+19050530886: cap 1: End par conjunct: 0x2517b50+19050531016: cap 1: End par conjunction: 0x2517b50+19050531147: cap 1: End par conjunct: 0x2517af0+19050531273: cap 1: End par conjunction: 0x2517af0+19050531403: cap 1: End par conjunct: 0x2517a90+19050531534: cap 1: End par conjunction: 0x2517a90+19050531669: cap 1: End par conjunct: 0x2517a30+19050531795: cap 1: End par conjunction: 0x2517a30+19050531921: cap 1: End par conjunct: 0x25179d0+19050532060: cap 1: End par conjunction: 0x25179d0+19050532186: cap 1: End par conjunct: 0x2517970+19050532317: cap 1: End par conjunction: 0x2517970+19050532443: cap 1: End par conjunct: 0x2517910+19050532578: cap 1: End par conjunction: 0x2517910+19050532704: cap 1: End par conjunct: 0x25178b0+19050532830: cap 1: End par conjunction: 0x25178b0+19050532956: cap 1: End par conjunct: 0x2517850+19050533086: cap 1: End par conjunction: 0x2517850+19050533221: cap 1: End par conjunct: 0x25177f0+19050533343: cap 1: End par conjunction: 0x25177f0+19050533473: cap 1: End par conjunct: 0x2517790+19050533599: cap 1: End par conjunction: 0x2517790+19050533730: cap 1: End par conjunct: 0x2517730+19050533860: cap 1: End par conjunction: 0x2517730+19050533991: cap 1: End par conjunct: 0x25176d0+19050534117: cap 1: End par conjunction: 0x25176d0+19050534247: cap 1: End par conjunct: 0x2517670+19050534378: cap 1: End par conjunction: 0x2517670+19050534513: cap 1: End par conjunct: 0x2517610+19050534634: cap 1: End par conjunction: 0x2517610+19050534765: cap 1: End par conjunct: 0x25175b0+19050534900: cap 1: End par conjunction: 0x25175b0+19050535030: cap 1: End par conjunct: 0x2517550+19050535156: cap 1: End par conjunction: 0x2517550+19050535291: cap 1: End par conjunct: 0x25174f0+19050535417: cap 1: End par conjunction: 0x25174f0+19050535548: cap 1: End par conjunct: 0x2517490+19050535678: cap 1: End par conjunction: 0x2517490+19050535809: cap 1: End par conjunct: 0x2517430+19050535939: cap 1: End par conjunction: 0x2517430+19050536065: cap 1: End par conjunct: 0x25173d0+19050536200: cap 1: End par conjunction: 0x25173d0+19050536326: cap 1: End par conjunct: 0x2517370+19050536457: cap 1: End par conjunction: 0x2517370+19050536583: cap 1: End par conjunct: 0x2517310+19050536722: cap 1: End par conjunction: 0x2517310+19050536848: cap 1: End par conjunct: 0x25172b0+19050536974: cap 1: End par conjunction: 0x25172b0+19050537100: cap 1: End par conjunct: 0x2517250+19050537343: cap 1: End par conjunction: 0x2517250+19050537474: cap 1: End par conjunct: 0x25171f0+19050537600: cap 1: End par conjunction: 0x25171f0+19050537843: cap 1: End par conjunct: 0x2517190+19050537969: cap 1: End par conjunction: 0x2517190+19050538104: cap 1: End par conjunct: 0x2517130+19050538234: cap 1: End par conjunction: 0x2517130+19050538360: cap 1: End par conjunct: 0x25170d0+19050538486: cap 1: End par conjunction: 0x25170d0+19050538621: cap 1: End par conjunct: 0x2517070+19050538752: cap 1: End par conjunction: 0x2517070+19050538882: cap 1: End par conjunct: 0x2517010+19050539004: cap 1: End par conjunction: 0x2517010+19050539247: cap 1: End par conjunct: 0x2516fb0+19050539521: cap 1: End par conjunction: 0x2516fb0+19050539652: cap 1: End par conjunct: 0x2516f50+19050539859: cap 1: End par conjunction: 0x2516f50+19050539994: cap 1: End par conjunct: 0x2516ef0+19050540120: cap 1: End par conjunction: 0x2516ef0+19050540250: cap 1: End par conjunct: 0x2516e90+19050540381: cap 1: End par conjunction: 0x2516e90+19050540511: cap 1: End par conjunct: 0x2516e30+19050540642: cap 1: End par conjunction: 0x2516e30+19050540768: cap 1: End par conjunct: 0x2516dd0+19050540903: cap 1: End par conjunction: 0x2516dd0+19050541029: cap 1: End par conjunct: 0x2516d70+19050541159: cap 1: End par conjunction: 0x2516d70+19050541285: cap 1: End par conjunct: 0x2516d10+19050541420: cap 1: End par conjunction: 0x2516d10+19050541546: cap 1: End par conjunct: 0x2516cb0+19050541672: cap 1: End par conjunction: 0x2516cb0+19050541798: cap 1: End par conjunct: 0x2516c50+19050541929: cap 1: End par conjunction: 0x2516c50+19050542059: cap 1: End par conjunct: 0x2516bf0+19050542185: cap 1: End par conjunction: 0x2516bf0+19050542316: cap 1: End par conjunct: 0x2516b90+19050542442: cap 1: End par conjunction: 0x2516b90+19050542572: cap 1: End par conjunct: 0x2516b30+19050542703: cap 1: End par conjunction: 0x2516b30+19050542829: cap 1: End par conjunct: 0x2516ad0+19050542955: cap 1: End par conjunction: 0x2516ad0+19050543085: cap 1: End par conjunct: 0x2516a70+19050543216: cap 1: End par conjunction: 0x2516a70+19050543351: cap 1: End par conjunct: 0x2516a10+19050543472: cap 1: End par conjunction: 0x2516a10+19050543603: cap 1: End par conjunct: 0x25169b0+19050543738: cap 1: End par conjunction: 0x25169b0+19050543868: cap 1: End par conjunct: 0x2516950+19050543994: cap 1: End par conjunction: 0x2516950+19050544129: cap 1: End par conjunct: 0x25168f0+19050544251: cap 1: End par conjunction: 0x25168f0+19050544386: cap 1: End par conjunct: 0x2516890+19050544516: cap 1: End par conjunction: 0x2516890+19050544647: cap 1: End par conjunct: 0x2516830+19050544777: cap 1: End par conjunction: 0x2516830+19050544903: cap 1: End par conjunct: 0x25167d0+19050545038: cap 1: End par conjunction: 0x25167d0+19050545164: cap 1: End par conjunct: 0x2516770+19050545295: cap 1: End par conjunction: 0x2516770+19050545421: cap 1: End par conjunct: 0x2516710+19050545556: cap 1: End par conjunction: 0x2516710+19050545686: cap 1: End par conjunct: 0x25166b0+19050545812: cap 1: End par conjunction: 0x25166b0+19050545938: cap 1: End par conjunct: 0x2516650+19050546069: cap 1: End par conjunction: 0x2516650+19050546199: cap 1: End par conjunct: 0x25165f0+19050546321: cap 1: End par conjunction: 0x25165f0+19050546451: cap 1: End par conjunct: 0x2516590+19050546577: cap 1: End par conjunction: 0x2516590+19050546708: cap 1: End par conjunct: 0x2516530+19050546838: cap 1: End par conjunction: 0x2516530+19050546969: cap 1: End par conjunct: 0x25164d0+19050547090: cap 1: End par conjunction: 0x25164d0+19050547221: cap 1: End par conjunct: 0x2516470+19050547356: cap 1: End par conjunction: 0x2516470+19050547486: cap 1: End par conjunct: 0x2516410+19050547612: cap 1: End par conjunction: 0x2516410+19050547738: cap 1: End par conjunct: 0x25163b0+19050547873: cap 1: End par conjunction: 0x25163b0+19050548004: cap 1: End par conjunct: 0x2516350+19050548130: cap 1: End par conjunction: 0x2516350+19050548265: cap 1: End par conjunct: 0x25162f0+19050548391: cap 1: End par conjunction: 0x25162f0+19050548521: cap 1: End par conjunct: 0x2516290+19050548652: cap 1: End par conjunction: 0x2516290+19050548787: cap 1: End par conjunct: 0x2516230+19050548917: cap 1: End par conjunction: 0x2516230+19050549043: cap 1: End par conjunct: 0x25161d0+19050549178: cap 1: End par conjunction: 0x25161d0+19050549313: cap 1: End par conjunct: 0x2516170+19050549439: cap 1: End par conjunction: 0x2516170+19050549570: cap 1: End par conjunct: 0x2516110+19050549705: cap 1: End par conjunction: 0x2516110+19050549840: cap 1: End par conjunct: 0x25160b0+19050550074: cap 1: End par conjunction: 0x25160b0+19050550200: cap 1: End par conjunct: 0x2516050+19050550326: cap 1: End par conjunction: 0x2516050+19050550461: cap 1: End par conjunct: 0x2515ff0+19050550699: cap 1: End par conjunction: 0x2515ff0+19050550830: cap 1: End par conjunct: 0x2515f90+19050550956: cap 1: End par conjunction: 0x2515f90+19050551095: cap 1: End par conjunct: 0x2515f30+19050551226: cap 1: End par conjunction: 0x2515f30+19050551352: cap 1: End par conjunct: 0x2515ed0+19050551478: cap 1: End par conjunction: 0x2515ed0+19050551613: cap 1: End par conjunct: 0x2515e70+19050551743: cap 1: End par conjunction: 0x2515e70+19050551874: cap 1: End par conjunct: 0x2515e10+19050552000: cap 1: End par conjunction: 0x2515e10+19050552135: cap 1: End par conjunct: 0x2515db0+19050552270: cap 1: End par conjunction: 0x2515db0+19050552400: cap 1: End par conjunct: 0x2515d50+19050552526: cap 1: End par conjunction: 0x2515d50+19050552661: cap 1: End par conjunct: 0x2515cf0+19050552787: cap 1: End par conjunction: 0x2515cf0+19050552918: cap 1: End par conjunct: 0x2515c90+19050553048: cap 1: End par conjunction: 0x2515c90+19050553192: cap 1: End par conjunct: 0x2515c30+19050553323: cap 1: End par conjunction: 0x2515c30+19050553449: cap 1: End par conjunct: 0x2515bd0+19050553584: cap 1: End par conjunction: 0x2515bd0+19050553710: cap 1: End par conjunct: 0x2515b70+19050553840: cap 1: End par conjunction: 0x2515b70+19050553966: cap 1: End par conjunct: 0x2515b10+19050554106: cap 1: End par conjunction: 0x2515b10+19050554232: cap 1: End par conjunct: 0x2515ab0+19050554358: cap 1: End par conjunction: 0x2515ab0+19050554484: cap 1: End par conjunct: 0x2515a50+19050554610: cap 1: End par conjunction: 0x2515a50+19050554745: cap 1: End par conjunct: 0x25159f0+19050554866: cap 1: End par conjunction: 0x25159f0+19050554997: cap 1: End par conjunct: 0x2515990+19050555123: cap 1: End par conjunction: 0x2515990+19050555253: cap 1: End par conjunct: 0x2515930+19050555384: cap 1: End par conjunction: 0x2515930+19050555510: cap 1: End par conjunct: 0x25158d0+19050555636: cap 1: End par conjunction: 0x25158d0+19050555762: cap 1: End par conjunct: 0x2515870+19050555897: cap 1: End par conjunction: 0x2515870+19050556027: cap 1: End par conjunct: 0x2515810+19050556153: cap 1: End par conjunction: 0x2515810+19050556284: cap 1: End par conjunct: 0x25157b0+19050556414: cap 1: End par conjunction: 0x25157b0+19050556545: cap 1: End par conjunct: 0x2515750+19050556671: cap 1: End par conjunction: 0x2515750+19050556806: cap 1: End par conjunct: 0x25156f0+19050556932: cap 1: End par conjunction: 0x25156f0+19050557062: cap 1: End par conjunct: 0x2515690+19050557193: cap 1: End par conjunction: 0x2515690+19050557332: cap 1: End par conjunct: 0x2515630+19050557458: cap 1: End par conjunction: 0x2515630+19050557584: cap 1: End par conjunct: 0x25155d0+19050557719: cap 1: End par conjunction: 0x25155d0+19050557886: cap 1: End par conjunct: 0x2515570+19050558016: cap 1: End par conjunction: 0x2515570+19050558183: cap 1: End par conjunct: 0x2515510+19050558318: cap 1: End par conjunction: 0x2515510+19050558489: cap 1: End par conjunct: 0x25154b0+19050558615: cap 1: End par conjunction: 0x25154b0+19050558745: cap 1: End par conjunct: 0x2515450+19050558876: cap 1: End par conjunction: 0x2515450+19050559011: cap 1: End par conjunct: 0x25153f0+19050559137: cap 1: End par conjunction: 0x25153f0+19050559267: cap 1: End par conjunct: 0x2515390+19050559393: cap 1: End par conjunction: 0x2515390+19050559524: cap 1: End par conjunct: 0x2515330+19050559650: cap 1: End par conjunction: 0x2515330+19050559785: cap 1: End par conjunct: 0x25152d0+19050559911: cap 1: End par conjunction: 0x25152d0+19050560041: cap 1: End par conjunct: 0x2515270+19050560176: cap 1: End par conjunction: 0x2515270+19050560307: cap 1: End par conjunct: 0x2515210+19050560433: cap 1: End par conjunction: 0x2515210+19050560563: cap 1: End par conjunct: 0x25151b0+19050560698: cap 1: End par conjunction: 0x25151b0+19050560829: cap 1: End par conjunct: 0x2515150+19050560959: cap 1: End par conjunction: 0x2515150+19242613692: cap 1: stopping thread 1 (thread yielding)+19242620163: cap 1: thread 1 is runnable+19242629086: cap 1: Looking for global thread to resume+19242629793: cap 1: Trying to steal a spark+19242642051: cap 0: running thread 1+19242646272: cap 0: stopping thread 1 (thread finished)+19242695434: cap 2: Releasing thread 2 to the free pool+19242695605: removed cap 1 from capset 0+19242696145: cap 1: shutting down+19242697063: removed cap 2 from capset 0+19242697405: cap 2: shutting down+19242699354: cap 3: Releasing thread 3 to the free pool+19242701365: removed cap 3 from capset 0+19242701919: cap 3: shutting down+19242931954: removed cap 0 from capset 0+19242932310: cap 0: shutting down+19243048770: deleted capset 0+
− test/mdlLogMPI1.eventlog

binary file changed (67530 → absent bytes)

+ test/parallelTest.eventlog view

binary file changed (absent → 10590 bytes)

+ test/parallelTest.eventlog.reference view
@@ -0,0 +1,486 @@+Event Types:+0: Create thread (size 4)+1: Run thread (size 4)+2: Stop thread (size 10)+3: Thread runnable (size 4)+4: Migrate thread (size 6)+8: Wakeup thread (size 6)+9: Starting GC (size 0)+10: Finished GC (size 0)+11: Request sequential GC (size 0)+12: Request parallel GC (size 0)+15: Create spark thread (size 4)+16: Log message (size variable)+17: Create capabilities (size 2)+18: Block marker (size 14)+19: User message (size variable)+20: GC idle (size 0)+21: GC working (size 0)+22: GC done (size 0)+23: Version (size variable)+24: Program invocation (size variable)+25: Create capability set (size 6)+26: Delete capability set (size 4)+27: Add capability to capability set (size 6)+28: Remove capability from capability set (size 6)+29: RTS name and version (size variable)+30: Program arguments (size variable)+31: Program environment variables (size variable)+32: Process ID (size 8)+33: Parent process ID (size 8)+34: Spark counters (size 56)+35: Spark create (size 0)+36: Spark dud (size 0)+37: Spark overflow (size 0)+38: Spark run (size 0)+39: Spark steal (size 2)+40: Spark fizzle (size 0)+41: Spark GC (size 0)+43: Wall clock time (size 16)+44: Thread label (size variable)+45: Create capability (size 2)+46: Delete capability (size 2)+47: Disable capability (size 2)+48: Enable capability (size 2)+49: Total heap mem ever allocated (size 12)+50: Current heap size (size 12)+51: Current heap live data (size 12)+52: Heap static parameters (size 38)+53: GC statistics (size 50)+54: Synchronise stop-the-world GC (size 0)+55: Task create (size 18)+56: Task migrate (size 12)+57: Task delete (size 8)+58: User marker (size variable)+59: Empty event for bug #9003 (size 0)+60: Starting message receival (size 0)+61: Finished message receival (size 0)+62: Creating Process (size 4)+63: Killing Process (size 4)+64: Assigning thread to process (size 8)+65: Creating machine (size 10)+66: Killing machine (size 2)+67: Sending message (size 19)+68: Receiving message (size 23)+69: Sending/Receiving local message (size 17)++Events:+965: creating machine 2 at 143714457434916300+1016690453: startup: 1 capabilities+1016695409: compiler version is 7.10.20150612+1016698802: program invocation: /opt/Eden/test/./jost=ChainDep 2 3 +RTS -l -RTS+1016705678: created capset 0 of type CapsetOsProcess+1016705969: created capset 1 of type CapsetClockDomain+1016707377: created cap 0+1016707532: assigned cap 0 to capset 0+1016707657: assigned cap 0 to capset 1+1016711376: capset 1: wall clock time 1437144575s 365872000ns (unix epoch)+1016714262: capset 0: pid 5847+1016717224: capset 0: parent pid 5845+1016723343: capset 0: RTS version "GHC-7.10.20150612 rts_l_pm"+1016724280: capset 0: args: ["/opt/Eden/test/./jost=ChainDep","3","+RTS","-l","-RTS"]+1016728194: capset 0: env: ["OMPI_MCA_orte_precondition_transports=4d4d233a0e00747c-c08b0d7505a2985d","PVM_RSH=/usr/bin/ssh","LS_COLORS=","PVM_ROOT=/usr/lib/pvm3","PVM_ARCH=LINUX64","PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/.cabal/bin","_=./ChainDep","PWD=/opt/Eden/test","SHLVL=1","PVM_EXPORT=DISPLAY","LESSOPEN=| /usr/bin/lesspipe %s","LESSCLOSE=/usr/bin/lesspipe %s %s","OMPI_MCA_orte_local_daemon_uri=1755316224.0;tcp://192.168.1.15:60361","OMPI_MCA_orte_hnp_uri=1755316224.0;tcp://192.168.1.15:60361","OMPI_MCA_mpi_yield_when_idle=0","OMPI_MCA_orte_app_num=0","OMPI_UNIVERSE_SIZE=1","OMPI_MCA_ess=env","OMPI_MCA_orte_ess_num_procs=2","OMPI_COMM_WORLD_SIZE=2","OMPI_COMM_WORLD_LOCAL_SIZE=2","OMPI_MCA_orte_ess_jobid=1755316225","OMPI_MCA_orte_ess_vpid=1","OMPI_COMM_WORLD_RANK=1","OMPI_COMM_WORLD_LOCAL_RANK=1","OMPI_MCA_opal_cr_is_tool=0","OPAL_OUTPUT_STDERR_FD=22"]+1016844227: heap stats for heap capset 0: generations 2, 0 bytes max heap size, 524288 bytes alloc area size, 1048576 bytes mblock size, 4096 bytes block size+1016949065: task 0x1c42f50 created on cap 0 with OS kernel thread 5847+1020647546: cap 0: starting to receive+1020647784: cap 0: receiving message with tag RFork at process 0, inport 0 from machine 1, process 1, thread 0 with size 19+1020663383: cap 0: creating thread 1+1020666580: creating process 1+1020666681: cap 0: assigning thread 1 to process 1+1020669258: cap 0: stop receiving+1020670948: cap 0: running thread 1+1020683435: newInport (1,1), blackhole 0x7f31e7e05480++1020684432: connectTSO 1 to inport (1,1,2)++1020708793: sending message with tag DataMes from process 1, thread 1 to machine 1, process 1 on inport 2+1020710401: connectTSO 1 to inport (1,1,1)++1020962248: sending message with tag Connect from process 1, thread 1 to machine 1, process 1 on inport 1+1020975009: cap 0: stopping thread 1 (blocked on black hole owned by thread 23150672)+1020993377: cap 0: starting to receive+1020994887: cap 0: stop receiving+1021163829: cap 0: starting to receive+1021172134: cap 0: receiving message with tag Head at process 1, inport 1 from machine 1, process 1, thread 2 with size 3+1021172996: cap 0: waking up thread 1 on cap 0+1021174214: cap 0: stop receiving+1021174870: cap 0: running thread 1+1022012154: cap 0: stopping thread 1 (heap overflow)+1022025732: cap 0: starting GC+1022030836: cap 0: GC working+1022048807: cap 0: GC idle+1022049006: cap 0: GC done+1022049708: cap 0: GC idle+1022049746: cap 0: GC done+1022052664: cap 0: all caps stopped for GC+1022052988: cap 0: GC stats for heap capset 0: generation 0, 1480 bytes copied, 6712 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1022053665: cap 0: finished GC+1022054054: cap 0: allocated on heap capset 0: 521488 total bytes till now+1022054251: cap 0: size of heap capset 0: 1048576 bytes+1022066437: cap 0: running thread 1+1022575820: cap 0: stopping thread 1 (heap overflow)+1022576987: cap 0: starting GC+1022578110: cap 0: GC working+1022586192: cap 0: GC idle+1022586253: cap 0: GC done+1022586485: cap 0: GC idle+1022586523: cap 0: GC done+1022587366: cap 0: all caps stopped for GC+1022587476: cap 0: GC stats for heap capset 0: generation 0, 1456 bytes copied, 6744 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1022587977: cap 0: finished GC+1022588072: cap 0: allocated on heap capset 0: 1045776 total bytes till now+1022588192: cap 0: size of heap capset 0: 1048576 bytes+1022595448: cap 0: starting to receive+1022602936: cap 0: receiving message with tag Head at process 1, inport 1 from machine 1, process 1, thread 2 with size 3+1022609437: cap 0: receiving message with tag Head at process 1, inport 1 from machine 1, process 1, thread 2 with size 3+1022613717: cap 0: receiving message with tag DataMes at process 1, inport 1 from machine 1, process 1, thread 2 with size 2+1022614602: cap 0: stop receiving+1022614857: cap 0: running thread 1+1023116425: cap 0: stopping thread 1 (heap overflow)+1023117800: cap 0: starting GC+1023118851: cap 0: GC working+1023124706: cap 0: GC idle+1023124774: cap 0: GC done+1023125008: cap 0: GC idle+1023125046: cap 0: GC done+1023125927: cap 0: all caps stopped for GC+1023126023: cap 0: GC stats for heap capset 0: generation 0, 472 bytes copied, 6600 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1023126483: cap 0: finished GC+1023126593: cap 0: allocated on heap capset 0: 1566080 total bytes till now+1023126699: cap 0: size of heap capset 0: 1048576 bytes+1023128987: cap 0: running thread 1+1023633921: cap 0: stopping thread 1 (heap overflow)+1023634943: cap 0: starting GC+1023635776: cap 0: GC working+1023637901: cap 0: GC idle+1023637951: cap 0: GC done+1023638120: cap 0: GC idle+1023638155: cap 0: GC done+1023638882: cap 0: all caps stopped for GC+1023638997: cap 0: GC stats for heap capset 0: generation 0, 280 bytes copied, 6520 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1023639342: cap 0: finished GC+1023639418: cap 0: allocated on heap capset 0: 2090368 total bytes till now+1023639494: cap 0: size of heap capset 0: 1048576 bytes+1023641473: cap 0: running thread 1+1024152336: cap 0: stopping thread 1 (heap overflow)+1024153886: cap 0: starting GC+1024154864: cap 0: GC working+1024156939: cap 0: GC idle+1024156990: cap 0: GC done+1024157152: cap 0: GC idle+1024157190: cap 0: GC done+1024157995: cap 0: all caps stopped for GC+1024158092: cap 0: GC stats for heap capset 0: generation 0, 136 bytes copied, 6664 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1024158481: cap 0: finished GC+1024158576: cap 0: allocated on heap capset 0: 2614656 total bytes till now+1024158663: cap 0: size of heap capset 0: 1048576 bytes+1024161612: cap 0: running thread 1+1024464591: sending message with tag Head from process 1, thread 1 to machine 1, process 1 on inport 1+1024852218: cap 0: stopping thread 1 (heap overflow)+1024854903: cap 0: starting GC+1024857481: cap 0: GC working+1024862179: cap 0: GC idle+1024862248: cap 0: GC done+1024862554: cap 0: GC idle+1024862592: cap 0: GC done+1024864137: cap 0: all caps stopped for GC+1024864234: cap 0: GC stats for heap capset 0: generation 0, 560 bytes copied, 6232 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1024864706: cap 0: finished GC+1024864813: cap 0: allocated on heap capset 0: 3138904 total bytes till now+1024864896: cap 0: size of heap capset 0: 1048576 bytes+1024869616: cap 0: running thread 1+1025413849: cap 0: stopping thread 1 (heap overflow)+1025419839: cap 0: starting GC+1025423868: cap 0: GC working+1025434468: cap 0: GC idle+1025434719: cap 0: GC done+1025435429: cap 0: GC idle+1025435464: cap 0: GC done+1025438379: cap 0: all caps stopped for GC+1025438777: cap 0: GC stats for heap capset 0: generation 0, 480 bytes copied, 6232 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1025439537: cap 0: finished GC+1025439779: cap 0: allocated on heap capset 0: 3663192 total bytes till now+1025440120: cap 0: size of heap capset 0: 1048576 bytes+1025452968: cap 0: running thread 1+1025986039: cap 0: stopping thread 1 (heap overflow)+1025989762: cap 0: starting GC+1025992473: cap 0: GC working+1025997294: cap 0: GC idle+1025997478: cap 0: GC done+1025997720: cap 0: GC idle+1025997758: cap 0: GC done+1025999740: cap 0: all caps stopped for GC+1025999955: cap 0: GC stats for heap capset 0: generation 0, 360 bytes copied, 6280 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1026000391: cap 0: finished GC+1026000526: cap 0: allocated on heap capset 0: 4187480 total bytes till now+1026000731: cap 0: size of heap capset 0: 1048576 bytes+1026005493: cap 0: running thread 1+1026513329: cap 0: stopping thread 1 (heap overflow)+1026514156: cap 0: starting GC+1026514839: cap 0: GC working+1026517258: cap 0: GC idle+1026517307: cap 0: GC done+1026517436: cap 0: GC idle+1026517475: cap 0: GC done+1026518137: cap 0: all caps stopped for GC+1026518269: cap 0: GC stats for heap capset 0: generation 0, 392 bytes copied, 6248 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1026518711: cap 0: finished GC+1026518810: cap 0: allocated on heap capset 0: 4711768 total bytes till now+1026518879: cap 0: size of heap capset 0: 1048576 bytes+1026520905: cap 0: running thread 1+1026931676: cap 0: stopping thread 1 (thread yielding)+1026933719: cap 0: running thread 1+1027040442: cap 0: stopping thread 1 (heap overflow)+1027041487: cap 0: starting GC+1027042520: cap 0: GC working+1027044626: cap 0: GC idle+1027044691: cap 0: GC done+1027044855: cap 0: GC idle+1027044893: cap 0: GC done+1027045602: cap 0: all caps stopped for GC+1027045688: cap 0: GC stats for heap capset 0: generation 0, 248 bytes copied, 6216 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1027046008: cap 0: finished GC+1027046103: cap 0: allocated on heap capset 0: 5236056 total bytes till now+1027046178: cap 0: size of heap capset 0: 1048576 bytes+1027047842: cap 0: running thread 1+1027483007: sending message with tag Head from process 1, thread 1 to machine 1, process 1 on inport 1+1027763758: cap 0: stopping thread 1 (heap overflow)+1027769019: cap 0: starting GC+1027773245: cap 0: GC working+1027781276: cap 0: GC idle+1027781516: cap 0: GC done+1027782027: cap 0: GC idle+1027782066: cap 0: GC done+1027784390: cap 0: all caps stopped for GC+1027784681: cap 0: GC stats for heap capset 0: generation 0, 512 bytes copied, 5944 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1027785214: cap 0: finished GC+1027785374: cap 0: allocated on heap capset 0: 5760320 total bytes till now+1027785678: cap 0: size of heap capset 0: 1048576 bytes+1027796652: cap 0: running thread 1+1028333218: cap 0: stopping thread 1 (heap overflow)+1028335233: cap 0: starting GC+1028336726: cap 0: GC working+1028340251: cap 0: GC idle+1028340304: cap 0: GC done+1028340475: cap 0: GC idle+1028340513: cap 0: GC done+1028341397: cap 0: all caps stopped for GC+1028341525: cap 0: GC stats for heap capset 0: generation 0, 512 bytes copied, 5864 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1028341944: cap 0: finished GC+1028342058: cap 0: allocated on heap capset 0: 6284608 total bytes till now+1028342308: cap 0: size of heap capset 0: 1048576 bytes+1028350725: cap 0: starting to receive+1028350956: cap 0: receiving message with tag RFork at process 0, inport 0 from machine 1, process 1, thread 0 with size 25+1028358936: cap 0: creating thread 2+1028359404: creating process 2+1028359479: cap 0: assigning thread 2 to process 2+1028360778: cap 0: stop receiving+1028360951: cap 0: running thread 1+1028864269: cap 0: stopping thread 1 (heap overflow)+1028865693: cap 0: starting GC+1028866580: cap 0: GC working+1028870748: cap 0: GC idle+1028870809: cap 0: GC done+1028871018: cap 0: GC idle+1028871056: cap 0: GC done+1028871958: cap 0: all caps stopped for GC+1028872081: cap 0: GC stats for heap capset 0: generation 0, 1592 bytes copied, 4720 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1028872522: cap 0: finished GC+1028872634: cap 0: allocated on heap capset 0: 6806008 total bytes till now+1028872709: cap 0: size of heap capset 0: 1048576 bytes+1028874869: cap 0: running thread 1+1029415791: cap 0: stopping thread 1 (heap overflow)+1029417389: cap 0: starting GC+1029418482: cap 0: GC working+1029421856: cap 0: GC idle+1029421921: cap 0: GC done+1029422125: cap 0: GC idle+1029422160: cap 0: GC done+1029423011: cap 0: all caps stopped for GC+1029423108: cap 0: GC stats for heap capset 0: generation 0, 1616 bytes copied, 4688 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1029423490: cap 0: finished GC+1029423582: cap 0: allocated on heap capset 0: 7330296 total bytes till now+1029423662: cap 0: size of heap capset 0: 1048576 bytes+1029426498: cap 0: running thread 1+1029932465: cap 0: stopping thread 1 (heap overflow)+1029933669: cap 0: starting GC+1029934360: cap 0: GC working+1029936519: cap 0: GC idle+1029936578: cap 0: GC done+1029936734: cap 0: GC idle+1029936769: cap 0: GC done+1029937451: cap 0: all caps stopped for GC+1029937521: cap 0: GC stats for heap capset 0: generation 0, 232 bytes copied, 4688 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1029937840: cap 0: finished GC+1029937912: cap 0: allocated on heap capset 0: 7854584 total bytes till now+1029937990: cap 0: size of heap capset 0: 1048576 bytes+1029940102: cap 0: running thread 1+1030446353: cap 0: stopping thread 1 (heap overflow)+1030447423: cap 0: starting GC+1030448338: cap 0: GC working+1030451144: cap 0: GC idle+1030451207: cap 0: GC done+1030451353: cap 0: GC idle+1030451391: cap 0: GC done+1030452094: cap 0: all caps stopped for GC+1030452173: cap 0: GC stats for heap capset 0: generation 0, 512 bytes copied, 4424 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1030452510: cap 0: finished GC+1030452575: cap 0: allocated on heap capset 0: 8378872 total bytes till now+1030452655: cap 0: size of heap capset 0: 1048576 bytes+1030454804: cap 0: running thread 1+1030959861: cap 0: stopping thread 1 (heap overflow)+1030960823: cap 0: starting GC+1030961580: cap 0: GC working+1030964127: cap 0: GC idle+1030964190: cap 0: GC done+1030964326: cap 0: GC idle+1030964361: cap 0: GC done+1030965010: cap 0: all caps stopped for GC+1030965088: cap 0: GC stats for heap capset 0: generation 0, 304 bytes copied, 4424 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1030965388: cap 0: finished GC+1030965451: cap 0: allocated on heap capset 0: 8903160 total bytes till now+1030965534: cap 0: size of heap capset 0: 1048576 bytes+1030967635: cap 0: running thread 1+1031473544: cap 0: stopping thread 1 (heap overflow)+1031474484: cap 0: starting GC+1031475231: cap 0: GC working+1031477254: cap 0: GC idle+1031477319: cap 0: GC done+1031477452: cap 0: GC idle+1031477486: cap 0: GC done+1031478125: cap 0: all caps stopped for GC+1031478197: cap 0: GC stats for heap capset 0: generation 0, 232 bytes copied, 4376 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1031478483: cap 0: finished GC+1031478547: cap 0: allocated on heap capset 0: 9427448 total bytes till now+1031478625: cap 0: size of heap capset 0: 1048576 bytes+1031480638: cap 0: running thread 1+1031985699: cap 0: stopping thread 1 (heap overflow)+1031986577: cap 0: starting GC+1031987317: cap 0: GC working+1031989096: cap 0: GC idle+1031989161: cap 0: GC done+1031989311: cap 0: GC idle+1031989346: cap 0: GC done+1031989979: cap 0: all caps stopped for GC+1031990053: cap 0: GC stats for heap capset 0: generation 0, 216 bytes copied, 4376 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1031990336: cap 0: finished GC+1031990414: cap 0: allocated on heap capset 0: 9951736 total bytes till now+1031990487: cap 0: size of heap capset 0: 1048576 bytes+1031992533: cap 0: running thread 1+1032497771: cap 0: stopping thread 1 (heap overflow)+1032498682: cap 0: starting GC+1032499444: cap 0: GC working+1032501257: cap 0: GC idle+1032501318: cap 0: GC done+1032501467: cap 0: GC idle+1032501504: cap 0: GC done+1032502155: cap 0: all caps stopped for GC+1032502226: cap 0: GC stats for heap capset 0: generation 0, 280 bytes copied, 4312 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1032502511: cap 0: finished GC+1032502576: cap 0: allocated on heap capset 0: 10476024 total bytes till now+1032502651: cap 0: size of heap capset 0: 1048576 bytes+1032504831: cap 0: running thread 1+1033009500: cap 0: stopping thread 1 (heap overflow)+1033010352: cap 0: starting GC+1033011123: cap 0: GC working+1033012730: cap 0: GC idle+1033012795: cap 0: GC done+1033012948: cap 0: GC idle+1033012986: cap 0: GC done+1033013636: cap 0: all caps stopped for GC+1033013692: cap 0: GC stats for heap capset 0: generation 0, 104 bytes copied, 4456 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1033013968: cap 0: finished GC+1033014042: cap 0: allocated on heap capset 0: 11000312 total bytes till now+1033014118: cap 0: size of heap capset 0: 1048576 bytes+1033016153: cap 0: running thread 1+1033526211: cap 0: stopping thread 1 (heap overflow)+1033527354: cap 0: starting GC+1033528248: cap 0: GC working+1033530168: cap 0: GC idle+1033530231: cap 0: GC done+1033530379: cap 0: GC idle+1033530413: cap 0: GC done+1033531144: cap 0: all caps stopped for GC+1033531265: cap 0: GC stats for heap capset 0: generation 0, 232 bytes copied, 4328 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1033531601: cap 0: finished GC+1033531682: cap 0: allocated on heap capset 0: 11524600 total bytes till now+1033531756: cap 0: size of heap capset 0: 1048576 bytes+1033533890: cap 0: running thread 1+1034038618: cap 0: stopping thread 1 (heap overflow)+1034039555: cap 0: starting GC+1034040289: cap 0: GC working+1034042130: cap 0: GC idle+1034042192: cap 0: GC done+1034042316: cap 0: GC idle+1034042354: cap 0: GC done+1034042958: cap 0: all caps stopped for GC+1034043017: cap 0: GC stats for heap capset 0: generation 0, 200 bytes copied, 4328 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1034043283: cap 0: finished GC+1034043353: cap 0: allocated on heap capset 0: 12048888 total bytes till now+1034043413: cap 0: size of heap capset 0: 1048576 bytes+1034045429: cap 0: running thread 1+1034550158: cap 0: stopping thread 1 (heap overflow)+1034551080: cap 0: starting GC+1034551812: cap 0: GC working+1034553684: cap 0: GC idle+1034553747: cap 0: GC done+1034553877: cap 0: GC idle+1034553916: cap 0: GC done+1034554536: cap 0: all caps stopped for GC+1034554595: cap 0: GC stats for heap capset 0: generation 0, 232 bytes copied, 4296 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1034554874: cap 0: finished GC+1034554955: cap 0: allocated on heap capset 0: 12573176 total bytes till now+1034555014: cap 0: size of heap capset 0: 1048576 bytes+1034557010: cap 0: running thread 1+1034856882: sending message with tag Head from process 1, thread 1 to machine 1, process 1 on inport 1+1035138473: sending message with tag DataMes from process 1, thread 1 to machine 1, process 1 on inport 1+1035141040: cap 0: stopping thread 1 (thread finished)+1035144862: killing process 1+1035157481: cap 0: running thread 2+1035171358: newInport (2,2), blackhole 0x7f31e7e20000++1035172381: connectTSO 2 to inport (1,1,7)++1035368512: sending message with tag DataMes from process 2, thread 2 to machine 1, process 1 on inport 7+1035370635: connectTSO 2 to inport (1,1,6)++1035646908: sending message with tag Connect from process 2, thread 2 to machine 1, process 1 on inport 6+1035651909: cap 0: stopping thread 2 (blocked on black hole owned by thread 23150672)+1035668968: cap 0: starting to receive+1035670418: cap 0: stop receiving+1035832495: cap 0: starting to receive+1035837859: cap 0: receiving message with tag DataMes at process 2, inport 2 from machine 1, process 1, thread 5 with size 2+1035838974: cap 0: waking up thread 2 on cap 0+1035839922: cap 0: stop receiving+1035840505: cap 0: running thread 2+1036013700: sending message with tag Head from process 2, thread 2 to machine 1, process 1 on inport 6+1036199479: sending message with tag DataMes from process 2, thread 2 to machine 1, process 1 on inport 6+1036200951: cap 0: stopping thread 2 (thread finished)+1036203085: killing process 2+1036673875: cap 0: starting to receive+1036674075: cap 0: stop receiving+1036676344: cap 0: starting GC+1036678097: cap 0: GC working+1036682705: cap 0: GC idle+1036682824: cap 0: GC done+1036682989: cap 0: GC idle+1036683028: cap 0: GC done+1036683991: cap 0: all caps stopped for GC+1036684170: cap 0: GC stats for heap capset 0: generation 0, 112 bytes copied, 4376 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied+1036684509: cap 0: finished GC+1036684762: cap 0: allocated on heap capset 0: 12687120 total bytes till now+1036684892: cap 0: size of heap capset 0: 1048576 bytes+1036685495: task 0x1c42f50 deleted+1036686412: task 0x1c42f50 created on cap 0 with OS kernel thread 5847+1036686852: cap 0: creating thread 3+1036691152: cap 0: running thread 3+1036691224: cap 0: stopping thread 3 (thread finished)+1036691527: task 0x1c42f50 deleted+1036708176: cap 0: allocated on heap capset 0: 12688144 total bytes till now+1036708997: removed cap 0 from capset 0+1036709083: removed cap 0 from capset 1+1036709178: deleted cap 0+1036709275: deleted capset 0+1036709334: deleted capset 1+1036715687: killing machine 2+
+ test/pre77stop.eventlog.reference view
@@ -0,0 +1,139 @@+Event Types:+0: Create thread (size 4)+1: Run thread (size 4)+2: Stop thread (size 10)+3: Thread runnable (size 4)+4: Migrate thread (size 6)+8: Wakeup thread (size 6)+9: Starting GC (size 0)+10: Finished GC (size 0)+11: Request sequential GC (size 0)+12: Request parallel GC (size 0)+15: Create spark thread (size 4)+16: Log message (size variable)+17: Create capabilities (size 2)+18: Block marker (size 14)+19: User message (size variable)+20: GC idle (size 0)+21: GC working (size 0)+22: GC done (size 0)+23: Version (size variable)+24: Program invocation (size variable)+25: Create capability set (size 6)+26: Delete capability set (size 4)+27: Add capability to capability set (size 6)+28: Remove capability from capability set (size 6)+29: RTS name and version (size variable)+30: Program arguments (size variable)+31: Program environment variables (size variable)+32: Process ID (size 8)+33: Parent process ID (size 8)+34: Spark counters (size 56)+35: Spark create (size 0)+36: Spark dud (size 0)+37: Spark overflow (size 0)+38: Spark run (size 0)+39: Spark steal (size 2)+40: Spark fizzle (size 0)+41: Spark GC (size 0)+43: Wall clock time (size 16)+44: Thread label (size variable)+45: Create capability (size 2)+46: Delete capability (size 2)+47: Disable capability (size 2)+48: Enable capability (size 2)+49: Total heap mem ever allocated (size 12)+50: Current heap size (size 12)+51: Current heap live data (size 12)+52: Heap static parameters (size 38)+53: GC statistics (size 50)+54: Synchronise stop-the-world GC (size 0)+60: Starting message receival (size 0)+61: Finished message receival (size 0)+62: Creating Process (size 4)+63: Killing Process (size 4)+64: Assigning thread to process (size 8)+65: Creating machine (size 10)+66: Killing machine (size 2)+67: Sending message (size 19)+68: Receiving message (size 23)+69: Sending/Receiving local message (size 17)++Events:+289733: startup: 1 capabilities+296334: created capset 0 of type CapsetOsProcess+296685: created capset 1 of type CapsetClockDomain+298459: created cap 0+298614: assigned cap 0 to capset 0+298750: assigned cap 0 to capset 1+305355: capset 1: wall clock time 1405192564s 324769000ns (unix epoch)+305796: capset 0: pid 19928+308186: capset 0: parent pid 18797+315568: capset 0: RTS version "GHC-7.6.3 rts_l"+323642: capset 0: args: ["./wrongeventlog2","+RTS","-lsu-g-p","-K80m","-k10m","-H200m","-C1s"]+331921: capset 0: env: ["SSH_AGENT_PID=1817","PVM_RSH=/usr/bin/ssh","GPG_AGENT_INFO=/tmp/keyring-yTUMmt/gpg:0:1","TERM=xterm","SHELL=/bin/bash","XDG_SESSION_COOKIE=acf1c79e0e2de67643be755c00000003-1405160974.283591-1531347675","WINDOWID=58743399","OLDPWD=/opt/Eden/edentv/fixFor783/BLD-ghc-events-parallel","GNOME_KEYRING_CONTROL=/tmp/keyring-yTUMmt","USER=jost","LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:","XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0","XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0","PVM_ROOT=/usr/lib/pvm3","SSH_AUTH_SOCK=/tmp/keyring-yTUMmt/ssh","SESSION_MANAGER=local/onAir:@/tmp/.ICE-unix/1781,unix/onAir:/tmp/.ICE-unix/1781","DEFAULTS_PATH=/usr/share/gconf/gnome-fallback.default.path","PVM_ARCH=LINUX64","XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome-fallback:/etc/xdg","PATH=/home/jost/bin:/home/jost/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/jost/.cabal/bin","DESKTOP_SESSION=gnome-fallback","PWD=/opt/Eden/edentv/fixFor783","GNOME_KEYRING_PID=1770","LANG=en_US.UTF-8","MANDATORY_PATH=/usr/share/gconf/gnome-fallback.mandatory.path","UBUNTU_MENUPROXY=libappmenu.so","GDMSESSION=gnome-fallback","SHLVL=1","HOME=/home/jost","LANGUAGE=en_US:en","GNOME_DESKTOP_SESSION_ID=this-is-deprecated","LOGNAME=jost","PVM_EXPORT=DISPLAY","XDG_DATA_DIRS=/usr/share/gnome-fallback:/usr/share/gnome:/usr/local/share/:/usr/share/","DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Mviy2n6D5M,guid=3677210ad991dc7e0dc3a1ae00000012","LESSOPEN=| /usr/bin/lesspipe %s","DISPLAY=:0.0","XDG_CURRENT_DESKTOP=GNOME","LESSCLOSE=/usr/bin/lesspipe %s %s","COLORTERM=gnome-terminal","XAUTHORITY=/home/jost/.Xauthority","_=./wrongeventlog2"]+716554: cap 0: creating thread 1+724337: cap 0: running thread 1+777249: cap 0: stopping thread 1 (heap overflow)+4206233: cap 0: running thread 1+4371098: cap 0: stopping thread 1 (making a foreign call)+4373253: cap 0: running thread 1+4468468: cap 0: forking child thread+4628142: cap 0: creating thread 2+4629931: cap 0: stopping thread 1 (thread yielding)+4631259: cap 0: running thread 2+4635338: cap 0: stopping thread 2 (heap overflow)+5624512: cap 0: running thread 2+5633862: cap 0: child+10558539: cap 0: stopping thread 2 (thread yielding)+10560195: cap 0: running thread 1+10571646: cap 0: stopping thread 1 (blocked on black hole owned by thread 2)+10571821: cap 0: running thread 2+190091289: cap 0: stopping thread 2 (heap overflow)+190645077: cap 0: running thread 2+324320577: cap 0: stopping thread 2 (heap overflow)+324792075: cap 0: running thread 2+458588360: cap 0: stopping thread 2 (heap overflow)+459042855: cap 0: running thread 2+591946686: cap 0: stopping thread 2 (heap overflow)+592423132: cap 0: running thread 2+726292685: cap 0: stopping thread 2 (heap overflow)+726799582: cap 0: running thread 2+818131666: cap 0: waking up thread 1 on cap 0+818148789: cap 0: stopping thread 2 (making a foreign call)+818150627: cap 0: running thread 2+818202281: cap 0: filling full MVar+818204902: cap 0: stopping thread 2 (blocked on an MVar)+818205910: cap 0: running thread 1+818209409: cap 0: stopping thread 1 (making a foreign call)+818209858: cap 0: running thread 1+818221708: cap 0: emptying full MVar+818222511: cap 0: waking up thread 2 on cap 0+818227099: cap 0: stopping thread 1 (making a foreign call)+818227497: cap 0: running thread 1+818237552: cap 0: reading empty MVar+818238643: cap 0: stopping thread 1 (blocked on an MVar)+818238846: cap 0: running thread 2+818239075: cap 0: stopping thread 2 (thread yielding)+818239319: cap 0: running thread 2+818241881: cap 0: filling empty MVar+818242290: cap 0: waking up thread 1 on cap 0+818242613: cap 0: stopping thread 2 (thread yielding)+818242945: cap 0: running thread 1+818246059: cap 0: stopping thread 1 (making a foreign call)+818246364: cap 0: running thread 1+818253828: cap 0: stopping thread 1 (thread finished)+818334270: cap 0: creating thread 3+818334992: cap 0: running thread 2+818337572: cap 0: stopping thread 2 (heap overflow)+818880973: cap 0: running thread 2+818886482: cap 0: child finished+818887085: cap 0: stopping thread 2 (thread finished)+818887615: cap 0: running thread 3+818895068: cap 0: stopping thread 3 (thread finished)+819826584: removed cap 0 from capset 0+819826743: removed cap 0 from capset 1+819827023: deleted cap 0+819827079: deleted capset 0+819827133: deleted capset 1+
+ test/queens-ghc-6.12.1.eventlog view

binary file changed (absent → 7513 bytes)

+ test/queens-ghc-6.12.1.eventlog.reference view
@@ -0,0 +1,509 @@+Event Types:+0: Create thread (size 8)+1: Run thread (size 8)+2: Stop thread (size 10)+3: Thread runnable (size 8)+4: Migrate thread (size 10)+5: Run spark (size 8)+6: Steal spark (size 10)+7: Shutdown (size 0)+8: Wakeup thread (size 10)+9: Starting GC (size 0)+10: Finished GC (size 0)+11: Request sequential GC (size 0)+12: Request parallel GC (size 0)+15: Create spark thread (size 8)+16: Log message (size variable)+17: Startup (size 0)+18: Block marker (size 14)+19: User message (size variable)++Events:+106000: startup: 4 capabilities+431000: cap 3: creating thread 1+431000: cap 3: thread 1 is runnable+432000: cap 3: running thread 1+471000: cap 3: creating thread 2+471000: cap 3: thread 2 is runnable+471000: cap 3: stopping thread 1 (thread finished)+478000: cap 3: creating thread 3+479000: cap 3: thread 3 is runnable+517000: cap 3: running thread 2+580000: cap 3: stopping thread 2 (making a foreign call)+585000: cap 3: running thread 2+606000: cap 3: stopping thread 2 (making a foreign call)+612000: cap 3: running thread 3+667000: cap 3: stopping thread 3 (thread yielding)+668000: cap 3: thread 3 is runnable+668000: cap 3: running thread 3+834000: cap 3: stopping thread 3 (stack overflow)+839000: cap 3: running thread 3+1459000: cap 3: stopping thread 3 (heap overflow)+1460000: cap 3: requesting parallel GC+1470000: cap 0: starting GC+1473000: cap 1: starting GC+1473000: cap 2: starting GC+1474000: cap 3: starting GC+1631000: cap 3: finished GC+1632000: cap 0: finished GC+1632000: cap 1: finished GC+1632000: cap 2: finished GC+1633000: cap 3: running thread 3+1637000: cap 2: creating thread 4+1637000: cap 2: creating spark thread 4+1637000: cap 2: thread 4 is runnable+1637000: cap 2: running thread 4+1638000: cap 0: creating thread 5+1638000: cap 0: creating spark thread 5+1638000: cap 3: stopping thread 3 (thread yielding)+1638000: cap 3: thread 3 is runnable+1639000: cap 0: thread 5 is runnable+1639000: cap 0: running thread 5+1639000: cap 1: creating thread 6+1639000: cap 1: creating spark thread 6+1639000: cap 1: thread 6 is runnable+1639000: cap 3: running thread 3+1640000: cap 1: running thread 6+1642000: cap 2: stealing a spark from cap 3+1647000: cap 0: stealing a spark from cap 3+1647000: cap 1: stealing a spark from cap 3+1652000: cap 2: stopping thread 4 (thread yielding)+1653000: cap 2: thread 4 is runnable+1653000: cap 2: running thread 4+1663000: cap 0: stopping thread 5 (thread yielding)+1663000: cap 1: stopping thread 6 (thread yielding)+1664000: cap 0: thread 5 is runnable+1664000: cap 0: running thread 5+1664000: cap 1: thread 6 is runnable+1664000: cap 1: running thread 6+1672000: cap 2: stopping thread 4 (stack overflow)+1676000: cap 2: running thread 4+1684000: cap 0: stopping thread 5 (stack overflow)+1687000: cap 1: stopping thread 6 (stack overflow)+1688000: cap 0: running thread 5+1691000: cap 1: running thread 6+1974000: cap 3: stopping thread 3 (heap overflow)+1974000: cap 3: requesting parallel GC+1975000: cap 1: stopping thread 6 (thread yielding)+1975000: cap 1: thread 6 is runnable+1975000: cap 2: stopping thread 4 (thread yielding)+1976000: cap 1: starting GC+1976000: cap 2: thread 4 is runnable+1976000: cap 2: starting GC+1977000: cap 0: stopping thread 5 (thread yielding)+1977000: cap 0: thread 5 is runnable+1977000: cap 0: starting GC+1978000: cap 3: starting GC+2054000: cap 3: finished GC+2055000: cap 0: finished GC+2055000: cap 1: finished GC+2055000: cap 2: finished GC+2056000: cap 0: running thread 5+2056000: cap 1: running thread 6+2056000: cap 2: running thread 4+2056000: cap 3: running thread 3+2066000: cap 0: stopping thread 5 (thread yielding)+2066000: cap 0: thread 5 is runnable+2066000: cap 1: stopping thread 6 (thread yielding)+2066000: cap 2: stopping thread 4 (thread yielding)+2066000: cap 2: thread 4 is runnable+2066000: cap 3: stopping thread 3 (thread yielding)+2066000: cap 3: thread 3 is runnable+2067000: cap 0: running thread 5+2067000: cap 1: thread 6 is runnable+2067000: cap 1: running thread 6+2067000: cap 2: running thread 4+2067000: cap 3: running thread 3+2413000: cap 3: stopping thread 3 (heap overflow)+2414000: cap 3: requesting parallel GC+2417000: cap 0: stopping thread 5 (thread yielding)+2417000: cap 0: thread 5 is runnable+2417000: cap 0: starting GC+2417000: cap 1: stopping thread 6 (thread yielding)+2417000: cap 1: thread 6 is runnable+2417000: cap 1: starting GC+2417000: cap 2: stopping thread 4 (thread yielding)+2418000: cap 2: thread 4 is runnable+2418000: cap 2: starting GC+2419000: cap 3: starting GC+2457000: cap 3: finished GC+2458000: cap 0: finished GC+2458000: cap 0: running thread 5+2458000: cap 1: finished GC+2458000: cap 2: finished GC+2458000: cap 3: running thread 3+2459000: cap 1: running thread 6+2459000: cap 2: running thread 4+2462000: cap 0: stopping thread 5 (thread yielding)+2462000: cap 0: thread 5 is runnable+2462000: cap 2: stopping thread 4 (thread yielding)+2463000: cap 0: running thread 5+2463000: cap 1: stopping thread 6 (thread yielding)+2463000: cap 2: thread 4 is runnable+2463000: cap 2: running thread 4+2463000: cap 3: stopping thread 3 (thread yielding)+2463000: cap 3: thread 3 is runnable+2463000: cap 3: running thread 3+2464000: cap 1: thread 6 is runnable+2464000: cap 1: running thread 6+2573000: cap 3: stopping thread 3 (thread blocked)+2612000: cap 3: creating thread 7+2612000: cap 3: creating spark thread 7+2612000: cap 3: thread 7 is runnable+2613000: cap 3: running thread 7+2616000: cap 3: running a local spark+2629000: cap 3: stopping thread 7 (stack overflow)+2630000: cap 3: running thread 7+2845000: cap 3: stopping thread 7 (heap overflow)+2846000: cap 3: requesting parallel GC+2848000: cap 1: stopping thread 6 (thread yielding)+2848000: cap 1: thread 6 is runnable+2848000: cap 2: stopping thread 4 (thread yielding)+2848000: cap 2: thread 4 is runnable+2849000: cap 0: stopping thread 5 (thread yielding)+2849000: cap 1: starting GC+2849000: cap 2: starting GC+2850000: cap 0: thread 5 is runnable+2850000: cap 0: starting GC+2851000: cap 3: starting GC+2890000: cap 0: finished GC+2890000: cap 1: finished GC+2890000: cap 3: finished GC+2891000: cap 0: running thread 5+2891000: cap 1: running thread 6+2891000: cap 2: finished GC+2891000: cap 2: running thread 4+2891000: cap 3: running thread 7+2894000: cap 3: stopping thread 7 (thread yielding)+2895000: cap 0: stopping thread 5 (thread yielding)+2895000: cap 1: stopping thread 6 (thread yielding)+2895000: cap 2: stopping thread 4 (thread yielding)+2895000: cap 3: thread 7 is runnable+2895000: cap 3: running thread 7+2896000: cap 0: thread 5 is runnable+2896000: cap 0: running thread 5+2896000: cap 1: thread 6 is runnable+2896000: cap 1: running thread 6+2896000: cap 2: thread 4 is runnable+2896000: cap 2: running thread 4+3231000: cap 3: stopping thread 7 (heap overflow)+3231000: cap 3: requesting parallel GC+3232000: cap 2: stopping thread 4 (thread yielding)+3232000: cap 2: thread 4 is runnable+3232000: cap 2: starting GC+3233000: cap 0: stopping thread 5 (thread yielding)+3233000: cap 0: thread 5 is runnable+3233000: cap 0: starting GC+3233000: cap 1: stopping thread 6 (thread yielding)+3233000: cap 1: thread 6 is runnable+3233000: cap 1: starting GC+3234000: cap 3: starting GC+3268000: cap 3: finished GC+3269000: cap 0: finished GC+3269000: cap 0: running thread 5+3269000: cap 1: finished GC+3269000: cap 1: running thread 6+3269000: cap 2: finished GC+3269000: cap 3: running thread 7+3270000: cap 2: running thread 4+3273000: cap 0: stopping thread 5 (thread yielding)+3274000: cap 0: thread 5 is runnable+3274000: cap 0: running thread 5+3274000: cap 2: stopping thread 4 (thread yielding)+3274000: cap 2: thread 4 is runnable+3274000: cap 3: stopping thread 7 (thread yielding)+3274000: cap 3: thread 7 is runnable+3275000: cap 1: stopping thread 6 (thread yielding)+3275000: cap 1: thread 6 is runnable+3275000: cap 1: running thread 6+3275000: cap 2: running thread 4+3275000: cap 3: running thread 7+3507000: cap 2: stealing a spark from cap 3+3524000: cap 0: stealing a spark from cap 2+3540000: cap 1: stealing a spark from cap 0+3607000: cap 3: stopping thread 7 (heap overflow)+3607000: cap 3: requesting parallel GC+3609000: cap 0: stopping thread 5 (thread yielding)+3609000: cap 0: thread 5 is runnable+3609000: cap 0: starting GC+3609000: cap 1: stopping thread 6 (thread yielding)+3609000: cap 1: thread 6 is runnable+3609000: cap 1: starting GC+3609000: cap 2: stopping thread 4 (thread yielding)+3609000: cap 2: thread 4 is runnable+3610000: cap 2: starting GC+3610000: cap 3: thread 3 is runnable+3610000: cap 3: waking up thread 3 on cap 3+3611000: cap 3: starting GC+3642000: cap 3: finished GC+3643000: cap 0: finished GC+3643000: cap 0: running thread 5+3643000: cap 1: finished GC+3643000: cap 2: finished GC+3643000: cap 2: running thread 4+3644000: cap 1: running thread 6+3644000: cap 3: running thread 7+3647000: cap 0: stopping thread 5 (thread yielding)+3647000: cap 2: stopping thread 4 (thread yielding)+3647000: cap 2: thread 4 is runnable+3648000: cap 0: thread 5 is runnable+3648000: cap 0: running thread 5+3648000: cap 1: stopping thread 6 (thread yielding)+3648000: cap 1: thread 6 is runnable+3648000: cap 1: running thread 6+3648000: cap 2: running thread 4+3648000: cap 3: stopping thread 7 (thread yielding)+3648000: cap 3: thread 7 is runnable+3662000: cap 3: running thread 3+3666000: cap 3: stopping thread 3 (thread blocked)+3668000: cap 3: running thread 7+3684000: cap 1: stealing a spark from cap 2+3692000: cap 0: stealing a spark from cap 1+3729000: cap 2: stopping thread 4 (thread blocked)+3730000: cap 2: creating thread 8+3730000: cap 2: creating spark thread 8+3731000: cap 2: thread 8 is runnable+3731000: cap 2: running thread 8+3731000: cap 2: running a local spark+3770000: cap 0: stealing a spark from cap 1+3810000: cap 1: stopping thread 6 (thread blocked)+3812000: cap 1: creating thread 9+3813000: cap 1: creating spark thread 9+3813000: cap 1: thread 9 is runnable+3813000: cap 1: running thread 9+3814000: cap 1: stealing a spark from cap 2+3865000: cap 0: stealing a spark from cap 1+3883000: cap 1: stopping thread 9 (thread blocked)+3884000: cap 1: thread 6 is runnable+3884000: cap 1: waking up thread 6 on cap 1+3884000: cap 1: running thread 6+3885000: cap 1: stopping thread 6 (thread yielding)+3885000: cap 1: thread 6 is runnable+3885000: cap 1: running thread 6+3886000: cap 1: running a local spark+3955000: cap 0: stealing a spark from cap 1+3985000: cap 2: stopping thread 8 (heap overflow)+3986000: cap 2: requesting parallel GC+3987000: cap 0: stopping thread 5 (heap overflow)+3987000: cap 0: thread 5 is runnable+3987000: cap 0: starting GC+3987000: cap 1: stealing a spark from cap 3+3988000: cap 1: stopping thread 6 (thread yielding)+3988000: cap 1: thread 6 is runnable+3988000: cap 1: starting GC+3988000: cap 3: stopping thread 7 (thread yielding)+3988000: cap 3: thread 7 is runnable+3988000: cap 3: starting GC+3989000: cap 2: waking up thread 9 on cap 1+3990000: cap 2: thread 4 is runnable+3990000: cap 2: waking up thread 4 on cap 2+3990000: cap 2: starting GC+4032000: cap 0: finished GC+4032000: cap 2: finished GC+4033000: cap 0: running thread 5+4033000: cap 1: finished GC+4033000: cap 1: running thread 6+4033000: cap 2: running thread 8+4033000: cap 3: finished GC+4033000: cap 3: running thread 7+4037000: cap 0: stopping thread 5 (thread yielding)+4037000: cap 0: thread 5 is runnable+4037000: cap 0: running thread 5+4037000: cap 3: stopping thread 7 (thread yielding)+4037000: cap 3: thread 7 is runnable+4037000: cap 3: running thread 7+4038000: cap 1: stopping thread 6 (thread yielding)+4038000: cap 1: thread 6 is runnable+4038000: cap 1: running thread 6+4038000: cap 2: stopping thread 8 (thread yielding)+4038000: cap 2: thread 8 is runnable+4038000: cap 2: running thread 4+4041000: cap 2: stopping thread 4 (thread blocked)+4041000: cap 2: running thread 8+4053000: cap 2: stealing a spark from cap 1+4064000: cap 0: stealing a spark from cap 1+4102000: cap 3: running a local spark+4296000: cap 0: stealing a spark from cap 1+4308000: cap 2: stealing a spark from cap 0+4312000: cap 1: stopping thread 6 (thread blocked)+4313000: cap 1: running thread 9+4314000: cap 1: running a local spark+4375000: cap 2: stopping thread 8 (heap overflow)+4375000: cap 2: requesting parallel GC+4376000: cap 0: stopping thread 5 (heap overflow)+4376000: cap 0: thread 5 is runnable+4376000: cap 0: starting GC+4376000: cap 3: stopping thread 7 (thread yielding)+4377000: cap 3: thread 7 is runnable+4377000: cap 3: starting GC+4378000: cap 1: stopping thread 9 (thread yielding)+4379000: cap 1: thread 9 is runnable+4379000: cap 1: starting GC+4380000: cap 2: thread 4 is runnable+4380000: cap 2: waking up thread 4 on cap 2+4380000: cap 2: waking up thread 3 on cap 3+4380000: cap 2: starting GC+4419000: cap 2: finished GC+4420000: cap 0: finished GC+4420000: cap 1: finished GC+4420000: cap 3: finished GC+4421000: cap 0: running thread 5+4421000: cap 1: running thread 9+4421000: cap 2: running thread 8+4421000: cap 3: running thread 7+4424000: cap 0: stopping thread 5 (thread yielding)+4424000: cap 0: thread 5 is runnable+4424000: cap 3: stopping thread 7 (thread yielding)+4424000: cap 3: thread 7 is runnable+4425000: cap 0: running thread 5+4425000: cap 2: stopping thread 8 (thread yielding)+4425000: cap 2: thread 8 is runnable+4425000: cap 2: running thread 4+4425000: cap 3: running thread 7+4426000: cap 1: stopping thread 9 (thread yielding)+4426000: cap 1: thread 9 is runnable+4426000: cap 1: running thread 9+4428000: cap 2: stopping thread 4 (thread finished)+4428000: cap 2: running thread 8+4440000: cap 2: stealing a spark from cap 0+4466000: cap 0: stopping thread 5 (thread blocked)+4467000: cap 0: creating thread 10+4468000: cap 0: creating spark thread 10+4468000: cap 0: thread 10 is runnable+4468000: cap 0: running thread 10+4468000: cap 0: running a local spark+4497000: cap 2: stealing a spark from cap 1+4512000: cap 0: stealing a spark from cap 3+4515000: cap 3: stopping thread 7 (thread blocked)+4527000: cap 3: running thread 3+4529000: cap 3: stopping thread 3 (thread blocked)+4532000: cap 3: waking up thread 5 on cap 0+4532000: cap 3: creating thread 11+4532000: cap 3: creating spark thread 11+4533000: cap 3: thread 11 is runnable+4533000: cap 3: running thread 11+4534000: cap 0: stopping thread 10 (thread yielding)+4534000: cap 0: thread 10 is runnable+4534000: cap 3: running a local spark+4535000: cap 0: running thread 10+4547000: cap 1: stopping thread 9 (thread blocked)+4549000: cap 1: creating thread 12+4549000: cap 1: creating spark thread 12+4549000: cap 1: thread 12 is runnable+4549000: cap 1: running thread 12+4550000: cap 1: stealing a spark from cap 0+4562000: cap 2: stealing a spark from cap 0+4595000: cap 2: stealing a spark from cap 3+4600000: cap 0: stopping thread 10 (thread blocked)+4600000: cap 0: running thread 5+4601000: cap 0: stealing a spark from cap 2+4608000: cap 1: stealing a spark from cap 2+4625000: cap 2: stopping thread 8 (thread blocked)+4626000: cap 2: waking up thread 10 on cap 0+4627000: cap 2: waking up thread 9 on cap 1+4627000: cap 2: waking up thread 6 on cap 1+4628000: cap 0: stopping thread 5 (thread yielding)+4628000: cap 0: thread 5 is runnable+4628000: cap 2: creating thread 13+4628000: cap 2: creating spark thread 13+4628000: cap 2: thread 13 is runnable+4629000: cap 0: running thread 5+4629000: cap 1: stopping thread 12 (thread yielding)+4629000: cap 1: thread 12 is runnable+4629000: cap 1: running thread 12+4629000: cap 2: running thread 13+4629000: cap 2: running a local spark+4665000: cap 1: stopping thread 12 (thread finished)+4665000: cap 1: running thread 9+4666000: cap 1: stopping thread 9 (thread finished)+4666000: cap 1: running thread 6+4668000: cap 1: stealing a spark from cap 3+4669000: cap 0: stopping thread 5 (thread finished)+4669000: cap 0: running thread 10+4670000: cap 0: stopping thread 10 (thread finished)+4671000: cap 0: waking up thread 8 on cap 2+4672000: cap 0: waking up thread 3 on cap 3+4672000: cap 0: waking up thread 7 on cap 3+4672000: cap 0: creating thread 14+4673000: cap 0: creating spark thread 14+4673000: cap 0: thread 14 is runnable+4673000: cap 0: running thread 14+4673000: cap 0: stealing a spark from cap 1+4673000: cap 3: stopping thread 11 (thread yielding)+4673000: cap 3: thread 11 is runnable+4674000: cap 2: stopping thread 13 (thread yielding)+4674000: cap 2: thread 13 is runnable+4674000: cap 3: running thread 11+4675000: cap 1: stopping thread 6 (thread blocked)+4675000: cap 1: creating thread 15+4675000: cap 2: running thread 13+4676000: cap 1: creating spark thread 15+4676000: cap 1: thread 15 is runnable+4676000: cap 1: running thread 15+4676000: cap 1: running a local spark+4685000: cap 2: stopping thread 13 (thread finished)+4686000: cap 2: running thread 8+4687000: cap 2: stealing a spark from cap 1+4707000: cap 1: running a local spark+4711000: cap 3: stopping thread 11 (thread finished)+4719000: cap 0: stopping thread 14 (thread finished)+4719000: cap 0: waking up thread 6 on cap 1+4721000: cap 1: stopping thread 15 (thread yielding)+4721000: cap 1: thread 15 is runnable+4721000: cap 3: running thread 3+4722000: cap 0: thread 6 is runnable+4722000: cap 1: migrating thread 6 to cap 0+4724000: cap 3: stopping thread 3 (thread blocked)+4725000: cap 1: running thread 15+4726000: cap 3: running thread 7+4728000: cap 0: running thread 6+4728000: cap 2: stopping thread 8 (thread finished)+4732000: cap 3: stopping thread 7 (thread blocked)+4734000: cap 0: stopping thread 6 (thread blocked)+4778000: cap 1: stopping thread 15 (heap overflow)+4779000: cap 1: requesting parallel GC+4784000: cap 0: starting GC+4790000: cap 2: starting GC+4793000: cap 3: starting GC+4794000: cap 1: starting GC+4833000: cap 1: finished GC+4834000: cap 0: finished GC+4834000: cap 1: running thread 15+4834000: cap 2: finished GC+4834000: cap 3: finished GC+4838000: cap 1: stopping thread 15 (thread yielding)+4838000: cap 1: thread 15 is runnable+4839000: cap 1: running thread 15+4846000: cap 0: thread 6 is runnable+4846000: cap 1: stopping thread 15 (thread finished)+4849000: cap 1: waking up thread 6 on cap 0+4851000: cap 0: running thread 6+4852000: cap 0: stopping thread 6 (thread finished)+4853000: cap 3: thread 7 is runnable+4857000: cap 0: waking up thread 7 on cap 3+4859000: cap 3: running thread 7+4861000: cap 3: stopping thread 7 (thread finished)+4861000: cap 3: thread 3 is runnable+4861000: cap 3: waking up thread 3 on cap 3+4866000: cap 3: running thread 3+4903000: cap 3: stopping thread 3 (making a foreign call)+4904000: cap 3: running thread 3+4905000: cap 3: stopping thread 3 (making a foreign call)+4914000: cap 3: running thread 3+4918000: cap 3: stopping thread 3 (thread yielding)+4918000: cap 3: thread 3 is runnable+4919000: cap 3: running thread 3+4946000: cap 3: stopping thread 3 (thread finished)+4962000: cap 3: running thread 2+4964000: cap 0: requesting sequential GC+4965000: cap 3: stopping thread 2 (thread yielding)+4966000: cap 3: thread 2 is runnable+4972000: cap 0: starting GC+5026000: cap 0: finished GC+5037000: cap 3: running thread 2+5037000: cap 3: stopping thread 2 (thread finished)+5053000: cap 0: shutting down+5054000: cap 1: shutting down+5104000: cap 2: shutting down+5105000: cap 3: shutting down+
+ test/queens-ghc-7.0.2.eventlog view

binary file changed (absent → 12883 bytes)

+ test/queens-ghc-7.0.2.eventlog.reference view
@@ -0,0 +1,943 @@+Event Types:+0: Create thread (size 4)+1: Run thread (size 4)+2: Stop thread (size 6)+3: Thread runnable (size 4)+4: Migrate thread (size 6)+5: Run spark (size 4)+6: Steal spark (size 6)+7: Shutdown (size 0)+8: Wakeup thread (size 6)+9: Starting GC (size 0)+10: Finished GC (size 0)+11: Request sequential GC (size 0)+12: Request parallel GC (size 0)+15: Create spark thread (size 4)+16: Log message (size variable)+17: Startup (size 2)+18: Block marker (size 14)+19: User message (size variable)+20: GC idle (size 0)+21: GC working (size 0)+22: GC done (size 0)++Events:+115000: startup: 4 capabilities+430000: cap 3: creating thread 1+430000: cap 3: thread 1 is runnable+433000: cap 3: running thread 1+512000: cap 3: stopping thread 1 (making a foreign call)+513000: cap 3: running thread 1+516000: cap 3: stopping thread 1 (making a foreign call)+517000: cap 3: running thread 1+554000: cap 3: creating thread 2+554000: cap 3: thread 2 is runnable+572000: cap 3: stopping thread 1 (thread finished)+580000: cap 3: creating thread 3+580000: cap 3: thread 3 is runnable+619000: cap 3: running thread 2+635000: cap 3: stopping thread 2 (thread yielding)+635000: cap 3: thread 2 is runnable+637000: cap 0: thread 2 is runnable+637000: cap 3: migrating thread 2 to cap 0+648000: cap 0: running thread 2+655000: cap 3: running thread 3+672000: cap 0: stopping thread 2 (making a foreign call)+893000: cap 3: stopping thread 3 (stack overflow)+897000: cap 3: running thread 3+1466000: cap 3: stopping thread 3 (heap overflow)+1467000: cap 3: requesting parallel GC+1476000: cap 0: starting GC+1480000: cap 1: starting GC+1481000: cap 2: starting GC+1483000: cap 3: starting GC+1503000: cap 1: GC working+1503000: cap 2: GC working+1506000: cap 2: GC idle+1507000: cap 1: GC idle+1509000: cap 0: GC working+1514000: cap 3: GC working+1566000: cap 0: GC idle+1628000: cap 0: GC done+1628000: cap 1: GC done+1628000: cap 3: GC idle+1628000: cap 3: GC done+1629000: cap 2: GC done+1629000: cap 3: GC working+1630000: cap 3: GC idle+1630000: cap 3: GC done+1630000: cap 3: GC working+1631000: cap 3: GC idle+1631000: cap 3: GC done+1631000: cap 3: GC working+1631000: cap 3: GC idle+1632000: cap 3: GC done+1653000: cap 0: finished GC+1653000: cap 3: finished GC+1654000: cap 1: finished GC+1654000: cap 2: finished GC+1654000: cap 3: running thread 3+1658000: cap 3: stopping thread 3 (thread yielding)+1659000: cap 2: creating thread 4+1659000: cap 2: creating spark thread 4+1659000: cap 3: thread 3 is runnable+1659000: cap 3: running thread 3+1660000: cap 0: creating thread 5+1660000: cap 0: creating spark thread 5+1660000: cap 0: thread 5 is runnable+1660000: cap 2: thread 4 is runnable+1660000: cap 2: running thread 4+1661000: cap 0: running thread 5+1663000: cap 1: creating thread 6+1663000: cap 1: creating spark thread 6+1663000: cap 1: thread 6 is runnable+1664000: cap 1: running thread 6+1665000: cap 2: stealing a spark from cap 3+1667000: cap 0: stealing a spark from cap 3+1669000: cap 1: stealing a spark from cap 3+1675000: cap 2: stopping thread 4 (thread yielding)+1675000: cap 2: thread 4 is runnable+1676000: cap 2: running thread 4+1681000: cap 0: stopping thread 5 (thread yielding)+1681000: cap 0: thread 5 is runnable+1681000: cap 0: running thread 5+1681000: cap 1: stopping thread 6 (thread yielding)+1681000: cap 1: thread 6 is runnable+1681000: cap 1: running thread 6+1692000: cap 2: stopping thread 4 (stack overflow)+1694000: cap 2: running thread 4+1699000: cap 0: stopping thread 5 (stack overflow)+1700000: cap 1: stopping thread 6 (stack overflow)+1705000: cap 0: running thread 5+1705000: cap 1: running thread 6+1949000: cap 3: stopping thread 3 (heap overflow)+1950000: cap 3: requesting parallel GC+1951000: cap 0: stopping thread 5 (thread yielding)+1951000: cap 0: thread 5 is runnable+1951000: cap 0: starting GC+1951000: cap 1: stopping thread 6 (thread yielding)+1951000: cap 1: thread 6 is runnable+1951000: cap 1: starting GC+1951000: cap 2: stopping thread 4 (thread yielding)+1951000: cap 2: thread 4 is runnable+1952000: cap 2: starting GC+1953000: cap 3: starting GC+1962000: cap 1: GC working+1963000: cap 2: GC working+1964000: cap 0: GC working+1969000: cap 3: GC working+1990000: cap 2: GC idle+1991000: cap 0: GC idle+1992000: cap 1: GC idle+1999000: cap 0: GC done+1999000: cap 1: GC done+1999000: cap 2: GC done+1999000: cap 3: GC idle+1999000: cap 3: GC done+2000000: cap 3: GC working+2000000: cap 3: GC idle+2000000: cap 3: GC done+2000000: cap 3: GC working+2001000: cap 3: GC idle+2001000: cap 3: GC done+2002000: cap 3: GC working+2002000: cap 3: GC idle+2002000: cap 3: GC done+2013000: cap 3: finished GC+2014000: cap 0: finished GC+2014000: cap 0: running thread 5+2014000: cap 1: finished GC+2014000: cap 2: finished GC+2014000: cap 3: running thread 3+2015000: cap 1: running thread 6+2015000: cap 2: running thread 4+2017000: cap 0: stopping thread 5 (thread yielding)+2018000: cap 0: thread 5 is runnable+2018000: cap 0: running thread 5+2018000: cap 2: stopping thread 4 (thread yielding)+2018000: cap 2: thread 4 is runnable+2019000: cap 1: stopping thread 6 (thread yielding)+2019000: cap 1: thread 6 is runnable+2019000: cap 2: running thread 4+2019000: cap 3: stopping thread 3 (thread yielding)+2019000: cap 3: thread 3 is runnable+2019000: cap 3: running thread 3+2020000: cap 1: running thread 6+2307000: cap 3: stopping thread 3 (heap overflow)+2307000: cap 3: requesting parallel GC+2308000: cap 1: stopping thread 6 (thread yielding)+2309000: cap 1: thread 6 is runnable+2309000: cap 1: starting GC+2310000: cap 0: stopping thread 5 (thread yielding)+2310000: cap 2: stopping thread 4 (thread yielding)+2310000: cap 2: thread 4 is runnable+2310000: cap 2: starting GC+2311000: cap 0: thread 5 is runnable+2311000: cap 0: starting GC+2311000: cap 3: starting GC+2319000: cap 1: GC working+2320000: cap 2: GC working+2323000: cap 0: GC working+2327000: cap 3: GC working+2333000: cap 2: GC idle+2334000: cap 0: GC idle+2335000: cap 3: GC idle+2336000: cap 0: GC done+2336000: cap 1: GC idle+2336000: cap 1: GC done+2336000: cap 2: GC done+2336000: cap 3: GC done+2337000: cap 3: GC working+2337000: cap 3: GC idle+2337000: cap 3: GC done+2337000: cap 3: GC working+2337000: cap 3: GC idle+2337000: cap 3: GC done+2338000: cap 3: GC working+2338000: cap 3: GC idle+2338000: cap 3: GC done+2351000: cap 3: finished GC+2352000: cap 0: finished GC+2352000: cap 0: running thread 5+2352000: cap 1: finished GC+2352000: cap 2: finished GC+2353000: cap 1: running thread 6+2353000: cap 2: running thread 4+2353000: cap 3: running thread 3+2356000: cap 0: stopping thread 5 (thread yielding)+2356000: cap 0: thread 5 is runnable+2356000: cap 1: stopping thread 6 (thread yielding)+2356000: cap 1: thread 6 is runnable+2356000: cap 2: stopping thread 4 (thread yielding)+2356000: cap 2: thread 4 is runnable+2357000: cap 0: running thread 5+2357000: cap 1: running thread 6+2357000: cap 2: running thread 4+2357000: cap 3: stopping thread 3 (thread yielding)+2357000: cap 3: thread 3 is runnable+2357000: cap 3: running thread 3+2451000: cap 2: stopping thread 4 (thread yielding)+2451000: cap 2: thread 4 is runnable+2452000: cap 3: stopping thread 3 (thread blocked)+2452000: cap 3: creating thread 7+2453000: cap 2: running thread 4+2453000: cap 3: creating spark thread 7+2453000: cap 3: thread 7 is runnable+2463000: cap 3: running thread 7+2465000: cap 3: running a local spark+2480000: cap 3: stopping thread 7 (stack overflow)+2481000: cap 3: running thread 7+2749000: cap 2: stopping thread 4 (heap overflow)+2750000: cap 2: requesting parallel GC+2751000: cap 1: stopping thread 6 (thread yielding)+2751000: cap 3: stopping thread 7 (thread yielding)+2752000: cap 1: thread 6 is runnable+2752000: cap 1: starting GC+2752000: cap 3: thread 7 is runnable+2752000: cap 3: starting GC+6061000: cap 0: stopping thread 5 (thread yielding)+6062000: cap 0: thread 5 is runnable+6062000: cap 0: starting GC+6063000: cap 2: starting GC+6074000: cap 1: GC working+6075000: cap 0: GC working+6075000: cap 2: GC working+6076000: cap 3: GC working+6079000: cap 2: GC idle+6082000: cap 1: GC idle+6084000: cap 0: GC idle+6090000: cap 0: GC done+6090000: cap 1: GC done+6090000: cap 2: GC done+6090000: cap 3: GC idle+6090000: cap 3: GC done+6091000: cap 2: GC working+6091000: cap 2: GC idle+6091000: cap 2: GC done+6091000: cap 2: GC working+6091000: cap 2: GC idle+6091000: cap 2: GC done+6092000: cap 2: GC working+6092000: cap 2: GC idle+6092000: cap 2: GC done+6107000: cap 0: finished GC+6107000: cap 2: finished GC+6108000: cap 0: running thread 5+6108000: cap 1: finished GC+6108000: cap 1: running thread 6+6108000: cap 2: running thread 4+6108000: cap 3: finished GC+6109000: cap 3: running thread 7+6113000: cap 1: stopping thread 6 (thread yielding)+6113000: cap 1: thread 6 is runnable+6114000: cap 1: running thread 6+6114000: cap 2: stopping thread 4 (thread yielding)+6115000: cap 0: stopping thread 5 (thread yielding)+6115000: cap 2: thread 4 is runnable+6115000: cap 2: running thread 4+6115000: cap 3: stopping thread 7 (thread yielding)+6115000: cap 3: thread 7 is runnable+6116000: cap 0: thread 5 is runnable+6116000: cap 0: running thread 5+6116000: cap 3: running thread 7+6403000: cap 2: stopping thread 4 (heap overflow)+6403000: cap 2: requesting parallel GC+6404000: cap 0: stopping thread 5 (thread yielding)+6404000: cap 0: thread 5 is runnable+6404000: cap 1: stopping thread 6 (heap overflow)+6404000: cap 1: thread 6 is runnable+6404000: cap 3: stopping thread 7 (thread yielding)+6405000: cap 0: starting GC+6405000: cap 1: starting GC+6405000: cap 3: thread 7 is runnable+6405000: cap 3: starting GC+6406000: cap 2: starting GC+6414000: cap 3: GC working+6415000: cap 0: GC working+6415000: cap 1: GC working+6417000: cap 2: GC working+6420000: cap 1: GC idle+6421000: cap 0: GC idle+6422000: cap 2: GC idle+6425000: cap 0: GC done+6425000: cap 1: GC done+6425000: cap 2: GC done+6425000: cap 3: GC idle+6425000: cap 3: GC done+6426000: cap 2: GC working+6426000: cap 2: GC idle+6426000: cap 2: GC done+6426000: cap 2: GC working+6426000: cap 2: GC idle+6427000: cap 2: GC done+6427000: cap 2: GC working+6427000: cap 2: GC idle+6427000: cap 2: GC done+6440000: cap 0: finished GC+6440000: cap 2: finished GC+6441000: cap 0: running thread 5+6441000: cap 1: finished GC+6441000: cap 1: running thread 6+6441000: cap 2: running thread 4+6441000: cap 3: finished GC+6442000: cap 3: running thread 7+6445000: cap 0: stopping thread 5 (thread yielding)+6445000: cap 0: thread 5 is runnable+6445000: cap 1: stopping thread 6 (thread yielding)+6445000: cap 3: stopping thread 7 (thread yielding)+6445000: cap 3: thread 7 is runnable+6445000: cap 3: running thread 7+6446000: cap 0: running thread 5+6446000: cap 1: thread 6 is runnable+6446000: cap 1: running thread 6+6446000: cap 2: stopping thread 4 (thread yielding)+6446000: cap 2: thread 4 is runnable+6446000: cap 2: running thread 4+6648000: cap 1: stealing a spark from cap 0+6653000: cap 0: stopping thread 5 (thread blocked)+6653000: cap 0: creating thread 8+6653000: cap 1: stopping thread 6 (thread yielding)+6653000: cap 1: thread 6 is runnable+6654000: cap 0: creating spark thread 8+6654000: cap 0: thread 8 is runnable+6654000: cap 0: running thread 8+6655000: cap 0: running a local spark+6655000: cap 1: running thread 6+6656000: cap 2: waking up thread 3 on cap 3+6658000: cap 2: stealing a spark from cap 1+6658000: cap 3: stopping thread 7 (thread yielding)+6658000: cap 3: thread 7 is runnable+6659000: cap 3: waking up thread 3 on cap 3+6659000: cap 3: thread 3 is runnable+6660000: cap 3: running thread 7+6727000: cap 2: stopping thread 4 (heap overflow)+6728000: cap 1: stopping thread 6 (thread yielding)+6728000: cap 2: requesting parallel GC+6729000: cap 0: stopping thread 8 (thread yielding)+6729000: cap 0: thread 8 is runnable+6729000: cap 0: starting GC+6729000: cap 1: thread 6 is runnable+6729000: cap 1: starting GC+6729000: cap 3: stopping thread 7 (thread yielding)+6729000: cap 3: thread 7 is runnable+6730000: cap 2: starting GC+6730000: cap 3: starting GC+6737000: cap 0: GC working+6737000: cap 2: GC working+6738000: cap 1: GC working+6739000: cap 3: GC working+6741000: cap 2: GC idle+6744000: cap 1: GC idle+6747000: cap 3: GC idle+6748000: cap 0: GC idle+6748000: cap 1: GC done+6748000: cap 2: GC done+6749000: cap 0: GC done+6749000: cap 2: GC working+6749000: cap 2: GC idle+6749000: cap 2: GC done+6749000: cap 3: GC done+6750000: cap 2: GC working+6750000: cap 2: GC idle+6750000: cap 2: GC done+6750000: cap 2: GC working+6750000: cap 2: GC idle+6750000: cap 2: GC done+6764000: cap 0: finished GC+6764000: cap 0: running thread 8+6764000: cap 1: finished GC+6764000: cap 2: finished GC+6765000: cap 1: running thread 6+6765000: cap 2: running thread 4+6765000: cap 3: finished GC+6768000: cap 1: stopping thread 6 (thread yielding)+6769000: cap 0: stopping thread 8 (thread yielding)+6769000: cap 0: thread 8 is runnable+6769000: cap 1: thread 6 is runnable+6769000: cap 1: running thread 6+6769000: cap 2: stopping thread 4 (thread yielding)+6769000: cap 2: thread 4 is runnable+6770000: cap 2: running thread 4+6777000: cap 3: running thread 3+6780000: cap 3: stopping thread 3 (thread blocked)+6782000: cap 1: stopping thread 6 (thread blocked)+6782000: cap 2: stopping thread 4 (thread yielding)+6782000: cap 2: thread 4 is runnable+6784000: cap 1: creating thread 9+6784000: cap 1: creating spark thread 9+6784000: cap 2: running thread 4+6785000: cap 1: thread 9 is runnable+6785000: cap 1: running thread 9+6786000: cap 1: stealing a spark from cap 0+6790000: cap 3: running thread 7+6791000: cap 0: running thread 8+6794000: cap 3: stopping thread 7 (thread yielding)+6794000: cap 3: thread 7 is runnable+6795000: cap 0: stopping thread 8 (thread yielding)+6795000: cap 0: thread 8 is runnable+6795000: cap 3: running thread 7+6796000: cap 0: running thread 8+6802000: cap 2: waking up thread 6 on cap 1+6803000: cap 2: stealing a spark from cap 0+6804000: cap 1: stopping thread 9 (thread yielding)+6804000: cap 1: thread 9 is runnable+6805000: cap 1: waking up thread 6 on cap 1+6805000: cap 1: thread 6 is runnable+6805000: cap 1: running thread 9+6818000: cap 1: stopping thread 9 (thread finished)+6819000: cap 1: running thread 6+6819000: cap 1: waking up thread 5 on cap 0+6820000: cap 0: stopping thread 8 (thread yielding)+6820000: cap 1: stealing a spark from cap 3+6821000: cap 0: thread 8 is runnable+6821000: cap 0: waking up thread 5 on cap 0+6821000: cap 0: thread 5 is runnable+6821000: cap 0: running thread 8+6828000: cap 0: stopping thread 8 (thread blocked)+6828000: cap 0: running thread 5+6828000: cap 2: stopping thread 4 (thread yielding)+6829000: cap 2: thread 4 is runnable+6829000: cap 2: running thread 4+6830000: cap 0: stopping thread 5 (thread blocked)+6831000: cap 0: creating thread 10+6831000: cap 0: creating spark thread 10+6831000: cap 0: thread 10 is runnable+6831000: cap 0: running thread 10+6832000: cap 0: stealing a spark from cap 1+6857000: cap 2: waking up thread 8 on cap 0+6857000: cap 2: stealing a spark from cap 0+6858000: cap 0: stopping thread 10 (thread yielding)+6858000: cap 0: thread 10 is runnable+6858000: cap 0: waking up thread 8 on cap 0+6859000: cap 0: thread 8 is runnable+6859000: cap 0: running thread 10+6940000: cap 0: stopping thread 10 (thread blocked)+6940000: cap 0: running thread 8+6940000: cap 2: stopping thread 4 (thread yielding)+6941000: cap 0: waking up thread 5 on cap 0+6941000: cap 0: thread 5 is runnable+6941000: cap 0: stopping thread 8 (thread finished)+6941000: cap 0: running thread 5+6941000: cap 2: thread 4 is runnable+6941000: cap 2: running thread 4+6942000: cap 0: waking up thread 3 on cap 3+6942000: cap 0: stealing a spark from cap 1+6943000: cap 3: stopping thread 7 (thread yielding)+6943000: cap 3: thread 7 is runnable+6944000: cap 2: waking up thread 10 on cap 0+6944000: cap 3: waking up thread 3 on cap 3+6944000: cap 3: thread 3 is runnable+6944000: cap 3: running thread 7+6945000: cap 0: stopping thread 5 (thread yielding)+6945000: cap 0: thread 5 is runnable+6945000: cap 2: stealing a spark from cap 0+6946000: cap 0: waking up thread 10 on cap 0+6946000: cap 0: thread 10 is runnable+6946000: cap 0: running thread 5+6949000: cap 0: stopping thread 5 (thread blocked)+6949000: cap 0: running thread 10+6950000: cap 0: running a local spark+6950000: cap 2: stopping thread 4 (thread yielding)+6950000: cap 2: thread 4 is runnable+6950000: cap 2: running thread 4+6974000: cap 0: stopping thread 10 (thread yielding)+6974000: cap 1: stopping thread 6 (thread blocked)+6975000: cap 0: thread 10 is runnable+6975000: cap 0: running thread 10+6975000: cap 1: creating thread 11+6975000: cap 1: creating spark thread 11+6976000: cap 1: thread 11 is runnable+6976000: cap 1: running thread 11+6977000: cap 1: running a local spark+7019000: cap 0: running a local spark+7046000: cap 2: waking up thread 5 on cap 0+7047000: cap 0: stopping thread 10 (thread yielding)+7047000: cap 0: thread 10 is runnable+7047000: cap 0: waking up thread 5 on cap 0+7047000: cap 0: thread 5 is runnable+7047000: cap 2: stealing a spark from cap 1+7048000: cap 0: running thread 10+7066000: cap 2: stopping thread 4 (heap overflow)+7066000: cap 2: requesting parallel GC+7067000: cap 1: stopping thread 11 (thread yielding)+7068000: cap 1: thread 11 is runnable+7068000: cap 1: starting GC+7068000: cap 3: stopping thread 7 (thread yielding)+7068000: cap 3: thread 7 is runnable+7068000: cap 3: starting GC+7069000: cap 0: stopping thread 10 (thread yielding)+7069000: cap 0: thread 10 is runnable+7070000: cap 0: starting GC+7070000: cap 2: starting GC+7078000: cap 0: GC working+7078000: cap 2: GC working+7083000: cap 2: GC idle+7090000: cap 0: GC idle+7111000: cap 1: GC working+7121000: cap 1: GC idle+7141000: cap 3: GC working+7150000: cap 0: GC done+7150000: cap 1: GC done+7150000: cap 2: GC done+7150000: cap 3: GC idle+7150000: cap 3: GC done+7151000: cap 2: GC working+7151000: cap 2: GC idle+7151000: cap 2: GC done+7151000: cap 2: GC working+7152000: cap 2: GC idle+7152000: cap 2: GC done+7152000: cap 2: GC working+7152000: cap 2: GC idle+7152000: cap 2: GC done+7166000: cap 2: finished GC+7167000: cap 0: finished GC+7167000: cap 0: running thread 5+7167000: cap 1: finished GC+7168000: cap 1: running thread 11+7168000: cap 2: running thread 4+7168000: cap 3: finished GC+7169000: cap 0: stopping thread 5 (thread blocked)+7170000: cap 0: running thread 10+7172000: cap 1: stopping thread 11 (thread yielding)+7172000: cap 1: thread 11 is runnable+7172000: cap 2: stopping thread 4 (thread yielding)+7172000: cap 2: thread 4 is runnable+7174000: cap 0: stopping thread 10 (thread yielding)+7174000: cap 0: thread 10 is runnable+7174000: cap 0: running thread 10+7174000: cap 2: running thread 4+7175000: cap 1: running thread 11+7228000: cap 0: waking up thread 5 on cap 0+7228000: cap 0: thread 5 is runnable+7228000: cap 0: stopping thread 10 (thread finished)+7228000: cap 0: running thread 5+7229000: cap 0: waking up thread 6 on cap 1+7230000: cap 0: stealing a spark from cap 1+7231000: cap 1: stopping thread 11 (thread yielding)+7231000: cap 1: thread 11 is runnable+7231000: cap 1: waking up thread 6 on cap 1+7232000: cap 1: thread 6 is runnable+7232000: cap 1: running thread 11+7249000: cap 1: stopping thread 11 (thread blocked)+7249000: cap 1: running thread 6+7250000: cap 0: stopping thread 5 (thread yielding)+7250000: cap 0: thread 5 is runnable+7251000: cap 0: running thread 5+7253000: cap 1: stopping thread 6 (thread blocked)+7254000: cap 1: creating thread 12+7254000: cap 1: creating spark thread 12+7254000: cap 1: thread 12 is runnable+7254000: cap 1: running thread 12+7255000: cap 1: stealing a spark from cap 2+7294000: cap 1: stopping thread 12 (thread yielding)+7294000: cap 2: stopping thread 4 (thread blocked)+7295000: cap 1: thread 12 is runnable+7295000: cap 1: running thread 12+7295000: cap 2: creating thread 13+7295000: cap 2: creating spark thread 13+7295000: cap 2: thread 13 is runnable+7296000: cap 2: running thread 13+7297000: cap 2: running a local spark+7300000: cap 0: waking up thread 11 on cap 1+7301000: cap 0: stealing a spark from cap 3+7301000: cap 1: stopping thread 12 (thread yielding)+7301000: cap 1: thread 12 is runnable+7302000: cap 1: waking up thread 11 on cap 1+7302000: cap 1: thread 11 is runnable+7303000: cap 1: running thread 12+7341000: cap 1: waking up thread 4 on cap 2+7342000: cap 1: stopping thread 12 (thread finished)+7342000: cap 1: running thread 11+7342000: cap 2: stopping thread 13 (thread yielding)+7342000: cap 2: thread 13 is runnable+7343000: cap 1: waking up thread 6 on cap 1+7343000: cap 2: waking up thread 4 on cap 2+7343000: cap 2: thread 4 is runnable+7344000: cap 1: thread 6 is runnable+7344000: cap 1: stopping thread 11 (thread finished)+7344000: cap 1: running thread 6+7344000: cap 2: running thread 13+7346000: cap 1: stopping thread 6 (thread blocked)+7346000: cap 1: creating thread 14+7346000: cap 2: stopping thread 13 (thread yielding)+7346000: cap 2: thread 13 is runnable+7347000: cap 1: creating spark thread 14+7347000: cap 1: thread 14 is runnable+7347000: cap 1: running thread 14+7347000: cap 2: running thread 4+7347000: cap 2: stopping thread 4 (thread blocked)+7348000: cap 1: stealing a spark from cap 0+7348000: cap 2: running thread 13+7349000: cap 2: waking up thread 4 on cap 2+7349000: cap 2: thread 4 is runnable+7349000: cap 2: stopping thread 13 (thread finished)+7350000: cap 2: running thread 4+7350000: cap 2: waking up thread 6 on cap 1+7350000: cap 2: stealing a spark from cap 0+7351000: cap 1: stopping thread 14 (thread yielding)+7351000: cap 1: thread 14 is runnable+7351000: cap 1: waking up thread 6 on cap 1+7352000: cap 1: thread 6 is runnable+7353000: cap 1: running thread 14+7468000: cap 2: stopping thread 4 (heap overflow)+7468000: cap 2: requesting parallel GC+7469000: cap 1: stopping thread 14 (thread yielding)+7469000: cap 1: thread 14 is runnable+7471000: cap 1: starting GC+7472000: cap 0: stopping thread 5 (thread yielding)+7472000: cap 0: thread 5 is runnable+7473000: cap 0: starting GC+7502000: cap 3: starting GC+7503000: cap 2: starting GC+7510000: cap 1: GC working+7514000: cap 2: GC working+7518000: cap 2: GC idle+7518000: cap 3: GC working+7523000: cap 3: GC idle+7524000: cap 1: GC idle+8359000: cap 0: GC working+8368000: cap 0: GC idle+8368000: cap 0: GC done+8368000: cap 1: GC done+8368000: cap 2: GC done+8368000: cap 3: GC done+8369000: cap 2: GC working+8369000: cap 2: GC idle+8369000: cap 2: GC done+8369000: cap 2: GC working+8369000: cap 2: GC idle+8369000: cap 2: GC done+8370000: cap 2: GC working+8370000: cap 2: GC idle+8370000: cap 2: GC done+8383000: cap 0: finished GC+8383000: cap 2: finished GC+8384000: cap 0: running thread 5+8384000: cap 1: finished GC+8384000: cap 1: running thread 6+8384000: cap 2: running thread 4+8384000: cap 3: finished GC+8384000: cap 3: running thread 3+8385000: cap 1: stopping thread 6 (thread finished)+8386000: cap 1: running thread 14+8389000: cap 2: stopping thread 4 (thread yielding)+8389000: cap 2: thread 4 is runnable+8389000: cap 2: running thread 4+8389000: cap 3: stopping thread 3 (thread blocked)+8390000: cap 1: stopping thread 14 (thread yielding)+8390000: cap 1: thread 14 is runnable+8393000: cap 0: stopping thread 5 (thread yielding)+8393000: cap 0: thread 5 is runnable+8400000: cap 3: running thread 7+8403000: cap 3: stopping thread 7 (thread yielding)+8403000: cap 3: thread 7 is runnable+8403000: cap 3: running thread 7+8404000: cap 1: running thread 14+8465000: cap 2: stealing a spark from cap 0+8504000: cap 1: stealing a spark from cap 0+8623000: cap 3: waking up thread 3 on cap 3+8623000: cap 3: thread 3 is runnable+8623000: cap 3: stopping thread 7 (thread finished)+8634000: cap 0: running thread 5+8635000: cap 3: running thread 3+8640000: cap 0: stopping thread 5 (thread yielding)+8640000: cap 0: thread 5 is runnable+8640000: cap 3: stopping thread 3 (thread blocked)+8641000: cap 3: creating thread 15+8641000: cap 3: creating spark thread 15+8641000: cap 3: thread 15 is runnable+8649000: cap 3: running thread 15+8650000: cap 3: running a local spark+8661000: cap 3: stopping thread 15 (stack overflow)+8663000: cap 3: running thread 15+8670000: cap 2: stopping thread 4 (heap overflow)+8670000: cap 2: requesting parallel GC+8671000: cap 1: stopping thread 14 (thread yielding)+8671000: cap 1: thread 14 is runnable+8671000: cap 3: stopping thread 15 (thread yielding)+8671000: cap 3: thread 15 is runnable+8671000: cap 3: starting GC+8672000: cap 1: starting GC+13162000: cap 0: starting GC+13162000: cap 2: starting GC+13170000: cap 1: GC working+13171000: cap 0: GC working+13172000: cap 2: GC working+13177000: cap 1: GC idle+13178000: cap 0: GC idle+13178000: cap 2: GC idle+13186000: cap 3: GC working+13204000: cap 1: GC done+13204000: cap 2: GC done+13204000: cap 3: GC idle+13204000: cap 3: GC done+13205000: cap 2: GC working+13205000: cap 2: GC idle+13205000: cap 2: GC done+13205000: cap 2: GC working+13205000: cap 2: GC idle+13205000: cap 2: GC done+13206000: cap 2: GC working+13206000: cap 2: GC idle+13206000: cap 2: GC done+13229000: cap 0: GC done+13244000: cap 0: finished GC+13244000: cap 2: finished GC+13245000: cap 0: running thread 5+13245000: cap 1: finished GC+13245000: cap 1: running thread 14+13245000: cap 2: running thread 4+13249000: cap 1: stopping thread 14 (thread yielding)+13249000: cap 1: thread 14 is runnable+13249000: cap 2: stopping thread 4 (thread yielding)+13249000: cap 2: thread 4 is runnable+13249000: cap 2: running thread 4+13250000: cap 0: stopping thread 5 (thread yielding)+13250000: cap 0: thread 5 is runnable+13250000: cap 1: running thread 14+13251000: cap 0: running thread 5+13292000: cap 2: stealing a spark from cap 0+13294000: cap 1: stealing a spark from cap 3+13312000: cap 0: stopping thread 5 (thread blocked)+13312000: cap 2: stopping thread 4 (thread yielding)+13312000: cap 2: thread 4 is runnable+13313000: cap 0: creating thread 16+13313000: cap 0: creating spark thread 16+13313000: cap 0: thread 16 is runnable+13314000: cap 0: running thread 16+13314000: cap 0: stealing a spark from cap 1+13314000: cap 2: running thread 4+13340000: cap 2: waking up thread 5 on cap 0+13341000: cap 0: stopping thread 16 (thread yielding)+13341000: cap 0: thread 16 is runnable+13341000: cap 2: stealing a spark from cap 1+13342000: cap 0: waking up thread 5 on cap 0+13342000: cap 0: thread 5 is runnable+13342000: cap 0: running thread 16+13364000: cap 0: stopping thread 16 (thread yielding)+13364000: cap 0: thread 16 is runnable+13364000: cap 0: running thread 16+13364000: cap 1: stopping thread 14 (thread blocked)+13365000: cap 1: creating thread 17+13365000: cap 1: creating spark thread 17+13365000: cap 1: thread 17 is runnable+13365000: cap 1: running thread 17+13365000: cap 1: stealing a spark from cap 3+13375000: cap 2: stealing a spark from cap 1+13423000: cap 2: stealing a spark from cap 1+13428000: cap 0: waking up thread 14 on cap 1+13429000: cap 0: stopping thread 16 (thread finished)+13429000: cap 0: running thread 5+13430000: cap 1: stopping thread 17 (thread yielding)+13430000: cap 1: thread 17 is runnable+13431000: cap 1: waking up thread 14 on cap 1+13431000: cap 1: thread 14 is runnable+13431000: cap 1: running thread 17+13432000: cap 0: waking up thread 3 on cap 3+13433000: cap 0: stealing a spark from cap 3+13442000: cap 1: stopping thread 17 (thread blocked)+13442000: cap 1: running thread 14+13442000: cap 2: stopping thread 4 (thread yielding)+13442000: cap 2: thread 4 is runnable+13443000: cap 1: stealing a spark from cap 0+13443000: cap 2: running thread 4+13453000: cap 2: waking up thread 17 on cap 1+13454000: cap 2: stealing a spark from cap 0+13455000: cap 1: stopping thread 14 (thread yielding)+13455000: cap 1: thread 14 is runnable+13456000: cap 1: waking up thread 17 on cap 1+13456000: cap 1: thread 17 is runnable+13456000: cap 1: running thread 14+13476000: cap 1: stopping thread 14 (thread finished)+13476000: cap 1: running thread 17+13476000: cap 1: stealing a spark from cap 3+13505000: cap 2: stealing a spark from cap 1+13539000: cap 2: stopping thread 4 (heap overflow)+13539000: cap 2: requesting parallel GC+13541000: cap 0: stopping thread 5 (thread yielding)+13541000: cap 0: thread 5 is runnable+13541000: cap 0: starting GC+13541000: cap 1: stopping thread 17 (thread yielding)+13541000: cap 1: thread 17 is runnable+13541000: cap 1: starting GC+13578000: cap 3: finished GC+13578000: cap 3: starting GC+13579000: cap 2: starting GC+13585000: cap 1: GC working+13591000: cap 2: GC working+13593000: cap 3: GC working+13595000: cap 2: GC idle+13596000: cap 1: GC idle+13603000: cap 3: GC idle+13880000: cap 0: GC working+13885000: cap 0: GC idle+13885000: cap 0: GC done+13885000: cap 2: GC done+13886000: cap 1: GC done+13886000: cap 2: GC working+13886000: cap 2: GC idle+13886000: cap 2: GC done+13886000: cap 2: GC working+13886000: cap 2: GC idle+13886000: cap 2: GC done+13887000: cap 2: GC working+13887000: cap 2: GC idle+13887000: cap 2: GC done+13911000: cap 3: GC done+13924000: cap 2: finished GC+13925000: cap 1: finished GC+13925000: cap 1: running thread 17+13925000: cap 2: running thread 4+13925000: cap 3: finished GC+13926000: cap 3: running thread 15+13928000: cap 1: stopping thread 17 (thread yielding)+13928000: cap 2: stopping thread 4 (thread yielding)+13929000: cap 1: thread 17 is runnable+13929000: cap 1: running thread 17+13929000: cap 2: thread 4 is runnable+13929000: cap 2: running thread 4+13931000: cap 3: stopping thread 15 (thread yielding)+13931000: cap 3: thread 15 is runnable+13931000: cap 3: waking up thread 3 on cap 3+13931000: cap 3: thread 3 is runnable+13932000: cap 3: running thread 15+13941000: cap 2: stealing a spark from cap 1+13944000: cap 1: stopping thread 17 (thread blocked)+13944000: cap 2: stopping thread 4 (thread yielding)+13945000: cap 1: creating thread 18+13945000: cap 1: creating spark thread 18+13945000: cap 1: thread 18 is runnable+13945000: cap 1: running thread 18+13945000: cap 2: thread 4 is runnable+13946000: cap 1: stealing a spark from cap 3+13946000: cap 2: running thread 4+13990000: cap 2: waking up thread 17 on cap 1+13991000: cap 2: stealing a spark from cap 1+13992000: cap 1: stopping thread 18 (thread yielding)+13992000: cap 1: thread 18 is runnable+13992000: cap 1: waking up thread 17 on cap 1+13992000: cap 1: thread 17 is runnable+13993000: cap 1: running thread 18+14018000: cap 1: stopping thread 18 (thread blocked)+14018000: cap 1: running thread 17+14018000: cap 1: running a local spark+14019000: cap 2: stopping thread 4 (thread yielding)+14019000: cap 2: thread 4 is runnable+14020000: cap 2: running thread 4+14029000: cap 2: waking up thread 18 on cap 1+14030000: cap 1: stopping thread 17 (thread yielding)+14030000: cap 1: thread 17 is runnable+14030000: cap 1: waking up thread 18 on cap 1+14030000: cap 2: stealing a spark from cap 3+14031000: cap 1: thread 18 is runnable+14031000: cap 1: running thread 17+14035000: cap 3: stopping thread 15 (thread blocked)+14036000: cap 2: stopping thread 4 (thread yielding)+14036000: cap 2: thread 4 is runnable+14036000: cap 2: running thread 4+14042000: cap 0: finished GC+14042000: cap 0: running thread 5+14042000: cap 3: running thread 3+14045000: cap 3: stopping thread 3 (thread blocked)+14047000: cap 0: stopping thread 5 (thread yielding)+14047000: cap 0: thread 5 is runnable+14048000: cap 0: running thread 5+14052000: cap 0: stopping thread 5 (thread finished)+14057000: cap 2: waking up thread 15 on cap 3+14061000: cap 2: stopping thread 4 (thread finished)+14064000: cap 3: waking up thread 15 on cap 3+14065000: cap 3: thread 15 is runnable+14065000: cap 3: running thread 15+14068000: cap 1: stopping thread 17 (thread yielding)+14068000: cap 1: thread 17 is runnable+14068000: cap 3: stopping thread 15 (thread blocked)+14070000: cap 0: thread 17 is runnable+14070000: cap 1: migrating thread 17 to cap 0+14075000: cap 0: running thread 17+14078000: cap 1: running thread 18+14079000: cap 1: stopping thread 18 (thread blocked)+14080000: cap 0: stopping thread 17 (thread yielding)+14080000: cap 0: thread 17 is runnable+14081000: cap 0: running thread 17+14094000: cap 0: waking up thread 18 on cap 1+14096000: cap 0: stopping thread 17 (thread finished)+14098000: cap 1: waking up thread 18 on cap 1+14098000: cap 1: thread 18 is runnable+14099000: cap 1: running thread 18+14099000: cap 1: waking up thread 15 on cap 3+14102000: cap 1: stopping thread 18 (thread finished)+14103000: cap 3: waking up thread 15 on cap 3+14103000: cap 3: thread 15 is runnable+14103000: cap 3: running thread 15+14103000: cap 3: waking up thread 3 on cap 3+14104000: cap 3: thread 3 is runnable+14104000: cap 3: stopping thread 15 (thread finished)+14110000: cap 3: running thread 3+14146000: cap 3: stopping thread 3 (making a foreign call)+14147000: cap 3: running thread 3+14147000: cap 3: stopping thread 3 (making a foreign call)+14157000: cap 3: running thread 3+14191000: cap 3: stopping thread 3 (thread finished)+14204000: cap 3: requesting sequential GC+14206000: cap 3: starting GC+14229000: cap 0: GC working+14242000: cap 0: GC idle+14242000: cap 0: GC done+14243000: cap 0: GC working+14243000: cap 0: GC idle+14244000: cap 0: GC done+14244000: cap 0: GC working+14244000: cap 0: GC idle+14244000: cap 0: GC done+14244000: cap 0: GC working+14244000: cap 0: GC idle+14245000: cap 0: GC done+14254000: cap 3: finished GC+14261000: cap 0: running thread 2+14306000: cap 0: stopping thread 2 (thread finished)+14344000: cap 0: shutting down+14345000: cap 1: shutting down+14346000: cap 2: shutting down+14346000: cap 3: shutting down+