diff --git a/I'mHereOnlyToPleaseHaddock.hs b/I'mHereOnlyToPleaseHaddock.hs
new file mode 100644
--- /dev/null
+++ b/I'mHereOnlyToPleaseHaddock.hs
@@ -0,0 +1,2 @@
+
+module I'mHereOnlyToPleaseHaddock where
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2015, Antonio Nikishaev
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Antonio Nikishaev nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Main.hs b/Main.hs
new file mode 100644
--- /dev/null
+++ b/Main.hs
@@ -0,0 +1,80 @@
+module Main where
+
+import Text.Printf
+import Data.List
+import Pipes
+import qualified Pipes.Prelude as P
+import Control.Monad
+import Options.Applicative
+import System.IO
+import System.Exit
+import Control.Monad.Trans.Either
+
+
+
+type State = ([String], Int)
+type Foldee = (State, Maybe String)
+
+-- COST CENTRE    ticks
+-- A       …      n₁                     A n₁
+--  B      …      n₂            ===>     A;B n₂
+--  C      …      n₃                     A;C n₃
+-- 
+conv :: Foldee -> String -> Foldee
+conv (state@(stack,prevLevel),_) str
+    | length ws == 10 && ticks>0 = ((stack',level), Just $ printf "%s %d" (intercalate ";" stack') ticks)
+    | otherwise                  = (state,          Nothing)
+    where 
+      ws = words str
+      level = length . takeWhile (==' ') $ str
+      fun = printf "%s:%s" (ws!!1) (ws!!0)
+      ticks = read (ws!!8) :: Int
+      stack' = take (length stack - (prevLevel-level+1)) stack ++ [fun]
+
+
+data Status = OK | PTooSmall deriving Show
+
+
+work :: Producer String (EitherT Status IO) ()
+     -> Producer String (EitherT Status IO) ()
+work input =
+     input >-> P.dropWhile (not . ((&&) <$> isPrefixOf "COST CENTRE"
+                                        <*> isInfixOf "no."))
+           >-> do line <- await
+                  when ("%alloc" `isSuffixOf` line) . lift $ left PTooSmall
+                  cat
+           >-> P.dropWhile null
+           >-> P.scan conv (([],0),Nothing) snd
+           >-> P.concat
+           >-> P.tee P.stdoutLn
+
+
+
+data Options = Options {
+      inputFile :: Maybe String
+}
+
+options = Options <$> optional (argument str (metavar "PROF-FILE"))
+
+
+main :: IO ()
+main = execParser opts >>= main'
+    where opts = info (helper <*> options) fullDesc
+
+
+main' :: Options -> IO ()
+main' opts = do
+  inp <- case inputFile opts of
+           Just file -> P.fromHandle <$> openFile file ReadMode
+           Nothing   -> return P.stdinLn
+
+  r <- runEitherT . P.length $ work inp
+
+  case r of
+    Left PTooSmall -> die "Error: looks like it’s -p output, I need a -P one"
+    Right 0        -> die "Error: the input doesn't look like a .prof"
+    Right _        -> return ()
+
+
+die :: String -> IO ()
+die str = hPutStrLn stderr str >> exitWith (ExitFailure 1)
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/flamingra.cabal b/flamingra.cabal
new file mode 100644
--- /dev/null
+++ b/flamingra.cabal
@@ -0,0 +1,59 @@
+
+name:                flamingra
+version:             0.1.0.0
+synopsis:            FlameGraphs of profiling
+description:         Hack to turn the profiling output into the format suitable for FlameGraph.
+                     It will be (kind of) interactive (e.g. <http://lelf.lu/files/pandoc.svg>).
+                     .
+                     <<pandoc.svg>>
+                     .
+                     =TL;DR (and the only one available) guide:
+                     .
+                     > some-program +RTS -P
+                     > wget https://raw.githubusercontent.com/brendangregg/FlameGraph/master/flamegraph.pl
+                     > flamingra some-program.prof | perl flamegraph.pl > picturesque.svg
+                     .
+                     =Usage:
+                     .
+                     > flamingra out.prof | …
+                     or
+                     .
+                     > … | flamingra | …
+                     .
+                     where out.prof is @-P@ profiling output.
+
+license:             BSD3
+license-file:        LICENSE
+author:              Antonio Nikishaev
+maintainer:          me@lelf.lu
+-- copyright:           
+category:            Development
+build-type:          Simple
+extra-doc-files:     pandoc.svg
+cabal-version:       >=1.10
+tested-with:         GHC==7.8.3
+
+source-repository head
+  type:     git
+  location: https://github.com/llelf/flamingra
+
+source-repository head
+  type:     darcs
+  location: http://hub.darcs.net/lelf/flamingra
+
+
+
+executable flamingra
+  main-is:             Main.hs
+  -- other-modules:       
+  -- other-extensions:    
+  build-depends:       base >=4.7 && <5, pipes,
+                       optparse-applicative, either
+  -- hs-source-dirs:      
+  default-language:    Haskell2010
+
+library
+  exposed-modules: I'mHereOnlyToPleaseHaddock
+  default-language: Haskell2010
+  build-depends:   base < 666
+
diff --git a/pandoc.svg b/pandoc.svg
new file mode 100644
--- /dev/null
+++ b/pandoc.svg
@@ -0,0 +1,429 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" width="1024" height="472" onload="init(evt)" viewBox="0 0 1024 472" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<defs >
+	<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
+		<stop stop-color="#eeeeee" offset="5%" />
+		<stop stop-color="#eeeeb0" offset="95%" />
+	</linearGradient>
+</defs>
+<style type="text/css">
+	.func_g:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
+</style>
+<script type="text/ecmascript">
+<![CDATA[
+	var details, svg;
+	function init(evt) { 
+		details = document.getElementById("details").firstChild; 
+		svg = document.getElementsByTagName("svg")[0];
+	}
+	function s(info) { details.nodeValue = "Function: " + info; }
+	function c() { details.nodeValue = ' '; }
+	function find_child(parent, name, attr) {
+		var children = parent.childNodes;
+		for (var i=0; i<children.length;i++) {
+			if (children[i].tagName == name)
+				return (attr != undefined) ? children[i].attributes[attr].value : children[i];
+		}
+		return;
+	}
+	function orig_save(e, attr, val) {
+		if (e.attributes["_orig_"+attr] != undefined) return;
+		if (e.attributes[attr] == undefined) return;
+		if (val == undefined) val = e.attributes[attr].value;
+		e.setAttribute("_orig_"+attr, val);
+	}
+	function orig_load(e, attr) {
+		if (e.attributes["_orig_"+attr] == undefined) return;
+		e.attributes[attr].value = e.attributes["_orig_"+attr].value;
+		e.removeAttribute("_orig_"+attr);
+	}
+	function update_text(e) {
+		var r = find_child(e, "rect");
+		var t = find_child(e, "text");
+		var w = parseFloat(r.attributes["width"].value) -3;
+		var txt = find_child(e, "title").textContent.replace(/\([^(]*\)/,"");
+		t.attributes["x"].value = parseFloat(r.attributes["x"].value) +3;
+		
+		// Smaller than this size won't fit anything
+		if (w < 2*11*0.59) {
+			t.textContent = "";
+			return;
+		}
+		
+		t.textContent = txt;
+		// Fit in full text width
+		if (/^ *$/.test(txt) || t.getSubStringLength(0, txt.length) < w)
+			return;
+		
+		for (var x=txt.length-2; x>0; x--) {
+			if (t.getSubStringLength(0, x+2) <= w) { 
+				t.textContent = txt.substring(0,x) + "..";
+				return;
+			}
+		}
+		t.textContent = "";
+	}
+	function zoom_reset(e) {
+		if (e.attributes != undefined) {
+			orig_load(e, "x");
+			orig_load(e, "width");
+		}
+		if (e.childNodes == undefined) return;
+		for(var i=0, c=e.childNodes; i<c.length; i++) {
+			zoom_reset(c[i]);
+		}
+	}
+	function zoom_child(e, x, ratio) {
+		if (e.attributes != undefined) {
+			if (e.attributes["x"] != undefined) {
+				orig_save(e, "x");
+				e.attributes["x"].value = (parseFloat(e.attributes["x"].value) - x - 10) * ratio + 10;
+				if(e.tagName == "text") e.attributes["x"].value = find_child(e.parentNode, "rect", "x") + 3;
+			}
+			if (e.attributes["width"] != undefined) {
+				orig_save(e, "width");
+				e.attributes["width"].value = parseFloat(e.attributes["width"].value) * ratio;
+			}
+		}
+		
+		if (e.childNodes == undefined) return;
+		for(var i=0, c=e.childNodes; i<c.length; i++) {
+			zoom_child(c[i], x-10, ratio);
+		}
+	}
+	function zoom_parent(e) {
+		if (e.attributes) {
+			if (e.attributes["x"] != undefined) {
+				orig_save(e, "x");
+				e.attributes["x"].value = 10;
+			}
+			if (e.attributes["width"] != undefined) {
+				orig_save(e, "width");
+				e.attributes["width"].value = parseInt(svg.width.baseVal.value) - (10*2);
+			}
+		}
+		if (e.childNodes == undefined) return;
+		for(var i=0, c=e.childNodes; i<c.length; i++) {
+			zoom_parent(c[i]);
+		}
+	}
+	function zoom(node) { 
+		var attr = find_child(node, "rect").attributes;
+		var width = parseFloat(attr["width"].value);
+		var xmin = parseFloat(attr["x"].value);
+		var xmax = parseFloat(xmin + width);
+		var ymin = parseFloat(attr["y"].value);
+		var ratio = (svg.width.baseVal.value - 2*10) / width;
+		
+		// XXX: Workaround for JavaScript float issues (fix me)
+		var fudge = 0.0001;
+		
+		var unzoombtn = document.getElementById("unzoom");
+		unzoombtn.style["opacity"] = "1.0";
+		
+		var el = document.getElementsByTagName("g");
+		for(var i=0;i<el.length;i++){
+			var e = el[i];
+			var a = find_child(e, "rect").attributes;
+			var ex = parseFloat(a["x"].value);
+			var ew = parseFloat(a["width"].value);
+			// Is it an ancestor
+			if (0 == 0) {
+				var upstack = parseFloat(a["y"].value) > ymin;
+			} else {
+				var upstack = parseFloat(a["y"].value) < ymin;
+			}
+			if (upstack) {
+				// Direct ancestor
+				if (ex <= xmin && (ex+ew+fudge) >= xmax) {
+					e.style["opacity"] = "0.5";
+					zoom_parent(e);
+					e.onclick = function(e){unzoom(); zoom(this);};
+					update_text(e);
+				}
+				// not in current path
+				else
+					e.style["display"] = "none";
+			}
+			// Children maybe
+			else {
+				// no common path
+				if (ex < xmin || ex + fudge >= xmax) {
+					e.style["display"] = "none";
+				}
+				else {
+					zoom_child(e, xmin, ratio);
+					e.onclick = function(e){zoom(this);};
+					update_text(e);
+				}
+			}
+		}
+	}
+	function unzoom() {
+		var unzoombtn = document.getElementById("unzoom");
+		unzoombtn.style["opacity"] = "0.0";
+		
+		var el = document.getElementsByTagName("g");
+		for(i=0;i<el.length;i++) {
+			el[i].style["display"] = "block";
+			el[i].style["opacity"] = "1";
+			zoom_reset(el[i]);
+			update_text(el[i]);
+		}
+	}	
+]]>
+</script>
+<rect x="0.0" y="0" width="1024.0" height="472.0" fill="url(#background)"  />
+<text text-anchor="middle" x="512.00" y="22" font-size="22" font-family="comic sans ms" fill="rgb(0,0,0)"  >pandoc +RTS -P</text>
+<text text-anchor="" x="10.00" y="456" font-size="11" font-family="verdana" fill="rgb(0,0,0)" id="details" > </text>
+<text text-anchor="" x="10.00" y="22" font-size="11" font-family="verdana" fill="rgb(0,0,0)" id="unzoom" onclick="unzoom()" style="opacity:0.0;cursor:pointer" >Reset Zoom</text>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:notFollowedByHtmlCloser (357 samples, 5.40%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:notFollowedByHtmlCloser (357 samples, 5.40%)</title><rect x="720.4" y="155" width="54.3" height="21.0" fill="rgb(242,13,27)" rx="2" ry="2" />
+<text text-anchor="" x="723.41" y="168.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.P..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:endline (941 samples, 14.24%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:endline (941 samples, 14.24%)</title><rect x="631.7" y="199" width="143.0" height="21.0" fill="rgb(249,217,41)" rx="2" ry="2" />
+<text text-anchor="" x="634.67" y="212.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Readers...</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Options:compare (515 samples, 7.79%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Options:compare (515 samples, 7.79%)</title><rect x="341.9" y="133" width="78.2" height="21.0" fill="rgb(231,130,50)" rx="2" ry="2" />
+<text text-anchor="" x="344.88" y="146.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pando..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc:writers (1 samples, 0.02%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc:writers (1 samples, 0.02%)</title><rect x="1013.8" y="397" width="0.2" height="21.0" fill="rgb(245,96,1)" rx="2" ry="2" />
+<text text-anchor="" x="1016.85" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:blankline (789 samples, 11.94%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:blankline (789 samples, 11.94%)</title><rect x="300.2" y="177" width="119.9" height="21.0" fill="rgb(221,165,4)" rx="2" ry="2" />
+<text text-anchor="" x="303.24" y="190.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Pars..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:str (146 samples, 2.21%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:str (146 samples, 2.21%)</title><rect x="398.0" y="89" width="22.1" height="21.0" fill="rgb(232,55,29)" rx="2" ry="2" />
+<text text-anchor="" x="400.95" y="102.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >T..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Writers.Docbook:hasLineBreaks.removeNote (6 samples, 0.09%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Writers.Docbook:hasLineBreaks.removeNote (6 samples, 0.09%)</title><rect x="920.2" y="375" width="1.0" height="21.0" fill="rgb(208,114,40)" rx="2" ry="2" />
+<text text-anchor="" x="923.24" y="388.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:whitespace (968 samples, 14.65%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:whitespace (968 samples, 14.65%)</title><rect x="627.6" y="221" width="147.1" height="21.0" fill="rgb(206,185,31)" rx="2" ry="2" />
+<text text-anchor="" x="630.57" y="234.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Readers...</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:endline (11 samples, 0.17%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:endline (11 samples, 0.17%)</title><rect x="418.5" y="23" width="1.6" height="21.0" fill="rgb(249,217,41)" rx="2" ry="2" />
+<text text-anchor="" x="421.47" y="36.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:outp.\ (68 samples, 1.03%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:outp.\ (68 samples, 1.03%)</title><rect x="888.0" y="309" width="10.4" height="21.0" fill="rgb(205,171,42)" rx="2" ry="2" />
+<text text-anchor="" x="891.03" y="322.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:table (1 samples, 0.02%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:table (1 samples, 0.02%)</title><rect x="907.6" y="397" width="0.2" height="21.0" fill="rgb(235,191,29)" rx="2" ry="2" />
+<text text-anchor="" x="910.63" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:inline (259 samples, 3.92%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:inline (259 samples, 3.92%)</title><rect x="380.8" y="111" width="39.3" height="21.0" fill="rgb(226,43,24)" rx="2" ry="2" />
+<text text-anchor="" x="383.78" y="124.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:realLength (7 samples, 0.11%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:realLength (7 samples, 0.11%)</title><rect x="897.3" y="287" width="1.1" height="21.0" fill="rgb(214,174,36)" rx="2" ry="2" />
+<text text-anchor="" x="900.29" y="300.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:renderList.off (28 samples, 0.42%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:renderList.off (28 samples, 0.42%)</title><rect x="902.0" y="331" width="4.3" height="21.0" fill="rgb(217,92,19)" rx="2" ry="2" />
+<text text-anchor="" x="905.01" y="344.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:realLength.\ (53 samples, 0.80%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:realLength.\ (53 samples, 0.80%)</title><rect x="982.5" y="287" width="8.1" height="21.0" fill="rgb(254,216,18)" rx="2" ry="2" />
+<text text-anchor="" x="985.54" y="300.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:bareURL (30 samples, 0.45%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:bareURL (30 samples, 0.45%)</title><rect x="420.1" y="243" width="4.6" height="21.0" fill="rgb(239,55,47)" rx="2" ry="2" />
+<text text-anchor="" x="423.14" y="256.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:offsetOf (8 samples, 0.12%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:offsetOf (8 samples, 0.12%)</title><rect x="905.0" y="309" width="1.3" height="21.0" fill="rgb(235,104,14)" rx="2" ry="2" />
+<text text-anchor="" x="908.04" y="322.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.UTF8:toString (4,849 samples, 73.39%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.UTF8:toString (4,849 samples, 73.39%)</title><rect x="57.6" y="331" width="736.8" height="21.0" fill="rgb(212,114,33)" rx="2" ry="2" />
+<text text-anchor="" x="60.56" y="344.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.UTF8:toString</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.XML:escapeStringForXML (153 samples, 2.32%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.XML:escapeStringForXML (153 samples, 2.32%)</title><rect x="990.6" y="353" width="23.2" height="21.0" fill="rgb(221,21,2)" rx="2" ry="2" />
+<text text-anchor="" x="993.60" y="366.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >T..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:skipSpaces (1,074 samples, 16.26%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:skipSpaces (1,074 samples, 16.26%)</title><rect x="256.9" y="221" width="163.2" height="21.0" fill="rgb(237,134,36)" rx="2" ry="2" />
+<text text-anchor="" x="259.94" y="234.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Parsing:ski..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:realLength (183 samples, 2.77%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:realLength (183 samples, 2.77%)</title><rect x="962.8" y="309" width="27.8" height="21.0" fill="rgb(214,174,36)" rx="2" ry="2" />
+<text text-anchor="" x="965.79" y="322.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Te..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:updateLastStrPos (212 samples, 3.21%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:updateLastStrPos (212 samples, 3.21%)</title><rect x="595.4" y="221" width="32.2" height="21.0" fill="rgb(234,50,31)" rx="2" ry="2" />
+<text text-anchor="" x="598.35" y="234.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Te..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.XML:escapeCharForXML (27 samples, 0.41%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.XML:escapeCharForXML (27 samples, 0.41%)</title><rect x="1009.7" y="331" width="4.1" height="21.0" fill="rgb(247,108,3)" rx="2" ry="2" />
+<text text-anchor="" x="1012.75" y="344.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:getOption (4,338 samples, 65.66%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:getOption (4,338 samples, 65.66%)</title><rect x="135.2" y="265" width="659.2" height="21.0" fill="rgb(209,181,31)" rx="2" ry="2" />
+<text text-anchor="" x="138.22" y="278.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Parsing:getOption</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:str (2,303 samples, 34.86%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:str (2,303 samples, 34.86%)</title><rect x="424.7" y="243" width="350.0" height="21.0" fill="rgb(232,55,29)" rx="2" ry="2" />
+<text text-anchor="" x="427.70" y="256.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Readers.Markdown:str</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Writers.Docbook:inlinesToDocbook (610 samples, 9.23%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Writers.Docbook:inlinesToDocbook (610 samples, 9.23%)</title><rect x="921.2" y="397" width="92.6" height="21.0" fill="rgb(216,198,19)" rx="2" ry="2" />
+<text text-anchor="" x="924.15" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc...</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:renderList.next (24 samples, 0.36%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:renderList.next (24 samples, 0.36%)</title><rect x="898.4" y="331" width="3.6" height="21.0" fill="rgb(205,26,37)" rx="2" ry="2" />
+<text text-anchor="" x="901.36" y="344.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:renderDoc (299 samples, 4.53%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:renderDoc (299 samples, 4.53%)</title><rect x="862.2" y="375" width="45.4" height="21.0" fill="rgb(237,56,17)" rx="2" ry="2" />
+<text text-anchor="" x="865.19" y="388.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text...</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:spaceChar (1,053 samples, 15.94%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:spaceChar (1,053 samples, 15.94%)</title><rect x="260.1" y="199" width="160.0" height="21.0" fill="rgb(231,95,6)" rx="2" ry="2" />
+<text text-anchor="" x="263.13" y="212.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Parsing:sp..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Shared:tabFilter.go (177 samples, 2.68%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Shared:tabFilter.go (177 samples, 2.68%)</title><rect x="29.1" y="375" width="26.9" height="21.0" fill="rgb(251,67,25)" rx="2" ry="2" />
+<text text-anchor="" x="32.15" y="388.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Te..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:render (436 samples, 6.60%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:render (436 samples, 6.60%)</title><rect x="841.4" y="397" width="66.2" height="21.0" fill="rgb(241,63,2)" rx="2" ry="2" />
+<text text-anchor="" x="844.37" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pan..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:stateOptions (28 samples, 0.42%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:stateOptions (28 samples, 0.42%)</title><rect x="837.1" y="397" width="4.3" height="21.0" fill="rgb(213,5,7)" rx="2" ry="2" />
+<text text-anchor="" x="840.12" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.UTF8:hGetContents (4,858 samples, 73.53%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.UTF8:hGetContents (4,858 samples, 73.53%)</title><rect x="56.2" y="353" width="738.2" height="21.0" fill="rgb(240,0,4)" rx="2" ry="2" />
+<text text-anchor="" x="59.20" y="366.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.UTF8:hGetContents</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:guardDisabled (669 samples, 10.13%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:guardDisabled (669 samples, 10.13%)</title><rect x="318.5" y="155" width="101.6" height="21.0" fill="rgb(248,84,41)" rx="2" ry="2" />
+<text text-anchor="" x="321.48" y="168.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.P..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Writers.Docbook:inlineToDocbook (539 samples, 8.16%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Writers.Docbook:inlineToDocbook (539 samples, 8.16%)</title><rect x="931.9" y="375" width="81.9" height="21.0" fill="rgb(242,28,47)" rx="2" ry="2" />
+<text text-anchor="" x="934.94" y="388.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pando..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:renderList.xs' (9 samples, 0.14%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:renderList.xs' (9 samples, 0.14%)</title><rect x="906.3" y="331" width="1.3" height="21.0" fill="rgb(247,208,21)" rx="2" ry="2" />
+<text text-anchor="" x="909.26" y="344.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:text.toChunks (366 samples, 5.54%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:text.toChunks (366 samples, 5.54%)</title><rect x="935.0" y="331" width="55.6" height="21.0" fill="rgb(211,153,0)" rx="2" ry="2" />
+<text text-anchor="" x="937.98" y="344.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.P..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Options:readerExtensions (49 samples, 0.74%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Options:readerExtensions (49 samples, 0.74%)</title><rect x="829.7" y="397" width="7.4" height="21.0" fill="rgb(208,88,12)" rx="2" ry="2" />
+<text text-anchor="" x="832.67" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:renderList (273 samples, 4.13%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:renderList (273 samples, 4.13%)</title><rect x="866.1" y="353" width="41.5" height="21.0" fill="rgb(248,73,18)" rx="2" ry="2" />
+<text text-anchor="" x="869.14" y="366.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.UTF8:readFile (4,859 samples, 73.54%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.UTF8:readFile (4,859 samples, 73.54%)</title><rect x="56.0" y="375" width="738.4" height="21.0" fill="rgb(231,211,13)" rx="2" ry="2" />
+<text text-anchor="" x="59.04" y="388.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.UTF8:readFile</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:whitespace (130 samples, 1.97%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:whitespace (130 samples, 1.97%)</title><rect x="774.7" y="243" width="19.7" height="21.0" fill="rgb(206,185,31)" rx="2" ry="2" />
+<text text-anchor="" x="777.66" y="256.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >T..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:mconcat (210 samples, 3.18%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:mconcat (210 samples, 3.18%)</title><rect x="348.9" y="111" width="31.9" height="21.0" fill="rgb(245,193,31)" rx="2" ry="2" />
+<text text-anchor="" x="351.87" y="124.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Te..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:))= (124 samples, 1.88%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:))= (124 samples, 1.88%)</title><rect x="401.3" y="45" width="18.8" height="21.0" fill="rgb(219,182,54)" rx="2" ry="2" />
+<text text-anchor="" x="404.30" y="58.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:setLastStrPos (21 samples, 0.32%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:setLastStrPos (21 samples, 0.32%)</title><rect x="624.4" y="199" width="3.2" height="21.0" fill="rgb(244,112,4)" rx="2" ry="2" />
+<text text-anchor="" x="627.37" y="212.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.UTF8:hPutStr (82 samples, 1.24%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.UTF8:hPutStr (82 samples, 1.24%)</title><rect x="794.6" y="353" width="12.4" height="21.0" fill="rgb(208,109,24)" rx="2" ry="2" />
+<text text-anchor="" x="797.57" y="366.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:outp (125 samples, 1.89%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:outp (125 samples, 1.89%)</title><rect x="879.4" y="331" width="19.0" height="21.0" fill="rgb(207,74,20)" rx="2" ry="2" />
+<text text-anchor="" x="882.36" y="344.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:charWidth (1 samples, 0.02%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:charWidth (1 samples, 0.02%)</title><rect x="990.4" y="265" width="0.2" height="21.0" fill="rgb(220,2,17)" rx="2" ry="2" />
+<text text-anchor="" x="993.45" y="278.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Options:readerSmart (1,095 samples, 16.57%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Options:readerSmart (1,095 samples, 16.57%)</title><rect x="253.7" y="243" width="166.4" height="21.0" fill="rgb(216,201,15)" rx="2" ry="2" />
+<text text-anchor="" x="256.74" y="256.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Options:rea..</text>
+</g>
+<g class="func_g" onmouseover="s('Main:main (5,245 samples, 79.39%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Main:main (5,245 samples, 79.39%)</title><rect x="10.0" y="397" width="797.0" height="21.0" fill="rgb(230,190,5)" rx="2" ry="2" />
+<text text-anchor="" x="13.00" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Main:main</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Options:compare (149 samples, 2.26%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Options:compare (149 samples, 2.26%)</title><rect x="807.0" y="397" width="22.7" height="21.0" fill="rgb(231,130,50)" rx="2" ry="2" />
+<text text-anchor="" x="810.03" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >T..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:text (368 samples, 5.57%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:text (368 samples, 5.57%)</title><rect x="934.7" y="353" width="55.9" height="21.0" fill="rgb(247,37,32)" rx="2" ry="2" />
+<text text-anchor="" x="937.68" y="366.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.P..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:guardEnabled (4,523 samples, 68.46%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:guardEnabled (4,523 samples, 68.46%)</title><rect x="107.1" y="287" width="687.3" height="21.0" fill="rgb(229,94,53)" rx="2" ry="2" />
+<text text-anchor="" x="110.10" y="300.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Parsing:guardEnabled</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Writers.Docbook:hasLineBreaks (88 samples, 1.33%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Writers.Docbook:hasLineBreaks (88 samples, 1.33%)</title><rect x="907.8" y="397" width="13.4" height="21.0" fill="rgb(208,70,24)" rx="2" ry="2" />
+<text text-anchor="" x="910.78" y="410.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:inList (616 samples, 9.32%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:inList (616 samples, 9.32%)</title><rect x="681.1" y="177" width="93.6" height="21.0" fill="rgb(245,76,37)" rx="2" ry="2" />
+<text text-anchor="" x="684.06" y="190.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc...</text>
+</g>
+<g class="func_g" onmouseover="s('all (6,607 samples, 100%)')" onmouseout="c()" onclick="zoom(this)">
+<title>all (6,607 samples, 100%)</title><rect x="10.0" y="419" width="1004.0" height="21.0" fill="rgb(244,197,31)" rx="2" ry="2" />
+<text text-anchor="" x="13.00" y="432.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:updateLastStrPos (48 samples, 0.73%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:updateLastStrPos (48 samples, 0.73%)</title><rect x="767.4" y="133" width="7.3" height="21.0" fill="rgb(234,50,31)" rx="2" ry="2" />
+<text text-anchor="" x="770.37" y="146.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Parsing:mconcat (142 samples, 2.15%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Parsing:mconcat (142 samples, 2.15%)</title><rect x="398.6" y="67" width="21.5" height="21.0" fill="rgb(245,193,31)" rx="2" ry="2" />
+<text text-anchor="" x="401.56" y="80.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >T..</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:realLength.\ (2 samples, 0.03%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:realLength.\ (2 samples, 0.03%)</title><rect x="898.1" y="265" width="0.3" height="21.0" fill="rgb(254,216,18)" rx="2" ry="2" />
+<text text-anchor="" x="901.05" y="278.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.UTF8:writeFile (83 samples, 1.26%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.UTF8:writeFile (83 samples, 1.26%)</title><rect x="794.4" y="375" width="12.6" height="21.0" fill="rgb(244,168,51)" rx="2" ry="2" />
+<text text-anchor="" x="797.42" y="388.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Writers.Docbook:hasLineBreaks.isLineBreak (7 samples, 0.11%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Writers.Docbook:hasLineBreaks.isLineBreak (7 samples, 0.11%)</title><rect x="919.2" y="375" width="1.0" height="21.0" fill="rgb(245,90,28)" rx="2" ry="2" />
+<text text-anchor="" x="922.18" y="388.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Readers.Markdown:readMarkdownWithWarnings (4,638 samples, 70.20%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Readers.Markdown:readMarkdownWithWarnings (4,638 samples, 70.20%)</title><rect x="89.6" y="309" width="704.8" height="21.0" fill="rgb(215,173,27)" rx="2" ry="2" />
+<text text-anchor="" x="92.63" y="322.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  >Text.Pandoc.Readers.Markdown:readMarkdownWithWarnings</text>
+</g>
+<g class="func_g" onmouseover="s('Text.Pandoc.Pretty:renderList.isText (3 samples, 0.05%)')" onmouseout="c()" onclick="zoom(this)">
+<title>Text.Pandoc.Pretty:renderList.isText (3 samples, 0.05%)</title><rect x="901.5" y="309" width="0.5" height="21.0" fill="rgb(229,65,33)" rx="2" ry="2" />
+<text text-anchor="" x="904.55" y="322.5" font-size="11" font-family="verdana" fill="rgb(0,0,0)"  ></text>
+</g>
+</svg>
