[
  {
    "path": ".gitignore",
    "content": ".nrepl-port\ntarget\nelm/ModuleBrowser/elm-stuff\nelm/ModuleBrowser/elm.js\nDocPreview/elm-stuff\nDocPreview/elm.js\n"
  },
  {
    "path": "DocPreview/DocPreview.elm",
    "content": "module DocPreview (..) where\n\n\nimport Html exposing (Html, text, div, span, h1)\nimport Html.Attributes exposing (class)\nimport StartApp\nimport Effects exposing (Effects, Never)\nimport Docs.Package\nimport Docs.Entry\nimport String\nimport Regex\nimport Dict\nimport Json.Decode as Dec\nimport Utils.Markdown as Markdown\nimport Parse.Type\nimport Docs.Type\nimport Docs.Name\nimport Set\n\n\ntype alias Model =\n  { selModule : Maybe Docs.Package.Module\n  , package : Docs.Package.Package }\n\n\ninit : (Model, Effects Action)\ninit =\n  (Model Nothing Dict.empty, Effects.none)\n\n\n\ntype Action\n  = NoOp\n  | RefreshModules String\n  | SelectModule String\n\n\nupdate : Action -> Model -> ( Model, Effects Action )\nupdate action model =\n  case action of\n    NoOp ->\n      ( model, Effects.none )\n\n    RefreshModules rawModules ->\n      let\n        res =\n          Dec.decodeString Docs.Package.decodePackage rawModules\n      in\n        case res of\n          Result.Err v ->\n            Debug.crash \"Error decoding package docs\"\n\n          Result.Ok r ->\n            ( { model | package = r\n                      , selModule =  Dict.values r |> List.head\n              }\n            , Effects.none\n            )\n\n    SelectModule name ->\n      ( { model | selModule = Dict.get name model.package }\n      , Effects.none\n      )\n\n\n\n\n--  View module docs\n\nview : Signal.Address Action -> Model -> Html\nview address model =\n  case model.selModule of\n    Nothing ->\n      div [] [text \"NO SELECTED MODULE -  Maybe you forgot to add your module to the `exposed-modules` entry in elm-package.json ?\"]\n    Just mod ->\n      let\n        chunks = toChunks mod\n        --nameDict =   toNameDict model.package\n        --newChunks = List.map (chunkMap stringToType) chunks\n      in\n        div [ class \"entry-list\" ] <|\n          h1 [class \"entry-list-title\"] [text mod.name]\n          :: List.map (viewChunk Docs.Entry.stringView) chunks\n          --:: List.map (viewChunk (Docs.Entry.typeView nameDict)) newChunks\n\n\nviewChunk : (Docs.Entry.Model tipe -> Html) -> Chunk tipe -> Html\nviewChunk entryView chunk =\n  case chunk of\n    Markdown md ->\n        span [class \"markdown-entry\"] [ Markdown.block md ]\n\n    Entry entry ->\n        entryView entry\n\n\ntype Chunk tipe\n    = Markdown String\n    | Entry (Docs.Entry.Model tipe)\n\n\ntoNameDict : Docs.Package.Package -> Docs.Name.Dictionary\ntoNameDict pkg =\n  Dict.map (\\_ modul -> Set.fromList (Dict.keys modul.entries)) pkg\n\n\n\nchunkMap : (a -> b) -> Chunk a -> Chunk b\nchunkMap func chunk =\n  case chunk of\n    Markdown md ->\n      Markdown md\n\n    Entry entry ->\n      Entry (Docs.Entry.map func entry)\n\n\n\n-- parsing fails for some reason when in LT (native issue ?)\nstringToType : String -> Docs.Type.Type\nstringToType str =\n  let\n    _ = Debug.log \"String to type for:\" str\n  in\n    case Parse.Type.parse str of\n      Ok tipe ->\n        let\n          _ = Debug.log \"type after parse: \" tipe\n        in\n          tipe\n\n      Err err ->\n        let\n          _ = Debug.log \"Shit while parsing\" err\n        in\n          Docs.Type.Var str\n\n\ntoChunks : Docs.Package.Module -> List (Chunk String)\ntoChunks moduleDocs =\n  case String.split \"\\n@docs \" moduleDocs.comment of\n    [] ->\n        Debug.crash \"Expecting some documented functions in this module!\"\n\n    firstChunk :: rest ->\n        Markdown firstChunk\n        :: List.concatMap (subChunks moduleDocs) rest\n\n\nsubChunks : Docs.Package.Module -> String -> List (Chunk String)\nsubChunks moduleDocs postDocs =\n    subChunksHelp moduleDocs (String.split \",\" postDocs)\n\n\nsubChunksHelp : Docs.Package.Module -> List String -> List (Chunk String)\nsubChunksHelp moduleDocs parts =\n  case parts of\n    [] ->\n        []\n\n    rawPart :: remainingParts ->\n        let\n          part =\n            String.trim rawPart\n        in\n          case isValue part of\n            Just valueName ->\n              toEntry moduleDocs valueName\n              :: subChunksHelp moduleDocs remainingParts\n\n            Nothing ->\n              let\n                trimmedPart =\n                  String.trimLeft rawPart\n              in\n                case String.words trimmedPart of\n                  [] ->\n                      [ Markdown (String.join \",\" parts) ]\n\n                  token :: _ ->\n                      case isValue token of\n                        Just valueName ->\n                          [ toEntry moduleDocs valueName\n                          , Markdown (String.dropLeft (String.length token) trimmedPart)\n                          ]\n\n                        Nothing ->\n                          [ Markdown (String.join \",\" parts) ]\n\nvar : Regex.Regex\nvar =\n  Regex.regex \"^[a-zA-Z0-9_']+$\"\n\n\noperator : Regex.Regex\noperator =\n  Regex.regex \"^\\\\([^a-zA-Z0-9]+\\\\)$\"\n\n\nisValue : String -> Maybe String\nisValue str =\n  if Regex.contains var str then\n    Just str\n\n  else if Regex.contains operator str then\n    Just (String.dropLeft 1 (String.dropRight 1 str))\n\n  else\n    Nothing\n\n\ntoEntry : Docs.Package.Module -> String -> Chunk String\ntoEntry moduleDocs name =\n  case Dict.get name moduleDocs.entries of\n    Nothing ->\n        Debug.crash (\"docs have been corrupted, could not find \" ++ name)\n\n    Just entry ->\n        Entry entry\n\n\n-- START-APP WIRING\n\n\napp : StartApp.App Model\napp =\n  StartApp.start\n    { init = init\n    , update = update\n    , view = view\n    , inputs = [ modulesSignal, selectModuleSignal ]\n    }\n\n\nmain : Signal Html\nmain =\n  app.html\n\n\n-- Inbound\n\nmodulesSignal : Signal Action\nmodulesSignal =\n  Signal.map RefreshModules modules\n\n\nport modules : Signal String\n\n\nselectModuleSignal : Signal Action\nselectModuleSignal =\n  Signal.map SelectModule selectModule\n\n\nport selectModule : Signal String\n"
  },
  {
    "path": "DocPreview/DocPreview.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta content=\"IE=edge,chrome=1\" http-equiv=\"X-UA-Compatible\">\n    <meta http-equiv=\"cache-control\" content=\"max-age=0\" />\n    <meta http-equiv=\"cache-control\" content=\"no-cache\" />\n    <meta http-equiv=\"expires\" content=\"0\" />\n    <meta http-equiv=\"expires\" content=\"Tue, 01 Jan 1980 1:00:00 GMT\" />\n    <meta http-equiv=\"pragma\" content=\"no-cache\" />\n\n\n\n\n    <style>\n      #elm-doc-preview {\n        font-family: 'Source Sans Pro', 'Trebuchet MS', 'Lucida Grande', 'Bitstream Vera Sans', 'Helvetica Neue', sans-serif;\n        color: #293c4b;\n      }\n\n      #elm-doc-preview h1, #elm-doc-preview h2, #elm-doc-preview h3, #elm-doc-preview h4 {\n        font-weight: normal;\n      }\n\n      #elm-doc-preview .entry-list {\n        width: 600px;\n        display: inline-block;\n        vertical-align: top;\n      }\n\n      #elm-doc-preview .entry-list-title {\n        font-size: 3em;\n      }\n\n      #elm-doc-preview .markdown-entry h1 {\n        margin-top: 2em;\n        margin-bottom: 0.5px\n      }\n\n      #elm-doc-preview .docs-entry {\n        border-top: 1px solid #eeeeee;\n        margin-top: 1em;\n        margin-bottom: 2em;\n      }\n\n\n      #elm-doc-preview .docs-annotation {\n        white-space: pre;\n        font-family: 'Source Code Pro', consolas, inconsolata, monospace;\n        padding-top: 10px;\n        padding-bottom: 10px;\n      }\n\n\n      #elm-doc-preview .docs-comment {\n        overflow: hidden;\n        padding-left: 1em;\n      }\n\n\n      .hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #f0f0f0;\n  -webkit-text-size-adjust: none;\n}\n\n.hljs,\n.hljs-subst,\n.hljs-tag .hljs-title,\n.nginx .hljs-title {\n  color: black;\n}\n\n.hljs-string,\n.hljs-title,\n.hljs-constant,\n.hljs-parent,\n.hljs-tag .hljs-value,\n.hljs-rules .hljs-value,\n.hljs-preprocessor,\n.hljs-pragma,\n.haml .hljs-symbol,\n.ruby .hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-template_tag,\n.django .hljs-variable,\n.smalltalk .hljs-class,\n.hljs-addition,\n.hljs-flow,\n.hljs-stream,\n.bash .hljs-variable,\n.apache .hljs-tag,\n.apache .hljs-cbracket,\n.tex .hljs-command,\n.tex .hljs-special,\n.erlang_repl .hljs-function_or_atom,\n.asciidoc .hljs-header,\n.markdown .hljs-header,\n.coffeescript .hljs-attribute {\n  color: #800;\n}\n\n.smartquote,\n.hljs-comment,\n.hljs-annotation,\n.diff .hljs-header,\n.hljs-chunk,\n.asciidoc .hljs-blockquote,\n.markdown .hljs-blockquote {\n  color: #888;\n}\n\n.hljs-number,\n.hljs-date,\n.hljs-regexp,\n.hljs-literal,\n.hljs-hexcolor,\n.smalltalk .hljs-symbol,\n.smalltalk .hljs-char,\n.go .hljs-constant,\n.hljs-change,\n.lasso .hljs-variable,\n.makefile .hljs-variable,\n.asciidoc .hljs-bullet,\n.markdown .hljs-bullet,\n.asciidoc .hljs-link_url,\n.markdown .hljs-link_url {\n  color: #080;\n}\n\n.hljs-label,\n.hljs-javadoc,\n.ruby .hljs-string,\n.hljs-decorator,\n.hljs-filter .hljs-argument,\n.hljs-localvars,\n.hljs-array,\n.hljs-attr_selector,\n.hljs-important,\n.hljs-pseudo,\n.hljs-pi,\n.haml .hljs-bullet,\n.hljs-doctype,\n.hljs-deletion,\n.hljs-envvar,\n.hljs-shebang,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in,\n.tex .hljs-formula,\n.erlang_repl .hljs-reserved,\n.hljs-prompt,\n.asciidoc .hljs-link_label,\n.markdown .hljs-link_label,\n.vhdl .hljs-attribute,\n.clojure .hljs-attribute,\n.asciidoc .hljs-attribute,\n.lasso .hljs-attribute,\n.coffeescript .hljs-property,\n.hljs-phony {\n  color: #88f;\n}\n\n.hljs-keyword,\n.hljs-id,\n.hljs-title,\n.hljs-built_in,\n.css .hljs-tag,\n.hljs-javadoctag,\n.hljs-phpdoc,\n.hljs-dartdoc,\n.hljs-yardoctag,\n.smalltalk .hljs-class,\n.hljs-winutils,\n.bash .hljs-variable,\n.apache .hljs-tag,\n.hljs-type,\n.hljs-typename,\n.tex .hljs-command,\n.asciidoc .hljs-strong,\n.markdown .hljs-strong,\n.hljs-request,\n.hljs-status {\n  font-weight: bold;\n}\n\n.asciidoc .hljs-emphasis,\n.markdown .hljs-emphasis {\n  font-style: italic;\n}\n\n.nginx .hljs-built_in {\n  font-weight: normal;\n}\n\n.coffeescript .javascript,\n.javascript .xml,\n.lasso .markup,\n.tex .hljs-formula,\n.xml .javascript,\n.xml .vbscript,\n.xml .css,\n.xml .hljs-cdata {\n  opacity: 0.5;\n}\n\n    </style>\n\n  </head>\n  <body>\n    <div id=\"elm-doc-preview\">\n      Here we go docpreview\n    </div>\n\n\n    <script type=\"text/javascript\" src=\"/highlight.pack.js\"></script>\n    <script type=\"text/javascript\" src=\"/docPreview.js\"></script>\n\n\n\n    <script type=\"text/javascript\">\n\n      var preview = Elm.embed(Elm.DocPreview,\n                              document.getElementById(\"elm-doc-preview\"),\n                              {modules: '[]', selectModule: ''});\n\n\n      var modules = '[{\"name\": \"Dull\", \"comment\": \" The awesome dull module\\\\n\\\\n## Awesome math\\\\n@docs dill, Model\\\\n\", \"aliases\": [{\"name\": \"Model\", \"comment\": \" This is the model you know\", \"args\": [ \"a\"], \"type\": \"{ a | id : Maybe.Maybe Int, name : String }\"}], \"types\": [], \"values\": [{\"name\": \"dill\", \"comment\": \" Add in a disguised nice manner\\\\n\\\\n    \\\\\"hello\\\\\" ++ \\\\\"world\\\\\" == \\\\\"helloworld\\\\\"\\\\n    [1,1,2] ++ [3,5,8] == [1,1,2,3,5,8]\",\"type\": \"number -> number -> number\"}],\"generated-with-elm-version\": \"0.16.0\"}]';\n\n\n      //preview.ports.modules.send(modules);\n      //preview.ports.selectModule.send(\"Dull\");\n\n\n    </script>\n\n  </body>\n</html>\n"
  },
  {
    "path": "DocPreview/LICENSE",
    "content": "Copyright (c) 2014, Evan Czaplicki\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n\n    * Neither the name of Evan Czaplicki nor the names of other\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "DocPreview/docPreview.js",
    "content": "var Elm = Elm || { Native: {} };\nElm.Native.Array = {};\nElm.Native.Array.make = function(localRuntime) {\n\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Array = localRuntime.Native.Array || {};\n\tif (localRuntime.Native.Array.values)\n\t{\n\t\treturn localRuntime.Native.Array.values;\n\t}\n\tif ('values' in Elm.Native.Array)\n\t{\n\t\treturn localRuntime.Native.Array.values = Elm.Native.Array.values;\n\t}\n\n\tvar List = Elm.Native.List.make(localRuntime);\n\n\t// A RRB-Tree has two distinct data types.\n\t// Leaf -> \"height\"  is always 0\n\t//         \"table\"   is an array of elements\n\t// Node -> \"height\"  is always greater than 0\n\t//         \"table\"   is an array of child nodes\n\t//         \"lengths\" is an array of accumulated lengths of the child nodes\n\n\t// M is the maximal table size. 32 seems fast. E is the allowed increase\n\t// of search steps when concatting to find an index. Lower values will\n\t// decrease balancing, but will increase search steps.\n\tvar M = 32;\n\tvar E = 2;\n\n\t// An empty array.\n\tvar empty = {\n\t\tctor: '_Array',\n\t\theight: 0,\n\t\ttable: []\n\t};\n\n\n\tfunction get(i, array)\n\t{\n\t\tif (i < 0 || i >= length(array))\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'Index ' + i + ' is out of range. Check the length of ' +\n\t\t\t\t'your array first or use getMaybe or getWithDefault.');\n\t\t}\n\t\treturn unsafeGet(i, array);\n\t}\n\n\n\tfunction unsafeGet(i, array)\n\t{\n\t\tfor (var x = array.height; x > 0; x--)\n\t\t{\n\t\t\tvar slot = i >> (x * 5);\n\t\t\twhile (array.lengths[slot] <= i)\n\t\t\t{\n\t\t\t\tslot++;\n\t\t\t}\n\t\t\tif (slot > 0)\n\t\t\t{\n\t\t\t\ti -= array.lengths[slot - 1];\n\t\t\t}\n\t\t\tarray = array.table[slot];\n\t\t}\n\t\treturn array.table[i];\n\t}\n\n\n\t// Sets the value at the index i. Only the nodes leading to i will get\n\t// copied and updated.\n\tfunction set(i, item, array)\n\t{\n\t\tif (i < 0 || length(array) <= i)\n\t\t{\n\t\t\treturn array;\n\t\t}\n\t\treturn unsafeSet(i, item, array);\n\t}\n\n\n\tfunction unsafeSet(i, item, array)\n\t{\n\t\tarray = nodeCopy(array);\n\n\t\tif (array.height === 0)\n\t\t{\n\t\t\tarray.table[i] = item;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar slot = getSlot(i, array);\n\t\t\tif (slot > 0)\n\t\t\t{\n\t\t\t\ti -= array.lengths[slot - 1];\n\t\t\t}\n\t\t\tarray.table[slot] = unsafeSet(i, item, array.table[slot]);\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tfunction initialize(len, f)\n\t{\n\t\tif (len <= 0)\n\t\t{\n\t\t\treturn empty;\n\t\t}\n\t\tvar h = Math.floor( Math.log(len) / Math.log(M) );\n\t\treturn initialize_(f, h, 0, len);\n\t}\n\n\tfunction initialize_(f, h, from, to)\n\t{\n\t\tif (h === 0)\n\t\t{\n\t\t\tvar table = new Array((to - from) % (M + 1));\n\t\t\tfor (var i = 0; i < table.length; i++)\n\t\t\t{\n\t\t\t  table[i] = f(from + i);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: table\n\t\t\t};\n\t\t}\n\n\t\tvar step = Math.pow(M, h);\n\t\tvar table = new Array(Math.ceil((to - from) / step));\n\t\tvar lengths = new Array(table.length);\n\t\tfor (var i = 0; i < table.length; i++)\n\t\t{\n\t\t\ttable[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));\n\t\t\tlengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);\n\t\t}\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: table,\n\t\t\tlengths: lengths\n\t\t};\n\t}\n\n\tfunction fromList(list)\n\t{\n\t\tif (list === List.Nil)\n\t\t{\n\t\t\treturn empty;\n\t\t}\n\n\t\t// Allocate M sized blocks (table) and write list elements to it.\n\t\tvar table = new Array(M);\n\t\tvar nodes = [];\n\t\tvar i = 0;\n\n\t\twhile (list.ctor !== '[]')\n\t\t{\n\t\t\ttable[i] = list._0;\n\t\t\tlist = list._1;\n\t\t\ti++;\n\n\t\t\t// table is full, so we can push a leaf containing it into the\n\t\t\t// next node.\n\t\t\tif (i === M)\n\t\t\t{\n\t\t\t\tvar leaf = {\n\t\t\t\t\tctor: '_Array',\n\t\t\t\t\theight: 0,\n\t\t\t\t\ttable: table\n\t\t\t\t};\n\t\t\t\tfromListPush(leaf, nodes);\n\t\t\t\ttable = new Array(M);\n\t\t\t\ti = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Maybe there is something left on the table.\n\t\tif (i > 0)\n\t\t{\n\t\t\tvar leaf = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: table.splice(0, i)\n\t\t\t};\n\t\t\tfromListPush(leaf, nodes);\n\t\t}\n\n\t\t// Go through all of the nodes and eventually push them into higher nodes.\n\t\tfor (var h = 0; h < nodes.length - 1; h++)\n\t\t{\n\t\t\tif (nodes[h].table.length > 0)\n\t\t\t{\n\t\t\t\tfromListPush(nodes[h], nodes);\n\t\t\t}\n\t\t}\n\n\t\tvar head = nodes[nodes.length - 1];\n\t\tif (head.height > 0 && head.table.length === 1)\n\t\t{\n\t\t\treturn head.table[0];\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn head;\n\t\t}\n\t}\n\n\t// Push a node into a higher node as a child.\n\tfunction fromListPush(toPush, nodes)\n\t{\n\t\tvar h = toPush.height;\n\n\t\t// Maybe the node on this height does not exist.\n\t\tif (nodes.length === h)\n\t\t{\n\t\t\tvar node = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: h + 1,\n\t\t\t\ttable: [],\n\t\t\t\tlengths: []\n\t\t\t};\n\t\t\tnodes.push(node);\n\t\t}\n\n\t\tnodes[h].table.push(toPush);\n\t\tvar len = length(toPush);\n\t\tif (nodes[h].lengths.length > 0)\n\t\t{\n\t\t\tlen += nodes[h].lengths[nodes[h].lengths.length - 1];\n\t\t}\n\t\tnodes[h].lengths.push(len);\n\n\t\tif (nodes[h].table.length === M)\n\t\t{\n\t\t\tfromListPush(nodes[h], nodes);\n\t\t\tnodes[h] = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: h + 1,\n\t\t\t\ttable: [],\n\t\t\t\tlengths: []\n\t\t\t};\n\t\t}\n\t}\n\n\t// Pushes an item via push_ to the bottom right of a tree.\n\tfunction push(item, a)\n\t{\n\t\tvar pushed = push_(item, a);\n\t\tif (pushed !== null)\n\t\t{\n\t\t\treturn pushed;\n\t\t}\n\n\t\tvar newTree = create(item, a.height);\n\t\treturn siblise(a, newTree);\n\t}\n\n\t// Recursively tries to push an item to the bottom-right most\n\t// tree possible. If there is no space left for the item,\n\t// null will be returned.\n\tfunction push_(item, a)\n\t{\n\t\t// Handle resursion stop at leaf level.\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tif (a.table.length < M)\n\t\t\t{\n\t\t\t\tvar newA = {\n\t\t\t\t\tctor: '_Array',\n\t\t\t\t\theight: 0,\n\t\t\t\t\ttable: a.table.slice()\n\t\t\t\t};\n\t\t\t\tnewA.table.push(item);\n\t\t\t\treturn newA;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t  return null;\n\t\t\t}\n\t\t}\n\n\t\t// Recursively push\n\t\tvar pushed = push_(item, botRight(a));\n\n\t\t// There was space in the bottom right tree, so the slot will\n\t\t// be updated.\n\t\tif (pushed !== null)\n\t\t{\n\t\t\tvar newA = nodeCopy(a);\n\t\t\tnewA.table[newA.table.length - 1] = pushed;\n\t\t\tnewA.lengths[newA.lengths.length - 1]++;\n\t\t\treturn newA;\n\t\t}\n\n\t\t// When there was no space left, check if there is space left\n\t\t// for a new slot with a tree which contains only the item\n\t\t// at the bottom.\n\t\tif (a.table.length < M)\n\t\t{\n\t\t\tvar newSlot = create(item, a.height - 1);\n\t\t\tvar newA = nodeCopy(a);\n\t\t\tnewA.table.push(newSlot);\n\t\t\tnewA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));\n\t\t\treturn newA;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Converts an array into a list of elements.\n\tfunction toList(a)\n\t{\n\t\treturn toList_(List.Nil, a);\n\t}\n\n\tfunction toList_(list, a)\n\t{\n\t\tfor (var i = a.table.length - 1; i >= 0; i--)\n\t\t{\n\t\t\tlist =\n\t\t\t\ta.height === 0\n\t\t\t\t\t? List.Cons(a.table[i], list)\n\t\t\t\t\t: toList_(list, a.table[i]);\n\t\t}\n\t\treturn list;\n\t}\n\n\t// Maps a function over the elements of an array.\n\tfunction map(f, a)\n\t{\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: new Array(a.table.length)\n\t\t};\n\t\tif (a.height > 0)\n\t\t{\n\t\t\tnewA.lengths = a.lengths;\n\t\t}\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tnewA.table[i] =\n\t\t\t\ta.height === 0\n\t\t\t\t\t? f(a.table[i])\n\t\t\t\t\t: map(f, a.table[i]);\n\t\t}\n\t\treturn newA;\n\t}\n\n\t// Maps a function over the elements with their index as first argument.\n\tfunction indexedMap(f, a)\n\t{\n\t\treturn indexedMap_(f, a, 0);\n\t}\n\n\tfunction indexedMap_(f, a, from)\n\t{\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: new Array(a.table.length)\n\t\t};\n\t\tif (a.height > 0)\n\t\t{\n\t\t\tnewA.lengths = a.lengths;\n\t\t}\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tnewA.table[i] =\n\t\t\t\ta.height === 0\n\t\t\t\t\t? A2(f, from + i, a.table[i])\n\t\t\t\t\t: indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]);\n\t\t}\n\t\treturn newA;\n\t}\n\n\tfunction foldl(f, b, a)\n\t{\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t\t{\n\t\t\t\tb = A2(f, a.table[i], b);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t\t{\n\t\t\t\tb = foldl(f, b, a.table[i]);\n\t\t\t}\n\t\t}\n\t\treturn b;\n\t}\n\n\tfunction foldr(f, b, a)\n\t{\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tfor (var i = a.table.length; i--; )\n\t\t\t{\n\t\t\t\tb = A2(f, a.table[i], b);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i = a.table.length; i--; )\n\t\t\t{\n\t\t\t\tb = foldr(f, b, a.table[i]);\n\t\t\t}\n\t\t}\n\t\treturn b;\n\t}\n\n\t// TODO: currently, it slices the right, then the left. This can be\n\t// optimized.\n\tfunction slice(from, to, a)\n\t{\n\t\tif (from < 0)\n\t\t{\n\t\t\tfrom += length(a);\n\t\t}\n\t\tif (to < 0)\n\t\t{\n\t\t\tto += length(a);\n\t\t}\n\t\treturn sliceLeft(from, sliceRight(to, a));\n\t}\n\n\tfunction sliceRight(to, a)\n\t{\n\t\tif (to === length(a))\n\t\t{\n\t\t\treturn a;\n\t\t}\n\n\t\t// Handle leaf level.\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tvar newA = { ctor:'_Array', height:0 };\n\t\t\tnewA.table = a.table.slice(0, to);\n\t\t\treturn newA;\n\t\t}\n\n\t\t// Slice the right recursively.\n\t\tvar right = getSlot(to, a);\n\t\tvar sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);\n\n\t\t// Maybe the a node is not even needed, as sliced contains the whole slice.\n\t\tif (right === 0)\n\t\t{\n\t\t\treturn sliced;\n\t\t}\n\n\t\t// Create new node.\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: a.table.slice(0, right),\n\t\t\tlengths: a.lengths.slice(0, right)\n\t\t};\n\t\tif (sliced.table.length > 0)\n\t\t{\n\t\t\tnewA.table[right] = sliced;\n\t\t\tnewA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);\n\t\t}\n\t\treturn newA;\n\t}\n\n\tfunction sliceLeft(from, a)\n\t{\n\t\tif (from === 0)\n\t\t{\n\t\t\treturn a;\n\t\t}\n\n\t\t// Handle leaf level.\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tvar newA = { ctor:'_Array', height:0 };\n\t\t\tnewA.table = a.table.slice(from, a.table.length + 1);\n\t\t\treturn newA;\n\t\t}\n\n\t\t// Slice the left recursively.\n\t\tvar left = getSlot(from, a);\n\t\tvar sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);\n\n\t\t// Maybe the a node is not even needed, as sliced contains the whole slice.\n\t\tif (left === a.table.length - 1)\n\t\t{\n\t\t\treturn sliced;\n\t\t}\n\n\t\t// Create new node.\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: a.table.slice(left, a.table.length + 1),\n\t\t\tlengths: new Array(a.table.length - left)\n\t\t};\n\t\tnewA.table[0] = sliced;\n\t\tvar len = 0;\n\t\tfor (var i = 0; i < newA.table.length; i++)\n\t\t{\n\t\t\tlen += length(newA.table[i]);\n\t\t\tnewA.lengths[i] = len;\n\t\t}\n\n\t\treturn newA;\n\t}\n\n\t// Appends two trees.\n\tfunction append(a,b)\n\t{\n\t\tif (a.table.length === 0)\n\t\t{\n\t\t\treturn b;\n\t\t}\n\t\tif (b.table.length === 0)\n\t\t{\n\t\t\treturn a;\n\t\t}\n\n\t\tvar c = append_(a, b);\n\n\t\t// Check if both nodes can be crunshed together.\n\t\tif (c[0].table.length + c[1].table.length <= M)\n\t\t{\n\t\t\tif (c[0].table.length === 0)\n\t\t\t{\n\t\t\t\treturn c[1];\n\t\t\t}\n\t\t\tif (c[1].table.length === 0)\n\t\t\t{\n\t\t\t\treturn c[0];\n\t\t\t}\n\n\t\t\t// Adjust .table and .lengths\n\t\t\tc[0].table = c[0].table.concat(c[1].table);\n\t\t\tif (c[0].height > 0)\n\t\t\t{\n\t\t\t\tvar len = length(c[0]);\n\t\t\t\tfor (var i = 0; i < c[1].lengths.length; i++)\n\t\t\t\t{\n\t\t\t\t\tc[1].lengths[i] += len;\n\t\t\t\t}\n\t\t\t\tc[0].lengths = c[0].lengths.concat(c[1].lengths);\n\t\t\t}\n\n\t\t\treturn c[0];\n\t\t}\n\n\t\tif (c[0].height > 0)\n\t\t{\n\t\t\tvar toRemove = calcToRemove(a, b);\n\t\t\tif (toRemove > E)\n\t\t\t{\n\t\t\t\tc = shuffle(c[0], c[1], toRemove);\n\t\t\t}\n\t\t}\n\n\t\treturn siblise(c[0], c[1]);\n\t}\n\n\t// Returns an array of two nodes; right and left. One node _may_ be empty.\n\tfunction append_(a, b)\n\t{\n\t\tif (a.height === 0 && b.height === 0)\n\t\t{\n\t\t\treturn [a, b];\n\t\t}\n\n\t\tif (a.height !== 1 || b.height !== 1)\n\t\t{\n\t\t\tif (a.height === b.height)\n\t\t\t{\n\t\t\t\ta = nodeCopy(a);\n\t\t\t\tb = nodeCopy(b);\n\t\t\t\tvar appended = append_(botRight(a), botLeft(b));\n\n\t\t\t\tinsertRight(a, appended[1]);\n\t\t\t\tinsertLeft(b, appended[0]);\n\t\t\t}\n\t\t\telse if (a.height > b.height)\n\t\t\t{\n\t\t\t\ta = nodeCopy(a);\n\t\t\t\tvar appended = append_(botRight(a), b);\n\n\t\t\t\tinsertRight(a, appended[0]);\n\t\t\t\tb = parentise(appended[1], appended[1].height + 1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tb = nodeCopy(b);\n\t\t\t\tvar appended = append_(a, botLeft(b));\n\n\t\t\t\tvar left = appended[0].table.length === 0 ? 0 : 1;\n\t\t\t\tvar right = left === 0 ? 1 : 0;\n\t\t\t\tinsertLeft(b, appended[left]);\n\t\t\t\ta = parentise(appended[right], appended[right].height + 1);\n\t\t\t}\n\t\t}\n\n\t\t// Check if balancing is needed and return based on that.\n\t\tif (a.table.length === 0 || b.table.length === 0)\n\t\t{\n\t\t\treturn [a, b];\n\t\t}\n\n\t\tvar toRemove = calcToRemove(a, b);\n\t\tif (toRemove <= E)\n\t\t{\n\t\t\treturn [a, b];\n\t\t}\n\t\treturn shuffle(a, b, toRemove);\n\t}\n\n\t// Helperfunctions for append_. Replaces a child node at the side of the parent.\n\tfunction insertRight(parent, node)\n\t{\n\t\tvar index = parent.table.length - 1;\n\t\tparent.table[index] = node;\n\t\tparent.lengths[index] = length(node);\n\t\tparent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;\n\t}\n\n\tfunction insertLeft(parent, node)\n\t{\n\t\tif (node.table.length > 0)\n\t\t{\n\t\t\tparent.table[0] = node;\n\t\t\tparent.lengths[0] = length(node);\n\n\t\t\tvar len = length(parent.table[0]);\n\t\t\tfor (var i = 1; i < parent.lengths.length; i++)\n\t\t\t{\n\t\t\t\tlen += length(parent.table[i]);\n\t\t\t\tparent.lengths[i] = len;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tparent.table.shift();\n\t\t\tfor (var i = 1; i < parent.lengths.length; i++)\n\t\t\t{\n\t\t\t\tparent.lengths[i] = parent.lengths[i] - parent.lengths[0];\n\t\t\t}\n\t\t\tparent.lengths.shift();\n\t\t}\n\t}\n\n\t// Returns the extra search steps for E. Refer to the paper.\n\tfunction calcToRemove(a, b)\n\t{\n\t\tvar subLengths = 0;\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tsubLengths += a.table[i].table.length;\n\t\t}\n\t\tfor (var i = 0; i < b.table.length; i++)\n\t\t{\n\t\t\tsubLengths += b.table[i].table.length;\n\t\t}\n\n\t\tvar toRemove = a.table.length + b.table.length;\n\t\treturn toRemove - (Math.floor((subLengths - 1) / M) + 1);\n\t}\n\n\t// get2, set2 and saveSlot are helpers for accessing elements over two arrays.\n\tfunction get2(a, b, index)\n\t{\n\t\treturn index < a.length\n\t\t\t? a[index]\n\t\t\t: b[index - a.length];\n\t}\n\n\tfunction set2(a, b, index, value)\n\t{\n\t\tif (index < a.length)\n\t\t{\n\t\t\ta[index] = value;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tb[index - a.length] = value;\n\t\t}\n\t}\n\n\tfunction saveSlot(a, b, index, slot)\n\t{\n\t\tset2(a.table, b.table, index, slot);\n\n\t\tvar l = (index === 0 || index === a.lengths.length)\n\t\t\t? 0\n\t\t\t: get2(a.lengths, a.lengths, index - 1);\n\n\t\tset2(a.lengths, b.lengths, index, l + length(slot));\n\t}\n\n\t// Creates a node or leaf with a given length at their arrays for perfomance.\n\t// Is only used by shuffle.\n\tfunction createNode(h, length)\n\t{\n\t\tif (length < 0)\n\t\t{\n\t\t\tlength = 0;\n\t\t}\n\t\tvar a = {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: new Array(length)\n\t\t};\n\t\tif (h > 0)\n\t\t{\n\t\t\ta.lengths = new Array(length);\n\t\t}\n\t\treturn a;\n\t}\n\n\t// Returns an array of two balanced nodes.\n\tfunction shuffle(a, b, toRemove)\n\t{\n\t\tvar newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));\n\t\tvar newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));\n\n\t\t// Skip the slots with size M. More precise: copy the slot references\n\t\t// to the new node\n\t\tvar read = 0;\n\t\twhile (get2(a.table, b.table, read).table.length % M === 0)\n\t\t{\n\t\t\tset2(newA.table, newB.table, read, get2(a.table, b.table, read));\n\t\t\tset2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));\n\t\t\tread++;\n\t\t}\n\n\t\t// Pulling items from left to right, caching in a slot before writing\n\t\t// it into the new nodes.\n\t\tvar write = read;\n\t\tvar slot = new createNode(a.height - 1, 0);\n\t\tvar from = 0;\n\n\t\t// If the current slot is still containing data, then there will be at\n\t\t// least one more write, so we do not break this loop yet.\n\t\twhile (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove)\n\t\t{\n\t\t\t// Find out the max possible items for copying.\n\t\t\tvar source = get2(a.table, b.table, read);\n\t\t\tvar to = Math.min(M - slot.table.length, source.table.length);\n\n\t\t\t// Copy and adjust size table.\n\t\t\tslot.table = slot.table.concat(source.table.slice(from, to));\n\t\t\tif (slot.height > 0)\n\t\t\t{\n\t\t\t\tvar len = slot.lengths.length;\n\t\t\t\tfor (var i = len; i < len + to - from; i++)\n\t\t\t\t{\n\t\t\t\t\tslot.lengths[i] = length(slot.table[i]);\n\t\t\t\t\tslot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfrom += to;\n\n\t\t\t// Only proceed to next slots[i] if the current one was\n\t\t\t// fully copied.\n\t\t\tif (source.table.length <= to)\n\t\t\t{\n\t\t\t\tread++; from = 0;\n\t\t\t}\n\n\t\t\t// Only create a new slot if the current one is filled up.\n\t\t\tif (slot.table.length === M)\n\t\t\t{\n\t\t\t\tsaveSlot(newA, newB, write, slot);\n\t\t\t\tslot = createNode(a.height - 1, 0);\n\t\t\t\twrite++;\n\t\t\t}\n\t\t}\n\n\t\t// Cleanup after the loop. Copy the last slot into the new nodes.\n\t\tif (slot.table.length > 0)\n\t\t{\n\t\t\tsaveSlot(newA, newB, write, slot);\n\t\t\twrite++;\n\t\t}\n\n\t\t// Shift the untouched slots to the left\n\t\twhile (read < a.table.length + b.table.length )\n\t\t{\n\t\t\tsaveSlot(newA, newB, write, get2(a.table, b.table, read));\n\t\t\tread++;\n\t\t\twrite++;\n\t\t}\n\n\t\treturn [newA, newB];\n\t}\n\n\t// Navigation functions\n\tfunction botRight(a)\n\t{\n\t\treturn a.table[a.table.length - 1];\n\t}\n\tfunction botLeft(a)\n\t{\n\t\treturn a.table[0];\n\t}\n\n\t// Copies a node for updating. Note that you should not use this if\n\t// only updating only one of \"table\" or \"lengths\" for performance reasons.\n\tfunction nodeCopy(a)\n\t{\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: a.table.slice()\n\t\t};\n\t\tif (a.height > 0)\n\t\t{\n\t\t\tnewA.lengths = a.lengths.slice();\n\t\t}\n\t\treturn newA;\n\t}\n\n\t// Returns how many items are in the tree.\n\tfunction length(array)\n\t{\n\t\tif (array.height === 0)\n\t\t{\n\t\t\treturn array.table.length;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn array.lengths[array.lengths.length - 1];\n\t\t}\n\t}\n\n\t// Calculates in which slot of \"table\" the item probably is, then\n\t// find the exact slot via forward searching in  \"lengths\". Returns the index.\n\tfunction getSlot(i, a)\n\t{\n\t\tvar slot = i >> (5 * a.height);\n\t\twhile (a.lengths[slot] <= i)\n\t\t{\n\t\t\tslot++;\n\t\t}\n\t\treturn slot;\n\t}\n\n\t// Recursively creates a tree with a given height containing\n\t// only the given item.\n\tfunction create(item, h)\n\t{\n\t\tif (h === 0)\n\t\t{\n\t\t\treturn {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: [item]\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: [create(item, h - 1)],\n\t\t\tlengths: [1]\n\t\t};\n\t}\n\n\t// Recursively creates a tree that contains the given tree.\n\tfunction parentise(tree, h)\n\t{\n\t\tif (h === tree.height)\n\t\t{\n\t\t\treturn tree;\n\t\t}\n\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: [parentise(tree, h - 1)],\n\t\t\tlengths: [length(tree)]\n\t\t};\n\t}\n\n\t// Emphasizes blood brotherhood beneath two trees.\n\tfunction siblise(a, b)\n\t{\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height + 1,\n\t\t\ttable: [a, b],\n\t\t\tlengths: [length(a), length(a) + length(b)]\n\t\t};\n\t}\n\n\tfunction toJSArray(a)\n\t{\n\t\tvar jsArray = new Array(length(a));\n\t\ttoJSArray_(jsArray, 0, a);\n\t\treturn jsArray;\n\t}\n\n\tfunction toJSArray_(jsArray, i, a)\n\t{\n\t\tfor (var t = 0; t < a.table.length; t++)\n\t\t{\n\t\t\tif (a.height === 0)\n\t\t\t{\n\t\t\t\tjsArray[i + t] = a.table[t];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar inc = t === 0 ? 0 : a.lengths[t - 1];\n\t\t\t\ttoJSArray_(jsArray, i + inc, a.table[t]);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction fromJSArray(jsArray)\n\t{\n\t\tif (jsArray.length === 0)\n\t\t{\n\t\t\treturn empty;\n\t\t}\n\t\tvar h = Math.floor(Math.log(jsArray.length) / Math.log(M));\n\t\treturn fromJSArray_(jsArray, h, 0, jsArray.length);\n\t}\n\n\tfunction fromJSArray_(jsArray, h, from, to)\n\t{\n\t\tif (h === 0)\n\t\t{\n\t\t\treturn {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: jsArray.slice(from, to)\n\t\t\t};\n\t\t}\n\n\t\tvar step = Math.pow(M, h);\n\t\tvar table = new Array(Math.ceil((to - from) / step));\n\t\tvar lengths = new Array(table.length);\n\t\tfor (var i = 0; i < table.length; i++)\n\t\t{\n\t\t\ttable[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));\n\t\t\tlengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0);\n\t\t}\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: table,\n\t\t\tlengths: lengths\n\t\t};\n\t}\n\n\tElm.Native.Array.values = {\n\t\tempty: empty,\n\t\tfromList: fromList,\n\t\ttoList: toList,\n\t\tinitialize: F2(initialize),\n\t\tappend: F2(append),\n\t\tpush: F2(push),\n\t\tslice: F3(slice),\n\t\tget: F2(get),\n\t\tset: F3(set),\n\t\tmap: F2(map),\n\t\tindexedMap: F2(indexedMap),\n\t\tfoldl: F3(foldl),\n\t\tfoldr: F3(foldr),\n\t\tlength: length,\n\n\t\ttoJSArray: toJSArray,\n\t\tfromJSArray: fromJSArray\n\t};\n\n\treturn localRuntime.Native.Array.values = Elm.Native.Array.values;\n};\n\nElm.Native.Basics = {};\nElm.Native.Basics.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Basics = localRuntime.Native.Basics || {};\n\tif (localRuntime.Native.Basics.values)\n\t{\n\t\treturn localRuntime.Native.Basics.values;\n\t}\n\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\tfunction div(a, b)\n\t{\n\t\treturn (a / b) | 0;\n\t}\n\tfunction rem(a, b)\n\t{\n\t\treturn a % b;\n\t}\n\tfunction mod(a, b)\n\t{\n\t\tif (b === 0)\n\t\t{\n\t\t\tthrow new Error('Cannot perform mod 0. Division by zero error.');\n\t\t}\n\t\tvar r = a % b;\n\t\tvar m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b));\n\n\t\treturn m === b ? 0 : m;\n\t}\n\tfunction logBase(base, n)\n\t{\n\t\treturn Math.log(n) / Math.log(base);\n\t}\n\tfunction negate(n)\n\t{\n\t\treturn -n;\n\t}\n\tfunction abs(n)\n\t{\n\t\treturn n < 0 ? -n : n;\n\t}\n\n\tfunction min(a, b)\n\t{\n\t\treturn Utils.cmp(a, b) < 0 ? a : b;\n\t}\n\tfunction max(a, b)\n\t{\n\t\treturn Utils.cmp(a, b) > 0 ? a : b;\n\t}\n\tfunction clamp(lo, hi, n)\n\t{\n\t\treturn Utils.cmp(n, lo) < 0 ? lo : Utils.cmp(n, hi) > 0 ? hi : n;\n\t}\n\n\tfunction xor(a, b)\n\t{\n\t\treturn a !== b;\n\t}\n\tfunction not(b)\n\t{\n\t\treturn !b;\n\t}\n\tfunction isInfinite(n)\n\t{\n\t\treturn n === Infinity || n === -Infinity;\n\t}\n\n\tfunction truncate(n)\n\t{\n\t\treturn n | 0;\n\t}\n\n\tfunction degrees(d)\n\t{\n\t\treturn d * Math.PI / 180;\n\t}\n\tfunction turns(t)\n\t{\n\t\treturn 2 * Math.PI * t;\n\t}\n\tfunction fromPolar(point)\n\t{\n\t\tvar r = point._0;\n\t\tvar t = point._1;\n\t\treturn Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));\n\t}\n\tfunction toPolar(point)\n\t{\n\t\tvar x = point._0;\n\t\tvar y = point._1;\n\t\treturn Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x));\n\t}\n\n\treturn localRuntime.Native.Basics.values = {\n\t\tdiv: F2(div),\n\t\trem: F2(rem),\n\t\tmod: F2(mod),\n\n\t\tpi: Math.PI,\n\t\te: Math.E,\n\t\tcos: Math.cos,\n\t\tsin: Math.sin,\n\t\ttan: Math.tan,\n\t\tacos: Math.acos,\n\t\tasin: Math.asin,\n\t\tatan: Math.atan,\n\t\tatan2: F2(Math.atan2),\n\n\t\tdegrees: degrees,\n\t\tturns: turns,\n\t\tfromPolar: fromPolar,\n\t\ttoPolar: toPolar,\n\n\t\tsqrt: Math.sqrt,\n\t\tlogBase: F2(logBase),\n\t\tnegate: negate,\n\t\tabs: abs,\n\t\tmin: F2(min),\n\t\tmax: F2(max),\n\t\tclamp: F3(clamp),\n\t\tcompare: Utils.compare,\n\n\t\txor: F2(xor),\n\t\tnot: not,\n\n\t\ttruncate: truncate,\n\t\tceiling: Math.ceil,\n\t\tfloor: Math.floor,\n\t\tround: Math.round,\n\t\ttoFloat: function(x) { return x; },\n\t\tisNaN: isNaN,\n\t\tisInfinite: isInfinite\n\t};\n};\n\nElm.Native.Port = {};\n\nElm.Native.Port.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Port = localRuntime.Native.Port || {};\n\tif (localRuntime.Native.Port.values)\n\t{\n\t\treturn localRuntime.Native.Port.values;\n\t}\n\n\tvar NS;\n\n\t// INBOUND\n\n\tfunction inbound(name, type, converter)\n\t{\n\t\tif (!localRuntime.argsTracker[name])\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'Port Error:\\n' +\n\t\t\t\t'No argument was given for the port named \\'' + name + '\\' with type:\\n\\n' +\n\t\t\t\t'    ' + type.split('\\n').join('\\n        ') + '\\n\\n' +\n\t\t\t\t'You need to provide an initial value!\\n\\n' +\n\t\t\t\t'Find out more about ports here <http://elm-lang.org/learn/Ports.elm>'\n\t\t\t);\n\t\t}\n\t\tvar arg = localRuntime.argsTracker[name];\n\t\targ.used = true;\n\n\t\treturn jsToElm(name, type, converter, arg.value);\n\t}\n\n\n\tfunction inboundSignal(name, type, converter)\n\t{\n\t\tvar initialValue = inbound(name, type, converter);\n\n\t\tif (!NS)\n\t\t{\n\t\t\tNS = Elm.Native.Signal.make(localRuntime);\n\t\t}\n\t\tvar signal = NS.input('inbound-port-' + name, initialValue);\n\n\t\tfunction send(jsValue)\n\t\t{\n\t\t\tvar elmValue = jsToElm(name, type, converter, jsValue);\n\t\t\tsetTimeout(function() {\n\t\t\t\tlocalRuntime.notify(signal.id, elmValue);\n\t\t\t}, 0);\n\t\t}\n\n\t\tlocalRuntime.ports[name] = { send: send };\n\n\t\treturn signal;\n\t}\n\n\n\tfunction jsToElm(name, type, converter, value)\n\t{\n\t\ttry\n\t\t{\n\t\t\treturn converter(value);\n\t\t}\n\t\tcatch(e)\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'Port Error:\\n' +\n\t\t\t\t'Regarding the port named \\'' + name + '\\' with type:\\n\\n' +\n\t\t\t\t'    ' + type.split('\\n').join('\\n        ') + '\\n\\n' +\n\t\t\t\t'You just sent the value:\\n\\n' +\n\t\t\t\t'    ' + JSON.stringify(value) + '\\n\\n' +\n\t\t\t\t'but it cannot be converted to the necessary type.\\n' +\n\t\t\t\te.message\n\t\t\t);\n\t\t}\n\t}\n\n\n\t// OUTBOUND\n\n\tfunction outbound(name, converter, elmValue)\n\t{\n\t\tlocalRuntime.ports[name] = converter(elmValue);\n\t}\n\n\n\tfunction outboundSignal(name, converter, signal)\n\t{\n\t\tvar subscribers = [];\n\n\t\tfunction subscribe(handler)\n\t\t{\n\t\t\tsubscribers.push(handler);\n\t\t}\n\t\tfunction unsubscribe(handler)\n\t\t{\n\t\t\tsubscribers.pop(subscribers.indexOf(handler));\n\t\t}\n\n\t\tfunction notify(elmValue)\n\t\t{\n\t\t\tvar jsValue = converter(elmValue);\n\t\t\tvar len = subscribers.length;\n\t\t\tfor (var i = 0; i < len; ++i)\n\t\t\t{\n\t\t\t\tsubscribers[i](jsValue);\n\t\t\t}\n\t\t}\n\n\t\tif (!NS)\n\t\t{\n\t\t\tNS = Elm.Native.Signal.make(localRuntime);\n\t\t}\n\t\tNS.output('outbound-port-' + name, notify, signal);\n\n\t\tlocalRuntime.ports[name] = {\n\t\t\tsubscribe: subscribe,\n\t\t\tunsubscribe: unsubscribe\n\t\t};\n\n\t\treturn signal;\n\t}\n\n\n\treturn localRuntime.Native.Port.values = {\n\t\tinbound: inbound,\n\t\toutbound: outbound,\n\t\tinboundSignal: inboundSignal,\n\t\toutboundSignal: outboundSignal\n\t};\n};\n\nif (!Elm.fullscreen) {\n\t(function() {\n\t\t'use strict';\n\n\t\tvar Display = {\n\t\t\tFULLSCREEN: 0,\n\t\t\tCOMPONENT: 1,\n\t\t\tNONE: 2\n\t\t};\n\n\t\tElm.fullscreen = function(module, args)\n\t\t{\n\t\t\tvar container = document.createElement('div');\n\t\t\tdocument.body.appendChild(container);\n\t\t\treturn init(Display.FULLSCREEN, container, module, args || {});\n\t\t};\n\n\t\tElm.embed = function(module, container, args)\n\t\t{\n\t\t\tvar tag = container.tagName;\n\t\t\tif (tag !== 'DIV')\n\t\t\t{\n\t\t\t\tthrow new Error('Elm.node must be given a DIV, not a ' + tag + '.');\n\t\t\t}\n\t\t\treturn init(Display.COMPONENT, container, module, args || {});\n\t\t};\n\n\t\tElm.worker = function(module, args)\n\t\t{\n\t\t\treturn init(Display.NONE, {}, module, args || {});\n\t\t};\n\n\t\tfunction init(display, container, module, args, moduleToReplace)\n\t\t{\n\t\t\t// defining state needed for an instance of the Elm RTS\n\t\t\tvar inputs = [];\n\n\t\t\t/* OFFSET\n\t\t\t * Elm's time traveling debugger lets you pause time. This means\n\t\t\t * \"now\" may be shifted a bit into the past. By wrapping Date.now()\n\t\t\t * we can manage this.\n\t\t\t */\n\t\t\tvar timer = {\n\t\t\t\tprogramStart: Date.now(),\n\t\t\t\tnow: function()\n\t\t\t\t{\n\t\t\t\t\treturn Date.now();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar updateInProgress = false;\n\t\t\tfunction notify(id, v)\n\t\t\t{\n\t\t\t\tif (updateInProgress)\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'The notify function has been called synchronously!\\n' +\n\t\t\t\t\t\t'This can lead to frames being dropped.\\n' +\n\t\t\t\t\t\t'Definitely report this to <https://github.com/elm-lang/Elm/issues>\\n');\n\t\t\t\t}\n\t\t\t\tupdateInProgress = true;\n\t\t\t\tvar timestep = timer.now();\n\t\t\t\tfor (var i = inputs.length; i--; )\n\t\t\t\t{\n\t\t\t\t\tinputs[i].notify(timestep, id, v);\n\t\t\t\t}\n\t\t\t\tupdateInProgress = false;\n\t\t\t}\n\t\t\tfunction setTimeout(func, delay)\n\t\t\t{\n\t\t\t\treturn window.setTimeout(func, delay);\n\t\t\t}\n\n\t\t\tvar listeners = [];\n\t\t\tfunction addListener(relevantInputs, domNode, eventName, func)\n\t\t\t{\n\t\t\t\tdomNode.addEventListener(eventName, func);\n\t\t\t\tvar listener = {\n\t\t\t\t\trelevantInputs: relevantInputs,\n\t\t\t\t\tdomNode: domNode,\n\t\t\t\t\teventName: eventName,\n\t\t\t\t\tfunc: func\n\t\t\t\t};\n\t\t\t\tlisteners.push(listener);\n\t\t\t}\n\n\t\t\tvar argsTracker = {};\n\t\t\tfor (var name in args)\n\t\t\t{\n\t\t\t\targsTracker[name] = {\n\t\t\t\t\tvalue: args[name],\n\t\t\t\t\tused: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// create the actual RTS. Any impure modules will attach themselves to this\n\t\t\t// object. This permits many Elm programs to be embedded per document.\n\t\t\tvar elm = {\n\t\t\t\tnotify: notify,\n\t\t\t\tsetTimeout: setTimeout,\n\t\t\t\tnode: container,\n\t\t\t\taddListener: addListener,\n\t\t\t\tinputs: inputs,\n\t\t\t\ttimer: timer,\n\t\t\t\targsTracker: argsTracker,\n\t\t\t\tports: {},\n\n\t\t\t\tisFullscreen: function() { return display === Display.FULLSCREEN; },\n\t\t\t\tisEmbed: function() { return display === Display.COMPONENT; },\n\t\t\t\tisWorker: function() { return display === Display.NONE; }\n\t\t\t};\n\n\t\t\tfunction swap(newModule)\n\t\t\t{\n\t\t\t\tremoveListeners(listeners);\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tvar newElm = init(display, div, newModule, args, elm);\n\t\t\t\tinputs = [];\n\n\t\t\t\treturn newElm;\n\t\t\t}\n\n\t\t\tfunction dispose()\n\t\t\t{\n\t\t\t\tremoveListeners(listeners);\n\t\t\t\tinputs = [];\n\t\t\t}\n\n\t\t\tvar Module = {};\n\t\t\ttry\n\t\t\t{\n\t\t\t\tModule = module.make(elm);\n\t\t\t\tcheckInputs(elm);\n\t\t\t}\n\t\t\tcatch (error)\n\t\t\t{\n\t\t\t\tif (typeof container.appendChild === \"function\")\n\t\t\t\t{\n\t\t\t\t\tcontainer.appendChild(errorNode(error.message));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.error(error.message);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (display !== Display.NONE)\n\t\t\t{\n\t\t\t\tvar graphicsNode = initGraphics(elm, Module);\n\t\t\t}\n\n\t\t\tvar rootNode = { kids: inputs };\n\t\t\ttrimDeadNodes(rootNode);\n\t\t\tinputs = rootNode.kids;\n\t\t\tfilterListeners(inputs, listeners);\n\n\t\t\taddReceivers(elm.ports);\n\n\t\t\tif (typeof moduleToReplace !== 'undefined')\n\t\t\t{\n\t\t\t\thotSwap(moduleToReplace, elm);\n\n\t\t\t\t// rerender scene if graphics are enabled.\n\t\t\t\tif (typeof graphicsNode !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tgraphicsNode.notify(0, true, 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tswap: swap,\n\t\t\t\tports: elm.ports,\n\t\t\t\tdispose: dispose\n\t\t\t};\n\t\t}\n\n\t\tfunction checkInputs(elm)\n\t\t{\n\t\t\tvar argsTracker = elm.argsTracker;\n\t\t\tfor (var name in argsTracker)\n\t\t\t{\n\t\t\t\tif (!argsTracker[name].used)\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"Port Error:\\nYou provided an argument named '\" + name +\n\t\t\t\t\t\t\"' but there is no corresponding port!\\n\\n\" +\n\t\t\t\t\t\t\"Maybe add a port '\" + name + \"' to your Elm module?\\n\" +\n\t\t\t\t\t\t\"Maybe remove the '\" + name + \"' argument from your initialization code in JS?\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction errorNode(message)\n\t\t{\n\t\t\tvar code = document.createElement('code');\n\n\t\t\tvar lines = message.split('\\n');\n\t\t\tcode.appendChild(document.createTextNode(lines[0]));\n\t\t\tcode.appendChild(document.createElement('br'));\n\t\t\tcode.appendChild(document.createElement('br'));\n\t\t\tfor (var i = 1; i < lines.length; ++i)\n\t\t\t{\n\t\t\t\tcode.appendChild(document.createTextNode('\\u00A0 \\u00A0 ' + lines[i].replace(/  /g, '\\u00A0 ')));\n\t\t\t\tcode.appendChild(document.createElement('br'));\n\t\t\t}\n\t\t\tcode.appendChild(document.createElement('br'));\n\t\t\tcode.appendChild(document.createTextNode('Open the developer console for more details.'));\n\t\t\treturn code;\n\t\t}\n\n\n\t\t//// FILTER SIGNALS ////\n\n\t\t// TODO: move this code into the signal module and create a function\n\t\t// Signal.initializeGraph that actually instantiates everything.\n\n\t\tfunction filterListeners(inputs, listeners)\n\t\t{\n\t\t\tloop:\n\t\t\tfor (var i = listeners.length; i--; )\n\t\t\t{\n\t\t\t\tvar listener = listeners[i];\n\t\t\t\tfor (var j = inputs.length; j--; )\n\t\t\t\t{\n\t\t\t\t\tif (listener.relevantInputs.indexOf(inputs[j].id) >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue loop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlistener.domNode.removeEventListener(listener.eventName, listener.func);\n\t\t\t}\n\t\t}\n\n\t\tfunction removeListeners(listeners)\n\t\t{\n\t\t\tfor (var i = listeners.length; i--; )\n\t\t\t{\n\t\t\t\tvar listener = listeners[i];\n\t\t\t\tlistener.domNode.removeEventListener(listener.eventName, listener.func);\n\t\t\t}\n\t\t}\n\n\t\t// add receivers for built-in ports if they are defined\n\t\tfunction addReceivers(ports)\n\t\t{\n\t\t\tif ('title' in ports)\n\t\t\t{\n\t\t\t\tif (typeof ports.title === 'string')\n\t\t\t\t{\n\t\t\t\t\tdocument.title = ports.title;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tports.title.subscribe(function(v) { document.title = v; });\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ('redirect' in ports)\n\t\t\t{\n\t\t\t\tports.redirect.subscribe(function(v) {\n\t\t\t\t\tif (v.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\twindow.location = v;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\n\t\t// returns a boolean representing whether the node is alive or not.\n\t\tfunction trimDeadNodes(node)\n\t\t{\n\t\t\tif (node.isOutput)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar liveKids = [];\n\t\t\tfor (var i = node.kids.length; i--; )\n\t\t\t{\n\t\t\t\tvar kid = node.kids[i];\n\t\t\t\tif (trimDeadNodes(kid))\n\t\t\t\t{\n\t\t\t\t\tliveKids.push(kid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode.kids = liveKids;\n\n\t\t\treturn liveKids.length > 0;\n\t\t}\n\n\n\t\t////  RENDERING  ////\n\n\t\tfunction initGraphics(elm, Module)\n\t\t{\n\t\t\tif (!('main' in Module))\n\t\t\t{\n\t\t\t\tthrow new Error(\"'main' is missing! What do I display?!\");\n\t\t\t}\n\n\t\t\tvar signalGraph = Module.main;\n\n\t\t\t// make sure the signal graph is actually a signal & extract the visual model\n\t\t\tif (!('notify' in signalGraph))\n\t\t\t{\n\t\t\t\tsignalGraph = Elm.Signal.make(elm).constant(signalGraph);\n\t\t\t}\n\t\t\tvar initialScene = signalGraph.value;\n\n\t\t\t// Figure out what the render functions should be\n\t\t\tvar render;\n\t\t\tvar update;\n\t\t\tif (initialScene.ctor === 'Element_elm_builtin')\n\t\t\t{\n\t\t\t\tvar Element = Elm.Native.Graphics.Element.make(elm);\n\t\t\t\trender = Element.render;\n\t\t\t\tupdate = Element.updateAndReplace;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar VirtualDom = Elm.Native.VirtualDom.make(elm);\n\t\t\t\trender = VirtualDom.render;\n\t\t\t\tupdate = VirtualDom.updateAndReplace;\n\t\t\t}\n\n\t\t\t// Add the initialScene to the DOM\n\t\t\tvar container = elm.node;\n\t\t\tvar node = render(initialScene);\n\t\t\twhile (container.firstChild)\n\t\t\t{\n\t\t\t\tcontainer.removeChild(container.firstChild);\n\t\t\t}\n\t\t\tcontainer.appendChild(node);\n\n\t\t\tvar _requestAnimationFrame =\n\t\t\t\ttypeof requestAnimationFrame !== 'undefined'\n\t\t\t\t\t? requestAnimationFrame\n\t\t\t\t\t: function(cb) { setTimeout(cb, 1000 / 60); }\n\t\t\t\t\t;\n\n\t\t\t// domUpdate is called whenever the main Signal changes.\n\t\t\t//\n\t\t\t// domUpdate and drawCallback implement a small state machine in order\n\t\t\t// to schedule only 1 draw per animation frame. This enforces that\n\t\t\t// once draw has been called, it will not be called again until the\n\t\t\t// next frame.\n\t\t\t//\n\t\t\t// drawCallback is scheduled whenever\n\t\t\t// 1. The state transitions from PENDING_REQUEST to EXTRA_REQUEST, or\n\t\t\t// 2. The state transitions from NO_REQUEST to PENDING_REQUEST\n\t\t\t//\n\t\t\t// Invariants:\n\t\t\t// 1. In the NO_REQUEST state, there is never a scheduled drawCallback.\n\t\t\t// 2. In the PENDING_REQUEST and EXTRA_REQUEST states, there is always exactly 1\n\t\t\t//    scheduled drawCallback.\n\t\t\tvar NO_REQUEST = 0;\n\t\t\tvar PENDING_REQUEST = 1;\n\t\t\tvar EXTRA_REQUEST = 2;\n\t\t\tvar state = NO_REQUEST;\n\t\t\tvar savedScene = initialScene;\n\t\t\tvar scheduledScene = initialScene;\n\n\t\t\tfunction domUpdate(newScene)\n\t\t\t{\n\t\t\t\tscheduledScene = newScene;\n\n\t\t\t\tswitch (state)\n\t\t\t\t{\n\t\t\t\t\tcase NO_REQUEST:\n\t\t\t\t\t\t_requestAnimationFrame(drawCallback);\n\t\t\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase PENDING_REQUEST:\n\t\t\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase EXTRA_REQUEST:\n\t\t\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction drawCallback()\n\t\t\t{\n\t\t\t\tswitch (state)\n\t\t\t\t{\n\t\t\t\t\tcase NO_REQUEST:\n\t\t\t\t\t\t// This state should not be possible. How can there be no\n\t\t\t\t\t\t// request, yet somehow we are actively fulfilling a\n\t\t\t\t\t\t// request?\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Unexpected draw callback.\\n' +\n\t\t\t\t\t\t\t'Please report this to <https://github.com/elm-lang/core/issues>.'\n\t\t\t\t\t\t);\n\n\t\t\t\t\tcase PENDING_REQUEST:\n\t\t\t\t\t\t// At this point, we do not *know* that another frame is\n\t\t\t\t\t\t// needed, but we make an extra request to rAF just in\n\t\t\t\t\t\t// case. It's possible to drop a frame if rAF is called\n\t\t\t\t\t\t// too late, so we just do it preemptively.\n\t\t\t\t\t\t_requestAnimationFrame(drawCallback);\n\t\t\t\t\t\tstate = EXTRA_REQUEST;\n\n\t\t\t\t\t\t// There's also stuff we definitely need to draw.\n\t\t\t\t\t\tdraw();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tcase EXTRA_REQUEST:\n\t\t\t\t\t\t// Turns out the extra request was not needed, so we will\n\t\t\t\t\t\t// stop calling rAF. No reason to call it all the time if\n\t\t\t\t\t\t// no one needs it.\n\t\t\t\t\t\tstate = NO_REQUEST;\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction draw()\n\t\t\t{\n\t\t\t\tupdate(elm.node.firstChild, savedScene, scheduledScene);\n\t\t\t\tif (elm.Native.Window)\n\t\t\t\t{\n\t\t\t\t\telm.Native.Window.values.resizeIfNeeded();\n\t\t\t\t}\n\t\t\t\tsavedScene = scheduledScene;\n\t\t\t}\n\n\t\t\tvar renderer = Elm.Native.Signal.make(elm).output('main', domUpdate, signalGraph);\n\n\t\t\t// must check for resize after 'renderer' is created so\n\t\t\t// that changes show up.\n\t\t\tif (elm.Native.Window)\n\t\t\t{\n\t\t\t\telm.Native.Window.values.resizeIfNeeded();\n\t\t\t}\n\n\t\t\treturn renderer;\n\t\t}\n\n\t\t//// HOT SWAPPING ////\n\n\t\t// Returns boolean indicating if the swap was successful.\n\t\t// Requires that the two signal graphs have exactly the same\n\t\t// structure.\n\t\tfunction hotSwap(from, to)\n\t\t{\n\t\t\tfunction similar(nodeOld, nodeNew)\n\t\t\t{\n\t\t\t\tif (nodeOld.id !== nodeNew.id)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (nodeOld.isOutput)\n\t\t\t\t{\n\t\t\t\t\treturn nodeNew.isOutput;\n\t\t\t\t}\n\t\t\t\treturn nodeOld.kids.length === nodeNew.kids.length;\n\t\t\t}\n\t\t\tfunction swap(nodeOld, nodeNew)\n\t\t\t{\n\t\t\t\tnodeNew.value = nodeOld.value;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar canSwap = depthFirstTraversals(similar, from.inputs, to.inputs);\n\t\t\tif (canSwap)\n\t\t\t{\n\t\t\t\tdepthFirstTraversals(swap, from.inputs, to.inputs);\n\t\t\t}\n\t\t\tfrom.node.parentNode.replaceChild(to.node, from.node);\n\n\t\t\treturn canSwap;\n\t\t}\n\n\t\t// Returns false if the node operation f ever fails.\n\t\tfunction depthFirstTraversals(f, queueOld, queueNew)\n\t\t{\n\t\t\tif (queueOld.length !== queueNew.length)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tqueueOld = queueOld.slice(0);\n\t\t\tqueueNew = queueNew.slice(0);\n\n\t\t\tvar seen = [];\n\t\t\twhile (queueOld.length > 0 && queueNew.length > 0)\n\t\t\t{\n\t\t\t\tvar nodeOld = queueOld.pop();\n\t\t\t\tvar nodeNew = queueNew.pop();\n\t\t\t\tif (seen.indexOf(nodeOld.id) < 0)\n\t\t\t\t{\n\t\t\t\t\tif (!f(nodeOld, nodeNew))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tqueueOld = queueOld.concat(nodeOld.kids || []);\n\t\t\t\t\tqueueNew = queueNew.concat(nodeNew.kids || []);\n\t\t\t\t\tseen.push(nodeOld.id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}());\n\n\tfunction F2(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return fun(a,b); }; }\n\t\twrapper.arity = 2;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F3(fun)\n\t{\n\t\tfunction wrapper(a) {\n\t\t\treturn function(b) { return function(c) { return fun(a, b, c); }; };\n\t\t}\n\t\twrapper.arity = 3;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F4(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return fun(a, b, c, d); }; }; };\n\t\t}\n\t\twrapper.arity = 4;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F5(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };\n\t\t}\n\t\twrapper.arity = 5;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F6(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return function(f) {\n\t\t\treturn fun(a, b, c, d, e, f); }; }; }; }; };\n\t\t}\n\t\twrapper.arity = 6;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F7(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return function(f) {\n\t\t\treturn function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };\n\t\t}\n\t\twrapper.arity = 7;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F8(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return function(f) {\n\t\t\treturn function(g) { return function(h) {\n\t\t\treturn fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };\n\t\t}\n\t\twrapper.arity = 8;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F9(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return function(f) {\n\t\t\treturn function(g) { return function(h) { return function(i) {\n\t\t\treturn fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };\n\t\t}\n\t\twrapper.arity = 9;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction A2(fun, a, b)\n\t{\n\t\treturn fun.arity === 2\n\t\t\t? fun.func(a, b)\n\t\t\t: fun(a)(b);\n\t}\n\tfunction A3(fun, a, b, c)\n\t{\n\t\treturn fun.arity === 3\n\t\t\t? fun.func(a, b, c)\n\t\t\t: fun(a)(b)(c);\n\t}\n\tfunction A4(fun, a, b, c, d)\n\t{\n\t\treturn fun.arity === 4\n\t\t\t? fun.func(a, b, c, d)\n\t\t\t: fun(a)(b)(c)(d);\n\t}\n\tfunction A5(fun, a, b, c, d, e)\n\t{\n\t\treturn fun.arity === 5\n\t\t\t? fun.func(a, b, c, d, e)\n\t\t\t: fun(a)(b)(c)(d)(e);\n\t}\n\tfunction A6(fun, a, b, c, d, e, f)\n\t{\n\t\treturn fun.arity === 6\n\t\t\t? fun.func(a, b, c, d, e, f)\n\t\t\t: fun(a)(b)(c)(d)(e)(f);\n\t}\n\tfunction A7(fun, a, b, c, d, e, f, g)\n\t{\n\t\treturn fun.arity === 7\n\t\t\t? fun.func(a, b, c, d, e, f, g)\n\t\t\t: fun(a)(b)(c)(d)(e)(f)(g);\n\t}\n\tfunction A8(fun, a, b, c, d, e, f, g, h)\n\t{\n\t\treturn fun.arity === 8\n\t\t\t? fun.func(a, b, c, d, e, f, g, h)\n\t\t\t: fun(a)(b)(c)(d)(e)(f)(g)(h);\n\t}\n\tfunction A9(fun, a, b, c, d, e, f, g, h, i)\n\t{\n\t\treturn fun.arity === 9\n\t\t\t? fun.func(a, b, c, d, e, f, g, h, i)\n\t\t\t: fun(a)(b)(c)(d)(e)(f)(g)(h)(i);\n\t}\n}\n\nElm.Native = Elm.Native || {};\nElm.Native.Utils = {};\nElm.Native.Utils.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Utils = localRuntime.Native.Utils || {};\n\tif (localRuntime.Native.Utils.values)\n\t{\n\t\treturn localRuntime.Native.Utils.values;\n\t}\n\n\n\t// COMPARISONS\n\n\tfunction eq(l, r)\n\t{\n\t\tvar stack = [{'x': l, 'y': r}];\n\t\twhile (stack.length > 0)\n\t\t{\n\t\t\tvar front = stack.pop();\n\t\t\tvar x = front.x;\n\t\t\tvar y = front.y;\n\t\t\tif (x === y)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (typeof x === 'object')\n\t\t\t{\n\t\t\t\tvar c = 0;\n\t\t\t\tfor (var i in x)\n\t\t\t\t{\n\t\t\t\t\t++c;\n\t\t\t\t\tif (i in y)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (i !== 'ctor')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack.push({ 'x': x[i], 'y': y[i] });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ('ctor' in x)\n\t\t\t\t{\n\t\t\t\t\tstack.push({'x': x.ctor, 'y': y.ctor});\n\t\t\t\t}\n\t\t\t\tif (c !== Object.keys(y).length)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof x === 'function')\n\t\t\t{\n\t\t\t\tthrow new Error('Equality error: general function equality is ' +\n\t\t\t\t\t\t\t\t'undecidable, and therefore, unsupported');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t// code in Generate/JavaScript.hs depends on the particular\n\t// integer values assigned to LT, EQ, and GT\n\tvar LT = -1, EQ = 0, GT = 1, ord = ['LT', 'EQ', 'GT'];\n\n\tfunction compare(x, y)\n\t{\n\t\treturn {\n\t\t\tctor: ord[cmp(x, y) + 1]\n\t\t};\n\t}\n\n\tfunction cmp(x, y) {\n\t\tvar ord;\n\t\tif (typeof x !== 'object')\n\t\t{\n\t\t\treturn x === y ? EQ : x < y ? LT : GT;\n\t\t}\n\t\telse if (x.isChar)\n\t\t{\n\t\t\tvar a = x.toString();\n\t\t\tvar b = y.toString();\n\t\t\treturn a === b\n\t\t\t\t? EQ\n\t\t\t\t: a < b\n\t\t\t\t\t? LT\n\t\t\t\t\t: GT;\n\t\t}\n\t\telse if (x.ctor === '::' || x.ctor === '[]')\n\t\t{\n\t\t\twhile (true)\n\t\t\t{\n\t\t\t\tif (x.ctor === '[]' && y.ctor === '[]')\n\t\t\t\t{\n\t\t\t\t\treturn EQ;\n\t\t\t\t}\n\t\t\t\tif (x.ctor !== y.ctor)\n\t\t\t\t{\n\t\t\t\t\treturn x.ctor === '[]' ? LT : GT;\n\t\t\t\t}\n\t\t\t\tord = cmp(x._0, y._0);\n\t\t\t\tif (ord !== EQ)\n\t\t\t\t{\n\t\t\t\t\treturn ord;\n\t\t\t\t}\n\t\t\t\tx = x._1;\n\t\t\t\ty = y._1;\n\t\t\t}\n\t\t}\n\t\telse if (x.ctor.slice(0, 6) === '_Tuple')\n\t\t{\n\t\t\tvar n = x.ctor.slice(6) - 0;\n\t\t\tvar err = 'cannot compare tuples with more than 6 elements.';\n\t\t\tif (n === 0) return EQ;\n\t\t\tif (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;\n\t\t\tif (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;\n\t\t\tif (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;\n\t\t\tif (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;\n\t\t\tif (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;\n\t\t\tif (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;\n\t\t\tif (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }\n\t\t\treturn EQ;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthrow new Error('Comparison error: comparison is only defined on ints, ' +\n\t\t\t\t\t\t\t'floats, times, chars, strings, lists of comparable values, ' +\n\t\t\t\t\t\t\t'and tuples of comparable values.');\n\t\t}\n\t}\n\n\n\t// TUPLES\n\n\tvar Tuple0 = {\n\t\tctor: '_Tuple0'\n\t};\n\n\tfunction Tuple2(x, y)\n\t{\n\t\treturn {\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: x,\n\t\t\t_1: y\n\t\t};\n\t}\n\n\n\t// LITERALS\n\n\tfunction chr(c)\n\t{\n\t\tvar x = new String(c);\n\t\tx.isChar = true;\n\t\treturn x;\n\t}\n\n\tfunction txt(str)\n\t{\n\t\tvar t = new String(str);\n\t\tt.text = true;\n\t\treturn t;\n\t}\n\n\n\t// GUID\n\n\tvar count = 0;\n\tfunction guid(_)\n\t{\n\t\treturn count++;\n\t}\n\n\n\t// RECORDS\n\n\tfunction update(oldRecord, updatedFields)\n\t{\n\t\tvar newRecord = {};\n\t\tfor (var key in oldRecord)\n\t\t{\n\t\t\tvar value = (key in updatedFields) ? updatedFields[key] : oldRecord[key];\n\t\t\tnewRecord[key] = value;\n\t\t}\n\t\treturn newRecord;\n\t}\n\n\n\t// MOUSE COORDINATES\n\n\tfunction getXY(e)\n\t{\n\t\tvar posx = 0;\n\t\tvar posy = 0;\n\t\tif (e.pageX || e.pageY)\n\t\t{\n\t\t\tposx = e.pageX;\n\t\t\tposy = e.pageY;\n\t\t}\n\t\telse if (e.clientX || e.clientY)\n\t\t{\n\t\t\tposx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n\t\t\tposy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n\t\t}\n\n\t\tif (localRuntime.isEmbed())\n\t\t{\n\t\t\tvar rect = localRuntime.node.getBoundingClientRect();\n\t\t\tvar relx = rect.left + document.body.scrollLeft + document.documentElement.scrollLeft;\n\t\t\tvar rely = rect.top + document.body.scrollTop + document.documentElement.scrollTop;\n\t\t\t// TODO: figure out if there is a way to avoid rounding here\n\t\t\tposx = posx - Math.round(relx) - localRuntime.node.clientLeft;\n\t\t\tposy = posy - Math.round(rely) - localRuntime.node.clientTop;\n\t\t}\n\t\treturn Tuple2(posx, posy);\n\t}\n\n\n\t//// LIST STUFF ////\n\n\tvar Nil = { ctor: '[]' };\n\n\tfunction Cons(hd, tl)\n\t{\n\t\treturn {\n\t\t\tctor: '::',\n\t\t\t_0: hd,\n\t\t\t_1: tl\n\t\t};\n\t}\n\n\tfunction list(arr)\n\t{\n\t\tvar out = Nil;\n\t\tfor (var i = arr.length; i--; )\n\t\t{\n\t\t\tout = Cons(arr[i], out);\n\t\t}\n\t\treturn out;\n\t}\n\n\tfunction range(lo, hi)\n\t{\n\t\tvar list = Nil;\n\t\tif (lo <= hi)\n\t\t{\n\t\t\tdo\n\t\t\t{\n\t\t\t\tlist = Cons(hi, list);\n\t\t\t}\n\t\t\twhile (hi-- > lo);\n\t\t}\n\t\treturn list;\n\t}\n\n\tfunction append(xs, ys)\n\t{\n\t\t// append Strings\n\t\tif (typeof xs === 'string')\n\t\t{\n\t\t\treturn xs + ys;\n\t\t}\n\n\t\t// append Text\n\t\tif (xs.ctor.slice(0, 5) === 'Text:')\n\t\t{\n\t\t\treturn {\n\t\t\t\tctor: 'Text:Append',\n\t\t\t\t_0: xs,\n\t\t\t\t_1: ys\n\t\t\t};\n\t\t}\n\n\n\t\t// append Lists\n\t\tif (xs.ctor === '[]')\n\t\t{\n\t\t\treturn ys;\n\t\t}\n\t\tvar root = Cons(xs._0, Nil);\n\t\tvar curr = root;\n\t\txs = xs._1;\n\t\twhile (xs.ctor !== '[]')\n\t\t{\n\t\t\tcurr._1 = Cons(xs._0, Nil);\n\t\t\txs = xs._1;\n\t\t\tcurr = curr._1;\n\t\t}\n\t\tcurr._1 = ys;\n\t\treturn root;\n\t}\n\n\n\t// CRASHES\n\n\tfunction crash(moduleName, region)\n\t{\n\t\treturn function(message) {\n\t\t\tthrow new Error(\n\t\t\t\t'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\\n'\n\t\t\t\t+ 'The message provided by the code author is:\\n\\n    '\n\t\t\t\t+ message\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction crashCase(moduleName, region, value)\n\t{\n\t\treturn function(message) {\n\t\t\tthrow new Error(\n\t\t\t\t'Ran into a `Debug.crash` in module `' + moduleName + '`\\n\\n'\n\t\t\t\t+ 'This was caused by the `case` expression ' + regionToString(region) + '.\\n'\n\t\t\t\t+ 'One of the branches ended with a crash and the following value got through:\\n\\n    ' + toString(value) + '\\n\\n'\n\t\t\t\t+ 'The message provided by the code author is:\\n\\n    '\n\t\t\t\t+ message\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction regionToString(region)\n\t{\n\t\tif (region.start.line == region.end.line)\n\t\t{\n\t\t\treturn 'on line ' + region.start.line;\n\t\t}\n\t\treturn 'between lines ' + region.start.line + ' and ' + region.end.line;\n\t}\n\n\n\t// BAD PORTS\n\n\tfunction badPort(expected, received)\n\t{\n\t\tthrow new Error(\n\t\t\t'Runtime error when sending values through a port.\\n\\n'\n\t\t\t+ 'Expecting ' + expected + ' but was given ' + formatValue(received)\n\t\t);\n\t}\n\n\tfunction formatValue(value)\n\t{\n\t\t// Explicity format undefined values as \"undefined\"\n\t\t// because JSON.stringify(undefined) unhelpfully returns \"\"\n\t\treturn (value === undefined) ? \"undefined\" : JSON.stringify(value);\n\t}\n\n\n\t// TO STRING\n\n\tvar _Array;\n\tvar Dict;\n\tvar List;\n\n\tvar toString = function(v)\n\t{\n\t\tvar type = typeof v;\n\t\tif (type === 'function')\n\t\t{\n\t\t\tvar name = v.func ? v.func.name : v.name;\n\t\t\treturn '<function' + (name === '' ? '' : ': ') + name + '>';\n\t\t}\n\t\telse if (type === 'boolean')\n\t\t{\n\t\t\treturn v ? 'True' : 'False';\n\t\t}\n\t\telse if (type === 'number')\n\t\t{\n\t\t\treturn v + '';\n\t\t}\n\t\telse if ((v instanceof String) && v.isChar)\n\t\t{\n\t\t\treturn '\\'' + addSlashes(v, true) + '\\'';\n\t\t}\n\t\telse if (type === 'string')\n\t\t{\n\t\t\treturn '\"' + addSlashes(v, false) + '\"';\n\t\t}\n\t\telse if (type === 'object' && 'ctor' in v)\n\t\t{\n\t\t\tif (v.ctor.substring(0, 6) === '_Tuple')\n\t\t\t{\n\t\t\t\tvar output = [];\n\t\t\t\tfor (var k in v)\n\t\t\t\t{\n\t\t\t\t\tif (k === 'ctor') continue;\n\t\t\t\t\toutput.push(toString(v[k]));\n\t\t\t\t}\n\t\t\t\treturn '(' + output.join(',') + ')';\n\t\t\t}\n\t\t\telse if (v.ctor === '_Array')\n\t\t\t{\n\t\t\t\tif (!_Array)\n\t\t\t\t{\n\t\t\t\t\t_Array = Elm.Array.make(localRuntime);\n\t\t\t\t}\n\t\t\t\tvar list = _Array.toList(v);\n\t\t\t\treturn 'Array.fromList ' + toString(list);\n\t\t\t}\n\t\t\telse if (v.ctor === '::')\n\t\t\t{\n\t\t\t\tvar output = '[' + toString(v._0);\n\t\t\t\tv = v._1;\n\t\t\t\twhile (v.ctor === '::')\n\t\t\t\t{\n\t\t\t\t\toutput += ',' + toString(v._0);\n\t\t\t\t\tv = v._1;\n\t\t\t\t}\n\t\t\t\treturn output + ']';\n\t\t\t}\n\t\t\telse if (v.ctor === '[]')\n\t\t\t{\n\t\t\t\treturn '[]';\n\t\t\t}\n\t\t\telse if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin' || v.ctor === 'Set_elm_builtin')\n\t\t\t{\n\t\t\t\tif (!Dict)\n\t\t\t\t{\n\t\t\t\t\tDict = Elm.Dict.make(localRuntime);\n\t\t\t\t}\n\t\t\t\tvar list;\n\t\t\t\tvar name;\n\t\t\t\tif (v.ctor === 'Set_elm_builtin')\n\t\t\t\t{\n\t\t\t\t\tif (!List)\n\t\t\t\t\t{\n\t\t\t\t\t\tList = Elm.List.make(localRuntime);\n\t\t\t\t\t}\n\t\t\t\t\tname = 'Set';\n\t\t\t\t\tlist = A2(List.map, function(x) {return x._0; }, Dict.toList(v._0));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tname = 'Dict';\n\t\t\t\t\tlist = Dict.toList(v);\n\t\t\t\t}\n\t\t\t\treturn name + '.fromList ' + toString(list);\n\t\t\t}\n\t\t\telse if (v.ctor.slice(0, 5) === 'Text:')\n\t\t\t{\n\t\t\t\treturn '<text>';\n\t\t\t}\n\t\t\telse if (v.ctor === 'Element_elm_builtin')\n\t\t\t{\n\t\t\t\treturn '<element>'\n\t\t\t}\n\t\t\telse if (v.ctor === 'Form_elm_builtin')\n\t\t\t{\n\t\t\t\treturn '<form>'\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar output = '';\n\t\t\t\tfor (var i in v)\n\t\t\t\t{\n\t\t\t\t\tif (i === 'ctor') continue;\n\t\t\t\t\tvar str = toString(v[i]);\n\t\t\t\t\tvar parenless = str[0] === '{' || str[0] === '<' || str.indexOf(' ') < 0;\n\t\t\t\t\toutput += ' ' + (parenless ? str : '(' + str + ')');\n\t\t\t\t}\n\t\t\t\treturn v.ctor + output;\n\t\t\t}\n\t\t}\n\t\telse if (type === 'object' && 'notify' in v && 'id' in v)\n\t\t{\n\t\t\treturn '<signal>';\n\t\t}\n\t\telse if (type === 'object')\n\t\t{\n\t\t\tvar output = [];\n\t\t\tfor (var k in v)\n\t\t\t{\n\t\t\t\toutput.push(k + ' = ' + toString(v[k]));\n\t\t\t}\n\t\t\tif (output.length === 0)\n\t\t\t{\n\t\t\t\treturn '{}';\n\t\t\t}\n\t\t\treturn '{ ' + output.join(', ') + ' }';\n\t\t}\n\t\treturn '<internal structure>';\n\t};\n\n\tfunction addSlashes(str, isChar)\n\t{\n\t\tvar s = str.replace(/\\\\/g, '\\\\\\\\')\n\t\t\t\t  .replace(/\\n/g, '\\\\n')\n\t\t\t\t  .replace(/\\t/g, '\\\\t')\n\t\t\t\t  .replace(/\\r/g, '\\\\r')\n\t\t\t\t  .replace(/\\v/g, '\\\\v')\n\t\t\t\t  .replace(/\\0/g, '\\\\0');\n\t\tif (isChar)\n\t\t{\n\t\t\treturn s.replace(/\\'/g, '\\\\\\'');\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn s.replace(/\\\"/g, '\\\\\"');\n\t\t}\n\t}\n\n\n\treturn localRuntime.Native.Utils.values = {\n\t\teq: eq,\n\t\tcmp: cmp,\n\t\tcompare: F2(compare),\n\t\tTuple0: Tuple0,\n\t\tTuple2: Tuple2,\n\t\tchr: chr,\n\t\ttxt: txt,\n\t\tupdate: update,\n\t\tguid: guid,\n\t\tgetXY: getXY,\n\n\t\tNil: Nil,\n\t\tCons: Cons,\n\t\tlist: list,\n\t\trange: range,\n\t\tappend: F2(append),\n\n\t\tcrash: crash,\n\t\tcrashCase: crashCase,\n\t\tbadPort: badPort,\n\n\t\ttoString: toString\n\t};\n};\n\nElm.Basics = Elm.Basics || {};\nElm.Basics.make = function (_elm) {\n   \"use strict\";\n   _elm.Basics = _elm.Basics || {};\n   if (_elm.Basics.values) return _elm.Basics.values;\n   var _U = Elm.Native.Utils.make(_elm),$Native$Basics = Elm.Native.Basics.make(_elm),$Native$Utils = Elm.Native.Utils.make(_elm);\n   var _op = {};\n   var uncurry = F2(function (f,_p0) {    var _p1 = _p0;return A2(f,_p1._0,_p1._1);});\n   var curry = F3(function (f,a,b) {    return f({ctor: \"_Tuple2\",_0: a,_1: b});});\n   var flip = F3(function (f,b,a) {    return A2(f,a,b);});\n   var snd = function (_p2) {    var _p3 = _p2;return _p3._1;};\n   var fst = function (_p4) {    var _p5 = _p4;return _p5._0;};\n   var always = F2(function (a,_p6) {    return a;});\n   var identity = function (x) {    return x;};\n   _op[\"<|\"] = F2(function (f,x) {    return f(x);});\n   _op[\"|>\"] = F2(function (x,f) {    return f(x);});\n   _op[\">>\"] = F3(function (f,g,x) {    return g(f(x));});\n   _op[\"<<\"] = F3(function (g,f,x) {    return g(f(x));});\n   _op[\"++\"] = $Native$Utils.append;\n   var toString = $Native$Utils.toString;\n   var isInfinite = $Native$Basics.isInfinite;\n   var isNaN = $Native$Basics.isNaN;\n   var toFloat = $Native$Basics.toFloat;\n   var ceiling = $Native$Basics.ceiling;\n   var floor = $Native$Basics.floor;\n   var truncate = $Native$Basics.truncate;\n   var round = $Native$Basics.round;\n   var not = $Native$Basics.not;\n   var xor = $Native$Basics.xor;\n   _op[\"||\"] = $Native$Basics.or;\n   _op[\"&&\"] = $Native$Basics.and;\n   var max = $Native$Basics.max;\n   var min = $Native$Basics.min;\n   var GT = {ctor: \"GT\"};\n   var EQ = {ctor: \"EQ\"};\n   var LT = {ctor: \"LT\"};\n   var compare = $Native$Basics.compare;\n   _op[\">=\"] = $Native$Basics.ge;\n   _op[\"<=\"] = $Native$Basics.le;\n   _op[\">\"] = $Native$Basics.gt;\n   _op[\"<\"] = $Native$Basics.lt;\n   _op[\"/=\"] = $Native$Basics.neq;\n   _op[\"==\"] = $Native$Basics.eq;\n   var e = $Native$Basics.e;\n   var pi = $Native$Basics.pi;\n   var clamp = $Native$Basics.clamp;\n   var logBase = $Native$Basics.logBase;\n   var abs = $Native$Basics.abs;\n   var negate = $Native$Basics.negate;\n   var sqrt = $Native$Basics.sqrt;\n   var atan2 = $Native$Basics.atan2;\n   var atan = $Native$Basics.atan;\n   var asin = $Native$Basics.asin;\n   var acos = $Native$Basics.acos;\n   var tan = $Native$Basics.tan;\n   var sin = $Native$Basics.sin;\n   var cos = $Native$Basics.cos;\n   _op[\"^\"] = $Native$Basics.exp;\n   _op[\"%\"] = $Native$Basics.mod;\n   var rem = $Native$Basics.rem;\n   _op[\"//\"] = $Native$Basics.div;\n   _op[\"/\"] = $Native$Basics.floatDiv;\n   _op[\"*\"] = $Native$Basics.mul;\n   _op[\"-\"] = $Native$Basics.sub;\n   _op[\"+\"] = $Native$Basics.add;\n   var toPolar = $Native$Basics.toPolar;\n   var fromPolar = $Native$Basics.fromPolar;\n   var turns = $Native$Basics.turns;\n   var degrees = $Native$Basics.degrees;\n   var radians = function (t) {    return t;};\n   return _elm.Basics.values = {_op: _op\n                               ,max: max\n                               ,min: min\n                               ,compare: compare\n                               ,not: not\n                               ,xor: xor\n                               ,rem: rem\n                               ,negate: negate\n                               ,abs: abs\n                               ,sqrt: sqrt\n                               ,clamp: clamp\n                               ,logBase: logBase\n                               ,e: e\n                               ,pi: pi\n                               ,cos: cos\n                               ,sin: sin\n                               ,tan: tan\n                               ,acos: acos\n                               ,asin: asin\n                               ,atan: atan\n                               ,atan2: atan2\n                               ,round: round\n                               ,floor: floor\n                               ,ceiling: ceiling\n                               ,truncate: truncate\n                               ,toFloat: toFloat\n                               ,degrees: degrees\n                               ,radians: radians\n                               ,turns: turns\n                               ,toPolar: toPolar\n                               ,fromPolar: fromPolar\n                               ,isNaN: isNaN\n                               ,isInfinite: isInfinite\n                               ,toString: toString\n                               ,fst: fst\n                               ,snd: snd\n                               ,identity: identity\n                               ,always: always\n                               ,flip: flip\n                               ,curry: curry\n                               ,uncurry: uncurry\n                               ,LT: LT\n                               ,EQ: EQ\n                               ,GT: GT};\n};\nElm.Maybe = Elm.Maybe || {};\nElm.Maybe.make = function (_elm) {\n   \"use strict\";\n   _elm.Maybe = _elm.Maybe || {};\n   if (_elm.Maybe.values) return _elm.Maybe.values;\n   var _U = Elm.Native.Utils.make(_elm);\n   var _op = {};\n   var withDefault = F2(function ($default,maybe) {    var _p0 = maybe;if (_p0.ctor === \"Just\") {    return _p0._0;} else {    return $default;}});\n   var Nothing = {ctor: \"Nothing\"};\n   var oneOf = function (maybes) {\n      oneOf: while (true) {\n         var _p1 = maybes;\n         if (_p1.ctor === \"[]\") {\n               return Nothing;\n            } else {\n               var _p3 = _p1._0;\n               var _p2 = _p3;\n               if (_p2.ctor === \"Nothing\") {\n                     var _v3 = _p1._1;\n                     maybes = _v3;\n                     continue oneOf;\n                  } else {\n                     return _p3;\n                  }\n            }\n      }\n   };\n   var andThen = F2(function (maybeValue,callback) {\n      var _p4 = maybeValue;\n      if (_p4.ctor === \"Just\") {\n            return callback(_p4._0);\n         } else {\n            return Nothing;\n         }\n   });\n   var Just = function (a) {    return {ctor: \"Just\",_0: a};};\n   var map = F2(function (f,maybe) {    var _p5 = maybe;if (_p5.ctor === \"Just\") {    return Just(f(_p5._0));} else {    return Nothing;}});\n   var map2 = F3(function (func,ma,mb) {\n      var _p6 = {ctor: \"_Tuple2\",_0: ma,_1: mb};\n      if (_p6.ctor === \"_Tuple2\" && _p6._0.ctor === \"Just\" && _p6._1.ctor === \"Just\") {\n            return Just(A2(func,_p6._0._0,_p6._1._0));\n         } else {\n            return Nothing;\n         }\n   });\n   var map3 = F4(function (func,ma,mb,mc) {\n      var _p7 = {ctor: \"_Tuple3\",_0: ma,_1: mb,_2: mc};\n      if (_p7.ctor === \"_Tuple3\" && _p7._0.ctor === \"Just\" && _p7._1.ctor === \"Just\" && _p7._2.ctor === \"Just\") {\n            return Just(A3(func,_p7._0._0,_p7._1._0,_p7._2._0));\n         } else {\n            return Nothing;\n         }\n   });\n   var map4 = F5(function (func,ma,mb,mc,md) {\n      var _p8 = {ctor: \"_Tuple4\",_0: ma,_1: mb,_2: mc,_3: md};\n      if (_p8.ctor === \"_Tuple4\" && _p8._0.ctor === \"Just\" && _p8._1.ctor === \"Just\" && _p8._2.ctor === \"Just\" && _p8._3.ctor === \"Just\") {\n            return Just(A4(func,_p8._0._0,_p8._1._0,_p8._2._0,_p8._3._0));\n         } else {\n            return Nothing;\n         }\n   });\n   var map5 = F6(function (func,ma,mb,mc,md,me) {\n      var _p9 = {ctor: \"_Tuple5\",_0: ma,_1: mb,_2: mc,_3: md,_4: me};\n      if (_p9.ctor === \"_Tuple5\" && _p9._0.ctor === \"Just\" && _p9._1.ctor === \"Just\" && _p9._2.ctor === \"Just\" && _p9._3.ctor === \"Just\" && _p9._4.ctor === \"Just\")\n      {\n            return Just(A5(func,_p9._0._0,_p9._1._0,_p9._2._0,_p9._3._0,_p9._4._0));\n         } else {\n            return Nothing;\n         }\n   });\n   return _elm.Maybe.values = {_op: _op\n                              ,andThen: andThen\n                              ,map: map\n                              ,map2: map2\n                              ,map3: map3\n                              ,map4: map4\n                              ,map5: map5\n                              ,withDefault: withDefault\n                              ,oneOf: oneOf\n                              ,Just: Just\n                              ,Nothing: Nothing};\n};\nElm.Native.List = {};\nElm.Native.List.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.List = localRuntime.Native.List || {};\n\tif (localRuntime.Native.List.values)\n\t{\n\t\treturn localRuntime.Native.List.values;\n\t}\n\tif ('values' in Elm.Native.List)\n\t{\n\t\treturn localRuntime.Native.List.values = Elm.Native.List.values;\n\t}\n\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\tvar Nil = Utils.Nil;\n\tvar Cons = Utils.Cons;\n\n\tvar fromArray = Utils.list;\n\n\tfunction toArray(xs)\n\t{\n\t\tvar out = [];\n\t\twhile (xs.ctor !== '[]')\n\t\t{\n\t\t\tout.push(xs._0);\n\t\t\txs = xs._1;\n\t\t}\n\t\treturn out;\n\t}\n\n\t// f defined similarly for both foldl and foldr (NB: different from Haskell)\n\t// ie, foldl : (a -> b -> b) -> b -> [a] -> b\n\tfunction foldl(f, b, xs)\n\t{\n\t\tvar acc = b;\n\t\twhile (xs.ctor !== '[]')\n\t\t{\n\t\t\tacc = A2(f, xs._0, acc);\n\t\t\txs = xs._1;\n\t\t}\n\t\treturn acc;\n\t}\n\n\tfunction foldr(f, b, xs)\n\t{\n\t\tvar arr = toArray(xs);\n\t\tvar acc = b;\n\t\tfor (var i = arr.length; i--; )\n\t\t{\n\t\t\tacc = A2(f, arr[i], acc);\n\t\t}\n\t\treturn acc;\n\t}\n\n\tfunction map2(f, xs, ys)\n\t{\n\t\tvar arr = [];\n\t\twhile (xs.ctor !== '[]' && ys.ctor !== '[]')\n\t\t{\n\t\t\tarr.push(A2(f, xs._0, ys._0));\n\t\t\txs = xs._1;\n\t\t\tys = ys._1;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\tfunction map3(f, xs, ys, zs)\n\t{\n\t\tvar arr = [];\n\t\twhile (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]')\n\t\t{\n\t\t\tarr.push(A3(f, xs._0, ys._0, zs._0));\n\t\t\txs = xs._1;\n\t\t\tys = ys._1;\n\t\t\tzs = zs._1;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\tfunction map4(f, ws, xs, ys, zs)\n\t{\n\t\tvar arr = [];\n\t\twhile (   ws.ctor !== '[]'\n\t\t\t   && xs.ctor !== '[]'\n\t\t\t   && ys.ctor !== '[]'\n\t\t\t   && zs.ctor !== '[]')\n\t\t{\n\t\t\tarr.push(A4(f, ws._0, xs._0, ys._0, zs._0));\n\t\t\tws = ws._1;\n\t\t\txs = xs._1;\n\t\t\tys = ys._1;\n\t\t\tzs = zs._1;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\tfunction map5(f, vs, ws, xs, ys, zs)\n\t{\n\t\tvar arr = [];\n\t\twhile (   vs.ctor !== '[]'\n\t\t\t   && ws.ctor !== '[]'\n\t\t\t   && xs.ctor !== '[]'\n\t\t\t   && ys.ctor !== '[]'\n\t\t\t   && zs.ctor !== '[]')\n\t\t{\n\t\t\tarr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0));\n\t\t\tvs = vs._1;\n\t\t\tws = ws._1;\n\t\t\txs = xs._1;\n\t\t\tys = ys._1;\n\t\t\tzs = zs._1;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\tfunction sortBy(f, xs)\n\t{\n\t\treturn fromArray(toArray(xs).sort(function(a, b) {\n\t\t\treturn Utils.cmp(f(a), f(b));\n\t\t}));\n\t}\n\n\tfunction sortWith(f, xs)\n\t{\n\t\treturn fromArray(toArray(xs).sort(function(a, b) {\n\t\t\tvar ord = f(a)(b).ctor;\n\t\t\treturn ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;\n\t\t}));\n\t}\n\n\tfunction take(n, xs)\n\t{\n\t\tvar arr = [];\n\t\twhile (xs.ctor !== '[]' && n > 0)\n\t\t{\n\t\t\tarr.push(xs._0);\n\t\t\txs = xs._1;\n\t\t\t--n;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\n\tElm.Native.List.values = {\n\t\tNil: Nil,\n\t\tCons: Cons,\n\t\tcons: F2(Cons),\n\t\ttoArray: toArray,\n\t\tfromArray: fromArray,\n\n\t\tfoldl: F3(foldl),\n\t\tfoldr: F3(foldr),\n\n\t\tmap2: F3(map2),\n\t\tmap3: F4(map3),\n\t\tmap4: F5(map4),\n\t\tmap5: F6(map5),\n\t\tsortBy: F2(sortBy),\n\t\tsortWith: F2(sortWith),\n\t\ttake: F2(take)\n\t};\n\treturn localRuntime.Native.List.values = Elm.Native.List.values;\n};\n\nElm.List = Elm.List || {};\nElm.List.make = function (_elm) {\n   \"use strict\";\n   _elm.List = _elm.List || {};\n   if (_elm.List.values) return _elm.List.values;\n   var _U = Elm.Native.Utils.make(_elm),$Basics = Elm.Basics.make(_elm),$Maybe = Elm.Maybe.make(_elm),$Native$List = Elm.Native.List.make(_elm);\n   var _op = {};\n   var sortWith = $Native$List.sortWith;\n   var sortBy = $Native$List.sortBy;\n   var sort = function (xs) {    return A2(sortBy,$Basics.identity,xs);};\n   var drop = F2(function (n,list) {\n      drop: while (true) if (_U.cmp(n,0) < 1) return list; else {\n            var _p0 = list;\n            if (_p0.ctor === \"[]\") {\n                  return list;\n               } else {\n                  var _v1 = n - 1,_v2 = _p0._1;\n                  n = _v1;\n                  list = _v2;\n                  continue drop;\n               }\n         }\n   });\n   var take = $Native$List.take;\n   var map5 = $Native$List.map5;\n   var map4 = $Native$List.map4;\n   var map3 = $Native$List.map3;\n   var map2 = $Native$List.map2;\n   var any = F2(function (isOkay,list) {\n      any: while (true) {\n         var _p1 = list;\n         if (_p1.ctor === \"[]\") {\n               return false;\n            } else {\n               if (isOkay(_p1._0)) return true; else {\n                     var _v4 = isOkay,_v5 = _p1._1;\n                     isOkay = _v4;\n                     list = _v5;\n                     continue any;\n                  }\n            }\n      }\n   });\n   var all = F2(function (isOkay,list) {    return $Basics.not(A2(any,function (_p2) {    return $Basics.not(isOkay(_p2));},list));});\n   var foldr = $Native$List.foldr;\n   var foldl = $Native$List.foldl;\n   var length = function (xs) {    return A3(foldl,F2(function (_p3,i) {    return i + 1;}),0,xs);};\n   var sum = function (numbers) {    return A3(foldl,F2(function (x,y) {    return x + y;}),0,numbers);};\n   var product = function (numbers) {    return A3(foldl,F2(function (x,y) {    return x * y;}),1,numbers);};\n   var maximum = function (list) {\n      var _p4 = list;\n      if (_p4.ctor === \"::\") {\n            return $Maybe.Just(A3(foldl,$Basics.max,_p4._0,_p4._1));\n         } else {\n            return $Maybe.Nothing;\n         }\n   };\n   var minimum = function (list) {\n      var _p5 = list;\n      if (_p5.ctor === \"::\") {\n            return $Maybe.Just(A3(foldl,$Basics.min,_p5._0,_p5._1));\n         } else {\n            return $Maybe.Nothing;\n         }\n   };\n   var indexedMap = F2(function (f,xs) {    return A3(map2,f,_U.range(0,length(xs) - 1),xs);});\n   var member = F2(function (x,xs) {    return A2(any,function (a) {    return _U.eq(a,x);},xs);});\n   var isEmpty = function (xs) {    var _p6 = xs;if (_p6.ctor === \"[]\") {    return true;} else {    return false;}};\n   var tail = function (list) {    var _p7 = list;if (_p7.ctor === \"::\") {    return $Maybe.Just(_p7._1);} else {    return $Maybe.Nothing;}};\n   var head = function (list) {    var _p8 = list;if (_p8.ctor === \"::\") {    return $Maybe.Just(_p8._0);} else {    return $Maybe.Nothing;}};\n   _op[\"::\"] = $Native$List.cons;\n   var map = F2(function (f,xs) {    return A3(foldr,F2(function (x,acc) {    return A2(_op[\"::\"],f(x),acc);}),_U.list([]),xs);});\n   var filter = F2(function (pred,xs) {\n      var conditionalCons = F2(function (x,xs$) {    return pred(x) ? A2(_op[\"::\"],x,xs$) : xs$;});\n      return A3(foldr,conditionalCons,_U.list([]),xs);\n   });\n   var maybeCons = F3(function (f,mx,xs) {    var _p9 = f(mx);if (_p9.ctor === \"Just\") {    return A2(_op[\"::\"],_p9._0,xs);} else {    return xs;}});\n   var filterMap = F2(function (f,xs) {    return A3(foldr,maybeCons(f),_U.list([]),xs);});\n   var reverse = function (list) {    return A3(foldl,F2(function (x,y) {    return A2(_op[\"::\"],x,y);}),_U.list([]),list);};\n   var scanl = F3(function (f,b,xs) {\n      var scan1 = F2(function (x,accAcc) {\n         var _p10 = accAcc;\n         if (_p10.ctor === \"::\") {\n               return A2(_op[\"::\"],A2(f,x,_p10._0),accAcc);\n            } else {\n               return _U.list([]);\n            }\n      });\n      return reverse(A3(foldl,scan1,_U.list([b]),xs));\n   });\n   var append = F2(function (xs,ys) {\n      var _p11 = ys;\n      if (_p11.ctor === \"[]\") {\n            return xs;\n         } else {\n            return A3(foldr,F2(function (x,y) {    return A2(_op[\"::\"],x,y);}),ys,xs);\n         }\n   });\n   var concat = function (lists) {    return A3(foldr,append,_U.list([]),lists);};\n   var concatMap = F2(function (f,list) {    return concat(A2(map,f,list));});\n   var partition = F2(function (pred,list) {\n      var step = F2(function (x,_p12) {\n         var _p13 = _p12;\n         var _p15 = _p13._0;\n         var _p14 = _p13._1;\n         return pred(x) ? {ctor: \"_Tuple2\",_0: A2(_op[\"::\"],x,_p15),_1: _p14} : {ctor: \"_Tuple2\",_0: _p15,_1: A2(_op[\"::\"],x,_p14)};\n      });\n      return A3(foldr,step,{ctor: \"_Tuple2\",_0: _U.list([]),_1: _U.list([])},list);\n   });\n   var unzip = function (pairs) {\n      var step = F2(function (_p17,_p16) {\n         var _p18 = _p17;\n         var _p19 = _p16;\n         return {ctor: \"_Tuple2\",_0: A2(_op[\"::\"],_p18._0,_p19._0),_1: A2(_op[\"::\"],_p18._1,_p19._1)};\n      });\n      return A3(foldr,step,{ctor: \"_Tuple2\",_0: _U.list([]),_1: _U.list([])},pairs);\n   };\n   var intersperse = F2(function (sep,xs) {\n      var _p20 = xs;\n      if (_p20.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            var step = F2(function (x,rest) {    return A2(_op[\"::\"],sep,A2(_op[\"::\"],x,rest));});\n            var spersed = A3(foldr,step,_U.list([]),_p20._1);\n            return A2(_op[\"::\"],_p20._0,spersed);\n         }\n   });\n   var repeatHelp = F3(function (result,n,value) {\n      repeatHelp: while (true) if (_U.cmp(n,0) < 1) return result; else {\n            var _v18 = A2(_op[\"::\"],value,result),_v19 = n - 1,_v20 = value;\n            result = _v18;\n            n = _v19;\n            value = _v20;\n            continue repeatHelp;\n         }\n   });\n   var repeat = F2(function (n,value) {    return A3(repeatHelp,_U.list([]),n,value);});\n   return _elm.List.values = {_op: _op\n                             ,isEmpty: isEmpty\n                             ,length: length\n                             ,reverse: reverse\n                             ,member: member\n                             ,head: head\n                             ,tail: tail\n                             ,filter: filter\n                             ,take: take\n                             ,drop: drop\n                             ,repeat: repeat\n                             ,append: append\n                             ,concat: concat\n                             ,intersperse: intersperse\n                             ,partition: partition\n                             ,unzip: unzip\n                             ,map: map\n                             ,map2: map2\n                             ,map3: map3\n                             ,map4: map4\n                             ,map5: map5\n                             ,filterMap: filterMap\n                             ,concatMap: concatMap\n                             ,indexedMap: indexedMap\n                             ,foldr: foldr\n                             ,foldl: foldl\n                             ,sum: sum\n                             ,product: product\n                             ,maximum: maximum\n                             ,minimum: minimum\n                             ,all: all\n                             ,any: any\n                             ,scanl: scanl\n                             ,sort: sort\n                             ,sortBy: sortBy\n                             ,sortWith: sortWith};\n};\nElm.Array = Elm.Array || {};\nElm.Array.make = function (_elm) {\n   \"use strict\";\n   _elm.Array = _elm.Array || {};\n   if (_elm.Array.values) return _elm.Array.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Array = Elm.Native.Array.make(_elm);\n   var _op = {};\n   var append = $Native$Array.append;\n   var length = $Native$Array.length;\n   var isEmpty = function (array) {    return _U.eq(length(array),0);};\n   var slice = $Native$Array.slice;\n   var set = $Native$Array.set;\n   var get = F2(function (i,array) {\n      return _U.cmp(0,i) < 1 && _U.cmp(i,$Native$Array.length(array)) < 0 ? $Maybe.Just(A2($Native$Array.get,i,array)) : $Maybe.Nothing;\n   });\n   var push = $Native$Array.push;\n   var empty = $Native$Array.empty;\n   var filter = F2(function (isOkay,arr) {\n      var update = F2(function (x,xs) {    return isOkay(x) ? A2($Native$Array.push,x,xs) : xs;});\n      return A3($Native$Array.foldl,update,$Native$Array.empty,arr);\n   });\n   var foldr = $Native$Array.foldr;\n   var foldl = $Native$Array.foldl;\n   var indexedMap = $Native$Array.indexedMap;\n   var map = $Native$Array.map;\n   var toIndexedList = function (array) {\n      return A3($List.map2,\n      F2(function (v0,v1) {    return {ctor: \"_Tuple2\",_0: v0,_1: v1};}),\n      _U.range(0,$Native$Array.length(array) - 1),\n      $Native$Array.toList(array));\n   };\n   var toList = $Native$Array.toList;\n   var fromList = $Native$Array.fromList;\n   var initialize = $Native$Array.initialize;\n   var repeat = F2(function (n,e) {    return A2(initialize,n,$Basics.always(e));});\n   var Array = {ctor: \"Array\"};\n   return _elm.Array.values = {_op: _op\n                              ,empty: empty\n                              ,repeat: repeat\n                              ,initialize: initialize\n                              ,fromList: fromList\n                              ,isEmpty: isEmpty\n                              ,length: length\n                              ,push: push\n                              ,append: append\n                              ,get: get\n                              ,set: set\n                              ,slice: slice\n                              ,toList: toList\n                              ,toIndexedList: toIndexedList\n                              ,map: map\n                              ,indexedMap: indexedMap\n                              ,filter: filter\n                              ,foldl: foldl\n                              ,foldr: foldr};\n};\nElm.Native.Char = {};\nElm.Native.Char.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Char = localRuntime.Native.Char || {};\n\tif (localRuntime.Native.Char.values)\n\t{\n\t\treturn localRuntime.Native.Char.values;\n\t}\n\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\treturn localRuntime.Native.Char.values = {\n\t\tfromCode: function(c) { return Utils.chr(String.fromCharCode(c)); },\n\t\ttoCode: function(c) { return c.charCodeAt(0); },\n\t\ttoUpper: function(c) { return Utils.chr(c.toUpperCase()); },\n\t\ttoLower: function(c) { return Utils.chr(c.toLowerCase()); },\n\t\ttoLocaleUpper: function(c) { return Utils.chr(c.toLocaleUpperCase()); },\n\t\ttoLocaleLower: function(c) { return Utils.chr(c.toLocaleLowerCase()); }\n\t};\n};\n\nElm.Char = Elm.Char || {};\nElm.Char.make = function (_elm) {\n   \"use strict\";\n   _elm.Char = _elm.Char || {};\n   if (_elm.Char.values) return _elm.Char.values;\n   var _U = Elm.Native.Utils.make(_elm),$Basics = Elm.Basics.make(_elm),$Native$Char = Elm.Native.Char.make(_elm);\n   var _op = {};\n   var fromCode = $Native$Char.fromCode;\n   var toCode = $Native$Char.toCode;\n   var toLocaleLower = $Native$Char.toLocaleLower;\n   var toLocaleUpper = $Native$Char.toLocaleUpper;\n   var toLower = $Native$Char.toLower;\n   var toUpper = $Native$Char.toUpper;\n   var isBetween = F3(function (low,high,$char) {    var code = toCode($char);return _U.cmp(code,toCode(low)) > -1 && _U.cmp(code,toCode(high)) < 1;});\n   var isUpper = A2(isBetween,_U.chr(\"A\"),_U.chr(\"Z\"));\n   var isLower = A2(isBetween,_U.chr(\"a\"),_U.chr(\"z\"));\n   var isDigit = A2(isBetween,_U.chr(\"0\"),_U.chr(\"9\"));\n   var isOctDigit = A2(isBetween,_U.chr(\"0\"),_U.chr(\"7\"));\n   var isHexDigit = function ($char) {\n      return isDigit($char) || (A3(isBetween,_U.chr(\"a\"),_U.chr(\"f\"),$char) || A3(isBetween,_U.chr(\"A\"),_U.chr(\"F\"),$char));\n   };\n   return _elm.Char.values = {_op: _op\n                             ,isUpper: isUpper\n                             ,isLower: isLower\n                             ,isDigit: isDigit\n                             ,isOctDigit: isOctDigit\n                             ,isHexDigit: isHexDigit\n                             ,toUpper: toUpper\n                             ,toLower: toLower\n                             ,toLocaleUpper: toLocaleUpper\n                             ,toLocaleLower: toLocaleLower\n                             ,toCode: toCode\n                             ,fromCode: fromCode};\n};\nElm.Native.Color = {};\nElm.Native.Color.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Color = localRuntime.Native.Color || {};\n\tif (localRuntime.Native.Color.values)\n\t{\n\t\treturn localRuntime.Native.Color.values;\n\t}\n\n\tfunction toCss(c)\n\t{\n\t\tvar format = '';\n\t\tvar colors = '';\n\t\tif (c.ctor === 'RGBA')\n\t\t{\n\t\t\tformat = 'rgb';\n\t\t\tcolors = c._0 + ', ' + c._1 + ', ' + c._2;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tformat = 'hsl';\n\t\t\tcolors = (c._0 * 180 / Math.PI) + ', ' +\n\t\t\t\t\t (c._1 * 100) + '%, ' +\n\t\t\t\t\t (c._2 * 100) + '%';\n\t\t}\n\t\tif (c._3 === 1)\n\t\t{\n\t\t\treturn format + '(' + colors + ')';\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn format + 'a(' + colors + ', ' + c._3 + ')';\n\t\t}\n\t}\n\n\treturn localRuntime.Native.Color.values = {\n\t\ttoCss: toCss\n\t};\n};\n\nElm.Color = Elm.Color || {};\nElm.Color.make = function (_elm) {\n   \"use strict\";\n   _elm.Color = _elm.Color || {};\n   if (_elm.Color.values) return _elm.Color.values;\n   var _U = Elm.Native.Utils.make(_elm),$Basics = Elm.Basics.make(_elm);\n   var _op = {};\n   var Radial = F5(function (a,b,c,d,e) {    return {ctor: \"Radial\",_0: a,_1: b,_2: c,_3: d,_4: e};});\n   var radial = Radial;\n   var Linear = F3(function (a,b,c) {    return {ctor: \"Linear\",_0: a,_1: b,_2: c};});\n   var linear = Linear;\n   var fmod = F2(function (f,n) {    var integer = $Basics.floor(f);return $Basics.toFloat(A2($Basics._op[\"%\"],integer,n)) + f - $Basics.toFloat(integer);});\n   var rgbToHsl = F3(function (red,green,blue) {\n      var b = $Basics.toFloat(blue) / 255;\n      var g = $Basics.toFloat(green) / 255;\n      var r = $Basics.toFloat(red) / 255;\n      var cMax = A2($Basics.max,A2($Basics.max,r,g),b);\n      var cMin = A2($Basics.min,A2($Basics.min,r,g),b);\n      var c = cMax - cMin;\n      var lightness = (cMax + cMin) / 2;\n      var saturation = _U.eq(lightness,0) ? 0 : c / (1 - $Basics.abs(2 * lightness - 1));\n      var hue = $Basics.degrees(60) * (_U.eq(cMax,r) ? A2(fmod,(g - b) / c,6) : _U.eq(cMax,g) ? (b - r) / c + 2 : (r - g) / c + 4);\n      return {ctor: \"_Tuple3\",_0: hue,_1: saturation,_2: lightness};\n   });\n   var hslToRgb = F3(function (hue,saturation,lightness) {\n      var hue$ = hue / $Basics.degrees(60);\n      var chroma = (1 - $Basics.abs(2 * lightness - 1)) * saturation;\n      var x = chroma * (1 - $Basics.abs(A2(fmod,hue$,2) - 1));\n      var _p0 = _U.cmp(hue$,0) < 0 ? {ctor: \"_Tuple3\",_0: 0,_1: 0,_2: 0} : _U.cmp(hue$,1) < 0 ? {ctor: \"_Tuple3\",_0: chroma,_1: x,_2: 0} : _U.cmp(hue$,\n      2) < 0 ? {ctor: \"_Tuple3\",_0: x,_1: chroma,_2: 0} : _U.cmp(hue$,3) < 0 ? {ctor: \"_Tuple3\",_0: 0,_1: chroma,_2: x} : _U.cmp(hue$,4) < 0 ? {ctor: \"_Tuple3\"\n                                                                                                                                               ,_0: 0\n                                                                                                                                               ,_1: x\n                                                                                                                                               ,_2: chroma} : _U.cmp(hue$,\n      5) < 0 ? {ctor: \"_Tuple3\",_0: x,_1: 0,_2: chroma} : _U.cmp(hue$,6) < 0 ? {ctor: \"_Tuple3\",_0: chroma,_1: 0,_2: x} : {ctor: \"_Tuple3\",_0: 0,_1: 0,_2: 0};\n      var r = _p0._0;\n      var g = _p0._1;\n      var b = _p0._2;\n      var m = lightness - chroma / 2;\n      return {ctor: \"_Tuple3\",_0: r + m,_1: g + m,_2: b + m};\n   });\n   var toRgb = function (color) {\n      var _p1 = color;\n      if (_p1.ctor === \"RGBA\") {\n            return {red: _p1._0,green: _p1._1,blue: _p1._2,alpha: _p1._3};\n         } else {\n            var _p2 = A3(hslToRgb,_p1._0,_p1._1,_p1._2);\n            var r = _p2._0;\n            var g = _p2._1;\n            var b = _p2._2;\n            return {red: $Basics.round(255 * r),green: $Basics.round(255 * g),blue: $Basics.round(255 * b),alpha: _p1._3};\n         }\n   };\n   var toHsl = function (color) {\n      var _p3 = color;\n      if (_p3.ctor === \"HSLA\") {\n            return {hue: _p3._0,saturation: _p3._1,lightness: _p3._2,alpha: _p3._3};\n         } else {\n            var _p4 = A3(rgbToHsl,_p3._0,_p3._1,_p3._2);\n            var h = _p4._0;\n            var s = _p4._1;\n            var l = _p4._2;\n            return {hue: h,saturation: s,lightness: l,alpha: _p3._3};\n         }\n   };\n   var HSLA = F4(function (a,b,c,d) {    return {ctor: \"HSLA\",_0: a,_1: b,_2: c,_3: d};});\n   var hsla = F4(function (hue,saturation,lightness,alpha) {\n      return A4(HSLA,hue - $Basics.turns($Basics.toFloat($Basics.floor(hue / (2 * $Basics.pi)))),saturation,lightness,alpha);\n   });\n   var hsl = F3(function (hue,saturation,lightness) {    return A4(hsla,hue,saturation,lightness,1);});\n   var complement = function (color) {\n      var _p5 = color;\n      if (_p5.ctor === \"HSLA\") {\n            return A4(hsla,_p5._0 + $Basics.degrees(180),_p5._1,_p5._2,_p5._3);\n         } else {\n            var _p6 = A3(rgbToHsl,_p5._0,_p5._1,_p5._2);\n            var h = _p6._0;\n            var s = _p6._1;\n            var l = _p6._2;\n            return A4(hsla,h + $Basics.degrees(180),s,l,_p5._3);\n         }\n   };\n   var grayscale = function (p) {    return A4(HSLA,0,0,1 - p,1);};\n   var greyscale = function (p) {    return A4(HSLA,0,0,1 - p,1);};\n   var RGBA = F4(function (a,b,c,d) {    return {ctor: \"RGBA\",_0: a,_1: b,_2: c,_3: d};});\n   var rgba = RGBA;\n   var rgb = F3(function (r,g,b) {    return A4(RGBA,r,g,b,1);});\n   var lightRed = A4(RGBA,239,41,41,1);\n   var red = A4(RGBA,204,0,0,1);\n   var darkRed = A4(RGBA,164,0,0,1);\n   var lightOrange = A4(RGBA,252,175,62,1);\n   var orange = A4(RGBA,245,121,0,1);\n   var darkOrange = A4(RGBA,206,92,0,1);\n   var lightYellow = A4(RGBA,255,233,79,1);\n   var yellow = A4(RGBA,237,212,0,1);\n   var darkYellow = A4(RGBA,196,160,0,1);\n   var lightGreen = A4(RGBA,138,226,52,1);\n   var green = A4(RGBA,115,210,22,1);\n   var darkGreen = A4(RGBA,78,154,6,1);\n   var lightBlue = A4(RGBA,114,159,207,1);\n   var blue = A4(RGBA,52,101,164,1);\n   var darkBlue = A4(RGBA,32,74,135,1);\n   var lightPurple = A4(RGBA,173,127,168,1);\n   var purple = A4(RGBA,117,80,123,1);\n   var darkPurple = A4(RGBA,92,53,102,1);\n   var lightBrown = A4(RGBA,233,185,110,1);\n   var brown = A4(RGBA,193,125,17,1);\n   var darkBrown = A4(RGBA,143,89,2,1);\n   var black = A4(RGBA,0,0,0,1);\n   var white = A4(RGBA,255,255,255,1);\n   var lightGrey = A4(RGBA,238,238,236,1);\n   var grey = A4(RGBA,211,215,207,1);\n   var darkGrey = A4(RGBA,186,189,182,1);\n   var lightGray = A4(RGBA,238,238,236,1);\n   var gray = A4(RGBA,211,215,207,1);\n   var darkGray = A4(RGBA,186,189,182,1);\n   var lightCharcoal = A4(RGBA,136,138,133,1);\n   var charcoal = A4(RGBA,85,87,83,1);\n   var darkCharcoal = A4(RGBA,46,52,54,1);\n   return _elm.Color.values = {_op: _op\n                              ,rgb: rgb\n                              ,rgba: rgba\n                              ,hsl: hsl\n                              ,hsla: hsla\n                              ,greyscale: greyscale\n                              ,grayscale: grayscale\n                              ,complement: complement\n                              ,linear: linear\n                              ,radial: radial\n                              ,toRgb: toRgb\n                              ,toHsl: toHsl\n                              ,red: red\n                              ,orange: orange\n                              ,yellow: yellow\n                              ,green: green\n                              ,blue: blue\n                              ,purple: purple\n                              ,brown: brown\n                              ,lightRed: lightRed\n                              ,lightOrange: lightOrange\n                              ,lightYellow: lightYellow\n                              ,lightGreen: lightGreen\n                              ,lightBlue: lightBlue\n                              ,lightPurple: lightPurple\n                              ,lightBrown: lightBrown\n                              ,darkRed: darkRed\n                              ,darkOrange: darkOrange\n                              ,darkYellow: darkYellow\n                              ,darkGreen: darkGreen\n                              ,darkBlue: darkBlue\n                              ,darkPurple: darkPurple\n                              ,darkBrown: darkBrown\n                              ,white: white\n                              ,lightGrey: lightGrey\n                              ,grey: grey\n                              ,darkGrey: darkGrey\n                              ,lightCharcoal: lightCharcoal\n                              ,charcoal: charcoal\n                              ,darkCharcoal: darkCharcoal\n                              ,black: black\n                              ,lightGray: lightGray\n                              ,gray: gray\n                              ,darkGray: darkGray};\n};\nElm.Native.Signal = {};\n\nElm.Native.Signal.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Signal = localRuntime.Native.Signal || {};\n\tif (localRuntime.Native.Signal.values)\n\t{\n\t\treturn localRuntime.Native.Signal.values;\n\t}\n\n\n\tvar Task = Elm.Native.Task.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\tfunction broadcastToKids(node, timestamp, update)\n\t{\n\t\tvar kids = node.kids;\n\t\tfor (var i = kids.length; i--; )\n\t\t{\n\t\t\tkids[i].notify(timestamp, update, node.id);\n\t\t}\n\t}\n\n\n\t// INPUT\n\n\tfunction input(name, base)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'input-' + name,\n\t\t\tvalue: base,\n\t\t\tparents: [],\n\t\t\tkids: []\n\t\t};\n\n\t\tnode.notify = function(timestamp, targetId, value) {\n\t\t\tvar update = targetId === node.id;\n\t\t\tif (update)\n\t\t\t{\n\t\t\t\tnode.value = value;\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t\treturn update;\n\t\t};\n\n\t\tlocalRuntime.inputs.push(node);\n\n\t\treturn node;\n\t}\n\n\tfunction constant(value)\n\t{\n\t\treturn input('constant', value);\n\t}\n\n\n\t// MAILBOX\n\n\tfunction mailbox(base)\n\t{\n\t\tvar signal = input('mailbox', base);\n\n\t\tfunction send(value) {\n\t\t\treturn Task.asyncFunction(function(callback) {\n\t\t\t\tlocalRuntime.setTimeout(function() {\n\t\t\t\t\tlocalRuntime.notify(signal.id, value);\n\t\t\t\t}, 0);\n\t\t\t\tcallback(Task.succeed(Utils.Tuple0));\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tsignal: signal,\n\t\t\taddress: {\n\t\t\t\tctor: 'Address',\n\t\t\t\t_0: send\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction sendMessage(message)\n\t{\n\t\tTask.perform(message._0);\n\t}\n\n\n\t// OUTPUT\n\n\tfunction output(name, handler, parent)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'output-' + name,\n\t\t\tparents: [parent],\n\t\t\tisOutput: true\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentUpdate)\n\t\t\t{\n\t\t\t\thandler(parent.value);\n\t\t\t}\n\t\t};\n\n\t\tparent.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// MAP\n\n\tfunction mapMany(refreshValue, args)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'map' + args.length,\n\t\t\tvalue: refreshValue(),\n\t\t\tparents: args,\n\t\t\tkids: []\n\t\t};\n\n\t\tvar numberOfParents = args.length;\n\t\tvar count = 0;\n\t\tvar update = false;\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\t++count;\n\n\t\t\tupdate = update || parentUpdate;\n\n\t\t\tif (count === numberOfParents)\n\t\t\t{\n\t\t\t\tif (update)\n\t\t\t\t{\n\t\t\t\t\tnode.value = refreshValue();\n\t\t\t\t}\n\t\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t\t\tupdate = false;\n\t\t\t\tcount = 0;\n\t\t\t}\n\t\t};\n\n\t\tfor (var i = numberOfParents; i--; )\n\t\t{\n\t\t\targs[i].kids.push(node);\n\t\t}\n\n\t\treturn node;\n\t}\n\n\n\tfunction map(func, a)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn func(a.value);\n\t\t}\n\t\treturn mapMany(refreshValue, [a]);\n\t}\n\n\n\tfunction map2(func, a, b)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn A2( func, a.value, b.value );\n\t\t}\n\t\treturn mapMany(refreshValue, [a, b]);\n\t}\n\n\n\tfunction map3(func, a, b, c)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn A3( func, a.value, b.value, c.value );\n\t\t}\n\t\treturn mapMany(refreshValue, [a, b, c]);\n\t}\n\n\n\tfunction map4(func, a, b, c, d)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn A4( func, a.value, b.value, c.value, d.value );\n\t\t}\n\t\treturn mapMany(refreshValue, [a, b, c, d]);\n\t}\n\n\n\tfunction map5(func, a, b, c, d, e)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn A5( func, a.value, b.value, c.value, d.value, e.value );\n\t\t}\n\t\treturn mapMany(refreshValue, [a, b, c, d, e]);\n\t}\n\n\n\t// FOLD\n\n\tfunction foldp(update, state, signal)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'foldp',\n\t\t\tparents: [signal],\n\t\t\tkids: [],\n\t\t\tvalue: state\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentUpdate)\n\t\t\t{\n\t\t\t\tnode.value = A2( update, signal.value, node.value );\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, parentUpdate);\n\t\t};\n\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// TIME\n\n\tfunction timestamp(signal)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'timestamp',\n\t\t\tvalue: Utils.Tuple2(localRuntime.timer.programStart, signal.value),\n\t\t\tparents: [signal],\n\t\t\tkids: []\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentUpdate)\n\t\t\t{\n\t\t\t\tnode.value = Utils.Tuple2(timestamp, signal.value);\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, parentUpdate);\n\t\t};\n\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\tfunction delay(time, signal)\n\t{\n\t\tvar delayed = input('delay-input-' + time, signal.value);\n\n\t\tfunction handler(value)\n\t\t{\n\t\t\tsetTimeout(function() {\n\t\t\t\tlocalRuntime.notify(delayed.id, value);\n\t\t\t}, time);\n\t\t}\n\n\t\toutput('delay-output-' + time, handler, signal);\n\n\t\treturn delayed;\n\t}\n\n\n\t// MERGING\n\n\tfunction genericMerge(tieBreaker, leftStream, rightStream)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'merge',\n\t\t\tvalue: A2(tieBreaker, leftStream.value, rightStream.value),\n\t\t\tparents: [leftStream, rightStream],\n\t\t\tkids: []\n\t\t};\n\n\t\tvar left = { touched: false, update: false, value: null };\n\t\tvar right = { touched: false, update: false, value: null };\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentID === leftStream.id)\n\t\t\t{\n\t\t\t\tleft.touched = true;\n\t\t\t\tleft.update = parentUpdate;\n\t\t\t\tleft.value = leftStream.value;\n\t\t\t}\n\t\t\tif (parentID === rightStream.id)\n\t\t\t{\n\t\t\t\tright.touched = true;\n\t\t\t\tright.update = parentUpdate;\n\t\t\t\tright.value = rightStream.value;\n\t\t\t}\n\n\t\t\tif (left.touched && right.touched)\n\t\t\t{\n\t\t\t\tvar update = false;\n\t\t\t\tif (left.update && right.update)\n\t\t\t\t{\n\t\t\t\t\tnode.value = A2(tieBreaker, left.value, right.value);\n\t\t\t\t\tupdate = true;\n\t\t\t\t}\n\t\t\t\telse if (left.update)\n\t\t\t\t{\n\t\t\t\t\tnode.value = left.value;\n\t\t\t\t\tupdate = true;\n\t\t\t\t}\n\t\t\t\telse if (right.update)\n\t\t\t\t{\n\t\t\t\t\tnode.value = right.value;\n\t\t\t\t\tupdate = true;\n\t\t\t\t}\n\t\t\t\tleft.touched = false;\n\t\t\t\tright.touched = false;\n\n\t\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t\t}\n\t\t};\n\n\t\tleftStream.kids.push(node);\n\t\trightStream.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// FILTERING\n\n\tfunction filterMap(toMaybe, base, signal)\n\t{\n\t\tvar maybe = toMaybe(signal.value);\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'filterMap',\n\t\t\tvalue: maybe.ctor === 'Nothing' ? base : maybe._0,\n\t\t\tparents: [signal],\n\t\t\tkids: []\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tvar update = false;\n\t\t\tif (parentUpdate)\n\t\t\t{\n\t\t\t\tvar maybe = toMaybe(signal.value);\n\t\t\t\tif (maybe.ctor === 'Just')\n\t\t\t\t{\n\t\t\t\t\tupdate = true;\n\t\t\t\t\tnode.value = maybe._0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t};\n\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// SAMPLING\n\n\tfunction sampleOn(ticker, signal)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'sampleOn',\n\t\t\tvalue: signal.value,\n\t\t\tparents: [ticker, signal],\n\t\t\tkids: []\n\t\t};\n\n\t\tvar signalTouch = false;\n\t\tvar tickerTouch = false;\n\t\tvar tickerUpdate = false;\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentID === ticker.id)\n\t\t\t{\n\t\t\t\ttickerTouch = true;\n\t\t\t\ttickerUpdate = parentUpdate;\n\t\t\t}\n\t\t\tif (parentID === signal.id)\n\t\t\t{\n\t\t\t\tsignalTouch = true;\n\t\t\t}\n\n\t\t\tif (tickerTouch && signalTouch)\n\t\t\t{\n\t\t\t\tif (tickerUpdate)\n\t\t\t\t{\n\t\t\t\t\tnode.value = signal.value;\n\t\t\t\t}\n\t\t\t\ttickerTouch = false;\n\t\t\t\tsignalTouch = false;\n\n\t\t\t\tbroadcastToKids(node, timestamp, tickerUpdate);\n\t\t\t}\n\t\t};\n\n\t\tticker.kids.push(node);\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// DROP REPEATS\n\n\tfunction dropRepeats(signal)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'dropRepeats',\n\t\t\tvalue: signal.value,\n\t\t\tparents: [signal],\n\t\t\tkids: []\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tvar update = false;\n\t\t\tif (parentUpdate && !Utils.eq(node.value, signal.value))\n\t\t\t{\n\t\t\t\tnode.value = signal.value;\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t};\n\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\treturn localRuntime.Native.Signal.values = {\n\t\tinput: input,\n\t\tconstant: constant,\n\t\tmailbox: mailbox,\n\t\tsendMessage: sendMessage,\n\t\toutput: output,\n\t\tmap: F2(map),\n\t\tmap2: F3(map2),\n\t\tmap3: F4(map3),\n\t\tmap4: F5(map4),\n\t\tmap5: F6(map5),\n\t\tfoldp: F3(foldp),\n\t\tgenericMerge: F3(genericMerge),\n\t\tfilterMap: F3(filterMap),\n\t\tsampleOn: F2(sampleOn),\n\t\tdropRepeats: dropRepeats,\n\t\ttimestamp: timestamp,\n\t\tdelay: F2(delay)\n\t};\n};\n\nElm.Native.Time = {};\n\nElm.Native.Time.make = function(localRuntime)\n{\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Time = localRuntime.Native.Time || {};\n\tif (localRuntime.Native.Time.values)\n\t{\n\t\treturn localRuntime.Native.Time.values;\n\t}\n\n\tvar NS = Elm.Native.Signal.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\n\n\t// FRAMES PER SECOND\n\n\tfunction fpsWhen(desiredFPS, isOn)\n\t{\n\t\tvar msPerFrame = 1000 / desiredFPS;\n\t\tvar ticker = NS.input('fps-' + desiredFPS, null);\n\n\t\tfunction notifyTicker()\n\t\t{\n\t\t\tlocalRuntime.notify(ticker.id, null);\n\t\t}\n\n\t\tfunction firstArg(x, y)\n\t\t{\n\t\t\treturn x;\n\t\t}\n\n\t\t// input fires either when isOn changes, or when ticker fires.\n\t\t// Its value is a tuple with the current timestamp, and the state of isOn\n\t\tvar input = NS.timestamp(A3(NS.map2, F2(firstArg), NS.dropRepeats(isOn), ticker));\n\n\t\tvar initialState = {\n\t\t\tisOn: false,\n\t\t\ttime: localRuntime.timer.programStart,\n\t\t\tdelta: 0\n\t\t};\n\n\t\tvar timeoutId;\n\n\t\tfunction update(input, state)\n\t\t{\n\t\t\tvar currentTime = input._0;\n\t\t\tvar isOn = input._1;\n\t\t\tvar wasOn = state.isOn;\n\t\t\tvar previousTime = state.time;\n\n\t\t\tif (isOn)\n\t\t\t{\n\t\t\t\ttimeoutId = localRuntime.setTimeout(notifyTicker, msPerFrame);\n\t\t\t}\n\t\t\telse if (wasOn)\n\t\t\t{\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisOn: isOn,\n\t\t\t\ttime: currentTime,\n\t\t\t\tdelta: (isOn && !wasOn) ? 0 : currentTime - previousTime\n\t\t\t};\n\t\t}\n\n\t\treturn A2(\n\t\t\tNS.map,\n\t\t\tfunction(state) { return state.delta; },\n\t\t\tA3(NS.foldp, F2(update), update(input.value, initialState), input)\n\t\t);\n\t}\n\n\n\t// EVERY\n\n\tfunction every(t)\n\t{\n\t\tvar ticker = NS.input('every-' + t, null);\n\t\tfunction tellTime()\n\t\t{\n\t\t\tlocalRuntime.notify(ticker.id, null);\n\t\t}\n\t\tvar clock = A2(NS.map, fst, NS.timestamp(ticker));\n\t\tsetInterval(tellTime, t);\n\t\treturn clock;\n\t}\n\n\n\tfunction fst(pair)\n\t{\n\t\treturn pair._0;\n\t}\n\n\n\tfunction read(s)\n\t{\n\t\tvar t = Date.parse(s);\n\t\treturn isNaN(t) ? Maybe.Nothing : Maybe.Just(t);\n\t}\n\n\treturn localRuntime.Native.Time.values = {\n\t\tfpsWhen: F2(fpsWhen),\n\t\tevery: every,\n\t\ttoDate: function(t) { return new Date(t); },\n\t\tread: read\n\t};\n};\n\nElm.Native.Transform2D = {};\nElm.Native.Transform2D.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Transform2D = localRuntime.Native.Transform2D || {};\n\tif (localRuntime.Native.Transform2D.values)\n\t{\n\t\treturn localRuntime.Native.Transform2D.values;\n\t}\n\n\tvar A;\n\tif (typeof Float32Array === 'undefined')\n\t{\n\t\tA = function(arr)\n\t\t{\n\t\t\tthis.length = arr.length;\n\t\t\tthis[0] = arr[0];\n\t\t\tthis[1] = arr[1];\n\t\t\tthis[2] = arr[2];\n\t\t\tthis[3] = arr[3];\n\t\t\tthis[4] = arr[4];\n\t\t\tthis[5] = arr[5];\n\t\t};\n\t}\n\telse\n\t{\n\t\tA = Float32Array;\n\t}\n\n\t// layout of matrix in an array is\n\t//\n\t//   | m11 m12 dx |\n\t//   | m21 m22 dy |\n\t//   |  0   0   1 |\n\t//\n\t//  new A([ m11, m12, dx, m21, m22, dy ])\n\n\tvar identity = new A([1, 0, 0, 0, 1, 0]);\n\tfunction matrix(m11, m12, m21, m22, dx, dy)\n\t{\n\t\treturn new A([m11, m12, dx, m21, m22, dy]);\n\t}\n\n\tfunction rotation(t)\n\t{\n\t\tvar c = Math.cos(t);\n\t\tvar s = Math.sin(t);\n\t\treturn new A([c, -s, 0, s, c, 0]);\n\t}\n\n\tfunction rotate(t, m)\n\t{\n\t\tvar c = Math.cos(t);\n\t\tvar s = Math.sin(t);\n\t\tvar m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];\n\t\treturn new A([m11 * c + m12 * s, -m11 * s + m12 * c, m[2],\n\t\t\t\t\t  m21 * c + m22 * s, -m21 * s + m22 * c, m[5]]);\n\t}\n\t/*\n\tfunction move(xy,m) {\n\t\tvar x = xy._0;\n\t\tvar y = xy._1;\n\t\tvar m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];\n\t\treturn new A([m11, m12, m11*x + m12*y + m[2],\n\t\t\t\t\t  m21, m22, m21*x + m22*y + m[5]]);\n\t}\n\tfunction scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }\n\tfunction scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }\n\tfunction scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }\n\tfunction reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }\n\tfunction reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }\n\n\tfunction transform(m11, m21, m12, m22, mdx, mdy, n) {\n\t\tvar n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];\n\t\treturn new A([m11*n11 + m12*n21,\n\t\t\t\t\t  m11*n12 + m12*n22,\n\t\t\t\t\t  m11*ndx + m12*ndy + mdx,\n\t\t\t\t\t  m21*n11 + m22*n21,\n\t\t\t\t\t  m21*n12 + m22*n22,\n\t\t\t\t\t  m21*ndx + m22*ndy + mdy]);\n\t}\n\t*/\n\tfunction multiply(m, n)\n\t{\n\t\tvar m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5];\n\t\tvar n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];\n\t\treturn new A([m11 * n11 + m12 * n21,\n\t\t\t\t\t  m11 * n12 + m12 * n22,\n\t\t\t\t\t  m11 * ndx + m12 * ndy + mdx,\n\t\t\t\t\t  m21 * n11 + m22 * n21,\n\t\t\t\t\t  m21 * n12 + m22 * n22,\n\t\t\t\t\t  m21 * ndx + m22 * ndy + mdy]);\n\t}\n\n\treturn localRuntime.Native.Transform2D.values = {\n\t\tidentity: identity,\n\t\tmatrix: F6(matrix),\n\t\trotation: rotation,\n\t\tmultiply: F2(multiply)\n\t\t/*\n\t\ttransform: F7(transform),\n\t\trotate: F2(rotate),\n\t\tmove: F2(move),\n\t\tscale: F2(scale),\n\t\tscaleX: F2(scaleX),\n\t\tscaleY: F2(scaleY),\n\t\treflectX: reflectX,\n\t\treflectY: reflectY\n\t\t*/\n\t};\n};\n\nElm.Transform2D = Elm.Transform2D || {};\nElm.Transform2D.make = function (_elm) {\n   \"use strict\";\n   _elm.Transform2D = _elm.Transform2D || {};\n   if (_elm.Transform2D.values) return _elm.Transform2D.values;\n   var _U = Elm.Native.Utils.make(_elm),$Native$Transform2D = Elm.Native.Transform2D.make(_elm);\n   var _op = {};\n   var multiply = $Native$Transform2D.multiply;\n   var rotation = $Native$Transform2D.rotation;\n   var matrix = $Native$Transform2D.matrix;\n   var translation = F2(function (x,y) {    return A6(matrix,1,0,0,1,x,y);});\n   var scale = function (s) {    return A6(matrix,s,0,0,s,0,0);};\n   var scaleX = function (x) {    return A6(matrix,x,0,0,1,0,0);};\n   var scaleY = function (y) {    return A6(matrix,1,0,0,y,0,0);};\n   var identity = $Native$Transform2D.identity;\n   var Transform2D = {ctor: \"Transform2D\"};\n   return _elm.Transform2D.values = {_op: _op\n                                    ,identity: identity\n                                    ,matrix: matrix\n                                    ,multiply: multiply\n                                    ,rotation: rotation\n                                    ,translation: translation\n                                    ,scale: scale\n                                    ,scaleX: scaleX\n                                    ,scaleY: scaleY};\n};\n\n// setup\nElm.Native = Elm.Native || {};\nElm.Native.Graphics = Elm.Native.Graphics || {};\nElm.Native.Graphics.Collage = Elm.Native.Graphics.Collage || {};\n\n// definition\nElm.Native.Graphics.Collage.make = function(localRuntime) {\n\t'use strict';\n\n\t// attempt to short-circuit\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Graphics = localRuntime.Native.Graphics || {};\n\tlocalRuntime.Native.Graphics.Collage = localRuntime.Native.Graphics.Collage || {};\n\tif ('values' in localRuntime.Native.Graphics.Collage)\n\t{\n\t\treturn localRuntime.Native.Graphics.Collage.values;\n\t}\n\n\t// okay, we cannot short-ciruit, so now we define everything\n\tvar Color = Elm.Native.Color.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar NativeElement = Elm.Native.Graphics.Element.make(localRuntime);\n\tvar Transform = Elm.Transform2D.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\tfunction setStrokeStyle(ctx, style)\n\t{\n\t\tctx.lineWidth = style.width;\n\n\t\tvar cap = style.cap.ctor;\n\t\tctx.lineCap = cap === 'Flat'\n\t\t\t? 'butt'\n\t\t\t: cap === 'Round'\n\t\t\t\t? 'round'\n\t\t\t\t: 'square';\n\n\t\tvar join = style.join.ctor;\n\t\tctx.lineJoin = join === 'Smooth'\n\t\t\t? 'round'\n\t\t\t: join === 'Sharp'\n\t\t\t\t? 'miter'\n\t\t\t\t: 'bevel';\n\n\t\tctx.miterLimit = style.join._0 || 10;\n\t\tctx.strokeStyle = Color.toCss(style.color);\n\t}\n\n\tfunction setFillStyle(redo, ctx, style)\n\t{\n\t\tvar sty = style.ctor;\n\t\tctx.fillStyle = sty === 'Solid'\n\t\t\t? Color.toCss(style._0)\n\t\t\t: sty === 'Texture'\n\t\t\t\t? texture(redo, ctx, style._0)\n\t\t\t\t: gradient(ctx, style._0);\n\t}\n\n\tfunction trace(ctx, path)\n\t{\n\t\tvar points = List.toArray(path);\n\t\tvar i = points.length - 1;\n\t\tif (i <= 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tctx.moveTo(points[i]._0, points[i]._1);\n\t\twhile (i--)\n\t\t{\n\t\t\tctx.lineTo(points[i]._0, points[i]._1);\n\t\t}\n\t\tif (path.closed)\n\t\t{\n\t\t\ti = points.length - 1;\n\t\t\tctx.lineTo(points[i]._0, points[i]._1);\n\t\t}\n\t}\n\n\tfunction line(ctx, style, path)\n\t{\n\t\tif (style.dashing.ctor === '[]')\n\t\t{\n\t\t\ttrace(ctx, path);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcustomLineHelp(ctx, style, path);\n\t\t}\n\t\tctx.scale(1, -1);\n\t\tctx.stroke();\n\t}\n\n\tfunction customLineHelp(ctx, style, path)\n\t{\n\t\tvar points = List.toArray(path);\n\t\tif (path.closed)\n\t\t{\n\t\t\tpoints.push(points[0]);\n\t\t}\n\t\tvar pattern = List.toArray(style.dashing);\n\t\tvar i = points.length - 1;\n\t\tif (i <= 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tvar x0 = points[i]._0, y0 = points[i]._1;\n\t\tvar x1 = 0, y1 = 0, dx = 0, dy = 0, remaining = 0;\n\t\tvar pindex = 0, plen = pattern.length;\n\t\tvar draw = true, segmentLength = pattern[0];\n\t\tctx.moveTo(x0, y0);\n\t\twhile (i--)\n\t\t{\n\t\t\tx1 = points[i]._0;\n\t\t\ty1 = points[i]._1;\n\t\t\tdx = x1 - x0;\n\t\t\tdy = y1 - y0;\n\t\t\tremaining = Math.sqrt(dx * dx + dy * dy);\n\t\t\twhile (segmentLength <= remaining)\n\t\t\t{\n\t\t\t\tx0 += dx * segmentLength / remaining;\n\t\t\t\ty0 += dy * segmentLength / remaining;\n\t\t\t\tctx[draw ? 'lineTo' : 'moveTo'](x0, y0);\n\t\t\t\t// update starting position\n\t\t\t\tdx = x1 - x0;\n\t\t\t\tdy = y1 - y0;\n\t\t\t\tremaining = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\t// update pattern\n\t\t\t\tdraw = !draw;\n\t\t\t\tpindex = (pindex + 1) % plen;\n\t\t\t\tsegmentLength = pattern[pindex];\n\t\t\t}\n\t\t\tif (remaining > 0)\n\t\t\t{\n\t\t\t\tctx[draw ? 'lineTo' : 'moveTo'](x1, y1);\n\t\t\t\tsegmentLength -= remaining;\n\t\t\t}\n\t\t\tx0 = x1;\n\t\t\ty0 = y1;\n\t\t}\n\t}\n\n\tfunction drawLine(ctx, style, path)\n\t{\n\t\tsetStrokeStyle(ctx, style);\n\t\treturn line(ctx, style, path);\n\t}\n\n\tfunction texture(redo, ctx, src)\n\t{\n\t\tvar img = new Image();\n\t\timg.src = src;\n\t\timg.onload = redo;\n\t\treturn ctx.createPattern(img, 'repeat');\n\t}\n\n\tfunction gradient(ctx, grad)\n\t{\n\t\tvar g;\n\t\tvar stops = [];\n\t\tif (grad.ctor === 'Linear')\n\t\t{\n\t\t\tvar p0 = grad._0, p1 = grad._1;\n\t\t\tg = ctx.createLinearGradient(p0._0, -p0._1, p1._0, -p1._1);\n\t\t\tstops = List.toArray(grad._2);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar p0 = grad._0, p2 = grad._2;\n\t\t\tg = ctx.createRadialGradient(p0._0, -p0._1, grad._1, p2._0, -p2._1, grad._3);\n\t\t\tstops = List.toArray(grad._4);\n\t\t}\n\t\tvar len = stops.length;\n\t\tfor (var i = 0; i < len; ++i)\n\t\t{\n\t\t\tvar stop = stops[i];\n\t\t\tg.addColorStop(stop._0, Color.toCss(stop._1));\n\t\t}\n\t\treturn g;\n\t}\n\n\tfunction drawShape(redo, ctx, style, path)\n\t{\n\t\ttrace(ctx, path);\n\t\tsetFillStyle(redo, ctx, style);\n\t\tctx.scale(1, -1);\n\t\tctx.fill();\n\t}\n\n\n\t// TEXT RENDERING\n\n\tfunction fillText(redo, ctx, text)\n\t{\n\t\tdrawText(ctx, text, ctx.fillText);\n\t}\n\n\tfunction strokeText(redo, ctx, style, text)\n\t{\n\t\tsetStrokeStyle(ctx, style);\n\t\t// Use native canvas API for dashes only for text for now\n\t\t// Degrades to non-dashed on IE 9 + 10\n\t\tif (style.dashing.ctor !== '[]' && ctx.setLineDash)\n\t\t{\n\t\t\tvar pattern = List.toArray(style.dashing);\n\t\t\tctx.setLineDash(pattern);\n\t\t}\n\t\tdrawText(ctx, text, ctx.strokeText);\n\t}\n\n\tfunction drawText(ctx, text, canvasDrawFn)\n\t{\n\t\tvar textChunks = chunkText(defaultContext, text);\n\n\t\tvar totalWidth = 0;\n\t\tvar maxHeight = 0;\n\t\tvar numChunks = textChunks.length;\n\n\t\tctx.scale(1,-1);\n\n\t\tfor (var i = numChunks; i--; )\n\t\t{\n\t\t\tvar chunk = textChunks[i];\n\t\t\tctx.font = chunk.font;\n\t\t\tvar metrics = ctx.measureText(chunk.text);\n\t\t\tchunk.width = metrics.width;\n\t\t\ttotalWidth += chunk.width;\n\t\t\tif (chunk.height > maxHeight)\n\t\t\t{\n\t\t\t\tmaxHeight = chunk.height;\n\t\t\t}\n\t\t}\n\n\t\tvar x = -totalWidth / 2.0;\n\t\tfor (var i = 0; i < numChunks; ++i)\n\t\t{\n\t\t\tvar chunk = textChunks[i];\n\t\t\tctx.font = chunk.font;\n\t\t\tctx.fillStyle = chunk.color;\n\t\t\tcanvasDrawFn.call(ctx, chunk.text, x, maxHeight / 2);\n\t\t\tx += chunk.width;\n\t\t}\n\t}\n\n\tfunction toFont(props)\n\t{\n\t\treturn [\n\t\t\tprops['font-style'],\n\t\t\tprops['font-variant'],\n\t\t\tprops['font-weight'],\n\t\t\tprops['font-size'],\n\t\t\tprops['font-family']\n\t\t].join(' ');\n\t}\n\n\n\t// Convert the object returned by the text module\n\t// into something we can use for styling canvas text\n\tfunction chunkText(context, text)\n\t{\n\t\tvar tag = text.ctor;\n\t\tif (tag === 'Text:Append')\n\t\t{\n\t\t\tvar leftChunks = chunkText(context, text._0);\n\t\t\tvar rightChunks = chunkText(context, text._1);\n\t\t\treturn leftChunks.concat(rightChunks);\n\t\t}\n\t\tif (tag === 'Text:Text')\n\t\t{\n\t\t\treturn [{\n\t\t\t\ttext: text._0,\n\t\t\t\tcolor: context.color,\n\t\t\t\theight: context['font-size'].slice(0, -2) | 0,\n\t\t\t\tfont: toFont(context)\n\t\t\t}];\n\t\t}\n\t\tif (tag === 'Text:Meta')\n\t\t{\n\t\t\tvar newContext = freshContext(text._0, context);\n\t\t\treturn chunkText(newContext, text._1);\n\t\t}\n\t}\n\n\tfunction freshContext(props, ctx)\n\t{\n\t\treturn {\n\t\t\t'font-style': props['font-style'] || ctx['font-style'],\n\t\t\t'font-variant': props['font-variant'] || ctx['font-variant'],\n\t\t\t'font-weight': props['font-weight'] || ctx['font-weight'],\n\t\t\t'font-size': props['font-size'] || ctx['font-size'],\n\t\t\t'font-family': props['font-family'] || ctx['font-family'],\n\t\t\t'color': props['color'] || ctx['color']\n\t\t};\n\t}\n\n\tvar defaultContext = {\n\t\t'font-style': 'normal',\n\t\t'font-variant': 'normal',\n\t\t'font-weight': 'normal',\n\t\t'font-size': '12px',\n\t\t'font-family': 'sans-serif',\n\t\t'color': 'black'\n\t};\n\n\n\t// IMAGES\n\n\tfunction drawImage(redo, ctx, form)\n\t{\n\t\tvar img = new Image();\n\t\timg.onload = redo;\n\t\timg.src = form._3;\n\t\tvar w = form._0,\n\t\t\th = form._1,\n\t\t\tpos = form._2,\n\t\t\tsrcX = pos._0,\n\t\t\tsrcY = pos._1,\n\t\t\tsrcW = w,\n\t\t\tsrcH = h,\n\t\t\tdestX = -w / 2,\n\t\t\tdestY = -h / 2,\n\t\t\tdestW = w,\n\t\t\tdestH = h;\n\n\t\tctx.scale(1, -1);\n\t\tctx.drawImage(img, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n\t}\n\n\tfunction renderForm(redo, ctx, form)\n\t{\n\t\tctx.save();\n\n\t\tvar x = form.x,\n\t\t\ty = form.y,\n\t\t\ttheta = form.theta,\n\t\t\tscale = form.scale;\n\n\t\tif (x !== 0 || y !== 0)\n\t\t{\n\t\t\tctx.translate(x, y);\n\t\t}\n\t\tif (theta !== 0)\n\t\t{\n\t\t\tctx.rotate(theta % (Math.PI * 2));\n\t\t}\n\t\tif (scale !== 1)\n\t\t{\n\t\t\tctx.scale(scale, scale);\n\t\t}\n\t\tif (form.alpha !== 1)\n\t\t{\n\t\t\tctx.globalAlpha = ctx.globalAlpha * form.alpha;\n\t\t}\n\n\t\tctx.beginPath();\n\t\tvar f = form.form;\n\t\tswitch (f.ctor)\n\t\t{\n\t\t\tcase 'FPath':\n\t\t\t\tdrawLine(ctx, f._0, f._1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'FImage':\n\t\t\t\tdrawImage(redo, ctx, f);\n\t\t\t\tbreak;\n\n\t\t\tcase 'FShape':\n\t\t\t\tif (f._0.ctor === 'Line')\n\t\t\t\t{\n\t\t\t\t\tf._1.closed = true;\n\t\t\t\t\tdrawLine(ctx, f._0._0, f._1);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdrawShape(redo, ctx, f._0._0, f._1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'FText':\n\t\t\t\tfillText(redo, ctx, f._0);\n\t\t\t\tbreak;\n\n\t\t\tcase 'FOutlinedText':\n\t\t\t\tstrokeText(redo, ctx, f._0, f._1);\n\t\t\t\tbreak;\n\t\t}\n\t\tctx.restore();\n\t}\n\n\tfunction formToMatrix(form)\n\t{\n\t   var scale = form.scale;\n\t   var matrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y );\n\n\t   var theta = form.theta;\n\t   if (theta !== 0)\n\t   {\n\t\t   matrix = A2( Transform.multiply, matrix, Transform.rotation(theta) );\n\t   }\n\n\t   return matrix;\n\t}\n\n\tfunction str(n)\n\t{\n\t\tif (n < 0.00001 && n > -0.00001)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\treturn n;\n\t}\n\n\tfunction makeTransform(w, h, form, matrices)\n\t{\n\t\tvar props = form.form._0._0.props;\n\t\tvar m = A6( Transform.matrix, 1, 0, 0, -1,\n\t\t\t\t\t(w - props.width ) / 2,\n\t\t\t\t\t(h - props.height) / 2 );\n\t\tvar len = matrices.length;\n\t\tfor (var i = 0; i < len; ++i)\n\t\t{\n\t\t\tm = A2( Transform.multiply, m, matrices[i] );\n\t\t}\n\t\tm = A2( Transform.multiply, m, formToMatrix(form) );\n\n\t\treturn 'matrix(' +\n\t\t\tstr( m[0]) + ', ' + str( m[3]) + ', ' +\n\t\t\tstr(-m[1]) + ', ' + str(-m[4]) + ', ' +\n\t\t\tstr( m[2]) + ', ' + str( m[5]) + ')';\n\t}\n\n\tfunction stepperHelp(list)\n\t{\n\t\tvar arr = List.toArray(list);\n\t\tvar i = 0;\n\t\tfunction peekNext()\n\t\t{\n\t\t\treturn i < arr.length ? arr[i]._0.form.ctor : '';\n\t\t}\n\t\t// assumes that there is a next element\n\t\tfunction next()\n\t\t{\n\t\t\tvar out = arr[i]._0;\n\t\t\t++i;\n\t\t\treturn out;\n\t\t}\n\t\treturn {\n\t\t\tpeekNext: peekNext,\n\t\t\tnext: next\n\t\t};\n\t}\n\n\tfunction formStepper(forms)\n\t{\n\t\tvar ps = [stepperHelp(forms)];\n\t\tvar matrices = [];\n\t\tvar alphas = [];\n\t\tfunction peekNext()\n\t\t{\n\t\t\tvar len = ps.length;\n\t\t\tvar formType = '';\n\t\t\tfor (var i = 0; i < len; ++i )\n\t\t\t{\n\t\t\t\tif (formType = ps[i].peekNext()) return formType;\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\t\t// assumes that there is a next element\n\t\tfunction next(ctx)\n\t\t{\n\t\t\twhile (!ps[0].peekNext())\n\t\t\t{\n\t\t\t\tps.shift();\n\t\t\t\tmatrices.pop();\n\t\t\t\talphas.shift();\n\t\t\t\tif (ctx)\n\t\t\t\t{\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar out = ps[0].next();\n\t\t\tvar f = out.form;\n\t\t\tif (f.ctor === 'FGroup')\n\t\t\t{\n\t\t\t\tps.unshift(stepperHelp(f._1));\n\t\t\t\tvar m = A2(Transform.multiply, f._0, formToMatrix(out));\n\t\t\t\tctx.save();\n\t\t\t\tctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);\n\t\t\t\tmatrices.push(m);\n\n\t\t\t\tvar alpha = (alphas[0] || 1) * out.alpha;\n\t\t\t\talphas.unshift(alpha);\n\t\t\t\tctx.globalAlpha = alpha;\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t\tfunction transforms()\n\t\t{\n\t\t\treturn matrices;\n\t\t}\n\t\tfunction alpha()\n\t\t{\n\t\t\treturn alphas[0] || 1;\n\t\t}\n\t\treturn {\n\t\t\tpeekNext: peekNext,\n\t\t\tnext: next,\n\t\t\ttransforms: transforms,\n\t\t\talpha: alpha\n\t\t};\n\t}\n\n\tfunction makeCanvas(w, h)\n\t{\n\t\tvar canvas = NativeElement.createNode('canvas');\n\t\tcanvas.style.width  = w + 'px';\n\t\tcanvas.style.height = h + 'px';\n\t\tcanvas.style.display = 'block';\n\t\tcanvas.style.position = 'absolute';\n\t\tvar ratio = window.devicePixelRatio || 1;\n\t\tcanvas.width  = w * ratio;\n\t\tcanvas.height = h * ratio;\n\t\treturn canvas;\n\t}\n\n\tfunction render(model)\n\t{\n\t\tvar div = NativeElement.createNode('div');\n\t\tdiv.style.overflow = 'hidden';\n\t\tdiv.style.position = 'relative';\n\t\tupdate(div, model, model);\n\t\treturn div;\n\t}\n\n\tfunction nodeStepper(w, h, div)\n\t{\n\t\tvar kids = div.childNodes;\n\t\tvar i = 0;\n\t\tvar ratio = window.devicePixelRatio || 1;\n\n\t\tfunction transform(transforms, ctx)\n\t\t{\n\t\t\tctx.translate( w / 2 * ratio, h / 2 * ratio );\n\t\t\tctx.scale( ratio, -ratio );\n\t\t\tvar len = transforms.length;\n\t\t\tfor (var i = 0; i < len; ++i)\n\t\t\t{\n\t\t\t\tvar m = transforms[i];\n\t\t\t\tctx.save();\n\t\t\t\tctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);\n\t\t\t}\n\t\t\treturn ctx;\n\t\t}\n\t\tfunction nextContext(transforms)\n\t\t{\n\t\t\twhile (i < kids.length)\n\t\t\t{\n\t\t\t\tvar node = kids[i];\n\t\t\t\tif (node.getContext)\n\t\t\t\t{\n\t\t\t\t\tnode.width = w * ratio;\n\t\t\t\t\tnode.height = h * ratio;\n\t\t\t\t\tnode.style.width = w + 'px';\n\t\t\t\t\tnode.style.height = h + 'px';\n\t\t\t\t\t++i;\n\t\t\t\t\treturn transform(transforms, node.getContext('2d'));\n\t\t\t\t}\n\t\t\t\tdiv.removeChild(node);\n\t\t\t}\n\t\t\tvar canvas = makeCanvas(w, h);\n\t\t\tdiv.appendChild(canvas);\n\t\t\t// we have added a new node, so we must step our position\n\t\t\t++i;\n\t\t\treturn transform(transforms, canvas.getContext('2d'));\n\t\t}\n\t\tfunction addElement(matrices, alpha, form)\n\t\t{\n\t\t\tvar kid = kids[i];\n\t\t\tvar elem = form.form._0;\n\n\t\t\tvar node = (!kid || kid.getContext)\n\t\t\t\t? NativeElement.render(elem)\n\t\t\t\t: NativeElement.update(kid, kid.oldElement, elem);\n\n\t\t\tnode.style.position = 'absolute';\n\t\t\tnode.style.opacity = alpha * form.alpha * elem._0.props.opacity;\n\t\t\tNativeElement.addTransform(node.style, makeTransform(w, h, form, matrices));\n\t\t\tnode.oldElement = elem;\n\t\t\t++i;\n\t\t\tif (!kid)\n\t\t\t{\n\t\t\t\tdiv.appendChild(node);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdiv.insertBefore(node, kid);\n\t\t\t}\n\t\t}\n\t\tfunction clearRest()\n\t\t{\n\t\t\twhile (i < kids.length)\n\t\t\t{\n\t\t\t\tdiv.removeChild(kids[i]);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tnextContext: nextContext,\n\t\t\taddElement: addElement,\n\t\t\tclearRest: clearRest\n\t\t};\n\t}\n\n\n\tfunction update(div, _, model)\n\t{\n\t\tvar w = model.w;\n\t\tvar h = model.h;\n\n\t\tvar forms = formStepper(model.forms);\n\t\tvar nodes = nodeStepper(w, h, div);\n\t\tvar ctx = null;\n\t\tvar formType = '';\n\n\t\twhile (formType = forms.peekNext())\n\t\t{\n\t\t\t// make sure we have context if we need it\n\t\t\tif (ctx === null && formType !== 'FElement')\n\t\t\t{\n\t\t\t\tctx = nodes.nextContext(forms.transforms());\n\t\t\t\tctx.globalAlpha = forms.alpha();\n\t\t\t}\n\n\t\t\tvar form = forms.next(ctx);\n\t\t\t// if it is FGroup, all updates are made within formStepper when next is called.\n\t\t\tif (formType === 'FElement')\n\t\t\t{\n\t\t\t\t// update or insert an element, get a new context\n\t\t\t\tnodes.addElement(forms.transforms(), forms.alpha(), form);\n\t\t\t\tctx = null;\n\t\t\t}\n\t\t\telse if (formType !== 'FGroup')\n\t\t\t{\n\t\t\t\trenderForm(function() { update(div, model, model); }, ctx, form);\n\t\t\t}\n\t\t}\n\t\tnodes.clearRest();\n\t\treturn div;\n\t}\n\n\n\tfunction collage(w, h, forms)\n\t{\n\t\treturn A3(NativeElement.newElement, w, h, {\n\t\t\tctor: 'Custom',\n\t\t\ttype: 'Collage',\n\t\t\trender: render,\n\t\t\tupdate: update,\n\t\t\tmodel: {w: w, h: h, forms: forms}\n\t\t});\n\t}\n\n\treturn localRuntime.Native.Graphics.Collage.values = {\n\t\tcollage: F3(collage)\n\t};\n};\n\n\n// setup\nElm.Native = Elm.Native || {};\nElm.Native.Graphics = Elm.Native.Graphics || {};\nElm.Native.Graphics.Element = Elm.Native.Graphics.Element || {};\n\n// definition\nElm.Native.Graphics.Element.make = function(localRuntime) {\n\t'use strict';\n\n\t// attempt to short-circuit\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Graphics = localRuntime.Native.Graphics || {};\n\tlocalRuntime.Native.Graphics.Element = localRuntime.Native.Graphics.Element || {};\n\tif ('values' in localRuntime.Native.Graphics.Element)\n\t{\n\t\treturn localRuntime.Native.Graphics.Element.values;\n\t}\n\n\tvar Color = Elm.Native.Color.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\tvar Text = Elm.Native.Text.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\t// CREATION\n\n\tvar createNode =\n\t\ttypeof document === 'undefined'\n\t\t\t?\n\t\t\t\tfunction(_)\n\t\t\t\t{\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstyle: {},\n\t\t\t\t\t\tappendChild: function() {}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t:\n\t\t\t\tfunction(elementType)\n\t\t\t\t{\n\t\t\t\t\tvar node = document.createElement(elementType);\n\t\t\t\t\tnode.style.padding = '0';\n\t\t\t\t\tnode.style.margin = '0';\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\t\t\t;\n\n\n\tfunction newElement(width, height, elementPrim)\n\t{\n\t\treturn {\n\t\t\tctor: 'Element_elm_builtin',\n\t\t\t_0: {\n\t\t\t\telement: elementPrim,\n\t\t\t\tprops: {\n\t\t\t\t\tid: Utils.guid(),\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height,\n\t\t\t\t\topacity: 1,\n\t\t\t\t\tcolor: Maybe.Nothing,\n\t\t\t\t\thref: '',\n\t\t\t\t\ttag: '',\n\t\t\t\t\thover: Utils.Tuple0,\n\t\t\t\t\tclick: Utils.Tuple0\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\n\t// PROPERTIES\n\n\tfunction setProps(elem, node)\n\t{\n\t\tvar props = elem.props;\n\n\t\tvar element = elem.element;\n\t\tvar width = props.width - (element.adjustWidth || 0);\n\t\tvar height = props.height - (element.adjustHeight || 0);\n\t\tnode.style.width  = (width | 0) + 'px';\n\t\tnode.style.height = (height | 0) + 'px';\n\n\t\tif (props.opacity !== 1)\n\t\t{\n\t\t\tnode.style.opacity = props.opacity;\n\t\t}\n\n\t\tif (props.color.ctor === 'Just')\n\t\t{\n\t\t\tnode.style.backgroundColor = Color.toCss(props.color._0);\n\t\t}\n\n\t\tif (props.tag !== '')\n\t\t{\n\t\t\tnode.id = props.tag;\n\t\t}\n\n\t\tif (props.hover.ctor !== '_Tuple0')\n\t\t{\n\t\t\taddHover(node, props.hover);\n\t\t}\n\n\t\tif (props.click.ctor !== '_Tuple0')\n\t\t{\n\t\t\taddClick(node, props.click);\n\t\t}\n\n\t\tif (props.href !== '')\n\t\t{\n\t\t\tvar anchor = createNode('a');\n\t\t\tanchor.href = props.href;\n\t\t\tanchor.style.display = 'block';\n\t\t\tanchor.style.pointerEvents = 'auto';\n\t\t\tanchor.appendChild(node);\n\t\t\tnode = anchor;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tfunction addClick(e, handler)\n\t{\n\t\te.style.pointerEvents = 'auto';\n\t\te.elm_click_handler = handler;\n\t\tfunction trigger(ev)\n\t\t{\n\t\t\te.elm_click_handler(Utils.Tuple0);\n\t\t\tev.stopPropagation();\n\t\t}\n\t\te.elm_click_trigger = trigger;\n\t\te.addEventListener('click', trigger);\n\t}\n\n\tfunction removeClick(e, handler)\n\t{\n\t\tif (e.elm_click_trigger)\n\t\t{\n\t\t\te.removeEventListener('click', e.elm_click_trigger);\n\t\t\te.elm_click_trigger = null;\n\t\t\te.elm_click_handler = null;\n\t\t}\n\t}\n\n\tfunction addHover(e, handler)\n\t{\n\t\te.style.pointerEvents = 'auto';\n\t\te.elm_hover_handler = handler;\n\t\te.elm_hover_count = 0;\n\n\t\tfunction over(evt)\n\t\t{\n\t\t\tif (e.elm_hover_count++ > 0) return;\n\t\t\te.elm_hover_handler(true);\n\t\t\tevt.stopPropagation();\n\t\t}\n\t\tfunction out(evt)\n\t\t{\n\t\t\tif (e.contains(evt.toElement || evt.relatedTarget)) return;\n\t\t\te.elm_hover_count = 0;\n\t\t\te.elm_hover_handler(false);\n\t\t\tevt.stopPropagation();\n\t\t}\n\t\te.elm_hover_over = over;\n\t\te.elm_hover_out = out;\n\t\te.addEventListener('mouseover', over);\n\t\te.addEventListener('mouseout', out);\n\t}\n\n\tfunction removeHover(e)\n\t{\n\t\te.elm_hover_handler = null;\n\t\tif (e.elm_hover_over)\n\t\t{\n\t\t\te.removeEventListener('mouseover', e.elm_hover_over);\n\t\t\te.elm_hover_over = null;\n\t\t}\n\t\tif (e.elm_hover_out)\n\t\t{\n\t\t\te.removeEventListener('mouseout', e.elm_hover_out);\n\t\t\te.elm_hover_out = null;\n\t\t}\n\t}\n\n\n\t// IMAGES\n\n\tfunction image(props, img)\n\t{\n\t\tswitch (img._0.ctor)\n\t\t{\n\t\t\tcase 'Plain':\n\t\t\t\treturn plainImage(img._3);\n\n\t\t\tcase 'Fitted':\n\t\t\t\treturn fittedImage(props.width, props.height, img._3);\n\n\t\t\tcase 'Cropped':\n\t\t\t\treturn croppedImage(img, props.width, props.height, img._3);\n\n\t\t\tcase 'Tiled':\n\t\t\t\treturn tiledImage(img._3);\n\t\t}\n\t}\n\n\tfunction plainImage(src)\n\t{\n\t\tvar img = createNode('img');\n\t\timg.src = src;\n\t\timg.name = src;\n\t\timg.style.display = 'block';\n\t\treturn img;\n\t}\n\n\tfunction tiledImage(src)\n\t{\n\t\tvar div = createNode('div');\n\t\tdiv.style.backgroundImage = 'url(' + src + ')';\n\t\treturn div;\n\t}\n\n\tfunction fittedImage(w, h, src)\n\t{\n\t\tvar div = createNode('div');\n\t\tdiv.style.background = 'url(' + src + ') no-repeat center';\n\t\tdiv.style.webkitBackgroundSize = 'cover';\n\t\tdiv.style.MozBackgroundSize = 'cover';\n\t\tdiv.style.OBackgroundSize = 'cover';\n\t\tdiv.style.backgroundSize = 'cover';\n\t\treturn div;\n\t}\n\n\tfunction croppedImage(elem, w, h, src)\n\t{\n\t\tvar pos = elem._0._0;\n\t\tvar e = createNode('div');\n\t\te.style.overflow = 'hidden';\n\n\t\tvar img = createNode('img');\n\t\timg.onload = function() {\n\t\t\tvar sw = w / elem._1, sh = h / elem._2;\n\t\t\timg.style.width = ((this.width * sw) | 0) + 'px';\n\t\t\timg.style.height = ((this.height * sh) | 0) + 'px';\n\t\t\timg.style.marginLeft = ((- pos._0 * sw) | 0) + 'px';\n\t\t\timg.style.marginTop = ((- pos._1 * sh) | 0) + 'px';\n\t\t};\n\t\timg.src = src;\n\t\timg.name = src;\n\t\te.appendChild(img);\n\t\treturn e;\n\t}\n\n\n\t// FLOW\n\n\tfunction goOut(node)\n\t{\n\t\tnode.style.position = 'absolute';\n\t\treturn node;\n\t}\n\tfunction goDown(node)\n\t{\n\t\treturn node;\n\t}\n\tfunction goRight(node)\n\t{\n\t\tnode.style.styleFloat = 'left';\n\t\tnode.style.cssFloat = 'left';\n\t\treturn node;\n\t}\n\n\tvar directionTable = {\n\t\tDUp: goDown,\n\t\tDDown: goDown,\n\t\tDLeft: goRight,\n\t\tDRight: goRight,\n\t\tDIn: goOut,\n\t\tDOut: goOut\n\t};\n\tfunction needsReversal(dir)\n\t{\n\t\treturn dir === 'DUp' || dir === 'DLeft' || dir === 'DIn';\n\t}\n\n\tfunction flow(dir, elist)\n\t{\n\t\tvar array = List.toArray(elist);\n\t\tvar container = createNode('div');\n\t\tvar goDir = directionTable[dir];\n\t\tif (goDir === goOut)\n\t\t{\n\t\t\tcontainer.style.pointerEvents = 'none';\n\t\t}\n\t\tif (needsReversal(dir))\n\t\t{\n\t\t\tarray.reverse();\n\t\t}\n\t\tvar len = array.length;\n\t\tfor (var i = 0; i < len; ++i)\n\t\t{\n\t\t\tcontainer.appendChild(goDir(render(array[i])));\n\t\t}\n\t\treturn container;\n\t}\n\n\n\t// CONTAINER\n\n\tfunction toPos(pos)\n\t{\n\t\treturn pos.ctor === 'Absolute'\n\t\t\t? pos._0 + 'px'\n\t\t\t: (pos._0 * 100) + '%';\n\t}\n\n\t// must clear right, left, top, bottom, and transform\n\t// before calling this function\n\tfunction setPos(pos, wrappedElement, e)\n\t{\n\t\tvar elem = wrappedElement._0;\n\t\tvar element = elem.element;\n\t\tvar props = elem.props;\n\t\tvar w = props.width + (element.adjustWidth ? element.adjustWidth : 0);\n\t\tvar h = props.height + (element.adjustHeight ? element.adjustHeight : 0);\n\n\t\te.style.position = 'absolute';\n\t\te.style.margin = 'auto';\n\t\tvar transform = '';\n\n\t\tswitch (pos.horizontal.ctor)\n\t\t{\n\t\t\tcase 'P':\n\t\t\t\te.style.right = toPos(pos.x);\n\t\t\t\te.style.removeProperty('left');\n\t\t\t\tbreak;\n\n\t\t\tcase 'Z':\n\t\t\t\ttransform = 'translateX(' + ((-w / 2) | 0) + 'px) ';\n\n\t\t\tcase 'N':\n\t\t\t\te.style.left = toPos(pos.x);\n\t\t\t\te.style.removeProperty('right');\n\t\t\t\tbreak;\n\t\t}\n\t\tswitch (pos.vertical.ctor)\n\t\t{\n\t\t\tcase 'N':\n\t\t\t\te.style.bottom = toPos(pos.y);\n\t\t\t\te.style.removeProperty('top');\n\t\t\t\tbreak;\n\n\t\t\tcase 'Z':\n\t\t\t\ttransform += 'translateY(' + ((-h / 2) | 0) + 'px)';\n\n\t\t\tcase 'P':\n\t\t\t\te.style.top = toPos(pos.y);\n\t\t\t\te.style.removeProperty('bottom');\n\t\t\t\tbreak;\n\t\t}\n\t\tif (transform !== '')\n\t\t{\n\t\t\taddTransform(e.style, transform);\n\t\t}\n\t\treturn e;\n\t}\n\n\tfunction addTransform(style, transform)\n\t{\n\t\tstyle.transform       = transform;\n\t\tstyle.msTransform     = transform;\n\t\tstyle.MozTransform    = transform;\n\t\tstyle.webkitTransform = transform;\n\t\tstyle.OTransform      = transform;\n\t}\n\n\tfunction container(pos, elem)\n\t{\n\t\tvar e = render(elem);\n\t\tsetPos(pos, elem, e);\n\t\tvar div = createNode('div');\n\t\tdiv.style.position = 'relative';\n\t\tdiv.style.overflow = 'hidden';\n\t\tdiv.appendChild(e);\n\t\treturn div;\n\t}\n\n\n\tfunction rawHtml(elem)\n\t{\n\t\tvar html = elem.html;\n\t\tvar align = elem.align;\n\n\t\tvar div = createNode('div');\n\t\tdiv.innerHTML = html;\n\t\tdiv.style.visibility = 'hidden';\n\t\tif (align)\n\t\t{\n\t\t\tdiv.style.textAlign = align;\n\t\t}\n\t\tdiv.style.visibility = 'visible';\n\t\tdiv.style.pointerEvents = 'auto';\n\t\treturn div;\n\t}\n\n\n\t// RENDER\n\n\tfunction render(wrappedElement)\n\t{\n\t\tvar elem = wrappedElement._0;\n\t\treturn setProps(elem, makeElement(elem));\n\t}\n\n\tfunction makeElement(e)\n\t{\n\t\tvar elem = e.element;\n\t\tswitch (elem.ctor)\n\t\t{\n\t\t\tcase 'Image':\n\t\t\t\treturn image(e.props, elem);\n\n\t\t\tcase 'Flow':\n\t\t\t\treturn flow(elem._0.ctor, elem._1);\n\n\t\t\tcase 'Container':\n\t\t\t\treturn container(elem._0, elem._1);\n\n\t\t\tcase 'Spacer':\n\t\t\t\treturn createNode('div');\n\n\t\t\tcase 'RawHtml':\n\t\t\t\treturn rawHtml(elem);\n\n\t\t\tcase 'Custom':\n\t\t\t\treturn elem.render(elem.model);\n\t\t}\n\t}\n\n\tfunction updateAndReplace(node, curr, next)\n\t{\n\t\tvar newNode = update(node, curr, next);\n\t\tif (newNode !== node)\n\t\t{\n\t\t\tnode.parentNode.replaceChild(newNode, node);\n\t\t}\n\t\treturn newNode;\n\t}\n\n\n\t// UPDATE\n\n\tfunction update(node, wrappedCurrent, wrappedNext)\n\t{\n\t\tvar curr = wrappedCurrent._0;\n\t\tvar next = wrappedNext._0;\n\t\tvar rootNode = node;\n\t\tif (node.tagName === 'A')\n\t\t{\n\t\t\tnode = node.firstChild;\n\t\t}\n\t\tif (curr.props.id === next.props.id)\n\t\t{\n\t\t\tupdateProps(node, curr, next);\n\t\t\treturn rootNode;\n\t\t}\n\t\tif (curr.element.ctor !== next.element.ctor)\n\t\t{\n\t\t\treturn render(wrappedNext);\n\t\t}\n\t\tvar nextE = next.element;\n\t\tvar currE = curr.element;\n\t\tswitch (nextE.ctor)\n\t\t{\n\t\t\tcase 'Spacer':\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'RawHtml':\n\t\t\t\tif(currE.html.valueOf() !== nextE.html.valueOf())\n\t\t\t\t{\n\t\t\t\t\tnode.innerHTML = nextE.html;\n\t\t\t\t}\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'Image':\n\t\t\t\tif (nextE._0.ctor === 'Plain')\n\t\t\t\t{\n\t\t\t\t\tif (nextE._3 !== currE._3)\n\t\t\t\t\t{\n\t\t\t\t\t\tnode.src = nextE._3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (!Utils.eq(nextE, currE)\n\t\t\t\t\t|| next.props.width !== curr.props.width\n\t\t\t\t\t|| next.props.height !== curr.props.height)\n\t\t\t\t{\n\t\t\t\t\treturn render(wrappedNext);\n\t\t\t\t}\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'Flow':\n\t\t\t\tvar arr = List.toArray(nextE._1);\n\t\t\t\tfor (var i = arr.length; i--; )\n\t\t\t\t{\n\t\t\t\t\tarr[i] = arr[i]._0.element.ctor;\n\t\t\t\t}\n\t\t\t\tif (nextE._0.ctor !== currE._0.ctor)\n\t\t\t\t{\n\t\t\t\t\treturn render(wrappedNext);\n\t\t\t\t}\n\t\t\t\tvar nexts = List.toArray(nextE._1);\n\t\t\t\tvar kids = node.childNodes;\n\t\t\t\tif (nexts.length !== kids.length)\n\t\t\t\t{\n\t\t\t\t\treturn render(wrappedNext);\n\t\t\t\t}\n\t\t\t\tvar currs = List.toArray(currE._1);\n\t\t\t\tvar dir = nextE._0.ctor;\n\t\t\t\tvar goDir = directionTable[dir];\n\t\t\t\tvar toReverse = needsReversal(dir);\n\t\t\t\tvar len = kids.length;\n\t\t\t\tfor (var i = len; i--; )\n\t\t\t\t{\n\t\t\t\t\tvar subNode = kids[toReverse ? len - i - 1 : i];\n\t\t\t\t\tgoDir(updateAndReplace(subNode, currs[i], nexts[i]));\n\t\t\t\t}\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'Container':\n\t\t\t\tvar subNode = node.firstChild;\n\t\t\t\tvar newSubNode = updateAndReplace(subNode, currE._1, nextE._1);\n\t\t\t\tsetPos(nextE._0, nextE._1, newSubNode);\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'Custom':\n\t\t\t\tif (currE.type === nextE.type)\n\t\t\t\t{\n\t\t\t\t\tvar updatedNode = nextE.update(node, currE.model, nextE.model);\n\t\t\t\t\tupdateProps(updatedNode, curr, next);\n\t\t\t\t\treturn updatedNode;\n\t\t\t\t}\n\t\t\t\treturn render(wrappedNext);\n\t\t}\n\t}\n\n\tfunction updateProps(node, curr, next)\n\t{\n\t\tvar nextProps = next.props;\n\t\tvar currProps = curr.props;\n\n\t\tvar element = next.element;\n\t\tvar width = nextProps.width - (element.adjustWidth || 0);\n\t\tvar height = nextProps.height - (element.adjustHeight || 0);\n\t\tif (width !== currProps.width)\n\t\t{\n\t\t\tnode.style.width = (width | 0) + 'px';\n\t\t}\n\t\tif (height !== currProps.height)\n\t\t{\n\t\t\tnode.style.height = (height | 0) + 'px';\n\t\t}\n\n\t\tif (nextProps.opacity !== currProps.opacity)\n\t\t{\n\t\t\tnode.style.opacity = nextProps.opacity;\n\t\t}\n\n\t\tvar nextColor = nextProps.color.ctor === 'Just'\n\t\t\t? Color.toCss(nextProps.color._0)\n\t\t\t: '';\n\t\tif (node.style.backgroundColor !== nextColor)\n\t\t{\n\t\t\tnode.style.backgroundColor = nextColor;\n\t\t}\n\n\t\tif (nextProps.tag !== currProps.tag)\n\t\t{\n\t\t\tnode.id = nextProps.tag;\n\t\t}\n\n\t\tif (nextProps.href !== currProps.href)\n\t\t{\n\t\t\tif (currProps.href === '')\n\t\t\t{\n\t\t\t\t// add a surrounding href\n\t\t\t\tvar anchor = createNode('a');\n\t\t\t\tanchor.href = nextProps.href;\n\t\t\t\tanchor.style.display = 'block';\n\t\t\t\tanchor.style.pointerEvents = 'auto';\n\n\t\t\t\tnode.parentNode.replaceChild(anchor, node);\n\t\t\t\tanchor.appendChild(node);\n\t\t\t}\n\t\t\telse if (nextProps.href === '')\n\t\t\t{\n\t\t\t\t// remove the surrounding href\n\t\t\t\tvar anchor = node.parentNode;\n\t\t\t\tanchor.parentNode.replaceChild(node, anchor);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// just update the link\n\t\t\t\tnode.parentNode.href = nextProps.href;\n\t\t\t}\n\t\t}\n\n\t\t// update click and hover handlers\n\t\tvar removed = false;\n\n\t\t// update hover handlers\n\t\tif (currProps.hover.ctor === '_Tuple0')\n\t\t{\n\t\t\tif (nextProps.hover.ctor !== '_Tuple0')\n\t\t\t{\n\t\t\t\taddHover(node, nextProps.hover);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (nextProps.hover.ctor === '_Tuple0')\n\t\t\t{\n\t\t\t\tremoved = true;\n\t\t\t\tremoveHover(node);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tnode.elm_hover_handler = nextProps.hover;\n\t\t\t}\n\t\t}\n\n\t\t// update click handlers\n\t\tif (currProps.click.ctor === '_Tuple0')\n\t\t{\n\t\t\tif (nextProps.click.ctor !== '_Tuple0')\n\t\t\t{\n\t\t\t\taddClick(node, nextProps.click);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (nextProps.click.ctor === '_Tuple0')\n\t\t\t{\n\t\t\t\tremoved = true;\n\t\t\t\tremoveClick(node);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tnode.elm_click_handler = nextProps.click;\n\t\t\t}\n\t\t}\n\n\t\t// stop capturing clicks if\n\t\tif (removed\n\t\t\t&& nextProps.hover.ctor === '_Tuple0'\n\t\t\t&& nextProps.click.ctor === '_Tuple0')\n\t\t{\n\t\t\tnode.style.pointerEvents = 'none';\n\t\t}\n\t}\n\n\n\t// TEXT\n\n\tfunction block(align)\n\t{\n\t\treturn function(text)\n\t\t{\n\t\t\tvar raw = {\n\t\t\t\tctor: 'RawHtml',\n\t\t\t\thtml: Text.renderHtml(text),\n\t\t\t\talign: align\n\t\t\t};\n\t\t\tvar pos = htmlHeight(0, raw);\n\t\t\treturn newElement(pos._0, pos._1, raw);\n\t\t};\n\t}\n\n\tfunction markdown(text)\n\t{\n\t\tvar raw = {\n\t\t\tctor: 'RawHtml',\n\t\t\thtml: text,\n\t\t\talign: null\n\t\t};\n\t\tvar pos = htmlHeight(0, raw);\n\t\treturn newElement(pos._0, pos._1, raw);\n\t}\n\n\tvar htmlHeight =\n\t\ttypeof document !== 'undefined'\n\t\t\t? realHtmlHeight\n\t\t\t: function(a, b) { return Utils.Tuple2(0, 0); };\n\n\tfunction realHtmlHeight(width, rawHtml)\n\t{\n\t\t// create dummy node\n\t\tvar temp = document.createElement('div');\n\t\ttemp.innerHTML = rawHtml.html;\n\t\tif (width > 0)\n\t\t{\n\t\t\ttemp.style.width = width + 'px';\n\t\t}\n\t\ttemp.style.visibility = 'hidden';\n\t\ttemp.style.styleFloat = 'left';\n\t\ttemp.style.cssFloat = 'left';\n\n\t\tdocument.body.appendChild(temp);\n\n\t\t// get dimensions\n\t\tvar style = window.getComputedStyle(temp, null);\n\t\tvar w = Math.ceil(style.getPropertyValue('width').slice(0, -2) - 0);\n\t\tvar h = Math.ceil(style.getPropertyValue('height').slice(0, -2) - 0);\n\t\tdocument.body.removeChild(temp);\n\t\treturn Utils.Tuple2(w, h);\n\t}\n\n\n\treturn localRuntime.Native.Graphics.Element.values = {\n\t\trender: render,\n\t\tupdate: update,\n\t\tupdateAndReplace: updateAndReplace,\n\n\t\tcreateNode: createNode,\n\t\tnewElement: F3(newElement),\n\t\taddTransform: addTransform,\n\t\thtmlHeight: F2(htmlHeight),\n\t\tguid: Utils.guid,\n\n\t\tblock: block,\n\t\tmarkdown: markdown\n\t};\n};\n\nElm.Native.Text = {};\nElm.Native.Text.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Text = localRuntime.Native.Text || {};\n\tif (localRuntime.Native.Text.values)\n\t{\n\t\treturn localRuntime.Native.Text.values;\n\t}\n\n\tvar toCss = Elm.Native.Color.make(localRuntime).toCss;\n\tvar List = Elm.Native.List.make(localRuntime);\n\n\n\t// CONSTRUCTORS\n\n\tfunction fromString(str)\n\t{\n\t\treturn {\n\t\t\tctor: 'Text:Text',\n\t\t\t_0: str\n\t\t};\n\t}\n\n\tfunction append(a, b)\n\t{\n\t\treturn {\n\t\t\tctor: 'Text:Append',\n\t\t\t_0: a,\n\t\t\t_1: b\n\t\t};\n\t}\n\n\tfunction addMeta(field, value, text)\n\t{\n\t\tvar newProps = {};\n\t\tvar newText = {\n\t\t\tctor: 'Text:Meta',\n\t\t\t_0: newProps,\n\t\t\t_1: text\n\t\t};\n\n\t\tif (text.ctor === 'Text:Meta')\n\t\t{\n\t\t\tnewText._1 = text._1;\n\t\t\tvar props = text._0;\n\t\t\tfor (var i = metaKeys.length; i--; )\n\t\t\t{\n\t\t\t\tvar key = metaKeys[i];\n\t\t\t\tvar val = props[key];\n\t\t\t\tif (val)\n\t\t\t\t{\n\t\t\t\t\tnewProps[key] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tnewProps[field] = value;\n\t\treturn newText;\n\t}\n\n\tvar metaKeys = [\n\t\t'font-size',\n\t\t'font-family',\n\t\t'font-style',\n\t\t'font-weight',\n\t\t'href',\n\t\t'text-decoration',\n\t\t'color'\n\t];\n\n\n\t// conversions from Elm values to CSS\n\n\tfunction toTypefaces(list)\n\t{\n\t\tvar typefaces = List.toArray(list);\n\t\tfor (var i = typefaces.length; i--; )\n\t\t{\n\t\t\tvar typeface = typefaces[i];\n\t\t\tif (typeface.indexOf(' ') > -1)\n\t\t\t{\n\t\t\t\ttypefaces[i] = \"'\" + typeface + \"'\";\n\t\t\t}\n\t\t}\n\t\treturn typefaces.join(',');\n\t}\n\n\tfunction toLine(line)\n\t{\n\t\tvar ctor = line.ctor;\n\t\treturn ctor === 'Under'\n\t\t\t? 'underline'\n\t\t\t: ctor === 'Over'\n\t\t\t\t? 'overline'\n\t\t\t\t: 'line-through';\n\t}\n\n\t// setting styles of Text\n\n\tfunction style(style, text)\n\t{\n\t\tvar newText = addMeta('color', toCss(style.color), text);\n\t\tvar props = newText._0;\n\n\t\tif (style.typeface.ctor !== '[]')\n\t\t{\n\t\t\tprops['font-family'] = toTypefaces(style.typeface);\n\t\t}\n\t\tif (style.height.ctor !== 'Nothing')\n\t\t{\n\t\t\tprops['font-size'] = style.height._0 + 'px';\n\t\t}\n\t\tif (style.bold)\n\t\t{\n\t\t\tprops['font-weight'] = 'bold';\n\t\t}\n\t\tif (style.italic)\n\t\t{\n\t\t\tprops['font-style'] = 'italic';\n\t\t}\n\t\tif (style.line.ctor !== 'Nothing')\n\t\t{\n\t\t\tprops['text-decoration'] = toLine(style.line._0);\n\t\t}\n\t\treturn newText;\n\t}\n\n\tfunction height(px, text)\n\t{\n\t\treturn addMeta('font-size', px + 'px', text);\n\t}\n\n\tfunction typeface(names, text)\n\t{\n\t\treturn addMeta('font-family', toTypefaces(names), text);\n\t}\n\n\tfunction monospace(text)\n\t{\n\t\treturn addMeta('font-family', 'monospace', text);\n\t}\n\n\tfunction italic(text)\n\t{\n\t\treturn addMeta('font-style', 'italic', text);\n\t}\n\n\tfunction bold(text)\n\t{\n\t\treturn addMeta('font-weight', 'bold', text);\n\t}\n\n\tfunction link(href, text)\n\t{\n\t\treturn addMeta('href', href, text);\n\t}\n\n\tfunction line(line, text)\n\t{\n\t\treturn addMeta('text-decoration', toLine(line), text);\n\t}\n\n\tfunction color(color, text)\n\t{\n\t\treturn addMeta('color', toCss(color), text);\n\t}\n\n\n\t// RENDER\n\n\tfunction renderHtml(text)\n\t{\n\t\tvar tag = text.ctor;\n\t\tif (tag === 'Text:Append')\n\t\t{\n\t\t\treturn renderHtml(text._0) + renderHtml(text._1);\n\t\t}\n\t\tif (tag === 'Text:Text')\n\t\t{\n\t\t\treturn properEscape(text._0);\n\t\t}\n\t\tif (tag === 'Text:Meta')\n\t\t{\n\t\t\treturn renderMeta(text._0, renderHtml(text._1));\n\t\t}\n\t}\n\n\tfunction renderMeta(metas, string)\n\t{\n\t\tvar href = metas.href;\n\t\tif (href)\n\t\t{\n\t\t\tstring = '<a href=\"' + href + '\">' + string + '</a>';\n\t\t}\n\t\tvar styles = '';\n\t\tfor (var key in metas)\n\t\t{\n\t\t\tif (key === 'href')\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstyles += key + ':' + metas[key] + ';';\n\t\t}\n\t\tif (styles)\n\t\t{\n\t\t\tstring = '<span style=\"' + styles + '\">' + string + '</span>';\n\t\t}\n\t\treturn string;\n\t}\n\n\tfunction properEscape(str)\n\t{\n\t\tif (str.length === 0)\n\t\t{\n\t\t\treturn str;\n\t\t}\n\t\tstr = str //.replace(/&/g,  '&#38;')\n\t\t\t.replace(/\"/g,  '&#34;')\n\t\t\t.replace(/'/g,  '&#39;')\n\t\t\t.replace(/</g,  '&#60;')\n\t\t\t.replace(/>/g,  '&#62;');\n\t\tvar arr = str.split('\\n');\n\t\tfor (var i = arr.length; i--; )\n\t\t{\n\t\t\tarr[i] = makeSpaces(arr[i]);\n\t\t}\n\t\treturn arr.join('<br/>');\n\t}\n\n\tfunction makeSpaces(s)\n\t{\n\t\tif (s.length === 0)\n\t\t{\n\t\t\treturn s;\n\t\t}\n\t\tvar arr = s.split('');\n\t\tif (arr[0] === ' ')\n\t\t{\n\t\t\tarr[0] = '&nbsp;';\n\t\t}\n\t\tfor (var i = arr.length; --i; )\n\t\t{\n\t\t\tif (arr[i][0] === ' ' && arr[i - 1] === ' ')\n\t\t\t{\n\t\t\t\tarr[i - 1] = arr[i - 1] + arr[i];\n\t\t\t\tarr[i] = '';\n\t\t\t}\n\t\t}\n\t\tfor (var i = arr.length; i--; )\n\t\t{\n\t\t\tif (arr[i].length > 1 && arr[i][0] === ' ')\n\t\t\t{\n\t\t\t\tvar spaces = arr[i].split('');\n\t\t\t\tfor (var j = spaces.length - 2; j >= 0; j -= 2)\n\t\t\t\t{\n\t\t\t\t\tspaces[j] = '&nbsp;';\n\t\t\t\t}\n\t\t\t\tarr[i] = spaces.join('');\n\t\t\t}\n\t\t}\n\t\tarr = arr.join('');\n\t\tif (arr[arr.length - 1] === ' ')\n\t\t{\n\t\t\treturn arr.slice(0, -1) + '&nbsp;';\n\t\t}\n\t\treturn arr;\n\t}\n\n\n\treturn localRuntime.Native.Text.values = {\n\t\tfromString: fromString,\n\t\tappend: F2(append),\n\n\t\theight: F2(height),\n\t\titalic: italic,\n\t\tbold: bold,\n\t\tline: F2(line),\n\t\tmonospace: monospace,\n\t\ttypeface: F2(typeface),\n\t\tcolor: F2(color),\n\t\tlink: F2(link),\n\t\tstyle: F2(style),\n\n\t\ttoTypefaces: toTypefaces,\n\t\ttoLine: toLine,\n\t\trenderHtml: renderHtml\n\t};\n};\n\nElm.Text = Elm.Text || {};\nElm.Text.make = function (_elm) {\n   \"use strict\";\n   _elm.Text = _elm.Text || {};\n   if (_elm.Text.values) return _elm.Text.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Color = Elm.Color.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Text = Elm.Native.Text.make(_elm);\n   var _op = {};\n   var line = $Native$Text.line;\n   var italic = $Native$Text.italic;\n   var bold = $Native$Text.bold;\n   var color = $Native$Text.color;\n   var height = $Native$Text.height;\n   var link = $Native$Text.link;\n   var monospace = $Native$Text.monospace;\n   var typeface = $Native$Text.typeface;\n   var style = $Native$Text.style;\n   var append = $Native$Text.append;\n   var fromString = $Native$Text.fromString;\n   var empty = fromString(\"\");\n   var concat = function (texts) {    return A3($List.foldr,append,empty,texts);};\n   var join = F2(function (seperator,texts) {    return concat(A2($List.intersperse,seperator,texts));});\n   var defaultStyle = {typeface: _U.list([]),height: $Maybe.Nothing,color: $Color.black,bold: false,italic: false,line: $Maybe.Nothing};\n   var Style = F6(function (a,b,c,d,e,f) {    return {typeface: a,height: b,color: c,bold: d,italic: e,line: f};});\n   var Through = {ctor: \"Through\"};\n   var Over = {ctor: \"Over\"};\n   var Under = {ctor: \"Under\"};\n   var Text = {ctor: \"Text\"};\n   return _elm.Text.values = {_op: _op\n                             ,fromString: fromString\n                             ,empty: empty\n                             ,append: append\n                             ,concat: concat\n                             ,join: join\n                             ,link: link\n                             ,style: style\n                             ,defaultStyle: defaultStyle\n                             ,typeface: typeface\n                             ,monospace: monospace\n                             ,height: height\n                             ,color: color\n                             ,bold: bold\n                             ,italic: italic\n                             ,line: line\n                             ,Style: Style\n                             ,Under: Under\n                             ,Over: Over\n                             ,Through: Through};\n};\nElm.Graphics = Elm.Graphics || {};\nElm.Graphics.Element = Elm.Graphics.Element || {};\nElm.Graphics.Element.make = function (_elm) {\n   \"use strict\";\n   _elm.Graphics = _elm.Graphics || {};\n   _elm.Graphics.Element = _elm.Graphics.Element || {};\n   if (_elm.Graphics.Element.values) return _elm.Graphics.Element.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Color = Elm.Color.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Graphics$Element = Elm.Native.Graphics.Element.make(_elm),\n   $Text = Elm.Text.make(_elm);\n   var _op = {};\n   var DOut = {ctor: \"DOut\"};\n   var outward = DOut;\n   var DIn = {ctor: \"DIn\"};\n   var inward = DIn;\n   var DRight = {ctor: \"DRight\"};\n   var right = DRight;\n   var DLeft = {ctor: \"DLeft\"};\n   var left = DLeft;\n   var DDown = {ctor: \"DDown\"};\n   var down = DDown;\n   var DUp = {ctor: \"DUp\"};\n   var up = DUp;\n   var RawPosition = F4(function (a,b,c,d) {    return {horizontal: a,vertical: b,x: c,y: d};});\n   var Position = function (a) {    return {ctor: \"Position\",_0: a};};\n   var Relative = function (a) {    return {ctor: \"Relative\",_0: a};};\n   var relative = Relative;\n   var Absolute = function (a) {    return {ctor: \"Absolute\",_0: a};};\n   var absolute = Absolute;\n   var N = {ctor: \"N\"};\n   var bottomLeft = Position({horizontal: N,vertical: N,x: Absolute(0),y: Absolute(0)});\n   var bottomLeftAt = F2(function (x,y) {    return Position({horizontal: N,vertical: N,x: x,y: y});});\n   var Z = {ctor: \"Z\"};\n   var middle = Position({horizontal: Z,vertical: Z,x: Relative(0.5),y: Relative(0.5)});\n   var midLeft = Position({horizontal: N,vertical: Z,x: Absolute(0),y: Relative(0.5)});\n   var midBottom = Position({horizontal: Z,vertical: N,x: Relative(0.5),y: Absolute(0)});\n   var middleAt = F2(function (x,y) {    return Position({horizontal: Z,vertical: Z,x: x,y: y});});\n   var midLeftAt = F2(function (x,y) {    return Position({horizontal: N,vertical: Z,x: x,y: y});});\n   var midBottomAt = F2(function (x,y) {    return Position({horizontal: Z,vertical: N,x: x,y: y});});\n   var P = {ctor: \"P\"};\n   var topLeft = Position({horizontal: N,vertical: P,x: Absolute(0),y: Absolute(0)});\n   var topRight = Position({horizontal: P,vertical: P,x: Absolute(0),y: Absolute(0)});\n   var bottomRight = Position({horizontal: P,vertical: N,x: Absolute(0),y: Absolute(0)});\n   var midRight = Position({horizontal: P,vertical: Z,x: Absolute(0),y: Relative(0.5)});\n   var midTop = Position({horizontal: Z,vertical: P,x: Relative(0.5),y: Absolute(0)});\n   var topLeftAt = F2(function (x,y) {    return Position({horizontal: N,vertical: P,x: x,y: y});});\n   var topRightAt = F2(function (x,y) {    return Position({horizontal: P,vertical: P,x: x,y: y});});\n   var bottomRightAt = F2(function (x,y) {    return Position({horizontal: P,vertical: N,x: x,y: y});});\n   var midRightAt = F2(function (x,y) {    return Position({horizontal: P,vertical: Z,x: x,y: y});});\n   var midTopAt = F2(function (x,y) {    return Position({horizontal: Z,vertical: P,x: x,y: y});});\n   var justified = $Native$Graphics$Element.block(\"justify\");\n   var centered = $Native$Graphics$Element.block(\"center\");\n   var rightAligned = $Native$Graphics$Element.block(\"right\");\n   var leftAligned = $Native$Graphics$Element.block(\"left\");\n   var show = function (value) {    return leftAligned($Text.monospace($Text.fromString($Basics.toString(value))));};\n   var Tiled = {ctor: \"Tiled\"};\n   var Cropped = function (a) {    return {ctor: \"Cropped\",_0: a};};\n   var Fitted = {ctor: \"Fitted\"};\n   var Plain = {ctor: \"Plain\"};\n   var Custom = {ctor: \"Custom\"};\n   var RawHtml = {ctor: \"RawHtml\"};\n   var Spacer = {ctor: \"Spacer\"};\n   var Flow = F2(function (a,b) {    return {ctor: \"Flow\",_0: a,_1: b};});\n   var Container = F2(function (a,b) {    return {ctor: \"Container\",_0: a,_1: b};});\n   var Image = F4(function (a,b,c,d) {    return {ctor: \"Image\",_0: a,_1: b,_2: c,_3: d};});\n   var newElement = $Native$Graphics$Element.newElement;\n   var image = F3(function (w,h,src) {    return A3(newElement,w,h,A4(Image,Plain,w,h,src));});\n   var fittedImage = F3(function (w,h,src) {    return A3(newElement,w,h,A4(Image,Fitted,w,h,src));});\n   var croppedImage = F4(function (pos,w,h,src) {    return A3(newElement,w,h,A4(Image,Cropped(pos),w,h,src));});\n   var tiledImage = F3(function (w,h,src) {    return A3(newElement,w,h,A4(Image,Tiled,w,h,src));});\n   var container = F4(function (w,h,_p0,e) {    var _p1 = _p0;return A3(newElement,w,h,A2(Container,_p1._0,e));});\n   var spacer = F2(function (w,h) {    return A3(newElement,w,h,Spacer);});\n   var sizeOf = function (_p2) {    var _p3 = _p2;var _p4 = _p3._0;return {ctor: \"_Tuple2\",_0: _p4.props.width,_1: _p4.props.height};};\n   var heightOf = function (_p5) {    var _p6 = _p5;return _p6._0.props.height;};\n   var widthOf = function (_p7) {    var _p8 = _p7;return _p8._0.props.width;};\n   var above = F2(function (hi,lo) {\n      return A3(newElement,A2($Basics.max,widthOf(hi),widthOf(lo)),heightOf(hi) + heightOf(lo),A2(Flow,DDown,_U.list([hi,lo])));\n   });\n   var below = F2(function (lo,hi) {\n      return A3(newElement,A2($Basics.max,widthOf(hi),widthOf(lo)),heightOf(hi) + heightOf(lo),A2(Flow,DDown,_U.list([hi,lo])));\n   });\n   var beside = F2(function (lft,rht) {\n      return A3(newElement,widthOf(lft) + widthOf(rht),A2($Basics.max,heightOf(lft),heightOf(rht)),A2(Flow,right,_U.list([lft,rht])));\n   });\n   var layers = function (es) {\n      var hs = A2($List.map,heightOf,es);\n      var ws = A2($List.map,widthOf,es);\n      return A3(newElement,A2($Maybe.withDefault,0,$List.maximum(ws)),A2($Maybe.withDefault,0,$List.maximum(hs)),A2(Flow,DOut,es));\n   };\n   var empty = A2(spacer,0,0);\n   var flow = F2(function (dir,es) {\n      var newFlow = F2(function (w,h) {    return A3(newElement,w,h,A2(Flow,dir,es));});\n      var maxOrZero = function (list) {    return A2($Maybe.withDefault,0,$List.maximum(list));};\n      var hs = A2($List.map,heightOf,es);\n      var ws = A2($List.map,widthOf,es);\n      if (_U.eq(es,_U.list([]))) return empty; else {\n            var _p9 = dir;\n            switch (_p9.ctor)\n            {case \"DUp\": return A2(newFlow,maxOrZero(ws),$List.sum(hs));\n               case \"DDown\": return A2(newFlow,maxOrZero(ws),$List.sum(hs));\n               case \"DLeft\": return A2(newFlow,$List.sum(ws),maxOrZero(hs));\n               case \"DRight\": return A2(newFlow,$List.sum(ws),maxOrZero(hs));\n               case \"DIn\": return A2(newFlow,maxOrZero(ws),maxOrZero(hs));\n               default: return A2(newFlow,maxOrZero(ws),maxOrZero(hs));}\n         }\n   });\n   var Properties = F9(function (a,b,c,d,e,f,g,h,i) {    return {id: a,width: b,height: c,opacity: d,color: e,href: f,tag: g,hover: h,click: i};});\n   var Element_elm_builtin = function (a) {    return {ctor: \"Element_elm_builtin\",_0: a};};\n   var width = F2(function (newWidth,_p10) {\n      var _p11 = _p10;\n      var _p14 = _p11._0.props;\n      var _p13 = _p11._0.element;\n      var newHeight = function () {\n         var _p12 = _p13;\n         switch (_p12.ctor)\n         {case \"Image\": return $Basics.round($Basics.toFloat(_p12._2) / $Basics.toFloat(_p12._1) * $Basics.toFloat(newWidth));\n            case \"RawHtml\": return $Basics.snd(A2($Native$Graphics$Element.htmlHeight,newWidth,_p13));\n            default: return _p14.height;}\n      }();\n      return Element_elm_builtin({element: _p13,props: _U.update(_p14,{width: newWidth,height: newHeight})});\n   });\n   var height = F2(function (newHeight,_p15) {\n      var _p16 = _p15;\n      return Element_elm_builtin({element: _p16._0.element,props: _U.update(_p16._0.props,{height: newHeight})});\n   });\n   var size = F3(function (w,h,e) {    return A2(height,h,A2(width,w,e));});\n   var opacity = F2(function (givenOpacity,_p17) {\n      var _p18 = _p17;\n      return Element_elm_builtin({element: _p18._0.element,props: _U.update(_p18._0.props,{opacity: givenOpacity})});\n   });\n   var color = F2(function (clr,_p19) {\n      var _p20 = _p19;\n      return Element_elm_builtin({element: _p20._0.element,props: _U.update(_p20._0.props,{color: $Maybe.Just(clr)})});\n   });\n   var tag = F2(function (name,_p21) {    var _p22 = _p21;return Element_elm_builtin({element: _p22._0.element,props: _U.update(_p22._0.props,{tag: name})});});\n   var link = F2(function (href,_p23) {\n      var _p24 = _p23;\n      return Element_elm_builtin({element: _p24._0.element,props: _U.update(_p24._0.props,{href: href})});\n   });\n   return _elm.Graphics.Element.values = {_op: _op\n                                         ,image: image\n                                         ,fittedImage: fittedImage\n                                         ,croppedImage: croppedImage\n                                         ,tiledImage: tiledImage\n                                         ,leftAligned: leftAligned\n                                         ,rightAligned: rightAligned\n                                         ,centered: centered\n                                         ,justified: justified\n                                         ,show: show\n                                         ,width: width\n                                         ,height: height\n                                         ,size: size\n                                         ,color: color\n                                         ,opacity: opacity\n                                         ,link: link\n                                         ,tag: tag\n                                         ,widthOf: widthOf\n                                         ,heightOf: heightOf\n                                         ,sizeOf: sizeOf\n                                         ,flow: flow\n                                         ,up: up\n                                         ,down: down\n                                         ,left: left\n                                         ,right: right\n                                         ,inward: inward\n                                         ,outward: outward\n                                         ,layers: layers\n                                         ,above: above\n                                         ,below: below\n                                         ,beside: beside\n                                         ,empty: empty\n                                         ,spacer: spacer\n                                         ,container: container\n                                         ,middle: middle\n                                         ,midTop: midTop\n                                         ,midBottom: midBottom\n                                         ,midLeft: midLeft\n                                         ,midRight: midRight\n                                         ,topLeft: topLeft\n                                         ,topRight: topRight\n                                         ,bottomLeft: bottomLeft\n                                         ,bottomRight: bottomRight\n                                         ,absolute: absolute\n                                         ,relative: relative\n                                         ,middleAt: middleAt\n                                         ,midTopAt: midTopAt\n                                         ,midBottomAt: midBottomAt\n                                         ,midLeftAt: midLeftAt\n                                         ,midRightAt: midRightAt\n                                         ,topLeftAt: topLeftAt\n                                         ,topRightAt: topRightAt\n                                         ,bottomLeftAt: bottomLeftAt\n                                         ,bottomRightAt: bottomRightAt};\n};\nElm.Graphics = Elm.Graphics || {};\nElm.Graphics.Collage = Elm.Graphics.Collage || {};\nElm.Graphics.Collage.make = function (_elm) {\n   \"use strict\";\n   _elm.Graphics = _elm.Graphics || {};\n   _elm.Graphics.Collage = _elm.Graphics.Collage || {};\n   if (_elm.Graphics.Collage.values) return _elm.Graphics.Collage.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Color = Elm.Color.make(_elm),\n   $Graphics$Element = Elm.Graphics.Element.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Native$Graphics$Collage = Elm.Native.Graphics.Collage.make(_elm),\n   $Text = Elm.Text.make(_elm),\n   $Transform2D = Elm.Transform2D.make(_elm);\n   var _op = {};\n   var Shape = function (a) {    return {ctor: \"Shape\",_0: a};};\n   var polygon = function (points) {    return Shape(points);};\n   var rect = F2(function (w,h) {\n      var hh = h / 2;\n      var hw = w / 2;\n      return Shape(_U.list([{ctor: \"_Tuple2\",_0: 0 - hw,_1: 0 - hh}\n                           ,{ctor: \"_Tuple2\",_0: 0 - hw,_1: hh}\n                           ,{ctor: \"_Tuple2\",_0: hw,_1: hh}\n                           ,{ctor: \"_Tuple2\",_0: hw,_1: 0 - hh}]));\n   });\n   var square = function (n) {    return A2(rect,n,n);};\n   var oval = F2(function (w,h) {\n      var hh = h / 2;\n      var hw = w / 2;\n      var n = 50;\n      var t = 2 * $Basics.pi / n;\n      var f = function (i) {    return {ctor: \"_Tuple2\",_0: hw * $Basics.cos(t * i),_1: hh * $Basics.sin(t * i)};};\n      return Shape(A2($List.map,f,_U.range(0,n - 1)));\n   });\n   var circle = function (r) {    return A2(oval,2 * r,2 * r);};\n   var ngon = F2(function (n,r) {\n      var m = $Basics.toFloat(n);\n      var t = 2 * $Basics.pi / m;\n      var f = function (i) {    return {ctor: \"_Tuple2\",_0: r * $Basics.cos(t * i),_1: r * $Basics.sin(t * i)};};\n      return Shape(A2($List.map,f,_U.range(0,m - 1)));\n   });\n   var Path = function (a) {    return {ctor: \"Path\",_0: a};};\n   var path = function (ps) {    return Path(ps);};\n   var segment = F2(function (p1,p2) {    return Path(_U.list([p1,p2]));});\n   var collage = $Native$Graphics$Collage.collage;\n   var Fill = function (a) {    return {ctor: \"Fill\",_0: a};};\n   var Line = function (a) {    return {ctor: \"Line\",_0: a};};\n   var FGroup = F2(function (a,b) {    return {ctor: \"FGroup\",_0: a,_1: b};});\n   var FElement = function (a) {    return {ctor: \"FElement\",_0: a};};\n   var FImage = F4(function (a,b,c,d) {    return {ctor: \"FImage\",_0: a,_1: b,_2: c,_3: d};});\n   var FText = function (a) {    return {ctor: \"FText\",_0: a};};\n   var FOutlinedText = F2(function (a,b) {    return {ctor: \"FOutlinedText\",_0: a,_1: b};});\n   var FShape = F2(function (a,b) {    return {ctor: \"FShape\",_0: a,_1: b};});\n   var FPath = F2(function (a,b) {    return {ctor: \"FPath\",_0: a,_1: b};});\n   var LineStyle = F6(function (a,b,c,d,e,f) {    return {color: a,width: b,cap: c,join: d,dashing: e,dashOffset: f};});\n   var Clipped = {ctor: \"Clipped\"};\n   var Sharp = function (a) {    return {ctor: \"Sharp\",_0: a};};\n   var Smooth = {ctor: \"Smooth\"};\n   var Padded = {ctor: \"Padded\"};\n   var Round = {ctor: \"Round\"};\n   var Flat = {ctor: \"Flat\"};\n   var defaultLine = {color: $Color.black,width: 1,cap: Flat,join: Sharp(10),dashing: _U.list([]),dashOffset: 0};\n   var solid = function (clr) {    return _U.update(defaultLine,{color: clr});};\n   var dashed = function (clr) {    return _U.update(defaultLine,{color: clr,dashing: _U.list([8,4])});};\n   var dotted = function (clr) {    return _U.update(defaultLine,{color: clr,dashing: _U.list([3,3])});};\n   var Grad = function (a) {    return {ctor: \"Grad\",_0: a};};\n   var Texture = function (a) {    return {ctor: \"Texture\",_0: a};};\n   var Solid = function (a) {    return {ctor: \"Solid\",_0: a};};\n   var Form_elm_builtin = function (a) {    return {ctor: \"Form_elm_builtin\",_0: a};};\n   var form = function (f) {    return Form_elm_builtin({theta: 0,scale: 1,x: 0,y: 0,alpha: 1,form: f});};\n   var fill = F2(function (style,_p0) {    var _p1 = _p0;return form(A2(FShape,Fill(style),_p1._0));});\n   var filled = F2(function (color,shape) {    return A2(fill,Solid(color),shape);});\n   var textured = F2(function (src,shape) {    return A2(fill,Texture(src),shape);});\n   var gradient = F2(function (grad,shape) {    return A2(fill,Grad(grad),shape);});\n   var outlined = F2(function (style,_p2) {    var _p3 = _p2;return form(A2(FShape,Line(style),_p3._0));});\n   var traced = F2(function (style,_p4) {    var _p5 = _p4;return form(A2(FPath,style,_p5._0));});\n   var sprite = F4(function (w,h,pos,src) {    return form(A4(FImage,w,h,pos,src));});\n   var toForm = function (e) {    return form(FElement(e));};\n   var group = function (fs) {    return form(A2(FGroup,$Transform2D.identity,fs));};\n   var groupTransform = F2(function (matrix,fs) {    return form(A2(FGroup,matrix,fs));});\n   var text = function (t) {    return form(FText(t));};\n   var outlinedText = F2(function (ls,t) {    return form(A2(FOutlinedText,ls,t));});\n   var move = F2(function (_p7,_p6) {\n      var _p8 = _p7;\n      var _p9 = _p6;\n      var _p10 = _p9._0;\n      return Form_elm_builtin(_U.update(_p10,{x: _p10.x + _p8._0,y: _p10.y + _p8._1}));\n   });\n   var moveX = F2(function (x,_p11) {    var _p12 = _p11;var _p13 = _p12._0;return Form_elm_builtin(_U.update(_p13,{x: _p13.x + x}));});\n   var moveY = F2(function (y,_p14) {    var _p15 = _p14;var _p16 = _p15._0;return Form_elm_builtin(_U.update(_p16,{y: _p16.y + y}));});\n   var scale = F2(function (s,_p17) {    var _p18 = _p17;var _p19 = _p18._0;return Form_elm_builtin(_U.update(_p19,{scale: _p19.scale * s}));});\n   var rotate = F2(function (t,_p20) {    var _p21 = _p20;var _p22 = _p21._0;return Form_elm_builtin(_U.update(_p22,{theta: _p22.theta + t}));});\n   var alpha = F2(function (a,_p23) {    var _p24 = _p23;return Form_elm_builtin(_U.update(_p24._0,{alpha: a}));});\n   return _elm.Graphics.Collage.values = {_op: _op\n                                         ,collage: collage\n                                         ,toForm: toForm\n                                         ,filled: filled\n                                         ,textured: textured\n                                         ,gradient: gradient\n                                         ,outlined: outlined\n                                         ,traced: traced\n                                         ,text: text\n                                         ,outlinedText: outlinedText\n                                         ,move: move\n                                         ,moveX: moveX\n                                         ,moveY: moveY\n                                         ,scale: scale\n                                         ,rotate: rotate\n                                         ,alpha: alpha\n                                         ,group: group\n                                         ,groupTransform: groupTransform\n                                         ,rect: rect\n                                         ,oval: oval\n                                         ,square: square\n                                         ,circle: circle\n                                         ,ngon: ngon\n                                         ,polygon: polygon\n                                         ,segment: segment\n                                         ,path: path\n                                         ,solid: solid\n                                         ,dashed: dashed\n                                         ,dotted: dotted\n                                         ,defaultLine: defaultLine\n                                         ,LineStyle: LineStyle\n                                         ,Flat: Flat\n                                         ,Round: Round\n                                         ,Padded: Padded\n                                         ,Smooth: Smooth\n                                         ,Sharp: Sharp\n                                         ,Clipped: Clipped};\n};\nElm.Native.Debug = {};\nElm.Native.Debug.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Debug = localRuntime.Native.Debug || {};\n\tif (localRuntime.Native.Debug.values)\n\t{\n\t\treturn localRuntime.Native.Debug.values;\n\t}\n\n\tvar toString = Elm.Native.Utils.make(localRuntime).toString;\n\n\tfunction log(tag, value)\n\t{\n\t\tvar msg = tag + ': ' + toString(value);\n\t\tvar process = process || {};\n\t\tif (process.stdout)\n\t\t{\n\t\t\tprocess.stdout.write(msg);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconsole.log(msg);\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction crash(message)\n\t{\n\t\tthrow new Error(message);\n\t}\n\n\tfunction tracePath(tag, form)\n\t{\n\t\tif (localRuntime.debug)\n\t\t{\n\t\t\treturn localRuntime.debug.trace(tag, form);\n\t\t}\n\t\treturn form;\n\t}\n\n\tfunction watch(tag, value)\n\t{\n\t\tif (localRuntime.debug)\n\t\t{\n\t\t\tlocalRuntime.debug.watch(tag, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction watchSummary(tag, summarize, value)\n\t{\n\t\tif (localRuntime.debug)\n\t\t{\n\t\t\tlocalRuntime.debug.watch(tag, summarize(value));\n\t\t}\n\t\treturn value;\n\t}\n\n\treturn localRuntime.Native.Debug.values = {\n\t\tcrash: crash,\n\t\ttracePath: F2(tracePath),\n\t\tlog: F2(log),\n\t\twatch: F2(watch),\n\t\twatchSummary: F3(watchSummary)\n\t};\n};\n\nElm.Debug = Elm.Debug || {};\nElm.Debug.make = function (_elm) {\n   \"use strict\";\n   _elm.Debug = _elm.Debug || {};\n   if (_elm.Debug.values) return _elm.Debug.values;\n   var _U = Elm.Native.Utils.make(_elm),$Graphics$Collage = Elm.Graphics.Collage.make(_elm),$Native$Debug = Elm.Native.Debug.make(_elm);\n   var _op = {};\n   var trace = $Native$Debug.tracePath;\n   var watchSummary = $Native$Debug.watchSummary;\n   var watch = $Native$Debug.watch;\n   var crash = $Native$Debug.crash;\n   var log = $Native$Debug.log;\n   return _elm.Debug.values = {_op: _op,log: log,crash: crash,watch: watch,watchSummary: watchSummary,trace: trace};\n};\nElm.Native.Task = {};\n\nElm.Native.Task.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Task = localRuntime.Native.Task || {};\n\tif (localRuntime.Native.Task.values)\n\t{\n\t\treturn localRuntime.Native.Task.values;\n\t}\n\n\tvar Result = Elm.Result.make(localRuntime);\n\tvar Signal;\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\t// CONSTRUCTORS\n\n\tfunction succeed(value)\n\t{\n\t\treturn {\n\t\t\ttag: 'Succeed',\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tfunction fail(error)\n\t{\n\t\treturn {\n\t\t\ttag: 'Fail',\n\t\t\tvalue: error\n\t\t};\n\t}\n\n\tfunction asyncFunction(func)\n\t{\n\t\treturn {\n\t\t\ttag: 'Async',\n\t\t\tasyncFunction: func\n\t\t};\n\t}\n\n\tfunction andThen(task, callback)\n\t{\n\t\treturn {\n\t\t\ttag: 'AndThen',\n\t\t\ttask: task,\n\t\t\tcallback: callback\n\t\t};\n\t}\n\n\tfunction catch_(task, callback)\n\t{\n\t\treturn {\n\t\t\ttag: 'Catch',\n\t\t\ttask: task,\n\t\t\tcallback: callback\n\t\t};\n\t}\n\n\n\t// RUNNER\n\n\tfunction perform(task) {\n\t\trunTask({ task: task }, function() {});\n\t}\n\n\tfunction performSignal(name, signal)\n\t{\n\t\tvar workQueue = [];\n\n\t\tfunction onComplete()\n\t\t{\n\t\t\tworkQueue.shift();\n\n\t\t\tif (workQueue.length > 0)\n\t\t\t{\n\t\t\t\tvar task = workQueue[0];\n\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\trunTask(task, onComplete);\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\n\t\tfunction register(task)\n\t\t{\n\t\t\tvar root = { task: task };\n\t\t\tworkQueue.push(root);\n\t\t\tif (workQueue.length === 1)\n\t\t\t{\n\t\t\t\trunTask(root, onComplete);\n\t\t\t}\n\t\t}\n\n\t\tif (!Signal)\n\t\t{\n\t\t\tSignal = Elm.Native.Signal.make(localRuntime);\n\t\t}\n\t\tSignal.output('perform-tasks-' + name, register, signal);\n\n\t\tregister(signal.value);\n\n\t\treturn signal;\n\t}\n\n\tfunction mark(status, task)\n\t{\n\t\treturn { status: status, task: task };\n\t}\n\n\tfunction runTask(root, onComplete)\n\t{\n\t\tvar result = mark('runnable', root.task);\n\t\twhile (result.status === 'runnable')\n\t\t{\n\t\t\tresult = stepTask(onComplete, root, result.task);\n\t\t}\n\n\t\tif (result.status === 'done')\n\t\t{\n\t\t\troot.task = result.task;\n\t\t\tonComplete();\n\t\t}\n\n\t\tif (result.status === 'blocked')\n\t\t{\n\t\t\troot.task = result.task;\n\t\t}\n\t}\n\n\tfunction stepTask(onComplete, root, task)\n\t{\n\t\tvar tag = task.tag;\n\n\t\tif (tag === 'Succeed' || tag === 'Fail')\n\t\t{\n\t\t\treturn mark('done', task);\n\t\t}\n\n\t\tif (tag === 'Async')\n\t\t{\n\t\t\tvar placeHolder = {};\n\t\t\tvar couldBeSync = true;\n\t\t\tvar wasSync = false;\n\n\t\t\ttask.asyncFunction(function(result) {\n\t\t\t\tplaceHolder.tag = result.tag;\n\t\t\t\tplaceHolder.value = result.value;\n\t\t\t\tif (couldBeSync)\n\t\t\t\t{\n\t\t\t\t\twasSync = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\trunTask(root, onComplete);\n\t\t\t\t}\n\t\t\t});\n\t\t\tcouldBeSync = false;\n\t\t\treturn mark(wasSync ? 'done' : 'blocked', placeHolder);\n\t\t}\n\n\t\tif (tag === 'AndThen' || tag === 'Catch')\n\t\t{\n\t\t\tvar result = mark('runnable', task.task);\n\t\t\twhile (result.status === 'runnable')\n\t\t\t{\n\t\t\t\tresult = stepTask(onComplete, root, result.task);\n\t\t\t}\n\n\t\t\tif (result.status === 'done')\n\t\t\t{\n\t\t\t\tvar activeTask = result.task;\n\t\t\t\tvar activeTag = activeTask.tag;\n\n\t\t\t\tvar succeedChain = activeTag === 'Succeed' && tag === 'AndThen';\n\t\t\t\tvar failChain = activeTag === 'Fail' && tag === 'Catch';\n\n\t\t\t\treturn (succeedChain || failChain)\n\t\t\t\t\t? mark('runnable', task.callback(activeTask.value))\n\t\t\t\t\t: mark('runnable', activeTask);\n\t\t\t}\n\t\t\tif (result.status === 'blocked')\n\t\t\t{\n\t\t\t\treturn mark('blocked', {\n\t\t\t\t\ttag: tag,\n\t\t\t\t\ttask: result.task,\n\t\t\t\t\tcallback: task.callback\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// THREADS\n\n\tfunction sleep(time) {\n\t\treturn asyncFunction(function(callback) {\n\t\t\tsetTimeout(function() {\n\t\t\t\tcallback(succeed(Utils.Tuple0));\n\t\t\t}, time);\n\t\t});\n\t}\n\n\tfunction spawn(task) {\n\t\treturn asyncFunction(function(callback) {\n\t\t\tvar id = setTimeout(function() {\n\t\t\t\tperform(task);\n\t\t\t}, 0);\n\t\t\tcallback(succeed(id));\n\t\t});\n\t}\n\n\n\treturn localRuntime.Native.Task.values = {\n\t\tsucceed: succeed,\n\t\tfail: fail,\n\t\tasyncFunction: asyncFunction,\n\t\tandThen: F2(andThen),\n\t\tcatch_: F2(catch_),\n\t\tperform: perform,\n\t\tperformSignal: performSignal,\n\t\tspawn: spawn,\n\t\tsleep: sleep\n\t};\n};\n\nElm.Result = Elm.Result || {};\nElm.Result.make = function (_elm) {\n   \"use strict\";\n   _elm.Result = _elm.Result || {};\n   if (_elm.Result.values) return _elm.Result.values;\n   var _U = Elm.Native.Utils.make(_elm),$Maybe = Elm.Maybe.make(_elm);\n   var _op = {};\n   var toMaybe = function (result) {    var _p0 = result;if (_p0.ctor === \"Ok\") {    return $Maybe.Just(_p0._0);} else {    return $Maybe.Nothing;}};\n   var withDefault = F2(function (def,result) {    var _p1 = result;if (_p1.ctor === \"Ok\") {    return _p1._0;} else {    return def;}});\n   var Err = function (a) {    return {ctor: \"Err\",_0: a};};\n   var andThen = F2(function (result,callback) {    var _p2 = result;if (_p2.ctor === \"Ok\") {    return callback(_p2._0);} else {    return Err(_p2._0);}});\n   var Ok = function (a) {    return {ctor: \"Ok\",_0: a};};\n   var map = F2(function (func,ra) {    var _p3 = ra;if (_p3.ctor === \"Ok\") {    return Ok(func(_p3._0));} else {    return Err(_p3._0);}});\n   var map2 = F3(function (func,ra,rb) {\n      var _p4 = {ctor: \"_Tuple2\",_0: ra,_1: rb};\n      if (_p4._0.ctor === \"Ok\") {\n            if (_p4._1.ctor === \"Ok\") {\n                  return Ok(A2(func,_p4._0._0,_p4._1._0));\n               } else {\n                  return Err(_p4._1._0);\n               }\n         } else {\n            return Err(_p4._0._0);\n         }\n   });\n   var map3 = F4(function (func,ra,rb,rc) {\n      var _p5 = {ctor: \"_Tuple3\",_0: ra,_1: rb,_2: rc};\n      if (_p5._0.ctor === \"Ok\") {\n            if (_p5._1.ctor === \"Ok\") {\n                  if (_p5._2.ctor === \"Ok\") {\n                        return Ok(A3(func,_p5._0._0,_p5._1._0,_p5._2._0));\n                     } else {\n                        return Err(_p5._2._0);\n                     }\n               } else {\n                  return Err(_p5._1._0);\n               }\n         } else {\n            return Err(_p5._0._0);\n         }\n   });\n   var map4 = F5(function (func,ra,rb,rc,rd) {\n      var _p6 = {ctor: \"_Tuple4\",_0: ra,_1: rb,_2: rc,_3: rd};\n      if (_p6._0.ctor === \"Ok\") {\n            if (_p6._1.ctor === \"Ok\") {\n                  if (_p6._2.ctor === \"Ok\") {\n                        if (_p6._3.ctor === \"Ok\") {\n                              return Ok(A4(func,_p6._0._0,_p6._1._0,_p6._2._0,_p6._3._0));\n                           } else {\n                              return Err(_p6._3._0);\n                           }\n                     } else {\n                        return Err(_p6._2._0);\n                     }\n               } else {\n                  return Err(_p6._1._0);\n               }\n         } else {\n            return Err(_p6._0._0);\n         }\n   });\n   var map5 = F6(function (func,ra,rb,rc,rd,re) {\n      var _p7 = {ctor: \"_Tuple5\",_0: ra,_1: rb,_2: rc,_3: rd,_4: re};\n      if (_p7._0.ctor === \"Ok\") {\n            if (_p7._1.ctor === \"Ok\") {\n                  if (_p7._2.ctor === \"Ok\") {\n                        if (_p7._3.ctor === \"Ok\") {\n                              if (_p7._4.ctor === \"Ok\") {\n                                    return Ok(A5(func,_p7._0._0,_p7._1._0,_p7._2._0,_p7._3._0,_p7._4._0));\n                                 } else {\n                                    return Err(_p7._4._0);\n                                 }\n                           } else {\n                              return Err(_p7._3._0);\n                           }\n                     } else {\n                        return Err(_p7._2._0);\n                     }\n               } else {\n                  return Err(_p7._1._0);\n               }\n         } else {\n            return Err(_p7._0._0);\n         }\n   });\n   var formatError = F2(function (f,result) {    var _p8 = result;if (_p8.ctor === \"Ok\") {    return Ok(_p8._0);} else {    return Err(f(_p8._0));}});\n   var fromMaybe = F2(function (err,maybe) {    var _p9 = maybe;if (_p9.ctor === \"Just\") {    return Ok(_p9._0);} else {    return Err(err);}});\n   return _elm.Result.values = {_op: _op\n                               ,withDefault: withDefault\n                               ,map: map\n                               ,map2: map2\n                               ,map3: map3\n                               ,map4: map4\n                               ,map5: map5\n                               ,andThen: andThen\n                               ,toMaybe: toMaybe\n                               ,fromMaybe: fromMaybe\n                               ,formatError: formatError\n                               ,Ok: Ok\n                               ,Err: Err};\n};\nElm.Task = Elm.Task || {};\nElm.Task.make = function (_elm) {\n   \"use strict\";\n   _elm.Task = _elm.Task || {};\n   if (_elm.Task.values) return _elm.Task.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Task = Elm.Native.Task.make(_elm),\n   $Result = Elm.Result.make(_elm);\n   var _op = {};\n   var sleep = $Native$Task.sleep;\n   var spawn = $Native$Task.spawn;\n   var ThreadID = function (a) {    return {ctor: \"ThreadID\",_0: a};};\n   var onError = $Native$Task.catch_;\n   var andThen = $Native$Task.andThen;\n   var fail = $Native$Task.fail;\n   var mapError = F2(function (f,task) {    return A2(onError,task,function (err) {    return fail(f(err));});});\n   var succeed = $Native$Task.succeed;\n   var map = F2(function (func,taskA) {    return A2(andThen,taskA,function (a) {    return succeed(func(a));});});\n   var map2 = F3(function (func,taskA,taskB) {\n      return A2(andThen,taskA,function (a) {    return A2(andThen,taskB,function (b) {    return succeed(A2(func,a,b));});});\n   });\n   var map3 = F4(function (func,taskA,taskB,taskC) {\n      return A2(andThen,\n      taskA,\n      function (a) {\n         return A2(andThen,taskB,function (b) {    return A2(andThen,taskC,function (c) {    return succeed(A3(func,a,b,c));});});\n      });\n   });\n   var map4 = F5(function (func,taskA,taskB,taskC,taskD) {\n      return A2(andThen,\n      taskA,\n      function (a) {\n         return A2(andThen,\n         taskB,\n         function (b) {\n            return A2(andThen,taskC,function (c) {    return A2(andThen,taskD,function (d) {    return succeed(A4(func,a,b,c,d));});});\n         });\n      });\n   });\n   var map5 = F6(function (func,taskA,taskB,taskC,taskD,taskE) {\n      return A2(andThen,\n      taskA,\n      function (a) {\n         return A2(andThen,\n         taskB,\n         function (b) {\n            return A2(andThen,\n            taskC,\n            function (c) {\n               return A2(andThen,taskD,function (d) {    return A2(andThen,taskE,function (e) {    return succeed(A5(func,a,b,c,d,e));});});\n            });\n         });\n      });\n   });\n   var andMap = F2(function (taskFunc,taskValue) {\n      return A2(andThen,taskFunc,function (func) {    return A2(andThen,taskValue,function (value) {    return succeed(func(value));});});\n   });\n   var sequence = function (tasks) {\n      var _p0 = tasks;\n      if (_p0.ctor === \"[]\") {\n            return succeed(_U.list([]));\n         } else {\n            return A3(map2,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);}),_p0._0,sequence(_p0._1));\n         }\n   };\n   var toMaybe = function (task) {    return A2(onError,A2(map,$Maybe.Just,task),function (_p1) {    return succeed($Maybe.Nothing);});};\n   var fromMaybe = F2(function ($default,maybe) {    var _p2 = maybe;if (_p2.ctor === \"Just\") {    return succeed(_p2._0);} else {    return fail($default);}});\n   var toResult = function (task) {    return A2(onError,A2(map,$Result.Ok,task),function (msg) {    return succeed($Result.Err(msg));});};\n   var fromResult = function (result) {    var _p3 = result;if (_p3.ctor === \"Ok\") {    return succeed(_p3._0);} else {    return fail(_p3._0);}};\n   var Task = {ctor: \"Task\"};\n   return _elm.Task.values = {_op: _op\n                             ,succeed: succeed\n                             ,fail: fail\n                             ,map: map\n                             ,map2: map2\n                             ,map3: map3\n                             ,map4: map4\n                             ,map5: map5\n                             ,andMap: andMap\n                             ,sequence: sequence\n                             ,andThen: andThen\n                             ,onError: onError\n                             ,mapError: mapError\n                             ,toMaybe: toMaybe\n                             ,fromMaybe: fromMaybe\n                             ,toResult: toResult\n                             ,fromResult: fromResult\n                             ,spawn: spawn\n                             ,sleep: sleep};\n};\nElm.Signal = Elm.Signal || {};\nElm.Signal.make = function (_elm) {\n   \"use strict\";\n   _elm.Signal = _elm.Signal || {};\n   if (_elm.Signal.values) return _elm.Signal.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Signal = Elm.Native.Signal.make(_elm),\n   $Task = Elm.Task.make(_elm);\n   var _op = {};\n   var send = F2(function (_p0,value) {\n      var _p1 = _p0;\n      return A2($Task.onError,_p1._0(value),function (_p2) {    return $Task.succeed({ctor: \"_Tuple0\"});});\n   });\n   var Message = function (a) {    return {ctor: \"Message\",_0: a};};\n   var message = F2(function (_p3,value) {    var _p4 = _p3;return Message(_p4._0(value));});\n   var mailbox = $Native$Signal.mailbox;\n   var Address = function (a) {    return {ctor: \"Address\",_0: a};};\n   var forwardTo = F2(function (_p5,f) {    var _p6 = _p5;return Address(function (x) {    return _p6._0(f(x));});});\n   var Mailbox = F2(function (a,b) {    return {address: a,signal: b};});\n   var sampleOn = $Native$Signal.sampleOn;\n   var dropRepeats = $Native$Signal.dropRepeats;\n   var filterMap = $Native$Signal.filterMap;\n   var filter = F3(function (isOk,base,signal) {\n      return A3(filterMap,function (value) {    return isOk(value) ? $Maybe.Just(value) : $Maybe.Nothing;},base,signal);\n   });\n   var merge = F2(function (left,right) {    return A3($Native$Signal.genericMerge,$Basics.always,left,right);});\n   var mergeMany = function (signalList) {\n      var _p7 = $List.reverse(signalList);\n      if (_p7.ctor === \"[]\") {\n            return _U.crashCase(\"Signal\",{start: {line: 184,column: 3},end: {line: 189,column: 40}},_p7)(\"mergeMany was given an empty list!\");\n         } else {\n            return A3($List.foldl,merge,_p7._0,_p7._1);\n         }\n   };\n   var foldp = $Native$Signal.foldp;\n   var map5 = $Native$Signal.map5;\n   var map4 = $Native$Signal.map4;\n   var map3 = $Native$Signal.map3;\n   var map2 = $Native$Signal.map2;\n   var map = $Native$Signal.map;\n   var constant = $Native$Signal.constant;\n   var Signal = {ctor: \"Signal\"};\n   return _elm.Signal.values = {_op: _op\n                               ,merge: merge\n                               ,mergeMany: mergeMany\n                               ,map: map\n                               ,map2: map2\n                               ,map3: map3\n                               ,map4: map4\n                               ,map5: map5\n                               ,constant: constant\n                               ,dropRepeats: dropRepeats\n                               ,filter: filter\n                               ,filterMap: filterMap\n                               ,sampleOn: sampleOn\n                               ,foldp: foldp\n                               ,mailbox: mailbox\n                               ,send: send\n                               ,message: message\n                               ,forwardTo: forwardTo\n                               ,Mailbox: Mailbox};\n};\nElm.Time = Elm.Time || {};\nElm.Time.make = function (_elm) {\n   \"use strict\";\n   _elm.Time = _elm.Time || {};\n   if (_elm.Time.values) return _elm.Time.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Native$Signal = Elm.Native.Signal.make(_elm),\n   $Native$Time = Elm.Native.Time.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var delay = $Native$Signal.delay;\n   var since = F2(function (time,signal) {\n      var stop = A2($Signal.map,$Basics.always(-1),A2(delay,time,signal));\n      var start = A2($Signal.map,$Basics.always(1),signal);\n      var delaydiff = A3($Signal.foldp,F2(function (x,y) {    return x + y;}),0,A2($Signal.merge,start,stop));\n      return A2($Signal.map,F2(function (x,y) {    return !_U.eq(x,y);})(0),delaydiff);\n   });\n   var timestamp = $Native$Signal.timestamp;\n   var every = $Native$Time.every;\n   var fpsWhen = $Native$Time.fpsWhen;\n   var fps = function (targetFrames) {    return A2(fpsWhen,targetFrames,$Signal.constant(true));};\n   var inMilliseconds = function (t) {    return t;};\n   var millisecond = 1;\n   var second = 1000 * millisecond;\n   var minute = 60 * second;\n   var hour = 60 * minute;\n   var inHours = function (t) {    return t / hour;};\n   var inMinutes = function (t) {    return t / minute;};\n   var inSeconds = function (t) {    return t / second;};\n   return _elm.Time.values = {_op: _op\n                             ,millisecond: millisecond\n                             ,second: second\n                             ,minute: minute\n                             ,hour: hour\n                             ,inMilliseconds: inMilliseconds\n                             ,inSeconds: inSeconds\n                             ,inMinutes: inMinutes\n                             ,inHours: inHours\n                             ,fps: fps\n                             ,fpsWhen: fpsWhen\n                             ,every: every\n                             ,timestamp: timestamp\n                             ,delay: delay\n                             ,since: since};\n};\nElm.Native.String = {};\n\nElm.Native.String.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.String = localRuntime.Native.String || {};\n\tif (localRuntime.Native.String.values)\n\t{\n\t\treturn localRuntime.Native.String.values;\n\t}\n\tif ('values' in Elm.Native.String)\n\t{\n\t\treturn localRuntime.Native.String.values = Elm.Native.String.values;\n\t}\n\n\n\tvar Char = Elm.Char.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\tvar Result = Elm.Result.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\tfunction isEmpty(str)\n\t{\n\t\treturn str.length === 0;\n\t}\n\tfunction cons(chr, str)\n\t{\n\t\treturn chr + str;\n\t}\n\tfunction uncons(str)\n\t{\n\t\tvar hd = str[0];\n\t\tif (hd)\n\t\t{\n\t\t\treturn Maybe.Just(Utils.Tuple2(Utils.chr(hd), str.slice(1)));\n\t\t}\n\t\treturn Maybe.Nothing;\n\t}\n\tfunction append(a, b)\n\t{\n\t\treturn a + b;\n\t}\n\tfunction concat(strs)\n\t{\n\t\treturn List.toArray(strs).join('');\n\t}\n\tfunction length(str)\n\t{\n\t\treturn str.length;\n\t}\n\tfunction map(f, str)\n\t{\n\t\tvar out = str.split('');\n\t\tfor (var i = out.length; i--; )\n\t\t{\n\t\t\tout[i] = f(Utils.chr(out[i]));\n\t\t}\n\t\treturn out.join('');\n\t}\n\tfunction filter(pred, str)\n\t{\n\t\treturn str.split('').map(Utils.chr).filter(pred).join('');\n\t}\n\tfunction reverse(str)\n\t{\n\t\treturn str.split('').reverse().join('');\n\t}\n\tfunction foldl(f, b, str)\n\t{\n\t\tvar len = str.length;\n\t\tfor (var i = 0; i < len; ++i)\n\t\t{\n\t\t\tb = A2(f, Utils.chr(str[i]), b);\n\t\t}\n\t\treturn b;\n\t}\n\tfunction foldr(f, b, str)\n\t{\n\t\tfor (var i = str.length; i--; )\n\t\t{\n\t\t\tb = A2(f, Utils.chr(str[i]), b);\n\t\t}\n\t\treturn b;\n\t}\n\tfunction split(sep, str)\n\t{\n\t\treturn List.fromArray(str.split(sep));\n\t}\n\tfunction join(sep, strs)\n\t{\n\t\treturn List.toArray(strs).join(sep);\n\t}\n\tfunction repeat(n, str)\n\t{\n\t\tvar result = '';\n\t\twhile (n > 0)\n\t\t{\n\t\t\tif (n & 1)\n\t\t\t{\n\t\t\t\tresult += str;\n\t\t\t}\n\t\t\tn >>= 1, str += str;\n\t\t}\n\t\treturn result;\n\t}\n\tfunction slice(start, end, str)\n\t{\n\t\treturn str.slice(start, end);\n\t}\n\tfunction left(n, str)\n\t{\n\t\treturn n < 1 ? '' : str.slice(0, n);\n\t}\n\tfunction right(n, str)\n\t{\n\t\treturn n < 1 ? '' : str.slice(-n);\n\t}\n\tfunction dropLeft(n, str)\n\t{\n\t\treturn n < 1 ? str : str.slice(n);\n\t}\n\tfunction dropRight(n, str)\n\t{\n\t\treturn n < 1 ? str : str.slice(0, -n);\n\t}\n\tfunction pad(n, chr, str)\n\t{\n\t\tvar half = (n - str.length) / 2;\n\t\treturn repeat(Math.ceil(half), chr) + str + repeat(half | 0, chr);\n\t}\n\tfunction padRight(n, chr, str)\n\t{\n\t\treturn str + repeat(n - str.length, chr);\n\t}\n\tfunction padLeft(n, chr, str)\n\t{\n\t\treturn repeat(n - str.length, chr) + str;\n\t}\n\n\tfunction trim(str)\n\t{\n\t\treturn str.trim();\n\t}\n\tfunction trimLeft(str)\n\t{\n\t\treturn str.replace(/^\\s+/, '');\n\t}\n\tfunction trimRight(str)\n\t{\n\t\treturn str.replace(/\\s+$/, '');\n\t}\n\n\tfunction words(str)\n\t{\n\t\treturn List.fromArray(str.trim().split(/\\s+/g));\n\t}\n\tfunction lines(str)\n\t{\n\t\treturn List.fromArray(str.split(/\\r\\n|\\r|\\n/g));\n\t}\n\n\tfunction toUpper(str)\n\t{\n\t\treturn str.toUpperCase();\n\t}\n\tfunction toLower(str)\n\t{\n\t\treturn str.toLowerCase();\n\t}\n\n\tfunction any(pred, str)\n\t{\n\t\tfor (var i = str.length; i--; )\n\t\t{\n\t\t\tif (pred(Utils.chr(str[i])))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tfunction all(pred, str)\n\t{\n\t\tfor (var i = str.length; i--; )\n\t\t{\n\t\t\tif (!pred(Utils.chr(str[i])))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction contains(sub, str)\n\t{\n\t\treturn str.indexOf(sub) > -1;\n\t}\n\tfunction startsWith(sub, str)\n\t{\n\t\treturn str.indexOf(sub) === 0;\n\t}\n\tfunction endsWith(sub, str)\n\t{\n\t\treturn str.length >= sub.length &&\n\t\t\tstr.lastIndexOf(sub) === str.length - sub.length;\n\t}\n\tfunction indexes(sub, str)\n\t{\n\t\tvar subLen = sub.length;\n\t\tvar i = 0;\n\t\tvar is = [];\n\t\twhile ((i = str.indexOf(sub, i)) > -1)\n\t\t{\n\t\t\tis.push(i);\n\t\t\ti = i + subLen;\n\t\t}\n\t\treturn List.fromArray(is);\n\t}\n\n\tfunction toInt(s)\n\t{\n\t\tvar len = s.length;\n\t\tif (len === 0)\n\t\t{\n\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to an Int\" );\n\t\t}\n\t\tvar start = 0;\n\t\tif (s[0] === '-')\n\t\t{\n\t\t\tif (len === 1)\n\t\t\t{\n\t\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to an Int\" );\n\t\t\t}\n\t\t\tstart = 1;\n\t\t}\n\t\tfor (var i = start; i < len; ++i)\n\t\t{\n\t\t\tif (!Char.isDigit(s[i]))\n\t\t\t{\n\t\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to an Int\" );\n\t\t\t}\n\t\t}\n\t\treturn Result.Ok(parseInt(s, 10));\n\t}\n\n\tfunction toFloat(s)\n\t{\n\t\tvar len = s.length;\n\t\tif (len === 0)\n\t\t{\n\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to a Float\" );\n\t\t}\n\t\tvar start = 0;\n\t\tif (s[0] === '-')\n\t\t{\n\t\t\tif (len === 1)\n\t\t\t{\n\t\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to a Float\" );\n\t\t\t}\n\t\t\tstart = 1;\n\t\t}\n\t\tvar dotCount = 0;\n\t\tfor (var i = start; i < len; ++i)\n\t\t{\n\t\t\tif (Char.isDigit(s[i]))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (s[i] === '.')\n\t\t\t{\n\t\t\t\tdotCount += 1;\n\t\t\t\tif (dotCount <= 1)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to a Float\" );\n\t\t}\n\t\treturn Result.Ok(parseFloat(s));\n\t}\n\n\tfunction toList(str)\n\t{\n\t\treturn List.fromArray(str.split('').map(Utils.chr));\n\t}\n\tfunction fromList(chars)\n\t{\n\t\treturn List.toArray(chars).join('');\n\t}\n\n\treturn Elm.Native.String.values = {\n\t\tisEmpty: isEmpty,\n\t\tcons: F2(cons),\n\t\tuncons: uncons,\n\t\tappend: F2(append),\n\t\tconcat: concat,\n\t\tlength: length,\n\t\tmap: F2(map),\n\t\tfilter: F2(filter),\n\t\treverse: reverse,\n\t\tfoldl: F3(foldl),\n\t\tfoldr: F3(foldr),\n\n\t\tsplit: F2(split),\n\t\tjoin: F2(join),\n\t\trepeat: F2(repeat),\n\n\t\tslice: F3(slice),\n\t\tleft: F2(left),\n\t\tright: F2(right),\n\t\tdropLeft: F2(dropLeft),\n\t\tdropRight: F2(dropRight),\n\n\t\tpad: F3(pad),\n\t\tpadLeft: F3(padLeft),\n\t\tpadRight: F3(padRight),\n\n\t\ttrim: trim,\n\t\ttrimLeft: trimLeft,\n\t\ttrimRight: trimRight,\n\n\t\twords: words,\n\t\tlines: lines,\n\n\t\ttoUpper: toUpper,\n\t\ttoLower: toLower,\n\n\t\tany: F2(any),\n\t\tall: F2(all),\n\n\t\tcontains: F2(contains),\n\t\tstartsWith: F2(startsWith),\n\t\tendsWith: F2(endsWith),\n\t\tindexes: F2(indexes),\n\n\t\ttoInt: toInt,\n\t\ttoFloat: toFloat,\n\t\ttoList: toList,\n\t\tfromList: fromList\n\t};\n};\n\nElm.String = Elm.String || {};\nElm.String.make = function (_elm) {\n   \"use strict\";\n   _elm.String = _elm.String || {};\n   if (_elm.String.values) return _elm.String.values;\n   var _U = Elm.Native.Utils.make(_elm),$Maybe = Elm.Maybe.make(_elm),$Native$String = Elm.Native.String.make(_elm),$Result = Elm.Result.make(_elm);\n   var _op = {};\n   var fromList = $Native$String.fromList;\n   var toList = $Native$String.toList;\n   var toFloat = $Native$String.toFloat;\n   var toInt = $Native$String.toInt;\n   var indices = $Native$String.indexes;\n   var indexes = $Native$String.indexes;\n   var endsWith = $Native$String.endsWith;\n   var startsWith = $Native$String.startsWith;\n   var contains = $Native$String.contains;\n   var all = $Native$String.all;\n   var any = $Native$String.any;\n   var toLower = $Native$String.toLower;\n   var toUpper = $Native$String.toUpper;\n   var lines = $Native$String.lines;\n   var words = $Native$String.words;\n   var trimRight = $Native$String.trimRight;\n   var trimLeft = $Native$String.trimLeft;\n   var trim = $Native$String.trim;\n   var padRight = $Native$String.padRight;\n   var padLeft = $Native$String.padLeft;\n   var pad = $Native$String.pad;\n   var dropRight = $Native$String.dropRight;\n   var dropLeft = $Native$String.dropLeft;\n   var right = $Native$String.right;\n   var left = $Native$String.left;\n   var slice = $Native$String.slice;\n   var repeat = $Native$String.repeat;\n   var join = $Native$String.join;\n   var split = $Native$String.split;\n   var foldr = $Native$String.foldr;\n   var foldl = $Native$String.foldl;\n   var reverse = $Native$String.reverse;\n   var filter = $Native$String.filter;\n   var map = $Native$String.map;\n   var length = $Native$String.length;\n   var concat = $Native$String.concat;\n   var append = $Native$String.append;\n   var uncons = $Native$String.uncons;\n   var cons = $Native$String.cons;\n   var fromChar = function ($char) {    return A2(cons,$char,\"\");};\n   var isEmpty = $Native$String.isEmpty;\n   return _elm.String.values = {_op: _op\n                               ,isEmpty: isEmpty\n                               ,length: length\n                               ,reverse: reverse\n                               ,repeat: repeat\n                               ,cons: cons\n                               ,uncons: uncons\n                               ,fromChar: fromChar\n                               ,append: append\n                               ,concat: concat\n                               ,split: split\n                               ,join: join\n                               ,words: words\n                               ,lines: lines\n                               ,slice: slice\n                               ,left: left\n                               ,right: right\n                               ,dropLeft: dropLeft\n                               ,dropRight: dropRight\n                               ,contains: contains\n                               ,startsWith: startsWith\n                               ,endsWith: endsWith\n                               ,indexes: indexes\n                               ,indices: indices\n                               ,toInt: toInt\n                               ,toFloat: toFloat\n                               ,toList: toList\n                               ,fromList: fromList\n                               ,toUpper: toUpper\n                               ,toLower: toLower\n                               ,pad: pad\n                               ,padLeft: padLeft\n                               ,padRight: padRight\n                               ,trim: trim\n                               ,trimLeft: trimLeft\n                               ,trimRight: trimRight\n                               ,map: map\n                               ,filter: filter\n                               ,foldl: foldl\n                               ,foldr: foldr\n                               ,any: any\n                               ,all: all};\n};\nElm.Dict = Elm.Dict || {};\nElm.Dict.make = function (_elm) {\n   \"use strict\";\n   _elm.Dict = _elm.Dict || {};\n   if (_elm.Dict.values) return _elm.Dict.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Debug = Elm.Native.Debug.make(_elm),\n   $String = Elm.String.make(_elm);\n   var _op = {};\n   var foldr = F3(function (f,acc,t) {\n      foldr: while (true) {\n         var _p0 = t;\n         if (_p0.ctor === \"RBEmpty_elm_builtin\") {\n               return acc;\n            } else {\n               var _v1 = f,_v2 = A3(f,_p0._1,_p0._2,A3(foldr,f,acc,_p0._4)),_v3 = _p0._3;\n               f = _v1;\n               acc = _v2;\n               t = _v3;\n               continue foldr;\n            }\n      }\n   });\n   var keys = function (dict) {    return A3(foldr,F3(function (key,value,keyList) {    return A2($List._op[\"::\"],key,keyList);}),_U.list([]),dict);};\n   var values = function (dict) {    return A3(foldr,F3(function (key,value,valueList) {    return A2($List._op[\"::\"],value,valueList);}),_U.list([]),dict);};\n   var toList = function (dict) {\n      return A3(foldr,F3(function (key,value,list) {    return A2($List._op[\"::\"],{ctor: \"_Tuple2\",_0: key,_1: value},list);}),_U.list([]),dict);\n   };\n   var foldl = F3(function (f,acc,dict) {\n      foldl: while (true) {\n         var _p1 = dict;\n         if (_p1.ctor === \"RBEmpty_elm_builtin\") {\n               return acc;\n            } else {\n               var _v5 = f,_v6 = A3(f,_p1._1,_p1._2,A3(foldl,f,acc,_p1._3)),_v7 = _p1._4;\n               f = _v5;\n               acc = _v6;\n               dict = _v7;\n               continue foldl;\n            }\n      }\n   });\n   var reportRemBug = F4(function (msg,c,lgot,rgot) {\n      return $Native$Debug.crash($String.concat(_U.list([\"Internal red-black tree invariant violated, expected \"\n                                                        ,msg\n                                                        ,\" and got \"\n                                                        ,$Basics.toString(c)\n                                                        ,\"/\"\n                                                        ,lgot\n                                                        ,\"/\"\n                                                        ,rgot\n                                                        ,\"\\nPlease report this bug to <https://github.com/elm-lang/core/issues>\"])));\n   });\n   var isBBlack = function (dict) {\n      var _p2 = dict;\n      _v8_2: do {\n         if (_p2.ctor === \"RBNode_elm_builtin\") {\n               if (_p2._0.ctor === \"BBlack\") {\n                     return true;\n                  } else {\n                     break _v8_2;\n                  }\n            } else {\n               if (_p2._0.ctor === \"LBBlack\") {\n                     return true;\n                  } else {\n                     break _v8_2;\n                  }\n            }\n      } while (false);\n      return false;\n   };\n   var Same = {ctor: \"Same\"};\n   var Remove = {ctor: \"Remove\"};\n   var Insert = {ctor: \"Insert\"};\n   var sizeHelp = F2(function (n,dict) {\n      sizeHelp: while (true) {\n         var _p3 = dict;\n         if (_p3.ctor === \"RBEmpty_elm_builtin\") {\n               return n;\n            } else {\n               var _v10 = A2(sizeHelp,n + 1,_p3._4),_v11 = _p3._3;\n               n = _v10;\n               dict = _v11;\n               continue sizeHelp;\n            }\n      }\n   });\n   var size = function (dict) {    return A2(sizeHelp,0,dict);};\n   var get = F2(function (targetKey,dict) {\n      get: while (true) {\n         var _p4 = dict;\n         if (_p4.ctor === \"RBEmpty_elm_builtin\") {\n               return $Maybe.Nothing;\n            } else {\n               var _p5 = A2($Basics.compare,targetKey,_p4._1);\n               switch (_p5.ctor)\n               {case \"LT\": var _v14 = targetKey,_v15 = _p4._3;\n                    targetKey = _v14;\n                    dict = _v15;\n                    continue get;\n                  case \"EQ\": return $Maybe.Just(_p4._2);\n                  default: var _v16 = targetKey,_v17 = _p4._4;\n                    targetKey = _v16;\n                    dict = _v17;\n                    continue get;}\n            }\n      }\n   });\n   var member = F2(function (key,dict) {    var _p6 = A2(get,key,dict);if (_p6.ctor === \"Just\") {    return true;} else {    return false;}});\n   var maxWithDefault = F3(function (k,v,r) {\n      maxWithDefault: while (true) {\n         var _p7 = r;\n         if (_p7.ctor === \"RBEmpty_elm_builtin\") {\n               return {ctor: \"_Tuple2\",_0: k,_1: v};\n            } else {\n               var _v20 = _p7._1,_v21 = _p7._2,_v22 = _p7._4;\n               k = _v20;\n               v = _v21;\n               r = _v22;\n               continue maxWithDefault;\n            }\n      }\n   });\n   var RBEmpty_elm_builtin = function (a) {    return {ctor: \"RBEmpty_elm_builtin\",_0: a};};\n   var RBNode_elm_builtin = F5(function (a,b,c,d,e) {    return {ctor: \"RBNode_elm_builtin\",_0: a,_1: b,_2: c,_3: d,_4: e};});\n   var LBBlack = {ctor: \"LBBlack\"};\n   var LBlack = {ctor: \"LBlack\"};\n   var empty = RBEmpty_elm_builtin(LBlack);\n   var isEmpty = function (dict) {    return _U.eq(dict,empty);};\n   var map = F2(function (f,dict) {\n      var _p8 = dict;\n      if (_p8.ctor === \"RBEmpty_elm_builtin\") {\n            return RBEmpty_elm_builtin(LBlack);\n         } else {\n            var _p9 = _p8._1;\n            return A5(RBNode_elm_builtin,_p8._0,_p9,A2(f,_p9,_p8._2),A2(map,f,_p8._3),A2(map,f,_p8._4));\n         }\n   });\n   var NBlack = {ctor: \"NBlack\"};\n   var BBlack = {ctor: \"BBlack\"};\n   var Black = {ctor: \"Black\"};\n   var ensureBlackRoot = function (dict) {\n      var _p10 = dict;\n      if (_p10.ctor === \"RBNode_elm_builtin\" && _p10._0.ctor === \"Red\") {\n            return A5(RBNode_elm_builtin,Black,_p10._1,_p10._2,_p10._3,_p10._4);\n         } else {\n            return dict;\n         }\n   };\n   var blackish = function (t) {\n      var _p11 = t;\n      if (_p11.ctor === \"RBNode_elm_builtin\") {\n            var _p12 = _p11._0;\n            return _U.eq(_p12,Black) || _U.eq(_p12,BBlack);\n         } else {\n            return true;\n         }\n   };\n   var blacken = function (t) {\n      var _p13 = t;\n      if (_p13.ctor === \"RBEmpty_elm_builtin\") {\n            return RBEmpty_elm_builtin(LBlack);\n         } else {\n            return A5(RBNode_elm_builtin,Black,_p13._1,_p13._2,_p13._3,_p13._4);\n         }\n   };\n   var Red = {ctor: \"Red\"};\n   var moreBlack = function (color) {\n      var _p14 = color;\n      switch (_p14.ctor)\n      {case \"Black\": return BBlack;\n         case \"Red\": return Black;\n         case \"NBlack\": return Red;\n         default: return $Native$Debug.crash(\"Can\\'t make a double black node more black!\");}\n   };\n   var lessBlack = function (color) {\n      var _p15 = color;\n      switch (_p15.ctor)\n      {case \"BBlack\": return Black;\n         case \"Black\": return Red;\n         case \"Red\": return NBlack;\n         default: return $Native$Debug.crash(\"Can\\'t make a negative black node less black!\");}\n   };\n   var lessBlackTree = function (dict) {\n      var _p16 = dict;\n      if (_p16.ctor === \"RBNode_elm_builtin\") {\n            return A5(RBNode_elm_builtin,lessBlack(_p16._0),_p16._1,_p16._2,_p16._3,_p16._4);\n         } else {\n            return RBEmpty_elm_builtin(LBlack);\n         }\n   };\n   var balancedTree = function (col) {\n      return function (xk) {\n         return function (xv) {\n            return function (yk) {\n               return function (yv) {\n                  return function (zk) {\n                     return function (zv) {\n                        return function (a) {\n                           return function (b) {\n                              return function (c) {\n                                 return function (d) {\n                                    return A5(RBNode_elm_builtin,\n                                    lessBlack(col),\n                                    yk,\n                                    yv,\n                                    A5(RBNode_elm_builtin,Black,xk,xv,a,b),\n                                    A5(RBNode_elm_builtin,Black,zk,zv,c,d));\n                                 };\n                              };\n                           };\n                        };\n                     };\n                  };\n               };\n            };\n         };\n      };\n   };\n   var redden = function (t) {\n      var _p17 = t;\n      if (_p17.ctor === \"RBEmpty_elm_builtin\") {\n            return $Native$Debug.crash(\"can\\'t make a Leaf red\");\n         } else {\n            return A5(RBNode_elm_builtin,Red,_p17._1,_p17._2,_p17._3,_p17._4);\n         }\n   };\n   var balanceHelp = function (tree) {\n      var _p18 = tree;\n      _v31_6: do {\n         _v31_5: do {\n            _v31_4: do {\n               _v31_3: do {\n                  _v31_2: do {\n                     _v31_1: do {\n                        _v31_0: do {\n                           if (_p18.ctor === \"RBNode_elm_builtin\") {\n                                 if (_p18._3.ctor === \"RBNode_elm_builtin\") {\n                                       if (_p18._4.ctor === \"RBNode_elm_builtin\") {\n                                             switch (_p18._3._0.ctor)\n                                             {case \"Red\": switch (_p18._4._0.ctor)\n                                                  {case \"Red\": if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Red\") {\n                                                             break _v31_0;\n                                                          } else {\n                                                             if (_p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Red\") {\n                                                                   break _v31_1;\n                                                                } else {\n                                                                   if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Red\") {\n                                                                         break _v31_2;\n                                                                      } else {\n                                                                         if (_p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Red\") {\n                                                                               break _v31_3;\n                                                                            } else {\n                                                                               break _v31_6;\n                                                                            }\n                                                                      }\n                                                                }\n                                                          }\n                                                     case \"NBlack\": if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Red\") {\n                                                             break _v31_0;\n                                                          } else {\n                                                             if (_p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Red\") {\n                                                                   break _v31_1;\n                                                                } else {\n                                                                   if (_p18._0.ctor === \"BBlack\" && _p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Black\" && _p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Black\")\n                                                                   {\n                                                                         break _v31_4;\n                                                                      } else {\n                                                                         break _v31_6;\n                                                                      }\n                                                                }\n                                                          }\n                                                     default: if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Red\") {\n                                                             break _v31_0;\n                                                          } else {\n                                                             if (_p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Red\") {\n                                                                   break _v31_1;\n                                                                } else {\n                                                                   break _v31_6;\n                                                                }\n                                                          }}\n                                                case \"NBlack\": switch (_p18._4._0.ctor)\n                                                  {case \"Red\": if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Red\") {\n                                                             break _v31_2;\n                                                          } else {\n                                                             if (_p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Red\") {\n                                                                   break _v31_3;\n                                                                } else {\n                                                                   if (_p18._0.ctor === \"BBlack\" && _p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Black\" && _p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Black\")\n                                                                   {\n                                                                         break _v31_5;\n                                                                      } else {\n                                                                         break _v31_6;\n                                                                      }\n                                                                }\n                                                          }\n                                                     case \"NBlack\": if (_p18._0.ctor === \"BBlack\") {\n                                                             if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Black\" && _p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Black\")\n                                                             {\n                                                                   break _v31_4;\n                                                                } else {\n                                                                   if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Black\" && _p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Black\")\n                                                                   {\n                                                                         break _v31_5;\n                                                                      } else {\n                                                                         break _v31_6;\n                                                                      }\n                                                                }\n                                                          } else {\n                                                             break _v31_6;\n                                                          }\n                                                     default:\n                                                     if (_p18._0.ctor === \"BBlack\" && _p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Black\" && _p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Black\")\n                                                       {\n                                                             break _v31_5;\n                                                          } else {\n                                                             break _v31_6;\n                                                          }}\n                                                default: switch (_p18._4._0.ctor)\n                                                  {case \"Red\": if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Red\") {\n                                                             break _v31_2;\n                                                          } else {\n                                                             if (_p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Red\") {\n                                                                   break _v31_3;\n                                                                } else {\n                                                                   break _v31_6;\n                                                                }\n                                                          }\n                                                     case \"NBlack\":\n                                                     if (_p18._0.ctor === \"BBlack\" && _p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Black\" && _p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Black\")\n                                                       {\n                                                             break _v31_4;\n                                                          } else {\n                                                             break _v31_6;\n                                                          }\n                                                     default: break _v31_6;}}\n                                          } else {\n                                             switch (_p18._3._0.ctor)\n                                             {case \"Red\": if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Red\") {\n                                                        break _v31_0;\n                                                     } else {\n                                                        if (_p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Red\") {\n                                                              break _v31_1;\n                                                           } else {\n                                                              break _v31_6;\n                                                           }\n                                                     }\n                                                case \"NBlack\":\n                                                if (_p18._0.ctor === \"BBlack\" && _p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Black\" && _p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Black\")\n                                                  {\n                                                        break _v31_5;\n                                                     } else {\n                                                        break _v31_6;\n                                                     }\n                                                default: break _v31_6;}\n                                          }\n                                    } else {\n                                       if (_p18._4.ctor === \"RBNode_elm_builtin\") {\n                                             switch (_p18._4._0.ctor)\n                                             {case \"Red\": if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Red\") {\n                                                        break _v31_2;\n                                                     } else {\n                                                        if (_p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Red\") {\n                                                              break _v31_3;\n                                                           } else {\n                                                              break _v31_6;\n                                                           }\n                                                     }\n                                                case \"NBlack\":\n                                                if (_p18._0.ctor === \"BBlack\" && _p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Black\" && _p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Black\")\n                                                  {\n                                                        break _v31_4;\n                                                     } else {\n                                                        break _v31_6;\n                                                     }\n                                                default: break _v31_6;}\n                                          } else {\n                                             break _v31_6;\n                                          }\n                                    }\n                              } else {\n                                 break _v31_6;\n                              }\n                        } while (false);\n                        return balancedTree(_p18._0)(_p18._3._3._1)(_p18._3._3._2)(_p18._3._1)(_p18._3._2)(_p18._1)(_p18._2)(_p18._3._3._3)(_p18._3._3._4)(_p18._3._4)(_p18._4);\n                     } while (false);\n                     return balancedTree(_p18._0)(_p18._3._1)(_p18._3._2)(_p18._3._4._1)(_p18._3._4._2)(_p18._1)(_p18._2)(_p18._3._3)(_p18._3._4._3)(_p18._3._4._4)(_p18._4);\n                  } while (false);\n                  return balancedTree(_p18._0)(_p18._1)(_p18._2)(_p18._4._3._1)(_p18._4._3._2)(_p18._4._1)(_p18._4._2)(_p18._3)(_p18._4._3._3)(_p18._4._3._4)(_p18._4._4);\n               } while (false);\n               return balancedTree(_p18._0)(_p18._1)(_p18._2)(_p18._4._1)(_p18._4._2)(_p18._4._4._1)(_p18._4._4._2)(_p18._3)(_p18._4._3)(_p18._4._4._3)(_p18._4._4._4);\n            } while (false);\n            return A5(RBNode_elm_builtin,\n            Black,\n            _p18._4._3._1,\n            _p18._4._3._2,\n            A5(RBNode_elm_builtin,Black,_p18._1,_p18._2,_p18._3,_p18._4._3._3),\n            A5(balance,Black,_p18._4._1,_p18._4._2,_p18._4._3._4,redden(_p18._4._4)));\n         } while (false);\n         return A5(RBNode_elm_builtin,\n         Black,\n         _p18._3._4._1,\n         _p18._3._4._2,\n         A5(balance,Black,_p18._3._1,_p18._3._2,redden(_p18._3._3),_p18._3._4._3),\n         A5(RBNode_elm_builtin,Black,_p18._1,_p18._2,_p18._3._4._4,_p18._4));\n      } while (false);\n      return tree;\n   };\n   var balance = F5(function (c,k,v,l,r) {    var tree = A5(RBNode_elm_builtin,c,k,v,l,r);return blackish(tree) ? balanceHelp(tree) : tree;});\n   var bubble = F5(function (c,k,v,l,r) {\n      return isBBlack(l) || isBBlack(r) ? A5(balance,moreBlack(c),k,v,lessBlackTree(l),lessBlackTree(r)) : A5(RBNode_elm_builtin,c,k,v,l,r);\n   });\n   var removeMax = F5(function (c,k,v,l,r) {\n      var _p19 = r;\n      if (_p19.ctor === \"RBEmpty_elm_builtin\") {\n            return A3(rem,c,l,r);\n         } else {\n            return A5(bubble,c,k,v,l,A5(removeMax,_p19._0,_p19._1,_p19._2,_p19._3,_p19._4));\n         }\n   });\n   var rem = F3(function (c,l,r) {\n      var _p20 = {ctor: \"_Tuple2\",_0: l,_1: r};\n      if (_p20._0.ctor === \"RBEmpty_elm_builtin\") {\n            if (_p20._1.ctor === \"RBEmpty_elm_builtin\") {\n                  var _p21 = c;\n                  switch (_p21.ctor)\n                  {case \"Red\": return RBEmpty_elm_builtin(LBlack);\n                     case \"Black\": return RBEmpty_elm_builtin(LBBlack);\n                     default: return $Native$Debug.crash(\"cannot have bblack or nblack nodes at this point\");}\n               } else {\n                  var _p24 = _p20._1._0;\n                  var _p23 = _p20._0._0;\n                  var _p22 = {ctor: \"_Tuple3\",_0: c,_1: _p23,_2: _p24};\n                  if (_p22.ctor === \"_Tuple3\" && _p22._0.ctor === \"Black\" && _p22._1.ctor === \"LBlack\" && _p22._2.ctor === \"Red\") {\n                        return A5(RBNode_elm_builtin,Black,_p20._1._1,_p20._1._2,_p20._1._3,_p20._1._4);\n                     } else {\n                        return A4(reportRemBug,\"Black/LBlack/Red\",c,$Basics.toString(_p23),$Basics.toString(_p24));\n                     }\n               }\n         } else {\n            if (_p20._1.ctor === \"RBEmpty_elm_builtin\") {\n                  var _p27 = _p20._1._0;\n                  var _p26 = _p20._0._0;\n                  var _p25 = {ctor: \"_Tuple3\",_0: c,_1: _p26,_2: _p27};\n                  if (_p25.ctor === \"_Tuple3\" && _p25._0.ctor === \"Black\" && _p25._1.ctor === \"Red\" && _p25._2.ctor === \"LBlack\") {\n                        return A5(RBNode_elm_builtin,Black,_p20._0._1,_p20._0._2,_p20._0._3,_p20._0._4);\n                     } else {\n                        return A4(reportRemBug,\"Black/Red/LBlack\",c,$Basics.toString(_p26),$Basics.toString(_p27));\n                     }\n               } else {\n                  var _p31 = _p20._0._2;\n                  var _p30 = _p20._0._4;\n                  var _p29 = _p20._0._1;\n                  var l$ = A5(removeMax,_p20._0._0,_p29,_p31,_p20._0._3,_p30);\n                  var _p28 = A3(maxWithDefault,_p29,_p31,_p30);\n                  var k = _p28._0;\n                  var v = _p28._1;\n                  return A5(bubble,c,k,v,l$,r);\n               }\n         }\n   });\n   var update = F3(function (k,alter,dict) {\n      var up = function (dict) {\n         var _p32 = dict;\n         if (_p32.ctor === \"RBEmpty_elm_builtin\") {\n               var _p33 = alter($Maybe.Nothing);\n               if (_p33.ctor === \"Nothing\") {\n                     return {ctor: \"_Tuple2\",_0: Same,_1: empty};\n                  } else {\n                     return {ctor: \"_Tuple2\",_0: Insert,_1: A5(RBNode_elm_builtin,Red,k,_p33._0,empty,empty)};\n                  }\n            } else {\n               var _p44 = _p32._2;\n               var _p43 = _p32._4;\n               var _p42 = _p32._3;\n               var _p41 = _p32._1;\n               var _p40 = _p32._0;\n               var _p34 = A2($Basics.compare,k,_p41);\n               switch (_p34.ctor)\n               {case \"EQ\": var _p35 = alter($Maybe.Just(_p44));\n                    if (_p35.ctor === \"Nothing\") {\n                          return {ctor: \"_Tuple2\",_0: Remove,_1: A3(rem,_p40,_p42,_p43)};\n                       } else {\n                          return {ctor: \"_Tuple2\",_0: Same,_1: A5(RBNode_elm_builtin,_p40,_p41,_p35._0,_p42,_p43)};\n                       }\n                  case \"LT\": var _p36 = up(_p42);\n                    var flag = _p36._0;\n                    var newLeft = _p36._1;\n                    var _p37 = flag;\n                    switch (_p37.ctor)\n                    {case \"Same\": return {ctor: \"_Tuple2\",_0: Same,_1: A5(RBNode_elm_builtin,_p40,_p41,_p44,newLeft,_p43)};\n                       case \"Insert\": return {ctor: \"_Tuple2\",_0: Insert,_1: A5(balance,_p40,_p41,_p44,newLeft,_p43)};\n                       default: return {ctor: \"_Tuple2\",_0: Remove,_1: A5(bubble,_p40,_p41,_p44,newLeft,_p43)};}\n                  default: var _p38 = up(_p43);\n                    var flag = _p38._0;\n                    var newRight = _p38._1;\n                    var _p39 = flag;\n                    switch (_p39.ctor)\n                    {case \"Same\": return {ctor: \"_Tuple2\",_0: Same,_1: A5(RBNode_elm_builtin,_p40,_p41,_p44,_p42,newRight)};\n                       case \"Insert\": return {ctor: \"_Tuple2\",_0: Insert,_1: A5(balance,_p40,_p41,_p44,_p42,newRight)};\n                       default: return {ctor: \"_Tuple2\",_0: Remove,_1: A5(bubble,_p40,_p41,_p44,_p42,newRight)};}}\n            }\n      };\n      var _p45 = up(dict);\n      var flag = _p45._0;\n      var updatedDict = _p45._1;\n      var _p46 = flag;\n      switch (_p46.ctor)\n      {case \"Same\": return updatedDict;\n         case \"Insert\": return ensureBlackRoot(updatedDict);\n         default: return blacken(updatedDict);}\n   });\n   var insert = F3(function (key,value,dict) {    return A3(update,key,$Basics.always($Maybe.Just(value)),dict);});\n   var singleton = F2(function (key,value) {    return A3(insert,key,value,empty);});\n   var union = F2(function (t1,t2) {    return A3(foldl,insert,t2,t1);});\n   var fromList = function (assocs) {\n      return A3($List.foldl,F2(function (_p47,dict) {    var _p48 = _p47;return A3(insert,_p48._0,_p48._1,dict);}),empty,assocs);\n   };\n   var filter = F2(function (predicate,dictionary) {\n      var add = F3(function (key,value,dict) {    return A2(predicate,key,value) ? A3(insert,key,value,dict) : dict;});\n      return A3(foldl,add,empty,dictionary);\n   });\n   var intersect = F2(function (t1,t2) {    return A2(filter,F2(function (k,_p49) {    return A2(member,k,t2);}),t1);});\n   var partition = F2(function (predicate,dict) {\n      var add = F3(function (key,value,_p50) {\n         var _p51 = _p50;\n         var _p53 = _p51._1;\n         var _p52 = _p51._0;\n         return A2(predicate,key,value) ? {ctor: \"_Tuple2\",_0: A3(insert,key,value,_p52),_1: _p53} : {ctor: \"_Tuple2\",_0: _p52,_1: A3(insert,key,value,_p53)};\n      });\n      return A3(foldl,add,{ctor: \"_Tuple2\",_0: empty,_1: empty},dict);\n   });\n   var remove = F2(function (key,dict) {    return A3(update,key,$Basics.always($Maybe.Nothing),dict);});\n   var diff = F2(function (t1,t2) {    return A3(foldl,F3(function (k,v,t) {    return A2(remove,k,t);}),t1,t2);});\n   return _elm.Dict.values = {_op: _op\n                             ,empty: empty\n                             ,singleton: singleton\n                             ,insert: insert\n                             ,update: update\n                             ,isEmpty: isEmpty\n                             ,get: get\n                             ,remove: remove\n                             ,member: member\n                             ,size: size\n                             ,filter: filter\n                             ,partition: partition\n                             ,foldl: foldl\n                             ,foldr: foldr\n                             ,map: map\n                             ,union: union\n                             ,intersect: intersect\n                             ,diff: diff\n                             ,keys: keys\n                             ,values: values\n                             ,toList: toList\n                             ,fromList: fromList};\n};\nElm.Native.Json = {};\n\nElm.Native.Json.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Json = localRuntime.Native.Json || {};\n\tif (localRuntime.Native.Json.values) {\n\t\treturn localRuntime.Native.Json.values;\n\t}\n\n\tvar ElmArray = Elm.Native.Array.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\tvar Result = Elm.Result.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\tfunction crash(expected, actual) {\n\t\tthrow new Error(\n\t\t\t'expecting ' + expected + ' but got ' + JSON.stringify(actual)\n\t\t);\n\t}\n\n\n\t// PRIMITIVE VALUES\n\n\tfunction decodeNull(successValue) {\n\t\treturn function(value) {\n\t\t\tif (value === null) {\n\t\t\t\treturn successValue;\n\t\t\t}\n\t\t\tcrash('null', value);\n\t\t};\n\t}\n\n\n\tfunction decodeString(value) {\n\t\tif (typeof value === 'string' || value instanceof String) {\n\t\t\treturn value;\n\t\t}\n\t\tcrash('a String', value);\n\t}\n\n\n\tfunction decodeFloat(value) {\n\t\tif (typeof value === 'number') {\n\t\t\treturn value;\n\t\t}\n\t\tcrash('a Float', value);\n\t}\n\n\n\tfunction decodeInt(value) {\n\t\tif (typeof value !== 'number') {\n\t\t\tcrash('an Int', value);\n\t\t}\n\n\t\tif (value < 2147483647 && value > -2147483647 && (value | 0) === value) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (isFinite(value) && !(value % 1)) {\n\t\t\treturn value;\n\t\t}\n\n\t\tcrash('an Int', value);\n\t}\n\n\n\tfunction decodeBool(value) {\n\t\tif (typeof value === 'boolean') {\n\t\t\treturn value;\n\t\t}\n\t\tcrash('a Bool', value);\n\t}\n\n\n\t// ARRAY\n\n\tfunction decodeArray(decoder) {\n\t\treturn function(value) {\n\t\t\tif (value instanceof Array) {\n\t\t\t\tvar len = value.length;\n\t\t\t\tvar array = new Array(len);\n\t\t\t\tfor (var i = len; i--; ) {\n\t\t\t\t\tarray[i] = decoder(value[i]);\n\t\t\t\t}\n\t\t\t\treturn ElmArray.fromJSArray(array);\n\t\t\t}\n\t\t\tcrash('an Array', value);\n\t\t};\n\t}\n\n\n\t// LIST\n\n\tfunction decodeList(decoder) {\n\t\treturn function(value) {\n\t\t\tif (value instanceof Array) {\n\t\t\t\tvar len = value.length;\n\t\t\t\tvar list = List.Nil;\n\t\t\t\tfor (var i = len; i--; ) {\n\t\t\t\t\tlist = List.Cons( decoder(value[i]), list );\n\t\t\t\t}\n\t\t\t\treturn list;\n\t\t\t}\n\t\t\tcrash('a List', value);\n\t\t};\n\t}\n\n\n\t// MAYBE\n\n\tfunction decodeMaybe(decoder) {\n\t\treturn function(value) {\n\t\t\ttry {\n\t\t\t\treturn Maybe.Just(decoder(value));\n\t\t\t} catch(e) {\n\t\t\t\treturn Maybe.Nothing;\n\t\t\t}\n\t\t};\n\t}\n\n\n\t// FIELDS\n\n\tfunction decodeField(field, decoder) {\n\t\treturn function(value) {\n\t\t\tvar subValue = value[field];\n\t\t\tif (subValue !== undefined) {\n\t\t\t\treturn decoder(subValue);\n\t\t\t}\n\t\t\tcrash(\"an object with field '\" + field + \"'\", value);\n\t\t};\n\t}\n\n\n\t// OBJECTS\n\n\tfunction decodeKeyValuePairs(decoder) {\n\t\treturn function(value) {\n\t\t\tvar isObject =\n\t\t\t\ttypeof value === 'object'\n\t\t\t\t\t&& value !== null\n\t\t\t\t\t&& !(value instanceof Array);\n\n\t\t\tif (isObject) {\n\t\t\t\tvar keyValuePairs = List.Nil;\n\t\t\t\tfor (var key in value)\n\t\t\t\t{\n\t\t\t\t\tvar elmValue = decoder(value[key]);\n\t\t\t\t\tvar pair = Utils.Tuple2(key, elmValue);\n\t\t\t\t\tkeyValuePairs = List.Cons(pair, keyValuePairs);\n\t\t\t\t}\n\t\t\t\treturn keyValuePairs;\n\t\t\t}\n\n\t\t\tcrash('an object', value);\n\t\t};\n\t}\n\n\tfunction decodeObject1(f, d1) {\n\t\treturn function(value) {\n\t\t\treturn f(d1(value));\n\t\t};\n\t}\n\n\tfunction decodeObject2(f, d1, d2) {\n\t\treturn function(value) {\n\t\t\treturn A2( f, d1(value), d2(value) );\n\t\t};\n\t}\n\n\tfunction decodeObject3(f, d1, d2, d3) {\n\t\treturn function(value) {\n\t\t\treturn A3( f, d1(value), d2(value), d3(value) );\n\t\t};\n\t}\n\n\tfunction decodeObject4(f, d1, d2, d3, d4) {\n\t\treturn function(value) {\n\t\t\treturn A4( f, d1(value), d2(value), d3(value), d4(value) );\n\t\t};\n\t}\n\n\tfunction decodeObject5(f, d1, d2, d3, d4, d5) {\n\t\treturn function(value) {\n\t\t\treturn A5( f, d1(value), d2(value), d3(value), d4(value), d5(value) );\n\t\t};\n\t}\n\n\tfunction decodeObject6(f, d1, d2, d3, d4, d5, d6) {\n\t\treturn function(value) {\n\t\t\treturn A6( f,\n\t\t\t\td1(value),\n\t\t\t\td2(value),\n\t\t\t\td3(value),\n\t\t\t\td4(value),\n\t\t\t\td5(value),\n\t\t\t\td6(value)\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction decodeObject7(f, d1, d2, d3, d4, d5, d6, d7) {\n\t\treturn function(value) {\n\t\t\treturn A7( f,\n\t\t\t\td1(value),\n\t\t\t\td2(value),\n\t\t\t\td3(value),\n\t\t\t\td4(value),\n\t\t\t\td5(value),\n\t\t\t\td6(value),\n\t\t\t\td7(value)\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8) {\n\t\treturn function(value) {\n\t\t\treturn A8( f,\n\t\t\t\td1(value),\n\t\t\t\td2(value),\n\t\t\t\td3(value),\n\t\t\t\td4(value),\n\t\t\t\td5(value),\n\t\t\t\td6(value),\n\t\t\t\td7(value),\n\t\t\t\td8(value)\n\t\t\t);\n\t\t};\n\t}\n\n\n\t// TUPLES\n\n\tfunction decodeTuple1(f, d1) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 1 ) {\n\t\t\t\tcrash('a Tuple of length 1', value);\n\t\t\t}\n\t\t\treturn f( d1(value[0]) );\n\t\t};\n\t}\n\n\tfunction decodeTuple2(f, d1, d2) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 2 ) {\n\t\t\t\tcrash('a Tuple of length 2', value);\n\t\t\t}\n\t\t\treturn A2( f, d1(value[0]), d2(value[1]) );\n\t\t};\n\t}\n\n\tfunction decodeTuple3(f, d1, d2, d3) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 3 ) {\n\t\t\t\tcrash('a Tuple of length 3', value);\n\t\t\t}\n\t\t\treturn A3( f, d1(value[0]), d2(value[1]), d3(value[2]) );\n\t\t};\n\t}\n\n\n\tfunction decodeTuple4(f, d1, d2, d3, d4) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 4 ) {\n\t\t\t\tcrash('a Tuple of length 4', value);\n\t\t\t}\n\t\t\treturn A4( f, d1(value[0]), d2(value[1]), d3(value[2]), d4(value[3]) );\n\t\t};\n\t}\n\n\n\tfunction decodeTuple5(f, d1, d2, d3, d4, d5) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 5 ) {\n\t\t\t\tcrash('a Tuple of length 5', value);\n\t\t\t}\n\t\t\treturn A5( f,\n\t\t\t\td1(value[0]),\n\t\t\t\td2(value[1]),\n\t\t\t\td3(value[2]),\n\t\t\t\td4(value[3]),\n\t\t\t\td5(value[4])\n\t\t\t);\n\t\t};\n\t}\n\n\n\tfunction decodeTuple6(f, d1, d2, d3, d4, d5, d6) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 6 ) {\n\t\t\t\tcrash('a Tuple of length 6', value);\n\t\t\t}\n\t\t\treturn A6( f,\n\t\t\t\td1(value[0]),\n\t\t\t\td2(value[1]),\n\t\t\t\td3(value[2]),\n\t\t\t\td4(value[3]),\n\t\t\t\td5(value[4]),\n\t\t\t\td6(value[5])\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 7 ) {\n\t\t\t\tcrash('a Tuple of length 7', value);\n\t\t\t}\n\t\t\treturn A7( f,\n\t\t\t\td1(value[0]),\n\t\t\t\td2(value[1]),\n\t\t\t\td3(value[2]),\n\t\t\t\td4(value[3]),\n\t\t\t\td5(value[4]),\n\t\t\t\td6(value[5]),\n\t\t\t\td7(value[6])\n\t\t\t);\n\t\t};\n\t}\n\n\n\tfunction decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 8 ) {\n\t\t\t\tcrash('a Tuple of length 8', value);\n\t\t\t}\n\t\t\treturn A8( f,\n\t\t\t\td1(value[0]),\n\t\t\t\td2(value[1]),\n\t\t\t\td3(value[2]),\n\t\t\t\td4(value[3]),\n\t\t\t\td5(value[4]),\n\t\t\t\td6(value[5]),\n\t\t\t\td7(value[6]),\n\t\t\t\td8(value[7])\n\t\t\t);\n\t\t};\n\t}\n\n\n\t// CUSTOM DECODERS\n\n\tfunction decodeValue(value) {\n\t\treturn value;\n\t}\n\n\tfunction runDecoderValue(decoder, value) {\n\t\ttry {\n\t\t\treturn Result.Ok(decoder(value));\n\t\t} catch(e) {\n\t\t\treturn Result.Err(e.message);\n\t\t}\n\t}\n\n\tfunction customDecoder(decoder, callback) {\n\t\treturn function(value) {\n\t\t\tvar result = callback(decoder(value));\n\t\t\tif (result.ctor === 'Err') {\n\t\t\t\tthrow new Error('custom decoder failed: ' + result._0);\n\t\t\t}\n\t\t\treturn result._0;\n\t\t};\n\t}\n\n\tfunction andThen(decode, callback) {\n\t\treturn function(value) {\n\t\t\tvar result = decode(value);\n\t\t\treturn callback(result)(value);\n\t\t};\n\t}\n\n\tfunction fail(msg) {\n\t\treturn function(value) {\n\t\t\tthrow new Error(msg);\n\t\t};\n\t}\n\n\tfunction succeed(successValue) {\n\t\treturn function(value) {\n\t\t\treturn successValue;\n\t\t};\n\t}\n\n\n\t// ONE OF MANY\n\n\tfunction oneOf(decoders) {\n\t\treturn function(value) {\n\t\t\tvar errors = [];\n\t\t\tvar temp = decoders;\n\t\t\twhile (temp.ctor !== '[]') {\n\t\t\t\ttry {\n\t\t\t\t\treturn temp._0(value);\n\t\t\t\t} catch(e) {\n\t\t\t\t\terrors.push(e.message);\n\t\t\t\t}\n\t\t\t\ttemp = temp._1;\n\t\t\t}\n\t\t\tthrow new Error('expecting one of the following:\\n    ' + errors.join('\\n    '));\n\t\t};\n\t}\n\n\tfunction get(decoder, value) {\n\t\ttry {\n\t\t\treturn Result.Ok(decoder(value));\n\t\t} catch(e) {\n\t\t\treturn Result.Err(e.message);\n\t\t}\n\t}\n\n\n\t// ENCODE / DECODE\n\n\tfunction runDecoderString(decoder, string) {\n\t\ttry {\n\t\t\treturn Result.Ok(decoder(JSON.parse(string)));\n\t\t} catch(e) {\n\t\t\treturn Result.Err(e.message);\n\t\t}\n\t}\n\n\tfunction encode(indentLevel, value) {\n\t\treturn JSON.stringify(value, null, indentLevel);\n\t}\n\n\tfunction identity(value) {\n\t\treturn value;\n\t}\n\n\tfunction encodeObject(keyValuePairs) {\n\t\tvar obj = {};\n\t\twhile (keyValuePairs.ctor !== '[]') {\n\t\t\tvar pair = keyValuePairs._0;\n\t\t\tobj[pair._0] = pair._1;\n\t\t\tkeyValuePairs = keyValuePairs._1;\n\t\t}\n\t\treturn obj;\n\t}\n\n\treturn localRuntime.Native.Json.values = {\n\t\tencode: F2(encode),\n\t\trunDecoderString: F2(runDecoderString),\n\t\trunDecoderValue: F2(runDecoderValue),\n\n\t\tget: F2(get),\n\t\toneOf: oneOf,\n\n\t\tdecodeNull: decodeNull,\n\t\tdecodeInt: decodeInt,\n\t\tdecodeFloat: decodeFloat,\n\t\tdecodeString: decodeString,\n\t\tdecodeBool: decodeBool,\n\n\t\tdecodeMaybe: decodeMaybe,\n\n\t\tdecodeList: decodeList,\n\t\tdecodeArray: decodeArray,\n\n\t\tdecodeField: F2(decodeField),\n\n\t\tdecodeObject1: F2(decodeObject1),\n\t\tdecodeObject2: F3(decodeObject2),\n\t\tdecodeObject3: F4(decodeObject3),\n\t\tdecodeObject4: F5(decodeObject4),\n\t\tdecodeObject5: F6(decodeObject5),\n\t\tdecodeObject6: F7(decodeObject6),\n\t\tdecodeObject7: F8(decodeObject7),\n\t\tdecodeObject8: F9(decodeObject8),\n\t\tdecodeKeyValuePairs: decodeKeyValuePairs,\n\n\t\tdecodeTuple1: F2(decodeTuple1),\n\t\tdecodeTuple2: F3(decodeTuple2),\n\t\tdecodeTuple3: F4(decodeTuple3),\n\t\tdecodeTuple4: F5(decodeTuple4),\n\t\tdecodeTuple5: F6(decodeTuple5),\n\t\tdecodeTuple6: F7(decodeTuple6),\n\t\tdecodeTuple7: F8(decodeTuple7),\n\t\tdecodeTuple8: F9(decodeTuple8),\n\n\t\tandThen: F2(andThen),\n\t\tdecodeValue: decodeValue,\n\t\tcustomDecoder: F2(customDecoder),\n\t\tfail: fail,\n\t\tsucceed: succeed,\n\n\t\tidentity: identity,\n\t\tencodeNull: null,\n\t\tencodeArray: ElmArray.toJSArray,\n\t\tencodeList: List.toArray,\n\t\tencodeObject: encodeObject\n\n\t};\n};\n\nElm.Json = Elm.Json || {};\nElm.Json.Encode = Elm.Json.Encode || {};\nElm.Json.Encode.make = function (_elm) {\n   \"use strict\";\n   _elm.Json = _elm.Json || {};\n   _elm.Json.Encode = _elm.Json.Encode || {};\n   if (_elm.Json.Encode.values) return _elm.Json.Encode.values;\n   var _U = Elm.Native.Utils.make(_elm),$Array = Elm.Array.make(_elm),$Native$Json = Elm.Native.Json.make(_elm);\n   var _op = {};\n   var list = $Native$Json.encodeList;\n   var array = $Native$Json.encodeArray;\n   var object = $Native$Json.encodeObject;\n   var $null = $Native$Json.encodeNull;\n   var bool = $Native$Json.identity;\n   var $float = $Native$Json.identity;\n   var $int = $Native$Json.identity;\n   var string = $Native$Json.identity;\n   var encode = $Native$Json.encode;\n   var Value = {ctor: \"Value\"};\n   return _elm.Json.Encode.values = {_op: _op\n                                    ,encode: encode\n                                    ,string: string\n                                    ,$int: $int\n                                    ,$float: $float\n                                    ,bool: bool\n                                    ,$null: $null\n                                    ,list: list\n                                    ,array: array\n                                    ,object: object};\n};\nElm.Json = Elm.Json || {};\nElm.Json.Decode = Elm.Json.Decode || {};\nElm.Json.Decode.make = function (_elm) {\n   \"use strict\";\n   _elm.Json = _elm.Json || {};\n   _elm.Json.Decode = _elm.Json.Decode || {};\n   if (_elm.Json.Decode.values) return _elm.Json.Decode.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Array = Elm.Array.make(_elm),\n   $Dict = Elm.Dict.make(_elm),\n   $Json$Encode = Elm.Json.Encode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Json = Elm.Native.Json.make(_elm),\n   $Result = Elm.Result.make(_elm);\n   var _op = {};\n   var tuple8 = $Native$Json.decodeTuple8;\n   var tuple7 = $Native$Json.decodeTuple7;\n   var tuple6 = $Native$Json.decodeTuple6;\n   var tuple5 = $Native$Json.decodeTuple5;\n   var tuple4 = $Native$Json.decodeTuple4;\n   var tuple3 = $Native$Json.decodeTuple3;\n   var tuple2 = $Native$Json.decodeTuple2;\n   var tuple1 = $Native$Json.decodeTuple1;\n   var succeed = $Native$Json.succeed;\n   var fail = $Native$Json.fail;\n   var andThen = $Native$Json.andThen;\n   var customDecoder = $Native$Json.customDecoder;\n   var decodeValue = $Native$Json.runDecoderValue;\n   var value = $Native$Json.decodeValue;\n   var maybe = $Native$Json.decodeMaybe;\n   var $null = $Native$Json.decodeNull;\n   var array = $Native$Json.decodeArray;\n   var list = $Native$Json.decodeList;\n   var bool = $Native$Json.decodeBool;\n   var $int = $Native$Json.decodeInt;\n   var $float = $Native$Json.decodeFloat;\n   var string = $Native$Json.decodeString;\n   var oneOf = $Native$Json.oneOf;\n   var keyValuePairs = $Native$Json.decodeKeyValuePairs;\n   var object8 = $Native$Json.decodeObject8;\n   var object7 = $Native$Json.decodeObject7;\n   var object6 = $Native$Json.decodeObject6;\n   var object5 = $Native$Json.decodeObject5;\n   var object4 = $Native$Json.decodeObject4;\n   var object3 = $Native$Json.decodeObject3;\n   var object2 = $Native$Json.decodeObject2;\n   var object1 = $Native$Json.decodeObject1;\n   _op[\":=\"] = $Native$Json.decodeField;\n   var at = F2(function (fields,decoder) {    return A3($List.foldr,F2(function (x,y) {    return A2(_op[\":=\"],x,y);}),decoder,fields);});\n   var decodeString = $Native$Json.runDecoderString;\n   var map = $Native$Json.decodeObject1;\n   var dict = function (decoder) {    return A2(map,$Dict.fromList,keyValuePairs(decoder));};\n   var Decoder = {ctor: \"Decoder\"};\n   return _elm.Json.Decode.values = {_op: _op\n                                    ,decodeString: decodeString\n                                    ,decodeValue: decodeValue\n                                    ,string: string\n                                    ,$int: $int\n                                    ,$float: $float\n                                    ,bool: bool\n                                    ,$null: $null\n                                    ,list: list\n                                    ,array: array\n                                    ,tuple1: tuple1\n                                    ,tuple2: tuple2\n                                    ,tuple3: tuple3\n                                    ,tuple4: tuple4\n                                    ,tuple5: tuple5\n                                    ,tuple6: tuple6\n                                    ,tuple7: tuple7\n                                    ,tuple8: tuple8\n                                    ,at: at\n                                    ,object1: object1\n                                    ,object2: object2\n                                    ,object3: object3\n                                    ,object4: object4\n                                    ,object5: object5\n                                    ,object6: object6\n                                    ,object7: object7\n                                    ,object8: object8\n                                    ,keyValuePairs: keyValuePairs\n                                    ,dict: dict\n                                    ,maybe: maybe\n                                    ,oneOf: oneOf\n                                    ,map: map\n                                    ,fail: fail\n                                    ,succeed: succeed\n                                    ,andThen: andThen\n                                    ,value: value\n                                    ,customDecoder: customDecoder};\n};\nElm.Set = Elm.Set || {};\nElm.Set.make = function (_elm) {\n   \"use strict\";\n   _elm.Set = _elm.Set || {};\n   if (_elm.Set.values) return _elm.Set.values;\n   var _U = Elm.Native.Utils.make(_elm),$Basics = Elm.Basics.make(_elm),$Dict = Elm.Dict.make(_elm),$List = Elm.List.make(_elm);\n   var _op = {};\n   var foldr = F3(function (f,b,_p0) {    var _p1 = _p0;return A3($Dict.foldr,F3(function (k,_p2,b) {    return A2(f,k,b);}),b,_p1._0);});\n   var foldl = F3(function (f,b,_p3) {    var _p4 = _p3;return A3($Dict.foldl,F3(function (k,_p5,b) {    return A2(f,k,b);}),b,_p4._0);});\n   var toList = function (_p6) {    var _p7 = _p6;return $Dict.keys(_p7._0);};\n   var size = function (_p8) {    var _p9 = _p8;return $Dict.size(_p9._0);};\n   var member = F2(function (k,_p10) {    var _p11 = _p10;return A2($Dict.member,k,_p11._0);});\n   var isEmpty = function (_p12) {    var _p13 = _p12;return $Dict.isEmpty(_p13._0);};\n   var Set_elm_builtin = function (a) {    return {ctor: \"Set_elm_builtin\",_0: a};};\n   var empty = Set_elm_builtin($Dict.empty);\n   var singleton = function (k) {    return Set_elm_builtin(A2($Dict.singleton,k,{ctor: \"_Tuple0\"}));};\n   var insert = F2(function (k,_p14) {    var _p15 = _p14;return Set_elm_builtin(A3($Dict.insert,k,{ctor: \"_Tuple0\"},_p15._0));});\n   var fromList = function (xs) {    return A3($List.foldl,insert,empty,xs);};\n   var map = F2(function (f,s) {    return fromList(A2($List.map,f,toList(s)));});\n   var remove = F2(function (k,_p16) {    var _p17 = _p16;return Set_elm_builtin(A2($Dict.remove,k,_p17._0));});\n   var union = F2(function (_p19,_p18) {    var _p20 = _p19;var _p21 = _p18;return Set_elm_builtin(A2($Dict.union,_p20._0,_p21._0));});\n   var intersect = F2(function (_p23,_p22) {    var _p24 = _p23;var _p25 = _p22;return Set_elm_builtin(A2($Dict.intersect,_p24._0,_p25._0));});\n   var diff = F2(function (_p27,_p26) {    var _p28 = _p27;var _p29 = _p26;return Set_elm_builtin(A2($Dict.diff,_p28._0,_p29._0));});\n   var filter = F2(function (p,_p30) {    var _p31 = _p30;return Set_elm_builtin(A2($Dict.filter,F2(function (k,_p32) {    return p(k);}),_p31._0));});\n   var partition = F2(function (p,_p33) {\n      var _p34 = _p33;\n      var _p35 = A2($Dict.partition,F2(function (k,_p36) {    return p(k);}),_p34._0);\n      var p1 = _p35._0;\n      var p2 = _p35._1;\n      return {ctor: \"_Tuple2\",_0: Set_elm_builtin(p1),_1: Set_elm_builtin(p2)};\n   });\n   return _elm.Set.values = {_op: _op\n                            ,empty: empty\n                            ,singleton: singleton\n                            ,insert: insert\n                            ,remove: remove\n                            ,isEmpty: isEmpty\n                            ,member: member\n                            ,size: size\n                            ,foldl: foldl\n                            ,foldr: foldr\n                            ,map: map\n                            ,filter: filter\n                            ,partition: partition\n                            ,union: union\n                            ,intersect: intersect\n                            ,diff: diff\n                            ,toList: toList\n                            ,fromList: fromList};\n};\nElm.Native.Regex = {};\nElm.Native.Regex.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Regex = localRuntime.Native.Regex || {};\n\tif (localRuntime.Native.Regex.values)\n\t{\n\t\treturn localRuntime.Native.Regex.values;\n\t}\n\tif ('values' in Elm.Native.Regex)\n\t{\n\t\treturn localRuntime.Native.Regex.values = Elm.Native.Regex.values;\n\t}\n\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\n\tfunction escape(str)\n\t{\n\t\treturn str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t}\n\tfunction caseInsensitive(re)\n\t{\n\t\treturn new RegExp(re.source, 'gi');\n\t}\n\tfunction regex(raw)\n\t{\n\t\treturn new RegExp(raw, 'g');\n\t}\n\n\tfunction contains(re, string)\n\t{\n\t\treturn string.match(re) !== null;\n\t}\n\n\tfunction find(n, re, str)\n\t{\n\t\tn = n.ctor === 'All' ? Infinity : n._0;\n\t\tvar out = [];\n\t\tvar number = 0;\n\t\tvar string = str;\n\t\tvar lastIndex = re.lastIndex;\n\t\tvar prevLastIndex = -1;\n\t\tvar result;\n\t\twhile (number++ < n && (result = re.exec(string)))\n\t\t{\n\t\t\tif (prevLastIndex === re.lastIndex) break;\n\t\t\tvar i = result.length - 1;\n\t\t\tvar subs = new Array(i);\n\t\t\twhile (i > 0)\n\t\t\t{\n\t\t\t\tvar submatch = result[i];\n\t\t\t\tsubs[--i] = submatch === undefined\n\t\t\t\t\t? Maybe.Nothing\n\t\t\t\t\t: Maybe.Just(submatch);\n\t\t\t}\n\t\t\tout.push({\n\t\t\t\tmatch: result[0],\n\t\t\t\tsubmatches: List.fromArray(subs),\n\t\t\t\tindex: result.index,\n\t\t\t\tnumber: number\n\t\t\t});\n\t\t\tprevLastIndex = re.lastIndex;\n\t\t}\n\t\tre.lastIndex = lastIndex;\n\t\treturn List.fromArray(out);\n\t}\n\n\tfunction replace(n, re, replacer, string)\n\t{\n\t\tn = n.ctor === 'All' ? Infinity : n._0;\n\t\tvar count = 0;\n\t\tfunction jsReplacer(match)\n\t\t{\n\t\t\tif (count++ >= n)\n\t\t\t{\n\t\t\t\treturn match;\n\t\t\t}\n\t\t\tvar i = arguments.length - 3;\n\t\t\tvar submatches = new Array(i);\n\t\t\twhile (i > 0)\n\t\t\t{\n\t\t\t\tvar submatch = arguments[i];\n\t\t\t\tsubmatches[--i] = submatch === undefined\n\t\t\t\t\t? Maybe.Nothing\n\t\t\t\t\t: Maybe.Just(submatch);\n\t\t\t}\n\t\t\treturn replacer({\n\t\t\t\tmatch: match,\n\t\t\t\tsubmatches: List.fromArray(submatches),\n\t\t\t\tindex: arguments[i - 1],\n\t\t\t\tnumber: count\n\t\t\t});\n\t\t}\n\t\treturn string.replace(re, jsReplacer);\n\t}\n\n\tfunction split(n, re, str)\n\t{\n\t\tn = n.ctor === 'All' ? Infinity : n._0;\n\t\tif (n === Infinity)\n\t\t{\n\t\t\treturn List.fromArray(str.split(re));\n\t\t}\n\t\tvar string = str;\n\t\tvar result;\n\t\tvar out = [];\n\t\tvar start = re.lastIndex;\n\t\twhile (n--)\n\t\t{\n\t\t\tif (!(result = re.exec(string))) break;\n\t\t\tout.push(string.slice(start, result.index));\n\t\t\tstart = re.lastIndex;\n\t\t}\n\t\tout.push(string.slice(start));\n\t\treturn List.fromArray(out);\n\t}\n\n\treturn Elm.Native.Regex.values = {\n\t\tregex: regex,\n\t\tcaseInsensitive: caseInsensitive,\n\t\tescape: escape,\n\n\t\tcontains: F2(contains),\n\t\tfind: F3(find),\n\t\treplace: F4(replace),\n\t\tsplit: F3(split)\n\t};\n};\n\nElm.Regex = Elm.Regex || {};\nElm.Regex.make = function (_elm) {\n   \"use strict\";\n   _elm.Regex = _elm.Regex || {};\n   if (_elm.Regex.values) return _elm.Regex.values;\n   var _U = Elm.Native.Utils.make(_elm),$Maybe = Elm.Maybe.make(_elm),$Native$Regex = Elm.Native.Regex.make(_elm);\n   var _op = {};\n   var split = $Native$Regex.split;\n   var replace = $Native$Regex.replace;\n   var find = $Native$Regex.find;\n   var AtMost = function (a) {    return {ctor: \"AtMost\",_0: a};};\n   var All = {ctor: \"All\"};\n   var Match = F4(function (a,b,c,d) {    return {match: a,submatches: b,index: c,number: d};});\n   var contains = $Native$Regex.contains;\n   var caseInsensitive = $Native$Regex.caseInsensitive;\n   var regex = $Native$Regex.regex;\n   var escape = $Native$Regex.escape;\n   var Regex = {ctor: \"Regex\"};\n   return _elm.Regex.values = {_op: _op\n                              ,regex: regex\n                              ,escape: escape\n                              ,caseInsensitive: caseInsensitive\n                              ,contains: contains\n                              ,find: find\n                              ,replace: replace\n                              ,split: split\n                              ,Match: Match\n                              ,All: All\n                              ,AtMost: AtMost};\n};\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n\n},{}],2:[function(require,module,exports){\n(function (global){\nvar topLevel = typeof global !== 'undefined' ? global :\n    typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nif (typeof document !== 'undefined') {\n    module.exports = document;\n} else {\n    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n    if (!doccy) {\n        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n    }\n\n    module.exports = doccy;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"min-document\":1}],3:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function isObject(x) {\n\treturn typeof x === \"object\" && x !== null;\n};\n\n},{}],4:[function(require,module,exports){\nvar nativeIsArray = Array.isArray\nvar toString = Object.prototype.toString\n\nmodule.exports = nativeIsArray || isArray\n\nfunction isArray(obj) {\n    return toString.call(obj) === \"[object Array]\"\n}\n\n},{}],5:[function(require,module,exports){\nvar isObject = require(\"is-object\")\nvar isHook = require(\"../vnode/is-vhook.js\")\n\nmodule.exports = applyProperties\n\nfunction applyProperties(node, props, previous) {\n    for (var propName in props) {\n        var propValue = props[propName]\n\n        if (propValue === undefined) {\n            removeProperty(node, propName, propValue, previous);\n        } else if (isHook(propValue)) {\n            removeProperty(node, propName, propValue, previous)\n            if (propValue.hook) {\n                propValue.hook(node,\n                    propName,\n                    previous ? previous[propName] : undefined)\n            }\n        } else {\n            if (isObject(propValue)) {\n                patchObject(node, props, previous, propName, propValue);\n            } else {\n                node[propName] = propValue\n            }\n        }\n    }\n}\n\nfunction removeProperty(node, propName, propValue, previous) {\n    if (previous) {\n        var previousValue = previous[propName]\n\n        if (!isHook(previousValue)) {\n            if (propName === \"attributes\") {\n                for (var attrName in previousValue) {\n                    node.removeAttribute(attrName)\n                }\n            } else if (propName === \"style\") {\n                for (var i in previousValue) {\n                    node.style[i] = \"\"\n                }\n            } else if (typeof previousValue === \"string\") {\n                node[propName] = \"\"\n            } else {\n                node[propName] = null\n            }\n        } else if (previousValue.unhook) {\n            previousValue.unhook(node, propName, propValue)\n        }\n    }\n}\n\nfunction patchObject(node, props, previous, propName, propValue) {\n    var previousValue = previous ? previous[propName] : undefined\n\n    // Set attributes\n    if (propName === \"attributes\") {\n        for (var attrName in propValue) {\n            var attrValue = propValue[attrName]\n\n            if (attrValue === undefined) {\n                node.removeAttribute(attrName)\n            } else {\n                node.setAttribute(attrName, attrValue)\n            }\n        }\n\n        return\n    }\n\n    if(previousValue && isObject(previousValue) &&\n        getPrototype(previousValue) !== getPrototype(propValue)) {\n        node[propName] = propValue\n        return\n    }\n\n    if (!isObject(node[propName])) {\n        node[propName] = {}\n    }\n\n    var replacer = propName === \"style\" ? \"\" : undefined\n\n    for (var k in propValue) {\n        var value = propValue[k]\n        node[propName][k] = (value === undefined) ? replacer : value\n    }\n}\n\nfunction getPrototype(value) {\n    if (Object.getPrototypeOf) {\n        return Object.getPrototypeOf(value)\n    } else if (value.__proto__) {\n        return value.__proto__\n    } else if (value.constructor) {\n        return value.constructor.prototype\n    }\n}\n\n},{\"../vnode/is-vhook.js\":13,\"is-object\":3}],6:[function(require,module,exports){\nvar document = require(\"global/document\")\n\nvar applyProperties = require(\"./apply-properties\")\n\nvar isVNode = require(\"../vnode/is-vnode.js\")\nvar isVText = require(\"../vnode/is-vtext.js\")\nvar isWidget = require(\"../vnode/is-widget.js\")\nvar handleThunk = require(\"../vnode/handle-thunk.js\")\n\nmodule.exports = createElement\n\nfunction createElement(vnode, opts) {\n    var doc = opts ? opts.document || document : document\n    var warn = opts ? opts.warn : null\n\n    vnode = handleThunk(vnode).a\n\n    if (isWidget(vnode)) {\n        return vnode.init()\n    } else if (isVText(vnode)) {\n        return doc.createTextNode(vnode.text)\n    } else if (!isVNode(vnode)) {\n        if (warn) {\n            warn(\"Item is not a valid virtual dom node\", vnode)\n        }\n        return null\n    }\n\n    var node = (vnode.namespace === null) ?\n        doc.createElement(vnode.tagName) :\n        doc.createElementNS(vnode.namespace, vnode.tagName)\n\n    var props = vnode.properties\n    applyProperties(node, props)\n\n    var children = vnode.children\n\n    for (var i = 0; i < children.length; i++) {\n        var childNode = createElement(children[i], opts)\n        if (childNode) {\n            node.appendChild(childNode)\n        }\n    }\n\n    return node\n}\n\n},{\"../vnode/handle-thunk.js\":11,\"../vnode/is-vnode.js\":14,\"../vnode/is-vtext.js\":15,\"../vnode/is-widget.js\":16,\"./apply-properties\":5,\"global/document\":2}],7:[function(require,module,exports){\n// Maps a virtual DOM tree onto a real DOM tree in an efficient manner.\n// We don't want to read all of the DOM nodes in the tree so we use\n// the in-order tree indexing to eliminate recursion down certain branches.\n// We only recurse into a DOM node if we know that it contains a child of\n// interest.\n\nvar noChild = {}\n\nmodule.exports = domIndex\n\nfunction domIndex(rootNode, tree, indices, nodes) {\n    if (!indices || indices.length === 0) {\n        return {}\n    } else {\n        indices.sort(ascending)\n        return recurse(rootNode, tree, indices, nodes, 0)\n    }\n}\n\nfunction recurse(rootNode, tree, indices, nodes, rootIndex) {\n    nodes = nodes || {}\n\n\n    if (rootNode) {\n        if (indexInRange(indices, rootIndex, rootIndex)) {\n            nodes[rootIndex] = rootNode\n        }\n\n        var vChildren = tree.children\n\n        if (vChildren) {\n\n            var childNodes = rootNode.childNodes\n\n            for (var i = 0; i < tree.children.length; i++) {\n                rootIndex += 1\n\n                var vChild = vChildren[i] || noChild\n                var nextIndex = rootIndex + (vChild.count || 0)\n\n                // skip recursion down the tree if there are no nodes down here\n                if (indexInRange(indices, rootIndex, nextIndex)) {\n                    recurse(childNodes[i], vChild, indices, nodes, rootIndex)\n                }\n\n                rootIndex = nextIndex\n            }\n        }\n    }\n\n    return nodes\n}\n\n// Binary search for an index in the interval [left, right]\nfunction indexInRange(indices, left, right) {\n    if (indices.length === 0) {\n        return false\n    }\n\n    var minIndex = 0\n    var maxIndex = indices.length - 1\n    var currentIndex\n    var currentItem\n\n    while (minIndex <= maxIndex) {\n        currentIndex = ((maxIndex + minIndex) / 2) >> 0\n        currentItem = indices[currentIndex]\n\n        if (minIndex === maxIndex) {\n            return currentItem >= left && currentItem <= right\n        } else if (currentItem < left) {\n            minIndex = currentIndex + 1\n        } else  if (currentItem > right) {\n            maxIndex = currentIndex - 1\n        } else {\n            return true\n        }\n    }\n\n    return false;\n}\n\nfunction ascending(a, b) {\n    return a > b ? 1 : -1\n}\n\n},{}],8:[function(require,module,exports){\nvar applyProperties = require(\"./apply-properties\")\n\nvar isWidget = require(\"../vnode/is-widget.js\")\nvar VPatch = require(\"../vnode/vpatch.js\")\n\nvar render = require(\"./create-element\")\nvar updateWidget = require(\"./update-widget\")\n\nmodule.exports = applyPatch\n\nfunction applyPatch(vpatch, domNode, renderOptions) {\n    var type = vpatch.type\n    var vNode = vpatch.vNode\n    var patch = vpatch.patch\n\n    switch (type) {\n        case VPatch.REMOVE:\n            return removeNode(domNode, vNode)\n        case VPatch.INSERT:\n            return insertNode(domNode, patch, renderOptions)\n        case VPatch.VTEXT:\n            return stringPatch(domNode, vNode, patch, renderOptions)\n        case VPatch.WIDGET:\n            return widgetPatch(domNode, vNode, patch, renderOptions)\n        case VPatch.VNODE:\n            return vNodePatch(domNode, vNode, patch, renderOptions)\n        case VPatch.ORDER:\n            reorderChildren(domNode, patch)\n            return domNode\n        case VPatch.PROPS:\n            applyProperties(domNode, patch, vNode.properties)\n            return domNode\n        case VPatch.THUNK:\n            return replaceRoot(domNode,\n                renderOptions.patch(domNode, patch, renderOptions))\n        default:\n            return domNode\n    }\n}\n\nfunction removeNode(domNode, vNode) {\n    var parentNode = domNode.parentNode\n\n    if (parentNode) {\n        parentNode.removeChild(domNode)\n    }\n\n    destroyWidget(domNode, vNode);\n\n    return null\n}\n\nfunction insertNode(parentNode, vNode, renderOptions) {\n    var newNode = render(vNode, renderOptions)\n\n    if (parentNode) {\n        parentNode.appendChild(newNode)\n    }\n\n    return parentNode\n}\n\nfunction stringPatch(domNode, leftVNode, vText, renderOptions) {\n    var newNode\n\n    if (domNode.nodeType === 3) {\n        domNode.replaceData(0, domNode.length, vText.text)\n        newNode = domNode\n    } else {\n        var parentNode = domNode.parentNode\n        newNode = render(vText, renderOptions)\n\n        if (parentNode && newNode !== domNode) {\n            parentNode.replaceChild(newNode, domNode)\n        }\n    }\n\n    return newNode\n}\n\nfunction widgetPatch(domNode, leftVNode, widget, renderOptions) {\n    var updating = updateWidget(leftVNode, widget)\n    var newNode\n\n    if (updating) {\n        newNode = widget.update(leftVNode, domNode) || domNode\n    } else {\n        newNode = render(widget, renderOptions)\n    }\n\n    var parentNode = domNode.parentNode\n\n    if (parentNode && newNode !== domNode) {\n        parentNode.replaceChild(newNode, domNode)\n    }\n\n    if (!updating) {\n        destroyWidget(domNode, leftVNode)\n    }\n\n    return newNode\n}\n\nfunction vNodePatch(domNode, leftVNode, vNode, renderOptions) {\n    var parentNode = domNode.parentNode\n    var newNode = render(vNode, renderOptions)\n\n    if (parentNode && newNode !== domNode) {\n        parentNode.replaceChild(newNode, domNode)\n    }\n\n    return newNode\n}\n\nfunction destroyWidget(domNode, w) {\n    if (typeof w.destroy === \"function\" && isWidget(w)) {\n        w.destroy(domNode)\n    }\n}\n\nfunction reorderChildren(domNode, moves) {\n    var childNodes = domNode.childNodes\n    var keyMap = {}\n    var node\n    var remove\n    var insert\n\n    for (var i = 0; i < moves.removes.length; i++) {\n        remove = moves.removes[i]\n        node = childNodes[remove.from]\n        if (remove.key) {\n            keyMap[remove.key] = node\n        }\n        domNode.removeChild(node)\n    }\n\n    var length = childNodes.length\n    for (var j = 0; j < moves.inserts.length; j++) {\n        insert = moves.inserts[j]\n        node = keyMap[insert.key]\n        // this is the weirdest bug i've ever seen in webkit\n        domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to])\n    }\n}\n\nfunction replaceRoot(oldRoot, newRoot) {\n    if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {\n        oldRoot.parentNode.replaceChild(newRoot, oldRoot)\n    }\n\n    return newRoot;\n}\n\n},{\"../vnode/is-widget.js\":16,\"../vnode/vpatch.js\":19,\"./apply-properties\":5,\"./create-element\":6,\"./update-widget\":10}],9:[function(require,module,exports){\nvar document = require(\"global/document\")\nvar isArray = require(\"x-is-array\")\n\nvar domIndex = require(\"./dom-index\")\nvar patchOp = require(\"./patch-op\")\nmodule.exports = patch\n\nfunction patch(rootNode, patches) {\n    return patchRecursive(rootNode, patches)\n}\n\nfunction patchRecursive(rootNode, patches, renderOptions) {\n    var indices = patchIndices(patches)\n\n    if (indices.length === 0) {\n        return rootNode\n    }\n\n    var index = domIndex(rootNode, patches.a, indices)\n    var ownerDocument = rootNode.ownerDocument\n\n    if (!renderOptions) {\n        renderOptions = { patch: patchRecursive }\n        if (ownerDocument !== document) {\n            renderOptions.document = ownerDocument\n        }\n    }\n\n    for (var i = 0; i < indices.length; i++) {\n        var nodeIndex = indices[i]\n        rootNode = applyPatch(rootNode,\n            index[nodeIndex],\n            patches[nodeIndex],\n            renderOptions)\n    }\n\n    return rootNode\n}\n\nfunction applyPatch(rootNode, domNode, patchList, renderOptions) {\n    if (!domNode) {\n        return rootNode\n    }\n\n    var newNode\n\n    if (isArray(patchList)) {\n        for (var i = 0; i < patchList.length; i++) {\n            newNode = patchOp(patchList[i], domNode, renderOptions)\n\n            if (domNode === rootNode) {\n                rootNode = newNode\n            }\n        }\n    } else {\n        newNode = patchOp(patchList, domNode, renderOptions)\n\n        if (domNode === rootNode) {\n            rootNode = newNode\n        }\n    }\n\n    return rootNode\n}\n\nfunction patchIndices(patches) {\n    var indices = []\n\n    for (var key in patches) {\n        if (key !== \"a\") {\n            indices.push(Number(key))\n        }\n    }\n\n    return indices\n}\n\n},{\"./dom-index\":7,\"./patch-op\":8,\"global/document\":2,\"x-is-array\":4}],10:[function(require,module,exports){\nvar isWidget = require(\"../vnode/is-widget.js\")\n\nmodule.exports = updateWidget\n\nfunction updateWidget(a, b) {\n    if (isWidget(a) && isWidget(b)) {\n        if (\"name\" in a && \"name\" in b) {\n            return a.id === b.id\n        } else {\n            return a.init === b.init\n        }\n    }\n\n    return false\n}\n\n},{\"../vnode/is-widget.js\":16}],11:[function(require,module,exports){\nvar isVNode = require(\"./is-vnode\")\nvar isVText = require(\"./is-vtext\")\nvar isWidget = require(\"./is-widget\")\nvar isThunk = require(\"./is-thunk\")\n\nmodule.exports = handleThunk\n\nfunction handleThunk(a, b) {\n    var renderedA = a\n    var renderedB = b\n\n    if (isThunk(b)) {\n        renderedB = renderThunk(b, a)\n    }\n\n    if (isThunk(a)) {\n        renderedA = renderThunk(a, null)\n    }\n\n    return {\n        a: renderedA,\n        b: renderedB\n    }\n}\n\nfunction renderThunk(thunk, previous) {\n    var renderedThunk = thunk.vnode\n\n    if (!renderedThunk) {\n        renderedThunk = thunk.vnode = thunk.render(previous)\n    }\n\n    if (!(isVNode(renderedThunk) ||\n            isVText(renderedThunk) ||\n            isWidget(renderedThunk))) {\n        throw new Error(\"thunk did not return a valid node\");\n    }\n\n    return renderedThunk\n}\n\n},{\"./is-thunk\":12,\"./is-vnode\":14,\"./is-vtext\":15,\"./is-widget\":16}],12:[function(require,module,exports){\nmodule.exports = isThunk\r\n\r\nfunction isThunk(t) {\r\n    return t && t.type === \"Thunk\"\r\n}\r\n\n},{}],13:[function(require,module,exports){\nmodule.exports = isHook\n\nfunction isHook(hook) {\n    return hook &&\n      (typeof hook.hook === \"function\" && !hook.hasOwnProperty(\"hook\") ||\n       typeof hook.unhook === \"function\" && !hook.hasOwnProperty(\"unhook\"))\n}\n\n},{}],14:[function(require,module,exports){\nvar version = require(\"./version\")\n\nmodule.exports = isVirtualNode\n\nfunction isVirtualNode(x) {\n    return x && x.type === \"VirtualNode\" && x.version === version\n}\n\n},{\"./version\":17}],15:[function(require,module,exports){\nvar version = require(\"./version\")\n\nmodule.exports = isVirtualText\n\nfunction isVirtualText(x) {\n    return x && x.type === \"VirtualText\" && x.version === version\n}\n\n},{\"./version\":17}],16:[function(require,module,exports){\nmodule.exports = isWidget\n\nfunction isWidget(w) {\n    return w && w.type === \"Widget\"\n}\n\n},{}],17:[function(require,module,exports){\nmodule.exports = \"2\"\n\n},{}],18:[function(require,module,exports){\nvar version = require(\"./version\")\nvar isVNode = require(\"./is-vnode\")\nvar isWidget = require(\"./is-widget\")\nvar isThunk = require(\"./is-thunk\")\nvar isVHook = require(\"./is-vhook\")\n\nmodule.exports = VirtualNode\n\nvar noProperties = {}\nvar noChildren = []\n\nfunction VirtualNode(tagName, properties, children, key, namespace) {\n    this.tagName = tagName\n    this.properties = properties || noProperties\n    this.children = children || noChildren\n    this.key = key != null ? String(key) : undefined\n    this.namespace = (typeof namespace === \"string\") ? namespace : null\n\n    var count = (children && children.length) || 0\n    var descendants = 0\n    var hasWidgets = false\n    var hasThunks = false\n    var descendantHooks = false\n    var hooks\n\n    for (var propName in properties) {\n        if (properties.hasOwnProperty(propName)) {\n            var property = properties[propName]\n            if (isVHook(property) && property.unhook) {\n                if (!hooks) {\n                    hooks = {}\n                }\n\n                hooks[propName] = property\n            }\n        }\n    }\n\n    for (var i = 0; i < count; i++) {\n        var child = children[i]\n        if (isVNode(child)) {\n            descendants += child.count || 0\n\n            if (!hasWidgets && child.hasWidgets) {\n                hasWidgets = true\n            }\n\n            if (!hasThunks && child.hasThunks) {\n                hasThunks = true\n            }\n\n            if (!descendantHooks && (child.hooks || child.descendantHooks)) {\n                descendantHooks = true\n            }\n        } else if (!hasWidgets && isWidget(child)) {\n            if (typeof child.destroy === \"function\") {\n                hasWidgets = true\n            }\n        } else if (!hasThunks && isThunk(child)) {\n            hasThunks = true;\n        }\n    }\n\n    this.count = count + descendants\n    this.hasWidgets = hasWidgets\n    this.hasThunks = hasThunks\n    this.hooks = hooks\n    this.descendantHooks = descendantHooks\n}\n\nVirtualNode.prototype.version = version\nVirtualNode.prototype.type = \"VirtualNode\"\n\n},{\"./is-thunk\":12,\"./is-vhook\":13,\"./is-vnode\":14,\"./is-widget\":16,\"./version\":17}],19:[function(require,module,exports){\nvar version = require(\"./version\")\n\nVirtualPatch.NONE = 0\nVirtualPatch.VTEXT = 1\nVirtualPatch.VNODE = 2\nVirtualPatch.WIDGET = 3\nVirtualPatch.PROPS = 4\nVirtualPatch.ORDER = 5\nVirtualPatch.INSERT = 6\nVirtualPatch.REMOVE = 7\nVirtualPatch.THUNK = 8\n\nmodule.exports = VirtualPatch\n\nfunction VirtualPatch(type, vNode, patch) {\n    this.type = Number(type)\n    this.vNode = vNode\n    this.patch = patch\n}\n\nVirtualPatch.prototype.version = version\nVirtualPatch.prototype.type = \"VirtualPatch\"\n\n},{\"./version\":17}],20:[function(require,module,exports){\nvar version = require(\"./version\")\n\nmodule.exports = VirtualText\n\nfunction VirtualText(text) {\n    this.text = String(text)\n}\n\nVirtualText.prototype.version = version\nVirtualText.prototype.type = \"VirtualText\"\n\n},{\"./version\":17}],21:[function(require,module,exports){\nvar isObject = require(\"is-object\")\nvar isHook = require(\"../vnode/is-vhook\")\n\nmodule.exports = diffProps\n\nfunction diffProps(a, b) {\n    var diff\n\n    for (var aKey in a) {\n        if (!(aKey in b)) {\n            diff = diff || {}\n            diff[aKey] = undefined\n        }\n\n        var aValue = a[aKey]\n        var bValue = b[aKey]\n\n        if (aValue === bValue) {\n            continue\n        } else if (isObject(aValue) && isObject(bValue)) {\n            if (getPrototype(bValue) !== getPrototype(aValue)) {\n                diff = diff || {}\n                diff[aKey] = bValue\n            } else if (isHook(bValue)) {\n                 diff = diff || {}\n                 diff[aKey] = bValue\n            } else {\n                var objectDiff = diffProps(aValue, bValue)\n                if (objectDiff) {\n                    diff = diff || {}\n                    diff[aKey] = objectDiff\n                }\n            }\n        } else {\n            diff = diff || {}\n            diff[aKey] = bValue\n        }\n    }\n\n    for (var bKey in b) {\n        if (!(bKey in a)) {\n            diff = diff || {}\n            diff[bKey] = b[bKey]\n        }\n    }\n\n    return diff\n}\n\nfunction getPrototype(value) {\n  if (Object.getPrototypeOf) {\n    return Object.getPrototypeOf(value)\n  } else if (value.__proto__) {\n    return value.__proto__\n  } else if (value.constructor) {\n    return value.constructor.prototype\n  }\n}\n\n},{\"../vnode/is-vhook\":13,\"is-object\":3}],22:[function(require,module,exports){\nvar isArray = require(\"x-is-array\")\n\nvar VPatch = require(\"../vnode/vpatch\")\nvar isVNode = require(\"../vnode/is-vnode\")\nvar isVText = require(\"../vnode/is-vtext\")\nvar isWidget = require(\"../vnode/is-widget\")\nvar isThunk = require(\"../vnode/is-thunk\")\nvar handleThunk = require(\"../vnode/handle-thunk\")\n\nvar diffProps = require(\"./diff-props\")\n\nmodule.exports = diff\n\nfunction diff(a, b) {\n    var patch = { a: a }\n    walk(a, b, patch, 0)\n    return patch\n}\n\nfunction walk(a, b, patch, index) {\n    if (a === b) {\n        return\n    }\n\n    var apply = patch[index]\n    var applyClear = false\n\n    if (isThunk(a) || isThunk(b)) {\n        thunks(a, b, patch, index)\n    } else if (b == null) {\n\n        // If a is a widget we will add a remove patch for it\n        // Otherwise any child widgets/hooks must be destroyed.\n        // This prevents adding two remove patches for a widget.\n        if (!isWidget(a)) {\n            clearState(a, patch, index)\n            apply = patch[index]\n        }\n\n        apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b))\n    } else if (isVNode(b)) {\n        if (isVNode(a)) {\n            if (a.tagName === b.tagName &&\n                a.namespace === b.namespace &&\n                a.key === b.key) {\n                var propsPatch = diffProps(a.properties, b.properties)\n                if (propsPatch) {\n                    apply = appendPatch(apply,\n                        new VPatch(VPatch.PROPS, a, propsPatch))\n                }\n                apply = diffChildren(a, b, patch, apply, index)\n            } else {\n                apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))\n                applyClear = true\n            }\n        } else {\n            apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))\n            applyClear = true\n        }\n    } else if (isVText(b)) {\n        if (!isVText(a)) {\n            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))\n            applyClear = true\n        } else if (a.text !== b.text) {\n            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))\n        }\n    } else if (isWidget(b)) {\n        if (!isWidget(a)) {\n            applyClear = true\n        }\n\n        apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b))\n    }\n\n    if (apply) {\n        patch[index] = apply\n    }\n\n    if (applyClear) {\n        clearState(a, patch, index)\n    }\n}\n\nfunction diffChildren(a, b, patch, apply, index) {\n    var aChildren = a.children\n    var orderedSet = reorder(aChildren, b.children)\n    var bChildren = orderedSet.children\n\n    var aLen = aChildren.length\n    var bLen = bChildren.length\n    var len = aLen > bLen ? aLen : bLen\n\n    for (var i = 0; i < len; i++) {\n        var leftNode = aChildren[i]\n        var rightNode = bChildren[i]\n        index += 1\n\n        if (!leftNode) {\n            if (rightNode) {\n                // Excess nodes in b need to be added\n                apply = appendPatch(apply,\n                    new VPatch(VPatch.INSERT, null, rightNode))\n            }\n        } else {\n            walk(leftNode, rightNode, patch, index)\n        }\n\n        if (isVNode(leftNode) && leftNode.count) {\n            index += leftNode.count\n        }\n    }\n\n    if (orderedSet.moves) {\n        // Reorder nodes last\n        apply = appendPatch(apply, new VPatch(\n            VPatch.ORDER,\n            a,\n            orderedSet.moves\n        ))\n    }\n\n    return apply\n}\n\nfunction clearState(vNode, patch, index) {\n    // TODO: Make this a single walk, not two\n    unhook(vNode, patch, index)\n    destroyWidgets(vNode, patch, index)\n}\n\n// Patch records for all destroyed widgets must be added because we need\n// a DOM node reference for the destroy function\nfunction destroyWidgets(vNode, patch, index) {\n    if (isWidget(vNode)) {\n        if (typeof vNode.destroy === \"function\") {\n            patch[index] = appendPatch(\n                patch[index],\n                new VPatch(VPatch.REMOVE, vNode, null)\n            )\n        }\n    } else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) {\n        var children = vNode.children\n        var len = children.length\n        for (var i = 0; i < len; i++) {\n            var child = children[i]\n            index += 1\n\n            destroyWidgets(child, patch, index)\n\n            if (isVNode(child) && child.count) {\n                index += child.count\n            }\n        }\n    } else if (isThunk(vNode)) {\n        thunks(vNode, null, patch, index)\n    }\n}\n\n// Create a sub-patch for thunks\nfunction thunks(a, b, patch, index) {\n    var nodes = handleThunk(a, b)\n    var thunkPatch = diff(nodes.a, nodes.b)\n    if (hasPatches(thunkPatch)) {\n        patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch)\n    }\n}\n\nfunction hasPatches(patch) {\n    for (var index in patch) {\n        if (index !== \"a\") {\n            return true\n        }\n    }\n\n    return false\n}\n\n// Execute hooks when two nodes are identical\nfunction unhook(vNode, patch, index) {\n    if (isVNode(vNode)) {\n        if (vNode.hooks) {\n            patch[index] = appendPatch(\n                patch[index],\n                new VPatch(\n                    VPatch.PROPS,\n                    vNode,\n                    undefinedKeys(vNode.hooks)\n                )\n            )\n        }\n\n        if (vNode.descendantHooks || vNode.hasThunks) {\n            var children = vNode.children\n            var len = children.length\n            for (var i = 0; i < len; i++) {\n                var child = children[i]\n                index += 1\n\n                unhook(child, patch, index)\n\n                if (isVNode(child) && child.count) {\n                    index += child.count\n                }\n            }\n        }\n    } else if (isThunk(vNode)) {\n        thunks(vNode, null, patch, index)\n    }\n}\n\nfunction undefinedKeys(obj) {\n    var result = {}\n\n    for (var key in obj) {\n        result[key] = undefined\n    }\n\n    return result\n}\n\n// List diff, naive left to right reordering\nfunction reorder(aChildren, bChildren) {\n    // O(M) time, O(M) memory\n    var bChildIndex = keyIndex(bChildren)\n    var bKeys = bChildIndex.keys\n    var bFree = bChildIndex.free\n\n    if (bFree.length === bChildren.length) {\n        return {\n            children: bChildren,\n            moves: null\n        }\n    }\n\n    // O(N) time, O(N) memory\n    var aChildIndex = keyIndex(aChildren)\n    var aKeys = aChildIndex.keys\n    var aFree = aChildIndex.free\n\n    if (aFree.length === aChildren.length) {\n        return {\n            children: bChildren,\n            moves: null\n        }\n    }\n\n    // O(MAX(N, M)) memory\n    var newChildren = []\n\n    var freeIndex = 0\n    var freeCount = bFree.length\n    var deletedItems = 0\n\n    // Iterate through a and match a node in b\n    // O(N) time,\n    for (var i = 0 ; i < aChildren.length; i++) {\n        var aItem = aChildren[i]\n        var itemIndex\n\n        if (aItem.key) {\n            if (bKeys.hasOwnProperty(aItem.key)) {\n                // Match up the old keys\n                itemIndex = bKeys[aItem.key]\n                newChildren.push(bChildren[itemIndex])\n\n            } else {\n                // Remove old keyed items\n                itemIndex = i - deletedItems++\n                newChildren.push(null)\n            }\n        } else {\n            // Match the item in a with the next free item in b\n            if (freeIndex < freeCount) {\n                itemIndex = bFree[freeIndex++]\n                newChildren.push(bChildren[itemIndex])\n            } else {\n                // There are no free items in b to match with\n                // the free items in a, so the extra free nodes\n                // are deleted.\n                itemIndex = i - deletedItems++\n                newChildren.push(null)\n            }\n        }\n    }\n\n    var lastFreeIndex = freeIndex >= bFree.length ?\n        bChildren.length :\n        bFree[freeIndex]\n\n    // Iterate through b and append any new keys\n    // O(M) time\n    for (var j = 0; j < bChildren.length; j++) {\n        var newItem = bChildren[j]\n\n        if (newItem.key) {\n            if (!aKeys.hasOwnProperty(newItem.key)) {\n                // Add any new keyed items\n                // We are adding new items to the end and then sorting them\n                // in place. In future we should insert new items in place.\n                newChildren.push(newItem)\n            }\n        } else if (j >= lastFreeIndex) {\n            // Add any leftover non-keyed items\n            newChildren.push(newItem)\n        }\n    }\n\n    var simulate = newChildren.slice()\n    var simulateIndex = 0\n    var removes = []\n    var inserts = []\n    var simulateItem\n\n    for (var k = 0; k < bChildren.length;) {\n        var wantedItem = bChildren[k]\n        simulateItem = simulate[simulateIndex]\n\n        // remove items\n        while (simulateItem === null && simulate.length) {\n            removes.push(remove(simulate, simulateIndex, null))\n            simulateItem = simulate[simulateIndex]\n        }\n\n        if (!simulateItem || simulateItem.key !== wantedItem.key) {\n            // if we need a key in this position...\n            if (wantedItem.key) {\n                if (simulateItem && simulateItem.key) {\n                    // if an insert doesn't put this key in place, it needs to move\n                    if (bKeys[simulateItem.key] !== k + 1) {\n                        removes.push(remove(simulate, simulateIndex, simulateItem.key))\n                        simulateItem = simulate[simulateIndex]\n                        // if the remove didn't put the wanted item in place, we need to insert it\n                        if (!simulateItem || simulateItem.key !== wantedItem.key) {\n                            inserts.push({key: wantedItem.key, to: k})\n                        }\n                        // items are matching, so skip ahead\n                        else {\n                            simulateIndex++\n                        }\n                    }\n                    else {\n                        inserts.push({key: wantedItem.key, to: k})\n                    }\n                }\n                else {\n                    inserts.push({key: wantedItem.key, to: k})\n                }\n                k++\n            }\n            // a key in simulate has no matching wanted key, remove it\n            else if (simulateItem && simulateItem.key) {\n                removes.push(remove(simulate, simulateIndex, simulateItem.key))\n            }\n        }\n        else {\n            simulateIndex++\n            k++\n        }\n    }\n\n    // remove all the remaining nodes from simulate\n    while(simulateIndex < simulate.length) {\n        simulateItem = simulate[simulateIndex]\n        removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key))\n    }\n\n    // If the only moves we have are deletes then we can just\n    // let the delete patch remove these items.\n    if (removes.length === deletedItems && !inserts.length) {\n        return {\n            children: newChildren,\n            moves: null\n        }\n    }\n\n    return {\n        children: newChildren,\n        moves: {\n            removes: removes,\n            inserts: inserts\n        }\n    }\n}\n\nfunction remove(arr, index, key) {\n    arr.splice(index, 1)\n\n    return {\n        from: index,\n        key: key\n    }\n}\n\nfunction keyIndex(children) {\n    var keys = {}\n    var free = []\n    var length = children.length\n\n    for (var i = 0; i < length; i++) {\n        var child = children[i]\n\n        if (child.key) {\n            keys[child.key] = i\n        } else {\n            free.push(i)\n        }\n    }\n\n    return {\n        keys: keys,     // A hash of key name to index\n        free: free,     // An array of unkeyed item indices\n    }\n}\n\nfunction appendPatch(apply, patch) {\n    if (apply) {\n        if (isArray(apply)) {\n            apply.push(patch)\n        } else {\n            apply = [apply, patch]\n        }\n\n        return apply\n    } else {\n        return patch\n    }\n}\n\n},{\"../vnode/handle-thunk\":11,\"../vnode/is-thunk\":12,\"../vnode/is-vnode\":14,\"../vnode/is-vtext\":15,\"../vnode/is-widget\":16,\"../vnode/vpatch\":19,\"./diff-props\":21,\"x-is-array\":4}],23:[function(require,module,exports){\nvar VNode = require('virtual-dom/vnode/vnode');\nvar VText = require('virtual-dom/vnode/vtext');\nvar diff = require('virtual-dom/vtree/diff');\nvar patch = require('virtual-dom/vdom/patch');\nvar createElement = require('virtual-dom/vdom/create-element');\nvar isHook = require(\"virtual-dom/vnode/is-vhook\");\n\n\nElm.Native.VirtualDom = {};\nElm.Native.VirtualDom.make = function(elm)\n{\n\telm.Native = elm.Native || {};\n\telm.Native.VirtualDom = elm.Native.VirtualDom || {};\n\tif (elm.Native.VirtualDom.values)\n\t{\n\t\treturn elm.Native.VirtualDom.values;\n\t}\n\n\tvar Element = Elm.Native.Graphics.Element.make(elm);\n\tvar Json = Elm.Native.Json.make(elm);\n\tvar List = Elm.Native.List.make(elm);\n\tvar Signal = Elm.Native.Signal.make(elm);\n\tvar Utils = Elm.Native.Utils.make(elm);\n\n\tvar ATTRIBUTE_KEY = 'UniqueNameThatOthersAreVeryUnlikelyToUse';\n\n\n\n\t// VIRTUAL DOM NODES\n\n\n\tfunction text(string)\n\t{\n\t\treturn new VText(string);\n\t}\n\n\tfunction node(name)\n\t{\n\t\treturn F2(function(propertyList, contents) {\n\t\t\treturn makeNode(name, propertyList, contents);\n\t\t});\n\t}\n\n\n\t// BUILD VIRTUAL DOME NODES\n\n\n\tfunction makeNode(name, propertyList, contents)\n\t{\n\t\tvar props = listToProperties(propertyList);\n\n\t\tvar key, namespace;\n\t\t// support keys\n\t\tif (props.key !== undefined)\n\t\t{\n\t\t\tkey = props.key;\n\t\t\tprops.key = undefined;\n\t\t}\n\n\t\t// support namespace\n\t\tif (props.namespace !== undefined)\n\t\t{\n\t\t\tnamespace = props.namespace;\n\t\t\tprops.namespace = undefined;\n\t\t}\n\n\t\t// ensure that setting text of an input does not move the cursor\n\t\tvar useSoftSet =\n\t\t\t(name === 'input' || name === 'textarea')\n\t\t\t&& props.value !== undefined\n\t\t\t&& !isHook(props.value);\n\n\t\tif (useSoftSet)\n\t\t{\n\t\t\tprops.value = SoftSetHook(props.value);\n\t\t}\n\n\t\treturn new VNode(name, props, List.toArray(contents), key, namespace);\n\t}\n\n\tfunction listToProperties(list)\n\t{\n\t\tvar object = {};\n\t\twhile (list.ctor !== '[]')\n\t\t{\n\t\t\tvar entry = list._0;\n\t\t\tif (entry.key === ATTRIBUTE_KEY)\n\t\t\t{\n\t\t\t\tobject.attributes = object.attributes || {};\n\t\t\t\tobject.attributes[entry.value.attrKey] = entry.value.attrValue;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tobject[entry.key] = entry.value;\n\t\t\t}\n\t\t\tlist = list._1;\n\t\t}\n\t\treturn object;\n\t}\n\n\n\n\t// PROPERTIES AND ATTRIBUTES\n\n\n\tfunction property(key, value)\n\t{\n\t\treturn {\n\t\t\tkey: key,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tfunction attribute(key, value)\n\t{\n\t\treturn {\n\t\t\tkey: ATTRIBUTE_KEY,\n\t\t\tvalue: {\n\t\t\t\tattrKey: key,\n\t\t\t\tattrValue: value\n\t\t\t}\n\t\t};\n\t}\n\n\n\n\t// NAMESPACED ATTRIBUTES\n\n\n\tfunction attributeNS(namespace, key, value)\n\t{\n\t\treturn {\n\t\t\tkey: key,\n\t\t\tvalue: new AttributeHook(namespace, key, value)\n\t\t};\n\t}\n\n\tfunction AttributeHook(namespace, key, value)\n\t{\n\t\tif (!(this instanceof AttributeHook))\n\t\t{\n\t\t\treturn new AttributeHook(namespace, key, value);\n\t\t}\n\n\t\tthis.namespace = namespace;\n\t\tthis.key = key;\n\t\tthis.value = value;\n\t}\n\n\tAttributeHook.prototype.hook = function (node, prop, prev)\n\t{\n\t\tif (prev\n\t\t\t&& prev.type === 'AttributeHook'\n\t\t\t&& prev.value === this.value\n\t\t\t&& prev.namespace === this.namespace)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tnode.setAttributeNS(this.namespace, prop, this.value);\n\t};\n\n\tAttributeHook.prototype.unhook = function (node, prop, next)\n\t{\n\t\tif (next\n\t\t\t&& next.type === 'AttributeHook'\n\t\t\t&& next.namespace === this.namespace)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tnode.removeAttributeNS(this.namespace, this.key);\n\t};\n\n\tAttributeHook.prototype.type = 'AttributeHook';\n\n\n\n\t// EVENTS\n\n\n\tfunction on(name, options, decoder, createMessage)\n\t{\n\t\tfunction eventHandler(event)\n\t\t{\n\t\t\tvar value = A2(Json.runDecoderValue, decoder, event);\n\t\t\tif (value.ctor === 'Ok')\n\t\t\t{\n\t\t\t\tif (options.stopPropagation)\n\t\t\t\t{\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t\tif (options.preventDefault)\n\t\t\t\t{\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tSignal.sendMessage(createMessage(value._0));\n\t\t\t}\n\t\t}\n\t\treturn property('on' + name, eventHandler);\n\t}\n\n\tfunction SoftSetHook(value)\n\t{\n\t\tif (!(this instanceof SoftSetHook))\n\t\t{\n\t\t\treturn new SoftSetHook(value);\n\t\t}\n\n\t\tthis.value = value;\n\t}\n\n\tSoftSetHook.prototype.hook = function (node, propertyName)\n\t{\n\t\tif (node[propertyName] !== this.value)\n\t\t{\n\t\t\tnode[propertyName] = this.value;\n\t\t}\n\t};\n\n\n\n\t// INTEGRATION WITH ELEMENTS\n\n\n\tfunction ElementWidget(element)\n\t{\n\t\tthis.element = element;\n\t}\n\n\tElementWidget.prototype.type = \"Widget\";\n\n\tElementWidget.prototype.init = function init()\n\t{\n\t\treturn Element.render(this.element);\n\t};\n\n\tElementWidget.prototype.update = function update(previous, node)\n\t{\n\t\treturn Element.update(node, previous.element, this.element);\n\t};\n\n\tfunction fromElement(element)\n\t{\n\t\treturn new ElementWidget(element);\n\t}\n\n\tfunction toElement(width, height, html)\n\t{\n\t\treturn A3(Element.newElement, width, height, {\n\t\t\tctor: 'Custom',\n\t\t\ttype: 'evancz/elm-html',\n\t\t\trender: render,\n\t\t\tupdate: update,\n\t\t\tmodel: html\n\t\t});\n\t}\n\n\n\n\t// RENDER AND UPDATE\n\n\n\tfunction render(model)\n\t{\n\t\tvar element = Element.createNode('div');\n\t\telement.appendChild(createElement(model));\n\t\treturn element;\n\t}\n\n\tfunction update(node, oldModel, newModel)\n\t{\n\t\tupdateAndReplace(node.firstChild, oldModel, newModel);\n\t\treturn node;\n\t}\n\n\tfunction updateAndReplace(node, oldModel, newModel)\n\t{\n\t\tvar patches = diff(oldModel, newModel);\n\t\tvar newNode = patch(node, patches);\n\t\treturn newNode;\n\t}\n\n\n\n\t// LAZINESS\n\n\n\tfunction lazyRef(fn, a)\n\t{\n\t\tfunction thunk()\n\t\t{\n\t\t\treturn fn(a);\n\t\t}\n\t\treturn new Thunk(fn, [a], thunk);\n\t}\n\n\tfunction lazyRef2(fn, a, b)\n\t{\n\t\tfunction thunk()\n\t\t{\n\t\t\treturn A2(fn, a, b);\n\t\t}\n\t\treturn new Thunk(fn, [a,b], thunk);\n\t}\n\n\tfunction lazyRef3(fn, a, b, c)\n\t{\n\t\tfunction thunk()\n\t\t{\n\t\t\treturn A3(fn, a, b, c);\n\t\t}\n\t\treturn new Thunk(fn, [a,b,c], thunk);\n\t}\n\n\tfunction Thunk(fn, args, thunk)\n\t{\n\t\t/* public (used by VirtualDom.js) */\n\t\tthis.vnode = null;\n\t\tthis.key = undefined;\n\n\t\t/* private */\n\t\tthis.fn = fn;\n\t\tthis.args = args;\n\t\tthis.thunk = thunk;\n\t}\n\n\tThunk.prototype.type = \"Thunk\";\n\tThunk.prototype.render = renderThunk;\n\n\tfunction shouldUpdate(current, previous)\n\t{\n\t\tif (current.fn !== previous.fn)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\t// if it's the same function, we know the number of args must match\n\t\tvar cargs = current.args;\n\t\tvar pargs = previous.args;\n\n\t\tfor (var i = cargs.length; i--; )\n\t\t{\n\t\t\tif (cargs[i] !== pargs[i])\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction renderThunk(previous)\n\t{\n\t\tif (previous == null || shouldUpdate(this, previous))\n\t\t{\n\t\t\treturn this.thunk();\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn previous.vnode;\n\t\t}\n\t}\n\n\n\treturn elm.Native.VirtualDom.values = Elm.Native.VirtualDom.values = {\n\t\tnode: node,\n\t\ttext: text,\n\t\ton: F4(on),\n\n\t\tproperty: F2(property),\n\t\tattribute: F2(attribute),\n\t\tattributeNS: F3(attributeNS),\n\n\t\tlazy: F2(lazyRef),\n\t\tlazy2: F3(lazyRef2),\n\t\tlazy3: F4(lazyRef3),\n\n\t\ttoElement: F3(toElement),\n\t\tfromElement: fromElement,\n\n\t\trender: createElement,\n\t\tupdateAndReplace: updateAndReplace\n\t};\n};\n\n},{\"virtual-dom/vdom/create-element\":6,\"virtual-dom/vdom/patch\":9,\"virtual-dom/vnode/is-vhook\":13,\"virtual-dom/vnode/vnode\":18,\"virtual-dom/vnode/vtext\":20,\"virtual-dom/vtree/diff\":22}]},{},[23]);\n\nElm.VirtualDom = Elm.VirtualDom || {};\nElm.VirtualDom.make = function (_elm) {\n   \"use strict\";\n   _elm.VirtualDom = _elm.VirtualDom || {};\n   if (_elm.VirtualDom.values) return _elm.VirtualDom.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Graphics$Element = Elm.Graphics.Element.make(_elm),\n   $Json$Decode = Elm.Json.Decode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$VirtualDom = Elm.Native.VirtualDom.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var lazy3 = $Native$VirtualDom.lazy3;\n   var lazy2 = $Native$VirtualDom.lazy2;\n   var lazy = $Native$VirtualDom.lazy;\n   var defaultOptions = {stopPropagation: false,preventDefault: false};\n   var Options = F2(function (a,b) {    return {stopPropagation: a,preventDefault: b};});\n   var onWithOptions = $Native$VirtualDom.on;\n   var on = F3(function (eventName,decoder,toMessage) {    return A4($Native$VirtualDom.on,eventName,defaultOptions,decoder,toMessage);});\n   var attributeNS = $Native$VirtualDom.attributeNS;\n   var attribute = $Native$VirtualDom.attribute;\n   var property = $Native$VirtualDom.property;\n   var Property = {ctor: \"Property\"};\n   var fromElement = $Native$VirtualDom.fromElement;\n   var toElement = $Native$VirtualDom.toElement;\n   var text = $Native$VirtualDom.text;\n   var node = $Native$VirtualDom.node;\n   var Node = {ctor: \"Node\"};\n   return _elm.VirtualDom.values = {_op: _op\n                                   ,text: text\n                                   ,node: node\n                                   ,toElement: toElement\n                                   ,fromElement: fromElement\n                                   ,property: property\n                                   ,attribute: attribute\n                                   ,attributeNS: attributeNS\n                                   ,on: on\n                                   ,onWithOptions: onWithOptions\n                                   ,defaultOptions: defaultOptions\n                                   ,lazy: lazy\n                                   ,lazy2: lazy2\n                                   ,lazy3: lazy3\n                                   ,Options: Options};\n};\nElm.Html = Elm.Html || {};\nElm.Html.make = function (_elm) {\n   \"use strict\";\n   _elm.Html = _elm.Html || {};\n   if (_elm.Html.values) return _elm.Html.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Graphics$Element = Elm.Graphics.Element.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $VirtualDom = Elm.VirtualDom.make(_elm);\n   var _op = {};\n   var fromElement = $VirtualDom.fromElement;\n   var toElement = $VirtualDom.toElement;\n   var text = $VirtualDom.text;\n   var node = $VirtualDom.node;\n   var body = node(\"body\");\n   var section = node(\"section\");\n   var nav = node(\"nav\");\n   var article = node(\"article\");\n   var aside = node(\"aside\");\n   var h1 = node(\"h1\");\n   var h2 = node(\"h2\");\n   var h3 = node(\"h3\");\n   var h4 = node(\"h4\");\n   var h5 = node(\"h5\");\n   var h6 = node(\"h6\");\n   var header = node(\"header\");\n   var footer = node(\"footer\");\n   var address = node(\"address\");\n   var main$ = node(\"main\");\n   var p = node(\"p\");\n   var hr = node(\"hr\");\n   var pre = node(\"pre\");\n   var blockquote = node(\"blockquote\");\n   var ol = node(\"ol\");\n   var ul = node(\"ul\");\n   var li = node(\"li\");\n   var dl = node(\"dl\");\n   var dt = node(\"dt\");\n   var dd = node(\"dd\");\n   var figure = node(\"figure\");\n   var figcaption = node(\"figcaption\");\n   var div = node(\"div\");\n   var a = node(\"a\");\n   var em = node(\"em\");\n   var strong = node(\"strong\");\n   var small = node(\"small\");\n   var s = node(\"s\");\n   var cite = node(\"cite\");\n   var q = node(\"q\");\n   var dfn = node(\"dfn\");\n   var abbr = node(\"abbr\");\n   var time = node(\"time\");\n   var code = node(\"code\");\n   var $var = node(\"var\");\n   var samp = node(\"samp\");\n   var kbd = node(\"kbd\");\n   var sub = node(\"sub\");\n   var sup = node(\"sup\");\n   var i = node(\"i\");\n   var b = node(\"b\");\n   var u = node(\"u\");\n   var mark = node(\"mark\");\n   var ruby = node(\"ruby\");\n   var rt = node(\"rt\");\n   var rp = node(\"rp\");\n   var bdi = node(\"bdi\");\n   var bdo = node(\"bdo\");\n   var span = node(\"span\");\n   var br = node(\"br\");\n   var wbr = node(\"wbr\");\n   var ins = node(\"ins\");\n   var del = node(\"del\");\n   var img = node(\"img\");\n   var iframe = node(\"iframe\");\n   var embed = node(\"embed\");\n   var object = node(\"object\");\n   var param = node(\"param\");\n   var video = node(\"video\");\n   var audio = node(\"audio\");\n   var source = node(\"source\");\n   var track = node(\"track\");\n   var canvas = node(\"canvas\");\n   var svg = node(\"svg\");\n   var math = node(\"math\");\n   var table = node(\"table\");\n   var caption = node(\"caption\");\n   var colgroup = node(\"colgroup\");\n   var col = node(\"col\");\n   var tbody = node(\"tbody\");\n   var thead = node(\"thead\");\n   var tfoot = node(\"tfoot\");\n   var tr = node(\"tr\");\n   var td = node(\"td\");\n   var th = node(\"th\");\n   var form = node(\"form\");\n   var fieldset = node(\"fieldset\");\n   var legend = node(\"legend\");\n   var label = node(\"label\");\n   var input = node(\"input\");\n   var button = node(\"button\");\n   var select = node(\"select\");\n   var datalist = node(\"datalist\");\n   var optgroup = node(\"optgroup\");\n   var option = node(\"option\");\n   var textarea = node(\"textarea\");\n   var keygen = node(\"keygen\");\n   var output = node(\"output\");\n   var progress = node(\"progress\");\n   var meter = node(\"meter\");\n   var details = node(\"details\");\n   var summary = node(\"summary\");\n   var menuitem = node(\"menuitem\");\n   var menu = node(\"menu\");\n   return _elm.Html.values = {_op: _op\n                             ,node: node\n                             ,text: text\n                             ,toElement: toElement\n                             ,fromElement: fromElement\n                             ,body: body\n                             ,section: section\n                             ,nav: nav\n                             ,article: article\n                             ,aside: aside\n                             ,h1: h1\n                             ,h2: h2\n                             ,h3: h3\n                             ,h4: h4\n                             ,h5: h5\n                             ,h6: h6\n                             ,header: header\n                             ,footer: footer\n                             ,address: address\n                             ,main$: main$\n                             ,p: p\n                             ,hr: hr\n                             ,pre: pre\n                             ,blockquote: blockquote\n                             ,ol: ol\n                             ,ul: ul\n                             ,li: li\n                             ,dl: dl\n                             ,dt: dt\n                             ,dd: dd\n                             ,figure: figure\n                             ,figcaption: figcaption\n                             ,div: div\n                             ,a: a\n                             ,em: em\n                             ,strong: strong\n                             ,small: small\n                             ,s: s\n                             ,cite: cite\n                             ,q: q\n                             ,dfn: dfn\n                             ,abbr: abbr\n                             ,time: time\n                             ,code: code\n                             ,$var: $var\n                             ,samp: samp\n                             ,kbd: kbd\n                             ,sub: sub\n                             ,sup: sup\n                             ,i: i\n                             ,b: b\n                             ,u: u\n                             ,mark: mark\n                             ,ruby: ruby\n                             ,rt: rt\n                             ,rp: rp\n                             ,bdi: bdi\n                             ,bdo: bdo\n                             ,span: span\n                             ,br: br\n                             ,wbr: wbr\n                             ,ins: ins\n                             ,del: del\n                             ,img: img\n                             ,iframe: iframe\n                             ,embed: embed\n                             ,object: object\n                             ,param: param\n                             ,video: video\n                             ,audio: audio\n                             ,source: source\n                             ,track: track\n                             ,canvas: canvas\n                             ,svg: svg\n                             ,math: math\n                             ,table: table\n                             ,caption: caption\n                             ,colgroup: colgroup\n                             ,col: col\n                             ,tbody: tbody\n                             ,thead: thead\n                             ,tfoot: tfoot\n                             ,tr: tr\n                             ,td: td\n                             ,th: th\n                             ,form: form\n                             ,fieldset: fieldset\n                             ,legend: legend\n                             ,label: label\n                             ,input: input\n                             ,button: button\n                             ,select: select\n                             ,datalist: datalist\n                             ,optgroup: optgroup\n                             ,option: option\n                             ,textarea: textarea\n                             ,keygen: keygen\n                             ,output: output\n                             ,progress: progress\n                             ,meter: meter\n                             ,details: details\n                             ,summary: summary\n                             ,menuitem: menuitem\n                             ,menu: menu};\n};\nElm.Html = Elm.Html || {};\nElm.Html.Attributes = Elm.Html.Attributes || {};\nElm.Html.Attributes.make = function (_elm) {\n   \"use strict\";\n   _elm.Html = _elm.Html || {};\n   _elm.Html.Attributes = _elm.Html.Attributes || {};\n   if (_elm.Html.Attributes.values) return _elm.Html.Attributes.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $Json$Encode = Elm.Json.Encode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $String = Elm.String.make(_elm),\n   $VirtualDom = Elm.VirtualDom.make(_elm);\n   var _op = {};\n   var attribute = $VirtualDom.attribute;\n   var contextmenu = function (value) {    return A2(attribute,\"contextmenu\",value);};\n   var property = $VirtualDom.property;\n   var stringProperty = F2(function (name,string) {    return A2(property,name,$Json$Encode.string(string));});\n   var $class = function (name) {    return A2(stringProperty,\"className\",name);};\n   var id = function (name) {    return A2(stringProperty,\"id\",name);};\n   var title = function (name) {    return A2(stringProperty,\"title\",name);};\n   var accesskey = function ($char) {    return A2(stringProperty,\"accessKey\",$String.fromChar($char));};\n   var dir = function (value) {    return A2(stringProperty,\"dir\",value);};\n   var draggable = function (value) {    return A2(stringProperty,\"draggable\",value);};\n   var dropzone = function (value) {    return A2(stringProperty,\"dropzone\",value);};\n   var itemprop = function (value) {    return A2(stringProperty,\"itemprop\",value);};\n   var lang = function (value) {    return A2(stringProperty,\"lang\",value);};\n   var tabindex = function (n) {    return A2(stringProperty,\"tabIndex\",$Basics.toString(n));};\n   var charset = function (value) {    return A2(stringProperty,\"charset\",value);};\n   var content = function (value) {    return A2(stringProperty,\"content\",value);};\n   var httpEquiv = function (value) {    return A2(stringProperty,\"httpEquiv\",value);};\n   var language = function (value) {    return A2(stringProperty,\"language\",value);};\n   var src = function (value) {    return A2(stringProperty,\"src\",value);};\n   var height = function (value) {    return A2(stringProperty,\"height\",$Basics.toString(value));};\n   var width = function (value) {    return A2(stringProperty,\"width\",$Basics.toString(value));};\n   var alt = function (value) {    return A2(stringProperty,\"alt\",value);};\n   var preload = function (value) {    return A2(stringProperty,\"preload\",value);};\n   var poster = function (value) {    return A2(stringProperty,\"poster\",value);};\n   var kind = function (value) {    return A2(stringProperty,\"kind\",value);};\n   var srclang = function (value) {    return A2(stringProperty,\"srclang\",value);};\n   var sandbox = function (value) {    return A2(stringProperty,\"sandbox\",value);};\n   var srcdoc = function (value) {    return A2(stringProperty,\"srcdoc\",value);};\n   var type$ = function (value) {    return A2(stringProperty,\"type\",value);};\n   var value = function (value) {    return A2(stringProperty,\"value\",value);};\n   var placeholder = function (value) {    return A2(stringProperty,\"placeholder\",value);};\n   var accept = function (value) {    return A2(stringProperty,\"accept\",value);};\n   var acceptCharset = function (value) {    return A2(stringProperty,\"acceptCharset\",value);};\n   var action = function (value) {    return A2(stringProperty,\"action\",value);};\n   var autocomplete = function (bool) {    return A2(stringProperty,\"autocomplete\",bool ? \"on\" : \"off\");};\n   var autosave = function (value) {    return A2(stringProperty,\"autosave\",value);};\n   var enctype = function (value) {    return A2(stringProperty,\"enctype\",value);};\n   var formaction = function (value) {    return A2(stringProperty,\"formAction\",value);};\n   var list = function (value) {    return A2(stringProperty,\"list\",value);};\n   var minlength = function (n) {    return A2(stringProperty,\"minLength\",$Basics.toString(n));};\n   var maxlength = function (n) {    return A2(stringProperty,\"maxLength\",$Basics.toString(n));};\n   var method = function (value) {    return A2(stringProperty,\"method\",value);};\n   var name = function (value) {    return A2(stringProperty,\"name\",value);};\n   var pattern = function (value) {    return A2(stringProperty,\"pattern\",value);};\n   var size = function (n) {    return A2(stringProperty,\"size\",$Basics.toString(n));};\n   var $for = function (value) {    return A2(stringProperty,\"htmlFor\",value);};\n   var form = function (value) {    return A2(stringProperty,\"form\",value);};\n   var max = function (value) {    return A2(stringProperty,\"max\",value);};\n   var min = function (value) {    return A2(stringProperty,\"min\",value);};\n   var step = function (n) {    return A2(stringProperty,\"step\",n);};\n   var cols = function (n) {    return A2(stringProperty,\"cols\",$Basics.toString(n));};\n   var rows = function (n) {    return A2(stringProperty,\"rows\",$Basics.toString(n));};\n   var wrap = function (value) {    return A2(stringProperty,\"wrap\",value);};\n   var usemap = function (value) {    return A2(stringProperty,\"useMap\",value);};\n   var shape = function (value) {    return A2(stringProperty,\"shape\",value);};\n   var coords = function (value) {    return A2(stringProperty,\"coords\",value);};\n   var challenge = function (value) {    return A2(stringProperty,\"challenge\",value);};\n   var keytype = function (value) {    return A2(stringProperty,\"keytype\",value);};\n   var align = function (value) {    return A2(stringProperty,\"align\",value);};\n   var cite = function (value) {    return A2(stringProperty,\"cite\",value);};\n   var href = function (value) {    return A2(stringProperty,\"href\",value);};\n   var target = function (value) {    return A2(stringProperty,\"target\",value);};\n   var downloadAs = function (value) {    return A2(stringProperty,\"download\",value);};\n   var hreflang = function (value) {    return A2(stringProperty,\"hreflang\",value);};\n   var media = function (value) {    return A2(stringProperty,\"media\",value);};\n   var ping = function (value) {    return A2(stringProperty,\"ping\",value);};\n   var rel = function (value) {    return A2(stringProperty,\"rel\",value);};\n   var datetime = function (value) {    return A2(stringProperty,\"datetime\",value);};\n   var pubdate = function (value) {    return A2(stringProperty,\"pubdate\",value);};\n   var start = function (n) {    return A2(stringProperty,\"start\",$Basics.toString(n));};\n   var colspan = function (n) {    return A2(stringProperty,\"colSpan\",$Basics.toString(n));};\n   var headers = function (value) {    return A2(stringProperty,\"headers\",value);};\n   var rowspan = function (n) {    return A2(stringProperty,\"rowSpan\",$Basics.toString(n));};\n   var scope = function (value) {    return A2(stringProperty,\"scope\",value);};\n   var manifest = function (value) {    return A2(stringProperty,\"manifest\",value);};\n   var boolProperty = F2(function (name,bool) {    return A2(property,name,$Json$Encode.bool(bool));});\n   var hidden = function (bool) {    return A2(boolProperty,\"hidden\",bool);};\n   var contenteditable = function (bool) {    return A2(boolProperty,\"contentEditable\",bool);};\n   var spellcheck = function (bool) {    return A2(boolProperty,\"spellcheck\",bool);};\n   var async = function (bool) {    return A2(boolProperty,\"async\",bool);};\n   var defer = function (bool) {    return A2(boolProperty,\"defer\",bool);};\n   var scoped = function (bool) {    return A2(boolProperty,\"scoped\",bool);};\n   var autoplay = function (bool) {    return A2(boolProperty,\"autoplay\",bool);};\n   var controls = function (bool) {    return A2(boolProperty,\"controls\",bool);};\n   var loop = function (bool) {    return A2(boolProperty,\"loop\",bool);};\n   var $default = function (bool) {    return A2(boolProperty,\"default\",bool);};\n   var seamless = function (bool) {    return A2(boolProperty,\"seamless\",bool);};\n   var checked = function (bool) {    return A2(boolProperty,\"checked\",bool);};\n   var selected = function (bool) {    return A2(boolProperty,\"selected\",bool);};\n   var autofocus = function (bool) {    return A2(boolProperty,\"autofocus\",bool);};\n   var disabled = function (bool) {    return A2(boolProperty,\"disabled\",bool);};\n   var multiple = function (bool) {    return A2(boolProperty,\"multiple\",bool);};\n   var novalidate = function (bool) {    return A2(boolProperty,\"noValidate\",bool);};\n   var readonly = function (bool) {    return A2(boolProperty,\"readOnly\",bool);};\n   var required = function (bool) {    return A2(boolProperty,\"required\",bool);};\n   var ismap = function (value) {    return A2(boolProperty,\"isMap\",value);};\n   var download = function (bool) {    return A2(boolProperty,\"download\",bool);};\n   var reversed = function (bool) {    return A2(boolProperty,\"reversed\",bool);};\n   var classList = function (list) {    return $class(A2($String.join,\" \",A2($List.map,$Basics.fst,A2($List.filter,$Basics.snd,list))));};\n   var style = function (props) {\n      return A2(property,\n      \"style\",\n      $Json$Encode.object(A2($List.map,function (_p0) {    var _p1 = _p0;return {ctor: \"_Tuple2\",_0: _p1._0,_1: $Json$Encode.string(_p1._1)};},props)));\n   };\n   var key = function (k) {    return A2(stringProperty,\"key\",k);};\n   return _elm.Html.Attributes.values = {_op: _op\n                                        ,key: key\n                                        ,style: style\n                                        ,$class: $class\n                                        ,classList: classList\n                                        ,id: id\n                                        ,title: title\n                                        ,hidden: hidden\n                                        ,type$: type$\n                                        ,value: value\n                                        ,checked: checked\n                                        ,placeholder: placeholder\n                                        ,selected: selected\n                                        ,accept: accept\n                                        ,acceptCharset: acceptCharset\n                                        ,action: action\n                                        ,autocomplete: autocomplete\n                                        ,autofocus: autofocus\n                                        ,autosave: autosave\n                                        ,disabled: disabled\n                                        ,enctype: enctype\n                                        ,formaction: formaction\n                                        ,list: list\n                                        ,maxlength: maxlength\n                                        ,minlength: minlength\n                                        ,method: method\n                                        ,multiple: multiple\n                                        ,name: name\n                                        ,novalidate: novalidate\n                                        ,pattern: pattern\n                                        ,readonly: readonly\n                                        ,required: required\n                                        ,size: size\n                                        ,$for: $for\n                                        ,form: form\n                                        ,max: max\n                                        ,min: min\n                                        ,step: step\n                                        ,cols: cols\n                                        ,rows: rows\n                                        ,wrap: wrap\n                                        ,href: href\n                                        ,target: target\n                                        ,download: download\n                                        ,downloadAs: downloadAs\n                                        ,hreflang: hreflang\n                                        ,media: media\n                                        ,ping: ping\n                                        ,rel: rel\n                                        ,ismap: ismap\n                                        ,usemap: usemap\n                                        ,shape: shape\n                                        ,coords: coords\n                                        ,src: src\n                                        ,height: height\n                                        ,width: width\n                                        ,alt: alt\n                                        ,autoplay: autoplay\n                                        ,controls: controls\n                                        ,loop: loop\n                                        ,preload: preload\n                                        ,poster: poster\n                                        ,$default: $default\n                                        ,kind: kind\n                                        ,srclang: srclang\n                                        ,sandbox: sandbox\n                                        ,seamless: seamless\n                                        ,srcdoc: srcdoc\n                                        ,reversed: reversed\n                                        ,start: start\n                                        ,align: align\n                                        ,colspan: colspan\n                                        ,rowspan: rowspan\n                                        ,headers: headers\n                                        ,scope: scope\n                                        ,async: async\n                                        ,charset: charset\n                                        ,content: content\n                                        ,defer: defer\n                                        ,httpEquiv: httpEquiv\n                                        ,language: language\n                                        ,scoped: scoped\n                                        ,accesskey: accesskey\n                                        ,contenteditable: contenteditable\n                                        ,contextmenu: contextmenu\n                                        ,dir: dir\n                                        ,draggable: draggable\n                                        ,dropzone: dropzone\n                                        ,itemprop: itemprop\n                                        ,lang: lang\n                                        ,spellcheck: spellcheck\n                                        ,tabindex: tabindex\n                                        ,challenge: challenge\n                                        ,keytype: keytype\n                                        ,cite: cite\n                                        ,datetime: datetime\n                                        ,pubdate: pubdate\n                                        ,manifest: manifest\n                                        ,property: property\n                                        ,attribute: attribute};\n};\nElm.Native.Effects = {};\nElm.Native.Effects.make = function(localRuntime) {\n\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Effects = localRuntime.Native.Effects || {};\n\tif (localRuntime.Native.Effects.values)\n\t{\n\t\treturn localRuntime.Native.Effects.values;\n\t}\n\n\tvar Task = Elm.Native.Task.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\tvar Signal = Elm.Signal.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\n\n\t// polyfill so things will work even if rAF is not available for some reason\n\tvar _requestAnimationFrame =\n\t\ttypeof requestAnimationFrame !== 'undefined'\n\t\t\t? requestAnimationFrame\n\t\t\t: function(cb) { setTimeout(cb, 1000 / 60); }\n\t\t\t;\n\n\n\t// batchedSending and sendCallback implement a small state machine in order\n\t// to schedule only one send(time) call per animation frame.\n\t//\n\t// Invariants:\n\t// 1. In the NO_REQUEST state, there is never a scheduled sendCallback.\n\t// 2. In the PENDING_REQUEST and EXTRA_REQUEST states, there is always exactly\n\t//    one scheduled sendCallback.\n\tvar NO_REQUEST = 0;\n\tvar PENDING_REQUEST = 1;\n\tvar EXTRA_REQUEST = 2;\n\tvar state = NO_REQUEST;\n\tvar messageArray = [];\n\n\n\tfunction batchedSending(address, tickMessages)\n\t{\n\t\t// insert ticks into the messageArray\n\t\tvar foundAddress = false;\n\n\t\tfor (var i = messageArray.length; i--; )\n\t\t{\n\t\t\tif (messageArray[i].address === address)\n\t\t\t{\n\t\t\t\tfoundAddress = true;\n\t\t\t\tmessageArray[i].tickMessages = A3(List.foldl, List.cons, messageArray[i].tickMessages, tickMessages);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!foundAddress)\n\t\t{\n\t\t\tmessageArray.push({ address: address, tickMessages: tickMessages });\n\t\t}\n\n\t\t// do the appropriate state transition\n\t\tswitch (state)\n\t\t{\n\t\t\tcase NO_REQUEST:\n\t\t\t\t_requestAnimationFrame(sendCallback);\n\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\tbreak;\n\t\t\tcase PENDING_REQUEST:\n\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\tbreak;\n\t\t\tcase EXTRA_REQUEST:\n\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\n\tfunction sendCallback(time)\n\t{\n\t\tswitch (state)\n\t\t{\n\t\t\tcase NO_REQUEST:\n\t\t\t\t// This state should not be possible. How can there be no\n\t\t\t\t// request, yet somehow we are actively fulfilling a\n\t\t\t\t// request?\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Unexpected send callback.\\n' +\n\t\t\t\t\t'Please report this to <https://github.com/evancz/elm-effects/issues>.'\n\t\t\t\t);\n\n\t\t\tcase PENDING_REQUEST:\n\t\t\t\t// At this point, we do not *know* that another frame is\n\t\t\t\t// needed, but we make an extra request to rAF just in\n\t\t\t\t// case. It's possible to drop a frame if rAF is called\n\t\t\t\t// too late, so we just do it preemptively.\n\t\t\t\t_requestAnimationFrame(sendCallback);\n\t\t\t\tstate = EXTRA_REQUEST;\n\n\t\t\t\t// There's also stuff we definitely need to send.\n\t\t\t\tsend(time);\n\t\t\t\treturn;\n\n\t\t\tcase EXTRA_REQUEST:\n\t\t\t\t// Turns out the extra request was not needed, so we will\n\t\t\t\t// stop calling rAF. No reason to call it all the time if\n\t\t\t\t// no one needs it.\n\t\t\t\tstate = NO_REQUEST;\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\n\tfunction send(time)\n\t{\n\t\tfor (var i = messageArray.length; i--; )\n\t\t{\n\t\t\tvar messages = A3(\n\t\t\t\tList.foldl,\n\t\t\t\tF2( function(toAction, list) { return List.Cons(toAction(time), list); } ),\n\t\t\t\tList.Nil,\n\t\t\t\tmessageArray[i].tickMessages\n\t\t\t);\n\t\t\tTask.perform( A2(Signal.send, messageArray[i].address, messages) );\n\t\t}\n\t\tmessageArray = [];\n\t}\n\n\n\tfunction requestTickSending(address, tickMessages)\n\t{\n\t\treturn Task.asyncFunction(function(callback) {\n\t\t\tbatchedSending(address, tickMessages);\n\t\t\tcallback(Task.succeed(Utils.Tuple0));\n\t\t});\n\t}\n\n\n\treturn localRuntime.Native.Effects.values = {\n\t\trequestTickSending: F2(requestTickSending)\n\t};\n\n};\n\nElm.Effects = Elm.Effects || {};\nElm.Effects.make = function (_elm) {\n   \"use strict\";\n   _elm.Effects = _elm.Effects || {};\n   if (_elm.Effects.values) return _elm.Effects.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Effects = Elm.Native.Effects.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $Task = Elm.Task.make(_elm),\n   $Time = Elm.Time.make(_elm);\n   var _op = {};\n   var ignore = function (task) {    return A2($Task.map,$Basics.always({ctor: \"_Tuple0\"}),task);};\n   var requestTickSending = $Native$Effects.requestTickSending;\n   var toTaskHelp = F3(function (address,effect,_p0) {\n      var _p1 = _p0;\n      var _p5 = _p1._1;\n      var _p4 = _p1;\n      var _p3 = _p1._0;\n      var _p2 = effect;\n      switch (_p2.ctor)\n      {case \"Task\": var reporter = A2($Task.andThen,_p2._0,function (answer) {    return A2($Signal.send,address,_U.list([answer]));});\n           return {ctor: \"_Tuple2\",_0: A2($Task.andThen,_p3,$Basics.always(ignore($Task.spawn(reporter)))),_1: _p5};\n         case \"Tick\": return {ctor: \"_Tuple2\",_0: _p3,_1: A2($List._op[\"::\"],_p2._0,_p5)};\n         case \"None\": return _p4;\n         default: return A3($List.foldl,toTaskHelp(address),_p4,_p2._0);}\n   });\n   var toTask = F2(function (address,effect) {\n      var _p6 = A3(toTaskHelp,address,effect,{ctor: \"_Tuple2\",_0: $Task.succeed({ctor: \"_Tuple0\"}),_1: _U.list([])});\n      var combinedTask = _p6._0;\n      var tickMessages = _p6._1;\n      return $List.isEmpty(tickMessages) ? combinedTask : A2($Task.andThen,combinedTask,$Basics.always(A2(requestTickSending,address,tickMessages)));\n   });\n   var Never = function (a) {    return {ctor: \"Never\",_0: a};};\n   var Batch = function (a) {    return {ctor: \"Batch\",_0: a};};\n   var batch = Batch;\n   var None = {ctor: \"None\"};\n   var none = None;\n   var Tick = function (a) {    return {ctor: \"Tick\",_0: a};};\n   var tick = Tick;\n   var Task = function (a) {    return {ctor: \"Task\",_0: a};};\n   var task = Task;\n   var map = F2(function (func,effect) {\n      var _p7 = effect;\n      switch (_p7.ctor)\n      {case \"Task\": return Task(A2($Task.map,func,_p7._0));\n         case \"Tick\": return Tick(function (_p8) {    return func(_p7._0(_p8));});\n         case \"None\": return None;\n         default: return Batch(A2($List.map,map(func),_p7._0));}\n   });\n   return _elm.Effects.values = {_op: _op,none: none,task: task,tick: tick,map: map,batch: batch,toTask: toTask};\n};\nElm.StartApp = Elm.StartApp || {};\nElm.StartApp.make = function (_elm) {\n   \"use strict\";\n   _elm.StartApp = _elm.StartApp || {};\n   if (_elm.StartApp.values) return _elm.StartApp.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Effects = Elm.Effects.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $Task = Elm.Task.make(_elm);\n   var _op = {};\n   var start = function (config) {\n      var updateStep = F2(function (action,_p0) {\n         var _p1 = _p0;\n         var _p2 = A2(config.update,action,_p1._0);\n         var newModel = _p2._0;\n         var additionalEffects = _p2._1;\n         return {ctor: \"_Tuple2\",_0: newModel,_1: $Effects.batch(_U.list([_p1._1,additionalEffects]))};\n      });\n      var update = F2(function (actions,_p3) {    var _p4 = _p3;return A3($List.foldl,updateStep,{ctor: \"_Tuple2\",_0: _p4._0,_1: $Effects.none},actions);});\n      var messages = $Signal.mailbox(_U.list([]));\n      var singleton = function (action) {    return _U.list([action]);};\n      var address = A2($Signal.forwardTo,messages.address,singleton);\n      var inputs = $Signal.mergeMany(A2($List._op[\"::\"],messages.signal,A2($List.map,$Signal.map(singleton),config.inputs)));\n      var effectsAndModel = A3($Signal.foldp,update,config.init,inputs);\n      var model = A2($Signal.map,$Basics.fst,effectsAndModel);\n      return {html: A2($Signal.map,config.view(address),model)\n             ,model: model\n             ,tasks: A2($Signal.map,function (_p5) {    return A2($Effects.toTask,messages.address,$Basics.snd(_p5));},effectsAndModel)};\n   };\n   var App = F3(function (a,b,c) {    return {html: a,model: b,tasks: c};});\n   var Config = F4(function (a,b,c,d) {    return {init: a,update: b,view: c,inputs: d};});\n   return _elm.StartApp.values = {_op: _op,start: start,Config: Config,App: App};\n};\nElm.Docs = Elm.Docs || {};\nElm.Docs.Name = Elm.Docs.Name || {};\nElm.Docs.Name.make = function (_elm) {\n   \"use strict\";\n   _elm.Docs = _elm.Docs || {};\n   _elm.Docs.Name = _elm.Docs.Name || {};\n   if (_elm.Docs.Name.values) return _elm.Docs.Name.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Dict = Elm.Dict.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $Html$Attributes = Elm.Html.Attributes.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Set = Elm.Set.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $String = Elm.String.make(_elm);\n   var _op = {};\n   var toLink = F2(function (dict,_p0) {\n      var _p1 = _p0;\n      var _p4 = _p1.name;\n      var _p3 = _p1.home;\n      var _p2 = A2($Maybe.map,$Set.member(_p4),A2($Dict.get,_p3,dict));\n      if (_p2.ctor === \"Just\" && _p2._0 === true) {\n            var link = A2($Basics._op[\"++\"],\n            A2($String.map,function (c) {    return _U.eq(c,_U.chr(\".\")) ? _U.chr(\"-\") : c;},_p3),\n            A2($Basics._op[\"++\"],\"#\",_p4));\n            return A2($Html.a,_U.list([$Html$Attributes.href(link)]),_U.list([$Html.text(_p4)]));\n         } else {\n            return $Html.text(_p4);\n         }\n   });\n   var Canonical = F2(function (a,b) {    return {home: a,name: b};});\n   return _elm.Docs.Name.values = {_op: _op,Canonical: Canonical,toLink: toLink};\n};\nElm.Utils = Elm.Utils || {};\nElm.Utils.Code = Elm.Utils.Code || {};\nElm.Utils.Code.make = function (_elm) {\n   \"use strict\";\n   _elm.Utils = _elm.Utils || {};\n   _elm.Utils.Code = _elm.Utils.Code || {};\n   if (_elm.Utils.Code.values) return _elm.Utils.Code.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $Html$Attributes = Elm.Html.Attributes.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var equals = A2($Html.span,_U.list([]),_U.list([$Html.text(\"=\")]));\n   var colon = A2($Html.span,_U.list([]),_U.list([$Html.text(\":\")]));\n   var arrow = A2($Html.span,_U.list([]),_U.list([$Html.text(\"->\")]));\n   var space = $Html.text(\" \");\n   var padded = function (html) {    return _U.list([space,html,space]);};\n   var addParens = function (list) {    return A2($List._op[\"::\"],$Html.text(\"(\"),A2($Basics._op[\"++\"],list,_U.list([$Html.text(\")\")])));};\n   var keyword = function (kw) {    return A2($Html.span,_U.list([$Html$Attributes.$class(\"hljs-keyword\")]),_U.list([$Html.text(kw)]));};\n   return _elm.Utils.Code.values = {_op: _op,keyword: keyword,addParens: addParens,space: space,padded: padded,arrow: arrow,colon: colon,equals: equals};\n};\nElm.Docs = Elm.Docs || {};\nElm.Docs.Type = Elm.Docs.Type || {};\nElm.Docs.Type.make = function (_elm) {\n   \"use strict\";\n   _elm.Docs = _elm.Docs || {};\n   _elm.Docs.Type = _elm.Docs.Type || {};\n   if (_elm.Docs.Type.values) return _elm.Docs.Type.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Docs$Name = Elm.Docs.Name.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $String = Elm.String.make(_elm),\n   $Utils$Code = Elm.Utils.Code.make(_elm);\n   var _op = {};\n   var Other = {ctor: \"Other\"};\n   var App = {ctor: \"App\"};\n   var Func = {ctor: \"Func\"};\n   var toHtml = F3(function (nameDict,context,tipe) {\n      var go = F2(function (ctx,t) {    return A3(toHtml,nameDict,ctx,t);});\n      var _p0 = tipe;\n      switch (_p0.ctor)\n      {case \"Function\": var argsHtml = A2($List.concatMap,\n           function (arg) {\n              return A2($Basics._op[\"++\"],A2(go,Func,arg),$Utils$Code.padded($Utils$Code.arrow));\n           },\n           _p0._0);\n           var maybeAddParens = function () {\n              var _p1 = context;\n              switch (_p1.ctor)\n              {case \"Func\": return $Utils$Code.addParens;\n                 case \"App\": return $Utils$Code.addParens;\n                 default: return $Basics.identity;}\n           }();\n           return maybeAddParens(A2($Basics._op[\"++\"],argsHtml,A2(go,Func,_p0._1)));\n         case \"Var\": return _U.list([$Html.text(_p0._0)]);\n         case \"Apply\": if (_p0._1.ctor === \"[]\") {\n                 return _U.list([A2($Docs$Name.toLink,nameDict,_p0._0)]);\n              } else {\n                 var argsHtml = A2($List.concatMap,function (arg) {    return A2($List._op[\"::\"],$Utils$Code.space,A2(go,App,arg));},_p0._1);\n                 var maybeAddParens = function () {\n                    var _p2 = context;\n                    switch (_p2.ctor)\n                    {case \"Func\": return $Basics.identity;\n                       case \"App\": return $Utils$Code.addParens;\n                       default: return $Basics.identity;}\n                 }();\n                 return maybeAddParens(A2($List._op[\"::\"],A2($Docs$Name.toLink,nameDict,_p0._0),argsHtml));\n              }\n         case \"Tuple\": return $Utils$Code.addParens($List.concat(A2($List.intersperse,_U.list([$Html.text(\", \")]),A2($List.map,go(Other),_p0._0))));\n         default: var fieldsHtml = $List.concat(A2($List.intersperse,_U.list([$Html.text(\", \")]),A2($List.map,fieldToHtml(nameDict),_p0._0)));\n           var recordInsides = function () {\n              var _p3 = _p0._1;\n              if (_p3.ctor === \"Nothing\") {\n                    return fieldsHtml;\n                 } else {\n                    return A2($List._op[\"::\"],$Html.text(_p3._0),A2($List._op[\"::\"],$Html.text(\" | \"),fieldsHtml));\n                 }\n           }();\n           return A2($List._op[\"::\"],$Html.text(\"{ \"),A2($Basics._op[\"++\"],recordInsides,_U.list([$Html.text(\" }\")])));}\n   });\n   var fieldToHtml = F2(function (nameDict,_p4) {\n      var _p5 = _p4;\n      return A2($List._op[\"::\"],\n      $Html.text(_p5._0),\n      A2($List._op[\"::\"],$Utils$Code.space,A2($List._op[\"::\"],$Utils$Code.colon,A2($List._op[\"::\"],$Utils$Code.space,A3(toHtml,nameDict,Other,_p5._1)))));\n   });\n   var length = F2(function (context,tipe) {\n      var _p6 = tipe;\n      switch (_p6.ctor)\n      {case \"Function\": var argLengths = A2($List.map,function (t) {    return 4 + A2(length,Func,t);},_p6._0);\n           var parens = function () {    var _p7 = context;switch (_p7.ctor) {case \"Func\": return 2;case \"App\": return 2;default: return 0;}}();\n           return parens + $List.sum(argLengths) + A2(length,Func,_p6._1);\n         case \"Var\": return $String.length(_p6._0);\n         case \"Apply\": if (_p6._1.ctor === \"[]\") {\n                 return $String.length(_p6._0.name);\n              } else {\n                 var argsLength = $List.sum(A2($List.map,function (t) {    return 1 + A2(length,App,t);},_p6._1));\n                 var parens = function () {    var _p8 = context;switch (_p8.ctor) {case \"Func\": return 0;case \"App\": return 2;default: return 0;}}();\n                 return parens + $String.length(_p6._0.name) + argsLength;\n              }\n         case \"Tuple\": return $List.sum(A2($List.map,function (t) {    return 2 + A2(length,Other,t);},_p6._0));\n         default: var extLength = function () {\n              var _p9 = _p6._1;\n              if (_p9.ctor === \"Nothing\") {\n                    return 0;\n                 } else {\n                    return 2 + $String.length(_p9._0);\n                 }\n           }();\n           var fieldLength = function (_p10) {    var _p11 = _p10;return $String.length(_p11._0) + 3 + A2(length,Other,_p11._1);};\n           var recordLength = 2 + $List.sum(A2($List.map,function (ft) {    return 2 + fieldLength(ft);},_p6._0));\n           return recordLength + extLength;}\n   });\n   var Tag = F2(function (a,b) {    return {tag: a,args: b};});\n   var Record = F2(function (a,b) {    return {ctor: \"Record\",_0: a,_1: b};});\n   var Tuple = function (a) {    return {ctor: \"Tuple\",_0: a};};\n   var Apply = F2(function (a,b) {    return {ctor: \"Apply\",_0: a,_1: b};});\n   var Var = function (a) {    return {ctor: \"Var\",_0: a};};\n   var Function = F2(function (a,b) {    return {ctor: \"Function\",_0: a,_1: b};});\n   return _elm.Docs.Type.values = {_op: _op\n                                  ,Function: Function\n                                  ,Var: Var\n                                  ,Apply: Apply\n                                  ,Tuple: Tuple\n                                  ,Record: Record\n                                  ,Tag: Tag\n                                  ,Func: Func\n                                  ,App: App\n                                  ,Other: Other\n                                  ,toHtml: toHtml\n                                  ,fieldToHtml: fieldToHtml\n                                  ,length: length};\n};\n\n// setup\nElm.Native = Elm.Native || {};\nElm.Native.Markdown = Elm.Native.Markdown || {};\n\n// definition\nElm.Native.Markdown.make = function(localRuntime) {\n\t'use strict';\n\n\t// attempt to short-circuit\n\tif ('values' in Elm.Native.Markdown)\n\t{\n\t\treturn Elm.Native.Markdown.values;\n\t}\n\n\tvar Element = Elm.Native.Graphics.Element.make(localRuntime);\n\n\tvar marked = (function() {\n\t\t// catch the `marked` object regardless of the outer environment.\n\t\t// (ex. a CommonJS module compatible environment.)\n\t\t// note that this depends on marked's implementation of environment detection.\n\t\tvar module = {};\n\t\tvar exports = module.exports = {};\n\n\t\t/**\n\t\t * marked - a markdown parser\n\t\t * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n\t\t * https://github.com/chjj/marked\n\t\t */\n\t\t(function(){var block={newline:/^\\n+/,code:/^( {4}[^\\n]+\\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\\n+|$)/,heading:/^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,nptable:noop,lheading:/^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,blockquote:/^( *>[^\\n]+(\\n(?!def)[^\\n]+)*\\n*)+/,list:/^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\\n{2,}|\\s*$)/,def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +[\"(]([^\\n]+)[\")])? *(?:\\n+|$)/,table:noop,paragraph:/^((?:[^\\n]+\\n?(?!hr|heading|lheading|blockquote|tag|def))+)\\n*/,text:/^[^\\n]+/};block.bullet=/(?:[*+-]|\\d+\\.)/;block.item=/^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;block.item=replace(block.item,\"gm\")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)(\"hr\",\"\\\\n+(?=\\\\1?(?:[-*_] *){3,}(?:\\\\n+|$))\")(\"def\",\"\\\\n+(?=\"+block.def.source+\")\")();block.blockquote=replace(block.blockquote)(\"def\",block.def)();block._tag=\"(?!(?:\"+\"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code\"+\"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo\"+\"|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:/|[^\\\\w\\\\s@]*@)\\\\b\";block.html=replace(block.html)(\"comment\",/<!--[\\s\\S]*?-->/)(\"closed\",/<(tag)[\\s\\S]+?<\\/\\1>/)(\"closing\",/<tag(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)(\"hr\",block.hr)(\"heading\",block.heading)(\"lheading\",block.lheading)(\"blockquote\",block.blockquote)(\"tag\",\"<\"+block._tag)(\"def\",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\\S+)? *\\n([\\s\\S]+?)\\s*\\1 *(?:\\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)(\"(?!\",\"(?!\"+block.gfm.fences.source.replace(\"\\\\1\",\"\\\\2\")+\"|\"+block.list.source.replace(\"\\\\1\",\"\\\\3\")+\"|\")();block.tables=merge({},block.gfm,{nptable:/^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,table:/^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\\r\\n|\\r/g,\"\\n\").replace(/\\t/g,\"    \").replace(/\\u00a0/g,\" \").replace(/\\u2424/g,\"\\n\");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,\"\"),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:\"space\"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,\"\");this.tokens.push({type:\"code\",text:!this.options.pedantic?cap.replace(/\\n+$/,\"\"):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"code\",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"heading\",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:\"table\",header:cap[1].replace(/^ *| *\\| *$/g,\"\").split(/ *\\| */),align:cap[2].replace(/^ *|\\| *$/g,\"\").split(/ *\\| */),cells:cap[3].replace(/\\n$/,\"\").split(\"\\n\")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]=\"right\"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]=\"center\"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]=\"left\"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].split(/ *\\| */)}this.tokens.push(item);continue}if(cap=this.rules.lheading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"heading\",depth:cap[2]===\"=\"?1:2,text:cap[1]});continue}if(cap=this.rules.hr.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"hr\"});continue}if(cap=this.rules.blockquote.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"blockquote_start\"});cap=cap[0].replace(/^ *> ?/gm,\"\");this.token(cap,top,true);this.tokens.push({type:\"blockquote_end\"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:\"list_start\",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i<l;i++){item=cap[i];space=item.length;item=item.replace(/^ *([*+-]|\\d+\\.) +/,\"\");if(~item.indexOf(\"\\n \")){space-=item.length;item=!this.options.pedantic?item.replace(new RegExp(\"^ {1,\"+space+\"}\",\"gm\"),\"\"):item.replace(/^ {1,4}/gm,\"\")}if(this.options.smartLists&&i!==l-1){b=block.bullet.exec(cap[i+1])[0];if(bull!==b&&!(bull.length>1&&b.length>1)){src=cap.slice(i+1).join(\"\\n\")+src;i=l-1}}loose=next||/\\n\\n(?!\\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)===\"\\n\";if(!loose)loose=next}this.tokens.push({type:loose?\"loose_item_start\":\"list_item_start\"});this.token(item,false,bq);this.tokens.push({type:\"list_item_end\"})}this.tokens.push({type:\"list_end\"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?\"paragraph\":\"html\",pre:cap[1]===\"pre\"||cap[1]===\"script\"||cap[1]===\"style\",text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:\"table\",header:cap[1].replace(/^ *| *\\| *$/g,\"\").split(/ *\\| */),align:cap[2].replace(/^ *|\\| *$/g,\"\").split(/ *\\| */),cells:cap[3].replace(/(?: *\\| *)?\\n$/,\"\").split(\"\\n\")};for(i=0;i<item.align.length;i++){if(/^ *-+: *$/.test(item.align[i])){item.align[i]=\"right\"}else if(/^ *:-+: *$/.test(item.align[i])){item.align[i]=\"center\"}else if(/^ *:-+ *$/.test(item.align[i])){item.align[i]=\"left\"}else{item.align[i]=null}}for(i=0;i<item.cells.length;i++){item.cells[i]=item.cells[i].replace(/^ *\\| *| *\\| *$/g,\"\").split(/ *\\| */)}this.tokens.push(item);continue}if(top&&(cap=this.rules.paragraph.exec(src))){src=src.substring(cap[0].length);this.tokens.push({type:\"paragraph\",text:cap[1].charAt(cap[1].length-1)===\"\\n\"?cap[1].slice(0,-1):cap[1]});continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:\"text\",text:cap[0]});continue}if(src){throw new Error(\"Infinite loop on byte: \"+src.charCodeAt(0))}}return this.tokens};var inline={escape:/^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,autolink:/^<([^ >]+(@|:\\/)[^ >]+)>/,url:noop,tag:/^<!--[\\s\\S]*?-->|^<\\/?\\w+(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/,link:/^!?\\[(inside)\\]\\(href\\)/,reflink:/^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,nolink:/^!?\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]/,strong:/^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,em:/^\\b_((?:__|[\\s\\S])+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/,code:/^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/,br:/^ {2,}\\n(?!\\s*$)/,del:noop,text:/^[\\s\\S]+?(?=[\\\\<!\\[_*`]| {2,}\\n|$)/};inline._inside=/(?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*/;inline._href=/\\s*<?([\\s\\S]*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;inline.link=replace(inline.link)(\"inside\",inline._inside)(\"href\",inline._href)();inline.reflink=replace(inline.reflink)(\"inside\",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,em:/^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)(\"])\",\"~|])\")(),url:/^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,del:/^~~(?=\\S)([\\s\\S]*?\\S)~~/,text:replace(inline.text)(\"]|\",\"~]|\")(\"|\",\"|https?://|\")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)(\"{2,}\",\"*\")(),text:replace(inline.gfm.text)(\"{2,}\",\"*\")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error(\"Tokens array requires a `links` property.\")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out=\"\",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]===\"@\"){text=cap[1].charAt(6)===\":\"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle(\"mailto:\")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^<a /i.test(cap[0])){this.inLink=true}else if(this.inLink&&/^<\\/a>/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\\s+/g,\" \");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(this.smartypants(cap[0]));continue}if(src){throw new Error(\"Infinite loop on byte: \"+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!==\"!\"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,\"—\").replace(/(^|[-\\u2014/(\\[{\"\\s])'/g,\"$1‘\").replace(/'/g,\"’\").replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g,\"$1“\").replace(/\"/g,\"”\").replace(/\\.{3}/g,\"…\")};InlineLexer.prototype.mangle=function(text){var out=\"\",l=text.length,i=0,ch;for(;i<l;i++){ch=text.charCodeAt(i);if(Math.random()>.5){ch=\"x\"+ch.toString(16)}out+=\"&#\"+ch+\";\"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return\"<pre><code>\"+(escaped?code:escape(code,true))+\"\\n</code></pre>\"}return'<pre><code class=\"'+this.options.langPrefix+escape(lang,true)+'\">'+(escaped?code:escape(code,true))+\"\\n</code></pre>\\n\"};Renderer.prototype.blockquote=function(quote){return\"<blockquote>\\n\"+quote+\"</blockquote>\\n\"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return\"<h\"+level+' id=\"'+this.options.headerPrefix+raw.toLowerCase().replace(/[^\\w]+/g,\"-\")+'\">'+text+\"</h\"+level+\">\\n\"};Renderer.prototype.hr=function(){return this.options.xhtml?\"<hr/>\\n\":\"<hr>\\n\"};Renderer.prototype.list=function(body,ordered){var type=ordered?\"ol\":\"ul\";return\"<\"+type+\">\\n\"+body+\"</\"+type+\">\\n\"};Renderer.prototype.listitem=function(text){return\"<li>\"+text+\"</li>\\n\"};Renderer.prototype.paragraph=function(text){return\"<p>\"+text+\"</p>\\n\"};Renderer.prototype.table=function(header,body){return\"<table>\\n\"+\"<thead>\\n\"+header+\"</thead>\\n\"+\"<tbody>\\n\"+body+\"</tbody>\\n\"+\"</table>\\n\"};Renderer.prototype.tablerow=function(content){return\"<tr>\\n\"+content+\"</tr>\\n\"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?\"th\":\"td\";var tag=flags.align?\"<\"+type+' style=\"text-align:'+flags.align+'\">':\"<\"+type+\">\";return tag+content+\"</\"+type+\">\\n\"};Renderer.prototype.strong=function(text){return\"<strong>\"+text+\"</strong>\"};Renderer.prototype.em=function(text){return\"<em>\"+text+\"</em>\"};Renderer.prototype.codespan=function(text){return\"<code>\"+text+\"</code>\"};Renderer.prototype.br=function(){return this.options.xhtml?\"<br/>\":\"<br>\"};Renderer.prototype.del=function(text){return\"<del>\"+text+\"</del>\"};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\\w:]/g,\"\").toLowerCase()}catch(e){return\"\"}if(prot.indexOf(\"javascript:\")===0){return\"\"}}var out='<a href=\"'+href+'\"';if(title){out+=' title=\"'+title+'\"'}out+=\">\"+text+\"</a>\";return out};Renderer.prototype.image=function(href,title,text){var out='<img src=\"'+href+'\" alt=\"'+text+'\"';if(title){out+=' title=\"'+title+'\"'}out+=this.options.xhtml?\"/>\":\">\";return out};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out=\"\";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type===\"text\"){body+=\"\\n\"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case\"space\":{return\"\"}case\"hr\":{return this.renderer.hr()}case\"heading\":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case\"code\":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case\"table\":{var header=\"\",body=\"\",i,row,cell,flags,j;cell=\"\";for(i=0;i<this.token.header.length;i++){flags={header:true,align:this.token.align[i]};cell+=this.renderer.tablecell(this.inline.output(this.token.header[i]),{header:true,align:this.token.align[i]})}header+=this.renderer.tablerow(cell);for(i=0;i<this.token.cells.length;i++){row=this.token.cells[i];cell=\"\";for(j=0;j<row.length;j++){cell+=this.renderer.tablecell(this.inline.output(row[j]),{header:false,align:this.token.align[j]})}body+=this.renderer.tablerow(cell)}return this.renderer.table(header,body)}case\"blockquote_start\":{var body=\"\";while(this.next().type!==\"blockquote_end\"){body+=this.tok()}return this.renderer.blockquote(body)}case\"list_start\":{var body=\"\",ordered=this.token.ordered;while(this.next().type!==\"list_end\"){body+=this.tok()}return this.renderer.list(body,ordered)}case\"list_item_start\":{var body=\"\";while(this.next().type!==\"list_item_end\"){body+=this.token.type===\"text\"?this.parseText():this.tok()}return this.renderer.listitem(body)}case\"loose_item_start\":{var body=\"\";while(this.next().type!==\"list_item_end\"){body+=this.tok()}return this.renderer.listitem(body)}case\"html\":{var html=!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;return this.renderer.html(html)}case\"paragraph\":{return this.renderer.paragraph(this.inline.output(this.token.text))}case\"text\":{return this.renderer.paragraph(this.parseText())}}};function escape(html,encode){return html.replace(!encode?/&(?!#?\\w+;)/g:/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\")}function unescape(html){return html.replace(/&([#\\w]+);/g,function(_,n){n=n.toLowerCase();if(n===\"colon\")return\":\";if(n.charAt(0)===\"#\"){return n.charAt(1)===\"x\"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return\"\"})}function replace(regex,opt){regex=regex.source;opt=opt||\"\";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\\[])\\^/g,\"$1\");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;i<arguments.length;i++){target=arguments[i];for(key in target){if(Object.prototype.hasOwnProperty.call(target,key)){obj[key]=target[key]}}}return obj}function marked(src,opt,callback){if(callback||typeof opt===\"function\"){if(!callback){callback=opt;opt=null}opt=merge({},marked.defaults,opt||{});var highlight=opt.highlight,tokens,pending,i=0;try{tokens=Lexer.lex(src,opt)}catch(e){return callback(e)}pending=tokens.length;var done=function(err){if(err){opt.highlight=highlight;return callback(err)}var out;try{out=Parser.parse(tokens,opt)}catch(e){err=e}opt.highlight=highlight;return err?callback(err):callback(null,out)};if(!highlight||highlight.length<3){return done()}delete opt.highlight;if(!pending)return done();for(;i<tokens.length;i++){(function(token){if(token.type!==\"code\"){return--pending||done()}return highlight(token.text,token.lang,function(err,code){if(err)return done(err);if(code==null||code===token.text){return--pending||done()}token.text=code;token.escaped=true;--pending||done()})})(tokens[i])}return}try{if(opt)opt=merge({},marked.defaults,opt);return Parser.parse(Lexer.lex(src,opt),opt)}catch(e){e.message+=\"\\nPlease report this to https://github.com/chjj/marked.\";if((opt||marked.defaults).silent){return\"<p>An error occured:</p><pre>\"+escape(e.message+\"\",true)+\"</pre>\"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:\"lang-\",smartypants:false,headerPrefix:\"\",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!==\"undefined\"&&typeof exports===\"object\"){module.exports=marked}else if(typeof define===\"function\"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!==\"undefined\"?window:global)}());\n\n\t\treturn module.exports;\n\t})();\n\n\tfunction formatOptions(options) {\n\t\tvar toHighlight = function (code, lang) {\n\t\t\tif (!lang && options.defaultHighlighting.ctor === 'Just')\n\t\t\t{\n\t\t\t\tlang = options.defaultHighlighting._0;\n\t\t\t}\n\t\t\tif (typeof hljs !== 'undefined'\n\t\t\t\t&& lang\n\t\t\t\t&& hljs.listLanguages().indexOf(lang) >= 0)\n\t\t\t{\n\t\t\t\treturn hljs.highlight(lang, code, true).value;\n\t\t\t}\n\t\t\treturn code;\n\t\t};\n\t\tvar gfm = options.githubFlavored;\n\t\tif (gfm.ctor === 'Just')\n\t\t{\n\t\t\treturn {\n\t\t\t\thighlight: toHighlight,\n\t\t\t\tgfm: true,\n\t\t\t\ttables: gfm._0.tables,\n\t\t\t\tbreaks: gfm._0.breaks,\n\t\t\t\tsanitize: options.sanitize,\n\t\t\t\tsmartypants: options.smartypants\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn {\n\t\t\t\thighlight: toHighlight,\n\t\t\t\tgfm: false,\n\t\t\t\ttables: false,\n\t\t\t\tbreaks: false,\n\t\t\t\tsanitize: options.sanitize,\n\t\t\t\tsmartypants: options.smartypants\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction toHtmlWith(options, rawMarkdown)\n\t{\n\t\treturn new MarkdownWidget(options, rawMarkdown);\n\t}\n\n\tfunction MarkdownWidget(options, rawMarkdown)\n\t{\n\t\tthis.options = options;\n\t\tthis.markdown = rawMarkdown;\n\t}\n\n\tMarkdownWidget.prototype.type = \"Widget\";\n\n\tMarkdownWidget.prototype.init = function init()\n\t{\n\t\tvar html = marked(this.markdown, formatOptions(this.options));\n\t\tvar div = document.createElement('div');\n\t\tdiv.innerHTML = html;\n\t\treturn div;\n\t};\n\n\tMarkdownWidget.prototype.update = function update(previous, node)\n\t{\n\t\tif (this.markdown !== previous.markdown || this.options != previous.options)\n\t\t{\n\t\t\tvar html = marked(this.markdown, formatOptions(this.options));\n\t\t\tnode.innerHTML = html;\n\t\t}\n\t\treturn node;\n\t};\n\n\n\tfunction toElementWith(options, rawMarkdown)\n\t{\n\t\treturn Element.markdown(marked(rawMarkdown, formatOptions(options)));\n\t}\n\n\treturn Elm.Native.Markdown.values = {\n\t\ttoHtmlWith: F2(toHtmlWith),\n\t\ttoElementWith: F2(toElementWith)\n\t};\n};\n\nElm.Markdown = Elm.Markdown || {};\nElm.Markdown.make = function (_elm) {\n   \"use strict\";\n   _elm.Markdown = _elm.Markdown || {};\n   if (_elm.Markdown.values) return _elm.Markdown.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Graphics$Element = Elm.Graphics.Element.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Markdown = Elm.Native.Markdown.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var toElementWith = $Native$Markdown.toElementWith;\n   var toHtmlWith = $Native$Markdown.toHtmlWith;\n   var defaultOptions = {githubFlavored: $Maybe.Just({tables: false,breaks: false}),defaultHighlighting: $Maybe.Nothing,sanitize: false,smartypants: false};\n   var Options = F4(function (a,b,c,d) {    return {githubFlavored: a,defaultHighlighting: b,sanitize: c,smartypants: d};});\n   var toElement = function (string) {    return A2($Native$Markdown.toElementWith,defaultOptions,string);};\n   var toHtml = function (string) {    return A2($Native$Markdown.toHtmlWith,defaultOptions,string);};\n   return _elm.Markdown.values = {_op: _op\n                                 ,toHtml: toHtml\n                                 ,toElement: toElement\n                                 ,Options: Options\n                                 ,defaultOptions: defaultOptions\n                                 ,toHtmlWith: toHtmlWith\n                                 ,toElementWith: toElementWith};\n};\nElm.Utils = Elm.Utils || {};\nElm.Utils.Markdown = Elm.Utils.Markdown || {};\nElm.Utils.Markdown.make = function (_elm) {\n   \"use strict\";\n   _elm.Utils = _elm.Utils || {};\n   _elm.Utils.Markdown = _elm.Utils.Markdown || {};\n   if (_elm.Utils.Markdown.values) return _elm.Utils.Markdown.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Markdown = Elm.Markdown.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var myOptions = function () {    var options = $Markdown.defaultOptions;return _U.update(options,{defaultHighlighting: $Maybe.Just(\"elm\")});}();\n   var block = function (raw) {    return A2($Markdown.toHtmlWith,myOptions,raw);};\n   return _elm.Utils.Markdown.values = {_op: _op,block: block};\n};\nElm.Docs = Elm.Docs || {};\nElm.Docs.Entry = Elm.Docs.Entry || {};\nElm.Docs.Entry.make = function (_elm) {\n   \"use strict\";\n   _elm.Docs = _elm.Docs || {};\n   _elm.Docs.Entry = _elm.Docs.Entry || {};\n   if (_elm.Docs.Entry.values) return _elm.Docs.Entry.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Docs$Name = Elm.Docs.Name.make(_elm),\n   $Docs$Type = Elm.Docs.Type.make(_elm),\n   $Effects = Elm.Effects.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $Html$Attributes = Elm.Html.Attributes.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Regex = Elm.Regex.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $String = Elm.String.make(_elm),\n   $Utils$Code = Elm.Utils.Code.make(_elm),\n   $Utils$Markdown = Elm.Utils.Markdown.make(_elm);\n   var _op = {};\n   var viewTag = F2(function (tipeToHtml,_p0) {\n      var _p1 = _p0;\n      return A2($List._op[\"::\"],\n      $Html.text(_p1.tag),\n      A2($List.concatMap,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);})($Utils$Code.space),A2($List.map,tipeToHtml,_p1.args)));\n   });\n   var longFunctionAnnotation = F3(function (nameDict,args,result) {\n      var starters = A2($List._op[\"::\"],\n      _U.list([$Html.text(\"  \"),$Utils$Code.colon,$Html.text(\"  \")]),\n      A2($List.repeat,$List.length(args),_U.list([$Html.text(\"  \"),$Utils$Code.arrow,$Utils$Code.space])));\n      var tipeHtml = A2($List.map,A2($Docs$Type.toHtml,nameDict,$Docs$Type.Func),A2($Basics._op[\"++\"],args,_U.list([result])));\n      return A3($List.map2,F2(function (x,y) {    return A2($Basics._op[\"++\"],x,y);}),starters,tipeHtml);\n   });\n   var operator = $Regex.regex(\"^[^a-zA-Z0-9]+$\");\n   var annotationBlock = function (bits) {\n      return A2($Html.div,_U.list([$Html$Attributes.$class(\"docs-annotation\")]),$List.concat(A2($List.intersperse,_U.list([$Html.text(\"\\n\")]),bits)));\n   };\n   _op[\"=>\"] = F2(function (v0,v1) {    return {ctor: \"_Tuple2\",_0: v0,_1: v1};});\n   var nameToLink = function (name) {\n      var humanName = A2($Regex.contains,operator,name) ? A2($Basics._op[\"++\"],\"(\",A2($Basics._op[\"++\"],name,\")\")) : name;\n      return A2($Html.a,\n      _U.list([$Html$Attributes.style(_U.list([A2(_op[\"=>\"],\"font-weight\",\"bold\")])),$Html$Attributes.href(A2($Basics._op[\"++\"],\"#\",name))]),\n      _U.list([$Html.text(humanName)]));\n   };\n   var valueAnnotation = F3(function (nameDict,name,tipe) {\n      var _p2 = A2($Debug.log,\"Value annotation:\",tipe);\n      var _p3 = tipe;\n      if (_p3.ctor === \"Function\") {\n            return _U.cmp($String.length(name) + 3 + A2($Docs$Type.length,$Docs$Type.Other,tipe),64) > 0 ? A2($List._op[\"::\"],\n            _U.list([nameToLink(name)]),\n            A3(longFunctionAnnotation,nameDict,_p3._0,_p3._1)) : _U.list([A2($List._op[\"::\"],\n            nameToLink(name),\n            A2($Basics._op[\"++\"],$Utils$Code.padded($Utils$Code.colon),A3($Docs$Type.toHtml,nameDict,$Docs$Type.Other,tipe)))]);\n         } else {\n            return _U.list([A2($List._op[\"::\"],\n            nameToLink(name),\n            A2($Basics._op[\"++\"],$Utils$Code.padded($Utils$Code.colon),A3($Docs$Type.toHtml,nameDict,$Docs$Type.Other,tipe)))]);\n         }\n   });\n   var unionAnnotation = F4(function (tipeToHtml,name,vars,tags) {\n      var tagLines = A3($List.map2,\n      F2(function (x,y) {    return A2($List._op[\"::\"],x,y);}),\n      A2($List._op[\"::\"],$Html.text(\"  = \"),A2($List.repeat,$List.length(tags) - 1,$Html.text(\"  | \"))),\n      A2($List.map,viewTag(tipeToHtml),tags));\n      var nameLine = _U.list([$Utils$Code.keyword(\"type\")\n                             ,$Utils$Code.space\n                             ,nameToLink(name)\n                             ,$Html.text($String.concat(A2($List.map,F2(function (x,y) {    return A2($Basics._op[\"++\"],x,y);})(\" \"),vars)))]);\n      return A2($List._op[\"::\"],nameLine,tagLines);\n   });\n   var aliasNameLine = F2(function (name,vars) {\n      return _U.list([$Utils$Code.keyword(\"type\")\n                     ,$Utils$Code.space\n                     ,$Utils$Code.keyword(\"alias\")\n                     ,$Utils$Code.space\n                     ,nameToLink(name)\n                     ,$Html.text($String.concat(A2($List.map,F2(function (x,y) {    return A2($Basics._op[\"++\"],x,y);})(\" \"),vars)))\n                     ,$Utils$Code.space\n                     ,$Utils$Code.equals\n                     ,$Utils$Code.space]);\n   });\n   var aliasAnnotation = F4(function (nameDict,name,vars,tipe) {\n      var typeLines = function () {\n         var _p4 = tipe;\n         if (_p4.ctor === \"Record\") {\n               var _p7 = _p4._0;\n               var _p5 = function () {\n                  var _p6 = _p4._1;\n                  if (_p6.ctor === \"Nothing\") {\n                        return {ctor: \"_Tuple2\"\n                               ,_0: _U.list([])\n                               ,_1: A2($List._op[\"::\"],$Html.text(\"  { \"),A2($List.repeat,$List.length(_p7),$Html.text(\"  , \")))};\n                     } else {\n                        return {ctor: \"_Tuple2\"\n                               ,_0: _U.list([_U.list([$Html.text(\"  { \"),$Html.text(_p6._0),$Html.text(\" |\")])])\n                               ,_1: A2($List._op[\"::\"],$Html.text(\"    | \"),A2($List.repeat,$List.length(_p7),$Html.text(\"    , \")))};\n                     }\n               }();\n               var firstLine = _p5._0;\n               var starters = _p5._1;\n               return A2($Basics._op[\"++\"],\n               firstLine,\n               A2($Basics._op[\"++\"],\n               A3($List.map2,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);}),starters,A2($List.map,$Docs$Type.fieldToHtml(nameDict),_p7)),\n               _U.list([_U.list([$Html.text(\"  }\")])])));\n            } else {\n               return _U.list([A2($List._op[\"::\"],$Html.text(\"  \"),A3($Docs$Type.toHtml,nameDict,$Docs$Type.Other,tipe))]);\n            }\n      }();\n      return A2($List._op[\"::\"],A2(aliasNameLine,name,vars),typeLines);\n   });\n   var typeView = F2(function (nameDict,model) {\n      var annotation = function () {\n         var _p8 = model.info;\n         switch (_p8.ctor)\n         {case \"Value\": return A3(valueAnnotation,nameDict,model.name,_p8._0);\n            case \"Union\": return A4(unionAnnotation,A2($Docs$Type.toHtml,nameDict,$Docs$Type.App),model.name,_p8._0.vars,_p8._0.tags);\n            default: return A4(aliasAnnotation,nameDict,model.name,_p8._0.vars,_p8._0.tipe);}\n      }();\n      return A2($Html.div,\n      _U.list([$Html$Attributes.$class(\"docs-entry\"),$Html$Attributes.id(model.name)]),\n      _U.list([annotationBlock(annotation),A2($Html.div,_U.list([$Html$Attributes.$class(\"docs-comment\")]),_U.list([$Utils$Markdown.block(model.docs)]))]));\n   });\n   var stringView = function (model) {\n      var annotation = function () {\n         var _p9 = model.info;\n         switch (_p9.ctor)\n         {case \"Value\": return _U.list([A2($List._op[\"::\"],\n              nameToLink(model.name),\n              A2($Basics._op[\"++\"],$Utils$Code.padded($Utils$Code.colon),_U.list([$Html.text(_p9._0)])))]);\n            case \"Union\": return A4(unionAnnotation,function (t) {    return _U.list([$Html.text(t)]);},model.name,_p9._0.vars,_p9._0.tags);\n            default: return _U.list([A2(aliasNameLine,model.name,_p9._0.vars),_U.list([$Html.text(\"    \"),$Html.text(_p9._0.tipe)])]);}\n      }();\n      return A2($Html.div,\n      _U.list([$Html$Attributes.$class(\"docs-entry\"),$Html$Attributes.id(model.name)]),\n      _U.list([annotationBlock(annotation),A2($Html.div,_U.list([$Html$Attributes.$class(\"docs-comment\")]),_U.list([$Utils$Markdown.block(model.docs)]))]));\n   };\n   var tagMap = F2(function (func,tag) {    return _U.update(tag,{args: A2($List.map,func,tag.args)});});\n   var update = F2(function (action,model) {    return {ctor: \"_Tuple2\",_0: model,_1: $Effects.none};});\n   var Fixity = F2(function (a,b) {    return {precedence: a,associativity: b};});\n   var Tag = F2(function (a,b) {    return {tag: a,args: b};});\n   var Alias = function (a) {    return {ctor: \"Alias\",_0: a};};\n   var Union = function (a) {    return {ctor: \"Union\",_0: a};};\n   var Value = F2(function (a,b) {    return {ctor: \"Value\",_0: a,_1: b};});\n   var map = F2(function (func,model) {\n      var newInfo = function () {\n         var _p10 = model.info;\n         switch (_p10.ctor)\n         {case \"Value\": return A2(Value,func(_p10._0),_p10._1);\n            case \"Union\": return Union({vars: _p10._0.vars,tags: A2($List.map,tagMap(func),_p10._0.tags)});\n            default: return Alias({vars: _p10._0.vars,tipe: func(_p10._0.tipe)});}\n      }();\n      return _U.update(model,{info: newInfo});\n   });\n   var Model = F3(function (a,b,c) {    return {name: a,info: b,docs: c};});\n   return _elm.Docs.Entry.values = {_op: _op\n                                   ,Model: Model\n                                   ,Value: Value\n                                   ,Union: Union\n                                   ,Alias: Alias\n                                   ,Tag: Tag\n                                   ,Fixity: Fixity\n                                   ,update: update\n                                   ,map: map\n                                   ,tagMap: tagMap\n                                   ,stringView: stringView\n                                   ,typeView: typeView\n                                   ,annotationBlock: annotationBlock\n                                   ,nameToLink: nameToLink\n                                   ,operator: operator\n                                   ,valueAnnotation: valueAnnotation\n                                   ,longFunctionAnnotation: longFunctionAnnotation\n                                   ,unionAnnotation: unionAnnotation\n                                   ,viewTag: viewTag\n                                   ,aliasAnnotation: aliasAnnotation\n                                   ,aliasNameLine: aliasNameLine};\n};\nElm.Docs = Elm.Docs || {};\nElm.Docs.Package = Elm.Docs.Package || {};\nElm.Docs.Package.make = function (_elm) {\n   \"use strict\";\n   _elm.Docs = _elm.Docs || {};\n   _elm.Docs.Package = _elm.Docs.Package || {};\n   if (_elm.Docs.Package.values) return _elm.Docs.Package.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Dict = Elm.Dict.make(_elm),\n   $Docs$Entry = Elm.Docs.Entry.make(_elm),\n   $Json$Decode = Elm.Json.Decode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var tipe = $Json$Decode.string;\n   var alias = A3($Json$Decode.object2,\n   F2(function (vars,tipe) {    return $Docs$Entry.Alias({vars: vars,tipe: tipe});}),\n   A2($Json$Decode._op[\":=\"],\"args\",$Json$Decode.list($Json$Decode.string)),\n   A2($Json$Decode._op[\":=\"],\"type\",tipe));\n   var tag = A3($Json$Decode.tuple2,$Docs$Entry.Tag,$Json$Decode.string,$Json$Decode.list(tipe));\n   var union = A3($Json$Decode.object2,\n   F2(function (vars,tags) {    return $Docs$Entry.Union({vars: vars,tags: tags});}),\n   A2($Json$Decode._op[\":=\"],\"args\",$Json$Decode.list($Json$Decode.string)),\n   A2($Json$Decode._op[\":=\"],\"cases\",$Json$Decode.list(tag)));\n   var fixity = A3($Json$Decode.object2,\n   $Docs$Entry.Fixity,\n   A2($Json$Decode._op[\":=\"],\"precedence\",$Json$Decode.$int),\n   A2($Json$Decode._op[\":=\"],\"associativity\",$Json$Decode.string));\n   var value = A3($Json$Decode.object2,$Docs$Entry.Value,A2($Json$Decode._op[\":=\"],\"type\",tipe),$Json$Decode.maybe(fixity));\n   var entry = function (decodeInfo) {\n      return A4($Json$Decode.object3,\n      $Docs$Entry.Model,\n      A2($Json$Decode._op[\":=\"],\"name\",$Json$Decode.string),\n      decodeInfo,\n      A2($Json$Decode._op[\":=\"],\"comment\",$Json$Decode.string));\n   };\n   var dictBy = F2(function (f,list) {    return $Dict.fromList(A2($List.map,function (x) {    return {ctor: \"_Tuple2\",_0: f(x),_1: x};},list));});\n   var Module = F3(function (a,b,c) {    return {name: a,comment: b,entries: c};});\n   var decodeModule = function () {\n      var make = F5(function (name,comment,values,unions,aliases) {\n         return A3(Module,name,comment,A2(dictBy,function (_) {    return _.name;},A2($Basics._op[\"++\"],values,A2($Basics._op[\"++\"],unions,aliases))));\n      });\n      return A6($Json$Decode.object5,\n      make,\n      A2($Json$Decode._op[\":=\"],\"name\",$Json$Decode.string),\n      A2($Json$Decode._op[\":=\"],\"comment\",$Json$Decode.string),\n      A2($Json$Decode._op[\":=\"],\"aliases\",$Json$Decode.list(entry(alias))),\n      A2($Json$Decode._op[\":=\"],\"types\",$Json$Decode.list(entry(union))),\n      A2($Json$Decode._op[\":=\"],\"values\",$Json$Decode.list(entry(value))));\n   }();\n   var decodePackage = A2($Json$Decode.map,dictBy(function (_) {    return _.name;}),$Json$Decode.list(decodeModule));\n   return _elm.Docs.Package.values = {_op: _op,decodePackage: decodePackage,decodeModule: decodeModule,Module: Module};\n};\nElm.Native.Parse = {};\n\nElm.Native.Parse.make = function(localRuntime)\n{\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Parse = localRuntime.Native.Parse || {};\n\tif (localRuntime.Native.Parse.values)\n\t{\n\t\treturn localRuntime.Native.Parse.values;\n\t}\n\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\t// HELPERS\n\n\tfunction ok(index, value) {\n\t\treturn { ctor: 'Ok', _0: { index: index, value: value } };\n\t}\n\n\tfunction err(msg) {\n\t\treturn { ctor: 'Err', _0: msg };\n\t}\n\n\n\t// BASICS\n\n\tfunction succeed(value)\n\t{\n\t\treturn function(input, index) {\n\t\t\treturn ok(index, value);\n\t\t};\n\t}\n\n\tfunction fail(msg)\n\t{\n\t\treturn function(input, index) {\n\t\t\treturn err(msg);\n\t\t};\n\t}\n\n\n\t// SATISFY\n\n\tfunction satisfy(isOk)\n\t{\n\t\treturn function(input, index) {\n\t\t\tif (input.length <= index)\n\t\t\t{\n\t\t\t\treturn err('ran out of characters');\n\t\t\t}\n\t\t\tvar chr = Utils.chr(input[index]);\n\t\t\treturn isOk(chr)\n\t\t\t\t? ok(index + 1, chr)\n\t\t\t\t: err(\"char '\" + input[index] + \"' at index \" + index + \" is not okay.\");\n\t\t};\n\t}\n\n\tfunction string(expected)\n\t{\n\t\treturn function(input, index) {\n\t\t\tvar nextIndex = index + expected.length;\n\t\t\tvar actual = input.slice(index, nextIndex);\n\t\t\treturn expected === actual\n\t\t\t\t? ok(nextIndex, actual)\n\t\t\t\t: err(\"expecting '\" + expected + \"' at index \" + index + \" but instead saw '\" + actual + \"'.\");\n\t\t};\n\t}\n\n\n\t// ONE OF\n\n\tfunction oneOf(parserList)\n\t{\n\t\tvar parsers = List.toArray(parserList);\n\n\t\treturn function(input, index) {\n\t\t\tvar len = parsers.length;\n\t\t\tfor (var i = 0; i < len; ++i)\n\t\t\t{\n\t\t\t\tvar result = parsers[i](input, index);\n\t\t\t\tif (result.ctor === 'Ok')\n\t\t\t\t{\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn err('none of the parsers given to oneOf worked');\n\t\t};\n\t}\n\n\n\t// AND THEN\n\n\tfunction andThen(parser, callback)\n\t{\n\t\treturn function(input, index) {\n\t\t\tvar result = parser(input, index);\n\t\t\tif (result.ctor === 'Ok')\n\t\t\t{\n\t\t\t\tvar newData = result._0;\n\t\t\t\treturn callback(newData.value)(input, newData.index);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn result;\n\t\t\t}\n\t\t};\n\t}\n\n\n\t// RUN\n\n\tfunction run(parser, input)\n\t{\n\t\tvar result = parser(input, 0);\n\t\tif (result.ctor === 'Ok')\n\t\t{\n\t\t\treturn { ctor: 'Ok', _0: result._0.value };\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn result;\n\t\t}\n\t}\n\n\n\treturn localRuntime.Native.Parse.values = {\n\t\tsucceed: succeed,\n\t\tfail: fail,\n\t\tsatisfy: satisfy,\n\t\tstring: string,\n\t\toneOf: oneOf,\n\t\tandThen: F2(andThen),\n\t\trun: F2(run)\n\t};\n};\n\nElm.Parse = Elm.Parse || {};\nElm.Parse.Combinators = Elm.Parse.Combinators || {};\nElm.Parse.Combinators.make = function (_elm) {\n   \"use strict\";\n   _elm.Parse = _elm.Parse || {};\n   _elm.Parse.Combinators = _elm.Parse.Combinators || {};\n   if (_elm.Parse.Combinators.values) return _elm.Parse.Combinators.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Char = Elm.Char.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Parse = Elm.Native.Parse.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var andThen = $Native$Parse.andThen;\n   var fail = $Native$Parse.fail;\n   var succeed = $Native$Parse.succeed;\n   var map = F2(function (func,parser) {    return A2(andThen,parser,function (a) {    return succeed(func(a));});});\n   var map2 = F3(function (func,parserA,parserB) {\n      return A2(andThen,parserA,function (a) {    return A2(andThen,parserB,function (b) {    return succeed(A2(func,a,b));});});\n   });\n   var ignore1 = F2(function (x,parser) {    return A3(map2,F2(function (_p0,a) {    return a;}),x,parser);});\n   var map3 = F4(function (func,parserA,parserB,parserC) {\n      return A2(andThen,\n      parserA,\n      function (a) {\n         return A2(andThen,parserB,function (b) {    return A2(andThen,parserC,function (c) {    return succeed(A3(func,a,b,c));});});\n      });\n   });\n   var ignore2 = F3(function (x,y,parser) {    return A4(map3,F3(function (_p2,_p1,a) {    return a;}),x,y,parser);});\n   var middle = F3(function (x,parser,y) {    return A4(map3,F3(function (_p4,a,_p3) {    return a;}),x,parser,y);});\n   var map4 = F5(function (func,parserA,parserB,parserC,parserD) {\n      return A2(andThen,\n      parserA,\n      function (a) {\n         return A2(andThen,\n         parserB,\n         function (b) {\n            return A2(andThen,parserC,function (c) {    return A2(andThen,parserD,function (d) {    return succeed(A4(func,a,b,c,d));});});\n         });\n      });\n   });\n   var ignore3 = F4(function (x,y,z,parser) {    return A5(map4,F4(function (_p7,_p6,_p5,a) {    return a;}),x,y,z,parser);});\n   var lazy = function (thunk) {    return A2(andThen,succeed({ctor: \"_Tuple0\"}),thunk);};\n   var $try = function (parser) {    return parser;};\n   var oneOf = $Native$Parse.oneOf;\n   var zeroOrMore = function (parser) {\n      return oneOf(_U.list([A2(andThen,parser,function (a) {    return A2(map,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);})(a),zeroOrMore(parser));})\n                           ,succeed(_U.list([]))]));\n   };\n   var oneOrMore = function (parser) {    return A3(map2,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);}),parser,zeroOrMore(parser));};\n   var string = $Native$Parse.string;\n   var satisfy = $Native$Parse.satisfy;\n   var lower = satisfy($Char.isLower);\n   var upper = satisfy($Char.isUpper);\n   var letter = satisfy(function (c) {    return $Char.isLower(c) || $Char.isUpper(c);});\n   var digit = satisfy($Char.isDigit);\n   var $char = function (c) {    return satisfy(F2(function (x,y) {    return _U.eq(x,y);})(c));};\n   var run = $Native$Parse.run;\n   var P = {ctor: \"P\"};\n   return _elm.Parse.Combinators.values = {_op: _op\n                                          ,P: P\n                                          ,run: run\n                                          ,$char: $char\n                                          ,satisfy: satisfy\n                                          ,lower: lower\n                                          ,upper: upper\n                                          ,letter: letter\n                                          ,digit: digit\n                                          ,string: string\n                                          ,oneOf: oneOf\n                                          ,$try: $try\n                                          ,succeed: succeed\n                                          ,fail: fail\n                                          ,map: map\n                                          ,map2: map2\n                                          ,map3: map3\n                                          ,map4: map4\n                                          ,andThen: andThen\n                                          ,zeroOrMore: zeroOrMore\n                                          ,oneOrMore: oneOrMore\n                                          ,lazy: lazy\n                                          ,ignore1: ignore1\n                                          ,ignore2: ignore2\n                                          ,ignore3: ignore3\n                                          ,middle: middle};\n};\nElm.Parse = Elm.Parse || {};\nElm.Parse.Type = Elm.Parse.Type || {};\nElm.Parse.Type.make = function (_elm) {\n   \"use strict\";\n   _elm.Parse = _elm.Parse || {};\n   _elm.Parse.Type = _elm.Parse.Type || {};\n   if (_elm.Parse.Type.values) return _elm.Parse.Type.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Char = Elm.Char.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Docs$Name = Elm.Docs.Name.make(_elm),\n   $Docs$Type = Elm.Docs.Type.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Parse$Combinators = Elm.Parse.Combinators.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $String = Elm.String.make(_elm);\n   var _op = {};\n   var tuplize = function (args) {\n      var _p0 = args;\n      if (_p0.ctor === \"::\" && _p0._1.ctor === \"[]\") {\n            return _p0._0;\n         } else {\n            return $Docs$Type.Tuple(args);\n         }\n   };\n   var buildFunction = F3(function (args,currentType,remainingTypes) {\n      buildFunction: while (true) {\n         var _p1 = remainingTypes;\n         if (_p1.ctor === \"[]\") {\n               return $List.isEmpty(args) ? currentType : A2($Docs$Type.Function,$List.reverse(args),currentType);\n            } else {\n               var _v2 = A2($List._op[\"::\"],currentType,args),_v3 = _p1._0,_v4 = _p1._1;\n               args = _v2;\n               currentType = _v3;\n               remainingTypes = _v4;\n               continue buildFunction;\n            }\n      }\n   });\n   var spaces = A2($Parse$Combinators.map,$Basics.always({ctor: \"_Tuple0\"}),$Parse$Combinators.zeroOrMore($Parse$Combinators.$char(_U.chr(\" \"))));\n   var commasLeading = function (parser) {\n      return $Parse$Combinators.zeroOrMore(A4($Parse$Combinators.ignore3,spaces,$Parse$Combinators.$char(_U.chr(\",\")),spaces,parser));\n   };\n   var varChar = $Parse$Combinators.satisfy(function (c) {\n      return $Char.isLower(c) || ($Char.isUpper(c) || (_U.eq(c,_U.chr(\"_\")) || (_U.eq(c,_U.chr(\"\\'\")) || $Char.isDigit(c))));\n   });\n   var elmVarWith = function (starter) {\n      return A2($Parse$Combinators.map,\n      $String.fromList,\n      A3($Parse$Combinators.map2,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);}),starter,$Parse$Combinators.zeroOrMore(varChar)));\n   };\n   var $var = A2($Parse$Combinators.map,$Docs$Type.Var,elmVarWith($Parse$Combinators.lower));\n   var nameHelp = function (seen) {\n      return A2($Parse$Combinators.andThen,\n      elmVarWith($Parse$Combinators.upper),\n      function (str) {\n         return $Parse$Combinators.oneOf(_U.list([A2($Parse$Combinators.ignore1,$Parse$Combinators.$char(_U.chr(\".\")),nameHelp(A2($List._op[\"::\"],str,seen)))\n                                                 ,$Parse$Combinators.succeed(A2($Docs$Name.Canonical,A2($String.join,\".\",$List.reverse(seen)),str))]));\n      });\n   };\n   var name = nameHelp(_U.list([]));\n   var field = $Parse$Combinators.lazy(function (_p2) {\n      return A3($Parse$Combinators.map2,\n      F2(function (v0,v1) {    return {ctor: \"_Tuple2\",_0: v0,_1: v1};}),\n      elmVarWith($Parse$Combinators.lower),\n      A4($Parse$Combinators.ignore3,spaces,$Parse$Combinators.$char(_U.chr(\":\")),spaces,tipe));\n   });\n   var tipe = $Parse$Combinators.lazy(function (_p3) {    return A3($Parse$Combinators.map2,buildFunction(_U.list([])),tipeTerm,arrowTerms);});\n   var arrowTerms = $Parse$Combinators.lazy(function (_p4) {\n      return $Parse$Combinators.zeroOrMore(A4($Parse$Combinators.ignore3,spaces,$Parse$Combinators.string(\"->\"),spaces,tipeTerm));\n   });\n   var tipeTerm = $Parse$Combinators.lazy(function (_p5) {    return $Parse$Combinators.oneOf(_U.list([$var,apply,record,parenTipe]));});\n   var apply = $Parse$Combinators.lazy(function (_p6) {\n      return A3($Parse$Combinators.map2,$Docs$Type.Apply,name,$Parse$Combinators.zeroOrMore(A2($Parse$Combinators.ignore1,spaces,applyTerm)));\n   });\n   var applyTerm = $Parse$Combinators.lazy(function (_p7) {\n      return $Parse$Combinators.oneOf(_U.list([$var\n                                              ,A2($Parse$Combinators.map,function (n) {    return A2($Docs$Type.Apply,n,_U.list([]));},name)\n                                              ,record\n                                              ,parenTipe]));\n   });\n   var parenTipe = $Parse$Combinators.lazy(function (_p8) {\n      return A2($Parse$Combinators.map,\n      tuplize,\n      A3($Parse$Combinators.middle,\n      A2($Parse$Combinators.ignore1,$Parse$Combinators.$char(_U.chr(\"(\")),spaces),\n      $Parse$Combinators.oneOf(_U.list([A3($Parse$Combinators.map2,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);}),tipe,commasLeading(tipe))\n                                       ,$Parse$Combinators.succeed(_U.list([]))])),\n      A2($Parse$Combinators.ignore1,spaces,$Parse$Combinators.$char(_U.chr(\")\")))));\n   });\n   var record = $Parse$Combinators.lazy(function (_p9) {\n      return A3($Parse$Combinators.middle,\n      A2($Parse$Combinators.ignore1,$Parse$Combinators.$char(_U.chr(\"{\")),spaces),\n      $Parse$Combinators.oneOf(_U.list([A2($Parse$Combinators.andThen,elmVarWith($Parse$Combinators.lower),recordHelp)\n                                       ,$Parse$Combinators.succeed(A2($Docs$Type.Record,_U.list([]),$Maybe.Nothing))])),\n      A2($Parse$Combinators.ignore1,spaces,$Parse$Combinators.$char(_U.chr(\"}\"))));\n   });\n   var recordHelp = function (lowerName) {\n      return $Parse$Combinators.lazy(function (_p10) {\n         return A2($Parse$Combinators.ignore1,\n         spaces,\n         $Parse$Combinators.oneOf(_U.list([A3($Parse$Combinators.map2,\n                                          F2(function (t,rest) {\n                                             return A2($Docs$Type.Record,A2($List._op[\"::\"],{ctor: \"_Tuple2\",_0: lowerName,_1: t},rest),$Maybe.Nothing);\n                                          }),\n                                          A3($Parse$Combinators.ignore2,$Parse$Combinators.$char(_U.chr(\":\")),spaces,tipe),\n                                          commasLeading(field))\n                                          ,A2($Parse$Combinators.map,\n                                          function (fields) {\n                                             return A2($Docs$Type.Record,fields,$Maybe.Just(lowerName));\n                                          },\n                                          A3($Parse$Combinators.ignore2,\n                                          $Parse$Combinators.$char(_U.chr(\"|\")),\n                                          spaces,\n                                          A3($Parse$Combinators.map2,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);}),field,commasLeading(field))))])));\n      });\n   };\n   var parse = function (tipeString) {    return A2($Parse$Combinators.run,tipe,tipeString);};\n   return _elm.Parse.Type.values = {_op: _op,parse: parse};\n};\nElm.DocPreview = Elm.DocPreview || {};\nElm.DocPreview.make = function (_elm) {\n   \"use strict\";\n   _elm.DocPreview = _elm.DocPreview || {};\n   if (_elm.DocPreview.values) return _elm.DocPreview.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Dict = Elm.Dict.make(_elm),\n   $Docs$Entry = Elm.Docs.Entry.make(_elm),\n   $Docs$Name = Elm.Docs.Name.make(_elm),\n   $Docs$Package = Elm.Docs.Package.make(_elm),\n   $Docs$Type = Elm.Docs.Type.make(_elm),\n   $Effects = Elm.Effects.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $Html$Attributes = Elm.Html.Attributes.make(_elm),\n   $Json$Decode = Elm.Json.Decode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Parse$Type = Elm.Parse.Type.make(_elm),\n   $Regex = Elm.Regex.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Set = Elm.Set.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $StartApp = Elm.StartApp.make(_elm),\n   $String = Elm.String.make(_elm),\n   $Utils$Markdown = Elm.Utils.Markdown.make(_elm);\n   var _op = {};\n   var selectModule = Elm.Native.Port.make(_elm).inboundSignal(\"selectModule\",\n   \"String\",\n   function (v) {\n      return typeof v === \"string\" || typeof v === \"object\" && v instanceof String ? v : _U.badPort(\"a string\",v);\n   });\n   var modules = Elm.Native.Port.make(_elm).inboundSignal(\"modules\",\n   \"String\",\n   function (v) {\n      return typeof v === \"string\" || typeof v === \"object\" && v instanceof String ? v : _U.badPort(\"a string\",v);\n   });\n   var operator = $Regex.regex(\"^\\\\([^a-zA-Z0-9]+\\\\)$\");\n   var $var = $Regex.regex(\"^[a-zA-Z0-9_\\']+$\");\n   var isValue = function (str) {\n      return A2($Regex.contains,$var,str) ? $Maybe.Just(str) : A2($Regex.contains,operator,str) ? $Maybe.Just(A2($String.dropLeft,\n      1,\n      A2($String.dropRight,1,str))) : $Maybe.Nothing;\n   };\n   var stringToType = function (str) {\n      var _p0 = A2($Debug.log,\"String to type for:\",str);\n      var _p1 = $Parse$Type.parse(str);\n      if (_p1.ctor === \"Ok\") {\n            var _p3 = _p1._0;\n            var _p2 = A2($Debug.log,\"type after parse: \",_p3);\n            return _p3;\n         } else {\n            var _p4 = A2($Debug.log,\"Shit while parsing\",_p1._0);\n            return $Docs$Type.Var(str);\n         }\n   };\n   var toNameDict = function (pkg) {    return A2($Dict.map,F2(function (_p5,modul) {    return $Set.fromList($Dict.keys(modul.entries));}),pkg);};\n   var Entry = function (a) {    return {ctor: \"Entry\",_0: a};};\n   var toEntry = F2(function (moduleDocs,name) {\n      var _p6 = A2($Dict.get,name,moduleDocs.entries);\n      if (_p6.ctor === \"Nothing\") {\n            return _U.crashCase(\"DocPreview\",{start: {line: 214,column: 3},end: {line: 219,column: 20}},_p6)(A2($Basics._op[\"++\"],\n            \"docs have been corrupted, could not find \",\n            name));\n         } else {\n            return Entry(_p6._0);\n         }\n   });\n   var Markdown = function (a) {    return {ctor: \"Markdown\",_0: a};};\n   var chunkMap = F2(function (func,chunk) {\n      var _p8 = chunk;\n      if (_p8.ctor === \"Markdown\") {\n            return Markdown(_p8._0);\n         } else {\n            return Entry(A2($Docs$Entry.map,func,_p8._0));\n         }\n   });\n   var subChunksHelp = F2(function (moduleDocs,parts) {\n      var _p9 = parts;\n      if (_p9.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            var _p14 = _p9._0;\n            var part = $String.trim(_p14);\n            var _p10 = isValue(part);\n            if (_p10.ctor === \"Just\") {\n                  return A2($List._op[\"::\"],A2(toEntry,moduleDocs,_p10._0),A2(subChunksHelp,moduleDocs,_p9._1));\n               } else {\n                  var trimmedPart = $String.trimLeft(_p14);\n                  var _p11 = $String.words(trimmedPart);\n                  if (_p11.ctor === \"[]\") {\n                        return _U.list([Markdown(A2($String.join,\",\",parts))]);\n                     } else {\n                        var _p13 = _p11._0;\n                        var _p12 = isValue(_p13);\n                        if (_p12.ctor === \"Just\") {\n                              return _U.list([A2(toEntry,moduleDocs,_p12._0),Markdown(A2($String.dropLeft,$String.length(_p13),trimmedPart))]);\n                           } else {\n                              return _U.list([Markdown(A2($String.join,\",\",parts))]);\n                           }\n                     }\n               }\n         }\n   });\n   var subChunks = F2(function (moduleDocs,postDocs) {    return A2(subChunksHelp,moduleDocs,A2($String.split,\",\",postDocs));});\n   var toChunks = function (moduleDocs) {\n      var _p15 = A2($String.split,\"\\n@docs \",moduleDocs.comment);\n      if (_p15.ctor === \"[]\") {\n            return _U.crashCase(\"DocPreview\",\n            {start: {line: 141,column: 3},end: {line: 147,column: 54}},\n            _p15)(\"Expecting some documented functions in this module!\");\n         } else {\n            return A2($List._op[\"::\"],Markdown(_p15._0),A2($List.concatMap,subChunks(moduleDocs),_p15._1));\n         }\n   };\n   var viewChunk = F2(function (entryView,chunk) {\n      var _p17 = chunk;\n      if (_p17.ctor === \"Markdown\") {\n            return A2($Html.span,_U.list([$Html$Attributes.$class(\"markdown-entry\")]),_U.list([$Utils$Markdown.block(_p17._0)]));\n         } else {\n            return entryView(_p17._0);\n         }\n   });\n   var view = F2(function (address,model) {\n      var _p18 = model.selModule;\n      if (_p18.ctor === \"Nothing\") {\n            return A2($Html.div,\n            _U.list([]),\n            _U.list([$Html.text(\"NO SELECTED MODULE -  Maybe you forgot to add your module to the `exposed-modules` entry in elm-package.json ?\")]));\n         } else {\n            var _p19 = _p18._0;\n            var chunks = toChunks(_p19);\n            return A2($Html.div,\n            _U.list([$Html$Attributes.$class(\"entry-list\")]),\n            A2($List._op[\"::\"],\n            A2($Html.h1,_U.list([$Html$Attributes.$class(\"entry-list-title\")]),_U.list([$Html.text(_p19.name)])),\n            A2($List.map,viewChunk($Docs$Entry.stringView),chunks)));\n         }\n   });\n   var update = F2(function (action,model) {\n      var _p20 = action;\n      switch (_p20.ctor)\n      {case \"NoOp\": return {ctor: \"_Tuple2\",_0: model,_1: $Effects.none};\n         case \"RefreshModules\": var res = A2($Json$Decode.decodeString,$Docs$Package.decodePackage,_p20._0);\n           var _p21 = res;\n           if (_p21.ctor === \"Err\") {\n                 return _U.crashCase(\"DocPreview\",{start: {line: 49,column: 9},end: {line: 58,column: 14}},_p21)(\"Error decoding package docs\");\n              } else {\n                 var _p23 = _p21._0;\n                 return {ctor: \"_Tuple2\",_0: _U.update(model,{$package: _p23,selModule: $List.head($Dict.values(_p23))}),_1: $Effects.none};\n              }\n         default: return {ctor: \"_Tuple2\",_0: _U.update(model,{selModule: A2($Dict.get,_p20._0,model.$package)}),_1: $Effects.none};}\n   });\n   var SelectModule = function (a) {    return {ctor: \"SelectModule\",_0: a};};\n   var selectModuleSignal = A2($Signal.map,SelectModule,selectModule);\n   var RefreshModules = function (a) {    return {ctor: \"RefreshModules\",_0: a};};\n   var modulesSignal = A2($Signal.map,RefreshModules,modules);\n   var NoOp = {ctor: \"NoOp\"};\n   var Model = F2(function (a,b) {    return {selModule: a,$package: b};});\n   var init = {ctor: \"_Tuple2\",_0: A2(Model,$Maybe.Nothing,$Dict.empty),_1: $Effects.none};\n   var app = $StartApp.start({init: init,update: update,view: view,inputs: _U.list([modulesSignal,selectModuleSignal])});\n   var main = app.html;\n   return _elm.DocPreview.values = {_op: _op\n                                   ,Model: Model\n                                   ,init: init\n                                   ,NoOp: NoOp\n                                   ,RefreshModules: RefreshModules\n                                   ,SelectModule: SelectModule\n                                   ,update: update\n                                   ,view: view\n                                   ,viewChunk: viewChunk\n                                   ,Markdown: Markdown\n                                   ,Entry: Entry\n                                   ,toNameDict: toNameDict\n                                   ,chunkMap: chunkMap\n                                   ,stringToType: stringToType\n                                   ,toChunks: toChunks\n                                   ,subChunks: subChunks\n                                   ,subChunksHelp: subChunksHelp\n                                   ,$var: $var\n                                   ,operator: operator\n                                   ,isValue: isValue\n                                   ,toEntry: toEntry\n                                   ,app: app\n                                   ,main: main\n                                   ,modulesSignal: modulesSignal\n                                   ,selectModuleSignal: selectModuleSignal};\n};\n"
  },
  {
    "path": "DocPreview/elm-package.json",
    "content": "{\n    \"version\": \"1.0.0\",\n    \"summary\": \"website for browsing packages and exploring documentation\",\n    \"repository\": \"https://github.com/elm-lang/package.elm-lang.org.git\",\n    \"license\": \"BSD3\",\n    \"source-directories\": [\n      \".\",\n      \"src/\"\n    ],\n    \"exposed-modules\": [],\n    \"native-modules\": true,\n    \"dependencies\": {\n        \"elm-lang/core\": \"3.0.0 <= v < 4.0.0\",\n        \"evancz/elm-effects\": \"2.0.1 <= v < 3.0.0\",\n        \"evancz/elm-html\": \"4.0.2 <= v < 5.0.0\",\n        \"evancz/elm-http\": \"3.0.0 <= v < 4.0.0\",\n        \"evancz/elm-markdown\": \"2.0.0 <= v < 3.0.0\",\n        \"evancz/start-app\": \"2.0.2 <= v < 3.0.0\"\n    },\n    \"elm-version\": \"0.16.0 <= v < 0.17.0\"\n}\n"
  },
  {
    "path": "DocPreview/highlight.pack.js",
    "content": "/*! highlight.js v9.2.0 | BSD3 License | git.io/hljslicense */\n!function(e){var n=\"object\"==typeof window&&window||\"object\"==typeof self&&self;\"undefined\"!=typeof exports?e(exports):n&&(n.hljs=e({}),\"function\"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/gm,\"&amp;\").replace(/</gm,\"&lt;\").replace(/>/gm,\"&gt;\")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+\" \";if(i+=e.parentNode?e.parentNode.className:\"\",t=/\\blang(?:uage)?-([\\w-]+)\\b/i.exec(i))return w(t[1])?t[1]:\"no-highlight\";for(i=i.split(/\\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:\"start\",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:\"start\"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return\" \"+e.nodeName+'=\"'+n(e.value)+'\"'}f+=\"<\"+t(e)+Array.prototype.map.call(e.attributes,r).join(\"\")+\">\"}function u(e){f+=\"</\"+t(e)+\">\"}function c(e){(\"start\"==e.event?o:u)(e.node)}for(var s=0,f=\"\",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else\"start\"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.cI?\"i\":\"\")+(r?\"g\":\"\"))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");u[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof a.k?c(\"keyword\",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\\b\\w+\\b/,!0),i&&(a.bK&&(a.b=\"\\\\b(\"+a.bK.split(\" \").join(\"|\")+\")\\\\b\"),a.b||(a.b=/\\B|\\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\\B|\\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||\"\",a.eW&&i.tE&&(a.tE+=(a.e?\"|\":\"\")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push(\"self\"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?\"\\\\.?(\"+e.b+\")\\\\.?\":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join(\"|\"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?\"\":E.classPrefix,i='<span class=\"'+a,o=t?\"\":\"</span>\";return i+=e+'\">',i+n+o}function h(){if(!k.k)return n(M);var e=\"\",t=0;k.lR.lastIndex=0;for(var r=k.lR.exec(M);r;){e+=n(M.substr(t,r.index-t));var a=g(k,r);a?(B+=a[1],e+=p(a[0],n(r[0]))):e+=n(r[0]),t=k.lR.lastIndex,r=k.lR.exec(M)}return e+n(M.substr(t))}function d(){var e=\"string\"==typeof k.sL;if(e&&!R[k.sL])return n(M);var t=e?f(k.sL,M,!0,y[k.sL]):l(M,k.sL.length?k.sL:void 0);return k.r>0&&(B+=t.r),e&&(y[k.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=void 0!==k.sL?d():h(),M=\"\"}function v(e,n){L+=e.cN?p(e.cN,\"\",!0):\"\",k=Object.create(e,{parent:{value:k}})}function m(e,n){if(M+=e,void 0===n)return b(),0;var t=o(n,k);if(t)return t.skip?M+=n:(t.eB&&(M+=n),b(),t.rB||t.eB||(M=n)),v(t,n),t.rB?0:n.length;var r=u(k,n);if(r){var a=k;a.skip?M+=n:(a.rE||a.eE||(M+=n),b(),a.eE&&(M=n));do k.cN&&(L+=\"</span>\"),k.skip||(B+=k.r),k=k.parent;while(k!=r.parent);return r.starts&&v(r.starts,\"\"),a.rE?0:n.length}if(c(n,k))throw new Error('Illegal lexeme \"'+n+'\" for mode \"'+(k.cN||\"<unnamed>\")+'\"');return M+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: \"'+e+'\"');s(N);var x,k=i||N,y={},L=\"\";for(x=k;x!=N;x=x.parent)x.cN&&(L=p(x.cN,\"\",!0)+L);var M=\"\",B=0;try{for(var C,j,I=0;;){if(k.t.lastIndex=I,C=k.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),x=k;x.parent;x=x.parent)x.cN&&(L+=\"</span>\");return{r:B,value:L,language:e,top:k}}catch(O){if(-1!=O.message.indexOf(\"Illegal\"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(R);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\\t)+)/gm,function(e,n){return n.replace(/\\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\\n/g,\"<br>\")),e}function p(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}function h(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),t.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var h=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");h.innerHTML=o.value,o.value=c(s,u(h),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=p(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll(\"pre code\");Array.prototype.forEach.call(e,h)}}function v(){addEventListener(\"DOMContentLoaded\",b,!1),addEventListener(\"load\",b,!1)}function m(n,t){var r=R[n]=t(e);r.aliases&&r.aliases.forEach(function(e){x[e]=n})}function N(){return Object.keys(R)}function w(e){return e=(e||\"\").toLowerCase(),R[e]||R[x[e]]}var E={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},R={},x={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=h,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR=\"[a-zA-Z]\\\\w*\",e.UIR=\"[a-zA-Z_]\\\\w*\",e.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.CNR=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BNR=\"\\\\b(0b[01]+)\",e.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0},e.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[e.BE]},e.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},e.PWM={b:/\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\\b/},e.C=function(n,t,r){var a=e.inherit({cN:\"comment\",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",r:0}),a},e.CLCM=e.C(\"//\",\"$\"),e.CBCM=e.C(\"/\\\\*\",\"\\\\*/\"),e.HCM=e.C(\"#\",\"$\"),e.NM={cN:\"number\",b:e.NR,r:0},e.CNM={cN:\"number\",b:e.CNR,r:0},e.BNM={cN:\"number\",b:e.BNR,r:0},e.CSSNM={cN:\"number\",b:e.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0},e.RM={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[e.BE,{b:/\\[/,e:/\\]/,r:0,c:[e.BE]}]},e.TM={cN:\"title\",b:e.IR,r:0},e.UTM={cN:\"title\",b:e.UIR,r:0},e.METHOD_GUARD={b:\"\\\\.\\\\s*\"+e.UIR,r:0},e});hljs.registerLanguage(\"ruby\",function(e){var b=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",c=\"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\",r={cN:\"doctag\",b:\"@[A-Za-z]+\"},a={b:\"#<\",e:\">\"},s=[e.C(\"#\",\"$\",{c:[r]}),e.C(\"^\\\\=begin\",\"^\\\\=end\",{c:[r],r:10}),e.C(\"^__END__\",\"\\\\n$\")],n={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:c},t={cN:\"string\",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/`/,e:/`/},{b:\"%[qQwWx]?\\\\(\",e:\"\\\\)\"},{b:\"%[qQwWx]?\\\\[\",e:\"\\\\]\"},{b:\"%[qQwWx]?{\",e:\"}\"},{b:\"%[qQwWx]?<\",e:\">\"},{b:\"%[qQwWx]?/\",e:\"/\"},{b:\"%[qQwWx]?%\",e:\"%\"},{b:\"%[qQwWx]?-\",e:\"-\"},{b:\"%[qQwWx]?\\\\|\",e:\"\\\\|\"},{b:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/}]},i={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",endsParent:!0,k:c},d=[t,a,{cN:\"class\",bK:\"class module\",e:\"$|;\",i:/=/,c:[e.inherit(e.TM,{b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{b:\"<\\\\s*\",c:[{b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(s)},{cN:\"function\",bK:\"def\",e:\"$|;\",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{cN:\"symbol\",b:e.UIR+\"(\\\\!|\\\\?)?:\",r:0},{cN:\"symbol\",b:\":\",c:[t,{b:b}],r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[a,{cN:\"regexp\",c:[e.BE,n],i:/\\n/,v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r{\",e:\"}[a-z]*\"},{b:\"%r\\\\(\",e:\"\\\\)[a-z]*\"},{b:\"%r!\",e:\"![a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var o=\"[>?]>\",l=\"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>\",u=\"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>\",w=[{b:/^\\s*=>/,starts:{e:\"$\",c:d}},{cN:\"meta\",b:\"^(\"+o+\"|\"+l+\"|\"+u+\")\",starts:{e:\"$\",c:d}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],k:c,i:/\\/\\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage(\"json\",function(e){var i={literal:\"true false null\"},n=[e.QSM,e.CNM],r={e:\",\",eW:!0,eE:!0,c:n,k:i},t={b:\"{\",e:\"}\",c:[{cN:\"attr\",b:/\"/,e:/\"/,c:[e.BE],i:\"\\\\n\"},e.inherit(r,{b:/:/})],i:\"\\\\S\"},c={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(r)],i:\"\\\\S\"};return n.splice(n.length,0,t,c),{c:n,k:i,i:\"\\\\S\"}});hljs.registerLanguage(\"css\",function(e){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\",t={b:/[A-Z\\_\\.\\-]+\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\\w-]+\\(/,rB:!0,c:[{cN:\"built_in\",b:/[\\w-]+/},{b:/\\(/,e:/\\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"number\",b:\"#[0-9A-Fa-f]+\"},{cN:\"meta\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,{cN:\"selector-id\",b:/#[A-Za-z0-9_-]+/},{cN:\"selector-class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"selector-attr\",b:/\\[/,e:/\\]/,i:\"$\"},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{b:\"@\",e:\"[{;]\",c:[{cN:\"keyword\",b:/\\S+/},{b:/\\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:\"selector-tag\",b:c,r:0},{b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage(\"cpp\",function(t){var e={cN:\"keyword\",b:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},r={cN:\"string\",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?\"'}),{b:'(u8?|U)?R\"',e:'\"',c:[t.BE]},{b:\"'\\\\\\\\?.\",e:\"'\",i:\".\"}]},i={cN:\"number\",v:[{b:\"\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)\"},{b:t.CNR}],r:0},s={cN:\"meta\",b:\"#\",e:\"$\",k:{\"meta-keyword\":\"if else elif endif define undef warning error line pragma ifdef ifndef\"},c:[{b:/\\\\\\n/,r:0},{bK:\"include\",e:\"$\",k:{\"meta-keyword\":\"include\"},c:[t.inherit(r,{cN:\"meta-string\"}),{cN:\"meta-string\",b:\"<\",e:\">\",i:\"\\\\n\"}]},r,t.CLCM,t.CBCM]},a=t.IR+\"\\\\s*\\\\(\",c={keyword:\"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong\",built_in:\"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr\",literal:\"true false nullptr NULL\"};return{aliases:[\"c\",\"cc\",\"h\",\"c++\",\"h++\",\"hpp\"],k:c,i:\"</\",c:[e,t.CLCM,t.CBCM,i,r,s,{b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:c,c:[\"self\",e]},{b:t.IR+\"::\",k:c},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+t.IR+\"[\\\\*&\\\\s]+)+\"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\\w\\s\\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,i]},t.CLCM,t.CBCM,s]}]}});hljs.registerLanguage(\"cs\",function(e){var t=\"abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield\",r=e.IR+\"(<\"+e.IR+\">)?\";return{aliases:[\"csharp\"],k:t,i:/::/,c:[e.C(\"///\",\"$\",{rB:!0,c:[{cN:\"doctag\",v:[{b:\"///\",r:0},{b:\"<!--|-->\"},{b:\"</?\",e:\">\"}]}]}),e.CLCM,e.CBCM,{cN:\"meta\",b:\"#\",e:\"$\",k:{\"meta-keyword\":\"if else elif endif define undef warning error line region endregion pragma checksum\"}},{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},e.ASM,e.QSM,e.CNM,{bK:\"class interface\",e:/[{;=]/,i:/[^\\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:\"namespace\",e:/[{;=]/,i:/[^\\s:]/,c:[e.inherit(e.TM,{b:\"[a-zA-Z](\\\\.?\\\\w)*\"}),e.CLCM,e.CBCM]},{bK:\"new return throw await\",r:0},{cN:\"function\",b:\"(\"+r+\"\\\\s+)+\"+e.IR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.IR+\"\\\\s*\\\\(\",rB:!0,c:[e.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage(\"groovy\",function(e){return{k:{literal:\"true false null\",keyword:\"byte short char int long boolean float double void def as in assert trait super this abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof\"},c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{r:0,c:[{b:/\\w+@/,r:0},{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,e.CBCM,{cN:\"string\",b:'\"\"\"',e:'\"\"\"'},{cN:\"string\",b:\"'''\",e:\"'''\"},{cN:\"string\",b:\"\\\\$/\",e:\"/\\\\$\",r:10},e.ASM,{cN:\"regexp\",b:/~?\\/[^\\/\\n]+\\//,c:[e.BE]},e.QSM,{cN:\"meta\",b:\"^#!/usr/bin/env\",e:\"$\",i:\"\\n\"},e.BNM,{cN:\"class\",bK:\"class interface trait enum\",e:\"{\",i:\":\",c:[{bK:\"extends implements\"},e.UTM]},e.CNM,{cN:\"meta\",b:\"@[A-Za-z]+\"},{cN:\"string\",b:/[^\\?]{0}[A-Za-z0-9_$]+ *:/},{b:/\\?/,e:/\\:/},{cN:\"symbol\",b:\"^\\\\s*[A-Za-z0-9_$]+:\",r:0}],i:/#|<\\//}});hljs.registerLanguage(\"nginx\",function(e){var r={cN:\"variable\",v:[{b:/\\$\\d+/},{b:/\\$\\{/,e:/}/},{b:\"[\\\\$\\\\@]\"+e.UIR}]},b={eW:!0,l:\"[a-z/_]+\",k:{literal:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},r:0,i:\"=>\",c:[e.HCM,{cN:\"string\",c:[e.BE,r],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/}]},{b:\"([a-z]+):/\",e:\"\\\\s\",eW:!0,eE:!0,c:[r]},{cN:\"regexp\",c:[e.BE,r],v:[{b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:!0},{b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:!0},{b:\"\\\\*(\\\\.[a-z\\\\-]+)+\"},{b:\"([a-z\\\\-]+\\\\.)+\\\\*\"}]},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",r:0},r]};return{aliases:[\"nginxconf\"],c:[e.HCM,{b:e.UIR+\"\\\\s+{\",rB:!0,e:\"{\",c:[{cN:\"section\",b:e.UIR}],r:0},{b:e.UIR+\"\\\\s\",e:\";|{\",rB:!0,c:[{cN:\"attribute\",b:e.UIR,starts:b}],r:0}],i:\"[^\\\\s\\\\}]\"}});hljs.registerLanguage(\"objectivec\",function(e){var t={cN:\"built_in\",b:\"(AV|CA|CF|CG|CI|MK|MP|NS|UI|XC)\\\\w+\"},i={keyword:\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"},n=/[a-zA-Z@][a-zA-Z0-9_]*/,o=\"@interface @class @protocol @implementation\";return{aliases:[\"mm\",\"objc\",\"obj-c\"],k:i,l:n,i:\"</\",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:\"string\",v:[{b:'@\"',e:'\"',i:\"\\\\n\",c:[e.BE]},{b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"}]},{cN:\"meta\",b:\"#\",e:\"$\",c:[{cN:\"meta-string\",v:[{b:'\"',e:'\"'},{b:\"<\",e:\">\"}]}]},{cN:\"class\",b:\"(\"+o.split(\" \").join(\"|\")+\")\\\\b\",e:\"({|$)\",eE:!0,k:o,l:n,c:[e.UTM]},{b:\"\\\\.\"+e.UIR,r:0}]}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},s={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]},a={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\.]+/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",_:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"meta\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage(\"swift\",function(e){var i={keyword:\"__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet\",literal:\"true false nil\",built_in:\"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip\"},t={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",r:0},n=e.C(\"/\\\\*\",\"\\\\*/\",{c:[\"self\"]}),r={cN:\"subst\",b:/\\\\\\(/,e:\"\\\\)\",k:i,c:[]},a={cN:\"number\",b:\"\\\\b([\\\\d_]+(\\\\.[\\\\deE_]+)?|0x[a-fA-F0-9_]+(\\\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\\\b\",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[a],{k:i,c:[o,e.CLCM,n,t,a,{cN:\"function\",bK:\"func\",e:\"{\",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/,i:/\\(/}),{b:/</,e:/>/,i:/>/},{cN:\"params\",b:/\\(/,e:/\\)/,endsParent:!0,k:i,c:[\"self\",a,o,e.CBCM,{b:\":\"}],i:/[\"']/}],i:/\\[|%/},{cN:\"class\",bK:\"struct protocol class extension enum\",k:i,e:\"\\\\{\",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{cN:\"meta\",b:\"(@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain)\"},{bK:\"import\",e:/$/,c:[e.CLCM,n]}]}});hljs.registerLanguage(\"erlang\",function(e){var r=\"[a-z'][a-zA-Z0-9_']*\",c=\"(\"+r+\":\"+r+\"|\"+r+\")\",b={keyword:\"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor\",literal:\"false true\"},i=e.C(\"%\",\"$\"),n={cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",r:0},a={b:\"fun\\\\s+\"+r+\"/\\\\d+\"},d={b:c+\"\\\\(\",e:\"\\\\)\",rB:!0,r:0,c:[{b:c,r:0},{b:\"\\\\(\",e:\"\\\\)\",eW:!0,rE:!0,r:0}]},o={b:\"{\",e:\"}\",r:0},t={b:\"\\\\b_([A-Z][A-Za-z0-9_]*)?\",r:0},f={b:\"[A-Z][a-zA-Z0-9_]*\",r:0},l={b:\"#\"+e.UIR,r:0,rB:!0,c:[{b:\"#\"+e.UIR,r:0},{b:\"{\",e:\"}\",r:0}]},s={bK:\"fun receive if try case\",e:\"end\",k:b};s.c=[i,a,e.inherit(e.ASM,{cN:\"\"}),s,d,e.QSM,n,o,t,f,l];var u=[i,a,s,d,e.QSM,n,o,t,f,l];d.c[1].c=u,o.c=u,l.c[1].c=u;var h={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:u};return{aliases:[\"erl\"],k:b,i:\"(</|\\\\*=|\\\\+=|-=|/\\\\*|\\\\*/|\\\\(\\\\*|\\\\*\\\\))\",c:[{cN:\"function\",b:\"^\"+r+\"\\\\s*\\\\(\",e:\"->\",rB:!0,i:\"\\\\(|#|//|/\\\\*|\\\\\\\\|:|;\",c:[h,e.inherit(e.TM,{b:r})],starts:{e:\";|\\\\.\",k:b,c:u}},i,{b:\"^-\",e:\"\\\\.\",r:0,eE:!0,rB:!0,l:\"-\"+e.IR,k:\"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec\",c:[h]},n,e.QSM,l,t,f,o,{b:/\\.$/}]}});hljs.registerLanguage(\"xml\",function(s){var e=\"[A-Za-z0-9\\\\._:-]+\",t={eW:!0,i:/</,r:0,c:[{cN:\"attr\",b:e,r:0},{b:\"=\",r:0,c:[{cN:\"string\",v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\\/>]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xsl\",\"plist\"],cI:!0,c:[{cN:\"meta\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},s.C(\"<!--\",\"-->\",{r:10}),{b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{b:/<\\?(php)?/,e:/\\?>/,sL:\"php\",c:[{b:\"/\\\\*\",e:\"\\\\*/\",skip:!0}]},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{name:\"style\"},c:[t],starts:{e:\"</style>\",rE:!0,sL:[\"css\",\"xml\"]}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{name:\"script\"},c:[t],starts:{e:\"</script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\",\"xml\"]}},{cN:\"meta\",v:[{b:/<\\?xml/,e:/\\?>/,r:10},{b:/<\\?\\w+/,e:/\\?>/}]},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"name\",b:/[^\\/><\\s]+/,r:0},t]}]}});hljs.registerLanguage(\"ini\",function(e){var b={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",r:10},{b:'\"\"\"',e:'\"\"\"',r:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[e.C(\";\",\"$\"),e.HCM,{cN:\"section\",b:/^\\s*\\[+/,e:/\\]+/},{b:/^[a-z0-9\\[\\]_-]+\\s*=\\s*/,e:\"$\",rB:!0,c:[{cN:\"attr\",b:/[a-z0-9\\[\\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:\"literal\",b:/\\bon|off|true|false|yes|no\\b/},{cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},b,{cN:\"number\",b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},e.NM]}]}]}});hljs.registerLanguage(\"gradle\",function(e){return{cI:!0,k:{keyword:\"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine\"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.NM,e.RM]}});hljs.registerLanguage(\"haskell\",function(e){var i={v:[e.C(\"--\",\"$\"),e.C(\"{-\",\"-}\",{c:[\"self\"]})]},a={cN:\"meta\",b:\"{-#\",e:\"#-}\"},l={cN:\"meta\",b:\"^#\",e:\"$\"},c={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",r:0},n={b:\"\\\\(\",e:\"\\\\)\",i:'\"',c:[a,l,{cN:\"type\",b:\"\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?\"},e.inherit(e.TM,{b:\"[_a-z][\\\\w']*\"}),i]},s={b:\"{\",e:\"}\",c:n.c};return{aliases:[\"hs\"],k:\"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec\",c:[{bK:\"module\",e:\"where\",k:\"module where\",c:[n,i],i:\"\\\\W\\\\.|;\"},{b:\"\\\\bimport\\\\b\",e:\"$\",k:\"import qualified as hiding\",c:[n,i],i:\"\\\\W\\\\.|;\"},{cN:\"class\",b:\"^(\\\\s*)?(class|instance)\\\\b\",e:\"where\",k:\"class family instance where\",c:[c,n,i]},{cN:\"class\",b:\"\\\\b(data|(new)?type)\\\\b\",e:\"$\",k:\"data family type newtype deriving\",c:[a,c,n,s,i]},{bK:\"default\",e:\"$\",c:[c,n,i]},{bK:\"infix infixl infixr\",e:\"$\",c:[e.CNM,i]},{b:\"\\\\bforeign\\\\b\",e:\"$\",k:\"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe\",c:[c,e.QSM,i]},{cN:\"meta\",b:\"#!\\\\/usr\\\\/bin\\\\/env runhaskell\",e:\"$\"},a,l,e.QSM,e.CNM,c,e.inherit(e.TM,{b:\"^[_a-z][\\\\w']*\"}),i,{b:\"->|<-\"}]}});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"section\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",r:0}]},{cN:\"quote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"`.+?`\"},{b:\"^( {4}|\t)\",e:\"$\",r:0}]},{b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"string\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,r:0},{cN:\"link\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"symbol\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],r:10},{b:\"^\\\\[.+\\\\]:\",rB:!0,c:[{cN:\"symbol\",b:\"\\\\[\",e:\"\\\\]:\",eB:!0,eE:!0,starts:{cN:\"link\",e:\"$\"}}]}]}});hljs.registerLanguage(\"go\",function(e){var t={keyword:\"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune\",literal:\"true false iota nil\",built_in:\"append cap close complex copy imag len make new panic print println real recover delete\"};return{aliases:[\"golang\"],k:t,i:\"</\",c:[e.CLCM,e.CBCM,e.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\"},{cN:\"string\",b:\"`\",e:\"`\"},{cN:\"number\",b:e.CNR+\"[dflsi]?\",r:0},e.CNM]}});hljs.registerLanguage(\"http\",function(e){var t=\"HTTP/[0-9\\\\.]+\";return{aliases:[\"https\"],i:\"\\\\S\",c:[{b:\"^\"+t,e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{b:\"^[A-Z]+ (.*?) \"+t+\"$\",rB:!0,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:!0,eE:!0},{b:t},{cN:\"keyword\",b:\"[A-Z]+\"}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:!0,i:\"\\\\n|\\\\s|=\",starts:{e:\"$\",r:0}},{b:\"\\\\n\\\\n\",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage(\"elixir\",function(e){var r=\"[a-zA-Z_][a-zA-Z0-9_]*(\\\\!|\\\\?)?\",n=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",b=\"and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote\",c={cN:\"subst\",b:\"#\\\\{\",e:\"}\",l:r,k:b},a={cN:\"string\",c:[e.BE,c],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/}]},i={cN:\"function\",bK:\"def defp defmacro\",e:/\\B\\b/,c:[e.inherit(e.TM,{b:r,endsParent:!0})]},s=e.inherit(i,{cN:\"class\",bK:\"defmodule defrecord\",e:/\\bdo\\b|$|;/}),l=[a,e.HCM,s,i,{cN:\"symbol\",b:\":\",c:[a,{b:n}],r:0},{cN:\"symbol\",b:r+\":\",r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"->\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[e.HCM,{cN:\"regexp\",i:\"\\\\n\",c:[e.BE,c],v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}],r:0}];return c.c=l,{l:r,k:b,c:l}});hljs.registerLanguage(\"java\",function(e){var a=e.UIR+\"(<\"+e.UIR+\"(\\\\s*,\\\\s*\"+e.UIR+\")*>)?\",t=\"false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private\",r=\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",c={cN:\"number\",b:r,r:0};return{aliases:[\"jsp\"],k:t,i:/<\\/|#/,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{r:0,c:[{b:/\\w+@/,r:0},{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:\"class\",bK:\"class interface\",e:/[{;=]/,eE:!0,k:\"class interface\",i:/[:\"\\[\\]]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+a+\"\\\\s+)+\"+e.UIR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,r:0,c:[e.UTM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:\"meta\",b:\"@[A-Za-z]+\"}]}});hljs.registerLanguage(\"php\",function(e){var c={b:\"\\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*\"},a={cN:\"meta\",b:/<\\?(php)?|\\?>/},i={cN:\"string\",c:[e.BE,a],v:[{b:'b\"',e:'\"'},{b:\"b'\",e:\"'\"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:[\"php3\",\"php4\",\"php5\",\"php6\"],cI:!0,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\",c:[e.HCM,e.C(\"//\",\"$\",{c:[a]}),e.C(\"/\\\\*\",\"\\\\*/\",{c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.C(\"__halt_compiler.+?;\",!1,{eW:!0,k:\"__halt_compiler\",l:e.UIR}),{cN:\"string\",b:/<<<['\"]?\\w+['\"]?$/,e:/^\\w+;?$/,c:[e.BE,{cN:\"subst\",v:[{b:/\\$\\w+/},{b:/\\{\\$/,e:/\\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/},{cN:\"function\",bK:\"function\",e:/[;{]/,eE:!0,i:\"\\\\$|\\\\[|%\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",c,e.CBCM,i,t]}]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:!0,i:/[:\\(\\$\"]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"namespace\",e:\";\",i:/[\\.']/,c:[e.UTM]},{bK:\"use\",e:\";\",c:[e.UTM]},{b:\"=>\"},i,t]}});hljs.registerLanguage(\"sql\",function(e){var t=e.C(\"--\",\"$\");return{cI:!0,i:/[<>{}*]/,c:[{bK:\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke\",e:/;/,eW:!0,k:{keyword:\"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek\",literal:\"true false null\",built_in:\"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[e.BE,{b:\"''\"}]},{cN:\"string\",b:'\"',e:'\"',c:[e.BE,{b:'\"\"'}]},{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage(\"coffeescript\",function(e){var c={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",built_in:\"npm require console print module global window document\"},n=\"[A-Za-z$_][0-9A-Za-z$_]*\",r={cN:\"subst\",b:/#\\{/,e:/}/,k:c},s=[e.BNM,e.inherit(e.CNM,{starts:{e:\"(\\\\s*/)?\",r:0}}),{cN:\"string\",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/\"\"\"/,e:/\"\"\"/,c:[e.BE,r]},{b:/\"/,e:/\"/,c:[e.BE,r]}]},{cN:\"regexp\",v:[{b:\"///\",e:\"///\",c:[r,e.HCM]},{b:\"//[gim]*\",r:0},{b:/\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W|$)/}]},{b:\"@\"+n},{b:\"`\",e:\"`\",eB:!0,eE:!0,sL:\"javascript\"}];r.c=s;var i=e.inherit(e.TM,{b:n}),t=\"(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>\",o={cN:\"params\",b:\"\\\\([^\\\\(]\",rB:!0,c:[{b:/\\(/,e:/\\)/,k:c,c:[\"self\"].concat(s)}]};return{aliases:[\"coffee\",\"cson\",\"iced\"],k:c,i:/\\/\\*/,c:s.concat([e.C(\"###\",\"###\"),e.HCM,{cN:\"function\",b:\"^\\\\s*\"+n+\"\\\\s*=\\\\s*\"+t,e:\"[-=]>\",rB:!0,c:[i,o]},{b:/[:\\(,=]\\s*/,r:0,c:[{cN:\"function\",b:t,e:\"[-=]>\",rB:!0,c:[o]}]},{cN:\"class\",bK:\"class\",e:\"$\",i:/[:=\"\\[\\]]/,c:[{bK:\"extends\",eW:!0,i:/[:=\"\\[\\]]/,c:[i]},i]},{b:n+\":\",e:\":\",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage(\"yaml\",function(e){var a={literal:\"{ } true false yes no Yes No True False null\"},b=\"^[ \\\\-]*\",r=\"[a-zA-Z_][\\\\w\\\\-]*\",t={cN:\"attr\",v:[{b:b+r+\":\"},{b:b+'\"'+r+'\":'},{b:b+\"'\"+r+\"':\"}]},c={cN:\"template-variable\",v:[{b:\"{{\",e:\"}}\"},{b:\"%{\",e:\"}\"}]},l={cN:\"string\",r:0,v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/}],c:[e.BE,c]};return{cI:!0,aliases:[\"yml\",\"YAML\",\"yaml\"],c:[t,{cN:\"meta\",b:\"^---s*$\",r:10},{cN:\"string\",b:\"[\\\\|>] *$\",rE:!0,c:l.c,e:t.v[0].b},{b:\"<%[%=-]?\",e:\"[%-]?%>\",sL:\"ruby\",eB:!0,eE:!0,r:0},{cN:\"type\",b:\"!!\"+e.UIR},{cN:\"meta\",b:\"&\"+e.UIR+\"$\"},{cN:\"meta\",b:\"\\\\*\"+e.UIR+\"$\"},{cN:\"bullet\",b:\"^ *-\",r:0},l,e.HCM,e.CNM],k:a}});hljs.registerLanguage(\"clojure\",function(e){var t={\"builtin-name\":\"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize\"},r=\"a-zA-Z_\\\\-!.?+*=<>&#'\",n=\"[\"+r+\"][\"+r+\"0-9/;:]*\",a=\"[-+]?\\\\d+(\\\\.\\\\d+)?\",o={b:n,r:0},s={cN:\"number\",b:a,r:0},i=e.inherit(e.QSM,{i:null}),c=e.C(\";\",\"$\",{r:0}),d={cN:\"literal\",b:/\\b(true|false|nil)\\b/},l={b:\"[\\\\[\\\\{]\",e:\"[\\\\]\\\\}]\"},m={cN:\"comment\",b:\"\\\\^\"+n},p=e.C(\"\\\\^\\\\{\",\"\\\\}\"),u={cN:\"symbol\",b:\"[:]\"+n},f={b:\"\\\\(\",e:\"\\\\)\"},h={eW:!0,r:0},y={k:t,l:n,cN:\"name\",b:n,starts:h},b=[f,i,m,p,c,u,l,s,d,o];return f.c=[e.C(\"comment\",\"\"),y,h],h.c=b,l.c=b,{aliases:[\"clj\"],i:/\\S/,c:[f,i,m,p,c,u,l,s,d]}});hljs.registerLanguage(\"scala\",function(e){var t={cN:\"meta\",b:\"@[A-Za-z]+\"},a={cN:\"subst\",v:[{b:\"\\\\$[A-Za-z0-9_]+\"},{b:\"\\\\${\",e:\"}\"}]},r={cN:\"string\",v:[{b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},{b:'\"\"\"',e:'\"\"\"',r:10},{b:'[a-z]+\"',e:'\"',i:\"\\\\n\",c:[e.BE,a]},{cN:\"string\",b:'[a-z]+\"\"\"',e:'\"\"\"',c:[a],r:10}]},c={cN:\"symbol\",b:\"'\\\\w[\\\\w\\\\d_]*(?!')\"},i={cN:\"type\",b:\"\\\\b[A-Z][A-Za-z0-9_]*\",r:0},s={cN:\"title\",b:/[^0-9\\n\\t \"'(),.`{}\\[\\]:;][^\\n\\t \"'(),.`{}\\[\\]:;]+|[^0-9\\n\\t \"'(),.`{}\\[\\]:;=]/,r:0},n={cN:\"class\",bK:\"class object trait type\",e:/[:={\\[\\n;]/,eE:!0,c:[{bK:\"extends with\",r:10},{b:/\\[/,e:/\\]/,eB:!0,eE:!0,r:0,c:[i]},{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,r:0,c:[i]},s]},l={cN:\"function\",bK:\"def\",e:/[:={\\[(\\n;]/,eE:!0,c:[s]};return{k:{literal:\"true false null\",keyword:\"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit\"},c:[e.CLCM,e.CBCM,r,c,i,l,n,e.CNM,t]}});hljs.registerLanguage(\"elm\",function(e){var i={v:[e.C(\"--\",\"$\"),e.C(\"{-\",\"-}\",{c:[\"self\"]})]},r={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",r:0},t={b:\"\\\\(\",e:\"\\\\)\",i:'\"',c:[{cN:\"type\",b:\"\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?\"},i]},n={b:\"{\",e:\"}\",c:t.c};return{k:\"let in if then else case of where module import exposing type alias as infix infixl infixr port\",c:[{bK:\"module\",e:\"where\",k:\"module where\",c:[t,i],i:\"\\\\W\\\\.|;\"},{b:\"import\",e:\"$\",k:\"import as exposing\",c:[t,i],i:\"\\\\W\\\\.|;\"},{b:\"type\",e:\"$\",k:\"type alias\",c:[r,t,n,i]},{bK:\"infix infixl infixr\",e:\"$\",c:[e.CNM,i]},{b:\"port\",e:\"$\",k:\"port\",c:[i]},e.QSM,e.CNM,r,e.inherit(e.TM,{b:\"^[_a-z][\\\\w']*\"}),i,{b:\"->|<-\"}]}});hljs.registerLanguage(\"diff\",function(e){return{aliases:[\"patch\"],c:[{cN:\"meta\",r:10,v:[{b:/^@@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +@@$/},{b:/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},{b:/^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}]},{cN:\"comment\",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\\-\\-\\-/,e:/$/},{b:/^\\*{3} /,e:/$/},{b:/^\\+\\+\\+/,e:/$/},{b:/\\*{5}/,e:/\\*{5}$/}]},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"addition\",b:\"^\\\\!\",e:\"$\"}]}});hljs.registerLanguage(\"rust\",function(e){var t=\"([uif](8|16|32|64|size))?\",r=e.inherit(e.CBCM);r.c.push(\"self\");var n=\"Copy Send Sized Sync Drop Fn FnMut FnOnce drop Box ToOwned Clone PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator Option Result SliceConcatExt String ToString Vec assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules!\";return{aliases:[\"rs\"],k:{keyword:\"alignof as be box break const continue crate do else enum extern false fn for if impl in let loop match mod mut offsetof once priv proc pub pure ref return self Self sizeof static struct super trait true type typeof unsafe unsized use virtual while where yield int i8 i16 i32 i64 uint u8 u32 u64 float f32 f64 str char bool\",literal:\"true false Some None Ok Err\",built_in:n},l:e.IR+\"!?\",i:\"</\",c:[e.CLCM,r,e.inherit(e.QSM,{b:/b?\"/,i:null}),{cN:\"string\",v:[{b:/r(#*)\".*?\"\\1(?!#)/},{b:/b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/}]},{cN:\"symbol\",b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:\"number\",v:[{b:\"\\\\b0b([01_]+)\"+t},{b:\"\\\\b0o([0-7_]+)\"+t},{b:\"\\\\b0x([A-Fa-f0-9_]+)\"+t},{b:\"\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)\"+t}],r:0},{cN:\"function\",bK:\"fn\",e:\"(\\\\(|<)\",eE:!0,c:[e.UTM]},{cN:\"meta\",b:\"#\\\\!?\\\\[\",e:\"\\\\]\",c:[{cN:\"meta-string\",b:/\"/,e:/\"/}]},{cN:\"class\",bK:\"type\",e:\";\",c:[e.inherit(e.UTM,{endsParent:!0})],i:\"\\\\S\"},{cN:\"class\",bK:\"trait enum struct\",e:\"{\",c:[e.inherit(e.UTM,{endsParent:!0})],i:\"[\\\\w\\\\d]\"},{b:e.IR+\"::\",k:{built_in:n}},{b:\"->\"}]}});hljs.registerLanguage(\"fsharp\",function(e){var t={b:\"<\",e:\">\",c:[e.inherit(e.TM,{b:/'[a-zA-Z0-9_]+/})]};return{aliases:[\"fs\"],k:\"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield\",i:/\\/\\*/,c:[{cN:\"keyword\",b:/\\b(yield|return|let|do)!/},{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},{cN:\"string\",b:'\"\"\"',e:'\"\"\"'},e.C(\"\\\\(\\\\*\",\"\\\\*\\\\)\"),{cN:\"class\",bK:\"type\",e:\"\\\\(|=|$\",eE:!0,c:[e.UTM,t]},{cN:\"meta\",b:\"\\\\[<\",e:\">\\\\]\",r:10},{cN:\"symbol\",b:\"\\\\B('[A-Za-z])\\\\b\",c:[e.BE]},e.CLCM,e.inherit(e.QSM,{i:null}),e.CNM]}});hljs.registerLanguage(\"perl\",function(e){var t=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\",r={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:t},s={b:\"->{\",e:\"}\"},n={v:[{b:/\\$\\d/},{b:/[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)/},{b:/[\\$%@][^\\s\\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C(\"^\\\\=\\\\w\",\"\\\\=cut\",{eW:!0}),s,{cN:\"string\",c:i,v:[{b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",r:5},{b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",r:5},{b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",r:5},{b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",r:5},{b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",r:5},{b:\"qw\\\\s+q\",e:\"q\",r:5},{b:\"'\",e:\"'\",c:[e.BE]},{b:'\"',e:'\"'},{b:\"`\",e:\"`\",c:[e.BE]},{b:\"{\\\\w+}\",c:[],r:0},{b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",c:[],r:0}]},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{b:\"(\\\\/\\\\/|\"+e.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",r:0,c:[e.HCM,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",r:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[e.BE],r:0}]},{cN:\"function\",bK:\"sub\",e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",eE:!0,r:5,c:[e.TM]},{b:\"-\\\\w\\\\b\",r:0},{b:\"^__DATA__$\",e:\"^__END__$\",sL:\"mojolicious\",c:[{b:\"^@@.*\",e:\"$\",cN:\"comment\"}]}];return r.c=o,s.c=o,{aliases:[\"pl\"],k:t,c:o}});hljs.registerLanguage(\"scss\",function(e){var t=\"[a-zA-Z-][a-zA-Z0-9_-]*\",i={cN:\"variable\",b:\"(\\\\$\"+t+\")\\\\b\"},r={cN:\"number\",b:\"#[0-9A-Fa-f]+\"};({cN:\"attribute\",b:\"[A-Z\\\\_\\\\.\\\\-]+\",e:\":\",eE:!0,i:\"[^\\\\s]\",starts:{eW:!0,eE:!0,c:[r,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"meta\",b:\"!important\"}]}});return{cI:!0,i:\"[=/|']\",c:[e.CLCM,e.CBCM,{cN:\"selector-id\",b:\"\\\\#[A-Za-z0-9_-]+\",r:0},{cN:\"selector-class\",b:\"\\\\.[A-Za-z0-9_-]+\",r:0},{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"selector-tag\",b:\"\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b\",r:0},{b:\":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)\"},{b:\"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)\"},i,{cN:\"attribute\",b:\"\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b\",i:\"[^\\\\s]\"},{b:\"\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b\"},{b:\":\",e:\";\",c:[i,r,e.CSSNM,e.QSM,e.ASM,{cN:\"meta\",b:\"!important\"}]},{b:\"@\",e:\"[{;]\",k:\"mixin include extend for if else each while charset import debug media page content font-face namespace warn\",c:[i,e.QSM,e.ASM,r,e.CSSNM,{b:\"\\\\s[A-Za-z0-9_.-]+\",r:0}]}]}});hljs.registerLanguage(\"python\",function(e){var r={cN:\"meta\",b:/^(>>>|\\.\\.\\.) /},b={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)\"/,e:/\"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},a={cN:\"number\",r:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},l={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",r,a,b]};return{aliases:[\"py\",\"gyp\"],k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False\",built_in:\"Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)/,c:[r,a,b,e.HCM,{v:[{cN:\"function\",bK:\"def\",r:10},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,l,{b:/->/,eW:!0,k:\"None\"}]},{cN:\"meta\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"javascript\",function(e){return{aliases:[\"js\",\"jsx\"],k:{keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},c:[{cN:\"meta\",r:10,b:/^\\s*['\"]use (strict|asm)['\"]/},{cN:\"meta\",b:/^#!/,e:/$/},e.ASM,e.QSM,{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,{cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\"}]},e.CLCM,e.CBCM,{cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)\"},{b:\"\\\\b(0[oO][0-7]+)\"},{b:e.CNR}],r:0},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/(\\/\\w+|\\w+\\/)>/,sL:\"xml\",c:[{b:/<\\w+\\/>/,skip:!0},{b:/<\\w+/,e:/(\\/\\w+|\\w+\\/)>/,skip:!0,c:[\"self\"]}]}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\\[|%/},{b:/\\$[(.]/},e.METHOD_GUARD,{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]},{bK:\"constructor\",e:/\\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage(\"apache\",function(e){var r={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{aliases:[\"apacheconf\"],cI:!0,c:[e.HCM,{cN:\"section\",b:\"</?\",e:\">\"},{cN:\"attribute\",b:/\\w+/,r:0,k:{nomarkup:\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\"},starts:{e:/$/,r:0,k:{literal:\"on off all\"},c:[{cN:\"meta\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"variable\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",r]},r,e.QSM]}}],i:/\\S/}});hljs.registerLanguage(\"makefile\",function(e){var a={cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]};return{aliases:[\"mk\",\"mak\"],c:[e.HCM,{b:/^\\w+\\s*\\W*=/,rB:!0,r:0,starts:{e:/\\s*\\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:\"section\",b:/^[\\w]+:\\s*$/},{cN:\"meta\",b:/^\\.PHONY:/,e:/$/,k:{\"meta-keyword\":\".PHONY\"},l:/[\\.\\w]+/},{b:/^\\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});"
  },
  {
    "path": "DocPreview/src/Docs/Entry.elm",
    "content": "module Docs.Entry where\n\nimport Effects as Fx exposing (Effects)\nimport Html exposing (..)\nimport Html.Attributes exposing (..)\nimport Regex\nimport String\n\nimport Docs.Name as Name\nimport Docs.Type as Type exposing (Type)\nimport Utils.Code exposing (arrow, colon, equals, keyword, padded, space)\nimport Utils.Markdown as Markdown\n\n\n\n-- MODEL\n\n\ntype alias Model tipe =\n    { name : String\n    , info : Info tipe\n    , docs : String\n    }\n\n\ntype Info tipe\n    = Value tipe (Maybe Fixity)\n    | Union\n        { vars : List String\n        , tags : List (Tag tipe)\n        }\n    | Alias\n        { vars : List String\n        , tipe : tipe\n        }\n\n\ntype alias Tag tipe =\n    { tag : String\n    , args : List tipe\n    }\n\n\ntype alias Fixity =\n    { precedence : Int\n    , associativity : String\n    }\n\n\n\n-- UPDATE\n\n\nupdate : a -> Model tipe -> (Model tipe, Effects a)\nupdate action model =\n  (model, Fx.none)\n\n\n\n-- MAP\n\n\nmap : (a -> b) -> Model a -> Model b\nmap func model =\n  let\n    newInfo =\n      case model.info of\n        Value tipe fixity ->\n          Value (func tipe) fixity\n\n        Union {vars,tags} ->\n          Union { vars = vars, tags = List.map (tagMap func) tags }\n\n        Alias {vars,tipe} ->\n          Alias { vars = vars, tipe = func tipe }\n  in\n    { model | info = newInfo }\n\n\ntagMap : (a -> b) -> Tag a -> Tag b\ntagMap func tag =\n  { tag | args = List.map func tag.args }\n\n\n\n-- STRING VIEW\n\n\nstringView : Model String -> Html\nstringView model =\n  let\n    annotation =\n      case model.info of\n        Value tipe _ ->\n            [ nameToLink model.name :: padded colon ++ [text tipe] ]\n\n        Union {vars,tags} ->\n            unionAnnotation (\\t -> [text t]) model.name vars tags\n\n        Alias {vars,tipe} ->\n            [ aliasNameLine model.name vars\n            , [ text \"    \", text tipe ]\n            ]\n  in\n    div [ class \"docs-entry\", id model.name ]\n      [ annotationBlock annotation\n      , div [class \"docs-comment\"] [Markdown.block model.docs]\n      ]\n\n\n\n-- TYPE VIEW\n\n(=>) : a -> b -> ( a, b )\n(=>) = (,)\n\n\ntypeView : Name.Dictionary -> Model Type -> Html\ntypeView nameDict model =\n  let\n    annotation =\n      case model.info of\n        Value tipe _ ->\n            valueAnnotation nameDict model.name tipe\n\n        Union {vars,tags} ->\n            unionAnnotation (Type.toHtml nameDict Type.App) model.name vars tags\n\n        Alias {vars,tipe} ->\n            aliasAnnotation nameDict model.name vars tipe\n  in\n    div [ class \"docs-entry\", id model.name ]\n      [ annotationBlock annotation\n      , div [class \"docs-comment\"] [Markdown.block model.docs]\n      ]\n\n\nannotationBlock : List (List Html) -> Html\nannotationBlock bits =\n  div [ class \"docs-annotation\" ]\n    (List.concat (List.intersperse [text \"\\n\"] bits))\n\n\nnameToLink : String -> Html\nnameToLink name =\n  let\n    humanName =\n      if Regex.contains operator name then\n        \"(\" ++ name ++ \")\"\n\n      else\n        name\n  in\n    a [style [\"font-weight\" => \"bold\"], href (\"#\" ++ name)] [text humanName]\n\n\noperator : Regex.Regex\noperator =\n  Regex.regex \"^[^a-zA-Z0-9]+$\"\n\n\n\n-- VALUE ANNOTATIONS\n\n\nvalueAnnotation : Name.Dictionary -> String -> Type -> List (List Html)\nvalueAnnotation nameDict name tipe =\n  let\n    _ = Debug.log \"Value annotation:\" tipe\n  in\n    case tipe of\n      Type.Function args result ->\n          if String.length name + 3 + Type.length Type.Other tipe > 64 then\n              [ nameToLink name ] :: longFunctionAnnotation nameDict args result\n\n          else\n              [ nameToLink name :: padded colon ++ Type.toHtml nameDict Type.Other tipe ]\n\n      _ ->\n          [ nameToLink name :: padded colon ++ Type.toHtml nameDict Type.Other tipe ]\n\n\nlongFunctionAnnotation : Name.Dictionary -> List Type -> Type -> List (List Html)\nlongFunctionAnnotation nameDict args result =\n  let\n    tipeHtml =\n      List.map (Type.toHtml nameDict Type.Func) (args ++ [result])\n\n    starters =\n      [ text \"  \", colon, text \"  \" ]\n      ::\n      List.repeat (List.length args) [ text \"  \", arrow, space ]\n  in\n    List.map2 (++) starters tipeHtml\n\n\n\n-- UNION ANNOTATIONS\n\n\nunionAnnotation : (tipe -> List Html) -> String -> List String -> List (Tag tipe) -> List (List Html)\nunionAnnotation tipeToHtml name vars tags =\n  let\n    nameLine =\n      [ keyword \"type\"\n      , space\n      , nameToLink name\n      , text (String.concat (List.map ((++) \" \") vars))\n      ]\n\n    tagLines =\n      List.map2 (::)\n        (text \"  = \" :: List.repeat (List.length tags - 1) (text \"  | \"))\n        (List.map (viewTag tipeToHtml) tags)\n  in\n    nameLine :: tagLines\n\n\nviewTag : (tipe -> List Html) -> Tag tipe -> List Html\nviewTag tipeToHtml {tag,args} =\n  text tag :: List.concatMap ((::) space) (List.map tipeToHtml args)\n\n\n\n-- ALIAS ANNOTATIONS\n\n\naliasAnnotation : Name.Dictionary -> String -> List String -> Type -> List (List Html)\naliasAnnotation nameDict name vars tipe =\n  let\n    typeLines =\n      case tipe of\n        Type.Record fields ext ->\n          let\n            ( firstLine, starters ) =\n              case ext of\n                Nothing ->\n                  ( []\n                  , text \"  { \" :: List.repeat (List.length fields) (text \"  , \")\n                  )\n\n                Just extName ->\n                  ( [ [ text \"  { \", text extName, text \" |\" ] ]\n                  , text \"    | \" :: List.repeat (List.length fields) (text \"    , \")\n                  )\n          in\n            firstLine\n              ++ List.map2 (::) starters (List.map (Type.fieldToHtml nameDict) fields)\n              ++ [ [ text \"  }\" ] ]\n\n        _ ->\n          [ text \"  \" :: Type.toHtml nameDict Type.Other tipe ]\n  in\n    aliasNameLine name vars :: typeLines\n\n\naliasNameLine : String -> List String -> List Html\naliasNameLine name vars =\n  [ keyword \"type\"\n  , space\n  , keyword \"alias\"\n  , space\n  , nameToLink name\n  , text (String.concat (List.map ((++) \" \") vars))\n  , space\n  , equals\n  , space\n  ]\n"
  },
  {
    "path": "DocPreview/src/Docs/Name.elm",
    "content": "module Docs.Name where\n\nimport Dict\nimport Html exposing (..)\nimport Html.Attributes exposing (..)\nimport Set\nimport String\n\n\ntype alias Canonical =\n    { home : String\n    , name : String\n    }\n\n\ntype alias Dictionary =\n    Dict.Dict String (Set.Set String)\n\n\ntoLink : Dictionary -> Canonical -> Html\ntoLink dict ({home,name} as canonical) =\n  case Maybe.map (Set.member name) (Dict.get home dict) of\n    Just True ->\n      let\n        link =\n          String.map (\\c -> if c == '.' then '-' else c) home ++ \"#\" ++ name\n      in\n        a [href link] [text name]\n\n    _ ->\n      text name\n\n"
  },
  {
    "path": "DocPreview/src/Docs/Package.elm",
    "content": "module Docs.Package\n  ( Package\n  , Module\n  , decodePackage\n  , decodeModule\n  )\n  where\n\nimport Dict\nimport Json.Decode as Json exposing ((:=))\nimport Docs.Entry as Entry\n\n\n\n-- TYPES\n\n\ntype alias Package =\n    Dict.Dict String Module\n\n\ntype alias Module =\n    { name : String\n    , comment : String\n    , entries : Dict.Dict String (Entry.Model String)\n    }\n\n\n\n-- DECODERS\n\n\ndecodePackage : Json.Decoder Package\ndecodePackage =\n  Json.map (dictBy .name) (Json.list decodeModule)\n\n\ndecodeModule : Json.Decoder Module\ndecodeModule =\n  let\n    make name comment values unions aliases =\n      Module name comment (dictBy .name (values ++ unions ++ aliases))\n  in\n    Json.object5 make\n      (\"name\" := Json.string)\n      (\"comment\" := Json.string)\n      (\"aliases\" := Json.list (entry alias))\n      (\"types\" := Json.list (entry union))\n      (\"values\" := Json.list (entry value))\n\n\ndictBy : (a -> comparable) -> List a -> Dict.Dict comparable a\ndictBy f list =\n  Dict.fromList (List.map (\\x -> (f x, x)) list)\n\n\n\n-- ENTRY\n\n\nentry : Json.Decoder (Entry.Info String) -> Json.Decoder (Entry.Model String)\nentry decodeInfo =\n  Json.object3 Entry.Model\n    (\"name\" := Json.string)\n    decodeInfo\n    (\"comment\" := Json.string)\n\n\n\n-- VALUE INFO\n\n\nvalue : Json.Decoder (Entry.Info String)\nvalue =\n  Json.object2 Entry.Value\n    (\"type\" := tipe)\n    (Json.maybe fixity)\n\n\nfixity : Json.Decoder Entry.Fixity\nfixity =\n  Json.object2 Entry.Fixity\n    (\"precedence\" := Json.int)\n    (\"associativity\" := Json.string)\n\n\n\n-- UNION INFO\n\n\nunion : Json.Decoder (Entry.Info String)\nunion =\n  Json.object2 (\\vars tags -> Entry.Union { vars = vars, tags = tags })\n    (\"args\" := Json.list Json.string)\n    (\"cases\" := Json.list tag)\n\n\ntag : Json.Decoder (Entry.Tag String)\ntag =\n  Json.tuple2 Entry.Tag Json.string (Json.list tipe)\n\n\n\n-- ALIAS INFO\n\n\nalias : Json.Decoder (Entry.Info String)\nalias =\n  Json.object2 (\\vars tipe -> Entry.Alias { vars = vars, tipe = tipe })\n    (\"args\" := Json.list Json.string)\n    (\"type\" := tipe)\n\n\n\n-- TYPES\n\n\ntipe : Json.Decoder String\ntipe =\n  Json.string\n\n\n"
  },
  {
    "path": "DocPreview/src/Docs/Summary.elm",
    "content": "module Docs.Summary (Summary, decoder) where\n\nimport Docs.Version as Vsn\nimport Json.Decode exposing (..)\n\n\n\ntype alias Summary =\n    { name : String\n    , summary : String\n    , versions : List Vsn.Version\n    }\n\n\ndecoder : Decoder (List Summary)\ndecoder =\n  list decodeSummary\n\n\ndecodeSummary : Decoder Summary\ndecodeSummary =\n  object3\n    Summary\n    (\"name\" := string)\n    (\"summary\" := string)\n    (\"versions\" := list Vsn.decoder)\n\n"
  },
  {
    "path": "DocPreview/src/Docs/Type.elm",
    "content": "module Docs.Type where\n\nimport Html exposing (..)\nimport String\nimport Docs.Name as Name\nimport Utils.Code as Code exposing (arrow, colon, padded, space)\n\n\n\n-- MODEL\n\n\ntype Type\n    = Function (List Type) Type\n    | Var String\n    | Apply Name.Canonical (List Type)\n    | Tuple (List Type)\n    | Record (List (String, Type)) (Maybe String)\n\n\ntype alias Tag =\n    { tag : String\n    , args : List Type\n    }\n\n\n\n-- TYPE TO FLAT HTML\n\n\ntype Context = Func | App | Other\n\n\ntoHtml : Name.Dictionary -> Context -> Type -> List Html\ntoHtml nameDict context tipe =\n  let\n    go ctx t =\n      toHtml nameDict ctx t\n  in\n  case tipe of\n    Function args result ->\n        let\n          maybeAddParens =\n            case context of\n              Func -> Code.addParens\n              App -> Code.addParens\n              Other -> identity\n\n          argsHtml =\n            List.concatMap (\\arg -> go Func arg ++ padded arrow) args\n        in\n          maybeAddParens (argsHtml ++ go Func result)\n\n    Var name ->\n        [ text name ]\n\n    Apply name [] ->\n        [ Name.toLink nameDict name ]\n\n    Apply name args ->\n        let\n          maybeAddParens =\n            case context of\n              Func -> identity\n              App -> Code.addParens\n              Other -> identity\n\n          argsHtml =\n            List.concatMap (\\arg -> space :: go App arg) args\n        in\n          maybeAddParens (Name.toLink nameDict name :: argsHtml)\n\n    Tuple args ->\n      List.map (go Other) args\n        |> List.intersperse [text \", \"]\n        |> List.concat\n        |> Code.addParens\n\n    Record fields ext ->\n        let\n          fieldsHtml =\n            List.map (fieldToHtml nameDict) fields\n              |> List.intersperse [text \", \"]\n              |> List.concat\n\n          recordInsides =\n            case ext of\n              Nothing ->\n                fieldsHtml\n\n              Just extName ->\n                text extName :: text \" | \" :: fieldsHtml\n        in\n          text \"{ \" :: recordInsides ++ [text \" }\"]\n\n\nfieldToHtml : Name.Dictionary -> (String, Type) -> List Html\nfieldToHtml nameDict (field, tipe) =\n  text field :: space :: colon :: space :: toHtml nameDict Other tipe\n\n\n\n-- TYPE LENGTH\n\n\nlength : Context -> Type -> Int\nlength context tipe =\n  case tipe of\n    Function args result ->\n        let\n          parens =\n            case context of\n              Func -> 2\n              App -> 2\n              Other -> 0\n\n          argLengths =\n            List.map (\\t -> 4 + length Func t) args\n        in\n          parens + List.sum argLengths + length Func result\n\n    Var name ->\n        String.length name\n\n    Apply {name} [] ->\n        String.length name\n\n    Apply {name} args ->\n        let\n          parens =\n            case context of\n              Func -> 0\n              App -> 2\n              Other -> 0\n\n          argsLength =\n            List.sum (List.map (\\t -> 1 + length App t) args)\n        in\n          parens + String.length name + argsLength\n\n    Tuple args ->\n        List.sum (List.map (\\t -> 2 + length Other t) args)\n\n    Record fields ext ->\n        let\n          fieldLength (field, tipe) =\n            String.length field + 3 + length Other tipe\n\n          recordLength =\n            2 + List.sum (List.map (\\ft -> 2 + fieldLength ft) fields)\n\n          extLength =\n            case ext of\n              Nothing ->\n                0\n\n              Just extName ->\n                2 + String.length extName\n        in\n          recordLength + extLength\n\n"
  },
  {
    "path": "DocPreview/src/Docs/Version.elm",
    "content": "module Docs.Version\n    ( Version\n    , Dictionary\n    , MinorPatch\n    , decoder\n    , filterInteresting\n    , realMax\n    , toDict\n    , fromStringList\n    , vsnToString\n    )\n    where\n\nimport Dict\nimport Json.Decode as Json exposing (..)\nimport String\n\n\ntype alias Version = (Int, Int, Int)\n\n\n\n-- JSON DECODER\n\n\ndecoder : Decoder Version\ndecoder =\n  customDecoder string fromString\n\n\nfromString : String -> Result String Version\nfromString str =\n  case all (List.map String.toInt (String.split \".\" str)) of\n    Ok [major, minor, patch] ->\n        Ok (major, minor, patch)\n\n    _ ->\n        Err (str ++ \" is not a valid Elm version\")\n\n\nall : List (Result x a) -> Result x (List a)\nall list =\n  case list of\n    [] ->\n        Ok []\n\n    x :: xs ->\n        Result.map2 (::) x (all xs)\n\n\nfromStringList : List String -> Result String (List Version)\nfromStringList versions =\n  all (List.map fromString versions)\n\n\n\n-- MAXIMUM\n\n\nrealMax : String -> List String -> Maybe String\nrealMax rawVsn allRawVsns =\n  case Result.map2 (,) (fromString rawVsn) (fromStringList allRawVsns) of\n    Ok (version, allVersions) ->\n      let\n        maxVersion =\n          List.foldl max version allVersions\n      in\n        if version == maxVersion then\n            Nothing\n\n        else\n            Just (vsnToString maxVersion)\n\n    _ ->\n        Nothing\n\n\n\n-- TO STRING\n\n\nvsnToString : Version -> String\nvsnToString (major, minor, patch) =\n  toString major ++ \".\" ++ toString minor ++ \".\" ++ toString patch\n\n\n\n-- INTERESTING VERSIONS\n\n\nfilterInteresting : List Version -> List Version\nfilterInteresting versions =\n  List.map (uncurry toLatest) (Dict.toList (toDict versions))\n\n\ntoLatest : Int -> MinorPatch -> Version\ntoLatest major {latest} =\n  let\n    (minor, patch) =\n      latest\n  in\n    (major, minor, patch)\n\n\n\n-- TO DICTIONARY\n\n\ntype alias Dictionary =\n  Dict.Dict Int MinorPatch\n\n\n\ntype alias MinorPatch =\n  { latest : (Int, Int)\n  , others : List (Int, Int)\n  }\n\n\ntoDict : List Version -> Dictionary\ntoDict versions =\n  List.foldl toDictHelp Dict.empty versions\n\n\ntoDictHelp : Version -> Dictionary -> Dictionary\ntoDictHelp (major, minor, patch) dict =\n  let\n    current =\n      (minor, patch)\n\n    update maybeMinorPatch =\n      case maybeMinorPatch of\n        Nothing ->\n          Just (MinorPatch current [])\n\n        Just {latest, others} ->\n          Just (MinorPatch (max latest current) (insert (min latest current) others))\n  in\n    Dict.update major update dict\n\n\ninsert : comparable -> List comparable -> List comparable\ninsert y list =\n  case list of\n    [] ->\n      [y]\n\n    x :: xs ->\n      if y > x then\n        x :: insert y xs\n\n      else\n        y :: list\n"
  },
  {
    "path": "DocPreview/src/Native/Jump.js",
    "content": "Elm.Native.Jump = {};\n\nElm.Native.Jump.make = function(localRuntime)\n{\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Jump = localRuntime.Native.Jump || {};\n\tif (localRuntime.Native.Jump.values)\n\t{\n\t\treturn localRuntime.Native.Jump.values;\n\t}\n\n\tvar Task = Elm.Native.Task.make(localRuntime);\n\n\tvar jump = Task.asyncFunction(function(callback) {\n\t\tvar hash = window.location.hash;\n\t\tif (hash.length > 0 && hash[0] === '#')\n\t\t{\n\t\t\tvar id = hash.slice(1);\n\t\t\tvar target = document.getElementById(id);\n\t\t\tif (typeof target.scrollIntoView === 'function')\n\t\t\t{\n\t\t\t\ttarget.scrollIntoView(true);\n\t\t\t}\n\t\t}\n\t\treturn callback(Task.succeed({ ctor: '_Tuple0' }));\n\t});\n\n\treturn localRuntime.Native.Jump.values = {\n\t\tjump: jump\n\t};\n};\n"
  },
  {
    "path": "DocPreview/src/Native/Parse.js",
    "content": "Elm.Native.Parse = {};\n\nElm.Native.Parse.make = function(localRuntime)\n{\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Parse = localRuntime.Native.Parse || {};\n\tif (localRuntime.Native.Parse.values)\n\t{\n\t\treturn localRuntime.Native.Parse.values;\n\t}\n\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\t// HELPERS\n\n\tfunction ok(index, value) {\n\t\treturn { ctor: 'Ok', _0: { index: index, value: value } };\n\t}\n\n\tfunction err(msg) {\n\t\treturn { ctor: 'Err', _0: msg };\n\t}\n\n\n\t// BASICS\n\n\tfunction succeed(value)\n\t{\n\t\treturn function(input, index) {\n\t\t\treturn ok(index, value);\n\t\t};\n\t}\n\n\tfunction fail(msg)\n\t{\n\t\treturn function(input, index) {\n\t\t\treturn err(msg);\n\t\t};\n\t}\n\n\n\t// SATISFY\n\n\tfunction satisfy(isOk)\n\t{\n\t\treturn function(input, index) {\n\t\t\tif (input.length <= index)\n\t\t\t{\n\t\t\t\treturn err('ran out of characters');\n\t\t\t}\n\t\t\tvar chr = Utils.chr(input[index]);\n\t\t\treturn isOk(chr)\n\t\t\t\t? ok(index + 1, chr)\n\t\t\t\t: err(\"char '\" + input[index] + \"' at index \" + index + \" is not okay.\");\n\t\t};\n\t}\n\n\tfunction string(expected)\n\t{\n\t\treturn function(input, index) {\n\t\t\tvar nextIndex = index + expected.length;\n\t\t\tvar actual = input.slice(index, nextIndex);\n\t\t\treturn expected === actual\n\t\t\t\t? ok(nextIndex, actual)\n\t\t\t\t: err(\"expecting '\" + expected + \"' at index \" + index + \" but instead saw '\" + actual + \"'.\");\n\t\t};\n\t}\n\n\n\t// ONE OF\n\n\tfunction oneOf(parserList)\n\t{\n\t\tvar parsers = List.toArray(parserList);\n\n\t\treturn function(input, index) {\n\t\t\tvar len = parsers.length;\n\t\t\tfor (var i = 0; i < len; ++i)\n\t\t\t{\n\t\t\t\tvar result = parsers[i](input, index);\n\t\t\t\tif (result.ctor === 'Ok')\n\t\t\t\t{\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn err('none of the parsers given to oneOf worked');\n\t\t};\n\t}\n\n\n\t// AND THEN\n\n\tfunction andThen(parser, callback)\n\t{\n\t\treturn function(input, index) {\n\t\t\tvar result = parser(input, index);\n\t\t\tif (result.ctor === 'Ok')\n\t\t\t{\n\t\t\t\tvar newData = result._0;\n\t\t\t\treturn callback(newData.value)(input, newData.index);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn result;\n\t\t\t}\n\t\t};\n\t}\n\n\n\t// RUN\n\n\tfunction run(parser, input)\n\t{\n\t\tvar result = parser(input, 0);\n\t\tif (result.ctor === 'Ok')\n\t\t{\n\t\t\treturn { ctor: 'Ok', _0: result._0.value };\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn result;\n\t\t}\n\t}\n\n\n\treturn localRuntime.Native.Parse.values = {\n\t\tsucceed: succeed,\n\t\tfail: fail,\n\t\tsatisfy: satisfy,\n\t\tstring: string,\n\t\toneOf: oneOf,\n\t\tandThen: F2(andThen),\n\t\trun: F2(run)\n\t};\n};\n"
  },
  {
    "path": "DocPreview/src/Parse/Combinators.elm",
    "content": "module Parse.Combinators where\n\nimport Char\nimport Native.Parse\n\n\n\n-- PARSERS\n\n\ntype Parser a = P\n\n\nrun : Parser a -> String -> Result String a\nrun =\n  Native.Parse.run\n\n\n\n-- CHARACTERS\n\n\nchar : Char -> Parser Char\nchar c =\n  satisfy ((==) c)\n\n\nsatisfy : (Char -> Bool) -> Parser Char\nsatisfy =\n  Native.Parse.satisfy\n\n\nlower : Parser Char\nlower =\n  satisfy Char.isLower\n\n\nupper : Parser Char\nupper =\n  satisfy Char.isUpper\n\n\nletter : Parser Char\nletter =\n  satisfy (\\c -> Char.isLower c || Char.isUpper c)\n\n\ndigit : Parser Char\ndigit =\n  satisfy Char.isDigit\n\n\n\n-- STRINGS\n\n\nstring : String -> Parser String\nstring =\n  Native.Parse.string\n\n\n{--\nint : Parser Int\nint =\n  Debug.crash \"TODO\"\n\n\nfloat : Parser Float\nfloat =\n  Debug.crash \"TODO\"\n--}\n\n\n-- COMBINATORS\n\n\noneOf : List (Parser a) -> Parser a\noneOf =\n  Native.Parse.oneOf\n\n\ntry : Parser a -> Parser a\ntry parser =\n  parser\n\n\nsucceed : a -> Parser a\nsucceed =\n  Native.Parse.succeed\n\n\nfail : String -> Parser a\nfail =\n  Native.Parse.fail\n\n\nmap : (a -> b) -> Parser a -> Parser b\nmap func parser =\n  parser `andThen` \\a ->\n    succeed (func a)\n\n\nmap2 : (a -> b -> c) -> Parser a -> Parser b -> Parser c\nmap2 func parserA parserB =\n  parserA `andThen` \\a ->\n  parserB `andThen` \\b ->\n    succeed (func a b)\n\n\nmap3 : (a -> b -> c -> d) -> Parser a -> Parser b -> Parser c -> Parser d\nmap3 func parserA parserB parserC =\n  parserA `andThen` \\a ->\n  parserB `andThen` \\b ->\n  parserC `andThen` \\c ->\n    succeed (func a b c)\n\n\nmap4 : (a -> b -> c -> d -> e) -> Parser a -> Parser b -> Parser c -> Parser d -> Parser e\nmap4 func parserA parserB parserC parserD =\n  parserA `andThen` \\a ->\n  parserB `andThen` \\b ->\n  parserC `andThen` \\c ->\n  parserD `andThen` \\d ->\n    succeed (func a b c d)\n\n\nandThen : Parser a -> (a -> Parser b) -> Parser b\nandThen =\n  Native.Parse.andThen\n\n\nzeroOrMore : Parser a -> Parser (List a)\nzeroOrMore parser =\n  oneOf\n    [ parser `andThen` \\a -> map ((::) a) (zeroOrMore parser)\n    , succeed []\n    ]\n\n\noneOrMore : Parser a -> Parser (List a)\noneOrMore parser =\n  map2 (::) parser (zeroOrMore parser)\n\n\nlazy : (() -> Parser a) -> Parser a\nlazy thunk =\n  succeed () `andThen` thunk\n\n\nignore1 : Parser x -> Parser a -> Parser a\nignore1 x parser =\n  map2 (\\_ a -> a) x parser\n\n\nignore2 : Parser x -> Parser y -> Parser a -> Parser a\nignore2 x y parser =\n  map3 (\\_ _ a -> a) x y parser\n\n\nignore3 : Parser x -> Parser y -> Parser z -> Parser a -> Parser a\nignore3 x y z parser =\n  map4 (\\_ _ _ a -> a) x y z parser\n\n\nmiddle : Parser x -> Parser a -> Parser y -> Parser a\nmiddle x parser y =\n  map3 (\\_ a _ -> a) x parser y\n"
  },
  {
    "path": "DocPreview/src/Parse/Type.elm",
    "content": "module Parse.Type (parse) where\n\nimport Char\nimport String\n\nimport Parse.Combinators exposing (..)\nimport Docs.Name as Name\nimport Docs.Type exposing (Type(..))\n\n\n\n-- PARSE\n\n\nparse : String -> Result String Type\nparse tipeString =\n  run tipe tipeString\n\n\n\n-- HELPERS\n\n\nelmVarWith : Parser Char -> Parser String\nelmVarWith starter =\n  map2 (::) starter (zeroOrMore varChar)\n    |> map String.fromList\n\n\nvarChar : Parser Char\nvarChar =\n  satisfy (\\c -> Char.isLower c || Char.isUpper c || c == '_' || c == '\\'' || Char.isDigit c)\n\n\nspaces : Parser ()\nspaces =\n  map (always ()) (zeroOrMore (char ' '))\n\n\ncommasLeading : Parser a -> Parser (List a)\ncommasLeading parser =\n  zeroOrMore (ignore3 spaces (char ',') spaces parser)\n\n\n\n-- TYPE VARIABLES\n\n\nvar : Parser Type\nvar =\n  map Var (elmVarWith lower)\n\n\n\n-- TYPE APPLICATIONS\n\n\nname : Parser Name.Canonical\nname =\n  nameHelp []\n\n\nnameHelp : List String -> Parser Name.Canonical\nnameHelp seen =\n  elmVarWith upper `andThen` \\str ->\n    oneOf\n      [ ignore1 (char '.') (nameHelp (str :: seen))\n      , succeed (Name.Canonical (String.join \".\" (List.reverse seen)) str)\n      ]\n\n\napply : Parser Type\napply =\n  lazy <| \\_ ->\n    map2 Apply name (zeroOrMore (ignore1 spaces applyTerm))\n\n\napplyTerm : Parser Type\napplyTerm =\n  lazy <| \\_ ->\n    oneOf [ var, map (\\n -> Apply n []) name, record, parenTipe ]\n\n\n\n-- RECORDS\n\n\nrecord : Parser Type\nrecord =\n  lazy <| \\_ ->\n    middle\n      (ignore1 (char '{') spaces)\n      (\n        oneOf\n          [ elmVarWith lower `andThen` recordHelp\n          , succeed (Record [] Nothing)\n          ]\n      )\n      (ignore1 spaces (char '}'))\n\n\nrecordHelp : String -> Parser Type\nrecordHelp lowerName =\n  lazy <| \\_ ->\n    ignore1 spaces <|\n      oneOf\n        [ map2\n            (\\t rest -> Record ((lowerName, t) :: rest) Nothing)\n            (ignore2 (char ':') spaces tipe)\n            (commasLeading field)\n        , map\n            (\\fields -> Record fields (Just lowerName))\n            (ignore2 (char '|') spaces (map2 (::) field (commasLeading field)))\n        ]\n\n\nfield : Parser (String, Type)\nfield =\n  lazy <| \\_ ->\n    map2 (,) (elmVarWith lower) (ignore3 spaces (char ':') spaces tipe)\n\n\n\n-- FUNCTIONS\n\n\ntipe : Parser Type\ntipe =\n  lazy <| \\_ ->\n    map2 (buildFunction []) tipeTerm arrowTerms\n\n\nbuildFunction : List Type -> Type -> List Type -> Type\nbuildFunction args currentType remainingTypes =\n  case remainingTypes of\n    [] ->\n      if List.isEmpty args then\n        currentType\n\n      else\n        Function (List.reverse args) currentType\n\n    t :: ts ->\n      buildFunction (currentType :: args) t ts\n\n\narrowTerms : Parser (List Type)\narrowTerms =\n  lazy <| \\_ ->\n    zeroOrMore (ignore3 spaces (string \"->\") spaces tipeTerm)\n\n\ntipeTerm : Parser Type\ntipeTerm =\n  lazy <| \\_ ->\n    oneOf [ var, apply, record, parenTipe ]\n\n\nparenTipe : Parser Type\nparenTipe =\n  lazy <| \\_ ->\n    map tuplize <|\n      middle\n        (ignore1 (char '(') spaces)\n        (oneOf\n          [ map2 (::) tipe (commasLeading tipe)\n          , succeed []\n          ]\n        )\n        (ignore1 spaces (char ')'))\n\n\ntuplize : List Type -> Type\ntuplize args =\n  case args of\n    [t] ->\n      t\n\n    _ ->\n      Tuple args"
  },
  {
    "path": "DocPreview/src/Utils/Code.elm",
    "content": "module Utils.Code where\n\nimport Html exposing (..)\nimport Html.Attributes exposing (..)\n\n\n\nkeyword : String -> Html\nkeyword kw =\n  span [class \"hljs-keyword\"] [text kw]\n\n\naddParens : List Html -> List Html\naddParens list =\n  text \"(\" :: list ++ [text \")\"]\n\n\nspace : Html\nspace =\n  text \" \"\n\n\npadded : Html -> List Html\npadded html =\n  [ space, html, space ]\n\n\narrow : Html\narrow =\n  span [] [text \"->\"]\n\n\ncolon : Html\ncolon =\n  span [] [text \":\"]\n\n\nequals : Html\nequals =\n  span [] [text \"=\"]\n\n\n"
  },
  {
    "path": "DocPreview/src/Utils/FluidList.elm",
    "content": "module Utils.FluidList where\n\nimport Html exposing (..)\nimport Html.Attributes exposing (..)\n\n\n(=>) : a -> b -> ( a, b )\n(=>) = (,)\n\n\nfluidList : String -> Int -> Int -> List (List Html) -> Html\nfluidList itemClass itemWidth maxColumns itemList =\n  let\n    toPx : Int -> String\n    toPx num =\n      toString num ++ \"px\"\n\n    bulletStyle =\n        [ \"display\" => \"inline-block\"\n        , \"width\" => toPx itemWidth\n        , \"vertical-align\" => \"top\"\n        , \"text-align\" => \"left\"\n        , \"margin\" => (\"0 \" ++ toPx gutter)\n        ]\n\n    gutter = 30\n  in\n    section\n      [style [\"max-width\" => toPx (itemWidth*maxColumns + 2*gutter*maxColumns), \"margin\" => \"auto\", \"text-align\" => \"center\", \"margin-top\" => \"30px\"]]\n      (List.map (section [class itemClass, style bulletStyle]) itemList)\n"
  },
  {
    "path": "DocPreview/src/Utils/Markdown.elm",
    "content": "module Utils.Markdown (block) where\n\nimport Html\nimport Markdown\n\n\nblock : String -> Html.Html\nblock raw =\n  Markdown.toHtmlWith myOptions raw\n\n\nmyOptions : Markdown.Options\nmyOptions =\n  let\n    options =\n      Markdown.defaultOptions\n  in\n    { options | defaultHighlighting = Just \"elm\" }\n"
  },
  {
    "path": "DocPreview/src/Utils/Path.elm",
    "content": "module Utils.Path where\n\nimport String\n\n\nhyphenate : String -> String\nhyphenate string =\n  String.map (\\c -> if c == '.' then '-' else c) string\n\n\n(</>) : String -> String -> String\n(</>) a b =\n    a ++ \"/\" ++ b\n\n\n\n\n"
  },
  {
    "path": "LICENSE.md",
    "content": "The MIT License (MIT)\n=====================\n\nCopyright (c) 2015 Magnus Rundberget\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "README.adoc",
    "content": "= Elm LightTable plugin\n\n\nifdef::env-github[]\n:tip-caption: :bulb:\n:note-caption: :information_source:\n:important-caption: :heavy_exclamation_mark:\n:caution-caption: :fire:\n:warning-caption: :warning:\nendif::[]\n\n\n\nhttp://elm-lang.org/[Elm] language plugin for Light Table\n\n\n\nimage:images/elm-light.png[]\n\n== Installation\nInstall using the Light Table plugin manager.\nAlternatively you can clone it into `$LT_USER_HOME\\plugins`. (If you know what you are doing,\nthis is a great way to try out the latest and greatests not yet released !)\n\n\n== Preconditions\n* **LIghtTable 0.8-alpha or higher is required**\n* You will need to have the http://elm-lang.org/install[elm-platform] (there is also a npm installer out there)  installed and the following should be in your path:\n** https://github.com/elm-lang/elm-reactor[elm-reactor]\n** https://github.com/elm-lang/elm-make[elm-make]\n** https://github.com/elm-lang/elm-package[elm-package]\n** https://github.com/elm-lang/elm-repl[elm-repl]\n* For all commands/features you will need to have a project folder with a `elm-package.json` file\n\n\nNOTE: Tested with Elm 0.18.0 and Elm 0.17.1 on OS/X 10.9.5, Ubuntu 14.04 and Windows 10.\n\n== Documentation\nPlease see the https://rundis.gitbooks.io/elm-light-guide/content/[Guide] for a comprehensive documentaiton\non how to use the plugin.\n\n== Resources\n* http://rundis.github.io/blog/2015/elm_light.html[ScreenCast] - Demo of the features available in the first release of the plugin\n* http://elm-lang.org/[elm-lang.org] - The home of Elm\n* https://github.com/LightTable/LightTable[Light Table] - Light Table on GitHub\n\n\n\n== Feature demos\n\n=== Testing\nimage:images/elm-light-test-teaser.gif[]\n\n\n=== Inline docs and jump to\nimage:images/ast_teaser.gif[]\n\n\n==== Type aliases and records even\nimage:images/elm-light_type_alias.gif[]\n\n==== Yeah some destructuring support too !\nimage:images/destructuring.gif[]\n\n\n=== Repl\nimage:images/elm-light-repl.gif[]\n\n=== Package Manager\n\n==== Install package and start using at once\nimage:images/pck_inst_and_use.gif[]\n\n\n=== Package docs\nPreview package documentation inside Light Table. Updates on save.\nimage:images/package_docs.gif[]\n\n\n=== Module graph\nimage:images/module-graph.gif[]\n\n\n\n\n== Contributing\nPull requests are most welcome. Please do not include the transpiled files (*_compiled*) in the PR.\n\n== History\n* 0.5.1 Better destructuring support and a few bugfixes\n** Support jump to, docs and autocompletions for common param destructuring cases\n** Enhancement: Upgrade highlight.js for more accurate source highlighting in docs\n** Enhancement: Adjust test folder default when initializing new test project\n** Bugfix: Handle single-char region errors (previously wouldn't show up)\n** Bugfix: Package doc preview now loads correct doc when multiple are generated by elm-make due to module deps\n* 0.5.0 Elm Test support is back (requires Elm 0.18).\n** Features to set up new test project, run one, a modules or all tests in your project. Test results display in a visual test runner + in the console.\n** Show popup if the plugin isn't able to find the elm binaries\n** Show errors when there is a mismatch between your project version and the currently install Elm version on your machine\n** Show popup if you try to use elm-format related features, but the plugin is unable to find the elm-format executable\n** Attempted to provide better support for node installed Elm executables on Windows (using cross-spawn)\n** Fixed a regression with the interactive repl features not working\n** Adjusted the autocompleter for changes in default imports in Elm 0.18\n* 0.4.2\n** Fixed a bug with faulty/erronous events from chokidar or it's underlying libs causing issues on Windows\n* 0.4.1\n** Fixed manual connect bug\n** Auto completions for type alias params in function bodies\n** Jump to and docs for type alias params in function bodies\n* 0.4.0 Introduction of AST based features. The plugin now parses your project Elm files (and 3rd party packages too)\n** Added features\n*** Find usages\n*** Inline doc now renders the documentation markdown (your own docs included)\n*** You can Jump to definition and back\n*** Autocompleter suggests both for 3rd party imports as well as for you project imports\n*** Expose/unexpose declarations for a module\n*** Quick import module\n*** Sort imports\n** Removed features\n*** Elm test related features have temporarily been removed. They will be rewritten to support the totally rewritten elm-test package\n*** Elm reactor debug command has been removed as elm-reactor doesn't support debugging in 0.17\n\n* 0.3.8 Support code folding, fix autoclose brackets issue, scrollposition after format improvement\n* 0.3.7 Improved autocompleter implementation and added quick-fixes feature to Linter messages\n* 0.3.6 Added package doc preview feature\n** Fixed bug with lint display at bottom of editor getting cut off\n* 0.3.5 Added module browser\n** Bugfix: Display make errors (both make and linting)\n* 0.3.4 Updated to supprt elm-format 0.2-alpha\n** Added format buffer (keeps unsaved changes) and format expression commands\n* 0.3.3 Fix compatibility with LT 0.8.1. Also tweaked the autocompletion to be a little faster and more accurate.\n* 0.3.2 Module aware autocomplete and remove leading pipes from repl results\n* 0.3.1 Added an inline project dependency graph (using d3)\n* 0.3.0 Added windows support. See github release notes for details\n* 0.2.0 Improved linting, introduced test support and support for elm-format\n* 0.1.3 Bugfix: Forgot to include react.js (used for rendering package ui)\n* 0.1.2 Package manager and 0.16.0 fix\n** UI for managing your project packages.\n** 0.16.0 fix: Remove ansi color codes from errors and warnings shown inline\n* 0.1.1 Maintenance release:\n** Feature to select top level expressions\n** Eval in repl with no selection automatically selects top level expression based on cursor position\n** Syntax highlight multiline strings `\"\"\"`\n** Allow user to select to browse file in reactor with or without debugger\n** Fix: Allow reuse of released reactor ports\n** Add tag :editor.elm.common to allow users to configure common behaviors/commands for repl and editors more easily\n* 0.1.0 Initial release\n\n== License\nMIT, same as Light Table. See LICENSE.md for details.\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "css/docpreview.css",
    "content": "/*.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #f0f0f0;\n  -webkit-text-size-adjust: none;\n}*/\n\n.elm-doc-preview .hljs,\n.elm-doc-preview .hljs-subst,\n.elm-doc-preview .hljs-tag .hljs-title,\n.elm-doc-preview .nginx .hljs-title {\n  color: black;\n}\n\n.elm-doc-preview .hljs-string,\n.elm-doc-preview .hljs-title,\n.elm-doc-preview .hljs-constant,\n.elm-doc-preview .hljs-parent,\n.elm-doc-preview .hljs-tag .hljs-value,\n.elm-doc-preview .hljs-rules .hljs-value,\n.elm-doc-preview .hljs-preprocessor,\n.elm-doc-preview .hljs-pragma,\n.elm-doc-preview .haml .hljs-symbol,\n.elm-doc-preview .ruby .hljs-symbol,\n.elm-doc-preview .ruby .hljs-symbol .hljs-string,\n.elm-doc-preview .hljs-template_tag,\n.elm-doc-preview .django .hljs-variable,\n.elm-doc-preview .smalltalk .hljs-class,\n.elm-doc-preview .hljs-addition,\n.elm-doc-preview .hljs-flow,\n.elm-doc-preview .hljs-stream,\n.elm-doc-preview .bash .hljs-variable,\n.elm-doc-preview .apache .hljs-tag,\n.elm-doc-preview .apache .hljs-cbracket,\n.elm-doc-preview .tex .hljs-command,\n.elm-doc-preview .tex .hljs-special,\n.elm-doc-preview .erlang_repl .hljs-function_or_atom,\n.elm-doc-preview .asciidoc .hljs-header,\n.elm-doc-preview .markdown .hljs-header,\n.elm-doc-preview .coffeescript .hljs-attribute {\n  color: #800;\n}\n\n.elm-doc-preview .smartquote,\n.elm-doc-preview .hljs-comment,\n.elm-doc-preview .hljs-annotation,\n.elm-doc-preview .diff .hljs-header,\n.elm-doc-preview .hljs-chunk,\n.elm-doc-preview .asciidoc .hljs-blockquote,\n.elm-doc-preview .markdown .hljs-blockquote {\n  color: #888;\n}\n\n.elm-doc-preview .hljs-number,\n.elm-doc-preview .hljs-date,\n.elm-doc-preview .hljs-regexp,\n.elm-doc-preview .hljs-literal,\n.elm-doc-preview .hljs-hexcolor,\n.elm-doc-preview .smalltalk .hljs-symbol,\n.elm-doc-preview .smalltalk .hljs-char,\n.elm-doc-preview .go .hljs-constant,\n.elm-doc-preview .hljs-change,\n.elm-doc-preview .lasso .hljs-variable,\n.elm-doc-preview .makefile .hljs-variable,\n.elm-doc-preview .asciidoc .hljs-bullet,\n.elm-doc-preview .markdown .hljs-bullet,\n.elm-doc-preview .asciidoc .hljs-link_url,\n.elm-doc-preview .markdown .hljs-link_url {\n  color: #080;\n}\n\n.elm-doc-preview .hljs-label,\n.elm-doc-preview .hljs-javadoc,\n.elm-doc-preview .ruby .hljs-string,\n.elm-doc-preview .hljs-decorator,\n.elm-doc-preview .hljs-filter .hljs-argument,\n.elm-doc-preview .hljs-localvars,\n.elm-doc-preview .hljs-array,\n.elm-doc-preview .hljs-attr_selector,\n.elm-doc-preview .hljs-important,\n.elm-doc-preview .hljs-pseudo,\n.elm-doc-preview .hljs-pi,\n.elm-doc-preview .haml .hljs-bullet,\n.elm-doc-preview .hljs-doctype,\n.elm-doc-preview .hljs-deletion,\n.elm-doc-preview .hljs-envvar,\n.elm-doc-preview .hljs-shebang,\n.elm-doc-preview .apache .hljs-sqbracket,\n.elm-doc-preview .nginx .hljs-built_in,\n.elm-doc-preview .tex .hljs-formula,\n.elm-doc-preview .erlang_repl .hljs-reserved,\n.elm-doc-preview .hljs-prompt,\n.elm-doc-preview .asciidoc .hljs-link_label,\n.elm-doc-preview .markdown .hljs-link_label,\n.elm-doc-preview .vhdl .hljs-attribute,\n.elm-doc-preview .clojure .hljs-attribute,\n.elm-doc-preview .asciidoc .hljs-attribute,\n.elm-doc-preview .lasso .hljs-attribute,\n.elm-doc-preview .coffeescript .hljs-property,\n.elm-doc-preview .hljs-phony {\n  color: #88f;\n}\n\n.elm-doc-preview .hljs-keyword,\n.elm-doc-preview .hljs-id,\n.elm-doc-preview .hljs-title,\n.elm-doc-preview .hljs-built_in,\n.elm-doc-preview .css .hljs-tag,\n.elm-doc-preview .hljs-javadoctag,\n.elm-doc-preview .hljs-phpdoc,\n.elm-doc-preview .hljs-dartdoc,\n.elm-doc-preview .hljs-yardoctag,\n.elm-doc-preview .smalltalk .hljs-class,\n.elm-doc-preview .hljs-winutils,\n.elm-doc-preview .bash .hljs-variable,\n.elm-doc-preview .apache .hljs-tag,\n.elm-doc-preview .hljs-type,\n.elm-doc-preview .hljs-typename,\n.elm-doc-preview .tex .hljs-command,\n.elm-doc-preview .asciidoc .hljs-strong,\n.elm-doc-preview .markdown .hljs-strong,\n.elm-doc-preview .hljs-request,\n.elm-doc-preview .hljs-status {\n  font-weight: bold;\n}\n\n.elm-doc-preview .asciidoc .hljs-emphasis,\n.elm-doc-preview .markdown .hljs-emphasis {\n  font-style: italic;\n}\n\n.elm-doc-preview .nginx .hljs-built_in {\n  font-weight: normal;\n}\n\n.elm-doc-preview .coffeescript .javascript,\n.elm-doc-preview .javascript .xml,\n.elm-doc-preview .lasso .markup,\n.elm-doc-preview .tex .hljs-formula,\n.elm-doc-preview .xml .javascript,\n.elm-doc-preview .xml .vbscript,\n.elm-doc-preview .xml .css,\n.elm-doc-preview .xml .hljs-cdata {\n  opacity: 0.5;\n}\n\n\n/*\n\nOrginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com>\n\n*/\n\n.elm-doc-preview .hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: rgb(254,254,254);\n  border-color: rgb(245,245,245);\n  border-radius: 6px;\n  color: #657b83;\n  -webkit-text-size-adjust: none;\n}\n\n.elm-doc-preview .hljs-comment,\n.elm-doc-preview .diff .hljs-header,\n.elm-doc-preview .hljs-doctype,\n.elm-doc-preview .hljs-pi,\n.elm-doc-preview .lisp .hljs-string,\n.elm-doc-preview .hljs-javadoc {\n  color: #93a1a1;\n}\n\n/* Solarized Green */\n.elm-doc-preview .hljs-keyword,\n.elm-doc-preview .hljs-winutils,\n.elm-doc-preview .method,\n.elm-doc-preview .hljs-addition,\n.elm-doc-preview .css .hljs-tag,\n.elm-doc-preview .hljs-request,\n.elm-doc-preview .hljs-status,\n.elm-doc-preview .nginx .hljs-title {\n  color: #859900;\n}\n\n/* Solarized Cyan */\n.elm-doc-preview .hljs-number,\n.elm-doc-preview .hljs-command,\n.elm-doc-preview .hljs-string,\n.elm-doc-preview .hljs-tag .hljs-value,\n.elm-doc-preview .hljs-rules .hljs-value,\n.elm-doc-preview .hljs-phpdoc,\n.elm-doc-preview .hljs-dartdoc,\n.elm-doc-preview .tex .hljs-formula,\n.elm-doc-preview .hljs-regexp,\n.elm-doc-preview .hljs-hexcolor,\n.elm-doc-preview .hljs-link_url {\n  color: #2aa198;\n}\n\n/* Solarized Blue */\n.elm-doc-preview .hljs-title,\n.elm-doc-preview .hljs-localvars,\n.elm-doc-preview .hljs-chunk,\n.elm-doc-preview .hljs-decorator,\n.elm-doc-preview .hljs-built_in,\n.elm-doc-preview .hljs-identifier,\n.elm-doc-preview .vhdl .hljs-literal,\n.elm-doc-preview .hljs-id,\n.elm-doc-preview .css .hljs-function {\n  color: #268bd2;\n}\n\n/* Solarized Yellow */\n.elm-doc-preview .hljs-attribute,\n.elm-doc-preview .hljs-variable,\n.elm-doc-preview .lisp .hljs-body,\n.elm-doc-preview .smalltalk .hljs-number,\n.elm-doc-preview .hljs-constant,\n.elm-doc-preview .hljs-class .hljs-title,\n.elm-doc-preview .hljs-parent,\n.elm-doc-preview .hljs-type,\n.elm-doc-preview .hljs-link_reference {\n  color: #b58900;\n}\n\n/* Solarized Orange */\n.elm-doc-preview .hljs-preprocessor,\n.elm-doc-preview .hljs-preprocessor .hljs-keyword,\n.elm-doc-preview .hljs-pragma,\n.elm-doc-preview .hljs-shebang,\n.elm-doc-preview .hljs-symbol,\n.elm-doc-preview .hljs-symbol .hljs-string,\n.elm-doc-preview .diff .hljs-change,\n.elm-doc-preview .hljs-special,\n.elm-doc-preview .hljs-attr_selector,\n.elm-doc-preview .hljs-subst,\n.elm-doc-preview .hljs-cdata,\n.elm-doc-preview .css .hljs-pseudo,\n.elm-doc-preview .hljs-header {\n  color: #cb4b16;\n}\n\n/* Solarized Red */\n.elm-doc-preview .hljs-deletion,\n.elm-doc-preview .hljs-important {\n  color: #dc322f;\n}\n\n/* Solarized Violet */\n.elm-doc-preview .hljs-link_label {\n  color: #6c71c4;\n}\n\n.elm-doc-preview .tex .hljs-formula {\n  background: #eee8d5;\n}\n\n\n\n\n.elm-doc-preview {\n  font-family: 'Source Sans Pro', 'Trebuchet MS', 'Lucida Grande', 'Bitstream Vera Sans', 'Helvetica Neue', sans-serif;\n  color: #293c4b;\n  background-color: white;\n  padding: 10px;\n  overflow: auto;\n}\n\n.elm-doc-preview h1, .elm-doc-preview h2, .elm-doc-preview h3, .elm-doc-preview h4 {\n  font-weight: normal;\n}\n\n.elm-doc-preview .entry-list {\n  width: 600px;\n  display: inline-block;\n  vertical-align: top;\n}\n\n.elm-doc-preview .entry-list-title {\n  font-size: 3em;\n}\n\n.elm-doc-preview .markdown-entry h1 {\n  margin-top: 2em;\n  margin-bottom: 0.5px\n}\n\n.elm-doc-preview .docs-entry {\n  border-top: 1px solid #eeeeee;\n  margin-top: 1em;\n  margin-bottom: 2em;\n}\n\n\n.elm-doc-preview .docs-annotation {\n  white-space: pre;\n  font-family: 'Source Code Pro', consolas, inconsolata, monospace;\n  padding-top: 10px;\n  padding-bottom: 10px;\n}\n\n\n.elm-doc-preview .docs-comment {\n  overflow: hidden;\n  padding-left: 1em;\n}\n\n.elm-doc-preview code {\n  font-family: 'Source Code Pro', consolas, inconsolata, monospace;\n  background-color: rgb(254,254,254);\n}\n\n\n.elm-doc-preview pre {\n  margin: 0;\n  padding: 10px;\n  background-color: rgb(254,254,254);\n  border-style: solid;\n  border-width: 1px;\n  border-color: rgb(245,245,245);\n  border-radius: 6px;\n  overflow-x: auto;\n  font-family: 'Source Code Pro', consolas, inconsolata, monospace;\n}\n\n\n.elm-doc-preview .markdown-entry h1 {\n  font-size: 2em;\n  margin-top: 2em;\n  margin-bottom: 0.5px\n}\n\n.elm-doc-preview .markdown-entry h2 {\n    display: block;\n    font-size: 1.5em;\n}\n\n.elm-doc-preview a {\n  color: #1184CE;\n  text-decoration: none;\n}\n\n.elm-doc-preview a:hover {\n  text-decoration: underline;\n  color: rgb(234,21,122);\n}\n\n\n.elm-doc-preview p, .elm-doc-preview li {\n  line-height: 1.5em;\n}\n\n.elm-doc-preview i,\n.elm-doc-preview cite,\n.elm-doc-preview em,\n.elm-doc-preview var,\n.elm-doc-preview address,\n.elm-doc-preview dfn {\n    font-style: italic;\n}\n\n.elm-doc-preview ul {\n  list-style: disc;\n  -webkit-margin-before: 1em;\n  -webkit-margin-after: 1em;\n  -webkit-margin-start: 0px;\n  -webkit-margin-end: 0px;\n  -webkit-padding-start: 40px;\n}\n\n.elm-doc-preview ol {\n  -webkit-margin-before: 1em;\n  -webkit-margin-after: 1em;\n  -webkit-margin-start: 0px;\n  -webkit-margin-end: 0px;\n  -webkit-padding-start: 40px;\n}\n\n\n\n"
  },
  {
    "path": "css/elm.css",
    "content": "/* linting */\n\n\n\n\n.package-table {\n  padding-bottom: 10px;\n}\n\n.package-table > tbody > tr:first-child {\n  line-height: 20px;\n}\n\n.package-table th {\n  border-bottom: 2px solid red;\n  font-weight: bold;\n}\n\n.package-table td, .package-table th {\n   padding: 2px 8px 2px 4px;\n}\n\n.project-packages button {\n  border: 2px darkgray solid;\n  padding: 4px;\n  background: inherit;\n}\n\n.project-packages .link:hover {\n  text-decoration: underline;\n  cursor: hand;\n}\n\n\n\n.add-package {\n  margin-top: 10px;\n  /*border: 1px solid red;*/\n}\n\n.add-package h3 {\n  font-size: 16px;\n}\n\n.form-row label {\n  display: block;\n  margin-right: 10px;\n}\n\n\n.add-package :focus {\n    /* -webkit-focus-ring-color = '#5B9DD9' */\n    outline: -webkit-focus-ring-color auto 5px;\n}\n\n.add-package select {\n  font-size: inherit;\n  font-family: inherit;\n  color: white;\n  background: #616161;\n  border: 1px solid #616161;\n  padding: 4px;\n}\n\n.add-package .versions {\n  margin-left: 10px;\n}\n\n.add-package .btn {\n  margin-left: 10px;\n}\n\n\n.autocomplete-dropdown {\n  position: relative;\n}\n\n.autocomplete-dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0px;\n  display: block;\n  background: #3b3f41;\n  max-height: 300px;\n  width: 250px;\n  overflow: auto;\n\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n\n\n.autocomplete-dropdown-item {\n  padding: 0 4px 0 4px;\n}\n\n\n.autocomplete-active {\n  background: #616161;\n  color: #f4f4f4;\n}\n\n.autocomplete-dropdown-item.row:hover {cursor: pointer; cursor: hand;}\n\n/** Linter specifix styling **/\n\n/* .CodeMirror .lint-error {\n  border-bottom:  3px solid darkred;\n  background-color: inherit;\n}\n */\n\n.CodeMirror .lint-warning, .CodeMirror .lint-error {\n  border-bottom:2px dotted;\n  display: inline-block;\n  position: relative;\n}\n\n.CodeMirror .lint-warning:after, .CodeMirror .lint-error:after {\n  content: '';\n  height: 5px;\n  width: 100%;\n  border-bottom: 2px dotted;\n  position: absolute;\n  bottom: -3px;\n  left: -2px;\n}\n\n.CodeMirror .lint-error, .CodeMirror .lint-error:after {\n  border-bottom-color: red;\n}\n\n.CodeMirror .lint-warning, .CodeMirror .lint-warning:after {\n  border-bottom-color: #FFFFCC;\n}\n\n\n/* Override Inline doc */\ndiv.inline-doc h2 {\n  font-size: 100%;\n}\n\ndiv.inline-doc h3 {\n  font-size: 90%;\n  font-weight: 600;\n  border-bottom: none;\n}\n\n\n\n\n\ndiv.linter-res {\n  z-index: 1000;\n  top: 100%;\n  left: 0px;\n  display:block;\n  position:absolute;\n  overflow:hidden;\n  box-sizing:border-box;\n  padding: 5px;\n  margin-bottom: 50px; /* to handle \"high\" errors getting clipped when at bottom of editor*/\n  -webkit-user-select: text;\n}\n\nspan.lint-status, span.ast-status {\n  padding: 0 5px 0 5px;\n  -webkit-border-radius: 5px;\n  display: block;\n  opacity: 0.8;\n}\n\nspan.ast-status.ok {\n  background-color: #7CAB80;\n  color: #B9FBBE;\n}\n\ndiv.linter-res.error, span.lint-status.error, span.ast-status.error {\n  background: #73404c;\n  color: #ffa6a6;\n}\n\ndiv.linter-res.warning, span.lint-status.warning {\n  background: #FFFFCC;\n  color: #7f8000;\n}\n\n\ndiv.linter-res.open {\n  display:block;\n}\n\ndiv.linter-res .title {\n  font-weight: bold;\n  padding-bottom: 5px;\n  text-decoration: underline;\n}\n\n\ndiv.linter-res span.button {\n  display:inline-block;\n  padding: 3px;\n  margin-top: 5px;\n  margin-left: 3px;\n}\n\n\n#elm-module-browser p.binding {\n  color: #ccc;\n  font-size: 8pt;\n  font-style: italic;\n}\n\n#elm-module-browser input {\n  width: 100%\n}\n\ndiv.elmrepl .main {\n  height:100%; width:100%; float:left; border-radius:0; box-sizing:border-box;\n}\n\n\n/* Elm gutter */\ndiv.elm-gutter {\n  background-color: inherit;\n  text-align: center;\n\n}\n\ndiv.elm-gutter-marker {\n  color:inherit;\n  background-color: inherit;\n  padding-left: 2px;\n  opacity: 0.6;\n}\n\n\n\n\n\n/* Hinter customization */\n.elm-completion .display-text, .elm-completion .module {\n  display: inline-block;\n  line-height:inherit;\n}\n\n.elm-completion .display-text {\n  width: 20em;\n  overflow-x: hidden;\n  text-overflow: ellipsis;\n}\n\n.elm-completion .module {\n  opacity: 0.5;\n  height:auto;\n  vertical-align:top;\n}\n\n.elm-completion .module:not(:empty) {\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\n\n\n/* Selector */\ndiv.elm-select {\n  position: relative;\n  display: inline-block;\n  background: #3b3f41;\n  padding:0;\n  margin: 0;\n}\n\n\ndiv.elm-select select {\n  -webkit-appearance:none;\n  vertical-align: top;\n  font-size: inherit;\n  font-family: inherit;\n  font-size: 110%;\n  color: white;\n  background: #3b3f41;\n  border: 1px solid #3b3f41;\n  padding: 2px;\n  max-height: 20em;\n}\n\n\n/* Find usages overrides */\n.search-results.elm-usages .line {\n  width: 60px;\n}\n\n.search-results.elm-usages .res {\n  bottom: 75px;\n  border-bottom: 1px outset;\n}\n\n.search-results.elm-usages .searcher .link {\n  font-weight: 700;\n}\n\n.search-results.elm-usages .searcher .link:hover {\n  cursor: hand;\n  text-decoration: underline;\n}\n\n.search-results.elm-usages .signature {\n  opacity: 0.8;\n  color: #c7e6ff\n}\n\n\n\n/* loader animation */\n.bubblingG {\n\ttext-align: center;\n\twidth:78px;\n\theight:49px;\n\tmargin: auto;\n}\n\n.bubblingG span {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\twidth: 10px;\n\theight: 10px;\n\tmargin: 24px auto;\n\tbackground: rgb(0,0,0);\n\tborder-radius: 49px;\n\t\t-webkit-border-radius: 49px;\n\tanimation: bubblingG 1.5s infinite alternate;\n\t\t-webkit-animation: bubblingG 1.5s infinite alternate;\n}\n\n#bubblingG_1 {\n\tanimation-delay: 0s;\n\t-webkit-animation-delay: 0s;\n}\n\n#bubblingG_2 {\n\tanimation-delay: 0.45s;\n  -webkit-animation-delay: 0.45s;\n}\n\n#bubblingG_3 {\n\tanimation-delay: 0.9s;\n\t-webkit-animation-delay: 0.9s;\n}\n\n\n@keyframes bubblingG {\n\t0% {\n\t\twidth: 10px;\n\t\theight: 10px;\n\t\tbackground-color:rgb(0,0,0);\n\t\ttransform: translateY(0);\n\t}\n\n\t100% {\n\t\twidth: 23px;\n\t\theight: 23px;\n\t\tbackground-color:rgb(255,255,255);\n\t\ttransform: translateY(-20px);\n\t}\n}\n\n\n@-webkit-keyframes bubblingG {\n\t0% {\n\t\twidth: 10px;\n\t\theight: 10px;\n\t\tbackground-color:rgb(0,0,0);\n\t\t-webkit-transform: translateY(0);\n\t}\n\n\t100% {\n\t\twidth: 23px;\n\t\theight: 23px;\n\t\tbackground-color:rgb(255,255,255);\n\t\t-webkit-transform: translateY(-20px);\n\t}\n}\n\n\n\n\n\n"
  },
  {
    "path": "css/graph.css",
    "content": "div.graph {\n  width: 100%;\n  height: 100%;\n\n}\n\n.graph .filters {\n  border-bottom: 1px solid;\n  padding-bottom: 10px;\n  margin: 10px;\n}\n\n\n.graph select {\n  vertical-align: top;\n  font-size: inherit;\n  font-family: inherit;\n  color: white;\n  background: #3b3f41;\n  border: 1px solid #3b3f41;\n  padding: 2px;\n  max-height: 20em;\n}\n\n.graph .filters .filter + .filter {\n  margin-left: 10px;\n}\n\n\n.dependency-graph svg {\n    background-color: inherit;\n}\n\n.dependency-graph .node rect, .dependency-graph .node ellipse, .module-graph .node rect {\n    stroke: white;\n    stroke-width: 1.5px;\n    fill: #ccc;\n}\n\n.dependency-graph .edgeLabel {\n  fill: #ccc;\n}\n\n.dependency-graph .edgeLabel rect {\n    fill: #ccc;\n}\n\n.dependency-graph .edgePath, .module-graph .edgePath {\n    stroke: white;\n    stroke-width: 1.5px;\n    fill: none;\n}\n\ndiv.graph-label {\n  padding: 3px;\n  text-align:center;\n  color: black;\n}\n\n\ndiv.graph-label ul {\n  border-top: 1px solid;\n  text-align:left;\n}\n\n\n.module-graph .node rect:has (> graph-label.highlight) {\n  background-color: yellow;\n}\n\ndiv.graph-label.error {\n  color: #ffa6a6;\n}\n\n\ndiv.graph-label.clickable {\n  font-weight: bold;\n}\n\n.clickable:hover {\n  text-decoration: underline;\n  cursor: hand;\n}\n\n\n"
  },
  {
    "path": "css/hinter.css",
    "content": ".CodeMirror-hint-active {\n  background: #616161;\n  color: #f4f4f4;\n}\n\n.CodeMirror-hint em {\n  font-weight: bold;\n  color: #c7e6ff;\n}\n"
  },
  {
    "path": "css/inlinedoc.css",
    "content": ".hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: inherit;\n  -webkit-text-size-adjust: none;\n}\n\n.elm-inline-doc .hljs,\n.elm-inline-doc .hljs-subst,\n.elm-inline-doc .hljs-tag .hljs-title,\n.elm-inline-doc .nginx .hljs-title {\n  color: black;\n}\n\n.elm-inline-doc .hljs-string,\n.elm-inline-doc .hljs-title,\n.elm-inline-doc .hljs-constant,\n.elm-inline-doc .hljs-parent,\n.elm-inline-doc .hljs-tag .hljs-value,\n.elm-inline-doc .hljs-rules .hljs-value,\n.elm-inline-doc .hljs-preprocessor,\n.elm-inline-doc .hljs-pragma,\n.elm-inline-doc .haml .hljs-symbol,\n.elm-inline-doc .ruby .hljs-symbol,\n.elm-inline-doc .ruby .hljs-symbol .hljs-string,\n.elm-inline-doc .hljs-template_tag,\n.elm-inline-doc .django .hljs-variable,\n.elm-inline-doc .smalltalk .hljs-class,\n.elm-inline-doc .hljs-addition,\n.elm-inline-doc .hljs-flow,\n.elm-inline-doc .hljs-stream,\n.elm-inline-doc .bash .hljs-variable,\n.elm-inline-doc .apache .hljs-tag,\n.elm-inline-doc .apache .hljs-cbracket,\n.elm-inline-doc .tex .hljs-command,\n.elm-inline-doc .tex .hljs-special,\n.elm-inline-doc .erlang_repl .hljs-function_or_atom,\n.elm-inline-doc .asciidoc .hljs-header,\n.elm-inline-doc .markdown .hljs-header,\n.elm-inline-doc .coffeescript .hljs-attribute {\n  color: #800;\n}\n\n.elm-inline-doc .smartquote,\n.elm-inline-doc .hljs-comment,\n.elm-inline-doc .hljs-annotation,\n.elm-inline-doc .diff .hljs-header,\n.elm-inline-doc .hljs-chunk,\n.elm-inline-doc .asciidoc .hljs-blockquote,\n.elm-inline-doc .markdown .hljs-blockquote {\n  color: #888;\n}\n\n.elm-inline-doc .hljs-number,\n.elm-inline-doc .hljs-date,\n.elm-inline-doc .hljs-regexp,\n.elm-inline-doc .hljs-literal,\n.elm-inline-doc .hljs-hexcolor,\n.elm-inline-doc .smalltalk .hljs-symbol,\n.elm-inline-doc .smalltalk .hljs-char,\n.elm-inline-doc .go .hljs-constant,\n.elm-inline-doc .hljs-change,\n.elm-inline-doc .lasso .hljs-variable,\n.elm-inline-doc .makefile .hljs-variable,\n.elm-inline-doc .asciidoc .hljs-bullet,\n.elm-inline-doc .markdown .hljs-bullet,\n.elm-inline-doc .asciidoc .hljs-link_url,\n.elm-inline-doc .markdown .hljs-link_url {\n  color: #080;\n}\n\n.elm-inline-doc .hljs-label,\n.elm-inline-doc .hljs-javadoc,\n.elm-inline-doc .ruby .hljs-string,\n.elm-inline-doc .hljs-decorator,\n.elm-inline-doc .hljs-filter .hljs-argument,\n.elm-inline-doc .hljs-localvars,\n.elm-inline-doc .hljs-array,\n.elm-inline-doc .hljs-attr_selector,\n.elm-inline-doc .hljs-important,\n.elm-inline-doc .hljs-pseudo,\n.elm-inline-doc .hljs-pi,\n.elm-inline-doc .haml .hljs-bullet,\n.elm-inline-doc .hljs-doctype,\n.elm-inline-doc .hljs-deletion,\n.elm-inline-doc .hljs-envvar,\n.elm-inline-doc .hljs-shebang,\n.elm-inline-doc .apache .hljs-sqbracket,\n.elm-inline-doc .nginx .hljs-built_in,\n.elm-inline-doc .tex .hljs-formula,\n.elm-inline-doc .erlang_repl .hljs-reserved,\n.elm-inline-doc .hljs-prompt,\n.elm-inline-doc .asciidoc .hljs-link_label,\n.elm-inline-doc .markdown .hljs-link_label,\n.elm-inline-doc .vhdl .hljs-attribute,\n.elm-inline-doc .clojure .hljs-attribute,\n.elm-inline-doc .asciidoc .hljs-attribute,\n.elm-inline-doc .lasso .hljs-attribute,\n.elm-inline-doc .coffeescript .hljs-property,\n.elm-inline-doc .hljs-phony {\n  color: #88f;\n}\n\n.elm-inline-doc .hljs-keyword,\n.elm-inline-doc .hljs-id,\n.elm-inline-doc .hljs-title,\n.elm-inline-doc .hljs-built_in,\n.elm-inline-doc .css .hljs-tag,\n.elm-inline-doc .hljs-javadoctag,\n.elm-inline-doc .hljs-phpdoc,\n.elm-inline-doc .hljs-dartdoc,\n.elm-inline-doc .hljs-yardoctag,\n.elm-inline-doc .smalltalk .hljs-class,\n.elm-inline-doc .hljs-winutils,\n.elm-inline-doc .bash .hljs-variable,\n.elm-inline-doc .apache .hljs-tag,\n.elm-inline-doc .hljs-type,\n.elm-inline-doc .hljs-typename,\n.elm-inline-doc .tex .hljs-command,\n.elm-inline-doc .asciidoc .hljs-strong,\n.elm-inline-doc .markdown .hljs-strong,\n.elm-inline-doc .hljs-request,\n.elm-inline-doc .hljs-status {\n  font-weight: bold;\n}\n\n.elm-inline-doc .asciidoc .hljs-emphasis,\n.elm-inline-doc .markdown .hljs-emphasis {\n  font-style: italic;\n}\n\n.elm-inline-doc .nginx .hljs-built_in {\n  font-weight: normal;\n}\n\n.elm-inline-doc .coffeescript .javascript,\n.elm-inline-doc .javascript .xml,\n.elm-inline-doc .lasso .markup,\n.elm-inline-doc .tex .hljs-formula,\n.elm-inline-doc .xml .javascript,\n.elm-inline-doc .xml .vbscript,\n.elm-inline-doc .xml .css,\n.elm-inline-doc .xml .hljs-cdata {\n  opacity: 0.5;\n}\n\n\n.elm-inline-doc {\n  margin-top: 1em;\n  font-family: inherit;\n  color: inherit;\n  background-color: inherit;\n}\n\n.elm-inline-doc h1, .elm-inline-doc h2, .elm-inline-doc h3, .elm-inline-doc h4 {\n  font-weight: normal;\n}\n\n\n.elm-inline-doc code {\n  color: #c7e6ff;\n}\n.elm-inline-doc code:hover {\n  text-decoration: none;\n}\n\n\n.elm-inline-doc pre > code {\n  font-family: 'Source Code Pro', consolas, inconsolata, monospace;\n  background-color: #c7e6ff;\n}\n\n.elm-inline-doc blockquote p {\n  padding: 0 1em;\n  font-style: italic;\n  border-left: 0.25em solid gray;\n}\n\n\n.underline-result .elm-inline-doc > pre {\n  margin: 0px 0px 10px 0px;\n  padding: 10px;\n  background-color: inherit; /*rgb(254,254,254);*/\n  border-style: solid;\n  border-width: 1px;\n  border-color: rgb(245,245,245);\n  border-radius: 6px;\n  font-family: 'Source Code Pro', consolas, inconsolata, monospace;\n}\n\n\n.elm-inline-doc a {\n  color: white;\n  text-decoration: none;\n}\n\n.elm-inline-doc a:hover {\n  text-decoration: underline;\n}\n\n\n.elm-inline-doc p, .elm-inline-doc li {\n  line-height: inherit;\n}\n\n.elm-inline-doc i,\n.elm-inline-doc cite,\n.elm-inline-doc em,\n.elm-inline-doc var,\n.elm-inline-doc address,\n.elm-inline-doc dfn {\n    font-style: italic;\n}\n\n\n.elm-inline-doc ul li, .elm-inline-doc ol li {\n  line-height: 0.8em;\n}\n\n.elm-inline-doc ul {\n  list-style: disc;\n  line-height: 0.9em;\n  -webkit-margin-before: 1em;\n  -webkit-margin-after: 1em;\n  -webkit-margin-start: 0px;\n  -webkit-margin-end: 0px;\n  -webkit-padding-start: 30px;\n}\n\n.elm-inline-doc ol {\n  line-height: 0.9em;\n  -webkit-margin-before: 1em;\n  -webkit-margin-after: 1em;\n  -webkit-margin-start: 0px;\n  -webkit-margin-end: 0px;\n  -webkit-padding-start: 30px;\n}\n\n\n\n"
  },
  {
    "path": "css/test.css",
    "content": ".elmtest-dashboard {\n  padding: 10px;\n}\n\n\n.elmtest-dashboard h2 {\n  font-size: 125%;\n}\n\n.elmtest-dashboard .curr-test {\n  margin-top: 5px;\n}\n\n.elmtest-dashboard .result-container {\n  margin-top: 15px;\n\n}\n\n.elmtest-dashboard .test-failures {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  margin-top: 10px;\n  box-sizing:border-box;\n}\n\n\n\n.elmtest-dashboard .test-failures > ul {\n  border-top: 1px solid darkgray;\n  overflow: scroll;\n  left: 1px;\n  right:1px;\n  bottom: 130px;\n  top: 30px;\n  overflow: auto;\n  padding-top: 8px;\n  position: absolute;\n}\n\n.elmtest-dashboard .test-failures > ul > li {\n  padding-bottom: 10px;\n  padding-top: 10px;\n}\n\n.elmtest-dashboard .test-failures > ul > li > ul > li > .test-label {\n  color: #7ffffd;\n}\n\n\n.elmtest-dashboard .test-failures > ul > li > ul {\n  color: #ccc;\n}\n\n\n/*.elmtest-dashboard .test-failures > ul > li:nth-child(even) {\n  background: inherit;\n}*/\n\n.elmtest-dashboard .test-failures > ul > li > ul li ul {\n  margin-left : 10px;\n  margin-top: 5px;\n}\n\n\n\n.elmtest-dashboard .test-failures > ul > li pre {\n  margin-left: 20px;\n  opacity: 0.8;\n}\n\n.elmtest-dashboard .test-failures .given {\n  margin-left: 10px;\n}\n\n\n\n\n\n\n.elmtest-dashboard .summary-item {\n  display: inline-block;\n  width: 150px;\n}\n\n.elmtest-dashboard .summary-item span {padding-left: 5px;}\n\n\n.elmtest-dashboard\n.test-progress progress, .test-progress progress[role]\n{\n  -webkit-appearance: none;\n}\n\n\n.test-progress progress {\n  width: 100%;\n}\n\n/* Polyfill */\n.test-progress progress[role]:after {\n  background-image: none;\n}\n\n.elmtest-dashboard .test-progress progress.ok::-webkit-progress-value {\n  background: #7CAB80;\n}\n\n.test-progress progress.error::-webkit-progress-value {\n  background: #FF5357;\n}\n"
  },
  {
    "path": "elm/ModuleBrowser/ModuleBrowser.elm",
    "content": "module ModuleBrowser (..) where\n\nimport Html exposing (Html, text, ul, li, div, input, p)\nimport Html.Attributes exposing (value, style, class, type', placeholder)\nimport Html.Events exposing (on, onClick, onWithOptions, targetValue, keyCode)\nimport StartApp\nimport Effects exposing (Effects, Never)\nimport String\nimport Json.Decode as Json\nimport List.Extra as ListX\nimport Dict\nimport Signal\nimport Task\n\n\ntype alias Model =\n  { allModules : List Modul\n  , filteredModules : List Modul\n  , searchStr : String\n  , selected : Maybe Modul\n  }\n\n\ntype alias Modul =\n  { name : String\n  , file : String\n  , packageName : String\n  , version : String\n  }\n\n\ninit : ( Model, Effects Action )\ninit =\n  ( Model [] [] \"\" Nothing\n  , Effects.none\n  )\n\n\ntype Action\n  = NoOp\n  | Filter String\n  | Prev\n  | Next\n  | Select\n  | ClickSelect String\n  | Close\n  | Refresh (List Modul)\n\n\nupdate : Action -> Model -> ( Model, Effects Action )\nupdate action model =\n  case action of\n    NoOp ->\n      ( model, Effects.none )\n\n    Filter str ->\n      let\n        filtered =\n          filterModules str model.allModules\n\n        sel =\n          List.head filtered\n      in\n        ( { model\n            | searchStr = str\n            , filteredModules = filtered\n            , selected = sel\n          }\n        , Effects.none\n        )\n\n    Prev ->\n      ( { model | selected = prevModule model }\n      , notifyChangeSelection\n      )\n\n    Next ->\n      ( { model | selected = nextModule model }\n      , notifyChangeSelection\n      )\n\n    Select ->\n      case model.selected of\n        Nothing ->\n          ( model, Effects.none )\n\n        Just x ->\n          ( model\n          , notifySelect x.file\n          )\n\n    ClickSelect file ->\n      ( model\n      , notifySelect file\n      )\n\n    Close ->\n      ( model, notifyClose )\n\n    Refresh modules ->\n      ( Model modules modules \"\" (List.head modules)\n      , Effects.none\n      )\n\n\nfilterModules : String -> List Modul -> List Modul\nfilterModules searchStr modules =\n  let\n    filtr mod =\n      String.startsWith (String.toLower searchStr) (String.toLower mod.name)\n  in\n    List.filter filtr modules\n\n\nprevModule : Model -> Maybe Modul\nprevModule model =\n  let\n    prev i =\n      if (i > 0) then\n        ListX.getAt model.filteredModules (i - 1)\n      else\n        model.selected\n  in\n    selectModule prev model\n\n\nnextModule : Model -> Maybe Modul\nnextModule model =\n  let\n    nxt i\n      = if (i < (List.length model.filteredModules) - 1) then\n          ListX.getAt model.filteredModules (i + 1)\n        else\n          model.selected\n  in\n   selectModule nxt model\n\n\nselectModule : (Int -> Maybe Modul) -> Model -> Maybe Modul\nselectModule selFn model =\n  let\n    pipeM = flip Maybe.andThen\n\n    selIndex sel =\n      ListX.elemIndex sel model.filteredModules\n  in\n    model.selected |> pipeM selIndex |> pipeM selFn\n\n\nnotifySelect : String -> Effects Action\nnotifySelect file =\n  Signal.send selectMailbox.address file\n    |> Effects.task\n    |> Effects.map (\\_ -> NoOp)\n\n\nnotifyChangeSelection : Effects Action\nnotifyChangeSelection =\n  Signal.send changeSelectionMailbox.address ()\n    |> Effects.task\n    |> Effects.map (\\_ -> NoOp)\n\n\nnotifyClose : Effects Action\nnotifyClose =\n  Signal.send closeMailbox.address ()\n    |> Effects.task\n    |> Effects.map (\\_ -> NoOp)\n\n\n-- VIEW\n\n\nview : Signal.Address Action -> Model -> Html\nview address model =\n  div\n    [ class \"filter-list\" ]\n    [ searchInputView address model\n    , ul\n        []\n        (List.map (\\m -> itemView address m model) model.filteredModules)\n    ]\n\n\nsearchInputView : Signal.Address Action -> Model -> Html\nsearchInputView address model =\n  let\n    options =\n      { preventDefault = True, stopPropagation = False }\n\n    keyActions =\n      Dict.fromList [ ( 38, Prev ), ( 40, Next ), ( 13, Select ), ( 27, Close ) ]\n\n    dec =\n      (Json.customDecoder\n        keyCode\n        (\\k ->\n          if Dict.member k keyActions then\n            Ok k\n          else\n            Err \"not handling that key\"\n        )\n      )\n\n    handleKeydown k =\n      Maybe.withDefault NoOp (Dict.get k keyActions) |> Signal.message address\n  in\n    input\n      [ value model.searchStr\n      , class \"search\"\n      , type' \"text\"\n      , placeholder \"search\"\n      , on \"input\" targetValue (\\str -> Signal.message address (Filter str))\n      , onWithOptions \"keydown\" options dec handleKeydown\n      ]\n      []\n\n\nitemView : Signal.Address Action -> Modul -> Model -> Html\nitemView address mod model =\n  let\n    pipeM =\n      flip Maybe.andThen\n\n    itemClass =\n      model.selected\n        |> pipeM\n            (\\sel ->\n              if (sel == mod) then\n                Just \"selected\"\n              else\n                Nothing\n            )\n        |> Maybe.withDefault \"\"\n  in\n    li\n      [ class itemClass\n      , onClick address (ClickSelect mod.file)\n      ]\n      [ p [] [ text mod.name ]\n      , p [ class \"binding\" ] [ text (mod.packageName ++ \" - \" ++ mod.version) ]\n      ]\n\n\n\n-- START-APP WIRING\n\n\napp : StartApp.App Model\napp =\n  StartApp.start\n    { init = init\n    , update = update\n    , view = view\n    , inputs = [ modzSignal ]\n    }\n\n\nmain : Signal Html\nmain =\n  app.html\n\n\n\n-- PORTS\n\n\nport tasks : Signal (Task.Task Never ())\nport tasks =\n  app.tasks\n\n\n\n-- Inbound\n\nmodzSignal : Signal Action\nmodzSignal =\n  Signal.map Refresh modzPort\n\n\nport modzPort : Signal (List Modul)\n\n\n\n-- Outbound\n\nselectMailbox : Signal.Mailbox String\nselectMailbox =\n  Signal.mailbox \"\"\n\n\nport select : Signal String\nport select =\n  selectMailbox.signal\n\n\nchangeSelectionMailbox : Signal.Mailbox ()\nchangeSelectionMailbox =\n  Signal.mailbox ()\n\n\nport changeSelection : Signal ()\nport changeSelection =\n  changeSelectionMailbox.signal\n\n\ncloseMailbox : Signal.Mailbox ()\ncloseMailbox =\n  Signal.mailbox ()\n\n\nport close : Signal ()\nport close =\n  closeMailbox.signal\n\n\n"
  },
  {
    "path": "elm/ModuleBrowser/ModuleBrowser.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta content=\"IE=edge,chrome=1\" http-equiv=\"X-UA-Compatible\">\n    <meta http-equiv=\"cache-control\" content=\"max-age=0\" />\n    <meta http-equiv=\"cache-control\" content=\"no-cache\" />\n    <meta http-equiv=\"expires\" content=\"0\" />\n    <meta http-equiv=\"expires\" content=\"Tue, 01 Jan 1980 1:00:00 GMT\" />\n    <meta http-equiv=\"pragma\" content=\"no-cache\" />\n\n    <style>\n      li {\n        list-style: none;\n      }\n      ul {margin: 0; padding: 0}\n\n      .filter-list {\n        color: #ccc;\n      }\n      .filter-list em {\n        color: #c7e6ff;\n      }\n      .filter-list .selected,\n      .filter-list li:hover {\n        color: #f4f4f4;\n        background: #616161;\n      }\n\n      p {\n        padding: 0;\n        margin: 0;\n      }\n\n      p.binding { font-size: 8px;}\n\n    </style>\n\n  </head>\n  <body>\n    <div>\n      <div style=\"display:inline-block;width:500px;\">\n        Left\n      </div>\n      <div style=\"display:inline-block;width:400px\">\n        <div id=\"elm-module-browser\">\n          Elm modul browser\n        </div>\n      </div>\n    </div>\n\n\n    <script type=\"text/javascript\" src=\"/moduleBrowser.js\"></script>\n    <!--script type=\"text/javascript\" src=\"/_reactor/debug.js\"></script-->\n\n    <script type=\"text/javascript\">\n      //var main = Elm.fullscreen(Elm.Main, {initialPath: \"/\"});\n      var modbrowser = Elm.embed(Elm.ModuleBrowser, document.getElementById(\"elm-module-browser\"), {modzPort: []});\n\n\n\n\n      var samplemoduls = [\n          {\n              \"name\": \"Main\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/Main.elm\",\n              \"packageName\": \"frontend\",\n              \"version\": \"1.0.0\"\n          },\n          {\n              \"name\": \"AlbumDetail\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/src/AlbumDetail.elm\",\n              \"packageName\": \"frontend\",\n              \"version\": \"1.0.0\"\n          },\n          {\n              \"name\": \"ArtistDetail\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/src/ArtistDetail.elm\",\n              \"packageName\": \"frontend\",\n              \"version\": \"1.0.0\"\n          },\n          {\n              \"name\": \"ArtistListing\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/src/ArtistListing.elm\",\n              \"packageName\": \"frontend\",\n              \"version\": \"1.0.0\"\n          },\n          {\n              \"name\": \"Home\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/src/Home.elm\",\n              \"packageName\": \"frontend\",\n              \"version\": \"1.0.0\"\n          },\n          {\n              \"name\": \"Routes\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/src/Routes.elm\",\n              \"packageName\": \"frontend\",\n              \"version\": \"1.0.0\"\n          },\n          {\n              \"name\": \"ServerApi\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/src/ServerApi.elm\",\n              \"packageName\": \"frontend\",\n              \"version\": \"1.0.0\"\n          },\n          {\n              \"name\": \"TrackRow\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/src/TrackRow.elm\",\n              \"packageName\": \"frontend\",\n              \"version\": \"1.0.0\"\n          },\n          {\n              \"name\": \"History\",\n              \"packageName\": \"elm-community/elm-history\",\n              \"version\": \"1.0.1\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-community/elm-history/1.0.1/src/History.elm\"\n          },\n          {\n              \"name\": \"Effects\",\n              \"packageName\": \"evancz/elm-effects\",\n              \"version\": \"2.0.1\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/elm-effects/2.0.1/src/Effects.elm\"\n          },\n          {\n              \"name\": \"Combine\",\n              \"packageName\": \"Bogdanp/elm-combine\",\n              \"version\": \"1.2.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/Bogdanp/elm-combine/1.2.0/src/Combine.elm\"\n          },\n          {\n              \"name\": \"Combine.Char\",\n              \"packageName\": \"Bogdanp/elm-combine\",\n              \"version\": \"1.2.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/Bogdanp/elm-combine/1.2.0/src/Combine/Char.elm\"\n          },\n          {\n              \"name\": \"Combine.Infix\",\n              \"packageName\": \"Bogdanp/elm-combine\",\n              \"version\": \"1.2.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/Bogdanp/elm-combine/1.2.0/src/Combine/Infix.elm\"\n          },\n          {\n              \"name\": \"Combine.Num\",\n              \"packageName\": \"Bogdanp/elm-combine\",\n              \"version\": \"1.2.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/Bogdanp/elm-combine/1.2.0/src/Combine/Num.elm\"\n          },\n          {\n              \"name\": \"VirtualDom\",\n              \"packageName\": \"evancz/virtual-dom\",\n              \"version\": \"2.1.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/virtual-dom/2.1.0/src/VirtualDom.elm\"\n          },\n          {\n              \"name\": \"Response\",\n              \"packageName\": \"etaque/elm-response\",\n              \"version\": \"1.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/etaque/elm-response/1.0.0/src/Response.elm\"\n          },\n          {\n              \"name\": \"Easing\",\n              \"packageName\": \"Dandandan/Easing\",\n              \"version\": \"2.0.2\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/Dandandan/Easing/2.0.2/Easing.elm\"\n          },\n          {\n              \"name\": \"Http\",\n              \"packageName\": \"evancz/elm-http\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/elm-http/3.0.0/src/Http.elm\"\n          },\n          {\n              \"name\": \"RouteParser\",\n              \"packageName\": \"etaque/elm-route-parser\",\n              \"version\": \"2.2.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/etaque/elm-route-parser/2.2.0/src/RouteParser.elm\"\n          },\n          {\n              \"name\": \"RouteParser.QueryString\",\n              \"packageName\": \"etaque/elm-route-parser\",\n              \"version\": \"2.2.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/etaque/elm-route-parser/2.2.0/src/RouteParser/QueryString.elm\"\n          },\n          {\n              \"name\": \"TransitRouter\",\n              \"packageName\": \"etaque/elm-transit-router\",\n              \"version\": \"1.0.1\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/etaque/elm-transit-router/1.0.1/src/TransitRouter.elm\"\n          },\n          {\n              \"name\": \"List.Extra\",\n              \"packageName\": \"circuithub/elm-list-extra\",\n              \"version\": \"3.9.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/circuithub/elm-list-extra/3.9.0/src/List/Extra.elm\"\n          },\n          {\n              \"name\": \"Transit\",\n              \"packageName\": \"etaque/elm-transit\",\n              \"version\": \"5.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/etaque/elm-transit/5.0.0/src/Transit.elm\"\n          },\n          {\n              \"name\": \"Html\",\n              \"packageName\": \"evancz/elm-html\",\n              \"version\": \"4.0.2\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/elm-html/4.0.2/src/Html.elm\"\n          },\n          {\n              \"name\": \"Html.Attributes\",\n              \"packageName\": \"evancz/elm-html\",\n              \"version\": \"4.0.2\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/elm-html/4.0.2/src/Html/Attributes.elm\"\n          },\n          {\n              \"name\": \"Html.Events\",\n              \"packageName\": \"evancz/elm-html\",\n              \"version\": \"4.0.2\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/elm-html/4.0.2/src/Html/Events.elm\"\n          },\n          {\n              \"name\": \"Html.Lazy\",\n              \"packageName\": \"evancz/elm-html\",\n              \"version\": \"4.0.2\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/elm-html/4.0.2/src/Html/Lazy.elm\"\n          },\n          {\n              \"name\": \"TransitStyle\",\n              \"packageName\": \"etaque/elm-transit-style\",\n              \"version\": \"1.0.1\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/etaque/elm-transit-style/1.0.1/src/TransitStyle.elm\"\n          },\n          {\n              \"name\": \"Lazy\",\n              \"packageName\": \"maxsnew/lazy\",\n              \"version\": \"1.1.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/maxsnew/lazy/1.1.0/src/Lazy.elm\"\n          },\n          {\n              \"name\": \"Array\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Array.elm\"\n          },\n          {\n              \"name\": \"Basics\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Basics.elm\"\n          },\n          {\n              \"name\": \"Bitwise\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Bitwise.elm\"\n          },\n          {\n              \"name\": \"Char\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Char.elm\"\n          },\n          {\n              \"name\": \"Color\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Color.elm\"\n          },\n          {\n              \"name\": \"Date\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Date.elm\"\n          },\n          {\n              \"name\": \"Debug\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Debug.elm\"\n          },\n          {\n              \"name\": \"Dict\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Dict.elm\"\n          },\n          {\n              \"name\": \"Graphics.Element\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Graphics/Element.elm\"\n          },\n          {\n              \"name\": \"Graphics.Collage\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Graphics/Collage.elm\"\n          },\n          {\n              \"name\": \"Graphics.Input\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Graphics/Input.elm\"\n          },\n          {\n              \"name\": \"Graphics.Input.Field\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Graphics/Input/Field.elm\"\n          },\n          {\n              \"name\": \"Json.Decode\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Json/Decode.elm\"\n          },\n          {\n              \"name\": \"Json.Encode\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Json/Encode.elm\"\n          },\n          {\n              \"name\": \"Keyboard\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Keyboard.elm\"\n          },\n          {\n              \"name\": \"List\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/List.elm\"\n          },\n          {\n              \"name\": \"Maybe\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Maybe.elm\"\n          },\n          {\n              \"name\": \"Mouse\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Mouse.elm\"\n          },\n          {\n              \"name\": \"Random\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Random.elm\"\n          },\n          {\n              \"name\": \"Regex\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Regex.elm\"\n          },\n          {\n              \"name\": \"Result\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Result.elm\"\n          },\n          {\n              \"name\": \"Set\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Set.elm\"\n          },\n          {\n              \"name\": \"Signal\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Signal.elm\"\n          },\n          {\n              \"name\": \"String\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/String.elm\"\n          },\n          {\n              \"name\": \"Task\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Task.elm\"\n          },\n          {\n              \"name\": \"Text\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Text.elm\"\n          },\n          {\n              \"name\": \"Time\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Time.elm\"\n          },\n          {\n              \"name\": \"Touch\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Touch.elm\"\n          },\n          {\n              \"name\": \"Trampoline\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Trampoline.elm\"\n          },\n          {\n              \"name\": \"Transform2D\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Transform2D.elm\"\n          },\n          {\n              \"name\": \"Window\",\n              \"packageName\": \"elm-lang/core\",\n              \"version\": \"3.0.0\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/elm-lang/core/3.0.0/src/Window.elm\"\n          },\n          {\n              \"name\": \"Animation\",\n              \"packageName\": \"mgold/elm-animation\",\n              \"version\": \"1.0.3\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/mgold/elm-animation/1.0.3/Animation.elm\"\n          },\n          {\n              \"name\": \"StartApp\",\n              \"packageName\": \"evancz/start-app\",\n              \"version\": \"2.0.2\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/start-app/2.0.2/src/StartApp.elm\"\n          },\n          {\n              \"name\": \"StartApp.Simple\",\n              \"packageName\": \"evancz/start-app\",\n              \"version\": \"2.0.2\",\n              \"file\": \"/Users/mrundberget/projects/albums/frontend/elm-stuff/packageNames/evancz/start-app/2.0.2/src/StartApp/Simple.elm\"\n          }\n      ];\n\n      modbrowser.ports.modzPort.send(samplemoduls);\n\n      modbrowser.ports.select.subscribe(function (file) {\n        console.log(\"Selected: \" + file);\n      });\n\n      modbrowser.ports.changeSelection.subscribe(function () {\n        console.log(\"Module selection changed, ensure visible in div\");\n      });\n\n\n    </script>\n\n  </body>\n</html>\n"
  },
  {
    "path": "elm/ModuleBrowser/elm-package.json",
    "content": "{\n    \"version\": \"1.0.0\",\n    \"summary\": \"Elm project module browser for elm-light\",\n    \"repository\": \"https://github.com/rundis/elm-light.git\",\n    \"license\": \"MIT\",\n    \"source-directories\": [\n        \".\"\n    ],\n    \"exposed-modules\": [],\n    \"dependencies\": {\n        \"circuithub/elm-list-extra\": \"3.9.0 <= v < 4.0.0\",\n        \"elm-lang/core\": \"3.0.0 <= v < 4.0.0\",\n        \"evancz/elm-html\": \"4.0.2 <= v < 5.0.0\",\n        \"evancz/start-app\": \"2.0.2 <= v < 3.0.0\",\n        \"evancz/elm-effects\": \"2.0.1 <= v < 3.0.0\"\n    },\n    \"elm-version\": \"0.16.0 <= v < 0.17.0\"\n}\n"
  },
  {
    "path": "elm/ModuleBrowser/moduleBrowser.js",
    "content": "var Elm = Elm || { Native: {} };\nElm.Native.Basics = {};\nElm.Native.Basics.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Basics = localRuntime.Native.Basics || {};\n\tif (localRuntime.Native.Basics.values)\n\t{\n\t\treturn localRuntime.Native.Basics.values;\n\t}\n\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\tfunction div(a, b)\n\t{\n\t\treturn (a / b) | 0;\n\t}\n\tfunction rem(a, b)\n\t{\n\t\treturn a % b;\n\t}\n\tfunction mod(a, b)\n\t{\n\t\tif (b === 0)\n\t\t{\n\t\t\tthrow new Error('Cannot perform mod 0. Division by zero error.');\n\t\t}\n\t\tvar r = a % b;\n\t\tvar m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b));\n\n\t\treturn m === b ? 0 : m;\n\t}\n\tfunction logBase(base, n)\n\t{\n\t\treturn Math.log(n) / Math.log(base);\n\t}\n\tfunction negate(n)\n\t{\n\t\treturn -n;\n\t}\n\tfunction abs(n)\n\t{\n\t\treturn n < 0 ? -n : n;\n\t}\n\n\tfunction min(a, b)\n\t{\n\t\treturn Utils.cmp(a, b) < 0 ? a : b;\n\t}\n\tfunction max(a, b)\n\t{\n\t\treturn Utils.cmp(a, b) > 0 ? a : b;\n\t}\n\tfunction clamp(lo, hi, n)\n\t{\n\t\treturn Utils.cmp(n, lo) < 0 ? lo : Utils.cmp(n, hi) > 0 ? hi : n;\n\t}\n\n\tfunction xor(a, b)\n\t{\n\t\treturn a !== b;\n\t}\n\tfunction not(b)\n\t{\n\t\treturn !b;\n\t}\n\tfunction isInfinite(n)\n\t{\n\t\treturn n === Infinity || n === -Infinity;\n\t}\n\n\tfunction truncate(n)\n\t{\n\t\treturn n | 0;\n\t}\n\n\tfunction degrees(d)\n\t{\n\t\treturn d * Math.PI / 180;\n\t}\n\tfunction turns(t)\n\t{\n\t\treturn 2 * Math.PI * t;\n\t}\n\tfunction fromPolar(point)\n\t{\n\t\tvar r = point._0;\n\t\tvar t = point._1;\n\t\treturn Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));\n\t}\n\tfunction toPolar(point)\n\t{\n\t\tvar x = point._0;\n\t\tvar y = point._1;\n\t\treturn Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x));\n\t}\n\n\treturn localRuntime.Native.Basics.values = {\n\t\tdiv: F2(div),\n\t\trem: F2(rem),\n\t\tmod: F2(mod),\n\n\t\tpi: Math.PI,\n\t\te: Math.E,\n\t\tcos: Math.cos,\n\t\tsin: Math.sin,\n\t\ttan: Math.tan,\n\t\tacos: Math.acos,\n\t\tasin: Math.asin,\n\t\tatan: Math.atan,\n\t\tatan2: F2(Math.atan2),\n\n\t\tdegrees: degrees,\n\t\tturns: turns,\n\t\tfromPolar: fromPolar,\n\t\ttoPolar: toPolar,\n\n\t\tsqrt: Math.sqrt,\n\t\tlogBase: F2(logBase),\n\t\tnegate: negate,\n\t\tabs: abs,\n\t\tmin: F2(min),\n\t\tmax: F2(max),\n\t\tclamp: F3(clamp),\n\t\tcompare: Utils.compare,\n\n\t\txor: F2(xor),\n\t\tnot: not,\n\n\t\ttruncate: truncate,\n\t\tceiling: Math.ceil,\n\t\tfloor: Math.floor,\n\t\tround: Math.round,\n\t\ttoFloat: function(x) { return x; },\n\t\tisNaN: isNaN,\n\t\tisInfinite: isInfinite\n\t};\n};\n\nElm.Native.Port = {};\n\nElm.Native.Port.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Port = localRuntime.Native.Port || {};\n\tif (localRuntime.Native.Port.values)\n\t{\n\t\treturn localRuntime.Native.Port.values;\n\t}\n\n\tvar NS;\n\n\t// INBOUND\n\n\tfunction inbound(name, type, converter)\n\t{\n\t\tif (!localRuntime.argsTracker[name])\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'Port Error:\\n' +\n\t\t\t\t'No argument was given for the port named \\'' + name + '\\' with type:\\n\\n' +\n\t\t\t\t'    ' + type.split('\\n').join('\\n        ') + '\\n\\n' +\n\t\t\t\t'You need to provide an initial value!\\n\\n' +\n\t\t\t\t'Find out more about ports here <http://elm-lang.org/learn/Ports.elm>'\n\t\t\t);\n\t\t}\n\t\tvar arg = localRuntime.argsTracker[name];\n\t\targ.used = true;\n\n\t\treturn jsToElm(name, type, converter, arg.value);\n\t}\n\n\n\tfunction inboundSignal(name, type, converter)\n\t{\n\t\tvar initialValue = inbound(name, type, converter);\n\n\t\tif (!NS)\n\t\t{\n\t\t\tNS = Elm.Native.Signal.make(localRuntime);\n\t\t}\n\t\tvar signal = NS.input('inbound-port-' + name, initialValue);\n\n\t\tfunction send(jsValue)\n\t\t{\n\t\t\tvar elmValue = jsToElm(name, type, converter, jsValue);\n\t\t\tsetTimeout(function() {\n\t\t\t\tlocalRuntime.notify(signal.id, elmValue);\n\t\t\t}, 0);\n\t\t}\n\n\t\tlocalRuntime.ports[name] = { send: send };\n\n\t\treturn signal;\n\t}\n\n\n\tfunction jsToElm(name, type, converter, value)\n\t{\n\t\ttry\n\t\t{\n\t\t\treturn converter(value);\n\t\t}\n\t\tcatch(e)\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'Port Error:\\n' +\n\t\t\t\t'Regarding the port named \\'' + name + '\\' with type:\\n\\n' +\n\t\t\t\t'    ' + type.split('\\n').join('\\n        ') + '\\n\\n' +\n\t\t\t\t'You just sent the value:\\n\\n' +\n\t\t\t\t'    ' + JSON.stringify(value) + '\\n\\n' +\n\t\t\t\t'but it cannot be converted to the necessary type.\\n' +\n\t\t\t\te.message\n\t\t\t);\n\t\t}\n\t}\n\n\n\t// OUTBOUND\n\n\tfunction outbound(name, converter, elmValue)\n\t{\n\t\tlocalRuntime.ports[name] = converter(elmValue);\n\t}\n\n\n\tfunction outboundSignal(name, converter, signal)\n\t{\n\t\tvar subscribers = [];\n\n\t\tfunction subscribe(handler)\n\t\t{\n\t\t\tsubscribers.push(handler);\n\t\t}\n\t\tfunction unsubscribe(handler)\n\t\t{\n\t\t\tsubscribers.pop(subscribers.indexOf(handler));\n\t\t}\n\n\t\tfunction notify(elmValue)\n\t\t{\n\t\t\tvar jsValue = converter(elmValue);\n\t\t\tvar len = subscribers.length;\n\t\t\tfor (var i = 0; i < len; ++i)\n\t\t\t{\n\t\t\t\tsubscribers[i](jsValue);\n\t\t\t}\n\t\t}\n\n\t\tif (!NS)\n\t\t{\n\t\t\tNS = Elm.Native.Signal.make(localRuntime);\n\t\t}\n\t\tNS.output('outbound-port-' + name, notify, signal);\n\n\t\tlocalRuntime.ports[name] = {\n\t\t\tsubscribe: subscribe,\n\t\t\tunsubscribe: unsubscribe\n\t\t};\n\n\t\treturn signal;\n\t}\n\n\n\treturn localRuntime.Native.Port.values = {\n\t\tinbound: inbound,\n\t\toutbound: outbound,\n\t\tinboundSignal: inboundSignal,\n\t\toutboundSignal: outboundSignal\n\t};\n};\n\nif (!Elm.fullscreen) {\n\t(function() {\n\t\t'use strict';\n\n\t\tvar Display = {\n\t\t\tFULLSCREEN: 0,\n\t\t\tCOMPONENT: 1,\n\t\t\tNONE: 2\n\t\t};\n\n\t\tElm.fullscreen = function(module, args)\n\t\t{\n\t\t\tvar container = document.createElement('div');\n\t\t\tdocument.body.appendChild(container);\n\t\t\treturn init(Display.FULLSCREEN, container, module, args || {});\n\t\t};\n\n\t\tElm.embed = function(module, container, args)\n\t\t{\n\t\t\tvar tag = container.tagName;\n\t\t\tif (tag !== 'DIV')\n\t\t\t{\n\t\t\t\tthrow new Error('Elm.node must be given a DIV, not a ' + tag + '.');\n\t\t\t}\n\t\t\treturn init(Display.COMPONENT, container, module, args || {});\n\t\t};\n\n\t\tElm.worker = function(module, args)\n\t\t{\n\t\t\treturn init(Display.NONE, {}, module, args || {});\n\t\t};\n\n\t\tfunction init(display, container, module, args, moduleToReplace)\n\t\t{\n\t\t\t// defining state needed for an instance of the Elm RTS\n\t\t\tvar inputs = [];\n\n\t\t\t/* OFFSET\n\t\t\t * Elm's time traveling debugger lets you pause time. This means\n\t\t\t * \"now\" may be shifted a bit into the past. By wrapping Date.now()\n\t\t\t * we can manage this.\n\t\t\t */\n\t\t\tvar timer = {\n\t\t\t\tprogramStart: Date.now(),\n\t\t\t\tnow: function()\n\t\t\t\t{\n\t\t\t\t\treturn Date.now();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar updateInProgress = false;\n\t\t\tfunction notify(id, v)\n\t\t\t{\n\t\t\t\tif (updateInProgress)\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'The notify function has been called synchronously!\\n' +\n\t\t\t\t\t\t'This can lead to frames being dropped.\\n' +\n\t\t\t\t\t\t'Definitely report this to <https://github.com/elm-lang/Elm/issues>\\n');\n\t\t\t\t}\n\t\t\t\tupdateInProgress = true;\n\t\t\t\tvar timestep = timer.now();\n\t\t\t\tfor (var i = inputs.length; i--; )\n\t\t\t\t{\n\t\t\t\t\tinputs[i].notify(timestep, id, v);\n\t\t\t\t}\n\t\t\t\tupdateInProgress = false;\n\t\t\t}\n\t\t\tfunction setTimeout(func, delay)\n\t\t\t{\n\t\t\t\treturn window.setTimeout(func, delay);\n\t\t\t}\n\n\t\t\tvar listeners = [];\n\t\t\tfunction addListener(relevantInputs, domNode, eventName, func)\n\t\t\t{\n\t\t\t\tdomNode.addEventListener(eventName, func);\n\t\t\t\tvar listener = {\n\t\t\t\t\trelevantInputs: relevantInputs,\n\t\t\t\t\tdomNode: domNode,\n\t\t\t\t\teventName: eventName,\n\t\t\t\t\tfunc: func\n\t\t\t\t};\n\t\t\t\tlisteners.push(listener);\n\t\t\t}\n\n\t\t\tvar argsTracker = {};\n\t\t\tfor (var name in args)\n\t\t\t{\n\t\t\t\targsTracker[name] = {\n\t\t\t\t\tvalue: args[name],\n\t\t\t\t\tused: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// create the actual RTS. Any impure modules will attach themselves to this\n\t\t\t// object. This permits many Elm programs to be embedded per document.\n\t\t\tvar elm = {\n\t\t\t\tnotify: notify,\n\t\t\t\tsetTimeout: setTimeout,\n\t\t\t\tnode: container,\n\t\t\t\taddListener: addListener,\n\t\t\t\tinputs: inputs,\n\t\t\t\ttimer: timer,\n\t\t\t\targsTracker: argsTracker,\n\t\t\t\tports: {},\n\n\t\t\t\tisFullscreen: function() { return display === Display.FULLSCREEN; },\n\t\t\t\tisEmbed: function() { return display === Display.COMPONENT; },\n\t\t\t\tisWorker: function() { return display === Display.NONE; }\n\t\t\t};\n\n\t\t\tfunction swap(newModule)\n\t\t\t{\n\t\t\t\tremoveListeners(listeners);\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tvar newElm = init(display, div, newModule, args, elm);\n\t\t\t\tinputs = [];\n\n\t\t\t\treturn newElm;\n\t\t\t}\n\n\t\t\tfunction dispose()\n\t\t\t{\n\t\t\t\tremoveListeners(listeners);\n\t\t\t\tinputs = [];\n\t\t\t}\n\n\t\t\tvar Module = {};\n\t\t\ttry\n\t\t\t{\n\t\t\t\tModule = module.make(elm);\n\t\t\t\tcheckInputs(elm);\n\t\t\t}\n\t\t\tcatch (error)\n\t\t\t{\n\t\t\t\tif (typeof container.appendChild === \"function\")\n\t\t\t\t{\n\t\t\t\t\tcontainer.appendChild(errorNode(error.message));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconsole.error(error.message);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (display !== Display.NONE)\n\t\t\t{\n\t\t\t\tvar graphicsNode = initGraphics(elm, Module);\n\t\t\t}\n\n\t\t\tvar rootNode = { kids: inputs };\n\t\t\ttrimDeadNodes(rootNode);\n\t\t\tinputs = rootNode.kids;\n\t\t\tfilterListeners(inputs, listeners);\n\n\t\t\taddReceivers(elm.ports);\n\n\t\t\tif (typeof moduleToReplace !== 'undefined')\n\t\t\t{\n\t\t\t\thotSwap(moduleToReplace, elm);\n\n\t\t\t\t// rerender scene if graphics are enabled.\n\t\t\t\tif (typeof graphicsNode !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tgraphicsNode.notify(0, true, 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tswap: swap,\n\t\t\t\tports: elm.ports,\n\t\t\t\tdispose: dispose\n\t\t\t};\n\t\t}\n\n\t\tfunction checkInputs(elm)\n\t\t{\n\t\t\tvar argsTracker = elm.argsTracker;\n\t\t\tfor (var name in argsTracker)\n\t\t\t{\n\t\t\t\tif (!argsTracker[name].used)\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"Port Error:\\nYou provided an argument named '\" + name +\n\t\t\t\t\t\t\"' but there is no corresponding port!\\n\\n\" +\n\t\t\t\t\t\t\"Maybe add a port '\" + name + \"' to your Elm module?\\n\" +\n\t\t\t\t\t\t\"Maybe remove the '\" + name + \"' argument from your initialization code in JS?\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction errorNode(message)\n\t\t{\n\t\t\tvar code = document.createElement('code');\n\n\t\t\tvar lines = message.split('\\n');\n\t\t\tcode.appendChild(document.createTextNode(lines[0]));\n\t\t\tcode.appendChild(document.createElement('br'));\n\t\t\tcode.appendChild(document.createElement('br'));\n\t\t\tfor (var i = 1; i < lines.length; ++i)\n\t\t\t{\n\t\t\t\tcode.appendChild(document.createTextNode('\\u00A0 \\u00A0 ' + lines[i].replace(/  /g, '\\u00A0 ')));\n\t\t\t\tcode.appendChild(document.createElement('br'));\n\t\t\t}\n\t\t\tcode.appendChild(document.createElement('br'));\n\t\t\tcode.appendChild(document.createTextNode('Open the developer console for more details.'));\n\t\t\treturn code;\n\t\t}\n\n\n\t\t//// FILTER SIGNALS ////\n\n\t\t// TODO: move this code into the signal module and create a function\n\t\t// Signal.initializeGraph that actually instantiates everything.\n\n\t\tfunction filterListeners(inputs, listeners)\n\t\t{\n\t\t\tloop:\n\t\t\tfor (var i = listeners.length; i--; )\n\t\t\t{\n\t\t\t\tvar listener = listeners[i];\n\t\t\t\tfor (var j = inputs.length; j--; )\n\t\t\t\t{\n\t\t\t\t\tif (listener.relevantInputs.indexOf(inputs[j].id) >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue loop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlistener.domNode.removeEventListener(listener.eventName, listener.func);\n\t\t\t}\n\t\t}\n\n\t\tfunction removeListeners(listeners)\n\t\t{\n\t\t\tfor (var i = listeners.length; i--; )\n\t\t\t{\n\t\t\t\tvar listener = listeners[i];\n\t\t\t\tlistener.domNode.removeEventListener(listener.eventName, listener.func);\n\t\t\t}\n\t\t}\n\n\t\t// add receivers for built-in ports if they are defined\n\t\tfunction addReceivers(ports)\n\t\t{\n\t\t\tif ('title' in ports)\n\t\t\t{\n\t\t\t\tif (typeof ports.title === 'string')\n\t\t\t\t{\n\t\t\t\t\tdocument.title = ports.title;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tports.title.subscribe(function(v) { document.title = v; });\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ('redirect' in ports)\n\t\t\t{\n\t\t\t\tports.redirect.subscribe(function(v) {\n\t\t\t\t\tif (v.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\twindow.location = v;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\n\t\t// returns a boolean representing whether the node is alive or not.\n\t\tfunction trimDeadNodes(node)\n\t\t{\n\t\t\tif (node.isOutput)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar liveKids = [];\n\t\t\tfor (var i = node.kids.length; i--; )\n\t\t\t{\n\t\t\t\tvar kid = node.kids[i];\n\t\t\t\tif (trimDeadNodes(kid))\n\t\t\t\t{\n\t\t\t\t\tliveKids.push(kid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode.kids = liveKids;\n\n\t\t\treturn liveKids.length > 0;\n\t\t}\n\n\n\t\t////  RENDERING  ////\n\n\t\tfunction initGraphics(elm, Module)\n\t\t{\n\t\t\tif (!('main' in Module))\n\t\t\t{\n\t\t\t\tthrow new Error(\"'main' is missing! What do I display?!\");\n\t\t\t}\n\n\t\t\tvar signalGraph = Module.main;\n\n\t\t\t// make sure the signal graph is actually a signal & extract the visual model\n\t\t\tif (!('notify' in signalGraph))\n\t\t\t{\n\t\t\t\tsignalGraph = Elm.Signal.make(elm).constant(signalGraph);\n\t\t\t}\n\t\t\tvar initialScene = signalGraph.value;\n\n\t\t\t// Figure out what the render functions should be\n\t\t\tvar render;\n\t\t\tvar update;\n\t\t\tif (initialScene.ctor === 'Element_elm_builtin')\n\t\t\t{\n\t\t\t\tvar Element = Elm.Native.Graphics.Element.make(elm);\n\t\t\t\trender = Element.render;\n\t\t\t\tupdate = Element.updateAndReplace;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar VirtualDom = Elm.Native.VirtualDom.make(elm);\n\t\t\t\trender = VirtualDom.render;\n\t\t\t\tupdate = VirtualDom.updateAndReplace;\n\t\t\t}\n\n\t\t\t// Add the initialScene to the DOM\n\t\t\tvar container = elm.node;\n\t\t\tvar node = render(initialScene);\n\t\t\twhile (container.firstChild)\n\t\t\t{\n\t\t\t\tcontainer.removeChild(container.firstChild);\n\t\t\t}\n\t\t\tcontainer.appendChild(node);\n\n\t\t\tvar _requestAnimationFrame =\n\t\t\t\ttypeof requestAnimationFrame !== 'undefined'\n\t\t\t\t\t? requestAnimationFrame\n\t\t\t\t\t: function(cb) { setTimeout(cb, 1000 / 60); }\n\t\t\t\t\t;\n\n\t\t\t// domUpdate is called whenever the main Signal changes.\n\t\t\t//\n\t\t\t// domUpdate and drawCallback implement a small state machine in order\n\t\t\t// to schedule only 1 draw per animation frame. This enforces that\n\t\t\t// once draw has been called, it will not be called again until the\n\t\t\t// next frame.\n\t\t\t//\n\t\t\t// drawCallback is scheduled whenever\n\t\t\t// 1. The state transitions from PENDING_REQUEST to EXTRA_REQUEST, or\n\t\t\t// 2. The state transitions from NO_REQUEST to PENDING_REQUEST\n\t\t\t//\n\t\t\t// Invariants:\n\t\t\t// 1. In the NO_REQUEST state, there is never a scheduled drawCallback.\n\t\t\t// 2. In the PENDING_REQUEST and EXTRA_REQUEST states, there is always exactly 1\n\t\t\t//    scheduled drawCallback.\n\t\t\tvar NO_REQUEST = 0;\n\t\t\tvar PENDING_REQUEST = 1;\n\t\t\tvar EXTRA_REQUEST = 2;\n\t\t\tvar state = NO_REQUEST;\n\t\t\tvar savedScene = initialScene;\n\t\t\tvar scheduledScene = initialScene;\n\n\t\t\tfunction domUpdate(newScene)\n\t\t\t{\n\t\t\t\tscheduledScene = newScene;\n\n\t\t\t\tswitch (state)\n\t\t\t\t{\n\t\t\t\t\tcase NO_REQUEST:\n\t\t\t\t\t\t_requestAnimationFrame(drawCallback);\n\t\t\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase PENDING_REQUEST:\n\t\t\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase EXTRA_REQUEST:\n\t\t\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction drawCallback()\n\t\t\t{\n\t\t\t\tswitch (state)\n\t\t\t\t{\n\t\t\t\t\tcase NO_REQUEST:\n\t\t\t\t\t\t// This state should not be possible. How can there be no\n\t\t\t\t\t\t// request, yet somehow we are actively fulfilling a\n\t\t\t\t\t\t// request?\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Unexpected draw callback.\\n' +\n\t\t\t\t\t\t\t'Please report this to <https://github.com/elm-lang/core/issues>.'\n\t\t\t\t\t\t);\n\n\t\t\t\t\tcase PENDING_REQUEST:\n\t\t\t\t\t\t// At this point, we do not *know* that another frame is\n\t\t\t\t\t\t// needed, but we make an extra request to rAF just in\n\t\t\t\t\t\t// case. It's possible to drop a frame if rAF is called\n\t\t\t\t\t\t// too late, so we just do it preemptively.\n\t\t\t\t\t\t_requestAnimationFrame(drawCallback);\n\t\t\t\t\t\tstate = EXTRA_REQUEST;\n\n\t\t\t\t\t\t// There's also stuff we definitely need to draw.\n\t\t\t\t\t\tdraw();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tcase EXTRA_REQUEST:\n\t\t\t\t\t\t// Turns out the extra request was not needed, so we will\n\t\t\t\t\t\t// stop calling rAF. No reason to call it all the time if\n\t\t\t\t\t\t// no one needs it.\n\t\t\t\t\t\tstate = NO_REQUEST;\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction draw()\n\t\t\t{\n\t\t\t\tupdate(elm.node.firstChild, savedScene, scheduledScene);\n\t\t\t\tif (elm.Native.Window)\n\t\t\t\t{\n\t\t\t\t\telm.Native.Window.values.resizeIfNeeded();\n\t\t\t\t}\n\t\t\t\tsavedScene = scheduledScene;\n\t\t\t}\n\n\t\t\tvar renderer = Elm.Native.Signal.make(elm).output('main', domUpdate, signalGraph);\n\n\t\t\t// must check for resize after 'renderer' is created so\n\t\t\t// that changes show up.\n\t\t\tif (elm.Native.Window)\n\t\t\t{\n\t\t\t\telm.Native.Window.values.resizeIfNeeded();\n\t\t\t}\n\n\t\t\treturn renderer;\n\t\t}\n\n\t\t//// HOT SWAPPING ////\n\n\t\t// Returns boolean indicating if the swap was successful.\n\t\t// Requires that the two signal graphs have exactly the same\n\t\t// structure.\n\t\tfunction hotSwap(from, to)\n\t\t{\n\t\t\tfunction similar(nodeOld, nodeNew)\n\t\t\t{\n\t\t\t\tif (nodeOld.id !== nodeNew.id)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (nodeOld.isOutput)\n\t\t\t\t{\n\t\t\t\t\treturn nodeNew.isOutput;\n\t\t\t\t}\n\t\t\t\treturn nodeOld.kids.length === nodeNew.kids.length;\n\t\t\t}\n\t\t\tfunction swap(nodeOld, nodeNew)\n\t\t\t{\n\t\t\t\tnodeNew.value = nodeOld.value;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar canSwap = depthFirstTraversals(similar, from.inputs, to.inputs);\n\t\t\tif (canSwap)\n\t\t\t{\n\t\t\t\tdepthFirstTraversals(swap, from.inputs, to.inputs);\n\t\t\t}\n\t\t\tfrom.node.parentNode.replaceChild(to.node, from.node);\n\n\t\t\treturn canSwap;\n\t\t}\n\n\t\t// Returns false if the node operation f ever fails.\n\t\tfunction depthFirstTraversals(f, queueOld, queueNew)\n\t\t{\n\t\t\tif (queueOld.length !== queueNew.length)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tqueueOld = queueOld.slice(0);\n\t\t\tqueueNew = queueNew.slice(0);\n\n\t\t\tvar seen = [];\n\t\t\twhile (queueOld.length > 0 && queueNew.length > 0)\n\t\t\t{\n\t\t\t\tvar nodeOld = queueOld.pop();\n\t\t\t\tvar nodeNew = queueNew.pop();\n\t\t\t\tif (seen.indexOf(nodeOld.id) < 0)\n\t\t\t\t{\n\t\t\t\t\tif (!f(nodeOld, nodeNew))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tqueueOld = queueOld.concat(nodeOld.kids || []);\n\t\t\t\t\tqueueNew = queueNew.concat(nodeNew.kids || []);\n\t\t\t\t\tseen.push(nodeOld.id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}());\n\n\tfunction F2(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return fun(a,b); }; }\n\t\twrapper.arity = 2;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F3(fun)\n\t{\n\t\tfunction wrapper(a) {\n\t\t\treturn function(b) { return function(c) { return fun(a, b, c); }; };\n\t\t}\n\t\twrapper.arity = 3;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F4(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return fun(a, b, c, d); }; }; };\n\t\t}\n\t\twrapper.arity = 4;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F5(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };\n\t\t}\n\t\twrapper.arity = 5;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F6(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return function(f) {\n\t\t\treturn fun(a, b, c, d, e, f); }; }; }; }; };\n\t\t}\n\t\twrapper.arity = 6;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F7(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return function(f) {\n\t\t\treturn function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };\n\t\t}\n\t\twrapper.arity = 7;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F8(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return function(f) {\n\t\t\treturn function(g) { return function(h) {\n\t\t\treturn fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };\n\t\t}\n\t\twrapper.arity = 8;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction F9(fun)\n\t{\n\t\tfunction wrapper(a) { return function(b) { return function(c) {\n\t\t\treturn function(d) { return function(e) { return function(f) {\n\t\t\treturn function(g) { return function(h) { return function(i) {\n\t\t\treturn fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };\n\t\t}\n\t\twrapper.arity = 9;\n\t\twrapper.func = fun;\n\t\treturn wrapper;\n\t}\n\n\tfunction A2(fun, a, b)\n\t{\n\t\treturn fun.arity === 2\n\t\t\t? fun.func(a, b)\n\t\t\t: fun(a)(b);\n\t}\n\tfunction A3(fun, a, b, c)\n\t{\n\t\treturn fun.arity === 3\n\t\t\t? fun.func(a, b, c)\n\t\t\t: fun(a)(b)(c);\n\t}\n\tfunction A4(fun, a, b, c, d)\n\t{\n\t\treturn fun.arity === 4\n\t\t\t? fun.func(a, b, c, d)\n\t\t\t: fun(a)(b)(c)(d);\n\t}\n\tfunction A5(fun, a, b, c, d, e)\n\t{\n\t\treturn fun.arity === 5\n\t\t\t? fun.func(a, b, c, d, e)\n\t\t\t: fun(a)(b)(c)(d)(e);\n\t}\n\tfunction A6(fun, a, b, c, d, e, f)\n\t{\n\t\treturn fun.arity === 6\n\t\t\t? fun.func(a, b, c, d, e, f)\n\t\t\t: fun(a)(b)(c)(d)(e)(f);\n\t}\n\tfunction A7(fun, a, b, c, d, e, f, g)\n\t{\n\t\treturn fun.arity === 7\n\t\t\t? fun.func(a, b, c, d, e, f, g)\n\t\t\t: fun(a)(b)(c)(d)(e)(f)(g);\n\t}\n\tfunction A8(fun, a, b, c, d, e, f, g, h)\n\t{\n\t\treturn fun.arity === 8\n\t\t\t? fun.func(a, b, c, d, e, f, g, h)\n\t\t\t: fun(a)(b)(c)(d)(e)(f)(g)(h);\n\t}\n\tfunction A9(fun, a, b, c, d, e, f, g, h, i)\n\t{\n\t\treturn fun.arity === 9\n\t\t\t? fun.func(a, b, c, d, e, f, g, h, i)\n\t\t\t: fun(a)(b)(c)(d)(e)(f)(g)(h)(i);\n\t}\n}\n\nElm.Native = Elm.Native || {};\nElm.Native.Utils = {};\nElm.Native.Utils.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Utils = localRuntime.Native.Utils || {};\n\tif (localRuntime.Native.Utils.values)\n\t{\n\t\treturn localRuntime.Native.Utils.values;\n\t}\n\n\n\t// COMPARISONS\n\n\tfunction eq(l, r)\n\t{\n\t\tvar stack = [{'x': l, 'y': r}];\n\t\twhile (stack.length > 0)\n\t\t{\n\t\t\tvar front = stack.pop();\n\t\t\tvar x = front.x;\n\t\t\tvar y = front.y;\n\t\t\tif (x === y)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (typeof x === 'object')\n\t\t\t{\n\t\t\t\tvar c = 0;\n\t\t\t\tfor (var i in x)\n\t\t\t\t{\n\t\t\t\t\t++c;\n\t\t\t\t\tif (i in y)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (i !== 'ctor')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack.push({ 'x': x[i], 'y': y[i] });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ('ctor' in x)\n\t\t\t\t{\n\t\t\t\t\tstack.push({'x': x.ctor, 'y': y.ctor});\n\t\t\t\t}\n\t\t\t\tif (c !== Object.keys(y).length)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof x === 'function')\n\t\t\t{\n\t\t\t\tthrow new Error('Equality error: general function equality is ' +\n\t\t\t\t\t\t\t\t'undecidable, and therefore, unsupported');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t// code in Generate/JavaScript.hs depends on the particular\n\t// integer values assigned to LT, EQ, and GT\n\tvar LT = -1, EQ = 0, GT = 1, ord = ['LT', 'EQ', 'GT'];\n\n\tfunction compare(x, y)\n\t{\n\t\treturn {\n\t\t\tctor: ord[cmp(x, y) + 1]\n\t\t};\n\t}\n\n\tfunction cmp(x, y) {\n\t\tvar ord;\n\t\tif (typeof x !== 'object')\n\t\t{\n\t\t\treturn x === y ? EQ : x < y ? LT : GT;\n\t\t}\n\t\telse if (x.isChar)\n\t\t{\n\t\t\tvar a = x.toString();\n\t\t\tvar b = y.toString();\n\t\t\treturn a === b\n\t\t\t\t? EQ\n\t\t\t\t: a < b\n\t\t\t\t\t? LT\n\t\t\t\t\t: GT;\n\t\t}\n\t\telse if (x.ctor === '::' || x.ctor === '[]')\n\t\t{\n\t\t\twhile (true)\n\t\t\t{\n\t\t\t\tif (x.ctor === '[]' && y.ctor === '[]')\n\t\t\t\t{\n\t\t\t\t\treturn EQ;\n\t\t\t\t}\n\t\t\t\tif (x.ctor !== y.ctor)\n\t\t\t\t{\n\t\t\t\t\treturn x.ctor === '[]' ? LT : GT;\n\t\t\t\t}\n\t\t\t\tord = cmp(x._0, y._0);\n\t\t\t\tif (ord !== EQ)\n\t\t\t\t{\n\t\t\t\t\treturn ord;\n\t\t\t\t}\n\t\t\t\tx = x._1;\n\t\t\t\ty = y._1;\n\t\t\t}\n\t\t}\n\t\telse if (x.ctor.slice(0, 6) === '_Tuple')\n\t\t{\n\t\t\tvar n = x.ctor.slice(6) - 0;\n\t\t\tvar err = 'cannot compare tuples with more than 6 elements.';\n\t\t\tif (n === 0) return EQ;\n\t\t\tif (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;\n\t\t\tif (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;\n\t\t\tif (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;\n\t\t\tif (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;\n\t\t\tif (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;\n\t\t\tif (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;\n\t\t\tif (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }\n\t\t\treturn EQ;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthrow new Error('Comparison error: comparison is only defined on ints, ' +\n\t\t\t\t\t\t\t'floats, times, chars, strings, lists of comparable values, ' +\n\t\t\t\t\t\t\t'and tuples of comparable values.');\n\t\t}\n\t}\n\n\n\t// TUPLES\n\n\tvar Tuple0 = {\n\t\tctor: '_Tuple0'\n\t};\n\n\tfunction Tuple2(x, y)\n\t{\n\t\treturn {\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: x,\n\t\t\t_1: y\n\t\t};\n\t}\n\n\n\t// LITERALS\n\n\tfunction chr(c)\n\t{\n\t\tvar x = new String(c);\n\t\tx.isChar = true;\n\t\treturn x;\n\t}\n\n\tfunction txt(str)\n\t{\n\t\tvar t = new String(str);\n\t\tt.text = true;\n\t\treturn t;\n\t}\n\n\n\t// GUID\n\n\tvar count = 0;\n\tfunction guid(_)\n\t{\n\t\treturn count++;\n\t}\n\n\n\t// RECORDS\n\n\tfunction update(oldRecord, updatedFields)\n\t{\n\t\tvar newRecord = {};\n\t\tfor (var key in oldRecord)\n\t\t{\n\t\t\tvar value = (key in updatedFields) ? updatedFields[key] : oldRecord[key];\n\t\t\tnewRecord[key] = value;\n\t\t}\n\t\treturn newRecord;\n\t}\n\n\n\t// MOUSE COORDINATES\n\n\tfunction getXY(e)\n\t{\n\t\tvar posx = 0;\n\t\tvar posy = 0;\n\t\tif (e.pageX || e.pageY)\n\t\t{\n\t\t\tposx = e.pageX;\n\t\t\tposy = e.pageY;\n\t\t}\n\t\telse if (e.clientX || e.clientY)\n\t\t{\n\t\t\tposx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n\t\t\tposy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n\t\t}\n\n\t\tif (localRuntime.isEmbed())\n\t\t{\n\t\t\tvar rect = localRuntime.node.getBoundingClientRect();\n\t\t\tvar relx = rect.left + document.body.scrollLeft + document.documentElement.scrollLeft;\n\t\t\tvar rely = rect.top + document.body.scrollTop + document.documentElement.scrollTop;\n\t\t\t// TODO: figure out if there is a way to avoid rounding here\n\t\t\tposx = posx - Math.round(relx) - localRuntime.node.clientLeft;\n\t\t\tposy = posy - Math.round(rely) - localRuntime.node.clientTop;\n\t\t}\n\t\treturn Tuple2(posx, posy);\n\t}\n\n\n\t//// LIST STUFF ////\n\n\tvar Nil = { ctor: '[]' };\n\n\tfunction Cons(hd, tl)\n\t{\n\t\treturn {\n\t\t\tctor: '::',\n\t\t\t_0: hd,\n\t\t\t_1: tl\n\t\t};\n\t}\n\n\tfunction list(arr)\n\t{\n\t\tvar out = Nil;\n\t\tfor (var i = arr.length; i--; )\n\t\t{\n\t\t\tout = Cons(arr[i], out);\n\t\t}\n\t\treturn out;\n\t}\n\n\tfunction range(lo, hi)\n\t{\n\t\tvar list = Nil;\n\t\tif (lo <= hi)\n\t\t{\n\t\t\tdo\n\t\t\t{\n\t\t\t\tlist = Cons(hi, list);\n\t\t\t}\n\t\t\twhile (hi-- > lo);\n\t\t}\n\t\treturn list;\n\t}\n\n\tfunction append(xs, ys)\n\t{\n\t\t// append Strings\n\t\tif (typeof xs === 'string')\n\t\t{\n\t\t\treturn xs + ys;\n\t\t}\n\n\t\t// append Text\n\t\tif (xs.ctor.slice(0, 5) === 'Text:')\n\t\t{\n\t\t\treturn {\n\t\t\t\tctor: 'Text:Append',\n\t\t\t\t_0: xs,\n\t\t\t\t_1: ys\n\t\t\t};\n\t\t}\n\n\n\t\t// append Lists\n\t\tif (xs.ctor === '[]')\n\t\t{\n\t\t\treturn ys;\n\t\t}\n\t\tvar root = Cons(xs._0, Nil);\n\t\tvar curr = root;\n\t\txs = xs._1;\n\t\twhile (xs.ctor !== '[]')\n\t\t{\n\t\t\tcurr._1 = Cons(xs._0, Nil);\n\t\t\txs = xs._1;\n\t\t\tcurr = curr._1;\n\t\t}\n\t\tcurr._1 = ys;\n\t\treturn root;\n\t}\n\n\n\t// CRASHES\n\n\tfunction crash(moduleName, region)\n\t{\n\t\treturn function(message) {\n\t\t\tthrow new Error(\n\t\t\t\t'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\\n'\n\t\t\t\t+ 'The message provided by the code author is:\\n\\n    '\n\t\t\t\t+ message\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction crashCase(moduleName, region, value)\n\t{\n\t\treturn function(message) {\n\t\t\tthrow new Error(\n\t\t\t\t'Ran into a `Debug.crash` in module `' + moduleName + '`\\n\\n'\n\t\t\t\t+ 'This was caused by the `case` expression ' + regionToString(region) + '.\\n'\n\t\t\t\t+ 'One of the branches ended with a crash and the following value got through:\\n\\n    ' + toString(value) + '\\n\\n'\n\t\t\t\t+ 'The message provided by the code author is:\\n\\n    '\n\t\t\t\t+ message\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction regionToString(region)\n\t{\n\t\tif (region.start.line == region.end.line)\n\t\t{\n\t\t\treturn 'on line ' + region.start.line;\n\t\t}\n\t\treturn 'between lines ' + region.start.line + ' and ' + region.end.line;\n\t}\n\n\n\t// BAD PORTS\n\n\tfunction badPort(expected, received)\n\t{\n\t\tthrow new Error(\n\t\t\t'Runtime error when sending values through a port.\\n\\n'\n\t\t\t+ 'Expecting ' + expected + ' but was given ' + formatValue(received)\n\t\t);\n\t}\n\n\tfunction formatValue(value)\n\t{\n\t\t// Explicity format undefined values as \"undefined\"\n\t\t// because JSON.stringify(undefined) unhelpfully returns \"\"\n\t\treturn (value === undefined) ? \"undefined\" : JSON.stringify(value);\n\t}\n\n\n\t// TO STRING\n\n\tvar _Array;\n\tvar Dict;\n\tvar List;\n\n\tvar toString = function(v)\n\t{\n\t\tvar type = typeof v;\n\t\tif (type === 'function')\n\t\t{\n\t\t\tvar name = v.func ? v.func.name : v.name;\n\t\t\treturn '<function' + (name === '' ? '' : ': ') + name + '>';\n\t\t}\n\t\telse if (type === 'boolean')\n\t\t{\n\t\t\treturn v ? 'True' : 'False';\n\t\t}\n\t\telse if (type === 'number')\n\t\t{\n\t\t\treturn v + '';\n\t\t}\n\t\telse if ((v instanceof String) && v.isChar)\n\t\t{\n\t\t\treturn '\\'' + addSlashes(v, true) + '\\'';\n\t\t}\n\t\telse if (type === 'string')\n\t\t{\n\t\t\treturn '\"' + addSlashes(v, false) + '\"';\n\t\t}\n\t\telse if (type === 'object' && 'ctor' in v)\n\t\t{\n\t\t\tif (v.ctor.substring(0, 6) === '_Tuple')\n\t\t\t{\n\t\t\t\tvar output = [];\n\t\t\t\tfor (var k in v)\n\t\t\t\t{\n\t\t\t\t\tif (k === 'ctor') continue;\n\t\t\t\t\toutput.push(toString(v[k]));\n\t\t\t\t}\n\t\t\t\treturn '(' + output.join(',') + ')';\n\t\t\t}\n\t\t\telse if (v.ctor === '_Array')\n\t\t\t{\n\t\t\t\tif (!_Array)\n\t\t\t\t{\n\t\t\t\t\t_Array = Elm.Array.make(localRuntime);\n\t\t\t\t}\n\t\t\t\tvar list = _Array.toList(v);\n\t\t\t\treturn 'Array.fromList ' + toString(list);\n\t\t\t}\n\t\t\telse if (v.ctor === '::')\n\t\t\t{\n\t\t\t\tvar output = '[' + toString(v._0);\n\t\t\t\tv = v._1;\n\t\t\t\twhile (v.ctor === '::')\n\t\t\t\t{\n\t\t\t\t\toutput += ',' + toString(v._0);\n\t\t\t\t\tv = v._1;\n\t\t\t\t}\n\t\t\t\treturn output + ']';\n\t\t\t}\n\t\t\telse if (v.ctor === '[]')\n\t\t\t{\n\t\t\t\treturn '[]';\n\t\t\t}\n\t\t\telse if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin' || v.ctor === 'Set_elm_builtin')\n\t\t\t{\n\t\t\t\tif (!Dict)\n\t\t\t\t{\n\t\t\t\t\tDict = Elm.Dict.make(localRuntime);\n\t\t\t\t}\n\t\t\t\tvar list;\n\t\t\t\tvar name;\n\t\t\t\tif (v.ctor === 'Set_elm_builtin')\n\t\t\t\t{\n\t\t\t\t\tif (!List)\n\t\t\t\t\t{\n\t\t\t\t\t\tList = Elm.List.make(localRuntime);\n\t\t\t\t\t}\n\t\t\t\t\tname = 'Set';\n\t\t\t\t\tlist = A2(List.map, function(x) {return x._0; }, Dict.toList(v._0));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tname = 'Dict';\n\t\t\t\t\tlist = Dict.toList(v);\n\t\t\t\t}\n\t\t\t\treturn name + '.fromList ' + toString(list);\n\t\t\t}\n\t\t\telse if (v.ctor.slice(0, 5) === 'Text:')\n\t\t\t{\n\t\t\t\treturn '<text>';\n\t\t\t}\n\t\t\telse if (v.ctor === 'Element_elm_builtin')\n\t\t\t{\n\t\t\t\treturn '<element>'\n\t\t\t}\n\t\t\telse if (v.ctor === 'Form_elm_builtin')\n\t\t\t{\n\t\t\t\treturn '<form>'\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar output = '';\n\t\t\t\tfor (var i in v)\n\t\t\t\t{\n\t\t\t\t\tif (i === 'ctor') continue;\n\t\t\t\t\tvar str = toString(v[i]);\n\t\t\t\t\tvar parenless = str[0] === '{' || str[0] === '<' || str.indexOf(' ') < 0;\n\t\t\t\t\toutput += ' ' + (parenless ? str : '(' + str + ')');\n\t\t\t\t}\n\t\t\t\treturn v.ctor + output;\n\t\t\t}\n\t\t}\n\t\telse if (type === 'object' && 'notify' in v && 'id' in v)\n\t\t{\n\t\t\treturn '<signal>';\n\t\t}\n\t\telse if (type === 'object')\n\t\t{\n\t\t\tvar output = [];\n\t\t\tfor (var k in v)\n\t\t\t{\n\t\t\t\toutput.push(k + ' = ' + toString(v[k]));\n\t\t\t}\n\t\t\tif (output.length === 0)\n\t\t\t{\n\t\t\t\treturn '{}';\n\t\t\t}\n\t\t\treturn '{ ' + output.join(', ') + ' }';\n\t\t}\n\t\treturn '<internal structure>';\n\t};\n\n\tfunction addSlashes(str, isChar)\n\t{\n\t\tvar s = str.replace(/\\\\/g, '\\\\\\\\')\n\t\t\t\t  .replace(/\\n/g, '\\\\n')\n\t\t\t\t  .replace(/\\t/g, '\\\\t')\n\t\t\t\t  .replace(/\\r/g, '\\\\r')\n\t\t\t\t  .replace(/\\v/g, '\\\\v')\n\t\t\t\t  .replace(/\\0/g, '\\\\0');\n\t\tif (isChar)\n\t\t{\n\t\t\treturn s.replace(/\\'/g, '\\\\\\'');\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn s.replace(/\\\"/g, '\\\\\"');\n\t\t}\n\t}\n\n\n\treturn localRuntime.Native.Utils.values = {\n\t\teq: eq,\n\t\tcmp: cmp,\n\t\tcompare: F2(compare),\n\t\tTuple0: Tuple0,\n\t\tTuple2: Tuple2,\n\t\tchr: chr,\n\t\ttxt: txt,\n\t\tupdate: update,\n\t\tguid: guid,\n\t\tgetXY: getXY,\n\n\t\tNil: Nil,\n\t\tCons: Cons,\n\t\tlist: list,\n\t\trange: range,\n\t\tappend: F2(append),\n\n\t\tcrash: crash,\n\t\tcrashCase: crashCase,\n\t\tbadPort: badPort,\n\n\t\ttoString: toString\n\t};\n};\n\nElm.Basics = Elm.Basics || {};\nElm.Basics.make = function (_elm) {\n   \"use strict\";\n   _elm.Basics = _elm.Basics || {};\n   if (_elm.Basics.values) return _elm.Basics.values;\n   var _U = Elm.Native.Utils.make(_elm),$Native$Basics = Elm.Native.Basics.make(_elm),$Native$Utils = Elm.Native.Utils.make(_elm);\n   var _op = {};\n   var uncurry = F2(function (f,_p0) {    var _p1 = _p0;return A2(f,_p1._0,_p1._1);});\n   var curry = F3(function (f,a,b) {    return f({ctor: \"_Tuple2\",_0: a,_1: b});});\n   var flip = F3(function (f,b,a) {    return A2(f,a,b);});\n   var snd = function (_p2) {    var _p3 = _p2;return _p3._1;};\n   var fst = function (_p4) {    var _p5 = _p4;return _p5._0;};\n   var always = F2(function (a,_p6) {    return a;});\n   var identity = function (x) {    return x;};\n   _op[\"<|\"] = F2(function (f,x) {    return f(x);});\n   _op[\"|>\"] = F2(function (x,f) {    return f(x);});\n   _op[\">>\"] = F3(function (f,g,x) {    return g(f(x));});\n   _op[\"<<\"] = F3(function (g,f,x) {    return g(f(x));});\n   _op[\"++\"] = $Native$Utils.append;\n   var toString = $Native$Utils.toString;\n   var isInfinite = $Native$Basics.isInfinite;\n   var isNaN = $Native$Basics.isNaN;\n   var toFloat = $Native$Basics.toFloat;\n   var ceiling = $Native$Basics.ceiling;\n   var floor = $Native$Basics.floor;\n   var truncate = $Native$Basics.truncate;\n   var round = $Native$Basics.round;\n   var not = $Native$Basics.not;\n   var xor = $Native$Basics.xor;\n   _op[\"||\"] = $Native$Basics.or;\n   _op[\"&&\"] = $Native$Basics.and;\n   var max = $Native$Basics.max;\n   var min = $Native$Basics.min;\n   var GT = {ctor: \"GT\"};\n   var EQ = {ctor: \"EQ\"};\n   var LT = {ctor: \"LT\"};\n   var compare = $Native$Basics.compare;\n   _op[\">=\"] = $Native$Basics.ge;\n   _op[\"<=\"] = $Native$Basics.le;\n   _op[\">\"] = $Native$Basics.gt;\n   _op[\"<\"] = $Native$Basics.lt;\n   _op[\"/=\"] = $Native$Basics.neq;\n   _op[\"==\"] = $Native$Basics.eq;\n   var e = $Native$Basics.e;\n   var pi = $Native$Basics.pi;\n   var clamp = $Native$Basics.clamp;\n   var logBase = $Native$Basics.logBase;\n   var abs = $Native$Basics.abs;\n   var negate = $Native$Basics.negate;\n   var sqrt = $Native$Basics.sqrt;\n   var atan2 = $Native$Basics.atan2;\n   var atan = $Native$Basics.atan;\n   var asin = $Native$Basics.asin;\n   var acos = $Native$Basics.acos;\n   var tan = $Native$Basics.tan;\n   var sin = $Native$Basics.sin;\n   var cos = $Native$Basics.cos;\n   _op[\"^\"] = $Native$Basics.exp;\n   _op[\"%\"] = $Native$Basics.mod;\n   var rem = $Native$Basics.rem;\n   _op[\"//\"] = $Native$Basics.div;\n   _op[\"/\"] = $Native$Basics.floatDiv;\n   _op[\"*\"] = $Native$Basics.mul;\n   _op[\"-\"] = $Native$Basics.sub;\n   _op[\"+\"] = $Native$Basics.add;\n   var toPolar = $Native$Basics.toPolar;\n   var fromPolar = $Native$Basics.fromPolar;\n   var turns = $Native$Basics.turns;\n   var degrees = $Native$Basics.degrees;\n   var radians = function (t) {    return t;};\n   return _elm.Basics.values = {_op: _op\n                               ,max: max\n                               ,min: min\n                               ,compare: compare\n                               ,not: not\n                               ,xor: xor\n                               ,rem: rem\n                               ,negate: negate\n                               ,abs: abs\n                               ,sqrt: sqrt\n                               ,clamp: clamp\n                               ,logBase: logBase\n                               ,e: e\n                               ,pi: pi\n                               ,cos: cos\n                               ,sin: sin\n                               ,tan: tan\n                               ,acos: acos\n                               ,asin: asin\n                               ,atan: atan\n                               ,atan2: atan2\n                               ,round: round\n                               ,floor: floor\n                               ,ceiling: ceiling\n                               ,truncate: truncate\n                               ,toFloat: toFloat\n                               ,degrees: degrees\n                               ,radians: radians\n                               ,turns: turns\n                               ,toPolar: toPolar\n                               ,fromPolar: fromPolar\n                               ,isNaN: isNaN\n                               ,isInfinite: isInfinite\n                               ,toString: toString\n                               ,fst: fst\n                               ,snd: snd\n                               ,identity: identity\n                               ,always: always\n                               ,flip: flip\n                               ,curry: curry\n                               ,uncurry: uncurry\n                               ,LT: LT\n                               ,EQ: EQ\n                               ,GT: GT};\n};\nElm.Maybe = Elm.Maybe || {};\nElm.Maybe.make = function (_elm) {\n   \"use strict\";\n   _elm.Maybe = _elm.Maybe || {};\n   if (_elm.Maybe.values) return _elm.Maybe.values;\n   var _U = Elm.Native.Utils.make(_elm);\n   var _op = {};\n   var withDefault = F2(function ($default,maybe) {    var _p0 = maybe;if (_p0.ctor === \"Just\") {    return _p0._0;} else {    return $default;}});\n   var Nothing = {ctor: \"Nothing\"};\n   var oneOf = function (maybes) {\n      oneOf: while (true) {\n         var _p1 = maybes;\n         if (_p1.ctor === \"[]\") {\n               return Nothing;\n            } else {\n               var _p3 = _p1._0;\n               var _p2 = _p3;\n               if (_p2.ctor === \"Nothing\") {\n                     var _v3 = _p1._1;\n                     maybes = _v3;\n                     continue oneOf;\n                  } else {\n                     return _p3;\n                  }\n            }\n      }\n   };\n   var andThen = F2(function (maybeValue,callback) {\n      var _p4 = maybeValue;\n      if (_p4.ctor === \"Just\") {\n            return callback(_p4._0);\n         } else {\n            return Nothing;\n         }\n   });\n   var Just = function (a) {    return {ctor: \"Just\",_0: a};};\n   var map = F2(function (f,maybe) {    var _p5 = maybe;if (_p5.ctor === \"Just\") {    return Just(f(_p5._0));} else {    return Nothing;}});\n   var map2 = F3(function (func,ma,mb) {\n      var _p6 = {ctor: \"_Tuple2\",_0: ma,_1: mb};\n      if (_p6.ctor === \"_Tuple2\" && _p6._0.ctor === \"Just\" && _p6._1.ctor === \"Just\") {\n            return Just(A2(func,_p6._0._0,_p6._1._0));\n         } else {\n            return Nothing;\n         }\n   });\n   var map3 = F4(function (func,ma,mb,mc) {\n      var _p7 = {ctor: \"_Tuple3\",_0: ma,_1: mb,_2: mc};\n      if (_p7.ctor === \"_Tuple3\" && _p7._0.ctor === \"Just\" && _p7._1.ctor === \"Just\" && _p7._2.ctor === \"Just\") {\n            return Just(A3(func,_p7._0._0,_p7._1._0,_p7._2._0));\n         } else {\n            return Nothing;\n         }\n   });\n   var map4 = F5(function (func,ma,mb,mc,md) {\n      var _p8 = {ctor: \"_Tuple4\",_0: ma,_1: mb,_2: mc,_3: md};\n      if (_p8.ctor === \"_Tuple4\" && _p8._0.ctor === \"Just\" && _p8._1.ctor === \"Just\" && _p8._2.ctor === \"Just\" && _p8._3.ctor === \"Just\") {\n            return Just(A4(func,_p8._0._0,_p8._1._0,_p8._2._0,_p8._3._0));\n         } else {\n            return Nothing;\n         }\n   });\n   var map5 = F6(function (func,ma,mb,mc,md,me) {\n      var _p9 = {ctor: \"_Tuple5\",_0: ma,_1: mb,_2: mc,_3: md,_4: me};\n      if (_p9.ctor === \"_Tuple5\" && _p9._0.ctor === \"Just\" && _p9._1.ctor === \"Just\" && _p9._2.ctor === \"Just\" && _p9._3.ctor === \"Just\" && _p9._4.ctor === \"Just\")\n      {\n            return Just(A5(func,_p9._0._0,_p9._1._0,_p9._2._0,_p9._3._0,_p9._4._0));\n         } else {\n            return Nothing;\n         }\n   });\n   return _elm.Maybe.values = {_op: _op\n                              ,andThen: andThen\n                              ,map: map\n                              ,map2: map2\n                              ,map3: map3\n                              ,map4: map4\n                              ,map5: map5\n                              ,withDefault: withDefault\n                              ,oneOf: oneOf\n                              ,Just: Just\n                              ,Nothing: Nothing};\n};\nElm.Native.List = {};\nElm.Native.List.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.List = localRuntime.Native.List || {};\n\tif (localRuntime.Native.List.values)\n\t{\n\t\treturn localRuntime.Native.List.values;\n\t}\n\tif ('values' in Elm.Native.List)\n\t{\n\t\treturn localRuntime.Native.List.values = Elm.Native.List.values;\n\t}\n\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\tvar Nil = Utils.Nil;\n\tvar Cons = Utils.Cons;\n\n\tvar fromArray = Utils.list;\n\n\tfunction toArray(xs)\n\t{\n\t\tvar out = [];\n\t\twhile (xs.ctor !== '[]')\n\t\t{\n\t\t\tout.push(xs._0);\n\t\t\txs = xs._1;\n\t\t}\n\t\treturn out;\n\t}\n\n\t// f defined similarly for both foldl and foldr (NB: different from Haskell)\n\t// ie, foldl : (a -> b -> b) -> b -> [a] -> b\n\tfunction foldl(f, b, xs)\n\t{\n\t\tvar acc = b;\n\t\twhile (xs.ctor !== '[]')\n\t\t{\n\t\t\tacc = A2(f, xs._0, acc);\n\t\t\txs = xs._1;\n\t\t}\n\t\treturn acc;\n\t}\n\n\tfunction foldr(f, b, xs)\n\t{\n\t\tvar arr = toArray(xs);\n\t\tvar acc = b;\n\t\tfor (var i = arr.length; i--; )\n\t\t{\n\t\t\tacc = A2(f, arr[i], acc);\n\t\t}\n\t\treturn acc;\n\t}\n\n\tfunction map2(f, xs, ys)\n\t{\n\t\tvar arr = [];\n\t\twhile (xs.ctor !== '[]' && ys.ctor !== '[]')\n\t\t{\n\t\t\tarr.push(A2(f, xs._0, ys._0));\n\t\t\txs = xs._1;\n\t\t\tys = ys._1;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\tfunction map3(f, xs, ys, zs)\n\t{\n\t\tvar arr = [];\n\t\twhile (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]')\n\t\t{\n\t\t\tarr.push(A3(f, xs._0, ys._0, zs._0));\n\t\t\txs = xs._1;\n\t\t\tys = ys._1;\n\t\t\tzs = zs._1;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\tfunction map4(f, ws, xs, ys, zs)\n\t{\n\t\tvar arr = [];\n\t\twhile (   ws.ctor !== '[]'\n\t\t\t   && xs.ctor !== '[]'\n\t\t\t   && ys.ctor !== '[]'\n\t\t\t   && zs.ctor !== '[]')\n\t\t{\n\t\t\tarr.push(A4(f, ws._0, xs._0, ys._0, zs._0));\n\t\t\tws = ws._1;\n\t\t\txs = xs._1;\n\t\t\tys = ys._1;\n\t\t\tzs = zs._1;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\tfunction map5(f, vs, ws, xs, ys, zs)\n\t{\n\t\tvar arr = [];\n\t\twhile (   vs.ctor !== '[]'\n\t\t\t   && ws.ctor !== '[]'\n\t\t\t   && xs.ctor !== '[]'\n\t\t\t   && ys.ctor !== '[]'\n\t\t\t   && zs.ctor !== '[]')\n\t\t{\n\t\t\tarr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0));\n\t\t\tvs = vs._1;\n\t\t\tws = ws._1;\n\t\t\txs = xs._1;\n\t\t\tys = ys._1;\n\t\t\tzs = zs._1;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\tfunction sortBy(f, xs)\n\t{\n\t\treturn fromArray(toArray(xs).sort(function(a, b) {\n\t\t\treturn Utils.cmp(f(a), f(b));\n\t\t}));\n\t}\n\n\tfunction sortWith(f, xs)\n\t{\n\t\treturn fromArray(toArray(xs).sort(function(a, b) {\n\t\t\tvar ord = f(a)(b).ctor;\n\t\t\treturn ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;\n\t\t}));\n\t}\n\n\tfunction take(n, xs)\n\t{\n\t\tvar arr = [];\n\t\twhile (xs.ctor !== '[]' && n > 0)\n\t\t{\n\t\t\tarr.push(xs._0);\n\t\t\txs = xs._1;\n\t\t\t--n;\n\t\t}\n\t\treturn fromArray(arr);\n\t}\n\n\n\tElm.Native.List.values = {\n\t\tNil: Nil,\n\t\tCons: Cons,\n\t\tcons: F2(Cons),\n\t\ttoArray: toArray,\n\t\tfromArray: fromArray,\n\n\t\tfoldl: F3(foldl),\n\t\tfoldr: F3(foldr),\n\n\t\tmap2: F3(map2),\n\t\tmap3: F4(map3),\n\t\tmap4: F5(map4),\n\t\tmap5: F6(map5),\n\t\tsortBy: F2(sortBy),\n\t\tsortWith: F2(sortWith),\n\t\ttake: F2(take)\n\t};\n\treturn localRuntime.Native.List.values = Elm.Native.List.values;\n};\n\nElm.List = Elm.List || {};\nElm.List.make = function (_elm) {\n   \"use strict\";\n   _elm.List = _elm.List || {};\n   if (_elm.List.values) return _elm.List.values;\n   var _U = Elm.Native.Utils.make(_elm),$Basics = Elm.Basics.make(_elm),$Maybe = Elm.Maybe.make(_elm),$Native$List = Elm.Native.List.make(_elm);\n   var _op = {};\n   var sortWith = $Native$List.sortWith;\n   var sortBy = $Native$List.sortBy;\n   var sort = function (xs) {    return A2(sortBy,$Basics.identity,xs);};\n   var drop = F2(function (n,list) {\n      drop: while (true) if (_U.cmp(n,0) < 1) return list; else {\n            var _p0 = list;\n            if (_p0.ctor === \"[]\") {\n                  return list;\n               } else {\n                  var _v1 = n - 1,_v2 = _p0._1;\n                  n = _v1;\n                  list = _v2;\n                  continue drop;\n               }\n         }\n   });\n   var take = $Native$List.take;\n   var map5 = $Native$List.map5;\n   var map4 = $Native$List.map4;\n   var map3 = $Native$List.map3;\n   var map2 = $Native$List.map2;\n   var any = F2(function (isOkay,list) {\n      any: while (true) {\n         var _p1 = list;\n         if (_p1.ctor === \"[]\") {\n               return false;\n            } else {\n               if (isOkay(_p1._0)) return true; else {\n                     var _v4 = isOkay,_v5 = _p1._1;\n                     isOkay = _v4;\n                     list = _v5;\n                     continue any;\n                  }\n            }\n      }\n   });\n   var all = F2(function (isOkay,list) {    return $Basics.not(A2(any,function (_p2) {    return $Basics.not(isOkay(_p2));},list));});\n   var foldr = $Native$List.foldr;\n   var foldl = $Native$List.foldl;\n   var length = function (xs) {    return A3(foldl,F2(function (_p3,i) {    return i + 1;}),0,xs);};\n   var sum = function (numbers) {    return A3(foldl,F2(function (x,y) {    return x + y;}),0,numbers);};\n   var product = function (numbers) {    return A3(foldl,F2(function (x,y) {    return x * y;}),1,numbers);};\n   var maximum = function (list) {\n      var _p4 = list;\n      if (_p4.ctor === \"::\") {\n            return $Maybe.Just(A3(foldl,$Basics.max,_p4._0,_p4._1));\n         } else {\n            return $Maybe.Nothing;\n         }\n   };\n   var minimum = function (list) {\n      var _p5 = list;\n      if (_p5.ctor === \"::\") {\n            return $Maybe.Just(A3(foldl,$Basics.min,_p5._0,_p5._1));\n         } else {\n            return $Maybe.Nothing;\n         }\n   };\n   var indexedMap = F2(function (f,xs) {    return A3(map2,f,_U.range(0,length(xs) - 1),xs);});\n   var member = F2(function (x,xs) {    return A2(any,function (a) {    return _U.eq(a,x);},xs);});\n   var isEmpty = function (xs) {    var _p6 = xs;if (_p6.ctor === \"[]\") {    return true;} else {    return false;}};\n   var tail = function (list) {    var _p7 = list;if (_p7.ctor === \"::\") {    return $Maybe.Just(_p7._1);} else {    return $Maybe.Nothing;}};\n   var head = function (list) {    var _p8 = list;if (_p8.ctor === \"::\") {    return $Maybe.Just(_p8._0);} else {    return $Maybe.Nothing;}};\n   _op[\"::\"] = $Native$List.cons;\n   var map = F2(function (f,xs) {    return A3(foldr,F2(function (x,acc) {    return A2(_op[\"::\"],f(x),acc);}),_U.list([]),xs);});\n   var filter = F2(function (pred,xs) {\n      var conditionalCons = F2(function (x,xs$) {    return pred(x) ? A2(_op[\"::\"],x,xs$) : xs$;});\n      return A3(foldr,conditionalCons,_U.list([]),xs);\n   });\n   var maybeCons = F3(function (f,mx,xs) {    var _p9 = f(mx);if (_p9.ctor === \"Just\") {    return A2(_op[\"::\"],_p9._0,xs);} else {    return xs;}});\n   var filterMap = F2(function (f,xs) {    return A3(foldr,maybeCons(f),_U.list([]),xs);});\n   var reverse = function (list) {    return A3(foldl,F2(function (x,y) {    return A2(_op[\"::\"],x,y);}),_U.list([]),list);};\n   var scanl = F3(function (f,b,xs) {\n      var scan1 = F2(function (x,accAcc) {\n         var _p10 = accAcc;\n         if (_p10.ctor === \"::\") {\n               return A2(_op[\"::\"],A2(f,x,_p10._0),accAcc);\n            } else {\n               return _U.list([]);\n            }\n      });\n      return reverse(A3(foldl,scan1,_U.list([b]),xs));\n   });\n   var append = F2(function (xs,ys) {\n      var _p11 = ys;\n      if (_p11.ctor === \"[]\") {\n            return xs;\n         } else {\n            return A3(foldr,F2(function (x,y) {    return A2(_op[\"::\"],x,y);}),ys,xs);\n         }\n   });\n   var concat = function (lists) {    return A3(foldr,append,_U.list([]),lists);};\n   var concatMap = F2(function (f,list) {    return concat(A2(map,f,list));});\n   var partition = F2(function (pred,list) {\n      var step = F2(function (x,_p12) {\n         var _p13 = _p12;\n         var _p15 = _p13._0;\n         var _p14 = _p13._1;\n         return pred(x) ? {ctor: \"_Tuple2\",_0: A2(_op[\"::\"],x,_p15),_1: _p14} : {ctor: \"_Tuple2\",_0: _p15,_1: A2(_op[\"::\"],x,_p14)};\n      });\n      return A3(foldr,step,{ctor: \"_Tuple2\",_0: _U.list([]),_1: _U.list([])},list);\n   });\n   var unzip = function (pairs) {\n      var step = F2(function (_p17,_p16) {\n         var _p18 = _p17;\n         var _p19 = _p16;\n         return {ctor: \"_Tuple2\",_0: A2(_op[\"::\"],_p18._0,_p19._0),_1: A2(_op[\"::\"],_p18._1,_p19._1)};\n      });\n      return A3(foldr,step,{ctor: \"_Tuple2\",_0: _U.list([]),_1: _U.list([])},pairs);\n   };\n   var intersperse = F2(function (sep,xs) {\n      var _p20 = xs;\n      if (_p20.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            var step = F2(function (x,rest) {    return A2(_op[\"::\"],sep,A2(_op[\"::\"],x,rest));});\n            var spersed = A3(foldr,step,_U.list([]),_p20._1);\n            return A2(_op[\"::\"],_p20._0,spersed);\n         }\n   });\n   var repeatHelp = F3(function (result,n,value) {\n      repeatHelp: while (true) if (_U.cmp(n,0) < 1) return result; else {\n            var _v18 = A2(_op[\"::\"],value,result),_v19 = n - 1,_v20 = value;\n            result = _v18;\n            n = _v19;\n            value = _v20;\n            continue repeatHelp;\n         }\n   });\n   var repeat = F2(function (n,value) {    return A3(repeatHelp,_U.list([]),n,value);});\n   return _elm.List.values = {_op: _op\n                             ,isEmpty: isEmpty\n                             ,length: length\n                             ,reverse: reverse\n                             ,member: member\n                             ,head: head\n                             ,tail: tail\n                             ,filter: filter\n                             ,take: take\n                             ,drop: drop\n                             ,repeat: repeat\n                             ,append: append\n                             ,concat: concat\n                             ,intersperse: intersperse\n                             ,partition: partition\n                             ,unzip: unzip\n                             ,map: map\n                             ,map2: map2\n                             ,map3: map3\n                             ,map4: map4\n                             ,map5: map5\n                             ,filterMap: filterMap\n                             ,concatMap: concatMap\n                             ,indexedMap: indexedMap\n                             ,foldr: foldr\n                             ,foldl: foldl\n                             ,sum: sum\n                             ,product: product\n                             ,maximum: maximum\n                             ,minimum: minimum\n                             ,all: all\n                             ,any: any\n                             ,scanl: scanl\n                             ,sort: sort\n                             ,sortBy: sortBy\n                             ,sortWith: sortWith};\n};\nElm.Native.Transform2D = {};\nElm.Native.Transform2D.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Transform2D = localRuntime.Native.Transform2D || {};\n\tif (localRuntime.Native.Transform2D.values)\n\t{\n\t\treturn localRuntime.Native.Transform2D.values;\n\t}\n\n\tvar A;\n\tif (typeof Float32Array === 'undefined')\n\t{\n\t\tA = function(arr)\n\t\t{\n\t\t\tthis.length = arr.length;\n\t\t\tthis[0] = arr[0];\n\t\t\tthis[1] = arr[1];\n\t\t\tthis[2] = arr[2];\n\t\t\tthis[3] = arr[3];\n\t\t\tthis[4] = arr[4];\n\t\t\tthis[5] = arr[5];\n\t\t};\n\t}\n\telse\n\t{\n\t\tA = Float32Array;\n\t}\n\n\t// layout of matrix in an array is\n\t//\n\t//   | m11 m12 dx |\n\t//   | m21 m22 dy |\n\t//   |  0   0   1 |\n\t//\n\t//  new A([ m11, m12, dx, m21, m22, dy ])\n\n\tvar identity = new A([1, 0, 0, 0, 1, 0]);\n\tfunction matrix(m11, m12, m21, m22, dx, dy)\n\t{\n\t\treturn new A([m11, m12, dx, m21, m22, dy]);\n\t}\n\n\tfunction rotation(t)\n\t{\n\t\tvar c = Math.cos(t);\n\t\tvar s = Math.sin(t);\n\t\treturn new A([c, -s, 0, s, c, 0]);\n\t}\n\n\tfunction rotate(t, m)\n\t{\n\t\tvar c = Math.cos(t);\n\t\tvar s = Math.sin(t);\n\t\tvar m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];\n\t\treturn new A([m11 * c + m12 * s, -m11 * s + m12 * c, m[2],\n\t\t\t\t\t  m21 * c + m22 * s, -m21 * s + m22 * c, m[5]]);\n\t}\n\t/*\n\tfunction move(xy,m) {\n\t\tvar x = xy._0;\n\t\tvar y = xy._1;\n\t\tvar m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];\n\t\treturn new A([m11, m12, m11*x + m12*y + m[2],\n\t\t\t\t\t  m21, m22, m21*x + m22*y + m[5]]);\n\t}\n\tfunction scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }\n\tfunction scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }\n\tfunction scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }\n\tfunction reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }\n\tfunction reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }\n\n\tfunction transform(m11, m21, m12, m22, mdx, mdy, n) {\n\t\tvar n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];\n\t\treturn new A([m11*n11 + m12*n21,\n\t\t\t\t\t  m11*n12 + m12*n22,\n\t\t\t\t\t  m11*ndx + m12*ndy + mdx,\n\t\t\t\t\t  m21*n11 + m22*n21,\n\t\t\t\t\t  m21*n12 + m22*n22,\n\t\t\t\t\t  m21*ndx + m22*ndy + mdy]);\n\t}\n\t*/\n\tfunction multiply(m, n)\n\t{\n\t\tvar m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5];\n\t\tvar n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];\n\t\treturn new A([m11 * n11 + m12 * n21,\n\t\t\t\t\t  m11 * n12 + m12 * n22,\n\t\t\t\t\t  m11 * ndx + m12 * ndy + mdx,\n\t\t\t\t\t  m21 * n11 + m22 * n21,\n\t\t\t\t\t  m21 * n12 + m22 * n22,\n\t\t\t\t\t  m21 * ndx + m22 * ndy + mdy]);\n\t}\n\n\treturn localRuntime.Native.Transform2D.values = {\n\t\tidentity: identity,\n\t\tmatrix: F6(matrix),\n\t\trotation: rotation,\n\t\tmultiply: F2(multiply)\n\t\t/*\n\t\ttransform: F7(transform),\n\t\trotate: F2(rotate),\n\t\tmove: F2(move),\n\t\tscale: F2(scale),\n\t\tscaleX: F2(scaleX),\n\t\tscaleY: F2(scaleY),\n\t\treflectX: reflectX,\n\t\treflectY: reflectY\n\t\t*/\n\t};\n};\n\nElm.Transform2D = Elm.Transform2D || {};\nElm.Transform2D.make = function (_elm) {\n   \"use strict\";\n   _elm.Transform2D = _elm.Transform2D || {};\n   if (_elm.Transform2D.values) return _elm.Transform2D.values;\n   var _U = Elm.Native.Utils.make(_elm),$Native$Transform2D = Elm.Native.Transform2D.make(_elm);\n   var _op = {};\n   var multiply = $Native$Transform2D.multiply;\n   var rotation = $Native$Transform2D.rotation;\n   var matrix = $Native$Transform2D.matrix;\n   var translation = F2(function (x,y) {    return A6(matrix,1,0,0,1,x,y);});\n   var scale = function (s) {    return A6(matrix,s,0,0,s,0,0);};\n   var scaleX = function (x) {    return A6(matrix,x,0,0,1,0,0);};\n   var scaleY = function (y) {    return A6(matrix,1,0,0,y,0,0);};\n   var identity = $Native$Transform2D.identity;\n   var Transform2D = {ctor: \"Transform2D\"};\n   return _elm.Transform2D.values = {_op: _op\n                                    ,identity: identity\n                                    ,matrix: matrix\n                                    ,multiply: multiply\n                                    ,rotation: rotation\n                                    ,translation: translation\n                                    ,scale: scale\n                                    ,scaleX: scaleX\n                                    ,scaleY: scaleY};\n};\n\n// setup\nElm.Native = Elm.Native || {};\nElm.Native.Graphics = Elm.Native.Graphics || {};\nElm.Native.Graphics.Collage = Elm.Native.Graphics.Collage || {};\n\n// definition\nElm.Native.Graphics.Collage.make = function(localRuntime) {\n\t'use strict';\n\n\t// attempt to short-circuit\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Graphics = localRuntime.Native.Graphics || {};\n\tlocalRuntime.Native.Graphics.Collage = localRuntime.Native.Graphics.Collage || {};\n\tif ('values' in localRuntime.Native.Graphics.Collage)\n\t{\n\t\treturn localRuntime.Native.Graphics.Collage.values;\n\t}\n\n\t// okay, we cannot short-ciruit, so now we define everything\n\tvar Color = Elm.Native.Color.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar NativeElement = Elm.Native.Graphics.Element.make(localRuntime);\n\tvar Transform = Elm.Transform2D.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\tfunction setStrokeStyle(ctx, style)\n\t{\n\t\tctx.lineWidth = style.width;\n\n\t\tvar cap = style.cap.ctor;\n\t\tctx.lineCap = cap === 'Flat'\n\t\t\t? 'butt'\n\t\t\t: cap === 'Round'\n\t\t\t\t? 'round'\n\t\t\t\t: 'square';\n\n\t\tvar join = style.join.ctor;\n\t\tctx.lineJoin = join === 'Smooth'\n\t\t\t? 'round'\n\t\t\t: join === 'Sharp'\n\t\t\t\t? 'miter'\n\t\t\t\t: 'bevel';\n\n\t\tctx.miterLimit = style.join._0 || 10;\n\t\tctx.strokeStyle = Color.toCss(style.color);\n\t}\n\n\tfunction setFillStyle(redo, ctx, style)\n\t{\n\t\tvar sty = style.ctor;\n\t\tctx.fillStyle = sty === 'Solid'\n\t\t\t? Color.toCss(style._0)\n\t\t\t: sty === 'Texture'\n\t\t\t\t? texture(redo, ctx, style._0)\n\t\t\t\t: gradient(ctx, style._0);\n\t}\n\n\tfunction trace(ctx, path)\n\t{\n\t\tvar points = List.toArray(path);\n\t\tvar i = points.length - 1;\n\t\tif (i <= 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tctx.moveTo(points[i]._0, points[i]._1);\n\t\twhile (i--)\n\t\t{\n\t\t\tctx.lineTo(points[i]._0, points[i]._1);\n\t\t}\n\t\tif (path.closed)\n\t\t{\n\t\t\ti = points.length - 1;\n\t\t\tctx.lineTo(points[i]._0, points[i]._1);\n\t\t}\n\t}\n\n\tfunction line(ctx, style, path)\n\t{\n\t\tif (style.dashing.ctor === '[]')\n\t\t{\n\t\t\ttrace(ctx, path);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcustomLineHelp(ctx, style, path);\n\t\t}\n\t\tctx.scale(1, -1);\n\t\tctx.stroke();\n\t}\n\n\tfunction customLineHelp(ctx, style, path)\n\t{\n\t\tvar points = List.toArray(path);\n\t\tif (path.closed)\n\t\t{\n\t\t\tpoints.push(points[0]);\n\t\t}\n\t\tvar pattern = List.toArray(style.dashing);\n\t\tvar i = points.length - 1;\n\t\tif (i <= 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tvar x0 = points[i]._0, y0 = points[i]._1;\n\t\tvar x1 = 0, y1 = 0, dx = 0, dy = 0, remaining = 0;\n\t\tvar pindex = 0, plen = pattern.length;\n\t\tvar draw = true, segmentLength = pattern[0];\n\t\tctx.moveTo(x0, y0);\n\t\twhile (i--)\n\t\t{\n\t\t\tx1 = points[i]._0;\n\t\t\ty1 = points[i]._1;\n\t\t\tdx = x1 - x0;\n\t\t\tdy = y1 - y0;\n\t\t\tremaining = Math.sqrt(dx * dx + dy * dy);\n\t\t\twhile (segmentLength <= remaining)\n\t\t\t{\n\t\t\t\tx0 += dx * segmentLength / remaining;\n\t\t\t\ty0 += dy * segmentLength / remaining;\n\t\t\t\tctx[draw ? 'lineTo' : 'moveTo'](x0, y0);\n\t\t\t\t// update starting position\n\t\t\t\tdx = x1 - x0;\n\t\t\t\tdy = y1 - y0;\n\t\t\t\tremaining = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\t// update pattern\n\t\t\t\tdraw = !draw;\n\t\t\t\tpindex = (pindex + 1) % plen;\n\t\t\t\tsegmentLength = pattern[pindex];\n\t\t\t}\n\t\t\tif (remaining > 0)\n\t\t\t{\n\t\t\t\tctx[draw ? 'lineTo' : 'moveTo'](x1, y1);\n\t\t\t\tsegmentLength -= remaining;\n\t\t\t}\n\t\t\tx0 = x1;\n\t\t\ty0 = y1;\n\t\t}\n\t}\n\n\tfunction drawLine(ctx, style, path)\n\t{\n\t\tsetStrokeStyle(ctx, style);\n\t\treturn line(ctx, style, path);\n\t}\n\n\tfunction texture(redo, ctx, src)\n\t{\n\t\tvar img = new Image();\n\t\timg.src = src;\n\t\timg.onload = redo;\n\t\treturn ctx.createPattern(img, 'repeat');\n\t}\n\n\tfunction gradient(ctx, grad)\n\t{\n\t\tvar g;\n\t\tvar stops = [];\n\t\tif (grad.ctor === 'Linear')\n\t\t{\n\t\t\tvar p0 = grad._0, p1 = grad._1;\n\t\t\tg = ctx.createLinearGradient(p0._0, -p0._1, p1._0, -p1._1);\n\t\t\tstops = List.toArray(grad._2);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar p0 = grad._0, p2 = grad._2;\n\t\t\tg = ctx.createRadialGradient(p0._0, -p0._1, grad._1, p2._0, -p2._1, grad._3);\n\t\t\tstops = List.toArray(grad._4);\n\t\t}\n\t\tvar len = stops.length;\n\t\tfor (var i = 0; i < len; ++i)\n\t\t{\n\t\t\tvar stop = stops[i];\n\t\t\tg.addColorStop(stop._0, Color.toCss(stop._1));\n\t\t}\n\t\treturn g;\n\t}\n\n\tfunction drawShape(redo, ctx, style, path)\n\t{\n\t\ttrace(ctx, path);\n\t\tsetFillStyle(redo, ctx, style);\n\t\tctx.scale(1, -1);\n\t\tctx.fill();\n\t}\n\n\n\t// TEXT RENDERING\n\n\tfunction fillText(redo, ctx, text)\n\t{\n\t\tdrawText(ctx, text, ctx.fillText);\n\t}\n\n\tfunction strokeText(redo, ctx, style, text)\n\t{\n\t\tsetStrokeStyle(ctx, style);\n\t\t// Use native canvas API for dashes only for text for now\n\t\t// Degrades to non-dashed on IE 9 + 10\n\t\tif (style.dashing.ctor !== '[]' && ctx.setLineDash)\n\t\t{\n\t\t\tvar pattern = List.toArray(style.dashing);\n\t\t\tctx.setLineDash(pattern);\n\t\t}\n\t\tdrawText(ctx, text, ctx.strokeText);\n\t}\n\n\tfunction drawText(ctx, text, canvasDrawFn)\n\t{\n\t\tvar textChunks = chunkText(defaultContext, text);\n\n\t\tvar totalWidth = 0;\n\t\tvar maxHeight = 0;\n\t\tvar numChunks = textChunks.length;\n\n\t\tctx.scale(1,-1);\n\n\t\tfor (var i = numChunks; i--; )\n\t\t{\n\t\t\tvar chunk = textChunks[i];\n\t\t\tctx.font = chunk.font;\n\t\t\tvar metrics = ctx.measureText(chunk.text);\n\t\t\tchunk.width = metrics.width;\n\t\t\ttotalWidth += chunk.width;\n\t\t\tif (chunk.height > maxHeight)\n\t\t\t{\n\t\t\t\tmaxHeight = chunk.height;\n\t\t\t}\n\t\t}\n\n\t\tvar x = -totalWidth / 2.0;\n\t\tfor (var i = 0; i < numChunks; ++i)\n\t\t{\n\t\t\tvar chunk = textChunks[i];\n\t\t\tctx.font = chunk.font;\n\t\t\tctx.fillStyle = chunk.color;\n\t\t\tcanvasDrawFn.call(ctx, chunk.text, x, maxHeight / 2);\n\t\t\tx += chunk.width;\n\t\t}\n\t}\n\n\tfunction toFont(props)\n\t{\n\t\treturn [\n\t\t\tprops['font-style'],\n\t\t\tprops['font-variant'],\n\t\t\tprops['font-weight'],\n\t\t\tprops['font-size'],\n\t\t\tprops['font-family']\n\t\t].join(' ');\n\t}\n\n\n\t// Convert the object returned by the text module\n\t// into something we can use for styling canvas text\n\tfunction chunkText(context, text)\n\t{\n\t\tvar tag = text.ctor;\n\t\tif (tag === 'Text:Append')\n\t\t{\n\t\t\tvar leftChunks = chunkText(context, text._0);\n\t\t\tvar rightChunks = chunkText(context, text._1);\n\t\t\treturn leftChunks.concat(rightChunks);\n\t\t}\n\t\tif (tag === 'Text:Text')\n\t\t{\n\t\t\treturn [{\n\t\t\t\ttext: text._0,\n\t\t\t\tcolor: context.color,\n\t\t\t\theight: context['font-size'].slice(0, -2) | 0,\n\t\t\t\tfont: toFont(context)\n\t\t\t}];\n\t\t}\n\t\tif (tag === 'Text:Meta')\n\t\t{\n\t\t\tvar newContext = freshContext(text._0, context);\n\t\t\treturn chunkText(newContext, text._1);\n\t\t}\n\t}\n\n\tfunction freshContext(props, ctx)\n\t{\n\t\treturn {\n\t\t\t'font-style': props['font-style'] || ctx['font-style'],\n\t\t\t'font-variant': props['font-variant'] || ctx['font-variant'],\n\t\t\t'font-weight': props['font-weight'] || ctx['font-weight'],\n\t\t\t'font-size': props['font-size'] || ctx['font-size'],\n\t\t\t'font-family': props['font-family'] || ctx['font-family'],\n\t\t\t'color': props['color'] || ctx['color']\n\t\t};\n\t}\n\n\tvar defaultContext = {\n\t\t'font-style': 'normal',\n\t\t'font-variant': 'normal',\n\t\t'font-weight': 'normal',\n\t\t'font-size': '12px',\n\t\t'font-family': 'sans-serif',\n\t\t'color': 'black'\n\t};\n\n\n\t// IMAGES\n\n\tfunction drawImage(redo, ctx, form)\n\t{\n\t\tvar img = new Image();\n\t\timg.onload = redo;\n\t\timg.src = form._3;\n\t\tvar w = form._0,\n\t\t\th = form._1,\n\t\t\tpos = form._2,\n\t\t\tsrcX = pos._0,\n\t\t\tsrcY = pos._1,\n\t\t\tsrcW = w,\n\t\t\tsrcH = h,\n\t\t\tdestX = -w / 2,\n\t\t\tdestY = -h / 2,\n\t\t\tdestW = w,\n\t\t\tdestH = h;\n\n\t\tctx.scale(1, -1);\n\t\tctx.drawImage(img, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n\t}\n\n\tfunction renderForm(redo, ctx, form)\n\t{\n\t\tctx.save();\n\n\t\tvar x = form.x,\n\t\t\ty = form.y,\n\t\t\ttheta = form.theta,\n\t\t\tscale = form.scale;\n\n\t\tif (x !== 0 || y !== 0)\n\t\t{\n\t\t\tctx.translate(x, y);\n\t\t}\n\t\tif (theta !== 0)\n\t\t{\n\t\t\tctx.rotate(theta % (Math.PI * 2));\n\t\t}\n\t\tif (scale !== 1)\n\t\t{\n\t\t\tctx.scale(scale, scale);\n\t\t}\n\t\tif (form.alpha !== 1)\n\t\t{\n\t\t\tctx.globalAlpha = ctx.globalAlpha * form.alpha;\n\t\t}\n\n\t\tctx.beginPath();\n\t\tvar f = form.form;\n\t\tswitch (f.ctor)\n\t\t{\n\t\t\tcase 'FPath':\n\t\t\t\tdrawLine(ctx, f._0, f._1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'FImage':\n\t\t\t\tdrawImage(redo, ctx, f);\n\t\t\t\tbreak;\n\n\t\t\tcase 'FShape':\n\t\t\t\tif (f._0.ctor === 'Line')\n\t\t\t\t{\n\t\t\t\t\tf._1.closed = true;\n\t\t\t\t\tdrawLine(ctx, f._0._0, f._1);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdrawShape(redo, ctx, f._0._0, f._1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'FText':\n\t\t\t\tfillText(redo, ctx, f._0);\n\t\t\t\tbreak;\n\n\t\t\tcase 'FOutlinedText':\n\t\t\t\tstrokeText(redo, ctx, f._0, f._1);\n\t\t\t\tbreak;\n\t\t}\n\t\tctx.restore();\n\t}\n\n\tfunction formToMatrix(form)\n\t{\n\t   var scale = form.scale;\n\t   var matrix = A6( Transform.matrix, scale, 0, 0, scale, form.x, form.y );\n\n\t   var theta = form.theta;\n\t   if (theta !== 0)\n\t   {\n\t\t   matrix = A2( Transform.multiply, matrix, Transform.rotation(theta) );\n\t   }\n\n\t   return matrix;\n\t}\n\n\tfunction str(n)\n\t{\n\t\tif (n < 0.00001 && n > -0.00001)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\treturn n;\n\t}\n\n\tfunction makeTransform(w, h, form, matrices)\n\t{\n\t\tvar props = form.form._0._0.props;\n\t\tvar m = A6( Transform.matrix, 1, 0, 0, -1,\n\t\t\t\t\t(w - props.width ) / 2,\n\t\t\t\t\t(h - props.height) / 2 );\n\t\tvar len = matrices.length;\n\t\tfor (var i = 0; i < len; ++i)\n\t\t{\n\t\t\tm = A2( Transform.multiply, m, matrices[i] );\n\t\t}\n\t\tm = A2( Transform.multiply, m, formToMatrix(form) );\n\n\t\treturn 'matrix(' +\n\t\t\tstr( m[0]) + ', ' + str( m[3]) + ', ' +\n\t\t\tstr(-m[1]) + ', ' + str(-m[4]) + ', ' +\n\t\t\tstr( m[2]) + ', ' + str( m[5]) + ')';\n\t}\n\n\tfunction stepperHelp(list)\n\t{\n\t\tvar arr = List.toArray(list);\n\t\tvar i = 0;\n\t\tfunction peekNext()\n\t\t{\n\t\t\treturn i < arr.length ? arr[i]._0.form.ctor : '';\n\t\t}\n\t\t// assumes that there is a next element\n\t\tfunction next()\n\t\t{\n\t\t\tvar out = arr[i]._0;\n\t\t\t++i;\n\t\t\treturn out;\n\t\t}\n\t\treturn {\n\t\t\tpeekNext: peekNext,\n\t\t\tnext: next\n\t\t};\n\t}\n\n\tfunction formStepper(forms)\n\t{\n\t\tvar ps = [stepperHelp(forms)];\n\t\tvar matrices = [];\n\t\tvar alphas = [];\n\t\tfunction peekNext()\n\t\t{\n\t\t\tvar len = ps.length;\n\t\t\tvar formType = '';\n\t\t\tfor (var i = 0; i < len; ++i )\n\t\t\t{\n\t\t\t\tif (formType = ps[i].peekNext()) return formType;\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\t\t// assumes that there is a next element\n\t\tfunction next(ctx)\n\t\t{\n\t\t\twhile (!ps[0].peekNext())\n\t\t\t{\n\t\t\t\tps.shift();\n\t\t\t\tmatrices.pop();\n\t\t\t\talphas.shift();\n\t\t\t\tif (ctx)\n\t\t\t\t{\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar out = ps[0].next();\n\t\t\tvar f = out.form;\n\t\t\tif (f.ctor === 'FGroup')\n\t\t\t{\n\t\t\t\tps.unshift(stepperHelp(f._1));\n\t\t\t\tvar m = A2(Transform.multiply, f._0, formToMatrix(out));\n\t\t\t\tctx.save();\n\t\t\t\tctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);\n\t\t\t\tmatrices.push(m);\n\n\t\t\t\tvar alpha = (alphas[0] || 1) * out.alpha;\n\t\t\t\talphas.unshift(alpha);\n\t\t\t\tctx.globalAlpha = alpha;\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t\tfunction transforms()\n\t\t{\n\t\t\treturn matrices;\n\t\t}\n\t\tfunction alpha()\n\t\t{\n\t\t\treturn alphas[0] || 1;\n\t\t}\n\t\treturn {\n\t\t\tpeekNext: peekNext,\n\t\t\tnext: next,\n\t\t\ttransforms: transforms,\n\t\t\talpha: alpha\n\t\t};\n\t}\n\n\tfunction makeCanvas(w, h)\n\t{\n\t\tvar canvas = NativeElement.createNode('canvas');\n\t\tcanvas.style.width  = w + 'px';\n\t\tcanvas.style.height = h + 'px';\n\t\tcanvas.style.display = 'block';\n\t\tcanvas.style.position = 'absolute';\n\t\tvar ratio = window.devicePixelRatio || 1;\n\t\tcanvas.width  = w * ratio;\n\t\tcanvas.height = h * ratio;\n\t\treturn canvas;\n\t}\n\n\tfunction render(model)\n\t{\n\t\tvar div = NativeElement.createNode('div');\n\t\tdiv.style.overflow = 'hidden';\n\t\tdiv.style.position = 'relative';\n\t\tupdate(div, model, model);\n\t\treturn div;\n\t}\n\n\tfunction nodeStepper(w, h, div)\n\t{\n\t\tvar kids = div.childNodes;\n\t\tvar i = 0;\n\t\tvar ratio = window.devicePixelRatio || 1;\n\n\t\tfunction transform(transforms, ctx)\n\t\t{\n\t\t\tctx.translate( w / 2 * ratio, h / 2 * ratio );\n\t\t\tctx.scale( ratio, -ratio );\n\t\t\tvar len = transforms.length;\n\t\t\tfor (var i = 0; i < len; ++i)\n\t\t\t{\n\t\t\t\tvar m = transforms[i];\n\t\t\t\tctx.save();\n\t\t\t\tctx.transform(m[0], m[3], m[1], m[4], m[2], m[5]);\n\t\t\t}\n\t\t\treturn ctx;\n\t\t}\n\t\tfunction nextContext(transforms)\n\t\t{\n\t\t\twhile (i < kids.length)\n\t\t\t{\n\t\t\t\tvar node = kids[i];\n\t\t\t\tif (node.getContext)\n\t\t\t\t{\n\t\t\t\t\tnode.width = w * ratio;\n\t\t\t\t\tnode.height = h * ratio;\n\t\t\t\t\tnode.style.width = w + 'px';\n\t\t\t\t\tnode.style.height = h + 'px';\n\t\t\t\t\t++i;\n\t\t\t\t\treturn transform(transforms, node.getContext('2d'));\n\t\t\t\t}\n\t\t\t\tdiv.removeChild(node);\n\t\t\t}\n\t\t\tvar canvas = makeCanvas(w, h);\n\t\t\tdiv.appendChild(canvas);\n\t\t\t// we have added a new node, so we must step our position\n\t\t\t++i;\n\t\t\treturn transform(transforms, canvas.getContext('2d'));\n\t\t}\n\t\tfunction addElement(matrices, alpha, form)\n\t\t{\n\t\t\tvar kid = kids[i];\n\t\t\tvar elem = form.form._0;\n\n\t\t\tvar node = (!kid || kid.getContext)\n\t\t\t\t? NativeElement.render(elem)\n\t\t\t\t: NativeElement.update(kid, kid.oldElement, elem);\n\n\t\t\tnode.style.position = 'absolute';\n\t\t\tnode.style.opacity = alpha * form.alpha * elem._0.props.opacity;\n\t\t\tNativeElement.addTransform(node.style, makeTransform(w, h, form, matrices));\n\t\t\tnode.oldElement = elem;\n\t\t\t++i;\n\t\t\tif (!kid)\n\t\t\t{\n\t\t\t\tdiv.appendChild(node);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdiv.insertBefore(node, kid);\n\t\t\t}\n\t\t}\n\t\tfunction clearRest()\n\t\t{\n\t\t\twhile (i < kids.length)\n\t\t\t{\n\t\t\t\tdiv.removeChild(kids[i]);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tnextContext: nextContext,\n\t\t\taddElement: addElement,\n\t\t\tclearRest: clearRest\n\t\t};\n\t}\n\n\n\tfunction update(div, _, model)\n\t{\n\t\tvar w = model.w;\n\t\tvar h = model.h;\n\n\t\tvar forms = formStepper(model.forms);\n\t\tvar nodes = nodeStepper(w, h, div);\n\t\tvar ctx = null;\n\t\tvar formType = '';\n\n\t\twhile (formType = forms.peekNext())\n\t\t{\n\t\t\t// make sure we have context if we need it\n\t\t\tif (ctx === null && formType !== 'FElement')\n\t\t\t{\n\t\t\t\tctx = nodes.nextContext(forms.transforms());\n\t\t\t\tctx.globalAlpha = forms.alpha();\n\t\t\t}\n\n\t\t\tvar form = forms.next(ctx);\n\t\t\t// if it is FGroup, all updates are made within formStepper when next is called.\n\t\t\tif (formType === 'FElement')\n\t\t\t{\n\t\t\t\t// update or insert an element, get a new context\n\t\t\t\tnodes.addElement(forms.transforms(), forms.alpha(), form);\n\t\t\t\tctx = null;\n\t\t\t}\n\t\t\telse if (formType !== 'FGroup')\n\t\t\t{\n\t\t\t\trenderForm(function() { update(div, model, model); }, ctx, form);\n\t\t\t}\n\t\t}\n\t\tnodes.clearRest();\n\t\treturn div;\n\t}\n\n\n\tfunction collage(w, h, forms)\n\t{\n\t\treturn A3(NativeElement.newElement, w, h, {\n\t\t\tctor: 'Custom',\n\t\t\ttype: 'Collage',\n\t\t\trender: render,\n\t\t\tupdate: update,\n\t\t\tmodel: {w: w, h: h, forms: forms}\n\t\t});\n\t}\n\n\treturn localRuntime.Native.Graphics.Collage.values = {\n\t\tcollage: F3(collage)\n\t};\n};\n\nElm.Native.Color = {};\nElm.Native.Color.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Color = localRuntime.Native.Color || {};\n\tif (localRuntime.Native.Color.values)\n\t{\n\t\treturn localRuntime.Native.Color.values;\n\t}\n\n\tfunction toCss(c)\n\t{\n\t\tvar format = '';\n\t\tvar colors = '';\n\t\tif (c.ctor === 'RGBA')\n\t\t{\n\t\t\tformat = 'rgb';\n\t\t\tcolors = c._0 + ', ' + c._1 + ', ' + c._2;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tformat = 'hsl';\n\t\t\tcolors = (c._0 * 180 / Math.PI) + ', ' +\n\t\t\t\t\t (c._1 * 100) + '%, ' +\n\t\t\t\t\t (c._2 * 100) + '%';\n\t\t}\n\t\tif (c._3 === 1)\n\t\t{\n\t\t\treturn format + '(' + colors + ')';\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn format + 'a(' + colors + ', ' + c._3 + ')';\n\t\t}\n\t}\n\n\treturn localRuntime.Native.Color.values = {\n\t\ttoCss: toCss\n\t};\n};\n\nElm.Color = Elm.Color || {};\nElm.Color.make = function (_elm) {\n   \"use strict\";\n   _elm.Color = _elm.Color || {};\n   if (_elm.Color.values) return _elm.Color.values;\n   var _U = Elm.Native.Utils.make(_elm),$Basics = Elm.Basics.make(_elm);\n   var _op = {};\n   var Radial = F5(function (a,b,c,d,e) {    return {ctor: \"Radial\",_0: a,_1: b,_2: c,_3: d,_4: e};});\n   var radial = Radial;\n   var Linear = F3(function (a,b,c) {    return {ctor: \"Linear\",_0: a,_1: b,_2: c};});\n   var linear = Linear;\n   var fmod = F2(function (f,n) {    var integer = $Basics.floor(f);return $Basics.toFloat(A2($Basics._op[\"%\"],integer,n)) + f - $Basics.toFloat(integer);});\n   var rgbToHsl = F3(function (red,green,blue) {\n      var b = $Basics.toFloat(blue) / 255;\n      var g = $Basics.toFloat(green) / 255;\n      var r = $Basics.toFloat(red) / 255;\n      var cMax = A2($Basics.max,A2($Basics.max,r,g),b);\n      var cMin = A2($Basics.min,A2($Basics.min,r,g),b);\n      var c = cMax - cMin;\n      var lightness = (cMax + cMin) / 2;\n      var saturation = _U.eq(lightness,0) ? 0 : c / (1 - $Basics.abs(2 * lightness - 1));\n      var hue = $Basics.degrees(60) * (_U.eq(cMax,r) ? A2(fmod,(g - b) / c,6) : _U.eq(cMax,g) ? (b - r) / c + 2 : (r - g) / c + 4);\n      return {ctor: \"_Tuple3\",_0: hue,_1: saturation,_2: lightness};\n   });\n   var hslToRgb = F3(function (hue,saturation,lightness) {\n      var hue$ = hue / $Basics.degrees(60);\n      var chroma = (1 - $Basics.abs(2 * lightness - 1)) * saturation;\n      var x = chroma * (1 - $Basics.abs(A2(fmod,hue$,2) - 1));\n      var _p0 = _U.cmp(hue$,0) < 0 ? {ctor: \"_Tuple3\",_0: 0,_1: 0,_2: 0} : _U.cmp(hue$,1) < 0 ? {ctor: \"_Tuple3\",_0: chroma,_1: x,_2: 0} : _U.cmp(hue$,\n      2) < 0 ? {ctor: \"_Tuple3\",_0: x,_1: chroma,_2: 0} : _U.cmp(hue$,3) < 0 ? {ctor: \"_Tuple3\",_0: 0,_1: chroma,_2: x} : _U.cmp(hue$,4) < 0 ? {ctor: \"_Tuple3\"\n                                                                                                                                               ,_0: 0\n                                                                                                                                               ,_1: x\n                                                                                                                                               ,_2: chroma} : _U.cmp(hue$,\n      5) < 0 ? {ctor: \"_Tuple3\",_0: x,_1: 0,_2: chroma} : _U.cmp(hue$,6) < 0 ? {ctor: \"_Tuple3\",_0: chroma,_1: 0,_2: x} : {ctor: \"_Tuple3\",_0: 0,_1: 0,_2: 0};\n      var r = _p0._0;\n      var g = _p0._1;\n      var b = _p0._2;\n      var m = lightness - chroma / 2;\n      return {ctor: \"_Tuple3\",_0: r + m,_1: g + m,_2: b + m};\n   });\n   var toRgb = function (color) {\n      var _p1 = color;\n      if (_p1.ctor === \"RGBA\") {\n            return {red: _p1._0,green: _p1._1,blue: _p1._2,alpha: _p1._3};\n         } else {\n            var _p2 = A3(hslToRgb,_p1._0,_p1._1,_p1._2);\n            var r = _p2._0;\n            var g = _p2._1;\n            var b = _p2._2;\n            return {red: $Basics.round(255 * r),green: $Basics.round(255 * g),blue: $Basics.round(255 * b),alpha: _p1._3};\n         }\n   };\n   var toHsl = function (color) {\n      var _p3 = color;\n      if (_p3.ctor === \"HSLA\") {\n            return {hue: _p3._0,saturation: _p3._1,lightness: _p3._2,alpha: _p3._3};\n         } else {\n            var _p4 = A3(rgbToHsl,_p3._0,_p3._1,_p3._2);\n            var h = _p4._0;\n            var s = _p4._1;\n            var l = _p4._2;\n            return {hue: h,saturation: s,lightness: l,alpha: _p3._3};\n         }\n   };\n   var HSLA = F4(function (a,b,c,d) {    return {ctor: \"HSLA\",_0: a,_1: b,_2: c,_3: d};});\n   var hsla = F4(function (hue,saturation,lightness,alpha) {\n      return A4(HSLA,hue - $Basics.turns($Basics.toFloat($Basics.floor(hue / (2 * $Basics.pi)))),saturation,lightness,alpha);\n   });\n   var hsl = F3(function (hue,saturation,lightness) {    return A4(hsla,hue,saturation,lightness,1);});\n   var complement = function (color) {\n      var _p5 = color;\n      if (_p5.ctor === \"HSLA\") {\n            return A4(hsla,_p5._0 + $Basics.degrees(180),_p5._1,_p5._2,_p5._3);\n         } else {\n            var _p6 = A3(rgbToHsl,_p5._0,_p5._1,_p5._2);\n            var h = _p6._0;\n            var s = _p6._1;\n            var l = _p6._2;\n            return A4(hsla,h + $Basics.degrees(180),s,l,_p5._3);\n         }\n   };\n   var grayscale = function (p) {    return A4(HSLA,0,0,1 - p,1);};\n   var greyscale = function (p) {    return A4(HSLA,0,0,1 - p,1);};\n   var RGBA = F4(function (a,b,c,d) {    return {ctor: \"RGBA\",_0: a,_1: b,_2: c,_3: d};});\n   var rgba = RGBA;\n   var rgb = F3(function (r,g,b) {    return A4(RGBA,r,g,b,1);});\n   var lightRed = A4(RGBA,239,41,41,1);\n   var red = A4(RGBA,204,0,0,1);\n   var darkRed = A4(RGBA,164,0,0,1);\n   var lightOrange = A4(RGBA,252,175,62,1);\n   var orange = A4(RGBA,245,121,0,1);\n   var darkOrange = A4(RGBA,206,92,0,1);\n   var lightYellow = A4(RGBA,255,233,79,1);\n   var yellow = A4(RGBA,237,212,0,1);\n   var darkYellow = A4(RGBA,196,160,0,1);\n   var lightGreen = A4(RGBA,138,226,52,1);\n   var green = A4(RGBA,115,210,22,1);\n   var darkGreen = A4(RGBA,78,154,6,1);\n   var lightBlue = A4(RGBA,114,159,207,1);\n   var blue = A4(RGBA,52,101,164,1);\n   var darkBlue = A4(RGBA,32,74,135,1);\n   var lightPurple = A4(RGBA,173,127,168,1);\n   var purple = A4(RGBA,117,80,123,1);\n   var darkPurple = A4(RGBA,92,53,102,1);\n   var lightBrown = A4(RGBA,233,185,110,1);\n   var brown = A4(RGBA,193,125,17,1);\n   var darkBrown = A4(RGBA,143,89,2,1);\n   var black = A4(RGBA,0,0,0,1);\n   var white = A4(RGBA,255,255,255,1);\n   var lightGrey = A4(RGBA,238,238,236,1);\n   var grey = A4(RGBA,211,215,207,1);\n   var darkGrey = A4(RGBA,186,189,182,1);\n   var lightGray = A4(RGBA,238,238,236,1);\n   var gray = A4(RGBA,211,215,207,1);\n   var darkGray = A4(RGBA,186,189,182,1);\n   var lightCharcoal = A4(RGBA,136,138,133,1);\n   var charcoal = A4(RGBA,85,87,83,1);\n   var darkCharcoal = A4(RGBA,46,52,54,1);\n   return _elm.Color.values = {_op: _op\n                              ,rgb: rgb\n                              ,rgba: rgba\n                              ,hsl: hsl\n                              ,hsla: hsla\n                              ,greyscale: greyscale\n                              ,grayscale: grayscale\n                              ,complement: complement\n                              ,linear: linear\n                              ,radial: radial\n                              ,toRgb: toRgb\n                              ,toHsl: toHsl\n                              ,red: red\n                              ,orange: orange\n                              ,yellow: yellow\n                              ,green: green\n                              ,blue: blue\n                              ,purple: purple\n                              ,brown: brown\n                              ,lightRed: lightRed\n                              ,lightOrange: lightOrange\n                              ,lightYellow: lightYellow\n                              ,lightGreen: lightGreen\n                              ,lightBlue: lightBlue\n                              ,lightPurple: lightPurple\n                              ,lightBrown: lightBrown\n                              ,darkRed: darkRed\n                              ,darkOrange: darkOrange\n                              ,darkYellow: darkYellow\n                              ,darkGreen: darkGreen\n                              ,darkBlue: darkBlue\n                              ,darkPurple: darkPurple\n                              ,darkBrown: darkBrown\n                              ,white: white\n                              ,lightGrey: lightGrey\n                              ,grey: grey\n                              ,darkGrey: darkGrey\n                              ,lightCharcoal: lightCharcoal\n                              ,charcoal: charcoal\n                              ,darkCharcoal: darkCharcoal\n                              ,black: black\n                              ,lightGray: lightGray\n                              ,gray: gray\n                              ,darkGray: darkGray};\n};\n\n// setup\nElm.Native = Elm.Native || {};\nElm.Native.Graphics = Elm.Native.Graphics || {};\nElm.Native.Graphics.Element = Elm.Native.Graphics.Element || {};\n\n// definition\nElm.Native.Graphics.Element.make = function(localRuntime) {\n\t'use strict';\n\n\t// attempt to short-circuit\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Graphics = localRuntime.Native.Graphics || {};\n\tlocalRuntime.Native.Graphics.Element = localRuntime.Native.Graphics.Element || {};\n\tif ('values' in localRuntime.Native.Graphics.Element)\n\t{\n\t\treturn localRuntime.Native.Graphics.Element.values;\n\t}\n\n\tvar Color = Elm.Native.Color.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\tvar Text = Elm.Native.Text.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\t// CREATION\n\n\tvar createNode =\n\t\ttypeof document === 'undefined'\n\t\t\t?\n\t\t\t\tfunction(_)\n\t\t\t\t{\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstyle: {},\n\t\t\t\t\t\tappendChild: function() {}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t:\n\t\t\t\tfunction(elementType)\n\t\t\t\t{\n\t\t\t\t\tvar node = document.createElement(elementType);\n\t\t\t\t\tnode.style.padding = '0';\n\t\t\t\t\tnode.style.margin = '0';\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\t\t\t;\n\n\n\tfunction newElement(width, height, elementPrim)\n\t{\n\t\treturn {\n\t\t\tctor: 'Element_elm_builtin',\n\t\t\t_0: {\n\t\t\t\telement: elementPrim,\n\t\t\t\tprops: {\n\t\t\t\t\tid: Utils.guid(),\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height,\n\t\t\t\t\topacity: 1,\n\t\t\t\t\tcolor: Maybe.Nothing,\n\t\t\t\t\thref: '',\n\t\t\t\t\ttag: '',\n\t\t\t\t\thover: Utils.Tuple0,\n\t\t\t\t\tclick: Utils.Tuple0\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\n\t// PROPERTIES\n\n\tfunction setProps(elem, node)\n\t{\n\t\tvar props = elem.props;\n\n\t\tvar element = elem.element;\n\t\tvar width = props.width - (element.adjustWidth || 0);\n\t\tvar height = props.height - (element.adjustHeight || 0);\n\t\tnode.style.width  = (width | 0) + 'px';\n\t\tnode.style.height = (height | 0) + 'px';\n\n\t\tif (props.opacity !== 1)\n\t\t{\n\t\t\tnode.style.opacity = props.opacity;\n\t\t}\n\n\t\tif (props.color.ctor === 'Just')\n\t\t{\n\t\t\tnode.style.backgroundColor = Color.toCss(props.color._0);\n\t\t}\n\n\t\tif (props.tag !== '')\n\t\t{\n\t\t\tnode.id = props.tag;\n\t\t}\n\n\t\tif (props.hover.ctor !== '_Tuple0')\n\t\t{\n\t\t\taddHover(node, props.hover);\n\t\t}\n\n\t\tif (props.click.ctor !== '_Tuple0')\n\t\t{\n\t\t\taddClick(node, props.click);\n\t\t}\n\n\t\tif (props.href !== '')\n\t\t{\n\t\t\tvar anchor = createNode('a');\n\t\t\tanchor.href = props.href;\n\t\t\tanchor.style.display = 'block';\n\t\t\tanchor.style.pointerEvents = 'auto';\n\t\t\tanchor.appendChild(node);\n\t\t\tnode = anchor;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tfunction addClick(e, handler)\n\t{\n\t\te.style.pointerEvents = 'auto';\n\t\te.elm_click_handler = handler;\n\t\tfunction trigger(ev)\n\t\t{\n\t\t\te.elm_click_handler(Utils.Tuple0);\n\t\t\tev.stopPropagation();\n\t\t}\n\t\te.elm_click_trigger = trigger;\n\t\te.addEventListener('click', trigger);\n\t}\n\n\tfunction removeClick(e, handler)\n\t{\n\t\tif (e.elm_click_trigger)\n\t\t{\n\t\t\te.removeEventListener('click', e.elm_click_trigger);\n\t\t\te.elm_click_trigger = null;\n\t\t\te.elm_click_handler = null;\n\t\t}\n\t}\n\n\tfunction addHover(e, handler)\n\t{\n\t\te.style.pointerEvents = 'auto';\n\t\te.elm_hover_handler = handler;\n\t\te.elm_hover_count = 0;\n\n\t\tfunction over(evt)\n\t\t{\n\t\t\tif (e.elm_hover_count++ > 0) return;\n\t\t\te.elm_hover_handler(true);\n\t\t\tevt.stopPropagation();\n\t\t}\n\t\tfunction out(evt)\n\t\t{\n\t\t\tif (e.contains(evt.toElement || evt.relatedTarget)) return;\n\t\t\te.elm_hover_count = 0;\n\t\t\te.elm_hover_handler(false);\n\t\t\tevt.stopPropagation();\n\t\t}\n\t\te.elm_hover_over = over;\n\t\te.elm_hover_out = out;\n\t\te.addEventListener('mouseover', over);\n\t\te.addEventListener('mouseout', out);\n\t}\n\n\tfunction removeHover(e)\n\t{\n\t\te.elm_hover_handler = null;\n\t\tif (e.elm_hover_over)\n\t\t{\n\t\t\te.removeEventListener('mouseover', e.elm_hover_over);\n\t\t\te.elm_hover_over = null;\n\t\t}\n\t\tif (e.elm_hover_out)\n\t\t{\n\t\t\te.removeEventListener('mouseout', e.elm_hover_out);\n\t\t\te.elm_hover_out = null;\n\t\t}\n\t}\n\n\n\t// IMAGES\n\n\tfunction image(props, img)\n\t{\n\t\tswitch (img._0.ctor)\n\t\t{\n\t\t\tcase 'Plain':\n\t\t\t\treturn plainImage(img._3);\n\n\t\t\tcase 'Fitted':\n\t\t\t\treturn fittedImage(props.width, props.height, img._3);\n\n\t\t\tcase 'Cropped':\n\t\t\t\treturn croppedImage(img, props.width, props.height, img._3);\n\n\t\t\tcase 'Tiled':\n\t\t\t\treturn tiledImage(img._3);\n\t\t}\n\t}\n\n\tfunction plainImage(src)\n\t{\n\t\tvar img = createNode('img');\n\t\timg.src = src;\n\t\timg.name = src;\n\t\timg.style.display = 'block';\n\t\treturn img;\n\t}\n\n\tfunction tiledImage(src)\n\t{\n\t\tvar div = createNode('div');\n\t\tdiv.style.backgroundImage = 'url(' + src + ')';\n\t\treturn div;\n\t}\n\n\tfunction fittedImage(w, h, src)\n\t{\n\t\tvar div = createNode('div');\n\t\tdiv.style.background = 'url(' + src + ') no-repeat center';\n\t\tdiv.style.webkitBackgroundSize = 'cover';\n\t\tdiv.style.MozBackgroundSize = 'cover';\n\t\tdiv.style.OBackgroundSize = 'cover';\n\t\tdiv.style.backgroundSize = 'cover';\n\t\treturn div;\n\t}\n\n\tfunction croppedImage(elem, w, h, src)\n\t{\n\t\tvar pos = elem._0._0;\n\t\tvar e = createNode('div');\n\t\te.style.overflow = 'hidden';\n\n\t\tvar img = createNode('img');\n\t\timg.onload = function() {\n\t\t\tvar sw = w / elem._1, sh = h / elem._2;\n\t\t\timg.style.width = ((this.width * sw) | 0) + 'px';\n\t\t\timg.style.height = ((this.height * sh) | 0) + 'px';\n\t\t\timg.style.marginLeft = ((- pos._0 * sw) | 0) + 'px';\n\t\t\timg.style.marginTop = ((- pos._1 * sh) | 0) + 'px';\n\t\t};\n\t\timg.src = src;\n\t\timg.name = src;\n\t\te.appendChild(img);\n\t\treturn e;\n\t}\n\n\n\t// FLOW\n\n\tfunction goOut(node)\n\t{\n\t\tnode.style.position = 'absolute';\n\t\treturn node;\n\t}\n\tfunction goDown(node)\n\t{\n\t\treturn node;\n\t}\n\tfunction goRight(node)\n\t{\n\t\tnode.style.styleFloat = 'left';\n\t\tnode.style.cssFloat = 'left';\n\t\treturn node;\n\t}\n\n\tvar directionTable = {\n\t\tDUp: goDown,\n\t\tDDown: goDown,\n\t\tDLeft: goRight,\n\t\tDRight: goRight,\n\t\tDIn: goOut,\n\t\tDOut: goOut\n\t};\n\tfunction needsReversal(dir)\n\t{\n\t\treturn dir === 'DUp' || dir === 'DLeft' || dir === 'DIn';\n\t}\n\n\tfunction flow(dir, elist)\n\t{\n\t\tvar array = List.toArray(elist);\n\t\tvar container = createNode('div');\n\t\tvar goDir = directionTable[dir];\n\t\tif (goDir === goOut)\n\t\t{\n\t\t\tcontainer.style.pointerEvents = 'none';\n\t\t}\n\t\tif (needsReversal(dir))\n\t\t{\n\t\t\tarray.reverse();\n\t\t}\n\t\tvar len = array.length;\n\t\tfor (var i = 0; i < len; ++i)\n\t\t{\n\t\t\tcontainer.appendChild(goDir(render(array[i])));\n\t\t}\n\t\treturn container;\n\t}\n\n\n\t// CONTAINER\n\n\tfunction toPos(pos)\n\t{\n\t\treturn pos.ctor === 'Absolute'\n\t\t\t? pos._0 + 'px'\n\t\t\t: (pos._0 * 100) + '%';\n\t}\n\n\t// must clear right, left, top, bottom, and transform\n\t// before calling this function\n\tfunction setPos(pos, wrappedElement, e)\n\t{\n\t\tvar elem = wrappedElement._0;\n\t\tvar element = elem.element;\n\t\tvar props = elem.props;\n\t\tvar w = props.width + (element.adjustWidth ? element.adjustWidth : 0);\n\t\tvar h = props.height + (element.adjustHeight ? element.adjustHeight : 0);\n\n\t\te.style.position = 'absolute';\n\t\te.style.margin = 'auto';\n\t\tvar transform = '';\n\n\t\tswitch (pos.horizontal.ctor)\n\t\t{\n\t\t\tcase 'P':\n\t\t\t\te.style.right = toPos(pos.x);\n\t\t\t\te.style.removeProperty('left');\n\t\t\t\tbreak;\n\n\t\t\tcase 'Z':\n\t\t\t\ttransform = 'translateX(' + ((-w / 2) | 0) + 'px) ';\n\n\t\t\tcase 'N':\n\t\t\t\te.style.left = toPos(pos.x);\n\t\t\t\te.style.removeProperty('right');\n\t\t\t\tbreak;\n\t\t}\n\t\tswitch (pos.vertical.ctor)\n\t\t{\n\t\t\tcase 'N':\n\t\t\t\te.style.bottom = toPos(pos.y);\n\t\t\t\te.style.removeProperty('top');\n\t\t\t\tbreak;\n\n\t\t\tcase 'Z':\n\t\t\t\ttransform += 'translateY(' + ((-h / 2) | 0) + 'px)';\n\n\t\t\tcase 'P':\n\t\t\t\te.style.top = toPos(pos.y);\n\t\t\t\te.style.removeProperty('bottom');\n\t\t\t\tbreak;\n\t\t}\n\t\tif (transform !== '')\n\t\t{\n\t\t\taddTransform(e.style, transform);\n\t\t}\n\t\treturn e;\n\t}\n\n\tfunction addTransform(style, transform)\n\t{\n\t\tstyle.transform       = transform;\n\t\tstyle.msTransform     = transform;\n\t\tstyle.MozTransform    = transform;\n\t\tstyle.webkitTransform = transform;\n\t\tstyle.OTransform      = transform;\n\t}\n\n\tfunction container(pos, elem)\n\t{\n\t\tvar e = render(elem);\n\t\tsetPos(pos, elem, e);\n\t\tvar div = createNode('div');\n\t\tdiv.style.position = 'relative';\n\t\tdiv.style.overflow = 'hidden';\n\t\tdiv.appendChild(e);\n\t\treturn div;\n\t}\n\n\n\tfunction rawHtml(elem)\n\t{\n\t\tvar html = elem.html;\n\t\tvar align = elem.align;\n\n\t\tvar div = createNode('div');\n\t\tdiv.innerHTML = html;\n\t\tdiv.style.visibility = 'hidden';\n\t\tif (align)\n\t\t{\n\t\t\tdiv.style.textAlign = align;\n\t\t}\n\t\tdiv.style.visibility = 'visible';\n\t\tdiv.style.pointerEvents = 'auto';\n\t\treturn div;\n\t}\n\n\n\t// RENDER\n\n\tfunction render(wrappedElement)\n\t{\n\t\tvar elem = wrappedElement._0;\n\t\treturn setProps(elem, makeElement(elem));\n\t}\n\n\tfunction makeElement(e)\n\t{\n\t\tvar elem = e.element;\n\t\tswitch (elem.ctor)\n\t\t{\n\t\t\tcase 'Image':\n\t\t\t\treturn image(e.props, elem);\n\n\t\t\tcase 'Flow':\n\t\t\t\treturn flow(elem._0.ctor, elem._1);\n\n\t\t\tcase 'Container':\n\t\t\t\treturn container(elem._0, elem._1);\n\n\t\t\tcase 'Spacer':\n\t\t\t\treturn createNode('div');\n\n\t\t\tcase 'RawHtml':\n\t\t\t\treturn rawHtml(elem);\n\n\t\t\tcase 'Custom':\n\t\t\t\treturn elem.render(elem.model);\n\t\t}\n\t}\n\n\tfunction updateAndReplace(node, curr, next)\n\t{\n\t\tvar newNode = update(node, curr, next);\n\t\tif (newNode !== node)\n\t\t{\n\t\t\tnode.parentNode.replaceChild(newNode, node);\n\t\t}\n\t\treturn newNode;\n\t}\n\n\n\t// UPDATE\n\n\tfunction update(node, wrappedCurrent, wrappedNext)\n\t{\n\t\tvar curr = wrappedCurrent._0;\n\t\tvar next = wrappedNext._0;\n\t\tvar rootNode = node;\n\t\tif (node.tagName === 'A')\n\t\t{\n\t\t\tnode = node.firstChild;\n\t\t}\n\t\tif (curr.props.id === next.props.id)\n\t\t{\n\t\t\tupdateProps(node, curr, next);\n\t\t\treturn rootNode;\n\t\t}\n\t\tif (curr.element.ctor !== next.element.ctor)\n\t\t{\n\t\t\treturn render(wrappedNext);\n\t\t}\n\t\tvar nextE = next.element;\n\t\tvar currE = curr.element;\n\t\tswitch (nextE.ctor)\n\t\t{\n\t\t\tcase 'Spacer':\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'RawHtml':\n\t\t\t\tif(currE.html.valueOf() !== nextE.html.valueOf())\n\t\t\t\t{\n\t\t\t\t\tnode.innerHTML = nextE.html;\n\t\t\t\t}\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'Image':\n\t\t\t\tif (nextE._0.ctor === 'Plain')\n\t\t\t\t{\n\t\t\t\t\tif (nextE._3 !== currE._3)\n\t\t\t\t\t{\n\t\t\t\t\t\tnode.src = nextE._3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (!Utils.eq(nextE, currE)\n\t\t\t\t\t|| next.props.width !== curr.props.width\n\t\t\t\t\t|| next.props.height !== curr.props.height)\n\t\t\t\t{\n\t\t\t\t\treturn render(wrappedNext);\n\t\t\t\t}\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'Flow':\n\t\t\t\tvar arr = List.toArray(nextE._1);\n\t\t\t\tfor (var i = arr.length; i--; )\n\t\t\t\t{\n\t\t\t\t\tarr[i] = arr[i]._0.element.ctor;\n\t\t\t\t}\n\t\t\t\tif (nextE._0.ctor !== currE._0.ctor)\n\t\t\t\t{\n\t\t\t\t\treturn render(wrappedNext);\n\t\t\t\t}\n\t\t\t\tvar nexts = List.toArray(nextE._1);\n\t\t\t\tvar kids = node.childNodes;\n\t\t\t\tif (nexts.length !== kids.length)\n\t\t\t\t{\n\t\t\t\t\treturn render(wrappedNext);\n\t\t\t\t}\n\t\t\t\tvar currs = List.toArray(currE._1);\n\t\t\t\tvar dir = nextE._0.ctor;\n\t\t\t\tvar goDir = directionTable[dir];\n\t\t\t\tvar toReverse = needsReversal(dir);\n\t\t\t\tvar len = kids.length;\n\t\t\t\tfor (var i = len; i--; )\n\t\t\t\t{\n\t\t\t\t\tvar subNode = kids[toReverse ? len - i - 1 : i];\n\t\t\t\t\tgoDir(updateAndReplace(subNode, currs[i], nexts[i]));\n\t\t\t\t}\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'Container':\n\t\t\t\tvar subNode = node.firstChild;\n\t\t\t\tvar newSubNode = updateAndReplace(subNode, currE._1, nextE._1);\n\t\t\t\tsetPos(nextE._0, nextE._1, newSubNode);\n\t\t\t\tupdateProps(node, curr, next);\n\t\t\t\treturn rootNode;\n\n\t\t\tcase 'Custom':\n\t\t\t\tif (currE.type === nextE.type)\n\t\t\t\t{\n\t\t\t\t\tvar updatedNode = nextE.update(node, currE.model, nextE.model);\n\t\t\t\t\tupdateProps(updatedNode, curr, next);\n\t\t\t\t\treturn updatedNode;\n\t\t\t\t}\n\t\t\t\treturn render(wrappedNext);\n\t\t}\n\t}\n\n\tfunction updateProps(node, curr, next)\n\t{\n\t\tvar nextProps = next.props;\n\t\tvar currProps = curr.props;\n\n\t\tvar element = next.element;\n\t\tvar width = nextProps.width - (element.adjustWidth || 0);\n\t\tvar height = nextProps.height - (element.adjustHeight || 0);\n\t\tif (width !== currProps.width)\n\t\t{\n\t\t\tnode.style.width = (width | 0) + 'px';\n\t\t}\n\t\tif (height !== currProps.height)\n\t\t{\n\t\t\tnode.style.height = (height | 0) + 'px';\n\t\t}\n\n\t\tif (nextProps.opacity !== currProps.opacity)\n\t\t{\n\t\t\tnode.style.opacity = nextProps.opacity;\n\t\t}\n\n\t\tvar nextColor = nextProps.color.ctor === 'Just'\n\t\t\t? Color.toCss(nextProps.color._0)\n\t\t\t: '';\n\t\tif (node.style.backgroundColor !== nextColor)\n\t\t{\n\t\t\tnode.style.backgroundColor = nextColor;\n\t\t}\n\n\t\tif (nextProps.tag !== currProps.tag)\n\t\t{\n\t\t\tnode.id = nextProps.tag;\n\t\t}\n\n\t\tif (nextProps.href !== currProps.href)\n\t\t{\n\t\t\tif (currProps.href === '')\n\t\t\t{\n\t\t\t\t// add a surrounding href\n\t\t\t\tvar anchor = createNode('a');\n\t\t\t\tanchor.href = nextProps.href;\n\t\t\t\tanchor.style.display = 'block';\n\t\t\t\tanchor.style.pointerEvents = 'auto';\n\n\t\t\t\tnode.parentNode.replaceChild(anchor, node);\n\t\t\t\tanchor.appendChild(node);\n\t\t\t}\n\t\t\telse if (nextProps.href === '')\n\t\t\t{\n\t\t\t\t// remove the surrounding href\n\t\t\t\tvar anchor = node.parentNode;\n\t\t\t\tanchor.parentNode.replaceChild(node, anchor);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// just update the link\n\t\t\t\tnode.parentNode.href = nextProps.href;\n\t\t\t}\n\t\t}\n\n\t\t// update click and hover handlers\n\t\tvar removed = false;\n\n\t\t// update hover handlers\n\t\tif (currProps.hover.ctor === '_Tuple0')\n\t\t{\n\t\t\tif (nextProps.hover.ctor !== '_Tuple0')\n\t\t\t{\n\t\t\t\taddHover(node, nextProps.hover);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (nextProps.hover.ctor === '_Tuple0')\n\t\t\t{\n\t\t\t\tremoved = true;\n\t\t\t\tremoveHover(node);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tnode.elm_hover_handler = nextProps.hover;\n\t\t\t}\n\t\t}\n\n\t\t// update click handlers\n\t\tif (currProps.click.ctor === '_Tuple0')\n\t\t{\n\t\t\tif (nextProps.click.ctor !== '_Tuple0')\n\t\t\t{\n\t\t\t\taddClick(node, nextProps.click);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (nextProps.click.ctor === '_Tuple0')\n\t\t\t{\n\t\t\t\tremoved = true;\n\t\t\t\tremoveClick(node);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tnode.elm_click_handler = nextProps.click;\n\t\t\t}\n\t\t}\n\n\t\t// stop capturing clicks if\n\t\tif (removed\n\t\t\t&& nextProps.hover.ctor === '_Tuple0'\n\t\t\t&& nextProps.click.ctor === '_Tuple0')\n\t\t{\n\t\t\tnode.style.pointerEvents = 'none';\n\t\t}\n\t}\n\n\n\t// TEXT\n\n\tfunction block(align)\n\t{\n\t\treturn function(text)\n\t\t{\n\t\t\tvar raw = {\n\t\t\t\tctor: 'RawHtml',\n\t\t\t\thtml: Text.renderHtml(text),\n\t\t\t\talign: align\n\t\t\t};\n\t\t\tvar pos = htmlHeight(0, raw);\n\t\t\treturn newElement(pos._0, pos._1, raw);\n\t\t};\n\t}\n\n\tfunction markdown(text)\n\t{\n\t\tvar raw = {\n\t\t\tctor: 'RawHtml',\n\t\t\thtml: text,\n\t\t\talign: null\n\t\t};\n\t\tvar pos = htmlHeight(0, raw);\n\t\treturn newElement(pos._0, pos._1, raw);\n\t}\n\n\tvar htmlHeight =\n\t\ttypeof document !== 'undefined'\n\t\t\t? realHtmlHeight\n\t\t\t: function(a, b) { return Utils.Tuple2(0, 0); };\n\n\tfunction realHtmlHeight(width, rawHtml)\n\t{\n\t\t// create dummy node\n\t\tvar temp = document.createElement('div');\n\t\ttemp.innerHTML = rawHtml.html;\n\t\tif (width > 0)\n\t\t{\n\t\t\ttemp.style.width = width + 'px';\n\t\t}\n\t\ttemp.style.visibility = 'hidden';\n\t\ttemp.style.styleFloat = 'left';\n\t\ttemp.style.cssFloat = 'left';\n\n\t\tdocument.body.appendChild(temp);\n\n\t\t// get dimensions\n\t\tvar style = window.getComputedStyle(temp, null);\n\t\tvar w = Math.ceil(style.getPropertyValue('width').slice(0, -2) - 0);\n\t\tvar h = Math.ceil(style.getPropertyValue('height').slice(0, -2) - 0);\n\t\tdocument.body.removeChild(temp);\n\t\treturn Utils.Tuple2(w, h);\n\t}\n\n\n\treturn localRuntime.Native.Graphics.Element.values = {\n\t\trender: render,\n\t\tupdate: update,\n\t\tupdateAndReplace: updateAndReplace,\n\n\t\tcreateNode: createNode,\n\t\tnewElement: F3(newElement),\n\t\taddTransform: addTransform,\n\t\thtmlHeight: F2(htmlHeight),\n\t\tguid: Utils.guid,\n\n\t\tblock: block,\n\t\tmarkdown: markdown\n\t};\n};\n\nElm.Native.Text = {};\nElm.Native.Text.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Text = localRuntime.Native.Text || {};\n\tif (localRuntime.Native.Text.values)\n\t{\n\t\treturn localRuntime.Native.Text.values;\n\t}\n\n\tvar toCss = Elm.Native.Color.make(localRuntime).toCss;\n\tvar List = Elm.Native.List.make(localRuntime);\n\n\n\t// CONSTRUCTORS\n\n\tfunction fromString(str)\n\t{\n\t\treturn {\n\t\t\tctor: 'Text:Text',\n\t\t\t_0: str\n\t\t};\n\t}\n\n\tfunction append(a, b)\n\t{\n\t\treturn {\n\t\t\tctor: 'Text:Append',\n\t\t\t_0: a,\n\t\t\t_1: b\n\t\t};\n\t}\n\n\tfunction addMeta(field, value, text)\n\t{\n\t\tvar newProps = {};\n\t\tvar newText = {\n\t\t\tctor: 'Text:Meta',\n\t\t\t_0: newProps,\n\t\t\t_1: text\n\t\t};\n\n\t\tif (text.ctor === 'Text:Meta')\n\t\t{\n\t\t\tnewText._1 = text._1;\n\t\t\tvar props = text._0;\n\t\t\tfor (var i = metaKeys.length; i--; )\n\t\t\t{\n\t\t\t\tvar key = metaKeys[i];\n\t\t\t\tvar val = props[key];\n\t\t\t\tif (val)\n\t\t\t\t{\n\t\t\t\t\tnewProps[key] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tnewProps[field] = value;\n\t\treturn newText;\n\t}\n\n\tvar metaKeys = [\n\t\t'font-size',\n\t\t'font-family',\n\t\t'font-style',\n\t\t'font-weight',\n\t\t'href',\n\t\t'text-decoration',\n\t\t'color'\n\t];\n\n\n\t// conversions from Elm values to CSS\n\n\tfunction toTypefaces(list)\n\t{\n\t\tvar typefaces = List.toArray(list);\n\t\tfor (var i = typefaces.length; i--; )\n\t\t{\n\t\t\tvar typeface = typefaces[i];\n\t\t\tif (typeface.indexOf(' ') > -1)\n\t\t\t{\n\t\t\t\ttypefaces[i] = \"'\" + typeface + \"'\";\n\t\t\t}\n\t\t}\n\t\treturn typefaces.join(',');\n\t}\n\n\tfunction toLine(line)\n\t{\n\t\tvar ctor = line.ctor;\n\t\treturn ctor === 'Under'\n\t\t\t? 'underline'\n\t\t\t: ctor === 'Over'\n\t\t\t\t? 'overline'\n\t\t\t\t: 'line-through';\n\t}\n\n\t// setting styles of Text\n\n\tfunction style(style, text)\n\t{\n\t\tvar newText = addMeta('color', toCss(style.color), text);\n\t\tvar props = newText._0;\n\n\t\tif (style.typeface.ctor !== '[]')\n\t\t{\n\t\t\tprops['font-family'] = toTypefaces(style.typeface);\n\t\t}\n\t\tif (style.height.ctor !== 'Nothing')\n\t\t{\n\t\t\tprops['font-size'] = style.height._0 + 'px';\n\t\t}\n\t\tif (style.bold)\n\t\t{\n\t\t\tprops['font-weight'] = 'bold';\n\t\t}\n\t\tif (style.italic)\n\t\t{\n\t\t\tprops['font-style'] = 'italic';\n\t\t}\n\t\tif (style.line.ctor !== 'Nothing')\n\t\t{\n\t\t\tprops['text-decoration'] = toLine(style.line._0);\n\t\t}\n\t\treturn newText;\n\t}\n\n\tfunction height(px, text)\n\t{\n\t\treturn addMeta('font-size', px + 'px', text);\n\t}\n\n\tfunction typeface(names, text)\n\t{\n\t\treturn addMeta('font-family', toTypefaces(names), text);\n\t}\n\n\tfunction monospace(text)\n\t{\n\t\treturn addMeta('font-family', 'monospace', text);\n\t}\n\n\tfunction italic(text)\n\t{\n\t\treturn addMeta('font-style', 'italic', text);\n\t}\n\n\tfunction bold(text)\n\t{\n\t\treturn addMeta('font-weight', 'bold', text);\n\t}\n\n\tfunction link(href, text)\n\t{\n\t\treturn addMeta('href', href, text);\n\t}\n\n\tfunction line(line, text)\n\t{\n\t\treturn addMeta('text-decoration', toLine(line), text);\n\t}\n\n\tfunction color(color, text)\n\t{\n\t\treturn addMeta('color', toCss(color), text);\n\t}\n\n\n\t// RENDER\n\n\tfunction renderHtml(text)\n\t{\n\t\tvar tag = text.ctor;\n\t\tif (tag === 'Text:Append')\n\t\t{\n\t\t\treturn renderHtml(text._0) + renderHtml(text._1);\n\t\t}\n\t\tif (tag === 'Text:Text')\n\t\t{\n\t\t\treturn properEscape(text._0);\n\t\t}\n\t\tif (tag === 'Text:Meta')\n\t\t{\n\t\t\treturn renderMeta(text._0, renderHtml(text._1));\n\t\t}\n\t}\n\n\tfunction renderMeta(metas, string)\n\t{\n\t\tvar href = metas.href;\n\t\tif (href)\n\t\t{\n\t\t\tstring = '<a href=\"' + href + '\">' + string + '</a>';\n\t\t}\n\t\tvar styles = '';\n\t\tfor (var key in metas)\n\t\t{\n\t\t\tif (key === 'href')\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstyles += key + ':' + metas[key] + ';';\n\t\t}\n\t\tif (styles)\n\t\t{\n\t\t\tstring = '<span style=\"' + styles + '\">' + string + '</span>';\n\t\t}\n\t\treturn string;\n\t}\n\n\tfunction properEscape(str)\n\t{\n\t\tif (str.length === 0)\n\t\t{\n\t\t\treturn str;\n\t\t}\n\t\tstr = str //.replace(/&/g,  '&#38;')\n\t\t\t.replace(/\"/g,  '&#34;')\n\t\t\t.replace(/'/g,  '&#39;')\n\t\t\t.replace(/</g,  '&#60;')\n\t\t\t.replace(/>/g,  '&#62;');\n\t\tvar arr = str.split('\\n');\n\t\tfor (var i = arr.length; i--; )\n\t\t{\n\t\t\tarr[i] = makeSpaces(arr[i]);\n\t\t}\n\t\treturn arr.join('<br/>');\n\t}\n\n\tfunction makeSpaces(s)\n\t{\n\t\tif (s.length === 0)\n\t\t{\n\t\t\treturn s;\n\t\t}\n\t\tvar arr = s.split('');\n\t\tif (arr[0] === ' ')\n\t\t{\n\t\t\tarr[0] = '&nbsp;';\n\t\t}\n\t\tfor (var i = arr.length; --i; )\n\t\t{\n\t\t\tif (arr[i][0] === ' ' && arr[i - 1] === ' ')\n\t\t\t{\n\t\t\t\tarr[i - 1] = arr[i - 1] + arr[i];\n\t\t\t\tarr[i] = '';\n\t\t\t}\n\t\t}\n\t\tfor (var i = arr.length; i--; )\n\t\t{\n\t\t\tif (arr[i].length > 1 && arr[i][0] === ' ')\n\t\t\t{\n\t\t\t\tvar spaces = arr[i].split('');\n\t\t\t\tfor (var j = spaces.length - 2; j >= 0; j -= 2)\n\t\t\t\t{\n\t\t\t\t\tspaces[j] = '&nbsp;';\n\t\t\t\t}\n\t\t\t\tarr[i] = spaces.join('');\n\t\t\t}\n\t\t}\n\t\tarr = arr.join('');\n\t\tif (arr[arr.length - 1] === ' ')\n\t\t{\n\t\t\treturn arr.slice(0, -1) + '&nbsp;';\n\t\t}\n\t\treturn arr;\n\t}\n\n\n\treturn localRuntime.Native.Text.values = {\n\t\tfromString: fromString,\n\t\tappend: F2(append),\n\n\t\theight: F2(height),\n\t\titalic: italic,\n\t\tbold: bold,\n\t\tline: F2(line),\n\t\tmonospace: monospace,\n\t\ttypeface: F2(typeface),\n\t\tcolor: F2(color),\n\t\tlink: F2(link),\n\t\tstyle: F2(style),\n\n\t\ttoTypefaces: toTypefaces,\n\t\ttoLine: toLine,\n\t\trenderHtml: renderHtml\n\t};\n};\n\nElm.Text = Elm.Text || {};\nElm.Text.make = function (_elm) {\n   \"use strict\";\n   _elm.Text = _elm.Text || {};\n   if (_elm.Text.values) return _elm.Text.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Color = Elm.Color.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Text = Elm.Native.Text.make(_elm);\n   var _op = {};\n   var line = $Native$Text.line;\n   var italic = $Native$Text.italic;\n   var bold = $Native$Text.bold;\n   var color = $Native$Text.color;\n   var height = $Native$Text.height;\n   var link = $Native$Text.link;\n   var monospace = $Native$Text.monospace;\n   var typeface = $Native$Text.typeface;\n   var style = $Native$Text.style;\n   var append = $Native$Text.append;\n   var fromString = $Native$Text.fromString;\n   var empty = fromString(\"\");\n   var concat = function (texts) {    return A3($List.foldr,append,empty,texts);};\n   var join = F2(function (seperator,texts) {    return concat(A2($List.intersperse,seperator,texts));});\n   var defaultStyle = {typeface: _U.list([]),height: $Maybe.Nothing,color: $Color.black,bold: false,italic: false,line: $Maybe.Nothing};\n   var Style = F6(function (a,b,c,d,e,f) {    return {typeface: a,height: b,color: c,bold: d,italic: e,line: f};});\n   var Through = {ctor: \"Through\"};\n   var Over = {ctor: \"Over\"};\n   var Under = {ctor: \"Under\"};\n   var Text = {ctor: \"Text\"};\n   return _elm.Text.values = {_op: _op\n                             ,fromString: fromString\n                             ,empty: empty\n                             ,append: append\n                             ,concat: concat\n                             ,join: join\n                             ,link: link\n                             ,style: style\n                             ,defaultStyle: defaultStyle\n                             ,typeface: typeface\n                             ,monospace: monospace\n                             ,height: height\n                             ,color: color\n                             ,bold: bold\n                             ,italic: italic\n                             ,line: line\n                             ,Style: Style\n                             ,Under: Under\n                             ,Over: Over\n                             ,Through: Through};\n};\nElm.Graphics = Elm.Graphics || {};\nElm.Graphics.Element = Elm.Graphics.Element || {};\nElm.Graphics.Element.make = function (_elm) {\n   \"use strict\";\n   _elm.Graphics = _elm.Graphics || {};\n   _elm.Graphics.Element = _elm.Graphics.Element || {};\n   if (_elm.Graphics.Element.values) return _elm.Graphics.Element.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Color = Elm.Color.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Graphics$Element = Elm.Native.Graphics.Element.make(_elm),\n   $Text = Elm.Text.make(_elm);\n   var _op = {};\n   var DOut = {ctor: \"DOut\"};\n   var outward = DOut;\n   var DIn = {ctor: \"DIn\"};\n   var inward = DIn;\n   var DRight = {ctor: \"DRight\"};\n   var right = DRight;\n   var DLeft = {ctor: \"DLeft\"};\n   var left = DLeft;\n   var DDown = {ctor: \"DDown\"};\n   var down = DDown;\n   var DUp = {ctor: \"DUp\"};\n   var up = DUp;\n   var RawPosition = F4(function (a,b,c,d) {    return {horizontal: a,vertical: b,x: c,y: d};});\n   var Position = function (a) {    return {ctor: \"Position\",_0: a};};\n   var Relative = function (a) {    return {ctor: \"Relative\",_0: a};};\n   var relative = Relative;\n   var Absolute = function (a) {    return {ctor: \"Absolute\",_0: a};};\n   var absolute = Absolute;\n   var N = {ctor: \"N\"};\n   var bottomLeft = Position({horizontal: N,vertical: N,x: Absolute(0),y: Absolute(0)});\n   var bottomLeftAt = F2(function (x,y) {    return Position({horizontal: N,vertical: N,x: x,y: y});});\n   var Z = {ctor: \"Z\"};\n   var middle = Position({horizontal: Z,vertical: Z,x: Relative(0.5),y: Relative(0.5)});\n   var midLeft = Position({horizontal: N,vertical: Z,x: Absolute(0),y: Relative(0.5)});\n   var midBottom = Position({horizontal: Z,vertical: N,x: Relative(0.5),y: Absolute(0)});\n   var middleAt = F2(function (x,y) {    return Position({horizontal: Z,vertical: Z,x: x,y: y});});\n   var midLeftAt = F2(function (x,y) {    return Position({horizontal: N,vertical: Z,x: x,y: y});});\n   var midBottomAt = F2(function (x,y) {    return Position({horizontal: Z,vertical: N,x: x,y: y});});\n   var P = {ctor: \"P\"};\n   var topLeft = Position({horizontal: N,vertical: P,x: Absolute(0),y: Absolute(0)});\n   var topRight = Position({horizontal: P,vertical: P,x: Absolute(0),y: Absolute(0)});\n   var bottomRight = Position({horizontal: P,vertical: N,x: Absolute(0),y: Absolute(0)});\n   var midRight = Position({horizontal: P,vertical: Z,x: Absolute(0),y: Relative(0.5)});\n   var midTop = Position({horizontal: Z,vertical: P,x: Relative(0.5),y: Absolute(0)});\n   var topLeftAt = F2(function (x,y) {    return Position({horizontal: N,vertical: P,x: x,y: y});});\n   var topRightAt = F2(function (x,y) {    return Position({horizontal: P,vertical: P,x: x,y: y});});\n   var bottomRightAt = F2(function (x,y) {    return Position({horizontal: P,vertical: N,x: x,y: y});});\n   var midRightAt = F2(function (x,y) {    return Position({horizontal: P,vertical: Z,x: x,y: y});});\n   var midTopAt = F2(function (x,y) {    return Position({horizontal: Z,vertical: P,x: x,y: y});});\n   var justified = $Native$Graphics$Element.block(\"justify\");\n   var centered = $Native$Graphics$Element.block(\"center\");\n   var rightAligned = $Native$Graphics$Element.block(\"right\");\n   var leftAligned = $Native$Graphics$Element.block(\"left\");\n   var show = function (value) {    return leftAligned($Text.monospace($Text.fromString($Basics.toString(value))));};\n   var Tiled = {ctor: \"Tiled\"};\n   var Cropped = function (a) {    return {ctor: \"Cropped\",_0: a};};\n   var Fitted = {ctor: \"Fitted\"};\n   var Plain = {ctor: \"Plain\"};\n   var Custom = {ctor: \"Custom\"};\n   var RawHtml = {ctor: \"RawHtml\"};\n   var Spacer = {ctor: \"Spacer\"};\n   var Flow = F2(function (a,b) {    return {ctor: \"Flow\",_0: a,_1: b};});\n   var Container = F2(function (a,b) {    return {ctor: \"Container\",_0: a,_1: b};});\n   var Image = F4(function (a,b,c,d) {    return {ctor: \"Image\",_0: a,_1: b,_2: c,_3: d};});\n   var newElement = $Native$Graphics$Element.newElement;\n   var image = F3(function (w,h,src) {    return A3(newElement,w,h,A4(Image,Plain,w,h,src));});\n   var fittedImage = F3(function (w,h,src) {    return A3(newElement,w,h,A4(Image,Fitted,w,h,src));});\n   var croppedImage = F4(function (pos,w,h,src) {    return A3(newElement,w,h,A4(Image,Cropped(pos),w,h,src));});\n   var tiledImage = F3(function (w,h,src) {    return A3(newElement,w,h,A4(Image,Tiled,w,h,src));});\n   var container = F4(function (w,h,_p0,e) {    var _p1 = _p0;return A3(newElement,w,h,A2(Container,_p1._0,e));});\n   var spacer = F2(function (w,h) {    return A3(newElement,w,h,Spacer);});\n   var sizeOf = function (_p2) {    var _p3 = _p2;var _p4 = _p3._0;return {ctor: \"_Tuple2\",_0: _p4.props.width,_1: _p4.props.height};};\n   var heightOf = function (_p5) {    var _p6 = _p5;return _p6._0.props.height;};\n   var widthOf = function (_p7) {    var _p8 = _p7;return _p8._0.props.width;};\n   var above = F2(function (hi,lo) {\n      return A3(newElement,A2($Basics.max,widthOf(hi),widthOf(lo)),heightOf(hi) + heightOf(lo),A2(Flow,DDown,_U.list([hi,lo])));\n   });\n   var below = F2(function (lo,hi) {\n      return A3(newElement,A2($Basics.max,widthOf(hi),widthOf(lo)),heightOf(hi) + heightOf(lo),A2(Flow,DDown,_U.list([hi,lo])));\n   });\n   var beside = F2(function (lft,rht) {\n      return A3(newElement,widthOf(lft) + widthOf(rht),A2($Basics.max,heightOf(lft),heightOf(rht)),A2(Flow,right,_U.list([lft,rht])));\n   });\n   var layers = function (es) {\n      var hs = A2($List.map,heightOf,es);\n      var ws = A2($List.map,widthOf,es);\n      return A3(newElement,A2($Maybe.withDefault,0,$List.maximum(ws)),A2($Maybe.withDefault,0,$List.maximum(hs)),A2(Flow,DOut,es));\n   };\n   var empty = A2(spacer,0,0);\n   var flow = F2(function (dir,es) {\n      var newFlow = F2(function (w,h) {    return A3(newElement,w,h,A2(Flow,dir,es));});\n      var maxOrZero = function (list) {    return A2($Maybe.withDefault,0,$List.maximum(list));};\n      var hs = A2($List.map,heightOf,es);\n      var ws = A2($List.map,widthOf,es);\n      if (_U.eq(es,_U.list([]))) return empty; else {\n            var _p9 = dir;\n            switch (_p9.ctor)\n            {case \"DUp\": return A2(newFlow,maxOrZero(ws),$List.sum(hs));\n               case \"DDown\": return A2(newFlow,maxOrZero(ws),$List.sum(hs));\n               case \"DLeft\": return A2(newFlow,$List.sum(ws),maxOrZero(hs));\n               case \"DRight\": return A2(newFlow,$List.sum(ws),maxOrZero(hs));\n               case \"DIn\": return A2(newFlow,maxOrZero(ws),maxOrZero(hs));\n               default: return A2(newFlow,maxOrZero(ws),maxOrZero(hs));}\n         }\n   });\n   var Properties = F9(function (a,b,c,d,e,f,g,h,i) {    return {id: a,width: b,height: c,opacity: d,color: e,href: f,tag: g,hover: h,click: i};});\n   var Element_elm_builtin = function (a) {    return {ctor: \"Element_elm_builtin\",_0: a};};\n   var width = F2(function (newWidth,_p10) {\n      var _p11 = _p10;\n      var _p14 = _p11._0.props;\n      var _p13 = _p11._0.element;\n      var newHeight = function () {\n         var _p12 = _p13;\n         switch (_p12.ctor)\n         {case \"Image\": return $Basics.round($Basics.toFloat(_p12._2) / $Basics.toFloat(_p12._1) * $Basics.toFloat(newWidth));\n            case \"RawHtml\": return $Basics.snd(A2($Native$Graphics$Element.htmlHeight,newWidth,_p13));\n            default: return _p14.height;}\n      }();\n      return Element_elm_builtin({element: _p13,props: _U.update(_p14,{width: newWidth,height: newHeight})});\n   });\n   var height = F2(function (newHeight,_p15) {\n      var _p16 = _p15;\n      return Element_elm_builtin({element: _p16._0.element,props: _U.update(_p16._0.props,{height: newHeight})});\n   });\n   var size = F3(function (w,h,e) {    return A2(height,h,A2(width,w,e));});\n   var opacity = F2(function (givenOpacity,_p17) {\n      var _p18 = _p17;\n      return Element_elm_builtin({element: _p18._0.element,props: _U.update(_p18._0.props,{opacity: givenOpacity})});\n   });\n   var color = F2(function (clr,_p19) {\n      var _p20 = _p19;\n      return Element_elm_builtin({element: _p20._0.element,props: _U.update(_p20._0.props,{color: $Maybe.Just(clr)})});\n   });\n   var tag = F2(function (name,_p21) {    var _p22 = _p21;return Element_elm_builtin({element: _p22._0.element,props: _U.update(_p22._0.props,{tag: name})});});\n   var link = F2(function (href,_p23) {\n      var _p24 = _p23;\n      return Element_elm_builtin({element: _p24._0.element,props: _U.update(_p24._0.props,{href: href})});\n   });\n   return _elm.Graphics.Element.values = {_op: _op\n                                         ,image: image\n                                         ,fittedImage: fittedImage\n                                         ,croppedImage: croppedImage\n                                         ,tiledImage: tiledImage\n                                         ,leftAligned: leftAligned\n                                         ,rightAligned: rightAligned\n                                         ,centered: centered\n                                         ,justified: justified\n                                         ,show: show\n                                         ,width: width\n                                         ,height: height\n                                         ,size: size\n                                         ,color: color\n                                         ,opacity: opacity\n                                         ,link: link\n                                         ,tag: tag\n                                         ,widthOf: widthOf\n                                         ,heightOf: heightOf\n                                         ,sizeOf: sizeOf\n                                         ,flow: flow\n                                         ,up: up\n                                         ,down: down\n                                         ,left: left\n                                         ,right: right\n                                         ,inward: inward\n                                         ,outward: outward\n                                         ,layers: layers\n                                         ,above: above\n                                         ,below: below\n                                         ,beside: beside\n                                         ,empty: empty\n                                         ,spacer: spacer\n                                         ,container: container\n                                         ,middle: middle\n                                         ,midTop: midTop\n                                         ,midBottom: midBottom\n                                         ,midLeft: midLeft\n                                         ,midRight: midRight\n                                         ,topLeft: topLeft\n                                         ,topRight: topRight\n                                         ,bottomLeft: bottomLeft\n                                         ,bottomRight: bottomRight\n                                         ,absolute: absolute\n                                         ,relative: relative\n                                         ,middleAt: middleAt\n                                         ,midTopAt: midTopAt\n                                         ,midBottomAt: midBottomAt\n                                         ,midLeftAt: midLeftAt\n                                         ,midRightAt: midRightAt\n                                         ,topLeftAt: topLeftAt\n                                         ,topRightAt: topRightAt\n                                         ,bottomLeftAt: bottomLeftAt\n                                         ,bottomRightAt: bottomRightAt};\n};\nElm.Graphics = Elm.Graphics || {};\nElm.Graphics.Collage = Elm.Graphics.Collage || {};\nElm.Graphics.Collage.make = function (_elm) {\n   \"use strict\";\n   _elm.Graphics = _elm.Graphics || {};\n   _elm.Graphics.Collage = _elm.Graphics.Collage || {};\n   if (_elm.Graphics.Collage.values) return _elm.Graphics.Collage.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Color = Elm.Color.make(_elm),\n   $Graphics$Element = Elm.Graphics.Element.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Native$Graphics$Collage = Elm.Native.Graphics.Collage.make(_elm),\n   $Text = Elm.Text.make(_elm),\n   $Transform2D = Elm.Transform2D.make(_elm);\n   var _op = {};\n   var Shape = function (a) {    return {ctor: \"Shape\",_0: a};};\n   var polygon = function (points) {    return Shape(points);};\n   var rect = F2(function (w,h) {\n      var hh = h / 2;\n      var hw = w / 2;\n      return Shape(_U.list([{ctor: \"_Tuple2\",_0: 0 - hw,_1: 0 - hh}\n                           ,{ctor: \"_Tuple2\",_0: 0 - hw,_1: hh}\n                           ,{ctor: \"_Tuple2\",_0: hw,_1: hh}\n                           ,{ctor: \"_Tuple2\",_0: hw,_1: 0 - hh}]));\n   });\n   var square = function (n) {    return A2(rect,n,n);};\n   var oval = F2(function (w,h) {\n      var hh = h / 2;\n      var hw = w / 2;\n      var n = 50;\n      var t = 2 * $Basics.pi / n;\n      var f = function (i) {    return {ctor: \"_Tuple2\",_0: hw * $Basics.cos(t * i),_1: hh * $Basics.sin(t * i)};};\n      return Shape(A2($List.map,f,_U.range(0,n - 1)));\n   });\n   var circle = function (r) {    return A2(oval,2 * r,2 * r);};\n   var ngon = F2(function (n,r) {\n      var m = $Basics.toFloat(n);\n      var t = 2 * $Basics.pi / m;\n      var f = function (i) {    return {ctor: \"_Tuple2\",_0: r * $Basics.cos(t * i),_1: r * $Basics.sin(t * i)};};\n      return Shape(A2($List.map,f,_U.range(0,m - 1)));\n   });\n   var Path = function (a) {    return {ctor: \"Path\",_0: a};};\n   var path = function (ps) {    return Path(ps);};\n   var segment = F2(function (p1,p2) {    return Path(_U.list([p1,p2]));});\n   var collage = $Native$Graphics$Collage.collage;\n   var Fill = function (a) {    return {ctor: \"Fill\",_0: a};};\n   var Line = function (a) {    return {ctor: \"Line\",_0: a};};\n   var FGroup = F2(function (a,b) {    return {ctor: \"FGroup\",_0: a,_1: b};});\n   var FElement = function (a) {    return {ctor: \"FElement\",_0: a};};\n   var FImage = F4(function (a,b,c,d) {    return {ctor: \"FImage\",_0: a,_1: b,_2: c,_3: d};});\n   var FText = function (a) {    return {ctor: \"FText\",_0: a};};\n   var FOutlinedText = F2(function (a,b) {    return {ctor: \"FOutlinedText\",_0: a,_1: b};});\n   var FShape = F2(function (a,b) {    return {ctor: \"FShape\",_0: a,_1: b};});\n   var FPath = F2(function (a,b) {    return {ctor: \"FPath\",_0: a,_1: b};});\n   var LineStyle = F6(function (a,b,c,d,e,f) {    return {color: a,width: b,cap: c,join: d,dashing: e,dashOffset: f};});\n   var Clipped = {ctor: \"Clipped\"};\n   var Sharp = function (a) {    return {ctor: \"Sharp\",_0: a};};\n   var Smooth = {ctor: \"Smooth\"};\n   var Padded = {ctor: \"Padded\"};\n   var Round = {ctor: \"Round\"};\n   var Flat = {ctor: \"Flat\"};\n   var defaultLine = {color: $Color.black,width: 1,cap: Flat,join: Sharp(10),dashing: _U.list([]),dashOffset: 0};\n   var solid = function (clr) {    return _U.update(defaultLine,{color: clr});};\n   var dashed = function (clr) {    return _U.update(defaultLine,{color: clr,dashing: _U.list([8,4])});};\n   var dotted = function (clr) {    return _U.update(defaultLine,{color: clr,dashing: _U.list([3,3])});};\n   var Grad = function (a) {    return {ctor: \"Grad\",_0: a};};\n   var Texture = function (a) {    return {ctor: \"Texture\",_0: a};};\n   var Solid = function (a) {    return {ctor: \"Solid\",_0: a};};\n   var Form_elm_builtin = function (a) {    return {ctor: \"Form_elm_builtin\",_0: a};};\n   var form = function (f) {    return Form_elm_builtin({theta: 0,scale: 1,x: 0,y: 0,alpha: 1,form: f});};\n   var fill = F2(function (style,_p0) {    var _p1 = _p0;return form(A2(FShape,Fill(style),_p1._0));});\n   var filled = F2(function (color,shape) {    return A2(fill,Solid(color),shape);});\n   var textured = F2(function (src,shape) {    return A2(fill,Texture(src),shape);});\n   var gradient = F2(function (grad,shape) {    return A2(fill,Grad(grad),shape);});\n   var outlined = F2(function (style,_p2) {    var _p3 = _p2;return form(A2(FShape,Line(style),_p3._0));});\n   var traced = F2(function (style,_p4) {    var _p5 = _p4;return form(A2(FPath,style,_p5._0));});\n   var sprite = F4(function (w,h,pos,src) {    return form(A4(FImage,w,h,pos,src));});\n   var toForm = function (e) {    return form(FElement(e));};\n   var group = function (fs) {    return form(A2(FGroup,$Transform2D.identity,fs));};\n   var groupTransform = F2(function (matrix,fs) {    return form(A2(FGroup,matrix,fs));});\n   var text = function (t) {    return form(FText(t));};\n   var outlinedText = F2(function (ls,t) {    return form(A2(FOutlinedText,ls,t));});\n   var move = F2(function (_p7,_p6) {\n      var _p8 = _p7;\n      var _p9 = _p6;\n      var _p10 = _p9._0;\n      return Form_elm_builtin(_U.update(_p10,{x: _p10.x + _p8._0,y: _p10.y + _p8._1}));\n   });\n   var moveX = F2(function (x,_p11) {    var _p12 = _p11;var _p13 = _p12._0;return Form_elm_builtin(_U.update(_p13,{x: _p13.x + x}));});\n   var moveY = F2(function (y,_p14) {    var _p15 = _p14;var _p16 = _p15._0;return Form_elm_builtin(_U.update(_p16,{y: _p16.y + y}));});\n   var scale = F2(function (s,_p17) {    var _p18 = _p17;var _p19 = _p18._0;return Form_elm_builtin(_U.update(_p19,{scale: _p19.scale * s}));});\n   var rotate = F2(function (t,_p20) {    var _p21 = _p20;var _p22 = _p21._0;return Form_elm_builtin(_U.update(_p22,{theta: _p22.theta + t}));});\n   var alpha = F2(function (a,_p23) {    var _p24 = _p23;return Form_elm_builtin(_U.update(_p24._0,{alpha: a}));});\n   return _elm.Graphics.Collage.values = {_op: _op\n                                         ,collage: collage\n                                         ,toForm: toForm\n                                         ,filled: filled\n                                         ,textured: textured\n                                         ,gradient: gradient\n                                         ,outlined: outlined\n                                         ,traced: traced\n                                         ,text: text\n                                         ,outlinedText: outlinedText\n                                         ,move: move\n                                         ,moveX: moveX\n                                         ,moveY: moveY\n                                         ,scale: scale\n                                         ,rotate: rotate\n                                         ,alpha: alpha\n                                         ,group: group\n                                         ,groupTransform: groupTransform\n                                         ,rect: rect\n                                         ,oval: oval\n                                         ,square: square\n                                         ,circle: circle\n                                         ,ngon: ngon\n                                         ,polygon: polygon\n                                         ,segment: segment\n                                         ,path: path\n                                         ,solid: solid\n                                         ,dashed: dashed\n                                         ,dotted: dotted\n                                         ,defaultLine: defaultLine\n                                         ,LineStyle: LineStyle\n                                         ,Flat: Flat\n                                         ,Round: Round\n                                         ,Padded: Padded\n                                         ,Smooth: Smooth\n                                         ,Sharp: Sharp\n                                         ,Clipped: Clipped};\n};\nElm.Native.Debug = {};\nElm.Native.Debug.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Debug = localRuntime.Native.Debug || {};\n\tif (localRuntime.Native.Debug.values)\n\t{\n\t\treturn localRuntime.Native.Debug.values;\n\t}\n\n\tvar toString = Elm.Native.Utils.make(localRuntime).toString;\n\n\tfunction log(tag, value)\n\t{\n\t\tvar msg = tag + ': ' + toString(value);\n\t\tvar process = process || {};\n\t\tif (process.stdout)\n\t\t{\n\t\t\tprocess.stdout.write(msg);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconsole.log(msg);\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction crash(message)\n\t{\n\t\tthrow new Error(message);\n\t}\n\n\tfunction tracePath(tag, form)\n\t{\n\t\tif (localRuntime.debug)\n\t\t{\n\t\t\treturn localRuntime.debug.trace(tag, form);\n\t\t}\n\t\treturn form;\n\t}\n\n\tfunction watch(tag, value)\n\t{\n\t\tif (localRuntime.debug)\n\t\t{\n\t\t\tlocalRuntime.debug.watch(tag, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction watchSummary(tag, summarize, value)\n\t{\n\t\tif (localRuntime.debug)\n\t\t{\n\t\t\tlocalRuntime.debug.watch(tag, summarize(value));\n\t\t}\n\t\treturn value;\n\t}\n\n\treturn localRuntime.Native.Debug.values = {\n\t\tcrash: crash,\n\t\ttracePath: F2(tracePath),\n\t\tlog: F2(log),\n\t\twatch: F2(watch),\n\t\twatchSummary: F3(watchSummary)\n\t};\n};\n\nElm.Debug = Elm.Debug || {};\nElm.Debug.make = function (_elm) {\n   \"use strict\";\n   _elm.Debug = _elm.Debug || {};\n   if (_elm.Debug.values) return _elm.Debug.values;\n   var _U = Elm.Native.Utils.make(_elm),$Graphics$Collage = Elm.Graphics.Collage.make(_elm),$Native$Debug = Elm.Native.Debug.make(_elm);\n   var _op = {};\n   var trace = $Native$Debug.tracePath;\n   var watchSummary = $Native$Debug.watchSummary;\n   var watch = $Native$Debug.watch;\n   var crash = $Native$Debug.crash;\n   var log = $Native$Debug.log;\n   return _elm.Debug.values = {_op: _op,log: log,crash: crash,watch: watch,watchSummary: watchSummary,trace: trace};\n};\nElm.Result = Elm.Result || {};\nElm.Result.make = function (_elm) {\n   \"use strict\";\n   _elm.Result = _elm.Result || {};\n   if (_elm.Result.values) return _elm.Result.values;\n   var _U = Elm.Native.Utils.make(_elm),$Maybe = Elm.Maybe.make(_elm);\n   var _op = {};\n   var toMaybe = function (result) {    var _p0 = result;if (_p0.ctor === \"Ok\") {    return $Maybe.Just(_p0._0);} else {    return $Maybe.Nothing;}};\n   var withDefault = F2(function (def,result) {    var _p1 = result;if (_p1.ctor === \"Ok\") {    return _p1._0;} else {    return def;}});\n   var Err = function (a) {    return {ctor: \"Err\",_0: a};};\n   var andThen = F2(function (result,callback) {    var _p2 = result;if (_p2.ctor === \"Ok\") {    return callback(_p2._0);} else {    return Err(_p2._0);}});\n   var Ok = function (a) {    return {ctor: \"Ok\",_0: a};};\n   var map = F2(function (func,ra) {    var _p3 = ra;if (_p3.ctor === \"Ok\") {    return Ok(func(_p3._0));} else {    return Err(_p3._0);}});\n   var map2 = F3(function (func,ra,rb) {\n      var _p4 = {ctor: \"_Tuple2\",_0: ra,_1: rb};\n      if (_p4._0.ctor === \"Ok\") {\n            if (_p4._1.ctor === \"Ok\") {\n                  return Ok(A2(func,_p4._0._0,_p4._1._0));\n               } else {\n                  return Err(_p4._1._0);\n               }\n         } else {\n            return Err(_p4._0._0);\n         }\n   });\n   var map3 = F4(function (func,ra,rb,rc) {\n      var _p5 = {ctor: \"_Tuple3\",_0: ra,_1: rb,_2: rc};\n      if (_p5._0.ctor === \"Ok\") {\n            if (_p5._1.ctor === \"Ok\") {\n                  if (_p5._2.ctor === \"Ok\") {\n                        return Ok(A3(func,_p5._0._0,_p5._1._0,_p5._2._0));\n                     } else {\n                        return Err(_p5._2._0);\n                     }\n               } else {\n                  return Err(_p5._1._0);\n               }\n         } else {\n            return Err(_p5._0._0);\n         }\n   });\n   var map4 = F5(function (func,ra,rb,rc,rd) {\n      var _p6 = {ctor: \"_Tuple4\",_0: ra,_1: rb,_2: rc,_3: rd};\n      if (_p6._0.ctor === \"Ok\") {\n            if (_p6._1.ctor === \"Ok\") {\n                  if (_p6._2.ctor === \"Ok\") {\n                        if (_p6._3.ctor === \"Ok\") {\n                              return Ok(A4(func,_p6._0._0,_p6._1._0,_p6._2._0,_p6._3._0));\n                           } else {\n                              return Err(_p6._3._0);\n                           }\n                     } else {\n                        return Err(_p6._2._0);\n                     }\n               } else {\n                  return Err(_p6._1._0);\n               }\n         } else {\n            return Err(_p6._0._0);\n         }\n   });\n   var map5 = F6(function (func,ra,rb,rc,rd,re) {\n      var _p7 = {ctor: \"_Tuple5\",_0: ra,_1: rb,_2: rc,_3: rd,_4: re};\n      if (_p7._0.ctor === \"Ok\") {\n            if (_p7._1.ctor === \"Ok\") {\n                  if (_p7._2.ctor === \"Ok\") {\n                        if (_p7._3.ctor === \"Ok\") {\n                              if (_p7._4.ctor === \"Ok\") {\n                                    return Ok(A5(func,_p7._0._0,_p7._1._0,_p7._2._0,_p7._3._0,_p7._4._0));\n                                 } else {\n                                    return Err(_p7._4._0);\n                                 }\n                           } else {\n                              return Err(_p7._3._0);\n                           }\n                     } else {\n                        return Err(_p7._2._0);\n                     }\n               } else {\n                  return Err(_p7._1._0);\n               }\n         } else {\n            return Err(_p7._0._0);\n         }\n   });\n   var formatError = F2(function (f,result) {    var _p8 = result;if (_p8.ctor === \"Ok\") {    return Ok(_p8._0);} else {    return Err(f(_p8._0));}});\n   var fromMaybe = F2(function (err,maybe) {    var _p9 = maybe;if (_p9.ctor === \"Just\") {    return Ok(_p9._0);} else {    return Err(err);}});\n   return _elm.Result.values = {_op: _op\n                               ,withDefault: withDefault\n                               ,map: map\n                               ,map2: map2\n                               ,map3: map3\n                               ,map4: map4\n                               ,map5: map5\n                               ,andThen: andThen\n                               ,toMaybe: toMaybe\n                               ,fromMaybe: fromMaybe\n                               ,formatError: formatError\n                               ,Ok: Ok\n                               ,Err: Err};\n};\nElm.Native.Signal = {};\n\nElm.Native.Signal.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Signal = localRuntime.Native.Signal || {};\n\tif (localRuntime.Native.Signal.values)\n\t{\n\t\treturn localRuntime.Native.Signal.values;\n\t}\n\n\n\tvar Task = Elm.Native.Task.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\tfunction broadcastToKids(node, timestamp, update)\n\t{\n\t\tvar kids = node.kids;\n\t\tfor (var i = kids.length; i--; )\n\t\t{\n\t\t\tkids[i].notify(timestamp, update, node.id);\n\t\t}\n\t}\n\n\n\t// INPUT\n\n\tfunction input(name, base)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'input-' + name,\n\t\t\tvalue: base,\n\t\t\tparents: [],\n\t\t\tkids: []\n\t\t};\n\n\t\tnode.notify = function(timestamp, targetId, value) {\n\t\t\tvar update = targetId === node.id;\n\t\t\tif (update)\n\t\t\t{\n\t\t\t\tnode.value = value;\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t\treturn update;\n\t\t};\n\n\t\tlocalRuntime.inputs.push(node);\n\n\t\treturn node;\n\t}\n\n\tfunction constant(value)\n\t{\n\t\treturn input('constant', value);\n\t}\n\n\n\t// MAILBOX\n\n\tfunction mailbox(base)\n\t{\n\t\tvar signal = input('mailbox', base);\n\n\t\tfunction send(value) {\n\t\t\treturn Task.asyncFunction(function(callback) {\n\t\t\t\tlocalRuntime.setTimeout(function() {\n\t\t\t\t\tlocalRuntime.notify(signal.id, value);\n\t\t\t\t}, 0);\n\t\t\t\tcallback(Task.succeed(Utils.Tuple0));\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tsignal: signal,\n\t\t\taddress: {\n\t\t\t\tctor: 'Address',\n\t\t\t\t_0: send\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction sendMessage(message)\n\t{\n\t\tTask.perform(message._0);\n\t}\n\n\n\t// OUTPUT\n\n\tfunction output(name, handler, parent)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'output-' + name,\n\t\t\tparents: [parent],\n\t\t\tisOutput: true\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentUpdate)\n\t\t\t{\n\t\t\t\thandler(parent.value);\n\t\t\t}\n\t\t};\n\n\t\tparent.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// MAP\n\n\tfunction mapMany(refreshValue, args)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'map' + args.length,\n\t\t\tvalue: refreshValue(),\n\t\t\tparents: args,\n\t\t\tkids: []\n\t\t};\n\n\t\tvar numberOfParents = args.length;\n\t\tvar count = 0;\n\t\tvar update = false;\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\t++count;\n\n\t\t\tupdate = update || parentUpdate;\n\n\t\t\tif (count === numberOfParents)\n\t\t\t{\n\t\t\t\tif (update)\n\t\t\t\t{\n\t\t\t\t\tnode.value = refreshValue();\n\t\t\t\t}\n\t\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t\t\tupdate = false;\n\t\t\t\tcount = 0;\n\t\t\t}\n\t\t};\n\n\t\tfor (var i = numberOfParents; i--; )\n\t\t{\n\t\t\targs[i].kids.push(node);\n\t\t}\n\n\t\treturn node;\n\t}\n\n\n\tfunction map(func, a)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn func(a.value);\n\t\t}\n\t\treturn mapMany(refreshValue, [a]);\n\t}\n\n\n\tfunction map2(func, a, b)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn A2( func, a.value, b.value );\n\t\t}\n\t\treturn mapMany(refreshValue, [a, b]);\n\t}\n\n\n\tfunction map3(func, a, b, c)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn A3( func, a.value, b.value, c.value );\n\t\t}\n\t\treturn mapMany(refreshValue, [a, b, c]);\n\t}\n\n\n\tfunction map4(func, a, b, c, d)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn A4( func, a.value, b.value, c.value, d.value );\n\t\t}\n\t\treturn mapMany(refreshValue, [a, b, c, d]);\n\t}\n\n\n\tfunction map5(func, a, b, c, d, e)\n\t{\n\t\tfunction refreshValue()\n\t\t{\n\t\t\treturn A5( func, a.value, b.value, c.value, d.value, e.value );\n\t\t}\n\t\treturn mapMany(refreshValue, [a, b, c, d, e]);\n\t}\n\n\n\t// FOLD\n\n\tfunction foldp(update, state, signal)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'foldp',\n\t\t\tparents: [signal],\n\t\t\tkids: [],\n\t\t\tvalue: state\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentUpdate)\n\t\t\t{\n\t\t\t\tnode.value = A2( update, signal.value, node.value );\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, parentUpdate);\n\t\t};\n\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// TIME\n\n\tfunction timestamp(signal)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'timestamp',\n\t\t\tvalue: Utils.Tuple2(localRuntime.timer.programStart, signal.value),\n\t\t\tparents: [signal],\n\t\t\tkids: []\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentUpdate)\n\t\t\t{\n\t\t\t\tnode.value = Utils.Tuple2(timestamp, signal.value);\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, parentUpdate);\n\t\t};\n\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\tfunction delay(time, signal)\n\t{\n\t\tvar delayed = input('delay-input-' + time, signal.value);\n\n\t\tfunction handler(value)\n\t\t{\n\t\t\tsetTimeout(function() {\n\t\t\t\tlocalRuntime.notify(delayed.id, value);\n\t\t\t}, time);\n\t\t}\n\n\t\toutput('delay-output-' + time, handler, signal);\n\n\t\treturn delayed;\n\t}\n\n\n\t// MERGING\n\n\tfunction genericMerge(tieBreaker, leftStream, rightStream)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'merge',\n\t\t\tvalue: A2(tieBreaker, leftStream.value, rightStream.value),\n\t\t\tparents: [leftStream, rightStream],\n\t\t\tkids: []\n\t\t};\n\n\t\tvar left = { touched: false, update: false, value: null };\n\t\tvar right = { touched: false, update: false, value: null };\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentID === leftStream.id)\n\t\t\t{\n\t\t\t\tleft.touched = true;\n\t\t\t\tleft.update = parentUpdate;\n\t\t\t\tleft.value = leftStream.value;\n\t\t\t}\n\t\t\tif (parentID === rightStream.id)\n\t\t\t{\n\t\t\t\tright.touched = true;\n\t\t\t\tright.update = parentUpdate;\n\t\t\t\tright.value = rightStream.value;\n\t\t\t}\n\n\t\t\tif (left.touched && right.touched)\n\t\t\t{\n\t\t\t\tvar update = false;\n\t\t\t\tif (left.update && right.update)\n\t\t\t\t{\n\t\t\t\t\tnode.value = A2(tieBreaker, left.value, right.value);\n\t\t\t\t\tupdate = true;\n\t\t\t\t}\n\t\t\t\telse if (left.update)\n\t\t\t\t{\n\t\t\t\t\tnode.value = left.value;\n\t\t\t\t\tupdate = true;\n\t\t\t\t}\n\t\t\t\telse if (right.update)\n\t\t\t\t{\n\t\t\t\t\tnode.value = right.value;\n\t\t\t\t\tupdate = true;\n\t\t\t\t}\n\t\t\t\tleft.touched = false;\n\t\t\t\tright.touched = false;\n\n\t\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t\t}\n\t\t};\n\n\t\tleftStream.kids.push(node);\n\t\trightStream.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// FILTERING\n\n\tfunction filterMap(toMaybe, base, signal)\n\t{\n\t\tvar maybe = toMaybe(signal.value);\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'filterMap',\n\t\t\tvalue: maybe.ctor === 'Nothing' ? base : maybe._0,\n\t\t\tparents: [signal],\n\t\t\tkids: []\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tvar update = false;\n\t\t\tif (parentUpdate)\n\t\t\t{\n\t\t\t\tvar maybe = toMaybe(signal.value);\n\t\t\t\tif (maybe.ctor === 'Just')\n\t\t\t\t{\n\t\t\t\t\tupdate = true;\n\t\t\t\t\tnode.value = maybe._0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t};\n\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// SAMPLING\n\n\tfunction sampleOn(ticker, signal)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'sampleOn',\n\t\t\tvalue: signal.value,\n\t\t\tparents: [ticker, signal],\n\t\t\tkids: []\n\t\t};\n\n\t\tvar signalTouch = false;\n\t\tvar tickerTouch = false;\n\t\tvar tickerUpdate = false;\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tif (parentID === ticker.id)\n\t\t\t{\n\t\t\t\ttickerTouch = true;\n\t\t\t\ttickerUpdate = parentUpdate;\n\t\t\t}\n\t\t\tif (parentID === signal.id)\n\t\t\t{\n\t\t\t\tsignalTouch = true;\n\t\t\t}\n\n\t\t\tif (tickerTouch && signalTouch)\n\t\t\t{\n\t\t\t\tif (tickerUpdate)\n\t\t\t\t{\n\t\t\t\t\tnode.value = signal.value;\n\t\t\t\t}\n\t\t\t\ttickerTouch = false;\n\t\t\t\tsignalTouch = false;\n\n\t\t\t\tbroadcastToKids(node, timestamp, tickerUpdate);\n\t\t\t}\n\t\t};\n\n\t\tticker.kids.push(node);\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\t// DROP REPEATS\n\n\tfunction dropRepeats(signal)\n\t{\n\t\tvar node = {\n\t\t\tid: Utils.guid(),\n\t\t\tname: 'dropRepeats',\n\t\t\tvalue: signal.value,\n\t\t\tparents: [signal],\n\t\t\tkids: []\n\t\t};\n\n\t\tnode.notify = function(timestamp, parentUpdate, parentID)\n\t\t{\n\t\t\tvar update = false;\n\t\t\tif (parentUpdate && !Utils.eq(node.value, signal.value))\n\t\t\t{\n\t\t\t\tnode.value = signal.value;\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t\tbroadcastToKids(node, timestamp, update);\n\t\t};\n\n\t\tsignal.kids.push(node);\n\n\t\treturn node;\n\t}\n\n\n\treturn localRuntime.Native.Signal.values = {\n\t\tinput: input,\n\t\tconstant: constant,\n\t\tmailbox: mailbox,\n\t\tsendMessage: sendMessage,\n\t\toutput: output,\n\t\tmap: F2(map),\n\t\tmap2: F3(map2),\n\t\tmap3: F4(map3),\n\t\tmap4: F5(map4),\n\t\tmap5: F6(map5),\n\t\tfoldp: F3(foldp),\n\t\tgenericMerge: F3(genericMerge),\n\t\tfilterMap: F3(filterMap),\n\t\tsampleOn: F2(sampleOn),\n\t\tdropRepeats: dropRepeats,\n\t\ttimestamp: timestamp,\n\t\tdelay: F2(delay)\n\t};\n};\n\nElm.Native.Task = {};\n\nElm.Native.Task.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Task = localRuntime.Native.Task || {};\n\tif (localRuntime.Native.Task.values)\n\t{\n\t\treturn localRuntime.Native.Task.values;\n\t}\n\n\tvar Result = Elm.Result.make(localRuntime);\n\tvar Signal;\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\t// CONSTRUCTORS\n\n\tfunction succeed(value)\n\t{\n\t\treturn {\n\t\t\ttag: 'Succeed',\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tfunction fail(error)\n\t{\n\t\treturn {\n\t\t\ttag: 'Fail',\n\t\t\tvalue: error\n\t\t};\n\t}\n\n\tfunction asyncFunction(func)\n\t{\n\t\treturn {\n\t\t\ttag: 'Async',\n\t\t\tasyncFunction: func\n\t\t};\n\t}\n\n\tfunction andThen(task, callback)\n\t{\n\t\treturn {\n\t\t\ttag: 'AndThen',\n\t\t\ttask: task,\n\t\t\tcallback: callback\n\t\t};\n\t}\n\n\tfunction catch_(task, callback)\n\t{\n\t\treturn {\n\t\t\ttag: 'Catch',\n\t\t\ttask: task,\n\t\t\tcallback: callback\n\t\t};\n\t}\n\n\n\t// RUNNER\n\n\tfunction perform(task) {\n\t\trunTask({ task: task }, function() {});\n\t}\n\n\tfunction performSignal(name, signal)\n\t{\n\t\tvar workQueue = [];\n\n\t\tfunction onComplete()\n\t\t{\n\t\t\tworkQueue.shift();\n\n\t\t\tif (workQueue.length > 0)\n\t\t\t{\n\t\t\t\tvar task = workQueue[0];\n\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\trunTask(task, onComplete);\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\n\t\tfunction register(task)\n\t\t{\n\t\t\tvar root = { task: task };\n\t\t\tworkQueue.push(root);\n\t\t\tif (workQueue.length === 1)\n\t\t\t{\n\t\t\t\trunTask(root, onComplete);\n\t\t\t}\n\t\t}\n\n\t\tif (!Signal)\n\t\t{\n\t\t\tSignal = Elm.Native.Signal.make(localRuntime);\n\t\t}\n\t\tSignal.output('perform-tasks-' + name, register, signal);\n\n\t\tregister(signal.value);\n\n\t\treturn signal;\n\t}\n\n\tfunction mark(status, task)\n\t{\n\t\treturn { status: status, task: task };\n\t}\n\n\tfunction runTask(root, onComplete)\n\t{\n\t\tvar result = mark('runnable', root.task);\n\t\twhile (result.status === 'runnable')\n\t\t{\n\t\t\tresult = stepTask(onComplete, root, result.task);\n\t\t}\n\n\t\tif (result.status === 'done')\n\t\t{\n\t\t\troot.task = result.task;\n\t\t\tonComplete();\n\t\t}\n\n\t\tif (result.status === 'blocked')\n\t\t{\n\t\t\troot.task = result.task;\n\t\t}\n\t}\n\n\tfunction stepTask(onComplete, root, task)\n\t{\n\t\tvar tag = task.tag;\n\n\t\tif (tag === 'Succeed' || tag === 'Fail')\n\t\t{\n\t\t\treturn mark('done', task);\n\t\t}\n\n\t\tif (tag === 'Async')\n\t\t{\n\t\t\tvar placeHolder = {};\n\t\t\tvar couldBeSync = true;\n\t\t\tvar wasSync = false;\n\n\t\t\ttask.asyncFunction(function(result) {\n\t\t\t\tplaceHolder.tag = result.tag;\n\t\t\t\tplaceHolder.value = result.value;\n\t\t\t\tif (couldBeSync)\n\t\t\t\t{\n\t\t\t\t\twasSync = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\trunTask(root, onComplete);\n\t\t\t\t}\n\t\t\t});\n\t\t\tcouldBeSync = false;\n\t\t\treturn mark(wasSync ? 'done' : 'blocked', placeHolder);\n\t\t}\n\n\t\tif (tag === 'AndThen' || tag === 'Catch')\n\t\t{\n\t\t\tvar result = mark('runnable', task.task);\n\t\t\twhile (result.status === 'runnable')\n\t\t\t{\n\t\t\t\tresult = stepTask(onComplete, root, result.task);\n\t\t\t}\n\n\t\t\tif (result.status === 'done')\n\t\t\t{\n\t\t\t\tvar activeTask = result.task;\n\t\t\t\tvar activeTag = activeTask.tag;\n\n\t\t\t\tvar succeedChain = activeTag === 'Succeed' && tag === 'AndThen';\n\t\t\t\tvar failChain = activeTag === 'Fail' && tag === 'Catch';\n\n\t\t\t\treturn (succeedChain || failChain)\n\t\t\t\t\t? mark('runnable', task.callback(activeTask.value))\n\t\t\t\t\t: mark('runnable', activeTask);\n\t\t\t}\n\t\t\tif (result.status === 'blocked')\n\t\t\t{\n\t\t\t\treturn mark('blocked', {\n\t\t\t\t\ttag: tag,\n\t\t\t\t\ttask: result.task,\n\t\t\t\t\tcallback: task.callback\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// THREADS\n\n\tfunction sleep(time) {\n\t\treturn asyncFunction(function(callback) {\n\t\t\tsetTimeout(function() {\n\t\t\t\tcallback(succeed(Utils.Tuple0));\n\t\t\t}, time);\n\t\t});\n\t}\n\n\tfunction spawn(task) {\n\t\treturn asyncFunction(function(callback) {\n\t\t\tvar id = setTimeout(function() {\n\t\t\t\tperform(task);\n\t\t\t}, 0);\n\t\t\tcallback(succeed(id));\n\t\t});\n\t}\n\n\n\treturn localRuntime.Native.Task.values = {\n\t\tsucceed: succeed,\n\t\tfail: fail,\n\t\tasyncFunction: asyncFunction,\n\t\tandThen: F2(andThen),\n\t\tcatch_: F2(catch_),\n\t\tperform: perform,\n\t\tperformSignal: performSignal,\n\t\tspawn: spawn,\n\t\tsleep: sleep\n\t};\n};\n\nElm.Task = Elm.Task || {};\nElm.Task.make = function (_elm) {\n   \"use strict\";\n   _elm.Task = _elm.Task || {};\n   if (_elm.Task.values) return _elm.Task.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Task = Elm.Native.Task.make(_elm),\n   $Result = Elm.Result.make(_elm);\n   var _op = {};\n   var sleep = $Native$Task.sleep;\n   var spawn = $Native$Task.spawn;\n   var ThreadID = function (a) {    return {ctor: \"ThreadID\",_0: a};};\n   var onError = $Native$Task.catch_;\n   var andThen = $Native$Task.andThen;\n   var fail = $Native$Task.fail;\n   var mapError = F2(function (f,task) {    return A2(onError,task,function (err) {    return fail(f(err));});});\n   var succeed = $Native$Task.succeed;\n   var map = F2(function (func,taskA) {    return A2(andThen,taskA,function (a) {    return succeed(func(a));});});\n   var map2 = F3(function (func,taskA,taskB) {\n      return A2(andThen,taskA,function (a) {    return A2(andThen,taskB,function (b) {    return succeed(A2(func,a,b));});});\n   });\n   var map3 = F4(function (func,taskA,taskB,taskC) {\n      return A2(andThen,\n      taskA,\n      function (a) {\n         return A2(andThen,taskB,function (b) {    return A2(andThen,taskC,function (c) {    return succeed(A3(func,a,b,c));});});\n      });\n   });\n   var map4 = F5(function (func,taskA,taskB,taskC,taskD) {\n      return A2(andThen,\n      taskA,\n      function (a) {\n         return A2(andThen,\n         taskB,\n         function (b) {\n            return A2(andThen,taskC,function (c) {    return A2(andThen,taskD,function (d) {    return succeed(A4(func,a,b,c,d));});});\n         });\n      });\n   });\n   var map5 = F6(function (func,taskA,taskB,taskC,taskD,taskE) {\n      return A2(andThen,\n      taskA,\n      function (a) {\n         return A2(andThen,\n         taskB,\n         function (b) {\n            return A2(andThen,\n            taskC,\n            function (c) {\n               return A2(andThen,taskD,function (d) {    return A2(andThen,taskE,function (e) {    return succeed(A5(func,a,b,c,d,e));});});\n            });\n         });\n      });\n   });\n   var andMap = F2(function (taskFunc,taskValue) {\n      return A2(andThen,taskFunc,function (func) {    return A2(andThen,taskValue,function (value) {    return succeed(func(value));});});\n   });\n   var sequence = function (tasks) {\n      var _p0 = tasks;\n      if (_p0.ctor === \"[]\") {\n            return succeed(_U.list([]));\n         } else {\n            return A3(map2,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);}),_p0._0,sequence(_p0._1));\n         }\n   };\n   var toMaybe = function (task) {    return A2(onError,A2(map,$Maybe.Just,task),function (_p1) {    return succeed($Maybe.Nothing);});};\n   var fromMaybe = F2(function ($default,maybe) {    var _p2 = maybe;if (_p2.ctor === \"Just\") {    return succeed(_p2._0);} else {    return fail($default);}});\n   var toResult = function (task) {    return A2(onError,A2(map,$Result.Ok,task),function (msg) {    return succeed($Result.Err(msg));});};\n   var fromResult = function (result) {    var _p3 = result;if (_p3.ctor === \"Ok\") {    return succeed(_p3._0);} else {    return fail(_p3._0);}};\n   var Task = {ctor: \"Task\"};\n   return _elm.Task.values = {_op: _op\n                             ,succeed: succeed\n                             ,fail: fail\n                             ,map: map\n                             ,map2: map2\n                             ,map3: map3\n                             ,map4: map4\n                             ,map5: map5\n                             ,andMap: andMap\n                             ,sequence: sequence\n                             ,andThen: andThen\n                             ,onError: onError\n                             ,mapError: mapError\n                             ,toMaybe: toMaybe\n                             ,fromMaybe: fromMaybe\n                             ,toResult: toResult\n                             ,fromResult: fromResult\n                             ,spawn: spawn\n                             ,sleep: sleep};\n};\nElm.Signal = Elm.Signal || {};\nElm.Signal.make = function (_elm) {\n   \"use strict\";\n   _elm.Signal = _elm.Signal || {};\n   if (_elm.Signal.values) return _elm.Signal.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Signal = Elm.Native.Signal.make(_elm),\n   $Task = Elm.Task.make(_elm);\n   var _op = {};\n   var send = F2(function (_p0,value) {\n      var _p1 = _p0;\n      return A2($Task.onError,_p1._0(value),function (_p2) {    return $Task.succeed({ctor: \"_Tuple0\"});});\n   });\n   var Message = function (a) {    return {ctor: \"Message\",_0: a};};\n   var message = F2(function (_p3,value) {    var _p4 = _p3;return Message(_p4._0(value));});\n   var mailbox = $Native$Signal.mailbox;\n   var Address = function (a) {    return {ctor: \"Address\",_0: a};};\n   var forwardTo = F2(function (_p5,f) {    var _p6 = _p5;return Address(function (x) {    return _p6._0(f(x));});});\n   var Mailbox = F2(function (a,b) {    return {address: a,signal: b};});\n   var sampleOn = $Native$Signal.sampleOn;\n   var dropRepeats = $Native$Signal.dropRepeats;\n   var filterMap = $Native$Signal.filterMap;\n   var filter = F3(function (isOk,base,signal) {\n      return A3(filterMap,function (value) {    return isOk(value) ? $Maybe.Just(value) : $Maybe.Nothing;},base,signal);\n   });\n   var merge = F2(function (left,right) {    return A3($Native$Signal.genericMerge,$Basics.always,left,right);});\n   var mergeMany = function (signalList) {\n      var _p7 = $List.reverse(signalList);\n      if (_p7.ctor === \"[]\") {\n            return _U.crashCase(\"Signal\",{start: {line: 184,column: 3},end: {line: 189,column: 40}},_p7)(\"mergeMany was given an empty list!\");\n         } else {\n            return A3($List.foldl,merge,_p7._0,_p7._1);\n         }\n   };\n   var foldp = $Native$Signal.foldp;\n   var map5 = $Native$Signal.map5;\n   var map4 = $Native$Signal.map4;\n   var map3 = $Native$Signal.map3;\n   var map2 = $Native$Signal.map2;\n   var map = $Native$Signal.map;\n   var constant = $Native$Signal.constant;\n   var Signal = {ctor: \"Signal\"};\n   return _elm.Signal.values = {_op: _op\n                               ,merge: merge\n                               ,mergeMany: mergeMany\n                               ,map: map\n                               ,map2: map2\n                               ,map3: map3\n                               ,map4: map4\n                               ,map5: map5\n                               ,constant: constant\n                               ,dropRepeats: dropRepeats\n                               ,filter: filter\n                               ,filterMap: filterMap\n                               ,sampleOn: sampleOn\n                               ,foldp: foldp\n                               ,mailbox: mailbox\n                               ,send: send\n                               ,message: message\n                               ,forwardTo: forwardTo\n                               ,Mailbox: Mailbox};\n};\nElm.Native.String = {};\n\nElm.Native.String.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.String = localRuntime.Native.String || {};\n\tif (localRuntime.Native.String.values)\n\t{\n\t\treturn localRuntime.Native.String.values;\n\t}\n\tif ('values' in Elm.Native.String)\n\t{\n\t\treturn localRuntime.Native.String.values = Elm.Native.String.values;\n\t}\n\n\n\tvar Char = Elm.Char.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\tvar Result = Elm.Result.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\tfunction isEmpty(str)\n\t{\n\t\treturn str.length === 0;\n\t}\n\tfunction cons(chr, str)\n\t{\n\t\treturn chr + str;\n\t}\n\tfunction uncons(str)\n\t{\n\t\tvar hd = str[0];\n\t\tif (hd)\n\t\t{\n\t\t\treturn Maybe.Just(Utils.Tuple2(Utils.chr(hd), str.slice(1)));\n\t\t}\n\t\treturn Maybe.Nothing;\n\t}\n\tfunction append(a, b)\n\t{\n\t\treturn a + b;\n\t}\n\tfunction concat(strs)\n\t{\n\t\treturn List.toArray(strs).join('');\n\t}\n\tfunction length(str)\n\t{\n\t\treturn str.length;\n\t}\n\tfunction map(f, str)\n\t{\n\t\tvar out = str.split('');\n\t\tfor (var i = out.length; i--; )\n\t\t{\n\t\t\tout[i] = f(Utils.chr(out[i]));\n\t\t}\n\t\treturn out.join('');\n\t}\n\tfunction filter(pred, str)\n\t{\n\t\treturn str.split('').map(Utils.chr).filter(pred).join('');\n\t}\n\tfunction reverse(str)\n\t{\n\t\treturn str.split('').reverse().join('');\n\t}\n\tfunction foldl(f, b, str)\n\t{\n\t\tvar len = str.length;\n\t\tfor (var i = 0; i < len; ++i)\n\t\t{\n\t\t\tb = A2(f, Utils.chr(str[i]), b);\n\t\t}\n\t\treturn b;\n\t}\n\tfunction foldr(f, b, str)\n\t{\n\t\tfor (var i = str.length; i--; )\n\t\t{\n\t\t\tb = A2(f, Utils.chr(str[i]), b);\n\t\t}\n\t\treturn b;\n\t}\n\tfunction split(sep, str)\n\t{\n\t\treturn List.fromArray(str.split(sep));\n\t}\n\tfunction join(sep, strs)\n\t{\n\t\treturn List.toArray(strs).join(sep);\n\t}\n\tfunction repeat(n, str)\n\t{\n\t\tvar result = '';\n\t\twhile (n > 0)\n\t\t{\n\t\t\tif (n & 1)\n\t\t\t{\n\t\t\t\tresult += str;\n\t\t\t}\n\t\t\tn >>= 1, str += str;\n\t\t}\n\t\treturn result;\n\t}\n\tfunction slice(start, end, str)\n\t{\n\t\treturn str.slice(start, end);\n\t}\n\tfunction left(n, str)\n\t{\n\t\treturn n < 1 ? '' : str.slice(0, n);\n\t}\n\tfunction right(n, str)\n\t{\n\t\treturn n < 1 ? '' : str.slice(-n);\n\t}\n\tfunction dropLeft(n, str)\n\t{\n\t\treturn n < 1 ? str : str.slice(n);\n\t}\n\tfunction dropRight(n, str)\n\t{\n\t\treturn n < 1 ? str : str.slice(0, -n);\n\t}\n\tfunction pad(n, chr, str)\n\t{\n\t\tvar half = (n - str.length) / 2;\n\t\treturn repeat(Math.ceil(half), chr) + str + repeat(half | 0, chr);\n\t}\n\tfunction padRight(n, chr, str)\n\t{\n\t\treturn str + repeat(n - str.length, chr);\n\t}\n\tfunction padLeft(n, chr, str)\n\t{\n\t\treturn repeat(n - str.length, chr) + str;\n\t}\n\n\tfunction trim(str)\n\t{\n\t\treturn str.trim();\n\t}\n\tfunction trimLeft(str)\n\t{\n\t\treturn str.replace(/^\\s+/, '');\n\t}\n\tfunction trimRight(str)\n\t{\n\t\treturn str.replace(/\\s+$/, '');\n\t}\n\n\tfunction words(str)\n\t{\n\t\treturn List.fromArray(str.trim().split(/\\s+/g));\n\t}\n\tfunction lines(str)\n\t{\n\t\treturn List.fromArray(str.split(/\\r\\n|\\r|\\n/g));\n\t}\n\n\tfunction toUpper(str)\n\t{\n\t\treturn str.toUpperCase();\n\t}\n\tfunction toLower(str)\n\t{\n\t\treturn str.toLowerCase();\n\t}\n\n\tfunction any(pred, str)\n\t{\n\t\tfor (var i = str.length; i--; )\n\t\t{\n\t\t\tif (pred(Utils.chr(str[i])))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tfunction all(pred, str)\n\t{\n\t\tfor (var i = str.length; i--; )\n\t\t{\n\t\t\tif (!pred(Utils.chr(str[i])))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction contains(sub, str)\n\t{\n\t\treturn str.indexOf(sub) > -1;\n\t}\n\tfunction startsWith(sub, str)\n\t{\n\t\treturn str.indexOf(sub) === 0;\n\t}\n\tfunction endsWith(sub, str)\n\t{\n\t\treturn str.length >= sub.length &&\n\t\t\tstr.lastIndexOf(sub) === str.length - sub.length;\n\t}\n\tfunction indexes(sub, str)\n\t{\n\t\tvar subLen = sub.length;\n\t\tvar i = 0;\n\t\tvar is = [];\n\t\twhile ((i = str.indexOf(sub, i)) > -1)\n\t\t{\n\t\t\tis.push(i);\n\t\t\ti = i + subLen;\n\t\t}\n\t\treturn List.fromArray(is);\n\t}\n\n\tfunction toInt(s)\n\t{\n\t\tvar len = s.length;\n\t\tif (len === 0)\n\t\t{\n\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to an Int\" );\n\t\t}\n\t\tvar start = 0;\n\t\tif (s[0] === '-')\n\t\t{\n\t\t\tif (len === 1)\n\t\t\t{\n\t\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to an Int\" );\n\t\t\t}\n\t\t\tstart = 1;\n\t\t}\n\t\tfor (var i = start; i < len; ++i)\n\t\t{\n\t\t\tif (!Char.isDigit(s[i]))\n\t\t\t{\n\t\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to an Int\" );\n\t\t\t}\n\t\t}\n\t\treturn Result.Ok(parseInt(s, 10));\n\t}\n\n\tfunction toFloat(s)\n\t{\n\t\tvar len = s.length;\n\t\tif (len === 0)\n\t\t{\n\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to a Float\" );\n\t\t}\n\t\tvar start = 0;\n\t\tif (s[0] === '-')\n\t\t{\n\t\t\tif (len === 1)\n\t\t\t{\n\t\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to a Float\" );\n\t\t\t}\n\t\t\tstart = 1;\n\t\t}\n\t\tvar dotCount = 0;\n\t\tfor (var i = start; i < len; ++i)\n\t\t{\n\t\t\tif (Char.isDigit(s[i]))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (s[i] === '.')\n\t\t\t{\n\t\t\t\tdotCount += 1;\n\t\t\t\tif (dotCount <= 1)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Result.Err(\"could not convert string '\" + s + \"' to a Float\" );\n\t\t}\n\t\treturn Result.Ok(parseFloat(s));\n\t}\n\n\tfunction toList(str)\n\t{\n\t\treturn List.fromArray(str.split('').map(Utils.chr));\n\t}\n\tfunction fromList(chars)\n\t{\n\t\treturn List.toArray(chars).join('');\n\t}\n\n\treturn Elm.Native.String.values = {\n\t\tisEmpty: isEmpty,\n\t\tcons: F2(cons),\n\t\tuncons: uncons,\n\t\tappend: F2(append),\n\t\tconcat: concat,\n\t\tlength: length,\n\t\tmap: F2(map),\n\t\tfilter: F2(filter),\n\t\treverse: reverse,\n\t\tfoldl: F3(foldl),\n\t\tfoldr: F3(foldr),\n\n\t\tsplit: F2(split),\n\t\tjoin: F2(join),\n\t\trepeat: F2(repeat),\n\n\t\tslice: F3(slice),\n\t\tleft: F2(left),\n\t\tright: F2(right),\n\t\tdropLeft: F2(dropLeft),\n\t\tdropRight: F2(dropRight),\n\n\t\tpad: F3(pad),\n\t\tpadLeft: F3(padLeft),\n\t\tpadRight: F3(padRight),\n\n\t\ttrim: trim,\n\t\ttrimLeft: trimLeft,\n\t\ttrimRight: trimRight,\n\n\t\twords: words,\n\t\tlines: lines,\n\n\t\ttoUpper: toUpper,\n\t\ttoLower: toLower,\n\n\t\tany: F2(any),\n\t\tall: F2(all),\n\n\t\tcontains: F2(contains),\n\t\tstartsWith: F2(startsWith),\n\t\tendsWith: F2(endsWith),\n\t\tindexes: F2(indexes),\n\n\t\ttoInt: toInt,\n\t\ttoFloat: toFloat,\n\t\ttoList: toList,\n\t\tfromList: fromList\n\t};\n};\n\nElm.Native.Char = {};\nElm.Native.Char.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Char = localRuntime.Native.Char || {};\n\tif (localRuntime.Native.Char.values)\n\t{\n\t\treturn localRuntime.Native.Char.values;\n\t}\n\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\treturn localRuntime.Native.Char.values = {\n\t\tfromCode: function(c) { return Utils.chr(String.fromCharCode(c)); },\n\t\ttoCode: function(c) { return c.charCodeAt(0); },\n\t\ttoUpper: function(c) { return Utils.chr(c.toUpperCase()); },\n\t\ttoLower: function(c) { return Utils.chr(c.toLowerCase()); },\n\t\ttoLocaleUpper: function(c) { return Utils.chr(c.toLocaleUpperCase()); },\n\t\ttoLocaleLower: function(c) { return Utils.chr(c.toLocaleLowerCase()); }\n\t};\n};\n\nElm.Char = Elm.Char || {};\nElm.Char.make = function (_elm) {\n   \"use strict\";\n   _elm.Char = _elm.Char || {};\n   if (_elm.Char.values) return _elm.Char.values;\n   var _U = Elm.Native.Utils.make(_elm),$Basics = Elm.Basics.make(_elm),$Native$Char = Elm.Native.Char.make(_elm);\n   var _op = {};\n   var fromCode = $Native$Char.fromCode;\n   var toCode = $Native$Char.toCode;\n   var toLocaleLower = $Native$Char.toLocaleLower;\n   var toLocaleUpper = $Native$Char.toLocaleUpper;\n   var toLower = $Native$Char.toLower;\n   var toUpper = $Native$Char.toUpper;\n   var isBetween = F3(function (low,high,$char) {    var code = toCode($char);return _U.cmp(code,toCode(low)) > -1 && _U.cmp(code,toCode(high)) < 1;});\n   var isUpper = A2(isBetween,_U.chr(\"A\"),_U.chr(\"Z\"));\n   var isLower = A2(isBetween,_U.chr(\"a\"),_U.chr(\"z\"));\n   var isDigit = A2(isBetween,_U.chr(\"0\"),_U.chr(\"9\"));\n   var isOctDigit = A2(isBetween,_U.chr(\"0\"),_U.chr(\"7\"));\n   var isHexDigit = function ($char) {\n      return isDigit($char) || (A3(isBetween,_U.chr(\"a\"),_U.chr(\"f\"),$char) || A3(isBetween,_U.chr(\"A\"),_U.chr(\"F\"),$char));\n   };\n   return _elm.Char.values = {_op: _op\n                             ,isUpper: isUpper\n                             ,isLower: isLower\n                             ,isDigit: isDigit\n                             ,isOctDigit: isOctDigit\n                             ,isHexDigit: isHexDigit\n                             ,toUpper: toUpper\n                             ,toLower: toLower\n                             ,toLocaleUpper: toLocaleUpper\n                             ,toLocaleLower: toLocaleLower\n                             ,toCode: toCode\n                             ,fromCode: fromCode};\n};\nElm.String = Elm.String || {};\nElm.String.make = function (_elm) {\n   \"use strict\";\n   _elm.String = _elm.String || {};\n   if (_elm.String.values) return _elm.String.values;\n   var _U = Elm.Native.Utils.make(_elm),$Maybe = Elm.Maybe.make(_elm),$Native$String = Elm.Native.String.make(_elm),$Result = Elm.Result.make(_elm);\n   var _op = {};\n   var fromList = $Native$String.fromList;\n   var toList = $Native$String.toList;\n   var toFloat = $Native$String.toFloat;\n   var toInt = $Native$String.toInt;\n   var indices = $Native$String.indexes;\n   var indexes = $Native$String.indexes;\n   var endsWith = $Native$String.endsWith;\n   var startsWith = $Native$String.startsWith;\n   var contains = $Native$String.contains;\n   var all = $Native$String.all;\n   var any = $Native$String.any;\n   var toLower = $Native$String.toLower;\n   var toUpper = $Native$String.toUpper;\n   var lines = $Native$String.lines;\n   var words = $Native$String.words;\n   var trimRight = $Native$String.trimRight;\n   var trimLeft = $Native$String.trimLeft;\n   var trim = $Native$String.trim;\n   var padRight = $Native$String.padRight;\n   var padLeft = $Native$String.padLeft;\n   var pad = $Native$String.pad;\n   var dropRight = $Native$String.dropRight;\n   var dropLeft = $Native$String.dropLeft;\n   var right = $Native$String.right;\n   var left = $Native$String.left;\n   var slice = $Native$String.slice;\n   var repeat = $Native$String.repeat;\n   var join = $Native$String.join;\n   var split = $Native$String.split;\n   var foldr = $Native$String.foldr;\n   var foldl = $Native$String.foldl;\n   var reverse = $Native$String.reverse;\n   var filter = $Native$String.filter;\n   var map = $Native$String.map;\n   var length = $Native$String.length;\n   var concat = $Native$String.concat;\n   var append = $Native$String.append;\n   var uncons = $Native$String.uncons;\n   var cons = $Native$String.cons;\n   var fromChar = function ($char) {    return A2(cons,$char,\"\");};\n   var isEmpty = $Native$String.isEmpty;\n   return _elm.String.values = {_op: _op\n                               ,isEmpty: isEmpty\n                               ,length: length\n                               ,reverse: reverse\n                               ,repeat: repeat\n                               ,cons: cons\n                               ,uncons: uncons\n                               ,fromChar: fromChar\n                               ,append: append\n                               ,concat: concat\n                               ,split: split\n                               ,join: join\n                               ,words: words\n                               ,lines: lines\n                               ,slice: slice\n                               ,left: left\n                               ,right: right\n                               ,dropLeft: dropLeft\n                               ,dropRight: dropRight\n                               ,contains: contains\n                               ,startsWith: startsWith\n                               ,endsWith: endsWith\n                               ,indexes: indexes\n                               ,indices: indices\n                               ,toInt: toInt\n                               ,toFloat: toFloat\n                               ,toList: toList\n                               ,fromList: fromList\n                               ,toUpper: toUpper\n                               ,toLower: toLower\n                               ,pad: pad\n                               ,padLeft: padLeft\n                               ,padRight: padRight\n                               ,trim: trim\n                               ,trimLeft: trimLeft\n                               ,trimRight: trimRight\n                               ,map: map\n                               ,filter: filter\n                               ,foldl: foldl\n                               ,foldr: foldr\n                               ,any: any\n                               ,all: all};\n};\nElm.Dict = Elm.Dict || {};\nElm.Dict.make = function (_elm) {\n   \"use strict\";\n   _elm.Dict = _elm.Dict || {};\n   if (_elm.Dict.values) return _elm.Dict.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Debug = Elm.Native.Debug.make(_elm),\n   $String = Elm.String.make(_elm);\n   var _op = {};\n   var foldr = F3(function (f,acc,t) {\n      foldr: while (true) {\n         var _p0 = t;\n         if (_p0.ctor === \"RBEmpty_elm_builtin\") {\n               return acc;\n            } else {\n               var _v1 = f,_v2 = A3(f,_p0._1,_p0._2,A3(foldr,f,acc,_p0._4)),_v3 = _p0._3;\n               f = _v1;\n               acc = _v2;\n               t = _v3;\n               continue foldr;\n            }\n      }\n   });\n   var keys = function (dict) {    return A3(foldr,F3(function (key,value,keyList) {    return A2($List._op[\"::\"],key,keyList);}),_U.list([]),dict);};\n   var values = function (dict) {    return A3(foldr,F3(function (key,value,valueList) {    return A2($List._op[\"::\"],value,valueList);}),_U.list([]),dict);};\n   var toList = function (dict) {\n      return A3(foldr,F3(function (key,value,list) {    return A2($List._op[\"::\"],{ctor: \"_Tuple2\",_0: key,_1: value},list);}),_U.list([]),dict);\n   };\n   var foldl = F3(function (f,acc,dict) {\n      foldl: while (true) {\n         var _p1 = dict;\n         if (_p1.ctor === \"RBEmpty_elm_builtin\") {\n               return acc;\n            } else {\n               var _v5 = f,_v6 = A3(f,_p1._1,_p1._2,A3(foldl,f,acc,_p1._3)),_v7 = _p1._4;\n               f = _v5;\n               acc = _v6;\n               dict = _v7;\n               continue foldl;\n            }\n      }\n   });\n   var reportRemBug = F4(function (msg,c,lgot,rgot) {\n      return $Native$Debug.crash($String.concat(_U.list([\"Internal red-black tree invariant violated, expected \"\n                                                        ,msg\n                                                        ,\" and got \"\n                                                        ,$Basics.toString(c)\n                                                        ,\"/\"\n                                                        ,lgot\n                                                        ,\"/\"\n                                                        ,rgot\n                                                        ,\"\\nPlease report this bug to <https://github.com/elm-lang/core/issues>\"])));\n   });\n   var isBBlack = function (dict) {\n      var _p2 = dict;\n      _v8_2: do {\n         if (_p2.ctor === \"RBNode_elm_builtin\") {\n               if (_p2._0.ctor === \"BBlack\") {\n                     return true;\n                  } else {\n                     break _v8_2;\n                  }\n            } else {\n               if (_p2._0.ctor === \"LBBlack\") {\n                     return true;\n                  } else {\n                     break _v8_2;\n                  }\n            }\n      } while (false);\n      return false;\n   };\n   var Same = {ctor: \"Same\"};\n   var Remove = {ctor: \"Remove\"};\n   var Insert = {ctor: \"Insert\"};\n   var sizeHelp = F2(function (n,dict) {\n      sizeHelp: while (true) {\n         var _p3 = dict;\n         if (_p3.ctor === \"RBEmpty_elm_builtin\") {\n               return n;\n            } else {\n               var _v10 = A2(sizeHelp,n + 1,_p3._4),_v11 = _p3._3;\n               n = _v10;\n               dict = _v11;\n               continue sizeHelp;\n            }\n      }\n   });\n   var size = function (dict) {    return A2(sizeHelp,0,dict);};\n   var get = F2(function (targetKey,dict) {\n      get: while (true) {\n         var _p4 = dict;\n         if (_p4.ctor === \"RBEmpty_elm_builtin\") {\n               return $Maybe.Nothing;\n            } else {\n               var _p5 = A2($Basics.compare,targetKey,_p4._1);\n               switch (_p5.ctor)\n               {case \"LT\": var _v14 = targetKey,_v15 = _p4._3;\n                    targetKey = _v14;\n                    dict = _v15;\n                    continue get;\n                  case \"EQ\": return $Maybe.Just(_p4._2);\n                  default: var _v16 = targetKey,_v17 = _p4._4;\n                    targetKey = _v16;\n                    dict = _v17;\n                    continue get;}\n            }\n      }\n   });\n   var member = F2(function (key,dict) {    var _p6 = A2(get,key,dict);if (_p6.ctor === \"Just\") {    return true;} else {    return false;}});\n   var maxWithDefault = F3(function (k,v,r) {\n      maxWithDefault: while (true) {\n         var _p7 = r;\n         if (_p7.ctor === \"RBEmpty_elm_builtin\") {\n               return {ctor: \"_Tuple2\",_0: k,_1: v};\n            } else {\n               var _v20 = _p7._1,_v21 = _p7._2,_v22 = _p7._4;\n               k = _v20;\n               v = _v21;\n               r = _v22;\n               continue maxWithDefault;\n            }\n      }\n   });\n   var RBEmpty_elm_builtin = function (a) {    return {ctor: \"RBEmpty_elm_builtin\",_0: a};};\n   var RBNode_elm_builtin = F5(function (a,b,c,d,e) {    return {ctor: \"RBNode_elm_builtin\",_0: a,_1: b,_2: c,_3: d,_4: e};});\n   var LBBlack = {ctor: \"LBBlack\"};\n   var LBlack = {ctor: \"LBlack\"};\n   var empty = RBEmpty_elm_builtin(LBlack);\n   var isEmpty = function (dict) {    return _U.eq(dict,empty);};\n   var map = F2(function (f,dict) {\n      var _p8 = dict;\n      if (_p8.ctor === \"RBEmpty_elm_builtin\") {\n            return RBEmpty_elm_builtin(LBlack);\n         } else {\n            var _p9 = _p8._1;\n            return A5(RBNode_elm_builtin,_p8._0,_p9,A2(f,_p9,_p8._2),A2(map,f,_p8._3),A2(map,f,_p8._4));\n         }\n   });\n   var NBlack = {ctor: \"NBlack\"};\n   var BBlack = {ctor: \"BBlack\"};\n   var Black = {ctor: \"Black\"};\n   var ensureBlackRoot = function (dict) {\n      var _p10 = dict;\n      if (_p10.ctor === \"RBNode_elm_builtin\" && _p10._0.ctor === \"Red\") {\n            return A5(RBNode_elm_builtin,Black,_p10._1,_p10._2,_p10._3,_p10._4);\n         } else {\n            return dict;\n         }\n   };\n   var blackish = function (t) {\n      var _p11 = t;\n      if (_p11.ctor === \"RBNode_elm_builtin\") {\n            var _p12 = _p11._0;\n            return _U.eq(_p12,Black) || _U.eq(_p12,BBlack);\n         } else {\n            return true;\n         }\n   };\n   var blacken = function (t) {\n      var _p13 = t;\n      if (_p13.ctor === \"RBEmpty_elm_builtin\") {\n            return RBEmpty_elm_builtin(LBlack);\n         } else {\n            return A5(RBNode_elm_builtin,Black,_p13._1,_p13._2,_p13._3,_p13._4);\n         }\n   };\n   var Red = {ctor: \"Red\"};\n   var moreBlack = function (color) {\n      var _p14 = color;\n      switch (_p14.ctor)\n      {case \"Black\": return BBlack;\n         case \"Red\": return Black;\n         case \"NBlack\": return Red;\n         default: return $Native$Debug.crash(\"Can\\'t make a double black node more black!\");}\n   };\n   var lessBlack = function (color) {\n      var _p15 = color;\n      switch (_p15.ctor)\n      {case \"BBlack\": return Black;\n         case \"Black\": return Red;\n         case \"Red\": return NBlack;\n         default: return $Native$Debug.crash(\"Can\\'t make a negative black node less black!\");}\n   };\n   var lessBlackTree = function (dict) {\n      var _p16 = dict;\n      if (_p16.ctor === \"RBNode_elm_builtin\") {\n            return A5(RBNode_elm_builtin,lessBlack(_p16._0),_p16._1,_p16._2,_p16._3,_p16._4);\n         } else {\n            return RBEmpty_elm_builtin(LBlack);\n         }\n   };\n   var balancedTree = function (col) {\n      return function (xk) {\n         return function (xv) {\n            return function (yk) {\n               return function (yv) {\n                  return function (zk) {\n                     return function (zv) {\n                        return function (a) {\n                           return function (b) {\n                              return function (c) {\n                                 return function (d) {\n                                    return A5(RBNode_elm_builtin,\n                                    lessBlack(col),\n                                    yk,\n                                    yv,\n                                    A5(RBNode_elm_builtin,Black,xk,xv,a,b),\n                                    A5(RBNode_elm_builtin,Black,zk,zv,c,d));\n                                 };\n                              };\n                           };\n                        };\n                     };\n                  };\n               };\n            };\n         };\n      };\n   };\n   var redden = function (t) {\n      var _p17 = t;\n      if (_p17.ctor === \"RBEmpty_elm_builtin\") {\n            return $Native$Debug.crash(\"can\\'t make a Leaf red\");\n         } else {\n            return A5(RBNode_elm_builtin,Red,_p17._1,_p17._2,_p17._3,_p17._4);\n         }\n   };\n   var balanceHelp = function (tree) {\n      var _p18 = tree;\n      _v31_6: do {\n         _v31_5: do {\n            _v31_4: do {\n               _v31_3: do {\n                  _v31_2: do {\n                     _v31_1: do {\n                        _v31_0: do {\n                           if (_p18.ctor === \"RBNode_elm_builtin\") {\n                                 if (_p18._3.ctor === \"RBNode_elm_builtin\") {\n                                       if (_p18._4.ctor === \"RBNode_elm_builtin\") {\n                                             switch (_p18._3._0.ctor)\n                                             {case \"Red\": switch (_p18._4._0.ctor)\n                                                  {case \"Red\": if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Red\") {\n                                                             break _v31_0;\n                                                          } else {\n                                                             if (_p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Red\") {\n                                                                   break _v31_1;\n                                                                } else {\n                                                                   if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Red\") {\n                                                                         break _v31_2;\n                                                                      } else {\n                                                                         if (_p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Red\") {\n                                                                               break _v31_3;\n                                                                            } else {\n                                                                               break _v31_6;\n                                                                            }\n                                                                      }\n                                                                }\n                                                          }\n                                                     case \"NBlack\": if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Red\") {\n                                                             break _v31_0;\n                                                          } else {\n                                                             if (_p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Red\") {\n                                                                   break _v31_1;\n                                                                } else {\n                                                                   if (_p18._0.ctor === \"BBlack\" && _p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Black\" && _p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Black\")\n                                                                   {\n                                                                         break _v31_4;\n                                                                      } else {\n                                                                         break _v31_6;\n                                                                      }\n                                                                }\n                                                          }\n                                                     default: if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Red\") {\n                                                             break _v31_0;\n                                                          } else {\n                                                             if (_p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Red\") {\n                                                                   break _v31_1;\n                                                                } else {\n                                                                   break _v31_6;\n                                                                }\n                                                          }}\n                                                case \"NBlack\": switch (_p18._4._0.ctor)\n                                                  {case \"Red\": if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Red\") {\n                                                             break _v31_2;\n                                                          } else {\n                                                             if (_p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Red\") {\n                                                                   break _v31_3;\n                                                                } else {\n                                                                   if (_p18._0.ctor === \"BBlack\" && _p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Black\" && _p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Black\")\n                                                                   {\n                                                                         break _v31_5;\n                                                                      } else {\n                                                                         break _v31_6;\n                                                                      }\n                                                                }\n                                                          }\n                                                     case \"NBlack\": if (_p18._0.ctor === \"BBlack\") {\n                                                             if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Black\" && _p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Black\")\n                                                             {\n                                                                   break _v31_4;\n                                                                } else {\n                                                                   if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Black\" && _p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Black\")\n                                                                   {\n                                                                         break _v31_5;\n                                                                      } else {\n                                                                         break _v31_6;\n                                                                      }\n                                                                }\n                                                          } else {\n                                                             break _v31_6;\n                                                          }\n                                                     default:\n                                                     if (_p18._0.ctor === \"BBlack\" && _p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Black\" && _p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Black\")\n                                                       {\n                                                             break _v31_5;\n                                                          } else {\n                                                             break _v31_6;\n                                                          }}\n                                                default: switch (_p18._4._0.ctor)\n                                                  {case \"Red\": if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Red\") {\n                                                             break _v31_2;\n                                                          } else {\n                                                             if (_p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Red\") {\n                                                                   break _v31_3;\n                                                                } else {\n                                                                   break _v31_6;\n                                                                }\n                                                          }\n                                                     case \"NBlack\":\n                                                     if (_p18._0.ctor === \"BBlack\" && _p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Black\" && _p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Black\")\n                                                       {\n                                                             break _v31_4;\n                                                          } else {\n                                                             break _v31_6;\n                                                          }\n                                                     default: break _v31_6;}}\n                                          } else {\n                                             switch (_p18._3._0.ctor)\n                                             {case \"Red\": if (_p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Red\") {\n                                                        break _v31_0;\n                                                     } else {\n                                                        if (_p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Red\") {\n                                                              break _v31_1;\n                                                           } else {\n                                                              break _v31_6;\n                                                           }\n                                                     }\n                                                case \"NBlack\":\n                                                if (_p18._0.ctor === \"BBlack\" && _p18._3._3.ctor === \"RBNode_elm_builtin\" && _p18._3._3._0.ctor === \"Black\" && _p18._3._4.ctor === \"RBNode_elm_builtin\" && _p18._3._4._0.ctor === \"Black\")\n                                                  {\n                                                        break _v31_5;\n                                                     } else {\n                                                        break _v31_6;\n                                                     }\n                                                default: break _v31_6;}\n                                          }\n                                    } else {\n                                       if (_p18._4.ctor === \"RBNode_elm_builtin\") {\n                                             switch (_p18._4._0.ctor)\n                                             {case \"Red\": if (_p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Red\") {\n                                                        break _v31_2;\n                                                     } else {\n                                                        if (_p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Red\") {\n                                                              break _v31_3;\n                                                           } else {\n                                                              break _v31_6;\n                                                           }\n                                                     }\n                                                case \"NBlack\":\n                                                if (_p18._0.ctor === \"BBlack\" && _p18._4._3.ctor === \"RBNode_elm_builtin\" && _p18._4._3._0.ctor === \"Black\" && _p18._4._4.ctor === \"RBNode_elm_builtin\" && _p18._4._4._0.ctor === \"Black\")\n                                                  {\n                                                        break _v31_4;\n                                                     } else {\n                                                        break _v31_6;\n                                                     }\n                                                default: break _v31_6;}\n                                          } else {\n                                             break _v31_6;\n                                          }\n                                    }\n                              } else {\n                                 break _v31_6;\n                              }\n                        } while (false);\n                        return balancedTree(_p18._0)(_p18._3._3._1)(_p18._3._3._2)(_p18._3._1)(_p18._3._2)(_p18._1)(_p18._2)(_p18._3._3._3)(_p18._3._3._4)(_p18._3._4)(_p18._4);\n                     } while (false);\n                     return balancedTree(_p18._0)(_p18._3._1)(_p18._3._2)(_p18._3._4._1)(_p18._3._4._2)(_p18._1)(_p18._2)(_p18._3._3)(_p18._3._4._3)(_p18._3._4._4)(_p18._4);\n                  } while (false);\n                  return balancedTree(_p18._0)(_p18._1)(_p18._2)(_p18._4._3._1)(_p18._4._3._2)(_p18._4._1)(_p18._4._2)(_p18._3)(_p18._4._3._3)(_p18._4._3._4)(_p18._4._4);\n               } while (false);\n               return balancedTree(_p18._0)(_p18._1)(_p18._2)(_p18._4._1)(_p18._4._2)(_p18._4._4._1)(_p18._4._4._2)(_p18._3)(_p18._4._3)(_p18._4._4._3)(_p18._4._4._4);\n            } while (false);\n            return A5(RBNode_elm_builtin,\n            Black,\n            _p18._4._3._1,\n            _p18._4._3._2,\n            A5(RBNode_elm_builtin,Black,_p18._1,_p18._2,_p18._3,_p18._4._3._3),\n            A5(balance,Black,_p18._4._1,_p18._4._2,_p18._4._3._4,redden(_p18._4._4)));\n         } while (false);\n         return A5(RBNode_elm_builtin,\n         Black,\n         _p18._3._4._1,\n         _p18._3._4._2,\n         A5(balance,Black,_p18._3._1,_p18._3._2,redden(_p18._3._3),_p18._3._4._3),\n         A5(RBNode_elm_builtin,Black,_p18._1,_p18._2,_p18._3._4._4,_p18._4));\n      } while (false);\n      return tree;\n   };\n   var balance = F5(function (c,k,v,l,r) {    var tree = A5(RBNode_elm_builtin,c,k,v,l,r);return blackish(tree) ? balanceHelp(tree) : tree;});\n   var bubble = F5(function (c,k,v,l,r) {\n      return isBBlack(l) || isBBlack(r) ? A5(balance,moreBlack(c),k,v,lessBlackTree(l),lessBlackTree(r)) : A5(RBNode_elm_builtin,c,k,v,l,r);\n   });\n   var removeMax = F5(function (c,k,v,l,r) {\n      var _p19 = r;\n      if (_p19.ctor === \"RBEmpty_elm_builtin\") {\n            return A3(rem,c,l,r);\n         } else {\n            return A5(bubble,c,k,v,l,A5(removeMax,_p19._0,_p19._1,_p19._2,_p19._3,_p19._4));\n         }\n   });\n   var rem = F3(function (c,l,r) {\n      var _p20 = {ctor: \"_Tuple2\",_0: l,_1: r};\n      if (_p20._0.ctor === \"RBEmpty_elm_builtin\") {\n            if (_p20._1.ctor === \"RBEmpty_elm_builtin\") {\n                  var _p21 = c;\n                  switch (_p21.ctor)\n                  {case \"Red\": return RBEmpty_elm_builtin(LBlack);\n                     case \"Black\": return RBEmpty_elm_builtin(LBBlack);\n                     default: return $Native$Debug.crash(\"cannot have bblack or nblack nodes at this point\");}\n               } else {\n                  var _p24 = _p20._1._0;\n                  var _p23 = _p20._0._0;\n                  var _p22 = {ctor: \"_Tuple3\",_0: c,_1: _p23,_2: _p24};\n                  if (_p22.ctor === \"_Tuple3\" && _p22._0.ctor === \"Black\" && _p22._1.ctor === \"LBlack\" && _p22._2.ctor === \"Red\") {\n                        return A5(RBNode_elm_builtin,Black,_p20._1._1,_p20._1._2,_p20._1._3,_p20._1._4);\n                     } else {\n                        return A4(reportRemBug,\"Black/LBlack/Red\",c,$Basics.toString(_p23),$Basics.toString(_p24));\n                     }\n               }\n         } else {\n            if (_p20._1.ctor === \"RBEmpty_elm_builtin\") {\n                  var _p27 = _p20._1._0;\n                  var _p26 = _p20._0._0;\n                  var _p25 = {ctor: \"_Tuple3\",_0: c,_1: _p26,_2: _p27};\n                  if (_p25.ctor === \"_Tuple3\" && _p25._0.ctor === \"Black\" && _p25._1.ctor === \"Red\" && _p25._2.ctor === \"LBlack\") {\n                        return A5(RBNode_elm_builtin,Black,_p20._0._1,_p20._0._2,_p20._0._3,_p20._0._4);\n                     } else {\n                        return A4(reportRemBug,\"Black/Red/LBlack\",c,$Basics.toString(_p26),$Basics.toString(_p27));\n                     }\n               } else {\n                  var _p31 = _p20._0._2;\n                  var _p30 = _p20._0._4;\n                  var _p29 = _p20._0._1;\n                  var l$ = A5(removeMax,_p20._0._0,_p29,_p31,_p20._0._3,_p30);\n                  var _p28 = A3(maxWithDefault,_p29,_p31,_p30);\n                  var k = _p28._0;\n                  var v = _p28._1;\n                  return A5(bubble,c,k,v,l$,r);\n               }\n         }\n   });\n   var update = F3(function (k,alter,dict) {\n      var up = function (dict) {\n         var _p32 = dict;\n         if (_p32.ctor === \"RBEmpty_elm_builtin\") {\n               var _p33 = alter($Maybe.Nothing);\n               if (_p33.ctor === \"Nothing\") {\n                     return {ctor: \"_Tuple2\",_0: Same,_1: empty};\n                  } else {\n                     return {ctor: \"_Tuple2\",_0: Insert,_1: A5(RBNode_elm_builtin,Red,k,_p33._0,empty,empty)};\n                  }\n            } else {\n               var _p44 = _p32._2;\n               var _p43 = _p32._4;\n               var _p42 = _p32._3;\n               var _p41 = _p32._1;\n               var _p40 = _p32._0;\n               var _p34 = A2($Basics.compare,k,_p41);\n               switch (_p34.ctor)\n               {case \"EQ\": var _p35 = alter($Maybe.Just(_p44));\n                    if (_p35.ctor === \"Nothing\") {\n                          return {ctor: \"_Tuple2\",_0: Remove,_1: A3(rem,_p40,_p42,_p43)};\n                       } else {\n                          return {ctor: \"_Tuple2\",_0: Same,_1: A5(RBNode_elm_builtin,_p40,_p41,_p35._0,_p42,_p43)};\n                       }\n                  case \"LT\": var _p36 = up(_p42);\n                    var flag = _p36._0;\n                    var newLeft = _p36._1;\n                    var _p37 = flag;\n                    switch (_p37.ctor)\n                    {case \"Same\": return {ctor: \"_Tuple2\",_0: Same,_1: A5(RBNode_elm_builtin,_p40,_p41,_p44,newLeft,_p43)};\n                       case \"Insert\": return {ctor: \"_Tuple2\",_0: Insert,_1: A5(balance,_p40,_p41,_p44,newLeft,_p43)};\n                       default: return {ctor: \"_Tuple2\",_0: Remove,_1: A5(bubble,_p40,_p41,_p44,newLeft,_p43)};}\n                  default: var _p38 = up(_p43);\n                    var flag = _p38._0;\n                    var newRight = _p38._1;\n                    var _p39 = flag;\n                    switch (_p39.ctor)\n                    {case \"Same\": return {ctor: \"_Tuple2\",_0: Same,_1: A5(RBNode_elm_builtin,_p40,_p41,_p44,_p42,newRight)};\n                       case \"Insert\": return {ctor: \"_Tuple2\",_0: Insert,_1: A5(balance,_p40,_p41,_p44,_p42,newRight)};\n                       default: return {ctor: \"_Tuple2\",_0: Remove,_1: A5(bubble,_p40,_p41,_p44,_p42,newRight)};}}\n            }\n      };\n      var _p45 = up(dict);\n      var flag = _p45._0;\n      var updatedDict = _p45._1;\n      var _p46 = flag;\n      switch (_p46.ctor)\n      {case \"Same\": return updatedDict;\n         case \"Insert\": return ensureBlackRoot(updatedDict);\n         default: return blacken(updatedDict);}\n   });\n   var insert = F3(function (key,value,dict) {    return A3(update,key,$Basics.always($Maybe.Just(value)),dict);});\n   var singleton = F2(function (key,value) {    return A3(insert,key,value,empty);});\n   var union = F2(function (t1,t2) {    return A3(foldl,insert,t2,t1);});\n   var fromList = function (assocs) {\n      return A3($List.foldl,F2(function (_p47,dict) {    var _p48 = _p47;return A3(insert,_p48._0,_p48._1,dict);}),empty,assocs);\n   };\n   var filter = F2(function (predicate,dictionary) {\n      var add = F3(function (key,value,dict) {    return A2(predicate,key,value) ? A3(insert,key,value,dict) : dict;});\n      return A3(foldl,add,empty,dictionary);\n   });\n   var intersect = F2(function (t1,t2) {    return A2(filter,F2(function (k,_p49) {    return A2(member,k,t2);}),t1);});\n   var partition = F2(function (predicate,dict) {\n      var add = F3(function (key,value,_p50) {\n         var _p51 = _p50;\n         var _p53 = _p51._1;\n         var _p52 = _p51._0;\n         return A2(predicate,key,value) ? {ctor: \"_Tuple2\",_0: A3(insert,key,value,_p52),_1: _p53} : {ctor: \"_Tuple2\",_0: _p52,_1: A3(insert,key,value,_p53)};\n      });\n      return A3(foldl,add,{ctor: \"_Tuple2\",_0: empty,_1: empty},dict);\n   });\n   var remove = F2(function (key,dict) {    return A3(update,key,$Basics.always($Maybe.Nothing),dict);});\n   var diff = F2(function (t1,t2) {    return A3(foldl,F3(function (k,v,t) {    return A2(remove,k,t);}),t1,t2);});\n   return _elm.Dict.values = {_op: _op\n                             ,empty: empty\n                             ,singleton: singleton\n                             ,insert: insert\n                             ,update: update\n                             ,isEmpty: isEmpty\n                             ,get: get\n                             ,remove: remove\n                             ,member: member\n                             ,size: size\n                             ,filter: filter\n                             ,partition: partition\n                             ,foldl: foldl\n                             ,foldr: foldr\n                             ,map: map\n                             ,union: union\n                             ,intersect: intersect\n                             ,diff: diff\n                             ,keys: keys\n                             ,values: values\n                             ,toList: toList\n                             ,fromList: fromList};\n};\nElm.Set = Elm.Set || {};\nElm.Set.make = function (_elm) {\n   \"use strict\";\n   _elm.Set = _elm.Set || {};\n   if (_elm.Set.values) return _elm.Set.values;\n   var _U = Elm.Native.Utils.make(_elm),$Basics = Elm.Basics.make(_elm),$Dict = Elm.Dict.make(_elm),$List = Elm.List.make(_elm);\n   var _op = {};\n   var foldr = F3(function (f,b,_p0) {    var _p1 = _p0;return A3($Dict.foldr,F3(function (k,_p2,b) {    return A2(f,k,b);}),b,_p1._0);});\n   var foldl = F3(function (f,b,_p3) {    var _p4 = _p3;return A3($Dict.foldl,F3(function (k,_p5,b) {    return A2(f,k,b);}),b,_p4._0);});\n   var toList = function (_p6) {    var _p7 = _p6;return $Dict.keys(_p7._0);};\n   var size = function (_p8) {    var _p9 = _p8;return $Dict.size(_p9._0);};\n   var member = F2(function (k,_p10) {    var _p11 = _p10;return A2($Dict.member,k,_p11._0);});\n   var isEmpty = function (_p12) {    var _p13 = _p12;return $Dict.isEmpty(_p13._0);};\n   var Set_elm_builtin = function (a) {    return {ctor: \"Set_elm_builtin\",_0: a};};\n   var empty = Set_elm_builtin($Dict.empty);\n   var singleton = function (k) {    return Set_elm_builtin(A2($Dict.singleton,k,{ctor: \"_Tuple0\"}));};\n   var insert = F2(function (k,_p14) {    var _p15 = _p14;return Set_elm_builtin(A3($Dict.insert,k,{ctor: \"_Tuple0\"},_p15._0));});\n   var fromList = function (xs) {    return A3($List.foldl,insert,empty,xs);};\n   var map = F2(function (f,s) {    return fromList(A2($List.map,f,toList(s)));});\n   var remove = F2(function (k,_p16) {    var _p17 = _p16;return Set_elm_builtin(A2($Dict.remove,k,_p17._0));});\n   var union = F2(function (_p19,_p18) {    var _p20 = _p19;var _p21 = _p18;return Set_elm_builtin(A2($Dict.union,_p20._0,_p21._0));});\n   var intersect = F2(function (_p23,_p22) {    var _p24 = _p23;var _p25 = _p22;return Set_elm_builtin(A2($Dict.intersect,_p24._0,_p25._0));});\n   var diff = F2(function (_p27,_p26) {    var _p28 = _p27;var _p29 = _p26;return Set_elm_builtin(A2($Dict.diff,_p28._0,_p29._0));});\n   var filter = F2(function (p,_p30) {    var _p31 = _p30;return Set_elm_builtin(A2($Dict.filter,F2(function (k,_p32) {    return p(k);}),_p31._0));});\n   var partition = F2(function (p,_p33) {\n      var _p34 = _p33;\n      var _p35 = A2($Dict.partition,F2(function (k,_p36) {    return p(k);}),_p34._0);\n      var p1 = _p35._0;\n      var p2 = _p35._1;\n      return {ctor: \"_Tuple2\",_0: Set_elm_builtin(p1),_1: Set_elm_builtin(p2)};\n   });\n   return _elm.Set.values = {_op: _op\n                            ,empty: empty\n                            ,singleton: singleton\n                            ,insert: insert\n                            ,remove: remove\n                            ,isEmpty: isEmpty\n                            ,member: member\n                            ,size: size\n                            ,foldl: foldl\n                            ,foldr: foldr\n                            ,map: map\n                            ,filter: filter\n                            ,partition: partition\n                            ,union: union\n                            ,intersect: intersect\n                            ,diff: diff\n                            ,toList: toList\n                            ,fromList: fromList};\n};\nElm.List = Elm.List || {};\nElm.List.Extra = Elm.List.Extra || {};\nElm.List.Extra.make = function (_elm) {\n   \"use strict\";\n   _elm.List = _elm.List || {};\n   _elm.List.Extra = _elm.List.Extra || {};\n   if (_elm.List.Extra.values) return _elm.List.Extra.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Set = Elm.Set.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var zip5 = $List.map5(F5(function (v0,v1,v2,v3,v4) {    return {ctor: \"_Tuple5\",_0: v0,_1: v1,_2: v2,_3: v3,_4: v4};}));\n   var zip4 = $List.map4(F4(function (v0,v1,v2,v3) {    return {ctor: \"_Tuple4\",_0: v0,_1: v1,_2: v2,_3: v3};}));\n   var zip3 = $List.map3(F3(function (v0,v1,v2) {    return {ctor: \"_Tuple3\",_0: v0,_1: v1,_2: v2};}));\n   var zip = $List.map2(F2(function (v0,v1) {    return {ctor: \"_Tuple2\",_0: v0,_1: v1};}));\n   var isPrefixOf = function (prefix) {\n      return function (_p0) {\n         return A2($List.all,$Basics.identity,A3($List.map2,F2(function (x,y) {    return _U.eq(x,y);}),prefix,_p0));\n      };\n   };\n   var isSuffixOf = F2(function (suffix,xs) {    return A2(isPrefixOf,$List.reverse(suffix),$List.reverse(xs));});\n   var selectSplit = function (xs) {\n      var _p1 = xs;\n      if (_p1.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            var _p5 = _p1._1;\n            var _p4 = _p1._0;\n            return A2($List._op[\"::\"],\n            {ctor: \"_Tuple3\",_0: _U.list([]),_1: _p4,_2: _p5},\n            A2($List.map,\n            function (_p2) {\n               var _p3 = _p2;\n               return {ctor: \"_Tuple3\",_0: A2($List._op[\"::\"],_p4,_p3._0),_1: _p3._1,_2: _p3._2};\n            },\n            selectSplit(_p5)));\n         }\n   };\n   var select = function (xs) {\n      var _p6 = xs;\n      if (_p6.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            var _p10 = _p6._1;\n            var _p9 = _p6._0;\n            return A2($List._op[\"::\"],\n            {ctor: \"_Tuple2\",_0: _p9,_1: _p10},\n            A2($List.map,function (_p7) {    var _p8 = _p7;return {ctor: \"_Tuple2\",_0: _p8._0,_1: A2($List._op[\"::\"],_p9,_p8._1)};},select(_p10)));\n         }\n   };\n   var tailsHelp = F2(function (e,list) {\n      var _p11 = list;\n      if (_p11.ctor === \"::\") {\n            var _p12 = _p11._0;\n            return A2($List._op[\"::\"],A2($List._op[\"::\"],e,_p12),A2($List._op[\"::\"],_p12,_p11._1));\n         } else {\n            return _U.list([]);\n         }\n   });\n   var tails = A2($List.foldr,tailsHelp,_U.list([_U.list([])]));\n   var isInfixOf = F2(function (infix,xs) {    return A2($List.any,isPrefixOf(infix),tails(xs));});\n   var inits = A2($List.foldr,\n   F2(function (e,acc) {    return A2($List._op[\"::\"],_U.list([]),A2($List.map,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);})(e),acc));}),\n   _U.list([_U.list([])]));\n   var groupByTransitive = F2(function (cmp,xs$) {\n      var _p13 = xs$;\n      if (_p13.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            if (_p13._1.ctor === \"[]\") {\n                  return _U.list([_U.list([_p13._0])]);\n               } else {\n                  var _p15 = _p13._0;\n                  var _p14 = A2(groupByTransitive,cmp,_p13._1);\n                  if (_p14.ctor === \"::\") {\n                        return A2(cmp,_p15,_p13._1._0) ? A2($List._op[\"::\"],A2($List._op[\"::\"],_p15,_p14._0),_p14._1) : A2($List._op[\"::\"],\n                        _U.list([_p15]),\n                        _p14);\n                     } else {\n                        return _U.list([]);\n                     }\n               }\n         }\n   });\n   var stripPrefix = F2(function (prefix,xs) {\n      var step = F2(function (e,m) {\n         var _p16 = m;\n         if (_p16.ctor === \"Nothing\") {\n               return $Maybe.Nothing;\n            } else {\n               if (_p16._0.ctor === \"[]\") {\n                     return $Maybe.Nothing;\n                  } else {\n                     return _U.eq(e,_p16._0._0) ? $Maybe.Just(_p16._0._1) : $Maybe.Nothing;\n                  }\n            }\n      });\n      return A3($List.foldl,step,$Maybe.Just(xs),prefix);\n   });\n   var dropWhileEnd = function (p) {\n      return A2($List.foldr,F2(function (x,xs) {    return p(x) && $List.isEmpty(xs) ? _U.list([]) : A2($List._op[\"::\"],x,xs);}),_U.list([]));\n   };\n   var takeWhileEnd = function (p) {\n      var step = F2(function (x,_p17) {\n         var _p18 = _p17;\n         var _p19 = _p18._0;\n         return p(x) && _p18._1 ? {ctor: \"_Tuple2\",_0: A2($List._op[\"::\"],x,_p19),_1: true} : {ctor: \"_Tuple2\",_0: _p19,_1: false};\n      });\n      return function (_p20) {\n         return $Basics.fst(A3($List.foldr,step,{ctor: \"_Tuple2\",_0: _U.list([]),_1: true},_p20));\n      };\n   };\n   var splitAt = F2(function (n,xs) {    return {ctor: \"_Tuple2\",_0: A2($List.take,n,xs),_1: A2($List.drop,n,xs)};});\n   var unfoldr = F2(function (f,seed) {\n      var _p21 = f(seed);\n      if (_p21.ctor === \"Nothing\") {\n            return _U.list([]);\n         } else {\n            return A2($List._op[\"::\"],_p21._0._0,A2(unfoldr,f,_p21._0._1));\n         }\n   });\n   var scanr1 = F2(function (f,xs$) {\n      var _p22 = xs$;\n      if (_p22.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            if (_p22._1.ctor === \"[]\") {\n                  return _U.list([_p22._0]);\n               } else {\n                  var _p23 = A2(scanr1,f,_p22._1);\n                  if (_p23.ctor === \"::\") {\n                        return A2($List._op[\"::\"],A2(f,_p22._0,_p23._0),_p23);\n                     } else {\n                        return _U.list([]);\n                     }\n               }\n         }\n   });\n   var scanr = F3(function (f,acc,xs$) {\n      var _p24 = xs$;\n      if (_p24.ctor === \"[]\") {\n            return _U.list([acc]);\n         } else {\n            var _p25 = A3(scanr,f,acc,_p24._1);\n            if (_p25.ctor === \"::\") {\n                  return A2($List._op[\"::\"],A2(f,_p24._0,_p25._0),_p25);\n               } else {\n                  return _U.list([]);\n               }\n         }\n   });\n   var scanl1 = F2(function (f,xs$) {\n      var _p26 = xs$;\n      if (_p26.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            return A3($List.scanl,f,_p26._0,_p26._1);\n         }\n   });\n   var foldr1 = F2(function (f,xs) {\n      var mf = F2(function (x,m) {\n         return $Maybe.Just(function () {    var _p27 = m;if (_p27.ctor === \"Nothing\") {    return x;} else {    return A2(f,x,_p27._0);}}());\n      });\n      return A3($List.foldr,mf,$Maybe.Nothing,xs);\n   });\n   var foldl1 = F2(function (f,xs) {\n      var mf = F2(function (x,m) {\n         return $Maybe.Just(function () {    var _p28 = m;if (_p28.ctor === \"Nothing\") {    return x;} else {    return A2(f,_p28._0,x);}}());\n      });\n      return A3($List.foldl,mf,$Maybe.Nothing,xs);\n   });\n   var uniqueHelp = F2(function (existing,remaining) {\n      uniqueHelp: while (true) {\n         var _p29 = remaining;\n         if (_p29.ctor === \"[]\") {\n               return _U.list([]);\n            } else {\n               var _p31 = _p29._1;\n               var _p30 = _p29._0;\n               if (A2($Set.member,_p30,existing)) {\n                     var _v18 = existing,_v19 = _p31;\n                     existing = _v18;\n                     remaining = _v19;\n                     continue uniqueHelp;\n                  } else return A2($List._op[\"::\"],_p30,A2(uniqueHelp,A2($Set.insert,_p30,existing),_p31));\n            }\n      }\n   });\n   var unique = function (list) {    return A2(uniqueHelp,$Set.empty,list);};\n   var interweaveHelp = F3(function (l1,l2,acc) {\n      interweaveHelp: while (true) {\n         var _p32 = {ctor: \"_Tuple2\",_0: l1,_1: l2};\n         _v20_1: do {\n            if (_p32._0.ctor === \"::\") {\n                  if (_p32._1.ctor === \"::\") {\n                        var _v21 = _p32._0._1,_v22 = _p32._1._1,_v23 = A2($Basics._op[\"++\"],acc,_U.list([_p32._0._0,_p32._1._0]));\n                        l1 = _v21;\n                        l2 = _v22;\n                        acc = _v23;\n                        continue interweaveHelp;\n                     } else {\n                        break _v20_1;\n                     }\n               } else {\n                  if (_p32._1.ctor === \"[]\") {\n                        break _v20_1;\n                     } else {\n                        return A2($Basics._op[\"++\"],acc,_p32._1);\n                     }\n               }\n         } while (false);\n         return A2($Basics._op[\"++\"],acc,_p32._0);\n      }\n   });\n   var interweave = F2(function (l1,l2) {    return A3(interweaveHelp,l1,l2,_U.list([]));});\n   var permutations = function (xs$) {\n      var _p33 = xs$;\n      if (_p33.ctor === \"[]\") {\n            return _U.list([_U.list([])]);\n         } else {\n            var f = function (_p34) {\n               var _p35 = _p34;\n               return A2($List.map,F2(function (x,y) {    return A2($List._op[\"::\"],x,y);})(_p35._0),permutations(_p35._1));\n            };\n            return A2($List.concatMap,f,select(_p33));\n         }\n   };\n   var isPermutationOf = F2(function (permut,xs) {    return A2($List.member,permut,permutations(xs));});\n   var subsequencesNonEmpty = function (xs) {\n      var _p36 = xs;\n      if (_p36.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            var _p37 = _p36._0;\n            var f = F2(function (ys,r) {    return A2($List._op[\"::\"],ys,A2($List._op[\"::\"],A2($List._op[\"::\"],_p37,ys),r));});\n            return A2($List._op[\"::\"],_U.list([_p37]),A3($List.foldr,f,_U.list([]),subsequencesNonEmpty(_p36._1)));\n         }\n   };\n   var subsequences = function (xs) {    return A2($List._op[\"::\"],_U.list([]),subsequencesNonEmpty(xs));};\n   var isSubsequenceOf = F2(function (subseq,xs) {    return A2($List.member,subseq,subsequences(xs));});\n   var transpose = function (ll) {\n      transpose: while (true) {\n         var _p38 = ll;\n         if (_p38.ctor === \"[]\") {\n               return _U.list([]);\n            } else {\n               if (_p38._0.ctor === \"[]\") {\n                     var _v28 = _p38._1;\n                     ll = _v28;\n                     continue transpose;\n                  } else {\n                     var _p39 = _p38._1;\n                     var tails = A2($List.filterMap,$List.tail,_p39);\n                     var heads = A2($List.filterMap,$List.head,_p39);\n                     return A2($List._op[\"::\"],A2($List._op[\"::\"],_p38._0._0,heads),transpose(A2($List._op[\"::\"],_p38._0._1,tails)));\n                  }\n            }\n      }\n   };\n   var intercalate = function (xs) {    return function (_p40) {    return $List.concat(A2($List.intersperse,xs,_p40));};};\n   var removeWhen = F2(function (pred,list) {    return A2($List.filter,function (_p41) {    return $Basics.not(pred(_p41));},list);});\n   var singleton = function (x) {    return _U.list([x]);};\n   var replaceIf = F3(function (predicate,replacement,list) {\n      return A2($List.map,function (item) {    return predicate(item) ? replacement : item;},list);\n   });\n   var findIndices = function (p) {\n      return function (_p42) {\n         return A2($List.map,\n         $Basics.fst,\n         A2($List.filter,\n         function (_p43) {\n            var _p44 = _p43;\n            return p(_p44._1);\n         },\n         A2($List.indexedMap,F2(function (v0,v1) {    return {ctor: \"_Tuple2\",_0: v0,_1: v1};}),_p42)));\n      };\n   };\n   var findIndex = function (p) {    return function (_p45) {    return $List.head(A2(findIndices,p,_p45));};};\n   var elemIndices = function (x) {    return findIndices(F2(function (x,y) {    return _U.eq(x,y);})(x));};\n   var elemIndex = function (x) {    return findIndex(F2(function (x,y) {    return _U.eq(x,y);})(x));};\n   var find = F2(function (predicate,list) {\n      find: while (true) {\n         var _p46 = list;\n         if (_p46.ctor === \"[]\") {\n               return $Maybe.Nothing;\n            } else {\n               var _p47 = _p46._0;\n               if (predicate(_p47)) return $Maybe.Just(_p47); else {\n                     var _v31 = predicate,_v32 = _p46._1;\n                     predicate = _v31;\n                     list = _v32;\n                     continue find;\n                  }\n            }\n      }\n   });\n   var notMember = function (x) {    return function (_p48) {    return $Basics.not(A2($List.member,x,_p48));};};\n   var andThen = $Basics.flip($List.concatMap);\n   var lift2 = F3(function (f,la,lb) {    return A2(andThen,la,function (a) {    return A2(andThen,lb,function (b) {    return _U.list([A2(f,a,b)]);});});});\n   var lift3 = F4(function (f,la,lb,lc) {\n      return A2(andThen,\n      la,\n      function (a) {\n         return A2(andThen,lb,function (b) {    return A2(andThen,lc,function (c) {    return _U.list([A3(f,a,b,c)]);});});\n      });\n   });\n   var lift4 = F5(function (f,la,lb,lc,ld) {\n      return A2(andThen,\n      la,\n      function (a) {\n         return A2(andThen,\n         lb,\n         function (b) {\n            return A2(andThen,lc,function (c) {    return A2(andThen,ld,function (d) {    return _U.list([A4(f,a,b,c,d)]);});});\n         });\n      });\n   });\n   var andMap = F2(function (fl,l) {    return A3($List.map2,F2(function (x,y) {    return x(y);}),fl,l);});\n   var dropDuplicates = function (list) {\n      var step = F2(function (next,_p49) {\n         var _p50 = _p49;\n         var _p52 = _p50._0;\n         var _p51 = _p50._1;\n         return A2($Set.member,next,_p52) ? {ctor: \"_Tuple2\",_0: _p52,_1: _p51} : {ctor: \"_Tuple2\"\n                                                                                  ,_0: A2($Set.insert,next,_p52)\n                                                                                  ,_1: A2($List._op[\"::\"],next,_p51)};\n      });\n      return $List.reverse($Basics.snd(A3($List.foldl,step,{ctor: \"_Tuple2\",_0: $Set.empty,_1: _U.list([])},list)));\n   };\n   var dropWhile = F2(function (predicate,list) {\n      dropWhile: while (true) {\n         var _p53 = list;\n         if (_p53.ctor === \"[]\") {\n               return _U.list([]);\n            } else {\n               if (predicate(_p53._0)) {\n                     var _v35 = predicate,_v36 = _p53._1;\n                     predicate = _v35;\n                     list = _v36;\n                     continue dropWhile;\n                  } else return list;\n            }\n      }\n   });\n   var takeWhile = F2(function (predicate,list) {\n      var _p54 = list;\n      if (_p54.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            var _p55 = _p54._0;\n            return predicate(_p55) ? A2($List._op[\"::\"],_p55,A2(takeWhile,predicate,_p54._1)) : _U.list([]);\n         }\n   });\n   var span = F2(function (p,xs) {    return {ctor: \"_Tuple2\",_0: A2(takeWhile,p,xs),_1: A2(dropWhile,p,xs)};});\n   var $break = function (p) {    return span(function (_p56) {    return $Basics.not(p(_p56));});};\n   var groupBy = F2(function (eq,xs$) {\n      var _p57 = xs$;\n      if (_p57.ctor === \"[]\") {\n            return _U.list([]);\n         } else {\n            var _p59 = _p57._0;\n            var _p58 = A2(span,eq(_p59),_p57._1);\n            var ys = _p58._0;\n            var zs = _p58._1;\n            return A2($List._op[\"::\"],A2($List._op[\"::\"],_p59,ys),A2(groupBy,eq,zs));\n         }\n   });\n   var group = groupBy(F2(function (x,y) {    return _U.eq(x,y);}));\n   var minimumBy = F2(function (f,ls) {\n      var minBy = F2(function (x,_p60) {\n         var _p61 = _p60;\n         var _p62 = _p61._1;\n         var fx = f(x);\n         return _U.cmp(fx,_p62) < 0 ? {ctor: \"_Tuple2\",_0: x,_1: fx} : {ctor: \"_Tuple2\",_0: _p61._0,_1: _p62};\n      });\n      var _p63 = ls;\n      if (_p63.ctor === \"::\") {\n            if (_p63._1.ctor === \"[]\") {\n                  return $Maybe.Just(_p63._0);\n               } else {\n                  var _p64 = _p63._0;\n                  return $Maybe.Just($Basics.fst(A3($List.foldl,minBy,{ctor: \"_Tuple2\",_0: _p64,_1: f(_p64)},_p63._1)));\n               }\n         } else {\n            return $Maybe.Nothing;\n         }\n   });\n   var maximumBy = F2(function (f,ls) {\n      var maxBy = F2(function (x,_p65) {\n         var _p66 = _p65;\n         var _p67 = _p66._1;\n         var fx = f(x);\n         return _U.cmp(fx,_p67) > 0 ? {ctor: \"_Tuple2\",_0: x,_1: fx} : {ctor: \"_Tuple2\",_0: _p66._0,_1: _p67};\n      });\n      var _p68 = ls;\n      if (_p68.ctor === \"::\") {\n            if (_p68._1.ctor === \"[]\") {\n                  return $Maybe.Just(_p68._0);\n               } else {\n                  var _p69 = _p68._0;\n                  return $Maybe.Just($Basics.fst(A3($List.foldl,maxBy,{ctor: \"_Tuple2\",_0: _p69,_1: f(_p69)},_p68._1)));\n               }\n         } else {\n            return $Maybe.Nothing;\n         }\n   });\n   var uncons = function (xs) {\n      var _p70 = xs;\n      if (_p70.ctor === \"[]\") {\n            return $Maybe.Nothing;\n         } else {\n            return $Maybe.Just({ctor: \"_Tuple2\",_0: _p70._0,_1: _p70._1});\n         }\n   };\n   var iterate = F2(function (f,x) {\n      var _p71 = f(x);\n      if (_p71.ctor === \"Just\") {\n            return A2($List._op[\"::\"],x,A2(iterate,f,_p71._0));\n         } else {\n            return _U.list([x]);\n         }\n   });\n   var getAt = F2(function (xs,idx) {    return $List.head(A2($List.drop,idx,xs));});\n   _op[\"!!\"] = getAt;\n   var init = function () {\n      var maybe = F2(function (d,f) {    return function (_p72) {    return A2($Maybe.withDefault,d,A2($Maybe.map,f,_p72));};});\n      return A2($List.foldr,\n      function (_p73) {\n         return A2(F2(function (x,y) {    return function (_p74) {    return x(y(_p74));};}),\n         $Maybe.Just,\n         A2(maybe,_U.list([]),F2(function (x,y) {    return A2($List._op[\"::\"],x,y);})(_p73)));\n      },\n      $Maybe.Nothing);\n   }();\n   var last = foldl1($Basics.flip($Basics.always));\n   return _elm.List.Extra.values = {_op: _op\n                                   ,last: last\n                                   ,init: init\n                                   ,getAt: getAt\n                                   ,uncons: uncons\n                                   ,minimumBy: minimumBy\n                                   ,maximumBy: maximumBy\n                                   ,andMap: andMap\n                                   ,andThen: andThen\n                                   ,takeWhile: takeWhile\n                                   ,dropWhile: dropWhile\n                                   ,dropDuplicates: dropDuplicates\n                                   ,replaceIf: replaceIf\n                                   ,singleton: singleton\n                                   ,removeWhen: removeWhen\n                                   ,iterate: iterate\n                                   ,intercalate: intercalate\n                                   ,transpose: transpose\n                                   ,subsequences: subsequences\n                                   ,permutations: permutations\n                                   ,interweave: interweave\n                                   ,unique: unique\n                                   ,foldl1: foldl1\n                                   ,foldr1: foldr1\n                                   ,scanl1: scanl1\n                                   ,scanr: scanr\n                                   ,scanr1: scanr1\n                                   ,unfoldr: unfoldr\n                                   ,splitAt: splitAt\n                                   ,takeWhileEnd: takeWhileEnd\n                                   ,dropWhileEnd: dropWhileEnd\n                                   ,span: span\n                                   ,$break: $break\n                                   ,stripPrefix: stripPrefix\n                                   ,group: group\n                                   ,groupBy: groupBy\n                                   ,groupByTransitive: groupByTransitive\n                                   ,inits: inits\n                                   ,tails: tails\n                                   ,select: select\n                                   ,selectSplit: selectSplit\n                                   ,isPrefixOf: isPrefixOf\n                                   ,isSuffixOf: isSuffixOf\n                                   ,isInfixOf: isInfixOf\n                                   ,isSubsequenceOf: isSubsequenceOf\n                                   ,isPermutationOf: isPermutationOf\n                                   ,notMember: notMember\n                                   ,find: find\n                                   ,elemIndex: elemIndex\n                                   ,elemIndices: elemIndices\n                                   ,findIndex: findIndex\n                                   ,findIndices: findIndices\n                                   ,zip: zip\n                                   ,zip3: zip3\n                                   ,zip4: zip4\n                                   ,zip5: zip5\n                                   ,lift2: lift2\n                                   ,lift3: lift3\n                                   ,lift4: lift4};\n};\nElm.Native.Array = {};\nElm.Native.Array.make = function(localRuntime) {\n\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Array = localRuntime.Native.Array || {};\n\tif (localRuntime.Native.Array.values)\n\t{\n\t\treturn localRuntime.Native.Array.values;\n\t}\n\tif ('values' in Elm.Native.Array)\n\t{\n\t\treturn localRuntime.Native.Array.values = Elm.Native.Array.values;\n\t}\n\n\tvar List = Elm.Native.List.make(localRuntime);\n\n\t// A RRB-Tree has two distinct data types.\n\t// Leaf -> \"height\"  is always 0\n\t//         \"table\"   is an array of elements\n\t// Node -> \"height\"  is always greater than 0\n\t//         \"table\"   is an array of child nodes\n\t//         \"lengths\" is an array of accumulated lengths of the child nodes\n\n\t// M is the maximal table size. 32 seems fast. E is the allowed increase\n\t// of search steps when concatting to find an index. Lower values will\n\t// decrease balancing, but will increase search steps.\n\tvar M = 32;\n\tvar E = 2;\n\n\t// An empty array.\n\tvar empty = {\n\t\tctor: '_Array',\n\t\theight: 0,\n\t\ttable: []\n\t};\n\n\n\tfunction get(i, array)\n\t{\n\t\tif (i < 0 || i >= length(array))\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'Index ' + i + ' is out of range. Check the length of ' +\n\t\t\t\t'your array first or use getMaybe or getWithDefault.');\n\t\t}\n\t\treturn unsafeGet(i, array);\n\t}\n\n\n\tfunction unsafeGet(i, array)\n\t{\n\t\tfor (var x = array.height; x > 0; x--)\n\t\t{\n\t\t\tvar slot = i >> (x * 5);\n\t\t\twhile (array.lengths[slot] <= i)\n\t\t\t{\n\t\t\t\tslot++;\n\t\t\t}\n\t\t\tif (slot > 0)\n\t\t\t{\n\t\t\t\ti -= array.lengths[slot - 1];\n\t\t\t}\n\t\t\tarray = array.table[slot];\n\t\t}\n\t\treturn array.table[i];\n\t}\n\n\n\t// Sets the value at the index i. Only the nodes leading to i will get\n\t// copied and updated.\n\tfunction set(i, item, array)\n\t{\n\t\tif (i < 0 || length(array) <= i)\n\t\t{\n\t\t\treturn array;\n\t\t}\n\t\treturn unsafeSet(i, item, array);\n\t}\n\n\n\tfunction unsafeSet(i, item, array)\n\t{\n\t\tarray = nodeCopy(array);\n\n\t\tif (array.height === 0)\n\t\t{\n\t\t\tarray.table[i] = item;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar slot = getSlot(i, array);\n\t\t\tif (slot > 0)\n\t\t\t{\n\t\t\t\ti -= array.lengths[slot - 1];\n\t\t\t}\n\t\t\tarray.table[slot] = unsafeSet(i, item, array.table[slot]);\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tfunction initialize(len, f)\n\t{\n\t\tif (len <= 0)\n\t\t{\n\t\t\treturn empty;\n\t\t}\n\t\tvar h = Math.floor( Math.log(len) / Math.log(M) );\n\t\treturn initialize_(f, h, 0, len);\n\t}\n\n\tfunction initialize_(f, h, from, to)\n\t{\n\t\tif (h === 0)\n\t\t{\n\t\t\tvar table = new Array((to - from) % (M + 1));\n\t\t\tfor (var i = 0; i < table.length; i++)\n\t\t\t{\n\t\t\t  table[i] = f(from + i);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: table\n\t\t\t};\n\t\t}\n\n\t\tvar step = Math.pow(M, h);\n\t\tvar table = new Array(Math.ceil((to - from) / step));\n\t\tvar lengths = new Array(table.length);\n\t\tfor (var i = 0; i < table.length; i++)\n\t\t{\n\t\t\ttable[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));\n\t\t\tlengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);\n\t\t}\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: table,\n\t\t\tlengths: lengths\n\t\t};\n\t}\n\n\tfunction fromList(list)\n\t{\n\t\tif (list === List.Nil)\n\t\t{\n\t\t\treturn empty;\n\t\t}\n\n\t\t// Allocate M sized blocks (table) and write list elements to it.\n\t\tvar table = new Array(M);\n\t\tvar nodes = [];\n\t\tvar i = 0;\n\n\t\twhile (list.ctor !== '[]')\n\t\t{\n\t\t\ttable[i] = list._0;\n\t\t\tlist = list._1;\n\t\t\ti++;\n\n\t\t\t// table is full, so we can push a leaf containing it into the\n\t\t\t// next node.\n\t\t\tif (i === M)\n\t\t\t{\n\t\t\t\tvar leaf = {\n\t\t\t\t\tctor: '_Array',\n\t\t\t\t\theight: 0,\n\t\t\t\t\ttable: table\n\t\t\t\t};\n\t\t\t\tfromListPush(leaf, nodes);\n\t\t\t\ttable = new Array(M);\n\t\t\t\ti = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Maybe there is something left on the table.\n\t\tif (i > 0)\n\t\t{\n\t\t\tvar leaf = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: table.splice(0, i)\n\t\t\t};\n\t\t\tfromListPush(leaf, nodes);\n\t\t}\n\n\t\t// Go through all of the nodes and eventually push them into higher nodes.\n\t\tfor (var h = 0; h < nodes.length - 1; h++)\n\t\t{\n\t\t\tif (nodes[h].table.length > 0)\n\t\t\t{\n\t\t\t\tfromListPush(nodes[h], nodes);\n\t\t\t}\n\t\t}\n\n\t\tvar head = nodes[nodes.length - 1];\n\t\tif (head.height > 0 && head.table.length === 1)\n\t\t{\n\t\t\treturn head.table[0];\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn head;\n\t\t}\n\t}\n\n\t// Push a node into a higher node as a child.\n\tfunction fromListPush(toPush, nodes)\n\t{\n\t\tvar h = toPush.height;\n\n\t\t// Maybe the node on this height does not exist.\n\t\tif (nodes.length === h)\n\t\t{\n\t\t\tvar node = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: h + 1,\n\t\t\t\ttable: [],\n\t\t\t\tlengths: []\n\t\t\t};\n\t\t\tnodes.push(node);\n\t\t}\n\n\t\tnodes[h].table.push(toPush);\n\t\tvar len = length(toPush);\n\t\tif (nodes[h].lengths.length > 0)\n\t\t{\n\t\t\tlen += nodes[h].lengths[nodes[h].lengths.length - 1];\n\t\t}\n\t\tnodes[h].lengths.push(len);\n\n\t\tif (nodes[h].table.length === M)\n\t\t{\n\t\t\tfromListPush(nodes[h], nodes);\n\t\t\tnodes[h] = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: h + 1,\n\t\t\t\ttable: [],\n\t\t\t\tlengths: []\n\t\t\t};\n\t\t}\n\t}\n\n\t// Pushes an item via push_ to the bottom right of a tree.\n\tfunction push(item, a)\n\t{\n\t\tvar pushed = push_(item, a);\n\t\tif (pushed !== null)\n\t\t{\n\t\t\treturn pushed;\n\t\t}\n\n\t\tvar newTree = create(item, a.height);\n\t\treturn siblise(a, newTree);\n\t}\n\n\t// Recursively tries to push an item to the bottom-right most\n\t// tree possible. If there is no space left for the item,\n\t// null will be returned.\n\tfunction push_(item, a)\n\t{\n\t\t// Handle resursion stop at leaf level.\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tif (a.table.length < M)\n\t\t\t{\n\t\t\t\tvar newA = {\n\t\t\t\t\tctor: '_Array',\n\t\t\t\t\theight: 0,\n\t\t\t\t\ttable: a.table.slice()\n\t\t\t\t};\n\t\t\t\tnewA.table.push(item);\n\t\t\t\treturn newA;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t  return null;\n\t\t\t}\n\t\t}\n\n\t\t// Recursively push\n\t\tvar pushed = push_(item, botRight(a));\n\n\t\t// There was space in the bottom right tree, so the slot will\n\t\t// be updated.\n\t\tif (pushed !== null)\n\t\t{\n\t\t\tvar newA = nodeCopy(a);\n\t\t\tnewA.table[newA.table.length - 1] = pushed;\n\t\t\tnewA.lengths[newA.lengths.length - 1]++;\n\t\t\treturn newA;\n\t\t}\n\n\t\t// When there was no space left, check if there is space left\n\t\t// for a new slot with a tree which contains only the item\n\t\t// at the bottom.\n\t\tif (a.table.length < M)\n\t\t{\n\t\t\tvar newSlot = create(item, a.height - 1);\n\t\t\tvar newA = nodeCopy(a);\n\t\t\tnewA.table.push(newSlot);\n\t\t\tnewA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));\n\t\t\treturn newA;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Converts an array into a list of elements.\n\tfunction toList(a)\n\t{\n\t\treturn toList_(List.Nil, a);\n\t}\n\n\tfunction toList_(list, a)\n\t{\n\t\tfor (var i = a.table.length - 1; i >= 0; i--)\n\t\t{\n\t\t\tlist =\n\t\t\t\ta.height === 0\n\t\t\t\t\t? List.Cons(a.table[i], list)\n\t\t\t\t\t: toList_(list, a.table[i]);\n\t\t}\n\t\treturn list;\n\t}\n\n\t// Maps a function over the elements of an array.\n\tfunction map(f, a)\n\t{\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: new Array(a.table.length)\n\t\t};\n\t\tif (a.height > 0)\n\t\t{\n\t\t\tnewA.lengths = a.lengths;\n\t\t}\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tnewA.table[i] =\n\t\t\t\ta.height === 0\n\t\t\t\t\t? f(a.table[i])\n\t\t\t\t\t: map(f, a.table[i]);\n\t\t}\n\t\treturn newA;\n\t}\n\n\t// Maps a function over the elements with their index as first argument.\n\tfunction indexedMap(f, a)\n\t{\n\t\treturn indexedMap_(f, a, 0);\n\t}\n\n\tfunction indexedMap_(f, a, from)\n\t{\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: new Array(a.table.length)\n\t\t};\n\t\tif (a.height > 0)\n\t\t{\n\t\t\tnewA.lengths = a.lengths;\n\t\t}\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tnewA.table[i] =\n\t\t\t\ta.height === 0\n\t\t\t\t\t? A2(f, from + i, a.table[i])\n\t\t\t\t\t: indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]);\n\t\t}\n\t\treturn newA;\n\t}\n\n\tfunction foldl(f, b, a)\n\t{\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t\t{\n\t\t\t\tb = A2(f, a.table[i], b);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t\t{\n\t\t\t\tb = foldl(f, b, a.table[i]);\n\t\t\t}\n\t\t}\n\t\treturn b;\n\t}\n\n\tfunction foldr(f, b, a)\n\t{\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tfor (var i = a.table.length; i--; )\n\t\t\t{\n\t\t\t\tb = A2(f, a.table[i], b);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i = a.table.length; i--; )\n\t\t\t{\n\t\t\t\tb = foldr(f, b, a.table[i]);\n\t\t\t}\n\t\t}\n\t\treturn b;\n\t}\n\n\t// TODO: currently, it slices the right, then the left. This can be\n\t// optimized.\n\tfunction slice(from, to, a)\n\t{\n\t\tif (from < 0)\n\t\t{\n\t\t\tfrom += length(a);\n\t\t}\n\t\tif (to < 0)\n\t\t{\n\t\t\tto += length(a);\n\t\t}\n\t\treturn sliceLeft(from, sliceRight(to, a));\n\t}\n\n\tfunction sliceRight(to, a)\n\t{\n\t\tif (to === length(a))\n\t\t{\n\t\t\treturn a;\n\t\t}\n\n\t\t// Handle leaf level.\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tvar newA = { ctor:'_Array', height:0 };\n\t\t\tnewA.table = a.table.slice(0, to);\n\t\t\treturn newA;\n\t\t}\n\n\t\t// Slice the right recursively.\n\t\tvar right = getSlot(to, a);\n\t\tvar sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);\n\n\t\t// Maybe the a node is not even needed, as sliced contains the whole slice.\n\t\tif (right === 0)\n\t\t{\n\t\t\treturn sliced;\n\t\t}\n\n\t\t// Create new node.\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: a.table.slice(0, right),\n\t\t\tlengths: a.lengths.slice(0, right)\n\t\t};\n\t\tif (sliced.table.length > 0)\n\t\t{\n\t\t\tnewA.table[right] = sliced;\n\t\t\tnewA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);\n\t\t}\n\t\treturn newA;\n\t}\n\n\tfunction sliceLeft(from, a)\n\t{\n\t\tif (from === 0)\n\t\t{\n\t\t\treturn a;\n\t\t}\n\n\t\t// Handle leaf level.\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tvar newA = { ctor:'_Array', height:0 };\n\t\t\tnewA.table = a.table.slice(from, a.table.length + 1);\n\t\t\treturn newA;\n\t\t}\n\n\t\t// Slice the left recursively.\n\t\tvar left = getSlot(from, a);\n\t\tvar sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);\n\n\t\t// Maybe the a node is not even needed, as sliced contains the whole slice.\n\t\tif (left === a.table.length - 1)\n\t\t{\n\t\t\treturn sliced;\n\t\t}\n\n\t\t// Create new node.\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: a.table.slice(left, a.table.length + 1),\n\t\t\tlengths: new Array(a.table.length - left)\n\t\t};\n\t\tnewA.table[0] = sliced;\n\t\tvar len = 0;\n\t\tfor (var i = 0; i < newA.table.length; i++)\n\t\t{\n\t\t\tlen += length(newA.table[i]);\n\t\t\tnewA.lengths[i] = len;\n\t\t}\n\n\t\treturn newA;\n\t}\n\n\t// Appends two trees.\n\tfunction append(a,b)\n\t{\n\t\tif (a.table.length === 0)\n\t\t{\n\t\t\treturn b;\n\t\t}\n\t\tif (b.table.length === 0)\n\t\t{\n\t\t\treturn a;\n\t\t}\n\n\t\tvar c = append_(a, b);\n\n\t\t// Check if both nodes can be crunshed together.\n\t\tif (c[0].table.length + c[1].table.length <= M)\n\t\t{\n\t\t\tif (c[0].table.length === 0)\n\t\t\t{\n\t\t\t\treturn c[1];\n\t\t\t}\n\t\t\tif (c[1].table.length === 0)\n\t\t\t{\n\t\t\t\treturn c[0];\n\t\t\t}\n\n\t\t\t// Adjust .table and .lengths\n\t\t\tc[0].table = c[0].table.concat(c[1].table);\n\t\t\tif (c[0].height > 0)\n\t\t\t{\n\t\t\t\tvar len = length(c[0]);\n\t\t\t\tfor (var i = 0; i < c[1].lengths.length; i++)\n\t\t\t\t{\n\t\t\t\t\tc[1].lengths[i] += len;\n\t\t\t\t}\n\t\t\t\tc[0].lengths = c[0].lengths.concat(c[1].lengths);\n\t\t\t}\n\n\t\t\treturn c[0];\n\t\t}\n\n\t\tif (c[0].height > 0)\n\t\t{\n\t\t\tvar toRemove = calcToRemove(a, b);\n\t\t\tif (toRemove > E)\n\t\t\t{\n\t\t\t\tc = shuffle(c[0], c[1], toRemove);\n\t\t\t}\n\t\t}\n\n\t\treturn siblise(c[0], c[1]);\n\t}\n\n\t// Returns an array of two nodes; right and left. One node _may_ be empty.\n\tfunction append_(a, b)\n\t{\n\t\tif (a.height === 0 && b.height === 0)\n\t\t{\n\t\t\treturn [a, b];\n\t\t}\n\n\t\tif (a.height !== 1 || b.height !== 1)\n\t\t{\n\t\t\tif (a.height === b.height)\n\t\t\t{\n\t\t\t\ta = nodeCopy(a);\n\t\t\t\tb = nodeCopy(b);\n\t\t\t\tvar appended = append_(botRight(a), botLeft(b));\n\n\t\t\t\tinsertRight(a, appended[1]);\n\t\t\t\tinsertLeft(b, appended[0]);\n\t\t\t}\n\t\t\telse if (a.height > b.height)\n\t\t\t{\n\t\t\t\ta = nodeCopy(a);\n\t\t\t\tvar appended = append_(botRight(a), b);\n\n\t\t\t\tinsertRight(a, appended[0]);\n\t\t\t\tb = parentise(appended[1], appended[1].height + 1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tb = nodeCopy(b);\n\t\t\t\tvar appended = append_(a, botLeft(b));\n\n\t\t\t\tvar left = appended[0].table.length === 0 ? 0 : 1;\n\t\t\t\tvar right = left === 0 ? 1 : 0;\n\t\t\t\tinsertLeft(b, appended[left]);\n\t\t\t\ta = parentise(appended[right], appended[right].height + 1);\n\t\t\t}\n\t\t}\n\n\t\t// Check if balancing is needed and return based on that.\n\t\tif (a.table.length === 0 || b.table.length === 0)\n\t\t{\n\t\t\treturn [a, b];\n\t\t}\n\n\t\tvar toRemove = calcToRemove(a, b);\n\t\tif (toRemove <= E)\n\t\t{\n\t\t\treturn [a, b];\n\t\t}\n\t\treturn shuffle(a, b, toRemove);\n\t}\n\n\t// Helperfunctions for append_. Replaces a child node at the side of the parent.\n\tfunction insertRight(parent, node)\n\t{\n\t\tvar index = parent.table.length - 1;\n\t\tparent.table[index] = node;\n\t\tparent.lengths[index] = length(node);\n\t\tparent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;\n\t}\n\n\tfunction insertLeft(parent, node)\n\t{\n\t\tif (node.table.length > 0)\n\t\t{\n\t\t\tparent.table[0] = node;\n\t\t\tparent.lengths[0] = length(node);\n\n\t\t\tvar len = length(parent.table[0]);\n\t\t\tfor (var i = 1; i < parent.lengths.length; i++)\n\t\t\t{\n\t\t\t\tlen += length(parent.table[i]);\n\t\t\t\tparent.lengths[i] = len;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tparent.table.shift();\n\t\t\tfor (var i = 1; i < parent.lengths.length; i++)\n\t\t\t{\n\t\t\t\tparent.lengths[i] = parent.lengths[i] - parent.lengths[0];\n\t\t\t}\n\t\t\tparent.lengths.shift();\n\t\t}\n\t}\n\n\t// Returns the extra search steps for E. Refer to the paper.\n\tfunction calcToRemove(a, b)\n\t{\n\t\tvar subLengths = 0;\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tsubLengths += a.table[i].table.length;\n\t\t}\n\t\tfor (var i = 0; i < b.table.length; i++)\n\t\t{\n\t\t\tsubLengths += b.table[i].table.length;\n\t\t}\n\n\t\tvar toRemove = a.table.length + b.table.length;\n\t\treturn toRemove - (Math.floor((subLengths - 1) / M) + 1);\n\t}\n\n\t// get2, set2 and saveSlot are helpers for accessing elements over two arrays.\n\tfunction get2(a, b, index)\n\t{\n\t\treturn index < a.length\n\t\t\t? a[index]\n\t\t\t: b[index - a.length];\n\t}\n\n\tfunction set2(a, b, index, value)\n\t{\n\t\tif (index < a.length)\n\t\t{\n\t\t\ta[index] = value;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tb[index - a.length] = value;\n\t\t}\n\t}\n\n\tfunction saveSlot(a, b, index, slot)\n\t{\n\t\tset2(a.table, b.table, index, slot);\n\n\t\tvar l = (index === 0 || index === a.lengths.length)\n\t\t\t? 0\n\t\t\t: get2(a.lengths, a.lengths, index - 1);\n\n\t\tset2(a.lengths, b.lengths, index, l + length(slot));\n\t}\n\n\t// Creates a node or leaf with a given length at their arrays for perfomance.\n\t// Is only used by shuffle.\n\tfunction createNode(h, length)\n\t{\n\t\tif (length < 0)\n\t\t{\n\t\t\tlength = 0;\n\t\t}\n\t\tvar a = {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: new Array(length)\n\t\t};\n\t\tif (h > 0)\n\t\t{\n\t\t\ta.lengths = new Array(length);\n\t\t}\n\t\treturn a;\n\t}\n\n\t// Returns an array of two balanced nodes.\n\tfunction shuffle(a, b, toRemove)\n\t{\n\t\tvar newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));\n\t\tvar newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));\n\n\t\t// Skip the slots with size M. More precise: copy the slot references\n\t\t// to the new node\n\t\tvar read = 0;\n\t\twhile (get2(a.table, b.table, read).table.length % M === 0)\n\t\t{\n\t\t\tset2(newA.table, newB.table, read, get2(a.table, b.table, read));\n\t\t\tset2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));\n\t\t\tread++;\n\t\t}\n\n\t\t// Pulling items from left to right, caching in a slot before writing\n\t\t// it into the new nodes.\n\t\tvar write = read;\n\t\tvar slot = new createNode(a.height - 1, 0);\n\t\tvar from = 0;\n\n\t\t// If the current slot is still containing data, then there will be at\n\t\t// least one more write, so we do not break this loop yet.\n\t\twhile (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove)\n\t\t{\n\t\t\t// Find out the max possible items for copying.\n\t\t\tvar source = get2(a.table, b.table, read);\n\t\t\tvar to = Math.min(M - slot.table.length, source.table.length);\n\n\t\t\t// Copy and adjust size table.\n\t\t\tslot.table = slot.table.concat(source.table.slice(from, to));\n\t\t\tif (slot.height > 0)\n\t\t\t{\n\t\t\t\tvar len = slot.lengths.length;\n\t\t\t\tfor (var i = len; i < len + to - from; i++)\n\t\t\t\t{\n\t\t\t\t\tslot.lengths[i] = length(slot.table[i]);\n\t\t\t\t\tslot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfrom += to;\n\n\t\t\t// Only proceed to next slots[i] if the current one was\n\t\t\t// fully copied.\n\t\t\tif (source.table.length <= to)\n\t\t\t{\n\t\t\t\tread++; from = 0;\n\t\t\t}\n\n\t\t\t// Only create a new slot if the current one is filled up.\n\t\t\tif (slot.table.length === M)\n\t\t\t{\n\t\t\t\tsaveSlot(newA, newB, write, slot);\n\t\t\t\tslot = createNode(a.height - 1, 0);\n\t\t\t\twrite++;\n\t\t\t}\n\t\t}\n\n\t\t// Cleanup after the loop. Copy the last slot into the new nodes.\n\t\tif (slot.table.length > 0)\n\t\t{\n\t\t\tsaveSlot(newA, newB, write, slot);\n\t\t\twrite++;\n\t\t}\n\n\t\t// Shift the untouched slots to the left\n\t\twhile (read < a.table.length + b.table.length )\n\t\t{\n\t\t\tsaveSlot(newA, newB, write, get2(a.table, b.table, read));\n\t\t\tread++;\n\t\t\twrite++;\n\t\t}\n\n\t\treturn [newA, newB];\n\t}\n\n\t// Navigation functions\n\tfunction botRight(a)\n\t{\n\t\treturn a.table[a.table.length - 1];\n\t}\n\tfunction botLeft(a)\n\t{\n\t\treturn a.table[0];\n\t}\n\n\t// Copies a node for updating. Note that you should not use this if\n\t// only updating only one of \"table\" or \"lengths\" for performance reasons.\n\tfunction nodeCopy(a)\n\t{\n\t\tvar newA = {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height,\n\t\t\ttable: a.table.slice()\n\t\t};\n\t\tif (a.height > 0)\n\t\t{\n\t\t\tnewA.lengths = a.lengths.slice();\n\t\t}\n\t\treturn newA;\n\t}\n\n\t// Returns how many items are in the tree.\n\tfunction length(array)\n\t{\n\t\tif (array.height === 0)\n\t\t{\n\t\t\treturn array.table.length;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn array.lengths[array.lengths.length - 1];\n\t\t}\n\t}\n\n\t// Calculates in which slot of \"table\" the item probably is, then\n\t// find the exact slot via forward searching in  \"lengths\". Returns the index.\n\tfunction getSlot(i, a)\n\t{\n\t\tvar slot = i >> (5 * a.height);\n\t\twhile (a.lengths[slot] <= i)\n\t\t{\n\t\t\tslot++;\n\t\t}\n\t\treturn slot;\n\t}\n\n\t// Recursively creates a tree with a given height containing\n\t// only the given item.\n\tfunction create(item, h)\n\t{\n\t\tif (h === 0)\n\t\t{\n\t\t\treturn {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: [item]\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: [create(item, h - 1)],\n\t\t\tlengths: [1]\n\t\t};\n\t}\n\n\t// Recursively creates a tree that contains the given tree.\n\tfunction parentise(tree, h)\n\t{\n\t\tif (h === tree.height)\n\t\t{\n\t\t\treturn tree;\n\t\t}\n\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: [parentise(tree, h - 1)],\n\t\t\tlengths: [length(tree)]\n\t\t};\n\t}\n\n\t// Emphasizes blood brotherhood beneath two trees.\n\tfunction siblise(a, b)\n\t{\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: a.height + 1,\n\t\t\ttable: [a, b],\n\t\t\tlengths: [length(a), length(a) + length(b)]\n\t\t};\n\t}\n\n\tfunction toJSArray(a)\n\t{\n\t\tvar jsArray = new Array(length(a));\n\t\ttoJSArray_(jsArray, 0, a);\n\t\treturn jsArray;\n\t}\n\n\tfunction toJSArray_(jsArray, i, a)\n\t{\n\t\tfor (var t = 0; t < a.table.length; t++)\n\t\t{\n\t\t\tif (a.height === 0)\n\t\t\t{\n\t\t\t\tjsArray[i + t] = a.table[t];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar inc = t === 0 ? 0 : a.lengths[t - 1];\n\t\t\t\ttoJSArray_(jsArray, i + inc, a.table[t]);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction fromJSArray(jsArray)\n\t{\n\t\tif (jsArray.length === 0)\n\t\t{\n\t\t\treturn empty;\n\t\t}\n\t\tvar h = Math.floor(Math.log(jsArray.length) / Math.log(M));\n\t\treturn fromJSArray_(jsArray, h, 0, jsArray.length);\n\t}\n\n\tfunction fromJSArray_(jsArray, h, from, to)\n\t{\n\t\tif (h === 0)\n\t\t{\n\t\t\treturn {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: jsArray.slice(from, to)\n\t\t\t};\n\t\t}\n\n\t\tvar step = Math.pow(M, h);\n\t\tvar table = new Array(Math.ceil((to - from) / step));\n\t\tvar lengths = new Array(table.length);\n\t\tfor (var i = 0; i < table.length; i++)\n\t\t{\n\t\t\ttable[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));\n\t\t\tlengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0);\n\t\t}\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: h,\n\t\t\ttable: table,\n\t\t\tlengths: lengths\n\t\t};\n\t}\n\n\tElm.Native.Array.values = {\n\t\tempty: empty,\n\t\tfromList: fromList,\n\t\ttoList: toList,\n\t\tinitialize: F2(initialize),\n\t\tappend: F2(append),\n\t\tpush: F2(push),\n\t\tslice: F3(slice),\n\t\tget: F2(get),\n\t\tset: F3(set),\n\t\tmap: F2(map),\n\t\tindexedMap: F2(indexedMap),\n\t\tfoldl: F3(foldl),\n\t\tfoldr: F3(foldr),\n\t\tlength: length,\n\n\t\ttoJSArray: toJSArray,\n\t\tfromJSArray: fromJSArray\n\t};\n\n\treturn localRuntime.Native.Array.values = Elm.Native.Array.values;\n};\n\nElm.Array = Elm.Array || {};\nElm.Array.make = function (_elm) {\n   \"use strict\";\n   _elm.Array = _elm.Array || {};\n   if (_elm.Array.values) return _elm.Array.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Array = Elm.Native.Array.make(_elm);\n   var _op = {};\n   var append = $Native$Array.append;\n   var length = $Native$Array.length;\n   var isEmpty = function (array) {    return _U.eq(length(array),0);};\n   var slice = $Native$Array.slice;\n   var set = $Native$Array.set;\n   var get = F2(function (i,array) {\n      return _U.cmp(0,i) < 1 && _U.cmp(i,$Native$Array.length(array)) < 0 ? $Maybe.Just(A2($Native$Array.get,i,array)) : $Maybe.Nothing;\n   });\n   var push = $Native$Array.push;\n   var empty = $Native$Array.empty;\n   var filter = F2(function (isOkay,arr) {\n      var update = F2(function (x,xs) {    return isOkay(x) ? A2($Native$Array.push,x,xs) : xs;});\n      return A3($Native$Array.foldl,update,$Native$Array.empty,arr);\n   });\n   var foldr = $Native$Array.foldr;\n   var foldl = $Native$Array.foldl;\n   var indexedMap = $Native$Array.indexedMap;\n   var map = $Native$Array.map;\n   var toIndexedList = function (array) {\n      return A3($List.map2,\n      F2(function (v0,v1) {    return {ctor: \"_Tuple2\",_0: v0,_1: v1};}),\n      _U.range(0,$Native$Array.length(array) - 1),\n      $Native$Array.toList(array));\n   };\n   var toList = $Native$Array.toList;\n   var fromList = $Native$Array.fromList;\n   var initialize = $Native$Array.initialize;\n   var repeat = F2(function (n,e) {    return A2(initialize,n,$Basics.always(e));});\n   var Array = {ctor: \"Array\"};\n   return _elm.Array.values = {_op: _op\n                              ,empty: empty\n                              ,repeat: repeat\n                              ,initialize: initialize\n                              ,fromList: fromList\n                              ,isEmpty: isEmpty\n                              ,length: length\n                              ,push: push\n                              ,append: append\n                              ,get: get\n                              ,set: set\n                              ,slice: slice\n                              ,toList: toList\n                              ,toIndexedList: toIndexedList\n                              ,map: map\n                              ,indexedMap: indexedMap\n                              ,filter: filter\n                              ,foldl: foldl\n                              ,foldr: foldr};\n};\nElm.Native.Time = {};\n\nElm.Native.Time.make = function(localRuntime)\n{\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Time = localRuntime.Native.Time || {};\n\tif (localRuntime.Native.Time.values)\n\t{\n\t\treturn localRuntime.Native.Time.values;\n\t}\n\n\tvar NS = Elm.Native.Signal.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\n\n\t// FRAMES PER SECOND\n\n\tfunction fpsWhen(desiredFPS, isOn)\n\t{\n\t\tvar msPerFrame = 1000 / desiredFPS;\n\t\tvar ticker = NS.input('fps-' + desiredFPS, null);\n\n\t\tfunction notifyTicker()\n\t\t{\n\t\t\tlocalRuntime.notify(ticker.id, null);\n\t\t}\n\n\t\tfunction firstArg(x, y)\n\t\t{\n\t\t\treturn x;\n\t\t}\n\n\t\t// input fires either when isOn changes, or when ticker fires.\n\t\t// Its value is a tuple with the current timestamp, and the state of isOn\n\t\tvar input = NS.timestamp(A3(NS.map2, F2(firstArg), NS.dropRepeats(isOn), ticker));\n\n\t\tvar initialState = {\n\t\t\tisOn: false,\n\t\t\ttime: localRuntime.timer.programStart,\n\t\t\tdelta: 0\n\t\t};\n\n\t\tvar timeoutId;\n\n\t\tfunction update(input, state)\n\t\t{\n\t\t\tvar currentTime = input._0;\n\t\t\tvar isOn = input._1;\n\t\t\tvar wasOn = state.isOn;\n\t\t\tvar previousTime = state.time;\n\n\t\t\tif (isOn)\n\t\t\t{\n\t\t\t\ttimeoutId = localRuntime.setTimeout(notifyTicker, msPerFrame);\n\t\t\t}\n\t\t\telse if (wasOn)\n\t\t\t{\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisOn: isOn,\n\t\t\t\ttime: currentTime,\n\t\t\t\tdelta: (isOn && !wasOn) ? 0 : currentTime - previousTime\n\t\t\t};\n\t\t}\n\n\t\treturn A2(\n\t\t\tNS.map,\n\t\t\tfunction(state) { return state.delta; },\n\t\t\tA3(NS.foldp, F2(update), update(input.value, initialState), input)\n\t\t);\n\t}\n\n\n\t// EVERY\n\n\tfunction every(t)\n\t{\n\t\tvar ticker = NS.input('every-' + t, null);\n\t\tfunction tellTime()\n\t\t{\n\t\t\tlocalRuntime.notify(ticker.id, null);\n\t\t}\n\t\tvar clock = A2(NS.map, fst, NS.timestamp(ticker));\n\t\tsetInterval(tellTime, t);\n\t\treturn clock;\n\t}\n\n\n\tfunction fst(pair)\n\t{\n\t\treturn pair._0;\n\t}\n\n\n\tfunction read(s)\n\t{\n\t\tvar t = Date.parse(s);\n\t\treturn isNaN(t) ? Maybe.Nothing : Maybe.Just(t);\n\t}\n\n\treturn localRuntime.Native.Time.values = {\n\t\tfpsWhen: F2(fpsWhen),\n\t\tevery: every,\n\t\ttoDate: function(t) { return new Date(t); },\n\t\tread: read\n\t};\n};\n\nElm.Time = Elm.Time || {};\nElm.Time.make = function (_elm) {\n   \"use strict\";\n   _elm.Time = _elm.Time || {};\n   if (_elm.Time.values) return _elm.Time.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Native$Signal = Elm.Native.Signal.make(_elm),\n   $Native$Time = Elm.Native.Time.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var delay = $Native$Signal.delay;\n   var since = F2(function (time,signal) {\n      var stop = A2($Signal.map,$Basics.always(-1),A2(delay,time,signal));\n      var start = A2($Signal.map,$Basics.always(1),signal);\n      var delaydiff = A3($Signal.foldp,F2(function (x,y) {    return x + y;}),0,A2($Signal.merge,start,stop));\n      return A2($Signal.map,F2(function (x,y) {    return !_U.eq(x,y);})(0),delaydiff);\n   });\n   var timestamp = $Native$Signal.timestamp;\n   var every = $Native$Time.every;\n   var fpsWhen = $Native$Time.fpsWhen;\n   var fps = function (targetFrames) {    return A2(fpsWhen,targetFrames,$Signal.constant(true));};\n   var inMilliseconds = function (t) {    return t;};\n   var millisecond = 1;\n   var second = 1000 * millisecond;\n   var minute = 60 * second;\n   var hour = 60 * minute;\n   var inHours = function (t) {    return t / hour;};\n   var inMinutes = function (t) {    return t / minute;};\n   var inSeconds = function (t) {    return t / second;};\n   return _elm.Time.values = {_op: _op\n                             ,millisecond: millisecond\n                             ,second: second\n                             ,minute: minute\n                             ,hour: hour\n                             ,inMilliseconds: inMilliseconds\n                             ,inSeconds: inSeconds\n                             ,inMinutes: inMinutes\n                             ,inHours: inHours\n                             ,fps: fps\n                             ,fpsWhen: fpsWhen\n                             ,every: every\n                             ,timestamp: timestamp\n                             ,delay: delay\n                             ,since: since};\n};\nElm.Native.Json = {};\n\nElm.Native.Json.make = function(localRuntime) {\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Json = localRuntime.Native.Json || {};\n\tif (localRuntime.Native.Json.values) {\n\t\treturn localRuntime.Native.Json.values;\n\t}\n\n\tvar ElmArray = Elm.Native.Array.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\tvar Maybe = Elm.Maybe.make(localRuntime);\n\tvar Result = Elm.Result.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\n\n\tfunction crash(expected, actual) {\n\t\tthrow new Error(\n\t\t\t'expecting ' + expected + ' but got ' + JSON.stringify(actual)\n\t\t);\n\t}\n\n\n\t// PRIMITIVE VALUES\n\n\tfunction decodeNull(successValue) {\n\t\treturn function(value) {\n\t\t\tif (value === null) {\n\t\t\t\treturn successValue;\n\t\t\t}\n\t\t\tcrash('null', value);\n\t\t};\n\t}\n\n\n\tfunction decodeString(value) {\n\t\tif (typeof value === 'string' || value instanceof String) {\n\t\t\treturn value;\n\t\t}\n\t\tcrash('a String', value);\n\t}\n\n\n\tfunction decodeFloat(value) {\n\t\tif (typeof value === 'number') {\n\t\t\treturn value;\n\t\t}\n\t\tcrash('a Float', value);\n\t}\n\n\n\tfunction decodeInt(value) {\n\t\tif (typeof value !== 'number') {\n\t\t\tcrash('an Int', value);\n\t\t}\n\n\t\tif (value < 2147483647 && value > -2147483647 && (value | 0) === value) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (isFinite(value) && !(value % 1)) {\n\t\t\treturn value;\n\t\t}\n\n\t\tcrash('an Int', value);\n\t}\n\n\n\tfunction decodeBool(value) {\n\t\tif (typeof value === 'boolean') {\n\t\t\treturn value;\n\t\t}\n\t\tcrash('a Bool', value);\n\t}\n\n\n\t// ARRAY\n\n\tfunction decodeArray(decoder) {\n\t\treturn function(value) {\n\t\t\tif (value instanceof Array) {\n\t\t\t\tvar len = value.length;\n\t\t\t\tvar array = new Array(len);\n\t\t\t\tfor (var i = len; i--; ) {\n\t\t\t\t\tarray[i] = decoder(value[i]);\n\t\t\t\t}\n\t\t\t\treturn ElmArray.fromJSArray(array);\n\t\t\t}\n\t\t\tcrash('an Array', value);\n\t\t};\n\t}\n\n\n\t// LIST\n\n\tfunction decodeList(decoder) {\n\t\treturn function(value) {\n\t\t\tif (value instanceof Array) {\n\t\t\t\tvar len = value.length;\n\t\t\t\tvar list = List.Nil;\n\t\t\t\tfor (var i = len; i--; ) {\n\t\t\t\t\tlist = List.Cons( decoder(value[i]), list );\n\t\t\t\t}\n\t\t\t\treturn list;\n\t\t\t}\n\t\t\tcrash('a List', value);\n\t\t};\n\t}\n\n\n\t// MAYBE\n\n\tfunction decodeMaybe(decoder) {\n\t\treturn function(value) {\n\t\t\ttry {\n\t\t\t\treturn Maybe.Just(decoder(value));\n\t\t\t} catch(e) {\n\t\t\t\treturn Maybe.Nothing;\n\t\t\t}\n\t\t};\n\t}\n\n\n\t// FIELDS\n\n\tfunction decodeField(field, decoder) {\n\t\treturn function(value) {\n\t\t\tvar subValue = value[field];\n\t\t\tif (subValue !== undefined) {\n\t\t\t\treturn decoder(subValue);\n\t\t\t}\n\t\t\tcrash(\"an object with field '\" + field + \"'\", value);\n\t\t};\n\t}\n\n\n\t// OBJECTS\n\n\tfunction decodeKeyValuePairs(decoder) {\n\t\treturn function(value) {\n\t\t\tvar isObject =\n\t\t\t\ttypeof value === 'object'\n\t\t\t\t\t&& value !== null\n\t\t\t\t\t&& !(value instanceof Array);\n\n\t\t\tif (isObject) {\n\t\t\t\tvar keyValuePairs = List.Nil;\n\t\t\t\tfor (var key in value)\n\t\t\t\t{\n\t\t\t\t\tvar elmValue = decoder(value[key]);\n\t\t\t\t\tvar pair = Utils.Tuple2(key, elmValue);\n\t\t\t\t\tkeyValuePairs = List.Cons(pair, keyValuePairs);\n\t\t\t\t}\n\t\t\t\treturn keyValuePairs;\n\t\t\t}\n\n\t\t\tcrash('an object', value);\n\t\t};\n\t}\n\n\tfunction decodeObject1(f, d1) {\n\t\treturn function(value) {\n\t\t\treturn f(d1(value));\n\t\t};\n\t}\n\n\tfunction decodeObject2(f, d1, d2) {\n\t\treturn function(value) {\n\t\t\treturn A2( f, d1(value), d2(value) );\n\t\t};\n\t}\n\n\tfunction decodeObject3(f, d1, d2, d3) {\n\t\treturn function(value) {\n\t\t\treturn A3( f, d1(value), d2(value), d3(value) );\n\t\t};\n\t}\n\n\tfunction decodeObject4(f, d1, d2, d3, d4) {\n\t\treturn function(value) {\n\t\t\treturn A4( f, d1(value), d2(value), d3(value), d4(value) );\n\t\t};\n\t}\n\n\tfunction decodeObject5(f, d1, d2, d3, d4, d5) {\n\t\treturn function(value) {\n\t\t\treturn A5( f, d1(value), d2(value), d3(value), d4(value), d5(value) );\n\t\t};\n\t}\n\n\tfunction decodeObject6(f, d1, d2, d3, d4, d5, d6) {\n\t\treturn function(value) {\n\t\t\treturn A6( f,\n\t\t\t\td1(value),\n\t\t\t\td2(value),\n\t\t\t\td3(value),\n\t\t\t\td4(value),\n\t\t\t\td5(value),\n\t\t\t\td6(value)\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction decodeObject7(f, d1, d2, d3, d4, d5, d6, d7) {\n\t\treturn function(value) {\n\t\t\treturn A7( f,\n\t\t\t\td1(value),\n\t\t\t\td2(value),\n\t\t\t\td3(value),\n\t\t\t\td4(value),\n\t\t\t\td5(value),\n\t\t\t\td6(value),\n\t\t\t\td7(value)\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction decodeObject8(f, d1, d2, d3, d4, d5, d6, d7, d8) {\n\t\treturn function(value) {\n\t\t\treturn A8( f,\n\t\t\t\td1(value),\n\t\t\t\td2(value),\n\t\t\t\td3(value),\n\t\t\t\td4(value),\n\t\t\t\td5(value),\n\t\t\t\td6(value),\n\t\t\t\td7(value),\n\t\t\t\td8(value)\n\t\t\t);\n\t\t};\n\t}\n\n\n\t// TUPLES\n\n\tfunction decodeTuple1(f, d1) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 1 ) {\n\t\t\t\tcrash('a Tuple of length 1', value);\n\t\t\t}\n\t\t\treturn f( d1(value[0]) );\n\t\t};\n\t}\n\n\tfunction decodeTuple2(f, d1, d2) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 2 ) {\n\t\t\t\tcrash('a Tuple of length 2', value);\n\t\t\t}\n\t\t\treturn A2( f, d1(value[0]), d2(value[1]) );\n\t\t};\n\t}\n\n\tfunction decodeTuple3(f, d1, d2, d3) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 3 ) {\n\t\t\t\tcrash('a Tuple of length 3', value);\n\t\t\t}\n\t\t\treturn A3( f, d1(value[0]), d2(value[1]), d3(value[2]) );\n\t\t};\n\t}\n\n\n\tfunction decodeTuple4(f, d1, d2, d3, d4) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 4 ) {\n\t\t\t\tcrash('a Tuple of length 4', value);\n\t\t\t}\n\t\t\treturn A4( f, d1(value[0]), d2(value[1]), d3(value[2]), d4(value[3]) );\n\t\t};\n\t}\n\n\n\tfunction decodeTuple5(f, d1, d2, d3, d4, d5) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 5 ) {\n\t\t\t\tcrash('a Tuple of length 5', value);\n\t\t\t}\n\t\t\treturn A5( f,\n\t\t\t\td1(value[0]),\n\t\t\t\td2(value[1]),\n\t\t\t\td3(value[2]),\n\t\t\t\td4(value[3]),\n\t\t\t\td5(value[4])\n\t\t\t);\n\t\t};\n\t}\n\n\n\tfunction decodeTuple6(f, d1, d2, d3, d4, d5, d6) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 6 ) {\n\t\t\t\tcrash('a Tuple of length 6', value);\n\t\t\t}\n\t\t\treturn A6( f,\n\t\t\t\td1(value[0]),\n\t\t\t\td2(value[1]),\n\t\t\t\td3(value[2]),\n\t\t\t\td4(value[3]),\n\t\t\t\td5(value[4]),\n\t\t\t\td6(value[5])\n\t\t\t);\n\t\t};\n\t}\n\n\tfunction decodeTuple7(f, d1, d2, d3, d4, d5, d6, d7) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 7 ) {\n\t\t\t\tcrash('a Tuple of length 7', value);\n\t\t\t}\n\t\t\treturn A7( f,\n\t\t\t\td1(value[0]),\n\t\t\t\td2(value[1]),\n\t\t\t\td3(value[2]),\n\t\t\t\td4(value[3]),\n\t\t\t\td5(value[4]),\n\t\t\t\td6(value[5]),\n\t\t\t\td7(value[6])\n\t\t\t);\n\t\t};\n\t}\n\n\n\tfunction decodeTuple8(f, d1, d2, d3, d4, d5, d6, d7, d8) {\n\t\treturn function(value) {\n\t\t\tif ( !(value instanceof Array) || value.length !== 8 ) {\n\t\t\t\tcrash('a Tuple of length 8', value);\n\t\t\t}\n\t\t\treturn A8( f,\n\t\t\t\td1(value[0]),\n\t\t\t\td2(value[1]),\n\t\t\t\td3(value[2]),\n\t\t\t\td4(value[3]),\n\t\t\t\td5(value[4]),\n\t\t\t\td6(value[5]),\n\t\t\t\td7(value[6]),\n\t\t\t\td8(value[7])\n\t\t\t);\n\t\t};\n\t}\n\n\n\t// CUSTOM DECODERS\n\n\tfunction decodeValue(value) {\n\t\treturn value;\n\t}\n\n\tfunction runDecoderValue(decoder, value) {\n\t\ttry {\n\t\t\treturn Result.Ok(decoder(value));\n\t\t} catch(e) {\n\t\t\treturn Result.Err(e.message);\n\t\t}\n\t}\n\n\tfunction customDecoder(decoder, callback) {\n\t\treturn function(value) {\n\t\t\tvar result = callback(decoder(value));\n\t\t\tif (result.ctor === 'Err') {\n\t\t\t\tthrow new Error('custom decoder failed: ' + result._0);\n\t\t\t}\n\t\t\treturn result._0;\n\t\t};\n\t}\n\n\tfunction andThen(decode, callback) {\n\t\treturn function(value) {\n\t\t\tvar result = decode(value);\n\t\t\treturn callback(result)(value);\n\t\t};\n\t}\n\n\tfunction fail(msg) {\n\t\treturn function(value) {\n\t\t\tthrow new Error(msg);\n\t\t};\n\t}\n\n\tfunction succeed(successValue) {\n\t\treturn function(value) {\n\t\t\treturn successValue;\n\t\t};\n\t}\n\n\n\t// ONE OF MANY\n\n\tfunction oneOf(decoders) {\n\t\treturn function(value) {\n\t\t\tvar errors = [];\n\t\t\tvar temp = decoders;\n\t\t\twhile (temp.ctor !== '[]') {\n\t\t\t\ttry {\n\t\t\t\t\treturn temp._0(value);\n\t\t\t\t} catch(e) {\n\t\t\t\t\terrors.push(e.message);\n\t\t\t\t}\n\t\t\t\ttemp = temp._1;\n\t\t\t}\n\t\t\tthrow new Error('expecting one of the following:\\n    ' + errors.join('\\n    '));\n\t\t};\n\t}\n\n\tfunction get(decoder, value) {\n\t\ttry {\n\t\t\treturn Result.Ok(decoder(value));\n\t\t} catch(e) {\n\t\t\treturn Result.Err(e.message);\n\t\t}\n\t}\n\n\n\t// ENCODE / DECODE\n\n\tfunction runDecoderString(decoder, string) {\n\t\ttry {\n\t\t\treturn Result.Ok(decoder(JSON.parse(string)));\n\t\t} catch(e) {\n\t\t\treturn Result.Err(e.message);\n\t\t}\n\t}\n\n\tfunction encode(indentLevel, value) {\n\t\treturn JSON.stringify(value, null, indentLevel);\n\t}\n\n\tfunction identity(value) {\n\t\treturn value;\n\t}\n\n\tfunction encodeObject(keyValuePairs) {\n\t\tvar obj = {};\n\t\twhile (keyValuePairs.ctor !== '[]') {\n\t\t\tvar pair = keyValuePairs._0;\n\t\t\tobj[pair._0] = pair._1;\n\t\t\tkeyValuePairs = keyValuePairs._1;\n\t\t}\n\t\treturn obj;\n\t}\n\n\treturn localRuntime.Native.Json.values = {\n\t\tencode: F2(encode),\n\t\trunDecoderString: F2(runDecoderString),\n\t\trunDecoderValue: F2(runDecoderValue),\n\n\t\tget: F2(get),\n\t\toneOf: oneOf,\n\n\t\tdecodeNull: decodeNull,\n\t\tdecodeInt: decodeInt,\n\t\tdecodeFloat: decodeFloat,\n\t\tdecodeString: decodeString,\n\t\tdecodeBool: decodeBool,\n\n\t\tdecodeMaybe: decodeMaybe,\n\n\t\tdecodeList: decodeList,\n\t\tdecodeArray: decodeArray,\n\n\t\tdecodeField: F2(decodeField),\n\n\t\tdecodeObject1: F2(decodeObject1),\n\t\tdecodeObject2: F3(decodeObject2),\n\t\tdecodeObject3: F4(decodeObject3),\n\t\tdecodeObject4: F5(decodeObject4),\n\t\tdecodeObject5: F6(decodeObject5),\n\t\tdecodeObject6: F7(decodeObject6),\n\t\tdecodeObject7: F8(decodeObject7),\n\t\tdecodeObject8: F9(decodeObject8),\n\t\tdecodeKeyValuePairs: decodeKeyValuePairs,\n\n\t\tdecodeTuple1: F2(decodeTuple1),\n\t\tdecodeTuple2: F3(decodeTuple2),\n\t\tdecodeTuple3: F4(decodeTuple3),\n\t\tdecodeTuple4: F5(decodeTuple4),\n\t\tdecodeTuple5: F6(decodeTuple5),\n\t\tdecodeTuple6: F7(decodeTuple6),\n\t\tdecodeTuple7: F8(decodeTuple7),\n\t\tdecodeTuple8: F9(decodeTuple8),\n\n\t\tandThen: F2(andThen),\n\t\tdecodeValue: decodeValue,\n\t\tcustomDecoder: F2(customDecoder),\n\t\tfail: fail,\n\t\tsucceed: succeed,\n\n\t\tidentity: identity,\n\t\tencodeNull: null,\n\t\tencodeArray: ElmArray.toJSArray,\n\t\tencodeList: List.toArray,\n\t\tencodeObject: encodeObject\n\n\t};\n};\n\nElm.Json = Elm.Json || {};\nElm.Json.Encode = Elm.Json.Encode || {};\nElm.Json.Encode.make = function (_elm) {\n   \"use strict\";\n   _elm.Json = _elm.Json || {};\n   _elm.Json.Encode = _elm.Json.Encode || {};\n   if (_elm.Json.Encode.values) return _elm.Json.Encode.values;\n   var _U = Elm.Native.Utils.make(_elm),$Array = Elm.Array.make(_elm),$Native$Json = Elm.Native.Json.make(_elm);\n   var _op = {};\n   var list = $Native$Json.encodeList;\n   var array = $Native$Json.encodeArray;\n   var object = $Native$Json.encodeObject;\n   var $null = $Native$Json.encodeNull;\n   var bool = $Native$Json.identity;\n   var $float = $Native$Json.identity;\n   var $int = $Native$Json.identity;\n   var string = $Native$Json.identity;\n   var encode = $Native$Json.encode;\n   var Value = {ctor: \"Value\"};\n   return _elm.Json.Encode.values = {_op: _op\n                                    ,encode: encode\n                                    ,string: string\n                                    ,$int: $int\n                                    ,$float: $float\n                                    ,bool: bool\n                                    ,$null: $null\n                                    ,list: list\n                                    ,array: array\n                                    ,object: object};\n};\nElm.Json = Elm.Json || {};\nElm.Json.Decode = Elm.Json.Decode || {};\nElm.Json.Decode.make = function (_elm) {\n   \"use strict\";\n   _elm.Json = _elm.Json || {};\n   _elm.Json.Decode = _elm.Json.Decode || {};\n   if (_elm.Json.Decode.values) return _elm.Json.Decode.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Array = Elm.Array.make(_elm),\n   $Dict = Elm.Dict.make(_elm),\n   $Json$Encode = Elm.Json.Encode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Json = Elm.Native.Json.make(_elm),\n   $Result = Elm.Result.make(_elm);\n   var _op = {};\n   var tuple8 = $Native$Json.decodeTuple8;\n   var tuple7 = $Native$Json.decodeTuple7;\n   var tuple6 = $Native$Json.decodeTuple6;\n   var tuple5 = $Native$Json.decodeTuple5;\n   var tuple4 = $Native$Json.decodeTuple4;\n   var tuple3 = $Native$Json.decodeTuple3;\n   var tuple2 = $Native$Json.decodeTuple2;\n   var tuple1 = $Native$Json.decodeTuple1;\n   var succeed = $Native$Json.succeed;\n   var fail = $Native$Json.fail;\n   var andThen = $Native$Json.andThen;\n   var customDecoder = $Native$Json.customDecoder;\n   var decodeValue = $Native$Json.runDecoderValue;\n   var value = $Native$Json.decodeValue;\n   var maybe = $Native$Json.decodeMaybe;\n   var $null = $Native$Json.decodeNull;\n   var array = $Native$Json.decodeArray;\n   var list = $Native$Json.decodeList;\n   var bool = $Native$Json.decodeBool;\n   var $int = $Native$Json.decodeInt;\n   var $float = $Native$Json.decodeFloat;\n   var string = $Native$Json.decodeString;\n   var oneOf = $Native$Json.oneOf;\n   var keyValuePairs = $Native$Json.decodeKeyValuePairs;\n   var object8 = $Native$Json.decodeObject8;\n   var object7 = $Native$Json.decodeObject7;\n   var object6 = $Native$Json.decodeObject6;\n   var object5 = $Native$Json.decodeObject5;\n   var object4 = $Native$Json.decodeObject4;\n   var object3 = $Native$Json.decodeObject3;\n   var object2 = $Native$Json.decodeObject2;\n   var object1 = $Native$Json.decodeObject1;\n   _op[\":=\"] = $Native$Json.decodeField;\n   var at = F2(function (fields,decoder) {    return A3($List.foldr,F2(function (x,y) {    return A2(_op[\":=\"],x,y);}),decoder,fields);});\n   var decodeString = $Native$Json.runDecoderString;\n   var map = $Native$Json.decodeObject1;\n   var dict = function (decoder) {    return A2(map,$Dict.fromList,keyValuePairs(decoder));};\n   var Decoder = {ctor: \"Decoder\"};\n   return _elm.Json.Decode.values = {_op: _op\n                                    ,decodeString: decodeString\n                                    ,decodeValue: decodeValue\n                                    ,string: string\n                                    ,$int: $int\n                                    ,$float: $float\n                                    ,bool: bool\n                                    ,$null: $null\n                                    ,list: list\n                                    ,array: array\n                                    ,tuple1: tuple1\n                                    ,tuple2: tuple2\n                                    ,tuple3: tuple3\n                                    ,tuple4: tuple4\n                                    ,tuple5: tuple5\n                                    ,tuple6: tuple6\n                                    ,tuple7: tuple7\n                                    ,tuple8: tuple8\n                                    ,at: at\n                                    ,object1: object1\n                                    ,object2: object2\n                                    ,object3: object3\n                                    ,object4: object4\n                                    ,object5: object5\n                                    ,object6: object6\n                                    ,object7: object7\n                                    ,object8: object8\n                                    ,keyValuePairs: keyValuePairs\n                                    ,dict: dict\n                                    ,maybe: maybe\n                                    ,oneOf: oneOf\n                                    ,map: map\n                                    ,fail: fail\n                                    ,succeed: succeed\n                                    ,andThen: andThen\n                                    ,value: value\n                                    ,customDecoder: customDecoder};\n};\nElm.Native.Effects = {};\nElm.Native.Effects.make = function(localRuntime) {\n\n\tlocalRuntime.Native = localRuntime.Native || {};\n\tlocalRuntime.Native.Effects = localRuntime.Native.Effects || {};\n\tif (localRuntime.Native.Effects.values)\n\t{\n\t\treturn localRuntime.Native.Effects.values;\n\t}\n\n\tvar Task = Elm.Native.Task.make(localRuntime);\n\tvar Utils = Elm.Native.Utils.make(localRuntime);\n\tvar Signal = Elm.Signal.make(localRuntime);\n\tvar List = Elm.Native.List.make(localRuntime);\n\n\n\t// polyfill so things will work even if rAF is not available for some reason\n\tvar _requestAnimationFrame =\n\t\ttypeof requestAnimationFrame !== 'undefined'\n\t\t\t? requestAnimationFrame\n\t\t\t: function(cb) { setTimeout(cb, 1000 / 60); }\n\t\t\t;\n\n\n\t// batchedSending and sendCallback implement a small state machine in order\n\t// to schedule only one send(time) call per animation frame.\n\t//\n\t// Invariants:\n\t// 1. In the NO_REQUEST state, there is never a scheduled sendCallback.\n\t// 2. In the PENDING_REQUEST and EXTRA_REQUEST states, there is always exactly\n\t//    one scheduled sendCallback.\n\tvar NO_REQUEST = 0;\n\tvar PENDING_REQUEST = 1;\n\tvar EXTRA_REQUEST = 2;\n\tvar state = NO_REQUEST;\n\tvar messageArray = [];\n\n\n\tfunction batchedSending(address, tickMessages)\n\t{\n\t\t// insert ticks into the messageArray\n\t\tvar foundAddress = false;\n\n\t\tfor (var i = messageArray.length; i--; )\n\t\t{\n\t\t\tif (messageArray[i].address === address)\n\t\t\t{\n\t\t\t\tfoundAddress = true;\n\t\t\t\tmessageArray[i].tickMessages = A3(List.foldl, List.cons, messageArray[i].tickMessages, tickMessages);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!foundAddress)\n\t\t{\n\t\t\tmessageArray.push({ address: address, tickMessages: tickMessages });\n\t\t}\n\n\t\t// do the appropriate state transition\n\t\tswitch (state)\n\t\t{\n\t\t\tcase NO_REQUEST:\n\t\t\t\t_requestAnimationFrame(sendCallback);\n\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\tbreak;\n\t\t\tcase PENDING_REQUEST:\n\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\tbreak;\n\t\t\tcase EXTRA_REQUEST:\n\t\t\t\tstate = PENDING_REQUEST;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\n\tfunction sendCallback(time)\n\t{\n\t\tswitch (state)\n\t\t{\n\t\t\tcase NO_REQUEST:\n\t\t\t\t// This state should not be possible. How can there be no\n\t\t\t\t// request, yet somehow we are actively fulfilling a\n\t\t\t\t// request?\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Unexpected send callback.\\n' +\n\t\t\t\t\t'Please report this to <https://github.com/evancz/elm-effects/issues>.'\n\t\t\t\t);\n\n\t\t\tcase PENDING_REQUEST:\n\t\t\t\t// At this point, we do not *know* that another frame is\n\t\t\t\t// needed, but we make an extra request to rAF just in\n\t\t\t\t// case. It's possible to drop a frame if rAF is called\n\t\t\t\t// too late, so we just do it preemptively.\n\t\t\t\t_requestAnimationFrame(sendCallback);\n\t\t\t\tstate = EXTRA_REQUEST;\n\n\t\t\t\t// There's also stuff we definitely need to send.\n\t\t\t\tsend(time);\n\t\t\t\treturn;\n\n\t\t\tcase EXTRA_REQUEST:\n\t\t\t\t// Turns out the extra request was not needed, so we will\n\t\t\t\t// stop calling rAF. No reason to call it all the time if\n\t\t\t\t// no one needs it.\n\t\t\t\tstate = NO_REQUEST;\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\n\tfunction send(time)\n\t{\n\t\tfor (var i = messageArray.length; i--; )\n\t\t{\n\t\t\tvar messages = A3(\n\t\t\t\tList.foldl,\n\t\t\t\tF2( function(toAction, list) { return List.Cons(toAction(time), list); } ),\n\t\t\t\tList.Nil,\n\t\t\t\tmessageArray[i].tickMessages\n\t\t\t);\n\t\t\tTask.perform( A2(Signal.send, messageArray[i].address, messages) );\n\t\t}\n\t\tmessageArray = [];\n\t}\n\n\n\tfunction requestTickSending(address, tickMessages)\n\t{\n\t\treturn Task.asyncFunction(function(callback) {\n\t\t\tbatchedSending(address, tickMessages);\n\t\t\tcallback(Task.succeed(Utils.Tuple0));\n\t\t});\n\t}\n\n\n\treturn localRuntime.Native.Effects.values = {\n\t\trequestTickSending: F2(requestTickSending)\n\t};\n\n};\n\nElm.Effects = Elm.Effects || {};\nElm.Effects.make = function (_elm) {\n   \"use strict\";\n   _elm.Effects = _elm.Effects || {};\n   if (_elm.Effects.values) return _elm.Effects.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$Effects = Elm.Native.Effects.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $Task = Elm.Task.make(_elm),\n   $Time = Elm.Time.make(_elm);\n   var _op = {};\n   var ignore = function (task) {    return A2($Task.map,$Basics.always({ctor: \"_Tuple0\"}),task);};\n   var requestTickSending = $Native$Effects.requestTickSending;\n   var toTaskHelp = F3(function (address,effect,_p0) {\n      var _p1 = _p0;\n      var _p5 = _p1._1;\n      var _p4 = _p1;\n      var _p3 = _p1._0;\n      var _p2 = effect;\n      switch (_p2.ctor)\n      {case \"Task\": var reporter = A2($Task.andThen,_p2._0,function (answer) {    return A2($Signal.send,address,_U.list([answer]));});\n           return {ctor: \"_Tuple2\",_0: A2($Task.andThen,_p3,$Basics.always(ignore($Task.spawn(reporter)))),_1: _p5};\n         case \"Tick\": return {ctor: \"_Tuple2\",_0: _p3,_1: A2($List._op[\"::\"],_p2._0,_p5)};\n         case \"None\": return _p4;\n         default: return A3($List.foldl,toTaskHelp(address),_p4,_p2._0);}\n   });\n   var toTask = F2(function (address,effect) {\n      var _p6 = A3(toTaskHelp,address,effect,{ctor: \"_Tuple2\",_0: $Task.succeed({ctor: \"_Tuple0\"}),_1: _U.list([])});\n      var combinedTask = _p6._0;\n      var tickMessages = _p6._1;\n      return $List.isEmpty(tickMessages) ? combinedTask : A2($Task.andThen,combinedTask,$Basics.always(A2(requestTickSending,address,tickMessages)));\n   });\n   var Never = function (a) {    return {ctor: \"Never\",_0: a};};\n   var Batch = function (a) {    return {ctor: \"Batch\",_0: a};};\n   var batch = Batch;\n   var None = {ctor: \"None\"};\n   var none = None;\n   var Tick = function (a) {    return {ctor: \"Tick\",_0: a};};\n   var tick = Tick;\n   var Task = function (a) {    return {ctor: \"Task\",_0: a};};\n   var task = Task;\n   var map = F2(function (func,effect) {\n      var _p7 = effect;\n      switch (_p7.ctor)\n      {case \"Task\": return Task(A2($Task.map,func,_p7._0));\n         case \"Tick\": return Tick(function (_p8) {    return func(_p7._0(_p8));});\n         case \"None\": return None;\n         default: return Batch(A2($List.map,map(func),_p7._0));}\n   });\n   return _elm.Effects.values = {_op: _op,none: none,task: task,tick: tick,map: map,batch: batch,toTask: toTask};\n};\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n\n},{}],2:[function(require,module,exports){\n(function (global){\nvar topLevel = typeof global !== 'undefined' ? global :\n    typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nif (typeof document !== 'undefined') {\n    module.exports = document;\n} else {\n    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n    if (!doccy) {\n        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n    }\n\n    module.exports = doccy;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"min-document\":1}],3:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function isObject(x) {\n\treturn typeof x === \"object\" && x !== null;\n};\n\n},{}],4:[function(require,module,exports){\nvar nativeIsArray = Array.isArray\nvar toString = Object.prototype.toString\n\nmodule.exports = nativeIsArray || isArray\n\nfunction isArray(obj) {\n    return toString.call(obj) === \"[object Array]\"\n}\n\n},{}],5:[function(require,module,exports){\nvar isObject = require(\"is-object\")\nvar isHook = require(\"../vnode/is-vhook.js\")\n\nmodule.exports = applyProperties\n\nfunction applyProperties(node, props, previous) {\n    for (var propName in props) {\n        var propValue = props[propName]\n\n        if (propValue === undefined) {\n            removeProperty(node, propName, propValue, previous);\n        } else if (isHook(propValue)) {\n            removeProperty(node, propName, propValue, previous)\n            if (propValue.hook) {\n                propValue.hook(node,\n                    propName,\n                    previous ? previous[propName] : undefined)\n            }\n        } else {\n            if (isObject(propValue)) {\n                patchObject(node, props, previous, propName, propValue);\n            } else {\n                node[propName] = propValue\n            }\n        }\n    }\n}\n\nfunction removeProperty(node, propName, propValue, previous) {\n    if (previous) {\n        var previousValue = previous[propName]\n\n        if (!isHook(previousValue)) {\n            if (propName === \"attributes\") {\n                for (var attrName in previousValue) {\n                    node.removeAttribute(attrName)\n                }\n            } else if (propName === \"style\") {\n                for (var i in previousValue) {\n                    node.style[i] = \"\"\n                }\n            } else if (typeof previousValue === \"string\") {\n                node[propName] = \"\"\n            } else {\n                node[propName] = null\n            }\n        } else if (previousValue.unhook) {\n            previousValue.unhook(node, propName, propValue)\n        }\n    }\n}\n\nfunction patchObject(node, props, previous, propName, propValue) {\n    var previousValue = previous ? previous[propName] : undefined\n\n    // Set attributes\n    if (propName === \"attributes\") {\n        for (var attrName in propValue) {\n            var attrValue = propValue[attrName]\n\n            if (attrValue === undefined) {\n                node.removeAttribute(attrName)\n            } else {\n                node.setAttribute(attrName, attrValue)\n            }\n        }\n\n        return\n    }\n\n    if(previousValue && isObject(previousValue) &&\n        getPrototype(previousValue) !== getPrototype(propValue)) {\n        node[propName] = propValue\n        return\n    }\n\n    if (!isObject(node[propName])) {\n        node[propName] = {}\n    }\n\n    var replacer = propName === \"style\" ? \"\" : undefined\n\n    for (var k in propValue) {\n        var value = propValue[k]\n        node[propName][k] = (value === undefined) ? replacer : value\n    }\n}\n\nfunction getPrototype(value) {\n    if (Object.getPrototypeOf) {\n        return Object.getPrototypeOf(value)\n    } else if (value.__proto__) {\n        return value.__proto__\n    } else if (value.constructor) {\n        return value.constructor.prototype\n    }\n}\n\n},{\"../vnode/is-vhook.js\":13,\"is-object\":3}],6:[function(require,module,exports){\nvar document = require(\"global/document\")\n\nvar applyProperties = require(\"./apply-properties\")\n\nvar isVNode = require(\"../vnode/is-vnode.js\")\nvar isVText = require(\"../vnode/is-vtext.js\")\nvar isWidget = require(\"../vnode/is-widget.js\")\nvar handleThunk = require(\"../vnode/handle-thunk.js\")\n\nmodule.exports = createElement\n\nfunction createElement(vnode, opts) {\n    var doc = opts ? opts.document || document : document\n    var warn = opts ? opts.warn : null\n\n    vnode = handleThunk(vnode).a\n\n    if (isWidget(vnode)) {\n        return vnode.init()\n    } else if (isVText(vnode)) {\n        return doc.createTextNode(vnode.text)\n    } else if (!isVNode(vnode)) {\n        if (warn) {\n            warn(\"Item is not a valid virtual dom node\", vnode)\n        }\n        return null\n    }\n\n    var node = (vnode.namespace === null) ?\n        doc.createElement(vnode.tagName) :\n        doc.createElementNS(vnode.namespace, vnode.tagName)\n\n    var props = vnode.properties\n    applyProperties(node, props)\n\n    var children = vnode.children\n\n    for (var i = 0; i < children.length; i++) {\n        var childNode = createElement(children[i], opts)\n        if (childNode) {\n            node.appendChild(childNode)\n        }\n    }\n\n    return node\n}\n\n},{\"../vnode/handle-thunk.js\":11,\"../vnode/is-vnode.js\":14,\"../vnode/is-vtext.js\":15,\"../vnode/is-widget.js\":16,\"./apply-properties\":5,\"global/document\":2}],7:[function(require,module,exports){\n// Maps a virtual DOM tree onto a real DOM tree in an efficient manner.\n// We don't want to read all of the DOM nodes in the tree so we use\n// the in-order tree indexing to eliminate recursion down certain branches.\n// We only recurse into a DOM node if we know that it contains a child of\n// interest.\n\nvar noChild = {}\n\nmodule.exports = domIndex\n\nfunction domIndex(rootNode, tree, indices, nodes) {\n    if (!indices || indices.length === 0) {\n        return {}\n    } else {\n        indices.sort(ascending)\n        return recurse(rootNode, tree, indices, nodes, 0)\n    }\n}\n\nfunction recurse(rootNode, tree, indices, nodes, rootIndex) {\n    nodes = nodes || {}\n\n\n    if (rootNode) {\n        if (indexInRange(indices, rootIndex, rootIndex)) {\n            nodes[rootIndex] = rootNode\n        }\n\n        var vChildren = tree.children\n\n        if (vChildren) {\n\n            var childNodes = rootNode.childNodes\n\n            for (var i = 0; i < tree.children.length; i++) {\n                rootIndex += 1\n\n                var vChild = vChildren[i] || noChild\n                var nextIndex = rootIndex + (vChild.count || 0)\n\n                // skip recursion down the tree if there are no nodes down here\n                if (indexInRange(indices, rootIndex, nextIndex)) {\n                    recurse(childNodes[i], vChild, indices, nodes, rootIndex)\n                }\n\n                rootIndex = nextIndex\n            }\n        }\n    }\n\n    return nodes\n}\n\n// Binary search for an index in the interval [left, right]\nfunction indexInRange(indices, left, right) {\n    if (indices.length === 0) {\n        return false\n    }\n\n    var minIndex = 0\n    var maxIndex = indices.length - 1\n    var currentIndex\n    var currentItem\n\n    while (minIndex <= maxIndex) {\n        currentIndex = ((maxIndex + minIndex) / 2) >> 0\n        currentItem = indices[currentIndex]\n\n        if (minIndex === maxIndex) {\n            return currentItem >= left && currentItem <= right\n        } else if (currentItem < left) {\n            minIndex = currentIndex + 1\n        } else  if (currentItem > right) {\n            maxIndex = currentIndex - 1\n        } else {\n            return true\n        }\n    }\n\n    return false;\n}\n\nfunction ascending(a, b) {\n    return a > b ? 1 : -1\n}\n\n},{}],8:[function(require,module,exports){\nvar applyProperties = require(\"./apply-properties\")\n\nvar isWidget = require(\"../vnode/is-widget.js\")\nvar VPatch = require(\"../vnode/vpatch.js\")\n\nvar render = require(\"./create-element\")\nvar updateWidget = require(\"./update-widget\")\n\nmodule.exports = applyPatch\n\nfunction applyPatch(vpatch, domNode, renderOptions) {\n    var type = vpatch.type\n    var vNode = vpatch.vNode\n    var patch = vpatch.patch\n\n    switch (type) {\n        case VPatch.REMOVE:\n            return removeNode(domNode, vNode)\n        case VPatch.INSERT:\n            return insertNode(domNode, patch, renderOptions)\n        case VPatch.VTEXT:\n            return stringPatch(domNode, vNode, patch, renderOptions)\n        case VPatch.WIDGET:\n            return widgetPatch(domNode, vNode, patch, renderOptions)\n        case VPatch.VNODE:\n            return vNodePatch(domNode, vNode, patch, renderOptions)\n        case VPatch.ORDER:\n            reorderChildren(domNode, patch)\n            return domNode\n        case VPatch.PROPS:\n            applyProperties(domNode, patch, vNode.properties)\n            return domNode\n        case VPatch.THUNK:\n            return replaceRoot(domNode,\n                renderOptions.patch(domNode, patch, renderOptions))\n        default:\n            return domNode\n    }\n}\n\nfunction removeNode(domNode, vNode) {\n    var parentNode = domNode.parentNode\n\n    if (parentNode) {\n        parentNode.removeChild(domNode)\n    }\n\n    destroyWidget(domNode, vNode);\n\n    return null\n}\n\nfunction insertNode(parentNode, vNode, renderOptions) {\n    var newNode = render(vNode, renderOptions)\n\n    if (parentNode) {\n        parentNode.appendChild(newNode)\n    }\n\n    return parentNode\n}\n\nfunction stringPatch(domNode, leftVNode, vText, renderOptions) {\n    var newNode\n\n    if (domNode.nodeType === 3) {\n        domNode.replaceData(0, domNode.length, vText.text)\n        newNode = domNode\n    } else {\n        var parentNode = domNode.parentNode\n        newNode = render(vText, renderOptions)\n\n        if (parentNode && newNode !== domNode) {\n            parentNode.replaceChild(newNode, domNode)\n        }\n    }\n\n    return newNode\n}\n\nfunction widgetPatch(domNode, leftVNode, widget, renderOptions) {\n    var updating = updateWidget(leftVNode, widget)\n    var newNode\n\n    if (updating) {\n        newNode = widget.update(leftVNode, domNode) || domNode\n    } else {\n        newNode = render(widget, renderOptions)\n    }\n\n    var parentNode = domNode.parentNode\n\n    if (parentNode && newNode !== domNode) {\n        parentNode.replaceChild(newNode, domNode)\n    }\n\n    if (!updating) {\n        destroyWidget(domNode, leftVNode)\n    }\n\n    return newNode\n}\n\nfunction vNodePatch(domNode, leftVNode, vNode, renderOptions) {\n    var parentNode = domNode.parentNode\n    var newNode = render(vNode, renderOptions)\n\n    if (parentNode && newNode !== domNode) {\n        parentNode.replaceChild(newNode, domNode)\n    }\n\n    return newNode\n}\n\nfunction destroyWidget(domNode, w) {\n    if (typeof w.destroy === \"function\" && isWidget(w)) {\n        w.destroy(domNode)\n    }\n}\n\nfunction reorderChildren(domNode, moves) {\n    var childNodes = domNode.childNodes\n    var keyMap = {}\n    var node\n    var remove\n    var insert\n\n    for (var i = 0; i < moves.removes.length; i++) {\n        remove = moves.removes[i]\n        node = childNodes[remove.from]\n        if (remove.key) {\n            keyMap[remove.key] = node\n        }\n        domNode.removeChild(node)\n    }\n\n    var length = childNodes.length\n    for (var j = 0; j < moves.inserts.length; j++) {\n        insert = moves.inserts[j]\n        node = keyMap[insert.key]\n        // this is the weirdest bug i've ever seen in webkit\n        domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to])\n    }\n}\n\nfunction replaceRoot(oldRoot, newRoot) {\n    if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {\n        oldRoot.parentNode.replaceChild(newRoot, oldRoot)\n    }\n\n    return newRoot;\n}\n\n},{\"../vnode/is-widget.js\":16,\"../vnode/vpatch.js\":19,\"./apply-properties\":5,\"./create-element\":6,\"./update-widget\":10}],9:[function(require,module,exports){\nvar document = require(\"global/document\")\nvar isArray = require(\"x-is-array\")\n\nvar domIndex = require(\"./dom-index\")\nvar patchOp = require(\"./patch-op\")\nmodule.exports = patch\n\nfunction patch(rootNode, patches) {\n    return patchRecursive(rootNode, patches)\n}\n\nfunction patchRecursive(rootNode, patches, renderOptions) {\n    var indices = patchIndices(patches)\n\n    if (indices.length === 0) {\n        return rootNode\n    }\n\n    var index = domIndex(rootNode, patches.a, indices)\n    var ownerDocument = rootNode.ownerDocument\n\n    if (!renderOptions) {\n        renderOptions = { patch: patchRecursive }\n        if (ownerDocument !== document) {\n            renderOptions.document = ownerDocument\n        }\n    }\n\n    for (var i = 0; i < indices.length; i++) {\n        var nodeIndex = indices[i]\n        rootNode = applyPatch(rootNode,\n            index[nodeIndex],\n            patches[nodeIndex],\n            renderOptions)\n    }\n\n    return rootNode\n}\n\nfunction applyPatch(rootNode, domNode, patchList, renderOptions) {\n    if (!domNode) {\n        return rootNode\n    }\n\n    var newNode\n\n    if (isArray(patchList)) {\n        for (var i = 0; i < patchList.length; i++) {\n            newNode = patchOp(patchList[i], domNode, renderOptions)\n\n            if (domNode === rootNode) {\n                rootNode = newNode\n            }\n        }\n    } else {\n        newNode = patchOp(patchList, domNode, renderOptions)\n\n        if (domNode === rootNode) {\n            rootNode = newNode\n        }\n    }\n\n    return rootNode\n}\n\nfunction patchIndices(patches) {\n    var indices = []\n\n    for (var key in patches) {\n        if (key !== \"a\") {\n            indices.push(Number(key))\n        }\n    }\n\n    return indices\n}\n\n},{\"./dom-index\":7,\"./patch-op\":8,\"global/document\":2,\"x-is-array\":4}],10:[function(require,module,exports){\nvar isWidget = require(\"../vnode/is-widget.js\")\n\nmodule.exports = updateWidget\n\nfunction updateWidget(a, b) {\n    if (isWidget(a) && isWidget(b)) {\n        if (\"name\" in a && \"name\" in b) {\n            return a.id === b.id\n        } else {\n            return a.init === b.init\n        }\n    }\n\n    return false\n}\n\n},{\"../vnode/is-widget.js\":16}],11:[function(require,module,exports){\nvar isVNode = require(\"./is-vnode\")\nvar isVText = require(\"./is-vtext\")\nvar isWidget = require(\"./is-widget\")\nvar isThunk = require(\"./is-thunk\")\n\nmodule.exports = handleThunk\n\nfunction handleThunk(a, b) {\n    var renderedA = a\n    var renderedB = b\n\n    if (isThunk(b)) {\n        renderedB = renderThunk(b, a)\n    }\n\n    if (isThunk(a)) {\n        renderedA = renderThunk(a, null)\n    }\n\n    return {\n        a: renderedA,\n        b: renderedB\n    }\n}\n\nfunction renderThunk(thunk, previous) {\n    var renderedThunk = thunk.vnode\n\n    if (!renderedThunk) {\n        renderedThunk = thunk.vnode = thunk.render(previous)\n    }\n\n    if (!(isVNode(renderedThunk) ||\n            isVText(renderedThunk) ||\n            isWidget(renderedThunk))) {\n        throw new Error(\"thunk did not return a valid node\");\n    }\n\n    return renderedThunk\n}\n\n},{\"./is-thunk\":12,\"./is-vnode\":14,\"./is-vtext\":15,\"./is-widget\":16}],12:[function(require,module,exports){\nmodule.exports = isThunk\r\n\r\nfunction isThunk(t) {\r\n    return t && t.type === \"Thunk\"\r\n}\r\n\n},{}],13:[function(require,module,exports){\nmodule.exports = isHook\n\nfunction isHook(hook) {\n    return hook &&\n      (typeof hook.hook === \"function\" && !hook.hasOwnProperty(\"hook\") ||\n       typeof hook.unhook === \"function\" && !hook.hasOwnProperty(\"unhook\"))\n}\n\n},{}],14:[function(require,module,exports){\nvar version = require(\"./version\")\n\nmodule.exports = isVirtualNode\n\nfunction isVirtualNode(x) {\n    return x && x.type === \"VirtualNode\" && x.version === version\n}\n\n},{\"./version\":17}],15:[function(require,module,exports){\nvar version = require(\"./version\")\n\nmodule.exports = isVirtualText\n\nfunction isVirtualText(x) {\n    return x && x.type === \"VirtualText\" && x.version === version\n}\n\n},{\"./version\":17}],16:[function(require,module,exports){\nmodule.exports = isWidget\n\nfunction isWidget(w) {\n    return w && w.type === \"Widget\"\n}\n\n},{}],17:[function(require,module,exports){\nmodule.exports = \"2\"\n\n},{}],18:[function(require,module,exports){\nvar version = require(\"./version\")\nvar isVNode = require(\"./is-vnode\")\nvar isWidget = require(\"./is-widget\")\nvar isThunk = require(\"./is-thunk\")\nvar isVHook = require(\"./is-vhook\")\n\nmodule.exports = VirtualNode\n\nvar noProperties = {}\nvar noChildren = []\n\nfunction VirtualNode(tagName, properties, children, key, namespace) {\n    this.tagName = tagName\n    this.properties = properties || noProperties\n    this.children = children || noChildren\n    this.key = key != null ? String(key) : undefined\n    this.namespace = (typeof namespace === \"string\") ? namespace : null\n\n    var count = (children && children.length) || 0\n    var descendants = 0\n    var hasWidgets = false\n    var hasThunks = false\n    var descendantHooks = false\n    var hooks\n\n    for (var propName in properties) {\n        if (properties.hasOwnProperty(propName)) {\n            var property = properties[propName]\n            if (isVHook(property) && property.unhook) {\n                if (!hooks) {\n                    hooks = {}\n                }\n\n                hooks[propName] = property\n            }\n        }\n    }\n\n    for (var i = 0; i < count; i++) {\n        var child = children[i]\n        if (isVNode(child)) {\n            descendants += child.count || 0\n\n            if (!hasWidgets && child.hasWidgets) {\n                hasWidgets = true\n            }\n\n            if (!hasThunks && child.hasThunks) {\n                hasThunks = true\n            }\n\n            if (!descendantHooks && (child.hooks || child.descendantHooks)) {\n                descendantHooks = true\n            }\n        } else if (!hasWidgets && isWidget(child)) {\n            if (typeof child.destroy === \"function\") {\n                hasWidgets = true\n            }\n        } else if (!hasThunks && isThunk(child)) {\n            hasThunks = true;\n        }\n    }\n\n    this.count = count + descendants\n    this.hasWidgets = hasWidgets\n    this.hasThunks = hasThunks\n    this.hooks = hooks\n    this.descendantHooks = descendantHooks\n}\n\nVirtualNode.prototype.version = version\nVirtualNode.prototype.type = \"VirtualNode\"\n\n},{\"./is-thunk\":12,\"./is-vhook\":13,\"./is-vnode\":14,\"./is-widget\":16,\"./version\":17}],19:[function(require,module,exports){\nvar version = require(\"./version\")\n\nVirtualPatch.NONE = 0\nVirtualPatch.VTEXT = 1\nVirtualPatch.VNODE = 2\nVirtualPatch.WIDGET = 3\nVirtualPatch.PROPS = 4\nVirtualPatch.ORDER = 5\nVirtualPatch.INSERT = 6\nVirtualPatch.REMOVE = 7\nVirtualPatch.THUNK = 8\n\nmodule.exports = VirtualPatch\n\nfunction VirtualPatch(type, vNode, patch) {\n    this.type = Number(type)\n    this.vNode = vNode\n    this.patch = patch\n}\n\nVirtualPatch.prototype.version = version\nVirtualPatch.prototype.type = \"VirtualPatch\"\n\n},{\"./version\":17}],20:[function(require,module,exports){\nvar version = require(\"./version\")\n\nmodule.exports = VirtualText\n\nfunction VirtualText(text) {\n    this.text = String(text)\n}\n\nVirtualText.prototype.version = version\nVirtualText.prototype.type = \"VirtualText\"\n\n},{\"./version\":17}],21:[function(require,module,exports){\nvar isObject = require(\"is-object\")\nvar isHook = require(\"../vnode/is-vhook\")\n\nmodule.exports = diffProps\n\nfunction diffProps(a, b) {\n    var diff\n\n    for (var aKey in a) {\n        if (!(aKey in b)) {\n            diff = diff || {}\n            diff[aKey] = undefined\n        }\n\n        var aValue = a[aKey]\n        var bValue = b[aKey]\n\n        if (aValue === bValue) {\n            continue\n        } else if (isObject(aValue) && isObject(bValue)) {\n            if (getPrototype(bValue) !== getPrototype(aValue)) {\n                diff = diff || {}\n                diff[aKey] = bValue\n            } else if (isHook(bValue)) {\n                 diff = diff || {}\n                 diff[aKey] = bValue\n            } else {\n                var objectDiff = diffProps(aValue, bValue)\n                if (objectDiff) {\n                    diff = diff || {}\n                    diff[aKey] = objectDiff\n                }\n            }\n        } else {\n            diff = diff || {}\n            diff[aKey] = bValue\n        }\n    }\n\n    for (var bKey in b) {\n        if (!(bKey in a)) {\n            diff = diff || {}\n            diff[bKey] = b[bKey]\n        }\n    }\n\n    return diff\n}\n\nfunction getPrototype(value) {\n  if (Object.getPrototypeOf) {\n    return Object.getPrototypeOf(value)\n  } else if (value.__proto__) {\n    return value.__proto__\n  } else if (value.constructor) {\n    return value.constructor.prototype\n  }\n}\n\n},{\"../vnode/is-vhook\":13,\"is-object\":3}],22:[function(require,module,exports){\nvar isArray = require(\"x-is-array\")\n\nvar VPatch = require(\"../vnode/vpatch\")\nvar isVNode = require(\"../vnode/is-vnode\")\nvar isVText = require(\"../vnode/is-vtext\")\nvar isWidget = require(\"../vnode/is-widget\")\nvar isThunk = require(\"../vnode/is-thunk\")\nvar handleThunk = require(\"../vnode/handle-thunk\")\n\nvar diffProps = require(\"./diff-props\")\n\nmodule.exports = diff\n\nfunction diff(a, b) {\n    var patch = { a: a }\n    walk(a, b, patch, 0)\n    return patch\n}\n\nfunction walk(a, b, patch, index) {\n    if (a === b) {\n        return\n    }\n\n    var apply = patch[index]\n    var applyClear = false\n\n    if (isThunk(a) || isThunk(b)) {\n        thunks(a, b, patch, index)\n    } else if (b == null) {\n\n        // If a is a widget we will add a remove patch for it\n        // Otherwise any child widgets/hooks must be destroyed.\n        // This prevents adding two remove patches for a widget.\n        if (!isWidget(a)) {\n            clearState(a, patch, index)\n            apply = patch[index]\n        }\n\n        apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b))\n    } else if (isVNode(b)) {\n        if (isVNode(a)) {\n            if (a.tagName === b.tagName &&\n                a.namespace === b.namespace &&\n                a.key === b.key) {\n                var propsPatch = diffProps(a.properties, b.properties)\n                if (propsPatch) {\n                    apply = appendPatch(apply,\n                        new VPatch(VPatch.PROPS, a, propsPatch))\n                }\n                apply = diffChildren(a, b, patch, apply, index)\n            } else {\n                apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))\n                applyClear = true\n            }\n        } else {\n            apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b))\n            applyClear = true\n        }\n    } else if (isVText(b)) {\n        if (!isVText(a)) {\n            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))\n            applyClear = true\n        } else if (a.text !== b.text) {\n            apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b))\n        }\n    } else if (isWidget(b)) {\n        if (!isWidget(a)) {\n            applyClear = true\n        }\n\n        apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b))\n    }\n\n    if (apply) {\n        patch[index] = apply\n    }\n\n    if (applyClear) {\n        clearState(a, patch, index)\n    }\n}\n\nfunction diffChildren(a, b, patch, apply, index) {\n    var aChildren = a.children\n    var orderedSet = reorder(aChildren, b.children)\n    var bChildren = orderedSet.children\n\n    var aLen = aChildren.length\n    var bLen = bChildren.length\n    var len = aLen > bLen ? aLen : bLen\n\n    for (var i = 0; i < len; i++) {\n        var leftNode = aChildren[i]\n        var rightNode = bChildren[i]\n        index += 1\n\n        if (!leftNode) {\n            if (rightNode) {\n                // Excess nodes in b need to be added\n                apply = appendPatch(apply,\n                    new VPatch(VPatch.INSERT, null, rightNode))\n            }\n        } else {\n            walk(leftNode, rightNode, patch, index)\n        }\n\n        if (isVNode(leftNode) && leftNode.count) {\n            index += leftNode.count\n        }\n    }\n\n    if (orderedSet.moves) {\n        // Reorder nodes last\n        apply = appendPatch(apply, new VPatch(\n            VPatch.ORDER,\n            a,\n            orderedSet.moves\n        ))\n    }\n\n    return apply\n}\n\nfunction clearState(vNode, patch, index) {\n    // TODO: Make this a single walk, not two\n    unhook(vNode, patch, index)\n    destroyWidgets(vNode, patch, index)\n}\n\n// Patch records for all destroyed widgets must be added because we need\n// a DOM node reference for the destroy function\nfunction destroyWidgets(vNode, patch, index) {\n    if (isWidget(vNode)) {\n        if (typeof vNode.destroy === \"function\") {\n            patch[index] = appendPatch(\n                patch[index],\n                new VPatch(VPatch.REMOVE, vNode, null)\n            )\n        }\n    } else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) {\n        var children = vNode.children\n        var len = children.length\n        for (var i = 0; i < len; i++) {\n            var child = children[i]\n            index += 1\n\n            destroyWidgets(child, patch, index)\n\n            if (isVNode(child) && child.count) {\n                index += child.count\n            }\n        }\n    } else if (isThunk(vNode)) {\n        thunks(vNode, null, patch, index)\n    }\n}\n\n// Create a sub-patch for thunks\nfunction thunks(a, b, patch, index) {\n    var nodes = handleThunk(a, b)\n    var thunkPatch = diff(nodes.a, nodes.b)\n    if (hasPatches(thunkPatch)) {\n        patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch)\n    }\n}\n\nfunction hasPatches(patch) {\n    for (var index in patch) {\n        if (index !== \"a\") {\n            return true\n        }\n    }\n\n    return false\n}\n\n// Execute hooks when two nodes are identical\nfunction unhook(vNode, patch, index) {\n    if (isVNode(vNode)) {\n        if (vNode.hooks) {\n            patch[index] = appendPatch(\n                patch[index],\n                new VPatch(\n                    VPatch.PROPS,\n                    vNode,\n                    undefinedKeys(vNode.hooks)\n                )\n            )\n        }\n\n        if (vNode.descendantHooks || vNode.hasThunks) {\n            var children = vNode.children\n            var len = children.length\n            for (var i = 0; i < len; i++) {\n                var child = children[i]\n                index += 1\n\n                unhook(child, patch, index)\n\n                if (isVNode(child) && child.count) {\n                    index += child.count\n                }\n            }\n        }\n    } else if (isThunk(vNode)) {\n        thunks(vNode, null, patch, index)\n    }\n}\n\nfunction undefinedKeys(obj) {\n    var result = {}\n\n    for (var key in obj) {\n        result[key] = undefined\n    }\n\n    return result\n}\n\n// List diff, naive left to right reordering\nfunction reorder(aChildren, bChildren) {\n    // O(M) time, O(M) memory\n    var bChildIndex = keyIndex(bChildren)\n    var bKeys = bChildIndex.keys\n    var bFree = bChildIndex.free\n\n    if (bFree.length === bChildren.length) {\n        return {\n            children: bChildren,\n            moves: null\n        }\n    }\n\n    // O(N) time, O(N) memory\n    var aChildIndex = keyIndex(aChildren)\n    var aKeys = aChildIndex.keys\n    var aFree = aChildIndex.free\n\n    if (aFree.length === aChildren.length) {\n        return {\n            children: bChildren,\n            moves: null\n        }\n    }\n\n    // O(MAX(N, M)) memory\n    var newChildren = []\n\n    var freeIndex = 0\n    var freeCount = bFree.length\n    var deletedItems = 0\n\n    // Iterate through a and match a node in b\n    // O(N) time,\n    for (var i = 0 ; i < aChildren.length; i++) {\n        var aItem = aChildren[i]\n        var itemIndex\n\n        if (aItem.key) {\n            if (bKeys.hasOwnProperty(aItem.key)) {\n                // Match up the old keys\n                itemIndex = bKeys[aItem.key]\n                newChildren.push(bChildren[itemIndex])\n\n            } else {\n                // Remove old keyed items\n                itemIndex = i - deletedItems++\n                newChildren.push(null)\n            }\n        } else {\n            // Match the item in a with the next free item in b\n            if (freeIndex < freeCount) {\n                itemIndex = bFree[freeIndex++]\n                newChildren.push(bChildren[itemIndex])\n            } else {\n                // There are no free items in b to match with\n                // the free items in a, so the extra free nodes\n                // are deleted.\n                itemIndex = i - deletedItems++\n                newChildren.push(null)\n            }\n        }\n    }\n\n    var lastFreeIndex = freeIndex >= bFree.length ?\n        bChildren.length :\n        bFree[freeIndex]\n\n    // Iterate through b and append any new keys\n    // O(M) time\n    for (var j = 0; j < bChildren.length; j++) {\n        var newItem = bChildren[j]\n\n        if (newItem.key) {\n            if (!aKeys.hasOwnProperty(newItem.key)) {\n                // Add any new keyed items\n                // We are adding new items to the end and then sorting them\n                // in place. In future we should insert new items in place.\n                newChildren.push(newItem)\n            }\n        } else if (j >= lastFreeIndex) {\n            // Add any leftover non-keyed items\n            newChildren.push(newItem)\n        }\n    }\n\n    var simulate = newChildren.slice()\n    var simulateIndex = 0\n    var removes = []\n    var inserts = []\n    var simulateItem\n\n    for (var k = 0; k < bChildren.length;) {\n        var wantedItem = bChildren[k]\n        simulateItem = simulate[simulateIndex]\n\n        // remove items\n        while (simulateItem === null && simulate.length) {\n            removes.push(remove(simulate, simulateIndex, null))\n            simulateItem = simulate[simulateIndex]\n        }\n\n        if (!simulateItem || simulateItem.key !== wantedItem.key) {\n            // if we need a key in this position...\n            if (wantedItem.key) {\n                if (simulateItem && simulateItem.key) {\n                    // if an insert doesn't put this key in place, it needs to move\n                    if (bKeys[simulateItem.key] !== k + 1) {\n                        removes.push(remove(simulate, simulateIndex, simulateItem.key))\n                        simulateItem = simulate[simulateIndex]\n                        // if the remove didn't put the wanted item in place, we need to insert it\n                        if (!simulateItem || simulateItem.key !== wantedItem.key) {\n                            inserts.push({key: wantedItem.key, to: k})\n                        }\n                        // items are matching, so skip ahead\n                        else {\n                            simulateIndex++\n                        }\n                    }\n                    else {\n                        inserts.push({key: wantedItem.key, to: k})\n                    }\n                }\n                else {\n                    inserts.push({key: wantedItem.key, to: k})\n                }\n                k++\n            }\n            // a key in simulate has no matching wanted key, remove it\n            else if (simulateItem && simulateItem.key) {\n                removes.push(remove(simulate, simulateIndex, simulateItem.key))\n            }\n        }\n        else {\n            simulateIndex++\n            k++\n        }\n    }\n\n    // remove all the remaining nodes from simulate\n    while(simulateIndex < simulate.length) {\n        simulateItem = simulate[simulateIndex]\n        removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key))\n    }\n\n    // If the only moves we have are deletes then we can just\n    // let the delete patch remove these items.\n    if (removes.length === deletedItems && !inserts.length) {\n        return {\n            children: newChildren,\n            moves: null\n        }\n    }\n\n    return {\n        children: newChildren,\n        moves: {\n            removes: removes,\n            inserts: inserts\n        }\n    }\n}\n\nfunction remove(arr, index, key) {\n    arr.splice(index, 1)\n\n    return {\n        from: index,\n        key: key\n    }\n}\n\nfunction keyIndex(children) {\n    var keys = {}\n    var free = []\n    var length = children.length\n\n    for (var i = 0; i < length; i++) {\n        var child = children[i]\n\n        if (child.key) {\n            keys[child.key] = i\n        } else {\n            free.push(i)\n        }\n    }\n\n    return {\n        keys: keys,     // A hash of key name to index\n        free: free,     // An array of unkeyed item indices\n    }\n}\n\nfunction appendPatch(apply, patch) {\n    if (apply) {\n        if (isArray(apply)) {\n            apply.push(patch)\n        } else {\n            apply = [apply, patch]\n        }\n\n        return apply\n    } else {\n        return patch\n    }\n}\n\n},{\"../vnode/handle-thunk\":11,\"../vnode/is-thunk\":12,\"../vnode/is-vnode\":14,\"../vnode/is-vtext\":15,\"../vnode/is-widget\":16,\"../vnode/vpatch\":19,\"./diff-props\":21,\"x-is-array\":4}],23:[function(require,module,exports){\nvar VNode = require('virtual-dom/vnode/vnode');\nvar VText = require('virtual-dom/vnode/vtext');\nvar diff = require('virtual-dom/vtree/diff');\nvar patch = require('virtual-dom/vdom/patch');\nvar createElement = require('virtual-dom/vdom/create-element');\nvar isHook = require(\"virtual-dom/vnode/is-vhook\");\n\n\nElm.Native.VirtualDom = {};\nElm.Native.VirtualDom.make = function(elm)\n{\n\telm.Native = elm.Native || {};\n\telm.Native.VirtualDom = elm.Native.VirtualDom || {};\n\tif (elm.Native.VirtualDom.values)\n\t{\n\t\treturn elm.Native.VirtualDom.values;\n\t}\n\n\tvar Element = Elm.Native.Graphics.Element.make(elm);\n\tvar Json = Elm.Native.Json.make(elm);\n\tvar List = Elm.Native.List.make(elm);\n\tvar Signal = Elm.Native.Signal.make(elm);\n\tvar Utils = Elm.Native.Utils.make(elm);\n\n\tvar ATTRIBUTE_KEY = 'UniqueNameThatOthersAreVeryUnlikelyToUse';\n\n\n\n\t// VIRTUAL DOM NODES\n\n\n\tfunction text(string)\n\t{\n\t\treturn new VText(string);\n\t}\n\n\tfunction node(name)\n\t{\n\t\treturn F2(function(propertyList, contents) {\n\t\t\treturn makeNode(name, propertyList, contents);\n\t\t});\n\t}\n\n\n\t// BUILD VIRTUAL DOME NODES\n\n\n\tfunction makeNode(name, propertyList, contents)\n\t{\n\t\tvar props = listToProperties(propertyList);\n\n\t\tvar key, namespace;\n\t\t// support keys\n\t\tif (props.key !== undefined)\n\t\t{\n\t\t\tkey = props.key;\n\t\t\tprops.key = undefined;\n\t\t}\n\n\t\t// support namespace\n\t\tif (props.namespace !== undefined)\n\t\t{\n\t\t\tnamespace = props.namespace;\n\t\t\tprops.namespace = undefined;\n\t\t}\n\n\t\t// ensure that setting text of an input does not move the cursor\n\t\tvar useSoftSet =\n\t\t\t(name === 'input' || name === 'textarea')\n\t\t\t&& props.value !== undefined\n\t\t\t&& !isHook(props.value);\n\n\t\tif (useSoftSet)\n\t\t{\n\t\t\tprops.value = SoftSetHook(props.value);\n\t\t}\n\n\t\treturn new VNode(name, props, List.toArray(contents), key, namespace);\n\t}\n\n\tfunction listToProperties(list)\n\t{\n\t\tvar object = {};\n\t\twhile (list.ctor !== '[]')\n\t\t{\n\t\t\tvar entry = list._0;\n\t\t\tif (entry.key === ATTRIBUTE_KEY)\n\t\t\t{\n\t\t\t\tobject.attributes = object.attributes || {};\n\t\t\t\tobject.attributes[entry.value.attrKey] = entry.value.attrValue;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tobject[entry.key] = entry.value;\n\t\t\t}\n\t\t\tlist = list._1;\n\t\t}\n\t\treturn object;\n\t}\n\n\n\n\t// PROPERTIES AND ATTRIBUTES\n\n\n\tfunction property(key, value)\n\t{\n\t\treturn {\n\t\t\tkey: key,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tfunction attribute(key, value)\n\t{\n\t\treturn {\n\t\t\tkey: ATTRIBUTE_KEY,\n\t\t\tvalue: {\n\t\t\t\tattrKey: key,\n\t\t\t\tattrValue: value\n\t\t\t}\n\t\t};\n\t}\n\n\n\n\t// NAMESPACED ATTRIBUTES\n\n\n\tfunction attributeNS(namespace, key, value)\n\t{\n\t\treturn {\n\t\t\tkey: key,\n\t\t\tvalue: new AttributeHook(namespace, key, value)\n\t\t};\n\t}\n\n\tfunction AttributeHook(namespace, key, value)\n\t{\n\t\tif (!(this instanceof AttributeHook))\n\t\t{\n\t\t\treturn new AttributeHook(namespace, key, value);\n\t\t}\n\n\t\tthis.namespace = namespace;\n\t\tthis.key = key;\n\t\tthis.value = value;\n\t}\n\n\tAttributeHook.prototype.hook = function (node, prop, prev)\n\t{\n\t\tif (prev\n\t\t\t&& prev.type === 'AttributeHook'\n\t\t\t&& prev.value === this.value\n\t\t\t&& prev.namespace === this.namespace)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tnode.setAttributeNS(this.namespace, prop, this.value);\n\t};\n\n\tAttributeHook.prototype.unhook = function (node, prop, next)\n\t{\n\t\tif (next\n\t\t\t&& next.type === 'AttributeHook'\n\t\t\t&& next.namespace === this.namespace)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tnode.removeAttributeNS(this.namespace, this.key);\n\t};\n\n\tAttributeHook.prototype.type = 'AttributeHook';\n\n\n\n\t// EVENTS\n\n\n\tfunction on(name, options, decoder, createMessage)\n\t{\n\t\tfunction eventHandler(event)\n\t\t{\n\t\t\tvar value = A2(Json.runDecoderValue, decoder, event);\n\t\t\tif (value.ctor === 'Ok')\n\t\t\t{\n\t\t\t\tif (options.stopPropagation)\n\t\t\t\t{\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t\tif (options.preventDefault)\n\t\t\t\t{\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tSignal.sendMessage(createMessage(value._0));\n\t\t\t}\n\t\t}\n\t\treturn property('on' + name, eventHandler);\n\t}\n\n\tfunction SoftSetHook(value)\n\t{\n\t\tif (!(this instanceof SoftSetHook))\n\t\t{\n\t\t\treturn new SoftSetHook(value);\n\t\t}\n\n\t\tthis.value = value;\n\t}\n\n\tSoftSetHook.prototype.hook = function (node, propertyName)\n\t{\n\t\tif (node[propertyName] !== this.value)\n\t\t{\n\t\t\tnode[propertyName] = this.value;\n\t\t}\n\t};\n\n\n\n\t// INTEGRATION WITH ELEMENTS\n\n\n\tfunction ElementWidget(element)\n\t{\n\t\tthis.element = element;\n\t}\n\n\tElementWidget.prototype.type = \"Widget\";\n\n\tElementWidget.prototype.init = function init()\n\t{\n\t\treturn Element.render(this.element);\n\t};\n\n\tElementWidget.prototype.update = function update(previous, node)\n\t{\n\t\treturn Element.update(node, previous.element, this.element);\n\t};\n\n\tfunction fromElement(element)\n\t{\n\t\treturn new ElementWidget(element);\n\t}\n\n\tfunction toElement(width, height, html)\n\t{\n\t\treturn A3(Element.newElement, width, height, {\n\t\t\tctor: 'Custom',\n\t\t\ttype: 'evancz/elm-html',\n\t\t\trender: render,\n\t\t\tupdate: update,\n\t\t\tmodel: html\n\t\t});\n\t}\n\n\n\n\t// RENDER AND UPDATE\n\n\n\tfunction render(model)\n\t{\n\t\tvar element = Element.createNode('div');\n\t\telement.appendChild(createElement(model));\n\t\treturn element;\n\t}\n\n\tfunction update(node, oldModel, newModel)\n\t{\n\t\tupdateAndReplace(node.firstChild, oldModel, newModel);\n\t\treturn node;\n\t}\n\n\tfunction updateAndReplace(node, oldModel, newModel)\n\t{\n\t\tvar patches = diff(oldModel, newModel);\n\t\tvar newNode = patch(node, patches);\n\t\treturn newNode;\n\t}\n\n\n\n\t// LAZINESS\n\n\n\tfunction lazyRef(fn, a)\n\t{\n\t\tfunction thunk()\n\t\t{\n\t\t\treturn fn(a);\n\t\t}\n\t\treturn new Thunk(fn, [a], thunk);\n\t}\n\n\tfunction lazyRef2(fn, a, b)\n\t{\n\t\tfunction thunk()\n\t\t{\n\t\t\treturn A2(fn, a, b);\n\t\t}\n\t\treturn new Thunk(fn, [a,b], thunk);\n\t}\n\n\tfunction lazyRef3(fn, a, b, c)\n\t{\n\t\tfunction thunk()\n\t\t{\n\t\t\treturn A3(fn, a, b, c);\n\t\t}\n\t\treturn new Thunk(fn, [a,b,c], thunk);\n\t}\n\n\tfunction Thunk(fn, args, thunk)\n\t{\n\t\t/* public (used by VirtualDom.js) */\n\t\tthis.vnode = null;\n\t\tthis.key = undefined;\n\n\t\t/* private */\n\t\tthis.fn = fn;\n\t\tthis.args = args;\n\t\tthis.thunk = thunk;\n\t}\n\n\tThunk.prototype.type = \"Thunk\";\n\tThunk.prototype.render = renderThunk;\n\n\tfunction shouldUpdate(current, previous)\n\t{\n\t\tif (current.fn !== previous.fn)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\t// if it's the same function, we know the number of args must match\n\t\tvar cargs = current.args;\n\t\tvar pargs = previous.args;\n\n\t\tfor (var i = cargs.length; i--; )\n\t\t{\n\t\t\tif (cargs[i] !== pargs[i])\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction renderThunk(previous)\n\t{\n\t\tif (previous == null || shouldUpdate(this, previous))\n\t\t{\n\t\t\treturn this.thunk();\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn previous.vnode;\n\t\t}\n\t}\n\n\n\treturn elm.Native.VirtualDom.values = Elm.Native.VirtualDom.values = {\n\t\tnode: node,\n\t\ttext: text,\n\t\ton: F4(on),\n\n\t\tproperty: F2(property),\n\t\tattribute: F2(attribute),\n\t\tattributeNS: F3(attributeNS),\n\n\t\tlazy: F2(lazyRef),\n\t\tlazy2: F3(lazyRef2),\n\t\tlazy3: F4(lazyRef3),\n\n\t\ttoElement: F3(toElement),\n\t\tfromElement: fromElement,\n\n\t\trender: createElement,\n\t\tupdateAndReplace: updateAndReplace\n\t};\n};\n\n},{\"virtual-dom/vdom/create-element\":6,\"virtual-dom/vdom/patch\":9,\"virtual-dom/vnode/is-vhook\":13,\"virtual-dom/vnode/vnode\":18,\"virtual-dom/vnode/vtext\":20,\"virtual-dom/vtree/diff\":22}]},{},[23]);\n\nElm.VirtualDom = Elm.VirtualDom || {};\nElm.VirtualDom.make = function (_elm) {\n   \"use strict\";\n   _elm.VirtualDom = _elm.VirtualDom || {};\n   if (_elm.VirtualDom.values) return _elm.VirtualDom.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Graphics$Element = Elm.Graphics.Element.make(_elm),\n   $Json$Decode = Elm.Json.Decode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Native$VirtualDom = Elm.Native.VirtualDom.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm);\n   var _op = {};\n   var lazy3 = $Native$VirtualDom.lazy3;\n   var lazy2 = $Native$VirtualDom.lazy2;\n   var lazy = $Native$VirtualDom.lazy;\n   var defaultOptions = {stopPropagation: false,preventDefault: false};\n   var Options = F2(function (a,b) {    return {stopPropagation: a,preventDefault: b};});\n   var onWithOptions = $Native$VirtualDom.on;\n   var on = F3(function (eventName,decoder,toMessage) {    return A4($Native$VirtualDom.on,eventName,defaultOptions,decoder,toMessage);});\n   var attributeNS = $Native$VirtualDom.attributeNS;\n   var attribute = $Native$VirtualDom.attribute;\n   var property = $Native$VirtualDom.property;\n   var Property = {ctor: \"Property\"};\n   var fromElement = $Native$VirtualDom.fromElement;\n   var toElement = $Native$VirtualDom.toElement;\n   var text = $Native$VirtualDom.text;\n   var node = $Native$VirtualDom.node;\n   var Node = {ctor: \"Node\"};\n   return _elm.VirtualDom.values = {_op: _op\n                                   ,text: text\n                                   ,node: node\n                                   ,toElement: toElement\n                                   ,fromElement: fromElement\n                                   ,property: property\n                                   ,attribute: attribute\n                                   ,attributeNS: attributeNS\n                                   ,on: on\n                                   ,onWithOptions: onWithOptions\n                                   ,defaultOptions: defaultOptions\n                                   ,lazy: lazy\n                                   ,lazy2: lazy2\n                                   ,lazy3: lazy3\n                                   ,Options: Options};\n};\nElm.Html = Elm.Html || {};\nElm.Html.make = function (_elm) {\n   \"use strict\";\n   _elm.Html = _elm.Html || {};\n   if (_elm.Html.values) return _elm.Html.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Graphics$Element = Elm.Graphics.Element.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $VirtualDom = Elm.VirtualDom.make(_elm);\n   var _op = {};\n   var fromElement = $VirtualDom.fromElement;\n   var toElement = $VirtualDom.toElement;\n   var text = $VirtualDom.text;\n   var node = $VirtualDom.node;\n   var body = node(\"body\");\n   var section = node(\"section\");\n   var nav = node(\"nav\");\n   var article = node(\"article\");\n   var aside = node(\"aside\");\n   var h1 = node(\"h1\");\n   var h2 = node(\"h2\");\n   var h3 = node(\"h3\");\n   var h4 = node(\"h4\");\n   var h5 = node(\"h5\");\n   var h6 = node(\"h6\");\n   var header = node(\"header\");\n   var footer = node(\"footer\");\n   var address = node(\"address\");\n   var main$ = node(\"main\");\n   var p = node(\"p\");\n   var hr = node(\"hr\");\n   var pre = node(\"pre\");\n   var blockquote = node(\"blockquote\");\n   var ol = node(\"ol\");\n   var ul = node(\"ul\");\n   var li = node(\"li\");\n   var dl = node(\"dl\");\n   var dt = node(\"dt\");\n   var dd = node(\"dd\");\n   var figure = node(\"figure\");\n   var figcaption = node(\"figcaption\");\n   var div = node(\"div\");\n   var a = node(\"a\");\n   var em = node(\"em\");\n   var strong = node(\"strong\");\n   var small = node(\"small\");\n   var s = node(\"s\");\n   var cite = node(\"cite\");\n   var q = node(\"q\");\n   var dfn = node(\"dfn\");\n   var abbr = node(\"abbr\");\n   var time = node(\"time\");\n   var code = node(\"code\");\n   var $var = node(\"var\");\n   var samp = node(\"samp\");\n   var kbd = node(\"kbd\");\n   var sub = node(\"sub\");\n   var sup = node(\"sup\");\n   var i = node(\"i\");\n   var b = node(\"b\");\n   var u = node(\"u\");\n   var mark = node(\"mark\");\n   var ruby = node(\"ruby\");\n   var rt = node(\"rt\");\n   var rp = node(\"rp\");\n   var bdi = node(\"bdi\");\n   var bdo = node(\"bdo\");\n   var span = node(\"span\");\n   var br = node(\"br\");\n   var wbr = node(\"wbr\");\n   var ins = node(\"ins\");\n   var del = node(\"del\");\n   var img = node(\"img\");\n   var iframe = node(\"iframe\");\n   var embed = node(\"embed\");\n   var object = node(\"object\");\n   var param = node(\"param\");\n   var video = node(\"video\");\n   var audio = node(\"audio\");\n   var source = node(\"source\");\n   var track = node(\"track\");\n   var canvas = node(\"canvas\");\n   var svg = node(\"svg\");\n   var math = node(\"math\");\n   var table = node(\"table\");\n   var caption = node(\"caption\");\n   var colgroup = node(\"colgroup\");\n   var col = node(\"col\");\n   var tbody = node(\"tbody\");\n   var thead = node(\"thead\");\n   var tfoot = node(\"tfoot\");\n   var tr = node(\"tr\");\n   var td = node(\"td\");\n   var th = node(\"th\");\n   var form = node(\"form\");\n   var fieldset = node(\"fieldset\");\n   var legend = node(\"legend\");\n   var label = node(\"label\");\n   var input = node(\"input\");\n   var button = node(\"button\");\n   var select = node(\"select\");\n   var datalist = node(\"datalist\");\n   var optgroup = node(\"optgroup\");\n   var option = node(\"option\");\n   var textarea = node(\"textarea\");\n   var keygen = node(\"keygen\");\n   var output = node(\"output\");\n   var progress = node(\"progress\");\n   var meter = node(\"meter\");\n   var details = node(\"details\");\n   var summary = node(\"summary\");\n   var menuitem = node(\"menuitem\");\n   var menu = node(\"menu\");\n   return _elm.Html.values = {_op: _op\n                             ,node: node\n                             ,text: text\n                             ,toElement: toElement\n                             ,fromElement: fromElement\n                             ,body: body\n                             ,section: section\n                             ,nav: nav\n                             ,article: article\n                             ,aside: aside\n                             ,h1: h1\n                             ,h2: h2\n                             ,h3: h3\n                             ,h4: h4\n                             ,h5: h5\n                             ,h6: h6\n                             ,header: header\n                             ,footer: footer\n                             ,address: address\n                             ,main$: main$\n                             ,p: p\n                             ,hr: hr\n                             ,pre: pre\n                             ,blockquote: blockquote\n                             ,ol: ol\n                             ,ul: ul\n                             ,li: li\n                             ,dl: dl\n                             ,dt: dt\n                             ,dd: dd\n                             ,figure: figure\n                             ,figcaption: figcaption\n                             ,div: div\n                             ,a: a\n                             ,em: em\n                             ,strong: strong\n                             ,small: small\n                             ,s: s\n                             ,cite: cite\n                             ,q: q\n                             ,dfn: dfn\n                             ,abbr: abbr\n                             ,time: time\n                             ,code: code\n                             ,$var: $var\n                             ,samp: samp\n                             ,kbd: kbd\n                             ,sub: sub\n                             ,sup: sup\n                             ,i: i\n                             ,b: b\n                             ,u: u\n                             ,mark: mark\n                             ,ruby: ruby\n                             ,rt: rt\n                             ,rp: rp\n                             ,bdi: bdi\n                             ,bdo: bdo\n                             ,span: span\n                             ,br: br\n                             ,wbr: wbr\n                             ,ins: ins\n                             ,del: del\n                             ,img: img\n                             ,iframe: iframe\n                             ,embed: embed\n                             ,object: object\n                             ,param: param\n                             ,video: video\n                             ,audio: audio\n                             ,source: source\n                             ,track: track\n                             ,canvas: canvas\n                             ,svg: svg\n                             ,math: math\n                             ,table: table\n                             ,caption: caption\n                             ,colgroup: colgroup\n                             ,col: col\n                             ,tbody: tbody\n                             ,thead: thead\n                             ,tfoot: tfoot\n                             ,tr: tr\n                             ,td: td\n                             ,th: th\n                             ,form: form\n                             ,fieldset: fieldset\n                             ,legend: legend\n                             ,label: label\n                             ,input: input\n                             ,button: button\n                             ,select: select\n                             ,datalist: datalist\n                             ,optgroup: optgroup\n                             ,option: option\n                             ,textarea: textarea\n                             ,keygen: keygen\n                             ,output: output\n                             ,progress: progress\n                             ,meter: meter\n                             ,details: details\n                             ,summary: summary\n                             ,menuitem: menuitem\n                             ,menu: menu};\n};\nElm.Html = Elm.Html || {};\nElm.Html.Attributes = Elm.Html.Attributes || {};\nElm.Html.Attributes.make = function (_elm) {\n   \"use strict\";\n   _elm.Html = _elm.Html || {};\n   _elm.Html.Attributes = _elm.Html.Attributes || {};\n   if (_elm.Html.Attributes.values) return _elm.Html.Attributes.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $Json$Encode = Elm.Json.Encode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $String = Elm.String.make(_elm),\n   $VirtualDom = Elm.VirtualDom.make(_elm);\n   var _op = {};\n   var attribute = $VirtualDom.attribute;\n   var contextmenu = function (value) {    return A2(attribute,\"contextmenu\",value);};\n   var property = $VirtualDom.property;\n   var stringProperty = F2(function (name,string) {    return A2(property,name,$Json$Encode.string(string));});\n   var $class = function (name) {    return A2(stringProperty,\"className\",name);};\n   var id = function (name) {    return A2(stringProperty,\"id\",name);};\n   var title = function (name) {    return A2(stringProperty,\"title\",name);};\n   var accesskey = function ($char) {    return A2(stringProperty,\"accessKey\",$String.fromChar($char));};\n   var dir = function (value) {    return A2(stringProperty,\"dir\",value);};\n   var draggable = function (value) {    return A2(stringProperty,\"draggable\",value);};\n   var dropzone = function (value) {    return A2(stringProperty,\"dropzone\",value);};\n   var itemprop = function (value) {    return A2(stringProperty,\"itemprop\",value);};\n   var lang = function (value) {    return A2(stringProperty,\"lang\",value);};\n   var tabindex = function (n) {    return A2(stringProperty,\"tabIndex\",$Basics.toString(n));};\n   var charset = function (value) {    return A2(stringProperty,\"charset\",value);};\n   var content = function (value) {    return A2(stringProperty,\"content\",value);};\n   var httpEquiv = function (value) {    return A2(stringProperty,\"httpEquiv\",value);};\n   var language = function (value) {    return A2(stringProperty,\"language\",value);};\n   var src = function (value) {    return A2(stringProperty,\"src\",value);};\n   var height = function (value) {    return A2(stringProperty,\"height\",$Basics.toString(value));};\n   var width = function (value) {    return A2(stringProperty,\"width\",$Basics.toString(value));};\n   var alt = function (value) {    return A2(stringProperty,\"alt\",value);};\n   var preload = function (value) {    return A2(stringProperty,\"preload\",value);};\n   var poster = function (value) {    return A2(stringProperty,\"poster\",value);};\n   var kind = function (value) {    return A2(stringProperty,\"kind\",value);};\n   var srclang = function (value) {    return A2(stringProperty,\"srclang\",value);};\n   var sandbox = function (value) {    return A2(stringProperty,\"sandbox\",value);};\n   var srcdoc = function (value) {    return A2(stringProperty,\"srcdoc\",value);};\n   var type$ = function (value) {    return A2(stringProperty,\"type\",value);};\n   var value = function (value) {    return A2(stringProperty,\"value\",value);};\n   var placeholder = function (value) {    return A2(stringProperty,\"placeholder\",value);};\n   var accept = function (value) {    return A2(stringProperty,\"accept\",value);};\n   var acceptCharset = function (value) {    return A2(stringProperty,\"acceptCharset\",value);};\n   var action = function (value) {    return A2(stringProperty,\"action\",value);};\n   var autocomplete = function (bool) {    return A2(stringProperty,\"autocomplete\",bool ? \"on\" : \"off\");};\n   var autosave = function (value) {    return A2(stringProperty,\"autosave\",value);};\n   var enctype = function (value) {    return A2(stringProperty,\"enctype\",value);};\n   var formaction = function (value) {    return A2(stringProperty,\"formAction\",value);};\n   var list = function (value) {    return A2(stringProperty,\"list\",value);};\n   var minlength = function (n) {    return A2(stringProperty,\"minLength\",$Basics.toString(n));};\n   var maxlength = function (n) {    return A2(stringProperty,\"maxLength\",$Basics.toString(n));};\n   var method = function (value) {    return A2(stringProperty,\"method\",value);};\n   var name = function (value) {    return A2(stringProperty,\"name\",value);};\n   var pattern = function (value) {    return A2(stringProperty,\"pattern\",value);};\n   var size = function (n) {    return A2(stringProperty,\"size\",$Basics.toString(n));};\n   var $for = function (value) {    return A2(stringProperty,\"htmlFor\",value);};\n   var form = function (value) {    return A2(stringProperty,\"form\",value);};\n   var max = function (value) {    return A2(stringProperty,\"max\",value);};\n   var min = function (value) {    return A2(stringProperty,\"min\",value);};\n   var step = function (n) {    return A2(stringProperty,\"step\",n);};\n   var cols = function (n) {    return A2(stringProperty,\"cols\",$Basics.toString(n));};\n   var rows = function (n) {    return A2(stringProperty,\"rows\",$Basics.toString(n));};\n   var wrap = function (value) {    return A2(stringProperty,\"wrap\",value);};\n   var usemap = function (value) {    return A2(stringProperty,\"useMap\",value);};\n   var shape = function (value) {    return A2(stringProperty,\"shape\",value);};\n   var coords = function (value) {    return A2(stringProperty,\"coords\",value);};\n   var challenge = function (value) {    return A2(stringProperty,\"challenge\",value);};\n   var keytype = function (value) {    return A2(stringProperty,\"keytype\",value);};\n   var align = function (value) {    return A2(stringProperty,\"align\",value);};\n   var cite = function (value) {    return A2(stringProperty,\"cite\",value);};\n   var href = function (value) {    return A2(stringProperty,\"href\",value);};\n   var target = function (value) {    return A2(stringProperty,\"target\",value);};\n   var downloadAs = function (value) {    return A2(stringProperty,\"download\",value);};\n   var hreflang = function (value) {    return A2(stringProperty,\"hreflang\",value);};\n   var media = function (value) {    return A2(stringProperty,\"media\",value);};\n   var ping = function (value) {    return A2(stringProperty,\"ping\",value);};\n   var rel = function (value) {    return A2(stringProperty,\"rel\",value);};\n   var datetime = function (value) {    return A2(stringProperty,\"datetime\",value);};\n   var pubdate = function (value) {    return A2(stringProperty,\"pubdate\",value);};\n   var start = function (n) {    return A2(stringProperty,\"start\",$Basics.toString(n));};\n   var colspan = function (n) {    return A2(stringProperty,\"colSpan\",$Basics.toString(n));};\n   var headers = function (value) {    return A2(stringProperty,\"headers\",value);};\n   var rowspan = function (n) {    return A2(stringProperty,\"rowSpan\",$Basics.toString(n));};\n   var scope = function (value) {    return A2(stringProperty,\"scope\",value);};\n   var manifest = function (value) {    return A2(stringProperty,\"manifest\",value);};\n   var boolProperty = F2(function (name,bool) {    return A2(property,name,$Json$Encode.bool(bool));});\n   var hidden = function (bool) {    return A2(boolProperty,\"hidden\",bool);};\n   var contenteditable = function (bool) {    return A2(boolProperty,\"contentEditable\",bool);};\n   var spellcheck = function (bool) {    return A2(boolProperty,\"spellcheck\",bool);};\n   var async = function (bool) {    return A2(boolProperty,\"async\",bool);};\n   var defer = function (bool) {    return A2(boolProperty,\"defer\",bool);};\n   var scoped = function (bool) {    return A2(boolProperty,\"scoped\",bool);};\n   var autoplay = function (bool) {    return A2(boolProperty,\"autoplay\",bool);};\n   var controls = function (bool) {    return A2(boolProperty,\"controls\",bool);};\n   var loop = function (bool) {    return A2(boolProperty,\"loop\",bool);};\n   var $default = function (bool) {    return A2(boolProperty,\"default\",bool);};\n   var seamless = function (bool) {    return A2(boolProperty,\"seamless\",bool);};\n   var checked = function (bool) {    return A2(boolProperty,\"checked\",bool);};\n   var selected = function (bool) {    return A2(boolProperty,\"selected\",bool);};\n   var autofocus = function (bool) {    return A2(boolProperty,\"autofocus\",bool);};\n   var disabled = function (bool) {    return A2(boolProperty,\"disabled\",bool);};\n   var multiple = function (bool) {    return A2(boolProperty,\"multiple\",bool);};\n   var novalidate = function (bool) {    return A2(boolProperty,\"noValidate\",bool);};\n   var readonly = function (bool) {    return A2(boolProperty,\"readOnly\",bool);};\n   var required = function (bool) {    return A2(boolProperty,\"required\",bool);};\n   var ismap = function (value) {    return A2(boolProperty,\"isMap\",value);};\n   var download = function (bool) {    return A2(boolProperty,\"download\",bool);};\n   var reversed = function (bool) {    return A2(boolProperty,\"reversed\",bool);};\n   var classList = function (list) {    return $class(A2($String.join,\" \",A2($List.map,$Basics.fst,A2($List.filter,$Basics.snd,list))));};\n   var style = function (props) {\n      return A2(property,\n      \"style\",\n      $Json$Encode.object(A2($List.map,function (_p0) {    var _p1 = _p0;return {ctor: \"_Tuple2\",_0: _p1._0,_1: $Json$Encode.string(_p1._1)};},props)));\n   };\n   var key = function (k) {    return A2(stringProperty,\"key\",k);};\n   return _elm.Html.Attributes.values = {_op: _op\n                                        ,key: key\n                                        ,style: style\n                                        ,$class: $class\n                                        ,classList: classList\n                                        ,id: id\n                                        ,title: title\n                                        ,hidden: hidden\n                                        ,type$: type$\n                                        ,value: value\n                                        ,checked: checked\n                                        ,placeholder: placeholder\n                                        ,selected: selected\n                                        ,accept: accept\n                                        ,acceptCharset: acceptCharset\n                                        ,action: action\n                                        ,autocomplete: autocomplete\n                                        ,autofocus: autofocus\n                                        ,autosave: autosave\n                                        ,disabled: disabled\n                                        ,enctype: enctype\n                                        ,formaction: formaction\n                                        ,list: list\n                                        ,maxlength: maxlength\n                                        ,minlength: minlength\n                                        ,method: method\n                                        ,multiple: multiple\n                                        ,name: name\n                                        ,novalidate: novalidate\n                                        ,pattern: pattern\n                                        ,readonly: readonly\n                                        ,required: required\n                                        ,size: size\n                                        ,$for: $for\n                                        ,form: form\n                                        ,max: max\n                                        ,min: min\n                                        ,step: step\n                                        ,cols: cols\n                                        ,rows: rows\n                                        ,wrap: wrap\n                                        ,href: href\n                                        ,target: target\n                                        ,download: download\n                                        ,downloadAs: downloadAs\n                                        ,hreflang: hreflang\n                                        ,media: media\n                                        ,ping: ping\n                                        ,rel: rel\n                                        ,ismap: ismap\n                                        ,usemap: usemap\n                                        ,shape: shape\n                                        ,coords: coords\n                                        ,src: src\n                                        ,height: height\n                                        ,width: width\n                                        ,alt: alt\n                                        ,autoplay: autoplay\n                                        ,controls: controls\n                                        ,loop: loop\n                                        ,preload: preload\n                                        ,poster: poster\n                                        ,$default: $default\n                                        ,kind: kind\n                                        ,srclang: srclang\n                                        ,sandbox: sandbox\n                                        ,seamless: seamless\n                                        ,srcdoc: srcdoc\n                                        ,reversed: reversed\n                                        ,start: start\n                                        ,align: align\n                                        ,colspan: colspan\n                                        ,rowspan: rowspan\n                                        ,headers: headers\n                                        ,scope: scope\n                                        ,async: async\n                                        ,charset: charset\n                                        ,content: content\n                                        ,defer: defer\n                                        ,httpEquiv: httpEquiv\n                                        ,language: language\n                                        ,scoped: scoped\n                                        ,accesskey: accesskey\n                                        ,contenteditable: contenteditable\n                                        ,contextmenu: contextmenu\n                                        ,dir: dir\n                                        ,draggable: draggable\n                                        ,dropzone: dropzone\n                                        ,itemprop: itemprop\n                                        ,lang: lang\n                                        ,spellcheck: spellcheck\n                                        ,tabindex: tabindex\n                                        ,challenge: challenge\n                                        ,keytype: keytype\n                                        ,cite: cite\n                                        ,datetime: datetime\n                                        ,pubdate: pubdate\n                                        ,manifest: manifest\n                                        ,property: property\n                                        ,attribute: attribute};\n};\nElm.Html = Elm.Html || {};\nElm.Html.Events = Elm.Html.Events || {};\nElm.Html.Events.make = function (_elm) {\n   \"use strict\";\n   _elm.Html = _elm.Html || {};\n   _elm.Html.Events = _elm.Html.Events || {};\n   if (_elm.Html.Events.values) return _elm.Html.Events.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $Json$Decode = Elm.Json.Decode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $VirtualDom = Elm.VirtualDom.make(_elm);\n   var _op = {};\n   var keyCode = A2($Json$Decode._op[\":=\"],\"keyCode\",$Json$Decode.$int);\n   var targetChecked = A2($Json$Decode.at,_U.list([\"target\",\"checked\"]),$Json$Decode.bool);\n   var targetValue = A2($Json$Decode.at,_U.list([\"target\",\"value\"]),$Json$Decode.string);\n   var defaultOptions = $VirtualDom.defaultOptions;\n   var Options = F2(function (a,b) {    return {stopPropagation: a,preventDefault: b};});\n   var onWithOptions = $VirtualDom.onWithOptions;\n   var on = $VirtualDom.on;\n   var messageOn = F3(function (name,addr,msg) {    return A3(on,name,$Json$Decode.value,function (_p0) {    return A2($Signal.message,addr,msg);});});\n   var onClick = messageOn(\"click\");\n   var onDoubleClick = messageOn(\"dblclick\");\n   var onMouseMove = messageOn(\"mousemove\");\n   var onMouseDown = messageOn(\"mousedown\");\n   var onMouseUp = messageOn(\"mouseup\");\n   var onMouseEnter = messageOn(\"mouseenter\");\n   var onMouseLeave = messageOn(\"mouseleave\");\n   var onMouseOver = messageOn(\"mouseover\");\n   var onMouseOut = messageOn(\"mouseout\");\n   var onBlur = messageOn(\"blur\");\n   var onFocus = messageOn(\"focus\");\n   var onSubmit = messageOn(\"submit\");\n   var onKey = F3(function (name,addr,handler) {    return A3(on,name,keyCode,function (code) {    return A2($Signal.message,addr,handler(code));});});\n   var onKeyUp = onKey(\"keyup\");\n   var onKeyDown = onKey(\"keydown\");\n   var onKeyPress = onKey(\"keypress\");\n   return _elm.Html.Events.values = {_op: _op\n                                    ,onBlur: onBlur\n                                    ,onFocus: onFocus\n                                    ,onSubmit: onSubmit\n                                    ,onKeyUp: onKeyUp\n                                    ,onKeyDown: onKeyDown\n                                    ,onKeyPress: onKeyPress\n                                    ,onClick: onClick\n                                    ,onDoubleClick: onDoubleClick\n                                    ,onMouseMove: onMouseMove\n                                    ,onMouseDown: onMouseDown\n                                    ,onMouseUp: onMouseUp\n                                    ,onMouseEnter: onMouseEnter\n                                    ,onMouseLeave: onMouseLeave\n                                    ,onMouseOver: onMouseOver\n                                    ,onMouseOut: onMouseOut\n                                    ,on: on\n                                    ,onWithOptions: onWithOptions\n                                    ,defaultOptions: defaultOptions\n                                    ,targetValue: targetValue\n                                    ,targetChecked: targetChecked\n                                    ,keyCode: keyCode\n                                    ,Options: Options};\n};\nElm.StartApp = Elm.StartApp || {};\nElm.StartApp.make = function (_elm) {\n   \"use strict\";\n   _elm.StartApp = _elm.StartApp || {};\n   if (_elm.StartApp.values) return _elm.StartApp.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Effects = Elm.Effects.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $List = Elm.List.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $Task = Elm.Task.make(_elm);\n   var _op = {};\n   var start = function (config) {\n      var updateStep = F2(function (action,_p0) {\n         var _p1 = _p0;\n         var _p2 = A2(config.update,action,_p1._0);\n         var newModel = _p2._0;\n         var additionalEffects = _p2._1;\n         return {ctor: \"_Tuple2\",_0: newModel,_1: $Effects.batch(_U.list([_p1._1,additionalEffects]))};\n      });\n      var update = F2(function (actions,_p3) {    var _p4 = _p3;return A3($List.foldl,updateStep,{ctor: \"_Tuple2\",_0: _p4._0,_1: $Effects.none},actions);});\n      var messages = $Signal.mailbox(_U.list([]));\n      var singleton = function (action) {    return _U.list([action]);};\n      var address = A2($Signal.forwardTo,messages.address,singleton);\n      var inputs = $Signal.mergeMany(A2($List._op[\"::\"],messages.signal,A2($List.map,$Signal.map(singleton),config.inputs)));\n      var effectsAndModel = A3($Signal.foldp,update,config.init,inputs);\n      var model = A2($Signal.map,$Basics.fst,effectsAndModel);\n      return {html: A2($Signal.map,config.view(address),model)\n             ,model: model\n             ,tasks: A2($Signal.map,function (_p5) {    return A2($Effects.toTask,messages.address,$Basics.snd(_p5));},effectsAndModel)};\n   };\n   var App = F3(function (a,b,c) {    return {html: a,model: b,tasks: c};});\n   var Config = F4(function (a,b,c,d) {    return {init: a,update: b,view: c,inputs: d};});\n   return _elm.StartApp.values = {_op: _op,start: start,Config: Config,App: App};\n};\nElm.ModuleBrowser = Elm.ModuleBrowser || {};\nElm.ModuleBrowser.make = function (_elm) {\n   \"use strict\";\n   _elm.ModuleBrowser = _elm.ModuleBrowser || {};\n   if (_elm.ModuleBrowser.values) return _elm.ModuleBrowser.values;\n   var _U = Elm.Native.Utils.make(_elm),\n   $Basics = Elm.Basics.make(_elm),\n   $Debug = Elm.Debug.make(_elm),\n   $Dict = Elm.Dict.make(_elm),\n   $Effects = Elm.Effects.make(_elm),\n   $Html = Elm.Html.make(_elm),\n   $Html$Attributes = Elm.Html.Attributes.make(_elm),\n   $Html$Events = Elm.Html.Events.make(_elm),\n   $Json$Decode = Elm.Json.Decode.make(_elm),\n   $List = Elm.List.make(_elm),\n   $List$Extra = Elm.List.Extra.make(_elm),\n   $Maybe = Elm.Maybe.make(_elm),\n   $Result = Elm.Result.make(_elm),\n   $Signal = Elm.Signal.make(_elm),\n   $StartApp = Elm.StartApp.make(_elm),\n   $String = Elm.String.make(_elm),\n   $Task = Elm.Task.make(_elm);\n   var _op = {};\n   var closeMailbox = $Signal.mailbox({ctor: \"_Tuple0\"});\n   var close = Elm.Native.Port.make(_elm).outboundSignal(\"close\",function (v) {    return [];},closeMailbox.signal);\n   var changeSelectionMailbox = $Signal.mailbox({ctor: \"_Tuple0\"});\n   var changeSelection = Elm.Native.Port.make(_elm).outboundSignal(\"changeSelection\",function (v) {    return [];},changeSelectionMailbox.signal);\n   var selectMailbox = $Signal.mailbox(\"\");\n   var select = Elm.Native.Port.make(_elm).outboundSignal(\"select\",function (v) {    return v;},selectMailbox.signal);\n   var modzPort = Elm.Native.Port.make(_elm).inboundSignal(\"modzPort\",\n   \"List ModuleBrowser.Modul\",\n   function (v) {\n      return typeof v === \"object\" && v instanceof Array ? Elm.Native.List.make(_elm).fromArray(v.map(function (v) {\n         return typeof v === \"object\" && \"name\" in v && \"file\" in v && \"packageName\" in v && \"version\" in v ? {_: {}\n                                                                                                              ,name: typeof v.name === \"string\" || typeof v.name === \"object\" && v.name instanceof String ? v.name : _U.badPort(\"a string\",\n                                                                                                              v.name)\n                                                                                                              ,file: typeof v.file === \"string\" || typeof v.file === \"object\" && v.file instanceof String ? v.file : _U.badPort(\"a string\",\n                                                                                                              v.file)\n                                                                                                              ,packageName: typeof v.packageName === \"string\" || typeof v.packageName === \"object\" && v.packageName instanceof String ? v.packageName : _U.badPort(\"a string\",\n                                                                                                              v.packageName)\n                                                                                                              ,version: typeof v.version === \"string\" || typeof v.version === \"object\" && v.version instanceof String ? v.version : _U.badPort(\"a string\",\n                                                                                                              v.version)} : _U.badPort(\"an object with fields `name`, `file`, `packageName`, `version`\",\n         v);\n      })) : _U.badPort(\"an array\",v);\n   });\n   var selectModule = F2(function (selFn,model) {\n      var selIndex = function (sel) {    return A2($List$Extra.elemIndex,sel,model.filteredModules);};\n      var pipeM = $Basics.flip($Maybe.andThen);\n      return A2(pipeM,selFn,A2(pipeM,selIndex,model.selected));\n   });\n   var nextModule = function (model) {\n      var nxt = function (i) {\n         return _U.cmp(i,$List.length(model.filteredModules) - 1) < 0 ? A2($List$Extra.getAt,model.filteredModules,i + 1) : model.selected;\n      };\n      return A2(selectModule,nxt,model);\n   };\n   var prevModule = function (model) {\n      var prev = function (i) {    return _U.cmp(i,0) > 0 ? A2($List$Extra.getAt,model.filteredModules,i - 1) : model.selected;};\n      return A2(selectModule,prev,model);\n   };\n   var filterModules = F2(function (searchStr,modules) {\n      var filtr = function (mod) {    return A2($String.startsWith,$String.toLower(searchStr),$String.toLower(mod.name));};\n      return A2($List.filter,filtr,modules);\n   });\n   var Refresh = function (a) {    return {ctor: \"Refresh\",_0: a};};\n   var modzSignal = A2($Signal.map,Refresh,modzPort);\n   var Close = {ctor: \"Close\"};\n   var ClickSelect = function (a) {    return {ctor: \"ClickSelect\",_0: a};};\n   var itemView = F3(function (address,mod,model) {\n      var pipeM = $Basics.flip($Maybe.andThen);\n      var itemClass = A2($Maybe.withDefault,\"\",A2(pipeM,function (sel) {    return _U.eq(sel,mod) ? $Maybe.Just(\"selected\") : $Maybe.Nothing;},model.selected));\n      return A2($Html.li,\n      _U.list([$Html$Attributes.$class(itemClass),A2($Html$Events.onClick,address,ClickSelect(mod.file))]),\n      _U.list([A2($Html.p,_U.list([]),_U.list([$Html.text(mod.name)]))\n              ,A2($Html.p,\n              _U.list([$Html$Attributes.$class(\"binding\")]),\n              _U.list([$Html.text(A2($Basics._op[\"++\"],mod.packageName,A2($Basics._op[\"++\"],\" - \",mod.version)))]))]));\n   });\n   var Select = {ctor: \"Select\"};\n   var Next = {ctor: \"Next\"};\n   var Prev = {ctor: \"Prev\"};\n   var Filter = function (a) {    return {ctor: \"Filter\",_0: a};};\n   var NoOp = {ctor: \"NoOp\"};\n   var notifySelect = function (file) {\n      return A2($Effects.map,function (_p0) {    return NoOp;},$Effects.task(A2($Signal.send,selectMailbox.address,file)));\n   };\n   var notifyChangeSelection = A2($Effects.map,\n   function (_p1) {\n      return NoOp;\n   },\n   $Effects.task(A2($Signal.send,changeSelectionMailbox.address,{ctor: \"_Tuple0\"})));\n   var notifyClose = A2($Effects.map,function (_p2) {    return NoOp;},$Effects.task(A2($Signal.send,closeMailbox.address,{ctor: \"_Tuple0\"})));\n   var searchInputView = F2(function (address,model) {\n      var keyActions = $Dict.fromList(_U.list([{ctor: \"_Tuple2\",_0: 38,_1: Prev}\n                                              ,{ctor: \"_Tuple2\",_0: 40,_1: Next}\n                                              ,{ctor: \"_Tuple2\",_0: 13,_1: Select}\n                                              ,{ctor: \"_Tuple2\",_0: 27,_1: Close}]));\n      var dec = A2($Json$Decode.customDecoder,\n      $Html$Events.keyCode,\n      function (k) {\n         return A2($Dict.member,k,keyActions) ? $Result.Ok(k) : $Result.Err(\"not handling that key\");\n      });\n      var handleKeydown = function (k) {\n         var act = A2($Dict.get,k,keyActions);\n         var _p3 = act;\n         if (_p3.ctor === \"Nothing\") {\n               return A2($Signal.message,address,NoOp);\n            } else {\n               return A2($Signal.message,address,_p3._0);\n            }\n      };\n      var options = {preventDefault: true,stopPropagation: false};\n      return A2($Html.input,\n      _U.list([$Html$Attributes.value(model.searchStr)\n              ,$Html$Attributes.$class(\"search\")\n              ,$Html$Attributes.type$(\"text\")\n              ,$Html$Attributes.placeholder(\"search\")\n              ,A3($Html$Events.on,\"input\",$Html$Events.targetValue,function (str) {    return A2($Signal.message,address,Filter(str));})\n              ,A4($Html$Events.onWithOptions,\"keydown\",options,dec,handleKeydown)]),\n      _U.list([]));\n   });\n   var view = F2(function (address,model) {\n      return A2($Html.div,\n      _U.list([$Html$Attributes.$class(\"filter-list\")]),\n      _U.list([A2(searchInputView,address,model)\n              ,A2($Html.ul,_U.list([]),A2($List.map,function (m) {    return A3(itemView,address,m,model);},model.filteredModules))]));\n   });\n   var Modul = F4(function (a,b,c,d) {    return {name: a,file: b,packageName: c,version: d};});\n   var Model = F4(function (a,b,c,d) {    return {allModules: a,filteredModules: b,searchStr: c,selected: d};});\n   var init = {ctor: \"_Tuple2\",_0: A4(Model,_U.list([]),_U.list([]),\"\",$Maybe.Nothing),_1: $Effects.none};\n   var update = F2(function (action,model) {\n      var _p4 = action;\n      switch (_p4.ctor)\n      {case \"NoOp\": return {ctor: \"_Tuple2\",_0: model,_1: $Effects.none};\n         case \"Filter\": var _p5 = _p4._0;\n           var filtered = A2(filterModules,_p5,model.allModules);\n           var sel = $List.head(filtered);\n           return {ctor: \"_Tuple2\",_0: _U.update(model,{searchStr: _p5,filteredModules: filtered,selected: sel}),_1: $Effects.none};\n         case \"Prev\": return {ctor: \"_Tuple2\",_0: _U.update(model,{selected: prevModule(model)}),_1: notifyChangeSelection};\n         case \"Next\": return {ctor: \"_Tuple2\",_0: _U.update(model,{selected: nextModule(model)}),_1: notifyChangeSelection};\n         case \"Select\": var _p6 = model.selected;\n           if (_p6.ctor === \"Nothing\") {\n                 return {ctor: \"_Tuple2\",_0: model,_1: $Effects.none};\n              } else {\n                 return {ctor: \"_Tuple2\",_0: model,_1: notifySelect(_p6._0.file)};\n              }\n         case \"ClickSelect\": return {ctor: \"_Tuple2\",_0: model,_1: notifySelect(_p4._0)};\n         case \"Close\": return {ctor: \"_Tuple2\",_0: model,_1: notifyClose};\n         default: var _p7 = _p4._0;\n           return {ctor: \"_Tuple2\",_0: A4(Model,_p7,_p7,\"\",$List.head(_p7)),_1: $Effects.none};}\n   });\n   var app = $StartApp.start({init: init,update: update,view: view,inputs: _U.list([modzSignal])});\n   var main = app.html;\n   var tasks = Elm.Native.Task.make(_elm).performSignal(\"tasks\",app.tasks);\n   return _elm.ModuleBrowser.values = {_op: _op\n                                      ,Model: Model\n                                      ,Modul: Modul\n                                      ,init: init\n                                      ,NoOp: NoOp\n                                      ,Filter: Filter\n                                      ,Prev: Prev\n                                      ,Next: Next\n                                      ,Select: Select\n                                      ,ClickSelect: ClickSelect\n                                      ,Close: Close\n                                      ,Refresh: Refresh\n                                      ,update: update\n                                      ,filterModules: filterModules\n                                      ,prevModule: prevModule\n                                      ,nextModule: nextModule\n                                      ,selectModule: selectModule\n                                      ,notifySelect: notifySelect\n                                      ,notifyChangeSelection: notifyChangeSelection\n                                      ,notifyClose: notifyClose\n                                      ,view: view\n                                      ,searchInputView: searchInputView\n                                      ,itemView: itemView\n                                      ,app: app\n                                      ,main: main\n                                      ,modzSignal: modzSignal\n                                      ,selectMailbox: selectMailbox\n                                      ,changeSelectionMailbox: changeSelectionMailbox\n                                      ,closeMailbox: closeMailbox};\n};\n"
  },
  {
    "path": "elm-light.behaviors",
    "content": "[[:app :lt.objs.plugins/load-js [\"mode/elm.js\"\n                                 \"js/show-hint2.js\"\n                                 \"js/react.min.js\"\n                                 \"js/highlight.pack.js\"\n                                 \"elm/ModuleBrowser/moduleBrowser.js\"\n                                 \"DocPreview/docPreview.js\"\n                                 \"elm-light_compiled.js\"]]\n [:app :lt.objs.plugins/load-css \"css/hinter.css\"]\n [:app :lt.objs.plugins/load-css \"css/elm.css\"]\n [:app :lt.objs.plugins/load-css \"css/graph.css\"]\n [:app :lt.objs.plugins/load-css \"css/docpreview.css\"]\n [:app :lt.objs.plugins/load-css \"css/inlinedoc.css\"]\n [:app :lt.objs.plugins/load-css \"css/test.css\"]\n\n [:app :lt.objs.plugins/load-keymap \"elm.keymap\"]\n\n [:files :lt.objs.files/file-types [{:exts [:elm], :mime \"text/x-elm\", :tags [:editor.elm], :name \"elm\"}]]\n\n\n [:editor.elm :lt.object/add-tag :editor.elm.common]\n [:editor.elm.repl :lt.object/add-tag :editor.elm.common]\n\n\n [:elm.lang :lt.plugins.elm-light.clients/connect]\n\n [:editor.elm :lt.plugins.elm-light/elm-unsupported]\n [:editor.elm :lt.plugins.elm-light/elm-browse!]\n\n [:editor.elm.common :lt.plugins.elm-light/on-eval.one]\n [:editor.elm.common :lt.plugins.elm-light/eval-err]\n [:editor.elm.common :lt.plugins.elm-light/eval-result]\n [:editor.elm.common :lt.plugins.elm-light/repl-restart!]\n\n\n\n [:editor.elm.common :lt.object/add-tag :docable]\n [:elm.lang :lt.plugins.elm-light.clients/eval!]\n\n ;; ELM REPL behaviors\n [:elmrepl :lt.plugins.elm-light.repl/repl-destroy-on-close]\n [:elmrepl :lt.plugins.elm-light.repl/repl-close-parent]\n [:elmrepl :lt.plugins.elm-light.repl/on-focus-repl-ed]\n [:elmrepl :lt.plugins.elm-light.repl/on-show-repl-refresh-eds]\n\n [:editor.elm :lt.plugins.elm-light/lint]\n [:editor.elm :lt.plugins.elm-light/elm-lint-res]\n\n [:editor.elm :lt.plugins.elm-light/make]\n [:editor.elm :lt.plugins.elm-light/make-project]\n [:editor.elm :lt.plugins.elm-light/elm-make-res]\n [:editor.elm :lt.plugins.elm-light/elm-make-err]\n\n\n\n [:editor.elm.common :-lt.plugins.auto-complete/textual-hints] ; just messes with autocomplete of elm stuff\n\n [:sidebar.docs.search :lt.plugins.elm-light/elm-doc-search]\n [:elm.lang :lt.plugins.elm-light.clients/elm-doc-search-results]\n\n\n\n [:elm.packages :lt.plugins.elm-light.packages/show-project-packages]\n [:elm.packages :lt.plugins.elm-light.packages/on-close-project-packages]\n\n\n ;; linter behaviors. TODO: Move to linter plugin eventually\n [:editor.elm :lt.plugins.elm-light.linter/linter-result!]\n [:editor.elm :lt.plugins.elm-light.linter/clear-linter-results!]\n [:editor :lt.plugins.elm-light.linter/update-linter-on-editor-change]\n\n\n ;; Elm format\n [:editor.elm :lt.plugins.elm-light.format/elm-format]\n [:editor.elm.common :lt.plugins.elm-light.format/elm-format-expression]\n [:editor.elm.common :lt.plugins.elm-light.format/elm-format-buffer]\n\n\n\n ;; dependency graph stuff\n [:elm.graph.dependency :lt.plugins.elm-light.graph/on-show-dependencies]\n [:elm.graph.dependency :lt.plugins.elm-light.graph/on-get-data]\n [:elm.graph.dependency :lt.plugins.elm-light.graph/on-render]\n [:elm.graph.dependency :lt.plugins.elm-light.graph/on-get-transitives]\n [:elm.graph.dependency :lt.plugins.elm-light.graph/on-close-destroy]\n [:tabset :lt.plugins.elm-light.graph/on-tab-resized]\n\n\n ;; module browser\n [:editor.elm :lt.plugins.elm-light.modulebrowser/list-modules]\n [:elm.modulebrowser :lt.plugins.elm-light.modulebrowser/clear!]\n [:elm.modulebrowser :lt.plugins.elm-light.modulebrowser/show-project-modules]\n [:elm.modulebrowser :lt.plugins.elm-light.modulebrowser/focus!]\n [:elm.modulebrowser :lt.plugins.elm-light.modulebrowser/ensure-visible]\n\n\n ;; Doc preview\n [:editor.elm :lt.plugins.elm-light.docpreview/gendoc]\n [:editor.elm :lt.plugins.elm-light.docpreview/elm-gendoc-res]\n [:editor.elm :lt.plugins.elm-light.docpreview/elm-docpreview]\n\n\n\n ;; New AST related behaviors\n [:editor :lt.plugins.elm-light.elm-ast/update-ast-status-on-editor-change]\n\n [:editor.elm :lt.plugins.elm-light/elm-jump-to-definition-start]\n [:editor.elm :lt.plugins.elm-light/elm-jump-to-definition]\n\n [:editor.elm :lt.plugins.elm-light/elm-doc]\n [:editor.elm :lt.plugins.elm-light/elm-doc-start]\n [:editor.elm :lt.plugins.elm-light.inline-doc/editor.elm.doc.show!]\n\n [:editor.elm :lt.plugins.elm-light/elm-reload-ast]\n [:editor.elm :lt.plugins.elm-light/elm-reload-ast-started]\n\n\n [:editor.elm :lt.plugins.elm-light/elm-parse-editor]\n [:editor.elm :lt.plugins.elm-light/elm-parse-editor-on-change]\n [:editor.elm :lt.plugins.elm-light/elm-parse-editor-result]\n [:editor.elm :lt.plugins.elm-light/elm-editor-disconnected]\n\n [:editor.elm :lt.plugins.elm-light.hinter/elm-hints]\n\n [:editor.elm :lt.plugins.elm-light.hinter/elm-hints-parser-results]\n\n [:editor.elm :lt.plugins.elm-light.gutter/elm-gutter-exposeds]\n [:editor.elm :lt.plugins.elm-light.gutter/elm-gutter-exposeds-mark]\n [:editor.elm :lt.plugins.elm-light.gutter/show-elm-gutter]\n\n\n ;; **** Refactoring stuff *******\n [:editor.elm :lt.plugins.elm-light/elm-expose-top-level]\n [:editor.elm :lt.plugins.elm-light/elm-unexpose-top-level]\n\n\n [:editor.elm :lt.plugins.elm-light/elm-autoimport-module-selected]\n [:editor.elm :lt.plugins.elm-light/elm-autoimport-module-init]\n\n [:editor.elm :lt.plugins.elm-light/elm-sort-imports]\n\n\n ;; find usages\n [:elm.usages :lt.plugins.elm-light.usages/elm.find-usages]\n [:elm.usages :lt.plugins.elm-light.usages/elm.find-usages.complete]\n [:elm.usages :lt.plugins.elm-light.usages/on-close]\n [:elm.usages :lt.plugins.elm-light.usages/clear!]\n\n\n ;; Module graph\n [:elm.graph.module :lt.plugins.elm-light.module-graph/on-render]\n [:elm.graph.module :lt.plugins.elm-light.module-graph/on-show-modules]\n [:elm.graph.module :lt.plugins.elm-light.module-graph/on-close-destroy]\n [:elm.graph.module :lt.plugins.elm-light.module-graph/on-move]\n [:tabset :lt.plugins.elm-light.module-graph/on-tab-resized]\n\n\n ;; Elm test\n [:editor.elm :lt.plugins.elm-light.test/elm-test]\n [:editor.elm :lt.plugins.elm-light.test/elm-test-suite.init]\n [:editor.elm :lt.plugins.elm-light.test/elm-test-suite]\n [:editor.elm :lt.plugins.elm-light.test/elm-test-setup]\n [:elm.test.dashboard :lt.plugins.elm-light.test/on-testrun-init]\n [:elm.test.dashboard :lt.plugins.elm-light.test/elm-test-result]\n [:elm.test.dashboard :lt.plugins.elm-light.test/elm-test-error]\n [:elm.test.dashboard :lt.plugins.elm-light.test/on-close-destroy]\n\n\n ;; ***** Alternate autocompleter *****\n\n  [:editor.elm :lt.object/add-tag :editor.keys.normal.elm] ;; Allow overriding tab which defaults to auto-complete command in std autocompleter plugin\n\n\n  ;; 1) Disable std autocompleter alltogether\n  [:editor.elm :-lt.plugins.auto-complete/intra-buffer-string-hints]\n  [:editor.elm :-lt.plugins.auto-complete/textual-hints]\n  [:editor.elm :-lt.plugins.auto-complete/async-hint-tokens]\n  [:editor.elm :-lt.plugins.auto-complete/show-hint]\n  [:editor.elm :-lt.plugins.auto-complete/remove-on-move-line]\n  [:editor.elm :-lt.plugins.auto-complete/remove-on-scroll-inactive]\n  [:editor.elm :-lt.plugins.auto-complete/auto-show-on-input]\n\n\n  ;; 2) Add \"generic\" autocompleter behaviors\n  [:editor.elm :lt.plugins.elm-light.autocompleter.core/start-hinting]\n  [:editor.elm :lt.plugins.elm-light.autocompleter.core/auto-show-on-input]\n\n\n ]\n"
  },
  {
    "path": "elm-light_compiled.js",
    "content": "if(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.widgets.selector')) {\ngoog.provide('lt.plugins.elm_light.widgets.selector');\ngoog.require('cljs.core');\ngoog.require('lt.objs.files');\ngoog.require('lt.util.dom');\ngoog.require('clojure.string');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('clojure.string');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.widgets.selector.remove_form = (function remove_form(this$){if(cljs.core.truth_(new cljs.core.Keyword(null,\"deleted\",\"deleted\",2564367243).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))))\n{return null;\n} else\n{lt.object.merge_BANG_.call(null,this$,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"deleted\",\"deleted\",2564367243),true], null));\nreturn lt.object.destroy_BANG_.call(null,this$);\n}\n});\nlt.plugins.elm_light.widgets.selector.select_item = (function select_item(this$,idx,item){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"option\",\"option\",4298734567),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),idx,new cljs.core.Keyword(null,\"selected\",\"selected\",2205476365),cljs.core._EQ_.call(null,idx,0)], null),((cljs.core.map_QMARK_.call(null,item))?new cljs.core.Keyword(null,\"label\",\"label\",1116631654).cljs$core$IFn$_invoke$arity$1(item):item)], null));var seq__20798_20816 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__20799_20817 = null;var count__20800_20818 = 0;var i__20801_20819 = 0;while(true){\nif((i__20801_20819 < count__20800_20818))\n{var vec__20802_20820 = cljs.core._nth.call(null,chunk__20799_20817,i__20801_20819);var ev__6318__auto___20821 = cljs.core.nth.call(null,vec__20802_20820,0,null);var func__6319__auto___20822 = cljs.core.nth.call(null,vec__20802_20820,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20821,func__6319__auto___20822);\n{\nvar G__20823 = seq__20798_20816;\nvar G__20824 = chunk__20799_20817;\nvar G__20825 = count__20800_20818;\nvar G__20826 = (i__20801_20819 + 1);\nseq__20798_20816 = G__20823;\nchunk__20799_20817 = G__20824;\ncount__20800_20818 = G__20825;\ni__20801_20819 = G__20826;\ncontinue;\n}\n} else\n{var temp__4092__auto___20827 = cljs.core.seq.call(null,seq__20798_20816);if(temp__4092__auto___20827)\n{var seq__20798_20828__$1 = temp__4092__auto___20827;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20798_20828__$1))\n{var c__5632__auto___20829 = cljs.core.chunk_first.call(null,seq__20798_20828__$1);{\nvar G__20830 = cljs.core.chunk_rest.call(null,seq__20798_20828__$1);\nvar G__20831 = c__5632__auto___20829;\nvar G__20832 = cljs.core.count.call(null,c__5632__auto___20829);\nvar G__20833 = 0;\nseq__20798_20816 = G__20830;\nchunk__20799_20817 = G__20831;\ncount__20800_20818 = G__20832;\ni__20801_20819 = G__20833;\ncontinue;\n}\n} else\n{var vec__20803_20834 = cljs.core.first.call(null,seq__20798_20828__$1);var ev__6318__auto___20835 = cljs.core.nth.call(null,vec__20803_20834,0,null);var func__6319__auto___20836 = cljs.core.nth.call(null,vec__20803_20834,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20835,func__6319__auto___20836);\n{\nvar G__20837 = cljs.core.next.call(null,seq__20798_20828__$1);\nvar G__20838 = null;\nvar G__20839 = 0;\nvar G__20840 = 0;\nseq__20798_20816 = G__20837;\nchunk__20799_20817 = G__20838;\ncount__20800_20818 = G__20839;\ni__20801_20819 = G__20840;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.widgets.selector.select_form = (function select_form(this$,items){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.elm-select\",\"div.elm-select\",3606702322),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"select\",\"select\",4402849902),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"size\",\"size\",1017434995),cljs.core.count.call(null,items)], null),cljs.core.map_indexed.call(null,cljs.core.partial.call(null,lt.plugins.elm_light.widgets.selector.select_item,this$),items)], null)], null));var seq__20810_20841 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__20811_20842 = null;var count__20812_20843 = 0;var i__20813_20844 = 0;while(true){\nif((i__20813_20844 < count__20812_20843))\n{var vec__20814_20845 = cljs.core._nth.call(null,chunk__20811_20842,i__20813_20844);var ev__6318__auto___20846 = cljs.core.nth.call(null,vec__20814_20845,0,null);var func__6319__auto___20847 = cljs.core.nth.call(null,vec__20814_20845,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20846,func__6319__auto___20847);\n{\nvar G__20848 = seq__20810_20841;\nvar G__20849 = chunk__20811_20842;\nvar G__20850 = count__20812_20843;\nvar G__20851 = (i__20813_20844 + 1);\nseq__20810_20841 = G__20848;\nchunk__20811_20842 = G__20849;\ncount__20812_20843 = G__20850;\ni__20813_20844 = G__20851;\ncontinue;\n}\n} else\n{var temp__4092__auto___20852 = cljs.core.seq.call(null,seq__20810_20841);if(temp__4092__auto___20852)\n{var seq__20810_20853__$1 = temp__4092__auto___20852;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20810_20853__$1))\n{var c__5632__auto___20854 = cljs.core.chunk_first.call(null,seq__20810_20853__$1);{\nvar G__20855 = cljs.core.chunk_rest.call(null,seq__20810_20853__$1);\nvar G__20856 = c__5632__auto___20854;\nvar G__20857 = cljs.core.count.call(null,c__5632__auto___20854);\nvar G__20858 = 0;\nseq__20810_20841 = G__20855;\nchunk__20811_20842 = G__20856;\ncount__20812_20843 = G__20857;\ni__20813_20844 = G__20858;\ncontinue;\n}\n} else\n{var vec__20815_20859 = cljs.core.first.call(null,seq__20810_20853__$1);var ev__6318__auto___20860 = cljs.core.nth.call(null,vec__20815_20859,0,null);var func__6319__auto___20861 = cljs.core.nth.call(null,vec__20815_20859,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20860,func__6319__auto___20861);\n{\nvar G__20862 = cljs.core.next.call(null,seq__20810_20853__$1);\nvar G__20863 = null;\nvar G__20864 = 0;\nvar G__20865 = 0;\nseq__20810_20841 = G__20862;\nchunk__20811_20842 = G__20863;\ncount__20812_20843 = G__20864;\ni__20813_20844 = G__20865;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.widgets.selector.on_keydown = (function on_keydown(this$,ed,ev){var kc = ev.keyCode;var el = ev.target;if((cljs.core._EQ_.call(null,13,kc)) || (cljs.core._EQ_.call(null,9,kc)))\n{lt.util.dom.stop_propagation.call(null,ev);\nlt.util.dom.prevent.call(null,ev);\nvar idx = lt.util.dom.$.call(null,\"option:checked\",el).value;var item = cljs.core.nth.call(null,cljs.core.vec.call(null,new cljs.core.Keyword(null,\"items\",\"items\",1114430258).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))),idx);var the_ed = new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$));var beh = new cljs.core.Keyword(null,\"behavior\",\"behavior\",2524816836).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$));lt.object.raise.call(null,the_ed,beh,item);\nreturn lt.plugins.elm_light.widgets.selector.remove_form.call(null,this$);\n} else\n{if(cljs.core._EQ_.call(null,27,kc))\n{lt.util.dom.stop_propagation.call(null,ev);\nlt.util.dom.prevent.call(null,ev);\nlt.plugins.elm_light.widgets.selector.remove_form.call(null,this$);\nreturn lt.objs.editor.focus.call(null,ed);\n} else\n{return null;\n}\n}\n});\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.widgets.selector\",\"elm-selector\",\"lt.plugins.elm-light.widgets.selector/elm-selector\",1639534363),new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"click\",\"click\",1108654330),null,new cljs.core.Keyword(null,\"clear!\",\"clear!\",3951036134),null], null), null),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"inline.elm.selector\",\"inline.elm.selector\",4143576270),null,new cljs.core.Keyword(null,\"inline\",\"inline\",4124874251),null], null), null),new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$,info){var temp__4092__auto__ = lt.objs.editor.__GT_cm_ed.call(null,new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473).cljs$core$IFn$_invoke$arity$1(info));if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;lt.object.merge_BANG_.call(null,this$,info);\nvar content = lt.plugins.elm_light.widgets.selector.select_form.call(null,this$,new cljs.core.Keyword(null,\"items\",\"items\",1114430258).cljs$core$IFn$_invoke$arity$1(info));lt.util.dom.on.call(null,lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"select\",\"select\",4402849902),content),\"blur\",((function (content,ed,temp__4092__auto__){\nreturn (function (){return lt.plugins.elm_light.widgets.selector.remove_form.call(null,this$);\n});})(content,ed,temp__4092__auto__))\n);\nlt.util.dom.on.call(null,content,\"keydown\",cljs.core.partial.call(null,lt.plugins.elm_light.widgets.selector.on_keydown,this$,ed));\nlt.util.dom.val.call(null,lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"option\",\"option\",4298734567),content),0);\nCodeMirror.positionHint(ed,content,new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430).cljs$core$IFn$_invoke$arity$1(info)));\nlt.util.dom.focus.call(null,lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"select\",\"select\",4402849902),content));\nreturn content;\n} else\n{return null;\n}\n}));\n/**\n* Create a selector. It expects a map with the following keys\n* :ed - the editor the selector is used by\n* :pos - Where to position the selector\n* :Items - List of items , if item is a map it must have a :label key used for display in the dropdown\n* :behavior - The behavior to be raise when an item is selected. It will pass the item back\n*/\nlt.plugins.elm_light.widgets.selector.make = (function make(info){return lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.widgets.selector\",\"elm-selector\",\"lt.plugins.elm-light.widgets.selector/elm-selector\",1639534363),info);\n});\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.utils')) {\ngoog.provide('lt.plugins.elm_light.utils');\ngoog.require('cljs.core');\ngoog.require('lt.objs.plugins');\ngoog.require('lt.objs.files');\ngoog.require('lt.util.dom');\ngoog.require('clojure.string');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.plugins');\ngoog.require('clojure.string');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.editor.pool');\ngoog.require('fetch.core');\ngoog.require('fetch.core');\nlt.plugins.elm_light.utils.elm_plugin_dir = lt.objs.plugins.find_plugin.call(null,\"elm-light\");\nlt.plugins.elm_light.utils.cp = require(\"child_process\");\nlt.plugins.elm_light.utils.marked = require(lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node_modules\",\"marked\"));\nlt.plugins.elm_light.utils.pattern = /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/;\nlt.plugins.elm_light.utils.get_elm_version = (function get_elm_version(){try{return clojure.string.trim.call(null,lt.plugins.elm_light.utils.cp.execSync(\"elm --version\",{\"stdio\": \"pipe\"}).toString());\n}catch (e20586){var e = e20586;console.error.call(null,\"elm command not found in path\");\nreturn null;\n}});\nlt.plugins.elm_light.utils.try_parse_int = (function try_parse_int(o){try{return parseInt(o);\n}catch (e20588){var e = e20588;return o;\n}});\nlt.plugins.elm_light.utils.parse_version = (function parse_version(s){var vec__20591 = cljs.core.re_seq.call(null,lt.plugins.elm_light.utils.pattern,s);var vec__20592 = cljs.core.nth.call(null,vec__20591,0,null);var _ = cljs.core.nth.call(null,vec__20592,0,null);var major = cljs.core.nth.call(null,vec__20592,1,null);var minor = cljs.core.nth.call(null,vec__20592,2,null);var patch = cljs.core.nth.call(null,vec__20592,3,null);var pre_release = cljs.core.nth.call(null,vec__20592,4,null);var build = cljs.core.nth.call(null,vec__20592,5,null);return new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,\"major\",\"major\",1117563179),lt.plugins.elm_light.utils.try_parse_int.call(null,major),new cljs.core.Keyword(null,\"minor\",\"minor\",1117805351),lt.plugins.elm_light.utils.try_parse_int.call(null,minor),new cljs.core.Keyword(null,\"patch\",\"patch\",1120342970),lt.plugins.elm_light.utils.try_parse_int.call(null,patch),new cljs.core.Keyword(null,\"pre-release\",\"pre-release\",734486095),pre_release,new cljs.core.Keyword(null,\"build\",\"build\",1107999200),build], null);\n});\nlt.plugins.elm_light.utils.compare_versions = (function compare_versions(a,b){var key_for_ident = (function (p1__20593_SHARP_){if(cljs.core.truth_(p1__20593_SHARP_))\n{return cljs.core.into.call(null,cljs.core.PersistentVector.EMPTY,cljs.core.map.call(null,lt.plugins.elm_light.utils.try_parse_int,clojure.string.split.call(null,p1__20593_SHARP_,/\\./)));\n} else\n{return null;\n}\n});var kay = cljs.core.juxt.call(null,new cljs.core.Keyword(null,\"major\",\"major\",1117563179),new cljs.core.Keyword(null,\"minor\",\"minor\",1117805351),new cljs.core.Keyword(null,\"patch\",\"patch\",1120342970),((function (key_for_ident){\nreturn (function (p1__20594_SHARP_){return (p1__20594_SHARP_.call(null,new cljs.core.Keyword(null,\"pre-release\",\"pre-release\",734486095)) == null);\n});})(key_for_ident))\n,((function (key_for_ident){\nreturn (function (p1__20595_SHARP_){return key_for_ident.call(null,new cljs.core.Keyword(null,\"pre-release\",\"pre-release\",734486095).cljs$core$IFn$_invoke$arity$1(p1__20595_SHARP_));\n});})(key_for_ident))\n,((function (key_for_ident){\nreturn (function (p1__20596_SHARP_){return key_for_ident.call(null,new cljs.core.Keyword(null,\"build\",\"build\",1107999200).cljs$core$IFn$_invoke$arity$1(p1__20596_SHARP_));\n});})(key_for_ident))\n);return cljs.core.compare.call(null,kay.call(null,lt.plugins.elm_light.utils.parse_version.call(null,a)),kay.call(null,lt.plugins.elm_light.utils.parse_version.call(null,b)));\n});\nlt.plugins.elm_light.utils.ver_GT_QMARK_ = (function ver_GT_QMARK_(a,b){return (lt.plugins.elm_light.utils.compare_versions.call(null,a,b) > 0);\n});\nlt.plugins.elm_light.utils.ver_LT_QMARK_ = (function ver_LT_QMARK_(a,b){return (lt.plugins.elm_light.utils.compare_versions.call(null,a,b) < 0);\n});\nlt.plugins.elm_light.utils.ver_EQ_QMARK_ = (function ver_EQ_QMARK_(a,b){return (lt.plugins.elm_light.utils.compare_versions.call(null,a,b) === 0);\n});\nlt.plugins.elm_light.utils.ver_LTE_QMARK_ = (function ver_LTE_QMARK_(a,b){return (lt.plugins.elm_light.utils.ver_LT_QMARK_.call(null,a,b)) || (lt.plugins.elm_light.utils.ver_EQ_QMARK_.call(null,a,b));\n});\nlt.plugins.elm_light.utils.parse_bounds_op = (function parse_bounds_op(op){if(cljs.core._EQ_.call(null,\"<\",op))\n{return lt.plugins.elm_light.utils.ver_LT_QMARK_;\n} else\n{return lt.plugins.elm_light.utils.ver_LTE_QMARK_;\n}\n});\nlt.plugins.elm_light.utils.parse_version_bounds = (function parse_version_bounds(bounds_str){var vec__20598 = clojure.string.split.call(null,bounds_str,\" \");var lower = cljs.core.nth.call(null,vec__20598,0,null);var lower_op = cljs.core.nth.call(null,vec__20598,1,null);var _ = cljs.core.nth.call(null,vec__20598,2,null);var upper_op = cljs.core.nth.call(null,vec__20598,3,null);var upper = cljs.core.nth.call(null,vec__20598,4,null);return new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"lower\",\"lower\",1117068915),lower,new cljs.core.Keyword(null,\"lower-op\",\"lower-op\",3491107743),lt.plugins.elm_light.utils.parse_bounds_op.call(null,lower_op),new cljs.core.Keyword(null,\"upper\",\"upper\",1125403668),upper,new cljs.core.Keyword(null,\"upper-op\",\"upper-op\",2683631198),lt.plugins.elm_light.utils.parse_bounds_op.call(null,upper_op)], null);\n});\nlt.plugins.elm_light.utils.satisfies_version = (function satisfies_version(v_str,bounds_str){var map__20600 = lt.plugins.elm_light.utils.parse_version_bounds.call(null,bounds_str);var map__20600__$1 = ((cljs.core.seq_QMARK_.call(null,map__20600))?cljs.core.apply.call(null,cljs.core.hash_map,map__20600):map__20600);var upper_op = cljs.core.get.call(null,map__20600__$1,new cljs.core.Keyword(null,\"upper-op\",\"upper-op\",2683631198));var upper = cljs.core.get.call(null,map__20600__$1,new cljs.core.Keyword(null,\"upper\",\"upper\",1125403668));var lower_op = cljs.core.get.call(null,map__20600__$1,new cljs.core.Keyword(null,\"lower-op\",\"lower-op\",3491107743));var lower = cljs.core.get.call(null,map__20600__$1,new cljs.core.Keyword(null,\"lower\",\"lower\",1117068915));var and__4872__auto__ = lower_op.call(null,lower,v_str);if(cljs.core.truth_(and__4872__auto__))\n{return upper_op.call(null,v_str,upper);\n} else\n{return and__4872__auto__;\n}\n});\nlt.plugins.elm_light.utils.str_contains = (function str_contains(s,v){return (s.indexOf(v) > -1);\n});\nlt.plugins.elm_light.utils.find_symbol = (function find_symbol(ed,pos){var curr_tok = lt.objs.editor.__GT_token.call(null,ed,pos);var G__20602 = new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(curr_tok);if(cljs.core._EQ_.call(null,\"builtin\",G__20602))\n{return [cljs.core.str(find_symbol.call(null,ed,cljs.core.assoc.call(null,pos,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(curr_tok)))),cljs.core.str(new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(curr_tok))].join('');\n} else\n{if(cljs.core._EQ_.call(null,\"variable-3\",G__20602))\n{return [cljs.core.str(find_symbol.call(null,ed,cljs.core.assoc.call(null,pos,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(curr_tok)))),cljs.core.str(new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(curr_tok))].join('');\n} else\n{if(cljs.core._EQ_.call(null,\"variable-2\",G__20602))\n{return [cljs.core.str(find_symbol.call(null,ed,cljs.core.assoc.call(null,pos,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(curr_tok)))),cljs.core.str(new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(curr_tok))].join('');\n} else\n{if(cljs.core._EQ_.call(null,\"variable\",G__20602))\n{return [cljs.core.str(find_symbol.call(null,ed,cljs.core.assoc.call(null,pos,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(curr_tok)))),cljs.core.str(new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(curr_tok))].join('');\n} else\n{if(cljs.core._EQ_.call(null,\"qualifier\",G__20602))\n{return [cljs.core.str(find_symbol.call(null,ed,cljs.core.assoc.call(null,pos,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(curr_tok)))),cljs.core.str(new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(curr_tok))].join('');\n} else\n{if(cljs.core._EQ_.call(null,\"keyword\",G__20602))\n{return [cljs.core.str(find_symbol.call(null,ed,cljs.core.assoc.call(null,pos,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(curr_tok)))),cljs.core.str(new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(curr_tok))].join('');\n} else\n{if(cljs.core._EQ_.call(null,\"def\",G__20602))\n{return [cljs.core.str(find_symbol.call(null,ed,cljs.core.assoc.call(null,pos,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(curr_tok)))),cljs.core.str(new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(curr_tok))].join('');\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return \"\";\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n});\nlt.plugins.elm_light.utils.project_path = (function project_path(path){if(cljs.core.truth_(lt.objs.files.dir_QMARK_.call(null,path)))\n{return path;\n} else\n{var temp__4090__auto__ = lt.objs.files.walk_up_find.call(null,path,\"elm-package.json\");if(cljs.core.truth_(temp__4090__auto__))\n{var pkg_json = temp__4090__auto__;return lt.objs.files.parent.call(null,pkg_json);\n} else\n{return null;\n}\n}\n});\nlt.plugins.elm_light.utils.reactor_path = (function reactor_path(path){var root = lt.plugins.elm_light.utils.project_path.call(null,path);if(cljs.core._EQ_.call(null,path.indexOf(root),0))\n{return cljs.core.subs.call(null,path,cljs.core.count.call(null,root));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.utils.parse_json_file = (function parse_json_file(json_file){if(cljs.core.truth_(lt.objs.files.exists_QMARK_.call(null,json_file)))\n{return cljs.core.js__GT_clj.call(null,JSON.parse(new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(lt.objs.files.open_sync.call(null,json_file))),new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672),true);\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.utils.pretty_json = (function pretty_json(data){return JSON.stringify(cljs.core.clj__GT_js.call(null,data),lt.plugins.elm_light.utils.null$,4);\n});\nlt.plugins.elm_light.utils.nskw__GT_name = (function nskw__GT_name(kw){return [cljs.core.str(cljs.core.namespace.call(null,kw)),cljs.core.str(\"/\"),cljs.core.str(cljs.core.name.call(null,kw))].join('');\n});\nlt.plugins.elm_light.utils.get_project_deps = (function get_project_deps(project_path){var pkg_json = lt.objs.files.join.call(null,project_path,\"elm-package.json\");var deps_json = lt.objs.files.join.call(null,project_path,\"elm-stuff\",\"exact-dependencies.json\");return cljs.core.mapv.call(null,((function (pkg_json,deps_json){\nreturn (function (p__20609){var vec__20610 = p__20609;var _ = cljs.core.nth.call(null,vec__20610,0,null);var vs = cljs.core.nth.call(null,vec__20610,1,null);return cljs.core.apply.call(null,cljs.core.merge,vs);\n});})(pkg_json,deps_json))\n,cljs.core.group_by.call(null,new cljs.core.Keyword(null,\"package\",\"package\",4501809080),cljs.core.concat.call(null,cljs.core.mapv.call(null,((function (pkg_json,deps_json){\nreturn (function (p__20611){var vec__20612 = p__20611;var k = cljs.core.nth.call(null,vec__20612,0,null);var v = cljs.core.nth.call(null,vec__20612,1,null);return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"package\",\"package\",4501809080),lt.plugins.elm_light.utils.nskw__GT_name.call(null,k),new cljs.core.Keyword(null,\"exact\",\"exact\",1110851185),v], null);\n});})(pkg_json,deps_json))\n,lt.plugins.elm_light.utils.parse_json_file.call(null,deps_json)),cljs.core.mapv.call(null,((function (pkg_json,deps_json){\nreturn (function (p__20613){var vec__20614 = p__20613;var k = cljs.core.nth.call(null,vec__20614,0,null);var v = cljs.core.nth.call(null,vec__20614,1,null);return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"package\",\"package\",4501809080),lt.plugins.elm_light.utils.nskw__GT_name.call(null,k),new cljs.core.Keyword(null,\"range\",\"range\",1122184367),v], null);\n});})(pkg_json,deps_json))\n,new cljs.core.Keyword(null,\"dependencies\",\"dependencies\",1517678747).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.utils.parse_json_file.call(null,pkg_json))))));\n});\nlt.plugins.elm_light.utils.valid_project_elm_version = (function valid_project_elm_version(project_path){var elm = lt.plugins.elm_light.utils.get_elm_version.call(null);var json = lt.plugins.elm_light.utils.parse_json_file.call(null,lt.objs.files.join.call(null,project_path,\"elm-package.json\"));var v_bounds = new cljs.core.Keyword(null,\"elm-version\",\"elm-version\",2186442275).cljs$core$IFn$_invoke$arity$1(json);if(cljs.core.truth_((function (){var and__4872__auto__ = elm;if(cljs.core.truth_(and__4872__auto__))\n{var and__4872__auto____$1 = json;if(cljs.core.truth_(and__4872__auto____$1))\n{return v_bounds;\n} else\n{return and__4872__auto____$1;\n}\n} else\n{return and__4872__auto__;\n}\n})()))\n{if(cljs.core.truth_(lt.plugins.elm_light.utils.satisfies_version.call(null,elm,v_bounds)))\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [true,null], null);\n} else\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [false,[cljs.core.str(\"Invalid elm-version for project: \"),cljs.core.str(v_bounds),cljs.core.str(\", but currently installed elm platform is in version: \"),cljs.core.str(elm)].join('')], null);\n}\n} else\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [false,\"Error checking elm version constraint\"], null);\n}\n});\nlt.plugins.elm_light.utils.project_satisfies_version_QMARK_ = (function project_satisfies_version_QMARK_(version,project_path){var json = lt.plugins.elm_light.utils.parse_json_file.call(null,lt.objs.files.join.call(null,project_path,\"elm-package.json\"));var v_bounds = new cljs.core.Keyword(null,\"elm-version\",\"elm-version\",2186442275).cljs$core$IFn$_invoke$arity$1(json);if(cljs.core.truth_((function (){var and__4872__auto__ = version;if(cljs.core.truth_(and__4872__auto__))\n{var and__4872__auto____$1 = json;if(cljs.core.truth_(and__4872__auto____$1))\n{return v_bounds;\n} else\n{return and__4872__auto____$1;\n}\n} else\n{return and__4872__auto__;\n}\n})()))\n{if(cljs.core.truth_(lt.plugins.elm_light.utils.satisfies_version.call(null,version,v_bounds)))\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [true,null], null);\n} else\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [false,v_bounds], null);\n}\n} else\n{console.error.call(null,\"Error checking elm version constraints.\");\nreturn new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [false,v_bounds], null);\n}\n});\n/**\n* Fetch all packages from package.elm-lang.org\n*/\nlt.plugins.elm_light.utils.fetch_all_packages = (function fetch_all_packages(callback){return fetch.core.xhr.call(null,[cljs.core.str(\"http://package.elm-lang.org/all-packages?date=\"),cljs.core.str((new Date()).getTime())].join(''),cljs.core.PersistentArrayMap.EMPTY,(function (data){var pkgs = cljs.core.js__GT_clj.call(null,JSON.parse(data),new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672),true);return callback.call(null,pkgs);\n}));\n});\n/**\n* Recursively transforms JavaScript arrays into ClojureScript\n* vectors, and JavaScript objects into ClojureScript maps.  With\n* option ':keywordize-keys true' will convert object fields from\n* strings to keywords.\n* @param {...*} var_args\n*/\nlt.plugins.elm_light.utils.mod_js__GT_clj = (function() {\nvar mod_js__GT_clj = null;\nvar mod_js__GT_clj__1 = (function (x){return lt.plugins.elm_light.utils.mod_js__GT_clj3.call(null,x,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672),false], null));\n});\nvar mod_js__GT_clj__2 = (function() { \nvar G__20621__delegate = function (x,opts){if((function (){var G__20619 = x;if(G__20619)\n{var bit__5534__auto__ = null;if(cljs.core.truth_((function (){var or__4884__auto__ = bit__5534__auto__;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return G__20619.cljs$core$IEncodeClojure$;\n}\n})()))\n{return true;\n} else\n{if((!G__20619.cljs$lang$protocol_mask$partition$))\n{return cljs.core.native_satisfies_QMARK_.call(null,cljs.core.IEncodeClojure,G__20619);\n} else\n{return false;\n}\n}\n} else\n{return cljs.core.native_satisfies_QMARK_.call(null,cljs.core.IEncodeClojure,G__20619);\n}\n})())\n{return cljs.core._js__GT_clj.call(null,x,cljs.core.apply.call(null,cljs.core.array_map,opts));\n} else\n{if(cljs.core.seq.call(null,opts))\n{var map__20620 = opts;var map__20620__$1 = ((cljs.core.seq_QMARK_.call(null,map__20620))?cljs.core.apply.call(null,cljs.core.hash_map,map__20620):map__20620);var keywordize_keys = cljs.core.get.call(null,map__20620__$1,new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672));var keyfn = (cljs.core.truth_(keywordize_keys)?cljs.core.keyword:cljs.core.str);var f = ((function (map__20620,map__20620__$1,keywordize_keys,keyfn){\nreturn (function thisfn(x__$1){if(cljs.core.seq_QMARK_.call(null,x__$1))\n{return cljs.core.doall.call(null,cljs.core.map.call(null,thisfn,x__$1));\n} else\n{if(cljs.core.coll_QMARK_.call(null,x__$1))\n{return cljs.core.into.call(null,cljs.core.empty.call(null,x__$1),cljs.core.map.call(null,thisfn,x__$1));\n} else\n{if(x__$1 instanceof Array)\n{return cljs.core.persistent_BANG_.call(null,cljs.core.reduce.call(null,((function (map__20620,map__20620__$1,keywordize_keys,keyfn){\nreturn (function (p1__20615_SHARP_,p2__20616_SHARP_){return cljs.core.conj_BANG_.call(null,p1__20615_SHARP_,thisfn.call(null,p2__20616_SHARP_));\n});})(map__20620,map__20620__$1,keywordize_keys,keyfn))\n,cljs.core.transient$.call(null,cljs.core.PersistentVector.EMPTY),x__$1));\n} else\n{if((cljs.core.type.call(null,x__$1) === Object))\n{return cljs.core.persistent_BANG_.call(null,cljs.core.reduce.call(null,((function (map__20620,map__20620__$1,keywordize_keys,keyfn){\nreturn (function (r,k){return cljs.core.assoc_BANG_.call(null,r,keyfn.call(null,k),thisfn.call(null,(x__$1[k])));\n});})(map__20620,map__20620__$1,keywordize_keys,keyfn))\n,cljs.core.transient$.call(null,cljs.core.PersistentArrayMap.EMPTY),cljs.core.js_keys.call(null,x__$1)));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return x__$1;\n} else\n{return null;\n}\n}\n}\n}\n}\n});})(map__20620,map__20620__$1,keywordize_keys,keyfn))\n;return f.call(null,x);\n} else\n{return null;\n}\n}\n};\nvar G__20621 = function (x,var_args){\nvar opts = null;if (arguments.length > 1) {\n  opts = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);} \nreturn G__20621__delegate.call(this,x,opts);};\nG__20621.cljs$lang$maxFixedArity = 1;\nG__20621.cljs$lang$applyTo = (function (arglist__20622){\nvar x = cljs.core.first(arglist__20622);\nvar opts = cljs.core.rest(arglist__20622);\nreturn G__20621__delegate(x,opts);\n});\nG__20621.cljs$core$IFn$_invoke$arity$variadic = G__20621__delegate;\nreturn G__20621;\n})()\n;\nmod_js__GT_clj = function(x,var_args){\nvar opts = var_args;\nswitch(arguments.length){\ncase 1:\nreturn mod_js__GT_clj__1.call(this,x);\ndefault:\nreturn mod_js__GT_clj__2.cljs$core$IFn$_invoke$arity$variadic(x, cljs.core.array_seq(arguments, 1));\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nmod_js__GT_clj.cljs$lang$maxFixedArity = 1;\nmod_js__GT_clj.cljs$lang$applyTo = mod_js__GT_clj__2.cljs$lang$applyTo;\nmod_js__GT_clj.cljs$core$IFn$_invoke$arity$1 = mod_js__GT_clj__1;\nmod_js__GT_clj.cljs$core$IFn$_invoke$arity$variadic = mod_js__GT_clj__2.cljs$core$IFn$_invoke$arity$variadic;\nreturn mod_js__GT_clj;\n})()\n;\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.elm-ast')) {\ngoog.provide('lt.plugins.elm_light.elm_ast');\ngoog.require('cljs.core');\ngoog.require('crate.binding');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.statusbar');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.statusbar');\ngoog.require('clojure.string');\ngoog.require('crate.binding');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.console');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.editor.pool');\nlt.plugins.elm_light.elm_ast.elm_parser_path = lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node\",\"elmparser\");\nlt.plugins.elm_light.elm_ast.elm_parser = require(lt.plugins.elm_light.elm_ast.elm_parser_path);\nlt.plugins.elm_light.elm_ast.start_with_QMARK_ = (function start_with_QMARK_(the_str,fragment){if(cljs.core.truth_((function (){var and__4872__auto__ = the_str;if(cljs.core.truth_(and__4872__auto__))\n{return fragment;\n} else\n{return and__4872__auto__;\n}\n})()))\n{return cljs.core._EQ_.call(null,0,the_str.indexOf(fragment));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.idx_of = (function idx_of(pred,coll){return cljs.core.first.call(null,cljs.core.keep_indexed.call(null,(function (idx,x){if(cljs.core.truth_(pred.call(null,x)))\n{return idx;\n} else\n{return null;\n}\n}),coll));\n});\nif(typeof lt.plugins.elm_light.elm_ast.project_asts !== 'undefined')\n{} else\n{lt.plugins.elm_light.elm_ast.project_asts = cljs.core.atom.call(null,cljs.core.PersistentVector.EMPTY);\n}\nlt.plugins.elm_light.elm_ast.upsert_ast_BANG_ = (function upsert_ast_BANG_(project,file_ast){var prj_idx = lt.plugins.elm_light.elm_ast.idx_of.call(null,(function (p1__22686_SHARP_){return cljs.core._EQ_.call(null,project,new cljs.core.Keyword(null,\"project\",\"project\",704593547).cljs$core$IFn$_invoke$arity$1(p1__22686_SHARP_));\n}),cljs.core.deref.call(null,lt.plugins.elm_light.elm_ast.project_asts));if(cljs.core.truth_(prj_idx))\n{return cljs.core.swap_BANG_.call(null,lt.plugins.elm_light.elm_ast.project_asts,cljs.core.update_in,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [prj_idx,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876)], null),((function (prj_idx){\nreturn (function (file_asts){return cljs.core.conj.call(null,cljs.core.filterv.call(null,((function (prj_idx){\nreturn (function (p1__22687_SHARP_){return cljs.core.not_EQ_.call(null,new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(file_ast),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(p1__22687_SHARP_));\n});})(prj_idx))\n,file_asts),file_ast);\n});})(prj_idx))\n);\n} else\n{return cljs.core.swap_BANG_.call(null,lt.plugins.elm_light.elm_ast.project_asts,cljs.core.conj,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"project\",\"project\",704593547),project,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [file_ast], null)], null));\n}\n});\nlt.plugins.elm_light.elm_ast.delete_ast_BANG_ = (function delete_ast_BANG_(project,file){var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.idx_of.call(null,(function (p1__22688_SHARP_){return cljs.core._EQ_.call(null,project,new cljs.core.Keyword(null,\"project\",\"project\",704593547).cljs$core$IFn$_invoke$arity$1(p1__22688_SHARP_));\n}),cljs.core.deref.call(null,lt.plugins.elm_light.elm_ast.project_asts));if(cljs.core.truth_(temp__4092__auto__))\n{var prj_idx = temp__4092__auto__;return cljs.core.swap_BANG_.call(null,lt.plugins.elm_light.elm_ast.project_asts,cljs.core.update_in,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [prj_idx,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876)], null),((function (prj_idx,temp__4092__auto__){\nreturn (function (file_asts){return cljs.core.filterv.call(null,((function (prj_idx,temp__4092__auto__){\nreturn (function (p1__22689_SHARP_){return cljs.core.not_EQ_.call(null,file,new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(p1__22689_SHARP_));\n});})(prj_idx,temp__4092__auto__))\n,file_asts);\n});})(prj_idx,temp__4092__auto__))\n);\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.delete_package_asts_BANG_ = (function delete_package_asts_BANG_(project){var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.idx_of.call(null,(function (p1__22690_SHARP_){return cljs.core._EQ_.call(null,project,new cljs.core.Keyword(null,\"project\",\"project\",704593547).cljs$core$IFn$_invoke$arity$1(p1__22690_SHARP_));\n}),cljs.core.deref.call(null,lt.plugins.elm_light.elm_ast.project_asts));if(cljs.core.truth_(temp__4092__auto__))\n{var prj_idx = temp__4092__auto__;return cljs.core.swap_BANG_.call(null,lt.plugins.elm_light.elm_ast.project_asts,cljs.core.update_in,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [prj_idx,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876)], null),((function (prj_idx,temp__4092__auto__){\nreturn (function (file_asts){return cljs.core.vec.call(null,cljs.core.remove.call(null,new cljs.core.Keyword(null,\"package\",\"package\",4501809080),file_asts));\n});})(prj_idx,temp__4092__auto__))\n);\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.delete_project_ast_BANG_ = (function delete_project_ast_BANG_(project){return cljs.core.swap_BANG_.call(null,lt.plugins.elm_light.elm_ast.project_asts,(function (prjs){return cljs.core.filterv.call(null,(function (p1__22691_SHARP_){return cljs.core.not_EQ_.call(null,project,new cljs.core.Keyword(null,\"project\",\"project\",704593547).cljs$core$IFn$_invoke$arity$1(p1__22691_SHARP_));\n}),prjs);\n}));\n});\nlt.plugins.elm_light.elm_ast.reset_asts_BANG_ = (function reset_asts_BANG_(){return cljs.core.reset_BANG_.call(null,lt.plugins.elm_light.elm_ast.project_asts,cljs.core.PersistentVector.EMPTY);\n});\nlt.plugins.elm_light.elm_ast.get_project = (function get_project(project){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__22692_SHARP_){return cljs.core._EQ_.call(null,project,new cljs.core.Keyword(null,\"project\",\"project\",704593547).cljs$core$IFn$_invoke$arity$1(p1__22692_SHARP_));\n}),cljs.core.deref.call(null,lt.plugins.elm_light.elm_ast.project_asts)));\n});\nlt.plugins.elm_light.elm_ast.get_module_ast = (function get_module_ast(project,module_file){var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.get_project.call(null,project);if(cljs.core.truth_(temp__4092__auto__))\n{var prj = temp__4092__auto__;return cljs.core.first.call(null,cljs.core.filter.call(null,((function (prj,temp__4092__auto__){\nreturn (function (p1__22693_SHARP_){return cljs.core._EQ_.call(null,module_file,new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(p1__22693_SHARP_));\n});})(prj,temp__4092__auto__))\n,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(prj)));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.get_module_by_name = (function get_module_by_name(project,module_name){var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.get_project.call(null,project);if(cljs.core.truth_(temp__4092__auto__))\n{var prj = temp__4092__auto__;return cljs.core.first.call(null,cljs.core.filter.call(null,((function (prj,temp__4092__auto__){\nreturn (function (p1__22694_SHARP_){return cljs.core._EQ_.call(null,module_name,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(p1__22694_SHARP_))));\n});})(prj,temp__4092__auto__))\n,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(prj)));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.parse_editor_sync = (function parse_editor_sync(ed){try{var res = lt.plugins.elm_light.elm_ast.elm_parser.parse(lt.objs.editor.__GT_val.call(null,ed));return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))),new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140),lt.plugins.elm_light.utils.mod_js__GT_clj.call(null,res,new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672),true)], null);\n}catch (e22696){var e = e22696;cljs.core.println.call(null,\"Parse editor contents failed\",e);\nreturn null;\n}});\nlt.plugins.elm_light.elm_ast.parse_editor_header_sync = (function parse_editor_header_sync(ed){try{var res = lt.plugins.elm_light.elm_ast.elm_parser.parse(lt.objs.editor.__GT_val.call(null,ed),{\"startRule\": \"headerOnly\"});return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))),new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140),cljs.core.js__GT_clj.call(null,res,new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672),true)], null);\n}catch (e22698){var e = e22698;cljs.core.println.call(null,\"Parse editor header block failed\",e);\nreturn null;\n}});\nlt.plugins.elm_light.elm_ast.parse_editor_async = lt.objs.thread.thread_STAR_.call(null,(function tfun22699(){var orig__6390__auto__ = argsArray(arguments);var msg__6391__auto__ = orig__6390__auto__.shift();var args__6392__auto__ = orig__6390__auto__.map(cljs.reader.read_string);var raise = ((function (orig__6390__auto__,msg__6391__auto__,args__6392__auto__){\nreturn (function (obj__6393__auto__,k__6394__auto__,v__6395__auto__){return _send(obj__6393__auto__,k__6394__auto__,cljs.core.pr_str.call(null,v__6395__auto__),\"clj\");\n});})(orig__6390__auto__,msg__6391__auto__,args__6392__auto__))\n;args__6392__auto__.unshift(msg__6391__auto__.obj);\nreturn ((function (orig__6390__auto__,msg__6391__auto__,args__6392__auto__,raise){\nreturn (function (obj_id,parser_path,callback_behavior,elm_code){var start__5757__auto__ = (new Date()).getTime();var ret__5758__auto__ = (function (){var parser = require(parser_path);try{var res = parser.parse.call(null,elm_code);return _send(obj_id,callback_behavior,{\"module\": res, \"status\": \"ok\"});\n}catch (e22701){var e = e22701;return _send(obj_id,callback_behavior,{\"error\": e, \"status\": \"fail\"});\n}})();cljs.core.prn.call(null,[cljs.core.str(\"Elapsed time: \"),cljs.core.str(((new Date()).getTime() - start__5757__auto__)),cljs.core.str(\" msecs\")].join(''));\nreturn ret__5758__auto__;\n});})(orig__6390__auto__,msg__6391__auto__,args__6392__auto__,raise))\n.apply(null,args__6392__auto__);\n}));\nlt.plugins.elm_light.elm_ast.get_module_name = (function get_module_name(module){return new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));\n});\nlt.plugins.elm_light.elm_ast.exposeAll_QMARK_ = (function exposeAll_QMARK_(exposing){return cljs.core._EQ_.call(null,\"exposeAll\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(exposing)))));\n});\nlt.plugins.elm_light.elm_ast.package_import_QMARK_ = (function package_import_QMARK_(modules,import$){return cljs.core.some.call(null,(function (p1__22702_SHARP_){return cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(import$),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(p1__22702_SHARP_))));\n}),cljs.core.filter.call(null,new cljs.core.Keyword(null,\"package\",\"package\",4501809080),modules));\n});\nlt.plugins.elm_light.elm_ast.extract_exports = (function extract_exports(exposing){return cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(exposing)));\n});\nlt.plugins.elm_light.elm_ast.exposed_by_module_QMARK_ = (function exposed_by_module_QMARK_(module,candidate){var exposing = new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));if(lt.plugins.elm_light.elm_ast.exposeAll_QMARK_.call(null,exposing))\n{return true;\n} else\n{return cljs.core.contains_QMARK_.call(null,cljs.core.set.call(null,lt.plugins.elm_light.elm_ast.extract_exports.call(null,exposing)),candidate);\n}\n});\nlt.plugins.elm_light.elm_ast.find_type_exposing = (function find_type_exposing(module_exposing,type_name){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__22703_SHARP_){return cljs.core._EQ_.call(null,type_name,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22703_SHARP_));\n}),new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(module_exposing))));\n});\nlt.plugins.elm_light.elm_ast.find_import_type_exposing = (function find_import_type_exposing(imp,owning_type_name,type_name){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__22704_SHARP_){return cljs.core._EQ_.call(null,owning_type_name,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22704_SHARP_));\n}),new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp)))));\n});\nlt.plugins.elm_light.elm_ast.enrich_type_declarations = (function enrich_type_declarations(module_exposing,exp_all_QMARK_,module_name,package$,file,type_decl){var type_exposing = lt.plugins.elm_light.elm_ast.find_type_exposing.call(null,module_exposing,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(type_decl));var exp_all_type_QMARK_ = lt.plugins.elm_light.elm_ast.exposeAll_QMARK_.call(null,type_exposing);var exports_type = cljs.core.set.call(null,lt.plugins.elm_light.elm_ast.extract_exports.call(null,type_exposing));var exp_by_mod_QMARK_ = ((function (type_exposing,exp_all_type_QMARK_,exports_type){\nreturn (function (p1__22705_SHARP_){var or__4884__auto__ = exp_all_QMARK_;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return (exp_all_type_QMARK_) || (cljs.core.contains_QMARK_.call(null,exports_type,p1__22705_SHARP_));\n}\n});})(type_exposing,exp_all_type_QMARK_,exports_type))\n;return cljs.core.map.call(null,((function (type_exposing,exp_all_type_QMARK_,exports_type,exp_by_mod_QMARK_){\nreturn (function (p1__22706_SHARP_){return cljs.core.assoc.call(null,p1__22706_SHARP_,new cljs.core.Keyword(null,\"exposed?\",\"exposed?\",3382850193),exp_by_mod_QMARK_.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22706_SHARP_)),new cljs.core.Keyword(null,\"owning-type-name\",\"owning-type-name\",4096407231),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(type_decl),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),file,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),module_name,new cljs.core.Keyword(null,\"package\",\"package\",4501809080),package$);\n});})(type_exposing,exp_all_type_QMARK_,exports_type,exp_by_mod_QMARK_))\n,new cljs.core.Keyword(null,\"adtDefs\",\"adtDefs\",4174585041).cljs$core$IFn$_invoke$arity$1(type_decl));\n});\nlt.plugins.elm_light.elm_ast.enrich_module_declarations = (function enrich_module_declarations(module){var exposing = new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));var expAll_QMARK_ = lt.plugins.elm_light.elm_ast.exposeAll_QMARK_.call(null,exposing);var exports = cljs.core.set.call(null,lt.plugins.elm_light.elm_ast.extract_exports.call(null,exposing));var exp_by_mod_QMARK_ = ((function (exposing,expAll_QMARK_,exports){\nreturn (function (p1__22707_SHARP_){return (expAll_QMARK_) || (cljs.core.contains_QMARK_.call(null,exports,p1__22707_SHARP_));\n});})(exposing,expAll_QMARK_,exports))\n;var file = new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(module);var module_name = lt.plugins.elm_light.elm_ast.get_module_name.call(null,module);var package$ = new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(module);return cljs.core.mapcat.call(null,((function (exposing,expAll_QMARK_,exports,exp_by_mod_QMARK_,file,module_name,package$){\nreturn (function (decl){var G__22710 = new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(decl);if(cljs.core._EQ_.call(null,\"typeDecl\",G__22710))\n{return cljs.core.conj.call(null,lt.plugins.elm_light.elm_ast.enrich_type_declarations.call(null,exposing,expAll_QMARK_,module_name,package$,file,decl),decl);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [decl], null);\n} else\n{return null;\n}\n}\n});})(exposing,expAll_QMARK_,exports,exp_by_mod_QMARK_,file,module_name,package$))\n,cljs.core.map.call(null,((function (exposing,expAll_QMARK_,exports,exp_by_mod_QMARK_,file,module_name,package$){\nreturn (function (p1__22708_SHARP_){return cljs.core.assoc.call(null,p1__22708_SHARP_,new cljs.core.Keyword(null,\"exposed?\",\"exposed?\",3382850193),exp_by_mod_QMARK_.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22708_SHARP_)),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),file,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),module_name,new cljs.core.Keyword(null,\"package\",\"package\",4501809080),package$);\n});})(exposing,expAll_QMARK_,exports,exp_by_mod_QMARK_,file,module_name,package$))\n,new cljs.core.Keyword(null,\"declarations\",\"declarations\",2554736043).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module))));\n});\nlt.plugins.elm_light.elm_ast.get_exposed_declarations = (function get_exposed_declarations(module){return cljs.core.filter.call(null,new cljs.core.Keyword(null,\"exposed?\",\"exposed?\",3382850193),lt.plugins.elm_light.elm_ast.enrich_module_declarations.call(null,module));\n});\nlt.plugins.elm_light.elm_ast.get_exposed_declarations_memo = cljs.core.memoize.call(null,(function (module){return lt.plugins.elm_light.elm_ast.get_exposed_declarations.call(null,module);\n}));\nlt.plugins.elm_light.elm_ast.get_import_candidate_tokens = (function get_import_candidate_tokens(imp,imp_module_name,imp_alias,imp_exported_names,imp_exports_all_QMARK_,exposed_declaration){var decl_name = new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(exposed_declaration);var type_exposing = ((cljs.core._EQ_.call(null,\"adtDef\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(exposed_declaration)))?lt.plugins.elm_light.elm_ast.find_import_type_exposing.call(null,imp,new cljs.core.Keyword(null,\"owning-type-name\",\"owning-type-name\",4096407231).cljs$core$IFn$_invoke$arity$1(exposed_declaration),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(exposed_declaration)):null);var exp_all_type_QMARK_ = lt.plugins.elm_light.elm_ast.exposeAll_QMARK_.call(null,type_exposing);var exports_type = cljs.core.set.call(null,lt.plugins.elm_light.elm_ast.extract_exports.call(null,type_exposing));return cljs.core.disj.call(null,cljs.core.PersistentHashSet.fromArray([(cljs.core.truth_((function (){var or__4884__auto__ = imp_exports_all_QMARK_;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return (exp_all_type_QMARK_) || (cljs.core.contains_QMARK_.call(null,imp_exported_names,decl_name)) || (cljs.core.contains_QMARK_.call(null,exports_type,decl_name));\n}\n})())?decl_name:null),(cljs.core.truth_(imp_alias)?[cljs.core.str(imp_alias),cljs.core.str(\".\"),cljs.core.str(decl_name)].join(''):[cljs.core.str(imp_module_name),cljs.core.str(\".\"),cljs.core.str(decl_name)].join(''))], true),null);\n});\nlt.plugins.elm_light.elm_ast.get_external_exposed_modules = (function get_external_exposed_modules(curr_module_name,imported_mod_names,modules){return cljs.core.group_by.call(null,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),cljs.core.mapcat.call(null,(function (p1__22712_SHARP_){return lt.plugins.elm_light.elm_ast.get_exposed_declarations_memo.call(null,p1__22712_SHARP_);\n}),cljs.core.filter.call(null,(function (p1__22711_SHARP_){return (cljs.core.not_EQ_.call(null,curr_module_name,lt.plugins.elm_light.elm_ast.get_module_name.call(null,p1__22711_SHARP_))) && (cljs.core.contains_QMARK_.call(null,imported_mod_names,lt.plugins.elm_light.elm_ast.get_module_name.call(null,p1__22711_SHARP_)));\n}),modules)));\n});\nlt.plugins.elm_light.elm_ast.get_external_candidates = (function get_external_candidates(module,modules){var imports = new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));var imported_mod_names = cljs.core.set.call(null,cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),imports));var external_exposed = lt.plugins.elm_light.elm_ast.get_external_exposed_modules.call(null,lt.plugins.elm_light.elm_ast.get_module_name.call(null,module),imported_mod_names,modules);return cljs.core.mapcat.call(null,((function (imports,imported_mod_names,external_exposed){\nreturn (function (imp){var imp_exported_names = cljs.core.set.call(null,lt.plugins.elm_light.elm_ast.extract_exports.call(null,new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp)));var imp_exports_all_QMARK_ = lt.plugins.elm_light.elm_ast.exposeAll_QMARK_.call(null,new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp));return cljs.core.map.call(null,((function (imp_exported_names,imp_exports_all_QMARK_,imports,imported_mod_names,external_exposed){\nreturn (function (p1__22713_SHARP_){return cljs.core.assoc.call(null,p1__22713_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),lt.plugins.elm_light.elm_ast.get_import_candidate_tokens.call(null,imp,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(imp),new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(imp),imp_exported_names,imp_exports_all_QMARK_,p1__22713_SHARP_));\n});})(imp_exported_names,imp_exports_all_QMARK_,imports,imported_mod_names,external_exposed))\n,cljs.core.get.call(null,external_exposed,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(imp)));\n});})(imports,imported_mod_names,external_exposed))\n,imports);\n});\nlt.plugins.elm_light.elm_ast.get_core_modules = (function get_core_modules(all_modules){return cljs.core.group_by.call(null,(function (p1__22715_SHARP_){return new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(p1__22715_SHARP_)));\n}),cljs.core.filter.call(null,(function (p1__22714_SHARP_){return cljs.core._EQ_.call(null,\"elm-lang/core\",new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(p1__22714_SHARP_)));\n}),all_modules));\n});\nlt.plugins.elm_light.elm_ast.elm_18_QMARK_ = (function elm_18_QMARK_(version){var and__4872__auto__ = version;if(cljs.core.truth_(and__4872__auto__))\n{return (5 <= parseInt(cljs.core.first.call(null,version)));\n} else\n{return and__4872__auto__;\n}\n});\n/**\n* Get candidates for Elm default imports as per\n* https://github.com/elm-lang/core\n*/\nlt.plugins.elm_light.elm_ast.get_default_candidates = (function get_default_candidates(modules){return cljs.core.map.call(null,(function (p1__22726_SHARP_){return cljs.core.assoc.call(null,p1__22726_SHARP_,new cljs.core.Keyword(null,\"default-candidate?\",\"default-candidate?\",4075348378),true);\n}),cljs.core.concat.call(null,cljs.core.map.call(null,(function (p1__22716_SHARP_){return cljs.core.assoc.call(null,p1__22716_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),cljs.core.PersistentHashSet.fromArray([new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22716_SHARP_)], true));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"Basics\"))),cljs.core.map.call(null,(function (p1__22717_SHARP_){return cljs.core.assoc.call(null,p1__22717_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"Debug.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22717_SHARP_))].join('')], true));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"Debug\"))),cljs.core.map.call(null,(function (p1__22718_SHARP_){return cljs.core.assoc.call(null,p1__22718_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),((cljs.core.contains_QMARK_.call(null,new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [\"Just\",null,\"Nothing\",null], null), null),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22718_SHARP_)))?cljs.core.PersistentHashSet.fromArray([new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22718_SHARP_),[cljs.core.str(\"Maybe.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22718_SHARP_))].join('')], true):cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"Maybe.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22718_SHARP_))].join('')], true)));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"Maybe\"))),cljs.core.map.call(null,(function (p1__22719_SHARP_){return cljs.core.assoc.call(null,p1__22719_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),((cljs.core.contains_QMARK_.call(null,new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [\"Err\",null,\"Ok\",null], null), null),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22719_SHARP_)))?cljs.core.PersistentHashSet.fromArray([new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22719_SHARP_),[cljs.core.str(\"Result.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22719_SHARP_))].join('')], true):cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"Result.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22719_SHARP_))].join('')], true)));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"Result\"))),cljs.core.map.call(null,(function (p1__22720_SHARP_){return cljs.core.assoc.call(null,p1__22720_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),((cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22720_SHARP_),\"Program\"))?new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [\"Program\",null], null), null):cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"Platform.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22720_SHARP_))].join('')], true)));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"Platform\"))),cljs.core.map.call(null,(function (p1__22721_SHARP_){return cljs.core.assoc.call(null,p1__22721_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),(function (){var G__22728 = new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22721_SHARP_);if(cljs.core._EQ_.call(null,\"!\",G__22728))\n{return new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [\"!\",null], null), null);\n} else\n{if(cljs.core._EQ_.call(null,\"Cmd\",G__22728))\n{return new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [\"Cmd\",null], null), null);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"Cmd.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22721_SHARP_))].join(''),[cljs.core.str(\"Platform.Cmd.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22721_SHARP_))].join('')], true);\n} else\n{return null;\n}\n}\n}\n})());\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"Platfrom.Cmd\"))),cljs.core.map.call(null,(function (p1__22722_SHARP_){return cljs.core.assoc.call(null,p1__22722_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),((cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22722_SHARP_),\"Sub\"))?new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [\"Sub\",null], null), null):cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"Sub.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22722_SHARP_))].join(''),[cljs.core.str(\"Platform.Sub.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22722_SHARP_))].join('')], true)));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"Platform.Sub\"))),cljs.core.map.call(null,(function (p1__22723_SHARP_){return cljs.core.assoc.call(null,p1__22723_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),((cljs.core._EQ_.call(null,\"::\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22723_SHARP_)))?new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [\"::\",null], null), null):cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"List.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22723_SHARP_))].join('')], true)));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"List\"))),cljs.core.map.call(null,(function (p1__22724_SHARP_){return cljs.core.assoc.call(null,p1__22724_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"Tuple.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22724_SHARP_))].join('')], true));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"Tuple\"))),(cljs.core.truth_(lt.plugins.elm_light.elm_ast.elm_18_QMARK_.call(null,new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,cljs.core.get.call(null,modules,\"String\"))))))?cljs.core.map.call(null,(function (p1__22725_SHARP_){return cljs.core.assoc.call(null,p1__22725_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),cljs.core.PersistentHashSet.fromArray([[cljs.core.str(\"String.\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22725_SHARP_))].join('')], true));\n}),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.get.call(null,modules,\"String\"))):null)));\n});\nlt.plugins.elm_light.elm_ast.get_default_candidates_memo = cljs.core.memoize.call(null,(function (core_modules){return lt.plugins.elm_light.elm_ast.get_default_candidates.call(null,core_modules);\n}));\nlt.plugins.elm_light.elm_ast.get_current_module_candidates = (function get_current_module_candidates(module){var mod_name = lt.plugins.elm_light.elm_ast.get_module_name.call(null,module);return cljs.core.map.call(null,((function (mod_name){\nreturn (function (p1__22729_SHARP_){return cljs.core.assoc.call(null,p1__22729_SHARP_,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238),cljs.core.PersistentHashSet.fromArray([new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22729_SHARP_)], true));\n});})(mod_name))\n,lt.plugins.elm_light.elm_ast.enrich_module_declarations.call(null,module));\n});\nlt.plugins.elm_light.elm_ast.get_jump_to_candidates = (function get_jump_to_candidates(module,modules){return cljs.core.concat.call(null,lt.plugins.elm_light.elm_ast.get_current_module_candidates.call(null,module),lt.plugins.elm_light.elm_ast.get_external_candidates.call(null,module,modules),lt.plugins.elm_light.elm_ast.get_default_candidates.call(null,lt.plugins.elm_light.elm_ast.get_core_modules.call(null,modules)));\n});\nlt.plugins.elm_light.elm_ast.get_candidate_by_token = (function get_candidate_by_token(token,module,modules){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__22730_SHARP_){return cljs.core.contains_QMARK_.call(null,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238).cljs$core$IFn$_invoke$arity$1(p1__22730_SHARP_),token);\n}),lt.plugins.elm_light.elm_ast.get_jump_to_candidates.call(null,module,modules)));\n});\nlt.plugins.elm_light.elm_ast.create_param_candidate = (function create_param_candidate(param,candidate){return new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(param),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)], null);\n});\nlt.plugins.elm_light.elm_ast.create_typealias_rec_candidates = (function create_typealias_rec_candidates(param,candidate){return cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.elm_light.elm_ast.create_param_candidate.call(null,param,candidate)], null),cljs.core.map.call(null,(function (p1__22731_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22731_SHARP_))].join(''),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(param)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22731_SHARP_))].join(''),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(p1__22731_SHARP_),new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(p1__22731_SHARP_),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)]);\n}),new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(candidate))));\n});\nlt.plugins.elm_light.elm_ast.create_destructured_type_alias_candidates = (function create_destructured_type_alias_candidates(param,candidate){var get_field_def = (function (p1__22732_SHARP_){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (x){return cljs.core._EQ_.call(null,p1__22732_SHARP_,new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(x));\n}),new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(candidate))));\n});return cljs.core.map.call(null,((function (get_field_def){\nreturn (function (field){var map__22734 = get_field_def.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field));var map__22734__$1 = ((cljs.core.seq_QMARK_.call(null,map__22734))?cljs.core.apply.call(null,cljs.core.hash_map,map__22734):map__22734);var signatureRaw = cljs.core.get.call(null,map__22734__$1,new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946));var doc = cljs.core.get.call(null,map__22734__$1,new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882));var location = cljs.core.get.call(null,map__22734__$1,new cljs.core.Keyword(null,\"location\",\"location\",2914947879));return new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field))].join(''),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),signatureRaw,new cljs.core.Keyword(null,\"location\",\"location\",2914947879),location,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)], null);\n});})(get_field_def))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(param));\n});\nlt.plugins.elm_light.elm_ast.create_bracketed_type_alias_candidates = (function create_bracketed_type_alias_candidates(param,candidate){var aliaz = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param));var get_field_def = ((function (aliaz){\nreturn (function (p1__22735_SHARP_){return cljs.core.first.call(null,cljs.core.filter.call(null,((function (aliaz){\nreturn (function (x){return cljs.core._EQ_.call(null,p1__22735_SHARP_,new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(x));\n});})(aliaz))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(candidate))));\n});})(aliaz))\n;return cljs.core.concat.call(null,(cljs.core.truth_(aliaz)?cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.assoc.call(null,lt.plugins.elm_light.elm_ast.create_param_candidate.call(null,param,candidate),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),aliaz)], null),cljs.core.map.call(null,((function (aliaz,get_field_def){\nreturn (function (p1__22736_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22736_SHARP_))].join(''),[cljs.core.str(aliaz),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22736_SHARP_))].join(''),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(p1__22736_SHARP_),new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(p1__22736_SHARP_),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)]);\n});})(aliaz,get_field_def))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(candidate)))):null),cljs.core.filter.call(null,cljs.core.identity,cljs.core.map.call(null,((function (aliaz,get_field_def){\nreturn (function (field){var temp__4092__auto__ = get_field_def.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field));if(cljs.core.truth_(temp__4092__auto__))\n{var field_def = temp__4092__auto__;return new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field))].join(''),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(field_def),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(field_def),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)], null);\n} else\n{return null;\n}\n});})(aliaz,get_field_def))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param))))));\n});\nlt.plugins.elm_light.elm_ast.print_rec = (function print_rec(rec){return [cljs.core.str(\"{ \"),cljs.core.str(clojure.string.join.call(null,\"\\n, \",cljs.core.map.call(null,new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946),new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(rec)))),cljs.core.str(\"\\n}\")].join('');\n});\nlt.plugins.elm_light.elm_ast.create_bracketed_adt_candidates = (function create_bracketed_adt_candidates(param,candidate,module,modules){var adtType = cljs.core.first.call(null,new cljs.core.Keyword(null,\"adtDefs\",\"adtDefs\",4174585041).cljs$core$IFn$_invoke$arity$1(candidate));var adtPattern = new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param);var fst_destruct_variable = cljs.core.first.call(null,new cljs.core.Keyword(null,\"variables\",\"variables\",931426537).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param))));return cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtType))].join(''),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtType),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(adtType),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"paramsRaw\",\"paramsRaw\",2968749108).cljs$core$IFn$_invoke$arity$1(adtType),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)], null)], null),(function (){var temp__4092__auto__ = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(adtPattern);if(cljs.core.truth_(temp__4092__auto__))\n{var aliaz = temp__4092__auto__;return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.assoc.call(null,lt.plugins.elm_light.elm_ast.create_param_candidate.call(null,param,candidate),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),aliaz)], null);\n} else\n{return null;\n}\n})(),((cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable)))?(function (){var adtParam = cljs.core.first.call(null,new cljs.core.Keyword(null,\"params\",\"params\",4313443576).cljs$core$IFn$_invoke$arity$1(adtType));var adtCandidate = lt.plugins.elm_light.elm_ast.get_candidate_by_token.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtParam),module,modules);return cljs.core.concat.call(null,(cljs.core.truth_(adtCandidate)?new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(adtCandidate)], null)], null):null),((cljs.core._EQ_.call(null,\"typeRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(adtParam)))?(function (){cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtType)),cljs.core.str(\".<customrecord>\")].join(''),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(adtParam),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),lt.plugins.elm_light.elm_ast.print_rec.call(null,adtParam),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)], null)], null));\nreturn cljs.core.map.call(null,((function (adtParam,adtCandidate,adtType,adtPattern,fst_destruct_variable){\nreturn (function (p1__22737_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtType)),cljs.core.str(\".<customrecord>.\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22737_SHARP_))].join(''),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22737_SHARP_))].join(''),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(p1__22737_SHARP_),new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(p1__22737_SHARP_),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)]);\n});})(adtParam,adtCandidate,adtType,adtPattern,fst_destruct_variable))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(adtParam));\n})():null));\n})():null),(cljs.core.truth_(new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core._EQ_.call(null,\"patternRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable))], null))?(function (){var adtParam = cljs.core.first.call(null,new cljs.core.Keyword(null,\"params\",\"params\",4313443576).cljs$core$IFn$_invoke$arity$1(adtType));var adtCandidate = lt.plugins.elm_light.elm_ast.get_candidate_by_token.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtParam),module,modules);var get_field_def = ((function (adtParam,adtCandidate,adtType,adtPattern,fst_destruct_variable){\nreturn (function (p1__22738_SHARP_){return cljs.core.first.call(null,cljs.core.filter.call(null,((function (adtParam,adtCandidate,adtType,adtPattern,fst_destruct_variable){\nreturn (function (x){return cljs.core._EQ_.call(null,p1__22738_SHARP_,new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(x));\n});})(adtParam,adtCandidate,adtType,adtPattern,fst_destruct_variable))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(adtCandidate))));\n});})(adtParam,adtCandidate,adtType,adtPattern,fst_destruct_variable))\n;return cljs.core.concat.call(null,((cljs.core._EQ_.call(null,\"typeAliasDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(adtCandidate)))?cljs.core.concat.call(null,(function (){var temp__4092__auto__ = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable));if(cljs.core.truth_(temp__4092__auto__))\n{var aliaz = temp__4092__auto__;return cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.elm_light.elm_ast.create_param_candidate.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),aliaz], null),adtCandidate)], null),cljs.core.map.call(null,((function (aliaz,temp__4092__auto__,adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable){\nreturn (function (p1__22739_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtCandidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22739_SHARP_))].join(''),[cljs.core.str(aliaz),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22739_SHARP_))].join(''),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(p1__22739_SHARP_),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(p1__22739_SHARP_),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(adtCandidate)]);\n});})(aliaz,temp__4092__auto__,adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(adtCandidate))));\n} else\n{return null;\n}\n})(),((cljs.core._EQ_.call(null,\"patternRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable)))?cljs.core.map.call(null,((function (adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable){\nreturn (function (field){if(cljs.core.truth_(get_field_def.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field))))\n{var map__22743 = get_field_def.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field));var map__22743__$1 = ((cljs.core.seq_QMARK_.call(null,map__22743))?cljs.core.apply.call(null,cljs.core.hash_map,map__22743):map__22743);var signatureRaw = cljs.core.get.call(null,map__22743__$1,new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946));var doc = cljs.core.get.call(null,map__22743__$1,new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882));var location = cljs.core.get.call(null,map__22743__$1,new cljs.core.Keyword(null,\"location\",\"location\",2914947879));return new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtCandidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field))].join(''),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),signatureRaw,new cljs.core.Keyword(null,\"location\",\"location\",2914947879),location,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(adtCandidate)], null);\n} else\n{return null;\n}\n});})(adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable)):null),((cljs.core._EQ_.call(null,\"patternBracket\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable)))?cljs.core.map.call(null,((function (adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable){\nreturn (function (field){if(cljs.core.truth_(get_field_def.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field))))\n{var map__22744 = get_field_def.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field));var map__22744__$1 = ((cljs.core.seq_QMARK_.call(null,map__22744))?cljs.core.apply.call(null,cljs.core.hash_map,map__22744):map__22744);var signatureRaw = cljs.core.get.call(null,map__22744__$1,new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946));var doc = cljs.core.get.call(null,map__22744__$1,new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882));var location = cljs.core.get.call(null,map__22744__$1,new cljs.core.Keyword(null,\"location\",\"location\",2914947879));return new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtCandidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field))].join(''),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(field),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(adtCandidate),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),signatureRaw,new cljs.core.Keyword(null,\"location\",\"location\",2914947879),location,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(adtCandidate)], null);\n} else\n{return null;\n}\n});})(adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable)))):null)):null),((cljs.core._EQ_.call(null,\"typeRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,new cljs.core.Keyword(null,\"params\",\"params\",4313443576).cljs$core$IFn$_invoke$arity$1(adtType)))))?cljs.core.concat.call(null,(function (){var temp__4092__auto__ = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(fst_destruct_variable));if(cljs.core.truth_(temp__4092__auto__))\n{var aliaz = temp__4092__auto__;return cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtType)),cljs.core.str(\".<unamed record>\")].join(''),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),aliaz,new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,new cljs.core.Keyword(null,\"params\",\"params\",4313443576).cljs$core$IFn$_invoke$arity$1(adtType))),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),lt.plugins.elm_light.elm_ast.print_rec.call(null,cljs.core.first.call(null,new cljs.core.Keyword(null,\"params\",\"params\",4313443576).cljs$core$IFn$_invoke$arity$1(adtType))),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)], null)], null),cljs.core.map.call(null,((function (aliaz,temp__4092__auto__,adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable){\nreturn (function (p1__22740_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtType)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22740_SHARP_))].join(''),[cljs.core.str(aliaz),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22740_SHARP_))].join(''),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(p1__22740_SHARP_),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(p1__22740_SHARP_),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)]);\n});})(aliaz,temp__4092__auto__,adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,new cljs.core.Keyword(null,\"params\",\"params\",4313443576).cljs$core$IFn$_invoke$arity$1(adtType)))));\n} else\n{return null;\n}\n})(),cljs.core.map.call(null,((function (adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable){\nreturn (function (field){return new cljs.core.PersistentArrayMap(null, 7, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtType)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(field))].join(''),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(field),new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(field),new cljs.core.Keyword(null,\"location\",\"location\",2914947879),new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(field),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)], null);\n});})(adtParam,adtCandidate,get_field_def,adtType,adtPattern,fst_destruct_variable))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,new cljs.core.Keyword(null,\"params\",\"params\",4313443576).cljs$core$IFn$_invoke$arity$1(adtType))))):null));\n})():null));\n});\nlt.plugins.elm_light.elm_ast.get_candidate_by_token_loc_aware = (function get_candidate_by_token_loc_aware(token,pos,module,modules){var jump_to_candidates = lt.plugins.elm_light.elm_ast.get_jump_to_candidates.call(null,module,modules);var decl = lt.plugins.elm_light.elm_ast.find_top_level_declaration_by_pos.call(null,pos,module);if(cljs.core.truth_((function (){var and__4872__auto__ = cljs.core._EQ_.call(null,\"nameDef\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(decl));if(and__4872__auto__)\n{return new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(decl));\n} else\n{return and__4872__auto__;\n}\n})()))\n{return ((function (jump_to_candidates,decl){\nreturn (function (x){var or__4884__auto__ = x;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return lt.plugins.elm_light.elm_ast.get_candidate_by_token.call(null,token,module,modules);\n}\n});})(jump_to_candidates,decl))\n.call(null,cljs.core.first.call(null,cljs.core.filter.call(null,((function (jump_to_candidates,decl){\nreturn (function (p1__22745_SHARP_){return cljs.core._EQ_.call(null,token,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413).cljs$core$IFn$_invoke$arity$1(p1__22745_SHARP_));\n});})(jump_to_candidates,decl))\n,cljs.core.mapcat.call(null,((function (jump_to_candidates,decl){\nreturn (function (param,p__22748){var map__22749 = p__22748;var map__22749__$1 = ((cljs.core.seq_QMARK_.call(null,map__22749))?cljs.core.apply.call(null,cljs.core.hash_map,map__22749):map__22749);var ann = map__22749__$1;var candidate = cljs.core.get.call(null,map__22749__$1,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413));if((cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeAliasDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))))\n{return lt.plugins.elm_light.elm_ast.create_typealias_rec_candidates.call(null,param,candidate);\n} else\n{if((cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))))\n{return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.elm_light.elm_ast.create_param_candidate.call(null,param,candidate)], null);\n} else\n{if((cljs.core._EQ_.call(null,\"patternRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeAliasDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))))\n{return lt.plugins.elm_light.elm_ast.create_destructured_type_alias_candidates.call(null,param,candidate);\n} else\n{if((cljs.core._EQ_.call(null,\"patternBracket\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeAliasDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))))\n{return lt.plugins.elm_light.elm_ast.create_bracketed_type_alias_candidates.call(null,param,candidate);\n} else\n{if((cljs.core._EQ_.call(null,\"patternBracket\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))) && (cljs.core._EQ_.call(null,1,cljs.core.count.call(null,new cljs.core.Keyword(null,\"adtDefs\",\"adtDefs\",4174585041).cljs$core$IFn$_invoke$arity$1(candidate)))) && (!(lt.plugins.elm_light.elm_ast.in_range_QMARK_.call(null,pos,new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(decl)))))\n{return lt.plugins.elm_light.elm_ast.create_bracketed_adt_candidates.call(null,param,candidate,module,modules);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.PersistentVector.EMPTY;\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n});})(jump_to_candidates,decl))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(decl),new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.enrich_top_level_declaration.call(null,decl,jump_to_candidates)))))));\n} else\n{return lt.plugins.elm_light.elm_ast.get_candidate_by_token.call(null,token,module,modules);\n}\n});\nlt.plugins.elm_light.elm_ast.__GT_pos = (function __GT_pos(ast_pos){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),(new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(ast_pos) - 1),new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),(new cljs.core.Keyword(null,\"column\",\"column\",3954034376).cljs$core$IFn$_invoke$arity$1(ast_pos) - 1)], null);\n});\nlt.plugins.elm_light.elm_ast.__GT_range = (function __GT_range(location){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"start\",\"start\",1123661780),lt.plugins.elm_light.elm_ast.__GT_pos.call(null,new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(location)),new cljs.core.Keyword(null,\"end\",\"end\",1014004813),lt.plugins.elm_light.elm_ast.__GT_pos.call(null,new cljs.core.Keyword(null,\"end\",\"end\",1014004813).cljs$core$IFn$_invoke$arity$1(location))], null);\n});\nlt.plugins.elm_light.elm_ast.in_range_QMARK_ = (function in_range_QMARK_(p__22750,decl){var map__22753 = p__22750;var map__22753__$1 = ((cljs.core.seq_QMARK_.call(null,map__22753))?cljs.core.apply.call(null,cljs.core.hash_map,map__22753):map__22753);var line = cljs.core.get.call(null,map__22753__$1,new cljs.core.Keyword(null,\"line\",\"line\",1017226086));var ch = cljs.core.get.call(null,map__22753__$1,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415));var map__22754 = lt.plugins.elm_light.elm_ast.__GT_range.call(null,new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(decl));var map__22754__$1 = ((cljs.core.seq_QMARK_.call(null,map__22754))?cljs.core.apply.call(null,cljs.core.hash_map,map__22754):map__22754);var end = cljs.core.get.call(null,map__22754__$1,new cljs.core.Keyword(null,\"end\",\"end\",1014004813));var start = cljs.core.get.call(null,map__22754__$1,new cljs.core.Keyword(null,\"start\",\"start\",1123661780));if(((line < new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(start))) || ((line > new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(end))))\n{return false;\n} else\n{if(((cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(start),line)) && ((ch < new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415).cljs$core$IFn$_invoke$arity$1(start)))) || ((cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(end),line)) && ((ch > new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415).cljs$core$IFn$_invoke$arity$1(end)))))\n{return false;\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return true;\n} else\n{return null;\n}\n}\n}\n});\nlt.plugins.elm_light.elm_ast.find_top_level_declaration_by_pos = (function() {\nvar find_top_level_declaration_by_pos = null;\nvar find_top_level_declaration_by_pos__2 = (function (pos,module){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__22755_SHARP_){return lt.plugins.elm_light.elm_ast.in_range_QMARK_.call(null,pos,p1__22755_SHARP_);\n}),new cljs.core.Keyword(null,\"declarations\",\"declarations\",2554736043).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module))));\n});\nvar find_top_level_declaration_by_pos__3 = (function (pos,project_dir,module_file){return find_top_level_declaration_by_pos.call(null,pos,lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_dir,module_file));\n});\nfind_top_level_declaration_by_pos = function(pos,project_dir,module_file){\nswitch(arguments.length){\ncase 2:\nreturn find_top_level_declaration_by_pos__2.call(this,pos,project_dir);\ncase 3:\nreturn find_top_level_declaration_by_pos__3.call(this,pos,project_dir,module_file);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nfind_top_level_declaration_by_pos.cljs$core$IFn$_invoke$arity$2 = find_top_level_declaration_by_pos__2;\nfind_top_level_declaration_by_pos.cljs$core$IFn$_invoke$arity$3 = find_top_level_declaration_by_pos__3;\nreturn find_top_level_declaration_by_pos;\n})()\n;\nlt.plugins.elm_light.elm_ast.find_import_by_pos = (function() {\nvar find_import_by_pos = null;\nvar find_import_by_pos__2 = (function (pos,module){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__22756_SHARP_){return lt.plugins.elm_light.elm_ast.in_range_QMARK_.call(null,pos,p1__22756_SHARP_);\n}),new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)))));\n});\nvar find_import_by_pos__3 = (function (pos,project_dir,module_file){return find_import_by_pos.call(null,pos,lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_dir,module_file));\n});\nfind_import_by_pos = function(pos,project_dir,module_file){\nswitch(arguments.length){\ncase 2:\nreturn find_import_by_pos__2.call(this,pos,project_dir);\ncase 3:\nreturn find_import_by_pos__3.call(this,pos,project_dir,module_file);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nfind_import_by_pos.cljs$core$IFn$_invoke$arity$2 = find_import_by_pos__2;\nfind_import_by_pos.cljs$core$IFn$_invoke$arity$3 = find_import_by_pos__3;\nreturn find_import_by_pos;\n})()\n;\n/**\n* For annotated definitions it tries to add extended information\n* about types for each parameter (ie union types and type aliases)\n*/\nlt.plugins.elm_light.elm_ast.enrich_top_level_declaration = (function enrich_top_level_declaration(decl,jump_to_candidates){var get_cand = (function (token){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__22757_SHARP_){return cljs.core.contains_QMARK_.call(null,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238).cljs$core$IFn$_invoke$arity$1(p1__22757_SHARP_),token);\n}),jump_to_candidates));\n});return cljs.core.update_in.call(null,decl,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001),new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554)], null),((function (get_cand){\nreturn (function (items){return cljs.core.map.call(null,((function (get_cand){\nreturn (function (item){if(cljs.core._EQ_.call(null,\"typeAdt\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(item)))\n{return cljs.core.assoc.call(null,item,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),get_cand.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(item)));\n} else\n{return item;\n}\n});})(get_cand))\n,items);\n});})(get_cand))\n);\n});\nlt.plugins.elm_light.elm_ast.get_jump_to_definition = (function get_jump_to_definition(token,pos,module_file,project_file){var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_file,module_file);if(cljs.core.truth_(temp__4092__auto__))\n{var module = temp__4092__auto__;return lt.plugins.elm_light.elm_ast.get_candidate_by_token_loc_aware.call(null,token,pos,module,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.get_project.call(null,project_file)));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.to_hint = (function to_hint(curr_module_name,candidate){return cljs.core.map.call(null,(function (c_tok){return new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"type\",\"type\",1017479852),new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),c_tok,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),((cljs.core.not_EQ_.call(null,curr_module_name,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)))?new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate):null),new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554),new cljs.core.Keyword(null,\"signatureRawSansName\",\"signatureRawSansName\",3062006176).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(candidate))], null);\n}),new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238).cljs$core$IFn$_invoke$arity$1(candidate));\n});\nlt.plugins.elm_light.elm_ast.dot_ex = RegExp(\"\\\\.\",\"g\");\nlt.plugins.elm_light.elm_ast.compare_dots = (function compare_dots(a,b){var num_dots = (function (p1__22758_SHARP_){return cljs.core.count.call(null,p1__22758_SHARP_.match(lt.plugins.elm_light.elm_ast.dot_ex));\n});return cljs.core.compare.call(null,num_dots.call(null,a),num_dots.call(null,b));\n});\nlt.plugins.elm_light.elm_ast.declaration_param_hint_items = (function declaration_param_hint_items(pos,module,jump_to_candidates){var decl = lt.plugins.elm_light.elm_ast.find_top_level_declaration_by_pos.call(null,pos,module);var m_name = ((function (decl){\nreturn (function (p1__22759_SHARP_){if(cljs.core._EQ_.call(null,lt.plugins.elm_light.elm_ast.get_module_name.call(null,module),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(p1__22759_SHARP_)))\n{return null;\n} else\n{return [cljs.core.str(\"(\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22759_SHARP_)),cljs.core.str(\") \"),cljs.core.str(new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(p1__22759_SHARP_))].join('');\n}\n});})(decl))\n;var get_jump_to_by_token = ((function (decl,m_name){\nreturn (function (tok){return cljs.core.first.call(null,cljs.core.filter.call(null,((function (decl,m_name){\nreturn (function (p1__22760_SHARP_){return cljs.core.contains_QMARK_.call(null,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238).cljs$core$IFn$_invoke$arity$1(p1__22760_SHARP_),tok);\n});})(decl,m_name))\n,jump_to_candidates));\n});})(decl,m_name))\n;var mod_name = ((cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast._PERCENT_),lt.plugins.elm_light.elm_ast.get_module_name.call(null,module)))?null:[cljs.core.str(\"(\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast._PERCENT_)),cljs.core.str(\") \"),cljs.core.str(new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast._PERCENT_))].join(''));if(cljs.core.truth_((function (){var and__4872__auto__ = cljs.core._EQ_.call(null,\"nameDef\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(decl));if(and__4872__auto__)\n{return new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(decl));\n} else\n{return and__4872__auto__;\n}\n})()))\n{return cljs.core.mapcat.call(null,((function (decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (param,p__22776){var map__22777 = p__22776;var map__22777__$1 = ((cljs.core.seq_QMARK_.call(null,map__22777))?cljs.core.apply.call(null,cljs.core.hash_map,map__22777):map__22777);var ann = map__22777__$1;var candidate = cljs.core.get.call(null,map__22777__$1,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413));if((cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(ann))))\n{return cljs.core.cons.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(param)], null),cljs.core.map.call(null,((function (map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22761_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(param)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22761_SHARP_))].join('')]);\n});})(map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(ann)));\n} else\n{if((cljs.core._EQ_.call(null,\"patternRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(ann))))\n{return cljs.core.map.call(null,((function (map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22762_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22762_SHARP_)]);\n});})(map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(param));\n} else\n{if((cljs.core._EQ_.call(null,\"patternBracket\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(ann))))\n{return cljs.core.concat.call(null,(function (){var temp__4092__auto__ = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param));if(cljs.core.truth_(temp__4092__auto__))\n{var aliaz = temp__4092__auto__;return cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),aliaz], null)], null),cljs.core.map.call(null,((function (aliaz,temp__4092__auto__,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22763_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[[cljs.core.str(aliaz),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22763_SHARP_))].join('')]);\n});})(aliaz,temp__4092__auto__,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(ann)));\n} else\n{return null;\n}\n})(),cljs.core.map.call(null,((function (map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22764_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22764_SHARP_)]);\n});})(map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param)))));\n} else\n{if((cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeAliasDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))))\n{return cljs.core.cons.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(param),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),mod_name.call(null,candidate)], null),cljs.core.map.call(null,((function (map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22765_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(param)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22765_SHARP_))].join(''),mod_name.call(null,candidate)]);\n});})(map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(candidate))));\n} else\n{if((cljs.core._EQ_.call(null,\"patternRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeAliasDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))))\n{return cljs.core.map.call(null,((function (map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (pattern){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(pattern),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),mod_name.call(null,candidate)], null);\n});})(map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(param));\n} else\n{if((cljs.core._EQ_.call(null,\"patternBracket\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeAliasDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))))\n{var aliaz = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param));return cljs.core.concat.call(null,(cljs.core.truth_(aliaz)?cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),aliaz,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),mod_name.call(null,candidate)], null)], null),cljs.core.map.call(null,((function (aliaz,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22766_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(aliaz),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22766_SHARP_))].join(''),mod_name.call(null,candidate)]);\n});})(aliaz,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(candidate)))):null),cljs.core.map.call(null,((function (aliaz,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22767_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22767_SHARP_),mod_name.call(null,candidate)]);\n});})(aliaz,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param)))));\n} else\n{if((cljs.core._EQ_.call(null,\"patternBracket\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param))) && (cljs.core._EQ_.call(null,\"typeDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(candidate))) && (cljs.core._EQ_.call(null,1,cljs.core.count.call(null,new cljs.core.Keyword(null,\"adtDefs\",\"adtDefs\",4174585041).cljs$core$IFn$_invoke$arity$1(candidate)))) && (!(lt.plugins.elm_light.elm_ast.in_range_QMARK_.call(null,pos,new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(decl)))))\n{var pattern_param = cljs.core.first.call(null,new cljs.core.Keyword(null,\"variables\",\"variables\",931426537).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param))));var adtType = cljs.core.first.call(null,new cljs.core.Keyword(null,\"adtDefs\",\"adtDefs\",4174585041).cljs$core$IFn$_invoke$arity$1(candidate));var adtPattern = new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(param);var adtParam = cljs.core.first.call(null,new cljs.core.Keyword(null,\"params\",\"params\",4313443576).cljs$core$IFn$_invoke$arity$1(adtType));var adtCandidate = get_jump_to_by_token.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(adtParam));return cljs.core.concat.call(null,(function (){var temp__4092__auto__ = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(adtPattern);if(cljs.core.truth_(temp__4092__auto__))\n{var aliaz = temp__4092__auto__;return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),aliaz,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),mod_name.call(null,candidate)], null)], null);\n} else\n{return null;\n}\n})(),(((cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(pattern_param))) && ((new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(adtCandidate) == null)))?new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(pattern_param)], null)], null):null),(((cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(pattern_param))) && (cljs.core._EQ_.call(null,\"typeRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(adtParam))))?cljs.core.map.call(null,((function (pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22768_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(pattern_param)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22768_SHARP_))].join(''),mod_name.call(null,candidate)]);\n});})(pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(adtParam)):null),(((cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(pattern_param))) && (cljs.core._EQ_.call(null,\"typeAliasDecl\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(adtCandidate))))?cljs.core.map.call(null,((function (pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22769_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(pattern_param)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22769_SHARP_))].join(''),mod_name.call(null,candidate)]);\n});})(pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(adtCandidate))):null),((cljs.core._EQ_.call(null,\"patternRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(pattern_param)))?cljs.core.map.call(null,((function (pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22770_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22770_SHARP_),mod_name.call(null,candidate)]);\n});})(pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(pattern_param)):null),((cljs.core._EQ_.call(null,\"patternBracket\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(pattern_param)))?((cljs.core._EQ_.call(null,\"patternRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(pattern_param)))))?cljs.core.concat.call(null,(function (){var temp__4092__auto__ = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(pattern_param));if(cljs.core.truth_(temp__4092__auto__))\n{var aliaz = temp__4092__auto__;return cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),aliaz,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),(cljs.core.truth_(adtCandidate)?mod_name.call(null,adtCandidate):null)], null)], null),(cljs.core.truth_(adtCandidate)?cljs.core.map.call(null,((function (aliaz,temp__4092__auto__,pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22771_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(aliaz),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22771_SHARP_))].join(''),mod_name.call(null,adtCandidate)]);\n});})(aliaz,temp__4092__auto__,pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"tipe\",\"tipe\",1017464476).cljs$core$IFn$_invoke$arity$1(adtCandidate))):null),((cljs.core._EQ_.call(null,\"typeRec\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(adtParam)))?cljs.core.map.call(null,((function (aliaz,temp__4092__auto__,pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22772_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)],[[cljs.core.str(aliaz),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__22772_SHARP_))].join(''),mod_name.call(null,candidate)]);\n});})(aliaz,temp__4092__auto__,pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"fieldDefs\",\"fieldDefs\",2278619290).cljs$core$IFn$_invoke$arity$1(adtParam)):null));\n} else\n{return null;\n}\n})(),cljs.core.map.call(null,((function (pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name){\nreturn (function (p1__22773_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22773_SHARP_)]);\n});})(pattern_param,adtType,adtPattern,adtParam,adtCandidate,map__22777,map__22777__$1,ann,candidate,decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"pattern\",\"pattern\",4517781250).cljs$core$IFn$_invoke$arity$1(pattern_param))))):null):null));\n} else\n{if(cljs.core._EQ_.call(null,\"variable\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(param)))\n{return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(param),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),m_name.call(null,candidate)], null)], null);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.PersistentVector.EMPTY;\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(decl,m_name,get_jump_to_by_token,mod_name))\n,new cljs.core.Keyword(null,\"patterns\",\"patterns\",2259909205).cljs$core$IFn$_invoke$arity$1(decl),new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.enrich_top_level_declaration.call(null,decl,jump_to_candidates))));\n} else\n{return cljs.core.PersistentVector.EMPTY;\n}\n});\nlt.plugins.elm_light.elm_ast.declarations_hints = (function declarations_hints(p__22780,module,modules){var map__22782 = p__22780;var map__22782__$1 = ((cljs.core.seq_QMARK_.call(null,map__22782))?cljs.core.apply.call(null,cljs.core.hash_map,map__22782):map__22782);var pos = cljs.core.get.call(null,map__22782__$1,new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430));var token = cljs.core.get.call(null,map__22782__$1,new cljs.core.Keyword(null,\"token\",\"token\",1124445547));var jump_to_candidates = lt.plugins.elm_light.elm_ast.get_jump_to_candidates.call(null,module,modules);return cljs.core.sort.call(null,((function (jump_to_candidates,map__22782,map__22782__$1,pos,token){\nreturn (function (a,b){var mod_sort = lt.plugins.elm_light.elm_ast.compare_dots.call(null,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413).cljs$core$IFn$_invoke$arity$1(a),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413).cljs$core$IFn$_invoke$arity$1(b));if(cljs.core._EQ_.call(null,0,mod_sort))\n{return new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413).cljs$core$IFn$_invoke$arity$1(a).localeCompare(new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413).cljs$core$IFn$_invoke$arity$1(b));\n} else\n{return mod_sort;\n}\n});})(jump_to_candidates,map__22782,map__22782__$1,pos,token))\n,cljs.core.filter.call(null,((function (jump_to_candidates,map__22782,map__22782__$1,pos,token){\nreturn (function (p1__22779_SHARP_){return cljs.core._EQ_.call(null,0,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413).cljs$core$IFn$_invoke$arity$1(p1__22779_SHARP_).indexOf(token));\n});})(jump_to_candidates,map__22782,map__22782__$1,pos,token))\n,cljs.core.concat.call(null,lt.plugins.elm_light.elm_ast.declaration_param_hint_items.call(null,pos,module,jump_to_candidates),cljs.core.mapcat.call(null,cljs.core.partial.call(null,lt.plugins.elm_light.elm_ast.to_hint,lt.plugins.elm_light.elm_ast.get_module_name.call(null,module)),cljs.core.filter.call(null,((function (jump_to_candidates,map__22782,map__22782__$1,pos,token){\nreturn (function (decl){return cljs.core.some.call(null,((function (jump_to_candidates,map__22782,map__22782__$1,pos,token){\nreturn (function (p1__22778_SHARP_){return cljs.core._EQ_.call(null,0,p1__22778_SHARP_.indexOf(token));\n});})(jump_to_candidates,map__22782,map__22782__$1,pos,token))\n,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238).cljs$core$IFn$_invoke$arity$1(decl));\n});})(jump_to_candidates,map__22782,map__22782__$1,pos,token))\n,jump_to_candidates)))));\n});\nlt.plugins.elm_light.elm_ast.import_hints = (function import_hints(p__22789,imp,mod_header,modules){var map__22791 = p__22789;var map__22791__$1 = ((cljs.core.seq_QMARK_.call(null,map__22791))?cljs.core.apply.call(null,cljs.core.hash_map,map__22791):map__22791);var pos = cljs.core.get.call(null,map__22791__$1,new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430));var token = cljs.core.get.call(null,map__22791__$1,new cljs.core.Keyword(null,\"token\",\"token\",1124445547));var curr_exports = cljs.core.set.call(null,cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp)))));var existing_import_names = cljs.core.set.call(null,cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(mod_header)))));if((cljs.core.not.call(null,new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(imp))) && (cljs.core.not.call(null,cljs.core.seq.call(null,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp))))))\n{return cljs.core.sort_by.call(null,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),cljs.core.map.call(null,((function (curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token){\nreturn (function (p1__22785_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22785_SHARP_)]);\n});})(curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token))\n,cljs.core.filter.call(null,((function (curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token){\nreturn (function (p1__22784_SHARP_){return (cljs.core._EQ_.call(null,0,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22784_SHARP_).indexOf(token))) && (!(cljs.core._EQ_.call(null,lt.plugins.elm_light.elm_ast.get_module_name.call(null,mod_header),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22784_SHARP_)))) && (!(cljs.core.contains_QMARK_.call(null,existing_import_names,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22784_SHARP_))));\n});})(curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token))\n,cljs.core.filter.call(null,cljs.core.identity,cljs.core.map.call(null,((function (curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token){\nreturn (function (p1__22783_SHARP_){return new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(p1__22783_SHARP_));\n});})(curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token))\n,modules)))));\n} else\n{if((cljs.core.seq.call(null,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp)))) && (lt.plugins.elm_light.elm_ast.in_range_QMARK_.call(null,pos,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp)))))\n{return cljs.core.map.call(null,((function (curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token){\nreturn (function (p1__22788_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[p1__22788_SHARP_]);\n});})(curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token))\n,cljs.core.sort.call(null,cljs.core.filter.call(null,((function (curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token){\nreturn (function (p1__22787_SHARP_){return (cljs.core._EQ_.call(null,0,p1__22787_SHARP_.indexOf(token))) && ((cljs.core._EQ_.call(null,token,p1__22787_SHARP_)) || (!(cljs.core.contains_QMARK_.call(null,curr_exports,p1__22787_SHARP_))));\n});})(curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token))\n,cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),lt.plugins.elm_light.elm_ast.get_exposed_declarations.call(null,cljs.core.first.call(null,cljs.core.filter.call(null,((function (curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token){\nreturn (function (p1__22786_SHARP_){return cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(imp),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(p1__22786_SHARP_))));\n});})(curr_exports,existing_import_names,map__22791,map__22791__$1,pos,token))\n,modules)))))));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.PersistentVector.EMPTY;\n} else\n{return null;\n}\n}\n}\n});\n/**\n* Provides hints when cursor inside exposing parens.\n* Pls note that mod-header is the latest and greatest (if current editor content parses ok)\n*/\nlt.plugins.elm_light.elm_ast.module_header_hints = (function module_header_hints(p__22794,mod_header,module){var map__22796 = p__22794;var map__22796__$1 = ((cljs.core.seq_QMARK_.call(null,map__22796))?cljs.core.apply.call(null,cljs.core.hash_map,map__22796):map__22796);var pos = cljs.core.get.call(null,map__22796__$1,new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430));var token = cljs.core.get.call(null,map__22796__$1,new cljs.core.Keyword(null,\"token\",\"token\",1124445547));var exposing = new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(mod_header)));var exports_container = new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(exposing);var curr_exports = cljs.core.set.call(null,lt.plugins.elm_light.elm_ast.extract_exports.call(null,exposing));var decls = new cljs.core.Keyword(null,\"declarations\",\"declarations\",2554736043).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module));if(lt.plugins.elm_light.elm_ast.in_range_QMARK_.call(null,pos,exports_container))\n{return cljs.core.map.call(null,((function (exposing,exports_container,curr_exports,decls,map__22796,map__22796__$1,pos,token){\nreturn (function (p1__22793_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[p1__22793_SHARP_]);\n});})(exposing,exports_container,curr_exports,decls,map__22796,map__22796__$1,pos,token))\n,cljs.core.sort.call(null,cljs.core.filter.call(null,((function (exposing,exports_container,curr_exports,decls,map__22796,map__22796__$1,pos,token){\nreturn (function (p1__22792_SHARP_){return (cljs.core._EQ_.call(null,0,p1__22792_SHARP_.indexOf(token))) && (!(cljs.core.contains_QMARK_.call(null,curr_exports,p1__22792_SHARP_)));\n});})(exposing,exports_container,curr_exports,decls,map__22796,map__22796__$1,pos,token))\n,cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),decls))));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.PersistentVector.EMPTY;\n} else\n{return null;\n}\n}\n});\nlt.plugins.elm_light.elm_ast.reserved_words_hints = (function reserved_words_hints(token){return cljs.core.map.call(null,(function (p1__22798_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413)],[p1__22798_SHARP_]);\n}),cljs.core.sort.call(null,cljs.core.filter.call(null,(function (p1__22797_SHARP_){return cljs.core._EQ_.call(null,0,p1__22797_SHARP_.indexOf(token));\n}),new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [\"import\",\"type\",\"type alias\",\"type\",\"port\"], null))));\n});\n/**\n* Return hints for a given module file and project.\n* The context parameter provides additional info to filter results\n* and to help make the results context aware to provide better more relevant results\n* \n* TODO: Only token is used and only toplevel declarations currently TBI\n*/\nlt.plugins.elm_light.elm_ast.get_hints = (function() {\nvar get_hints = null;\nvar get_hints__3 = (function (ctx,module_file,project_dir){return get_hints.call(null,ctx,module_file,project_dir,null);\n});\nvar get_hints__4 = (function (p__22799,module_file,project_dir,module_header){var map__22801 = p__22799;var map__22801__$1 = ((cljs.core.seq_QMARK_.call(null,map__22801))?cljs.core.apply.call(null,cljs.core.hash_map,map__22801):map__22801);var ctx = map__22801__$1;var ed = cljs.core.get.call(null,map__22801__$1,new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473));var token = cljs.core.get.call(null,map__22801__$1,new cljs.core.Keyword(null,\"token\",\"token\",1124445547));var pos = cljs.core.get.call(null,map__22801__$1,new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430));var ed_tok = lt.objs.editor.__GT_token.call(null,ed,pos);var module = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_dir,module_file);var top_level_decl_QMARK_ = lt.plugins.elm_light.elm_ast.find_top_level_declaration_by_pos.call(null,pos,module);var mod_header = (function (){var or__4884__auto__ = module_header;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return module;\n}\n})();var modules = new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.get_project.call(null,project_dir));var imp = lt.plugins.elm_light.elm_ast.find_import_by_pos.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(pos),new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),0], null),mod_header);if(cljs.core.truth_(module))\n{if(cljs.core._EQ_.call(null,0,new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(ed_tok)))\n{return lt.plugins.elm_light.elm_ast.reserved_words_hints.call(null,token);\n} else\n{if(cljs.core.truth_(imp))\n{return lt.plugins.elm_light.elm_ast.import_hints.call(null,ctx,imp,mod_header,modules);\n} else\n{if(lt.plugins.elm_light.elm_ast.in_range_QMARK_.call(null,pos,new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(mod_header))))\n{return lt.plugins.elm_light.elm_ast.module_header_hints.call(null,ctx,mod_header,module);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return lt.plugins.elm_light.elm_ast.declarations_hints.call(null,ctx,module,modules);\n} else\n{return null;\n}\n}\n}\n}\n} else\n{return null;\n}\n});\nget_hints = function(p__22799,module_file,project_dir,module_header){\nswitch(arguments.length){\ncase 3:\nreturn get_hints__3.call(this,p__22799,module_file,project_dir);\ncase 4:\nreturn get_hints__4.call(this,p__22799,module_file,project_dir,module_header);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nget_hints.cljs$core$IFn$_invoke$arity$3 = get_hints__3;\nget_hints.cljs$core$IFn$_invoke$arity$4 = get_hints__4;\nreturn get_hints;\n})()\n;\nlt.plugins.elm_light.elm_ast.find_all_occs = (function find_all_occs(line,tok){var pattern = cljs.core.re_pattern.call(null,[cljs.core.str(\"\\\\b\"),cljs.core.str(tok),cljs.core.str(\"\\\\b(?!\\\\.)\")].join(''));var s = line;var items = cljs.core.PersistentVector.EMPTY;var curr_idx = 0;while(true){\nvar idx = s.search(pattern);var act_idx = (curr_idx + idx);if(cljs.core._EQ_.call(null,-1,idx))\n{return items;\n} else\n{{\nvar G__22846 = cljs.core.subs.call(null,s,((idx + cljs.core.count.call(null,tok)) + 1));\nvar G__22847 = cljs.core.conj.call(null,items,act_idx);\nvar G__22848 = ((act_idx + cljs.core.count.call(null,tok)) + 1);\ns = G__22846;\nitems = G__22847;\ncurr_idx = G__22848;\ncontinue;\n}\n}\nbreak;\n}\n});\nlt.plugins.elm_light.elm_ast.get_usage_editor = (function get_usage_editor(file){var temp__4090__auto__ = cljs.core.first.call(null,lt.objs.editor.pool.by_path.call(null,file));if(cljs.core.truth_(temp__4090__auto__))\n{var ed = temp__4090__auto__;return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473),ed,new cljs.core.Keyword(null,\"close-fn\",\"close-fn\",2106681391),((function (ed,temp__4090__auto__){\nreturn (function (){return cljs.core.List.EMPTY;\n});})(ed,temp__4090__auto__))\n], null);\n} else\n{var content = new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(lt.objs.files.open_sync.call(null,file));var ed = lt.objs.editor.pool.create.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"mime\",\"mime\",1017255846),\"text/x-elm\",new cljs.core.Keyword(null,\"content\",\"content\",1965434859),content], null));return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473),ed,new cljs.core.Keyword(null,\"close-fn\",\"close-fn\",2106681391),((function (content,ed,temp__4090__auto__){\nreturn (function (){return lt.object.destroy_BANG_.call(null,ed);\n});})(content,ed,temp__4090__auto__))\n], null);\n}\n});\nlt.plugins.elm_light.elm_ast.find_usage_hits = (function find_usage_hits(candidate_module){var map__22809 = lt.plugins.elm_light.elm_ast.get_usage_editor.call(null,new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate_module));var map__22809__$1 = ((cljs.core.seq_QMARK_.call(null,map__22809))?cljs.core.apply.call(null,cljs.core.hash_map,map__22809):map__22809);var close_fn = cljs.core.get.call(null,map__22809__$1,new cljs.core.Keyword(null,\"close-fn\",\"close-fn\",2106681391));var ed = cljs.core.get.call(null,map__22809__$1,new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473));var line_count = lt.objs.editor.line_count.call(null,ed);return ((function (map__22809,map__22809__$1,close_fn,ed,line_count){\nreturn (function (xs){close_fn.call(null);\nreturn cljs.core.assoc.call(null,candidate_module,new cljs.core.Keyword(null,\"hits\",\"hits\",1017107122),xs);\n});})(map__22809,map__22809__$1,close_fn,ed,line_count))\n.call(null,cljs.core.sort_by.call(null,((function (map__22809,map__22809__$1,close_fn,ed,line_count){\nreturn (function (p1__22805_SHARP_){return new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(p1__22805_SHARP_));\n});})(map__22809,map__22809__$1,close_fn,ed,line_count))\n,cljs.core.map.call(null,((function (map__22809,map__22809__$1,close_fn,ed,line_count){\nreturn (function (p__22810){var vec__22811 = p__22810;var _ = cljs.core.nth.call(null,vec__22811,0,null);var v = cljs.core.nth.call(null,vec__22811,1,null);return cljs.core.first.call(null,cljs.core.sort_by.call(null,((function (vec__22811,_,v,map__22809,map__22809__$1,close_fn,ed,line_count){\nreturn (function (p1__22804_SHARP_){return cljs.core.count.call(null,new cljs.core.Keyword(null,\"token\",\"token\",1124445547).cljs$core$IFn$_invoke$arity$1(p1__22804_SHARP_));\n});})(vec__22811,_,v,map__22809,map__22809__$1,close_fn,ed,line_count))\n,v));\n});})(map__22809,map__22809__$1,close_fn,ed,line_count))\n,cljs.core.group_by.call(null,((function (map__22809,map__22809__$1,close_fn,ed,line_count){\nreturn (function (p1__22803_SHARP_){return [cljs.core.str(new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"end\",\"end\",1014004813).cljs$core$IFn$_invoke$arity$1(p1__22803_SHARP_))),cljs.core.str(\"-\"),cljs.core.str(new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"end\",\"end\",1014004813).cljs$core$IFn$_invoke$arity$1(p1__22803_SHARP_)))].join('');\n});})(map__22809,map__22809__$1,close_fn,ed,line_count))\n,cljs.core.filter.call(null,cljs.core.seq,cljs.core.mapcat.call(null,((function (map__22809,map__22809__$1,close_fn,ed,line_count){\nreturn (function (l){var line = lt.objs.editor.line.call(null,ed,l);return cljs.core.mapcat.call(null,((function (line,map__22809,map__22809__$1,close_fn,ed,line_count){\nreturn (function (token){return cljs.core.map.call(null,((function (line,map__22809,map__22809__$1,close_fn,ed,line_count){\nreturn (function (p1__22802_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"start\",\"start\",1123661780),new cljs.core.Keyword(null,\"end\",\"end\",1014004813),new cljs.core.Keyword(null,\"token\",\"token\",1124445547),new cljs.core.Keyword(null,\"line\",\"line\",1017226086)],[new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),p1__22802_SHARP_,new cljs.core.Keyword(null,\"line\",\"line\",1017226086),l], null),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),(p1__22802_SHARP_ + cljs.core.count.call(null,token)),new cljs.core.Keyword(null,\"line\",\"line\",1017226086),l], null),token,line]);\n});})(line,map__22809,map__22809__$1,close_fn,ed,line_count))\n,lt.plugins.elm_light.elm_ast.find_all_occs.call(null,line,token));\n});})(line,map__22809,map__22809__$1,close_fn,ed,line_count))\n,new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238).cljs$core$IFn$_invoke$arity$1(candidate_module));\n});})(map__22809,map__22809__$1,close_fn,ed,line_count))\n,cljs.core.range.call(null,0,line_count)))))));\n});\nlt.plugins.elm_light.elm_ast.find_usages = (function find_usages(token,project_file,module_file){var modules = new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.get_project.call(null,project_file));var candidate = lt.plugins.elm_light.elm_ast.get_jump_to_definition.call(null,token,cljs.core.PersistentArrayMap.EMPTY,module_file,project_file);var candidate_module = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_file,new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate));var cand_mods = cljs.core.sort_by.call(null,((function (modules,candidate,candidate_module){\nreturn (function (p1__22812_SHARP_){return new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(p1__22812_SHARP_)));\n});})(modules,candidate,candidate_module))\n,cljs.core.filter.call(null,cljs.core.identity,cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [(cljs.core.truth_(new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(candidate_module))?null:candidate_module)], null),cljs.core.filter.call(null,((function (modules,candidate,candidate_module){\nreturn (function (mod){var or__4884__auto__ = new cljs.core.Keyword(null,\"default-candidate?\",\"default-candidate?\",4075348378).cljs$core$IFn$_invoke$arity$1(candidate);if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return cljs.core.contains_QMARK_.call(null,cljs.core.set.call(null,cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(mod))))),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate));\n}\n});})(modules,candidate,candidate_module))\n,cljs.core.remove.call(null,new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.get_project.call(null,project_file)))))));return ((function (modules,candidate,candidate_module,cand_mods){\nreturn (function (mod_usages){return new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413),candidate,new cljs.core.Keyword(null,\"usages-per-module\",\"usages-per-module\",3285520969),mod_usages,new cljs.core.Keyword(null,\"token\",\"token\",1124445547),token], null);\n});})(modules,candidate,candidate_module,cand_mods))\n.call(null,cljs.core.filter.call(null,((function (modules,candidate,candidate_module,cand_mods){\nreturn (function (p1__22816_SHARP_){return cljs.core.seq.call(null,new cljs.core.Keyword(null,\"hits\",\"hits\",1017107122).cljs$core$IFn$_invoke$arity$1(p1__22816_SHARP_));\n});})(modules,candidate,candidate_module,cand_mods))\n,cljs.core.map.call(null,lt.plugins.elm_light.elm_ast.find_usage_hits,cljs.core.map.call(null,((function (modules,candidate,candidate_module,cand_mods){\nreturn (function (p1__22815_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238)],[new cljs.core.Keyword(null,\"candidate-module-file\",\"candidate-module-file\",3377529445).cljs$core$IFn$_invoke$arity$1(p1__22815_SHARP_),new cljs.core.Keyword(null,\"candidate-tokens\",\"candidate-tokens\",3775833238).cljs$core$IFn$_invoke$arity$1(p1__22815_SHARP_)]);\n});})(modules,candidate,candidate_module,cand_mods))\n,cljs.core.mapcat.call(null,((function (modules,candidate,candidate_module,cand_mods){\nreturn (function (mod){return cljs.core.filter.call(null,((function (modules,candidate,candidate_module,cand_mods){\nreturn (function (p1__22814_SHARP_){return (false) || ((cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(p1__22814_SHARP_))) && (cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22814_SHARP_))));\n});})(modules,candidate,candidate_module,cand_mods))\n,cljs.core.map.call(null,((function (modules,candidate,candidate_module,cand_mods){\nreturn (function (p1__22813_SHARP_){return cljs.core.assoc.call(null,p1__22813_SHARP_,new cljs.core.Keyword(null,\"candidate-module-file\",\"candidate-module-file\",3377529445),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(mod));\n});})(modules,candidate,candidate_module,cand_mods))\n,lt.plugins.elm_light.elm_ast.get_jump_to_candidates.call(null,mod,modules)));\n});})(modules,candidate,candidate_module,cand_mods))\n,cand_mods)))));\n});\nlt.plugins.elm_light.elm_ast.search_docs = (function search_docs(sym,project_dir){var qualified_name = (function (p1__22817_SHARP_){return [cljs.core.str(new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(p1__22817_SHARP_)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22817_SHARP_))].join('');\n});var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.get_project.call(null,project_dir);if(cljs.core.truth_(temp__4092__auto__))\n{var prj = temp__4092__auto__;return cljs.core.sort_by.call(null,cljs.core.juxt.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)),cljs.core.map.call(null,((function (prj,temp__4092__auto__,qualified_name){\nreturn (function (decl){return new cljs.core.PersistentArrayMap(null, 6, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl),new cljs.core.Keyword(null,\"ns\",\"ns\",1013907767),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(decl),new cljs.core.Keyword(null,\"args\",\"args\",1016906831),(function (){var or__4884__auto__ = new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(decl));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(decl);\n}\n})(),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882).cljs$core$IFn$_invoke$arity$1(decl),new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(decl)], null);\n});})(prj,temp__4092__auto__,qualified_name))\n,cljs.core.filter.call(null,((function (prj,temp__4092__auto__,qualified_name){\nreturn (function (decl){var or__4884__auto__ = lt.plugins.elm_light.elm_ast.start_with_QMARK_.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl),sym);if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return lt.plugins.elm_light.elm_ast.start_with_QMARK_.call(null,qualified_name.call(null,decl),sym);\n}\n});})(prj,temp__4092__auto__,qualified_name))\n,cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(prj)))));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.get_gutter_exposeds = (function get_gutter_exposeds(module_file,project_file){var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_file,module_file);if(cljs.core.truth_(temp__4092__auto__))\n{var module = temp__4092__auto__;return cljs.core.remove.call(null,((function (module,temp__4092__auto__){\nreturn (function (p1__22818_SHARP_){return cljs.core._EQ_.call(null,\"adtDef\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(p1__22818_SHARP_));\n});})(module,temp__4092__auto__))\n,lt.plugins.elm_light.elm_ast.get_exposed_declarations.call(null,module));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.print_export = (function print_export(export$){return [cljs.core.str(((cljs.core._EQ_.call(null,\"binOpRef\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(export$)))?[cljs.core.str(\"(\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(export$)),cljs.core.str(\")\")].join(''):new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(export$))),cljs.core.str(((cljs.core.not.call(null,cljs.core.seq.call(null,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(export$))))?\"\":((new cljs.core.Keyword(null,\"else\",\"else\",1017020587))?[cljs.core.str(\" (\"),cljs.core.str(lt.plugins.elm_light.elm_ast.print_exports.call(null,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(export$))),cljs.core.str(\")\")].join(''):null)))].join('');\n});\nlt.plugins.elm_light.elm_ast.print_exports = (function print_exports(exports){if(cljs.core.not.call(null,cljs.core.seq.call(null,exports)))\n{return \"\";\n} else\n{if(cljs.core._EQ_.call(null,\"exposeAll\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(exports)))))\n{return \"..\";\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return clojure.string.join.call(null,\", \",cljs.core.map.call(null,lt.plugins.elm_light.elm_ast.print_export,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345).cljs$core$IFn$_invoke$arity$1(exports)));\n} else\n{return null;\n}\n}\n}\n});\nlt.plugins.elm_light.elm_ast.print_exposing = (function print_exposing(p__22819){var map__22821 = p__22819;var map__22821__$1 = ((cljs.core.seq_QMARK_.call(null,map__22821))?cljs.core.apply.call(null,cljs.core.hash_map,map__22821):map__22821);var exposing = map__22821__$1;var exports = cljs.core.get.call(null,map__22821__$1,new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345));if(cljs.core.not.call(null,cljs.core.seq.call(null,exports)))\n{return \"\";\n} else\n{return [cljs.core.str(\"exposing (\"),cljs.core.str(lt.plugins.elm_light.elm_ast.print_exports.call(null,exports)),cljs.core.str(\")\")].join('');\n}\n});\nlt.plugins.elm_light.elm_ast.print_import = (function print_import(imp){return [cljs.core.str(\"import \"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(imp)),cljs.core.str((function (){var temp__4092__auto__ = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(imp);if(cljs.core.truth_(temp__4092__auto__))\n{var aliaz = temp__4092__auto__;return [cljs.core.str(\" as \"),cljs.core.str(aliaz)].join('');\n} else\n{return null;\n}\n})()),cljs.core.str(((cljs.core.seq.call(null,new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp)))?[cljs.core.str(\" \"),cljs.core.str(lt.plugins.elm_light.elm_ast.print_exposing.call(null,new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(imp)))].join(''):null))].join('');\n});\nlt.plugins.elm_light.elm_ast.print_imports = (function() {\nvar print_imports = null;\nvar print_imports__1 = (function (imports){return print_imports.call(null,cljs.core.identity,imports);\n});\nvar print_imports__2 = (function (sort_fn,imports){return clojure.string.join.call(null,\"\\n\",cljs.core.map.call(null,lt.plugins.elm_light.elm_ast.print_import,sort_fn.call(null,imports)));\n});\nprint_imports = function(sort_fn,imports){\nswitch(arguments.length){\ncase 1:\nreturn print_imports__1.call(this,sort_fn);\ncase 2:\nreturn print_imports__2.call(this,sort_fn,imports);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nprint_imports.cljs$core$IFn$_invoke$arity$1 = print_imports__1;\nprint_imports.cljs$core$IFn$_invoke$arity$2 = print_imports__2;\nreturn print_imports;\n})()\n;\nlt.plugins.elm_light.elm_ast.sort_imports_default = (function sort_imports_default(project_dir,imports){var modules = new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.get_project.call(null,project_dir));return cljs.core.sort_by.call(null,cljs.core.juxt.call(null,cljs.core.partial.call(null,lt.plugins.elm_light.elm_ast.package_import_QMARK_,modules),new cljs.core.Keyword(null,\"value\",\"value\",1125876963)),imports);\n});\nlt.plugins.elm_light.elm_ast.sym_exposed_QMARK_ = (function sym_exposed_QMARK_(sym,project_dir,module_file){return lt.plugins.elm_light.elm_ast.exposed_by_module_QMARK_.call(null,lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_dir,module_file),sym);\n});\n/**\n* Adds an export to exposing node\n* NOTE: Does not check if exposeAll or already exposed.\n*/\nlt.plugins.elm_light.elm_ast.expose_decl = (function expose_decl(decl,exposing){var value = new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl);return cljs.core.update_in.call(null,exposing,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345),new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345)], null),((function (value){\nreturn (function (exports){return cljs.core.conj.call(null,exports,(function (){var G__22823 = new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(decl);if(cljs.core._EQ_.call(null,\"binOpDef\",G__22823))\n{return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"type\",\"type\",1017479852),\"binOpRef\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963),value], null);\n} else\n{if(cljs.core._EQ_.call(null,\"typeDecl\",G__22823))\n{return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"type\",\"type\",1017479852),\"adt\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963),value], null);\n} else\n{if(cljs.core._EQ_.call(null,\"typeAliasDecl\",G__22823))\n{return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"type\",\"type\",1017479852),\"adt\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963),value], null);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"type\",\"type\",1017479852),\"ref\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963),value], null);\n} else\n{return null;\n}\n}\n}\n}\n})());\n});})(value))\n);\n});\n/**\n* Removes an export from and exposing node. Ignored if exposed through exposeAll (..)\n*/\nlt.plugins.elm_light.elm_ast.unexpose_decl = (function unexpose_decl(decl,exposing){var value = new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl);return cljs.core.update_in.call(null,exposing,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345),new cljs.core.Keyword(null,\"exports\",\"exports\",3999815345)], null),((function (value){\nreturn (function (exports){return cljs.core.remove.call(null,((function (value){\nreturn (function (p1__22824_SHARP_){return cljs.core._EQ_.call(null,value,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22824_SHARP_));\n});})(value))\n,exports);\n});})(value))\n);\n});\n/**\n* Find applicable import candidates based on token for a given module\n*/\nlt.plugins.elm_light.elm_ast.get_autoimport_candidates = (function get_autoimport_candidates(aliaz,token,module_file,project_dir){var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_dir,module_file);if(cljs.core.truth_(temp__4092__auto__))\n{var module = temp__4092__auto__;var modules = new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.get_project.call(null,project_dir));return cljs.core.filter.call(null,((function (modules,module,temp__4092__auto__){\nreturn (function (candidate){return (cljs.core._EQ_.call(null,token,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate))) && (cljs.core.not.call(null,cljs.core.some.call(null,((function (modules,module,temp__4092__auto__){\nreturn (function (p1__22826_SHARP_){var and__4872__auto__ = new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234).cljs$core$IFn$_invoke$arity$1(p1__22826_SHARP_);if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22826_SHARP_));\n} else\n{return and__4872__auto__;\n}\n});})(modules,module,temp__4092__auto__))\n,new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module))))));\n});})(modules,module,temp__4092__auto__))\n,cljs.core.concat.call(null,lt.plugins.elm_light.elm_ast.get_default_candidates.call(null,lt.plugins.elm_light.elm_ast.get_core_modules.call(null,modules)),cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.get_exposed_declarations,cljs.core.filter.call(null,((function (modules,module,temp__4092__auto__){\nreturn (function (p1__22825_SHARP_){return cljs.core.not_EQ_.call(null,module_file,new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(p1__22825_SHARP_));\n});})(modules,module,temp__4092__auto__))\n,modules))));\n} else\n{return null;\n}\n});\n/**\n* Add import with alias or update an existing import with given alias\n*/\nlt.plugins.elm_light.elm_ast.upsert_imports = (function upsert_imports(module_name,aliaz,imports){var temp__4090__auto__ = lt.plugins.elm_light.elm_ast.idx_of.call(null,(function (p1__22827_SHARP_){return cljs.core._EQ_.call(null,module_name,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__22827_SHARP_));\n}),imports);if(cljs.core.truth_(temp__4090__auto__))\n{var idx = temp__4090__auto__;return cljs.core.assoc_in.call(null,cljs.core.vec.call(null,imports),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [idx,new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234)], null),aliaz);\n} else\n{return cljs.core.conj.call(null,imports,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),module_name,new cljs.core.Keyword(null,\"type\",\"type\",1017479852),\"import\",new cljs.core.Keyword(null,\"alias\",\"alias\",1106807234),aliaz,new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387),cljs.core.PersistentVector.EMPTY], null));\n}\n});\nlt.plugins.elm_light.elm_ast.test_module_candidate_QMARK_ = (function test_module_candidate_QMARK_(module){var imp_names = cljs.core.set.call(null,cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)))));return cljs.core.contains_QMARK_.call(null,imp_names,\"Test\");\n});\nlt.plugins.elm_light.elm_ast.ignore_test_QMARK_ = (function ignore_test_QMARK_(decl){if(cljs.core.truth_(new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882).cljs$core$IFn$_invoke$arity$1(decl)))\n{return lt.plugins.elm_light.utils.str_contains.call(null,new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882).cljs$core$IFn$_invoke$arity$1(decl),\"@ltignore\");\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.elm_ast.get_test_decls = (function get_test_decls(module){return cljs.core.filter.call(null,(function (p1__22828_SHARP_){return (cljs.core.not.call(null,lt.plugins.elm_light.elm_ast.ignore_test_QMARK_.call(null,p1__22828_SHARP_))) && (cljs.core._EQ_.call(null,\"Test\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(p1__22828_SHARP_))))));\n}),lt.plugins.elm_light.elm_ast.get_exposed_declarations_memo.call(null,module));\n});\nlt.plugins.elm_light.elm_ast.__GT_suite_tests = (function __GT_suite_tests(module){return cljs.core.map.call(null,(function (p1__22829_SHARP_){return cljs.core.select_keys.call(null,p1__22829_SHARP_,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710)], null));\n}),lt.plugins.elm_light.elm_ast.get_test_decls.call(null,module));\n});\nlt.plugins.elm_light.elm_ast.get_project_tests = (function get_project_tests(project_path){var project = lt.plugins.elm_light.elm_ast.get_project.call(null,project_path);return cljs.core.mapcat.call(null,lt.plugins.elm_light.elm_ast.__GT_suite_tests,cljs.core.filter.call(null,((function (project){\nreturn (function (module){if(cljs.core.truth_(new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(module)))\n{return null;\n} else\n{return lt.plugins.elm_light.elm_ast.test_module_candidate_QMARK_.call(null,module);\n}\n});})(project))\n,new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(project)));\n});\nlt.plugins.elm_light.elm_ast.get_module_tests = (function get_module_tests(project_path,module_file){var module = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_path,module_file);if(lt.plugins.elm_light.elm_ast.test_module_candidate_QMARK_.call(null,module))\n{return lt.plugins.elm_light.elm_ast.__GT_suite_tests.call(null,module);\n} else\n{return cljs.core.PersistentVector.EMPTY;\n}\n});\nlt.plugins.elm_light.elm_ast.get_test_by_pos = (function get_test_by_pos(pos,project_path,module_file){var module = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,project_path,module_file);var decl = lt.plugins.elm_light.elm_ast.find_top_level_declaration_by_pos.call(null,pos,module);if((lt.plugins.elm_light.elm_ast.test_module_candidate_QMARK_.call(null,module)) && (lt.plugins.elm_light.elm_ast.exposed_by_module_QMARK_.call(null,module,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl))) && (cljs.core._EQ_.call(null,\"Test\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(decl)))))) && (cljs.core.not.call(null,lt.plugins.elm_light.elm_ast.ignore_test_QMARK_.call(null,decl))))\n{return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),lt.plugins.elm_light.elm_ast.get_module_name.call(null,module)], null)], null);\n} else\n{return cljs.core.PersistentVector.EMPTY;\n}\n});\nlt.plugins.elm_light.elm_ast.status_class = (function status_class(p__22830){var map__22833 = p__22830;var map__22833__$1 = ((cljs.core.seq_QMARK_.call(null,map__22833))?cljs.core.apply.call(null,cljs.core.hash_map,map__22833):map__22833);var status = cljs.core.get.call(null,map__22833__$1,new cljs.core.Keyword(null,\"status\",\"status\",4416389988));var G__22834 = status;if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"ok\",\"ok\",1013907790),G__22834))\n{return \"ok\";\n} else\n{if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"error\",\"error\",1110689146),G__22834))\n{return \"error\";\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return \"\";\n} else\n{return null;\n}\n}\n}\n});\nlt.plugins.elm_light.elm_ast.status_text = (function status_text(p__22835){var map__22838 = p__22835;var map__22838__$1 = ((cljs.core.seq_QMARK_.call(null,map__22838))?cljs.core.apply.call(null,cljs.core.hash_map,map__22838):map__22838);var error = cljs.core.get.call(null,map__22838__$1,new cljs.core.Keyword(null,\"error\",\"error\",1110689146));var status = cljs.core.get.call(null,map__22838__$1,new cljs.core.Keyword(null,\"status\",\"status\",4416389988));return [cljs.core.str(\"AST: \"),cljs.core.str((function (){var G__22839 = status;if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"error\",\"error\",1110689146),G__22839))\n{return \"Error\";\n} else\n{if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"ok\",\"ok\",1013907790),G__22839))\n{return \"Ok\";\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return \"Not connected\";\n} else\n{return null;\n}\n}\n}\n})())].join('');\n});\nlt.plugins.elm_light.elm_ast.__GT_status_ui = (function __GT_status_ui(p__22840){var map__22842 = p__22840;var map__22842__$1 = ((cljs.core.seq_QMARK_.call(null,map__22842))?cljs.core.apply.call(null,cljs.core.hash_map,map__22842):map__22842);var ast_summary = cljs.core.get.call(null,map__22842__$1,new cljs.core.Keyword(null,\"ast-summary\",\"ast-summary\",1727157965));return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),[cljs.core.str(\"ast-status \"),cljs.core.str(lt.plugins.elm_light.elm_ast.status_class.call(null,ast_summary))].join('')], null),lt.plugins.elm_light.elm_ast.status_text.call(null,ast_summary)], null);\n});\nlt.plugins.elm_light.elm_ast.__BEH__update_ast_status = (function __BEH__update_ast_status(this$,f){return lt.object.update_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ast-summary\",\"ast-summary\",1727157965)], null),f);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.elm-ast\",\"update-ast-status\",\"lt.plugins.elm-light.elm-ast/update-ast-status\",2519133077),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.elm_ast.__BEH__update_ast_status,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"update!\",\"update!\",779473898),null], null), null));\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.elm-ast\",\"statusbar.ast-status\",\"lt.plugins.elm-light.elm-ast/statusbar.ast-status\",1374391534),new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),cljs.core.PersistentHashSet.EMPTY,new cljs.core.Keyword(null,\"behaviors\",\"behaviors\",607554515),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(\"lt.plugins.elm-light.elm-ast\",\"update-ast-status\",\"lt.plugins.elm-light.elm-ast/update-ast-status\",2519133077),null], null), null),new cljs.core.Keyword(null,\"ast-summary\",\"ast-summary\",1727157965),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"status\",\"status\",4416389988),\"\"], null),new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){return lt.objs.statusbar.statusbar_item.call(null,crate.binding.bound.call(null,this$,lt.plugins.elm_light.elm_ast.__GT_status_ui),\"\");\n}));\nlt.plugins.elm_light.elm_ast.statusbar_ast_summary = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.elm-ast\",\"statusbar.ast-status\",\"lt.plugins.elm-light.elm-ast/statusbar.ast-status\",1374391534));\nlt.objs.statusbar.add_statusbar_item.call(null,lt.plugins.elm_light.elm_ast.statusbar_ast_summary);\nlt.plugins.elm_light.elm_ast.update_status_for_editor = (function update_status_for_editor(ed){var map__22845 = new cljs.core.Keyword(null,\"ast-status\",\"ast-status\",2421112079).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));var map__22845__$1 = ((cljs.core.seq_QMARK_.call(null,map__22845))?cljs.core.apply.call(null,cljs.core.hash_map,map__22845):map__22845);var error = cljs.core.get.call(null,map__22845__$1,new cljs.core.Keyword(null,\"error\",\"error\",1110689146));var status = cljs.core.get.call(null,map__22845__$1,new cljs.core.Keyword(null,\"status\",\"status\",4416389988));return lt.object.raise.call(null,lt.plugins.elm_light.elm_ast.statusbar_ast_summary,new cljs.core.Keyword(null,\"update!\",\"update!\",779473898),((function (map__22845,map__22845__$1,error,status){\nreturn (function (p1__22843_SHARP_){return cljs.core.assoc.call(null,p1__22843_SHARP_,new cljs.core.Keyword(null,\"status\",\"status\",4416389988),status,new cljs.core.Keyword(null,\"error\",\"error\",1110689146),error);\n});})(map__22845,map__22845__$1,error,status))\n);\n});\nlt.plugins.elm_light.elm_ast.__BEH__update_ast_status_on_editor_change = (function __BEH__update_ast_status_on_editor_change(ed){return lt.plugins.elm_light.elm_ast.update_status_for_editor.call(null,ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.elm-ast\",\"update-ast-status-on-editor-change\",\"lt.plugins.elm-light.elm-ast/update-ast-status-on-editor-change\",1769747394),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.elm_ast.__BEH__update_ast_status_on_editor_change,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"focus\",\"focus\",1111509066),null], null), null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.repl')) {\ngoog.provide('lt.plugins.elm_light.repl');\ngoog.require('cljs.core');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.repl.__BEH__on_focus_repl_ed = (function __BEH__on_focus_repl_ed(this$){if(cljs.core.truth_(new cljs.core.Keyword(null,\"main\",\"main\",1017248043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))))\n{return lt.object.raise.call(null,new cljs.core.Keyword(null,\"main\",\"main\",1017248043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)),new cljs.core.Keyword(null,\"focus!\",\"focus!\",4039653819));\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.repl\",\"on-focus-repl-ed\",\"lt.plugins.elm-light.repl/on-focus-repl-ed\",902928202),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.repl.__BEH__on_focus_repl_ed,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"focus!\",\"focus!\",4039653819),null], null), null));\nlt.plugins.elm_light.repl.__BEH__repl_destroy_on_close = (function __BEH__repl_destroy_on_close(this$){lt.object.raise.call(null,new cljs.core.Keyword(null,\"main\",\"main\",1017248043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)),new cljs.core.Keyword(null,\"close\",\"close\",1108660586));\nreturn lt.object.destroy_BANG_.call(null,this$);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.repl\",\"repl-destroy-on-close\",\"lt.plugins.elm-light.repl/repl-destroy-on-close\",1223254671),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.repl.__BEH__repl_destroy_on_close,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"close\",\"close\",1108660586),null], null), null));\nlt.plugins.elm_light.repl.__BEH__repl_close_parent = (function __BEH__repl_close_parent(this$){return lt.object.destroy_BANG_.call(null,new cljs.core.Keyword(null,\"frame\",\"frame\",1111596255).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.repl\",\"repl-close-parent\",\"lt.plugins.elm-light.repl/repl-close-parent\",1283075757),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.repl.__BEH__repl_close_parent,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"destroy\",\"destroy\",2571277164),null], null), null));\nlt.plugins.elm_light.repl.__BEH__on_show_repl_refresh_eds = (function __BEH__on_show_repl_refresh_eds(this$){if(cljs.core.truth_(new cljs.core.Keyword(null,\"main\",\"main\",1017248043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))))\n{lt.object.raise.call(null,new cljs.core.Keyword(null,\"main\",\"main\",1017248043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)),new cljs.core.Keyword(null,\"show\",\"show\",1017433711));\nlt.object.raise.call(null,new cljs.core.Keyword(null,\"main\",\"main\",1017248043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)),new cljs.core.Keyword(null,\"refresh!\",\"refresh!\",4597922840));\nreturn lt.objs.editor.focus.call(null,new cljs.core.Keyword(null,\"main\",\"main\",1017248043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.repl\",\"on-show-repl-refresh-eds\",\"lt.plugins.elm-light.repl/on-show-repl-refresh-eds\",1683212982),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.repl.__BEH__on_show_repl_refresh_eds,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"show\",\"show\",1017433711),null], null), null));\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.repl\",\"elmrepl\",\"lt.plugins.elm-light.repl/elmrepl\",2110428165),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elmrepl\",\"elmrepl\",3653571719),null], null), null),new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"elmrepl\",new cljs.core.Keyword(null,\"live\",\"live\",1017226334),true,new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){var main = lt.object.add_tags.call(null,lt.object.remove_tags.call(null,lt.objs.editor.pool.create.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"mime\",\"mime\",1017255846),\"text/x-elm\",new cljs.core.Keyword(null,\"content\",\"content\",1965434859),\"\",new cljs.core.Keyword(null,\"ns\",\"ns\",1013907767),\"user\"], null)),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"editor.elm\",\"editor.elm\",3751348247)], null)),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"editor.elm.repl\",\"editor.elm.repl\",1086231178),new cljs.core.Keyword(null,\"editor.transient\",\"editor.transient\",3554141883)], null));lt.object.merge_BANG_.call(null,main,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"frame\",\"frame\",1111596255),this$], null));\nlt.objs.editor.clear_history.call(null,main);\nlt.object.merge_BANG_.call(null,main,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"dirty\",\"dirty\",1109497668),false,new cljs.core.Keyword(null,\"editor.generation\",\"editor.generation\",4482163627),lt.objs.editor.__GT_generation.call(null,main)], null));\nlt.object.merge_BANG_.call(null,this$,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"main\",\"main\",1017248043),main,new cljs.core.Keyword(null,\"dirty\",\"dirty\",1109497668),false], null));\nlt.objs.editor._PLUS_class.call(null,main,new cljs.core.Keyword(null,\"main\",\"main\",1017248043));\nlt.objs.editor.move_cursor.call(null,main,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),0,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),0], null));\nreturn new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.elmrepl\",\"div.elmrepl\",926648362),lt.object.__GT_content.call(null,main)], null);\n}));\nlt.plugins.elm_light.repl.add_repl = (function add_repl(){var elmrepl = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.repl\",\"elmrepl\",\"lt.plugins.elm-light.repl/elmrepl\",2110428165));lt.objs.tabs.add_BANG_.call(null,elmrepl);\nlt.objs.tabs.active_BANG_.call(null,elmrepl);\nreturn elmrepl;\n});\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elmrepl\",\"elmrepl\",3653571719),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm repl: Open a elm repl\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){return lt.plugins.elm_light.repl.add_repl.call(null);\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.gutter')) {\ngoog.provide('lt.plugins.elm_light.gutter');\ngoog.require('cljs.core');\ngoog.require('lt.objs.files');\ngoog.require('lt.util.dom');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.files');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.editor');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.plugins.elm_light.elm_ast');\nlt.plugins.elm_light.gutter.icon_url = lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"css\",\"export.svg\");\nlt.plugins.elm_light.gutter.marker_templ = (function (){var elem = document.createElement(\"div\");lt.util.dom.html.call(null,elem,\"@\");\nlt.util.dom.add_class.call(null,elem,\"elm-gutter-marker\");\nreturn elem;\n})();\nlt.plugins.elm_light.gutter.gutter_marker_exposed = (function gutter_marker_exposed(){return lt.plugins.elm_light.gutter.marker_templ.cloneNode(true);\n});\nlt.plugins.elm_light.gutter.__BEH__show_elm_gutter = (function __BEH__show_elm_gutter(ed){if(cljs.core.truth_(new cljs.core.Keyword(null,\"elm-gutter\",\"elm-gutter\",1745506196).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))))\n{return null;\n} else\n{lt.objs.editor.add_gutter.call(null,ed,\"elm-gutter\",15);\nreturn lt.object.assoc_in_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elm-gutter\",\"elm-gutter\",1745506196)], null),true);\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.gutter\",\"show-elm-gutter\",\"lt.plugins.elm-light.gutter/show-elm-gutter\",3265354305),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.gutter.__BEH__show_elm_gutter,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Editor Elm: Display elm gutter\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"object.instant\",\"object.instant\",773332388),null], null), null),new cljs.core.Keyword(null,\"type\",\"type\",1017479852),\"user\");\nlt.plugins.elm_light.gutter.__BEH__elm_gutter_exposeds = (function __BEH__elm_gutter_exposeds(ed){var cm_ed = lt.objs.editor.__GT_cm_ed.call(null,ed);return lt.objs.editor.operation.call(null,cm_ed,((function (cm_ed){\nreturn (function (){cm_ed.clearGutter(\"elm-gutter\");\nvar seq__12629 = cljs.core.seq.call(null,new cljs.core.Keyword(null,\"elm-exposeds-bookmarks\",\"elm-exposeds-bookmarks\",1216410620).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var chunk__12630 = null;var count__12631 = 0;var i__12632 = 0;while(true){\nif((i__12632 < count__12631))\n{var bm = cljs.core._nth.call(null,chunk__12630,i__12632);var temp__4092__auto___12641 = bm.find();if(cljs.core.truth_(temp__4092__auto___12641))\n{var pos_12642 = temp__4092__auto___12641;var temp__4092__auto___12643__$1 = pos_12642.line;if(cljs.core.truth_(temp__4092__auto___12643__$1))\n{var line_12644 = temp__4092__auto___12643__$1;cm_ed.setGutterMarker(line_12644,\"elm-gutter\",lt.plugins.elm_light.gutter.gutter_marker_exposed.call(null));\n} else\n{}\n} else\n{}\n{\nvar G__12645 = seq__12629;\nvar G__12646 = chunk__12630;\nvar G__12647 = count__12631;\nvar G__12648 = (i__12632 + 1);\nseq__12629 = G__12645;\nchunk__12630 = G__12646;\ncount__12631 = G__12647;\ni__12632 = G__12648;\ncontinue;\n}\n} else\n{var temp__4092__auto__ = cljs.core.seq.call(null,seq__12629);if(temp__4092__auto__)\n{var seq__12629__$1 = temp__4092__auto__;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12629__$1))\n{var c__5632__auto__ = cljs.core.chunk_first.call(null,seq__12629__$1);{\nvar G__12649 = cljs.core.chunk_rest.call(null,seq__12629__$1);\nvar G__12650 = c__5632__auto__;\nvar G__12651 = cljs.core.count.call(null,c__5632__auto__);\nvar G__12652 = 0;\nseq__12629 = G__12649;\nchunk__12630 = G__12650;\ncount__12631 = G__12651;\ni__12632 = G__12652;\ncontinue;\n}\n} else\n{var bm = cljs.core.first.call(null,seq__12629__$1);var temp__4092__auto___12653__$1 = bm.find();if(cljs.core.truth_(temp__4092__auto___12653__$1))\n{var pos_12654 = temp__4092__auto___12653__$1;var temp__4092__auto___12655__$2 = pos_12654.line;if(cljs.core.truth_(temp__4092__auto___12655__$2))\n{var line_12656 = temp__4092__auto___12655__$2;cm_ed.setGutterMarker(line_12656,\"elm-gutter\",lt.plugins.elm_light.gutter.gutter_marker_exposed.call(null));\n} else\n{}\n} else\n{}\n{\nvar G__12657 = cljs.core.next.call(null,seq__12629__$1);\nvar G__12658 = null;\nvar G__12659 = 0;\nvar G__12660 = 0;\nseq__12629 = G__12657;\nchunk__12630 = G__12658;\ncount__12631 = G__12659;\ni__12632 = G__12660;\ncontinue;\n}\n}\n} else\n{return null;\n}\n}\nbreak;\n}\n});})(cm_ed))\n);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.gutter\",\"elm-gutter-exposeds\",\"lt.plugins.elm-light.gutter/elm-gutter-exposeds\",2318158517),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.gutter.__BEH__elm_gutter_exposeds,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.gutter.refresh\",\"elm.gutter.refresh\",722016962),null], null), null));\nlt.plugins.elm_light.gutter.__BEH__elm_gutter_exposeds_mark = (function __BEH__elm_gutter_exposeds_mark(ed){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var exposeds = lt.plugins.elm_light.elm_ast.get_gutter_exposeds.call(null,path,lt.plugins.elm_light.utils.project_path.call(null,path));var cm_ed = lt.objs.editor.__GT_cm_ed.call(null,ed);lt.objs.editor.operation.call(null,cm_ed,((function (path,exposeds,cm_ed){\nreturn (function (){var seq__12637_12661 = cljs.core.seq.call(null,new cljs.core.Keyword(null,\"elm-exposeds-bookmarks\",\"elm-exposeds-bookmarks\",1216410620).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var chunk__12638_12662 = null;var count__12639_12663 = 0;var i__12640_12664 = 0;while(true){\nif((i__12640_12664 < count__12639_12663))\n{var bm_12665 = cljs.core._nth.call(null,chunk__12638_12662,i__12640_12664);bm_12665.clear();\n{\nvar G__12666 = seq__12637_12661;\nvar G__12667 = chunk__12638_12662;\nvar G__12668 = count__12639_12663;\nvar G__12669 = (i__12640_12664 + 1);\nseq__12637_12661 = G__12666;\nchunk__12638_12662 = G__12667;\ncount__12639_12663 = G__12668;\ni__12640_12664 = G__12669;\ncontinue;\n}\n} else\n{var temp__4092__auto___12670 = cljs.core.seq.call(null,seq__12637_12661);if(temp__4092__auto___12670)\n{var seq__12637_12671__$1 = temp__4092__auto___12670;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12637_12671__$1))\n{var c__5632__auto___12672 = cljs.core.chunk_first.call(null,seq__12637_12671__$1);{\nvar G__12673 = cljs.core.chunk_rest.call(null,seq__12637_12671__$1);\nvar G__12674 = c__5632__auto___12672;\nvar G__12675 = cljs.core.count.call(null,c__5632__auto___12672);\nvar G__12676 = 0;\nseq__12637_12661 = G__12673;\nchunk__12638_12662 = G__12674;\ncount__12639_12663 = G__12675;\ni__12640_12664 = G__12676;\ncontinue;\n}\n} else\n{var bm_12677 = cljs.core.first.call(null,seq__12637_12671__$1);bm_12677.clear();\n{\nvar G__12678 = cljs.core.next.call(null,seq__12637_12671__$1);\nvar G__12679 = null;\nvar G__12680 = 0;\nvar G__12681 = 0;\nseq__12637_12661 = G__12678;\nchunk__12638_12662 = G__12679;\ncount__12639_12663 = G__12680;\ni__12640_12664 = G__12681;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn lt.object.assoc_in_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elm-exposeds-bookmarks\",\"elm-exposeds-bookmarks\",1216410620)], null),cljs.core.map.call(null,((function (path,exposeds,cm_ed){\nreturn (function (exposed){return cm_ed.setBookmark({\"line\": (new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(exposed))) - 1), \"ch\": 1});\n});})(path,exposeds,cm_ed))\n,exposeds));\n});})(path,exposeds,cm_ed))\n);\nreturn lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.gutter.refresh\",\"elm.gutter.refresh\",722016962));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.gutter\",\"elm-gutter-exposeds-mark\",\"lt.plugins.elm-light.gutter/elm-gutter-exposeds-mark\",2789067959),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.gutter.__BEH__elm_gutter_exposeds_mark,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.gutter.exposeds.mark\",\"elm.gutter.exposeds.mark\",3035248815),null], null), null));\n}\nif(!lt.util.load.provided_QMARK_('cljs.core.async.impl.protocols')) {\ngoog.provide('cljs.core.async.impl.protocols');\ngoog.require('cljs.core');\ncljs.core.async.impl.protocols.MAX_QUEUE_SIZE = 1024;\ncljs.core.async.impl.protocols.ReadPort = (function (){var obj18980 = {};return obj18980;\n})();\ncljs.core.async.impl.protocols.take_BANG_ = (function take_BANG_(port,fn1_handler){if((function (){var and__4872__auto__ = port;if(and__4872__auto__)\n{return port.cljs$core$async$impl$protocols$ReadPort$take_BANG_$arity$2;\n} else\n{return and__4872__auto__;\n}\n})())\n{return port.cljs$core$async$impl$protocols$ReadPort$take_BANG_$arity$2(port,fn1_handler);\n} else\n{var x__5511__auto__ = (((port == null))?null:port);return (function (){var or__4884__auto__ = (cljs.core.async.impl.protocols.take_BANG_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.impl.protocols.take_BANG_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"ReadPort.take!\",port);\n}\n}\n})().call(null,port,fn1_handler);\n}\n});\ncljs.core.async.impl.protocols.WritePort = (function (){var obj18982 = {};return obj18982;\n})();\ncljs.core.async.impl.protocols.put_BANG_ = (function put_BANG_(port,val,fn0_handler){if((function (){var and__4872__auto__ = port;if(and__4872__auto__)\n{return port.cljs$core$async$impl$protocols$WritePort$put_BANG_$arity$3;\n} else\n{return and__4872__auto__;\n}\n})())\n{return port.cljs$core$async$impl$protocols$WritePort$put_BANG_$arity$3(port,val,fn0_handler);\n} else\n{var x__5511__auto__ = (((port == null))?null:port);return (function (){var or__4884__auto__ = (cljs.core.async.impl.protocols.put_BANG_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.impl.protocols.put_BANG_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"WritePort.put!\",port);\n}\n}\n})().call(null,port,val,fn0_handler);\n}\n});\ncljs.core.async.impl.protocols.Channel = (function (){var obj18984 = {};return obj18984;\n})();\ncljs.core.async.impl.protocols.close_BANG_ = (function close_BANG_(chan){if((function (){var and__4872__auto__ = chan;if(and__4872__auto__)\n{return chan.cljs$core$async$impl$protocols$Channel$close_BANG_$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return chan.cljs$core$async$impl$protocols$Channel$close_BANG_$arity$1(chan);\n} else\n{var x__5511__auto__ = (((chan == null))?null:chan);return (function (){var or__4884__auto__ = (cljs.core.async.impl.protocols.close_BANG_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.impl.protocols.close_BANG_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Channel.close!\",chan);\n}\n}\n})().call(null,chan);\n}\n});\ncljs.core.async.impl.protocols.Handler = (function (){var obj18986 = {};return obj18986;\n})();\ncljs.core.async.impl.protocols.active_QMARK_ = (function active_QMARK_(h){if((function (){var and__4872__auto__ = h;if(and__4872__auto__)\n{return h.cljs$core$async$impl$protocols$Handler$active_QMARK_$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return h.cljs$core$async$impl$protocols$Handler$active_QMARK_$arity$1(h);\n} else\n{var x__5511__auto__ = (((h == null))?null:h);return (function (){var or__4884__auto__ = (cljs.core.async.impl.protocols.active_QMARK_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.impl.protocols.active_QMARK_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Handler.active?\",h);\n}\n}\n})().call(null,h);\n}\n});\ncljs.core.async.impl.protocols.commit = (function commit(h){if((function (){var and__4872__auto__ = h;if(and__4872__auto__)\n{return h.cljs$core$async$impl$protocols$Handler$commit$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return h.cljs$core$async$impl$protocols$Handler$commit$arity$1(h);\n} else\n{var x__5511__auto__ = (((h == null))?null:h);return (function (){var or__4884__auto__ = (cljs.core.async.impl.protocols.commit[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.impl.protocols.commit[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Handler.commit\",h);\n}\n}\n})().call(null,h);\n}\n});\ncljs.core.async.impl.protocols.Buffer = (function (){var obj18988 = {};return obj18988;\n})();\ncljs.core.async.impl.protocols.full_QMARK_ = (function full_QMARK_(b){if((function (){var and__4872__auto__ = b;if(and__4872__auto__)\n{return b.cljs$core$async$impl$protocols$Buffer$full_QMARK_$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return b.cljs$core$async$impl$protocols$Buffer$full_QMARK_$arity$1(b);\n} else\n{var x__5511__auto__ = (((b == null))?null:b);return (function (){var or__4884__auto__ = (cljs.core.async.impl.protocols.full_QMARK_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.impl.protocols.full_QMARK_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Buffer.full?\",b);\n}\n}\n})().call(null,b);\n}\n});\ncljs.core.async.impl.protocols.remove_BANG_ = (function remove_BANG_(b){if((function (){var and__4872__auto__ = b;if(and__4872__auto__)\n{return b.cljs$core$async$impl$protocols$Buffer$remove_BANG_$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return b.cljs$core$async$impl$protocols$Buffer$remove_BANG_$arity$1(b);\n} else\n{var x__5511__auto__ = (((b == null))?null:b);return (function (){var or__4884__auto__ = (cljs.core.async.impl.protocols.remove_BANG_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.impl.protocols.remove_BANG_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Buffer.remove!\",b);\n}\n}\n})().call(null,b);\n}\n});\ncljs.core.async.impl.protocols.add_BANG_ = (function add_BANG_(b,itm){if((function (){var and__4872__auto__ = b;if(and__4872__auto__)\n{return b.cljs$core$async$impl$protocols$Buffer$add_BANG_$arity$2;\n} else\n{return and__4872__auto__;\n}\n})())\n{return b.cljs$core$async$impl$protocols$Buffer$add_BANG_$arity$2(b,itm);\n} else\n{var x__5511__auto__ = (((b == null))?null:b);return (function (){var or__4884__auto__ = (cljs.core.async.impl.protocols.add_BANG_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.impl.protocols.add_BANG_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Buffer.add!\",b);\n}\n}\n})().call(null,b,itm);\n}\n});\ncljs.core.async.impl.protocols.UnblockingBuffer = (function (){var obj18990 = {};return obj18990;\n})();\n}\nif(!lt.util.load.provided_QMARK_('cljs.core.async.impl.buffers')) {\ngoog.provide('cljs.core.async.impl.buffers');\ngoog.require('cljs.core');\ngoog.require('cljs.core.async.impl.protocols');\ngoog.require('cljs.core.async.impl.protocols');\ncljs.core.async.impl.buffers.acopy = (function acopy(src,src_start,dest,dest_start,len){var cnt = 0;while(true){\nif((cnt < len))\n{(dest[(dest_start + cnt)] = (src[(src_start + cnt)]));\n{\nvar G__18945 = (cnt + 1);\ncnt = G__18945;\ncontinue;\n}\n} else\n{return null;\n}\nbreak;\n}\n});\n\n/**\n* @constructor\n*/\ncljs.core.async.impl.buffers.RingBuffer = (function (head,tail,length,arr){\nthis.head = head;\nthis.tail = tail;\nthis.length = length;\nthis.arr = arr;\n})\ncljs.core.async.impl.buffers.RingBuffer.cljs$lang$type = true;\ncljs.core.async.impl.buffers.RingBuffer.cljs$lang$ctorStr = \"cljs.core.async.impl.buffers/RingBuffer\";\ncljs.core.async.impl.buffers.RingBuffer.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.buffers/RingBuffer\");\n});\ncljs.core.async.impl.buffers.RingBuffer.prototype.pop = (function (){var self__ = this;\nvar _ = this;if((self__.length === 0))\n{return null;\n} else\n{var x = (self__.arr[self__.tail]);(self__.arr[self__.tail] = null);\nself__.tail = ((self__.tail + 1) % self__.arr.length);\nself__.length = (self__.length - 1);\nreturn x;\n}\n});\ncljs.core.async.impl.buffers.RingBuffer.prototype.unshift = (function (x){var self__ = this;\nvar _ = this;(self__.arr[self__.head] = x);\nself__.head = ((self__.head + 1) % self__.arr.length);\nself__.length = (self__.length + 1);\nreturn null;\n});\ncljs.core.async.impl.buffers.RingBuffer.prototype.unbounded_unshift = (function (x){var self__ = this;\nvar this$ = this;if(((self__.length + 1) === self__.arr.length))\n{this$.resize();\n} else\n{}\nreturn this$.unshift(x);\n});\ncljs.core.async.impl.buffers.RingBuffer.prototype.resize = (function (){var self__ = this;\nvar _ = this;var new_arr_size = (self__.arr.length * 2);var new_arr = (new Array(new_arr_size));if((self__.tail < self__.head))\n{cljs.core.async.impl.buffers.acopy.call(null,self__.arr,self__.tail,new_arr,0,self__.length);\nself__.tail = 0;\nself__.head = self__.length;\nreturn self__.arr = new_arr;\n} else\n{if((self__.tail > self__.head))\n{cljs.core.async.impl.buffers.acopy.call(null,self__.arr,self__.tail,new_arr,0,(self__.arr.length - self__.tail));\ncljs.core.async.impl.buffers.acopy.call(null,self__.arr,0,new_arr,(self__.arr.length - self__.tail),self__.head);\nself__.tail = 0;\nself__.head = self__.length;\nreturn self__.arr = new_arr;\n} else\n{if((self__.tail === self__.head))\n{self__.tail = 0;\nself__.head = 0;\nreturn self__.arr = new_arr;\n} else\n{return null;\n}\n}\n}\n});\ncljs.core.async.impl.buffers.RingBuffer.prototype.cleanup = (function (keep_QMARK_){var self__ = this;\nvar this$ = this;var n__5732__auto__ = self__.length;var x = 0;while(true){\nif((x < n__5732__auto__))\n{var v_18946 = this$.pop();if(keep_QMARK_.call(null,v_18946))\n{this$.unshift(v_18946);\n} else\n{}\n{\nvar G__18947 = (x + 1);\nx = G__18947;\ncontinue;\n}\n} else\n{return null;\n}\nbreak;\n}\n});\ncljs.core.async.impl.buffers.__GT_RingBuffer = (function __GT_RingBuffer(head,tail,length,arr){return (new cljs.core.async.impl.buffers.RingBuffer(head,tail,length,arr));\n});\ncljs.core.async.impl.buffers.ring_buffer = (function ring_buffer(n){if((n > 0))\n{} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str(\"Can't create a ring buffer of size 0\"),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,cljs.core.list(new cljs.core.Symbol(null,\">\",\">\",-1640531465,null),new cljs.core.Symbol(null,\"n\",\"n\",-1640531417,null),0)))].join('')));\n}\nreturn (new cljs.core.async.impl.buffers.RingBuffer(0,0,0,(new Array(n))));\n});\n\n/**\n* @constructor\n*/\ncljs.core.async.impl.buffers.FixedBuffer = (function (buf,n){\nthis.buf = buf;\nthis.n = n;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 2;\n})\ncljs.core.async.impl.buffers.FixedBuffer.cljs$lang$type = true;\ncljs.core.async.impl.buffers.FixedBuffer.cljs$lang$ctorStr = \"cljs.core.async.impl.buffers/FixedBuffer\";\ncljs.core.async.impl.buffers.FixedBuffer.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.buffers/FixedBuffer\");\n});\ncljs.core.async.impl.buffers.FixedBuffer.prototype.cljs$core$ICounted$_count$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return self__.buf.length;\n});\ncljs.core.async.impl.buffers.FixedBuffer.prototype.cljs$core$async$impl$protocols$Buffer$ = true;\ncljs.core.async.impl.buffers.FixedBuffer.prototype.cljs$core$async$impl$protocols$Buffer$full_QMARK_$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return (self__.buf.length === self__.n);\n});\ncljs.core.async.impl.buffers.FixedBuffer.prototype.cljs$core$async$impl$protocols$Buffer$remove_BANG_$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return self__.buf.pop();\n});\ncljs.core.async.impl.buffers.FixedBuffer.prototype.cljs$core$async$impl$protocols$Buffer$add_BANG_$arity$2 = (function (this$,itm){var self__ = this;\nvar this$__$1 = this;if(cljs.core.not.call(null,cljs.core.async.impl.protocols.full_QMARK_.call(null,this$__$1)))\n{} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str(\"Can't add to a full buffer\"),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,cljs.core.list(new cljs.core.Symbol(null,\"not\",\"not\",-1640422260,null),cljs.core.list(new cljs.core.Symbol(\"impl\",\"full?\",\"impl/full?\",-1337857039,null),new cljs.core.Symbol(null,\"this\",\"this\",-1636972457,null)))))].join('')));\n}\nreturn self__.buf.unshift(itm);\n});\ncljs.core.async.impl.buffers.__GT_FixedBuffer = (function __GT_FixedBuffer(buf,n){return (new cljs.core.async.impl.buffers.FixedBuffer(buf,n));\n});\ncljs.core.async.impl.buffers.fixed_buffer = (function fixed_buffer(n){return (new cljs.core.async.impl.buffers.FixedBuffer(cljs.core.async.impl.buffers.ring_buffer.call(null,n),n));\n});\n\n/**\n* @constructor\n*/\ncljs.core.async.impl.buffers.DroppingBuffer = (function (buf,n){\nthis.buf = buf;\nthis.n = n;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 2;\n})\ncljs.core.async.impl.buffers.DroppingBuffer.cljs$lang$type = true;\ncljs.core.async.impl.buffers.DroppingBuffer.cljs$lang$ctorStr = \"cljs.core.async.impl.buffers/DroppingBuffer\";\ncljs.core.async.impl.buffers.DroppingBuffer.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.buffers/DroppingBuffer\");\n});\ncljs.core.async.impl.buffers.DroppingBuffer.prototype.cljs$core$ICounted$_count$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return self__.buf.length;\n});\ncljs.core.async.impl.buffers.DroppingBuffer.prototype.cljs$core$async$impl$protocols$Buffer$ = true;\ncljs.core.async.impl.buffers.DroppingBuffer.prototype.cljs$core$async$impl$protocols$Buffer$full_QMARK_$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return false;\n});\ncljs.core.async.impl.buffers.DroppingBuffer.prototype.cljs$core$async$impl$protocols$Buffer$remove_BANG_$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return self__.buf.pop();\n});\ncljs.core.async.impl.buffers.DroppingBuffer.prototype.cljs$core$async$impl$protocols$Buffer$add_BANG_$arity$2 = (function (this$,itm){var self__ = this;\nvar this$__$1 = this;if((self__.buf.length === self__.n))\n{return null;\n} else\n{return self__.buf.unshift(itm);\n}\n});\ncljs.core.async.impl.buffers.DroppingBuffer.prototype.cljs$core$async$impl$protocols$UnblockingBuffer$ = true;\ncljs.core.async.impl.buffers.__GT_DroppingBuffer = (function __GT_DroppingBuffer(buf,n){return (new cljs.core.async.impl.buffers.DroppingBuffer(buf,n));\n});\ncljs.core.async.impl.buffers.dropping_buffer = (function dropping_buffer(n){return (new cljs.core.async.impl.buffers.DroppingBuffer(cljs.core.async.impl.buffers.ring_buffer.call(null,n),n));\n});\n\n/**\n* @constructor\n*/\ncljs.core.async.impl.buffers.SlidingBuffer = (function (buf,n){\nthis.buf = buf;\nthis.n = n;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 2;\n})\ncljs.core.async.impl.buffers.SlidingBuffer.cljs$lang$type = true;\ncljs.core.async.impl.buffers.SlidingBuffer.cljs$lang$ctorStr = \"cljs.core.async.impl.buffers/SlidingBuffer\";\ncljs.core.async.impl.buffers.SlidingBuffer.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.buffers/SlidingBuffer\");\n});\ncljs.core.async.impl.buffers.SlidingBuffer.prototype.cljs$core$ICounted$_count$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return self__.buf.length;\n});\ncljs.core.async.impl.buffers.SlidingBuffer.prototype.cljs$core$async$impl$protocols$Buffer$ = true;\ncljs.core.async.impl.buffers.SlidingBuffer.prototype.cljs$core$async$impl$protocols$Buffer$full_QMARK_$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return false;\n});\ncljs.core.async.impl.buffers.SlidingBuffer.prototype.cljs$core$async$impl$protocols$Buffer$remove_BANG_$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;return self__.buf.pop();\n});\ncljs.core.async.impl.buffers.SlidingBuffer.prototype.cljs$core$async$impl$protocols$Buffer$add_BANG_$arity$2 = (function (this$,itm){var self__ = this;\nvar this$__$1 = this;if((self__.buf.length === self__.n))\n{cljs.core.async.impl.protocols.remove_BANG_.call(null,this$__$1);\n} else\n{}\nreturn self__.buf.unshift(itm);\n});\ncljs.core.async.impl.buffers.SlidingBuffer.prototype.cljs$core$async$impl$protocols$UnblockingBuffer$ = true;\ncljs.core.async.impl.buffers.__GT_SlidingBuffer = (function __GT_SlidingBuffer(buf,n){return (new cljs.core.async.impl.buffers.SlidingBuffer(buf,n));\n});\ncljs.core.async.impl.buffers.sliding_buffer = (function sliding_buffer(n){return (new cljs.core.async.impl.buffers.SlidingBuffer(cljs.core.async.impl.buffers.ring_buffer.call(null,n),n));\n});\n}\nif(!lt.util.load.provided_QMARK_('cljs.core.async.impl.dispatch')) {\ngoog.provide('cljs.core.async.impl.dispatch');\ngoog.require('cljs.core');\ngoog.require('cljs.core.async.impl.buffers');\ngoog.require('cljs.core.async.impl.buffers');\ncljs.core.async.impl.dispatch.message_channel = null;\ncljs.core.async.impl.dispatch.tasks = cljs.core.async.impl.buffers.ring_buffer.call(null,32);\ncljs.core.async.impl.dispatch.running_QMARK_ = false;\ncljs.core.async.impl.dispatch.queued_QMARK_ = false;\ncljs.core.async.impl.dispatch.TASK_BATCH_SIZE = 1024;\ncljs.core.async.impl.dispatch.process_messages = (function process_messages(){cljs.core.async.impl.dispatch.running_QMARK_ = true;\ncljs.core.async.impl.dispatch.queued_QMARK_ = false;\nvar count_18976 = 0;while(true){\nvar m_18977 = cljs.core.async.impl.dispatch.tasks.pop();if((m_18977 == null))\n{} else\n{m_18977.call(null);\nif((count_18976 < cljs.core.async.impl.dispatch.TASK_BATCH_SIZE))\n{{\nvar G__18978 = (count_18976 + 1);\ncount_18976 = G__18978;\ncontinue;\n}\n} else\n{}\n}\nbreak;\n}\ncljs.core.async.impl.dispatch.running_QMARK_ = false;\nif((cljs.core.async.impl.dispatch.tasks.length > 0))\n{return cljs.core.async.impl.dispatch.queue_dispatcher.call(null);\n} else\n{return null;\n}\n});\nif(typeof MessageChannel !== 'undefined')\n{cljs.core.async.impl.dispatch.message_channel = (new MessageChannel());\ncljs.core.async.impl.dispatch.message_channel.port1.onmessage = (function (msg){return cljs.core.async.impl.dispatch.process_messages.call(null);\n});\n} else\n{}\ncljs.core.async.impl.dispatch.queue_dispatcher = (function queue_dispatcher(){if(cljs.core.truth_((function (){var and__4872__auto__ = cljs.core.async.impl.dispatch.queued_QMARK_;if(and__4872__auto__)\n{return cljs.core.async.impl.dispatch.running_QMARK_;\n} else\n{return and__4872__auto__;\n}\n})()))\n{return null;\n} else\n{cljs.core.async.impl.dispatch.queued_QMARK_ = true;\nif(typeof MessageChannel !== 'undefined')\n{return cljs.core.async.impl.dispatch.message_channel.port2.postMessage(0);\n} else\n{if(typeof setImmediate !== 'undefined')\n{return setImmediate(cljs.core.async.impl.dispatch.process_messages);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return setTimeout(cljs.core.async.impl.dispatch.process_messages,0);\n} else\n{return null;\n}\n}\n}\n}\n});\ncljs.core.async.impl.dispatch.run = (function run(f){cljs.core.async.impl.dispatch.tasks.unbounded_unshift(f);\nreturn cljs.core.async.impl.dispatch.queue_dispatcher.call(null);\n});\ncljs.core.async.impl.dispatch.queue_delay = (function queue_delay(f,delay){return setTimeout(f,delay);\n});\n}\nif(!lt.util.load.provided_QMARK_('cljs.core.async.impl.channels')) {\ngoog.provide('cljs.core.async.impl.channels');\ngoog.require('cljs.core');\ngoog.require('cljs.core.async.impl.buffers');\ngoog.require('cljs.core.async.impl.buffers');\ngoog.require('cljs.core.async.impl.dispatch');\ngoog.require('cljs.core.async.impl.dispatch');\ngoog.require('cljs.core.async.impl.protocols');\ngoog.require('cljs.core.async.impl.protocols');\ncljs.core.async.impl.channels.box = (function box(val){if(typeof cljs.core.async.impl.channels.t18951 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.impl.channels.t18951 = (function (val,box,meta18952){\nthis.val = val;\nthis.box = box;\nthis.meta18952 = meta18952;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 425984;\n})\ncljs.core.async.impl.channels.t18951.cljs$lang$type = true;\ncljs.core.async.impl.channels.t18951.cljs$lang$ctorStr = \"cljs.core.async.impl.channels/t18951\";\ncljs.core.async.impl.channels.t18951.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.channels/t18951\");\n});\ncljs.core.async.impl.channels.t18951.prototype.cljs$core$IDeref$_deref$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return self__.val;\n});\ncljs.core.async.impl.channels.t18951.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_18953){var self__ = this;\nvar _18953__$1 = this;return self__.meta18952;\n});\ncljs.core.async.impl.channels.t18951.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_18953,meta18952__$1){var self__ = this;\nvar _18953__$1 = this;return (new cljs.core.async.impl.channels.t18951(self__.val,self__.box,meta18952__$1));\n});\ncljs.core.async.impl.channels.__GT_t18951 = (function __GT_t18951(val__$1,box__$1,meta18952){return (new cljs.core.async.impl.channels.t18951(val__$1,box__$1,meta18952));\n});\n}\nreturn (new cljs.core.async.impl.channels.t18951(val,box,null));\n});\n\n/**\n* @constructor\n*/\ncljs.core.async.impl.channels.PutBox = (function (handler,val){\nthis.handler = handler;\nthis.val = val;\n})\ncljs.core.async.impl.channels.PutBox.cljs$lang$type = true;\ncljs.core.async.impl.channels.PutBox.cljs$lang$ctorStr = \"cljs.core.async.impl.channels/PutBox\";\ncljs.core.async.impl.channels.PutBox.cljs$lang$ctorPrWriter = (function (this__5454__auto__,writer__5455__auto__,opts__5456__auto__){return cljs.core._write.call(null,writer__5455__auto__,\"cljs.core.async.impl.channels/PutBox\");\n});\ncljs.core.async.impl.channels.__GT_PutBox = (function __GT_PutBox(handler,val){return (new cljs.core.async.impl.channels.PutBox(handler,val));\n});\ncljs.core.async.impl.channels.put_active_QMARK_ = (function put_active_QMARK_(box){return cljs.core.async.impl.protocols.active_QMARK_.call(null,box.handler);\n});\ncljs.core.async.impl.channels.MAX_DIRTY = 64;\n\n/**\n* @constructor\n*/\ncljs.core.async.impl.channels.ManyToManyChannel = (function (takes,dirty_takes,puts,dirty_puts,buf,closed){\nthis.takes = takes;\nthis.dirty_takes = dirty_takes;\nthis.puts = puts;\nthis.dirty_puts = dirty_puts;\nthis.buf = buf;\nthis.closed = closed;\n})\ncljs.core.async.impl.channels.ManyToManyChannel.cljs$lang$type = true;\ncljs.core.async.impl.channels.ManyToManyChannel.cljs$lang$ctorStr = \"cljs.core.async.impl.channels/ManyToManyChannel\";\ncljs.core.async.impl.channels.ManyToManyChannel.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.channels/ManyToManyChannel\");\n});\ncljs.core.async.impl.channels.ManyToManyChannel.prototype.cljs$core$async$impl$protocols$Channel$ = true;\ncljs.core.async.impl.channels.ManyToManyChannel.prototype.cljs$core$async$impl$protocols$Channel$close_BANG_$arity$1 = (function (this$){var self__ = this;\nvar this$__$1 = this;if(self__.closed)\n{return null;\n} else\n{self__.closed = true;\nwhile(true){\nvar taker_18964 = self__.takes.pop();if((taker_18964 == null))\n{} else\n{if(cljs.core.async.impl.protocols.active_QMARK_.call(null,taker_18964))\n{var take_cb_18965 = cljs.core.async.impl.protocols.commit.call(null,taker_18964);cljs.core.async.impl.dispatch.run.call(null,((function (take_cb_18965,taker_18964,this$__$1){\nreturn (function (){return take_cb_18965.call(null,null);\n});})(take_cb_18965,taker_18964,this$__$1))\n);\n} else\n{}\n{\ncontinue;\n}\n}\nbreak;\n}\nreturn null;\n}\n});\ncljs.core.async.impl.channels.ManyToManyChannel.prototype.cljs$core$async$impl$protocols$ReadPort$ = true;\ncljs.core.async.impl.channels.ManyToManyChannel.prototype.cljs$core$async$impl$protocols$ReadPort$take_BANG_$arity$2 = (function (this$,handler){var self__ = this;\nvar this$__$1 = this;if(!(cljs.core.async.impl.protocols.active_QMARK_.call(null,handler)))\n{return null;\n} else\n{if((!((self__.buf == null))) && ((cljs.core.count.call(null,self__.buf) > 0)))\n{var _ = cljs.core.async.impl.protocols.commit.call(null,handler);return cljs.core.async.impl.channels.box.call(null,cljs.core.async.impl.protocols.remove_BANG_.call(null,self__.buf));\n} else\n{while(true){\nvar putter = self__.puts.pop();if(!((putter == null)))\n{var put_handler = putter.handler;var val = putter.val;if(cljs.core.async.impl.protocols.active_QMARK_.call(null,put_handler))\n{var put_cb = cljs.core.async.impl.protocols.commit.call(null,put_handler);var _ = cljs.core.async.impl.protocols.commit.call(null,handler);cljs.core.async.impl.dispatch.run.call(null,put_cb);\nreturn cljs.core.async.impl.channels.box.call(null,val);\n} else\n{{\ncontinue;\n}\n}\n} else\n{if(self__.closed)\n{var _ = cljs.core.async.impl.protocols.commit.call(null,handler);return cljs.core.async.impl.channels.box.call(null,null);\n} else\n{if((self__.dirty_takes > cljs.core.async.impl.channels.MAX_DIRTY))\n{self__.dirty_takes = 0;\nself__.takes.cleanup(cljs.core.async.impl.protocols.active_QMARK_);\n} else\n{self__.dirty_takes = (self__.dirty_takes + 1);\n}\nif((self__.takes.length < cljs.core.async.impl.protocols.MAX_QUEUE_SIZE))\n{} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str([cljs.core.str(\"No more than \"),cljs.core.str(cljs.core.async.impl.protocols.MAX_QUEUE_SIZE),cljs.core.str(\" pending takes are allowed on a single channel.\")].join('')),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,cljs.core.list(new cljs.core.Symbol(null,\"<\",\"<\",-1640531467,null),cljs.core.list(new cljs.core.Symbol(null,\".-length\",\".-length\",1395928862,null),new cljs.core.Symbol(null,\"takes\",\"takes\",-1530407291,null)),new cljs.core.Symbol(\"impl\",\"MAX-QUEUE-SIZE\",\"impl/MAX-QUEUE-SIZE\",-1989946393,null))))].join('')));\n}\nself__.takes.unbounded_unshift(handler);\nreturn null;\n}\n}\nbreak;\n}\n}\n}\n});\ncljs.core.async.impl.channels.ManyToManyChannel.prototype.cljs$core$async$impl$protocols$WritePort$ = true;\ncljs.core.async.impl.channels.ManyToManyChannel.prototype.cljs$core$async$impl$protocols$WritePort$put_BANG_$arity$3 = (function (this$,val,handler){var self__ = this;\nvar this$__$1 = this;if(!((val == null)))\n{} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str(\"Can't put nil in on a channel\"),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,cljs.core.list(new cljs.core.Symbol(null,\"not\",\"not\",-1640422260,null),cljs.core.list(new cljs.core.Symbol(null,\"nil?\",\"nil?\",-1637150201,null),new cljs.core.Symbol(null,\"val\",\"val\",-1640415014,null)))))].join('')));\n}\nvar closed__$1 = self__.closed;if((closed__$1) || (!(cljs.core.async.impl.protocols.active_QMARK_.call(null,handler))))\n{return cljs.core.async.impl.channels.box.call(null,null);\n} else\n{while(true){\nvar taker = self__.takes.pop();if(!((taker == null)))\n{if(cljs.core.async.impl.protocols.active_QMARK_.call(null,taker))\n{var take_cb = cljs.core.async.impl.protocols.commit.call(null,taker);var _ = cljs.core.async.impl.protocols.commit.call(null,handler);cljs.core.async.impl.dispatch.run.call(null,((function (take_cb,_,taker,closed__$1,this$__$1){\nreturn (function (){return take_cb.call(null,val);\n});})(take_cb,_,taker,closed__$1,this$__$1))\n);\nreturn cljs.core.async.impl.channels.box.call(null,null);\n} else\n{{\ncontinue;\n}\n}\n} else\n{if(!(((self__.buf == null)) || (cljs.core.async.impl.protocols.full_QMARK_.call(null,self__.buf))))\n{var _ = cljs.core.async.impl.protocols.commit.call(null,handler);cljs.core.async.impl.protocols.add_BANG_.call(null,self__.buf,val);\nreturn cljs.core.async.impl.channels.box.call(null,null);\n} else\n{if((self__.dirty_puts > cljs.core.async.impl.channels.MAX_DIRTY))\n{self__.dirty_puts = 0;\nself__.puts.cleanup(cljs.core.async.impl.channels.put_active_QMARK_);\n} else\n{self__.dirty_puts = (self__.dirty_puts + 1);\n}\nif((self__.puts.length < cljs.core.async.impl.protocols.MAX_QUEUE_SIZE))\n{} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str([cljs.core.str(\"No more than \"),cljs.core.str(cljs.core.async.impl.protocols.MAX_QUEUE_SIZE),cljs.core.str(\" pending puts are allowed on a single channel.\"),cljs.core.str(\" Consider using a windowed buffer.\")].join('')),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,cljs.core.list(new cljs.core.Symbol(null,\"<\",\"<\",-1640531467,null),cljs.core.list(new cljs.core.Symbol(null,\".-length\",\".-length\",1395928862,null),new cljs.core.Symbol(null,\"puts\",\"puts\",-1637078787,null)),new cljs.core.Symbol(\"impl\",\"MAX-QUEUE-SIZE\",\"impl/MAX-QUEUE-SIZE\",-1989946393,null))))].join('')));\n}\nself__.puts.unbounded_unshift((new cljs.core.async.impl.channels.PutBox(handler,val)));\nreturn null;\n}\n}\nbreak;\n}\n}\n});\ncljs.core.async.impl.channels.__GT_ManyToManyChannel = (function __GT_ManyToManyChannel(takes,dirty_takes,puts,dirty_puts,buf,closed){return (new cljs.core.async.impl.channels.ManyToManyChannel(takes,dirty_takes,puts,dirty_puts,buf,closed));\n});\ncljs.core.async.impl.channels.chan = (function chan(buf){return (new cljs.core.async.impl.channels.ManyToManyChannel(cljs.core.async.impl.buffers.ring_buffer.call(null,32),0,cljs.core.async.impl.buffers.ring_buffer.call(null,32),0,buf,null));\n});\n}\nif(!lt.util.load.provided_QMARK_('cljs.core.async.impl.timers')) {\ngoog.provide('cljs.core.async.impl.timers');\ngoog.require('cljs.core');\ngoog.require('cljs.core.async.impl.dispatch');\ngoog.require('cljs.core.async.impl.dispatch');\ngoog.require('cljs.core.async.impl.channels');\ngoog.require('cljs.core.async.impl.channels');\ngoog.require('cljs.core.async.impl.protocols');\ngoog.require('cljs.core.async.impl.protocols');\ncljs.core.async.impl.timers.MAX_LEVEL = 15;\ncljs.core.async.impl.timers.P = (1 / 2);\ncljs.core.async.impl.timers.random_level = (function() {\nvar random_level = null;\nvar random_level__0 = (function (){return random_level.call(null,0);\n});\nvar random_level__1 = (function (level){while(true){\nif(((Math.random() < cljs.core.async.impl.timers.P)) && ((level < cljs.core.async.impl.timers.MAX_LEVEL)))\n{{\nvar G__19011 = (level + 1);\nlevel = G__19011;\ncontinue;\n}\n} else\n{return level;\n}\nbreak;\n}\n});\nrandom_level = function(level){\nswitch(arguments.length){\ncase 0:\nreturn random_level__0.call(this);\ncase 1:\nreturn random_level__1.call(this,level);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nrandom_level.cljs$core$IFn$_invoke$arity$0 = random_level__0;\nrandom_level.cljs$core$IFn$_invoke$arity$1 = random_level__1;\nreturn random_level;\n})()\n;\n\n/**\n* @constructor\n*/\ncljs.core.async.impl.timers.SkipListNode = (function (key,val,forward){\nthis.key = key;\nthis.val = val;\nthis.forward = forward;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 2155872256;\n})\ncljs.core.async.impl.timers.SkipListNode.cljs$lang$type = true;\ncljs.core.async.impl.timers.SkipListNode.cljs$lang$ctorStr = \"cljs.core.async.impl.timers/SkipListNode\";\ncljs.core.async.impl.timers.SkipListNode.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.timers/SkipListNode\");\n});\ncljs.core.async.impl.timers.SkipListNode.prototype.cljs$core$IPrintWithWriter$_pr_writer$arity$3 = (function (coll,writer,opts){var self__ = this;\nvar coll__$1 = this;return cljs.core.pr_sequential_writer.call(null,writer,cljs.core.pr_writer,\"[\",\" \",\"]\",opts,coll__$1);\n});\ncljs.core.async.impl.timers.SkipListNode.prototype.cljs$core$ISeqable$_seq$arity$1 = (function (coll){var self__ = this;\nvar coll__$1 = this;return cljs.core._conj.call(null,cljs.core._conj.call(null,cljs.core.List.EMPTY,self__.val),self__.key);\n});\ncljs.core.async.impl.timers.__GT_SkipListNode = (function __GT_SkipListNode(key,val,forward){return (new cljs.core.async.impl.timers.SkipListNode(key,val,forward));\n});\ncljs.core.async.impl.timers.skip_list_node = (function() {\nvar skip_list_node = null;\nvar skip_list_node__1 = (function (level){return skip_list_node.call(null,null,null,level);\n});\nvar skip_list_node__3 = (function (k,v,level){var arr = (new Array((level + 1)));var i_19012 = 0;while(true){\nif((i_19012 < arr.length))\n{(arr[i_19012] = null);\n{\nvar G__19013 = (i_19012 + 1);\ni_19012 = G__19013;\ncontinue;\n}\n} else\n{}\nbreak;\n}\nreturn (new cljs.core.async.impl.timers.SkipListNode(k,v,arr));\n});\nskip_list_node = function(k,v,level){\nswitch(arguments.length){\ncase 1:\nreturn skip_list_node__1.call(this,k);\ncase 3:\nreturn skip_list_node__3.call(this,k,v,level);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nskip_list_node.cljs$core$IFn$_invoke$arity$1 = skip_list_node__1;\nskip_list_node.cljs$core$IFn$_invoke$arity$3 = skip_list_node__3;\nreturn skip_list_node;\n})()\n;\ncljs.core.async.impl.timers.least_greater_node = (function() {\nvar least_greater_node = null;\nvar least_greater_node__3 = (function (x,k,level){return least_greater_node.call(null,x,k,level,null);\n});\nvar least_greater_node__4 = (function (x,k,level,update){while(true){\nif(!((level < 0)))\n{var x__$1 = (function (){var x__$1 = x;while(true){\nvar temp__4090__auto__ = (x__$1.forward[level]);if(cljs.core.truth_(temp__4090__auto__))\n{var x_SINGLEQUOTE_ = temp__4090__auto__;if((x_SINGLEQUOTE_.key < k))\n{{\nvar G__19014 = x_SINGLEQUOTE_;\nx__$1 = G__19014;\ncontinue;\n}\n} else\n{return x__$1;\n}\n} else\n{return x__$1;\n}\nbreak;\n}\n})();if((update == null))\n{} else\n{(update[level] = x__$1);\n}\n{\nvar G__19015 = x__$1;\nvar G__19016 = k;\nvar G__19017 = (level - 1);\nvar G__19018 = update;\nx = G__19015;\nk = G__19016;\nlevel = G__19017;\nupdate = G__19018;\ncontinue;\n}\n} else\n{return x;\n}\nbreak;\n}\n});\nleast_greater_node = function(x,k,level,update){\nswitch(arguments.length){\ncase 3:\nreturn least_greater_node__3.call(this,x,k,level);\ncase 4:\nreturn least_greater_node__4.call(this,x,k,level,update);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nleast_greater_node.cljs$core$IFn$_invoke$arity$3 = least_greater_node__3;\nleast_greater_node.cljs$core$IFn$_invoke$arity$4 = least_greater_node__4;\nreturn least_greater_node;\n})()\n;\n\n/**\n* @constructor\n*/\ncljs.core.async.impl.timers.SkipList = (function (header,level){\nthis.header = header;\nthis.level = level;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 2155872256;\n})\ncljs.core.async.impl.timers.SkipList.cljs$lang$type = true;\ncljs.core.async.impl.timers.SkipList.cljs$lang$ctorStr = \"cljs.core.async.impl.timers/SkipList\";\ncljs.core.async.impl.timers.SkipList.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.timers/SkipList\");\n});\ncljs.core.async.impl.timers.SkipList.prototype.cljs$core$IPrintWithWriter$_pr_writer$arity$3 = (function (coll,writer,opts){var self__ = this;\nvar coll__$1 = this;var pr_pair = ((function (coll__$1){\nreturn (function (keyval){return cljs.core.pr_sequential_writer.call(null,writer,cljs.core.pr_writer,\"\",\" \",\"\",opts,keyval);\n});})(coll__$1))\n;return cljs.core.pr_sequential_writer.call(null,writer,pr_pair,\"{\",\", \",\"}\",opts,coll__$1);\n});\ncljs.core.async.impl.timers.SkipList.prototype.cljs$core$ISeqable$_seq$arity$1 = (function (coll){var self__ = this;\nvar coll__$1 = this;var iter = ((function (coll__$1){\nreturn (function iter(node){return (new cljs.core.LazySeq(null,((function (coll__$1){\nreturn (function (){if((node == null))\n{return null;\n} else\n{return cljs.core.cons.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [node.key,node.val], null),iter.call(null,(node.forward[0])));\n}\n});})(coll__$1))\n,null,null));\n});})(coll__$1))\n;\nreturn iter.call(null,(self__.header.forward[0]));\n});\ncljs.core.async.impl.timers.SkipList.prototype.put = (function (k,v){var self__ = this;\nvar coll = this;var update = (new Array(cljs.core.async.impl.timers.MAX_LEVEL));var x = cljs.core.async.impl.timers.least_greater_node.call(null,self__.header,k,self__.level,update);var x__$1 = (x.forward[0]);if((!((x__$1 == null))) && ((x__$1.key === k)))\n{return x__$1.val = v;\n} else\n{var new_level = cljs.core.async.impl.timers.random_level.call(null);if((new_level > self__.level))\n{var i_19019 = (self__.level + 1);while(true){\nif((i_19019 <= (new_level + 1)))\n{(update[i_19019] = self__.header);\n{\nvar G__19020 = (i_19019 + 1);\ni_19019 = G__19020;\ncontinue;\n}\n} else\n{}\nbreak;\n}\nself__.level = new_level;\n} else\n{}\nvar x__$2 = cljs.core.async.impl.timers.skip_list_node.call(null,k,v,(new Array(new_level)));var i = 0;while(true){\nif((i <= self__.level))\n{var links = (update[i]).forward;(x__$2.forward[i] = (links[i]));\nreturn (links[i] = x__$2);\n} else\n{return null;\n}\nbreak;\n}\n}\n});\ncljs.core.async.impl.timers.SkipList.prototype.remove = (function (k){var self__ = this;\nvar coll = this;var update = (new Array(cljs.core.async.impl.timers.MAX_LEVEL));var x = cljs.core.async.impl.timers.least_greater_node.call(null,self__.header,k,self__.level,update);var x__$1 = (x.forward[0]);if((!((x__$1 == null))) && ((x__$1.key === k)))\n{var i_19021 = 0;while(true){\nif((i_19021 <= self__.level))\n{var links_19022 = (update[i_19021]).forward;if(((links_19022[i_19021]) === x__$1))\n{(links_19022[i_19021] = (x__$1.forward[i_19021]));\n{\nvar G__19023 = (i_19021 + 1);\ni_19021 = G__19023;\ncontinue;\n}\n} else\n{{\nvar G__19024 = (i_19021 + 1);\ni_19021 = G__19024;\ncontinue;\n}\n}\n} else\n{}\nbreak;\n}\nwhile(true){\nif(((self__.level > 0)) && (((self__.header.forward[self__.level]) == null)))\n{self__.level = (self__.level - 1);\n{\ncontinue;\n}\n} else\n{return null;\n}\nbreak;\n}\n} else\n{return null;\n}\n});\ncljs.core.async.impl.timers.SkipList.prototype.ceilingEntry = (function (k){var self__ = this;\nvar coll = this;var x = self__.header;var level__$1 = self__.level;while(true){\nif(!((level__$1 < 0)))\n{var nx = (function (){var x__$1 = x;while(true){\nvar x_SINGLEQUOTE_ = (x__$1.forward[level__$1]);if((x_SINGLEQUOTE_ == null))\n{return null;\n} else\n{if((x_SINGLEQUOTE_.key >= k))\n{return x_SINGLEQUOTE_;\n} else\n{{\nvar G__19025 = x_SINGLEQUOTE_;\nx__$1 = G__19025;\ncontinue;\n}\n}\n}\nbreak;\n}\n})();if(!((nx == null)))\n{{\nvar G__19026 = nx;\nvar G__19027 = (level__$1 - 1);\nx = G__19026;\nlevel__$1 = G__19027;\ncontinue;\n}\n} else\n{{\nvar G__19028 = x;\nvar G__19029 = (level__$1 - 1);\nx = G__19028;\nlevel__$1 = G__19029;\ncontinue;\n}\n}\n} else\n{if((x === self__.header))\n{return null;\n} else\n{return x;\n}\n}\nbreak;\n}\n});\ncljs.core.async.impl.timers.SkipList.prototype.floorEntry = (function (k){var self__ = this;\nvar coll = this;var x = self__.header;var level__$1 = self__.level;while(true){\nif(!((level__$1 < 0)))\n{var nx = (function (){var x__$1 = x;while(true){\nvar x_SINGLEQUOTE_ = (x__$1.forward[level__$1]);if(!((x_SINGLEQUOTE_ == null)))\n{if((x_SINGLEQUOTE_.key > k))\n{return x__$1;\n} else\n{{\nvar G__19030 = x_SINGLEQUOTE_;\nx__$1 = G__19030;\ncontinue;\n}\n}\n} else\n{if((level__$1 === 0))\n{return x__$1;\n} else\n{return null;\n}\n}\nbreak;\n}\n})();if(cljs.core.truth_(nx))\n{{\nvar G__19031 = nx;\nvar G__19032 = (level__$1 - 1);\nx = G__19031;\nlevel__$1 = G__19032;\ncontinue;\n}\n} else\n{{\nvar G__19033 = x;\nvar G__19034 = (level__$1 - 1);\nx = G__19033;\nlevel__$1 = G__19034;\ncontinue;\n}\n}\n} else\n{if((x === self__.header))\n{return null;\n} else\n{return x;\n}\n}\nbreak;\n}\n});\ncljs.core.async.impl.timers.__GT_SkipList = (function __GT_SkipList(header,level){return (new cljs.core.async.impl.timers.SkipList(header,level));\n});\ncljs.core.async.impl.timers.skip_list = (function skip_list(){return (new cljs.core.async.impl.timers.SkipList(cljs.core.async.impl.timers.skip_list_node.call(null,0),0));\n});\ncljs.core.async.impl.timers.timeouts_map = cljs.core.async.impl.timers.skip_list.call(null);\ncljs.core.async.impl.timers.TIMEOUT_RESOLUTION_MS = 10;\n/**\n* returns a channel that will close after msecs\n*/\ncljs.core.async.impl.timers.timeout = (function timeout(msecs){var timeout__$1 = ((new Date()).valueOf() + msecs);var me = cljs.core.async.impl.timers.timeouts_map.ceilingEntry(timeout__$1);var or__4884__auto__ = (cljs.core.truth_((function (){var and__4872__auto__ = me;if(cljs.core.truth_(and__4872__auto__))\n{return (me.key < (timeout__$1 + cljs.core.async.impl.timers.TIMEOUT_RESOLUTION_MS));\n} else\n{return and__4872__auto__;\n}\n})())?me.val:null);if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{var timeout_channel = cljs.core.async.impl.channels.chan.call(null,null);cljs.core.async.impl.timers.timeouts_map.put(timeout__$1,timeout_channel);\ncljs.core.async.impl.dispatch.queue_delay.call(null,((function (timeout_channel,or__4884__auto__,timeout__$1,me){\nreturn (function (){cljs.core.async.impl.timers.timeouts_map.remove(timeout__$1);\nreturn cljs.core.async.impl.protocols.close_BANG_.call(null,timeout_channel);\n});})(timeout_channel,or__4884__auto__,timeout__$1,me))\n,msecs);\nreturn timeout_channel;\n}\n});\n}\nif(!lt.util.load.provided_QMARK_('cljs.core.async.impl.ioc-helpers')) {\ngoog.provide('cljs.core.async.impl.ioc_helpers');\ngoog.require('cljs.core');\ngoog.require('cljs.core.async.impl.protocols');\ngoog.require('cljs.core.async.impl.protocols');\ncljs.core.async.impl.ioc_helpers.FN_IDX = 0;\ncljs.core.async.impl.ioc_helpers.STATE_IDX = 1;\ncljs.core.async.impl.ioc_helpers.VALUE_IDX = 2;\ncljs.core.async.impl.ioc_helpers.BINDINGS_IDX = 3;\ncljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES = 4;\ncljs.core.async.impl.ioc_helpers.CURRENT_EXCEPTION = 5;\ncljs.core.async.impl.ioc_helpers.USER_START_IDX = 6;\ncljs.core.async.impl.ioc_helpers.aset_object = (function aset_object(arr,idx,o){return (arr[idx][o]);\n});\ncljs.core.async.impl.ioc_helpers.aget_object = (function aget_object(arr,idx){return (arr[idx]);\n});\n/**\n* Returns true if the machine is in a finished state\n*/\ncljs.core.async.impl.ioc_helpers.finished_QMARK_ = (function finished_QMARK_(state_array){return cljs.core.keyword_identical_QMARK_.call(null,(state_array[cljs.core.async.impl.ioc_helpers.STATE_IDX]),new cljs.core.Keyword(null,\"finished\",\"finished\",4635210724));\n});\ncljs.core.async.impl.ioc_helpers.fn_handler = (function fn_handler(f){if(typeof cljs.core.async.impl.ioc_helpers.t18875 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.impl.ioc_helpers.t18875 = (function (f,fn_handler,meta18876){\nthis.f = f;\nthis.fn_handler = fn_handler;\nthis.meta18876 = meta18876;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.impl.ioc_helpers.t18875.cljs$lang$type = true;\ncljs.core.async.impl.ioc_helpers.t18875.cljs$lang$ctorStr = \"cljs.core.async.impl.ioc-helpers/t18875\";\ncljs.core.async.impl.ioc_helpers.t18875.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async.impl.ioc-helpers/t18875\");\n});\ncljs.core.async.impl.ioc_helpers.t18875.prototype.cljs$core$async$impl$protocols$Handler$ = true;\ncljs.core.async.impl.ioc_helpers.t18875.prototype.cljs$core$async$impl$protocols$Handler$active_QMARK_$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return true;\n});\ncljs.core.async.impl.ioc_helpers.t18875.prototype.cljs$core$async$impl$protocols$Handler$commit$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return self__.f;\n});\ncljs.core.async.impl.ioc_helpers.t18875.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_18877){var self__ = this;\nvar _18877__$1 = this;return self__.meta18876;\n});\ncljs.core.async.impl.ioc_helpers.t18875.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_18877,meta18876__$1){var self__ = this;\nvar _18877__$1 = this;return (new cljs.core.async.impl.ioc_helpers.t18875(self__.f,self__.fn_handler,meta18876__$1));\n});\ncljs.core.async.impl.ioc_helpers.__GT_t18875 = (function __GT_t18875(f__$1,fn_handler__$1,meta18876){return (new cljs.core.async.impl.ioc_helpers.t18875(f__$1,fn_handler__$1,meta18876));\n});\n}\nreturn (new cljs.core.async.impl.ioc_helpers.t18875(f,fn_handler,null));\n});\ncljs.core.async.impl.ioc_helpers.run_state_machine = (function run_state_machine(state){return cljs.core.async.impl.ioc_helpers.aget_object.call(null,state,cljs.core.async.impl.ioc_helpers.FN_IDX).call(null,state);\n});\ncljs.core.async.impl.ioc_helpers.run_state_machine_wrapped = (function run_state_machine_wrapped(state){try{return cljs.core.async.impl.ioc_helpers.run_state_machine.call(null,state);\n}catch (e18879){if((e18879 instanceof Object))\n{var ex = e18879;cljs.core.async.impl.protocols.close_BANG_.call(null,cljs.core.async.impl.ioc_helpers.aget_object.call(null,state,cljs.core.async.impl.ioc_helpers.USER_START_IDX));\nthrow ex;\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e18879;\n} else\n{return null;\n}\n}\n}});\ncljs.core.async.impl.ioc_helpers.take_BANG_ = (function take_BANG_(state,blk,c){var temp__4090__auto__ = cljs.core.async.impl.protocols.take_BANG_.call(null,c,cljs.core.async.impl.ioc_helpers.fn_handler.call(null,(function (x){var statearr_18882_18925 = state;(statearr_18882_18925[cljs.core.async.impl.ioc_helpers.VALUE_IDX] = x);\n(statearr_18882_18925[cljs.core.async.impl.ioc_helpers.STATE_IDX] = blk);\nreturn cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state);\n})));if(cljs.core.truth_(temp__4090__auto__))\n{var cb = temp__4090__auto__;var statearr_18883_18926 = state;(statearr_18883_18926[cljs.core.async.impl.ioc_helpers.VALUE_IDX] = cljs.core.deref.call(null,cb));\n(statearr_18883_18926[cljs.core.async.impl.ioc_helpers.STATE_IDX] = blk);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n});\ncljs.core.async.impl.ioc_helpers.put_BANG_ = (function put_BANG_(state,blk,c,val){var temp__4090__auto__ = cljs.core.async.impl.protocols.put_BANG_.call(null,c,val,cljs.core.async.impl.ioc_helpers.fn_handler.call(null,(function (){var statearr_18886_18927 = state;(statearr_18886_18927[cljs.core.async.impl.ioc_helpers.VALUE_IDX] = null);\n(statearr_18886_18927[cljs.core.async.impl.ioc_helpers.STATE_IDX] = blk);\nreturn cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state);\n})));if(cljs.core.truth_(temp__4090__auto__))\n{var cb = temp__4090__auto__;var statearr_18887_18928 = state;(statearr_18887_18928[cljs.core.async.impl.ioc_helpers.VALUE_IDX] = cljs.core.deref.call(null,cb));\n(statearr_18887_18928[cljs.core.async.impl.ioc_helpers.STATE_IDX] = blk);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n});\n/**\n* @param {...*} var_args\n*/\ncljs.core.async.impl.ioc_helpers.ioc_alts_BANG_ = (function() { \nvar ioc_alts_BANG___delegate = function (state,cont_block,ports,p__18888){var map__18893 = p__18888;var map__18893__$1 = ((cljs.core.seq_QMARK_.call(null,map__18893))?cljs.core.apply.call(null,cljs.core.hash_map,map__18893):map__18893);var opts = map__18893__$1;var statearr_18894_18929 = state;(statearr_18894_18929[cljs.core.async.impl.ioc_helpers.STATE_IDX] = cont_block);\nvar temp__4092__auto__ = cljs.core.async.do_alts.call(null,((function (map__18893,map__18893__$1,opts){\nreturn (function (val){var statearr_18895_18930 = state;(statearr_18895_18930[cljs.core.async.impl.ioc_helpers.VALUE_IDX] = val);\nreturn cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state);\n});})(map__18893,map__18893__$1,opts))\n,ports,opts);if(cljs.core.truth_(temp__4092__auto__))\n{var cb = temp__4092__auto__;var statearr_18896_18931 = state;(statearr_18896_18931[cljs.core.async.impl.ioc_helpers.VALUE_IDX] = cljs.core.deref.call(null,cb));\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n};\nvar ioc_alts_BANG_ = function (state,cont_block,ports,var_args){\nvar p__18888 = null;if (arguments.length > 3) {\n  p__18888 = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);} \nreturn ioc_alts_BANG___delegate.call(this,state,cont_block,ports,p__18888);};\nioc_alts_BANG_.cljs$lang$maxFixedArity = 3;\nioc_alts_BANG_.cljs$lang$applyTo = (function (arglist__18932){\nvar state = cljs.core.first(arglist__18932);\narglist__18932 = cljs.core.next(arglist__18932);\nvar cont_block = cljs.core.first(arglist__18932);\narglist__18932 = cljs.core.next(arglist__18932);\nvar ports = cljs.core.first(arglist__18932);\nvar p__18888 = cljs.core.rest(arglist__18932);\nreturn ioc_alts_BANG___delegate(state,cont_block,ports,p__18888);\n});\nioc_alts_BANG_.cljs$core$IFn$_invoke$arity$variadic = ioc_alts_BANG___delegate;\nreturn ioc_alts_BANG_;\n})()\n;\ncljs.core.async.impl.ioc_helpers.return_chan = (function return_chan(state,value){var c = (state[cljs.core.async.impl.ioc_helpers.USER_START_IDX]);if((value == null))\n{} else\n{cljs.core.async.impl.protocols.put_BANG_.call(null,c,value,cljs.core.async.impl.ioc_helpers.fn_handler.call(null,((function (c){\nreturn (function (){return null;\n});})(c))\n));\n}\ncljs.core.async.impl.protocols.close_BANG_.call(null,c);\nreturn c;\n});\n\n/**\n* @constructor\n* @param {*} catch_block\n* @param {*} catch_exception\n* @param {*} finally_block\n* @param {*} continue_block\n* @param {*} prev\n* @param {*} __meta\n* @param {*} __extmap\n* @param {*=} __meta \n* @param {*=} __extmap\n*/\ncljs.core.async.impl.ioc_helpers.ExceptionFrame = (function (catch_block,catch_exception,finally_block,continue_block,prev,__meta,__extmap){\nthis.catch_block = catch_block;\nthis.catch_exception = catch_exception;\nthis.finally_block = finally_block;\nthis.continue_block = continue_block;\nthis.prev = prev;\nthis.__meta = __meta;\nthis.__extmap = __extmap;\nthis.cljs$lang$protocol_mask$partition0$ = 2229667594;\nthis.cljs$lang$protocol_mask$partition1$ = 8192;\nif(arguments.length>5){\nthis.__meta = __meta;\nthis.__extmap = __extmap;\n} else {\nthis.__meta=null;\nthis.__extmap=null;\n}\n})\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$IHash$_hash$arity$1 = (function (this__5465__auto__){var self__ = this;\nvar this__5465__auto____$1 = this;var h__5295__auto__ = self__.__hash;if(!((h__5295__auto__ == null)))\n{return h__5295__auto__;\n} else\n{var h__5295__auto____$1 = cljs.core.hash_imap.call(null,this__5465__auto____$1);self__.__hash = h__5295__auto____$1;\nreturn h__5295__auto____$1;\n}\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$ILookup$_lookup$arity$2 = (function (this__5470__auto__,k__5471__auto__){var self__ = this;\nvar this__5470__auto____$1 = this;return cljs.core._lookup.call(null,this__5470__auto____$1,k__5471__auto__,null);\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$ILookup$_lookup$arity$3 = (function (this__5472__auto__,k18898,else__5473__auto__){var self__ = this;\nvar this__5472__auto____$1 = this;if(cljs.core.keyword_identical_QMARK_.call(null,k18898,new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893)))\n{return self__.catch_block;\n} else\n{if(cljs.core.keyword_identical_QMARK_.call(null,k18898,new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687)))\n{return self__.catch_exception;\n} else\n{if(cljs.core.keyword_identical_QMARK_.call(null,k18898,new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429)))\n{return self__.finally_block;\n} else\n{if(cljs.core.keyword_identical_QMARK_.call(null,k18898,new cljs.core.Keyword(null,\"continue-block\",\"continue-block\",1486987097)))\n{return self__.continue_block;\n} else\n{if(cljs.core.keyword_identical_QMARK_.call(null,k18898,new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637)))\n{return self__.prev;\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.get.call(null,self__.__extmap,k18898,else__5473__auto__);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$IAssociative$_assoc$arity$3 = (function (this__5477__auto__,k__5478__auto__,G__18897){var self__ = this;\nvar this__5477__auto____$1 = this;var pred__18900 = cljs.core.keyword_identical_QMARK_;var expr__18901 = k__5478__auto__;if(cljs.core.truth_(pred__18900.call(null,new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893),expr__18901)))\n{return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(G__18897,self__.catch_exception,self__.finally_block,self__.continue_block,self__.prev,self__.__meta,self__.__extmap,null));\n} else\n{if(cljs.core.truth_(pred__18900.call(null,new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687),expr__18901)))\n{return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(self__.catch_block,G__18897,self__.finally_block,self__.continue_block,self__.prev,self__.__meta,self__.__extmap,null));\n} else\n{if(cljs.core.truth_(pred__18900.call(null,new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429),expr__18901)))\n{return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(self__.catch_block,self__.catch_exception,G__18897,self__.continue_block,self__.prev,self__.__meta,self__.__extmap,null));\n} else\n{if(cljs.core.truth_(pred__18900.call(null,new cljs.core.Keyword(null,\"continue-block\",\"continue-block\",1486987097),expr__18901)))\n{return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(self__.catch_block,self__.catch_exception,self__.finally_block,G__18897,self__.prev,self__.__meta,self__.__extmap,null));\n} else\n{if(cljs.core.truth_(pred__18900.call(null,new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637),expr__18901)))\n{return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(self__.catch_block,self__.catch_exception,self__.finally_block,self__.continue_block,G__18897,self__.__meta,self__.__extmap,null));\n} else\n{return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(self__.catch_block,self__.catch_exception,self__.finally_block,self__.continue_block,self__.prev,self__.__meta,cljs.core.assoc.call(null,self__.__extmap,k__5478__auto__,G__18897),null));\n}\n}\n}\n}\n}\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$IPrintWithWriter$_pr_writer$arity$3 = (function (this__5484__auto__,writer__5485__auto__,opts__5486__auto__){var self__ = this;\nvar this__5484__auto____$1 = this;var pr_pair__5487__auto__ = ((function (this__5484__auto____$1){\nreturn (function (keyval__5488__auto__){return cljs.core.pr_sequential_writer.call(null,writer__5485__auto__,cljs.core.pr_writer,\"\",\" \",\"\",opts__5486__auto__,keyval__5488__auto__);\n});})(this__5484__auto____$1))\n;return cljs.core.pr_sequential_writer.call(null,writer__5485__auto__,pr_pair__5487__auto__,\"#cljs.core.async.impl.ioc-helpers.ExceptionFrame{\",\", \",\"}\",opts__5486__auto__,cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893),self__.catch_block],null)),(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687),self__.catch_exception],null)),(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429),self__.finally_block],null)),(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"continue-block\",\"continue-block\",1486987097),self__.continue_block],null)),(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637),self__.prev],null))], null),self__.__extmap));\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$ICollection$_conj$arity$2 = (function (this__5475__auto__,entry__5476__auto__){var self__ = this;\nvar this__5475__auto____$1 = this;if(cljs.core.vector_QMARK_.call(null,entry__5476__auto__))\n{return cljs.core._assoc.call(null,this__5475__auto____$1,cljs.core._nth.call(null,entry__5476__auto__,0),cljs.core._nth.call(null,entry__5476__auto__,1));\n} else\n{return cljs.core.reduce.call(null,cljs.core._conj,this__5475__auto____$1,entry__5476__auto__);\n}\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$ISeqable$_seq$arity$1 = (function (this__5482__auto__){var self__ = this;\nvar this__5482__auto____$1 = this;return cljs.core.seq.call(null,cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893),self__.catch_block],null)),(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687),self__.catch_exception],null)),(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429),self__.finally_block],null)),(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"continue-block\",\"continue-block\",1486987097),self__.continue_block],null)),(new cljs.core.PersistentVector(null,2,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637),self__.prev],null))], null),self__.__extmap));\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$ICounted$_count$arity$1 = (function (this__5474__auto__){var self__ = this;\nvar this__5474__auto____$1 = this;return (5 + cljs.core.count.call(null,self__.__extmap));\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$IEquiv$_equiv$arity$2 = (function (this__5466__auto__,other__5467__auto__){var self__ = this;\nvar this__5466__auto____$1 = this;if(cljs.core.truth_((function (){var and__4872__auto__ = other__5467__auto__;if(cljs.core.truth_(and__4872__auto__))\n{return ((this__5466__auto____$1.constructor === other__5467__auto__.constructor)) && (cljs.core.equiv_map.call(null,this__5466__auto____$1,other__5467__auto__));\n} else\n{return and__4872__auto__;\n}\n})()))\n{return true;\n} else\n{return false;\n}\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (this__5469__auto__,G__18897){var self__ = this;\nvar this__5469__auto____$1 = this;return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(self__.catch_block,self__.catch_exception,self__.finally_block,self__.continue_block,self__.prev,G__18897,self__.__extmap,self__.__hash));\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$ICloneable$_clone$arity$1 = (function (this__5464__auto__){var self__ = this;\nvar this__5464__auto____$1 = this;return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(self__.catch_block,self__.catch_exception,self__.finally_block,self__.continue_block,self__.prev,self__.__meta,self__.__extmap,self__.__hash));\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$IMeta$_meta$arity$1 = (function (this__5468__auto__){var self__ = this;\nvar this__5468__auto____$1 = this;return self__.__meta;\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.prototype.cljs$core$IMap$_dissoc$arity$2 = (function (this__5479__auto__,k__5480__auto__){var self__ = this;\nvar this__5479__auto____$1 = this;if(cljs.core.contains_QMARK_.call(null,new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429),null,new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893),null,new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687),null,new cljs.core.Keyword(null,\"continue-block\",\"continue-block\",1486987097),null,new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637),null], null), null),k__5480__auto__))\n{return cljs.core.dissoc.call(null,cljs.core.with_meta.call(null,cljs.core.into.call(null,cljs.core.PersistentArrayMap.EMPTY,this__5479__auto____$1),self__.__meta),k__5480__auto__);\n} else\n{return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(self__.catch_block,self__.catch_exception,self__.finally_block,self__.continue_block,self__.prev,self__.__meta,cljs.core.not_empty.call(null,cljs.core.dissoc.call(null,self__.__extmap,k__5480__auto__)),null));\n}\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.cljs$lang$type = true;\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.cljs$lang$ctorPrSeq = (function (this__5504__auto__){return cljs.core._conj.call(null,cljs.core.List.EMPTY,\"cljs.core.async.impl.ioc-helpers/ExceptionFrame\");\n});\ncljs.core.async.impl.ioc_helpers.ExceptionFrame.cljs$lang$ctorPrWriter = (function (this__5504__auto__,writer__5505__auto__){return cljs.core._write.call(null,writer__5505__auto__,\"cljs.core.async.impl.ioc-helpers/ExceptionFrame\");\n});\ncljs.core.async.impl.ioc_helpers.__GT_ExceptionFrame = (function __GT_ExceptionFrame(catch_block,catch_exception,finally_block,continue_block,prev){return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(catch_block,catch_exception,finally_block,continue_block,prev));\n});\ncljs.core.async.impl.ioc_helpers.map__GT_ExceptionFrame = (function map__GT_ExceptionFrame(G__18899){return (new cljs.core.async.impl.ioc_helpers.ExceptionFrame(new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893).cljs$core$IFn$_invoke$arity$1(G__18899),new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687).cljs$core$IFn$_invoke$arity$1(G__18899),new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429).cljs$core$IFn$_invoke$arity$1(G__18899),new cljs.core.Keyword(null,\"continue-block\",\"continue-block\",1486987097).cljs$core$IFn$_invoke$arity$1(G__18899),new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637).cljs$core$IFn$_invoke$arity$1(G__18899),null,cljs.core.dissoc.call(null,G__18899,new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893),new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687),new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429),new cljs.core.Keyword(null,\"continue-block\",\"continue-block\",1486987097),new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637))));\n});\ncljs.core.async.impl.ioc_helpers.add_exception_frame = (function add_exception_frame(state,catch_block,catch_exception,finally_block,continue_block){var statearr_18904 = state;(statearr_18904[cljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES] = cljs.core.async.impl.ioc_helpers.__GT_ExceptionFrame.call(null,catch_block,catch_exception,finally_block,continue_block,cljs.core.async.impl.ioc_helpers.aget_object.call(null,state,cljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES)));\nreturn statearr_18904;\n});\ncljs.core.async.impl.ioc_helpers.process_exception = (function process_exception(state){while(true){\nvar exception_frame = cljs.core.async.impl.ioc_helpers.aget_object.call(null,state,cljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES);var catch_block = new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893).cljs$core$IFn$_invoke$arity$1(exception_frame);var catch_exception = new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687).cljs$core$IFn$_invoke$arity$1(exception_frame);var exception = cljs.core.async.impl.ioc_helpers.aget_object.call(null,state,cljs.core.async.impl.ioc_helpers.CURRENT_EXCEPTION);if(cljs.core.truth_((function (){var and__4872__auto__ = exception;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.not.call(null,exception_frame);\n} else\n{return and__4872__auto__;\n}\n})()))\n{throw exception;\n} else\n{if(cljs.core.truth_((function (){var and__4872__auto__ = exception;if(cljs.core.truth_(and__4872__auto__))\n{var and__4872__auto____$1 = catch_block;if(cljs.core.truth_(and__4872__auto____$1))\n{return (exception instanceof catch_exception);\n} else\n{return and__4872__auto____$1;\n}\n} else\n{return and__4872__auto__;\n}\n})()))\n{var statearr_18910 = state;(statearr_18910[cljs.core.async.impl.ioc_helpers.STATE_IDX] = catch_block);\n(statearr_18910[cljs.core.async.impl.ioc_helpers.VALUE_IDX] = exception);\n(statearr_18910[cljs.core.async.impl.ioc_helpers.CURRENT_EXCEPTION] = null);\n(statearr_18910[cljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES] = cljs.core.assoc.call(null,exception_frame,new cljs.core.Keyword(null,\"catch-block\",\"catch-block\",2343862893),null,new cljs.core.Keyword(null,\"catch-exception\",\"catch-exception\",1686480687),null));\nreturn statearr_18910;\n} else\n{if(cljs.core.truth_((function (){var and__4872__auto__ = exception;if(cljs.core.truth_(and__4872__auto__))\n{return (cljs.core.not.call(null,catch_block)) && (cljs.core.not.call(null,new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429).cljs$core$IFn$_invoke$arity$1(exception_frame)));\n} else\n{return and__4872__auto__;\n}\n})()))\n{var statearr_18911_18933 = state;(statearr_18911_18933[cljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES] = new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637).cljs$core$IFn$_invoke$arity$1(exception_frame));\n{\nvar G__18934 = state;\nstate = G__18934;\ncontinue;\n}\n} else\n{if(cljs.core.truth_((function (){var and__4872__auto__ = exception;if(cljs.core.truth_(and__4872__auto__))\n{var and__4872__auto____$1 = cljs.core.not.call(null,catch_block);if(and__4872__auto____$1)\n{return new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429).cljs$core$IFn$_invoke$arity$1(exception_frame);\n} else\n{return and__4872__auto____$1;\n}\n} else\n{return and__4872__auto__;\n}\n})()))\n{var statearr_18912 = state;(statearr_18912[cljs.core.async.impl.ioc_helpers.STATE_IDX] = new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429).cljs$core$IFn$_invoke$arity$1(exception_frame));\n(statearr_18912[cljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES] = cljs.core.assoc.call(null,exception_frame,new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429),null));\nreturn statearr_18912;\n} else\n{if(cljs.core.truth_((function (){var and__4872__auto__ = cljs.core.not.call(null,exception);if(and__4872__auto__)\n{return new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429).cljs$core$IFn$_invoke$arity$1(exception_frame);\n} else\n{return and__4872__auto__;\n}\n})()))\n{var statearr_18913 = state;(statearr_18913[cljs.core.async.impl.ioc_helpers.STATE_IDX] = new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429).cljs$core$IFn$_invoke$arity$1(exception_frame));\n(statearr_18913[cljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES] = cljs.core.assoc.call(null,exception_frame,new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429),null));\nreturn statearr_18913;\n} else\n{if((cljs.core.not.call(null,exception)) && (cljs.core.not.call(null,new cljs.core.Keyword(null,\"finally-block\",\"finally-block\",2846533429).cljs$core$IFn$_invoke$arity$1(exception_frame))))\n{var statearr_18914 = state;(statearr_18914[cljs.core.async.impl.ioc_helpers.STATE_IDX] = new cljs.core.Keyword(null,\"continue-block\",\"continue-block\",1486987097).cljs$core$IFn$_invoke$arity$1(exception_frame));\n(statearr_18914[cljs.core.async.impl.ioc_helpers.EXCEPTION_FRAMES] = new cljs.core.Keyword(null,\"prev\",\"prev\",1017353637).cljs$core$IFn$_invoke$arity$1(exception_frame));\nreturn statearr_18914;\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{if(false)\n{return null;\n} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str(\"No matching clause\"),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,false))].join('')));\n}\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\nbreak;\n}\n});\n}\nif(!lt.util.load.provided_QMARK_('cljs.core.async')) {\ngoog.provide('cljs.core.async');\ngoog.require('cljs.core');\ngoog.require('cljs.core.async.impl.ioc_helpers');\ngoog.require('cljs.core.async.impl.protocols');\ngoog.require('cljs.core.async.impl.buffers');\ngoog.require('cljs.core.async.impl.timers');\ngoog.require('cljs.core.async.impl.channels');\ngoog.require('cljs.core.async.impl.dispatch');\ngoog.require('cljs.core.async.impl.dispatch');\ngoog.require('cljs.core.async.impl.buffers');\ngoog.require('cljs.core.async.impl.protocols');\ngoog.require('cljs.core.async.impl.timers');\ngoog.require('cljs.core.async.impl.channels');\ngoog.require('cljs.core.async.impl.ioc_helpers');\ncljs.core.async.fn_handler = (function fn_handler(f){if(typeof cljs.core.async.t16311 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t16311 = (function (f,fn_handler,meta16312){\nthis.f = f;\nthis.fn_handler = fn_handler;\nthis.meta16312 = meta16312;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t16311.cljs$lang$type = true;\ncljs.core.async.t16311.cljs$lang$ctorStr = \"cljs.core.async/t16311\";\ncljs.core.async.t16311.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t16311\");\n});\ncljs.core.async.t16311.prototype.cljs$core$async$impl$protocols$Handler$ = true;\ncljs.core.async.t16311.prototype.cljs$core$async$impl$protocols$Handler$active_QMARK_$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return true;\n});\ncljs.core.async.t16311.prototype.cljs$core$async$impl$protocols$Handler$commit$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return self__.f;\n});\ncljs.core.async.t16311.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_16313){var self__ = this;\nvar _16313__$1 = this;return self__.meta16312;\n});\ncljs.core.async.t16311.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_16313,meta16312__$1){var self__ = this;\nvar _16313__$1 = this;return (new cljs.core.async.t16311(self__.f,self__.fn_handler,meta16312__$1));\n});\ncljs.core.async.__GT_t16311 = (function __GT_t16311(f__$1,fn_handler__$1,meta16312){return (new cljs.core.async.t16311(f__$1,fn_handler__$1,meta16312));\n});\n}\nreturn (new cljs.core.async.t16311(f,fn_handler,null));\n});\n/**\n* Returns a fixed buffer of size n. When full, puts will block/park.\n*/\ncljs.core.async.buffer = (function buffer(n){return cljs.core.async.impl.buffers.fixed_buffer.call(null,n);\n});\n/**\n* Returns a buffer of size n. When full, puts will complete but\n* val will be dropped (no transfer).\n*/\ncljs.core.async.dropping_buffer = (function dropping_buffer(n){return cljs.core.async.impl.buffers.dropping_buffer.call(null,n);\n});\n/**\n* Returns a buffer of size n. When full, puts will complete, and be\n* buffered, but oldest elements in buffer will be dropped (not\n* transferred).\n*/\ncljs.core.async.sliding_buffer = (function sliding_buffer(n){return cljs.core.async.impl.buffers.sliding_buffer.call(null,n);\n});\n/**\n* Returns true if a channel created with buff will never block. That is to say,\n* puts into this buffer will never cause the buffer to be full.\n*/\ncljs.core.async.unblocking_buffer_QMARK_ = (function unblocking_buffer_QMARK_(buff){var G__16315 = buff;if(G__16315)\n{var bit__5534__auto__ = null;if(cljs.core.truth_((function (){var or__4884__auto__ = bit__5534__auto__;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return G__16315.cljs$core$async$impl$protocols$UnblockingBuffer$;\n}\n})()))\n{return true;\n} else\n{if((!G__16315.cljs$lang$protocol_mask$partition$))\n{return cljs.core.native_satisfies_QMARK_.call(null,cljs.core.async.impl.protocols.UnblockingBuffer,G__16315);\n} else\n{return false;\n}\n}\n} else\n{return cljs.core.native_satisfies_QMARK_.call(null,cljs.core.async.impl.protocols.UnblockingBuffer,G__16315);\n}\n});\n/**\n* Creates a channel with an optional buffer. If buf-or-n is a number,\n* will create and use a fixed buffer of that size.\n*/\ncljs.core.async.chan = (function() {\nvar chan = null;\nvar chan__0 = (function (){return chan.call(null,null);\n});\nvar chan__1 = (function (buf_or_n){var buf_or_n__$1 = ((cljs.core._EQ_.call(null,buf_or_n,0))?null:buf_or_n);return cljs.core.async.impl.channels.chan.call(null,((typeof buf_or_n__$1 === 'number')?cljs.core.async.buffer.call(null,buf_or_n__$1):buf_or_n__$1));\n});\nchan = function(buf_or_n){\nswitch(arguments.length){\ncase 0:\nreturn chan__0.call(this);\ncase 1:\nreturn chan__1.call(this,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nchan.cljs$core$IFn$_invoke$arity$0 = chan__0;\nchan.cljs$core$IFn$_invoke$arity$1 = chan__1;\nreturn chan;\n})()\n;\n/**\n* Returns a channel that will close after msecs\n*/\ncljs.core.async.timeout = (function timeout(msecs){return cljs.core.async.impl.timers.timeout.call(null,msecs);\n});\n/**\n* takes a val from port. Must be called inside a (go ...) block. Will\n* return nil if closed. Will park if nothing is available.\n*/\ncljs.core.async._LT__BANG_ = (function _LT__BANG_(port){if(null)\n{return null;\n} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str(\"<! used not in (go ...) block\"),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,null))].join('')));\n}\n});\n/**\n* Asynchronously takes a val from port, passing to fn1. Will pass nil\n* if closed. If on-caller? (default true) is true, and value is\n* immediately available, will call fn1 on calling thread.\n* Returns nil.\n*/\ncljs.core.async.take_BANG_ = (function() {\nvar take_BANG_ = null;\nvar take_BANG___2 = (function (port,fn1){return take_BANG_.call(null,port,fn1,true);\n});\nvar take_BANG___3 = (function (port,fn1,on_caller_QMARK_){var ret = cljs.core.async.impl.protocols.take_BANG_.call(null,port,cljs.core.async.fn_handler.call(null,fn1));if(cljs.core.truth_(ret))\n{var val_18579 = cljs.core.deref.call(null,ret);if(cljs.core.truth_(on_caller_QMARK_))\n{fn1.call(null,val_18579);\n} else\n{cljs.core.async.impl.dispatch.run.call(null,((function (val_18579,ret){\nreturn (function (){return fn1.call(null,val_18579);\n});})(val_18579,ret))\n);\n}\n} else\n{}\nreturn null;\n});\ntake_BANG_ = function(port,fn1,on_caller_QMARK_){\nswitch(arguments.length){\ncase 2:\nreturn take_BANG___2.call(this,port,fn1);\ncase 3:\nreturn take_BANG___3.call(this,port,fn1,on_caller_QMARK_);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\ntake_BANG_.cljs$core$IFn$_invoke$arity$2 = take_BANG___2;\ntake_BANG_.cljs$core$IFn$_invoke$arity$3 = take_BANG___3;\nreturn take_BANG_;\n})()\n;\ncljs.core.async.nop = (function nop(){return null;\n});\n/**\n* puts a val into port. nil values are not allowed. Must be called\n* inside a (go ...) block. Will park if no buffer space is available.\n*/\ncljs.core.async._GT__BANG_ = (function _GT__BANG_(port,val){if(null)\n{return null;\n} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str(\">! used not in (go ...) block\"),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,null))].join('')));\n}\n});\n/**\n* Asynchronously puts a val into port, calling fn0 (if supplied) when\n* complete. nil values are not allowed. Will throw if closed. If\n* on-caller? (default true) is true, and the put is immediately\n* accepted, will call fn0 on calling thread.  Returns nil.\n*/\ncljs.core.async.put_BANG_ = (function() {\nvar put_BANG_ = null;\nvar put_BANG___2 = (function (port,val){return put_BANG_.call(null,port,val,cljs.core.async.nop);\n});\nvar put_BANG___3 = (function (port,val,fn0){return put_BANG_.call(null,port,val,fn0,true);\n});\nvar put_BANG___4 = (function (port,val,fn0,on_caller_QMARK_){var ret = cljs.core.async.impl.protocols.put_BANG_.call(null,port,val,cljs.core.async.fn_handler.call(null,fn0));if(cljs.core.truth_((function (){var and__4872__auto__ = ret;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.not_EQ_.call(null,fn0,cljs.core.async.nop);\n} else\n{return and__4872__auto__;\n}\n})()))\n{if(cljs.core.truth_(on_caller_QMARK_))\n{fn0.call(null);\n} else\n{cljs.core.async.impl.dispatch.run.call(null,fn0);\n}\n} else\n{}\nreturn null;\n});\nput_BANG_ = function(port,val,fn0,on_caller_QMARK_){\nswitch(arguments.length){\ncase 2:\nreturn put_BANG___2.call(this,port,val);\ncase 3:\nreturn put_BANG___3.call(this,port,val,fn0);\ncase 4:\nreturn put_BANG___4.call(this,port,val,fn0,on_caller_QMARK_);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nput_BANG_.cljs$core$IFn$_invoke$arity$2 = put_BANG___2;\nput_BANG_.cljs$core$IFn$_invoke$arity$3 = put_BANG___3;\nput_BANG_.cljs$core$IFn$_invoke$arity$4 = put_BANG___4;\nreturn put_BANG_;\n})()\n;\ncljs.core.async.close_BANG_ = (function close_BANG_(port){return cljs.core.async.impl.protocols.close_BANG_.call(null,port);\n});\ncljs.core.async.random_array = (function random_array(n){var a = (new Array(n));var n__5732__auto___18580 = n;var x_18581 = 0;while(true){\nif((x_18581 < n__5732__auto___18580))\n{(a[x_18581] = 0);\n{\nvar G__18582 = (x_18581 + 1);\nx_18581 = G__18582;\ncontinue;\n}\n} else\n{}\nbreak;\n}\nvar i = 1;while(true){\nif(cljs.core._EQ_.call(null,i,n))\n{return a;\n} else\n{var j = cljs.core.rand_int.call(null,i);(a[i] = (a[j]));\n(a[j] = i);\n{\nvar G__18583 = (i + 1);\ni = G__18583;\ncontinue;\n}\n}\nbreak;\n}\n});\ncljs.core.async.alt_flag = (function alt_flag(){var flag = cljs.core.atom.call(null,true);if(typeof cljs.core.async.t16319 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t16319 = (function (flag,alt_flag,meta16320){\nthis.flag = flag;\nthis.alt_flag = alt_flag;\nthis.meta16320 = meta16320;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t16319.cljs$lang$type = true;\ncljs.core.async.t16319.cljs$lang$ctorStr = \"cljs.core.async/t16319\";\ncljs.core.async.t16319.cljs$lang$ctorPrWriter = ((function (flag){\nreturn (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t16319\");\n});})(flag))\n;\ncljs.core.async.t16319.prototype.cljs$core$async$impl$protocols$Handler$ = true;\ncljs.core.async.t16319.prototype.cljs$core$async$impl$protocols$Handler$active_QMARK_$arity$1 = ((function (flag){\nreturn (function (_){var self__ = this;\nvar ___$1 = this;return cljs.core.deref.call(null,self__.flag);\n});})(flag))\n;\ncljs.core.async.t16319.prototype.cljs$core$async$impl$protocols$Handler$commit$arity$1 = ((function (flag){\nreturn (function (_){var self__ = this;\nvar ___$1 = this;cljs.core.reset_BANG_.call(null,self__.flag,null);\nreturn true;\n});})(flag))\n;\ncljs.core.async.t16319.prototype.cljs$core$IMeta$_meta$arity$1 = ((function (flag){\nreturn (function (_16321){var self__ = this;\nvar _16321__$1 = this;return self__.meta16320;\n});})(flag))\n;\ncljs.core.async.t16319.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = ((function (flag){\nreturn (function (_16321,meta16320__$1){var self__ = this;\nvar _16321__$1 = this;return (new cljs.core.async.t16319(self__.flag,self__.alt_flag,meta16320__$1));\n});})(flag))\n;\ncljs.core.async.__GT_t16319 = ((function (flag){\nreturn (function __GT_t16319(flag__$1,alt_flag__$1,meta16320){return (new cljs.core.async.t16319(flag__$1,alt_flag__$1,meta16320));\n});})(flag))\n;\n}\nreturn (new cljs.core.async.t16319(flag,alt_flag,null));\n});\ncljs.core.async.alt_handler = (function alt_handler(flag,cb){if(typeof cljs.core.async.t16325 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t16325 = (function (cb,flag,alt_handler,meta16326){\nthis.cb = cb;\nthis.flag = flag;\nthis.alt_handler = alt_handler;\nthis.meta16326 = meta16326;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t16325.cljs$lang$type = true;\ncljs.core.async.t16325.cljs$lang$ctorStr = \"cljs.core.async/t16325\";\ncljs.core.async.t16325.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t16325\");\n});\ncljs.core.async.t16325.prototype.cljs$core$async$impl$protocols$Handler$ = true;\ncljs.core.async.t16325.prototype.cljs$core$async$impl$protocols$Handler$active_QMARK_$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return cljs.core.async.impl.protocols.active_QMARK_.call(null,self__.flag);\n});\ncljs.core.async.t16325.prototype.cljs$core$async$impl$protocols$Handler$commit$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;cljs.core.async.impl.protocols.commit.call(null,self__.flag);\nreturn self__.cb;\n});\ncljs.core.async.t16325.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_16327){var self__ = this;\nvar _16327__$1 = this;return self__.meta16326;\n});\ncljs.core.async.t16325.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_16327,meta16326__$1){var self__ = this;\nvar _16327__$1 = this;return (new cljs.core.async.t16325(self__.cb,self__.flag,self__.alt_handler,meta16326__$1));\n});\ncljs.core.async.__GT_t16325 = (function __GT_t16325(cb__$1,flag__$1,alt_handler__$1,meta16326){return (new cljs.core.async.t16325(cb__$1,flag__$1,alt_handler__$1,meta16326));\n});\n}\nreturn (new cljs.core.async.t16325(cb,flag,alt_handler,null));\n});\n/**\n* returns derefable [val port] if immediate, nil if enqueued\n*/\ncljs.core.async.do_alts = (function do_alts(fret,ports,opts){var flag = cljs.core.async.alt_flag.call(null);var n = cljs.core.count.call(null,ports);var idxs = cljs.core.async.random_array.call(null,n);var priority = new cljs.core.Keyword(null,\"priority\",\"priority\",4143410454).cljs$core$IFn$_invoke$arity$1(opts);var ret = (function (){var i = 0;while(true){\nif((i < n))\n{var idx = (cljs.core.truth_(priority)?i:(idxs[i]));var port = cljs.core.nth.call(null,ports,idx);var wport = ((cljs.core.vector_QMARK_.call(null,port))?port.call(null,0):null);var vbox = (cljs.core.truth_(wport)?(function (){var val = port.call(null,1);return cljs.core.async.impl.protocols.put_BANG_.call(null,wport,val,cljs.core.async.alt_handler.call(null,flag,((function (i,val,idx,port,wport,flag,n,idxs,priority){\nreturn (function (){return fret.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [null,wport], null));\n});})(i,val,idx,port,wport,flag,n,idxs,priority))\n));\n})():cljs.core.async.impl.protocols.take_BANG_.call(null,port,cljs.core.async.alt_handler.call(null,flag,((function (i,idx,port,wport,flag,n,idxs,priority){\nreturn (function (p1__16328_SHARP_){return fret.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [p1__16328_SHARP_,port], null));\n});})(i,idx,port,wport,flag,n,idxs,priority))\n)));if(cljs.core.truth_(vbox))\n{return cljs.core.async.impl.channels.box.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.deref.call(null,vbox),(function (){var or__4884__auto__ = wport;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return port;\n}\n})()], null));\n} else\n{{\nvar G__18584 = (i + 1);\ni = G__18584;\ncontinue;\n}\n}\n} else\n{return null;\n}\nbreak;\n}\n})();var or__4884__auto__ = ret;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{if(cljs.core.contains_QMARK_.call(null,opts,new cljs.core.Keyword(null,\"default\",\"default\",2558708147)))\n{var temp__4092__auto__ = (function (){var and__4872__auto__ = cljs.core.async.impl.protocols.active_QMARK_.call(null,flag);if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.async.impl.protocols.commit.call(null,flag);\n} else\n{return and__4872__auto__;\n}\n})();if(cljs.core.truth_(temp__4092__auto__))\n{var got = temp__4092__auto__;return cljs.core.async.impl.channels.box.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"default\",\"default\",2558708147).cljs$core$IFn$_invoke$arity$1(opts),new cljs.core.Keyword(null,\"default\",\"default\",2558708147)], null));\n} else\n{return null;\n}\n} else\n{return null;\n}\n}\n});\n/**\n* Completes at most one of several channel operations. Must be called\n* inside a (go ...) block. ports is a vector of channel endpoints, which\n* can be either a channel to take from or a vector of\n* [channel-to-put-to val-to-put], in any combination. Takes will be\n* made as if by <!, and puts will be made as if by >!. Unless\n* the :priority option is true, if more than one port operation is\n* ready a non-deterministic choice will be made. If no operation is\n* ready and a :default value is supplied, [default-val :default] will\n* be returned, otherwise alts! will park until the first operation to\n* become ready completes. Returns [val port] of the completed\n* operation, where val is the value taken for takes, and nil for puts.\n* \n* opts are passed as :key val ... Supported options:\n* \n* :default val - the value to use if none of the operations are immediately ready\n* :priority true - (default nil) when true, the operations will be tried in order.\n* \n* Note: there is no guarantee that the port exps or val exprs will be\n* used, nor in what order should they be, so they should not be\n* depended upon for side effects.\n* @param {...*} var_args\n*/\ncljs.core.async.alts_BANG_ = (function() { \nvar alts_BANG___delegate = function (ports,p__16329){var map__16331 = p__16329;var map__16331__$1 = ((cljs.core.seq_QMARK_.call(null,map__16331))?cljs.core.apply.call(null,cljs.core.hash_map,map__16331):map__16331);var opts = map__16331__$1;if(null)\n{return null;\n} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str(\"alts! used not in (go ...) block\"),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,null))].join('')));\n}\n};\nvar alts_BANG_ = function (ports,var_args){\nvar p__16329 = null;if (arguments.length > 1) {\n  p__16329 = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);} \nreturn alts_BANG___delegate.call(this,ports,p__16329);};\nalts_BANG_.cljs$lang$maxFixedArity = 1;\nalts_BANG_.cljs$lang$applyTo = (function (arglist__18585){\nvar ports = cljs.core.first(arglist__18585);\nvar p__16329 = cljs.core.rest(arglist__18585);\nreturn alts_BANG___delegate(ports,p__16329);\n});\nalts_BANG_.cljs$core$IFn$_invoke$arity$variadic = alts_BANG___delegate;\nreturn alts_BANG_;\n})()\n;\n/**\n* Takes a function and a source channel, and returns a channel which\n* contains the values produced by applying f to each value taken from\n* the source channel\n*/\ncljs.core.async.map_LT_ = (function map_LT_(f,ch){if(typeof cljs.core.async.t16339 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t16339 = (function (ch,f,map_LT_,meta16340){\nthis.ch = ch;\nthis.f = f;\nthis.map_LT_ = map_LT_;\nthis.meta16340 = meta16340;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t16339.cljs$lang$type = true;\ncljs.core.async.t16339.cljs$lang$ctorStr = \"cljs.core.async/t16339\";\ncljs.core.async.t16339.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t16339\");\n});\ncljs.core.async.t16339.prototype.cljs$core$async$impl$protocols$WritePort$ = true;\ncljs.core.async.t16339.prototype.cljs$core$async$impl$protocols$WritePort$put_BANG_$arity$3 = (function (_,val,fn0){var self__ = this;\nvar ___$1 = this;return cljs.core.async.impl.protocols.put_BANG_.call(null,self__.ch,val,fn0);\n});\ncljs.core.async.t16339.prototype.cljs$core$async$impl$protocols$ReadPort$ = true;\ncljs.core.async.t16339.prototype.cljs$core$async$impl$protocols$ReadPort$take_BANG_$arity$2 = (function (_,fn1){var self__ = this;\nvar ___$1 = this;var ret = cljs.core.async.impl.protocols.take_BANG_.call(null,self__.ch,(function (){if(typeof cljs.core.async.t16342 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t16342 = (function (fn1,_,meta16340,ch,f,map_LT_,meta16343){\nthis.fn1 = fn1;\nthis._ = _;\nthis.meta16340 = meta16340;\nthis.ch = ch;\nthis.f = f;\nthis.map_LT_ = map_LT_;\nthis.meta16343 = meta16343;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t16342.cljs$lang$type = true;\ncljs.core.async.t16342.cljs$lang$ctorStr = \"cljs.core.async/t16342\";\ncljs.core.async.t16342.cljs$lang$ctorPrWriter = ((function (___$1){\nreturn (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t16342\");\n});})(___$1))\n;\ncljs.core.async.t16342.prototype.cljs$core$async$impl$protocols$Handler$ = true;\ncljs.core.async.t16342.prototype.cljs$core$async$impl$protocols$Handler$active_QMARK_$arity$1 = ((function (___$1){\nreturn (function (___$3){var self__ = this;\nvar ___$4 = this;return cljs.core.async.impl.protocols.active_QMARK_.call(null,self__.fn1);\n});})(___$1))\n;\ncljs.core.async.t16342.prototype.cljs$core$async$impl$protocols$Handler$lock_id$arity$1 = ((function (___$1){\nreturn (function (___$3){var self__ = this;\nvar ___$4 = this;return cljs.core.async.impl.protocols.lock_id.call(null,self__.fn1);\n});})(___$1))\n;\ncljs.core.async.t16342.prototype.cljs$core$async$impl$protocols$Handler$commit$arity$1 = ((function (___$1){\nreturn (function (___$3){var self__ = this;\nvar ___$4 = this;var f1 = cljs.core.async.impl.protocols.commit.call(null,self__.fn1);return ((function (f1,___$4,___$1){\nreturn (function (p1__16332_SHARP_){return f1.call(null,(((p1__16332_SHARP_ == null))?null:self__.f.call(null,p1__16332_SHARP_)));\n});\n;})(f1,___$4,___$1))\n});})(___$1))\n;\ncljs.core.async.t16342.prototype.cljs$core$IMeta$_meta$arity$1 = ((function (___$1){\nreturn (function (_16344){var self__ = this;\nvar _16344__$1 = this;return self__.meta16343;\n});})(___$1))\n;\ncljs.core.async.t16342.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = ((function (___$1){\nreturn (function (_16344,meta16343__$1){var self__ = this;\nvar _16344__$1 = this;return (new cljs.core.async.t16342(self__.fn1,self__._,self__.meta16340,self__.ch,self__.f,self__.map_LT_,meta16343__$1));\n});})(___$1))\n;\ncljs.core.async.__GT_t16342 = ((function (___$1){\nreturn (function __GT_t16342(fn1__$1,___$2,meta16340__$1,ch__$2,f__$2,map_LT___$2,meta16343){return (new cljs.core.async.t16342(fn1__$1,___$2,meta16340__$1,ch__$2,f__$2,map_LT___$2,meta16343));\n});})(___$1))\n;\n}\nreturn (new cljs.core.async.t16342(fn1,___$1,self__.meta16340,self__.ch,self__.f,self__.map_LT_,null));\n})());if(cljs.core.truth_((function (){var and__4872__auto__ = ret;if(cljs.core.truth_(and__4872__auto__))\n{return !((cljs.core.deref.call(null,ret) == null));\n} else\n{return and__4872__auto__;\n}\n})()))\n{return cljs.core.async.impl.channels.box.call(null,self__.f.call(null,cljs.core.deref.call(null,ret)));\n} else\n{return ret;\n}\n});\ncljs.core.async.t16339.prototype.cljs$core$async$impl$protocols$Channel$ = true;\ncljs.core.async.t16339.prototype.cljs$core$async$impl$protocols$Channel$close_BANG_$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return cljs.core.async.impl.protocols.close_BANG_.call(null,self__.ch);\n});\ncljs.core.async.t16339.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_16341){var self__ = this;\nvar _16341__$1 = this;return self__.meta16340;\n});\ncljs.core.async.t16339.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_16341,meta16340__$1){var self__ = this;\nvar _16341__$1 = this;return (new cljs.core.async.t16339(self__.ch,self__.f,self__.map_LT_,meta16340__$1));\n});\ncljs.core.async.__GT_t16339 = (function __GT_t16339(ch__$1,f__$1,map_LT___$1,meta16340){return (new cljs.core.async.t16339(ch__$1,f__$1,map_LT___$1,meta16340));\n});\n}\nreturn (new cljs.core.async.t16339(ch,f,map_LT_,null));\n});\n/**\n* Takes a function and a target channel, and returns a channel which\n* applies f to each value before supplying it to the target channel.\n*/\ncljs.core.async.map_GT_ = (function map_GT_(f,ch){if(typeof cljs.core.async.t16348 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t16348 = (function (ch,f,map_GT_,meta16349){\nthis.ch = ch;\nthis.f = f;\nthis.map_GT_ = map_GT_;\nthis.meta16349 = meta16349;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t16348.cljs$lang$type = true;\ncljs.core.async.t16348.cljs$lang$ctorStr = \"cljs.core.async/t16348\";\ncljs.core.async.t16348.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t16348\");\n});\ncljs.core.async.t16348.prototype.cljs$core$async$impl$protocols$WritePort$ = true;\ncljs.core.async.t16348.prototype.cljs$core$async$impl$protocols$WritePort$put_BANG_$arity$3 = (function (_,val,fn0){var self__ = this;\nvar ___$1 = this;return cljs.core.async.impl.protocols.put_BANG_.call(null,self__.ch,self__.f.call(null,val),fn0);\n});\ncljs.core.async.t16348.prototype.cljs$core$async$impl$protocols$ReadPort$ = true;\ncljs.core.async.t16348.prototype.cljs$core$async$impl$protocols$ReadPort$take_BANG_$arity$2 = (function (_,fn1){var self__ = this;\nvar ___$1 = this;return cljs.core.async.impl.protocols.take_BANG_.call(null,self__.ch,fn1);\n});\ncljs.core.async.t16348.prototype.cljs$core$async$impl$protocols$Channel$ = true;\ncljs.core.async.t16348.prototype.cljs$core$async$impl$protocols$Channel$close_BANG_$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return cljs.core.async.impl.protocols.close_BANG_.call(null,self__.ch);\n});\ncljs.core.async.t16348.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_16350){var self__ = this;\nvar _16350__$1 = this;return self__.meta16349;\n});\ncljs.core.async.t16348.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_16350,meta16349__$1){var self__ = this;\nvar _16350__$1 = this;return (new cljs.core.async.t16348(self__.ch,self__.f,self__.map_GT_,meta16349__$1));\n});\ncljs.core.async.__GT_t16348 = (function __GT_t16348(ch__$1,f__$1,map_GT___$1,meta16349){return (new cljs.core.async.t16348(ch__$1,f__$1,map_GT___$1,meta16349));\n});\n}\nreturn (new cljs.core.async.t16348(ch,f,map_GT_,null));\n});\n/**\n* Takes a predicate and a target channel, and returns a channel which\n* supplies only the values for which the predicate returns true to the\n* target channel.\n*/\ncljs.core.async.filter_GT_ = (function filter_GT_(p,ch){if(typeof cljs.core.async.t16354 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t16354 = (function (ch,p,filter_GT_,meta16355){\nthis.ch = ch;\nthis.p = p;\nthis.filter_GT_ = filter_GT_;\nthis.meta16355 = meta16355;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t16354.cljs$lang$type = true;\ncljs.core.async.t16354.cljs$lang$ctorStr = \"cljs.core.async/t16354\";\ncljs.core.async.t16354.cljs$lang$ctorPrWriter = (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t16354\");\n});\ncljs.core.async.t16354.prototype.cljs$core$async$impl$protocols$WritePort$ = true;\ncljs.core.async.t16354.prototype.cljs$core$async$impl$protocols$WritePort$put_BANG_$arity$3 = (function (_,val,fn0){var self__ = this;\nvar ___$1 = this;if(cljs.core.truth_(self__.p.call(null,val)))\n{return cljs.core.async.impl.protocols.put_BANG_.call(null,self__.ch,val,fn0);\n} else\n{return cljs.core.async.impl.channels.box.call(null,null);\n}\n});\ncljs.core.async.t16354.prototype.cljs$core$async$impl$protocols$ReadPort$ = true;\ncljs.core.async.t16354.prototype.cljs$core$async$impl$protocols$ReadPort$take_BANG_$arity$2 = (function (_,fn1){var self__ = this;\nvar ___$1 = this;return cljs.core.async.impl.protocols.take_BANG_.call(null,self__.ch,fn1);\n});\ncljs.core.async.t16354.prototype.cljs$core$async$impl$protocols$Channel$ = true;\ncljs.core.async.t16354.prototype.cljs$core$async$impl$protocols$Channel$close_BANG_$arity$1 = (function (_){var self__ = this;\nvar ___$1 = this;return cljs.core.async.impl.protocols.close_BANG_.call(null,self__.ch);\n});\ncljs.core.async.t16354.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_16356){var self__ = this;\nvar _16356__$1 = this;return self__.meta16355;\n});\ncljs.core.async.t16354.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_16356,meta16355__$1){var self__ = this;\nvar _16356__$1 = this;return (new cljs.core.async.t16354(self__.ch,self__.p,self__.filter_GT_,meta16355__$1));\n});\ncljs.core.async.__GT_t16354 = (function __GT_t16354(ch__$1,p__$1,filter_GT___$1,meta16355){return (new cljs.core.async.t16354(ch__$1,p__$1,filter_GT___$1,meta16355));\n});\n}\nreturn (new cljs.core.async.t16354(ch,p,filter_GT_,null));\n});\n/**\n* Takes a predicate and a target channel, and returns a channel which\n* supplies only the values for which the predicate returns false to the\n* target channel.\n*/\ncljs.core.async.remove_GT_ = (function remove_GT_(p,ch){return cljs.core.async.filter_GT_.call(null,cljs.core.complement.call(null,p),ch);\n});\n/**\n* Takes a predicate and a source channel, and returns a channel which\n* contains only the values taken from the source channel for which the\n* predicate returns true. The returned channel will be unbuffered by\n* default, or a buf-or-n can be supplied. The channel will close\n* when the source channel closes.\n*/\ncljs.core.async.filter_LT_ = (function() {\nvar filter_LT_ = null;\nvar filter_LT___2 = (function (p,ch){return filter_LT_.call(null,p,ch,null);\n});\nvar filter_LT___3 = (function (p,ch,buf_or_n){var out = cljs.core.async.chan.call(null,buf_or_n);var c__13951__auto___18586 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18586,out){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18586,out){\nreturn (function (state_16418){var state_val_16419 = (state_16418[1]);if((state_val_16419 === 1))\n{var state_16418__$1 = state_16418;var statearr_16420_18587 = state_16418__$1;(statearr_16420_18587[2] = null);\n(statearr_16420_18587[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16419 === 2))\n{var state_16418__$1 = state_16418;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_16418__$1,4,ch);\n} else\n{if((state_val_16419 === 3))\n{var inst_16416 = (state_16418[2]);var state_16418__$1 = state_16418;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_16418__$1,inst_16416);\n} else\n{if((state_val_16419 === 4))\n{var inst_16400 = (state_16418[7]);var inst_16400__$1 = (state_16418[2]);var inst_16401 = (inst_16400__$1 == null);var state_16418__$1 = (function (){var statearr_16421 = state_16418;(statearr_16421[7] = inst_16400__$1);\nreturn statearr_16421;\n})();if(cljs.core.truth_(inst_16401))\n{var statearr_16422_18588 = state_16418__$1;(statearr_16422_18588[1] = 5);\n} else\n{var statearr_16423_18589 = state_16418__$1;(statearr_16423_18589[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16419 === 5))\n{var inst_16403 = cljs.core.async.close_BANG_.call(null,out);var state_16418__$1 = state_16418;var statearr_16424_18590 = state_16418__$1;(statearr_16424_18590[2] = inst_16403);\n(statearr_16424_18590[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16419 === 6))\n{var inst_16400 = (state_16418[7]);var inst_16405 = p.call(null,inst_16400);var state_16418__$1 = state_16418;if(cljs.core.truth_(inst_16405))\n{var statearr_16425_18591 = state_16418__$1;(statearr_16425_18591[1] = 8);\n} else\n{var statearr_16426_18592 = state_16418__$1;(statearr_16426_18592[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16419 === 7))\n{var inst_16414 = (state_16418[2]);var state_16418__$1 = state_16418;var statearr_16427_18593 = state_16418__$1;(statearr_16427_18593[2] = inst_16414);\n(statearr_16427_18593[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16419 === 8))\n{var inst_16400 = (state_16418[7]);var state_16418__$1 = state_16418;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_16418__$1,11,out,inst_16400);\n} else\n{if((state_val_16419 === 9))\n{var state_16418__$1 = state_16418;var statearr_16428_18594 = state_16418__$1;(statearr_16428_18594[2] = null);\n(statearr_16428_18594[1] = 10);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16419 === 10))\n{var inst_16411 = (state_16418[2]);var state_16418__$1 = (function (){var statearr_16429 = state_16418;(statearr_16429[8] = inst_16411);\nreturn statearr_16429;\n})();var statearr_16430_18595 = state_16418__$1;(statearr_16430_18595[2] = null);\n(statearr_16430_18595[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16419 === 11))\n{var inst_16408 = (state_16418[2]);var state_16418__$1 = state_16418;var statearr_16431_18596 = state_16418__$1;(statearr_16431_18596[2] = inst_16408);\n(statearr_16431_18596[1] = 10);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18586,out))\n;return ((function (switch__13881__auto__,c__13951__auto___18586,out){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_16435 = [null,null,null,null,null,null,null,null,null];(statearr_16435[0] = state_machine__13882__auto__);\n(statearr_16435[1] = 1);\nreturn statearr_16435;\n});\nvar state_machine__13882__auto____1 = (function (state_16418){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_16418);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e16436){if((e16436 instanceof Object))\n{var ex__13885__auto__ = e16436;var statearr_16437_18597 = state_16418;(statearr_16437_18597[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_16418);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e16436;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18598 = state_16418;\nstate_16418 = G__18598;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_16418){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_16418);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18586,out))\n})();var state__13953__auto__ = (function (){var statearr_16438 = f__13952__auto__.call(null);(statearr_16438[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18586);\nreturn statearr_16438;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18586,out))\n);\nreturn out;\n});\nfilter_LT_ = function(p,ch,buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn filter_LT___2.call(this,p,ch);\ncase 3:\nreturn filter_LT___3.call(this,p,ch,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nfilter_LT_.cljs$core$IFn$_invoke$arity$2 = filter_LT___2;\nfilter_LT_.cljs$core$IFn$_invoke$arity$3 = filter_LT___3;\nreturn filter_LT_;\n})()\n;\n/**\n* Takes a predicate and a source channel, and returns a channel which\n* contains only the values taken from the source channel for which the\n* predicate returns false. The returned channel will be unbuffered by\n* default, or a buf-or-n can be supplied. The channel will close\n* when the source channel closes.\n*/\ncljs.core.async.remove_LT_ = (function() {\nvar remove_LT_ = null;\nvar remove_LT___2 = (function (p,ch){return remove_LT_.call(null,p,ch,null);\n});\nvar remove_LT___3 = (function (p,ch,buf_or_n){return cljs.core.async.filter_LT_.call(null,cljs.core.complement.call(null,p),ch,buf_or_n);\n});\nremove_LT_ = function(p,ch,buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn remove_LT___2.call(this,p,ch);\ncase 3:\nreturn remove_LT___3.call(this,p,ch,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nremove_LT_.cljs$core$IFn$_invoke$arity$2 = remove_LT___2;\nremove_LT_.cljs$core$IFn$_invoke$arity$3 = remove_LT___3;\nreturn remove_LT_;\n})()\n;\ncljs.core.async.mapcat_STAR_ = (function mapcat_STAR_(f,in$,out){var c__13951__auto__ = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto__){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto__){\nreturn (function (state_16590){var state_val_16591 = (state_16590[1]);if((state_val_16591 === 1))\n{var state_16590__$1 = state_16590;var statearr_16592_18599 = state_16590__$1;(statearr_16592_18599[2] = null);\n(statearr_16592_18599[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 2))\n{var state_16590__$1 = state_16590;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_16590__$1,4,in$);\n} else\n{if((state_val_16591 === 3))\n{var inst_16588 = (state_16590[2]);var state_16590__$1 = state_16590;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_16590__$1,inst_16588);\n} else\n{if((state_val_16591 === 4))\n{var inst_16536 = (state_16590[7]);var inst_16536__$1 = (state_16590[2]);var inst_16537 = (inst_16536__$1 == null);var state_16590__$1 = (function (){var statearr_16593 = state_16590;(statearr_16593[7] = inst_16536__$1);\nreturn statearr_16593;\n})();if(cljs.core.truth_(inst_16537))\n{var statearr_16594_18600 = state_16590__$1;(statearr_16594_18600[1] = 5);\n} else\n{var statearr_16595_18601 = state_16590__$1;(statearr_16595_18601[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 5))\n{var inst_16539 = cljs.core.async.close_BANG_.call(null,out);var state_16590__$1 = state_16590;var statearr_16596_18602 = state_16590__$1;(statearr_16596_18602[2] = inst_16539);\n(statearr_16596_18602[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 6))\n{var inst_16536 = (state_16590[7]);var inst_16541 = f.call(null,inst_16536);var inst_16546 = cljs.core.seq.call(null,inst_16541);var inst_16547 = inst_16546;var inst_16548 = null;var inst_16549 = 0;var inst_16550 = 0;var state_16590__$1 = (function (){var statearr_16597 = state_16590;(statearr_16597[8] = inst_16549);\n(statearr_16597[9] = inst_16548);\n(statearr_16597[10] = inst_16547);\n(statearr_16597[11] = inst_16550);\nreturn statearr_16597;\n})();var statearr_16598_18603 = state_16590__$1;(statearr_16598_18603[2] = null);\n(statearr_16598_18603[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 7))\n{var inst_16586 = (state_16590[2]);var state_16590__$1 = state_16590;var statearr_16599_18604 = state_16590__$1;(statearr_16599_18604[2] = inst_16586);\n(statearr_16599_18604[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 8))\n{var inst_16549 = (state_16590[8]);var inst_16550 = (state_16590[11]);var inst_16552 = (inst_16550 < inst_16549);var inst_16553 = inst_16552;var state_16590__$1 = state_16590;if(cljs.core.truth_(inst_16553))\n{var statearr_16600_18605 = state_16590__$1;(statearr_16600_18605[1] = 10);\n} else\n{var statearr_16601_18606 = state_16590__$1;(statearr_16601_18606[1] = 11);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 9))\n{var inst_16583 = (state_16590[2]);var state_16590__$1 = (function (){var statearr_16602 = state_16590;(statearr_16602[12] = inst_16583);\nreturn statearr_16602;\n})();var statearr_16603_18607 = state_16590__$1;(statearr_16603_18607[2] = null);\n(statearr_16603_18607[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 10))\n{var inst_16548 = (state_16590[9]);var inst_16550 = (state_16590[11]);var inst_16555 = cljs.core._nth.call(null,inst_16548,inst_16550);var state_16590__$1 = state_16590;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_16590__$1,13,out,inst_16555);\n} else\n{if((state_val_16591 === 11))\n{var inst_16547 = (state_16590[10]);var inst_16561 = (state_16590[13]);var inst_16561__$1 = cljs.core.seq.call(null,inst_16547);var state_16590__$1 = (function (){var statearr_16607 = state_16590;(statearr_16607[13] = inst_16561__$1);\nreturn statearr_16607;\n})();if(inst_16561__$1)\n{var statearr_16608_18608 = state_16590__$1;(statearr_16608_18608[1] = 14);\n} else\n{var statearr_16609_18609 = state_16590__$1;(statearr_16609_18609[1] = 15);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 12))\n{var inst_16581 = (state_16590[2]);var state_16590__$1 = state_16590;var statearr_16610_18610 = state_16590__$1;(statearr_16610_18610[2] = inst_16581);\n(statearr_16610_18610[1] = 9);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 13))\n{var inst_16549 = (state_16590[8]);var inst_16548 = (state_16590[9]);var inst_16547 = (state_16590[10]);var inst_16550 = (state_16590[11]);var inst_16557 = (state_16590[2]);var inst_16558 = (inst_16550 + 1);var tmp16604 = inst_16549;var tmp16605 = inst_16548;var tmp16606 = inst_16547;var inst_16547__$1 = tmp16606;var inst_16548__$1 = tmp16605;var inst_16549__$1 = tmp16604;var inst_16550__$1 = inst_16558;var state_16590__$1 = (function (){var statearr_16611 = state_16590;(statearr_16611[8] = inst_16549__$1);\n(statearr_16611[14] = inst_16557);\n(statearr_16611[9] = inst_16548__$1);\n(statearr_16611[10] = inst_16547__$1);\n(statearr_16611[11] = inst_16550__$1);\nreturn statearr_16611;\n})();var statearr_16612_18611 = state_16590__$1;(statearr_16612_18611[2] = null);\n(statearr_16612_18611[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 14))\n{var inst_16561 = (state_16590[13]);var inst_16563 = cljs.core.chunked_seq_QMARK_.call(null,inst_16561);var state_16590__$1 = state_16590;if(inst_16563)\n{var statearr_16613_18612 = state_16590__$1;(statearr_16613_18612[1] = 17);\n} else\n{var statearr_16614_18613 = state_16590__$1;(statearr_16614_18613[1] = 18);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 15))\n{var state_16590__$1 = state_16590;var statearr_16615_18614 = state_16590__$1;(statearr_16615_18614[2] = null);\n(statearr_16615_18614[1] = 16);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 16))\n{var inst_16579 = (state_16590[2]);var state_16590__$1 = state_16590;var statearr_16616_18615 = state_16590__$1;(statearr_16616_18615[2] = inst_16579);\n(statearr_16616_18615[1] = 12);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 17))\n{var inst_16561 = (state_16590[13]);var inst_16565 = cljs.core.chunk_first.call(null,inst_16561);var inst_16566 = cljs.core.chunk_rest.call(null,inst_16561);var inst_16567 = cljs.core.count.call(null,inst_16565);var inst_16547 = inst_16566;var inst_16548 = inst_16565;var inst_16549 = inst_16567;var inst_16550 = 0;var state_16590__$1 = (function (){var statearr_16617 = state_16590;(statearr_16617[8] = inst_16549);\n(statearr_16617[9] = inst_16548);\n(statearr_16617[10] = inst_16547);\n(statearr_16617[11] = inst_16550);\nreturn statearr_16617;\n})();var statearr_16618_18616 = state_16590__$1;(statearr_16618_18616[2] = null);\n(statearr_16618_18616[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 18))\n{var inst_16561 = (state_16590[13]);var inst_16570 = cljs.core.first.call(null,inst_16561);var state_16590__$1 = state_16590;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_16590__$1,20,out,inst_16570);\n} else\n{if((state_val_16591 === 19))\n{var inst_16576 = (state_16590[2]);var state_16590__$1 = state_16590;var statearr_16619_18617 = state_16590__$1;(statearr_16619_18617[2] = inst_16576);\n(statearr_16619_18617[1] = 16);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16591 === 20))\n{var inst_16561 = (state_16590[13]);var inst_16572 = (state_16590[2]);var inst_16573 = cljs.core.next.call(null,inst_16561);var inst_16547 = inst_16573;var inst_16548 = null;var inst_16549 = 0;var inst_16550 = 0;var state_16590__$1 = (function (){var statearr_16620 = state_16590;(statearr_16620[8] = inst_16549);\n(statearr_16620[9] = inst_16548);\n(statearr_16620[10] = inst_16547);\n(statearr_16620[11] = inst_16550);\n(statearr_16620[15] = inst_16572);\nreturn statearr_16620;\n})();var statearr_16621_18618 = state_16590__$1;(statearr_16621_18618[2] = null);\n(statearr_16621_18618[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto__))\n;return ((function (switch__13881__auto__,c__13951__auto__){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_16625 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];(statearr_16625[0] = state_machine__13882__auto__);\n(statearr_16625[1] = 1);\nreturn statearr_16625;\n});\nvar state_machine__13882__auto____1 = (function (state_16590){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_16590);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e16626){if((e16626 instanceof Object))\n{var ex__13885__auto__ = e16626;var statearr_16627_18619 = state_16590;(statearr_16627_18619[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_16590);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e16626;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18620 = state_16590;\nstate_16590 = G__18620;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_16590){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_16590);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto__))\n})();var state__13953__auto__ = (function (){var statearr_16628 = f__13952__auto__.call(null);(statearr_16628[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto__);\nreturn statearr_16628;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto__))\n);\nreturn c__13951__auto__;\n});\n/**\n* Takes a function and a source channel, and returns a channel which\n* contains the values in each collection produced by applying f to\n* each value taken from the source channel. f must return a\n* collection.\n* \n* The returned channel will be unbuffered by default, or a buf-or-n\n* can be supplied. The channel will close when the source channel\n* closes.\n*/\ncljs.core.async.mapcat_LT_ = (function() {\nvar mapcat_LT_ = null;\nvar mapcat_LT___2 = (function (f,in$){return mapcat_LT_.call(null,f,in$,null);\n});\nvar mapcat_LT___3 = (function (f,in$,buf_or_n){var out = cljs.core.async.chan.call(null,buf_or_n);cljs.core.async.mapcat_STAR_.call(null,f,in$,out);\nreturn out;\n});\nmapcat_LT_ = function(f,in$,buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn mapcat_LT___2.call(this,f,in$);\ncase 3:\nreturn mapcat_LT___3.call(this,f,in$,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nmapcat_LT_.cljs$core$IFn$_invoke$arity$2 = mapcat_LT___2;\nmapcat_LT_.cljs$core$IFn$_invoke$arity$3 = mapcat_LT___3;\nreturn mapcat_LT_;\n})()\n;\n/**\n* Takes a function and a target channel, and returns a channel which\n* applies f to each value put, then supplies each element of the result\n* to the target channel. f must return a collection.\n* \n* The returned channel will be unbuffered by default, or a buf-or-n\n* can be supplied. The target channel will be closed when the source\n* channel closes.\n*/\ncljs.core.async.mapcat_GT_ = (function() {\nvar mapcat_GT_ = null;\nvar mapcat_GT___2 = (function (f,out){return mapcat_GT_.call(null,f,out,null);\n});\nvar mapcat_GT___3 = (function (f,out,buf_or_n){var in$ = cljs.core.async.chan.call(null,buf_or_n);cljs.core.async.mapcat_STAR_.call(null,f,in$,out);\nreturn in$;\n});\nmapcat_GT_ = function(f,out,buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn mapcat_GT___2.call(this,f,out);\ncase 3:\nreturn mapcat_GT___3.call(this,f,out,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nmapcat_GT_.cljs$core$IFn$_invoke$arity$2 = mapcat_GT___2;\nmapcat_GT_.cljs$core$IFn$_invoke$arity$3 = mapcat_GT___3;\nreturn mapcat_GT_;\n})()\n;\n/**\n* Takes elements from the from channel and supplies them to the to\n* channel. By default, the to channel will be closed when the\n* from channel closes, but can be determined by the close?\n* parameter.\n*/\ncljs.core.async.pipe = (function() {\nvar pipe = null;\nvar pipe__2 = (function (from,to){return pipe.call(null,from,to,true);\n});\nvar pipe__3 = (function (from,to,close_QMARK_){var c__13951__auto___18621 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18621){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18621){\nreturn (function (state_16688){var state_val_16689 = (state_16688[1]);if((state_val_16689 === 1))\n{var state_16688__$1 = state_16688;var statearr_16690_18622 = state_16688__$1;(statearr_16690_18622[2] = null);\n(statearr_16690_18622[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16689 === 2))\n{var state_16688__$1 = state_16688;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_16688__$1,4,from);\n} else\n{if((state_val_16689 === 3))\n{var inst_16686 = (state_16688[2]);var state_16688__$1 = state_16688;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_16688__$1,inst_16686);\n} else\n{if((state_val_16689 === 4))\n{var inst_16671 = (state_16688[7]);var inst_16671__$1 = (state_16688[2]);var inst_16672 = (inst_16671__$1 == null);var state_16688__$1 = (function (){var statearr_16691 = state_16688;(statearr_16691[7] = inst_16671__$1);\nreturn statearr_16691;\n})();if(cljs.core.truth_(inst_16672))\n{var statearr_16692_18623 = state_16688__$1;(statearr_16692_18623[1] = 5);\n} else\n{var statearr_16693_18624 = state_16688__$1;(statearr_16693_18624[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16689 === 5))\n{var state_16688__$1 = state_16688;if(cljs.core.truth_(close_QMARK_))\n{var statearr_16694_18625 = state_16688__$1;(statearr_16694_18625[1] = 8);\n} else\n{var statearr_16695_18626 = state_16688__$1;(statearr_16695_18626[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16689 === 6))\n{var inst_16671 = (state_16688[7]);var state_16688__$1 = state_16688;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_16688__$1,11,to,inst_16671);\n} else\n{if((state_val_16689 === 7))\n{var inst_16684 = (state_16688[2]);var state_16688__$1 = state_16688;var statearr_16696_18627 = state_16688__$1;(statearr_16696_18627[2] = inst_16684);\n(statearr_16696_18627[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16689 === 8))\n{var inst_16675 = cljs.core.async.close_BANG_.call(null,to);var state_16688__$1 = state_16688;var statearr_16697_18628 = state_16688__$1;(statearr_16697_18628[2] = inst_16675);\n(statearr_16697_18628[1] = 10);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16689 === 9))\n{var state_16688__$1 = state_16688;var statearr_16698_18629 = state_16688__$1;(statearr_16698_18629[2] = null);\n(statearr_16698_18629[1] = 10);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16689 === 10))\n{var inst_16678 = (state_16688[2]);var state_16688__$1 = state_16688;var statearr_16699_18630 = state_16688__$1;(statearr_16699_18630[2] = inst_16678);\n(statearr_16699_18630[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16689 === 11))\n{var inst_16681 = (state_16688[2]);var state_16688__$1 = (function (){var statearr_16700 = state_16688;(statearr_16700[8] = inst_16681);\nreturn statearr_16700;\n})();var statearr_16701_18631 = state_16688__$1;(statearr_16701_18631[2] = null);\n(statearr_16701_18631[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18621))\n;return ((function (switch__13881__auto__,c__13951__auto___18621){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_16705 = [null,null,null,null,null,null,null,null,null];(statearr_16705[0] = state_machine__13882__auto__);\n(statearr_16705[1] = 1);\nreturn statearr_16705;\n});\nvar state_machine__13882__auto____1 = (function (state_16688){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_16688);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e16706){if((e16706 instanceof Object))\n{var ex__13885__auto__ = e16706;var statearr_16707_18632 = state_16688;(statearr_16707_18632[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_16688);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e16706;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18633 = state_16688;\nstate_16688 = G__18633;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_16688){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_16688);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18621))\n})();var state__13953__auto__ = (function (){var statearr_16708 = f__13952__auto__.call(null);(statearr_16708[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18621);\nreturn statearr_16708;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18621))\n);\nreturn to;\n});\npipe = function(from,to,close_QMARK_){\nswitch(arguments.length){\ncase 2:\nreturn pipe__2.call(this,from,to);\ncase 3:\nreturn pipe__3.call(this,from,to,close_QMARK_);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\npipe.cljs$core$IFn$_invoke$arity$2 = pipe__2;\npipe.cljs$core$IFn$_invoke$arity$3 = pipe__3;\nreturn pipe;\n})()\n;\n/**\n* Takes a predicate and a source channel and returns a vector of two\n* channels, the first of which will contain the values for which the\n* predicate returned true, the second those for which it returned\n* false.\n* \n* The out channels will be unbuffered by default, or two buf-or-ns can\n* be supplied. The channels will close after the source channel has\n* closed.\n*/\ncljs.core.async.split = (function() {\nvar split = null;\nvar split__2 = (function (p,ch){return split.call(null,p,ch,null,null);\n});\nvar split__4 = (function (p,ch,t_buf_or_n,f_buf_or_n){var tc = cljs.core.async.chan.call(null,t_buf_or_n);var fc = cljs.core.async.chan.call(null,f_buf_or_n);var c__13951__auto___18634 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18634,tc,fc){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18634,tc,fc){\nreturn (function (state_16773){var state_val_16774 = (state_16773[1]);if((state_val_16774 === 1))\n{var state_16773__$1 = state_16773;var statearr_16775_18635 = state_16773__$1;(statearr_16775_18635[2] = null);\n(statearr_16775_18635[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16774 === 2))\n{var state_16773__$1 = state_16773;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_16773__$1,4,ch);\n} else\n{if((state_val_16774 === 3))\n{var inst_16771 = (state_16773[2]);var state_16773__$1 = state_16773;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_16773__$1,inst_16771);\n} else\n{if((state_val_16774 === 4))\n{var inst_16754 = (state_16773[7]);var inst_16754__$1 = (state_16773[2]);var inst_16755 = (inst_16754__$1 == null);var state_16773__$1 = (function (){var statearr_16776 = state_16773;(statearr_16776[7] = inst_16754__$1);\nreturn statearr_16776;\n})();if(cljs.core.truth_(inst_16755))\n{var statearr_16777_18636 = state_16773__$1;(statearr_16777_18636[1] = 5);\n} else\n{var statearr_16778_18637 = state_16773__$1;(statearr_16778_18637[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16774 === 5))\n{var inst_16757 = cljs.core.async.close_BANG_.call(null,tc);var inst_16758 = cljs.core.async.close_BANG_.call(null,fc);var state_16773__$1 = (function (){var statearr_16779 = state_16773;(statearr_16779[8] = inst_16757);\nreturn statearr_16779;\n})();var statearr_16780_18638 = state_16773__$1;(statearr_16780_18638[2] = inst_16758);\n(statearr_16780_18638[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16774 === 6))\n{var inst_16754 = (state_16773[7]);var inst_16760 = p.call(null,inst_16754);var state_16773__$1 = state_16773;if(cljs.core.truth_(inst_16760))\n{var statearr_16781_18639 = state_16773__$1;(statearr_16781_18639[1] = 9);\n} else\n{var statearr_16782_18640 = state_16773__$1;(statearr_16782_18640[1] = 10);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16774 === 7))\n{var inst_16769 = (state_16773[2]);var state_16773__$1 = state_16773;var statearr_16783_18641 = state_16773__$1;(statearr_16783_18641[2] = inst_16769);\n(statearr_16783_18641[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16774 === 8))\n{var inst_16766 = (state_16773[2]);var state_16773__$1 = (function (){var statearr_16784 = state_16773;(statearr_16784[9] = inst_16766);\nreturn statearr_16784;\n})();var statearr_16785_18642 = state_16773__$1;(statearr_16785_18642[2] = null);\n(statearr_16785_18642[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16774 === 9))\n{var state_16773__$1 = state_16773;var statearr_16786_18643 = state_16773__$1;(statearr_16786_18643[2] = tc);\n(statearr_16786_18643[1] = 11);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16774 === 10))\n{var state_16773__$1 = state_16773;var statearr_16787_18644 = state_16773__$1;(statearr_16787_18644[2] = fc);\n(statearr_16787_18644[1] = 11);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16774 === 11))\n{var inst_16754 = (state_16773[7]);var inst_16764 = (state_16773[2]);var state_16773__$1 = state_16773;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_16773__$1,8,inst_16764,inst_16754);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18634,tc,fc))\n;return ((function (switch__13881__auto__,c__13951__auto___18634,tc,fc){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_16791 = [null,null,null,null,null,null,null,null,null,null];(statearr_16791[0] = state_machine__13882__auto__);\n(statearr_16791[1] = 1);\nreturn statearr_16791;\n});\nvar state_machine__13882__auto____1 = (function (state_16773){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_16773);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e16792){if((e16792 instanceof Object))\n{var ex__13885__auto__ = e16792;var statearr_16793_18645 = state_16773;(statearr_16793_18645[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_16773);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e16792;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18646 = state_16773;\nstate_16773 = G__18646;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_16773){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_16773);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18634,tc,fc))\n})();var state__13953__auto__ = (function (){var statearr_16794 = f__13952__auto__.call(null);(statearr_16794[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18634);\nreturn statearr_16794;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18634,tc,fc))\n);\nreturn new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [tc,fc], null);\n});\nsplit = function(p,ch,t_buf_or_n,f_buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn split__2.call(this,p,ch);\ncase 4:\nreturn split__4.call(this,p,ch,t_buf_or_n,f_buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nsplit.cljs$core$IFn$_invoke$arity$2 = split__2;\nsplit.cljs$core$IFn$_invoke$arity$4 = split__4;\nreturn split;\n})()\n;\n/**\n* f should be a function of 2 arguments. Returns a channel containing\n* the single result of applying f to init and the first item from the\n* channel, then applying f to that result and the 2nd item, etc. If\n* the channel closes without yielding items, returns init and f is not\n* called. ch must close before reduce produces a result.\n*/\ncljs.core.async.reduce = (function reduce(f,init,ch){var c__13951__auto__ = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto__){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto__){\nreturn (function (state_16841){var state_val_16842 = (state_16841[1]);if((state_val_16842 === 7))\n{var inst_16837 = (state_16841[2]);var state_16841__$1 = state_16841;var statearr_16843_18647 = state_16841__$1;(statearr_16843_18647[2] = inst_16837);\n(statearr_16843_18647[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16842 === 6))\n{var inst_16827 = (state_16841[7]);var inst_16830 = (state_16841[8]);var inst_16834 = f.call(null,inst_16827,inst_16830);var inst_16827__$1 = inst_16834;var state_16841__$1 = (function (){var statearr_16844 = state_16841;(statearr_16844[7] = inst_16827__$1);\nreturn statearr_16844;\n})();var statearr_16845_18648 = state_16841__$1;(statearr_16845_18648[2] = null);\n(statearr_16845_18648[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16842 === 5))\n{var inst_16827 = (state_16841[7]);var state_16841__$1 = state_16841;var statearr_16846_18649 = state_16841__$1;(statearr_16846_18649[2] = inst_16827);\n(statearr_16846_18649[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16842 === 4))\n{var inst_16830 = (state_16841[8]);var inst_16830__$1 = (state_16841[2]);var inst_16831 = (inst_16830__$1 == null);var state_16841__$1 = (function (){var statearr_16847 = state_16841;(statearr_16847[8] = inst_16830__$1);\nreturn statearr_16847;\n})();if(cljs.core.truth_(inst_16831))\n{var statearr_16848_18650 = state_16841__$1;(statearr_16848_18650[1] = 5);\n} else\n{var statearr_16849_18651 = state_16841__$1;(statearr_16849_18651[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16842 === 3))\n{var inst_16839 = (state_16841[2]);var state_16841__$1 = state_16841;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_16841__$1,inst_16839);\n} else\n{if((state_val_16842 === 2))\n{var state_16841__$1 = state_16841;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_16841__$1,4,ch);\n} else\n{if((state_val_16842 === 1))\n{var inst_16827 = init;var state_16841__$1 = (function (){var statearr_16850 = state_16841;(statearr_16850[7] = inst_16827);\nreturn statearr_16850;\n})();var statearr_16851_18652 = state_16841__$1;(statearr_16851_18652[2] = null);\n(statearr_16851_18652[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto__))\n;return ((function (switch__13881__auto__,c__13951__auto__){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_16855 = [null,null,null,null,null,null,null,null,null];(statearr_16855[0] = state_machine__13882__auto__);\n(statearr_16855[1] = 1);\nreturn statearr_16855;\n});\nvar state_machine__13882__auto____1 = (function (state_16841){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_16841);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e16856){if((e16856 instanceof Object))\n{var ex__13885__auto__ = e16856;var statearr_16857_18653 = state_16841;(statearr_16857_18653[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_16841);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e16856;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18654 = state_16841;\nstate_16841 = G__18654;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_16841){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_16841);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto__))\n})();var state__13953__auto__ = (function (){var statearr_16858 = f__13952__auto__.call(null);(statearr_16858[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto__);\nreturn statearr_16858;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto__))\n);\nreturn c__13951__auto__;\n});\n/**\n* Puts the contents of coll into the supplied channel.\n* \n* By default the channel will be closed after the items are copied,\n* but can be determined by the close? parameter.\n* \n* Returns a channel which will close after the items are copied.\n*/\ncljs.core.async.onto_chan = (function() {\nvar onto_chan = null;\nvar onto_chan__2 = (function (ch,coll){return onto_chan.call(null,ch,coll,true);\n});\nvar onto_chan__3 = (function (ch,coll,close_QMARK_){var c__13951__auto__ = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto__){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto__){\nreturn (function (state_16920){var state_val_16921 = (state_16920[1]);if((state_val_16921 === 1))\n{var inst_16900 = cljs.core.seq.call(null,coll);var inst_16901 = inst_16900;var state_16920__$1 = (function (){var statearr_16922 = state_16920;(statearr_16922[7] = inst_16901);\nreturn statearr_16922;\n})();var statearr_16923_18655 = state_16920__$1;(statearr_16923_18655[2] = null);\n(statearr_16923_18655[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16921 === 2))\n{var inst_16901 = (state_16920[7]);var state_16920__$1 = state_16920;if(cljs.core.truth_(inst_16901))\n{var statearr_16924_18656 = state_16920__$1;(statearr_16924_18656[1] = 4);\n} else\n{var statearr_16925_18657 = state_16920__$1;(statearr_16925_18657[1] = 5);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16921 === 3))\n{var inst_16918 = (state_16920[2]);var state_16920__$1 = state_16920;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_16920__$1,inst_16918);\n} else\n{if((state_val_16921 === 4))\n{var inst_16901 = (state_16920[7]);var inst_16904 = cljs.core.first.call(null,inst_16901);var state_16920__$1 = state_16920;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_16920__$1,7,ch,inst_16904);\n} else\n{if((state_val_16921 === 5))\n{var state_16920__$1 = state_16920;if(cljs.core.truth_(close_QMARK_))\n{var statearr_16926_18658 = state_16920__$1;(statearr_16926_18658[1] = 8);\n} else\n{var statearr_16927_18659 = state_16920__$1;(statearr_16927_18659[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16921 === 6))\n{var inst_16916 = (state_16920[2]);var state_16920__$1 = state_16920;var statearr_16928_18660 = state_16920__$1;(statearr_16928_18660[2] = inst_16916);\n(statearr_16928_18660[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16921 === 7))\n{var inst_16901 = (state_16920[7]);var inst_16906 = (state_16920[2]);var inst_16907 = cljs.core.next.call(null,inst_16901);var inst_16901__$1 = inst_16907;var state_16920__$1 = (function (){var statearr_16929 = state_16920;(statearr_16929[7] = inst_16901__$1);\n(statearr_16929[8] = inst_16906);\nreturn statearr_16929;\n})();var statearr_16930_18661 = state_16920__$1;(statearr_16930_18661[2] = null);\n(statearr_16930_18661[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16921 === 8))\n{var inst_16911 = cljs.core.async.close_BANG_.call(null,ch);var state_16920__$1 = state_16920;var statearr_16931_18662 = state_16920__$1;(statearr_16931_18662[2] = inst_16911);\n(statearr_16931_18662[1] = 10);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16921 === 9))\n{var state_16920__$1 = state_16920;var statearr_16932_18663 = state_16920__$1;(statearr_16932_18663[2] = null);\n(statearr_16932_18663[1] = 10);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_16921 === 10))\n{var inst_16914 = (state_16920[2]);var state_16920__$1 = state_16920;var statearr_16933_18664 = state_16920__$1;(statearr_16933_18664[2] = inst_16914);\n(statearr_16933_18664[1] = 6);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto__))\n;return ((function (switch__13881__auto__,c__13951__auto__){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_16937 = [null,null,null,null,null,null,null,null,null];(statearr_16937[0] = state_machine__13882__auto__);\n(statearr_16937[1] = 1);\nreturn statearr_16937;\n});\nvar state_machine__13882__auto____1 = (function (state_16920){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_16920);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e16938){if((e16938 instanceof Object))\n{var ex__13885__auto__ = e16938;var statearr_16939_18665 = state_16920;(statearr_16939_18665[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_16920);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e16938;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18666 = state_16920;\nstate_16920 = G__18666;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_16920){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_16920);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto__))\n})();var state__13953__auto__ = (function (){var statearr_16940 = f__13952__auto__.call(null);(statearr_16940[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto__);\nreturn statearr_16940;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto__))\n);\nreturn c__13951__auto__;\n});\nonto_chan = function(ch,coll,close_QMARK_){\nswitch(arguments.length){\ncase 2:\nreturn onto_chan__2.call(this,ch,coll);\ncase 3:\nreturn onto_chan__3.call(this,ch,coll,close_QMARK_);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nonto_chan.cljs$core$IFn$_invoke$arity$2 = onto_chan__2;\nonto_chan.cljs$core$IFn$_invoke$arity$3 = onto_chan__3;\nreturn onto_chan;\n})()\n;\n/**\n* Creates and returns a channel which contains the contents of coll,\n* closing when exhausted.\n*/\ncljs.core.async.to_chan = (function to_chan(coll){var ch = cljs.core.async.chan.call(null,cljs.core.bounded_count.call(null,100,coll));cljs.core.async.onto_chan.call(null,ch,coll);\nreturn ch;\n});\ncljs.core.async.Mux = (function (){var obj16942 = {};return obj16942;\n})();\ncljs.core.async.muxch_STAR_ = (function muxch_STAR_(_){if((function (){var and__4872__auto__ = _;if(and__4872__auto__)\n{return _.cljs$core$async$Mux$muxch_STAR_$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return _.cljs$core$async$Mux$muxch_STAR_$arity$1(_);\n} else\n{var x__5511__auto__ = (((_ == null))?null:_);return (function (){var or__4884__auto__ = (cljs.core.async.muxch_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.muxch_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mux.muxch*\",_);\n}\n}\n})().call(null,_);\n}\n});\ncljs.core.async.Mult = (function (){var obj16944 = {};return obj16944;\n})();\ncljs.core.async.tap_STAR_ = (function tap_STAR_(m,ch,close_QMARK_){if((function (){var and__4872__auto__ = m;if(and__4872__auto__)\n{return m.cljs$core$async$Mult$tap_STAR_$arity$3;\n} else\n{return and__4872__auto__;\n}\n})())\n{return m.cljs$core$async$Mult$tap_STAR_$arity$3(m,ch,close_QMARK_);\n} else\n{var x__5511__auto__ = (((m == null))?null:m);return (function (){var or__4884__auto__ = (cljs.core.async.tap_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.tap_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mult.tap*\",m);\n}\n}\n})().call(null,m,ch,close_QMARK_);\n}\n});\ncljs.core.async.untap_STAR_ = (function untap_STAR_(m,ch){if((function (){var and__4872__auto__ = m;if(and__4872__auto__)\n{return m.cljs$core$async$Mult$untap_STAR_$arity$2;\n} else\n{return and__4872__auto__;\n}\n})())\n{return m.cljs$core$async$Mult$untap_STAR_$arity$2(m,ch);\n} else\n{var x__5511__auto__ = (((m == null))?null:m);return (function (){var or__4884__auto__ = (cljs.core.async.untap_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.untap_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mult.untap*\",m);\n}\n}\n})().call(null,m,ch);\n}\n});\ncljs.core.async.untap_all_STAR_ = (function untap_all_STAR_(m){if((function (){var and__4872__auto__ = m;if(and__4872__auto__)\n{return m.cljs$core$async$Mult$untap_all_STAR_$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return m.cljs$core$async$Mult$untap_all_STAR_$arity$1(m);\n} else\n{var x__5511__auto__ = (((m == null))?null:m);return (function (){var or__4884__auto__ = (cljs.core.async.untap_all_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.untap_all_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mult.untap-all*\",m);\n}\n}\n})().call(null,m);\n}\n});\n/**\n* Creates and returns a mult(iple) of the supplied channel. Channels\n* containing copies of the channel can be created with 'tap', and\n* detached with 'untap'.\n* \n* Each item is distributed to all taps in parallel and synchronously,\n* i.e. each tap must accept before the next item is distributed. Use\n* buffering/windowing to prevent slow taps from holding up the mult.\n* \n* Items received when there are no taps get dropped.\n* \n* If a tap put throws an exception, it will be removed from the mult.\n*/\ncljs.core.async.mult = (function mult(ch){var cs = cljs.core.atom.call(null,cljs.core.PersistentArrayMap.EMPTY);var m = (function (){if(typeof cljs.core.async.t17168 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t17168 = (function (cs,ch,mult,meta17169){\nthis.cs = cs;\nthis.ch = ch;\nthis.mult = mult;\nthis.meta17169 = meta17169;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t17168.cljs$lang$type = true;\ncljs.core.async.t17168.cljs$lang$ctorStr = \"cljs.core.async/t17168\";\ncljs.core.async.t17168.cljs$lang$ctorPrWriter = ((function (cs){\nreturn (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t17168\");\n});})(cs))\n;\ncljs.core.async.t17168.prototype.cljs$core$async$Mult$ = true;\ncljs.core.async.t17168.prototype.cljs$core$async$Mult$tap_STAR_$arity$3 = ((function (cs){\nreturn (function (_,ch__$2,close_QMARK_){var self__ = this;\nvar ___$1 = this;cljs.core.swap_BANG_.call(null,self__.cs,cljs.core.assoc,ch__$2,close_QMARK_);\nreturn null;\n});})(cs))\n;\ncljs.core.async.t17168.prototype.cljs$core$async$Mult$untap_STAR_$arity$2 = ((function (cs){\nreturn (function (_,ch__$2){var self__ = this;\nvar ___$1 = this;cljs.core.swap_BANG_.call(null,self__.cs,cljs.core.dissoc,ch__$2);\nreturn null;\n});})(cs))\n;\ncljs.core.async.t17168.prototype.cljs$core$async$Mult$untap_all_STAR_$arity$1 = ((function (cs){\nreturn (function (_){var self__ = this;\nvar ___$1 = this;cljs.core.reset_BANG_.call(null,self__.cs,cljs.core.PersistentArrayMap.EMPTY);\nreturn null;\n});})(cs))\n;\ncljs.core.async.t17168.prototype.cljs$core$async$Mux$ = true;\ncljs.core.async.t17168.prototype.cljs$core$async$Mux$muxch_STAR_$arity$1 = ((function (cs){\nreturn (function (_){var self__ = this;\nvar ___$1 = this;return self__.ch;\n});})(cs))\n;\ncljs.core.async.t17168.prototype.cljs$core$IMeta$_meta$arity$1 = ((function (cs){\nreturn (function (_17170){var self__ = this;\nvar _17170__$1 = this;return self__.meta17169;\n});})(cs))\n;\ncljs.core.async.t17168.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = ((function (cs){\nreturn (function (_17170,meta17169__$1){var self__ = this;\nvar _17170__$1 = this;return (new cljs.core.async.t17168(self__.cs,self__.ch,self__.mult,meta17169__$1));\n});})(cs))\n;\ncljs.core.async.__GT_t17168 = ((function (cs){\nreturn (function __GT_t17168(cs__$1,ch__$1,mult__$1,meta17169){return (new cljs.core.async.t17168(cs__$1,ch__$1,mult__$1,meta17169));\n});})(cs))\n;\n}\nreturn (new cljs.core.async.t17168(cs,ch,mult,null));\n})();var dchan = cljs.core.async.chan.call(null,1);var dctr = cljs.core.atom.call(null,null);var done = ((function (cs,m,dchan,dctr){\nreturn (function (){if((cljs.core.swap_BANG_.call(null,dctr,cljs.core.dec) === 0))\n{return cljs.core.async.put_BANG_.call(null,dchan,true);\n} else\n{return null;\n}\n});})(cs,m,dchan,dctr))\n;var c__13951__auto___18667 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18667,cs,m,dchan,dctr,done){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18667,cs,m,dchan,dctr,done){\nreturn (function (state_17305){var state_val_17306 = (state_17305[1]);if((state_val_17306 === 32))\n{var inst_17249 = (state_17305[7]);var inst_17173 = (state_17305[8]);var _ = cljs.core.async.impl.ioc_helpers.add_exception_frame.call(null,state_17305,31,Object,null,30);var inst_17256 = cljs.core.async.put_BANG_.call(null,inst_17249,inst_17173,done);var state_17305__$1 = state_17305;var statearr_17307_18668 = state_17305__$1;(statearr_17307_18668[2] = inst_17256);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17305__$1);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 1))\n{var state_17305__$1 = state_17305;var statearr_17308_18669 = state_17305__$1;(statearr_17308_18669[2] = null);\n(statearr_17308_18669[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 33))\n{var inst_17262 = (state_17305[9]);var inst_17264 = cljs.core.chunked_seq_QMARK_.call(null,inst_17262);var state_17305__$1 = state_17305;if(inst_17264)\n{var statearr_17309_18670 = state_17305__$1;(statearr_17309_18670[1] = 36);\n} else\n{var statearr_17310_18671 = state_17305__$1;(statearr_17310_18671[1] = 37);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 2))\n{var state_17305__$1 = state_17305;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_17305__$1,4,ch);\n} else\n{if((state_val_17306 === 34))\n{var state_17305__$1 = state_17305;var statearr_17311_18672 = state_17305__$1;(statearr_17311_18672[2] = null);\n(statearr_17311_18672[1] = 35);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 3))\n{var inst_17303 = (state_17305[2]);var state_17305__$1 = state_17305;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_17305__$1,inst_17303);\n} else\n{if((state_val_17306 === 35))\n{var inst_17287 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17312_18673 = state_17305__$1;(statearr_17312_18673[2] = inst_17287);\n(statearr_17312_18673[1] = 29);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 4))\n{var inst_17173 = (state_17305[8]);var inst_17173__$1 = (state_17305[2]);var inst_17174 = (inst_17173__$1 == null);var state_17305__$1 = (function (){var statearr_17313 = state_17305;(statearr_17313[8] = inst_17173__$1);\nreturn statearr_17313;\n})();if(cljs.core.truth_(inst_17174))\n{var statearr_17314_18674 = state_17305__$1;(statearr_17314_18674[1] = 5);\n} else\n{var statearr_17315_18675 = state_17305__$1;(statearr_17315_18675[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 36))\n{var inst_17262 = (state_17305[9]);var inst_17266 = cljs.core.chunk_first.call(null,inst_17262);var inst_17267 = cljs.core.chunk_rest.call(null,inst_17262);var inst_17268 = cljs.core.count.call(null,inst_17266);var inst_17241 = inst_17267;var inst_17242 = inst_17266;var inst_17243 = inst_17268;var inst_17244 = 0;var state_17305__$1 = (function (){var statearr_17316 = state_17305;(statearr_17316[10] = inst_17242);\n(statearr_17316[11] = inst_17241);\n(statearr_17316[12] = inst_17244);\n(statearr_17316[13] = inst_17243);\nreturn statearr_17316;\n})();var statearr_17317_18676 = state_17305__$1;(statearr_17317_18676[2] = null);\n(statearr_17317_18676[1] = 25);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 5))\n{var inst_17180 = cljs.core.deref.call(null,cs);var inst_17181 = cljs.core.seq.call(null,inst_17180);var inst_17182 = inst_17181;var inst_17183 = null;var inst_17184 = 0;var inst_17185 = 0;var state_17305__$1 = (function (){var statearr_17318 = state_17305;(statearr_17318[14] = inst_17182);\n(statearr_17318[15] = inst_17183);\n(statearr_17318[16] = inst_17184);\n(statearr_17318[17] = inst_17185);\nreturn statearr_17318;\n})();var statearr_17319_18677 = state_17305__$1;(statearr_17319_18677[2] = null);\n(statearr_17319_18677[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 37))\n{var inst_17262 = (state_17305[9]);var inst_17271 = cljs.core.first.call(null,inst_17262);var state_17305__$1 = (function (){var statearr_17320 = state_17305;(statearr_17320[18] = inst_17271);\nreturn statearr_17320;\n})();var statearr_17321_18678 = state_17305__$1;(statearr_17321_18678[2] = null);\n(statearr_17321_18678[1] = 41);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 6))\n{var inst_17233 = (state_17305[19]);var inst_17232 = cljs.core.deref.call(null,cs);var inst_17233__$1 = cljs.core.keys.call(null,inst_17232);var inst_17234 = cljs.core.count.call(null,inst_17233__$1);var inst_17235 = cljs.core.reset_BANG_.call(null,dctr,inst_17234);var inst_17240 = cljs.core.seq.call(null,inst_17233__$1);var inst_17241 = inst_17240;var inst_17242 = null;var inst_17243 = 0;var inst_17244 = 0;var state_17305__$1 = (function (){var statearr_17322 = state_17305;(statearr_17322[20] = inst_17235);\n(statearr_17322[19] = inst_17233__$1);\n(statearr_17322[10] = inst_17242);\n(statearr_17322[11] = inst_17241);\n(statearr_17322[12] = inst_17244);\n(statearr_17322[13] = inst_17243);\nreturn statearr_17322;\n})();var statearr_17323_18679 = state_17305__$1;(statearr_17323_18679[2] = null);\n(statearr_17323_18679[1] = 25);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 38))\n{var inst_17284 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17324_18680 = state_17305__$1;(statearr_17324_18680[2] = inst_17284);\n(statearr_17324_18680[1] = 35);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 7))\n{var inst_17301 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17325_18681 = state_17305__$1;(statearr_17325_18681[2] = inst_17301);\n(statearr_17325_18681[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 39))\n{var inst_17262 = (state_17305[9]);var inst_17280 = (state_17305[2]);var inst_17281 = cljs.core.next.call(null,inst_17262);var inst_17241 = inst_17281;var inst_17242 = null;var inst_17243 = 0;var inst_17244 = 0;var state_17305__$1 = (function (){var statearr_17326 = state_17305;(statearr_17326[10] = inst_17242);\n(statearr_17326[11] = inst_17241);\n(statearr_17326[12] = inst_17244);\n(statearr_17326[13] = inst_17243);\n(statearr_17326[21] = inst_17280);\nreturn statearr_17326;\n})();var statearr_17327_18682 = state_17305__$1;(statearr_17327_18682[2] = null);\n(statearr_17327_18682[1] = 25);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 8))\n{var inst_17184 = (state_17305[16]);var inst_17185 = (state_17305[17]);var inst_17187 = (inst_17185 < inst_17184);var inst_17188 = inst_17187;var state_17305__$1 = state_17305;if(cljs.core.truth_(inst_17188))\n{var statearr_17328_18683 = state_17305__$1;(statearr_17328_18683[1] = 10);\n} else\n{var statearr_17329_18684 = state_17305__$1;(statearr_17329_18684[1] = 11);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 40))\n{var inst_17271 = (state_17305[18]);var inst_17272 = (state_17305[2]);var inst_17273 = cljs.core.swap_BANG_.call(null,dctr,cljs.core.dec);var inst_17274 = cljs.core.async.untap_STAR_.call(null,m,inst_17271);var state_17305__$1 = (function (){var statearr_17330 = state_17305;(statearr_17330[22] = inst_17272);\n(statearr_17330[23] = inst_17273);\nreturn statearr_17330;\n})();var statearr_17331_18685 = state_17305__$1;(statearr_17331_18685[2] = inst_17274);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17305__$1);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 9))\n{var inst_17230 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17332_18686 = state_17305__$1;(statearr_17332_18686[2] = inst_17230);\n(statearr_17332_18686[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 41))\n{var inst_17173 = (state_17305[8]);var inst_17271 = (state_17305[18]);var _ = cljs.core.async.impl.ioc_helpers.add_exception_frame.call(null,state_17305,40,Object,null,39);var inst_17278 = cljs.core.async.put_BANG_.call(null,inst_17271,inst_17173,done);var state_17305__$1 = state_17305;var statearr_17333_18687 = state_17305__$1;(statearr_17333_18687[2] = inst_17278);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17305__$1);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 10))\n{var inst_17183 = (state_17305[15]);var inst_17185 = (state_17305[17]);var inst_17191 = cljs.core._nth.call(null,inst_17183,inst_17185);var inst_17192 = cljs.core.nth.call(null,inst_17191,0,null);var inst_17193 = cljs.core.nth.call(null,inst_17191,1,null);var state_17305__$1 = (function (){var statearr_17334 = state_17305;(statearr_17334[24] = inst_17192);\nreturn statearr_17334;\n})();if(cljs.core.truth_(inst_17193))\n{var statearr_17335_18688 = state_17305__$1;(statearr_17335_18688[1] = 13);\n} else\n{var statearr_17336_18689 = state_17305__$1;(statearr_17336_18689[1] = 14);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 42))\n{var state_17305__$1 = state_17305;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_17305__$1,45,dchan);\n} else\n{if((state_val_17306 === 11))\n{var inst_17182 = (state_17305[14]);var inst_17202 = (state_17305[25]);var inst_17202__$1 = cljs.core.seq.call(null,inst_17182);var state_17305__$1 = (function (){var statearr_17337 = state_17305;(statearr_17337[25] = inst_17202__$1);\nreturn statearr_17337;\n})();if(inst_17202__$1)\n{var statearr_17338_18690 = state_17305__$1;(statearr_17338_18690[1] = 16);\n} else\n{var statearr_17339_18691 = state_17305__$1;(statearr_17339_18691[1] = 17);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 43))\n{var state_17305__$1 = state_17305;var statearr_17340_18692 = state_17305__$1;(statearr_17340_18692[2] = null);\n(statearr_17340_18692[1] = 44);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 12))\n{var inst_17228 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17341_18693 = state_17305__$1;(statearr_17341_18693[2] = inst_17228);\n(statearr_17341_18693[1] = 9);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 44))\n{var inst_17298 = (state_17305[2]);var state_17305__$1 = (function (){var statearr_17342 = state_17305;(statearr_17342[26] = inst_17298);\nreturn statearr_17342;\n})();var statearr_17343_18694 = state_17305__$1;(statearr_17343_18694[2] = null);\n(statearr_17343_18694[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 13))\n{var inst_17192 = (state_17305[24]);var inst_17195 = cljs.core.async.close_BANG_.call(null,inst_17192);var state_17305__$1 = state_17305;var statearr_17344_18695 = state_17305__$1;(statearr_17344_18695[2] = inst_17195);\n(statearr_17344_18695[1] = 15);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 45))\n{var inst_17295 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17348_18696 = state_17305__$1;(statearr_17348_18696[2] = inst_17295);\n(statearr_17348_18696[1] = 44);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 14))\n{var state_17305__$1 = state_17305;var statearr_17349_18697 = state_17305__$1;(statearr_17349_18697[2] = null);\n(statearr_17349_18697[1] = 15);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 15))\n{var inst_17182 = (state_17305[14]);var inst_17183 = (state_17305[15]);var inst_17184 = (state_17305[16]);var inst_17185 = (state_17305[17]);var inst_17198 = (state_17305[2]);var inst_17199 = (inst_17185 + 1);var tmp17345 = inst_17182;var tmp17346 = inst_17183;var tmp17347 = inst_17184;var inst_17182__$1 = tmp17345;var inst_17183__$1 = tmp17346;var inst_17184__$1 = tmp17347;var inst_17185__$1 = inst_17199;var state_17305__$1 = (function (){var statearr_17350 = state_17305;(statearr_17350[14] = inst_17182__$1);\n(statearr_17350[15] = inst_17183__$1);\n(statearr_17350[16] = inst_17184__$1);\n(statearr_17350[17] = inst_17185__$1);\n(statearr_17350[27] = inst_17198);\nreturn statearr_17350;\n})();var statearr_17351_18698 = state_17305__$1;(statearr_17351_18698[2] = null);\n(statearr_17351_18698[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 16))\n{var inst_17202 = (state_17305[25]);var inst_17204 = cljs.core.chunked_seq_QMARK_.call(null,inst_17202);var state_17305__$1 = state_17305;if(inst_17204)\n{var statearr_17352_18699 = state_17305__$1;(statearr_17352_18699[1] = 19);\n} else\n{var statearr_17353_18700 = state_17305__$1;(statearr_17353_18700[1] = 20);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 17))\n{var state_17305__$1 = state_17305;var statearr_17354_18701 = state_17305__$1;(statearr_17354_18701[2] = null);\n(statearr_17354_18701[1] = 18);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 18))\n{var inst_17226 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17355_18702 = state_17305__$1;(statearr_17355_18702[2] = inst_17226);\n(statearr_17355_18702[1] = 12);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 19))\n{var inst_17202 = (state_17305[25]);var inst_17206 = cljs.core.chunk_first.call(null,inst_17202);var inst_17207 = cljs.core.chunk_rest.call(null,inst_17202);var inst_17208 = cljs.core.count.call(null,inst_17206);var inst_17182 = inst_17207;var inst_17183 = inst_17206;var inst_17184 = inst_17208;var inst_17185 = 0;var state_17305__$1 = (function (){var statearr_17356 = state_17305;(statearr_17356[14] = inst_17182);\n(statearr_17356[15] = inst_17183);\n(statearr_17356[16] = inst_17184);\n(statearr_17356[17] = inst_17185);\nreturn statearr_17356;\n})();var statearr_17357_18703 = state_17305__$1;(statearr_17357_18703[2] = null);\n(statearr_17357_18703[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 20))\n{var inst_17202 = (state_17305[25]);var inst_17212 = cljs.core.first.call(null,inst_17202);var inst_17213 = cljs.core.nth.call(null,inst_17212,0,null);var inst_17214 = cljs.core.nth.call(null,inst_17212,1,null);var state_17305__$1 = (function (){var statearr_17358 = state_17305;(statearr_17358[28] = inst_17213);\nreturn statearr_17358;\n})();if(cljs.core.truth_(inst_17214))\n{var statearr_17359_18704 = state_17305__$1;(statearr_17359_18704[1] = 22);\n} else\n{var statearr_17360_18705 = state_17305__$1;(statearr_17360_18705[1] = 23);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 21))\n{var inst_17223 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17361_18706 = state_17305__$1;(statearr_17361_18706[2] = inst_17223);\n(statearr_17361_18706[1] = 18);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 22))\n{var inst_17213 = (state_17305[28]);var inst_17216 = cljs.core.async.close_BANG_.call(null,inst_17213);var state_17305__$1 = state_17305;var statearr_17362_18707 = state_17305__$1;(statearr_17362_18707[2] = inst_17216);\n(statearr_17362_18707[1] = 24);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 23))\n{var state_17305__$1 = state_17305;var statearr_17363_18708 = state_17305__$1;(statearr_17363_18708[2] = null);\n(statearr_17363_18708[1] = 24);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 24))\n{var inst_17202 = (state_17305[25]);var inst_17219 = (state_17305[2]);var inst_17220 = cljs.core.next.call(null,inst_17202);var inst_17182 = inst_17220;var inst_17183 = null;var inst_17184 = 0;var inst_17185 = 0;var state_17305__$1 = (function (){var statearr_17364 = state_17305;(statearr_17364[14] = inst_17182);\n(statearr_17364[15] = inst_17183);\n(statearr_17364[16] = inst_17184);\n(statearr_17364[17] = inst_17185);\n(statearr_17364[29] = inst_17219);\nreturn statearr_17364;\n})();var statearr_17365_18709 = state_17305__$1;(statearr_17365_18709[2] = null);\n(statearr_17365_18709[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 25))\n{var inst_17244 = (state_17305[12]);var inst_17243 = (state_17305[13]);var inst_17246 = (inst_17244 < inst_17243);var inst_17247 = inst_17246;var state_17305__$1 = state_17305;if(cljs.core.truth_(inst_17247))\n{var statearr_17366_18710 = state_17305__$1;(statearr_17366_18710[1] = 27);\n} else\n{var statearr_17367_18711 = state_17305__$1;(statearr_17367_18711[1] = 28);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 26))\n{var inst_17233 = (state_17305[19]);var inst_17291 = (state_17305[2]);var inst_17292 = cljs.core.seq.call(null,inst_17233);var state_17305__$1 = (function (){var statearr_17368 = state_17305;(statearr_17368[30] = inst_17291);\nreturn statearr_17368;\n})();if(inst_17292)\n{var statearr_17369_18712 = state_17305__$1;(statearr_17369_18712[1] = 42);\n} else\n{var statearr_17370_18713 = state_17305__$1;(statearr_17370_18713[1] = 43);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 27))\n{var inst_17242 = (state_17305[10]);var inst_17244 = (state_17305[12]);var inst_17249 = cljs.core._nth.call(null,inst_17242,inst_17244);var state_17305__$1 = (function (){var statearr_17371 = state_17305;(statearr_17371[7] = inst_17249);\nreturn statearr_17371;\n})();var statearr_17372_18714 = state_17305__$1;(statearr_17372_18714[2] = null);\n(statearr_17372_18714[1] = 32);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 28))\n{var inst_17262 = (state_17305[9]);var inst_17241 = (state_17305[11]);var inst_17262__$1 = cljs.core.seq.call(null,inst_17241);var state_17305__$1 = (function (){var statearr_17376 = state_17305;(statearr_17376[9] = inst_17262__$1);\nreturn statearr_17376;\n})();if(inst_17262__$1)\n{var statearr_17377_18715 = state_17305__$1;(statearr_17377_18715[1] = 33);\n} else\n{var statearr_17378_18716 = state_17305__$1;(statearr_17378_18716[1] = 34);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 29))\n{var inst_17289 = (state_17305[2]);var state_17305__$1 = state_17305;var statearr_17379_18717 = state_17305__$1;(statearr_17379_18717[2] = inst_17289);\n(statearr_17379_18717[1] = 26);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 30))\n{var inst_17242 = (state_17305[10]);var inst_17241 = (state_17305[11]);var inst_17244 = (state_17305[12]);var inst_17243 = (state_17305[13]);var inst_17258 = (state_17305[2]);var inst_17259 = (inst_17244 + 1);var tmp17373 = inst_17242;var tmp17374 = inst_17241;var tmp17375 = inst_17243;var inst_17241__$1 = tmp17374;var inst_17242__$1 = tmp17373;var inst_17243__$1 = tmp17375;var inst_17244__$1 = inst_17259;var state_17305__$1 = (function (){var statearr_17380 = state_17305;(statearr_17380[10] = inst_17242__$1);\n(statearr_17380[11] = inst_17241__$1);\n(statearr_17380[12] = inst_17244__$1);\n(statearr_17380[13] = inst_17243__$1);\n(statearr_17380[31] = inst_17258);\nreturn statearr_17380;\n})();var statearr_17381_18718 = state_17305__$1;(statearr_17381_18718[2] = null);\n(statearr_17381_18718[1] = 25);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17306 === 31))\n{var inst_17249 = (state_17305[7]);var inst_17250 = (state_17305[2]);var inst_17251 = cljs.core.swap_BANG_.call(null,dctr,cljs.core.dec);var inst_17252 = cljs.core.async.untap_STAR_.call(null,m,inst_17249);var state_17305__$1 = (function (){var statearr_17382 = state_17305;(statearr_17382[32] = inst_17250);\n(statearr_17382[33] = inst_17251);\nreturn statearr_17382;\n})();var statearr_17383_18719 = state_17305__$1;(statearr_17383_18719[2] = inst_17252);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17305__$1);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18667,cs,m,dchan,dctr,done))\n;return ((function (switch__13881__auto__,c__13951__auto___18667,cs,m,dchan,dctr,done){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_17387 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];(statearr_17387[0] = state_machine__13882__auto__);\n(statearr_17387[1] = 1);\nreturn statearr_17387;\n});\nvar state_machine__13882__auto____1 = (function (state_17305){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_17305);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e17388){if((e17388 instanceof Object))\n{var ex__13885__auto__ = e17388;var statearr_17389_18720 = state_17305;(statearr_17389_18720[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17305);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e17388;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18721 = state_17305;\nstate_17305 = G__18721;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_17305){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_17305);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18667,cs,m,dchan,dctr,done))\n})();var state__13953__auto__ = (function (){var statearr_17390 = f__13952__auto__.call(null);(statearr_17390[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18667);\nreturn statearr_17390;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18667,cs,m,dchan,dctr,done))\n);\nreturn m;\n});\n/**\n* Copies the mult source onto the supplied channel.\n* \n* By default the channel will be closed when the source closes,\n* but can be determined by the close? parameter.\n*/\ncljs.core.async.tap = (function() {\nvar tap = null;\nvar tap__2 = (function (mult,ch){return tap.call(null,mult,ch,true);\n});\nvar tap__3 = (function (mult,ch,close_QMARK_){cljs.core.async.tap_STAR_.call(null,mult,ch,close_QMARK_);\nreturn ch;\n});\ntap = function(mult,ch,close_QMARK_){\nswitch(arguments.length){\ncase 2:\nreturn tap__2.call(this,mult,ch);\ncase 3:\nreturn tap__3.call(this,mult,ch,close_QMARK_);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\ntap.cljs$core$IFn$_invoke$arity$2 = tap__2;\ntap.cljs$core$IFn$_invoke$arity$3 = tap__3;\nreturn tap;\n})()\n;\n/**\n* Disconnects a target channel from a mult\n*/\ncljs.core.async.untap = (function untap(mult,ch){return cljs.core.async.untap_STAR_.call(null,mult,ch);\n});\n/**\n* Disconnects all target channels from a mult\n*/\ncljs.core.async.untap_all = (function untap_all(mult){return cljs.core.async.untap_all_STAR_.call(null,mult);\n});\ncljs.core.async.Mix = (function (){var obj17392 = {};return obj17392;\n})();\ncljs.core.async.admix_STAR_ = (function admix_STAR_(m,ch){if((function (){var and__4872__auto__ = m;if(and__4872__auto__)\n{return m.cljs$core$async$Mix$admix_STAR_$arity$2;\n} else\n{return and__4872__auto__;\n}\n})())\n{return m.cljs$core$async$Mix$admix_STAR_$arity$2(m,ch);\n} else\n{var x__5511__auto__ = (((m == null))?null:m);return (function (){var or__4884__auto__ = (cljs.core.async.admix_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.admix_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mix.admix*\",m);\n}\n}\n})().call(null,m,ch);\n}\n});\ncljs.core.async.unmix_STAR_ = (function unmix_STAR_(m,ch){if((function (){var and__4872__auto__ = m;if(and__4872__auto__)\n{return m.cljs$core$async$Mix$unmix_STAR_$arity$2;\n} else\n{return and__4872__auto__;\n}\n})())\n{return m.cljs$core$async$Mix$unmix_STAR_$arity$2(m,ch);\n} else\n{var x__5511__auto__ = (((m == null))?null:m);return (function (){var or__4884__auto__ = (cljs.core.async.unmix_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.unmix_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mix.unmix*\",m);\n}\n}\n})().call(null,m,ch);\n}\n});\ncljs.core.async.unmix_all_STAR_ = (function unmix_all_STAR_(m){if((function (){var and__4872__auto__ = m;if(and__4872__auto__)\n{return m.cljs$core$async$Mix$unmix_all_STAR_$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return m.cljs$core$async$Mix$unmix_all_STAR_$arity$1(m);\n} else\n{var x__5511__auto__ = (((m == null))?null:m);return (function (){var or__4884__auto__ = (cljs.core.async.unmix_all_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.unmix_all_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mix.unmix-all*\",m);\n}\n}\n})().call(null,m);\n}\n});\ncljs.core.async.toggle_STAR_ = (function toggle_STAR_(m,state_map){if((function (){var and__4872__auto__ = m;if(and__4872__auto__)\n{return m.cljs$core$async$Mix$toggle_STAR_$arity$2;\n} else\n{return and__4872__auto__;\n}\n})())\n{return m.cljs$core$async$Mix$toggle_STAR_$arity$2(m,state_map);\n} else\n{var x__5511__auto__ = (((m == null))?null:m);return (function (){var or__4884__auto__ = (cljs.core.async.toggle_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.toggle_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mix.toggle*\",m);\n}\n}\n})().call(null,m,state_map);\n}\n});\ncljs.core.async.solo_mode_STAR_ = (function solo_mode_STAR_(m,mode){if((function (){var and__4872__auto__ = m;if(and__4872__auto__)\n{return m.cljs$core$async$Mix$solo_mode_STAR_$arity$2;\n} else\n{return and__4872__auto__;\n}\n})())\n{return m.cljs$core$async$Mix$solo_mode_STAR_$arity$2(m,mode);\n} else\n{var x__5511__auto__ = (((m == null))?null:m);return (function (){var or__4884__auto__ = (cljs.core.async.solo_mode_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.solo_mode_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Mix.solo-mode*\",m);\n}\n}\n})().call(null,m,mode);\n}\n});\n/**\n* Creates and returns a mix of one or more input channels which will\n* be put on the supplied out channel. Input sources can be added to\n* the mix with 'admix', and removed with 'unmix'. A mix supports\n* soloing, muting and pausing multiple inputs atomically using\n* 'toggle', and can solo using either muting or pausing as determined\n* by 'solo-mode'.\n* \n* Each channel can have zero or more boolean modes set via 'toggle':\n* \n* :solo - when true, only this (ond other soloed) channel(s) will appear\n* in the mix output channel. :mute and :pause states of soloed\n* channels are ignored. If solo-mode is :mute, non-soloed\n* channels are muted, if :pause, non-soloed channels are\n* paused.\n* \n* :mute - muted channels will have their contents consumed but not included in the mix\n* :pause - paused channels will not have their contents consumed (and thus also not included in the mix)\n*/\ncljs.core.async.mix = (function mix(out){var cs = cljs.core.atom.call(null,cljs.core.PersistentArrayMap.EMPTY);var solo_modes = new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"pause\",\"pause\",1120344424),null,new cljs.core.Keyword(null,\"mute\",\"mute\",1017267595),null], null), null);var attrs = cljs.core.conj.call(null,solo_modes,new cljs.core.Keyword(null,\"solo\",\"solo\",1017440337));var solo_mode = cljs.core.atom.call(null,new cljs.core.Keyword(null,\"mute\",\"mute\",1017267595));var change = cljs.core.async.chan.call(null);var changed = ((function (cs,solo_modes,attrs,solo_mode,change){\nreturn (function (){return cljs.core.async.put_BANG_.call(null,change,true);\n});})(cs,solo_modes,attrs,solo_mode,change))\n;var pick = ((function (cs,solo_modes,attrs,solo_mode,change,changed){\nreturn (function (attr,chs){return cljs.core.reduce_kv.call(null,((function (cs,solo_modes,attrs,solo_mode,change,changed){\nreturn (function (ret,c,v){if(cljs.core.truth_(attr.call(null,v)))\n{return cljs.core.conj.call(null,ret,c);\n} else\n{return ret;\n}\n});})(cs,solo_modes,attrs,solo_mode,change,changed))\n,cljs.core.PersistentHashSet.EMPTY,chs);\n});})(cs,solo_modes,attrs,solo_mode,change,changed))\n;var calc_state = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick){\nreturn (function (){var chs = cljs.core.deref.call(null,cs);var mode = cljs.core.deref.call(null,solo_mode);var solos = pick.call(null,new cljs.core.Keyword(null,\"solo\",\"solo\",1017440337),chs);var pauses = pick.call(null,new cljs.core.Keyword(null,\"pause\",\"pause\",1120344424),chs);return new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"solos\",\"solos\",1123523302),solos,new cljs.core.Keyword(null,\"mutes\",\"mutes\",1118168300),pick.call(null,new cljs.core.Keyword(null,\"mute\",\"mute\",1017267595),chs),new cljs.core.Keyword(null,\"reads\",\"reads\",1122290959),cljs.core.conj.call(null,(((cljs.core._EQ_.call(null,mode,new cljs.core.Keyword(null,\"pause\",\"pause\",1120344424))) && (!(cljs.core.empty_QMARK_.call(null,solos))))?cljs.core.vec.call(null,solos):cljs.core.vec.call(null,cljs.core.remove.call(null,pauses,cljs.core.keys.call(null,chs)))),change)], null);\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick))\n;var m = (function (){if(typeof cljs.core.async.t17502 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t17502 = (function (pick,out,attrs,cs,calc_state,solo_modes,mix,changed,change,solo_mode,meta17503){\nthis.pick = pick;\nthis.out = out;\nthis.attrs = attrs;\nthis.cs = cs;\nthis.calc_state = calc_state;\nthis.solo_modes = solo_modes;\nthis.mix = mix;\nthis.changed = changed;\nthis.change = change;\nthis.solo_mode = solo_mode;\nthis.meta17503 = meta17503;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t17502.cljs$lang$type = true;\ncljs.core.async.t17502.cljs$lang$ctorStr = \"cljs.core.async/t17502\";\ncljs.core.async.t17502.cljs$lang$ctorPrWriter = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t17502\");\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.t17502.prototype.cljs$core$async$Mix$ = true;\ncljs.core.async.t17502.prototype.cljs$core$async$Mix$admix_STAR_$arity$2 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (_,ch){var self__ = this;\nvar ___$1 = this;cljs.core.swap_BANG_.call(null,self__.cs,cljs.core.assoc,ch,cljs.core.PersistentArrayMap.EMPTY);\nreturn self__.changed.call(null);\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.t17502.prototype.cljs$core$async$Mix$unmix_STAR_$arity$2 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (_,ch){var self__ = this;\nvar ___$1 = this;cljs.core.swap_BANG_.call(null,self__.cs,cljs.core.dissoc,ch);\nreturn self__.changed.call(null);\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.t17502.prototype.cljs$core$async$Mix$unmix_all_STAR_$arity$1 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (_){var self__ = this;\nvar ___$1 = this;cljs.core.reset_BANG_.call(null,self__.cs,cljs.core.PersistentArrayMap.EMPTY);\nreturn self__.changed.call(null);\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.t17502.prototype.cljs$core$async$Mix$toggle_STAR_$arity$2 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (_,state_map){var self__ = this;\nvar ___$1 = this;cljs.core.swap_BANG_.call(null,self__.cs,cljs.core.partial.call(null,cljs.core.merge_with,cljs.core.merge),state_map);\nreturn self__.changed.call(null);\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.t17502.prototype.cljs$core$async$Mix$solo_mode_STAR_$arity$2 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (_,mode){var self__ = this;\nvar ___$1 = this;if(cljs.core.truth_(self__.solo_modes.call(null,mode)))\n{} else\n{throw (new Error([cljs.core.str(\"Assert failed: \"),cljs.core.str([cljs.core.str(\"mode must be one of: \"),cljs.core.str(self__.solo_modes)].join('')),cljs.core.str(\"\\n\"),cljs.core.str(cljs.core.pr_str.call(null,cljs.core.list(new cljs.core.Symbol(null,\"solo-modes\",\"solo-modes\",-1162732933,null),new cljs.core.Symbol(null,\"mode\",\"mode\",-1637174436,null))))].join('')));\n}\ncljs.core.reset_BANG_.call(null,self__.solo_mode,mode);\nreturn self__.changed.call(null);\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.t17502.prototype.cljs$core$async$Mux$ = true;\ncljs.core.async.t17502.prototype.cljs$core$async$Mux$muxch_STAR_$arity$1 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (_){var self__ = this;\nvar ___$1 = this;return self__.out;\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.t17502.prototype.cljs$core$IMeta$_meta$arity$1 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (_17504){var self__ = this;\nvar _17504__$1 = this;return self__.meta17503;\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.t17502.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function (_17504,meta17503__$1){var self__ = this;\nvar _17504__$1 = this;return (new cljs.core.async.t17502(self__.pick,self__.out,self__.attrs,self__.cs,self__.calc_state,self__.solo_modes,self__.mix,self__.changed,self__.change,self__.solo_mode,meta17503__$1));\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\ncljs.core.async.__GT_t17502 = ((function (cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state){\nreturn (function __GT_t17502(pick__$1,out__$1,attrs__$1,cs__$1,calc_state__$1,solo_modes__$1,mix__$1,changed__$1,change__$1,solo_mode__$1,meta17503){return (new cljs.core.async.t17502(pick__$1,out__$1,attrs__$1,cs__$1,calc_state__$1,solo_modes__$1,mix__$1,changed__$1,change__$1,solo_mode__$1,meta17503));\n});})(cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state))\n;\n}\nreturn (new cljs.core.async.t17502(pick,out,attrs,cs,calc_state,solo_modes,mix,changed,change,solo_mode,null));\n})();var c__13951__auto___18722 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18722,cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state,m){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18722,cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state,m){\nreturn (function (state_17569){var state_val_17570 = (state_17569[1]);if((state_val_17570 === 1))\n{var inst_17508 = (state_17569[7]);var inst_17508__$1 = calc_state.call(null);var inst_17509 = cljs.core.seq_QMARK_.call(null,inst_17508__$1);var state_17569__$1 = (function (){var statearr_17571 = state_17569;(statearr_17571[7] = inst_17508__$1);\nreturn statearr_17571;\n})();if(inst_17509)\n{var statearr_17572_18723 = state_17569__$1;(statearr_17572_18723[1] = 2);\n} else\n{var statearr_17573_18724 = state_17569__$1;(statearr_17573_18724[1] = 3);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 2))\n{var inst_17508 = (state_17569[7]);var inst_17511 = cljs.core.apply.call(null,cljs.core.hash_map,inst_17508);var state_17569__$1 = state_17569;var statearr_17574_18725 = state_17569__$1;(statearr_17574_18725[2] = inst_17511);\n(statearr_17574_18725[1] = 4);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 3))\n{var inst_17508 = (state_17569[7]);var state_17569__$1 = state_17569;var statearr_17575_18726 = state_17569__$1;(statearr_17575_18726[2] = inst_17508);\n(statearr_17575_18726[1] = 4);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 4))\n{var inst_17508 = (state_17569[7]);var inst_17514 = (state_17569[2]);var inst_17515 = cljs.core.get.call(null,inst_17514,new cljs.core.Keyword(null,\"reads\",\"reads\",1122290959));var inst_17516 = cljs.core.get.call(null,inst_17514,new cljs.core.Keyword(null,\"mutes\",\"mutes\",1118168300));var inst_17517 = cljs.core.get.call(null,inst_17514,new cljs.core.Keyword(null,\"solos\",\"solos\",1123523302));var inst_17518 = inst_17508;var state_17569__$1 = (function (){var statearr_17576 = state_17569;(statearr_17576[8] = inst_17517);\n(statearr_17576[9] = inst_17518);\n(statearr_17576[10] = inst_17516);\n(statearr_17576[11] = inst_17515);\nreturn statearr_17576;\n})();var statearr_17577_18727 = state_17569__$1;(statearr_17577_18727[2] = null);\n(statearr_17577_18727[1] = 5);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 5))\n{var inst_17518 = (state_17569[9]);var inst_17521 = cljs.core.seq_QMARK_.call(null,inst_17518);var state_17569__$1 = state_17569;if(inst_17521)\n{var statearr_17578_18728 = state_17569__$1;(statearr_17578_18728[1] = 7);\n} else\n{var statearr_17579_18729 = state_17569__$1;(statearr_17579_18729[1] = 8);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 6))\n{var inst_17567 = (state_17569[2]);var state_17569__$1 = state_17569;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_17569__$1,inst_17567);\n} else\n{if((state_val_17570 === 7))\n{var inst_17518 = (state_17569[9]);var inst_17523 = cljs.core.apply.call(null,cljs.core.hash_map,inst_17518);var state_17569__$1 = state_17569;var statearr_17580_18730 = state_17569__$1;(statearr_17580_18730[2] = inst_17523);\n(statearr_17580_18730[1] = 9);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 8))\n{var inst_17518 = (state_17569[9]);var state_17569__$1 = state_17569;var statearr_17581_18731 = state_17569__$1;(statearr_17581_18731[2] = inst_17518);\n(statearr_17581_18731[1] = 9);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 9))\n{var inst_17526 = (state_17569[12]);var inst_17526__$1 = (state_17569[2]);var inst_17527 = cljs.core.get.call(null,inst_17526__$1,new cljs.core.Keyword(null,\"reads\",\"reads\",1122290959));var inst_17528 = cljs.core.get.call(null,inst_17526__$1,new cljs.core.Keyword(null,\"mutes\",\"mutes\",1118168300));var inst_17529 = cljs.core.get.call(null,inst_17526__$1,new cljs.core.Keyword(null,\"solos\",\"solos\",1123523302));var state_17569__$1 = (function (){var statearr_17582 = state_17569;(statearr_17582[12] = inst_17526__$1);\n(statearr_17582[13] = inst_17528);\n(statearr_17582[14] = inst_17529);\nreturn statearr_17582;\n})();return cljs.core.async.impl.ioc_helpers.ioc_alts_BANG_.call(null,state_17569__$1,10,inst_17527);\n} else\n{if((state_val_17570 === 10))\n{var inst_17533 = (state_17569[15]);var inst_17534 = (state_17569[16]);var inst_17532 = (state_17569[2]);var inst_17533__$1 = cljs.core.nth.call(null,inst_17532,0,null);var inst_17534__$1 = cljs.core.nth.call(null,inst_17532,1,null);var inst_17535 = (inst_17533__$1 == null);var inst_17536 = cljs.core._EQ_.call(null,inst_17534__$1,change);var inst_17537 = (inst_17535) || (inst_17536);var state_17569__$1 = (function (){var statearr_17583 = state_17569;(statearr_17583[15] = inst_17533__$1);\n(statearr_17583[16] = inst_17534__$1);\nreturn statearr_17583;\n})();if(cljs.core.truth_(inst_17537))\n{var statearr_17584_18732 = state_17569__$1;(statearr_17584_18732[1] = 11);\n} else\n{var statearr_17585_18733 = state_17569__$1;(statearr_17585_18733[1] = 12);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 11))\n{var inst_17533 = (state_17569[15]);var inst_17539 = (inst_17533 == null);var state_17569__$1 = state_17569;if(cljs.core.truth_(inst_17539))\n{var statearr_17586_18734 = state_17569__$1;(statearr_17586_18734[1] = 14);\n} else\n{var statearr_17587_18735 = state_17569__$1;(statearr_17587_18735[1] = 15);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 12))\n{var inst_17534 = (state_17569[16]);var inst_17548 = (state_17569[17]);var inst_17529 = (state_17569[14]);var inst_17548__$1 = inst_17529.call(null,inst_17534);var state_17569__$1 = (function (){var statearr_17588 = state_17569;(statearr_17588[17] = inst_17548__$1);\nreturn statearr_17588;\n})();if(cljs.core.truth_(inst_17548__$1))\n{var statearr_17589_18736 = state_17569__$1;(statearr_17589_18736[1] = 17);\n} else\n{var statearr_17590_18737 = state_17569__$1;(statearr_17590_18737[1] = 18);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 13))\n{var inst_17565 = (state_17569[2]);var state_17569__$1 = state_17569;var statearr_17591_18738 = state_17569__$1;(statearr_17591_18738[2] = inst_17565);\n(statearr_17591_18738[1] = 6);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 14))\n{var inst_17534 = (state_17569[16]);var inst_17541 = cljs.core.swap_BANG_.call(null,cs,cljs.core.dissoc,inst_17534);var state_17569__$1 = state_17569;var statearr_17592_18739 = state_17569__$1;(statearr_17592_18739[2] = inst_17541);\n(statearr_17592_18739[1] = 16);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 15))\n{var state_17569__$1 = state_17569;var statearr_17593_18740 = state_17569__$1;(statearr_17593_18740[2] = null);\n(statearr_17593_18740[1] = 16);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 16))\n{var inst_17544 = (state_17569[2]);var inst_17545 = calc_state.call(null);var inst_17518 = inst_17545;var state_17569__$1 = (function (){var statearr_17594 = state_17569;(statearr_17594[9] = inst_17518);\n(statearr_17594[18] = inst_17544);\nreturn statearr_17594;\n})();var statearr_17595_18741 = state_17569__$1;(statearr_17595_18741[2] = null);\n(statearr_17595_18741[1] = 5);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 17))\n{var inst_17548 = (state_17569[17]);var state_17569__$1 = state_17569;var statearr_17596_18742 = state_17569__$1;(statearr_17596_18742[2] = inst_17548);\n(statearr_17596_18742[1] = 19);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 18))\n{var inst_17534 = (state_17569[16]);var inst_17528 = (state_17569[13]);var inst_17529 = (state_17569[14]);var inst_17551 = cljs.core.empty_QMARK_.call(null,inst_17529);var inst_17552 = inst_17528.call(null,inst_17534);var inst_17553 = cljs.core.not.call(null,inst_17552);var inst_17554 = (inst_17551) && (inst_17553);var state_17569__$1 = state_17569;var statearr_17597_18743 = state_17569__$1;(statearr_17597_18743[2] = inst_17554);\n(statearr_17597_18743[1] = 19);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 19))\n{var inst_17556 = (state_17569[2]);var state_17569__$1 = state_17569;if(cljs.core.truth_(inst_17556))\n{var statearr_17598_18744 = state_17569__$1;(statearr_17598_18744[1] = 20);\n} else\n{var statearr_17599_18745 = state_17569__$1;(statearr_17599_18745[1] = 21);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 20))\n{var inst_17533 = (state_17569[15]);var state_17569__$1 = state_17569;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_17569__$1,23,out,inst_17533);\n} else\n{if((state_val_17570 === 21))\n{var state_17569__$1 = state_17569;var statearr_17600_18746 = state_17569__$1;(statearr_17600_18746[2] = null);\n(statearr_17600_18746[1] = 22);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 22))\n{var inst_17526 = (state_17569[12]);var inst_17562 = (state_17569[2]);var inst_17518 = inst_17526;var state_17569__$1 = (function (){var statearr_17601 = state_17569;(statearr_17601[9] = inst_17518);\n(statearr_17601[19] = inst_17562);\nreturn statearr_17601;\n})();var statearr_17602_18747 = state_17569__$1;(statearr_17602_18747[2] = null);\n(statearr_17602_18747[1] = 5);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17570 === 23))\n{var inst_17559 = (state_17569[2]);var state_17569__$1 = state_17569;var statearr_17603_18748 = state_17569__$1;(statearr_17603_18748[2] = inst_17559);\n(statearr_17603_18748[1] = 22);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18722,cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state,m))\n;return ((function (switch__13881__auto__,c__13951__auto___18722,cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state,m){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_17607 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];(statearr_17607[0] = state_machine__13882__auto__);\n(statearr_17607[1] = 1);\nreturn statearr_17607;\n});\nvar state_machine__13882__auto____1 = (function (state_17569){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_17569);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e17608){if((e17608 instanceof Object))\n{var ex__13885__auto__ = e17608;var statearr_17609_18749 = state_17569;(statearr_17609_18749[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17569);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e17608;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18750 = state_17569;\nstate_17569 = G__18750;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_17569){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_17569);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18722,cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state,m))\n})();var state__13953__auto__ = (function (){var statearr_17610 = f__13952__auto__.call(null);(statearr_17610[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18722);\nreturn statearr_17610;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18722,cs,solo_modes,attrs,solo_mode,change,changed,pick,calc_state,m))\n);\nreturn m;\n});\n/**\n* Adds ch as an input to the mix\n*/\ncljs.core.async.admix = (function admix(mix,ch){return cljs.core.async.admix_STAR_.call(null,mix,ch);\n});\n/**\n* Removes ch as an input to the mix\n*/\ncljs.core.async.unmix = (function unmix(mix,ch){return cljs.core.async.unmix_STAR_.call(null,mix,ch);\n});\n/**\n* removes all inputs from the mix\n*/\ncljs.core.async.unmix_all = (function unmix_all(mix){return cljs.core.async.unmix_all_STAR_.call(null,mix);\n});\n/**\n* Atomically sets the state(s) of one or more channels in a mix. The\n* state map is a map of channels -> channel-state-map. A\n* channel-state-map is a map of attrs -> boolean, where attr is one or\n* more of :mute, :pause or :solo. Any states supplied are merged with\n* the current state.\n* \n* Note that channels can be added to a mix via toggle, which can be\n* used to add channels in a particular (e.g. paused) state.\n*/\ncljs.core.async.toggle = (function toggle(mix,state_map){return cljs.core.async.toggle_STAR_.call(null,mix,state_map);\n});\n/**\n* Sets the solo mode of the mix. mode must be one of :mute or :pause\n*/\ncljs.core.async.solo_mode = (function solo_mode(mix,mode){return cljs.core.async.solo_mode_STAR_.call(null,mix,mode);\n});\ncljs.core.async.Pub = (function (){var obj17612 = {};return obj17612;\n})();\ncljs.core.async.sub_STAR_ = (function sub_STAR_(p,v,ch,close_QMARK_){if((function (){var and__4872__auto__ = p;if(and__4872__auto__)\n{return p.cljs$core$async$Pub$sub_STAR_$arity$4;\n} else\n{return and__4872__auto__;\n}\n})())\n{return p.cljs$core$async$Pub$sub_STAR_$arity$4(p,v,ch,close_QMARK_);\n} else\n{var x__5511__auto__ = (((p == null))?null:p);return (function (){var or__4884__auto__ = (cljs.core.async.sub_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.sub_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Pub.sub*\",p);\n}\n}\n})().call(null,p,v,ch,close_QMARK_);\n}\n});\ncljs.core.async.unsub_STAR_ = (function unsub_STAR_(p,v,ch){if((function (){var and__4872__auto__ = p;if(and__4872__auto__)\n{return p.cljs$core$async$Pub$unsub_STAR_$arity$3;\n} else\n{return and__4872__auto__;\n}\n})())\n{return p.cljs$core$async$Pub$unsub_STAR_$arity$3(p,v,ch);\n} else\n{var x__5511__auto__ = (((p == null))?null:p);return (function (){var or__4884__auto__ = (cljs.core.async.unsub_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.unsub_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Pub.unsub*\",p);\n}\n}\n})().call(null,p,v,ch);\n}\n});\ncljs.core.async.unsub_all_STAR_ = (function() {\nvar unsub_all_STAR_ = null;\nvar unsub_all_STAR___1 = (function (p){if((function (){var and__4872__auto__ = p;if(and__4872__auto__)\n{return p.cljs$core$async$Pub$unsub_all_STAR_$arity$1;\n} else\n{return and__4872__auto__;\n}\n})())\n{return p.cljs$core$async$Pub$unsub_all_STAR_$arity$1(p);\n} else\n{var x__5511__auto__ = (((p == null))?null:p);return (function (){var or__4884__auto__ = (cljs.core.async.unsub_all_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.unsub_all_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Pub.unsub-all*\",p);\n}\n}\n})().call(null,p);\n}\n});\nvar unsub_all_STAR___2 = (function (p,v){if((function (){var and__4872__auto__ = p;if(and__4872__auto__)\n{return p.cljs$core$async$Pub$unsub_all_STAR_$arity$2;\n} else\n{return and__4872__auto__;\n}\n})())\n{return p.cljs$core$async$Pub$unsub_all_STAR_$arity$2(p,v);\n} else\n{var x__5511__auto__ = (((p == null))?null:p);return (function (){var or__4884__auto__ = (cljs.core.async.unsub_all_STAR_[goog.typeOf(x__5511__auto__)]);if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = (cljs.core.async.unsub_all_STAR_[\"_\"]);if(or__4884__auto____$1)\n{return or__4884__auto____$1;\n} else\n{throw cljs.core.missing_protocol.call(null,\"Pub.unsub-all*\",p);\n}\n}\n})().call(null,p,v);\n}\n});\nunsub_all_STAR_ = function(p,v){\nswitch(arguments.length){\ncase 1:\nreturn unsub_all_STAR___1.call(this,p);\ncase 2:\nreturn unsub_all_STAR___2.call(this,p,v);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nunsub_all_STAR_.cljs$core$IFn$_invoke$arity$1 = unsub_all_STAR___1;\nunsub_all_STAR_.cljs$core$IFn$_invoke$arity$2 = unsub_all_STAR___2;\nreturn unsub_all_STAR_;\n})()\n;\n/**\n* Creates and returns a pub(lication) of the supplied channel,\n* partitioned into topics by the topic-fn. topic-fn will be applied to\n* each value on the channel and the result will determine the 'topic'\n* on which that value will be put. Channels can be subscribed to\n* receive copies of topics using 'sub', and unsubscribed using\n* 'unsub'. Each topic will be handled by an internal mult on a\n* dedicated channel. By default these internal channels are\n* unbuffered, but a buf-fn can be supplied which, given a topic,\n* creates a buffer with desired properties.\n* \n* Each item is distributed to all subs in parallel and synchronously,\n* i.e. each sub must accept before the next item is distributed. Use\n* buffering/windowing to prevent slow subs from holding up the pub.\n* \n* Items received when there are no matching subs get dropped.\n* \n* Note that if buf-fns are used then each topic is handled\n* asynchronously, i.e. if a channel is subscribed to more than one\n* topic it should not expect them to be interleaved identically with\n* the source.\n*/\ncljs.core.async.pub = (function() {\nvar pub = null;\nvar pub__2 = (function (ch,topic_fn){return pub.call(null,ch,topic_fn,cljs.core.constantly.call(null,null));\n});\nvar pub__3 = (function (ch,topic_fn,buf_fn){var mults = cljs.core.atom.call(null,cljs.core.PersistentArrayMap.EMPTY);var ensure_mult = ((function (mults){\nreturn (function (topic){var or__4884__auto__ = cljs.core.get.call(null,cljs.core.deref.call(null,mults),topic);if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return cljs.core.get.call(null,cljs.core.swap_BANG_.call(null,mults,((function (or__4884__auto__,mults){\nreturn (function (p1__17613_SHARP_){if(cljs.core.truth_(p1__17613_SHARP_.call(null,topic)))\n{return p1__17613_SHARP_;\n} else\n{return cljs.core.assoc.call(null,p1__17613_SHARP_,topic,cljs.core.async.mult.call(null,cljs.core.async.chan.call(null,buf_fn.call(null,topic))));\n}\n});})(or__4884__auto__,mults))\n),topic);\n}\n});})(mults))\n;var p = (function (){if(typeof cljs.core.async.t17738 !== 'undefined')\n{} else\n{\n/**\n* @constructor\n*/\ncljs.core.async.t17738 = (function (ensure_mult,mults,buf_fn,topic_fn,ch,pub,meta17739){\nthis.ensure_mult = ensure_mult;\nthis.mults = mults;\nthis.buf_fn = buf_fn;\nthis.topic_fn = topic_fn;\nthis.ch = ch;\nthis.pub = pub;\nthis.meta17739 = meta17739;\nthis.cljs$lang$protocol_mask$partition1$ = 0;\nthis.cljs$lang$protocol_mask$partition0$ = 393216;\n})\ncljs.core.async.t17738.cljs$lang$type = true;\ncljs.core.async.t17738.cljs$lang$ctorStr = \"cljs.core.async/t17738\";\ncljs.core.async.t17738.cljs$lang$ctorPrWriter = ((function (mults,ensure_mult){\nreturn (function (this__5451__auto__,writer__5452__auto__,opt__5453__auto__){return cljs.core._write.call(null,writer__5452__auto__,\"cljs.core.async/t17738\");\n});})(mults,ensure_mult))\n;\ncljs.core.async.t17738.prototype.cljs$core$async$Pub$ = true;\ncljs.core.async.t17738.prototype.cljs$core$async$Pub$sub_STAR_$arity$4 = ((function (mults,ensure_mult){\nreturn (function (p,topic,ch__$2,close_QMARK_){var self__ = this;\nvar p__$1 = this;var m = self__.ensure_mult.call(null,topic);return cljs.core.async.tap.call(null,m,ch__$2,close_QMARK_);\n});})(mults,ensure_mult))\n;\ncljs.core.async.t17738.prototype.cljs$core$async$Pub$unsub_STAR_$arity$3 = ((function (mults,ensure_mult){\nreturn (function (p,topic,ch__$2){var self__ = this;\nvar p__$1 = this;var temp__4092__auto__ = cljs.core.get.call(null,cljs.core.deref.call(null,self__.mults),topic);if(cljs.core.truth_(temp__4092__auto__))\n{var m = temp__4092__auto__;return cljs.core.async.untap.call(null,m,ch__$2);\n} else\n{return null;\n}\n});})(mults,ensure_mult))\n;\ncljs.core.async.t17738.prototype.cljs$core$async$Pub$unsub_all_STAR_$arity$1 = ((function (mults,ensure_mult){\nreturn (function (_){var self__ = this;\nvar ___$1 = this;return cljs.core.reset_BANG_.call(null,self__.mults,cljs.core.PersistentArrayMap.EMPTY);\n});})(mults,ensure_mult))\n;\ncljs.core.async.t17738.prototype.cljs$core$async$Pub$unsub_all_STAR_$arity$2 = ((function (mults,ensure_mult){\nreturn (function (_,topic){var self__ = this;\nvar ___$1 = this;return cljs.core.swap_BANG_.call(null,self__.mults,cljs.core.dissoc,topic);\n});})(mults,ensure_mult))\n;\ncljs.core.async.t17738.prototype.cljs$core$async$Mux$ = true;\ncljs.core.async.t17738.prototype.cljs$core$async$Mux$muxch_STAR_$arity$1 = ((function (mults,ensure_mult){\nreturn (function (_){var self__ = this;\nvar ___$1 = this;return self__.ch;\n});})(mults,ensure_mult))\n;\ncljs.core.async.t17738.prototype.cljs$core$IMeta$_meta$arity$1 = ((function (mults,ensure_mult){\nreturn (function (_17740){var self__ = this;\nvar _17740__$1 = this;return self__.meta17739;\n});})(mults,ensure_mult))\n;\ncljs.core.async.t17738.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = ((function (mults,ensure_mult){\nreturn (function (_17740,meta17739__$1){var self__ = this;\nvar _17740__$1 = this;return (new cljs.core.async.t17738(self__.ensure_mult,self__.mults,self__.buf_fn,self__.topic_fn,self__.ch,self__.pub,meta17739__$1));\n});})(mults,ensure_mult))\n;\ncljs.core.async.__GT_t17738 = ((function (mults,ensure_mult){\nreturn (function __GT_t17738(ensure_mult__$1,mults__$1,buf_fn__$1,topic_fn__$1,ch__$1,pub__$1,meta17739){return (new cljs.core.async.t17738(ensure_mult__$1,mults__$1,buf_fn__$1,topic_fn__$1,ch__$1,pub__$1,meta17739));\n});})(mults,ensure_mult))\n;\n}\nreturn (new cljs.core.async.t17738(ensure_mult,mults,buf_fn,topic_fn,ch,pub,null));\n})();var c__13951__auto___18751 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18751,mults,ensure_mult,p){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18751,mults,ensure_mult,p){\nreturn (function (state_17814){var state_val_17815 = (state_17814[1]);if((state_val_17815 === 1))\n{var state_17814__$1 = state_17814;var statearr_17816_18752 = state_17814__$1;(statearr_17816_18752[2] = null);\n(statearr_17816_18752[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 2))\n{var state_17814__$1 = state_17814;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_17814__$1,4,ch);\n} else\n{if((state_val_17815 === 3))\n{var inst_17812 = (state_17814[2]);var state_17814__$1 = state_17814;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_17814__$1,inst_17812);\n} else\n{if((state_val_17815 === 4))\n{var inst_17743 = (state_17814[7]);var inst_17743__$1 = (state_17814[2]);var inst_17744 = (inst_17743__$1 == null);var state_17814__$1 = (function (){var statearr_17817 = state_17814;(statearr_17817[7] = inst_17743__$1);\nreturn statearr_17817;\n})();if(cljs.core.truth_(inst_17744))\n{var statearr_17818_18753 = state_17814__$1;(statearr_17818_18753[1] = 5);\n} else\n{var statearr_17819_18754 = state_17814__$1;(statearr_17819_18754[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 5))\n{var inst_17750 = cljs.core.deref.call(null,mults);var inst_17751 = cljs.core.vals.call(null,inst_17750);var inst_17752 = cljs.core.seq.call(null,inst_17751);var inst_17753 = inst_17752;var inst_17754 = null;var inst_17755 = 0;var inst_17756 = 0;var state_17814__$1 = (function (){var statearr_17820 = state_17814;(statearr_17820[8] = inst_17753);\n(statearr_17820[9] = inst_17754);\n(statearr_17820[10] = inst_17756);\n(statearr_17820[11] = inst_17755);\nreturn statearr_17820;\n})();var statearr_17821_18755 = state_17814__$1;(statearr_17821_18755[2] = null);\n(statearr_17821_18755[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 6))\n{var inst_17791 = (state_17814[12]);var inst_17793 = (state_17814[13]);var inst_17743 = (state_17814[7]);var inst_17791__$1 = topic_fn.call(null,inst_17743);var inst_17792 = cljs.core.deref.call(null,mults);var inst_17793__$1 = cljs.core.get.call(null,inst_17792,inst_17791__$1);var state_17814__$1 = (function (){var statearr_17822 = state_17814;(statearr_17822[12] = inst_17791__$1);\n(statearr_17822[13] = inst_17793__$1);\nreturn statearr_17822;\n})();if(cljs.core.truth_(inst_17793__$1))\n{var statearr_17823_18756 = state_17814__$1;(statearr_17823_18756[1] = 19);\n} else\n{var statearr_17824_18757 = state_17814__$1;(statearr_17824_18757[1] = 20);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 7))\n{var inst_17810 = (state_17814[2]);var state_17814__$1 = state_17814;var statearr_17825_18758 = state_17814__$1;(statearr_17825_18758[2] = inst_17810);\n(statearr_17825_18758[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 8))\n{var inst_17756 = (state_17814[10]);var inst_17755 = (state_17814[11]);var inst_17758 = (inst_17756 < inst_17755);var inst_17759 = inst_17758;var state_17814__$1 = state_17814;if(cljs.core.truth_(inst_17759))\n{var statearr_17829_18759 = state_17814__$1;(statearr_17829_18759[1] = 10);\n} else\n{var statearr_17830_18760 = state_17814__$1;(statearr_17830_18760[1] = 11);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 9))\n{var inst_17789 = (state_17814[2]);var state_17814__$1 = state_17814;var statearr_17831_18761 = state_17814__$1;(statearr_17831_18761[2] = inst_17789);\n(statearr_17831_18761[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 10))\n{var inst_17753 = (state_17814[8]);var inst_17754 = (state_17814[9]);var inst_17756 = (state_17814[10]);var inst_17755 = (state_17814[11]);var inst_17761 = cljs.core._nth.call(null,inst_17754,inst_17756);var inst_17762 = cljs.core.async.muxch_STAR_.call(null,inst_17761);var inst_17763 = cljs.core.async.close_BANG_.call(null,inst_17762);var inst_17764 = (inst_17756 + 1);var tmp17826 = inst_17753;var tmp17827 = inst_17754;var tmp17828 = inst_17755;var inst_17753__$1 = tmp17826;var inst_17754__$1 = tmp17827;var inst_17755__$1 = tmp17828;var inst_17756__$1 = inst_17764;var state_17814__$1 = (function (){var statearr_17832 = state_17814;(statearr_17832[8] = inst_17753__$1);\n(statearr_17832[9] = inst_17754__$1);\n(statearr_17832[14] = inst_17763);\n(statearr_17832[10] = inst_17756__$1);\n(statearr_17832[11] = inst_17755__$1);\nreturn statearr_17832;\n})();var statearr_17833_18762 = state_17814__$1;(statearr_17833_18762[2] = null);\n(statearr_17833_18762[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 11))\n{var inst_17753 = (state_17814[8]);var inst_17767 = (state_17814[15]);var inst_17767__$1 = cljs.core.seq.call(null,inst_17753);var state_17814__$1 = (function (){var statearr_17834 = state_17814;(statearr_17834[15] = inst_17767__$1);\nreturn statearr_17834;\n})();if(inst_17767__$1)\n{var statearr_17835_18763 = state_17814__$1;(statearr_17835_18763[1] = 13);\n} else\n{var statearr_17836_18764 = state_17814__$1;(statearr_17836_18764[1] = 14);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 12))\n{var inst_17787 = (state_17814[2]);var state_17814__$1 = state_17814;var statearr_17837_18765 = state_17814__$1;(statearr_17837_18765[2] = inst_17787);\n(statearr_17837_18765[1] = 9);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 13))\n{var inst_17767 = (state_17814[15]);var inst_17769 = cljs.core.chunked_seq_QMARK_.call(null,inst_17767);var state_17814__$1 = state_17814;if(inst_17769)\n{var statearr_17838_18766 = state_17814__$1;(statearr_17838_18766[1] = 16);\n} else\n{var statearr_17839_18767 = state_17814__$1;(statearr_17839_18767[1] = 17);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 14))\n{var state_17814__$1 = state_17814;var statearr_17840_18768 = state_17814__$1;(statearr_17840_18768[2] = null);\n(statearr_17840_18768[1] = 15);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 15))\n{var inst_17785 = (state_17814[2]);var state_17814__$1 = state_17814;var statearr_17841_18769 = state_17814__$1;(statearr_17841_18769[2] = inst_17785);\n(statearr_17841_18769[1] = 12);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 16))\n{var inst_17767 = (state_17814[15]);var inst_17771 = cljs.core.chunk_first.call(null,inst_17767);var inst_17772 = cljs.core.chunk_rest.call(null,inst_17767);var inst_17773 = cljs.core.count.call(null,inst_17771);var inst_17753 = inst_17772;var inst_17754 = inst_17771;var inst_17755 = inst_17773;var inst_17756 = 0;var state_17814__$1 = (function (){var statearr_17842 = state_17814;(statearr_17842[8] = inst_17753);\n(statearr_17842[9] = inst_17754);\n(statearr_17842[10] = inst_17756);\n(statearr_17842[11] = inst_17755);\nreturn statearr_17842;\n})();var statearr_17843_18770 = state_17814__$1;(statearr_17843_18770[2] = null);\n(statearr_17843_18770[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 17))\n{var inst_17767 = (state_17814[15]);var inst_17776 = cljs.core.first.call(null,inst_17767);var inst_17777 = cljs.core.async.muxch_STAR_.call(null,inst_17776);var inst_17778 = cljs.core.async.close_BANG_.call(null,inst_17777);var inst_17779 = cljs.core.next.call(null,inst_17767);var inst_17753 = inst_17779;var inst_17754 = null;var inst_17755 = 0;var inst_17756 = 0;var state_17814__$1 = (function (){var statearr_17844 = state_17814;(statearr_17844[8] = inst_17753);\n(statearr_17844[9] = inst_17754);\n(statearr_17844[10] = inst_17756);\n(statearr_17844[11] = inst_17755);\n(statearr_17844[16] = inst_17778);\nreturn statearr_17844;\n})();var statearr_17845_18771 = state_17814__$1;(statearr_17845_18771[2] = null);\n(statearr_17845_18771[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 18))\n{var inst_17782 = (state_17814[2]);var state_17814__$1 = state_17814;var statearr_17846_18772 = state_17814__$1;(statearr_17846_18772[2] = inst_17782);\n(statearr_17846_18772[1] = 15);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 19))\n{var state_17814__$1 = state_17814;var statearr_17847_18773 = state_17814__$1;(statearr_17847_18773[2] = null);\n(statearr_17847_18773[1] = 24);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 20))\n{var state_17814__$1 = state_17814;var statearr_17848_18774 = state_17814__$1;(statearr_17848_18774[2] = null);\n(statearr_17848_18774[1] = 21);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 21))\n{var inst_17807 = (state_17814[2]);var state_17814__$1 = (function (){var statearr_17849 = state_17814;(statearr_17849[17] = inst_17807);\nreturn statearr_17849;\n})();var statearr_17850_18775 = state_17814__$1;(statearr_17850_18775[2] = null);\n(statearr_17850_18775[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 22))\n{var inst_17804 = (state_17814[2]);var state_17814__$1 = state_17814;var statearr_17851_18776 = state_17814__$1;(statearr_17851_18776[2] = inst_17804);\n(statearr_17851_18776[1] = 21);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 23))\n{var inst_17791 = (state_17814[12]);var inst_17795 = (state_17814[2]);var inst_17796 = cljs.core.swap_BANG_.call(null,mults,cljs.core.dissoc,inst_17791);var state_17814__$1 = (function (){var statearr_17852 = state_17814;(statearr_17852[18] = inst_17795);\nreturn statearr_17852;\n})();var statearr_17853_18777 = state_17814__$1;(statearr_17853_18777[2] = inst_17796);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17814__$1);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17815 === 24))\n{var inst_17793 = (state_17814[13]);var inst_17743 = (state_17814[7]);var _ = cljs.core.async.impl.ioc_helpers.add_exception_frame.call(null,state_17814,23,Object,null,22);var inst_17800 = cljs.core.async.muxch_STAR_.call(null,inst_17793);var state_17814__$1 = state_17814;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_17814__$1,25,inst_17800,inst_17743);\n} else\n{if((state_val_17815 === 25))\n{var inst_17802 = (state_17814[2]);var state_17814__$1 = state_17814;var statearr_17854_18778 = state_17814__$1;(statearr_17854_18778[2] = inst_17802);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17814__$1);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18751,mults,ensure_mult,p))\n;return ((function (switch__13881__auto__,c__13951__auto___18751,mults,ensure_mult,p){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_17858 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];(statearr_17858[0] = state_machine__13882__auto__);\n(statearr_17858[1] = 1);\nreturn statearr_17858;\n});\nvar state_machine__13882__auto____1 = (function (state_17814){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_17814);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e17859){if((e17859 instanceof Object))\n{var ex__13885__auto__ = e17859;var statearr_17860_18779 = state_17814;(statearr_17860_18779[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17814);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e17859;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18780 = state_17814;\nstate_17814 = G__18780;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_17814){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_17814);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18751,mults,ensure_mult,p))\n})();var state__13953__auto__ = (function (){var statearr_17861 = f__13952__auto__.call(null);(statearr_17861[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18751);\nreturn statearr_17861;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18751,mults,ensure_mult,p))\n);\nreturn p;\n});\npub = function(ch,topic_fn,buf_fn){\nswitch(arguments.length){\ncase 2:\nreturn pub__2.call(this,ch,topic_fn);\ncase 3:\nreturn pub__3.call(this,ch,topic_fn,buf_fn);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\npub.cljs$core$IFn$_invoke$arity$2 = pub__2;\npub.cljs$core$IFn$_invoke$arity$3 = pub__3;\nreturn pub;\n})()\n;\n/**\n* Subscribes a channel to a topic of a pub.\n* \n* By default the channel will be closed when the source closes,\n* but can be determined by the close? parameter.\n*/\ncljs.core.async.sub = (function() {\nvar sub = null;\nvar sub__3 = (function (p,topic,ch){return sub.call(null,p,topic,ch,true);\n});\nvar sub__4 = (function (p,topic,ch,close_QMARK_){return cljs.core.async.sub_STAR_.call(null,p,topic,ch,close_QMARK_);\n});\nsub = function(p,topic,ch,close_QMARK_){\nswitch(arguments.length){\ncase 3:\nreturn sub__3.call(this,p,topic,ch);\ncase 4:\nreturn sub__4.call(this,p,topic,ch,close_QMARK_);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nsub.cljs$core$IFn$_invoke$arity$3 = sub__3;\nsub.cljs$core$IFn$_invoke$arity$4 = sub__4;\nreturn sub;\n})()\n;\n/**\n* Unsubscribes a channel from a topic of a pub\n*/\ncljs.core.async.unsub = (function unsub(p,topic,ch){return cljs.core.async.unsub_STAR_.call(null,p,topic,ch);\n});\n/**\n* Unsubscribes all channels from a pub, or a topic of a pub\n*/\ncljs.core.async.unsub_all = (function() {\nvar unsub_all = null;\nvar unsub_all__1 = (function (p){return cljs.core.async.unsub_all_STAR_.call(null,p);\n});\nvar unsub_all__2 = (function (p,topic){return cljs.core.async.unsub_all_STAR_.call(null,p,topic);\n});\nunsub_all = function(p,topic){\nswitch(arguments.length){\ncase 1:\nreturn unsub_all__1.call(this,p);\ncase 2:\nreturn unsub_all__2.call(this,p,topic);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nunsub_all.cljs$core$IFn$_invoke$arity$1 = unsub_all__1;\nunsub_all.cljs$core$IFn$_invoke$arity$2 = unsub_all__2;\nreturn unsub_all;\n})()\n;\n/**\n* Takes a function and a collection of source channels, and returns a\n* channel which contains the values produced by applying f to the set\n* of first items taken from each source channel, followed by applying\n* f to the set of second items from each channel, until any one of the\n* channels is closed, at which point the output channel will be\n* closed. The returned channel will be unbuffered by default, or a\n* buf-or-n can be supplied\n*/\ncljs.core.async.map = (function() {\nvar map = null;\nvar map__2 = (function (f,chs){return map.call(null,f,chs,null);\n});\nvar map__3 = (function (f,chs,buf_or_n){var chs__$1 = cljs.core.vec.call(null,chs);var out = cljs.core.async.chan.call(null,buf_or_n);var cnt = cljs.core.count.call(null,chs__$1);var rets = cljs.core.object_array.call(null,cnt);var dchan = cljs.core.async.chan.call(null,1);var dctr = cljs.core.atom.call(null,null);var done = cljs.core.mapv.call(null,((function (chs__$1,out,cnt,rets,dchan,dctr){\nreturn (function (i){return ((function (chs__$1,out,cnt,rets,dchan,dctr){\nreturn (function (ret){(rets[i] = ret);\nif((cljs.core.swap_BANG_.call(null,dctr,cljs.core.dec) === 0))\n{return cljs.core.async.put_BANG_.call(null,dchan,rets.slice(0));\n} else\n{return null;\n}\n});\n;})(chs__$1,out,cnt,rets,dchan,dctr))\n});})(chs__$1,out,cnt,rets,dchan,dctr))\n,cljs.core.range.call(null,cnt));var c__13951__auto___18781 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18781,chs__$1,out,cnt,rets,dchan,dctr,done){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18781,chs__$1,out,cnt,rets,dchan,dctr,done){\nreturn (function (state_17968){var state_val_17969 = (state_17968[1]);if((state_val_17969 === 1))\n{var state_17968__$1 = state_17968;var statearr_17970_18782 = state_17968__$1;(statearr_17970_18782[2] = null);\n(statearr_17970_18782[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 2))\n{var inst_17931 = cljs.core.reset_BANG_.call(null,dctr,cnt);var inst_17932 = 0;var state_17968__$1 = (function (){var statearr_17971 = state_17968;(statearr_17971[7] = inst_17932);\n(statearr_17971[8] = inst_17931);\nreturn statearr_17971;\n})();var statearr_17972_18783 = state_17968__$1;(statearr_17972_18783[2] = null);\n(statearr_17972_18783[1] = 4);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 3))\n{var inst_17966 = (state_17968[2]);var state_17968__$1 = state_17968;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_17968__$1,inst_17966);\n} else\n{if((state_val_17969 === 4))\n{var inst_17932 = (state_17968[7]);var inst_17934 = (inst_17932 < cnt);var state_17968__$1 = state_17968;if(cljs.core.truth_(inst_17934))\n{var statearr_17973_18784 = state_17968__$1;(statearr_17973_18784[1] = 6);\n} else\n{var statearr_17974_18785 = state_17968__$1;(statearr_17974_18785[1] = 7);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 5))\n{var inst_17952 = (state_17968[2]);var state_17968__$1 = (function (){var statearr_17975 = state_17968;(statearr_17975[9] = inst_17952);\nreturn statearr_17975;\n})();return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_17968__$1,12,dchan);\n} else\n{if((state_val_17969 === 6))\n{var state_17968__$1 = state_17968;var statearr_17976_18786 = state_17968__$1;(statearr_17976_18786[2] = null);\n(statearr_17976_18786[1] = 11);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 7))\n{var state_17968__$1 = state_17968;var statearr_17977_18787 = state_17968__$1;(statearr_17977_18787[2] = null);\n(statearr_17977_18787[1] = 8);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 8))\n{var inst_17950 = (state_17968[2]);var state_17968__$1 = state_17968;var statearr_17978_18788 = state_17968__$1;(statearr_17978_18788[2] = inst_17950);\n(statearr_17978_18788[1] = 5);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 9))\n{var inst_17932 = (state_17968[7]);var inst_17945 = (state_17968[2]);var inst_17946 = (inst_17932 + 1);var inst_17932__$1 = inst_17946;var state_17968__$1 = (function (){var statearr_17979 = state_17968;(statearr_17979[10] = inst_17945);\n(statearr_17979[7] = inst_17932__$1);\nreturn statearr_17979;\n})();var statearr_17980_18789 = state_17968__$1;(statearr_17980_18789[2] = null);\n(statearr_17980_18789[1] = 4);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 10))\n{var inst_17936 = (state_17968[2]);var inst_17937 = cljs.core.swap_BANG_.call(null,dctr,cljs.core.dec);var state_17968__$1 = (function (){var statearr_17981 = state_17968;(statearr_17981[11] = inst_17936);\nreturn statearr_17981;\n})();var statearr_17982_18790 = state_17968__$1;(statearr_17982_18790[2] = inst_17937);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17968__$1);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 11))\n{var inst_17932 = (state_17968[7]);var _ = cljs.core.async.impl.ioc_helpers.add_exception_frame.call(null,state_17968,10,Object,null,9);var inst_17941 = chs__$1.call(null,inst_17932);var inst_17942 = done.call(null,inst_17932);var inst_17943 = cljs.core.async.take_BANG_.call(null,inst_17941,inst_17942);var state_17968__$1 = state_17968;var statearr_17983_18791 = state_17968__$1;(statearr_17983_18791[2] = inst_17943);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17968__$1);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 12))\n{var inst_17954 = (state_17968[12]);var inst_17954__$1 = (state_17968[2]);var inst_17955 = cljs.core.some.call(null,cljs.core.nil_QMARK_,inst_17954__$1);var state_17968__$1 = (function (){var statearr_17984 = state_17968;(statearr_17984[12] = inst_17954__$1);\nreturn statearr_17984;\n})();if(cljs.core.truth_(inst_17955))\n{var statearr_17985_18792 = state_17968__$1;(statearr_17985_18792[1] = 13);\n} else\n{var statearr_17986_18793 = state_17968__$1;(statearr_17986_18793[1] = 14);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 13))\n{var inst_17957 = cljs.core.async.close_BANG_.call(null,out);var state_17968__$1 = state_17968;var statearr_17987_18794 = state_17968__$1;(statearr_17987_18794[2] = inst_17957);\n(statearr_17987_18794[1] = 15);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 14))\n{var inst_17954 = (state_17968[12]);var inst_17959 = cljs.core.apply.call(null,f,inst_17954);var state_17968__$1 = state_17968;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_17968__$1,16,out,inst_17959);\n} else\n{if((state_val_17969 === 15))\n{var inst_17964 = (state_17968[2]);var state_17968__$1 = state_17968;var statearr_17988_18795 = state_17968__$1;(statearr_17988_18795[2] = inst_17964);\n(statearr_17988_18795[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_17969 === 16))\n{var inst_17961 = (state_17968[2]);var state_17968__$1 = (function (){var statearr_17989 = state_17968;(statearr_17989[13] = inst_17961);\nreturn statearr_17989;\n})();var statearr_17990_18796 = state_17968__$1;(statearr_17990_18796[2] = null);\n(statearr_17990_18796[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18781,chs__$1,out,cnt,rets,dchan,dctr,done))\n;return ((function (switch__13881__auto__,c__13951__auto___18781,chs__$1,out,cnt,rets,dchan,dctr,done){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_17994 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null];(statearr_17994[0] = state_machine__13882__auto__);\n(statearr_17994[1] = 1);\nreturn statearr_17994;\n});\nvar state_machine__13882__auto____1 = (function (state_17968){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_17968);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e17995){if((e17995 instanceof Object))\n{var ex__13885__auto__ = e17995;var statearr_17996_18797 = state_17968;(statearr_17996_18797[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_17968);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e17995;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18798 = state_17968;\nstate_17968 = G__18798;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_17968){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_17968);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18781,chs__$1,out,cnt,rets,dchan,dctr,done))\n})();var state__13953__auto__ = (function (){var statearr_17997 = f__13952__auto__.call(null);(statearr_17997[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18781);\nreturn statearr_17997;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18781,chs__$1,out,cnt,rets,dchan,dctr,done))\n);\nreturn out;\n});\nmap = function(f,chs,buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn map__2.call(this,f,chs);\ncase 3:\nreturn map__3.call(this,f,chs,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nmap.cljs$core$IFn$_invoke$arity$2 = map__2;\nmap.cljs$core$IFn$_invoke$arity$3 = map__3;\nreturn map;\n})()\n;\n/**\n* Takes a collection of source channels and returns a channel which\n* contains all values taken from them. The returned channel will be\n* unbuffered by default, or a buf-or-n can be supplied. The channel\n* will close after all the source channels have closed.\n*/\ncljs.core.async.merge = (function() {\nvar merge = null;\nvar merge__1 = (function (chs){return merge.call(null,chs,null);\n});\nvar merge__2 = (function (chs,buf_or_n){var out = cljs.core.async.chan.call(null,buf_or_n);var c__13951__auto___18799 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18799,out){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18799,out){\nreturn (function (state_18081){var state_val_18082 = (state_18081[1]);if((state_val_18082 === 1))\n{var inst_18052 = cljs.core.vec.call(null,chs);var inst_18053 = inst_18052;var state_18081__$1 = (function (){var statearr_18083 = state_18081;(statearr_18083[7] = inst_18053);\nreturn statearr_18083;\n})();var statearr_18084_18800 = state_18081__$1;(statearr_18084_18800[2] = null);\n(statearr_18084_18800[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18082 === 2))\n{var inst_18053 = (state_18081[7]);var inst_18055 = cljs.core.count.call(null,inst_18053);var inst_18056 = (inst_18055 > 0);var state_18081__$1 = state_18081;if(cljs.core.truth_(inst_18056))\n{var statearr_18085_18801 = state_18081__$1;(statearr_18085_18801[1] = 4);\n} else\n{var statearr_18086_18802 = state_18081__$1;(statearr_18086_18802[1] = 5);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18082 === 3))\n{var inst_18079 = (state_18081[2]);var state_18081__$1 = state_18081;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_18081__$1,inst_18079);\n} else\n{if((state_val_18082 === 4))\n{var inst_18053 = (state_18081[7]);var state_18081__$1 = state_18081;return cljs.core.async.impl.ioc_helpers.ioc_alts_BANG_.call(null,state_18081__$1,7,inst_18053);\n} else\n{if((state_val_18082 === 5))\n{var inst_18075 = cljs.core.async.close_BANG_.call(null,out);var state_18081__$1 = state_18081;var statearr_18087_18803 = state_18081__$1;(statearr_18087_18803[2] = inst_18075);\n(statearr_18087_18803[1] = 6);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18082 === 6))\n{var inst_18077 = (state_18081[2]);var state_18081__$1 = state_18081;var statearr_18088_18804 = state_18081__$1;(statearr_18088_18804[2] = inst_18077);\n(statearr_18088_18804[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18082 === 7))\n{var inst_18061 = (state_18081[8]);var inst_18060 = (state_18081[9]);var inst_18060__$1 = (state_18081[2]);var inst_18061__$1 = cljs.core.nth.call(null,inst_18060__$1,0,null);var inst_18062 = cljs.core.nth.call(null,inst_18060__$1,1,null);var inst_18063 = (inst_18061__$1 == null);var state_18081__$1 = (function (){var statearr_18089 = state_18081;(statearr_18089[8] = inst_18061__$1);\n(statearr_18089[10] = inst_18062);\n(statearr_18089[9] = inst_18060__$1);\nreturn statearr_18089;\n})();if(cljs.core.truth_(inst_18063))\n{var statearr_18090_18805 = state_18081__$1;(statearr_18090_18805[1] = 8);\n} else\n{var statearr_18091_18806 = state_18081__$1;(statearr_18091_18806[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18082 === 8))\n{var inst_18061 = (state_18081[8]);var inst_18062 = (state_18081[10]);var inst_18060 = (state_18081[9]);var inst_18053 = (state_18081[7]);var inst_18065 = (function (){var c = inst_18062;var v = inst_18061;var vec__18058 = inst_18060;var cs = inst_18053;return ((function (c,v,vec__18058,cs,inst_18061,inst_18062,inst_18060,inst_18053,state_val_18082,c__13951__auto___18799,out){\nreturn (function (p1__17998_SHARP_){return cljs.core.not_EQ_.call(null,c,p1__17998_SHARP_);\n});\n;})(c,v,vec__18058,cs,inst_18061,inst_18062,inst_18060,inst_18053,state_val_18082,c__13951__auto___18799,out))\n})();var inst_18066 = cljs.core.filterv.call(null,inst_18065,inst_18053);var inst_18053__$1 = inst_18066;var state_18081__$1 = (function (){var statearr_18092 = state_18081;(statearr_18092[7] = inst_18053__$1);\nreturn statearr_18092;\n})();var statearr_18093_18807 = state_18081__$1;(statearr_18093_18807[2] = null);\n(statearr_18093_18807[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18082 === 9))\n{var inst_18061 = (state_18081[8]);var state_18081__$1 = state_18081;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_18081__$1,11,out,inst_18061);\n} else\n{if((state_val_18082 === 10))\n{var inst_18073 = (state_18081[2]);var state_18081__$1 = state_18081;var statearr_18095_18808 = state_18081__$1;(statearr_18095_18808[2] = inst_18073);\n(statearr_18095_18808[1] = 6);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18082 === 11))\n{var inst_18053 = (state_18081[7]);var inst_18070 = (state_18081[2]);var tmp18094 = inst_18053;var inst_18053__$1 = tmp18094;var state_18081__$1 = (function (){var statearr_18096 = state_18081;(statearr_18096[11] = inst_18070);\n(statearr_18096[7] = inst_18053__$1);\nreturn statearr_18096;\n})();var statearr_18097_18809 = state_18081__$1;(statearr_18097_18809[2] = null);\n(statearr_18097_18809[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18799,out))\n;return ((function (switch__13881__auto__,c__13951__auto___18799,out){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_18101 = [null,null,null,null,null,null,null,null,null,null,null,null];(statearr_18101[0] = state_machine__13882__auto__);\n(statearr_18101[1] = 1);\nreturn statearr_18101;\n});\nvar state_machine__13882__auto____1 = (function (state_18081){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_18081);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e18102){if((e18102 instanceof Object))\n{var ex__13885__auto__ = e18102;var statearr_18103_18810 = state_18081;(statearr_18103_18810[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_18081);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e18102;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18811 = state_18081;\nstate_18081 = G__18811;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_18081){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_18081);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18799,out))\n})();var state__13953__auto__ = (function (){var statearr_18104 = f__13952__auto__.call(null);(statearr_18104[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18799);\nreturn statearr_18104;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18799,out))\n);\nreturn out;\n});\nmerge = function(chs,buf_or_n){\nswitch(arguments.length){\ncase 1:\nreturn merge__1.call(this,chs);\ncase 2:\nreturn merge__2.call(this,chs,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nmerge.cljs$core$IFn$_invoke$arity$1 = merge__1;\nmerge.cljs$core$IFn$_invoke$arity$2 = merge__2;\nreturn merge;\n})()\n;\n/**\n* Returns a channel containing the single (collection) result of the\n* items taken from the channel conjoined to the supplied\n* collection. ch must close before into produces a result.\n*/\ncljs.core.async.into = (function into(coll,ch){return cljs.core.async.reduce.call(null,cljs.core.conj,coll,ch);\n});\n/**\n* Returns a channel that will return, at most, n items from ch. After n items\n* have been returned, or ch has been closed, the return chanel will close.\n* \n* The output channel is unbuffered by default, unless buf-or-n is given.\n*/\ncljs.core.async.take = (function() {\nvar take = null;\nvar take__2 = (function (n,ch){return take.call(null,n,ch,null);\n});\nvar take__3 = (function (n,ch,buf_or_n){var out = cljs.core.async.chan.call(null,buf_or_n);var c__13951__auto___18812 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18812,out){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18812,out){\nreturn (function (state_18174){var state_val_18175 = (state_18174[1]);if((state_val_18175 === 1))\n{var inst_18151 = 0;var state_18174__$1 = (function (){var statearr_18176 = state_18174;(statearr_18176[7] = inst_18151);\nreturn statearr_18176;\n})();var statearr_18177_18813 = state_18174__$1;(statearr_18177_18813[2] = null);\n(statearr_18177_18813[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18175 === 2))\n{var inst_18151 = (state_18174[7]);var inst_18153 = (inst_18151 < n);var state_18174__$1 = state_18174;if(cljs.core.truth_(inst_18153))\n{var statearr_18178_18814 = state_18174__$1;(statearr_18178_18814[1] = 4);\n} else\n{var statearr_18179_18815 = state_18174__$1;(statearr_18179_18815[1] = 5);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18175 === 3))\n{var inst_18171 = (state_18174[2]);var inst_18172 = cljs.core.async.close_BANG_.call(null,out);var state_18174__$1 = (function (){var statearr_18180 = state_18174;(statearr_18180[8] = inst_18171);\nreturn statearr_18180;\n})();return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_18174__$1,inst_18172);\n} else\n{if((state_val_18175 === 4))\n{var state_18174__$1 = state_18174;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_18174__$1,7,ch);\n} else\n{if((state_val_18175 === 5))\n{var state_18174__$1 = state_18174;var statearr_18181_18816 = state_18174__$1;(statearr_18181_18816[2] = null);\n(statearr_18181_18816[1] = 6);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18175 === 6))\n{var inst_18169 = (state_18174[2]);var state_18174__$1 = state_18174;var statearr_18182_18817 = state_18174__$1;(statearr_18182_18817[2] = inst_18169);\n(statearr_18182_18817[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18175 === 7))\n{var inst_18156 = (state_18174[9]);var inst_18156__$1 = (state_18174[2]);var inst_18157 = (inst_18156__$1 == null);var inst_18158 = cljs.core.not.call(null,inst_18157);var state_18174__$1 = (function (){var statearr_18183 = state_18174;(statearr_18183[9] = inst_18156__$1);\nreturn statearr_18183;\n})();if(inst_18158)\n{var statearr_18184_18818 = state_18174__$1;(statearr_18184_18818[1] = 8);\n} else\n{var statearr_18185_18819 = state_18174__$1;(statearr_18185_18819[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18175 === 8))\n{var inst_18156 = (state_18174[9]);var state_18174__$1 = state_18174;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_18174__$1,11,out,inst_18156);\n} else\n{if((state_val_18175 === 9))\n{var state_18174__$1 = state_18174;var statearr_18186_18820 = state_18174__$1;(statearr_18186_18820[2] = null);\n(statearr_18186_18820[1] = 10);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18175 === 10))\n{var inst_18166 = (state_18174[2]);var state_18174__$1 = state_18174;var statearr_18187_18821 = state_18174__$1;(statearr_18187_18821[2] = inst_18166);\n(statearr_18187_18821[1] = 6);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18175 === 11))\n{var inst_18151 = (state_18174[7]);var inst_18161 = (state_18174[2]);var inst_18162 = (inst_18151 + 1);var inst_18151__$1 = inst_18162;var state_18174__$1 = (function (){var statearr_18188 = state_18174;(statearr_18188[7] = inst_18151__$1);\n(statearr_18188[10] = inst_18161);\nreturn statearr_18188;\n})();var statearr_18189_18822 = state_18174__$1;(statearr_18189_18822[2] = null);\n(statearr_18189_18822[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18812,out))\n;return ((function (switch__13881__auto__,c__13951__auto___18812,out){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_18193 = [null,null,null,null,null,null,null,null,null,null,null];(statearr_18193[0] = state_machine__13882__auto__);\n(statearr_18193[1] = 1);\nreturn statearr_18193;\n});\nvar state_machine__13882__auto____1 = (function (state_18174){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_18174);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e18194){if((e18194 instanceof Object))\n{var ex__13885__auto__ = e18194;var statearr_18195_18823 = state_18174;(statearr_18195_18823[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_18174);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e18194;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18824 = state_18174;\nstate_18174 = G__18824;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_18174){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_18174);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18812,out))\n})();var state__13953__auto__ = (function (){var statearr_18196 = f__13952__auto__.call(null);(statearr_18196[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18812);\nreturn statearr_18196;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18812,out))\n);\nreturn out;\n});\ntake = function(n,ch,buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn take__2.call(this,n,ch);\ncase 3:\nreturn take__3.call(this,n,ch,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\ntake.cljs$core$IFn$_invoke$arity$2 = take__2;\ntake.cljs$core$IFn$_invoke$arity$3 = take__3;\nreturn take;\n})()\n;\n/**\n* Returns a channel that will contain values from ch. Consecutive duplicate\n* values will be dropped.\n* \n* The output channel is unbuffered by default, unless buf-or-n is given.\n*/\ncljs.core.async.unique = (function() {\nvar unique = null;\nvar unique__1 = (function (ch){return unique.call(null,ch,null);\n});\nvar unique__2 = (function (ch,buf_or_n){var out = cljs.core.async.chan.call(null,buf_or_n);var c__13951__auto___18825 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18825,out){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18825,out){\nreturn (function (state_18268){var state_val_18269 = (state_18268[1]);if((state_val_18269 === 1))\n{var inst_18245 = null;var state_18268__$1 = (function (){var statearr_18270 = state_18268;(statearr_18270[7] = inst_18245);\nreturn statearr_18270;\n})();var statearr_18271_18826 = state_18268__$1;(statearr_18271_18826[2] = null);\n(statearr_18271_18826[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18269 === 2))\n{var state_18268__$1 = state_18268;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_18268__$1,4,ch);\n} else\n{if((state_val_18269 === 3))\n{var inst_18265 = (state_18268[2]);var inst_18266 = cljs.core.async.close_BANG_.call(null,out);var state_18268__$1 = (function (){var statearr_18272 = state_18268;(statearr_18272[8] = inst_18265);\nreturn statearr_18272;\n})();return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_18268__$1,inst_18266);\n} else\n{if((state_val_18269 === 4))\n{var inst_18248 = (state_18268[9]);var inst_18248__$1 = (state_18268[2]);var inst_18249 = (inst_18248__$1 == null);var inst_18250 = cljs.core.not.call(null,inst_18249);var state_18268__$1 = (function (){var statearr_18273 = state_18268;(statearr_18273[9] = inst_18248__$1);\nreturn statearr_18273;\n})();if(inst_18250)\n{var statearr_18274_18827 = state_18268__$1;(statearr_18274_18827[1] = 5);\n} else\n{var statearr_18275_18828 = state_18268__$1;(statearr_18275_18828[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18269 === 5))\n{var inst_18248 = (state_18268[9]);var inst_18245 = (state_18268[7]);var inst_18252 = cljs.core._EQ_.call(null,inst_18248,inst_18245);var state_18268__$1 = state_18268;if(inst_18252)\n{var statearr_18276_18829 = state_18268__$1;(statearr_18276_18829[1] = 8);\n} else\n{var statearr_18277_18830 = state_18268__$1;(statearr_18277_18830[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18269 === 6))\n{var state_18268__$1 = state_18268;var statearr_18279_18831 = state_18268__$1;(statearr_18279_18831[2] = null);\n(statearr_18279_18831[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18269 === 7))\n{var inst_18263 = (state_18268[2]);var state_18268__$1 = state_18268;var statearr_18280_18832 = state_18268__$1;(statearr_18280_18832[2] = inst_18263);\n(statearr_18280_18832[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18269 === 8))\n{var inst_18245 = (state_18268[7]);var tmp18278 = inst_18245;var inst_18245__$1 = tmp18278;var state_18268__$1 = (function (){var statearr_18281 = state_18268;(statearr_18281[7] = inst_18245__$1);\nreturn statearr_18281;\n})();var statearr_18282_18833 = state_18268__$1;(statearr_18282_18833[2] = null);\n(statearr_18282_18833[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18269 === 9))\n{var inst_18248 = (state_18268[9]);var state_18268__$1 = state_18268;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_18268__$1,11,out,inst_18248);\n} else\n{if((state_val_18269 === 10))\n{var inst_18260 = (state_18268[2]);var state_18268__$1 = state_18268;var statearr_18283_18834 = state_18268__$1;(statearr_18283_18834[2] = inst_18260);\n(statearr_18283_18834[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18269 === 11))\n{var inst_18248 = (state_18268[9]);var inst_18257 = (state_18268[2]);var inst_18245 = inst_18248;var state_18268__$1 = (function (){var statearr_18284 = state_18268;(statearr_18284[7] = inst_18245);\n(statearr_18284[10] = inst_18257);\nreturn statearr_18284;\n})();var statearr_18285_18835 = state_18268__$1;(statearr_18285_18835[2] = null);\n(statearr_18285_18835[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18825,out))\n;return ((function (switch__13881__auto__,c__13951__auto___18825,out){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_18289 = [null,null,null,null,null,null,null,null,null,null,null];(statearr_18289[0] = state_machine__13882__auto__);\n(statearr_18289[1] = 1);\nreturn statearr_18289;\n});\nvar state_machine__13882__auto____1 = (function (state_18268){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_18268);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e18290){if((e18290 instanceof Object))\n{var ex__13885__auto__ = e18290;var statearr_18291_18836 = state_18268;(statearr_18291_18836[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_18268);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e18290;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18837 = state_18268;\nstate_18268 = G__18837;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_18268){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_18268);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18825,out))\n})();var state__13953__auto__ = (function (){var statearr_18292 = f__13952__auto__.call(null);(statearr_18292[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18825);\nreturn statearr_18292;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18825,out))\n);\nreturn out;\n});\nunique = function(ch,buf_or_n){\nswitch(arguments.length){\ncase 1:\nreturn unique__1.call(this,ch);\ncase 2:\nreturn unique__2.call(this,ch,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nunique.cljs$core$IFn$_invoke$arity$1 = unique__1;\nunique.cljs$core$IFn$_invoke$arity$2 = unique__2;\nreturn unique;\n})()\n;\n/**\n* Returns a channel that will contain vectors of n items taken from ch. The\n* final vector in the return channel may be smaller than n if ch closed before\n* the vector could be completely filled.\n* \n* The output channel is unbuffered by default, unless buf-or-n is given\n*/\ncljs.core.async.partition = (function() {\nvar partition = null;\nvar partition__2 = (function (n,ch){return partition.call(null,n,ch,null);\n});\nvar partition__3 = (function (n,ch,buf_or_n){var out = cljs.core.async.chan.call(null,buf_or_n);var c__13951__auto___18838 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18838,out){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18838,out){\nreturn (function (state_18397){var state_val_18398 = (state_18397[1]);if((state_val_18398 === 1))\n{var inst_18360 = (new Array(n));var inst_18361 = inst_18360;var inst_18362 = 0;var state_18397__$1 = (function (){var statearr_18399 = state_18397;(statearr_18399[7] = inst_18361);\n(statearr_18399[8] = inst_18362);\nreturn statearr_18399;\n})();var statearr_18400_18839 = state_18397__$1;(statearr_18400_18839[2] = null);\n(statearr_18400_18839[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 2))\n{var state_18397__$1 = state_18397;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_18397__$1,4,ch);\n} else\n{if((state_val_18398 === 3))\n{var inst_18395 = (state_18397[2]);var state_18397__$1 = state_18397;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_18397__$1,inst_18395);\n} else\n{if((state_val_18398 === 4))\n{var inst_18365 = (state_18397[9]);var inst_18365__$1 = (state_18397[2]);var inst_18366 = (inst_18365__$1 == null);var inst_18367 = cljs.core.not.call(null,inst_18366);var state_18397__$1 = (function (){var statearr_18401 = state_18397;(statearr_18401[9] = inst_18365__$1);\nreturn statearr_18401;\n})();if(inst_18367)\n{var statearr_18402_18840 = state_18397__$1;(statearr_18402_18840[1] = 5);\n} else\n{var statearr_18403_18841 = state_18397__$1;(statearr_18403_18841[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 5))\n{var inst_18365 = (state_18397[9]);var inst_18370 = (state_18397[10]);var inst_18361 = (state_18397[7]);var inst_18362 = (state_18397[8]);var inst_18369 = (inst_18361[inst_18362] = inst_18365);var inst_18370__$1 = (inst_18362 + 1);var inst_18371 = (inst_18370__$1 < n);var state_18397__$1 = (function (){var statearr_18404 = state_18397;(statearr_18404[11] = inst_18369);\n(statearr_18404[10] = inst_18370__$1);\nreturn statearr_18404;\n})();if(cljs.core.truth_(inst_18371))\n{var statearr_18405_18842 = state_18397__$1;(statearr_18405_18842[1] = 8);\n} else\n{var statearr_18406_18843 = state_18397__$1;(statearr_18406_18843[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 6))\n{var inst_18362 = (state_18397[8]);var inst_18383 = (inst_18362 > 0);var state_18397__$1 = state_18397;if(cljs.core.truth_(inst_18383))\n{var statearr_18408_18844 = state_18397__$1;(statearr_18408_18844[1] = 12);\n} else\n{var statearr_18409_18845 = state_18397__$1;(statearr_18409_18845[1] = 13);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 7))\n{var inst_18393 = (state_18397[2]);var state_18397__$1 = state_18397;var statearr_18410_18846 = state_18397__$1;(statearr_18410_18846[2] = inst_18393);\n(statearr_18410_18846[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 8))\n{var inst_18370 = (state_18397[10]);var inst_18361 = (state_18397[7]);var tmp18407 = inst_18361;var inst_18361__$1 = tmp18407;var inst_18362 = inst_18370;var state_18397__$1 = (function (){var statearr_18411 = state_18397;(statearr_18411[7] = inst_18361__$1);\n(statearr_18411[8] = inst_18362);\nreturn statearr_18411;\n})();var statearr_18412_18847 = state_18397__$1;(statearr_18412_18847[2] = null);\n(statearr_18412_18847[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 9))\n{var inst_18361 = (state_18397[7]);var inst_18375 = cljs.core.vec.call(null,inst_18361);var state_18397__$1 = state_18397;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_18397__$1,11,out,inst_18375);\n} else\n{if((state_val_18398 === 10))\n{var inst_18381 = (state_18397[2]);var state_18397__$1 = state_18397;var statearr_18413_18848 = state_18397__$1;(statearr_18413_18848[2] = inst_18381);\n(statearr_18413_18848[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 11))\n{var inst_18377 = (state_18397[2]);var inst_18378 = (new Array(n));var inst_18361 = inst_18378;var inst_18362 = 0;var state_18397__$1 = (function (){var statearr_18414 = state_18397;(statearr_18414[12] = inst_18377);\n(statearr_18414[7] = inst_18361);\n(statearr_18414[8] = inst_18362);\nreturn statearr_18414;\n})();var statearr_18415_18849 = state_18397__$1;(statearr_18415_18849[2] = null);\n(statearr_18415_18849[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 12))\n{var inst_18361 = (state_18397[7]);var inst_18385 = cljs.core.vec.call(null,inst_18361);var state_18397__$1 = state_18397;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_18397__$1,15,out,inst_18385);\n} else\n{if((state_val_18398 === 13))\n{var state_18397__$1 = state_18397;var statearr_18416_18850 = state_18397__$1;(statearr_18416_18850[2] = null);\n(statearr_18416_18850[1] = 14);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 14))\n{var inst_18390 = (state_18397[2]);var inst_18391 = cljs.core.async.close_BANG_.call(null,out);var state_18397__$1 = (function (){var statearr_18417 = state_18397;(statearr_18417[13] = inst_18390);\nreturn statearr_18417;\n})();var statearr_18418_18851 = state_18397__$1;(statearr_18418_18851[2] = inst_18391);\n(statearr_18418_18851[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18398 === 15))\n{var inst_18387 = (state_18397[2]);var state_18397__$1 = state_18397;var statearr_18419_18852 = state_18397__$1;(statearr_18419_18852[2] = inst_18387);\n(statearr_18419_18852[1] = 14);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18838,out))\n;return ((function (switch__13881__auto__,c__13951__auto___18838,out){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_18423 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null];(statearr_18423[0] = state_machine__13882__auto__);\n(statearr_18423[1] = 1);\nreturn statearr_18423;\n});\nvar state_machine__13882__auto____1 = (function (state_18397){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_18397);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e18424){if((e18424 instanceof Object))\n{var ex__13885__auto__ = e18424;var statearr_18425_18853 = state_18397;(statearr_18425_18853[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_18397);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e18424;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18854 = state_18397;\nstate_18397 = G__18854;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_18397){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_18397);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18838,out))\n})();var state__13953__auto__ = (function (){var statearr_18426 = f__13952__auto__.call(null);(statearr_18426[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18838);\nreturn statearr_18426;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18838,out))\n);\nreturn out;\n});\npartition = function(n,ch,buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn partition__2.call(this,n,ch);\ncase 3:\nreturn partition__3.call(this,n,ch,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\npartition.cljs$core$IFn$_invoke$arity$2 = partition__2;\npartition.cljs$core$IFn$_invoke$arity$3 = partition__3;\nreturn partition;\n})()\n;\n/**\n* Returns a channel that will contain vectors of items taken from ch. New\n* vectors will be created whenever (f itm) returns a value that differs from\n* the previous item's (f itm).\n* \n* The output channel is unbuffered, unless buf-or-n is given\n*/\ncljs.core.async.partition_by = (function() {\nvar partition_by = null;\nvar partition_by__2 = (function (f,ch){return partition_by.call(null,f,ch,null);\n});\nvar partition_by__3 = (function (f,ch,buf_or_n){var out = cljs.core.async.chan.call(null,buf_or_n);var c__13951__auto___18855 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___18855,out){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___18855,out){\nreturn (function (state_18539){var state_val_18540 = (state_18539[1]);if((state_val_18540 === 1))\n{var inst_18498 = [];var inst_18499 = inst_18498;var inst_18500 = new cljs.core.Keyword(\"cljs.core.async\",\"nothing\",\"cljs.core.async/nothing\",4382193538);var state_18539__$1 = (function (){var statearr_18541 = state_18539;(statearr_18541[7] = inst_18499);\n(statearr_18541[8] = inst_18500);\nreturn statearr_18541;\n})();var statearr_18542_18856 = state_18539__$1;(statearr_18542_18856[2] = null);\n(statearr_18542_18856[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 2))\n{var state_18539__$1 = state_18539;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_18539__$1,4,ch);\n} else\n{if((state_val_18540 === 3))\n{var inst_18537 = (state_18539[2]);var state_18539__$1 = state_18539;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_18539__$1,inst_18537);\n} else\n{if((state_val_18540 === 4))\n{var inst_18503 = (state_18539[9]);var inst_18503__$1 = (state_18539[2]);var inst_18504 = (inst_18503__$1 == null);var inst_18505 = cljs.core.not.call(null,inst_18504);var state_18539__$1 = (function (){var statearr_18543 = state_18539;(statearr_18543[9] = inst_18503__$1);\nreturn statearr_18543;\n})();if(inst_18505)\n{var statearr_18544_18857 = state_18539__$1;(statearr_18544_18857[1] = 5);\n} else\n{var statearr_18545_18858 = state_18539__$1;(statearr_18545_18858[1] = 6);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 5))\n{var inst_18500 = (state_18539[8]);var inst_18507 = (state_18539[10]);var inst_18503 = (state_18539[9]);var inst_18507__$1 = f.call(null,inst_18503);var inst_18508 = cljs.core._EQ_.call(null,inst_18507__$1,inst_18500);var inst_18509 = cljs.core.keyword_identical_QMARK_.call(null,inst_18500,new cljs.core.Keyword(\"cljs.core.async\",\"nothing\",\"cljs.core.async/nothing\",4382193538));var inst_18510 = (inst_18508) || (inst_18509);var state_18539__$1 = (function (){var statearr_18546 = state_18539;(statearr_18546[10] = inst_18507__$1);\nreturn statearr_18546;\n})();if(cljs.core.truth_(inst_18510))\n{var statearr_18547_18859 = state_18539__$1;(statearr_18547_18859[1] = 8);\n} else\n{var statearr_18548_18860 = state_18539__$1;(statearr_18548_18860[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 6))\n{var inst_18499 = (state_18539[7]);var inst_18524 = inst_18499.length;var inst_18525 = (inst_18524 > 0);var state_18539__$1 = state_18539;if(cljs.core.truth_(inst_18525))\n{var statearr_18550_18861 = state_18539__$1;(statearr_18550_18861[1] = 12);\n} else\n{var statearr_18551_18862 = state_18539__$1;(statearr_18551_18862[1] = 13);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 7))\n{var inst_18535 = (state_18539[2]);var state_18539__$1 = state_18539;var statearr_18552_18863 = state_18539__$1;(statearr_18552_18863[2] = inst_18535);\n(statearr_18552_18863[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 8))\n{var inst_18499 = (state_18539[7]);var inst_18507 = (state_18539[10]);var inst_18503 = (state_18539[9]);var inst_18512 = inst_18499.push(inst_18503);var tmp18549 = inst_18499;var inst_18499__$1 = tmp18549;var inst_18500 = inst_18507;var state_18539__$1 = (function (){var statearr_18553 = state_18539;(statearr_18553[7] = inst_18499__$1);\n(statearr_18553[8] = inst_18500);\n(statearr_18553[11] = inst_18512);\nreturn statearr_18553;\n})();var statearr_18554_18864 = state_18539__$1;(statearr_18554_18864[2] = null);\n(statearr_18554_18864[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 9))\n{var inst_18499 = (state_18539[7]);var inst_18515 = cljs.core.vec.call(null,inst_18499);var state_18539__$1 = state_18539;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_18539__$1,11,out,inst_18515);\n} else\n{if((state_val_18540 === 10))\n{var inst_18522 = (state_18539[2]);var state_18539__$1 = state_18539;var statearr_18555_18865 = state_18539__$1;(statearr_18555_18865[2] = inst_18522);\n(statearr_18555_18865[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 11))\n{var inst_18507 = (state_18539[10]);var inst_18503 = (state_18539[9]);var inst_18517 = (state_18539[2]);var inst_18518 = [];var inst_18519 = inst_18518.push(inst_18503);var inst_18499 = inst_18518;var inst_18500 = inst_18507;var state_18539__$1 = (function (){var statearr_18556 = state_18539;(statearr_18556[7] = inst_18499);\n(statearr_18556[12] = inst_18519);\n(statearr_18556[8] = inst_18500);\n(statearr_18556[13] = inst_18517);\nreturn statearr_18556;\n})();var statearr_18557_18866 = state_18539__$1;(statearr_18557_18866[2] = null);\n(statearr_18557_18866[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 12))\n{var inst_18499 = (state_18539[7]);var inst_18527 = cljs.core.vec.call(null,inst_18499);var state_18539__$1 = state_18539;return cljs.core.async.impl.ioc_helpers.put_BANG_.call(null,state_18539__$1,15,out,inst_18527);\n} else\n{if((state_val_18540 === 13))\n{var state_18539__$1 = state_18539;var statearr_18558_18867 = state_18539__$1;(statearr_18558_18867[2] = null);\n(statearr_18558_18867[1] = 14);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 14))\n{var inst_18532 = (state_18539[2]);var inst_18533 = cljs.core.async.close_BANG_.call(null,out);var state_18539__$1 = (function (){var statearr_18559 = state_18539;(statearr_18559[14] = inst_18532);\nreturn statearr_18559;\n})();var statearr_18560_18868 = state_18539__$1;(statearr_18560_18868[2] = inst_18533);\n(statearr_18560_18868[1] = 7);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_18540 === 15))\n{var inst_18529 = (state_18539[2]);var state_18539__$1 = state_18539;var statearr_18561_18869 = state_18539__$1;(statearr_18561_18869[2] = inst_18529);\n(statearr_18561_18869[1] = 14);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto___18855,out))\n;return ((function (switch__13881__auto__,c__13951__auto___18855,out){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_18565 = [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];(statearr_18565[0] = state_machine__13882__auto__);\n(statearr_18565[1] = 1);\nreturn statearr_18565;\n});\nvar state_machine__13882__auto____1 = (function (state_18539){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_18539);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e18566){if((e18566 instanceof Object))\n{var ex__13885__auto__ = e18566;var statearr_18567_18870 = state_18539;(statearr_18567_18870[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_18539);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e18566;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__18871 = state_18539;\nstate_18539 = G__18871;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_18539){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_18539);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___18855,out))\n})();var state__13953__auto__ = (function (){var statearr_18568 = f__13952__auto__.call(null);(statearr_18568[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___18855);\nreturn statearr_18568;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___18855,out))\n);\nreturn out;\n});\npartition_by = function(f,ch,buf_or_n){\nswitch(arguments.length){\ncase 2:\nreturn partition_by__2.call(this,f,ch);\ncase 3:\nreturn partition_by__3.call(this,f,ch,buf_or_n);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\npartition_by.cljs$core$IFn$_invoke$arity$2 = partition_by__2;\npartition_by.cljs$core$IFn$_invoke$arity$3 = partition_by__3;\nreturn partition_by;\n})()\n;\n}\nif(!lt.util.load.provided_QMARK_('quiescent')) {\ngoog.provide('quiescent');\ngoog.require('cljs.core');\n/**\n* Utility function. Takes an object which is (possibly) a\n* ClojureScript map. If the value is a ClojureScript map, convert it\n* to a JavaScript properties object. Otherwise, return the argument\n* unchanged.\n*/\nquiescent.js_props = (function js_props(obj){if(cljs.core.map_QMARK_.call(null,obj))\n{var o = (function (){var obj12085 = {};return obj12085;\n})();var seq__12086_12099 = cljs.core.seq.call(null,obj);var chunk__12087_12100 = null;var count__12088_12101 = 0;var i__12089_12102 = 0;while(true){\nif((i__12089_12102 < count__12088_12101))\n{var vec__12090_12103 = cljs.core._nth.call(null,chunk__12087_12100,i__12089_12102);var k_12104 = cljs.core.nth.call(null,vec__12090_12103,0,null);var v_12105 = cljs.core.nth.call(null,vec__12090_12103,1,null);(o[cljs.core.name.call(null,k_12104)] = js_props.call(null,v_12105));\n{\nvar G__12106 = seq__12086_12099;\nvar G__12107 = chunk__12087_12100;\nvar G__12108 = count__12088_12101;\nvar G__12109 = (i__12089_12102 + 1);\nseq__12086_12099 = G__12106;\nchunk__12087_12100 = G__12107;\ncount__12088_12101 = G__12108;\ni__12089_12102 = G__12109;\ncontinue;\n}\n} else\n{var temp__4092__auto___12110 = cljs.core.seq.call(null,seq__12086_12099);if(temp__4092__auto___12110)\n{var seq__12086_12111__$1 = temp__4092__auto___12110;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12086_12111__$1))\n{var c__5632__auto___12112 = cljs.core.chunk_first.call(null,seq__12086_12111__$1);{\nvar G__12113 = cljs.core.chunk_rest.call(null,seq__12086_12111__$1);\nvar G__12114 = c__5632__auto___12112;\nvar G__12115 = cljs.core.count.call(null,c__5632__auto___12112);\nvar G__12116 = 0;\nseq__12086_12099 = G__12113;\nchunk__12087_12100 = G__12114;\ncount__12088_12101 = G__12115;\ni__12089_12102 = G__12116;\ncontinue;\n}\n} else\n{var vec__12091_12117 = cljs.core.first.call(null,seq__12086_12111__$1);var k_12118 = cljs.core.nth.call(null,vec__12091_12117,0,null);var v_12119 = cljs.core.nth.call(null,vec__12091_12117,1,null);(o[cljs.core.name.call(null,k_12118)] = js_props.call(null,v_12119));\n{\nvar G__12120 = cljs.core.next.call(null,seq__12086_12111__$1);\nvar G__12121 = null;\nvar G__12122 = 0;\nvar G__12123 = 0;\nseq__12086_12099 = G__12120;\nchunk__12087_12100 = G__12121;\ncount__12088_12101 = G__12122;\ni__12089_12102 = G__12123;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn o;\n} else\n{return obj;\n}\n});\n/**\n* Within a component render function, will be bound to the raw\n* ReactJS component.\n*/\nquiescent._STAR_component_STAR_ = null;\n/**\n* Return a function that will return a ReactJS component, using the\n* provided function as the implementation for React's 'render' method\n* on the component.\n* \n* The given render function should take a single immutable value as\n* its first argument, and return a single ReactJS component.\n* Additional arguments to the component constructor will be passed as\n* additional arguments to the render function whenever it is invoked,\n* but will *not* be included in any calculations regarding whether the\n* component should re-render.\n*/\nquiescent.component = (function component(renderer){var react_component = React.createClass({\"render\": (function (){var this$ = this;var _STAR_component_STAR_12093 = quiescent._STAR_component_STAR_;try{quiescent._STAR_component_STAR_ = this$;\nreturn cljs.core.apply.call(null,renderer,(this$.props[\"value\"]),(this$.props[\"statics\"]));\n}finally {quiescent._STAR_component_STAR_ = _STAR_component_STAR_12093;\n}}), \"shouldComponentUpdate\": (function (next_props,_){var this$ = this;return cljs.core.not_EQ_.call(null,(this$.props[\"value\"]),(next_props[\"value\"]));\n})});return ((function (react_component){\nreturn (function() { \nvar G__12124__delegate = function (value,static_args){return react_component.call(null,{\"statics\": static_args, \"value\": value});\n};\nvar G__12124 = function (value,var_args){\nvar static_args = null;if (arguments.length > 1) {\n  static_args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);} \nreturn G__12124__delegate.call(this,value,static_args);};\nG__12124.cljs$lang$maxFixedArity = 1;\nG__12124.cljs$lang$applyTo = (function (arglist__12125){\nvar value = cljs.core.first(arglist__12125);\nvar static_args = cljs.core.rest(arglist__12125);\nreturn G__12124__delegate(value,static_args);\n});\nG__12124.cljs$core$IFn$_invoke$arity$variadic = G__12124__delegate;\nreturn G__12124;\n})()\n;\n;})(react_component))\n});\n/**\n* Wrapper component used to mix-in lifecycle access\n*/\nquiescent.WrapperComponent = React.createClass({\"componentWillUnmount\": (function (){var this$ = this;var temp__4092__auto__ = (this$.props[\"onWillUnmount\"]);if(cljs.core.truth_(temp__4092__auto__))\n{var f = temp__4092__auto__;var _STAR_component_STAR_12098 = quiescent._STAR_component_STAR_;try{quiescent._STAR_component_STAR_ = this$;\nreturn f.call(null);\n}finally {quiescent._STAR_component_STAR_ = _STAR_component_STAR_12098;\n}} else\n{return null;\n}\n}), \"componentWillUpdate\": (function (_,___$1){var this$ = this;var temp__4092__auto__ = (this$.props[\"onWillUpdate\"]);if(cljs.core.truth_(temp__4092__auto__))\n{var f = temp__4092__auto__;var _STAR_component_STAR_12097 = quiescent._STAR_component_STAR_;try{quiescent._STAR_component_STAR_ = this$;\nreturn f.call(null);\n}finally {quiescent._STAR_component_STAR_ = _STAR_component_STAR_12097;\n}} else\n{return null;\n}\n}), \"componentWillMount\": (function (){var this$ = this;var temp__4092__auto__ = (this$.props[\"onWillMount\"]);if(cljs.core.truth_(temp__4092__auto__))\n{var f = temp__4092__auto__;var _STAR_component_STAR_12096 = quiescent._STAR_component_STAR_;try{quiescent._STAR_component_STAR_ = this$;\nreturn f.call(null);\n}finally {quiescent._STAR_component_STAR_ = _STAR_component_STAR_12096;\n}} else\n{return null;\n}\n}), \"componentDidMount\": (function (){var this$ = this;var temp__4092__auto__ = (this$.props[\"onMount\"]);if(cljs.core.truth_(temp__4092__auto__))\n{var f = temp__4092__auto__;var _STAR_component_STAR_12095 = quiescent._STAR_component_STAR_;try{quiescent._STAR_component_STAR_ = this$;\nreturn f.call(null,this$.getDOMNode());\n}finally {quiescent._STAR_component_STAR_ = _STAR_component_STAR_12095;\n}} else\n{return null;\n}\n}), \"componentDidUpdate\": (function (prev_props,prev_state){var this$ = this;var temp__4092__auto__ = (this$.props[\"onUpdate\"]);if(cljs.core.truth_(temp__4092__auto__))\n{var f = temp__4092__auto__;var _STAR_component_STAR_12094 = quiescent._STAR_component_STAR_;try{quiescent._STAR_component_STAR_ = this$;\nreturn f.call(null,this$.getDOMNode());\n}finally {quiescent._STAR_component_STAR_ = _STAR_component_STAR_12094;\n}} else\n{return null;\n}\n}), \"render\": (function (){var this$ = this;return (this$.props[\"wrappee\"]);\n})});\n/**\n* Create a wrapper function for a compoment implementing multiple\n* lifecycle functions. Lifecycle functions are specified as any number\n* of additional key-value pairs passed as arguments to this function.\n* \n* Valid keys and values include:\n* \n* :onUpdate - will call the provided function,\n* passing the rendered DOM node as a single arg\n* :onMount - will call the provided function,\n* passing the rendered DOM node as a single arg\n* :onWillUpdate - will call the provided function with no arguments\n* :onWillMount - will call the provided function with no arguments\n* :onWillUnmount - will call the provided function with no arguments\n* @param {...*} var_args\n*/\nquiescent.wrapper = (function() { \nvar wrapper__delegate = function (child,kvs){var props = quiescent.js_props.call(null,cljs.core.apply.call(null,cljs.core.array_map,new cljs.core.Keyword(null,\"wrappee\",\"wrappee\",2609412088),child,kvs));var temp__4092__auto___12126 = (child.props[\"key\"]);if(cljs.core.truth_(temp__4092__auto___12126))\n{var key_12127 = temp__4092__auto___12126;(props[\"key\"] = key_12127);\n} else\n{}\nreturn quiescent.WrapperComponent.call(null,props);\n};\nvar wrapper = function (child,var_args){\nvar kvs = null;if (arguments.length > 1) {\n  kvs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);} \nreturn wrapper__delegate.call(this,child,kvs);};\nwrapper.cljs$lang$maxFixedArity = 1;\nwrapper.cljs$lang$applyTo = (function (arglist__12128){\nvar child = cljs.core.first(arglist__12128);\nvar kvs = cljs.core.rest(arglist__12128);\nreturn wrapper__delegate(child,kvs);\n});\nwrapper.cljs$core$IFn$_invoke$arity$variadic = wrapper__delegate;\nreturn wrapper;\n})()\n;\n/**\n* Wrap a component, specifying a function to be called on the\n* componentDidUpdate lifecycle event.\n* \n* The function will be passed the rendered DOM node.\n*/\nquiescent.on_update = (function on_update(child,f){return quiescent.wrapper.call(null,child,new cljs.core.Keyword(null,\"onUpdate\",\"onUpdate\",2573468410),f);\n});\n/**\n* Wrap a component, specifying a function to be called on the\n* componentDidMount lifecycle event.\n* \n* The function will be passed the rendered DOM node.\n*/\nquiescent.on_mount = (function on_mount(child,f){return quiescent.wrapper.call(null,child,new cljs.core.Keyword(null,\"onMount\",\"onMount\",3966305516),f);\n});\n/**\n* Wrap a component, specifying a function to be called on the\n* componentDidMount AND the componentDidUpdate lifecycle events.\n* \n* The function will be passed the rendered DOM node.\n*/\nquiescent.on_render = (function on_render(child,f){return quiescent.wrapper.call(null,child,new cljs.core.Keyword(null,\"onMount\",\"onMount\",3966305516),f,new cljs.core.Keyword(null,\"onUpdate\",\"onUpdate\",2573468410),f);\n});\n/**\n* Wrap a component, specifying a function to be called on the\n* componentWillMount lifecycle event.\n* \n* The function will be called with no arguments.\n*/\nquiescent.on_will_mount = (function on_will_mount(child,f){return quiescent.wrapper.call(null,child,new cljs.core.Keyword(null,\"onWillMount\",\"onWillMount\",3483492282),f);\n});\n/**\n* Wrap a component, specifying a function to be called on the\n* componentWillUpdate lifecycle event.\n* \n* The function will be called with no arguments.\n*/\nquiescent.on_will_update = (function on_will_update(child,f){return quiescent.wrapper.call(null,child,new cljs.core.Keyword(null,\"onWillUpdate\",\"onWillUpdate\",4786127340),f);\n});\n/**\n* Wrap a component, specifying a function to be called on the\n* componentWillMount AND the componentWillUpdate lifecycle events.\n* \n* The function will be called with no arguments.\n*/\nquiescent.on_will_render = (function on_will_render(child,f){return quiescent.wrapper.call(null,child,new cljs.core.Keyword(null,\"onWillMount\",\"onWillMount\",3483492282),f,new cljs.core.Keyword(null,\"onWillUpdate\",\"onWillUpdate\",4786127340),f);\n});\n/**\n* Wrap a component, specifying a function to be called on the\n* componentWillUnmount lifecycle event.\n* \n* The function will be called with no arguments.\n*/\nquiescent.on_will_unmount = (function on_will_unmount(child,f){return quiescent.wrapper.call(null,child,new cljs.core.Keyword(null,\"onWillUnmount\",\"onWillUnmount\",1940175105),f);\n});\n/**\n* Given a ReactJS component, immediately render it, rooted to the\n* specified DOM node.\n*/\nquiescent.render = (function render(component,node){return React.renderComponent(component,node);\n});\n}\nif(!lt.util.load.provided_QMARK_('quiescent.dom')) {\ngoog.provide('quiescent.dom');\ngoog.require('cljs.core');\ngoog.require('quiescent');\ngoog.require('quiescent');\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.a = (function() { \nvar a__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8510_9458 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8511_9459 = null;var count__8512_9460 = 0;var i__8513_9461 = 0;while(true){\nif((i__8513_9461 < count__8512_9460))\n{var arg__7510__auto___9462 = cljs.core._nth.call(null,chunk__8511_9459,i__8513_9461);a__7509__auto__.push(arg__7510__auto___9462);\n{\nvar G__9463 = seq__8510_9458;\nvar G__9464 = chunk__8511_9459;\nvar G__9465 = count__8512_9460;\nvar G__9466 = (i__8513_9461 + 1);\nseq__8510_9458 = G__9463;\nchunk__8511_9459 = G__9464;\ncount__8512_9460 = G__9465;\ni__8513_9461 = G__9466;\ncontinue;\n}\n} else\n{var temp__4092__auto___9467 = cljs.core.seq.call(null,seq__8510_9458);if(temp__4092__auto___9467)\n{var seq__8510_9468__$1 = temp__4092__auto___9467;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8510_9468__$1))\n{var c__5632__auto___9469 = cljs.core.chunk_first.call(null,seq__8510_9468__$1);{\nvar G__9470 = cljs.core.chunk_rest.call(null,seq__8510_9468__$1);\nvar G__9471 = c__5632__auto___9469;\nvar G__9472 = cljs.core.count.call(null,c__5632__auto___9469);\nvar G__9473 = 0;\nseq__8510_9458 = G__9470;\nchunk__8511_9459 = G__9471;\ncount__8512_9460 = G__9472;\ni__8513_9461 = G__9473;\ncontinue;\n}\n} else\n{var arg__7510__auto___9474 = cljs.core.first.call(null,seq__8510_9468__$1);a__7509__auto__.push(arg__7510__auto___9474);\n{\nvar G__9475 = cljs.core.next.call(null,seq__8510_9468__$1);\nvar G__9476 = null;\nvar G__9477 = 0;\nvar G__9478 = 0;\nseq__8510_9458 = G__9475;\nchunk__8511_9459 = G__9476;\ncount__8512_9460 = G__9477;\ni__8513_9461 = G__9478;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.a.apply(null,a__7509__auto__);\n};\nvar a = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn a__delegate.call(this,args__7508__auto__);};\na.cljs$lang$maxFixedArity = 0;\na.cljs$lang$applyTo = (function (arglist__9479){\nvar args__7508__auto__ = cljs.core.seq(arglist__9479);\nreturn a__delegate(args__7508__auto__);\n});\na.cljs$core$IFn$_invoke$arity$variadic = a__delegate;\nreturn a;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.abbr = (function() { \nvar abbr__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8518_9480 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8519_9481 = null;var count__8520_9482 = 0;var i__8521_9483 = 0;while(true){\nif((i__8521_9483 < count__8520_9482))\n{var arg__7510__auto___9484 = cljs.core._nth.call(null,chunk__8519_9481,i__8521_9483);a__7509__auto__.push(arg__7510__auto___9484);\n{\nvar G__9485 = seq__8518_9480;\nvar G__9486 = chunk__8519_9481;\nvar G__9487 = count__8520_9482;\nvar G__9488 = (i__8521_9483 + 1);\nseq__8518_9480 = G__9485;\nchunk__8519_9481 = G__9486;\ncount__8520_9482 = G__9487;\ni__8521_9483 = G__9488;\ncontinue;\n}\n} else\n{var temp__4092__auto___9489 = cljs.core.seq.call(null,seq__8518_9480);if(temp__4092__auto___9489)\n{var seq__8518_9490__$1 = temp__4092__auto___9489;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8518_9490__$1))\n{var c__5632__auto___9491 = cljs.core.chunk_first.call(null,seq__8518_9490__$1);{\nvar G__9492 = cljs.core.chunk_rest.call(null,seq__8518_9490__$1);\nvar G__9493 = c__5632__auto___9491;\nvar G__9494 = cljs.core.count.call(null,c__5632__auto___9491);\nvar G__9495 = 0;\nseq__8518_9480 = G__9492;\nchunk__8519_9481 = G__9493;\ncount__8520_9482 = G__9494;\ni__8521_9483 = G__9495;\ncontinue;\n}\n} else\n{var arg__7510__auto___9496 = cljs.core.first.call(null,seq__8518_9490__$1);a__7509__auto__.push(arg__7510__auto___9496);\n{\nvar G__9497 = cljs.core.next.call(null,seq__8518_9490__$1);\nvar G__9498 = null;\nvar G__9499 = 0;\nvar G__9500 = 0;\nseq__8518_9480 = G__9497;\nchunk__8519_9481 = G__9498;\ncount__8520_9482 = G__9499;\ni__8521_9483 = G__9500;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.abbr.apply(null,a__7509__auto__);\n};\nvar abbr = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn abbr__delegate.call(this,args__7508__auto__);};\nabbr.cljs$lang$maxFixedArity = 0;\nabbr.cljs$lang$applyTo = (function (arglist__9501){\nvar args__7508__auto__ = cljs.core.seq(arglist__9501);\nreturn abbr__delegate(args__7508__auto__);\n});\nabbr.cljs$core$IFn$_invoke$arity$variadic = abbr__delegate;\nreturn abbr;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.address = (function() { \nvar address__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8526_9502 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8527_9503 = null;var count__8528_9504 = 0;var i__8529_9505 = 0;while(true){\nif((i__8529_9505 < count__8528_9504))\n{var arg__7510__auto___9506 = cljs.core._nth.call(null,chunk__8527_9503,i__8529_9505);a__7509__auto__.push(arg__7510__auto___9506);\n{\nvar G__9507 = seq__8526_9502;\nvar G__9508 = chunk__8527_9503;\nvar G__9509 = count__8528_9504;\nvar G__9510 = (i__8529_9505 + 1);\nseq__8526_9502 = G__9507;\nchunk__8527_9503 = G__9508;\ncount__8528_9504 = G__9509;\ni__8529_9505 = G__9510;\ncontinue;\n}\n} else\n{var temp__4092__auto___9511 = cljs.core.seq.call(null,seq__8526_9502);if(temp__4092__auto___9511)\n{var seq__8526_9512__$1 = temp__4092__auto___9511;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8526_9512__$1))\n{var c__5632__auto___9513 = cljs.core.chunk_first.call(null,seq__8526_9512__$1);{\nvar G__9514 = cljs.core.chunk_rest.call(null,seq__8526_9512__$1);\nvar G__9515 = c__5632__auto___9513;\nvar G__9516 = cljs.core.count.call(null,c__5632__auto___9513);\nvar G__9517 = 0;\nseq__8526_9502 = G__9514;\nchunk__8527_9503 = G__9515;\ncount__8528_9504 = G__9516;\ni__8529_9505 = G__9517;\ncontinue;\n}\n} else\n{var arg__7510__auto___9518 = cljs.core.first.call(null,seq__8526_9512__$1);a__7509__auto__.push(arg__7510__auto___9518);\n{\nvar G__9519 = cljs.core.next.call(null,seq__8526_9512__$1);\nvar G__9520 = null;\nvar G__9521 = 0;\nvar G__9522 = 0;\nseq__8526_9502 = G__9519;\nchunk__8527_9503 = G__9520;\ncount__8528_9504 = G__9521;\ni__8529_9505 = G__9522;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.address.apply(null,a__7509__auto__);\n};\nvar address = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn address__delegate.call(this,args__7508__auto__);};\naddress.cljs$lang$maxFixedArity = 0;\naddress.cljs$lang$applyTo = (function (arglist__9523){\nvar args__7508__auto__ = cljs.core.seq(arglist__9523);\nreturn address__delegate(args__7508__auto__);\n});\naddress.cljs$core$IFn$_invoke$arity$variadic = address__delegate;\nreturn address;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.area = (function() { \nvar area__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8534_9524 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8535_9525 = null;var count__8536_9526 = 0;var i__8537_9527 = 0;while(true){\nif((i__8537_9527 < count__8536_9526))\n{var arg__7510__auto___9528 = cljs.core._nth.call(null,chunk__8535_9525,i__8537_9527);a__7509__auto__.push(arg__7510__auto___9528);\n{\nvar G__9529 = seq__8534_9524;\nvar G__9530 = chunk__8535_9525;\nvar G__9531 = count__8536_9526;\nvar G__9532 = (i__8537_9527 + 1);\nseq__8534_9524 = G__9529;\nchunk__8535_9525 = G__9530;\ncount__8536_9526 = G__9531;\ni__8537_9527 = G__9532;\ncontinue;\n}\n} else\n{var temp__4092__auto___9533 = cljs.core.seq.call(null,seq__8534_9524);if(temp__4092__auto___9533)\n{var seq__8534_9534__$1 = temp__4092__auto___9533;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8534_9534__$1))\n{var c__5632__auto___9535 = cljs.core.chunk_first.call(null,seq__8534_9534__$1);{\nvar G__9536 = cljs.core.chunk_rest.call(null,seq__8534_9534__$1);\nvar G__9537 = c__5632__auto___9535;\nvar G__9538 = cljs.core.count.call(null,c__5632__auto___9535);\nvar G__9539 = 0;\nseq__8534_9524 = G__9536;\nchunk__8535_9525 = G__9537;\ncount__8536_9526 = G__9538;\ni__8537_9527 = G__9539;\ncontinue;\n}\n} else\n{var arg__7510__auto___9540 = cljs.core.first.call(null,seq__8534_9534__$1);a__7509__auto__.push(arg__7510__auto___9540);\n{\nvar G__9541 = cljs.core.next.call(null,seq__8534_9534__$1);\nvar G__9542 = null;\nvar G__9543 = 0;\nvar G__9544 = 0;\nseq__8534_9524 = G__9541;\nchunk__8535_9525 = G__9542;\ncount__8536_9526 = G__9543;\ni__8537_9527 = G__9544;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.area.apply(null,a__7509__auto__);\n};\nvar area = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn area__delegate.call(this,args__7508__auto__);};\narea.cljs$lang$maxFixedArity = 0;\narea.cljs$lang$applyTo = (function (arglist__9545){\nvar args__7508__auto__ = cljs.core.seq(arglist__9545);\nreturn area__delegate(args__7508__auto__);\n});\narea.cljs$core$IFn$_invoke$arity$variadic = area__delegate;\nreturn area;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.article = (function() { \nvar article__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8542_9546 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8543_9547 = null;var count__8544_9548 = 0;var i__8545_9549 = 0;while(true){\nif((i__8545_9549 < count__8544_9548))\n{var arg__7510__auto___9550 = cljs.core._nth.call(null,chunk__8543_9547,i__8545_9549);a__7509__auto__.push(arg__7510__auto___9550);\n{\nvar G__9551 = seq__8542_9546;\nvar G__9552 = chunk__8543_9547;\nvar G__9553 = count__8544_9548;\nvar G__9554 = (i__8545_9549 + 1);\nseq__8542_9546 = G__9551;\nchunk__8543_9547 = G__9552;\ncount__8544_9548 = G__9553;\ni__8545_9549 = G__9554;\ncontinue;\n}\n} else\n{var temp__4092__auto___9555 = cljs.core.seq.call(null,seq__8542_9546);if(temp__4092__auto___9555)\n{var seq__8542_9556__$1 = temp__4092__auto___9555;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8542_9556__$1))\n{var c__5632__auto___9557 = cljs.core.chunk_first.call(null,seq__8542_9556__$1);{\nvar G__9558 = cljs.core.chunk_rest.call(null,seq__8542_9556__$1);\nvar G__9559 = c__5632__auto___9557;\nvar G__9560 = cljs.core.count.call(null,c__5632__auto___9557);\nvar G__9561 = 0;\nseq__8542_9546 = G__9558;\nchunk__8543_9547 = G__9559;\ncount__8544_9548 = G__9560;\ni__8545_9549 = G__9561;\ncontinue;\n}\n} else\n{var arg__7510__auto___9562 = cljs.core.first.call(null,seq__8542_9556__$1);a__7509__auto__.push(arg__7510__auto___9562);\n{\nvar G__9563 = cljs.core.next.call(null,seq__8542_9556__$1);\nvar G__9564 = null;\nvar G__9565 = 0;\nvar G__9566 = 0;\nseq__8542_9546 = G__9563;\nchunk__8543_9547 = G__9564;\ncount__8544_9548 = G__9565;\ni__8545_9549 = G__9566;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.article.apply(null,a__7509__auto__);\n};\nvar article = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn article__delegate.call(this,args__7508__auto__);};\narticle.cljs$lang$maxFixedArity = 0;\narticle.cljs$lang$applyTo = (function (arglist__9567){\nvar args__7508__auto__ = cljs.core.seq(arglist__9567);\nreturn article__delegate(args__7508__auto__);\n});\narticle.cljs$core$IFn$_invoke$arity$variadic = article__delegate;\nreturn article;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.aside = (function() { \nvar aside__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8550_9568 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8551_9569 = null;var count__8552_9570 = 0;var i__8553_9571 = 0;while(true){\nif((i__8553_9571 < count__8552_9570))\n{var arg__7510__auto___9572 = cljs.core._nth.call(null,chunk__8551_9569,i__8553_9571);a__7509__auto__.push(arg__7510__auto___9572);\n{\nvar G__9573 = seq__8550_9568;\nvar G__9574 = chunk__8551_9569;\nvar G__9575 = count__8552_9570;\nvar G__9576 = (i__8553_9571 + 1);\nseq__8550_9568 = G__9573;\nchunk__8551_9569 = G__9574;\ncount__8552_9570 = G__9575;\ni__8553_9571 = G__9576;\ncontinue;\n}\n} else\n{var temp__4092__auto___9577 = cljs.core.seq.call(null,seq__8550_9568);if(temp__4092__auto___9577)\n{var seq__8550_9578__$1 = temp__4092__auto___9577;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8550_9578__$1))\n{var c__5632__auto___9579 = cljs.core.chunk_first.call(null,seq__8550_9578__$1);{\nvar G__9580 = cljs.core.chunk_rest.call(null,seq__8550_9578__$1);\nvar G__9581 = c__5632__auto___9579;\nvar G__9582 = cljs.core.count.call(null,c__5632__auto___9579);\nvar G__9583 = 0;\nseq__8550_9568 = G__9580;\nchunk__8551_9569 = G__9581;\ncount__8552_9570 = G__9582;\ni__8553_9571 = G__9583;\ncontinue;\n}\n} else\n{var arg__7510__auto___9584 = cljs.core.first.call(null,seq__8550_9578__$1);a__7509__auto__.push(arg__7510__auto___9584);\n{\nvar G__9585 = cljs.core.next.call(null,seq__8550_9578__$1);\nvar G__9586 = null;\nvar G__9587 = 0;\nvar G__9588 = 0;\nseq__8550_9568 = G__9585;\nchunk__8551_9569 = G__9586;\ncount__8552_9570 = G__9587;\ni__8553_9571 = G__9588;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.aside.apply(null,a__7509__auto__);\n};\nvar aside = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn aside__delegate.call(this,args__7508__auto__);};\naside.cljs$lang$maxFixedArity = 0;\naside.cljs$lang$applyTo = (function (arglist__9589){\nvar args__7508__auto__ = cljs.core.seq(arglist__9589);\nreturn aside__delegate(args__7508__auto__);\n});\naside.cljs$core$IFn$_invoke$arity$variadic = aside__delegate;\nreturn aside;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.audio = (function() { \nvar audio__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8558_9590 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8559_9591 = null;var count__8560_9592 = 0;var i__8561_9593 = 0;while(true){\nif((i__8561_9593 < count__8560_9592))\n{var arg__7510__auto___9594 = cljs.core._nth.call(null,chunk__8559_9591,i__8561_9593);a__7509__auto__.push(arg__7510__auto___9594);\n{\nvar G__9595 = seq__8558_9590;\nvar G__9596 = chunk__8559_9591;\nvar G__9597 = count__8560_9592;\nvar G__9598 = (i__8561_9593 + 1);\nseq__8558_9590 = G__9595;\nchunk__8559_9591 = G__9596;\ncount__8560_9592 = G__9597;\ni__8561_9593 = G__9598;\ncontinue;\n}\n} else\n{var temp__4092__auto___9599 = cljs.core.seq.call(null,seq__8558_9590);if(temp__4092__auto___9599)\n{var seq__8558_9600__$1 = temp__4092__auto___9599;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8558_9600__$1))\n{var c__5632__auto___9601 = cljs.core.chunk_first.call(null,seq__8558_9600__$1);{\nvar G__9602 = cljs.core.chunk_rest.call(null,seq__8558_9600__$1);\nvar G__9603 = c__5632__auto___9601;\nvar G__9604 = cljs.core.count.call(null,c__5632__auto___9601);\nvar G__9605 = 0;\nseq__8558_9590 = G__9602;\nchunk__8559_9591 = G__9603;\ncount__8560_9592 = G__9604;\ni__8561_9593 = G__9605;\ncontinue;\n}\n} else\n{var arg__7510__auto___9606 = cljs.core.first.call(null,seq__8558_9600__$1);a__7509__auto__.push(arg__7510__auto___9606);\n{\nvar G__9607 = cljs.core.next.call(null,seq__8558_9600__$1);\nvar G__9608 = null;\nvar G__9609 = 0;\nvar G__9610 = 0;\nseq__8558_9590 = G__9607;\nchunk__8559_9591 = G__9608;\ncount__8560_9592 = G__9609;\ni__8561_9593 = G__9610;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.audio.apply(null,a__7509__auto__);\n};\nvar audio = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn audio__delegate.call(this,args__7508__auto__);};\naudio.cljs$lang$maxFixedArity = 0;\naudio.cljs$lang$applyTo = (function (arglist__9611){\nvar args__7508__auto__ = cljs.core.seq(arglist__9611);\nreturn audio__delegate(args__7508__auto__);\n});\naudio.cljs$core$IFn$_invoke$arity$variadic = audio__delegate;\nreturn audio;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.b = (function() { \nvar b__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8566_9612 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8567_9613 = null;var count__8568_9614 = 0;var i__8569_9615 = 0;while(true){\nif((i__8569_9615 < count__8568_9614))\n{var arg__7510__auto___9616 = cljs.core._nth.call(null,chunk__8567_9613,i__8569_9615);a__7509__auto__.push(arg__7510__auto___9616);\n{\nvar G__9617 = seq__8566_9612;\nvar G__9618 = chunk__8567_9613;\nvar G__9619 = count__8568_9614;\nvar G__9620 = (i__8569_9615 + 1);\nseq__8566_9612 = G__9617;\nchunk__8567_9613 = G__9618;\ncount__8568_9614 = G__9619;\ni__8569_9615 = G__9620;\ncontinue;\n}\n} else\n{var temp__4092__auto___9621 = cljs.core.seq.call(null,seq__8566_9612);if(temp__4092__auto___9621)\n{var seq__8566_9622__$1 = temp__4092__auto___9621;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8566_9622__$1))\n{var c__5632__auto___9623 = cljs.core.chunk_first.call(null,seq__8566_9622__$1);{\nvar G__9624 = cljs.core.chunk_rest.call(null,seq__8566_9622__$1);\nvar G__9625 = c__5632__auto___9623;\nvar G__9626 = cljs.core.count.call(null,c__5632__auto___9623);\nvar G__9627 = 0;\nseq__8566_9612 = G__9624;\nchunk__8567_9613 = G__9625;\ncount__8568_9614 = G__9626;\ni__8569_9615 = G__9627;\ncontinue;\n}\n} else\n{var arg__7510__auto___9628 = cljs.core.first.call(null,seq__8566_9622__$1);a__7509__auto__.push(arg__7510__auto___9628);\n{\nvar G__9629 = cljs.core.next.call(null,seq__8566_9622__$1);\nvar G__9630 = null;\nvar G__9631 = 0;\nvar G__9632 = 0;\nseq__8566_9612 = G__9629;\nchunk__8567_9613 = G__9630;\ncount__8568_9614 = G__9631;\ni__8569_9615 = G__9632;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.b.apply(null,a__7509__auto__);\n};\nvar b = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn b__delegate.call(this,args__7508__auto__);};\nb.cljs$lang$maxFixedArity = 0;\nb.cljs$lang$applyTo = (function (arglist__9633){\nvar args__7508__auto__ = cljs.core.seq(arglist__9633);\nreturn b__delegate(args__7508__auto__);\n});\nb.cljs$core$IFn$_invoke$arity$variadic = b__delegate;\nreturn b;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.base = (function() { \nvar base__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8574_9634 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8575_9635 = null;var count__8576_9636 = 0;var i__8577_9637 = 0;while(true){\nif((i__8577_9637 < count__8576_9636))\n{var arg__7510__auto___9638 = cljs.core._nth.call(null,chunk__8575_9635,i__8577_9637);a__7509__auto__.push(arg__7510__auto___9638);\n{\nvar G__9639 = seq__8574_9634;\nvar G__9640 = chunk__8575_9635;\nvar G__9641 = count__8576_9636;\nvar G__9642 = (i__8577_9637 + 1);\nseq__8574_9634 = G__9639;\nchunk__8575_9635 = G__9640;\ncount__8576_9636 = G__9641;\ni__8577_9637 = G__9642;\ncontinue;\n}\n} else\n{var temp__4092__auto___9643 = cljs.core.seq.call(null,seq__8574_9634);if(temp__4092__auto___9643)\n{var seq__8574_9644__$1 = temp__4092__auto___9643;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8574_9644__$1))\n{var c__5632__auto___9645 = cljs.core.chunk_first.call(null,seq__8574_9644__$1);{\nvar G__9646 = cljs.core.chunk_rest.call(null,seq__8574_9644__$1);\nvar G__9647 = c__5632__auto___9645;\nvar G__9648 = cljs.core.count.call(null,c__5632__auto___9645);\nvar G__9649 = 0;\nseq__8574_9634 = G__9646;\nchunk__8575_9635 = G__9647;\ncount__8576_9636 = G__9648;\ni__8577_9637 = G__9649;\ncontinue;\n}\n} else\n{var arg__7510__auto___9650 = cljs.core.first.call(null,seq__8574_9644__$1);a__7509__auto__.push(arg__7510__auto___9650);\n{\nvar G__9651 = cljs.core.next.call(null,seq__8574_9644__$1);\nvar G__9652 = null;\nvar G__9653 = 0;\nvar G__9654 = 0;\nseq__8574_9634 = G__9651;\nchunk__8575_9635 = G__9652;\ncount__8576_9636 = G__9653;\ni__8577_9637 = G__9654;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.base.apply(null,a__7509__auto__);\n};\nvar base = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn base__delegate.call(this,args__7508__auto__);};\nbase.cljs$lang$maxFixedArity = 0;\nbase.cljs$lang$applyTo = (function (arglist__9655){\nvar args__7508__auto__ = cljs.core.seq(arglist__9655);\nreturn base__delegate(args__7508__auto__);\n});\nbase.cljs$core$IFn$_invoke$arity$variadic = base__delegate;\nreturn base;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.bdi = (function() { \nvar bdi__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8582_9656 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8583_9657 = null;var count__8584_9658 = 0;var i__8585_9659 = 0;while(true){\nif((i__8585_9659 < count__8584_9658))\n{var arg__7510__auto___9660 = cljs.core._nth.call(null,chunk__8583_9657,i__8585_9659);a__7509__auto__.push(arg__7510__auto___9660);\n{\nvar G__9661 = seq__8582_9656;\nvar G__9662 = chunk__8583_9657;\nvar G__9663 = count__8584_9658;\nvar G__9664 = (i__8585_9659 + 1);\nseq__8582_9656 = G__9661;\nchunk__8583_9657 = G__9662;\ncount__8584_9658 = G__9663;\ni__8585_9659 = G__9664;\ncontinue;\n}\n} else\n{var temp__4092__auto___9665 = cljs.core.seq.call(null,seq__8582_9656);if(temp__4092__auto___9665)\n{var seq__8582_9666__$1 = temp__4092__auto___9665;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8582_9666__$1))\n{var c__5632__auto___9667 = cljs.core.chunk_first.call(null,seq__8582_9666__$1);{\nvar G__9668 = cljs.core.chunk_rest.call(null,seq__8582_9666__$1);\nvar G__9669 = c__5632__auto___9667;\nvar G__9670 = cljs.core.count.call(null,c__5632__auto___9667);\nvar G__9671 = 0;\nseq__8582_9656 = G__9668;\nchunk__8583_9657 = G__9669;\ncount__8584_9658 = G__9670;\ni__8585_9659 = G__9671;\ncontinue;\n}\n} else\n{var arg__7510__auto___9672 = cljs.core.first.call(null,seq__8582_9666__$1);a__7509__auto__.push(arg__7510__auto___9672);\n{\nvar G__9673 = cljs.core.next.call(null,seq__8582_9666__$1);\nvar G__9674 = null;\nvar G__9675 = 0;\nvar G__9676 = 0;\nseq__8582_9656 = G__9673;\nchunk__8583_9657 = G__9674;\ncount__8584_9658 = G__9675;\ni__8585_9659 = G__9676;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.bdi.apply(null,a__7509__auto__);\n};\nvar bdi = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn bdi__delegate.call(this,args__7508__auto__);};\nbdi.cljs$lang$maxFixedArity = 0;\nbdi.cljs$lang$applyTo = (function (arglist__9677){\nvar args__7508__auto__ = cljs.core.seq(arglist__9677);\nreturn bdi__delegate(args__7508__auto__);\n});\nbdi.cljs$core$IFn$_invoke$arity$variadic = bdi__delegate;\nreturn bdi;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.bdo = (function() { \nvar bdo__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8590_9678 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8591_9679 = null;var count__8592_9680 = 0;var i__8593_9681 = 0;while(true){\nif((i__8593_9681 < count__8592_9680))\n{var arg__7510__auto___9682 = cljs.core._nth.call(null,chunk__8591_9679,i__8593_9681);a__7509__auto__.push(arg__7510__auto___9682);\n{\nvar G__9683 = seq__8590_9678;\nvar G__9684 = chunk__8591_9679;\nvar G__9685 = count__8592_9680;\nvar G__9686 = (i__8593_9681 + 1);\nseq__8590_9678 = G__9683;\nchunk__8591_9679 = G__9684;\ncount__8592_9680 = G__9685;\ni__8593_9681 = G__9686;\ncontinue;\n}\n} else\n{var temp__4092__auto___9687 = cljs.core.seq.call(null,seq__8590_9678);if(temp__4092__auto___9687)\n{var seq__8590_9688__$1 = temp__4092__auto___9687;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8590_9688__$1))\n{var c__5632__auto___9689 = cljs.core.chunk_first.call(null,seq__8590_9688__$1);{\nvar G__9690 = cljs.core.chunk_rest.call(null,seq__8590_9688__$1);\nvar G__9691 = c__5632__auto___9689;\nvar G__9692 = cljs.core.count.call(null,c__5632__auto___9689);\nvar G__9693 = 0;\nseq__8590_9678 = G__9690;\nchunk__8591_9679 = G__9691;\ncount__8592_9680 = G__9692;\ni__8593_9681 = G__9693;\ncontinue;\n}\n} else\n{var arg__7510__auto___9694 = cljs.core.first.call(null,seq__8590_9688__$1);a__7509__auto__.push(arg__7510__auto___9694);\n{\nvar G__9695 = cljs.core.next.call(null,seq__8590_9688__$1);\nvar G__9696 = null;\nvar G__9697 = 0;\nvar G__9698 = 0;\nseq__8590_9678 = G__9695;\nchunk__8591_9679 = G__9696;\ncount__8592_9680 = G__9697;\ni__8593_9681 = G__9698;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.bdo.apply(null,a__7509__auto__);\n};\nvar bdo = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn bdo__delegate.call(this,args__7508__auto__);};\nbdo.cljs$lang$maxFixedArity = 0;\nbdo.cljs$lang$applyTo = (function (arglist__9699){\nvar args__7508__auto__ = cljs.core.seq(arglist__9699);\nreturn bdo__delegate(args__7508__auto__);\n});\nbdo.cljs$core$IFn$_invoke$arity$variadic = bdo__delegate;\nreturn bdo;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.big = (function() { \nvar big__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8598_9700 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8599_9701 = null;var count__8600_9702 = 0;var i__8601_9703 = 0;while(true){\nif((i__8601_9703 < count__8600_9702))\n{var arg__7510__auto___9704 = cljs.core._nth.call(null,chunk__8599_9701,i__8601_9703);a__7509__auto__.push(arg__7510__auto___9704);\n{\nvar G__9705 = seq__8598_9700;\nvar G__9706 = chunk__8599_9701;\nvar G__9707 = count__8600_9702;\nvar G__9708 = (i__8601_9703 + 1);\nseq__8598_9700 = G__9705;\nchunk__8599_9701 = G__9706;\ncount__8600_9702 = G__9707;\ni__8601_9703 = G__9708;\ncontinue;\n}\n} else\n{var temp__4092__auto___9709 = cljs.core.seq.call(null,seq__8598_9700);if(temp__4092__auto___9709)\n{var seq__8598_9710__$1 = temp__4092__auto___9709;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8598_9710__$1))\n{var c__5632__auto___9711 = cljs.core.chunk_first.call(null,seq__8598_9710__$1);{\nvar G__9712 = cljs.core.chunk_rest.call(null,seq__8598_9710__$1);\nvar G__9713 = c__5632__auto___9711;\nvar G__9714 = cljs.core.count.call(null,c__5632__auto___9711);\nvar G__9715 = 0;\nseq__8598_9700 = G__9712;\nchunk__8599_9701 = G__9713;\ncount__8600_9702 = G__9714;\ni__8601_9703 = G__9715;\ncontinue;\n}\n} else\n{var arg__7510__auto___9716 = cljs.core.first.call(null,seq__8598_9710__$1);a__7509__auto__.push(arg__7510__auto___9716);\n{\nvar G__9717 = cljs.core.next.call(null,seq__8598_9710__$1);\nvar G__9718 = null;\nvar G__9719 = 0;\nvar G__9720 = 0;\nseq__8598_9700 = G__9717;\nchunk__8599_9701 = G__9718;\ncount__8600_9702 = G__9719;\ni__8601_9703 = G__9720;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.big.apply(null,a__7509__auto__);\n};\nvar big = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn big__delegate.call(this,args__7508__auto__);};\nbig.cljs$lang$maxFixedArity = 0;\nbig.cljs$lang$applyTo = (function (arglist__9721){\nvar args__7508__auto__ = cljs.core.seq(arglist__9721);\nreturn big__delegate(args__7508__auto__);\n});\nbig.cljs$core$IFn$_invoke$arity$variadic = big__delegate;\nreturn big;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.blockquote = (function() { \nvar blockquote__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8606_9722 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8607_9723 = null;var count__8608_9724 = 0;var i__8609_9725 = 0;while(true){\nif((i__8609_9725 < count__8608_9724))\n{var arg__7510__auto___9726 = cljs.core._nth.call(null,chunk__8607_9723,i__8609_9725);a__7509__auto__.push(arg__7510__auto___9726);\n{\nvar G__9727 = seq__8606_9722;\nvar G__9728 = chunk__8607_9723;\nvar G__9729 = count__8608_9724;\nvar G__9730 = (i__8609_9725 + 1);\nseq__8606_9722 = G__9727;\nchunk__8607_9723 = G__9728;\ncount__8608_9724 = G__9729;\ni__8609_9725 = G__9730;\ncontinue;\n}\n} else\n{var temp__4092__auto___9731 = cljs.core.seq.call(null,seq__8606_9722);if(temp__4092__auto___9731)\n{var seq__8606_9732__$1 = temp__4092__auto___9731;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8606_9732__$1))\n{var c__5632__auto___9733 = cljs.core.chunk_first.call(null,seq__8606_9732__$1);{\nvar G__9734 = cljs.core.chunk_rest.call(null,seq__8606_9732__$1);\nvar G__9735 = c__5632__auto___9733;\nvar G__9736 = cljs.core.count.call(null,c__5632__auto___9733);\nvar G__9737 = 0;\nseq__8606_9722 = G__9734;\nchunk__8607_9723 = G__9735;\ncount__8608_9724 = G__9736;\ni__8609_9725 = G__9737;\ncontinue;\n}\n} else\n{var arg__7510__auto___9738 = cljs.core.first.call(null,seq__8606_9732__$1);a__7509__auto__.push(arg__7510__auto___9738);\n{\nvar G__9739 = cljs.core.next.call(null,seq__8606_9732__$1);\nvar G__9740 = null;\nvar G__9741 = 0;\nvar G__9742 = 0;\nseq__8606_9722 = G__9739;\nchunk__8607_9723 = G__9740;\ncount__8608_9724 = G__9741;\ni__8609_9725 = G__9742;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.blockquote.apply(null,a__7509__auto__);\n};\nvar blockquote = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn blockquote__delegate.call(this,args__7508__auto__);};\nblockquote.cljs$lang$maxFixedArity = 0;\nblockquote.cljs$lang$applyTo = (function (arglist__9743){\nvar args__7508__auto__ = cljs.core.seq(arglist__9743);\nreturn blockquote__delegate(args__7508__auto__);\n});\nblockquote.cljs$core$IFn$_invoke$arity$variadic = blockquote__delegate;\nreturn blockquote;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.body = (function() { \nvar body__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8614_9744 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8615_9745 = null;var count__8616_9746 = 0;var i__8617_9747 = 0;while(true){\nif((i__8617_9747 < count__8616_9746))\n{var arg__7510__auto___9748 = cljs.core._nth.call(null,chunk__8615_9745,i__8617_9747);a__7509__auto__.push(arg__7510__auto___9748);\n{\nvar G__9749 = seq__8614_9744;\nvar G__9750 = chunk__8615_9745;\nvar G__9751 = count__8616_9746;\nvar G__9752 = (i__8617_9747 + 1);\nseq__8614_9744 = G__9749;\nchunk__8615_9745 = G__9750;\ncount__8616_9746 = G__9751;\ni__8617_9747 = G__9752;\ncontinue;\n}\n} else\n{var temp__4092__auto___9753 = cljs.core.seq.call(null,seq__8614_9744);if(temp__4092__auto___9753)\n{var seq__8614_9754__$1 = temp__4092__auto___9753;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8614_9754__$1))\n{var c__5632__auto___9755 = cljs.core.chunk_first.call(null,seq__8614_9754__$1);{\nvar G__9756 = cljs.core.chunk_rest.call(null,seq__8614_9754__$1);\nvar G__9757 = c__5632__auto___9755;\nvar G__9758 = cljs.core.count.call(null,c__5632__auto___9755);\nvar G__9759 = 0;\nseq__8614_9744 = G__9756;\nchunk__8615_9745 = G__9757;\ncount__8616_9746 = G__9758;\ni__8617_9747 = G__9759;\ncontinue;\n}\n} else\n{var arg__7510__auto___9760 = cljs.core.first.call(null,seq__8614_9754__$1);a__7509__auto__.push(arg__7510__auto___9760);\n{\nvar G__9761 = cljs.core.next.call(null,seq__8614_9754__$1);\nvar G__9762 = null;\nvar G__9763 = 0;\nvar G__9764 = 0;\nseq__8614_9744 = G__9761;\nchunk__8615_9745 = G__9762;\ncount__8616_9746 = G__9763;\ni__8617_9747 = G__9764;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.body.apply(null,a__7509__auto__);\n};\nvar body = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn body__delegate.call(this,args__7508__auto__);};\nbody.cljs$lang$maxFixedArity = 0;\nbody.cljs$lang$applyTo = (function (arglist__9765){\nvar args__7508__auto__ = cljs.core.seq(arglist__9765);\nreturn body__delegate(args__7508__auto__);\n});\nbody.cljs$core$IFn$_invoke$arity$variadic = body__delegate;\nreturn body;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.br = (function() { \nvar br__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8622_9766 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8623_9767 = null;var count__8624_9768 = 0;var i__8625_9769 = 0;while(true){\nif((i__8625_9769 < count__8624_9768))\n{var arg__7510__auto___9770 = cljs.core._nth.call(null,chunk__8623_9767,i__8625_9769);a__7509__auto__.push(arg__7510__auto___9770);\n{\nvar G__9771 = seq__8622_9766;\nvar G__9772 = chunk__8623_9767;\nvar G__9773 = count__8624_9768;\nvar G__9774 = (i__8625_9769 + 1);\nseq__8622_9766 = G__9771;\nchunk__8623_9767 = G__9772;\ncount__8624_9768 = G__9773;\ni__8625_9769 = G__9774;\ncontinue;\n}\n} else\n{var temp__4092__auto___9775 = cljs.core.seq.call(null,seq__8622_9766);if(temp__4092__auto___9775)\n{var seq__8622_9776__$1 = temp__4092__auto___9775;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8622_9776__$1))\n{var c__5632__auto___9777 = cljs.core.chunk_first.call(null,seq__8622_9776__$1);{\nvar G__9778 = cljs.core.chunk_rest.call(null,seq__8622_9776__$1);\nvar G__9779 = c__5632__auto___9777;\nvar G__9780 = cljs.core.count.call(null,c__5632__auto___9777);\nvar G__9781 = 0;\nseq__8622_9766 = G__9778;\nchunk__8623_9767 = G__9779;\ncount__8624_9768 = G__9780;\ni__8625_9769 = G__9781;\ncontinue;\n}\n} else\n{var arg__7510__auto___9782 = cljs.core.first.call(null,seq__8622_9776__$1);a__7509__auto__.push(arg__7510__auto___9782);\n{\nvar G__9783 = cljs.core.next.call(null,seq__8622_9776__$1);\nvar G__9784 = null;\nvar G__9785 = 0;\nvar G__9786 = 0;\nseq__8622_9766 = G__9783;\nchunk__8623_9767 = G__9784;\ncount__8624_9768 = G__9785;\ni__8625_9769 = G__9786;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.br.apply(null,a__7509__auto__);\n};\nvar br = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn br__delegate.call(this,args__7508__auto__);};\nbr.cljs$lang$maxFixedArity = 0;\nbr.cljs$lang$applyTo = (function (arglist__9787){\nvar args__7508__auto__ = cljs.core.seq(arglist__9787);\nreturn br__delegate(args__7508__auto__);\n});\nbr.cljs$core$IFn$_invoke$arity$variadic = br__delegate;\nreturn br;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.button = (function() { \nvar button__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8630_9788 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8631_9789 = null;var count__8632_9790 = 0;var i__8633_9791 = 0;while(true){\nif((i__8633_9791 < count__8632_9790))\n{var arg__7510__auto___9792 = cljs.core._nth.call(null,chunk__8631_9789,i__8633_9791);a__7509__auto__.push(arg__7510__auto___9792);\n{\nvar G__9793 = seq__8630_9788;\nvar G__9794 = chunk__8631_9789;\nvar G__9795 = count__8632_9790;\nvar G__9796 = (i__8633_9791 + 1);\nseq__8630_9788 = G__9793;\nchunk__8631_9789 = G__9794;\ncount__8632_9790 = G__9795;\ni__8633_9791 = G__9796;\ncontinue;\n}\n} else\n{var temp__4092__auto___9797 = cljs.core.seq.call(null,seq__8630_9788);if(temp__4092__auto___9797)\n{var seq__8630_9798__$1 = temp__4092__auto___9797;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8630_9798__$1))\n{var c__5632__auto___9799 = cljs.core.chunk_first.call(null,seq__8630_9798__$1);{\nvar G__9800 = cljs.core.chunk_rest.call(null,seq__8630_9798__$1);\nvar G__9801 = c__5632__auto___9799;\nvar G__9802 = cljs.core.count.call(null,c__5632__auto___9799);\nvar G__9803 = 0;\nseq__8630_9788 = G__9800;\nchunk__8631_9789 = G__9801;\ncount__8632_9790 = G__9802;\ni__8633_9791 = G__9803;\ncontinue;\n}\n} else\n{var arg__7510__auto___9804 = cljs.core.first.call(null,seq__8630_9798__$1);a__7509__auto__.push(arg__7510__auto___9804);\n{\nvar G__9805 = cljs.core.next.call(null,seq__8630_9798__$1);\nvar G__9806 = null;\nvar G__9807 = 0;\nvar G__9808 = 0;\nseq__8630_9788 = G__9805;\nchunk__8631_9789 = G__9806;\ncount__8632_9790 = G__9807;\ni__8633_9791 = G__9808;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.button.apply(null,a__7509__auto__);\n};\nvar button = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn button__delegate.call(this,args__7508__auto__);};\nbutton.cljs$lang$maxFixedArity = 0;\nbutton.cljs$lang$applyTo = (function (arglist__9809){\nvar args__7508__auto__ = cljs.core.seq(arglist__9809);\nreturn button__delegate(args__7508__auto__);\n});\nbutton.cljs$core$IFn$_invoke$arity$variadic = button__delegate;\nreturn button;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.canvas = (function() { \nvar canvas__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8638_9810 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8639_9811 = null;var count__8640_9812 = 0;var i__8641_9813 = 0;while(true){\nif((i__8641_9813 < count__8640_9812))\n{var arg__7510__auto___9814 = cljs.core._nth.call(null,chunk__8639_9811,i__8641_9813);a__7509__auto__.push(arg__7510__auto___9814);\n{\nvar G__9815 = seq__8638_9810;\nvar G__9816 = chunk__8639_9811;\nvar G__9817 = count__8640_9812;\nvar G__9818 = (i__8641_9813 + 1);\nseq__8638_9810 = G__9815;\nchunk__8639_9811 = G__9816;\ncount__8640_9812 = G__9817;\ni__8641_9813 = G__9818;\ncontinue;\n}\n} else\n{var temp__4092__auto___9819 = cljs.core.seq.call(null,seq__8638_9810);if(temp__4092__auto___9819)\n{var seq__8638_9820__$1 = temp__4092__auto___9819;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8638_9820__$1))\n{var c__5632__auto___9821 = cljs.core.chunk_first.call(null,seq__8638_9820__$1);{\nvar G__9822 = cljs.core.chunk_rest.call(null,seq__8638_9820__$1);\nvar G__9823 = c__5632__auto___9821;\nvar G__9824 = cljs.core.count.call(null,c__5632__auto___9821);\nvar G__9825 = 0;\nseq__8638_9810 = G__9822;\nchunk__8639_9811 = G__9823;\ncount__8640_9812 = G__9824;\ni__8641_9813 = G__9825;\ncontinue;\n}\n} else\n{var arg__7510__auto___9826 = cljs.core.first.call(null,seq__8638_9820__$1);a__7509__auto__.push(arg__7510__auto___9826);\n{\nvar G__9827 = cljs.core.next.call(null,seq__8638_9820__$1);\nvar G__9828 = null;\nvar G__9829 = 0;\nvar G__9830 = 0;\nseq__8638_9810 = G__9827;\nchunk__8639_9811 = G__9828;\ncount__8640_9812 = G__9829;\ni__8641_9813 = G__9830;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.canvas.apply(null,a__7509__auto__);\n};\nvar canvas = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn canvas__delegate.call(this,args__7508__auto__);};\ncanvas.cljs$lang$maxFixedArity = 0;\ncanvas.cljs$lang$applyTo = (function (arglist__9831){\nvar args__7508__auto__ = cljs.core.seq(arglist__9831);\nreturn canvas__delegate(args__7508__auto__);\n});\ncanvas.cljs$core$IFn$_invoke$arity$variadic = canvas__delegate;\nreturn canvas;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.caption = (function() { \nvar caption__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8646_9832 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8647_9833 = null;var count__8648_9834 = 0;var i__8649_9835 = 0;while(true){\nif((i__8649_9835 < count__8648_9834))\n{var arg__7510__auto___9836 = cljs.core._nth.call(null,chunk__8647_9833,i__8649_9835);a__7509__auto__.push(arg__7510__auto___9836);\n{\nvar G__9837 = seq__8646_9832;\nvar G__9838 = chunk__8647_9833;\nvar G__9839 = count__8648_9834;\nvar G__9840 = (i__8649_9835 + 1);\nseq__8646_9832 = G__9837;\nchunk__8647_9833 = G__9838;\ncount__8648_9834 = G__9839;\ni__8649_9835 = G__9840;\ncontinue;\n}\n} else\n{var temp__4092__auto___9841 = cljs.core.seq.call(null,seq__8646_9832);if(temp__4092__auto___9841)\n{var seq__8646_9842__$1 = temp__4092__auto___9841;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8646_9842__$1))\n{var c__5632__auto___9843 = cljs.core.chunk_first.call(null,seq__8646_9842__$1);{\nvar G__9844 = cljs.core.chunk_rest.call(null,seq__8646_9842__$1);\nvar G__9845 = c__5632__auto___9843;\nvar G__9846 = cljs.core.count.call(null,c__5632__auto___9843);\nvar G__9847 = 0;\nseq__8646_9832 = G__9844;\nchunk__8647_9833 = G__9845;\ncount__8648_9834 = G__9846;\ni__8649_9835 = G__9847;\ncontinue;\n}\n} else\n{var arg__7510__auto___9848 = cljs.core.first.call(null,seq__8646_9842__$1);a__7509__auto__.push(arg__7510__auto___9848);\n{\nvar G__9849 = cljs.core.next.call(null,seq__8646_9842__$1);\nvar G__9850 = null;\nvar G__9851 = 0;\nvar G__9852 = 0;\nseq__8646_9832 = G__9849;\nchunk__8647_9833 = G__9850;\ncount__8648_9834 = G__9851;\ni__8649_9835 = G__9852;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.caption.apply(null,a__7509__auto__);\n};\nvar caption = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn caption__delegate.call(this,args__7508__auto__);};\ncaption.cljs$lang$maxFixedArity = 0;\ncaption.cljs$lang$applyTo = (function (arglist__9853){\nvar args__7508__auto__ = cljs.core.seq(arglist__9853);\nreturn caption__delegate(args__7508__auto__);\n});\ncaption.cljs$core$IFn$_invoke$arity$variadic = caption__delegate;\nreturn caption;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.cite = (function() { \nvar cite__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8654_9854 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8655_9855 = null;var count__8656_9856 = 0;var i__8657_9857 = 0;while(true){\nif((i__8657_9857 < count__8656_9856))\n{var arg__7510__auto___9858 = cljs.core._nth.call(null,chunk__8655_9855,i__8657_9857);a__7509__auto__.push(arg__7510__auto___9858);\n{\nvar G__9859 = seq__8654_9854;\nvar G__9860 = chunk__8655_9855;\nvar G__9861 = count__8656_9856;\nvar G__9862 = (i__8657_9857 + 1);\nseq__8654_9854 = G__9859;\nchunk__8655_9855 = G__9860;\ncount__8656_9856 = G__9861;\ni__8657_9857 = G__9862;\ncontinue;\n}\n} else\n{var temp__4092__auto___9863 = cljs.core.seq.call(null,seq__8654_9854);if(temp__4092__auto___9863)\n{var seq__8654_9864__$1 = temp__4092__auto___9863;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8654_9864__$1))\n{var c__5632__auto___9865 = cljs.core.chunk_first.call(null,seq__8654_9864__$1);{\nvar G__9866 = cljs.core.chunk_rest.call(null,seq__8654_9864__$1);\nvar G__9867 = c__5632__auto___9865;\nvar G__9868 = cljs.core.count.call(null,c__5632__auto___9865);\nvar G__9869 = 0;\nseq__8654_9854 = G__9866;\nchunk__8655_9855 = G__9867;\ncount__8656_9856 = G__9868;\ni__8657_9857 = G__9869;\ncontinue;\n}\n} else\n{var arg__7510__auto___9870 = cljs.core.first.call(null,seq__8654_9864__$1);a__7509__auto__.push(arg__7510__auto___9870);\n{\nvar G__9871 = cljs.core.next.call(null,seq__8654_9864__$1);\nvar G__9872 = null;\nvar G__9873 = 0;\nvar G__9874 = 0;\nseq__8654_9854 = G__9871;\nchunk__8655_9855 = G__9872;\ncount__8656_9856 = G__9873;\ni__8657_9857 = G__9874;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.cite.apply(null,a__7509__auto__);\n};\nvar cite = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn cite__delegate.call(this,args__7508__auto__);};\ncite.cljs$lang$maxFixedArity = 0;\ncite.cljs$lang$applyTo = (function (arglist__9875){\nvar args__7508__auto__ = cljs.core.seq(arglist__9875);\nreturn cite__delegate(args__7508__auto__);\n});\ncite.cljs$core$IFn$_invoke$arity$variadic = cite__delegate;\nreturn cite;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.code = (function() { \nvar code__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8662_9876 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8663_9877 = null;var count__8664_9878 = 0;var i__8665_9879 = 0;while(true){\nif((i__8665_9879 < count__8664_9878))\n{var arg__7510__auto___9880 = cljs.core._nth.call(null,chunk__8663_9877,i__8665_9879);a__7509__auto__.push(arg__7510__auto___9880);\n{\nvar G__9881 = seq__8662_9876;\nvar G__9882 = chunk__8663_9877;\nvar G__9883 = count__8664_9878;\nvar G__9884 = (i__8665_9879 + 1);\nseq__8662_9876 = G__9881;\nchunk__8663_9877 = G__9882;\ncount__8664_9878 = G__9883;\ni__8665_9879 = G__9884;\ncontinue;\n}\n} else\n{var temp__4092__auto___9885 = cljs.core.seq.call(null,seq__8662_9876);if(temp__4092__auto___9885)\n{var seq__8662_9886__$1 = temp__4092__auto___9885;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8662_9886__$1))\n{var c__5632__auto___9887 = cljs.core.chunk_first.call(null,seq__8662_9886__$1);{\nvar G__9888 = cljs.core.chunk_rest.call(null,seq__8662_9886__$1);\nvar G__9889 = c__5632__auto___9887;\nvar G__9890 = cljs.core.count.call(null,c__5632__auto___9887);\nvar G__9891 = 0;\nseq__8662_9876 = G__9888;\nchunk__8663_9877 = G__9889;\ncount__8664_9878 = G__9890;\ni__8665_9879 = G__9891;\ncontinue;\n}\n} else\n{var arg__7510__auto___9892 = cljs.core.first.call(null,seq__8662_9886__$1);a__7509__auto__.push(arg__7510__auto___9892);\n{\nvar G__9893 = cljs.core.next.call(null,seq__8662_9886__$1);\nvar G__9894 = null;\nvar G__9895 = 0;\nvar G__9896 = 0;\nseq__8662_9876 = G__9893;\nchunk__8663_9877 = G__9894;\ncount__8664_9878 = G__9895;\ni__8665_9879 = G__9896;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.code.apply(null,a__7509__auto__);\n};\nvar code = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn code__delegate.call(this,args__7508__auto__);};\ncode.cljs$lang$maxFixedArity = 0;\ncode.cljs$lang$applyTo = (function (arglist__9897){\nvar args__7508__auto__ = cljs.core.seq(arglist__9897);\nreturn code__delegate(args__7508__auto__);\n});\ncode.cljs$core$IFn$_invoke$arity$variadic = code__delegate;\nreturn code;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.col = (function() { \nvar col__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8670_9898 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8671_9899 = null;var count__8672_9900 = 0;var i__8673_9901 = 0;while(true){\nif((i__8673_9901 < count__8672_9900))\n{var arg__7510__auto___9902 = cljs.core._nth.call(null,chunk__8671_9899,i__8673_9901);a__7509__auto__.push(arg__7510__auto___9902);\n{\nvar G__9903 = seq__8670_9898;\nvar G__9904 = chunk__8671_9899;\nvar G__9905 = count__8672_9900;\nvar G__9906 = (i__8673_9901 + 1);\nseq__8670_9898 = G__9903;\nchunk__8671_9899 = G__9904;\ncount__8672_9900 = G__9905;\ni__8673_9901 = G__9906;\ncontinue;\n}\n} else\n{var temp__4092__auto___9907 = cljs.core.seq.call(null,seq__8670_9898);if(temp__4092__auto___9907)\n{var seq__8670_9908__$1 = temp__4092__auto___9907;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8670_9908__$1))\n{var c__5632__auto___9909 = cljs.core.chunk_first.call(null,seq__8670_9908__$1);{\nvar G__9910 = cljs.core.chunk_rest.call(null,seq__8670_9908__$1);\nvar G__9911 = c__5632__auto___9909;\nvar G__9912 = cljs.core.count.call(null,c__5632__auto___9909);\nvar G__9913 = 0;\nseq__8670_9898 = G__9910;\nchunk__8671_9899 = G__9911;\ncount__8672_9900 = G__9912;\ni__8673_9901 = G__9913;\ncontinue;\n}\n} else\n{var arg__7510__auto___9914 = cljs.core.first.call(null,seq__8670_9908__$1);a__7509__auto__.push(arg__7510__auto___9914);\n{\nvar G__9915 = cljs.core.next.call(null,seq__8670_9908__$1);\nvar G__9916 = null;\nvar G__9917 = 0;\nvar G__9918 = 0;\nseq__8670_9898 = G__9915;\nchunk__8671_9899 = G__9916;\ncount__8672_9900 = G__9917;\ni__8673_9901 = G__9918;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.col.apply(null,a__7509__auto__);\n};\nvar col = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn col__delegate.call(this,args__7508__auto__);};\ncol.cljs$lang$maxFixedArity = 0;\ncol.cljs$lang$applyTo = (function (arglist__9919){\nvar args__7508__auto__ = cljs.core.seq(arglist__9919);\nreturn col__delegate(args__7508__auto__);\n});\ncol.cljs$core$IFn$_invoke$arity$variadic = col__delegate;\nreturn col;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.colgroup = (function() { \nvar colgroup__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8678_9920 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8679_9921 = null;var count__8680_9922 = 0;var i__8681_9923 = 0;while(true){\nif((i__8681_9923 < count__8680_9922))\n{var arg__7510__auto___9924 = cljs.core._nth.call(null,chunk__8679_9921,i__8681_9923);a__7509__auto__.push(arg__7510__auto___9924);\n{\nvar G__9925 = seq__8678_9920;\nvar G__9926 = chunk__8679_9921;\nvar G__9927 = count__8680_9922;\nvar G__9928 = (i__8681_9923 + 1);\nseq__8678_9920 = G__9925;\nchunk__8679_9921 = G__9926;\ncount__8680_9922 = G__9927;\ni__8681_9923 = G__9928;\ncontinue;\n}\n} else\n{var temp__4092__auto___9929 = cljs.core.seq.call(null,seq__8678_9920);if(temp__4092__auto___9929)\n{var seq__8678_9930__$1 = temp__4092__auto___9929;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8678_9930__$1))\n{var c__5632__auto___9931 = cljs.core.chunk_first.call(null,seq__8678_9930__$1);{\nvar G__9932 = cljs.core.chunk_rest.call(null,seq__8678_9930__$1);\nvar G__9933 = c__5632__auto___9931;\nvar G__9934 = cljs.core.count.call(null,c__5632__auto___9931);\nvar G__9935 = 0;\nseq__8678_9920 = G__9932;\nchunk__8679_9921 = G__9933;\ncount__8680_9922 = G__9934;\ni__8681_9923 = G__9935;\ncontinue;\n}\n} else\n{var arg__7510__auto___9936 = cljs.core.first.call(null,seq__8678_9930__$1);a__7509__auto__.push(arg__7510__auto___9936);\n{\nvar G__9937 = cljs.core.next.call(null,seq__8678_9930__$1);\nvar G__9938 = null;\nvar G__9939 = 0;\nvar G__9940 = 0;\nseq__8678_9920 = G__9937;\nchunk__8679_9921 = G__9938;\ncount__8680_9922 = G__9939;\ni__8681_9923 = G__9940;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.colgroup.apply(null,a__7509__auto__);\n};\nvar colgroup = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn colgroup__delegate.call(this,args__7508__auto__);};\ncolgroup.cljs$lang$maxFixedArity = 0;\ncolgroup.cljs$lang$applyTo = (function (arglist__9941){\nvar args__7508__auto__ = cljs.core.seq(arglist__9941);\nreturn colgroup__delegate(args__7508__auto__);\n});\ncolgroup.cljs$core$IFn$_invoke$arity$variadic = colgroup__delegate;\nreturn colgroup;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.data = (function() { \nvar data__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8686_9942 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8687_9943 = null;var count__8688_9944 = 0;var i__8689_9945 = 0;while(true){\nif((i__8689_9945 < count__8688_9944))\n{var arg__7510__auto___9946 = cljs.core._nth.call(null,chunk__8687_9943,i__8689_9945);a__7509__auto__.push(arg__7510__auto___9946);\n{\nvar G__9947 = seq__8686_9942;\nvar G__9948 = chunk__8687_9943;\nvar G__9949 = count__8688_9944;\nvar G__9950 = (i__8689_9945 + 1);\nseq__8686_9942 = G__9947;\nchunk__8687_9943 = G__9948;\ncount__8688_9944 = G__9949;\ni__8689_9945 = G__9950;\ncontinue;\n}\n} else\n{var temp__4092__auto___9951 = cljs.core.seq.call(null,seq__8686_9942);if(temp__4092__auto___9951)\n{var seq__8686_9952__$1 = temp__4092__auto___9951;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8686_9952__$1))\n{var c__5632__auto___9953 = cljs.core.chunk_first.call(null,seq__8686_9952__$1);{\nvar G__9954 = cljs.core.chunk_rest.call(null,seq__8686_9952__$1);\nvar G__9955 = c__5632__auto___9953;\nvar G__9956 = cljs.core.count.call(null,c__5632__auto___9953);\nvar G__9957 = 0;\nseq__8686_9942 = G__9954;\nchunk__8687_9943 = G__9955;\ncount__8688_9944 = G__9956;\ni__8689_9945 = G__9957;\ncontinue;\n}\n} else\n{var arg__7510__auto___9958 = cljs.core.first.call(null,seq__8686_9952__$1);a__7509__auto__.push(arg__7510__auto___9958);\n{\nvar G__9959 = cljs.core.next.call(null,seq__8686_9952__$1);\nvar G__9960 = null;\nvar G__9961 = 0;\nvar G__9962 = 0;\nseq__8686_9942 = G__9959;\nchunk__8687_9943 = G__9960;\ncount__8688_9944 = G__9961;\ni__8689_9945 = G__9962;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.data.apply(null,a__7509__auto__);\n};\nvar data = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn data__delegate.call(this,args__7508__auto__);};\ndata.cljs$lang$maxFixedArity = 0;\ndata.cljs$lang$applyTo = (function (arglist__9963){\nvar args__7508__auto__ = cljs.core.seq(arglist__9963);\nreturn data__delegate(args__7508__auto__);\n});\ndata.cljs$core$IFn$_invoke$arity$variadic = data__delegate;\nreturn data;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.datalist = (function() { \nvar datalist__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8694_9964 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8695_9965 = null;var count__8696_9966 = 0;var i__8697_9967 = 0;while(true){\nif((i__8697_9967 < count__8696_9966))\n{var arg__7510__auto___9968 = cljs.core._nth.call(null,chunk__8695_9965,i__8697_9967);a__7509__auto__.push(arg__7510__auto___9968);\n{\nvar G__9969 = seq__8694_9964;\nvar G__9970 = chunk__8695_9965;\nvar G__9971 = count__8696_9966;\nvar G__9972 = (i__8697_9967 + 1);\nseq__8694_9964 = G__9969;\nchunk__8695_9965 = G__9970;\ncount__8696_9966 = G__9971;\ni__8697_9967 = G__9972;\ncontinue;\n}\n} else\n{var temp__4092__auto___9973 = cljs.core.seq.call(null,seq__8694_9964);if(temp__4092__auto___9973)\n{var seq__8694_9974__$1 = temp__4092__auto___9973;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8694_9974__$1))\n{var c__5632__auto___9975 = cljs.core.chunk_first.call(null,seq__8694_9974__$1);{\nvar G__9976 = cljs.core.chunk_rest.call(null,seq__8694_9974__$1);\nvar G__9977 = c__5632__auto___9975;\nvar G__9978 = cljs.core.count.call(null,c__5632__auto___9975);\nvar G__9979 = 0;\nseq__8694_9964 = G__9976;\nchunk__8695_9965 = G__9977;\ncount__8696_9966 = G__9978;\ni__8697_9967 = G__9979;\ncontinue;\n}\n} else\n{var arg__7510__auto___9980 = cljs.core.first.call(null,seq__8694_9974__$1);a__7509__auto__.push(arg__7510__auto___9980);\n{\nvar G__9981 = cljs.core.next.call(null,seq__8694_9974__$1);\nvar G__9982 = null;\nvar G__9983 = 0;\nvar G__9984 = 0;\nseq__8694_9964 = G__9981;\nchunk__8695_9965 = G__9982;\ncount__8696_9966 = G__9983;\ni__8697_9967 = G__9984;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.datalist.apply(null,a__7509__auto__);\n};\nvar datalist = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn datalist__delegate.call(this,args__7508__auto__);};\ndatalist.cljs$lang$maxFixedArity = 0;\ndatalist.cljs$lang$applyTo = (function (arglist__9985){\nvar args__7508__auto__ = cljs.core.seq(arglist__9985);\nreturn datalist__delegate(args__7508__auto__);\n});\ndatalist.cljs$core$IFn$_invoke$arity$variadic = datalist__delegate;\nreturn datalist;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.dd = (function() { \nvar dd__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8702_9986 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8703_9987 = null;var count__8704_9988 = 0;var i__8705_9989 = 0;while(true){\nif((i__8705_9989 < count__8704_9988))\n{var arg__7510__auto___9990 = cljs.core._nth.call(null,chunk__8703_9987,i__8705_9989);a__7509__auto__.push(arg__7510__auto___9990);\n{\nvar G__9991 = seq__8702_9986;\nvar G__9992 = chunk__8703_9987;\nvar G__9993 = count__8704_9988;\nvar G__9994 = (i__8705_9989 + 1);\nseq__8702_9986 = G__9991;\nchunk__8703_9987 = G__9992;\ncount__8704_9988 = G__9993;\ni__8705_9989 = G__9994;\ncontinue;\n}\n} else\n{var temp__4092__auto___9995 = cljs.core.seq.call(null,seq__8702_9986);if(temp__4092__auto___9995)\n{var seq__8702_9996__$1 = temp__4092__auto___9995;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8702_9996__$1))\n{var c__5632__auto___9997 = cljs.core.chunk_first.call(null,seq__8702_9996__$1);{\nvar G__9998 = cljs.core.chunk_rest.call(null,seq__8702_9996__$1);\nvar G__9999 = c__5632__auto___9997;\nvar G__10000 = cljs.core.count.call(null,c__5632__auto___9997);\nvar G__10001 = 0;\nseq__8702_9986 = G__9998;\nchunk__8703_9987 = G__9999;\ncount__8704_9988 = G__10000;\ni__8705_9989 = G__10001;\ncontinue;\n}\n} else\n{var arg__7510__auto___10002 = cljs.core.first.call(null,seq__8702_9996__$1);a__7509__auto__.push(arg__7510__auto___10002);\n{\nvar G__10003 = cljs.core.next.call(null,seq__8702_9996__$1);\nvar G__10004 = null;\nvar G__10005 = 0;\nvar G__10006 = 0;\nseq__8702_9986 = G__10003;\nchunk__8703_9987 = G__10004;\ncount__8704_9988 = G__10005;\ni__8705_9989 = G__10006;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.dd.apply(null,a__7509__auto__);\n};\nvar dd = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn dd__delegate.call(this,args__7508__auto__);};\ndd.cljs$lang$maxFixedArity = 0;\ndd.cljs$lang$applyTo = (function (arglist__10007){\nvar args__7508__auto__ = cljs.core.seq(arglist__10007);\nreturn dd__delegate(args__7508__auto__);\n});\ndd.cljs$core$IFn$_invoke$arity$variadic = dd__delegate;\nreturn dd;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.del = (function() { \nvar del__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8710_10008 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8711_10009 = null;var count__8712_10010 = 0;var i__8713_10011 = 0;while(true){\nif((i__8713_10011 < count__8712_10010))\n{var arg__7510__auto___10012 = cljs.core._nth.call(null,chunk__8711_10009,i__8713_10011);a__7509__auto__.push(arg__7510__auto___10012);\n{\nvar G__10013 = seq__8710_10008;\nvar G__10014 = chunk__8711_10009;\nvar G__10015 = count__8712_10010;\nvar G__10016 = (i__8713_10011 + 1);\nseq__8710_10008 = G__10013;\nchunk__8711_10009 = G__10014;\ncount__8712_10010 = G__10015;\ni__8713_10011 = G__10016;\ncontinue;\n}\n} else\n{var temp__4092__auto___10017 = cljs.core.seq.call(null,seq__8710_10008);if(temp__4092__auto___10017)\n{var seq__8710_10018__$1 = temp__4092__auto___10017;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8710_10018__$1))\n{var c__5632__auto___10019 = cljs.core.chunk_first.call(null,seq__8710_10018__$1);{\nvar G__10020 = cljs.core.chunk_rest.call(null,seq__8710_10018__$1);\nvar G__10021 = c__5632__auto___10019;\nvar G__10022 = cljs.core.count.call(null,c__5632__auto___10019);\nvar G__10023 = 0;\nseq__8710_10008 = G__10020;\nchunk__8711_10009 = G__10021;\ncount__8712_10010 = G__10022;\ni__8713_10011 = G__10023;\ncontinue;\n}\n} else\n{var arg__7510__auto___10024 = cljs.core.first.call(null,seq__8710_10018__$1);a__7509__auto__.push(arg__7510__auto___10024);\n{\nvar G__10025 = cljs.core.next.call(null,seq__8710_10018__$1);\nvar G__10026 = null;\nvar G__10027 = 0;\nvar G__10028 = 0;\nseq__8710_10008 = G__10025;\nchunk__8711_10009 = G__10026;\ncount__8712_10010 = G__10027;\ni__8713_10011 = G__10028;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.del.apply(null,a__7509__auto__);\n};\nvar del = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn del__delegate.call(this,args__7508__auto__);};\ndel.cljs$lang$maxFixedArity = 0;\ndel.cljs$lang$applyTo = (function (arglist__10029){\nvar args__7508__auto__ = cljs.core.seq(arglist__10029);\nreturn del__delegate(args__7508__auto__);\n});\ndel.cljs$core$IFn$_invoke$arity$variadic = del__delegate;\nreturn del;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.details = (function() { \nvar details__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8718_10030 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8719_10031 = null;var count__8720_10032 = 0;var i__8721_10033 = 0;while(true){\nif((i__8721_10033 < count__8720_10032))\n{var arg__7510__auto___10034 = cljs.core._nth.call(null,chunk__8719_10031,i__8721_10033);a__7509__auto__.push(arg__7510__auto___10034);\n{\nvar G__10035 = seq__8718_10030;\nvar G__10036 = chunk__8719_10031;\nvar G__10037 = count__8720_10032;\nvar G__10038 = (i__8721_10033 + 1);\nseq__8718_10030 = G__10035;\nchunk__8719_10031 = G__10036;\ncount__8720_10032 = G__10037;\ni__8721_10033 = G__10038;\ncontinue;\n}\n} else\n{var temp__4092__auto___10039 = cljs.core.seq.call(null,seq__8718_10030);if(temp__4092__auto___10039)\n{var seq__8718_10040__$1 = temp__4092__auto___10039;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8718_10040__$1))\n{var c__5632__auto___10041 = cljs.core.chunk_first.call(null,seq__8718_10040__$1);{\nvar G__10042 = cljs.core.chunk_rest.call(null,seq__8718_10040__$1);\nvar G__10043 = c__5632__auto___10041;\nvar G__10044 = cljs.core.count.call(null,c__5632__auto___10041);\nvar G__10045 = 0;\nseq__8718_10030 = G__10042;\nchunk__8719_10031 = G__10043;\ncount__8720_10032 = G__10044;\ni__8721_10033 = G__10045;\ncontinue;\n}\n} else\n{var arg__7510__auto___10046 = cljs.core.first.call(null,seq__8718_10040__$1);a__7509__auto__.push(arg__7510__auto___10046);\n{\nvar G__10047 = cljs.core.next.call(null,seq__8718_10040__$1);\nvar G__10048 = null;\nvar G__10049 = 0;\nvar G__10050 = 0;\nseq__8718_10030 = G__10047;\nchunk__8719_10031 = G__10048;\ncount__8720_10032 = G__10049;\ni__8721_10033 = G__10050;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.details.apply(null,a__7509__auto__);\n};\nvar details = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn details__delegate.call(this,args__7508__auto__);};\ndetails.cljs$lang$maxFixedArity = 0;\ndetails.cljs$lang$applyTo = (function (arglist__10051){\nvar args__7508__auto__ = cljs.core.seq(arglist__10051);\nreturn details__delegate(args__7508__auto__);\n});\ndetails.cljs$core$IFn$_invoke$arity$variadic = details__delegate;\nreturn details;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.dfn = (function() { \nvar dfn__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8726_10052 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8727_10053 = null;var count__8728_10054 = 0;var i__8729_10055 = 0;while(true){\nif((i__8729_10055 < count__8728_10054))\n{var arg__7510__auto___10056 = cljs.core._nth.call(null,chunk__8727_10053,i__8729_10055);a__7509__auto__.push(arg__7510__auto___10056);\n{\nvar G__10057 = seq__8726_10052;\nvar G__10058 = chunk__8727_10053;\nvar G__10059 = count__8728_10054;\nvar G__10060 = (i__8729_10055 + 1);\nseq__8726_10052 = G__10057;\nchunk__8727_10053 = G__10058;\ncount__8728_10054 = G__10059;\ni__8729_10055 = G__10060;\ncontinue;\n}\n} else\n{var temp__4092__auto___10061 = cljs.core.seq.call(null,seq__8726_10052);if(temp__4092__auto___10061)\n{var seq__8726_10062__$1 = temp__4092__auto___10061;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8726_10062__$1))\n{var c__5632__auto___10063 = cljs.core.chunk_first.call(null,seq__8726_10062__$1);{\nvar G__10064 = cljs.core.chunk_rest.call(null,seq__8726_10062__$1);\nvar G__10065 = c__5632__auto___10063;\nvar G__10066 = cljs.core.count.call(null,c__5632__auto___10063);\nvar G__10067 = 0;\nseq__8726_10052 = G__10064;\nchunk__8727_10053 = G__10065;\ncount__8728_10054 = G__10066;\ni__8729_10055 = G__10067;\ncontinue;\n}\n} else\n{var arg__7510__auto___10068 = cljs.core.first.call(null,seq__8726_10062__$1);a__7509__auto__.push(arg__7510__auto___10068);\n{\nvar G__10069 = cljs.core.next.call(null,seq__8726_10062__$1);\nvar G__10070 = null;\nvar G__10071 = 0;\nvar G__10072 = 0;\nseq__8726_10052 = G__10069;\nchunk__8727_10053 = G__10070;\ncount__8728_10054 = G__10071;\ni__8729_10055 = G__10072;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.dfn.apply(null,a__7509__auto__);\n};\nvar dfn = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn dfn__delegate.call(this,args__7508__auto__);};\ndfn.cljs$lang$maxFixedArity = 0;\ndfn.cljs$lang$applyTo = (function (arglist__10073){\nvar args__7508__auto__ = cljs.core.seq(arglist__10073);\nreturn dfn__delegate(args__7508__auto__);\n});\ndfn.cljs$core$IFn$_invoke$arity$variadic = dfn__delegate;\nreturn dfn;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.div = (function() { \nvar div__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8734_10074 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8735_10075 = null;var count__8736_10076 = 0;var i__8737_10077 = 0;while(true){\nif((i__8737_10077 < count__8736_10076))\n{var arg__7510__auto___10078 = cljs.core._nth.call(null,chunk__8735_10075,i__8737_10077);a__7509__auto__.push(arg__7510__auto___10078);\n{\nvar G__10079 = seq__8734_10074;\nvar G__10080 = chunk__8735_10075;\nvar G__10081 = count__8736_10076;\nvar G__10082 = (i__8737_10077 + 1);\nseq__8734_10074 = G__10079;\nchunk__8735_10075 = G__10080;\ncount__8736_10076 = G__10081;\ni__8737_10077 = G__10082;\ncontinue;\n}\n} else\n{var temp__4092__auto___10083 = cljs.core.seq.call(null,seq__8734_10074);if(temp__4092__auto___10083)\n{var seq__8734_10084__$1 = temp__4092__auto___10083;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8734_10084__$1))\n{var c__5632__auto___10085 = cljs.core.chunk_first.call(null,seq__8734_10084__$1);{\nvar G__10086 = cljs.core.chunk_rest.call(null,seq__8734_10084__$1);\nvar G__10087 = c__5632__auto___10085;\nvar G__10088 = cljs.core.count.call(null,c__5632__auto___10085);\nvar G__10089 = 0;\nseq__8734_10074 = G__10086;\nchunk__8735_10075 = G__10087;\ncount__8736_10076 = G__10088;\ni__8737_10077 = G__10089;\ncontinue;\n}\n} else\n{var arg__7510__auto___10090 = cljs.core.first.call(null,seq__8734_10084__$1);a__7509__auto__.push(arg__7510__auto___10090);\n{\nvar G__10091 = cljs.core.next.call(null,seq__8734_10084__$1);\nvar G__10092 = null;\nvar G__10093 = 0;\nvar G__10094 = 0;\nseq__8734_10074 = G__10091;\nchunk__8735_10075 = G__10092;\ncount__8736_10076 = G__10093;\ni__8737_10077 = G__10094;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.div.apply(null,a__7509__auto__);\n};\nvar div = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn div__delegate.call(this,args__7508__auto__);};\ndiv.cljs$lang$maxFixedArity = 0;\ndiv.cljs$lang$applyTo = (function (arglist__10095){\nvar args__7508__auto__ = cljs.core.seq(arglist__10095);\nreturn div__delegate(args__7508__auto__);\n});\ndiv.cljs$core$IFn$_invoke$arity$variadic = div__delegate;\nreturn div;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.dl = (function() { \nvar dl__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8742_10096 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8743_10097 = null;var count__8744_10098 = 0;var i__8745_10099 = 0;while(true){\nif((i__8745_10099 < count__8744_10098))\n{var arg__7510__auto___10100 = cljs.core._nth.call(null,chunk__8743_10097,i__8745_10099);a__7509__auto__.push(arg__7510__auto___10100);\n{\nvar G__10101 = seq__8742_10096;\nvar G__10102 = chunk__8743_10097;\nvar G__10103 = count__8744_10098;\nvar G__10104 = (i__8745_10099 + 1);\nseq__8742_10096 = G__10101;\nchunk__8743_10097 = G__10102;\ncount__8744_10098 = G__10103;\ni__8745_10099 = G__10104;\ncontinue;\n}\n} else\n{var temp__4092__auto___10105 = cljs.core.seq.call(null,seq__8742_10096);if(temp__4092__auto___10105)\n{var seq__8742_10106__$1 = temp__4092__auto___10105;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8742_10106__$1))\n{var c__5632__auto___10107 = cljs.core.chunk_first.call(null,seq__8742_10106__$1);{\nvar G__10108 = cljs.core.chunk_rest.call(null,seq__8742_10106__$1);\nvar G__10109 = c__5632__auto___10107;\nvar G__10110 = cljs.core.count.call(null,c__5632__auto___10107);\nvar G__10111 = 0;\nseq__8742_10096 = G__10108;\nchunk__8743_10097 = G__10109;\ncount__8744_10098 = G__10110;\ni__8745_10099 = G__10111;\ncontinue;\n}\n} else\n{var arg__7510__auto___10112 = cljs.core.first.call(null,seq__8742_10106__$1);a__7509__auto__.push(arg__7510__auto___10112);\n{\nvar G__10113 = cljs.core.next.call(null,seq__8742_10106__$1);\nvar G__10114 = null;\nvar G__10115 = 0;\nvar G__10116 = 0;\nseq__8742_10096 = G__10113;\nchunk__8743_10097 = G__10114;\ncount__8744_10098 = G__10115;\ni__8745_10099 = G__10116;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.dl.apply(null,a__7509__auto__);\n};\nvar dl = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn dl__delegate.call(this,args__7508__auto__);};\ndl.cljs$lang$maxFixedArity = 0;\ndl.cljs$lang$applyTo = (function (arglist__10117){\nvar args__7508__auto__ = cljs.core.seq(arglist__10117);\nreturn dl__delegate(args__7508__auto__);\n});\ndl.cljs$core$IFn$_invoke$arity$variadic = dl__delegate;\nreturn dl;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.dt = (function() { \nvar dt__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8750_10118 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8751_10119 = null;var count__8752_10120 = 0;var i__8753_10121 = 0;while(true){\nif((i__8753_10121 < count__8752_10120))\n{var arg__7510__auto___10122 = cljs.core._nth.call(null,chunk__8751_10119,i__8753_10121);a__7509__auto__.push(arg__7510__auto___10122);\n{\nvar G__10123 = seq__8750_10118;\nvar G__10124 = chunk__8751_10119;\nvar G__10125 = count__8752_10120;\nvar G__10126 = (i__8753_10121 + 1);\nseq__8750_10118 = G__10123;\nchunk__8751_10119 = G__10124;\ncount__8752_10120 = G__10125;\ni__8753_10121 = G__10126;\ncontinue;\n}\n} else\n{var temp__4092__auto___10127 = cljs.core.seq.call(null,seq__8750_10118);if(temp__4092__auto___10127)\n{var seq__8750_10128__$1 = temp__4092__auto___10127;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8750_10128__$1))\n{var c__5632__auto___10129 = cljs.core.chunk_first.call(null,seq__8750_10128__$1);{\nvar G__10130 = cljs.core.chunk_rest.call(null,seq__8750_10128__$1);\nvar G__10131 = c__5632__auto___10129;\nvar G__10132 = cljs.core.count.call(null,c__5632__auto___10129);\nvar G__10133 = 0;\nseq__8750_10118 = G__10130;\nchunk__8751_10119 = G__10131;\ncount__8752_10120 = G__10132;\ni__8753_10121 = G__10133;\ncontinue;\n}\n} else\n{var arg__7510__auto___10134 = cljs.core.first.call(null,seq__8750_10128__$1);a__7509__auto__.push(arg__7510__auto___10134);\n{\nvar G__10135 = cljs.core.next.call(null,seq__8750_10128__$1);\nvar G__10136 = null;\nvar G__10137 = 0;\nvar G__10138 = 0;\nseq__8750_10118 = G__10135;\nchunk__8751_10119 = G__10136;\ncount__8752_10120 = G__10137;\ni__8753_10121 = G__10138;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.dt.apply(null,a__7509__auto__);\n};\nvar dt = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn dt__delegate.call(this,args__7508__auto__);};\ndt.cljs$lang$maxFixedArity = 0;\ndt.cljs$lang$applyTo = (function (arglist__10139){\nvar args__7508__auto__ = cljs.core.seq(arglist__10139);\nreturn dt__delegate(args__7508__auto__);\n});\ndt.cljs$core$IFn$_invoke$arity$variadic = dt__delegate;\nreturn dt;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.em = (function() { \nvar em__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8758_10140 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8759_10141 = null;var count__8760_10142 = 0;var i__8761_10143 = 0;while(true){\nif((i__8761_10143 < count__8760_10142))\n{var arg__7510__auto___10144 = cljs.core._nth.call(null,chunk__8759_10141,i__8761_10143);a__7509__auto__.push(arg__7510__auto___10144);\n{\nvar G__10145 = seq__8758_10140;\nvar G__10146 = chunk__8759_10141;\nvar G__10147 = count__8760_10142;\nvar G__10148 = (i__8761_10143 + 1);\nseq__8758_10140 = G__10145;\nchunk__8759_10141 = G__10146;\ncount__8760_10142 = G__10147;\ni__8761_10143 = G__10148;\ncontinue;\n}\n} else\n{var temp__4092__auto___10149 = cljs.core.seq.call(null,seq__8758_10140);if(temp__4092__auto___10149)\n{var seq__8758_10150__$1 = temp__4092__auto___10149;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8758_10150__$1))\n{var c__5632__auto___10151 = cljs.core.chunk_first.call(null,seq__8758_10150__$1);{\nvar G__10152 = cljs.core.chunk_rest.call(null,seq__8758_10150__$1);\nvar G__10153 = c__5632__auto___10151;\nvar G__10154 = cljs.core.count.call(null,c__5632__auto___10151);\nvar G__10155 = 0;\nseq__8758_10140 = G__10152;\nchunk__8759_10141 = G__10153;\ncount__8760_10142 = G__10154;\ni__8761_10143 = G__10155;\ncontinue;\n}\n} else\n{var arg__7510__auto___10156 = cljs.core.first.call(null,seq__8758_10150__$1);a__7509__auto__.push(arg__7510__auto___10156);\n{\nvar G__10157 = cljs.core.next.call(null,seq__8758_10150__$1);\nvar G__10158 = null;\nvar G__10159 = 0;\nvar G__10160 = 0;\nseq__8758_10140 = G__10157;\nchunk__8759_10141 = G__10158;\ncount__8760_10142 = G__10159;\ni__8761_10143 = G__10160;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.em.apply(null,a__7509__auto__);\n};\nvar em = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn em__delegate.call(this,args__7508__auto__);};\nem.cljs$lang$maxFixedArity = 0;\nem.cljs$lang$applyTo = (function (arglist__10161){\nvar args__7508__auto__ = cljs.core.seq(arglist__10161);\nreturn em__delegate(args__7508__auto__);\n});\nem.cljs$core$IFn$_invoke$arity$variadic = em__delegate;\nreturn em;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.embed = (function() { \nvar embed__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8774_10162 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8775_10163 = null;var count__8776_10164 = 0;var i__8777_10165 = 0;while(true){\nif((i__8777_10165 < count__8776_10164))\n{var arg__7510__auto___10166 = cljs.core._nth.call(null,chunk__8775_10163,i__8777_10165);a__7509__auto__.push(arg__7510__auto___10166);\n{\nvar G__10167 = seq__8774_10162;\nvar G__10168 = chunk__8775_10163;\nvar G__10169 = count__8776_10164;\nvar G__10170 = (i__8777_10165 + 1);\nseq__8774_10162 = G__10167;\nchunk__8775_10163 = G__10168;\ncount__8776_10164 = G__10169;\ni__8777_10165 = G__10170;\ncontinue;\n}\n} else\n{var temp__4092__auto___10171 = cljs.core.seq.call(null,seq__8774_10162);if(temp__4092__auto___10171)\n{var seq__8774_10172__$1 = temp__4092__auto___10171;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8774_10172__$1))\n{var c__5632__auto___10173 = cljs.core.chunk_first.call(null,seq__8774_10172__$1);{\nvar G__10174 = cljs.core.chunk_rest.call(null,seq__8774_10172__$1);\nvar G__10175 = c__5632__auto___10173;\nvar G__10176 = cljs.core.count.call(null,c__5632__auto___10173);\nvar G__10177 = 0;\nseq__8774_10162 = G__10174;\nchunk__8775_10163 = G__10175;\ncount__8776_10164 = G__10176;\ni__8777_10165 = G__10177;\ncontinue;\n}\n} else\n{var arg__7510__auto___10178 = cljs.core.first.call(null,seq__8774_10172__$1);a__7509__auto__.push(arg__7510__auto___10178);\n{\nvar G__10179 = cljs.core.next.call(null,seq__8774_10172__$1);\nvar G__10180 = null;\nvar G__10181 = 0;\nvar G__10182 = 0;\nseq__8774_10162 = G__10179;\nchunk__8775_10163 = G__10180;\ncount__8776_10164 = G__10181;\ni__8777_10165 = G__10182;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.embed.apply(null,a__7509__auto__);\n};\nvar embed = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn embed__delegate.call(this,args__7508__auto__);};\nembed.cljs$lang$maxFixedArity = 0;\nembed.cljs$lang$applyTo = (function (arglist__10183){\nvar args__7508__auto__ = cljs.core.seq(arglist__10183);\nreturn embed__delegate(args__7508__auto__);\n});\nembed.cljs$core$IFn$_invoke$arity$variadic = embed__delegate;\nreturn embed;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.fieldset = (function() { \nvar fieldset__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8782_10184 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8783_10185 = null;var count__8784_10186 = 0;var i__8785_10187 = 0;while(true){\nif((i__8785_10187 < count__8784_10186))\n{var arg__7510__auto___10188 = cljs.core._nth.call(null,chunk__8783_10185,i__8785_10187);a__7509__auto__.push(arg__7510__auto___10188);\n{\nvar G__10189 = seq__8782_10184;\nvar G__10190 = chunk__8783_10185;\nvar G__10191 = count__8784_10186;\nvar G__10192 = (i__8785_10187 + 1);\nseq__8782_10184 = G__10189;\nchunk__8783_10185 = G__10190;\ncount__8784_10186 = G__10191;\ni__8785_10187 = G__10192;\ncontinue;\n}\n} else\n{var temp__4092__auto___10193 = cljs.core.seq.call(null,seq__8782_10184);if(temp__4092__auto___10193)\n{var seq__8782_10194__$1 = temp__4092__auto___10193;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8782_10194__$1))\n{var c__5632__auto___10195 = cljs.core.chunk_first.call(null,seq__8782_10194__$1);{\nvar G__10196 = cljs.core.chunk_rest.call(null,seq__8782_10194__$1);\nvar G__10197 = c__5632__auto___10195;\nvar G__10198 = cljs.core.count.call(null,c__5632__auto___10195);\nvar G__10199 = 0;\nseq__8782_10184 = G__10196;\nchunk__8783_10185 = G__10197;\ncount__8784_10186 = G__10198;\ni__8785_10187 = G__10199;\ncontinue;\n}\n} else\n{var arg__7510__auto___10200 = cljs.core.first.call(null,seq__8782_10194__$1);a__7509__auto__.push(arg__7510__auto___10200);\n{\nvar G__10201 = cljs.core.next.call(null,seq__8782_10194__$1);\nvar G__10202 = null;\nvar G__10203 = 0;\nvar G__10204 = 0;\nseq__8782_10184 = G__10201;\nchunk__8783_10185 = G__10202;\ncount__8784_10186 = G__10203;\ni__8785_10187 = G__10204;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.fieldset.apply(null,a__7509__auto__);\n};\nvar fieldset = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn fieldset__delegate.call(this,args__7508__auto__);};\nfieldset.cljs$lang$maxFixedArity = 0;\nfieldset.cljs$lang$applyTo = (function (arglist__10205){\nvar args__7508__auto__ = cljs.core.seq(arglist__10205);\nreturn fieldset__delegate(args__7508__auto__);\n});\nfieldset.cljs$core$IFn$_invoke$arity$variadic = fieldset__delegate;\nreturn fieldset;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.figcaption = (function() { \nvar figcaption__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8790_10206 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8791_10207 = null;var count__8792_10208 = 0;var i__8793_10209 = 0;while(true){\nif((i__8793_10209 < count__8792_10208))\n{var arg__7510__auto___10210 = cljs.core._nth.call(null,chunk__8791_10207,i__8793_10209);a__7509__auto__.push(arg__7510__auto___10210);\n{\nvar G__10211 = seq__8790_10206;\nvar G__10212 = chunk__8791_10207;\nvar G__10213 = count__8792_10208;\nvar G__10214 = (i__8793_10209 + 1);\nseq__8790_10206 = G__10211;\nchunk__8791_10207 = G__10212;\ncount__8792_10208 = G__10213;\ni__8793_10209 = G__10214;\ncontinue;\n}\n} else\n{var temp__4092__auto___10215 = cljs.core.seq.call(null,seq__8790_10206);if(temp__4092__auto___10215)\n{var seq__8790_10216__$1 = temp__4092__auto___10215;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8790_10216__$1))\n{var c__5632__auto___10217 = cljs.core.chunk_first.call(null,seq__8790_10216__$1);{\nvar G__10218 = cljs.core.chunk_rest.call(null,seq__8790_10216__$1);\nvar G__10219 = c__5632__auto___10217;\nvar G__10220 = cljs.core.count.call(null,c__5632__auto___10217);\nvar G__10221 = 0;\nseq__8790_10206 = G__10218;\nchunk__8791_10207 = G__10219;\ncount__8792_10208 = G__10220;\ni__8793_10209 = G__10221;\ncontinue;\n}\n} else\n{var arg__7510__auto___10222 = cljs.core.first.call(null,seq__8790_10216__$1);a__7509__auto__.push(arg__7510__auto___10222);\n{\nvar G__10223 = cljs.core.next.call(null,seq__8790_10216__$1);\nvar G__10224 = null;\nvar G__10225 = 0;\nvar G__10226 = 0;\nseq__8790_10206 = G__10223;\nchunk__8791_10207 = G__10224;\ncount__8792_10208 = G__10225;\ni__8793_10209 = G__10226;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.figcaption.apply(null,a__7509__auto__);\n};\nvar figcaption = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn figcaption__delegate.call(this,args__7508__auto__);};\nfigcaption.cljs$lang$maxFixedArity = 0;\nfigcaption.cljs$lang$applyTo = (function (arglist__10227){\nvar args__7508__auto__ = cljs.core.seq(arglist__10227);\nreturn figcaption__delegate(args__7508__auto__);\n});\nfigcaption.cljs$core$IFn$_invoke$arity$variadic = figcaption__delegate;\nreturn figcaption;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.figure = (function() { \nvar figure__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8798_10228 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8799_10229 = null;var count__8800_10230 = 0;var i__8801_10231 = 0;while(true){\nif((i__8801_10231 < count__8800_10230))\n{var arg__7510__auto___10232 = cljs.core._nth.call(null,chunk__8799_10229,i__8801_10231);a__7509__auto__.push(arg__7510__auto___10232);\n{\nvar G__10233 = seq__8798_10228;\nvar G__10234 = chunk__8799_10229;\nvar G__10235 = count__8800_10230;\nvar G__10236 = (i__8801_10231 + 1);\nseq__8798_10228 = G__10233;\nchunk__8799_10229 = G__10234;\ncount__8800_10230 = G__10235;\ni__8801_10231 = G__10236;\ncontinue;\n}\n} else\n{var temp__4092__auto___10237 = cljs.core.seq.call(null,seq__8798_10228);if(temp__4092__auto___10237)\n{var seq__8798_10238__$1 = temp__4092__auto___10237;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8798_10238__$1))\n{var c__5632__auto___10239 = cljs.core.chunk_first.call(null,seq__8798_10238__$1);{\nvar G__10240 = cljs.core.chunk_rest.call(null,seq__8798_10238__$1);\nvar G__10241 = c__5632__auto___10239;\nvar G__10242 = cljs.core.count.call(null,c__5632__auto___10239);\nvar G__10243 = 0;\nseq__8798_10228 = G__10240;\nchunk__8799_10229 = G__10241;\ncount__8800_10230 = G__10242;\ni__8801_10231 = G__10243;\ncontinue;\n}\n} else\n{var arg__7510__auto___10244 = cljs.core.first.call(null,seq__8798_10238__$1);a__7509__auto__.push(arg__7510__auto___10244);\n{\nvar G__10245 = cljs.core.next.call(null,seq__8798_10238__$1);\nvar G__10246 = null;\nvar G__10247 = 0;\nvar G__10248 = 0;\nseq__8798_10228 = G__10245;\nchunk__8799_10229 = G__10246;\ncount__8800_10230 = G__10247;\ni__8801_10231 = G__10248;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.figure.apply(null,a__7509__auto__);\n};\nvar figure = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn figure__delegate.call(this,args__7508__auto__);};\nfigure.cljs$lang$maxFixedArity = 0;\nfigure.cljs$lang$applyTo = (function (arglist__10249){\nvar args__7508__auto__ = cljs.core.seq(arglist__10249);\nreturn figure__delegate(args__7508__auto__);\n});\nfigure.cljs$core$IFn$_invoke$arity$variadic = figure__delegate;\nreturn figure;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.footer = (function() { \nvar footer__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8806_10250 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8807_10251 = null;var count__8808_10252 = 0;var i__8809_10253 = 0;while(true){\nif((i__8809_10253 < count__8808_10252))\n{var arg__7510__auto___10254 = cljs.core._nth.call(null,chunk__8807_10251,i__8809_10253);a__7509__auto__.push(arg__7510__auto___10254);\n{\nvar G__10255 = seq__8806_10250;\nvar G__10256 = chunk__8807_10251;\nvar G__10257 = count__8808_10252;\nvar G__10258 = (i__8809_10253 + 1);\nseq__8806_10250 = G__10255;\nchunk__8807_10251 = G__10256;\ncount__8808_10252 = G__10257;\ni__8809_10253 = G__10258;\ncontinue;\n}\n} else\n{var temp__4092__auto___10259 = cljs.core.seq.call(null,seq__8806_10250);if(temp__4092__auto___10259)\n{var seq__8806_10260__$1 = temp__4092__auto___10259;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8806_10260__$1))\n{var c__5632__auto___10261 = cljs.core.chunk_first.call(null,seq__8806_10260__$1);{\nvar G__10262 = cljs.core.chunk_rest.call(null,seq__8806_10260__$1);\nvar G__10263 = c__5632__auto___10261;\nvar G__10264 = cljs.core.count.call(null,c__5632__auto___10261);\nvar G__10265 = 0;\nseq__8806_10250 = G__10262;\nchunk__8807_10251 = G__10263;\ncount__8808_10252 = G__10264;\ni__8809_10253 = G__10265;\ncontinue;\n}\n} else\n{var arg__7510__auto___10266 = cljs.core.first.call(null,seq__8806_10260__$1);a__7509__auto__.push(arg__7510__auto___10266);\n{\nvar G__10267 = cljs.core.next.call(null,seq__8806_10260__$1);\nvar G__10268 = null;\nvar G__10269 = 0;\nvar G__10270 = 0;\nseq__8806_10250 = G__10267;\nchunk__8807_10251 = G__10268;\ncount__8808_10252 = G__10269;\ni__8809_10253 = G__10270;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.footer.apply(null,a__7509__auto__);\n};\nvar footer = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn footer__delegate.call(this,args__7508__auto__);};\nfooter.cljs$lang$maxFixedArity = 0;\nfooter.cljs$lang$applyTo = (function (arglist__10271){\nvar args__7508__auto__ = cljs.core.seq(arglist__10271);\nreturn footer__delegate(args__7508__auto__);\n});\nfooter.cljs$core$IFn$_invoke$arity$variadic = footer__delegate;\nreturn footer;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.form = (function() { \nvar form__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8814_10272 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8815_10273 = null;var count__8816_10274 = 0;var i__8817_10275 = 0;while(true){\nif((i__8817_10275 < count__8816_10274))\n{var arg__7510__auto___10276 = cljs.core._nth.call(null,chunk__8815_10273,i__8817_10275);a__7509__auto__.push(arg__7510__auto___10276);\n{\nvar G__10277 = seq__8814_10272;\nvar G__10278 = chunk__8815_10273;\nvar G__10279 = count__8816_10274;\nvar G__10280 = (i__8817_10275 + 1);\nseq__8814_10272 = G__10277;\nchunk__8815_10273 = G__10278;\ncount__8816_10274 = G__10279;\ni__8817_10275 = G__10280;\ncontinue;\n}\n} else\n{var temp__4092__auto___10281 = cljs.core.seq.call(null,seq__8814_10272);if(temp__4092__auto___10281)\n{var seq__8814_10282__$1 = temp__4092__auto___10281;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8814_10282__$1))\n{var c__5632__auto___10283 = cljs.core.chunk_first.call(null,seq__8814_10282__$1);{\nvar G__10284 = cljs.core.chunk_rest.call(null,seq__8814_10282__$1);\nvar G__10285 = c__5632__auto___10283;\nvar G__10286 = cljs.core.count.call(null,c__5632__auto___10283);\nvar G__10287 = 0;\nseq__8814_10272 = G__10284;\nchunk__8815_10273 = G__10285;\ncount__8816_10274 = G__10286;\ni__8817_10275 = G__10287;\ncontinue;\n}\n} else\n{var arg__7510__auto___10288 = cljs.core.first.call(null,seq__8814_10282__$1);a__7509__auto__.push(arg__7510__auto___10288);\n{\nvar G__10289 = cljs.core.next.call(null,seq__8814_10282__$1);\nvar G__10290 = null;\nvar G__10291 = 0;\nvar G__10292 = 0;\nseq__8814_10272 = G__10289;\nchunk__8815_10273 = G__10290;\ncount__8816_10274 = G__10291;\ni__8817_10275 = G__10292;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.form.apply(null,a__7509__auto__);\n};\nvar form = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn form__delegate.call(this,args__7508__auto__);};\nform.cljs$lang$maxFixedArity = 0;\nform.cljs$lang$applyTo = (function (arglist__10293){\nvar args__7508__auto__ = cljs.core.seq(arglist__10293);\nreturn form__delegate(args__7508__auto__);\n});\nform.cljs$core$IFn$_invoke$arity$variadic = form__delegate;\nreturn form;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.h1 = (function() { \nvar h1__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8822_10294 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8823_10295 = null;var count__8824_10296 = 0;var i__8825_10297 = 0;while(true){\nif((i__8825_10297 < count__8824_10296))\n{var arg__7510__auto___10298 = cljs.core._nth.call(null,chunk__8823_10295,i__8825_10297);a__7509__auto__.push(arg__7510__auto___10298);\n{\nvar G__10299 = seq__8822_10294;\nvar G__10300 = chunk__8823_10295;\nvar G__10301 = count__8824_10296;\nvar G__10302 = (i__8825_10297 + 1);\nseq__8822_10294 = G__10299;\nchunk__8823_10295 = G__10300;\ncount__8824_10296 = G__10301;\ni__8825_10297 = G__10302;\ncontinue;\n}\n} else\n{var temp__4092__auto___10303 = cljs.core.seq.call(null,seq__8822_10294);if(temp__4092__auto___10303)\n{var seq__8822_10304__$1 = temp__4092__auto___10303;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8822_10304__$1))\n{var c__5632__auto___10305 = cljs.core.chunk_first.call(null,seq__8822_10304__$1);{\nvar G__10306 = cljs.core.chunk_rest.call(null,seq__8822_10304__$1);\nvar G__10307 = c__5632__auto___10305;\nvar G__10308 = cljs.core.count.call(null,c__5632__auto___10305);\nvar G__10309 = 0;\nseq__8822_10294 = G__10306;\nchunk__8823_10295 = G__10307;\ncount__8824_10296 = G__10308;\ni__8825_10297 = G__10309;\ncontinue;\n}\n} else\n{var arg__7510__auto___10310 = cljs.core.first.call(null,seq__8822_10304__$1);a__7509__auto__.push(arg__7510__auto___10310);\n{\nvar G__10311 = cljs.core.next.call(null,seq__8822_10304__$1);\nvar G__10312 = null;\nvar G__10313 = 0;\nvar G__10314 = 0;\nseq__8822_10294 = G__10311;\nchunk__8823_10295 = G__10312;\ncount__8824_10296 = G__10313;\ni__8825_10297 = G__10314;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.h1.apply(null,a__7509__auto__);\n};\nvar h1 = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn h1__delegate.call(this,args__7508__auto__);};\nh1.cljs$lang$maxFixedArity = 0;\nh1.cljs$lang$applyTo = (function (arglist__10315){\nvar args__7508__auto__ = cljs.core.seq(arglist__10315);\nreturn h1__delegate(args__7508__auto__);\n});\nh1.cljs$core$IFn$_invoke$arity$variadic = h1__delegate;\nreturn h1;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.h2 = (function() { \nvar h2__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8830_10316 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8831_10317 = null;var count__8832_10318 = 0;var i__8833_10319 = 0;while(true){\nif((i__8833_10319 < count__8832_10318))\n{var arg__7510__auto___10320 = cljs.core._nth.call(null,chunk__8831_10317,i__8833_10319);a__7509__auto__.push(arg__7510__auto___10320);\n{\nvar G__10321 = seq__8830_10316;\nvar G__10322 = chunk__8831_10317;\nvar G__10323 = count__8832_10318;\nvar G__10324 = (i__8833_10319 + 1);\nseq__8830_10316 = G__10321;\nchunk__8831_10317 = G__10322;\ncount__8832_10318 = G__10323;\ni__8833_10319 = G__10324;\ncontinue;\n}\n} else\n{var temp__4092__auto___10325 = cljs.core.seq.call(null,seq__8830_10316);if(temp__4092__auto___10325)\n{var seq__8830_10326__$1 = temp__4092__auto___10325;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8830_10326__$1))\n{var c__5632__auto___10327 = cljs.core.chunk_first.call(null,seq__8830_10326__$1);{\nvar G__10328 = cljs.core.chunk_rest.call(null,seq__8830_10326__$1);\nvar G__10329 = c__5632__auto___10327;\nvar G__10330 = cljs.core.count.call(null,c__5632__auto___10327);\nvar G__10331 = 0;\nseq__8830_10316 = G__10328;\nchunk__8831_10317 = G__10329;\ncount__8832_10318 = G__10330;\ni__8833_10319 = G__10331;\ncontinue;\n}\n} else\n{var arg__7510__auto___10332 = cljs.core.first.call(null,seq__8830_10326__$1);a__7509__auto__.push(arg__7510__auto___10332);\n{\nvar G__10333 = cljs.core.next.call(null,seq__8830_10326__$1);\nvar G__10334 = null;\nvar G__10335 = 0;\nvar G__10336 = 0;\nseq__8830_10316 = G__10333;\nchunk__8831_10317 = G__10334;\ncount__8832_10318 = G__10335;\ni__8833_10319 = G__10336;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.h2.apply(null,a__7509__auto__);\n};\nvar h2 = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn h2__delegate.call(this,args__7508__auto__);};\nh2.cljs$lang$maxFixedArity = 0;\nh2.cljs$lang$applyTo = (function (arglist__10337){\nvar args__7508__auto__ = cljs.core.seq(arglist__10337);\nreturn h2__delegate(args__7508__auto__);\n});\nh2.cljs$core$IFn$_invoke$arity$variadic = h2__delegate;\nreturn h2;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.h3 = (function() { \nvar h3__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8838_10338 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8839_10339 = null;var count__8840_10340 = 0;var i__8841_10341 = 0;while(true){\nif((i__8841_10341 < count__8840_10340))\n{var arg__7510__auto___10342 = cljs.core._nth.call(null,chunk__8839_10339,i__8841_10341);a__7509__auto__.push(arg__7510__auto___10342);\n{\nvar G__10343 = seq__8838_10338;\nvar G__10344 = chunk__8839_10339;\nvar G__10345 = count__8840_10340;\nvar G__10346 = (i__8841_10341 + 1);\nseq__8838_10338 = G__10343;\nchunk__8839_10339 = G__10344;\ncount__8840_10340 = G__10345;\ni__8841_10341 = G__10346;\ncontinue;\n}\n} else\n{var temp__4092__auto___10347 = cljs.core.seq.call(null,seq__8838_10338);if(temp__4092__auto___10347)\n{var seq__8838_10348__$1 = temp__4092__auto___10347;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8838_10348__$1))\n{var c__5632__auto___10349 = cljs.core.chunk_first.call(null,seq__8838_10348__$1);{\nvar G__10350 = cljs.core.chunk_rest.call(null,seq__8838_10348__$1);\nvar G__10351 = c__5632__auto___10349;\nvar G__10352 = cljs.core.count.call(null,c__5632__auto___10349);\nvar G__10353 = 0;\nseq__8838_10338 = G__10350;\nchunk__8839_10339 = G__10351;\ncount__8840_10340 = G__10352;\ni__8841_10341 = G__10353;\ncontinue;\n}\n} else\n{var arg__7510__auto___10354 = cljs.core.first.call(null,seq__8838_10348__$1);a__7509__auto__.push(arg__7510__auto___10354);\n{\nvar G__10355 = cljs.core.next.call(null,seq__8838_10348__$1);\nvar G__10356 = null;\nvar G__10357 = 0;\nvar G__10358 = 0;\nseq__8838_10338 = G__10355;\nchunk__8839_10339 = G__10356;\ncount__8840_10340 = G__10357;\ni__8841_10341 = G__10358;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.h3.apply(null,a__7509__auto__);\n};\nvar h3 = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn h3__delegate.call(this,args__7508__auto__);};\nh3.cljs$lang$maxFixedArity = 0;\nh3.cljs$lang$applyTo = (function (arglist__10359){\nvar args__7508__auto__ = cljs.core.seq(arglist__10359);\nreturn h3__delegate(args__7508__auto__);\n});\nh3.cljs$core$IFn$_invoke$arity$variadic = h3__delegate;\nreturn h3;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.h4 = (function() { \nvar h4__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8846_10360 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8847_10361 = null;var count__8848_10362 = 0;var i__8849_10363 = 0;while(true){\nif((i__8849_10363 < count__8848_10362))\n{var arg__7510__auto___10364 = cljs.core._nth.call(null,chunk__8847_10361,i__8849_10363);a__7509__auto__.push(arg__7510__auto___10364);\n{\nvar G__10365 = seq__8846_10360;\nvar G__10366 = chunk__8847_10361;\nvar G__10367 = count__8848_10362;\nvar G__10368 = (i__8849_10363 + 1);\nseq__8846_10360 = G__10365;\nchunk__8847_10361 = G__10366;\ncount__8848_10362 = G__10367;\ni__8849_10363 = G__10368;\ncontinue;\n}\n} else\n{var temp__4092__auto___10369 = cljs.core.seq.call(null,seq__8846_10360);if(temp__4092__auto___10369)\n{var seq__8846_10370__$1 = temp__4092__auto___10369;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8846_10370__$1))\n{var c__5632__auto___10371 = cljs.core.chunk_first.call(null,seq__8846_10370__$1);{\nvar G__10372 = cljs.core.chunk_rest.call(null,seq__8846_10370__$1);\nvar G__10373 = c__5632__auto___10371;\nvar G__10374 = cljs.core.count.call(null,c__5632__auto___10371);\nvar G__10375 = 0;\nseq__8846_10360 = G__10372;\nchunk__8847_10361 = G__10373;\ncount__8848_10362 = G__10374;\ni__8849_10363 = G__10375;\ncontinue;\n}\n} else\n{var arg__7510__auto___10376 = cljs.core.first.call(null,seq__8846_10370__$1);a__7509__auto__.push(arg__7510__auto___10376);\n{\nvar G__10377 = cljs.core.next.call(null,seq__8846_10370__$1);\nvar G__10378 = null;\nvar G__10379 = 0;\nvar G__10380 = 0;\nseq__8846_10360 = G__10377;\nchunk__8847_10361 = G__10378;\ncount__8848_10362 = G__10379;\ni__8849_10363 = G__10380;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.h4.apply(null,a__7509__auto__);\n};\nvar h4 = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn h4__delegate.call(this,args__7508__auto__);};\nh4.cljs$lang$maxFixedArity = 0;\nh4.cljs$lang$applyTo = (function (arglist__10381){\nvar args__7508__auto__ = cljs.core.seq(arglist__10381);\nreturn h4__delegate(args__7508__auto__);\n});\nh4.cljs$core$IFn$_invoke$arity$variadic = h4__delegate;\nreturn h4;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.h5 = (function() { \nvar h5__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8854_10382 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8855_10383 = null;var count__8856_10384 = 0;var i__8857_10385 = 0;while(true){\nif((i__8857_10385 < count__8856_10384))\n{var arg__7510__auto___10386 = cljs.core._nth.call(null,chunk__8855_10383,i__8857_10385);a__7509__auto__.push(arg__7510__auto___10386);\n{\nvar G__10387 = seq__8854_10382;\nvar G__10388 = chunk__8855_10383;\nvar G__10389 = count__8856_10384;\nvar G__10390 = (i__8857_10385 + 1);\nseq__8854_10382 = G__10387;\nchunk__8855_10383 = G__10388;\ncount__8856_10384 = G__10389;\ni__8857_10385 = G__10390;\ncontinue;\n}\n} else\n{var temp__4092__auto___10391 = cljs.core.seq.call(null,seq__8854_10382);if(temp__4092__auto___10391)\n{var seq__8854_10392__$1 = temp__4092__auto___10391;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8854_10392__$1))\n{var c__5632__auto___10393 = cljs.core.chunk_first.call(null,seq__8854_10392__$1);{\nvar G__10394 = cljs.core.chunk_rest.call(null,seq__8854_10392__$1);\nvar G__10395 = c__5632__auto___10393;\nvar G__10396 = cljs.core.count.call(null,c__5632__auto___10393);\nvar G__10397 = 0;\nseq__8854_10382 = G__10394;\nchunk__8855_10383 = G__10395;\ncount__8856_10384 = G__10396;\ni__8857_10385 = G__10397;\ncontinue;\n}\n} else\n{var arg__7510__auto___10398 = cljs.core.first.call(null,seq__8854_10392__$1);a__7509__auto__.push(arg__7510__auto___10398);\n{\nvar G__10399 = cljs.core.next.call(null,seq__8854_10392__$1);\nvar G__10400 = null;\nvar G__10401 = 0;\nvar G__10402 = 0;\nseq__8854_10382 = G__10399;\nchunk__8855_10383 = G__10400;\ncount__8856_10384 = G__10401;\ni__8857_10385 = G__10402;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.h5.apply(null,a__7509__auto__);\n};\nvar h5 = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn h5__delegate.call(this,args__7508__auto__);};\nh5.cljs$lang$maxFixedArity = 0;\nh5.cljs$lang$applyTo = (function (arglist__10403){\nvar args__7508__auto__ = cljs.core.seq(arglist__10403);\nreturn h5__delegate(args__7508__auto__);\n});\nh5.cljs$core$IFn$_invoke$arity$variadic = h5__delegate;\nreturn h5;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.h6 = (function() { \nvar h6__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8862_10404 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8863_10405 = null;var count__8864_10406 = 0;var i__8865_10407 = 0;while(true){\nif((i__8865_10407 < count__8864_10406))\n{var arg__7510__auto___10408 = cljs.core._nth.call(null,chunk__8863_10405,i__8865_10407);a__7509__auto__.push(arg__7510__auto___10408);\n{\nvar G__10409 = seq__8862_10404;\nvar G__10410 = chunk__8863_10405;\nvar G__10411 = count__8864_10406;\nvar G__10412 = (i__8865_10407 + 1);\nseq__8862_10404 = G__10409;\nchunk__8863_10405 = G__10410;\ncount__8864_10406 = G__10411;\ni__8865_10407 = G__10412;\ncontinue;\n}\n} else\n{var temp__4092__auto___10413 = cljs.core.seq.call(null,seq__8862_10404);if(temp__4092__auto___10413)\n{var seq__8862_10414__$1 = temp__4092__auto___10413;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8862_10414__$1))\n{var c__5632__auto___10415 = cljs.core.chunk_first.call(null,seq__8862_10414__$1);{\nvar G__10416 = cljs.core.chunk_rest.call(null,seq__8862_10414__$1);\nvar G__10417 = c__5632__auto___10415;\nvar G__10418 = cljs.core.count.call(null,c__5632__auto___10415);\nvar G__10419 = 0;\nseq__8862_10404 = G__10416;\nchunk__8863_10405 = G__10417;\ncount__8864_10406 = G__10418;\ni__8865_10407 = G__10419;\ncontinue;\n}\n} else\n{var arg__7510__auto___10420 = cljs.core.first.call(null,seq__8862_10414__$1);a__7509__auto__.push(arg__7510__auto___10420);\n{\nvar G__10421 = cljs.core.next.call(null,seq__8862_10414__$1);\nvar G__10422 = null;\nvar G__10423 = 0;\nvar G__10424 = 0;\nseq__8862_10404 = G__10421;\nchunk__8863_10405 = G__10422;\ncount__8864_10406 = G__10423;\ni__8865_10407 = G__10424;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.h6.apply(null,a__7509__auto__);\n};\nvar h6 = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn h6__delegate.call(this,args__7508__auto__);};\nh6.cljs$lang$maxFixedArity = 0;\nh6.cljs$lang$applyTo = (function (arglist__10425){\nvar args__7508__auto__ = cljs.core.seq(arglist__10425);\nreturn h6__delegate(args__7508__auto__);\n});\nh6.cljs$core$IFn$_invoke$arity$variadic = h6__delegate;\nreturn h6;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.head = (function() { \nvar head__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8870_10426 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8871_10427 = null;var count__8872_10428 = 0;var i__8873_10429 = 0;while(true){\nif((i__8873_10429 < count__8872_10428))\n{var arg__7510__auto___10430 = cljs.core._nth.call(null,chunk__8871_10427,i__8873_10429);a__7509__auto__.push(arg__7510__auto___10430);\n{\nvar G__10431 = seq__8870_10426;\nvar G__10432 = chunk__8871_10427;\nvar G__10433 = count__8872_10428;\nvar G__10434 = (i__8873_10429 + 1);\nseq__8870_10426 = G__10431;\nchunk__8871_10427 = G__10432;\ncount__8872_10428 = G__10433;\ni__8873_10429 = G__10434;\ncontinue;\n}\n} else\n{var temp__4092__auto___10435 = cljs.core.seq.call(null,seq__8870_10426);if(temp__4092__auto___10435)\n{var seq__8870_10436__$1 = temp__4092__auto___10435;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8870_10436__$1))\n{var c__5632__auto___10437 = cljs.core.chunk_first.call(null,seq__8870_10436__$1);{\nvar G__10438 = cljs.core.chunk_rest.call(null,seq__8870_10436__$1);\nvar G__10439 = c__5632__auto___10437;\nvar G__10440 = cljs.core.count.call(null,c__5632__auto___10437);\nvar G__10441 = 0;\nseq__8870_10426 = G__10438;\nchunk__8871_10427 = G__10439;\ncount__8872_10428 = G__10440;\ni__8873_10429 = G__10441;\ncontinue;\n}\n} else\n{var arg__7510__auto___10442 = cljs.core.first.call(null,seq__8870_10436__$1);a__7509__auto__.push(arg__7510__auto___10442);\n{\nvar G__10443 = cljs.core.next.call(null,seq__8870_10436__$1);\nvar G__10444 = null;\nvar G__10445 = 0;\nvar G__10446 = 0;\nseq__8870_10426 = G__10443;\nchunk__8871_10427 = G__10444;\ncount__8872_10428 = G__10445;\ni__8873_10429 = G__10446;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.head.apply(null,a__7509__auto__);\n};\nvar head = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn head__delegate.call(this,args__7508__auto__);};\nhead.cljs$lang$maxFixedArity = 0;\nhead.cljs$lang$applyTo = (function (arglist__10447){\nvar args__7508__auto__ = cljs.core.seq(arglist__10447);\nreturn head__delegate(args__7508__auto__);\n});\nhead.cljs$core$IFn$_invoke$arity$variadic = head__delegate;\nreturn head;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.header = (function() { \nvar header__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8878_10448 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8879_10449 = null;var count__8880_10450 = 0;var i__8881_10451 = 0;while(true){\nif((i__8881_10451 < count__8880_10450))\n{var arg__7510__auto___10452 = cljs.core._nth.call(null,chunk__8879_10449,i__8881_10451);a__7509__auto__.push(arg__7510__auto___10452);\n{\nvar G__10453 = seq__8878_10448;\nvar G__10454 = chunk__8879_10449;\nvar G__10455 = count__8880_10450;\nvar G__10456 = (i__8881_10451 + 1);\nseq__8878_10448 = G__10453;\nchunk__8879_10449 = G__10454;\ncount__8880_10450 = G__10455;\ni__8881_10451 = G__10456;\ncontinue;\n}\n} else\n{var temp__4092__auto___10457 = cljs.core.seq.call(null,seq__8878_10448);if(temp__4092__auto___10457)\n{var seq__8878_10458__$1 = temp__4092__auto___10457;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8878_10458__$1))\n{var c__5632__auto___10459 = cljs.core.chunk_first.call(null,seq__8878_10458__$1);{\nvar G__10460 = cljs.core.chunk_rest.call(null,seq__8878_10458__$1);\nvar G__10461 = c__5632__auto___10459;\nvar G__10462 = cljs.core.count.call(null,c__5632__auto___10459);\nvar G__10463 = 0;\nseq__8878_10448 = G__10460;\nchunk__8879_10449 = G__10461;\ncount__8880_10450 = G__10462;\ni__8881_10451 = G__10463;\ncontinue;\n}\n} else\n{var arg__7510__auto___10464 = cljs.core.first.call(null,seq__8878_10458__$1);a__7509__auto__.push(arg__7510__auto___10464);\n{\nvar G__10465 = cljs.core.next.call(null,seq__8878_10458__$1);\nvar G__10466 = null;\nvar G__10467 = 0;\nvar G__10468 = 0;\nseq__8878_10448 = G__10465;\nchunk__8879_10449 = G__10466;\ncount__8880_10450 = G__10467;\ni__8881_10451 = G__10468;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.header.apply(null,a__7509__auto__);\n};\nvar header = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn header__delegate.call(this,args__7508__auto__);};\nheader.cljs$lang$maxFixedArity = 0;\nheader.cljs$lang$applyTo = (function (arglist__10469){\nvar args__7508__auto__ = cljs.core.seq(arglist__10469);\nreturn header__delegate(args__7508__auto__);\n});\nheader.cljs$core$IFn$_invoke$arity$variadic = header__delegate;\nreturn header;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.hr = (function() { \nvar hr__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8886_10470 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8887_10471 = null;var count__8888_10472 = 0;var i__8889_10473 = 0;while(true){\nif((i__8889_10473 < count__8888_10472))\n{var arg__7510__auto___10474 = cljs.core._nth.call(null,chunk__8887_10471,i__8889_10473);a__7509__auto__.push(arg__7510__auto___10474);\n{\nvar G__10475 = seq__8886_10470;\nvar G__10476 = chunk__8887_10471;\nvar G__10477 = count__8888_10472;\nvar G__10478 = (i__8889_10473 + 1);\nseq__8886_10470 = G__10475;\nchunk__8887_10471 = G__10476;\ncount__8888_10472 = G__10477;\ni__8889_10473 = G__10478;\ncontinue;\n}\n} else\n{var temp__4092__auto___10479 = cljs.core.seq.call(null,seq__8886_10470);if(temp__4092__auto___10479)\n{var seq__8886_10480__$1 = temp__4092__auto___10479;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8886_10480__$1))\n{var c__5632__auto___10481 = cljs.core.chunk_first.call(null,seq__8886_10480__$1);{\nvar G__10482 = cljs.core.chunk_rest.call(null,seq__8886_10480__$1);\nvar G__10483 = c__5632__auto___10481;\nvar G__10484 = cljs.core.count.call(null,c__5632__auto___10481);\nvar G__10485 = 0;\nseq__8886_10470 = G__10482;\nchunk__8887_10471 = G__10483;\ncount__8888_10472 = G__10484;\ni__8889_10473 = G__10485;\ncontinue;\n}\n} else\n{var arg__7510__auto___10486 = cljs.core.first.call(null,seq__8886_10480__$1);a__7509__auto__.push(arg__7510__auto___10486);\n{\nvar G__10487 = cljs.core.next.call(null,seq__8886_10480__$1);\nvar G__10488 = null;\nvar G__10489 = 0;\nvar G__10490 = 0;\nseq__8886_10470 = G__10487;\nchunk__8887_10471 = G__10488;\ncount__8888_10472 = G__10489;\ni__8889_10473 = G__10490;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.hr.apply(null,a__7509__auto__);\n};\nvar hr = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn hr__delegate.call(this,args__7508__auto__);};\nhr.cljs$lang$maxFixedArity = 0;\nhr.cljs$lang$applyTo = (function (arglist__10491){\nvar args__7508__auto__ = cljs.core.seq(arglist__10491);\nreturn hr__delegate(args__7508__auto__);\n});\nhr.cljs$core$IFn$_invoke$arity$variadic = hr__delegate;\nreturn hr;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.html = (function() { \nvar html__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8894_10492 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8895_10493 = null;var count__8896_10494 = 0;var i__8897_10495 = 0;while(true){\nif((i__8897_10495 < count__8896_10494))\n{var arg__7510__auto___10496 = cljs.core._nth.call(null,chunk__8895_10493,i__8897_10495);a__7509__auto__.push(arg__7510__auto___10496);\n{\nvar G__10497 = seq__8894_10492;\nvar G__10498 = chunk__8895_10493;\nvar G__10499 = count__8896_10494;\nvar G__10500 = (i__8897_10495 + 1);\nseq__8894_10492 = G__10497;\nchunk__8895_10493 = G__10498;\ncount__8896_10494 = G__10499;\ni__8897_10495 = G__10500;\ncontinue;\n}\n} else\n{var temp__4092__auto___10501 = cljs.core.seq.call(null,seq__8894_10492);if(temp__4092__auto___10501)\n{var seq__8894_10502__$1 = temp__4092__auto___10501;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8894_10502__$1))\n{var c__5632__auto___10503 = cljs.core.chunk_first.call(null,seq__8894_10502__$1);{\nvar G__10504 = cljs.core.chunk_rest.call(null,seq__8894_10502__$1);\nvar G__10505 = c__5632__auto___10503;\nvar G__10506 = cljs.core.count.call(null,c__5632__auto___10503);\nvar G__10507 = 0;\nseq__8894_10492 = G__10504;\nchunk__8895_10493 = G__10505;\ncount__8896_10494 = G__10506;\ni__8897_10495 = G__10507;\ncontinue;\n}\n} else\n{var arg__7510__auto___10508 = cljs.core.first.call(null,seq__8894_10502__$1);a__7509__auto__.push(arg__7510__auto___10508);\n{\nvar G__10509 = cljs.core.next.call(null,seq__8894_10502__$1);\nvar G__10510 = null;\nvar G__10511 = 0;\nvar G__10512 = 0;\nseq__8894_10492 = G__10509;\nchunk__8895_10493 = G__10510;\ncount__8896_10494 = G__10511;\ni__8897_10495 = G__10512;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.html.apply(null,a__7509__auto__);\n};\nvar html = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn html__delegate.call(this,args__7508__auto__);};\nhtml.cljs$lang$maxFixedArity = 0;\nhtml.cljs$lang$applyTo = (function (arglist__10513){\nvar args__7508__auto__ = cljs.core.seq(arglist__10513);\nreturn html__delegate(args__7508__auto__);\n});\nhtml.cljs$core$IFn$_invoke$arity$variadic = html__delegate;\nreturn html;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.i = (function() { \nvar i__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8902_10514 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8903_10515 = null;var count__8904_10516 = 0;var i__8905_10517 = 0;while(true){\nif((i__8905_10517 < count__8904_10516))\n{var arg__7510__auto___10518 = cljs.core._nth.call(null,chunk__8903_10515,i__8905_10517);a__7509__auto__.push(arg__7510__auto___10518);\n{\nvar G__10519 = seq__8902_10514;\nvar G__10520 = chunk__8903_10515;\nvar G__10521 = count__8904_10516;\nvar G__10522 = (i__8905_10517 + 1);\nseq__8902_10514 = G__10519;\nchunk__8903_10515 = G__10520;\ncount__8904_10516 = G__10521;\ni__8905_10517 = G__10522;\ncontinue;\n}\n} else\n{var temp__4092__auto___10523 = cljs.core.seq.call(null,seq__8902_10514);if(temp__4092__auto___10523)\n{var seq__8902_10524__$1 = temp__4092__auto___10523;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8902_10524__$1))\n{var c__5632__auto___10525 = cljs.core.chunk_first.call(null,seq__8902_10524__$1);{\nvar G__10526 = cljs.core.chunk_rest.call(null,seq__8902_10524__$1);\nvar G__10527 = c__5632__auto___10525;\nvar G__10528 = cljs.core.count.call(null,c__5632__auto___10525);\nvar G__10529 = 0;\nseq__8902_10514 = G__10526;\nchunk__8903_10515 = G__10527;\ncount__8904_10516 = G__10528;\ni__8905_10517 = G__10529;\ncontinue;\n}\n} else\n{var arg__7510__auto___10530 = cljs.core.first.call(null,seq__8902_10524__$1);a__7509__auto__.push(arg__7510__auto___10530);\n{\nvar G__10531 = cljs.core.next.call(null,seq__8902_10524__$1);\nvar G__10532 = null;\nvar G__10533 = 0;\nvar G__10534 = 0;\nseq__8902_10514 = G__10531;\nchunk__8903_10515 = G__10532;\ncount__8904_10516 = G__10533;\ni__8905_10517 = G__10534;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.i.apply(null,a__7509__auto__);\n};\nvar i = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn i__delegate.call(this,args__7508__auto__);};\ni.cljs$lang$maxFixedArity = 0;\ni.cljs$lang$applyTo = (function (arglist__10535){\nvar args__7508__auto__ = cljs.core.seq(arglist__10535);\nreturn i__delegate(args__7508__auto__);\n});\ni.cljs$core$IFn$_invoke$arity$variadic = i__delegate;\nreturn i;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.iframe = (function() { \nvar iframe__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8910_10536 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8911_10537 = null;var count__8912_10538 = 0;var i__8913_10539 = 0;while(true){\nif((i__8913_10539 < count__8912_10538))\n{var arg__7510__auto___10540 = cljs.core._nth.call(null,chunk__8911_10537,i__8913_10539);a__7509__auto__.push(arg__7510__auto___10540);\n{\nvar G__10541 = seq__8910_10536;\nvar G__10542 = chunk__8911_10537;\nvar G__10543 = count__8912_10538;\nvar G__10544 = (i__8913_10539 + 1);\nseq__8910_10536 = G__10541;\nchunk__8911_10537 = G__10542;\ncount__8912_10538 = G__10543;\ni__8913_10539 = G__10544;\ncontinue;\n}\n} else\n{var temp__4092__auto___10545 = cljs.core.seq.call(null,seq__8910_10536);if(temp__4092__auto___10545)\n{var seq__8910_10546__$1 = temp__4092__auto___10545;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8910_10546__$1))\n{var c__5632__auto___10547 = cljs.core.chunk_first.call(null,seq__8910_10546__$1);{\nvar G__10548 = cljs.core.chunk_rest.call(null,seq__8910_10546__$1);\nvar G__10549 = c__5632__auto___10547;\nvar G__10550 = cljs.core.count.call(null,c__5632__auto___10547);\nvar G__10551 = 0;\nseq__8910_10536 = G__10548;\nchunk__8911_10537 = G__10549;\ncount__8912_10538 = G__10550;\ni__8913_10539 = G__10551;\ncontinue;\n}\n} else\n{var arg__7510__auto___10552 = cljs.core.first.call(null,seq__8910_10546__$1);a__7509__auto__.push(arg__7510__auto___10552);\n{\nvar G__10553 = cljs.core.next.call(null,seq__8910_10546__$1);\nvar G__10554 = null;\nvar G__10555 = 0;\nvar G__10556 = 0;\nseq__8910_10536 = G__10553;\nchunk__8911_10537 = G__10554;\ncount__8912_10538 = G__10555;\ni__8913_10539 = G__10556;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.iframe.apply(null,a__7509__auto__);\n};\nvar iframe = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn iframe__delegate.call(this,args__7508__auto__);};\niframe.cljs$lang$maxFixedArity = 0;\niframe.cljs$lang$applyTo = (function (arglist__10557){\nvar args__7508__auto__ = cljs.core.seq(arglist__10557);\nreturn iframe__delegate(args__7508__auto__);\n});\niframe.cljs$core$IFn$_invoke$arity$variadic = iframe__delegate;\nreturn iframe;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.img = (function() { \nvar img__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8918_10558 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8919_10559 = null;var count__8920_10560 = 0;var i__8921_10561 = 0;while(true){\nif((i__8921_10561 < count__8920_10560))\n{var arg__7510__auto___10562 = cljs.core._nth.call(null,chunk__8919_10559,i__8921_10561);a__7509__auto__.push(arg__7510__auto___10562);\n{\nvar G__10563 = seq__8918_10558;\nvar G__10564 = chunk__8919_10559;\nvar G__10565 = count__8920_10560;\nvar G__10566 = (i__8921_10561 + 1);\nseq__8918_10558 = G__10563;\nchunk__8919_10559 = G__10564;\ncount__8920_10560 = G__10565;\ni__8921_10561 = G__10566;\ncontinue;\n}\n} else\n{var temp__4092__auto___10567 = cljs.core.seq.call(null,seq__8918_10558);if(temp__4092__auto___10567)\n{var seq__8918_10568__$1 = temp__4092__auto___10567;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8918_10568__$1))\n{var c__5632__auto___10569 = cljs.core.chunk_first.call(null,seq__8918_10568__$1);{\nvar G__10570 = cljs.core.chunk_rest.call(null,seq__8918_10568__$1);\nvar G__10571 = c__5632__auto___10569;\nvar G__10572 = cljs.core.count.call(null,c__5632__auto___10569);\nvar G__10573 = 0;\nseq__8918_10558 = G__10570;\nchunk__8919_10559 = G__10571;\ncount__8920_10560 = G__10572;\ni__8921_10561 = G__10573;\ncontinue;\n}\n} else\n{var arg__7510__auto___10574 = cljs.core.first.call(null,seq__8918_10568__$1);a__7509__auto__.push(arg__7510__auto___10574);\n{\nvar G__10575 = cljs.core.next.call(null,seq__8918_10568__$1);\nvar G__10576 = null;\nvar G__10577 = 0;\nvar G__10578 = 0;\nseq__8918_10558 = G__10575;\nchunk__8919_10559 = G__10576;\ncount__8920_10560 = G__10577;\ni__8921_10561 = G__10578;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.img.apply(null,a__7509__auto__);\n};\nvar img = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn img__delegate.call(this,args__7508__auto__);};\nimg.cljs$lang$maxFixedArity = 0;\nimg.cljs$lang$applyTo = (function (arglist__10579){\nvar args__7508__auto__ = cljs.core.seq(arglist__10579);\nreturn img__delegate(args__7508__auto__);\n});\nimg.cljs$core$IFn$_invoke$arity$variadic = img__delegate;\nreturn img;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.input = (function() { \nvar input__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8926_10580 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8927_10581 = null;var count__8928_10582 = 0;var i__8929_10583 = 0;while(true){\nif((i__8929_10583 < count__8928_10582))\n{var arg__7510__auto___10584 = cljs.core._nth.call(null,chunk__8927_10581,i__8929_10583);a__7509__auto__.push(arg__7510__auto___10584);\n{\nvar G__10585 = seq__8926_10580;\nvar G__10586 = chunk__8927_10581;\nvar G__10587 = count__8928_10582;\nvar G__10588 = (i__8929_10583 + 1);\nseq__8926_10580 = G__10585;\nchunk__8927_10581 = G__10586;\ncount__8928_10582 = G__10587;\ni__8929_10583 = G__10588;\ncontinue;\n}\n} else\n{var temp__4092__auto___10589 = cljs.core.seq.call(null,seq__8926_10580);if(temp__4092__auto___10589)\n{var seq__8926_10590__$1 = temp__4092__auto___10589;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8926_10590__$1))\n{var c__5632__auto___10591 = cljs.core.chunk_first.call(null,seq__8926_10590__$1);{\nvar G__10592 = cljs.core.chunk_rest.call(null,seq__8926_10590__$1);\nvar G__10593 = c__5632__auto___10591;\nvar G__10594 = cljs.core.count.call(null,c__5632__auto___10591);\nvar G__10595 = 0;\nseq__8926_10580 = G__10592;\nchunk__8927_10581 = G__10593;\ncount__8928_10582 = G__10594;\ni__8929_10583 = G__10595;\ncontinue;\n}\n} else\n{var arg__7510__auto___10596 = cljs.core.first.call(null,seq__8926_10590__$1);a__7509__auto__.push(arg__7510__auto___10596);\n{\nvar G__10597 = cljs.core.next.call(null,seq__8926_10590__$1);\nvar G__10598 = null;\nvar G__10599 = 0;\nvar G__10600 = 0;\nseq__8926_10580 = G__10597;\nchunk__8927_10581 = G__10598;\ncount__8928_10582 = G__10599;\ni__8929_10583 = G__10600;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.input.apply(null,a__7509__auto__);\n};\nvar input = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn input__delegate.call(this,args__7508__auto__);};\ninput.cljs$lang$maxFixedArity = 0;\ninput.cljs$lang$applyTo = (function (arglist__10601){\nvar args__7508__auto__ = cljs.core.seq(arglist__10601);\nreturn input__delegate(args__7508__auto__);\n});\ninput.cljs$core$IFn$_invoke$arity$variadic = input__delegate;\nreturn input;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.ins = (function() { \nvar ins__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8934_10602 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8935_10603 = null;var count__8936_10604 = 0;var i__8937_10605 = 0;while(true){\nif((i__8937_10605 < count__8936_10604))\n{var arg__7510__auto___10606 = cljs.core._nth.call(null,chunk__8935_10603,i__8937_10605);a__7509__auto__.push(arg__7510__auto___10606);\n{\nvar G__10607 = seq__8934_10602;\nvar G__10608 = chunk__8935_10603;\nvar G__10609 = count__8936_10604;\nvar G__10610 = (i__8937_10605 + 1);\nseq__8934_10602 = G__10607;\nchunk__8935_10603 = G__10608;\ncount__8936_10604 = G__10609;\ni__8937_10605 = G__10610;\ncontinue;\n}\n} else\n{var temp__4092__auto___10611 = cljs.core.seq.call(null,seq__8934_10602);if(temp__4092__auto___10611)\n{var seq__8934_10612__$1 = temp__4092__auto___10611;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8934_10612__$1))\n{var c__5632__auto___10613 = cljs.core.chunk_first.call(null,seq__8934_10612__$1);{\nvar G__10614 = cljs.core.chunk_rest.call(null,seq__8934_10612__$1);\nvar G__10615 = c__5632__auto___10613;\nvar G__10616 = cljs.core.count.call(null,c__5632__auto___10613);\nvar G__10617 = 0;\nseq__8934_10602 = G__10614;\nchunk__8935_10603 = G__10615;\ncount__8936_10604 = G__10616;\ni__8937_10605 = G__10617;\ncontinue;\n}\n} else\n{var arg__7510__auto___10618 = cljs.core.first.call(null,seq__8934_10612__$1);a__7509__auto__.push(arg__7510__auto___10618);\n{\nvar G__10619 = cljs.core.next.call(null,seq__8934_10612__$1);\nvar G__10620 = null;\nvar G__10621 = 0;\nvar G__10622 = 0;\nseq__8934_10602 = G__10619;\nchunk__8935_10603 = G__10620;\ncount__8936_10604 = G__10621;\ni__8937_10605 = G__10622;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.ins.apply(null,a__7509__auto__);\n};\nvar ins = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn ins__delegate.call(this,args__7508__auto__);};\nins.cljs$lang$maxFixedArity = 0;\nins.cljs$lang$applyTo = (function (arglist__10623){\nvar args__7508__auto__ = cljs.core.seq(arglist__10623);\nreturn ins__delegate(args__7508__auto__);\n});\nins.cljs$core$IFn$_invoke$arity$variadic = ins__delegate;\nreturn ins;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.kbd = (function() { \nvar kbd__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8942_10624 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8943_10625 = null;var count__8944_10626 = 0;var i__8945_10627 = 0;while(true){\nif((i__8945_10627 < count__8944_10626))\n{var arg__7510__auto___10628 = cljs.core._nth.call(null,chunk__8943_10625,i__8945_10627);a__7509__auto__.push(arg__7510__auto___10628);\n{\nvar G__10629 = seq__8942_10624;\nvar G__10630 = chunk__8943_10625;\nvar G__10631 = count__8944_10626;\nvar G__10632 = (i__8945_10627 + 1);\nseq__8942_10624 = G__10629;\nchunk__8943_10625 = G__10630;\ncount__8944_10626 = G__10631;\ni__8945_10627 = G__10632;\ncontinue;\n}\n} else\n{var temp__4092__auto___10633 = cljs.core.seq.call(null,seq__8942_10624);if(temp__4092__auto___10633)\n{var seq__8942_10634__$1 = temp__4092__auto___10633;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8942_10634__$1))\n{var c__5632__auto___10635 = cljs.core.chunk_first.call(null,seq__8942_10634__$1);{\nvar G__10636 = cljs.core.chunk_rest.call(null,seq__8942_10634__$1);\nvar G__10637 = c__5632__auto___10635;\nvar G__10638 = cljs.core.count.call(null,c__5632__auto___10635);\nvar G__10639 = 0;\nseq__8942_10624 = G__10636;\nchunk__8943_10625 = G__10637;\ncount__8944_10626 = G__10638;\ni__8945_10627 = G__10639;\ncontinue;\n}\n} else\n{var arg__7510__auto___10640 = cljs.core.first.call(null,seq__8942_10634__$1);a__7509__auto__.push(arg__7510__auto___10640);\n{\nvar G__10641 = cljs.core.next.call(null,seq__8942_10634__$1);\nvar G__10642 = null;\nvar G__10643 = 0;\nvar G__10644 = 0;\nseq__8942_10624 = G__10641;\nchunk__8943_10625 = G__10642;\ncount__8944_10626 = G__10643;\ni__8945_10627 = G__10644;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.kbd.apply(null,a__7509__auto__);\n};\nvar kbd = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn kbd__delegate.call(this,args__7508__auto__);};\nkbd.cljs$lang$maxFixedArity = 0;\nkbd.cljs$lang$applyTo = (function (arglist__10645){\nvar args__7508__auto__ = cljs.core.seq(arglist__10645);\nreturn kbd__delegate(args__7508__auto__);\n});\nkbd.cljs$core$IFn$_invoke$arity$variadic = kbd__delegate;\nreturn kbd;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.keygen = (function() { \nvar keygen__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8950_10646 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8951_10647 = null;var count__8952_10648 = 0;var i__8953_10649 = 0;while(true){\nif((i__8953_10649 < count__8952_10648))\n{var arg__7510__auto___10650 = cljs.core._nth.call(null,chunk__8951_10647,i__8953_10649);a__7509__auto__.push(arg__7510__auto___10650);\n{\nvar G__10651 = seq__8950_10646;\nvar G__10652 = chunk__8951_10647;\nvar G__10653 = count__8952_10648;\nvar G__10654 = (i__8953_10649 + 1);\nseq__8950_10646 = G__10651;\nchunk__8951_10647 = G__10652;\ncount__8952_10648 = G__10653;\ni__8953_10649 = G__10654;\ncontinue;\n}\n} else\n{var temp__4092__auto___10655 = cljs.core.seq.call(null,seq__8950_10646);if(temp__4092__auto___10655)\n{var seq__8950_10656__$1 = temp__4092__auto___10655;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8950_10656__$1))\n{var c__5632__auto___10657 = cljs.core.chunk_first.call(null,seq__8950_10656__$1);{\nvar G__10658 = cljs.core.chunk_rest.call(null,seq__8950_10656__$1);\nvar G__10659 = c__5632__auto___10657;\nvar G__10660 = cljs.core.count.call(null,c__5632__auto___10657);\nvar G__10661 = 0;\nseq__8950_10646 = G__10658;\nchunk__8951_10647 = G__10659;\ncount__8952_10648 = G__10660;\ni__8953_10649 = G__10661;\ncontinue;\n}\n} else\n{var arg__7510__auto___10662 = cljs.core.first.call(null,seq__8950_10656__$1);a__7509__auto__.push(arg__7510__auto___10662);\n{\nvar G__10663 = cljs.core.next.call(null,seq__8950_10656__$1);\nvar G__10664 = null;\nvar G__10665 = 0;\nvar G__10666 = 0;\nseq__8950_10646 = G__10663;\nchunk__8951_10647 = G__10664;\ncount__8952_10648 = G__10665;\ni__8953_10649 = G__10666;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.keygen.apply(null,a__7509__auto__);\n};\nvar keygen = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn keygen__delegate.call(this,args__7508__auto__);};\nkeygen.cljs$lang$maxFixedArity = 0;\nkeygen.cljs$lang$applyTo = (function (arglist__10667){\nvar args__7508__auto__ = cljs.core.seq(arglist__10667);\nreturn keygen__delegate(args__7508__auto__);\n});\nkeygen.cljs$core$IFn$_invoke$arity$variadic = keygen__delegate;\nreturn keygen;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.label = (function() { \nvar label__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8958_10668 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8959_10669 = null;var count__8960_10670 = 0;var i__8961_10671 = 0;while(true){\nif((i__8961_10671 < count__8960_10670))\n{var arg__7510__auto___10672 = cljs.core._nth.call(null,chunk__8959_10669,i__8961_10671);a__7509__auto__.push(arg__7510__auto___10672);\n{\nvar G__10673 = seq__8958_10668;\nvar G__10674 = chunk__8959_10669;\nvar G__10675 = count__8960_10670;\nvar G__10676 = (i__8961_10671 + 1);\nseq__8958_10668 = G__10673;\nchunk__8959_10669 = G__10674;\ncount__8960_10670 = G__10675;\ni__8961_10671 = G__10676;\ncontinue;\n}\n} else\n{var temp__4092__auto___10677 = cljs.core.seq.call(null,seq__8958_10668);if(temp__4092__auto___10677)\n{var seq__8958_10678__$1 = temp__4092__auto___10677;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8958_10678__$1))\n{var c__5632__auto___10679 = cljs.core.chunk_first.call(null,seq__8958_10678__$1);{\nvar G__10680 = cljs.core.chunk_rest.call(null,seq__8958_10678__$1);\nvar G__10681 = c__5632__auto___10679;\nvar G__10682 = cljs.core.count.call(null,c__5632__auto___10679);\nvar G__10683 = 0;\nseq__8958_10668 = G__10680;\nchunk__8959_10669 = G__10681;\ncount__8960_10670 = G__10682;\ni__8961_10671 = G__10683;\ncontinue;\n}\n} else\n{var arg__7510__auto___10684 = cljs.core.first.call(null,seq__8958_10678__$1);a__7509__auto__.push(arg__7510__auto___10684);\n{\nvar G__10685 = cljs.core.next.call(null,seq__8958_10678__$1);\nvar G__10686 = null;\nvar G__10687 = 0;\nvar G__10688 = 0;\nseq__8958_10668 = G__10685;\nchunk__8959_10669 = G__10686;\ncount__8960_10670 = G__10687;\ni__8961_10671 = G__10688;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.label.apply(null,a__7509__auto__);\n};\nvar label = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn label__delegate.call(this,args__7508__auto__);};\nlabel.cljs$lang$maxFixedArity = 0;\nlabel.cljs$lang$applyTo = (function (arglist__10689){\nvar args__7508__auto__ = cljs.core.seq(arglist__10689);\nreturn label__delegate(args__7508__auto__);\n});\nlabel.cljs$core$IFn$_invoke$arity$variadic = label__delegate;\nreturn label;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.legend = (function() { \nvar legend__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8966_10690 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8967_10691 = null;var count__8968_10692 = 0;var i__8969_10693 = 0;while(true){\nif((i__8969_10693 < count__8968_10692))\n{var arg__7510__auto___10694 = cljs.core._nth.call(null,chunk__8967_10691,i__8969_10693);a__7509__auto__.push(arg__7510__auto___10694);\n{\nvar G__10695 = seq__8966_10690;\nvar G__10696 = chunk__8967_10691;\nvar G__10697 = count__8968_10692;\nvar G__10698 = (i__8969_10693 + 1);\nseq__8966_10690 = G__10695;\nchunk__8967_10691 = G__10696;\ncount__8968_10692 = G__10697;\ni__8969_10693 = G__10698;\ncontinue;\n}\n} else\n{var temp__4092__auto___10699 = cljs.core.seq.call(null,seq__8966_10690);if(temp__4092__auto___10699)\n{var seq__8966_10700__$1 = temp__4092__auto___10699;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8966_10700__$1))\n{var c__5632__auto___10701 = cljs.core.chunk_first.call(null,seq__8966_10700__$1);{\nvar G__10702 = cljs.core.chunk_rest.call(null,seq__8966_10700__$1);\nvar G__10703 = c__5632__auto___10701;\nvar G__10704 = cljs.core.count.call(null,c__5632__auto___10701);\nvar G__10705 = 0;\nseq__8966_10690 = G__10702;\nchunk__8967_10691 = G__10703;\ncount__8968_10692 = G__10704;\ni__8969_10693 = G__10705;\ncontinue;\n}\n} else\n{var arg__7510__auto___10706 = cljs.core.first.call(null,seq__8966_10700__$1);a__7509__auto__.push(arg__7510__auto___10706);\n{\nvar G__10707 = cljs.core.next.call(null,seq__8966_10700__$1);\nvar G__10708 = null;\nvar G__10709 = 0;\nvar G__10710 = 0;\nseq__8966_10690 = G__10707;\nchunk__8967_10691 = G__10708;\ncount__8968_10692 = G__10709;\ni__8969_10693 = G__10710;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.legend.apply(null,a__7509__auto__);\n};\nvar legend = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn legend__delegate.call(this,args__7508__auto__);};\nlegend.cljs$lang$maxFixedArity = 0;\nlegend.cljs$lang$applyTo = (function (arglist__10711){\nvar args__7508__auto__ = cljs.core.seq(arglist__10711);\nreturn legend__delegate(args__7508__auto__);\n});\nlegend.cljs$core$IFn$_invoke$arity$variadic = legend__delegate;\nreturn legend;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.li = (function() { \nvar li__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8974_10712 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8975_10713 = null;var count__8976_10714 = 0;var i__8977_10715 = 0;while(true){\nif((i__8977_10715 < count__8976_10714))\n{var arg__7510__auto___10716 = cljs.core._nth.call(null,chunk__8975_10713,i__8977_10715);a__7509__auto__.push(arg__7510__auto___10716);\n{\nvar G__10717 = seq__8974_10712;\nvar G__10718 = chunk__8975_10713;\nvar G__10719 = count__8976_10714;\nvar G__10720 = (i__8977_10715 + 1);\nseq__8974_10712 = G__10717;\nchunk__8975_10713 = G__10718;\ncount__8976_10714 = G__10719;\ni__8977_10715 = G__10720;\ncontinue;\n}\n} else\n{var temp__4092__auto___10721 = cljs.core.seq.call(null,seq__8974_10712);if(temp__4092__auto___10721)\n{var seq__8974_10722__$1 = temp__4092__auto___10721;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8974_10722__$1))\n{var c__5632__auto___10723 = cljs.core.chunk_first.call(null,seq__8974_10722__$1);{\nvar G__10724 = cljs.core.chunk_rest.call(null,seq__8974_10722__$1);\nvar G__10725 = c__5632__auto___10723;\nvar G__10726 = cljs.core.count.call(null,c__5632__auto___10723);\nvar G__10727 = 0;\nseq__8974_10712 = G__10724;\nchunk__8975_10713 = G__10725;\ncount__8976_10714 = G__10726;\ni__8977_10715 = G__10727;\ncontinue;\n}\n} else\n{var arg__7510__auto___10728 = cljs.core.first.call(null,seq__8974_10722__$1);a__7509__auto__.push(arg__7510__auto___10728);\n{\nvar G__10729 = cljs.core.next.call(null,seq__8974_10722__$1);\nvar G__10730 = null;\nvar G__10731 = 0;\nvar G__10732 = 0;\nseq__8974_10712 = G__10729;\nchunk__8975_10713 = G__10730;\ncount__8976_10714 = G__10731;\ni__8977_10715 = G__10732;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.li.apply(null,a__7509__auto__);\n};\nvar li = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn li__delegate.call(this,args__7508__auto__);};\nli.cljs$lang$maxFixedArity = 0;\nli.cljs$lang$applyTo = (function (arglist__10733){\nvar args__7508__auto__ = cljs.core.seq(arglist__10733);\nreturn li__delegate(args__7508__auto__);\n});\nli.cljs$core$IFn$_invoke$arity$variadic = li__delegate;\nreturn li;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.link = (function() { \nvar link__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8982_10734 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8983_10735 = null;var count__8984_10736 = 0;var i__8985_10737 = 0;while(true){\nif((i__8985_10737 < count__8984_10736))\n{var arg__7510__auto___10738 = cljs.core._nth.call(null,chunk__8983_10735,i__8985_10737);a__7509__auto__.push(arg__7510__auto___10738);\n{\nvar G__10739 = seq__8982_10734;\nvar G__10740 = chunk__8983_10735;\nvar G__10741 = count__8984_10736;\nvar G__10742 = (i__8985_10737 + 1);\nseq__8982_10734 = G__10739;\nchunk__8983_10735 = G__10740;\ncount__8984_10736 = G__10741;\ni__8985_10737 = G__10742;\ncontinue;\n}\n} else\n{var temp__4092__auto___10743 = cljs.core.seq.call(null,seq__8982_10734);if(temp__4092__auto___10743)\n{var seq__8982_10744__$1 = temp__4092__auto___10743;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8982_10744__$1))\n{var c__5632__auto___10745 = cljs.core.chunk_first.call(null,seq__8982_10744__$1);{\nvar G__10746 = cljs.core.chunk_rest.call(null,seq__8982_10744__$1);\nvar G__10747 = c__5632__auto___10745;\nvar G__10748 = cljs.core.count.call(null,c__5632__auto___10745);\nvar G__10749 = 0;\nseq__8982_10734 = G__10746;\nchunk__8983_10735 = G__10747;\ncount__8984_10736 = G__10748;\ni__8985_10737 = G__10749;\ncontinue;\n}\n} else\n{var arg__7510__auto___10750 = cljs.core.first.call(null,seq__8982_10744__$1);a__7509__auto__.push(arg__7510__auto___10750);\n{\nvar G__10751 = cljs.core.next.call(null,seq__8982_10744__$1);\nvar G__10752 = null;\nvar G__10753 = 0;\nvar G__10754 = 0;\nseq__8982_10734 = G__10751;\nchunk__8983_10735 = G__10752;\ncount__8984_10736 = G__10753;\ni__8985_10737 = G__10754;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.link.apply(null,a__7509__auto__);\n};\nvar link = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn link__delegate.call(this,args__7508__auto__);};\nlink.cljs$lang$maxFixedArity = 0;\nlink.cljs$lang$applyTo = (function (arglist__10755){\nvar args__7508__auto__ = cljs.core.seq(arglist__10755);\nreturn link__delegate(args__7508__auto__);\n});\nlink.cljs$core$IFn$_invoke$arity$variadic = link__delegate;\nreturn link;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.main = (function() { \nvar main__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8990_10756 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8991_10757 = null;var count__8992_10758 = 0;var i__8993_10759 = 0;while(true){\nif((i__8993_10759 < count__8992_10758))\n{var arg__7510__auto___10760 = cljs.core._nth.call(null,chunk__8991_10757,i__8993_10759);a__7509__auto__.push(arg__7510__auto___10760);\n{\nvar G__10761 = seq__8990_10756;\nvar G__10762 = chunk__8991_10757;\nvar G__10763 = count__8992_10758;\nvar G__10764 = (i__8993_10759 + 1);\nseq__8990_10756 = G__10761;\nchunk__8991_10757 = G__10762;\ncount__8992_10758 = G__10763;\ni__8993_10759 = G__10764;\ncontinue;\n}\n} else\n{var temp__4092__auto___10765 = cljs.core.seq.call(null,seq__8990_10756);if(temp__4092__auto___10765)\n{var seq__8990_10766__$1 = temp__4092__auto___10765;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8990_10766__$1))\n{var c__5632__auto___10767 = cljs.core.chunk_first.call(null,seq__8990_10766__$1);{\nvar G__10768 = cljs.core.chunk_rest.call(null,seq__8990_10766__$1);\nvar G__10769 = c__5632__auto___10767;\nvar G__10770 = cljs.core.count.call(null,c__5632__auto___10767);\nvar G__10771 = 0;\nseq__8990_10756 = G__10768;\nchunk__8991_10757 = G__10769;\ncount__8992_10758 = G__10770;\ni__8993_10759 = G__10771;\ncontinue;\n}\n} else\n{var arg__7510__auto___10772 = cljs.core.first.call(null,seq__8990_10766__$1);a__7509__auto__.push(arg__7510__auto___10772);\n{\nvar G__10773 = cljs.core.next.call(null,seq__8990_10766__$1);\nvar G__10774 = null;\nvar G__10775 = 0;\nvar G__10776 = 0;\nseq__8990_10756 = G__10773;\nchunk__8991_10757 = G__10774;\ncount__8992_10758 = G__10775;\ni__8993_10759 = G__10776;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.main.apply(null,a__7509__auto__);\n};\nvar main = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn main__delegate.call(this,args__7508__auto__);};\nmain.cljs$lang$maxFixedArity = 0;\nmain.cljs$lang$applyTo = (function (arglist__10777){\nvar args__7508__auto__ = cljs.core.seq(arglist__10777);\nreturn main__delegate(args__7508__auto__);\n});\nmain.cljs$core$IFn$_invoke$arity$variadic = main__delegate;\nreturn main;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.map = (function() { \nvar map__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8998_10778 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8999_10779 = null;var count__9000_10780 = 0;var i__9001_10781 = 0;while(true){\nif((i__9001_10781 < count__9000_10780))\n{var arg__7510__auto___10782 = cljs.core._nth.call(null,chunk__8999_10779,i__9001_10781);a__7509__auto__.push(arg__7510__auto___10782);\n{\nvar G__10783 = seq__8998_10778;\nvar G__10784 = chunk__8999_10779;\nvar G__10785 = count__9000_10780;\nvar G__10786 = (i__9001_10781 + 1);\nseq__8998_10778 = G__10783;\nchunk__8999_10779 = G__10784;\ncount__9000_10780 = G__10785;\ni__9001_10781 = G__10786;\ncontinue;\n}\n} else\n{var temp__4092__auto___10787 = cljs.core.seq.call(null,seq__8998_10778);if(temp__4092__auto___10787)\n{var seq__8998_10788__$1 = temp__4092__auto___10787;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8998_10788__$1))\n{var c__5632__auto___10789 = cljs.core.chunk_first.call(null,seq__8998_10788__$1);{\nvar G__10790 = cljs.core.chunk_rest.call(null,seq__8998_10788__$1);\nvar G__10791 = c__5632__auto___10789;\nvar G__10792 = cljs.core.count.call(null,c__5632__auto___10789);\nvar G__10793 = 0;\nseq__8998_10778 = G__10790;\nchunk__8999_10779 = G__10791;\ncount__9000_10780 = G__10792;\ni__9001_10781 = G__10793;\ncontinue;\n}\n} else\n{var arg__7510__auto___10794 = cljs.core.first.call(null,seq__8998_10788__$1);a__7509__auto__.push(arg__7510__auto___10794);\n{\nvar G__10795 = cljs.core.next.call(null,seq__8998_10788__$1);\nvar G__10796 = null;\nvar G__10797 = 0;\nvar G__10798 = 0;\nseq__8998_10778 = G__10795;\nchunk__8999_10779 = G__10796;\ncount__9000_10780 = G__10797;\ni__9001_10781 = G__10798;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.map.apply(null,a__7509__auto__);\n};\nvar map = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn map__delegate.call(this,args__7508__auto__);};\nmap.cljs$lang$maxFixedArity = 0;\nmap.cljs$lang$applyTo = (function (arglist__10799){\nvar args__7508__auto__ = cljs.core.seq(arglist__10799);\nreturn map__delegate(args__7508__auto__);\n});\nmap.cljs$core$IFn$_invoke$arity$variadic = map__delegate;\nreturn map;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.mark = (function() { \nvar mark__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9006_10800 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9007_10801 = null;var count__9008_10802 = 0;var i__9009_10803 = 0;while(true){\nif((i__9009_10803 < count__9008_10802))\n{var arg__7510__auto___10804 = cljs.core._nth.call(null,chunk__9007_10801,i__9009_10803);a__7509__auto__.push(arg__7510__auto___10804);\n{\nvar G__10805 = seq__9006_10800;\nvar G__10806 = chunk__9007_10801;\nvar G__10807 = count__9008_10802;\nvar G__10808 = (i__9009_10803 + 1);\nseq__9006_10800 = G__10805;\nchunk__9007_10801 = G__10806;\ncount__9008_10802 = G__10807;\ni__9009_10803 = G__10808;\ncontinue;\n}\n} else\n{var temp__4092__auto___10809 = cljs.core.seq.call(null,seq__9006_10800);if(temp__4092__auto___10809)\n{var seq__9006_10810__$1 = temp__4092__auto___10809;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9006_10810__$1))\n{var c__5632__auto___10811 = cljs.core.chunk_first.call(null,seq__9006_10810__$1);{\nvar G__10812 = cljs.core.chunk_rest.call(null,seq__9006_10810__$1);\nvar G__10813 = c__5632__auto___10811;\nvar G__10814 = cljs.core.count.call(null,c__5632__auto___10811);\nvar G__10815 = 0;\nseq__9006_10800 = G__10812;\nchunk__9007_10801 = G__10813;\ncount__9008_10802 = G__10814;\ni__9009_10803 = G__10815;\ncontinue;\n}\n} else\n{var arg__7510__auto___10816 = cljs.core.first.call(null,seq__9006_10810__$1);a__7509__auto__.push(arg__7510__auto___10816);\n{\nvar G__10817 = cljs.core.next.call(null,seq__9006_10810__$1);\nvar G__10818 = null;\nvar G__10819 = 0;\nvar G__10820 = 0;\nseq__9006_10800 = G__10817;\nchunk__9007_10801 = G__10818;\ncount__9008_10802 = G__10819;\ni__9009_10803 = G__10820;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.mark.apply(null,a__7509__auto__);\n};\nvar mark = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn mark__delegate.call(this,args__7508__auto__);};\nmark.cljs$lang$maxFixedArity = 0;\nmark.cljs$lang$applyTo = (function (arglist__10821){\nvar args__7508__auto__ = cljs.core.seq(arglist__10821);\nreturn mark__delegate(args__7508__auto__);\n});\nmark.cljs$core$IFn$_invoke$arity$variadic = mark__delegate;\nreturn mark;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.menu = (function() { \nvar menu__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9014_10822 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9015_10823 = null;var count__9016_10824 = 0;var i__9017_10825 = 0;while(true){\nif((i__9017_10825 < count__9016_10824))\n{var arg__7510__auto___10826 = cljs.core._nth.call(null,chunk__9015_10823,i__9017_10825);a__7509__auto__.push(arg__7510__auto___10826);\n{\nvar G__10827 = seq__9014_10822;\nvar G__10828 = chunk__9015_10823;\nvar G__10829 = count__9016_10824;\nvar G__10830 = (i__9017_10825 + 1);\nseq__9014_10822 = G__10827;\nchunk__9015_10823 = G__10828;\ncount__9016_10824 = G__10829;\ni__9017_10825 = G__10830;\ncontinue;\n}\n} else\n{var temp__4092__auto___10831 = cljs.core.seq.call(null,seq__9014_10822);if(temp__4092__auto___10831)\n{var seq__9014_10832__$1 = temp__4092__auto___10831;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9014_10832__$1))\n{var c__5632__auto___10833 = cljs.core.chunk_first.call(null,seq__9014_10832__$1);{\nvar G__10834 = cljs.core.chunk_rest.call(null,seq__9014_10832__$1);\nvar G__10835 = c__5632__auto___10833;\nvar G__10836 = cljs.core.count.call(null,c__5632__auto___10833);\nvar G__10837 = 0;\nseq__9014_10822 = G__10834;\nchunk__9015_10823 = G__10835;\ncount__9016_10824 = G__10836;\ni__9017_10825 = G__10837;\ncontinue;\n}\n} else\n{var arg__7510__auto___10838 = cljs.core.first.call(null,seq__9014_10832__$1);a__7509__auto__.push(arg__7510__auto___10838);\n{\nvar G__10839 = cljs.core.next.call(null,seq__9014_10832__$1);\nvar G__10840 = null;\nvar G__10841 = 0;\nvar G__10842 = 0;\nseq__9014_10822 = G__10839;\nchunk__9015_10823 = G__10840;\ncount__9016_10824 = G__10841;\ni__9017_10825 = G__10842;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.menu.apply(null,a__7509__auto__);\n};\nvar menu = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn menu__delegate.call(this,args__7508__auto__);};\nmenu.cljs$lang$maxFixedArity = 0;\nmenu.cljs$lang$applyTo = (function (arglist__10843){\nvar args__7508__auto__ = cljs.core.seq(arglist__10843);\nreturn menu__delegate(args__7508__auto__);\n});\nmenu.cljs$core$IFn$_invoke$arity$variadic = menu__delegate;\nreturn menu;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.menuitem = (function() { \nvar menuitem__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9022_10844 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9023_10845 = null;var count__9024_10846 = 0;var i__9025_10847 = 0;while(true){\nif((i__9025_10847 < count__9024_10846))\n{var arg__7510__auto___10848 = cljs.core._nth.call(null,chunk__9023_10845,i__9025_10847);a__7509__auto__.push(arg__7510__auto___10848);\n{\nvar G__10849 = seq__9022_10844;\nvar G__10850 = chunk__9023_10845;\nvar G__10851 = count__9024_10846;\nvar G__10852 = (i__9025_10847 + 1);\nseq__9022_10844 = G__10849;\nchunk__9023_10845 = G__10850;\ncount__9024_10846 = G__10851;\ni__9025_10847 = G__10852;\ncontinue;\n}\n} else\n{var temp__4092__auto___10853 = cljs.core.seq.call(null,seq__9022_10844);if(temp__4092__auto___10853)\n{var seq__9022_10854__$1 = temp__4092__auto___10853;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9022_10854__$1))\n{var c__5632__auto___10855 = cljs.core.chunk_first.call(null,seq__9022_10854__$1);{\nvar G__10856 = cljs.core.chunk_rest.call(null,seq__9022_10854__$1);\nvar G__10857 = c__5632__auto___10855;\nvar G__10858 = cljs.core.count.call(null,c__5632__auto___10855);\nvar G__10859 = 0;\nseq__9022_10844 = G__10856;\nchunk__9023_10845 = G__10857;\ncount__9024_10846 = G__10858;\ni__9025_10847 = G__10859;\ncontinue;\n}\n} else\n{var arg__7510__auto___10860 = cljs.core.first.call(null,seq__9022_10854__$1);a__7509__auto__.push(arg__7510__auto___10860);\n{\nvar G__10861 = cljs.core.next.call(null,seq__9022_10854__$1);\nvar G__10862 = null;\nvar G__10863 = 0;\nvar G__10864 = 0;\nseq__9022_10844 = G__10861;\nchunk__9023_10845 = G__10862;\ncount__9024_10846 = G__10863;\ni__9025_10847 = G__10864;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.menuitem.apply(null,a__7509__auto__);\n};\nvar menuitem = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn menuitem__delegate.call(this,args__7508__auto__);};\nmenuitem.cljs$lang$maxFixedArity = 0;\nmenuitem.cljs$lang$applyTo = (function (arglist__10865){\nvar args__7508__auto__ = cljs.core.seq(arglist__10865);\nreturn menuitem__delegate(args__7508__auto__);\n});\nmenuitem.cljs$core$IFn$_invoke$arity$variadic = menuitem__delegate;\nreturn menuitem;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.meta = (function() { \nvar meta__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9030_10866 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9031_10867 = null;var count__9032_10868 = 0;var i__9033_10869 = 0;while(true){\nif((i__9033_10869 < count__9032_10868))\n{var arg__7510__auto___10870 = cljs.core._nth.call(null,chunk__9031_10867,i__9033_10869);a__7509__auto__.push(arg__7510__auto___10870);\n{\nvar G__10871 = seq__9030_10866;\nvar G__10872 = chunk__9031_10867;\nvar G__10873 = count__9032_10868;\nvar G__10874 = (i__9033_10869 + 1);\nseq__9030_10866 = G__10871;\nchunk__9031_10867 = G__10872;\ncount__9032_10868 = G__10873;\ni__9033_10869 = G__10874;\ncontinue;\n}\n} else\n{var temp__4092__auto___10875 = cljs.core.seq.call(null,seq__9030_10866);if(temp__4092__auto___10875)\n{var seq__9030_10876__$1 = temp__4092__auto___10875;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9030_10876__$1))\n{var c__5632__auto___10877 = cljs.core.chunk_first.call(null,seq__9030_10876__$1);{\nvar G__10878 = cljs.core.chunk_rest.call(null,seq__9030_10876__$1);\nvar G__10879 = c__5632__auto___10877;\nvar G__10880 = cljs.core.count.call(null,c__5632__auto___10877);\nvar G__10881 = 0;\nseq__9030_10866 = G__10878;\nchunk__9031_10867 = G__10879;\ncount__9032_10868 = G__10880;\ni__9033_10869 = G__10881;\ncontinue;\n}\n} else\n{var arg__7510__auto___10882 = cljs.core.first.call(null,seq__9030_10876__$1);a__7509__auto__.push(arg__7510__auto___10882);\n{\nvar G__10883 = cljs.core.next.call(null,seq__9030_10876__$1);\nvar G__10884 = null;\nvar G__10885 = 0;\nvar G__10886 = 0;\nseq__9030_10866 = G__10883;\nchunk__9031_10867 = G__10884;\ncount__9032_10868 = G__10885;\ni__9033_10869 = G__10886;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.meta.apply(null,a__7509__auto__);\n};\nvar meta = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn meta__delegate.call(this,args__7508__auto__);};\nmeta.cljs$lang$maxFixedArity = 0;\nmeta.cljs$lang$applyTo = (function (arglist__10887){\nvar args__7508__auto__ = cljs.core.seq(arglist__10887);\nreturn meta__delegate(args__7508__auto__);\n});\nmeta.cljs$core$IFn$_invoke$arity$variadic = meta__delegate;\nreturn meta;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.meter = (function() { \nvar meter__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9038_10888 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9039_10889 = null;var count__9040_10890 = 0;var i__9041_10891 = 0;while(true){\nif((i__9041_10891 < count__9040_10890))\n{var arg__7510__auto___10892 = cljs.core._nth.call(null,chunk__9039_10889,i__9041_10891);a__7509__auto__.push(arg__7510__auto___10892);\n{\nvar G__10893 = seq__9038_10888;\nvar G__10894 = chunk__9039_10889;\nvar G__10895 = count__9040_10890;\nvar G__10896 = (i__9041_10891 + 1);\nseq__9038_10888 = G__10893;\nchunk__9039_10889 = G__10894;\ncount__9040_10890 = G__10895;\ni__9041_10891 = G__10896;\ncontinue;\n}\n} else\n{var temp__4092__auto___10897 = cljs.core.seq.call(null,seq__9038_10888);if(temp__4092__auto___10897)\n{var seq__9038_10898__$1 = temp__4092__auto___10897;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9038_10898__$1))\n{var c__5632__auto___10899 = cljs.core.chunk_first.call(null,seq__9038_10898__$1);{\nvar G__10900 = cljs.core.chunk_rest.call(null,seq__9038_10898__$1);\nvar G__10901 = c__5632__auto___10899;\nvar G__10902 = cljs.core.count.call(null,c__5632__auto___10899);\nvar G__10903 = 0;\nseq__9038_10888 = G__10900;\nchunk__9039_10889 = G__10901;\ncount__9040_10890 = G__10902;\ni__9041_10891 = G__10903;\ncontinue;\n}\n} else\n{var arg__7510__auto___10904 = cljs.core.first.call(null,seq__9038_10898__$1);a__7509__auto__.push(arg__7510__auto___10904);\n{\nvar G__10905 = cljs.core.next.call(null,seq__9038_10898__$1);\nvar G__10906 = null;\nvar G__10907 = 0;\nvar G__10908 = 0;\nseq__9038_10888 = G__10905;\nchunk__9039_10889 = G__10906;\ncount__9040_10890 = G__10907;\ni__9041_10891 = G__10908;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.meter.apply(null,a__7509__auto__);\n};\nvar meter = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn meter__delegate.call(this,args__7508__auto__);};\nmeter.cljs$lang$maxFixedArity = 0;\nmeter.cljs$lang$applyTo = (function (arglist__10909){\nvar args__7508__auto__ = cljs.core.seq(arglist__10909);\nreturn meter__delegate(args__7508__auto__);\n});\nmeter.cljs$core$IFn$_invoke$arity$variadic = meter__delegate;\nreturn meter;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.nav = (function() { \nvar nav__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9046_10910 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9047_10911 = null;var count__9048_10912 = 0;var i__9049_10913 = 0;while(true){\nif((i__9049_10913 < count__9048_10912))\n{var arg__7510__auto___10914 = cljs.core._nth.call(null,chunk__9047_10911,i__9049_10913);a__7509__auto__.push(arg__7510__auto___10914);\n{\nvar G__10915 = seq__9046_10910;\nvar G__10916 = chunk__9047_10911;\nvar G__10917 = count__9048_10912;\nvar G__10918 = (i__9049_10913 + 1);\nseq__9046_10910 = G__10915;\nchunk__9047_10911 = G__10916;\ncount__9048_10912 = G__10917;\ni__9049_10913 = G__10918;\ncontinue;\n}\n} else\n{var temp__4092__auto___10919 = cljs.core.seq.call(null,seq__9046_10910);if(temp__4092__auto___10919)\n{var seq__9046_10920__$1 = temp__4092__auto___10919;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9046_10920__$1))\n{var c__5632__auto___10921 = cljs.core.chunk_first.call(null,seq__9046_10920__$1);{\nvar G__10922 = cljs.core.chunk_rest.call(null,seq__9046_10920__$1);\nvar G__10923 = c__5632__auto___10921;\nvar G__10924 = cljs.core.count.call(null,c__5632__auto___10921);\nvar G__10925 = 0;\nseq__9046_10910 = G__10922;\nchunk__9047_10911 = G__10923;\ncount__9048_10912 = G__10924;\ni__9049_10913 = G__10925;\ncontinue;\n}\n} else\n{var arg__7510__auto___10926 = cljs.core.first.call(null,seq__9046_10920__$1);a__7509__auto__.push(arg__7510__auto___10926);\n{\nvar G__10927 = cljs.core.next.call(null,seq__9046_10920__$1);\nvar G__10928 = null;\nvar G__10929 = 0;\nvar G__10930 = 0;\nseq__9046_10910 = G__10927;\nchunk__9047_10911 = G__10928;\ncount__9048_10912 = G__10929;\ni__9049_10913 = G__10930;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.nav.apply(null,a__7509__auto__);\n};\nvar nav = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn nav__delegate.call(this,args__7508__auto__);};\nnav.cljs$lang$maxFixedArity = 0;\nnav.cljs$lang$applyTo = (function (arglist__10931){\nvar args__7508__auto__ = cljs.core.seq(arglist__10931);\nreturn nav__delegate(args__7508__auto__);\n});\nnav.cljs$core$IFn$_invoke$arity$variadic = nav__delegate;\nreturn nav;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.noscript = (function() { \nvar noscript__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9054_10932 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9055_10933 = null;var count__9056_10934 = 0;var i__9057_10935 = 0;while(true){\nif((i__9057_10935 < count__9056_10934))\n{var arg__7510__auto___10936 = cljs.core._nth.call(null,chunk__9055_10933,i__9057_10935);a__7509__auto__.push(arg__7510__auto___10936);\n{\nvar G__10937 = seq__9054_10932;\nvar G__10938 = chunk__9055_10933;\nvar G__10939 = count__9056_10934;\nvar G__10940 = (i__9057_10935 + 1);\nseq__9054_10932 = G__10937;\nchunk__9055_10933 = G__10938;\ncount__9056_10934 = G__10939;\ni__9057_10935 = G__10940;\ncontinue;\n}\n} else\n{var temp__4092__auto___10941 = cljs.core.seq.call(null,seq__9054_10932);if(temp__4092__auto___10941)\n{var seq__9054_10942__$1 = temp__4092__auto___10941;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9054_10942__$1))\n{var c__5632__auto___10943 = cljs.core.chunk_first.call(null,seq__9054_10942__$1);{\nvar G__10944 = cljs.core.chunk_rest.call(null,seq__9054_10942__$1);\nvar G__10945 = c__5632__auto___10943;\nvar G__10946 = cljs.core.count.call(null,c__5632__auto___10943);\nvar G__10947 = 0;\nseq__9054_10932 = G__10944;\nchunk__9055_10933 = G__10945;\ncount__9056_10934 = G__10946;\ni__9057_10935 = G__10947;\ncontinue;\n}\n} else\n{var arg__7510__auto___10948 = cljs.core.first.call(null,seq__9054_10942__$1);a__7509__auto__.push(arg__7510__auto___10948);\n{\nvar G__10949 = cljs.core.next.call(null,seq__9054_10942__$1);\nvar G__10950 = null;\nvar G__10951 = 0;\nvar G__10952 = 0;\nseq__9054_10932 = G__10949;\nchunk__9055_10933 = G__10950;\ncount__9056_10934 = G__10951;\ni__9057_10935 = G__10952;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.noscript.apply(null,a__7509__auto__);\n};\nvar noscript = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn noscript__delegate.call(this,args__7508__auto__);};\nnoscript.cljs$lang$maxFixedArity = 0;\nnoscript.cljs$lang$applyTo = (function (arglist__10953){\nvar args__7508__auto__ = cljs.core.seq(arglist__10953);\nreturn noscript__delegate(args__7508__auto__);\n});\nnoscript.cljs$core$IFn$_invoke$arity$variadic = noscript__delegate;\nreturn noscript;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.object = (function() { \nvar object__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9062_10954 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9063_10955 = null;var count__9064_10956 = 0;var i__9065_10957 = 0;while(true){\nif((i__9065_10957 < count__9064_10956))\n{var arg__7510__auto___10958 = cljs.core._nth.call(null,chunk__9063_10955,i__9065_10957);a__7509__auto__.push(arg__7510__auto___10958);\n{\nvar G__10959 = seq__9062_10954;\nvar G__10960 = chunk__9063_10955;\nvar G__10961 = count__9064_10956;\nvar G__10962 = (i__9065_10957 + 1);\nseq__9062_10954 = G__10959;\nchunk__9063_10955 = G__10960;\ncount__9064_10956 = G__10961;\ni__9065_10957 = G__10962;\ncontinue;\n}\n} else\n{var temp__4092__auto___10963 = cljs.core.seq.call(null,seq__9062_10954);if(temp__4092__auto___10963)\n{var seq__9062_10964__$1 = temp__4092__auto___10963;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9062_10964__$1))\n{var c__5632__auto___10965 = cljs.core.chunk_first.call(null,seq__9062_10964__$1);{\nvar G__10966 = cljs.core.chunk_rest.call(null,seq__9062_10964__$1);\nvar G__10967 = c__5632__auto___10965;\nvar G__10968 = cljs.core.count.call(null,c__5632__auto___10965);\nvar G__10969 = 0;\nseq__9062_10954 = G__10966;\nchunk__9063_10955 = G__10967;\ncount__9064_10956 = G__10968;\ni__9065_10957 = G__10969;\ncontinue;\n}\n} else\n{var arg__7510__auto___10970 = cljs.core.first.call(null,seq__9062_10964__$1);a__7509__auto__.push(arg__7510__auto___10970);\n{\nvar G__10971 = cljs.core.next.call(null,seq__9062_10964__$1);\nvar G__10972 = null;\nvar G__10973 = 0;\nvar G__10974 = 0;\nseq__9062_10954 = G__10971;\nchunk__9063_10955 = G__10972;\ncount__9064_10956 = G__10973;\ni__9065_10957 = G__10974;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.object.apply(null,a__7509__auto__);\n};\nvar object = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn object__delegate.call(this,args__7508__auto__);};\nobject.cljs$lang$maxFixedArity = 0;\nobject.cljs$lang$applyTo = (function (arglist__10975){\nvar args__7508__auto__ = cljs.core.seq(arglist__10975);\nreturn object__delegate(args__7508__auto__);\n});\nobject.cljs$core$IFn$_invoke$arity$variadic = object__delegate;\nreturn object;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.ol = (function() { \nvar ol__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9070_10976 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9071_10977 = null;var count__9072_10978 = 0;var i__9073_10979 = 0;while(true){\nif((i__9073_10979 < count__9072_10978))\n{var arg__7510__auto___10980 = cljs.core._nth.call(null,chunk__9071_10977,i__9073_10979);a__7509__auto__.push(arg__7510__auto___10980);\n{\nvar G__10981 = seq__9070_10976;\nvar G__10982 = chunk__9071_10977;\nvar G__10983 = count__9072_10978;\nvar G__10984 = (i__9073_10979 + 1);\nseq__9070_10976 = G__10981;\nchunk__9071_10977 = G__10982;\ncount__9072_10978 = G__10983;\ni__9073_10979 = G__10984;\ncontinue;\n}\n} else\n{var temp__4092__auto___10985 = cljs.core.seq.call(null,seq__9070_10976);if(temp__4092__auto___10985)\n{var seq__9070_10986__$1 = temp__4092__auto___10985;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9070_10986__$1))\n{var c__5632__auto___10987 = cljs.core.chunk_first.call(null,seq__9070_10986__$1);{\nvar G__10988 = cljs.core.chunk_rest.call(null,seq__9070_10986__$1);\nvar G__10989 = c__5632__auto___10987;\nvar G__10990 = cljs.core.count.call(null,c__5632__auto___10987);\nvar G__10991 = 0;\nseq__9070_10976 = G__10988;\nchunk__9071_10977 = G__10989;\ncount__9072_10978 = G__10990;\ni__9073_10979 = G__10991;\ncontinue;\n}\n} else\n{var arg__7510__auto___10992 = cljs.core.first.call(null,seq__9070_10986__$1);a__7509__auto__.push(arg__7510__auto___10992);\n{\nvar G__10993 = cljs.core.next.call(null,seq__9070_10986__$1);\nvar G__10994 = null;\nvar G__10995 = 0;\nvar G__10996 = 0;\nseq__9070_10976 = G__10993;\nchunk__9071_10977 = G__10994;\ncount__9072_10978 = G__10995;\ni__9073_10979 = G__10996;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.ol.apply(null,a__7509__auto__);\n};\nvar ol = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn ol__delegate.call(this,args__7508__auto__);};\nol.cljs$lang$maxFixedArity = 0;\nol.cljs$lang$applyTo = (function (arglist__10997){\nvar args__7508__auto__ = cljs.core.seq(arglist__10997);\nreturn ol__delegate(args__7508__auto__);\n});\nol.cljs$core$IFn$_invoke$arity$variadic = ol__delegate;\nreturn ol;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.optgroup = (function() { \nvar optgroup__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9078_10998 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9079_10999 = null;var count__9080_11000 = 0;var i__9081_11001 = 0;while(true){\nif((i__9081_11001 < count__9080_11000))\n{var arg__7510__auto___11002 = cljs.core._nth.call(null,chunk__9079_10999,i__9081_11001);a__7509__auto__.push(arg__7510__auto___11002);\n{\nvar G__11003 = seq__9078_10998;\nvar G__11004 = chunk__9079_10999;\nvar G__11005 = count__9080_11000;\nvar G__11006 = (i__9081_11001 + 1);\nseq__9078_10998 = G__11003;\nchunk__9079_10999 = G__11004;\ncount__9080_11000 = G__11005;\ni__9081_11001 = G__11006;\ncontinue;\n}\n} else\n{var temp__4092__auto___11007 = cljs.core.seq.call(null,seq__9078_10998);if(temp__4092__auto___11007)\n{var seq__9078_11008__$1 = temp__4092__auto___11007;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9078_11008__$1))\n{var c__5632__auto___11009 = cljs.core.chunk_first.call(null,seq__9078_11008__$1);{\nvar G__11010 = cljs.core.chunk_rest.call(null,seq__9078_11008__$1);\nvar G__11011 = c__5632__auto___11009;\nvar G__11012 = cljs.core.count.call(null,c__5632__auto___11009);\nvar G__11013 = 0;\nseq__9078_10998 = G__11010;\nchunk__9079_10999 = G__11011;\ncount__9080_11000 = G__11012;\ni__9081_11001 = G__11013;\ncontinue;\n}\n} else\n{var arg__7510__auto___11014 = cljs.core.first.call(null,seq__9078_11008__$1);a__7509__auto__.push(arg__7510__auto___11014);\n{\nvar G__11015 = cljs.core.next.call(null,seq__9078_11008__$1);\nvar G__11016 = null;\nvar G__11017 = 0;\nvar G__11018 = 0;\nseq__9078_10998 = G__11015;\nchunk__9079_10999 = G__11016;\ncount__9080_11000 = G__11017;\ni__9081_11001 = G__11018;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.optgroup.apply(null,a__7509__auto__);\n};\nvar optgroup = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn optgroup__delegate.call(this,args__7508__auto__);};\noptgroup.cljs$lang$maxFixedArity = 0;\noptgroup.cljs$lang$applyTo = (function (arglist__11019){\nvar args__7508__auto__ = cljs.core.seq(arglist__11019);\nreturn optgroup__delegate(args__7508__auto__);\n});\noptgroup.cljs$core$IFn$_invoke$arity$variadic = optgroup__delegate;\nreturn optgroup;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.option = (function() { \nvar option__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9086_11020 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9087_11021 = null;var count__9088_11022 = 0;var i__9089_11023 = 0;while(true){\nif((i__9089_11023 < count__9088_11022))\n{var arg__7510__auto___11024 = cljs.core._nth.call(null,chunk__9087_11021,i__9089_11023);a__7509__auto__.push(arg__7510__auto___11024);\n{\nvar G__11025 = seq__9086_11020;\nvar G__11026 = chunk__9087_11021;\nvar G__11027 = count__9088_11022;\nvar G__11028 = (i__9089_11023 + 1);\nseq__9086_11020 = G__11025;\nchunk__9087_11021 = G__11026;\ncount__9088_11022 = G__11027;\ni__9089_11023 = G__11028;\ncontinue;\n}\n} else\n{var temp__4092__auto___11029 = cljs.core.seq.call(null,seq__9086_11020);if(temp__4092__auto___11029)\n{var seq__9086_11030__$1 = temp__4092__auto___11029;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9086_11030__$1))\n{var c__5632__auto___11031 = cljs.core.chunk_first.call(null,seq__9086_11030__$1);{\nvar G__11032 = cljs.core.chunk_rest.call(null,seq__9086_11030__$1);\nvar G__11033 = c__5632__auto___11031;\nvar G__11034 = cljs.core.count.call(null,c__5632__auto___11031);\nvar G__11035 = 0;\nseq__9086_11020 = G__11032;\nchunk__9087_11021 = G__11033;\ncount__9088_11022 = G__11034;\ni__9089_11023 = G__11035;\ncontinue;\n}\n} else\n{var arg__7510__auto___11036 = cljs.core.first.call(null,seq__9086_11030__$1);a__7509__auto__.push(arg__7510__auto___11036);\n{\nvar G__11037 = cljs.core.next.call(null,seq__9086_11030__$1);\nvar G__11038 = null;\nvar G__11039 = 0;\nvar G__11040 = 0;\nseq__9086_11020 = G__11037;\nchunk__9087_11021 = G__11038;\ncount__9088_11022 = G__11039;\ni__9089_11023 = G__11040;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.option.apply(null,a__7509__auto__);\n};\nvar option = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn option__delegate.call(this,args__7508__auto__);};\noption.cljs$lang$maxFixedArity = 0;\noption.cljs$lang$applyTo = (function (arglist__11041){\nvar args__7508__auto__ = cljs.core.seq(arglist__11041);\nreturn option__delegate(args__7508__auto__);\n});\noption.cljs$core$IFn$_invoke$arity$variadic = option__delegate;\nreturn option;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.output = (function() { \nvar output__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9094_11042 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9095_11043 = null;var count__9096_11044 = 0;var i__9097_11045 = 0;while(true){\nif((i__9097_11045 < count__9096_11044))\n{var arg__7510__auto___11046 = cljs.core._nth.call(null,chunk__9095_11043,i__9097_11045);a__7509__auto__.push(arg__7510__auto___11046);\n{\nvar G__11047 = seq__9094_11042;\nvar G__11048 = chunk__9095_11043;\nvar G__11049 = count__9096_11044;\nvar G__11050 = (i__9097_11045 + 1);\nseq__9094_11042 = G__11047;\nchunk__9095_11043 = G__11048;\ncount__9096_11044 = G__11049;\ni__9097_11045 = G__11050;\ncontinue;\n}\n} else\n{var temp__4092__auto___11051 = cljs.core.seq.call(null,seq__9094_11042);if(temp__4092__auto___11051)\n{var seq__9094_11052__$1 = temp__4092__auto___11051;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9094_11052__$1))\n{var c__5632__auto___11053 = cljs.core.chunk_first.call(null,seq__9094_11052__$1);{\nvar G__11054 = cljs.core.chunk_rest.call(null,seq__9094_11052__$1);\nvar G__11055 = c__5632__auto___11053;\nvar G__11056 = cljs.core.count.call(null,c__5632__auto___11053);\nvar G__11057 = 0;\nseq__9094_11042 = G__11054;\nchunk__9095_11043 = G__11055;\ncount__9096_11044 = G__11056;\ni__9097_11045 = G__11057;\ncontinue;\n}\n} else\n{var arg__7510__auto___11058 = cljs.core.first.call(null,seq__9094_11052__$1);a__7509__auto__.push(arg__7510__auto___11058);\n{\nvar G__11059 = cljs.core.next.call(null,seq__9094_11052__$1);\nvar G__11060 = null;\nvar G__11061 = 0;\nvar G__11062 = 0;\nseq__9094_11042 = G__11059;\nchunk__9095_11043 = G__11060;\ncount__9096_11044 = G__11061;\ni__9097_11045 = G__11062;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.output.apply(null,a__7509__auto__);\n};\nvar output = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn output__delegate.call(this,args__7508__auto__);};\noutput.cljs$lang$maxFixedArity = 0;\noutput.cljs$lang$applyTo = (function (arglist__11063){\nvar args__7508__auto__ = cljs.core.seq(arglist__11063);\nreturn output__delegate(args__7508__auto__);\n});\noutput.cljs$core$IFn$_invoke$arity$variadic = output__delegate;\nreturn output;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.p = (function() { \nvar p__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9102_11064 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9103_11065 = null;var count__9104_11066 = 0;var i__9105_11067 = 0;while(true){\nif((i__9105_11067 < count__9104_11066))\n{var arg__7510__auto___11068 = cljs.core._nth.call(null,chunk__9103_11065,i__9105_11067);a__7509__auto__.push(arg__7510__auto___11068);\n{\nvar G__11069 = seq__9102_11064;\nvar G__11070 = chunk__9103_11065;\nvar G__11071 = count__9104_11066;\nvar G__11072 = (i__9105_11067 + 1);\nseq__9102_11064 = G__11069;\nchunk__9103_11065 = G__11070;\ncount__9104_11066 = G__11071;\ni__9105_11067 = G__11072;\ncontinue;\n}\n} else\n{var temp__4092__auto___11073 = cljs.core.seq.call(null,seq__9102_11064);if(temp__4092__auto___11073)\n{var seq__9102_11074__$1 = temp__4092__auto___11073;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9102_11074__$1))\n{var c__5632__auto___11075 = cljs.core.chunk_first.call(null,seq__9102_11074__$1);{\nvar G__11076 = cljs.core.chunk_rest.call(null,seq__9102_11074__$1);\nvar G__11077 = c__5632__auto___11075;\nvar G__11078 = cljs.core.count.call(null,c__5632__auto___11075);\nvar G__11079 = 0;\nseq__9102_11064 = G__11076;\nchunk__9103_11065 = G__11077;\ncount__9104_11066 = G__11078;\ni__9105_11067 = G__11079;\ncontinue;\n}\n} else\n{var arg__7510__auto___11080 = cljs.core.first.call(null,seq__9102_11074__$1);a__7509__auto__.push(arg__7510__auto___11080);\n{\nvar G__11081 = cljs.core.next.call(null,seq__9102_11074__$1);\nvar G__11082 = null;\nvar G__11083 = 0;\nvar G__11084 = 0;\nseq__9102_11064 = G__11081;\nchunk__9103_11065 = G__11082;\ncount__9104_11066 = G__11083;\ni__9105_11067 = G__11084;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.p.apply(null,a__7509__auto__);\n};\nvar p = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn p__delegate.call(this,args__7508__auto__);};\np.cljs$lang$maxFixedArity = 0;\np.cljs$lang$applyTo = (function (arglist__11085){\nvar args__7508__auto__ = cljs.core.seq(arglist__11085);\nreturn p__delegate(args__7508__auto__);\n});\np.cljs$core$IFn$_invoke$arity$variadic = p__delegate;\nreturn p;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.param = (function() { \nvar param__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9110_11086 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9111_11087 = null;var count__9112_11088 = 0;var i__9113_11089 = 0;while(true){\nif((i__9113_11089 < count__9112_11088))\n{var arg__7510__auto___11090 = cljs.core._nth.call(null,chunk__9111_11087,i__9113_11089);a__7509__auto__.push(arg__7510__auto___11090);\n{\nvar G__11091 = seq__9110_11086;\nvar G__11092 = chunk__9111_11087;\nvar G__11093 = count__9112_11088;\nvar G__11094 = (i__9113_11089 + 1);\nseq__9110_11086 = G__11091;\nchunk__9111_11087 = G__11092;\ncount__9112_11088 = G__11093;\ni__9113_11089 = G__11094;\ncontinue;\n}\n} else\n{var temp__4092__auto___11095 = cljs.core.seq.call(null,seq__9110_11086);if(temp__4092__auto___11095)\n{var seq__9110_11096__$1 = temp__4092__auto___11095;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9110_11096__$1))\n{var c__5632__auto___11097 = cljs.core.chunk_first.call(null,seq__9110_11096__$1);{\nvar G__11098 = cljs.core.chunk_rest.call(null,seq__9110_11096__$1);\nvar G__11099 = c__5632__auto___11097;\nvar G__11100 = cljs.core.count.call(null,c__5632__auto___11097);\nvar G__11101 = 0;\nseq__9110_11086 = G__11098;\nchunk__9111_11087 = G__11099;\ncount__9112_11088 = G__11100;\ni__9113_11089 = G__11101;\ncontinue;\n}\n} else\n{var arg__7510__auto___11102 = cljs.core.first.call(null,seq__9110_11096__$1);a__7509__auto__.push(arg__7510__auto___11102);\n{\nvar G__11103 = cljs.core.next.call(null,seq__9110_11096__$1);\nvar G__11104 = null;\nvar G__11105 = 0;\nvar G__11106 = 0;\nseq__9110_11086 = G__11103;\nchunk__9111_11087 = G__11104;\ncount__9112_11088 = G__11105;\ni__9113_11089 = G__11106;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.param.apply(null,a__7509__auto__);\n};\nvar param = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn param__delegate.call(this,args__7508__auto__);};\nparam.cljs$lang$maxFixedArity = 0;\nparam.cljs$lang$applyTo = (function (arglist__11107){\nvar args__7508__auto__ = cljs.core.seq(arglist__11107);\nreturn param__delegate(args__7508__auto__);\n});\nparam.cljs$core$IFn$_invoke$arity$variadic = param__delegate;\nreturn param;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.pre = (function() { \nvar pre__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9118_11108 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9119_11109 = null;var count__9120_11110 = 0;var i__9121_11111 = 0;while(true){\nif((i__9121_11111 < count__9120_11110))\n{var arg__7510__auto___11112 = cljs.core._nth.call(null,chunk__9119_11109,i__9121_11111);a__7509__auto__.push(arg__7510__auto___11112);\n{\nvar G__11113 = seq__9118_11108;\nvar G__11114 = chunk__9119_11109;\nvar G__11115 = count__9120_11110;\nvar G__11116 = (i__9121_11111 + 1);\nseq__9118_11108 = G__11113;\nchunk__9119_11109 = G__11114;\ncount__9120_11110 = G__11115;\ni__9121_11111 = G__11116;\ncontinue;\n}\n} else\n{var temp__4092__auto___11117 = cljs.core.seq.call(null,seq__9118_11108);if(temp__4092__auto___11117)\n{var seq__9118_11118__$1 = temp__4092__auto___11117;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9118_11118__$1))\n{var c__5632__auto___11119 = cljs.core.chunk_first.call(null,seq__9118_11118__$1);{\nvar G__11120 = cljs.core.chunk_rest.call(null,seq__9118_11118__$1);\nvar G__11121 = c__5632__auto___11119;\nvar G__11122 = cljs.core.count.call(null,c__5632__auto___11119);\nvar G__11123 = 0;\nseq__9118_11108 = G__11120;\nchunk__9119_11109 = G__11121;\ncount__9120_11110 = G__11122;\ni__9121_11111 = G__11123;\ncontinue;\n}\n} else\n{var arg__7510__auto___11124 = cljs.core.first.call(null,seq__9118_11118__$1);a__7509__auto__.push(arg__7510__auto___11124);\n{\nvar G__11125 = cljs.core.next.call(null,seq__9118_11118__$1);\nvar G__11126 = null;\nvar G__11127 = 0;\nvar G__11128 = 0;\nseq__9118_11108 = G__11125;\nchunk__9119_11109 = G__11126;\ncount__9120_11110 = G__11127;\ni__9121_11111 = G__11128;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.pre.apply(null,a__7509__auto__);\n};\nvar pre = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn pre__delegate.call(this,args__7508__auto__);};\npre.cljs$lang$maxFixedArity = 0;\npre.cljs$lang$applyTo = (function (arglist__11129){\nvar args__7508__auto__ = cljs.core.seq(arglist__11129);\nreturn pre__delegate(args__7508__auto__);\n});\npre.cljs$core$IFn$_invoke$arity$variadic = pre__delegate;\nreturn pre;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.progress = (function() { \nvar progress__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9126_11130 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9127_11131 = null;var count__9128_11132 = 0;var i__9129_11133 = 0;while(true){\nif((i__9129_11133 < count__9128_11132))\n{var arg__7510__auto___11134 = cljs.core._nth.call(null,chunk__9127_11131,i__9129_11133);a__7509__auto__.push(arg__7510__auto___11134);\n{\nvar G__11135 = seq__9126_11130;\nvar G__11136 = chunk__9127_11131;\nvar G__11137 = count__9128_11132;\nvar G__11138 = (i__9129_11133 + 1);\nseq__9126_11130 = G__11135;\nchunk__9127_11131 = G__11136;\ncount__9128_11132 = G__11137;\ni__9129_11133 = G__11138;\ncontinue;\n}\n} else\n{var temp__4092__auto___11139 = cljs.core.seq.call(null,seq__9126_11130);if(temp__4092__auto___11139)\n{var seq__9126_11140__$1 = temp__4092__auto___11139;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9126_11140__$1))\n{var c__5632__auto___11141 = cljs.core.chunk_first.call(null,seq__9126_11140__$1);{\nvar G__11142 = cljs.core.chunk_rest.call(null,seq__9126_11140__$1);\nvar G__11143 = c__5632__auto___11141;\nvar G__11144 = cljs.core.count.call(null,c__5632__auto___11141);\nvar G__11145 = 0;\nseq__9126_11130 = G__11142;\nchunk__9127_11131 = G__11143;\ncount__9128_11132 = G__11144;\ni__9129_11133 = G__11145;\ncontinue;\n}\n} else\n{var arg__7510__auto___11146 = cljs.core.first.call(null,seq__9126_11140__$1);a__7509__auto__.push(arg__7510__auto___11146);\n{\nvar G__11147 = cljs.core.next.call(null,seq__9126_11140__$1);\nvar G__11148 = null;\nvar G__11149 = 0;\nvar G__11150 = 0;\nseq__9126_11130 = G__11147;\nchunk__9127_11131 = G__11148;\ncount__9128_11132 = G__11149;\ni__9129_11133 = G__11150;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.progress.apply(null,a__7509__auto__);\n};\nvar progress = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn progress__delegate.call(this,args__7508__auto__);};\nprogress.cljs$lang$maxFixedArity = 0;\nprogress.cljs$lang$applyTo = (function (arglist__11151){\nvar args__7508__auto__ = cljs.core.seq(arglist__11151);\nreturn progress__delegate(args__7508__auto__);\n});\nprogress.cljs$core$IFn$_invoke$arity$variadic = progress__delegate;\nreturn progress;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.q = (function() { \nvar q__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9134_11152 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9135_11153 = null;var count__9136_11154 = 0;var i__9137_11155 = 0;while(true){\nif((i__9137_11155 < count__9136_11154))\n{var arg__7510__auto___11156 = cljs.core._nth.call(null,chunk__9135_11153,i__9137_11155);a__7509__auto__.push(arg__7510__auto___11156);\n{\nvar G__11157 = seq__9134_11152;\nvar G__11158 = chunk__9135_11153;\nvar G__11159 = count__9136_11154;\nvar G__11160 = (i__9137_11155 + 1);\nseq__9134_11152 = G__11157;\nchunk__9135_11153 = G__11158;\ncount__9136_11154 = G__11159;\ni__9137_11155 = G__11160;\ncontinue;\n}\n} else\n{var temp__4092__auto___11161 = cljs.core.seq.call(null,seq__9134_11152);if(temp__4092__auto___11161)\n{var seq__9134_11162__$1 = temp__4092__auto___11161;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9134_11162__$1))\n{var c__5632__auto___11163 = cljs.core.chunk_first.call(null,seq__9134_11162__$1);{\nvar G__11164 = cljs.core.chunk_rest.call(null,seq__9134_11162__$1);\nvar G__11165 = c__5632__auto___11163;\nvar G__11166 = cljs.core.count.call(null,c__5632__auto___11163);\nvar G__11167 = 0;\nseq__9134_11152 = G__11164;\nchunk__9135_11153 = G__11165;\ncount__9136_11154 = G__11166;\ni__9137_11155 = G__11167;\ncontinue;\n}\n} else\n{var arg__7510__auto___11168 = cljs.core.first.call(null,seq__9134_11162__$1);a__7509__auto__.push(arg__7510__auto___11168);\n{\nvar G__11169 = cljs.core.next.call(null,seq__9134_11162__$1);\nvar G__11170 = null;\nvar G__11171 = 0;\nvar G__11172 = 0;\nseq__9134_11152 = G__11169;\nchunk__9135_11153 = G__11170;\ncount__9136_11154 = G__11171;\ni__9137_11155 = G__11172;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.q.apply(null,a__7509__auto__);\n};\nvar q = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn q__delegate.call(this,args__7508__auto__);};\nq.cljs$lang$maxFixedArity = 0;\nq.cljs$lang$applyTo = (function (arglist__11173){\nvar args__7508__auto__ = cljs.core.seq(arglist__11173);\nreturn q__delegate(args__7508__auto__);\n});\nq.cljs$core$IFn$_invoke$arity$variadic = q__delegate;\nreturn q;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.rp = (function() { \nvar rp__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9142_11174 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9143_11175 = null;var count__9144_11176 = 0;var i__9145_11177 = 0;while(true){\nif((i__9145_11177 < count__9144_11176))\n{var arg__7510__auto___11178 = cljs.core._nth.call(null,chunk__9143_11175,i__9145_11177);a__7509__auto__.push(arg__7510__auto___11178);\n{\nvar G__11179 = seq__9142_11174;\nvar G__11180 = chunk__9143_11175;\nvar G__11181 = count__9144_11176;\nvar G__11182 = (i__9145_11177 + 1);\nseq__9142_11174 = G__11179;\nchunk__9143_11175 = G__11180;\ncount__9144_11176 = G__11181;\ni__9145_11177 = G__11182;\ncontinue;\n}\n} else\n{var temp__4092__auto___11183 = cljs.core.seq.call(null,seq__9142_11174);if(temp__4092__auto___11183)\n{var seq__9142_11184__$1 = temp__4092__auto___11183;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9142_11184__$1))\n{var c__5632__auto___11185 = cljs.core.chunk_first.call(null,seq__9142_11184__$1);{\nvar G__11186 = cljs.core.chunk_rest.call(null,seq__9142_11184__$1);\nvar G__11187 = c__5632__auto___11185;\nvar G__11188 = cljs.core.count.call(null,c__5632__auto___11185);\nvar G__11189 = 0;\nseq__9142_11174 = G__11186;\nchunk__9143_11175 = G__11187;\ncount__9144_11176 = G__11188;\ni__9145_11177 = G__11189;\ncontinue;\n}\n} else\n{var arg__7510__auto___11190 = cljs.core.first.call(null,seq__9142_11184__$1);a__7509__auto__.push(arg__7510__auto___11190);\n{\nvar G__11191 = cljs.core.next.call(null,seq__9142_11184__$1);\nvar G__11192 = null;\nvar G__11193 = 0;\nvar G__11194 = 0;\nseq__9142_11174 = G__11191;\nchunk__9143_11175 = G__11192;\ncount__9144_11176 = G__11193;\ni__9145_11177 = G__11194;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.rp.apply(null,a__7509__auto__);\n};\nvar rp = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn rp__delegate.call(this,args__7508__auto__);};\nrp.cljs$lang$maxFixedArity = 0;\nrp.cljs$lang$applyTo = (function (arglist__11195){\nvar args__7508__auto__ = cljs.core.seq(arglist__11195);\nreturn rp__delegate(args__7508__auto__);\n});\nrp.cljs$core$IFn$_invoke$arity$variadic = rp__delegate;\nreturn rp;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.rt = (function() { \nvar rt__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9150_11196 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9151_11197 = null;var count__9152_11198 = 0;var i__9153_11199 = 0;while(true){\nif((i__9153_11199 < count__9152_11198))\n{var arg__7510__auto___11200 = cljs.core._nth.call(null,chunk__9151_11197,i__9153_11199);a__7509__auto__.push(arg__7510__auto___11200);\n{\nvar G__11201 = seq__9150_11196;\nvar G__11202 = chunk__9151_11197;\nvar G__11203 = count__9152_11198;\nvar G__11204 = (i__9153_11199 + 1);\nseq__9150_11196 = G__11201;\nchunk__9151_11197 = G__11202;\ncount__9152_11198 = G__11203;\ni__9153_11199 = G__11204;\ncontinue;\n}\n} else\n{var temp__4092__auto___11205 = cljs.core.seq.call(null,seq__9150_11196);if(temp__4092__auto___11205)\n{var seq__9150_11206__$1 = temp__4092__auto___11205;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9150_11206__$1))\n{var c__5632__auto___11207 = cljs.core.chunk_first.call(null,seq__9150_11206__$1);{\nvar G__11208 = cljs.core.chunk_rest.call(null,seq__9150_11206__$1);\nvar G__11209 = c__5632__auto___11207;\nvar G__11210 = cljs.core.count.call(null,c__5632__auto___11207);\nvar G__11211 = 0;\nseq__9150_11196 = G__11208;\nchunk__9151_11197 = G__11209;\ncount__9152_11198 = G__11210;\ni__9153_11199 = G__11211;\ncontinue;\n}\n} else\n{var arg__7510__auto___11212 = cljs.core.first.call(null,seq__9150_11206__$1);a__7509__auto__.push(arg__7510__auto___11212);\n{\nvar G__11213 = cljs.core.next.call(null,seq__9150_11206__$1);\nvar G__11214 = null;\nvar G__11215 = 0;\nvar G__11216 = 0;\nseq__9150_11196 = G__11213;\nchunk__9151_11197 = G__11214;\ncount__9152_11198 = G__11215;\ni__9153_11199 = G__11216;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.rt.apply(null,a__7509__auto__);\n};\nvar rt = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn rt__delegate.call(this,args__7508__auto__);};\nrt.cljs$lang$maxFixedArity = 0;\nrt.cljs$lang$applyTo = (function (arglist__11217){\nvar args__7508__auto__ = cljs.core.seq(arglist__11217);\nreturn rt__delegate(args__7508__auto__);\n});\nrt.cljs$core$IFn$_invoke$arity$variadic = rt__delegate;\nreturn rt;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.ruby = (function() { \nvar ruby__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9158_11218 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9159_11219 = null;var count__9160_11220 = 0;var i__9161_11221 = 0;while(true){\nif((i__9161_11221 < count__9160_11220))\n{var arg__7510__auto___11222 = cljs.core._nth.call(null,chunk__9159_11219,i__9161_11221);a__7509__auto__.push(arg__7510__auto___11222);\n{\nvar G__11223 = seq__9158_11218;\nvar G__11224 = chunk__9159_11219;\nvar G__11225 = count__9160_11220;\nvar G__11226 = (i__9161_11221 + 1);\nseq__9158_11218 = G__11223;\nchunk__9159_11219 = G__11224;\ncount__9160_11220 = G__11225;\ni__9161_11221 = G__11226;\ncontinue;\n}\n} else\n{var temp__4092__auto___11227 = cljs.core.seq.call(null,seq__9158_11218);if(temp__4092__auto___11227)\n{var seq__9158_11228__$1 = temp__4092__auto___11227;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9158_11228__$1))\n{var c__5632__auto___11229 = cljs.core.chunk_first.call(null,seq__9158_11228__$1);{\nvar G__11230 = cljs.core.chunk_rest.call(null,seq__9158_11228__$1);\nvar G__11231 = c__5632__auto___11229;\nvar G__11232 = cljs.core.count.call(null,c__5632__auto___11229);\nvar G__11233 = 0;\nseq__9158_11218 = G__11230;\nchunk__9159_11219 = G__11231;\ncount__9160_11220 = G__11232;\ni__9161_11221 = G__11233;\ncontinue;\n}\n} else\n{var arg__7510__auto___11234 = cljs.core.first.call(null,seq__9158_11228__$1);a__7509__auto__.push(arg__7510__auto___11234);\n{\nvar G__11235 = cljs.core.next.call(null,seq__9158_11228__$1);\nvar G__11236 = null;\nvar G__11237 = 0;\nvar G__11238 = 0;\nseq__9158_11218 = G__11235;\nchunk__9159_11219 = G__11236;\ncount__9160_11220 = G__11237;\ni__9161_11221 = G__11238;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.ruby.apply(null,a__7509__auto__);\n};\nvar ruby = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn ruby__delegate.call(this,args__7508__auto__);};\nruby.cljs$lang$maxFixedArity = 0;\nruby.cljs$lang$applyTo = (function (arglist__11239){\nvar args__7508__auto__ = cljs.core.seq(arglist__11239);\nreturn ruby__delegate(args__7508__auto__);\n});\nruby.cljs$core$IFn$_invoke$arity$variadic = ruby__delegate;\nreturn ruby;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.s = (function() { \nvar s__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9166_11240 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9167_11241 = null;var count__9168_11242 = 0;var i__9169_11243 = 0;while(true){\nif((i__9169_11243 < count__9168_11242))\n{var arg__7510__auto___11244 = cljs.core._nth.call(null,chunk__9167_11241,i__9169_11243);a__7509__auto__.push(arg__7510__auto___11244);\n{\nvar G__11245 = seq__9166_11240;\nvar G__11246 = chunk__9167_11241;\nvar G__11247 = count__9168_11242;\nvar G__11248 = (i__9169_11243 + 1);\nseq__9166_11240 = G__11245;\nchunk__9167_11241 = G__11246;\ncount__9168_11242 = G__11247;\ni__9169_11243 = G__11248;\ncontinue;\n}\n} else\n{var temp__4092__auto___11249 = cljs.core.seq.call(null,seq__9166_11240);if(temp__4092__auto___11249)\n{var seq__9166_11250__$1 = temp__4092__auto___11249;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9166_11250__$1))\n{var c__5632__auto___11251 = cljs.core.chunk_first.call(null,seq__9166_11250__$1);{\nvar G__11252 = cljs.core.chunk_rest.call(null,seq__9166_11250__$1);\nvar G__11253 = c__5632__auto___11251;\nvar G__11254 = cljs.core.count.call(null,c__5632__auto___11251);\nvar G__11255 = 0;\nseq__9166_11240 = G__11252;\nchunk__9167_11241 = G__11253;\ncount__9168_11242 = G__11254;\ni__9169_11243 = G__11255;\ncontinue;\n}\n} else\n{var arg__7510__auto___11256 = cljs.core.first.call(null,seq__9166_11250__$1);a__7509__auto__.push(arg__7510__auto___11256);\n{\nvar G__11257 = cljs.core.next.call(null,seq__9166_11250__$1);\nvar G__11258 = null;\nvar G__11259 = 0;\nvar G__11260 = 0;\nseq__9166_11240 = G__11257;\nchunk__9167_11241 = G__11258;\ncount__9168_11242 = G__11259;\ni__9169_11243 = G__11260;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.s.apply(null,a__7509__auto__);\n};\nvar s = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn s__delegate.call(this,args__7508__auto__);};\ns.cljs$lang$maxFixedArity = 0;\ns.cljs$lang$applyTo = (function (arglist__11261){\nvar args__7508__auto__ = cljs.core.seq(arglist__11261);\nreturn s__delegate(args__7508__auto__);\n});\ns.cljs$core$IFn$_invoke$arity$variadic = s__delegate;\nreturn s;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.samp = (function() { \nvar samp__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9174_11262 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9175_11263 = null;var count__9176_11264 = 0;var i__9177_11265 = 0;while(true){\nif((i__9177_11265 < count__9176_11264))\n{var arg__7510__auto___11266 = cljs.core._nth.call(null,chunk__9175_11263,i__9177_11265);a__7509__auto__.push(arg__7510__auto___11266);\n{\nvar G__11267 = seq__9174_11262;\nvar G__11268 = chunk__9175_11263;\nvar G__11269 = count__9176_11264;\nvar G__11270 = (i__9177_11265 + 1);\nseq__9174_11262 = G__11267;\nchunk__9175_11263 = G__11268;\ncount__9176_11264 = G__11269;\ni__9177_11265 = G__11270;\ncontinue;\n}\n} else\n{var temp__4092__auto___11271 = cljs.core.seq.call(null,seq__9174_11262);if(temp__4092__auto___11271)\n{var seq__9174_11272__$1 = temp__4092__auto___11271;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9174_11272__$1))\n{var c__5632__auto___11273 = cljs.core.chunk_first.call(null,seq__9174_11272__$1);{\nvar G__11274 = cljs.core.chunk_rest.call(null,seq__9174_11272__$1);\nvar G__11275 = c__5632__auto___11273;\nvar G__11276 = cljs.core.count.call(null,c__5632__auto___11273);\nvar G__11277 = 0;\nseq__9174_11262 = G__11274;\nchunk__9175_11263 = G__11275;\ncount__9176_11264 = G__11276;\ni__9177_11265 = G__11277;\ncontinue;\n}\n} else\n{var arg__7510__auto___11278 = cljs.core.first.call(null,seq__9174_11272__$1);a__7509__auto__.push(arg__7510__auto___11278);\n{\nvar G__11279 = cljs.core.next.call(null,seq__9174_11272__$1);\nvar G__11280 = null;\nvar G__11281 = 0;\nvar G__11282 = 0;\nseq__9174_11262 = G__11279;\nchunk__9175_11263 = G__11280;\ncount__9176_11264 = G__11281;\ni__9177_11265 = G__11282;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.samp.apply(null,a__7509__auto__);\n};\nvar samp = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn samp__delegate.call(this,args__7508__auto__);};\nsamp.cljs$lang$maxFixedArity = 0;\nsamp.cljs$lang$applyTo = (function (arglist__11283){\nvar args__7508__auto__ = cljs.core.seq(arglist__11283);\nreturn samp__delegate(args__7508__auto__);\n});\nsamp.cljs$core$IFn$_invoke$arity$variadic = samp__delegate;\nreturn samp;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.script = (function() { \nvar script__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9182_11284 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9183_11285 = null;var count__9184_11286 = 0;var i__9185_11287 = 0;while(true){\nif((i__9185_11287 < count__9184_11286))\n{var arg__7510__auto___11288 = cljs.core._nth.call(null,chunk__9183_11285,i__9185_11287);a__7509__auto__.push(arg__7510__auto___11288);\n{\nvar G__11289 = seq__9182_11284;\nvar G__11290 = chunk__9183_11285;\nvar G__11291 = count__9184_11286;\nvar G__11292 = (i__9185_11287 + 1);\nseq__9182_11284 = G__11289;\nchunk__9183_11285 = G__11290;\ncount__9184_11286 = G__11291;\ni__9185_11287 = G__11292;\ncontinue;\n}\n} else\n{var temp__4092__auto___11293 = cljs.core.seq.call(null,seq__9182_11284);if(temp__4092__auto___11293)\n{var seq__9182_11294__$1 = temp__4092__auto___11293;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9182_11294__$1))\n{var c__5632__auto___11295 = cljs.core.chunk_first.call(null,seq__9182_11294__$1);{\nvar G__11296 = cljs.core.chunk_rest.call(null,seq__9182_11294__$1);\nvar G__11297 = c__5632__auto___11295;\nvar G__11298 = cljs.core.count.call(null,c__5632__auto___11295);\nvar G__11299 = 0;\nseq__9182_11284 = G__11296;\nchunk__9183_11285 = G__11297;\ncount__9184_11286 = G__11298;\ni__9185_11287 = G__11299;\ncontinue;\n}\n} else\n{var arg__7510__auto___11300 = cljs.core.first.call(null,seq__9182_11294__$1);a__7509__auto__.push(arg__7510__auto___11300);\n{\nvar G__11301 = cljs.core.next.call(null,seq__9182_11294__$1);\nvar G__11302 = null;\nvar G__11303 = 0;\nvar G__11304 = 0;\nseq__9182_11284 = G__11301;\nchunk__9183_11285 = G__11302;\ncount__9184_11286 = G__11303;\ni__9185_11287 = G__11304;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.script.apply(null,a__7509__auto__);\n};\nvar script = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn script__delegate.call(this,args__7508__auto__);};\nscript.cljs$lang$maxFixedArity = 0;\nscript.cljs$lang$applyTo = (function (arglist__11305){\nvar args__7508__auto__ = cljs.core.seq(arglist__11305);\nreturn script__delegate(args__7508__auto__);\n});\nscript.cljs$core$IFn$_invoke$arity$variadic = script__delegate;\nreturn script;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.section = (function() { \nvar section__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9190_11306 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9191_11307 = null;var count__9192_11308 = 0;var i__9193_11309 = 0;while(true){\nif((i__9193_11309 < count__9192_11308))\n{var arg__7510__auto___11310 = cljs.core._nth.call(null,chunk__9191_11307,i__9193_11309);a__7509__auto__.push(arg__7510__auto___11310);\n{\nvar G__11311 = seq__9190_11306;\nvar G__11312 = chunk__9191_11307;\nvar G__11313 = count__9192_11308;\nvar G__11314 = (i__9193_11309 + 1);\nseq__9190_11306 = G__11311;\nchunk__9191_11307 = G__11312;\ncount__9192_11308 = G__11313;\ni__9193_11309 = G__11314;\ncontinue;\n}\n} else\n{var temp__4092__auto___11315 = cljs.core.seq.call(null,seq__9190_11306);if(temp__4092__auto___11315)\n{var seq__9190_11316__$1 = temp__4092__auto___11315;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9190_11316__$1))\n{var c__5632__auto___11317 = cljs.core.chunk_first.call(null,seq__9190_11316__$1);{\nvar G__11318 = cljs.core.chunk_rest.call(null,seq__9190_11316__$1);\nvar G__11319 = c__5632__auto___11317;\nvar G__11320 = cljs.core.count.call(null,c__5632__auto___11317);\nvar G__11321 = 0;\nseq__9190_11306 = G__11318;\nchunk__9191_11307 = G__11319;\ncount__9192_11308 = G__11320;\ni__9193_11309 = G__11321;\ncontinue;\n}\n} else\n{var arg__7510__auto___11322 = cljs.core.first.call(null,seq__9190_11316__$1);a__7509__auto__.push(arg__7510__auto___11322);\n{\nvar G__11323 = cljs.core.next.call(null,seq__9190_11316__$1);\nvar G__11324 = null;\nvar G__11325 = 0;\nvar G__11326 = 0;\nseq__9190_11306 = G__11323;\nchunk__9191_11307 = G__11324;\ncount__9192_11308 = G__11325;\ni__9193_11309 = G__11326;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.section.apply(null,a__7509__auto__);\n};\nvar section = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn section__delegate.call(this,args__7508__auto__);};\nsection.cljs$lang$maxFixedArity = 0;\nsection.cljs$lang$applyTo = (function (arglist__11327){\nvar args__7508__auto__ = cljs.core.seq(arglist__11327);\nreturn section__delegate(args__7508__auto__);\n});\nsection.cljs$core$IFn$_invoke$arity$variadic = section__delegate;\nreturn section;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.select = (function() { \nvar select__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9198_11328 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9199_11329 = null;var count__9200_11330 = 0;var i__9201_11331 = 0;while(true){\nif((i__9201_11331 < count__9200_11330))\n{var arg__7510__auto___11332 = cljs.core._nth.call(null,chunk__9199_11329,i__9201_11331);a__7509__auto__.push(arg__7510__auto___11332);\n{\nvar G__11333 = seq__9198_11328;\nvar G__11334 = chunk__9199_11329;\nvar G__11335 = count__9200_11330;\nvar G__11336 = (i__9201_11331 + 1);\nseq__9198_11328 = G__11333;\nchunk__9199_11329 = G__11334;\ncount__9200_11330 = G__11335;\ni__9201_11331 = G__11336;\ncontinue;\n}\n} else\n{var temp__4092__auto___11337 = cljs.core.seq.call(null,seq__9198_11328);if(temp__4092__auto___11337)\n{var seq__9198_11338__$1 = temp__4092__auto___11337;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9198_11338__$1))\n{var c__5632__auto___11339 = cljs.core.chunk_first.call(null,seq__9198_11338__$1);{\nvar G__11340 = cljs.core.chunk_rest.call(null,seq__9198_11338__$1);\nvar G__11341 = c__5632__auto___11339;\nvar G__11342 = cljs.core.count.call(null,c__5632__auto___11339);\nvar G__11343 = 0;\nseq__9198_11328 = G__11340;\nchunk__9199_11329 = G__11341;\ncount__9200_11330 = G__11342;\ni__9201_11331 = G__11343;\ncontinue;\n}\n} else\n{var arg__7510__auto___11344 = cljs.core.first.call(null,seq__9198_11338__$1);a__7509__auto__.push(arg__7510__auto___11344);\n{\nvar G__11345 = cljs.core.next.call(null,seq__9198_11338__$1);\nvar G__11346 = null;\nvar G__11347 = 0;\nvar G__11348 = 0;\nseq__9198_11328 = G__11345;\nchunk__9199_11329 = G__11346;\ncount__9200_11330 = G__11347;\ni__9201_11331 = G__11348;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.select.apply(null,a__7509__auto__);\n};\nvar select = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn select__delegate.call(this,args__7508__auto__);};\nselect.cljs$lang$maxFixedArity = 0;\nselect.cljs$lang$applyTo = (function (arglist__11349){\nvar args__7508__auto__ = cljs.core.seq(arglist__11349);\nreturn select__delegate(args__7508__auto__);\n});\nselect.cljs$core$IFn$_invoke$arity$variadic = select__delegate;\nreturn select;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.small = (function() { \nvar small__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9206_11350 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9207_11351 = null;var count__9208_11352 = 0;var i__9209_11353 = 0;while(true){\nif((i__9209_11353 < count__9208_11352))\n{var arg__7510__auto___11354 = cljs.core._nth.call(null,chunk__9207_11351,i__9209_11353);a__7509__auto__.push(arg__7510__auto___11354);\n{\nvar G__11355 = seq__9206_11350;\nvar G__11356 = chunk__9207_11351;\nvar G__11357 = count__9208_11352;\nvar G__11358 = (i__9209_11353 + 1);\nseq__9206_11350 = G__11355;\nchunk__9207_11351 = G__11356;\ncount__9208_11352 = G__11357;\ni__9209_11353 = G__11358;\ncontinue;\n}\n} else\n{var temp__4092__auto___11359 = cljs.core.seq.call(null,seq__9206_11350);if(temp__4092__auto___11359)\n{var seq__9206_11360__$1 = temp__4092__auto___11359;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9206_11360__$1))\n{var c__5632__auto___11361 = cljs.core.chunk_first.call(null,seq__9206_11360__$1);{\nvar G__11362 = cljs.core.chunk_rest.call(null,seq__9206_11360__$1);\nvar G__11363 = c__5632__auto___11361;\nvar G__11364 = cljs.core.count.call(null,c__5632__auto___11361);\nvar G__11365 = 0;\nseq__9206_11350 = G__11362;\nchunk__9207_11351 = G__11363;\ncount__9208_11352 = G__11364;\ni__9209_11353 = G__11365;\ncontinue;\n}\n} else\n{var arg__7510__auto___11366 = cljs.core.first.call(null,seq__9206_11360__$1);a__7509__auto__.push(arg__7510__auto___11366);\n{\nvar G__11367 = cljs.core.next.call(null,seq__9206_11360__$1);\nvar G__11368 = null;\nvar G__11369 = 0;\nvar G__11370 = 0;\nseq__9206_11350 = G__11367;\nchunk__9207_11351 = G__11368;\ncount__9208_11352 = G__11369;\ni__9209_11353 = G__11370;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.small.apply(null,a__7509__auto__);\n};\nvar small = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn small__delegate.call(this,args__7508__auto__);};\nsmall.cljs$lang$maxFixedArity = 0;\nsmall.cljs$lang$applyTo = (function (arglist__11371){\nvar args__7508__auto__ = cljs.core.seq(arglist__11371);\nreturn small__delegate(args__7508__auto__);\n});\nsmall.cljs$core$IFn$_invoke$arity$variadic = small__delegate;\nreturn small;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.source = (function() { \nvar source__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9214_11372 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9215_11373 = null;var count__9216_11374 = 0;var i__9217_11375 = 0;while(true){\nif((i__9217_11375 < count__9216_11374))\n{var arg__7510__auto___11376 = cljs.core._nth.call(null,chunk__9215_11373,i__9217_11375);a__7509__auto__.push(arg__7510__auto___11376);\n{\nvar G__11377 = seq__9214_11372;\nvar G__11378 = chunk__9215_11373;\nvar G__11379 = count__9216_11374;\nvar G__11380 = (i__9217_11375 + 1);\nseq__9214_11372 = G__11377;\nchunk__9215_11373 = G__11378;\ncount__9216_11374 = G__11379;\ni__9217_11375 = G__11380;\ncontinue;\n}\n} else\n{var temp__4092__auto___11381 = cljs.core.seq.call(null,seq__9214_11372);if(temp__4092__auto___11381)\n{var seq__9214_11382__$1 = temp__4092__auto___11381;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9214_11382__$1))\n{var c__5632__auto___11383 = cljs.core.chunk_first.call(null,seq__9214_11382__$1);{\nvar G__11384 = cljs.core.chunk_rest.call(null,seq__9214_11382__$1);\nvar G__11385 = c__5632__auto___11383;\nvar G__11386 = cljs.core.count.call(null,c__5632__auto___11383);\nvar G__11387 = 0;\nseq__9214_11372 = G__11384;\nchunk__9215_11373 = G__11385;\ncount__9216_11374 = G__11386;\ni__9217_11375 = G__11387;\ncontinue;\n}\n} else\n{var arg__7510__auto___11388 = cljs.core.first.call(null,seq__9214_11382__$1);a__7509__auto__.push(arg__7510__auto___11388);\n{\nvar G__11389 = cljs.core.next.call(null,seq__9214_11382__$1);\nvar G__11390 = null;\nvar G__11391 = 0;\nvar G__11392 = 0;\nseq__9214_11372 = G__11389;\nchunk__9215_11373 = G__11390;\ncount__9216_11374 = G__11391;\ni__9217_11375 = G__11392;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.source.apply(null,a__7509__auto__);\n};\nvar source = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn source__delegate.call(this,args__7508__auto__);};\nsource.cljs$lang$maxFixedArity = 0;\nsource.cljs$lang$applyTo = (function (arglist__11393){\nvar args__7508__auto__ = cljs.core.seq(arglist__11393);\nreturn source__delegate(args__7508__auto__);\n});\nsource.cljs$core$IFn$_invoke$arity$variadic = source__delegate;\nreturn source;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.span = (function() { \nvar span__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9222_11394 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9223_11395 = null;var count__9224_11396 = 0;var i__9225_11397 = 0;while(true){\nif((i__9225_11397 < count__9224_11396))\n{var arg__7510__auto___11398 = cljs.core._nth.call(null,chunk__9223_11395,i__9225_11397);a__7509__auto__.push(arg__7510__auto___11398);\n{\nvar G__11399 = seq__9222_11394;\nvar G__11400 = chunk__9223_11395;\nvar G__11401 = count__9224_11396;\nvar G__11402 = (i__9225_11397 + 1);\nseq__9222_11394 = G__11399;\nchunk__9223_11395 = G__11400;\ncount__9224_11396 = G__11401;\ni__9225_11397 = G__11402;\ncontinue;\n}\n} else\n{var temp__4092__auto___11403 = cljs.core.seq.call(null,seq__9222_11394);if(temp__4092__auto___11403)\n{var seq__9222_11404__$1 = temp__4092__auto___11403;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9222_11404__$1))\n{var c__5632__auto___11405 = cljs.core.chunk_first.call(null,seq__9222_11404__$1);{\nvar G__11406 = cljs.core.chunk_rest.call(null,seq__9222_11404__$1);\nvar G__11407 = c__5632__auto___11405;\nvar G__11408 = cljs.core.count.call(null,c__5632__auto___11405);\nvar G__11409 = 0;\nseq__9222_11394 = G__11406;\nchunk__9223_11395 = G__11407;\ncount__9224_11396 = G__11408;\ni__9225_11397 = G__11409;\ncontinue;\n}\n} else\n{var arg__7510__auto___11410 = cljs.core.first.call(null,seq__9222_11404__$1);a__7509__auto__.push(arg__7510__auto___11410);\n{\nvar G__11411 = cljs.core.next.call(null,seq__9222_11404__$1);\nvar G__11412 = null;\nvar G__11413 = 0;\nvar G__11414 = 0;\nseq__9222_11394 = G__11411;\nchunk__9223_11395 = G__11412;\ncount__9224_11396 = G__11413;\ni__9225_11397 = G__11414;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.span.apply(null,a__7509__auto__);\n};\nvar span = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn span__delegate.call(this,args__7508__auto__);};\nspan.cljs$lang$maxFixedArity = 0;\nspan.cljs$lang$applyTo = (function (arglist__11415){\nvar args__7508__auto__ = cljs.core.seq(arglist__11415);\nreturn span__delegate(args__7508__auto__);\n});\nspan.cljs$core$IFn$_invoke$arity$variadic = span__delegate;\nreturn span;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.strong = (function() { \nvar strong__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9230_11416 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9231_11417 = null;var count__9232_11418 = 0;var i__9233_11419 = 0;while(true){\nif((i__9233_11419 < count__9232_11418))\n{var arg__7510__auto___11420 = cljs.core._nth.call(null,chunk__9231_11417,i__9233_11419);a__7509__auto__.push(arg__7510__auto___11420);\n{\nvar G__11421 = seq__9230_11416;\nvar G__11422 = chunk__9231_11417;\nvar G__11423 = count__9232_11418;\nvar G__11424 = (i__9233_11419 + 1);\nseq__9230_11416 = G__11421;\nchunk__9231_11417 = G__11422;\ncount__9232_11418 = G__11423;\ni__9233_11419 = G__11424;\ncontinue;\n}\n} else\n{var temp__4092__auto___11425 = cljs.core.seq.call(null,seq__9230_11416);if(temp__4092__auto___11425)\n{var seq__9230_11426__$1 = temp__4092__auto___11425;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9230_11426__$1))\n{var c__5632__auto___11427 = cljs.core.chunk_first.call(null,seq__9230_11426__$1);{\nvar G__11428 = cljs.core.chunk_rest.call(null,seq__9230_11426__$1);\nvar G__11429 = c__5632__auto___11427;\nvar G__11430 = cljs.core.count.call(null,c__5632__auto___11427);\nvar G__11431 = 0;\nseq__9230_11416 = G__11428;\nchunk__9231_11417 = G__11429;\ncount__9232_11418 = G__11430;\ni__9233_11419 = G__11431;\ncontinue;\n}\n} else\n{var arg__7510__auto___11432 = cljs.core.first.call(null,seq__9230_11426__$1);a__7509__auto__.push(arg__7510__auto___11432);\n{\nvar G__11433 = cljs.core.next.call(null,seq__9230_11426__$1);\nvar G__11434 = null;\nvar G__11435 = 0;\nvar G__11436 = 0;\nseq__9230_11416 = G__11433;\nchunk__9231_11417 = G__11434;\ncount__9232_11418 = G__11435;\ni__9233_11419 = G__11436;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.strong.apply(null,a__7509__auto__);\n};\nvar strong = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn strong__delegate.call(this,args__7508__auto__);};\nstrong.cljs$lang$maxFixedArity = 0;\nstrong.cljs$lang$applyTo = (function (arglist__11437){\nvar args__7508__auto__ = cljs.core.seq(arglist__11437);\nreturn strong__delegate(args__7508__auto__);\n});\nstrong.cljs$core$IFn$_invoke$arity$variadic = strong__delegate;\nreturn strong;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.style = (function() { \nvar style__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9238_11438 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9239_11439 = null;var count__9240_11440 = 0;var i__9241_11441 = 0;while(true){\nif((i__9241_11441 < count__9240_11440))\n{var arg__7510__auto___11442 = cljs.core._nth.call(null,chunk__9239_11439,i__9241_11441);a__7509__auto__.push(arg__7510__auto___11442);\n{\nvar G__11443 = seq__9238_11438;\nvar G__11444 = chunk__9239_11439;\nvar G__11445 = count__9240_11440;\nvar G__11446 = (i__9241_11441 + 1);\nseq__9238_11438 = G__11443;\nchunk__9239_11439 = G__11444;\ncount__9240_11440 = G__11445;\ni__9241_11441 = G__11446;\ncontinue;\n}\n} else\n{var temp__4092__auto___11447 = cljs.core.seq.call(null,seq__9238_11438);if(temp__4092__auto___11447)\n{var seq__9238_11448__$1 = temp__4092__auto___11447;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9238_11448__$1))\n{var c__5632__auto___11449 = cljs.core.chunk_first.call(null,seq__9238_11448__$1);{\nvar G__11450 = cljs.core.chunk_rest.call(null,seq__9238_11448__$1);\nvar G__11451 = c__5632__auto___11449;\nvar G__11452 = cljs.core.count.call(null,c__5632__auto___11449);\nvar G__11453 = 0;\nseq__9238_11438 = G__11450;\nchunk__9239_11439 = G__11451;\ncount__9240_11440 = G__11452;\ni__9241_11441 = G__11453;\ncontinue;\n}\n} else\n{var arg__7510__auto___11454 = cljs.core.first.call(null,seq__9238_11448__$1);a__7509__auto__.push(arg__7510__auto___11454);\n{\nvar G__11455 = cljs.core.next.call(null,seq__9238_11448__$1);\nvar G__11456 = null;\nvar G__11457 = 0;\nvar G__11458 = 0;\nseq__9238_11438 = G__11455;\nchunk__9239_11439 = G__11456;\ncount__9240_11440 = G__11457;\ni__9241_11441 = G__11458;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.style.apply(null,a__7509__auto__);\n};\nvar style = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn style__delegate.call(this,args__7508__auto__);};\nstyle.cljs$lang$maxFixedArity = 0;\nstyle.cljs$lang$applyTo = (function (arglist__11459){\nvar args__7508__auto__ = cljs.core.seq(arglist__11459);\nreturn style__delegate(args__7508__auto__);\n});\nstyle.cljs$core$IFn$_invoke$arity$variadic = style__delegate;\nreturn style;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.sub = (function() { \nvar sub__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9246_11460 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9247_11461 = null;var count__9248_11462 = 0;var i__9249_11463 = 0;while(true){\nif((i__9249_11463 < count__9248_11462))\n{var arg__7510__auto___11464 = cljs.core._nth.call(null,chunk__9247_11461,i__9249_11463);a__7509__auto__.push(arg__7510__auto___11464);\n{\nvar G__11465 = seq__9246_11460;\nvar G__11466 = chunk__9247_11461;\nvar G__11467 = count__9248_11462;\nvar G__11468 = (i__9249_11463 + 1);\nseq__9246_11460 = G__11465;\nchunk__9247_11461 = G__11466;\ncount__9248_11462 = G__11467;\ni__9249_11463 = G__11468;\ncontinue;\n}\n} else\n{var temp__4092__auto___11469 = cljs.core.seq.call(null,seq__9246_11460);if(temp__4092__auto___11469)\n{var seq__9246_11470__$1 = temp__4092__auto___11469;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9246_11470__$1))\n{var c__5632__auto___11471 = cljs.core.chunk_first.call(null,seq__9246_11470__$1);{\nvar G__11472 = cljs.core.chunk_rest.call(null,seq__9246_11470__$1);\nvar G__11473 = c__5632__auto___11471;\nvar G__11474 = cljs.core.count.call(null,c__5632__auto___11471);\nvar G__11475 = 0;\nseq__9246_11460 = G__11472;\nchunk__9247_11461 = G__11473;\ncount__9248_11462 = G__11474;\ni__9249_11463 = G__11475;\ncontinue;\n}\n} else\n{var arg__7510__auto___11476 = cljs.core.first.call(null,seq__9246_11470__$1);a__7509__auto__.push(arg__7510__auto___11476);\n{\nvar G__11477 = cljs.core.next.call(null,seq__9246_11470__$1);\nvar G__11478 = null;\nvar G__11479 = 0;\nvar G__11480 = 0;\nseq__9246_11460 = G__11477;\nchunk__9247_11461 = G__11478;\ncount__9248_11462 = G__11479;\ni__9249_11463 = G__11480;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.sub.apply(null,a__7509__auto__);\n};\nvar sub = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn sub__delegate.call(this,args__7508__auto__);};\nsub.cljs$lang$maxFixedArity = 0;\nsub.cljs$lang$applyTo = (function (arglist__11481){\nvar args__7508__auto__ = cljs.core.seq(arglist__11481);\nreturn sub__delegate(args__7508__auto__);\n});\nsub.cljs$core$IFn$_invoke$arity$variadic = sub__delegate;\nreturn sub;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.summary = (function() { \nvar summary__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9254_11482 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9255_11483 = null;var count__9256_11484 = 0;var i__9257_11485 = 0;while(true){\nif((i__9257_11485 < count__9256_11484))\n{var arg__7510__auto___11486 = cljs.core._nth.call(null,chunk__9255_11483,i__9257_11485);a__7509__auto__.push(arg__7510__auto___11486);\n{\nvar G__11487 = seq__9254_11482;\nvar G__11488 = chunk__9255_11483;\nvar G__11489 = count__9256_11484;\nvar G__11490 = (i__9257_11485 + 1);\nseq__9254_11482 = G__11487;\nchunk__9255_11483 = G__11488;\ncount__9256_11484 = G__11489;\ni__9257_11485 = G__11490;\ncontinue;\n}\n} else\n{var temp__4092__auto___11491 = cljs.core.seq.call(null,seq__9254_11482);if(temp__4092__auto___11491)\n{var seq__9254_11492__$1 = temp__4092__auto___11491;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9254_11492__$1))\n{var c__5632__auto___11493 = cljs.core.chunk_first.call(null,seq__9254_11492__$1);{\nvar G__11494 = cljs.core.chunk_rest.call(null,seq__9254_11492__$1);\nvar G__11495 = c__5632__auto___11493;\nvar G__11496 = cljs.core.count.call(null,c__5632__auto___11493);\nvar G__11497 = 0;\nseq__9254_11482 = G__11494;\nchunk__9255_11483 = G__11495;\ncount__9256_11484 = G__11496;\ni__9257_11485 = G__11497;\ncontinue;\n}\n} else\n{var arg__7510__auto___11498 = cljs.core.first.call(null,seq__9254_11492__$1);a__7509__auto__.push(arg__7510__auto___11498);\n{\nvar G__11499 = cljs.core.next.call(null,seq__9254_11492__$1);\nvar G__11500 = null;\nvar G__11501 = 0;\nvar G__11502 = 0;\nseq__9254_11482 = G__11499;\nchunk__9255_11483 = G__11500;\ncount__9256_11484 = G__11501;\ni__9257_11485 = G__11502;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.summary.apply(null,a__7509__auto__);\n};\nvar summary = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn summary__delegate.call(this,args__7508__auto__);};\nsummary.cljs$lang$maxFixedArity = 0;\nsummary.cljs$lang$applyTo = (function (arglist__11503){\nvar args__7508__auto__ = cljs.core.seq(arglist__11503);\nreturn summary__delegate(args__7508__auto__);\n});\nsummary.cljs$core$IFn$_invoke$arity$variadic = summary__delegate;\nreturn summary;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.sup = (function() { \nvar sup__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9262_11504 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9263_11505 = null;var count__9264_11506 = 0;var i__9265_11507 = 0;while(true){\nif((i__9265_11507 < count__9264_11506))\n{var arg__7510__auto___11508 = cljs.core._nth.call(null,chunk__9263_11505,i__9265_11507);a__7509__auto__.push(arg__7510__auto___11508);\n{\nvar G__11509 = seq__9262_11504;\nvar G__11510 = chunk__9263_11505;\nvar G__11511 = count__9264_11506;\nvar G__11512 = (i__9265_11507 + 1);\nseq__9262_11504 = G__11509;\nchunk__9263_11505 = G__11510;\ncount__9264_11506 = G__11511;\ni__9265_11507 = G__11512;\ncontinue;\n}\n} else\n{var temp__4092__auto___11513 = cljs.core.seq.call(null,seq__9262_11504);if(temp__4092__auto___11513)\n{var seq__9262_11514__$1 = temp__4092__auto___11513;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9262_11514__$1))\n{var c__5632__auto___11515 = cljs.core.chunk_first.call(null,seq__9262_11514__$1);{\nvar G__11516 = cljs.core.chunk_rest.call(null,seq__9262_11514__$1);\nvar G__11517 = c__5632__auto___11515;\nvar G__11518 = cljs.core.count.call(null,c__5632__auto___11515);\nvar G__11519 = 0;\nseq__9262_11504 = G__11516;\nchunk__9263_11505 = G__11517;\ncount__9264_11506 = G__11518;\ni__9265_11507 = G__11519;\ncontinue;\n}\n} else\n{var arg__7510__auto___11520 = cljs.core.first.call(null,seq__9262_11514__$1);a__7509__auto__.push(arg__7510__auto___11520);\n{\nvar G__11521 = cljs.core.next.call(null,seq__9262_11514__$1);\nvar G__11522 = null;\nvar G__11523 = 0;\nvar G__11524 = 0;\nseq__9262_11504 = G__11521;\nchunk__9263_11505 = G__11522;\ncount__9264_11506 = G__11523;\ni__9265_11507 = G__11524;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.sup.apply(null,a__7509__auto__);\n};\nvar sup = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn sup__delegate.call(this,args__7508__auto__);};\nsup.cljs$lang$maxFixedArity = 0;\nsup.cljs$lang$applyTo = (function (arglist__11525){\nvar args__7508__auto__ = cljs.core.seq(arglist__11525);\nreturn sup__delegate(args__7508__auto__);\n});\nsup.cljs$core$IFn$_invoke$arity$variadic = sup__delegate;\nreturn sup;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.table = (function() { \nvar table__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9270_11526 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9271_11527 = null;var count__9272_11528 = 0;var i__9273_11529 = 0;while(true){\nif((i__9273_11529 < count__9272_11528))\n{var arg__7510__auto___11530 = cljs.core._nth.call(null,chunk__9271_11527,i__9273_11529);a__7509__auto__.push(arg__7510__auto___11530);\n{\nvar G__11531 = seq__9270_11526;\nvar G__11532 = chunk__9271_11527;\nvar G__11533 = count__9272_11528;\nvar G__11534 = (i__9273_11529 + 1);\nseq__9270_11526 = G__11531;\nchunk__9271_11527 = G__11532;\ncount__9272_11528 = G__11533;\ni__9273_11529 = G__11534;\ncontinue;\n}\n} else\n{var temp__4092__auto___11535 = cljs.core.seq.call(null,seq__9270_11526);if(temp__4092__auto___11535)\n{var seq__9270_11536__$1 = temp__4092__auto___11535;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9270_11536__$1))\n{var c__5632__auto___11537 = cljs.core.chunk_first.call(null,seq__9270_11536__$1);{\nvar G__11538 = cljs.core.chunk_rest.call(null,seq__9270_11536__$1);\nvar G__11539 = c__5632__auto___11537;\nvar G__11540 = cljs.core.count.call(null,c__5632__auto___11537);\nvar G__11541 = 0;\nseq__9270_11526 = G__11538;\nchunk__9271_11527 = G__11539;\ncount__9272_11528 = G__11540;\ni__9273_11529 = G__11541;\ncontinue;\n}\n} else\n{var arg__7510__auto___11542 = cljs.core.first.call(null,seq__9270_11536__$1);a__7509__auto__.push(arg__7510__auto___11542);\n{\nvar G__11543 = cljs.core.next.call(null,seq__9270_11536__$1);\nvar G__11544 = null;\nvar G__11545 = 0;\nvar G__11546 = 0;\nseq__9270_11526 = G__11543;\nchunk__9271_11527 = G__11544;\ncount__9272_11528 = G__11545;\ni__9273_11529 = G__11546;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.table.apply(null,a__7509__auto__);\n};\nvar table = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn table__delegate.call(this,args__7508__auto__);};\ntable.cljs$lang$maxFixedArity = 0;\ntable.cljs$lang$applyTo = (function (arglist__11547){\nvar args__7508__auto__ = cljs.core.seq(arglist__11547);\nreturn table__delegate(args__7508__auto__);\n});\ntable.cljs$core$IFn$_invoke$arity$variadic = table__delegate;\nreturn table;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.tbody = (function() { \nvar tbody__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9278_11548 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9279_11549 = null;var count__9280_11550 = 0;var i__9281_11551 = 0;while(true){\nif((i__9281_11551 < count__9280_11550))\n{var arg__7510__auto___11552 = cljs.core._nth.call(null,chunk__9279_11549,i__9281_11551);a__7509__auto__.push(arg__7510__auto___11552);\n{\nvar G__11553 = seq__9278_11548;\nvar G__11554 = chunk__9279_11549;\nvar G__11555 = count__9280_11550;\nvar G__11556 = (i__9281_11551 + 1);\nseq__9278_11548 = G__11553;\nchunk__9279_11549 = G__11554;\ncount__9280_11550 = G__11555;\ni__9281_11551 = G__11556;\ncontinue;\n}\n} else\n{var temp__4092__auto___11557 = cljs.core.seq.call(null,seq__9278_11548);if(temp__4092__auto___11557)\n{var seq__9278_11558__$1 = temp__4092__auto___11557;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9278_11558__$1))\n{var c__5632__auto___11559 = cljs.core.chunk_first.call(null,seq__9278_11558__$1);{\nvar G__11560 = cljs.core.chunk_rest.call(null,seq__9278_11558__$1);\nvar G__11561 = c__5632__auto___11559;\nvar G__11562 = cljs.core.count.call(null,c__5632__auto___11559);\nvar G__11563 = 0;\nseq__9278_11548 = G__11560;\nchunk__9279_11549 = G__11561;\ncount__9280_11550 = G__11562;\ni__9281_11551 = G__11563;\ncontinue;\n}\n} else\n{var arg__7510__auto___11564 = cljs.core.first.call(null,seq__9278_11558__$1);a__7509__auto__.push(arg__7510__auto___11564);\n{\nvar G__11565 = cljs.core.next.call(null,seq__9278_11558__$1);\nvar G__11566 = null;\nvar G__11567 = 0;\nvar G__11568 = 0;\nseq__9278_11548 = G__11565;\nchunk__9279_11549 = G__11566;\ncount__9280_11550 = G__11567;\ni__9281_11551 = G__11568;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.tbody.apply(null,a__7509__auto__);\n};\nvar tbody = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn tbody__delegate.call(this,args__7508__auto__);};\ntbody.cljs$lang$maxFixedArity = 0;\ntbody.cljs$lang$applyTo = (function (arglist__11569){\nvar args__7508__auto__ = cljs.core.seq(arglist__11569);\nreturn tbody__delegate(args__7508__auto__);\n});\ntbody.cljs$core$IFn$_invoke$arity$variadic = tbody__delegate;\nreturn tbody;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.td = (function() { \nvar td__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9286_11570 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9287_11571 = null;var count__9288_11572 = 0;var i__9289_11573 = 0;while(true){\nif((i__9289_11573 < count__9288_11572))\n{var arg__7510__auto___11574 = cljs.core._nth.call(null,chunk__9287_11571,i__9289_11573);a__7509__auto__.push(arg__7510__auto___11574);\n{\nvar G__11575 = seq__9286_11570;\nvar G__11576 = chunk__9287_11571;\nvar G__11577 = count__9288_11572;\nvar G__11578 = (i__9289_11573 + 1);\nseq__9286_11570 = G__11575;\nchunk__9287_11571 = G__11576;\ncount__9288_11572 = G__11577;\ni__9289_11573 = G__11578;\ncontinue;\n}\n} else\n{var temp__4092__auto___11579 = cljs.core.seq.call(null,seq__9286_11570);if(temp__4092__auto___11579)\n{var seq__9286_11580__$1 = temp__4092__auto___11579;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9286_11580__$1))\n{var c__5632__auto___11581 = cljs.core.chunk_first.call(null,seq__9286_11580__$1);{\nvar G__11582 = cljs.core.chunk_rest.call(null,seq__9286_11580__$1);\nvar G__11583 = c__5632__auto___11581;\nvar G__11584 = cljs.core.count.call(null,c__5632__auto___11581);\nvar G__11585 = 0;\nseq__9286_11570 = G__11582;\nchunk__9287_11571 = G__11583;\ncount__9288_11572 = G__11584;\ni__9289_11573 = G__11585;\ncontinue;\n}\n} else\n{var arg__7510__auto___11586 = cljs.core.first.call(null,seq__9286_11580__$1);a__7509__auto__.push(arg__7510__auto___11586);\n{\nvar G__11587 = cljs.core.next.call(null,seq__9286_11580__$1);\nvar G__11588 = null;\nvar G__11589 = 0;\nvar G__11590 = 0;\nseq__9286_11570 = G__11587;\nchunk__9287_11571 = G__11588;\ncount__9288_11572 = G__11589;\ni__9289_11573 = G__11590;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.td.apply(null,a__7509__auto__);\n};\nvar td = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn td__delegate.call(this,args__7508__auto__);};\ntd.cljs$lang$maxFixedArity = 0;\ntd.cljs$lang$applyTo = (function (arglist__11591){\nvar args__7508__auto__ = cljs.core.seq(arglist__11591);\nreturn td__delegate(args__7508__auto__);\n});\ntd.cljs$core$IFn$_invoke$arity$variadic = td__delegate;\nreturn td;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.textarea = (function() { \nvar textarea__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9294_11592 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9295_11593 = null;var count__9296_11594 = 0;var i__9297_11595 = 0;while(true){\nif((i__9297_11595 < count__9296_11594))\n{var arg__7510__auto___11596 = cljs.core._nth.call(null,chunk__9295_11593,i__9297_11595);a__7509__auto__.push(arg__7510__auto___11596);\n{\nvar G__11597 = seq__9294_11592;\nvar G__11598 = chunk__9295_11593;\nvar G__11599 = count__9296_11594;\nvar G__11600 = (i__9297_11595 + 1);\nseq__9294_11592 = G__11597;\nchunk__9295_11593 = G__11598;\ncount__9296_11594 = G__11599;\ni__9297_11595 = G__11600;\ncontinue;\n}\n} else\n{var temp__4092__auto___11601 = cljs.core.seq.call(null,seq__9294_11592);if(temp__4092__auto___11601)\n{var seq__9294_11602__$1 = temp__4092__auto___11601;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9294_11602__$1))\n{var c__5632__auto___11603 = cljs.core.chunk_first.call(null,seq__9294_11602__$1);{\nvar G__11604 = cljs.core.chunk_rest.call(null,seq__9294_11602__$1);\nvar G__11605 = c__5632__auto___11603;\nvar G__11606 = cljs.core.count.call(null,c__5632__auto___11603);\nvar G__11607 = 0;\nseq__9294_11592 = G__11604;\nchunk__9295_11593 = G__11605;\ncount__9296_11594 = G__11606;\ni__9297_11595 = G__11607;\ncontinue;\n}\n} else\n{var arg__7510__auto___11608 = cljs.core.first.call(null,seq__9294_11602__$1);a__7509__auto__.push(arg__7510__auto___11608);\n{\nvar G__11609 = cljs.core.next.call(null,seq__9294_11602__$1);\nvar G__11610 = null;\nvar G__11611 = 0;\nvar G__11612 = 0;\nseq__9294_11592 = G__11609;\nchunk__9295_11593 = G__11610;\ncount__9296_11594 = G__11611;\ni__9297_11595 = G__11612;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.textarea.apply(null,a__7509__auto__);\n};\nvar textarea = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn textarea__delegate.call(this,args__7508__auto__);};\ntextarea.cljs$lang$maxFixedArity = 0;\ntextarea.cljs$lang$applyTo = (function (arglist__11613){\nvar args__7508__auto__ = cljs.core.seq(arglist__11613);\nreturn textarea__delegate(args__7508__auto__);\n});\ntextarea.cljs$core$IFn$_invoke$arity$variadic = textarea__delegate;\nreturn textarea;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.tfoot = (function() { \nvar tfoot__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9302_11614 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9303_11615 = null;var count__9304_11616 = 0;var i__9305_11617 = 0;while(true){\nif((i__9305_11617 < count__9304_11616))\n{var arg__7510__auto___11618 = cljs.core._nth.call(null,chunk__9303_11615,i__9305_11617);a__7509__auto__.push(arg__7510__auto___11618);\n{\nvar G__11619 = seq__9302_11614;\nvar G__11620 = chunk__9303_11615;\nvar G__11621 = count__9304_11616;\nvar G__11622 = (i__9305_11617 + 1);\nseq__9302_11614 = G__11619;\nchunk__9303_11615 = G__11620;\ncount__9304_11616 = G__11621;\ni__9305_11617 = G__11622;\ncontinue;\n}\n} else\n{var temp__4092__auto___11623 = cljs.core.seq.call(null,seq__9302_11614);if(temp__4092__auto___11623)\n{var seq__9302_11624__$1 = temp__4092__auto___11623;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9302_11624__$1))\n{var c__5632__auto___11625 = cljs.core.chunk_first.call(null,seq__9302_11624__$1);{\nvar G__11626 = cljs.core.chunk_rest.call(null,seq__9302_11624__$1);\nvar G__11627 = c__5632__auto___11625;\nvar G__11628 = cljs.core.count.call(null,c__5632__auto___11625);\nvar G__11629 = 0;\nseq__9302_11614 = G__11626;\nchunk__9303_11615 = G__11627;\ncount__9304_11616 = G__11628;\ni__9305_11617 = G__11629;\ncontinue;\n}\n} else\n{var arg__7510__auto___11630 = cljs.core.first.call(null,seq__9302_11624__$1);a__7509__auto__.push(arg__7510__auto___11630);\n{\nvar G__11631 = cljs.core.next.call(null,seq__9302_11624__$1);\nvar G__11632 = null;\nvar G__11633 = 0;\nvar G__11634 = 0;\nseq__9302_11614 = G__11631;\nchunk__9303_11615 = G__11632;\ncount__9304_11616 = G__11633;\ni__9305_11617 = G__11634;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.tfoot.apply(null,a__7509__auto__);\n};\nvar tfoot = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn tfoot__delegate.call(this,args__7508__auto__);};\ntfoot.cljs$lang$maxFixedArity = 0;\ntfoot.cljs$lang$applyTo = (function (arglist__11635){\nvar args__7508__auto__ = cljs.core.seq(arglist__11635);\nreturn tfoot__delegate(args__7508__auto__);\n});\ntfoot.cljs$core$IFn$_invoke$arity$variadic = tfoot__delegate;\nreturn tfoot;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.th = (function() { \nvar th__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9310_11636 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9311_11637 = null;var count__9312_11638 = 0;var i__9313_11639 = 0;while(true){\nif((i__9313_11639 < count__9312_11638))\n{var arg__7510__auto___11640 = cljs.core._nth.call(null,chunk__9311_11637,i__9313_11639);a__7509__auto__.push(arg__7510__auto___11640);\n{\nvar G__11641 = seq__9310_11636;\nvar G__11642 = chunk__9311_11637;\nvar G__11643 = count__9312_11638;\nvar G__11644 = (i__9313_11639 + 1);\nseq__9310_11636 = G__11641;\nchunk__9311_11637 = G__11642;\ncount__9312_11638 = G__11643;\ni__9313_11639 = G__11644;\ncontinue;\n}\n} else\n{var temp__4092__auto___11645 = cljs.core.seq.call(null,seq__9310_11636);if(temp__4092__auto___11645)\n{var seq__9310_11646__$1 = temp__4092__auto___11645;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9310_11646__$1))\n{var c__5632__auto___11647 = cljs.core.chunk_first.call(null,seq__9310_11646__$1);{\nvar G__11648 = cljs.core.chunk_rest.call(null,seq__9310_11646__$1);\nvar G__11649 = c__5632__auto___11647;\nvar G__11650 = cljs.core.count.call(null,c__5632__auto___11647);\nvar G__11651 = 0;\nseq__9310_11636 = G__11648;\nchunk__9311_11637 = G__11649;\ncount__9312_11638 = G__11650;\ni__9313_11639 = G__11651;\ncontinue;\n}\n} else\n{var arg__7510__auto___11652 = cljs.core.first.call(null,seq__9310_11646__$1);a__7509__auto__.push(arg__7510__auto___11652);\n{\nvar G__11653 = cljs.core.next.call(null,seq__9310_11646__$1);\nvar G__11654 = null;\nvar G__11655 = 0;\nvar G__11656 = 0;\nseq__9310_11636 = G__11653;\nchunk__9311_11637 = G__11654;\ncount__9312_11638 = G__11655;\ni__9313_11639 = G__11656;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.th.apply(null,a__7509__auto__);\n};\nvar th = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn th__delegate.call(this,args__7508__auto__);};\nth.cljs$lang$maxFixedArity = 0;\nth.cljs$lang$applyTo = (function (arglist__11657){\nvar args__7508__auto__ = cljs.core.seq(arglist__11657);\nreturn th__delegate(args__7508__auto__);\n});\nth.cljs$core$IFn$_invoke$arity$variadic = th__delegate;\nreturn th;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.thead = (function() { \nvar thead__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9318_11658 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9319_11659 = null;var count__9320_11660 = 0;var i__9321_11661 = 0;while(true){\nif((i__9321_11661 < count__9320_11660))\n{var arg__7510__auto___11662 = cljs.core._nth.call(null,chunk__9319_11659,i__9321_11661);a__7509__auto__.push(arg__7510__auto___11662);\n{\nvar G__11663 = seq__9318_11658;\nvar G__11664 = chunk__9319_11659;\nvar G__11665 = count__9320_11660;\nvar G__11666 = (i__9321_11661 + 1);\nseq__9318_11658 = G__11663;\nchunk__9319_11659 = G__11664;\ncount__9320_11660 = G__11665;\ni__9321_11661 = G__11666;\ncontinue;\n}\n} else\n{var temp__4092__auto___11667 = cljs.core.seq.call(null,seq__9318_11658);if(temp__4092__auto___11667)\n{var seq__9318_11668__$1 = temp__4092__auto___11667;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9318_11668__$1))\n{var c__5632__auto___11669 = cljs.core.chunk_first.call(null,seq__9318_11668__$1);{\nvar G__11670 = cljs.core.chunk_rest.call(null,seq__9318_11668__$1);\nvar G__11671 = c__5632__auto___11669;\nvar G__11672 = cljs.core.count.call(null,c__5632__auto___11669);\nvar G__11673 = 0;\nseq__9318_11658 = G__11670;\nchunk__9319_11659 = G__11671;\ncount__9320_11660 = G__11672;\ni__9321_11661 = G__11673;\ncontinue;\n}\n} else\n{var arg__7510__auto___11674 = cljs.core.first.call(null,seq__9318_11668__$1);a__7509__auto__.push(arg__7510__auto___11674);\n{\nvar G__11675 = cljs.core.next.call(null,seq__9318_11668__$1);\nvar G__11676 = null;\nvar G__11677 = 0;\nvar G__11678 = 0;\nseq__9318_11658 = G__11675;\nchunk__9319_11659 = G__11676;\ncount__9320_11660 = G__11677;\ni__9321_11661 = G__11678;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.thead.apply(null,a__7509__auto__);\n};\nvar thead = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn thead__delegate.call(this,args__7508__auto__);};\nthead.cljs$lang$maxFixedArity = 0;\nthead.cljs$lang$applyTo = (function (arglist__11679){\nvar args__7508__auto__ = cljs.core.seq(arglist__11679);\nreturn thead__delegate(args__7508__auto__);\n});\nthead.cljs$core$IFn$_invoke$arity$variadic = thead__delegate;\nreturn thead;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.time = (function() { \nvar time__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9326_11680 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9327_11681 = null;var count__9328_11682 = 0;var i__9329_11683 = 0;while(true){\nif((i__9329_11683 < count__9328_11682))\n{var arg__7510__auto___11684 = cljs.core._nth.call(null,chunk__9327_11681,i__9329_11683);a__7509__auto__.push(arg__7510__auto___11684);\n{\nvar G__11685 = seq__9326_11680;\nvar G__11686 = chunk__9327_11681;\nvar G__11687 = count__9328_11682;\nvar G__11688 = (i__9329_11683 + 1);\nseq__9326_11680 = G__11685;\nchunk__9327_11681 = G__11686;\ncount__9328_11682 = G__11687;\ni__9329_11683 = G__11688;\ncontinue;\n}\n} else\n{var temp__4092__auto___11689 = cljs.core.seq.call(null,seq__9326_11680);if(temp__4092__auto___11689)\n{var seq__9326_11690__$1 = temp__4092__auto___11689;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9326_11690__$1))\n{var c__5632__auto___11691 = cljs.core.chunk_first.call(null,seq__9326_11690__$1);{\nvar G__11692 = cljs.core.chunk_rest.call(null,seq__9326_11690__$1);\nvar G__11693 = c__5632__auto___11691;\nvar G__11694 = cljs.core.count.call(null,c__5632__auto___11691);\nvar G__11695 = 0;\nseq__9326_11680 = G__11692;\nchunk__9327_11681 = G__11693;\ncount__9328_11682 = G__11694;\ni__9329_11683 = G__11695;\ncontinue;\n}\n} else\n{var arg__7510__auto___11696 = cljs.core.first.call(null,seq__9326_11690__$1);a__7509__auto__.push(arg__7510__auto___11696);\n{\nvar G__11697 = cljs.core.next.call(null,seq__9326_11690__$1);\nvar G__11698 = null;\nvar G__11699 = 0;\nvar G__11700 = 0;\nseq__9326_11680 = G__11697;\nchunk__9327_11681 = G__11698;\ncount__9328_11682 = G__11699;\ni__9329_11683 = G__11700;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.time.apply(null,a__7509__auto__);\n};\nvar time = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn time__delegate.call(this,args__7508__auto__);};\ntime.cljs$lang$maxFixedArity = 0;\ntime.cljs$lang$applyTo = (function (arglist__11701){\nvar args__7508__auto__ = cljs.core.seq(arglist__11701);\nreturn time__delegate(args__7508__auto__);\n});\ntime.cljs$core$IFn$_invoke$arity$variadic = time__delegate;\nreturn time;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.title = (function() { \nvar title__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9334_11702 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9335_11703 = null;var count__9336_11704 = 0;var i__9337_11705 = 0;while(true){\nif((i__9337_11705 < count__9336_11704))\n{var arg__7510__auto___11706 = cljs.core._nth.call(null,chunk__9335_11703,i__9337_11705);a__7509__auto__.push(arg__7510__auto___11706);\n{\nvar G__11707 = seq__9334_11702;\nvar G__11708 = chunk__9335_11703;\nvar G__11709 = count__9336_11704;\nvar G__11710 = (i__9337_11705 + 1);\nseq__9334_11702 = G__11707;\nchunk__9335_11703 = G__11708;\ncount__9336_11704 = G__11709;\ni__9337_11705 = G__11710;\ncontinue;\n}\n} else\n{var temp__4092__auto___11711 = cljs.core.seq.call(null,seq__9334_11702);if(temp__4092__auto___11711)\n{var seq__9334_11712__$1 = temp__4092__auto___11711;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9334_11712__$1))\n{var c__5632__auto___11713 = cljs.core.chunk_first.call(null,seq__9334_11712__$1);{\nvar G__11714 = cljs.core.chunk_rest.call(null,seq__9334_11712__$1);\nvar G__11715 = c__5632__auto___11713;\nvar G__11716 = cljs.core.count.call(null,c__5632__auto___11713);\nvar G__11717 = 0;\nseq__9334_11702 = G__11714;\nchunk__9335_11703 = G__11715;\ncount__9336_11704 = G__11716;\ni__9337_11705 = G__11717;\ncontinue;\n}\n} else\n{var arg__7510__auto___11718 = cljs.core.first.call(null,seq__9334_11712__$1);a__7509__auto__.push(arg__7510__auto___11718);\n{\nvar G__11719 = cljs.core.next.call(null,seq__9334_11712__$1);\nvar G__11720 = null;\nvar G__11721 = 0;\nvar G__11722 = 0;\nseq__9334_11702 = G__11719;\nchunk__9335_11703 = G__11720;\ncount__9336_11704 = G__11721;\ni__9337_11705 = G__11722;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.title.apply(null,a__7509__auto__);\n};\nvar title = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn title__delegate.call(this,args__7508__auto__);};\ntitle.cljs$lang$maxFixedArity = 0;\ntitle.cljs$lang$applyTo = (function (arglist__11723){\nvar args__7508__auto__ = cljs.core.seq(arglist__11723);\nreturn title__delegate(args__7508__auto__);\n});\ntitle.cljs$core$IFn$_invoke$arity$variadic = title__delegate;\nreturn title;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.tr = (function() { \nvar tr__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9342_11724 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9343_11725 = null;var count__9344_11726 = 0;var i__9345_11727 = 0;while(true){\nif((i__9345_11727 < count__9344_11726))\n{var arg__7510__auto___11728 = cljs.core._nth.call(null,chunk__9343_11725,i__9345_11727);a__7509__auto__.push(arg__7510__auto___11728);\n{\nvar G__11729 = seq__9342_11724;\nvar G__11730 = chunk__9343_11725;\nvar G__11731 = count__9344_11726;\nvar G__11732 = (i__9345_11727 + 1);\nseq__9342_11724 = G__11729;\nchunk__9343_11725 = G__11730;\ncount__9344_11726 = G__11731;\ni__9345_11727 = G__11732;\ncontinue;\n}\n} else\n{var temp__4092__auto___11733 = cljs.core.seq.call(null,seq__9342_11724);if(temp__4092__auto___11733)\n{var seq__9342_11734__$1 = temp__4092__auto___11733;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9342_11734__$1))\n{var c__5632__auto___11735 = cljs.core.chunk_first.call(null,seq__9342_11734__$1);{\nvar G__11736 = cljs.core.chunk_rest.call(null,seq__9342_11734__$1);\nvar G__11737 = c__5632__auto___11735;\nvar G__11738 = cljs.core.count.call(null,c__5632__auto___11735);\nvar G__11739 = 0;\nseq__9342_11724 = G__11736;\nchunk__9343_11725 = G__11737;\ncount__9344_11726 = G__11738;\ni__9345_11727 = G__11739;\ncontinue;\n}\n} else\n{var arg__7510__auto___11740 = cljs.core.first.call(null,seq__9342_11734__$1);a__7509__auto__.push(arg__7510__auto___11740);\n{\nvar G__11741 = cljs.core.next.call(null,seq__9342_11734__$1);\nvar G__11742 = null;\nvar G__11743 = 0;\nvar G__11744 = 0;\nseq__9342_11724 = G__11741;\nchunk__9343_11725 = G__11742;\ncount__9344_11726 = G__11743;\ni__9345_11727 = G__11744;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.tr.apply(null,a__7509__auto__);\n};\nvar tr = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn tr__delegate.call(this,args__7508__auto__);};\ntr.cljs$lang$maxFixedArity = 0;\ntr.cljs$lang$applyTo = (function (arglist__11745){\nvar args__7508__auto__ = cljs.core.seq(arglist__11745);\nreturn tr__delegate(args__7508__auto__);\n});\ntr.cljs$core$IFn$_invoke$arity$variadic = tr__delegate;\nreturn tr;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.track = (function() { \nvar track__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9350_11746 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9351_11747 = null;var count__9352_11748 = 0;var i__9353_11749 = 0;while(true){\nif((i__9353_11749 < count__9352_11748))\n{var arg__7510__auto___11750 = cljs.core._nth.call(null,chunk__9351_11747,i__9353_11749);a__7509__auto__.push(arg__7510__auto___11750);\n{\nvar G__11751 = seq__9350_11746;\nvar G__11752 = chunk__9351_11747;\nvar G__11753 = count__9352_11748;\nvar G__11754 = (i__9353_11749 + 1);\nseq__9350_11746 = G__11751;\nchunk__9351_11747 = G__11752;\ncount__9352_11748 = G__11753;\ni__9353_11749 = G__11754;\ncontinue;\n}\n} else\n{var temp__4092__auto___11755 = cljs.core.seq.call(null,seq__9350_11746);if(temp__4092__auto___11755)\n{var seq__9350_11756__$1 = temp__4092__auto___11755;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9350_11756__$1))\n{var c__5632__auto___11757 = cljs.core.chunk_first.call(null,seq__9350_11756__$1);{\nvar G__11758 = cljs.core.chunk_rest.call(null,seq__9350_11756__$1);\nvar G__11759 = c__5632__auto___11757;\nvar G__11760 = cljs.core.count.call(null,c__5632__auto___11757);\nvar G__11761 = 0;\nseq__9350_11746 = G__11758;\nchunk__9351_11747 = G__11759;\ncount__9352_11748 = G__11760;\ni__9353_11749 = G__11761;\ncontinue;\n}\n} else\n{var arg__7510__auto___11762 = cljs.core.first.call(null,seq__9350_11756__$1);a__7509__auto__.push(arg__7510__auto___11762);\n{\nvar G__11763 = cljs.core.next.call(null,seq__9350_11756__$1);\nvar G__11764 = null;\nvar G__11765 = 0;\nvar G__11766 = 0;\nseq__9350_11746 = G__11763;\nchunk__9351_11747 = G__11764;\ncount__9352_11748 = G__11765;\ni__9353_11749 = G__11766;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.track.apply(null,a__7509__auto__);\n};\nvar track = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn track__delegate.call(this,args__7508__auto__);};\ntrack.cljs$lang$maxFixedArity = 0;\ntrack.cljs$lang$applyTo = (function (arglist__11767){\nvar args__7508__auto__ = cljs.core.seq(arglist__11767);\nreturn track__delegate(args__7508__auto__);\n});\ntrack.cljs$core$IFn$_invoke$arity$variadic = track__delegate;\nreturn track;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.u = (function() { \nvar u__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9358_11768 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9359_11769 = null;var count__9360_11770 = 0;var i__9361_11771 = 0;while(true){\nif((i__9361_11771 < count__9360_11770))\n{var arg__7510__auto___11772 = cljs.core._nth.call(null,chunk__9359_11769,i__9361_11771);a__7509__auto__.push(arg__7510__auto___11772);\n{\nvar G__11773 = seq__9358_11768;\nvar G__11774 = chunk__9359_11769;\nvar G__11775 = count__9360_11770;\nvar G__11776 = (i__9361_11771 + 1);\nseq__9358_11768 = G__11773;\nchunk__9359_11769 = G__11774;\ncount__9360_11770 = G__11775;\ni__9361_11771 = G__11776;\ncontinue;\n}\n} else\n{var temp__4092__auto___11777 = cljs.core.seq.call(null,seq__9358_11768);if(temp__4092__auto___11777)\n{var seq__9358_11778__$1 = temp__4092__auto___11777;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9358_11778__$1))\n{var c__5632__auto___11779 = cljs.core.chunk_first.call(null,seq__9358_11778__$1);{\nvar G__11780 = cljs.core.chunk_rest.call(null,seq__9358_11778__$1);\nvar G__11781 = c__5632__auto___11779;\nvar G__11782 = cljs.core.count.call(null,c__5632__auto___11779);\nvar G__11783 = 0;\nseq__9358_11768 = G__11780;\nchunk__9359_11769 = G__11781;\ncount__9360_11770 = G__11782;\ni__9361_11771 = G__11783;\ncontinue;\n}\n} else\n{var arg__7510__auto___11784 = cljs.core.first.call(null,seq__9358_11778__$1);a__7509__auto__.push(arg__7510__auto___11784);\n{\nvar G__11785 = cljs.core.next.call(null,seq__9358_11778__$1);\nvar G__11786 = null;\nvar G__11787 = 0;\nvar G__11788 = 0;\nseq__9358_11768 = G__11785;\nchunk__9359_11769 = G__11786;\ncount__9360_11770 = G__11787;\ni__9361_11771 = G__11788;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.u.apply(null,a__7509__auto__);\n};\nvar u = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn u__delegate.call(this,args__7508__auto__);};\nu.cljs$lang$maxFixedArity = 0;\nu.cljs$lang$applyTo = (function (arglist__11789){\nvar args__7508__auto__ = cljs.core.seq(arglist__11789);\nreturn u__delegate(args__7508__auto__);\n});\nu.cljs$core$IFn$_invoke$arity$variadic = u__delegate;\nreturn u;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.ul = (function() { \nvar ul__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9366_11790 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9367_11791 = null;var count__9368_11792 = 0;var i__9369_11793 = 0;while(true){\nif((i__9369_11793 < count__9368_11792))\n{var arg__7510__auto___11794 = cljs.core._nth.call(null,chunk__9367_11791,i__9369_11793);a__7509__auto__.push(arg__7510__auto___11794);\n{\nvar G__11795 = seq__9366_11790;\nvar G__11796 = chunk__9367_11791;\nvar G__11797 = count__9368_11792;\nvar G__11798 = (i__9369_11793 + 1);\nseq__9366_11790 = G__11795;\nchunk__9367_11791 = G__11796;\ncount__9368_11792 = G__11797;\ni__9369_11793 = G__11798;\ncontinue;\n}\n} else\n{var temp__4092__auto___11799 = cljs.core.seq.call(null,seq__9366_11790);if(temp__4092__auto___11799)\n{var seq__9366_11800__$1 = temp__4092__auto___11799;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9366_11800__$1))\n{var c__5632__auto___11801 = cljs.core.chunk_first.call(null,seq__9366_11800__$1);{\nvar G__11802 = cljs.core.chunk_rest.call(null,seq__9366_11800__$1);\nvar G__11803 = c__5632__auto___11801;\nvar G__11804 = cljs.core.count.call(null,c__5632__auto___11801);\nvar G__11805 = 0;\nseq__9366_11790 = G__11802;\nchunk__9367_11791 = G__11803;\ncount__9368_11792 = G__11804;\ni__9369_11793 = G__11805;\ncontinue;\n}\n} else\n{var arg__7510__auto___11806 = cljs.core.first.call(null,seq__9366_11800__$1);a__7509__auto__.push(arg__7510__auto___11806);\n{\nvar G__11807 = cljs.core.next.call(null,seq__9366_11800__$1);\nvar G__11808 = null;\nvar G__11809 = 0;\nvar G__11810 = 0;\nseq__9366_11790 = G__11807;\nchunk__9367_11791 = G__11808;\ncount__9368_11792 = G__11809;\ni__9369_11793 = G__11810;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.ul.apply(null,a__7509__auto__);\n};\nvar ul = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn ul__delegate.call(this,args__7508__auto__);};\nul.cljs$lang$maxFixedArity = 0;\nul.cljs$lang$applyTo = (function (arglist__11811){\nvar args__7508__auto__ = cljs.core.seq(arglist__11811);\nreturn ul__delegate(args__7508__auto__);\n});\nul.cljs$core$IFn$_invoke$arity$variadic = ul__delegate;\nreturn ul;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.var$ = (function() { \nvar var$__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9374_11812 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9375_11813 = null;var count__9376_11814 = 0;var i__9377_11815 = 0;while(true){\nif((i__9377_11815 < count__9376_11814))\n{var arg__7510__auto___11816 = cljs.core._nth.call(null,chunk__9375_11813,i__9377_11815);a__7509__auto__.push(arg__7510__auto___11816);\n{\nvar G__11817 = seq__9374_11812;\nvar G__11818 = chunk__9375_11813;\nvar G__11819 = count__9376_11814;\nvar G__11820 = (i__9377_11815 + 1);\nseq__9374_11812 = G__11817;\nchunk__9375_11813 = G__11818;\ncount__9376_11814 = G__11819;\ni__9377_11815 = G__11820;\ncontinue;\n}\n} else\n{var temp__4092__auto___11821 = cljs.core.seq.call(null,seq__9374_11812);if(temp__4092__auto___11821)\n{var seq__9374_11822__$1 = temp__4092__auto___11821;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9374_11822__$1))\n{var c__5632__auto___11823 = cljs.core.chunk_first.call(null,seq__9374_11822__$1);{\nvar G__11824 = cljs.core.chunk_rest.call(null,seq__9374_11822__$1);\nvar G__11825 = c__5632__auto___11823;\nvar G__11826 = cljs.core.count.call(null,c__5632__auto___11823);\nvar G__11827 = 0;\nseq__9374_11812 = G__11824;\nchunk__9375_11813 = G__11825;\ncount__9376_11814 = G__11826;\ni__9377_11815 = G__11827;\ncontinue;\n}\n} else\n{var arg__7510__auto___11828 = cljs.core.first.call(null,seq__9374_11822__$1);a__7509__auto__.push(arg__7510__auto___11828);\n{\nvar G__11829 = cljs.core.next.call(null,seq__9374_11822__$1);\nvar G__11830 = null;\nvar G__11831 = 0;\nvar G__11832 = 0;\nseq__9374_11812 = G__11829;\nchunk__9375_11813 = G__11830;\ncount__9376_11814 = G__11831;\ni__9377_11815 = G__11832;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.var$.apply(null,a__7509__auto__);\n};\nvar var$ = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn var$__delegate.call(this,args__7508__auto__);};\nvar$.cljs$lang$maxFixedArity = 0;\nvar$.cljs$lang$applyTo = (function (arglist__11833){\nvar args__7508__auto__ = cljs.core.seq(arglist__11833);\nreturn var$__delegate(args__7508__auto__);\n});\nvar$.cljs$core$IFn$_invoke$arity$variadic = var$__delegate;\nreturn var$;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.video = (function() { \nvar video__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9382_11834 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9383_11835 = null;var count__9384_11836 = 0;var i__9385_11837 = 0;while(true){\nif((i__9385_11837 < count__9384_11836))\n{var arg__7510__auto___11838 = cljs.core._nth.call(null,chunk__9383_11835,i__9385_11837);a__7509__auto__.push(arg__7510__auto___11838);\n{\nvar G__11839 = seq__9382_11834;\nvar G__11840 = chunk__9383_11835;\nvar G__11841 = count__9384_11836;\nvar G__11842 = (i__9385_11837 + 1);\nseq__9382_11834 = G__11839;\nchunk__9383_11835 = G__11840;\ncount__9384_11836 = G__11841;\ni__9385_11837 = G__11842;\ncontinue;\n}\n} else\n{var temp__4092__auto___11843 = cljs.core.seq.call(null,seq__9382_11834);if(temp__4092__auto___11843)\n{var seq__9382_11844__$1 = temp__4092__auto___11843;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9382_11844__$1))\n{var c__5632__auto___11845 = cljs.core.chunk_first.call(null,seq__9382_11844__$1);{\nvar G__11846 = cljs.core.chunk_rest.call(null,seq__9382_11844__$1);\nvar G__11847 = c__5632__auto___11845;\nvar G__11848 = cljs.core.count.call(null,c__5632__auto___11845);\nvar G__11849 = 0;\nseq__9382_11834 = G__11846;\nchunk__9383_11835 = G__11847;\ncount__9384_11836 = G__11848;\ni__9385_11837 = G__11849;\ncontinue;\n}\n} else\n{var arg__7510__auto___11850 = cljs.core.first.call(null,seq__9382_11844__$1);a__7509__auto__.push(arg__7510__auto___11850);\n{\nvar G__11851 = cljs.core.next.call(null,seq__9382_11844__$1);\nvar G__11852 = null;\nvar G__11853 = 0;\nvar G__11854 = 0;\nseq__9382_11834 = G__11851;\nchunk__9383_11835 = G__11852;\ncount__9384_11836 = G__11853;\ni__9385_11837 = G__11854;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.video.apply(null,a__7509__auto__);\n};\nvar video = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn video__delegate.call(this,args__7508__auto__);};\nvideo.cljs$lang$maxFixedArity = 0;\nvideo.cljs$lang$applyTo = (function (arglist__11855){\nvar args__7508__auto__ = cljs.core.seq(arglist__11855);\nreturn video__delegate(args__7508__auto__);\n});\nvideo.cljs$core$IFn$_invoke$arity$variadic = video__delegate;\nreturn video;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.wbr = (function() { \nvar wbr__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9390_11856 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9391_11857 = null;var count__9392_11858 = 0;var i__9393_11859 = 0;while(true){\nif((i__9393_11859 < count__9392_11858))\n{var arg__7510__auto___11860 = cljs.core._nth.call(null,chunk__9391_11857,i__9393_11859);a__7509__auto__.push(arg__7510__auto___11860);\n{\nvar G__11861 = seq__9390_11856;\nvar G__11862 = chunk__9391_11857;\nvar G__11863 = count__9392_11858;\nvar G__11864 = (i__9393_11859 + 1);\nseq__9390_11856 = G__11861;\nchunk__9391_11857 = G__11862;\ncount__9392_11858 = G__11863;\ni__9393_11859 = G__11864;\ncontinue;\n}\n} else\n{var temp__4092__auto___11865 = cljs.core.seq.call(null,seq__9390_11856);if(temp__4092__auto___11865)\n{var seq__9390_11866__$1 = temp__4092__auto___11865;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9390_11866__$1))\n{var c__5632__auto___11867 = cljs.core.chunk_first.call(null,seq__9390_11866__$1);{\nvar G__11868 = cljs.core.chunk_rest.call(null,seq__9390_11866__$1);\nvar G__11869 = c__5632__auto___11867;\nvar G__11870 = cljs.core.count.call(null,c__5632__auto___11867);\nvar G__11871 = 0;\nseq__9390_11856 = G__11868;\nchunk__9391_11857 = G__11869;\ncount__9392_11858 = G__11870;\ni__9393_11859 = G__11871;\ncontinue;\n}\n} else\n{var arg__7510__auto___11872 = cljs.core.first.call(null,seq__9390_11866__$1);a__7509__auto__.push(arg__7510__auto___11872);\n{\nvar G__11873 = cljs.core.next.call(null,seq__9390_11866__$1);\nvar G__11874 = null;\nvar G__11875 = 0;\nvar G__11876 = 0;\nseq__9390_11856 = G__11873;\nchunk__9391_11857 = G__11874;\ncount__9392_11858 = G__11875;\ni__9393_11859 = G__11876;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.wbr.apply(null,a__7509__auto__);\n};\nvar wbr = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn wbr__delegate.call(this,args__7508__auto__);};\nwbr.cljs$lang$maxFixedArity = 0;\nwbr.cljs$lang$applyTo = (function (arglist__11877){\nvar args__7508__auto__ = cljs.core.seq(arglist__11877);\nreturn wbr__delegate(args__7508__auto__);\n});\nwbr.cljs$core$IFn$_invoke$arity$variadic = wbr__delegate;\nreturn wbr;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.circle = (function() { \nvar circle__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9398_11878 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9399_11879 = null;var count__9400_11880 = 0;var i__9401_11881 = 0;while(true){\nif((i__9401_11881 < count__9400_11880))\n{var arg__7510__auto___11882 = cljs.core._nth.call(null,chunk__9399_11879,i__9401_11881);a__7509__auto__.push(arg__7510__auto___11882);\n{\nvar G__11883 = seq__9398_11878;\nvar G__11884 = chunk__9399_11879;\nvar G__11885 = count__9400_11880;\nvar G__11886 = (i__9401_11881 + 1);\nseq__9398_11878 = G__11883;\nchunk__9399_11879 = G__11884;\ncount__9400_11880 = G__11885;\ni__9401_11881 = G__11886;\ncontinue;\n}\n} else\n{var temp__4092__auto___11887 = cljs.core.seq.call(null,seq__9398_11878);if(temp__4092__auto___11887)\n{var seq__9398_11888__$1 = temp__4092__auto___11887;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9398_11888__$1))\n{var c__5632__auto___11889 = cljs.core.chunk_first.call(null,seq__9398_11888__$1);{\nvar G__11890 = cljs.core.chunk_rest.call(null,seq__9398_11888__$1);\nvar G__11891 = c__5632__auto___11889;\nvar G__11892 = cljs.core.count.call(null,c__5632__auto___11889);\nvar G__11893 = 0;\nseq__9398_11878 = G__11890;\nchunk__9399_11879 = G__11891;\ncount__9400_11880 = G__11892;\ni__9401_11881 = G__11893;\ncontinue;\n}\n} else\n{var arg__7510__auto___11894 = cljs.core.first.call(null,seq__9398_11888__$1);a__7509__auto__.push(arg__7510__auto___11894);\n{\nvar G__11895 = cljs.core.next.call(null,seq__9398_11888__$1);\nvar G__11896 = null;\nvar G__11897 = 0;\nvar G__11898 = 0;\nseq__9398_11878 = G__11895;\nchunk__9399_11879 = G__11896;\ncount__9400_11880 = G__11897;\ni__9401_11881 = G__11898;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.circle.apply(null,a__7509__auto__);\n};\nvar circle = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn circle__delegate.call(this,args__7508__auto__);};\ncircle.cljs$lang$maxFixedArity = 0;\ncircle.cljs$lang$applyTo = (function (arglist__11899){\nvar args__7508__auto__ = cljs.core.seq(arglist__11899);\nreturn circle__delegate(args__7508__auto__);\n});\ncircle.cljs$core$IFn$_invoke$arity$variadic = circle__delegate;\nreturn circle;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.g = (function() { \nvar g__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9406_11900 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9407_11901 = null;var count__9408_11902 = 0;var i__9409_11903 = 0;while(true){\nif((i__9409_11903 < count__9408_11902))\n{var arg__7510__auto___11904 = cljs.core._nth.call(null,chunk__9407_11901,i__9409_11903);a__7509__auto__.push(arg__7510__auto___11904);\n{\nvar G__11905 = seq__9406_11900;\nvar G__11906 = chunk__9407_11901;\nvar G__11907 = count__9408_11902;\nvar G__11908 = (i__9409_11903 + 1);\nseq__9406_11900 = G__11905;\nchunk__9407_11901 = G__11906;\ncount__9408_11902 = G__11907;\ni__9409_11903 = G__11908;\ncontinue;\n}\n} else\n{var temp__4092__auto___11909 = cljs.core.seq.call(null,seq__9406_11900);if(temp__4092__auto___11909)\n{var seq__9406_11910__$1 = temp__4092__auto___11909;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9406_11910__$1))\n{var c__5632__auto___11911 = cljs.core.chunk_first.call(null,seq__9406_11910__$1);{\nvar G__11912 = cljs.core.chunk_rest.call(null,seq__9406_11910__$1);\nvar G__11913 = c__5632__auto___11911;\nvar G__11914 = cljs.core.count.call(null,c__5632__auto___11911);\nvar G__11915 = 0;\nseq__9406_11900 = G__11912;\nchunk__9407_11901 = G__11913;\ncount__9408_11902 = G__11914;\ni__9409_11903 = G__11915;\ncontinue;\n}\n} else\n{var arg__7510__auto___11916 = cljs.core.first.call(null,seq__9406_11910__$1);a__7509__auto__.push(arg__7510__auto___11916);\n{\nvar G__11917 = cljs.core.next.call(null,seq__9406_11910__$1);\nvar G__11918 = null;\nvar G__11919 = 0;\nvar G__11920 = 0;\nseq__9406_11900 = G__11917;\nchunk__9407_11901 = G__11918;\ncount__9408_11902 = G__11919;\ni__9409_11903 = G__11920;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.g.apply(null,a__7509__auto__);\n};\nvar g = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn g__delegate.call(this,args__7508__auto__);};\ng.cljs$lang$maxFixedArity = 0;\ng.cljs$lang$applyTo = (function (arglist__11921){\nvar args__7508__auto__ = cljs.core.seq(arglist__11921);\nreturn g__delegate(args__7508__auto__);\n});\ng.cljs$core$IFn$_invoke$arity$variadic = g__delegate;\nreturn g;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.line = (function() { \nvar line__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9414_11922 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9415_11923 = null;var count__9416_11924 = 0;var i__9417_11925 = 0;while(true){\nif((i__9417_11925 < count__9416_11924))\n{var arg__7510__auto___11926 = cljs.core._nth.call(null,chunk__9415_11923,i__9417_11925);a__7509__auto__.push(arg__7510__auto___11926);\n{\nvar G__11927 = seq__9414_11922;\nvar G__11928 = chunk__9415_11923;\nvar G__11929 = count__9416_11924;\nvar G__11930 = (i__9417_11925 + 1);\nseq__9414_11922 = G__11927;\nchunk__9415_11923 = G__11928;\ncount__9416_11924 = G__11929;\ni__9417_11925 = G__11930;\ncontinue;\n}\n} else\n{var temp__4092__auto___11931 = cljs.core.seq.call(null,seq__9414_11922);if(temp__4092__auto___11931)\n{var seq__9414_11932__$1 = temp__4092__auto___11931;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9414_11932__$1))\n{var c__5632__auto___11933 = cljs.core.chunk_first.call(null,seq__9414_11932__$1);{\nvar G__11934 = cljs.core.chunk_rest.call(null,seq__9414_11932__$1);\nvar G__11935 = c__5632__auto___11933;\nvar G__11936 = cljs.core.count.call(null,c__5632__auto___11933);\nvar G__11937 = 0;\nseq__9414_11922 = G__11934;\nchunk__9415_11923 = G__11935;\ncount__9416_11924 = G__11936;\ni__9417_11925 = G__11937;\ncontinue;\n}\n} else\n{var arg__7510__auto___11938 = cljs.core.first.call(null,seq__9414_11932__$1);a__7509__auto__.push(arg__7510__auto___11938);\n{\nvar G__11939 = cljs.core.next.call(null,seq__9414_11932__$1);\nvar G__11940 = null;\nvar G__11941 = 0;\nvar G__11942 = 0;\nseq__9414_11922 = G__11939;\nchunk__9415_11923 = G__11940;\ncount__9416_11924 = G__11941;\ni__9417_11925 = G__11942;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.line.apply(null,a__7509__auto__);\n};\nvar line = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn line__delegate.call(this,args__7508__auto__);};\nline.cljs$lang$maxFixedArity = 0;\nline.cljs$lang$applyTo = (function (arglist__11943){\nvar args__7508__auto__ = cljs.core.seq(arglist__11943);\nreturn line__delegate(args__7508__auto__);\n});\nline.cljs$core$IFn$_invoke$arity$variadic = line__delegate;\nreturn line;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.path = (function() { \nvar path__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9422_11944 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9423_11945 = null;var count__9424_11946 = 0;var i__9425_11947 = 0;while(true){\nif((i__9425_11947 < count__9424_11946))\n{var arg__7510__auto___11948 = cljs.core._nth.call(null,chunk__9423_11945,i__9425_11947);a__7509__auto__.push(arg__7510__auto___11948);\n{\nvar G__11949 = seq__9422_11944;\nvar G__11950 = chunk__9423_11945;\nvar G__11951 = count__9424_11946;\nvar G__11952 = (i__9425_11947 + 1);\nseq__9422_11944 = G__11949;\nchunk__9423_11945 = G__11950;\ncount__9424_11946 = G__11951;\ni__9425_11947 = G__11952;\ncontinue;\n}\n} else\n{var temp__4092__auto___11953 = cljs.core.seq.call(null,seq__9422_11944);if(temp__4092__auto___11953)\n{var seq__9422_11954__$1 = temp__4092__auto___11953;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9422_11954__$1))\n{var c__5632__auto___11955 = cljs.core.chunk_first.call(null,seq__9422_11954__$1);{\nvar G__11956 = cljs.core.chunk_rest.call(null,seq__9422_11954__$1);\nvar G__11957 = c__5632__auto___11955;\nvar G__11958 = cljs.core.count.call(null,c__5632__auto___11955);\nvar G__11959 = 0;\nseq__9422_11944 = G__11956;\nchunk__9423_11945 = G__11957;\ncount__9424_11946 = G__11958;\ni__9425_11947 = G__11959;\ncontinue;\n}\n} else\n{var arg__7510__auto___11960 = cljs.core.first.call(null,seq__9422_11954__$1);a__7509__auto__.push(arg__7510__auto___11960);\n{\nvar G__11961 = cljs.core.next.call(null,seq__9422_11954__$1);\nvar G__11962 = null;\nvar G__11963 = 0;\nvar G__11964 = 0;\nseq__9422_11944 = G__11961;\nchunk__9423_11945 = G__11962;\ncount__9424_11946 = G__11963;\ni__9425_11947 = G__11964;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.path.apply(null,a__7509__auto__);\n};\nvar path = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn path__delegate.call(this,args__7508__auto__);};\npath.cljs$lang$maxFixedArity = 0;\npath.cljs$lang$applyTo = (function (arglist__11965){\nvar args__7508__auto__ = cljs.core.seq(arglist__11965);\nreturn path__delegate(args__7508__auto__);\n});\npath.cljs$core$IFn$_invoke$arity$variadic = path__delegate;\nreturn path;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.polygon = (function() { \nvar polygon__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9430_11966 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9431_11967 = null;var count__9432_11968 = 0;var i__9433_11969 = 0;while(true){\nif((i__9433_11969 < count__9432_11968))\n{var arg__7510__auto___11970 = cljs.core._nth.call(null,chunk__9431_11967,i__9433_11969);a__7509__auto__.push(arg__7510__auto___11970);\n{\nvar G__11971 = seq__9430_11966;\nvar G__11972 = chunk__9431_11967;\nvar G__11973 = count__9432_11968;\nvar G__11974 = (i__9433_11969 + 1);\nseq__9430_11966 = G__11971;\nchunk__9431_11967 = G__11972;\ncount__9432_11968 = G__11973;\ni__9433_11969 = G__11974;\ncontinue;\n}\n} else\n{var temp__4092__auto___11975 = cljs.core.seq.call(null,seq__9430_11966);if(temp__4092__auto___11975)\n{var seq__9430_11976__$1 = temp__4092__auto___11975;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9430_11976__$1))\n{var c__5632__auto___11977 = cljs.core.chunk_first.call(null,seq__9430_11976__$1);{\nvar G__11978 = cljs.core.chunk_rest.call(null,seq__9430_11976__$1);\nvar G__11979 = c__5632__auto___11977;\nvar G__11980 = cljs.core.count.call(null,c__5632__auto___11977);\nvar G__11981 = 0;\nseq__9430_11966 = G__11978;\nchunk__9431_11967 = G__11979;\ncount__9432_11968 = G__11980;\ni__9433_11969 = G__11981;\ncontinue;\n}\n} else\n{var arg__7510__auto___11982 = cljs.core.first.call(null,seq__9430_11976__$1);a__7509__auto__.push(arg__7510__auto___11982);\n{\nvar G__11983 = cljs.core.next.call(null,seq__9430_11976__$1);\nvar G__11984 = null;\nvar G__11985 = 0;\nvar G__11986 = 0;\nseq__9430_11966 = G__11983;\nchunk__9431_11967 = G__11984;\ncount__9432_11968 = G__11985;\ni__9433_11969 = G__11986;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.polygon.apply(null,a__7509__auto__);\n};\nvar polygon = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn polygon__delegate.call(this,args__7508__auto__);};\npolygon.cljs$lang$maxFixedArity = 0;\npolygon.cljs$lang$applyTo = (function (arglist__11987){\nvar args__7508__auto__ = cljs.core.seq(arglist__11987);\nreturn polygon__delegate(args__7508__auto__);\n});\npolygon.cljs$core$IFn$_invoke$arity$variadic = polygon__delegate;\nreturn polygon;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.polyline = (function() { \nvar polyline__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9438_11988 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9439_11989 = null;var count__9440_11990 = 0;var i__9441_11991 = 0;while(true){\nif((i__9441_11991 < count__9440_11990))\n{var arg__7510__auto___11992 = cljs.core._nth.call(null,chunk__9439_11989,i__9441_11991);a__7509__auto__.push(arg__7510__auto___11992);\n{\nvar G__11993 = seq__9438_11988;\nvar G__11994 = chunk__9439_11989;\nvar G__11995 = count__9440_11990;\nvar G__11996 = (i__9441_11991 + 1);\nseq__9438_11988 = G__11993;\nchunk__9439_11989 = G__11994;\ncount__9440_11990 = G__11995;\ni__9441_11991 = G__11996;\ncontinue;\n}\n} else\n{var temp__4092__auto___11997 = cljs.core.seq.call(null,seq__9438_11988);if(temp__4092__auto___11997)\n{var seq__9438_11998__$1 = temp__4092__auto___11997;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9438_11998__$1))\n{var c__5632__auto___11999 = cljs.core.chunk_first.call(null,seq__9438_11998__$1);{\nvar G__12000 = cljs.core.chunk_rest.call(null,seq__9438_11998__$1);\nvar G__12001 = c__5632__auto___11999;\nvar G__12002 = cljs.core.count.call(null,c__5632__auto___11999);\nvar G__12003 = 0;\nseq__9438_11988 = G__12000;\nchunk__9439_11989 = G__12001;\ncount__9440_11990 = G__12002;\ni__9441_11991 = G__12003;\ncontinue;\n}\n} else\n{var arg__7510__auto___12004 = cljs.core.first.call(null,seq__9438_11998__$1);a__7509__auto__.push(arg__7510__auto___12004);\n{\nvar G__12005 = cljs.core.next.call(null,seq__9438_11998__$1);\nvar G__12006 = null;\nvar G__12007 = 0;\nvar G__12008 = 0;\nseq__9438_11988 = G__12005;\nchunk__9439_11989 = G__12006;\ncount__9440_11990 = G__12007;\ni__9441_11991 = G__12008;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.polyline.apply(null,a__7509__auto__);\n};\nvar polyline = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn polyline__delegate.call(this,args__7508__auto__);};\npolyline.cljs$lang$maxFixedArity = 0;\npolyline.cljs$lang$applyTo = (function (arglist__12009){\nvar args__7508__auto__ = cljs.core.seq(arglist__12009);\nreturn polyline__delegate(args__7508__auto__);\n});\npolyline.cljs$core$IFn$_invoke$arity$variadic = polyline__delegate;\nreturn polyline;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.rect = (function() { \nvar rect__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9446_12010 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9447_12011 = null;var count__9448_12012 = 0;var i__9449_12013 = 0;while(true){\nif((i__9449_12013 < count__9448_12012))\n{var arg__7510__auto___12014 = cljs.core._nth.call(null,chunk__9447_12011,i__9449_12013);a__7509__auto__.push(arg__7510__auto___12014);\n{\nvar G__12015 = seq__9446_12010;\nvar G__12016 = chunk__9447_12011;\nvar G__12017 = count__9448_12012;\nvar G__12018 = (i__9449_12013 + 1);\nseq__9446_12010 = G__12015;\nchunk__9447_12011 = G__12016;\ncount__9448_12012 = G__12017;\ni__9449_12013 = G__12018;\ncontinue;\n}\n} else\n{var temp__4092__auto___12019 = cljs.core.seq.call(null,seq__9446_12010);if(temp__4092__auto___12019)\n{var seq__9446_12020__$1 = temp__4092__auto___12019;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9446_12020__$1))\n{var c__5632__auto___12021 = cljs.core.chunk_first.call(null,seq__9446_12020__$1);{\nvar G__12022 = cljs.core.chunk_rest.call(null,seq__9446_12020__$1);\nvar G__12023 = c__5632__auto___12021;\nvar G__12024 = cljs.core.count.call(null,c__5632__auto___12021);\nvar G__12025 = 0;\nseq__9446_12010 = G__12022;\nchunk__9447_12011 = G__12023;\ncount__9448_12012 = G__12024;\ni__9449_12013 = G__12025;\ncontinue;\n}\n} else\n{var arg__7510__auto___12026 = cljs.core.first.call(null,seq__9446_12020__$1);a__7509__auto__.push(arg__7510__auto___12026);\n{\nvar G__12027 = cljs.core.next.call(null,seq__9446_12020__$1);\nvar G__12028 = null;\nvar G__12029 = 0;\nvar G__12030 = 0;\nseq__9446_12010 = G__12027;\nchunk__9447_12011 = G__12028;\ncount__9448_12012 = G__12029;\ni__9449_12013 = G__12030;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.rect.apply(null,a__7509__auto__);\n};\nvar rect = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn rect__delegate.call(this,args__7508__auto__);};\nrect.cljs$lang$maxFixedArity = 0;\nrect.cljs$lang$applyTo = (function (arglist__12031){\nvar args__7508__auto__ = cljs.core.seq(arglist__12031);\nreturn rect__delegate(args__7508__auto__);\n});\nrect.cljs$core$IFn$_invoke$arity$variadic = rect__delegate;\nreturn rect;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.svg = (function() { \nvar svg__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__9454_12032 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__9455_12033 = null;var count__9456_12034 = 0;var i__9457_12035 = 0;while(true){\nif((i__9457_12035 < count__9456_12034))\n{var arg__7510__auto___12036 = cljs.core._nth.call(null,chunk__9455_12033,i__9457_12035);a__7509__auto__.push(arg__7510__auto___12036);\n{\nvar G__12037 = seq__9454_12032;\nvar G__12038 = chunk__9455_12033;\nvar G__12039 = count__9456_12034;\nvar G__12040 = (i__9457_12035 + 1);\nseq__9454_12032 = G__12037;\nchunk__9455_12033 = G__12038;\ncount__9456_12034 = G__12039;\ni__9457_12035 = G__12040;\ncontinue;\n}\n} else\n{var temp__4092__auto___12041 = cljs.core.seq.call(null,seq__9454_12032);if(temp__4092__auto___12041)\n{var seq__9454_12042__$1 = temp__4092__auto___12041;if(cljs.core.chunked_seq_QMARK_.call(null,seq__9454_12042__$1))\n{var c__5632__auto___12043 = cljs.core.chunk_first.call(null,seq__9454_12042__$1);{\nvar G__12044 = cljs.core.chunk_rest.call(null,seq__9454_12042__$1);\nvar G__12045 = c__5632__auto___12043;\nvar G__12046 = cljs.core.count.call(null,c__5632__auto___12043);\nvar G__12047 = 0;\nseq__9454_12032 = G__12044;\nchunk__9455_12033 = G__12045;\ncount__9456_12034 = G__12046;\ni__9457_12035 = G__12047;\ncontinue;\n}\n} else\n{var arg__7510__auto___12048 = cljs.core.first.call(null,seq__9454_12042__$1);a__7509__auto__.push(arg__7510__auto___12048);\n{\nvar G__12049 = cljs.core.next.call(null,seq__9454_12042__$1);\nvar G__12050 = null;\nvar G__12051 = 0;\nvar G__12052 = 0;\nseq__9454_12032 = G__12049;\nchunk__9455_12033 = G__12050;\ncount__9456_12034 = G__12051;\ni__9457_12035 = G__12052;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.svg.apply(null,a__7509__auto__);\n};\nvar svg = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn svg__delegate.call(this,args__7508__auto__);};\nsvg.cljs$lang$maxFixedArity = 0;\nsvg.cljs$lang$applyTo = (function (arglist__12053){\nvar args__7508__auto__ = cljs.core.seq(arglist__12053);\nreturn svg__delegate(args__7508__auto__);\n});\nsvg.cljs$core$IFn$_invoke$arity$variadic = svg__delegate;\nreturn svg;\n})()\n;\n/**\n* @param {...*} var_args\n*/\nquiescent.dom.text = (function() { \nvar text__delegate = function (args__7508__auto__){var a__7509__auto__ = [];a__7509__auto__.push(quiescent.js_props.call(null,cljs.core.first.call(null,args__7508__auto__)));\nvar seq__8766_12054 = cljs.core.seq.call(null,cljs.core.rest.call(null,args__7508__auto__));var chunk__8767_12055 = null;var count__8768_12056 = 0;var i__8769_12057 = 0;while(true){\nif((i__8769_12057 < count__8768_12056))\n{var arg__7510__auto___12058 = cljs.core._nth.call(null,chunk__8767_12055,i__8769_12057);a__7509__auto__.push(arg__7510__auto___12058);\n{\nvar G__12059 = seq__8766_12054;\nvar G__12060 = chunk__8767_12055;\nvar G__12061 = count__8768_12056;\nvar G__12062 = (i__8769_12057 + 1);\nseq__8766_12054 = G__12059;\nchunk__8767_12055 = G__12060;\ncount__8768_12056 = G__12061;\ni__8769_12057 = G__12062;\ncontinue;\n}\n} else\n{var temp__4092__auto___12063 = cljs.core.seq.call(null,seq__8766_12054);if(temp__4092__auto___12063)\n{var seq__8766_12064__$1 = temp__4092__auto___12063;if(cljs.core.chunked_seq_QMARK_.call(null,seq__8766_12064__$1))\n{var c__5632__auto___12065 = cljs.core.chunk_first.call(null,seq__8766_12064__$1);{\nvar G__12066 = cljs.core.chunk_rest.call(null,seq__8766_12064__$1);\nvar G__12067 = c__5632__auto___12065;\nvar G__12068 = cljs.core.count.call(null,c__5632__auto___12065);\nvar G__12069 = 0;\nseq__8766_12054 = G__12066;\nchunk__8767_12055 = G__12067;\ncount__8768_12056 = G__12068;\ni__8769_12057 = G__12069;\ncontinue;\n}\n} else\n{var arg__7510__auto___12070 = cljs.core.first.call(null,seq__8766_12064__$1);a__7509__auto__.push(arg__7510__auto___12070);\n{\nvar G__12071 = cljs.core.next.call(null,seq__8766_12064__$1);\nvar G__12072 = null;\nvar G__12073 = 0;\nvar G__12074 = 0;\nseq__8766_12054 = G__12071;\nchunk__8767_12055 = G__12072;\ncount__8768_12056 = G__12073;\ni__8769_12057 = G__12074;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn React.DOM.text.apply(null,a__7509__auto__);\n};\nvar text = function (var_args){\nvar args__7508__auto__ = null;if (arguments.length > 0) {\n  args__7508__auto__ = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);} \nreturn text__delegate.call(this,args__7508__auto__);};\ntext.cljs$lang$maxFixedArity = 0;\ntext.cljs$lang$applyTo = (function (arglist__12075){\nvar args__7508__auto__ = cljs.core.seq(arglist__12075);\nreturn text__delegate(args__7508__auto__);\n});\ntext.cljs$core$IFn$_invoke$arity$variadic = text__delegate;\nreturn text;\n})()\n;\nquiescent.dom.defined_tags = cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,\"colgroup\",\"colgroup\",4672673905),new cljs.core.Keyword(null,\"path\",\"path\",1017337751),new cljs.core.Keyword(null,\"menuitem\",\"menuitem\",4705729636),new cljs.core.Keyword(null,\"optgroup\",\"optgroup\",933131038),new cljs.core.Keyword(null,\"tbody\",\"tbody\",1124062088),new cljs.core.Keyword(null,\"html\",\"html\",1017117469),new cljs.core.Keyword(null,\"dfn\",\"dfn\",1014003614),new cljs.core.Keyword(null,\"sub\",\"sub\",1014018482),new cljs.core.Keyword(null,\"text\",\"text\",1017460895),new cljs.core.Keyword(null,\"strong\",\"strong\",4416891401),new cljs.core.Keyword(null,\"data\",\"data\",1016980252),new cljs.core.Keyword(null,\"progress\",\"progress\",4307793311),new cljs.core.Keyword(null,\"polyline\",\"polyline\",1575843122),new cljs.core.Keyword(null,\"ul\",\"ul\",1013907977),new cljs.core.Keyword(null,\"img\",\"img\",1014008629),new cljs.core.Keyword(null,\"em\",\"em\",1013907482),new cljs.core.Keyword(null,\"rt\",\"rt\",1013907892),new cljs.core.Keyword(null,\"details\",\"details\",2571625908),new cljs.core.Keyword(null,\"fieldset\",\"fieldset\",4379882650),new cljs.core.Keyword(null,\"keygen\",\"keygen\",4174205955),new cljs.core.Keyword(null,\"map\",\"map\",1014012110),new cljs.core.Keyword(null,\"div\",\"div\",1014003715),new cljs.core.Keyword(null,\"video\",\"video\",1126107117),new cljs.core.Keyword(null,\"link\",\"link\",1017226092),new cljs.core.Keyword(null,\"dt\",\"dt\",1013907458),new cljs.core.Keyword(null,\"ol\",\"ol\",1013907791),new cljs.core.Keyword(null,\"form\",\"form\",1017053238),new cljs.core.Keyword(null,\"menu\",\"menu\",1017252049),new cljs.core.Keyword(null,\"a\",\"a\",1013904339),new cljs.core.Keyword(null,\"del\",\"del\",1014003581),new cljs.core.Keyword(null,\"hr\",\"hr\",1013907580),new cljs.core.Keyword(null,\"header\",\"header\",4087600639),new cljs.core.Keyword(null,\"param\",\"param\",1120340991),new cljs.core.Keyword(null,\"head\",\"head\",1017102674),new cljs.core.Keyword(null,\"area\",\"area\",1016906751),new cljs.core.Keyword(null,\"legend\",\"legend\",4202297215),new cljs.core.Keyword(null,\"meter\",\"meter\",1117691643),new cljs.core.Keyword(null,\"dl\",\"dl\",1013907450),new cljs.core.Keyword(null,\"figcaption\",\"figcaption\",1313617108),new cljs.core.Keyword(null,\"tfoot\",\"tfoot\",1124181588),new cljs.core.Keyword(null,\"blockquote\",\"blockquote\",2317106561),new cljs.core.Keyword(null,\"b\",\"b\",1013904340),new cljs.core.Keyword(null,\"abbr\",\"abbr\",1016891299),new cljs.core.Keyword(null,\"caption\",\"caption\",1566477656),new cljs.core.Keyword(null,\"style\",\"style\",1123684643),new cljs.core.Keyword(null,\"bdi\",\"bdi\",1014001625),new cljs.core.Keyword(null,\"g\",\"g\",1013904345),new cljs.core.Keyword(null,\"ruby\",\"ruby\",1017416012),new cljs.core.Keyword(null,\"rp\",\"rp\",1013907888),new cljs.core.Keyword(null,\"figure\",\"figure\",4034231894),new cljs.core.Keyword(null,\"svg\",\"svg\",1014018518),new cljs.core.Keyword(null,\"rect\",\"rect\",1017400662),new cljs.core.Keyword(null,\"embed\",\"embed\",1110524491),new cljs.core.Keyword(null,\"button\",\"button\",3931183780),new cljs.core.Keyword(null,\"canvas\",\"canvas\",3941165258),new cljs.core.Keyword(null,\"section\",\"section\",2984145495),new cljs.core.Keyword(null,\"object\",\"object\",4285503153),new cljs.core.Keyword(null,\"title\",\"title\",1124275658),new cljs.core.Keyword(null,\"output\",\"output\",4303359091),new cljs.core.Keyword(null,\"audio\",\"audio\",1107070792),new cljs.core.Keyword(null,\"col\",\"col\",1014002930),new cljs.core.Keyword(null,\"dd\",\"dd\",1013907442),new cljs.core.Keyword(null,\"bdo\",\"bdo\",1014001631),new cljs.core.Keyword(null,\"cite\",\"cite\",1016958153),new cljs.core.Keyword(null,\"code\",\"code\",1016963423),new cljs.core.Keyword(null,\"kbd\",\"kbd\",1014010207),new cljs.core.Keyword(null,\"big\",\"big\",1014001778),new cljs.core.Keyword(null,\"thead\",\"thead\",1124231110),new cljs.core.Keyword(null,\"i\",\"i\",1013904347),new cljs.core.Keyword(null,\"ins\",\"ins\",1014008672),new cljs.core.Keyword(null,\"base\",\"base\",1016920643),new cljs.core.Keyword(null,\"circle\",\"circle\",3948654658),new cljs.core.Keyword(null,\"br\",\"br\",1013907394),new cljs.core.Keyword(null,\"polygon\",\"polygon\",616384684),new cljs.core.Keyword(null,\"wbr\",\"wbr\",1014021753),new cljs.core.Keyword(null,\"textarea\",\"textarea\",4305627820),new cljs.core.Keyword(null,\"small\",\"small\",1123453049),new cljs.core.Keyword(null,\"main\",\"main\",1017248043),new cljs.core.Keyword(null,\"meta\",\"meta\",1017252215),new cljs.core.Keyword(null,\"aside\",\"aside\",1107015850),new cljs.core.Keyword(null,\"article\",\"article\",4576493672),new cljs.core.Keyword(null,\"noscript\",\"noscript\",2565455166),new cljs.core.Keyword(null,\"h4\",\"h4\",1013907518),new cljs.core.Keyword(null,\"h3\",\"h3\",1013907517),new cljs.core.Keyword(null,\"script\",\"script\",4401185853),new cljs.core.Keyword(null,\"track\",\"track\",1124525245),new cljs.core.Keyword(null,\"time\",\"time\",1017464383),new cljs.core.Keyword(null,\"h2\",\"h2\",1013907516),new cljs.core.Keyword(null,\"mark\",\"mark\",1017248319),new cljs.core.Keyword(null,\"h5\",\"h5\",1013907519),new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.Keyword(null,\"input\",\"input\",1114262332),new cljs.core.Keyword(null,\"sup\",\"sup\",1014018496),new cljs.core.Keyword(null,\"h1\",\"h1\",1013907515),new cljs.core.Keyword(null,\"table\",\"table\",1124020032),new cljs.core.Keyword(null,\"th\",\"th\",1013907942),new cljs.core.Keyword(null,\"label\",\"label\",1116631654),new cljs.core.Keyword(null,\"h6\",\"h6\",1013907520),new cljs.core.Keyword(null,\"line\",\"line\",1017226086),new cljs.core.Keyword(null,\"pre\",\"pre\",1014015509),new cljs.core.Keyword(null,\"nav\",\"nav\",1014013077),new cljs.core.Keyword(null,\"address\",\"address\",4161179494),new cljs.core.Keyword(null,\"u\",\"u\",1013904359),new cljs.core.Keyword(null,\"body\",\"body\",1016933652),new cljs.core.Keyword(null,\"option\",\"option\",4298734567),new cljs.core.Keyword(null,\"datalist\",\"datalist\",2803674810),new cljs.core.Keyword(null,\"q\",\"q\",1013904355),new cljs.core.Keyword(null,\"samp\",\"samp\",1017426915),new cljs.core.Keyword(null,\"source\",\"source\",4412365709),new cljs.core.Keyword(null,\"summary\",\"summary\",3451231000),new cljs.core.Keyword(null,\"footer\",\"footer\",4040009997),new cljs.core.Keyword(null,\"select\",\"select\",4402849902),new cljs.core.Keyword(null,\"var\",\"var\",1014020761),new cljs.core.Keyword(null,\"td\",\"td\",1013907938),new cljs.core.Keyword(null,\"li\",\"li\",1013907695),new cljs.core.Keyword(null,\"p\",\"p\",1013904354),new cljs.core.Keyword(null,\"tr\",\"tr\",1013907952),new cljs.core.Keyword(null,\"s\",\"s\",1013904357),new cljs.core.Keyword(null,\"iframe\",\"iframe\",4117657110)],[quiescent.dom.colgroup,quiescent.dom.path,quiescent.dom.menuitem,quiescent.dom.optgroup,quiescent.dom.tbody,quiescent.dom.html,quiescent.dom.dfn,quiescent.dom.sub,quiescent.dom.text,quiescent.dom.strong,quiescent.dom.data,quiescent.dom.progress,quiescent.dom.polyline,quiescent.dom.ul,quiescent.dom.img,quiescent.dom.em,quiescent.dom.rt,quiescent.dom.details,quiescent.dom.fieldset,quiescent.dom.keygen,quiescent.dom.map,quiescent.dom.div,quiescent.dom.video,quiescent.dom.link,quiescent.dom.dt,quiescent.dom.ol,quiescent.dom.form,quiescent.dom.menu,quiescent.dom.a,quiescent.dom.del,quiescent.dom.hr,quiescent.dom.header,quiescent.dom.param,quiescent.dom.head,quiescent.dom.area,quiescent.dom.legend,quiescent.dom.meter,quiescent.dom.dl,quiescent.dom.figcaption,quiescent.dom.tfoot,quiescent.dom.blockquote,quiescent.dom.b,quiescent.dom.abbr,quiescent.dom.caption,quiescent.dom.style,quiescent.dom.bdi,quiescent.dom.g,quiescent.dom.ruby,quiescent.dom.rp,quiescent.dom.figure,quiescent.dom.svg,quiescent.dom.rect,quiescent.dom.embed,quiescent.dom.button,quiescent.dom.canvas,quiescent.dom.section,quiescent.dom.object,quiescent.dom.title,quiescent.dom.output,quiescent.dom.audio,quiescent.dom.col,quiescent.dom.dd,quiescent.dom.bdo,quiescent.dom.cite,quiescent.dom.code,quiescent.dom.kbd,quiescent.dom.big,quiescent.dom.thead,quiescent.dom.i,quiescent.dom.ins,quiescent.dom.base,quiescent.dom.circle,quiescent.dom.br,quiescent.dom.polygon,quiescent.dom.wbr,quiescent.dom.textarea,quiescent.dom.small,quiescent.dom.main,quiescent.dom.meta,quiescent.dom.aside,quiescent.dom.article,quiescent.dom.noscript,quiescent.dom.h4,quiescent.dom.h3,quiescent.dom.script,quiescent.dom.track,quiescent.dom.time,quiescent.dom.h2,quiescent.dom.mark,quiescent.dom.h5,quiescent.dom.span,quiescent.dom.input,quiescent.dom.sup,quiescent.dom.h1,quiescent.dom.table,quiescent.dom.th,quiescent.dom.label,quiescent.dom.h6,quiescent.dom.line,quiescent.dom.pre,quiescent.dom.nav,quiescent.dom.address,quiescent.dom.u,quiescent.dom.body,quiescent.dom.option,quiescent.dom.datalist,quiescent.dom.q,quiescent.dom.samp,quiescent.dom.source,quiescent.dom.summary,quiescent.dom.footer,quiescent.dom.select,quiescent.dom.var$,quiescent.dom.td,quiescent.dom.li,quiescent.dom.p,quiescent.dom.tr,quiescent.dom.s,quiescent.dom.iframe]);\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.autocompleter')) {\ngoog.provide('lt.plugins.elm_light.autocompleter');\ngoog.require('cljs.core');\ngoog.require('quiescent.dom');\ngoog.require('quiescent.dom');\ngoog.require('quiescent');\ngoog.require('quiescent');\nlt.plugins.elm_light.autocompleter.find_active = (function find_active(items){return cljs.core.first.call(null,cljs.core.filter.call(null,new cljs.core.Keyword(null,\"active\",\"active\",3885920888),items));\n});\nlt.plugins.elm_light.autocompleter.handle_keypress = (function handle_keypress(p__8484,ev){var map__8487 = p__8484;var map__8487__$1 = ((cljs.core.seq_QMARK_.call(null,map__8487))?cljs.core.apply.call(null,cljs.core.hash_map,map__8487):map__8487);var props = map__8487__$1;var on_cancel = cljs.core.get.call(null,map__8487__$1,new cljs.core.Keyword(null,\"on-cancel\",\"on-cancel\",600765850));var on_select = cljs.core.get.call(null,map__8487__$1,new cljs.core.Keyword(null,\"on-select\",\"on-select\",1062468636));var on_down = cljs.core.get.call(null,map__8487__$1,new cljs.core.Keyword(null,\"on-down\",\"on-down\",3936419650));var on_up = cljs.core.get.call(null,map__8487__$1,new cljs.core.Keyword(null,\"on-up\",\"on-up\",1119739067));var kk = ev.which;var G__8488 = kk;if(cljs.core._EQ_.call(null,27,G__8488))\n{ev.preventDefault();\nev.target.value = \"\";\nreturn on_cancel.call(null);\n} else\n{if(cljs.core._EQ_.call(null,13,G__8488))\n{ev.preventDefault();\nvar temp__4092__auto___8504 = lt.plugins.elm_light.autocompleter.find_active.call(null,new cljs.core.Keyword(null,\"items\",\"items\",1114430258).cljs$core$IFn$_invoke$arity$1(props));if(cljs.core.truth_(temp__4092__auto___8504))\n{var active_8505 = temp__4092__auto___8504;ev.target.value = new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(active_8505);\n} else\n{}\nreturn on_select.call(null);\n} else\n{if(cljs.core._EQ_.call(null,40,G__8488))\n{ev.preventDefault();\nreturn on_down.call(null);\n} else\n{if(cljs.core._EQ_.call(null,38,G__8488))\n{ev.preventDefault();\nreturn on_up.call(null);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return new cljs.core.Keyword(null,\"default\",\"default\",2558708147);\n} else\n{return null;\n}\n}\n}\n}\n}\n});\n/**\n* \n*/\nlt.plugins.elm_light.autocompleter.AutoCompleteMenu = quiescent.component.call(null,(function (props){var items = new cljs.core.Keyword(null,\"items\",\"items\",1114430258).cljs$core$IFn$_invoke$arity$1(props);var style = ((cljs.core.seq.call(null,items))?null:new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"display\",\"display\",2685668404),\"none\"], null));var item_classes = ((function (items,style){\nreturn (function (p1__8489_SHARP_){return \"autocomplete-dropdown-item row\".concat((cljs.core.truth_(new cljs.core.Keyword(null,\"active\",\"active\",3885920888).cljs$core$IFn$_invoke$arity$1(p1__8489_SHARP_))?\" autocomplete-active\":\"\"));\n});})(items,style))\n;return cljs.core.apply.call(null,quiescent.dom.div,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"onMouseDown\",\"onMouseDown\",1569008442),((function (items,style,item_classes){\nreturn (function (e){e.preventDefault();\nreturn e.stopPropagation();\n});})(items,style,item_classes))\n,new cljs.core.Keyword(null,\"className\",\"className\",1004015509),\"autocomplete-dropdown-menu\",new cljs.core.Keyword(null,\"style\",\"style\",1123684643),style], null),cljs.core.map.call(null,((function (items,style,item_classes){\nreturn (function (item){return quiescent.dom.div.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),item_classes.call(null,item)], null),quiescent.dom.div.call(null,cljs.core.PersistentArrayMap.EMPTY,new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(item)));\n});})(items,style,item_classes))\n,items));\n}));\n/**\n* \n*/\nlt.plugins.elm_light.autocompleter.Adder = quiescent.component.call(null,(function (p__8490){var map__8491 = p__8490;var map__8491__$1 = ((cljs.core.seq_QMARK_.call(null,map__8491))?cljs.core.apply.call(null,cljs.core.hash_map,map__8491):map__8491);var props = map__8491__$1;var disabled = cljs.core.get.call(null,map__8491__$1,new cljs.core.Keyword(null,\"disabled\",\"disabled\",1284845038));var on_add_package = cljs.core.get.call(null,map__8491__$1,new cljs.core.Keyword(null,\"on-add-package\",\"on-add-package\",3601701790));return quiescent.dom.button.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),\"btn\",new cljs.core.Keyword(null,\"disabled\",\"disabled\",1284845038),disabled,new cljs.core.Keyword(null,\"onClick\",\"onClick\",3956969051),((function (map__8491,map__8491__$1,props,disabled,on_add_package){\nreturn (function (){return on_add_package.call(null);\n});})(map__8491,map__8491__$1,props,disabled,on_add_package))\n], null),\"Add package\");\n}));\n/**\n* \n*/\nlt.plugins.elm_light.autocompleter.Versions = quiescent.component.call(null,(function (props){return cljs.core.apply.call(null,quiescent.dom.select,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),\"versions\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(props),new cljs.core.Keyword(null,\"onChange\",\"onChange\",2050678241),(function (p1__8492_SHARP_){return new cljs.core.Keyword(null,\"on-change-version\",\"on-change-version\",822058203).cljs$core$IFn$_invoke$arity$1(props).call(null,p1__8492_SHARP_.target.value);\n})], null),cljs.core.map.call(null,(function (p1__8493_SHARP_){return quiescent.dom.option.call(null,cljs.core.PersistentArrayMap.EMPTY,p1__8493_SHARP_);\n}),new cljs.core.Keyword(null,\"versions\",\"versions\",3323818509).cljs$core$IFn$_invoke$arity$1(props)));\n}));\n/**\n* \n*/\nlt.plugins.elm_light.autocompleter.AutoComplete = quiescent.component.call(null,(function (props){return quiescent.dom.span.call(null,cljs.core.PersistentArrayMap.EMPTY,quiescent.dom.input.call(null,cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,\"onKeyDown\",\"onKeyDown\",1534256180),new cljs.core.Keyword(null,\"name\",\"name\",1017277949),new cljs.core.Keyword(null,\"autoComplete\",\"autoComplete\",4535568250),new cljs.core.Keyword(null,\"onBlur\",\"onBlur\",4295401048),new cljs.core.Keyword(null,\"style\",\"style\",1123684643),new cljs.core.Keyword(null,\"autoFocus\",\"autoFocus\",2651959259),new cljs.core.Keyword(null,\"onChange\",\"onChange\",2050678241),new cljs.core.Keyword(null,\"type\",\"type\",1017479852),new cljs.core.Keyword(null,\"value\",\"value\",1125876963)],[cljs.core.partial.call(null,lt.plugins.elm_light.autocompleter.handle_keypress,props),\"package-search\",\"off\",(function (_){return new cljs.core.Keyword(null,\"on-blur\",\"on-blur\",3936357127).cljs$core$IFn$_invoke$arity$1(props).call(null);\n}),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"width\",\"width\",1127031096),\"250px\"], null),true,(function (ev){return new cljs.core.Keyword(null,\"on-change\",\"on-change\",606853840).cljs$core$IFn$_invoke$arity$1(props).call(null,(ev[\"target\"][\"value\"]));\n}),\"text\",new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(props)])),lt.plugins.elm_light.autocompleter.Versions.call(null,props),lt.plugins.elm_light.autocompleter.Adder.call(null,cljs.core.assoc.call(null,props,new cljs.core.Keyword(null,\"disabled\",\"disabled\",1284845038),(new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(props) == null))),quiescent.dom.div.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),\"autocomplete-dropdown\"], null),lt.plugins.elm_light.autocompleter.AutoCompleteMenu.call(null,props)));\n}));\n}\nif(!lt.util.load.provided_QMARK_('clojure.walk')) {\ngoog.provide('clojure.walk');\ngoog.require('cljs.core');\n/**\n* Traverses form, an arbitrary data structure.  inner and outer are\n* functions.  Applies inner to each element of form, building up a\n* data structure of the same type, then applies outer to the result.\n* Recognizes all Clojure data structures. Consumes seqs as with doall.\n*/\nclojure.walk.walk = (function walk(inner,outer,form){if(cljs.core.seq_QMARK_.call(null,form))\n{return outer.call(null,cljs.core.doall.call(null,cljs.core.map.call(null,inner,form)));\n} else\n{if(cljs.core.coll_QMARK_.call(null,form))\n{return outer.call(null,cljs.core.into.call(null,cljs.core.empty.call(null,form),cljs.core.map.call(null,inner,form)));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return outer.call(null,form);\n} else\n{return null;\n}\n}\n}\n});\n/**\n* Performs a depth-first, post-order traversal of form.  Calls f on\n* each sub-form, uses f's return value in place of the original.\n* Recognizes all Clojure data structures. Consumes seqs as with doall.\n*/\nclojure.walk.postwalk = (function postwalk(f,form){return clojure.walk.walk.call(null,cljs.core.partial.call(null,postwalk,f),f,form);\n});\n/**\n* Like postwalk, but does pre-order traversal.\n*/\nclojure.walk.prewalk = (function prewalk(f,form){return clojure.walk.walk.call(null,cljs.core.partial.call(null,prewalk,f),cljs.core.identity,f.call(null,form));\n});\n/**\n* Recursively transforms all map keys from strings to keywords.\n*/\nclojure.walk.keywordize_keys = (function keywordize_keys(m){var f = (function (p__19817){var vec__19818 = p__19817;var k = cljs.core.nth.call(null,vec__19818,0,null);var v = cljs.core.nth.call(null,vec__19818,1,null);if(typeof k === 'string')\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.keyword.call(null,k),v], null);\n} else\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [k,v], null);\n}\n});return clojure.walk.postwalk.call(null,((function (f){\nreturn (function (x){if(cljs.core.map_QMARK_.call(null,x))\n{return cljs.core.into.call(null,cljs.core.PersistentArrayMap.EMPTY,cljs.core.map.call(null,f,x));\n} else\n{return x;\n}\n});})(f))\n,m);\n});\n/**\n* Recursively transforms all map keys from keywords to strings.\n*/\nclojure.walk.stringify_keys = (function stringify_keys(m){var f = (function (p__19821){var vec__19822 = p__19821;var k = cljs.core.nth.call(null,vec__19822,0,null);var v = cljs.core.nth.call(null,vec__19822,1,null);if((k instanceof cljs.core.Keyword))\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.name.call(null,k),v], null);\n} else\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [k,v], null);\n}\n});return clojure.walk.postwalk.call(null,((function (f){\nreturn (function (x){if(cljs.core.map_QMARK_.call(null,x))\n{return cljs.core.into.call(null,cljs.core.PersistentArrayMap.EMPTY,cljs.core.map.call(null,f,x));\n} else\n{return x;\n}\n});})(f))\n,m);\n});\n/**\n* Recursively transforms form by replacing keys in smap with their\n* values.  Like clojure/replace but works on any data structure.  Does\n* replacement at the root of the tree first.\n*/\nclojure.walk.prewalk_replace = (function prewalk_replace(smap,form){return clojure.walk.prewalk.call(null,(function (x){if(cljs.core.contains_QMARK_.call(null,smap,x))\n{return smap.call(null,x);\n} else\n{return x;\n}\n}),form);\n});\n/**\n* Recursively transforms form by replacing keys in smap with their\n* values.  Like clojure/replace but works on any data structure.  Does\n* replacement at the leaves of the tree first.\n*/\nclojure.walk.postwalk_replace = (function postwalk_replace(smap,form){return clojure.walk.postwalk.call(null,(function (x){if(cljs.core.contains_QMARK_.call(null,smap,x))\n{return smap.call(null,x);\n} else\n{return x;\n}\n}),form);\n});\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.graph')) {\ngoog.provide('lt.plugins.elm_light.graph');\ngoog.require('cljs.core');\ngoog.require('clojure.set');\ngoog.require('lt.objs.files');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.tabs');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('clojure.string');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('clojure.set');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('fetch.core');\ngoog.require('fetch.core');\nlt.plugins.elm_light.graph.dagreD3 = require(lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node_modules/dagre-d3\"));\nlt.plugins.elm_light.graph.d3 = require(lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node_modules/d3\"));\nlt.plugins.elm_light.graph.lower = (function lower(term){return clojure.string.lower_case.call(null,term);\n});\nlt.plugins.elm_light.graph.find_package_by_name = (function find_package_by_name(this$,name){return cljs.core.some.call(null,(function (p1__12486_SHARP_){if(cljs.core._EQ_.call(null,lt.plugins.elm_light.graph.lower.call(null,new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(p1__12486_SHARP_)),lt.plugins.elm_light.graph.lower.call(null,name)))\n{return p1__12486_SHARP_;\n} else\n{return null;\n}\n}),new cljs.core.Keyword(null,\"all-packages\",\"all-packages\",1123981067).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));\n});\nlt.plugins.elm_light.graph.dependency_graph_ui = (function dependency_graph_ui(this$){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.graph\",\"div.graph\",2030351651),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.dependency-graph\",\"div.dependency-graph\",3039800187),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"svg:svg\",\"svg:svg\",3472817088),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"width\",\"width\",1127031096),\"650\",new cljs.core.Keyword(null,\"height\",\"height\",4087841945),\"680\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"svg:g\",\"svg:g\",1123725379),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"transform\",\"transform\",2066570974),\"translate(20,20)\"], null)], null)], null)], null)], null));var seq__12493_12544 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__12494_12545 = null;var count__12495_12546 = 0;var i__12496_12547 = 0;while(true){\nif((i__12496_12547 < count__12495_12546))\n{var vec__12497_12548 = cljs.core._nth.call(null,chunk__12494_12545,i__12496_12547);var ev__6318__auto___12549 = cljs.core.nth.call(null,vec__12497_12548,0,null);var func__6319__auto___12550 = cljs.core.nth.call(null,vec__12497_12548,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___12549,func__6319__auto___12550);\n{\nvar G__12551 = seq__12493_12544;\nvar G__12552 = chunk__12494_12545;\nvar G__12553 = count__12495_12546;\nvar G__12554 = (i__12496_12547 + 1);\nseq__12493_12544 = G__12551;\nchunk__12494_12545 = G__12552;\ncount__12495_12546 = G__12553;\ni__12496_12547 = G__12554;\ncontinue;\n}\n} else\n{var temp__4092__auto___12555 = cljs.core.seq.call(null,seq__12493_12544);if(temp__4092__auto___12555)\n{var seq__12493_12556__$1 = temp__4092__auto___12555;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12493_12556__$1))\n{var c__5632__auto___12557 = cljs.core.chunk_first.call(null,seq__12493_12556__$1);{\nvar G__12558 = cljs.core.chunk_rest.call(null,seq__12493_12556__$1);\nvar G__12559 = c__5632__auto___12557;\nvar G__12560 = cljs.core.count.call(null,c__5632__auto___12557);\nvar G__12561 = 0;\nseq__12493_12544 = G__12558;\nchunk__12494_12545 = G__12559;\ncount__12495_12546 = G__12560;\ni__12496_12547 = G__12561;\ncontinue;\n}\n} else\n{var vec__12498_12562 = cljs.core.first.call(null,seq__12493_12556__$1);var ev__6318__auto___12563 = cljs.core.nth.call(null,vec__12498_12562,0,null);var func__6319__auto___12564 = cljs.core.nth.call(null,vec__12498_12562,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___12563,func__6319__auto___12564);\n{\nvar G__12565 = cljs.core.next.call(null,seq__12493_12556__$1);\nvar G__12566 = null;\nvar G__12567 = 0;\nvar G__12568 = 0;\nseq__12493_12544 = G__12565;\nchunk__12494_12545 = G__12566;\ncount__12495_12546 = G__12567;\ni__12496_12547 = G__12568;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.graph\",\"dependency-graph\",\"lt.plugins.elm-light.graph/dependency-graph\",2371711049),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elm.graph.dependency\",\"elm.graph.dependency\",658564005)], null),new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"Dependency graph\",new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){lt.plugins.elm_light.utils.fetch_all_packages.call(null,(function (p1__12499_SHARP_){return lt.object.merge_BANG_.call(null,this$,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"all-packages\",\"all-packages\",1123981067),p1__12499_SHARP_], null));\n}));\nreturn lt.plugins.elm_light.graph.dependency_graph_ui.call(null,this$);\n}));\nlt.plugins.elm_light.graph.__BEH__on_close_destroy = (function __BEH__on_close_destroy(this$){var temp__4092__auto___12569 = new cljs.core.Keyword(\"lt.objs.tabs\",\"tabset\",\"lt.objs.tabs/tabset\",3378091779).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$));if(cljs.core.truth_(temp__4092__auto___12569))\n{var ts_12570 = temp__4092__auto___12569;if(cljs.core._EQ_.call(null,cljs.core.count.call(null,new cljs.core.Keyword(null,\"objs\",\"objs\",1017308622).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ts_12570))),1))\n{lt.objs.tabs.rem_tabset.call(null,ts_12570);\n} else\n{}\n} else\n{}\nreturn lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"destroy\",\"destroy\",2571277164));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.graph\",\"on-close-destroy\",\"lt.plugins.elm-light.graph/on-close-destroy\",4331265958),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.graph.__BEH__on_close_destroy,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"close\",\"close\",1108660586),null], null), null));\nlt.plugins.elm_light.graph.select_values = cljs.core.comp.call(null,cljs.core.vals,cljs.core.select_keys);\nlt.plugins.elm_light.graph.dep_id = (function dep_id(dep){return clojure.string.join.call(null,\":\",lt.plugins.elm_light.graph.select_values.call(null,dep,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"version\",\"version\",1365512266)], null)));\n});\nlt.plugins.elm_light.graph.node_label = (function node_label(x){return {\"label\": [cljs.core.str(\"<div class='graph-label\"),cljs.core.str((cljs.core.truth_(new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(x))?\"'\":\" error'\")),cljs.core.str(\" title='\"),cljs.core.str((function (){var or__4884__auto__ = new cljs.core.Keyword(null,\"summary\",\"summary\",3451231000).cljs$core$IFn$_invoke$arity$1(x);if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return lt.plugins.elm_light.graph.dep_id.call(null,x);\n}\n})()),cljs.core.str(\"'>\"),cljs.core.str(new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(x)),cljs.core.str(\"<br/>\"),cljs.core.str(new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(x)),cljs.core.str(\"</div>\")].join(''), \"labelType\": \"html\", \"style\": (cljs.core.truth_(new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(x))?null:\"fill: #73404c\"), \"shape\": (function (){var temp__4090__auto__ = new cljs.core.Keyword(null,\"shape\",\"shape\",1123304211).cljs$core$IFn$_invoke$arity$1(x);if(cljs.core.truth_(temp__4090__auto__))\n{var shape = temp__4090__auto__;return shape;\n} else\n{return \"rect\";\n}\n})()};\n});\nlt.plugins.elm_light.graph.create_graph = (function create_graph(data){var g = (new lt.plugins.elm_light.graph.dagreD3.graphlib.Graph()).setGraph({});var seq__12508_12571 = cljs.core.seq.call(null,new cljs.core.Keyword(null,\"nodes\",\"nodes\",1118897699).cljs$core$IFn$_invoke$arity$1(data));var chunk__12509_12572 = null;var count__12510_12573 = 0;var i__12511_12574 = 0;while(true){\nif((i__12511_12574 < count__12510_12573))\n{var x_12575 = cljs.core._nth.call(null,chunk__12509_12572,i__12511_12574);g.setNode(lt.plugins.elm_light.graph.dep_id.call(null,x_12575),lt.plugins.elm_light.graph.node_label.call(null,x_12575));\n{\nvar G__12576 = seq__12508_12571;\nvar G__12577 = chunk__12509_12572;\nvar G__12578 = count__12510_12573;\nvar G__12579 = (i__12511_12574 + 1);\nseq__12508_12571 = G__12576;\nchunk__12509_12572 = G__12577;\ncount__12510_12573 = G__12578;\ni__12511_12574 = G__12579;\ncontinue;\n}\n} else\n{var temp__4092__auto___12580 = cljs.core.seq.call(null,seq__12508_12571);if(temp__4092__auto___12580)\n{var seq__12508_12581__$1 = temp__4092__auto___12580;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12508_12581__$1))\n{var c__5632__auto___12582 = cljs.core.chunk_first.call(null,seq__12508_12581__$1);{\nvar G__12583 = cljs.core.chunk_rest.call(null,seq__12508_12581__$1);\nvar G__12584 = c__5632__auto___12582;\nvar G__12585 = cljs.core.count.call(null,c__5632__auto___12582);\nvar G__12586 = 0;\nseq__12508_12571 = G__12583;\nchunk__12509_12572 = G__12584;\ncount__12510_12573 = G__12585;\ni__12511_12574 = G__12586;\ncontinue;\n}\n} else\n{var x_12587 = cljs.core.first.call(null,seq__12508_12581__$1);g.setNode(lt.plugins.elm_light.graph.dep_id.call(null,x_12587),lt.plugins.elm_light.graph.node_label.call(null,x_12587));\n{\nvar G__12588 = cljs.core.next.call(null,seq__12508_12581__$1);\nvar G__12589 = null;\nvar G__12590 = 0;\nvar G__12591 = 0;\nseq__12508_12571 = G__12588;\nchunk__12509_12572 = G__12589;\ncount__12510_12573 = G__12590;\ni__12511_12574 = G__12591;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nvar seq__12512_12592 = cljs.core.seq.call(null,new cljs.core.Keyword(null,\"edges\",\"edges\",1110261192).cljs$core$IFn$_invoke$arity$1(data));var chunk__12513_12593 = null;var count__12514_12594 = 0;var i__12515_12595 = 0;while(true){\nif((i__12515_12595 < count__12514_12594))\n{var x_12596 = cljs.core._nth.call(null,chunk__12513_12593,i__12515_12595);g.setEdge(new cljs.core.Keyword(null,\"a\",\"a\",1013904339).cljs$core$IFn$_invoke$arity$1(x_12596),new cljs.core.Keyword(null,\"b\",\"b\",1013904340).cljs$core$IFn$_invoke$arity$1(x_12596),{\"style\": (cljs.core.truth_(new cljs.core.Keyword(null,\"transitive\",\"transitive\",3584713111).cljs$core$IFn$_invoke$arity$1(x_12596))?\"stroke-dasharray: 5, 5;\":null), \"label\": new cljs.core.Keyword(null,\"label\",\"label\",1116631654).cljs$core$IFn$_invoke$arity$1(x_12596)});\n{\nvar G__12597 = seq__12512_12592;\nvar G__12598 = chunk__12513_12593;\nvar G__12599 = count__12514_12594;\nvar G__12600 = (i__12515_12595 + 1);\nseq__12512_12592 = G__12597;\nchunk__12513_12593 = G__12598;\ncount__12514_12594 = G__12599;\ni__12515_12595 = G__12600;\ncontinue;\n}\n} else\n{var temp__4092__auto___12601 = cljs.core.seq.call(null,seq__12512_12592);if(temp__4092__auto___12601)\n{var seq__12512_12602__$1 = temp__4092__auto___12601;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12512_12602__$1))\n{var c__5632__auto___12603 = cljs.core.chunk_first.call(null,seq__12512_12602__$1);{\nvar G__12604 = cljs.core.chunk_rest.call(null,seq__12512_12602__$1);\nvar G__12605 = c__5632__auto___12603;\nvar G__12606 = cljs.core.count.call(null,c__5632__auto___12603);\nvar G__12607 = 0;\nseq__12512_12592 = G__12604;\nchunk__12513_12593 = G__12605;\ncount__12514_12594 = G__12606;\ni__12515_12595 = G__12607;\ncontinue;\n}\n} else\n{var x_12608 = cljs.core.first.call(null,seq__12512_12602__$1);g.setEdge(new cljs.core.Keyword(null,\"a\",\"a\",1013904339).cljs$core$IFn$_invoke$arity$1(x_12608),new cljs.core.Keyword(null,\"b\",\"b\",1013904340).cljs$core$IFn$_invoke$arity$1(x_12608),{\"style\": (cljs.core.truth_(new cljs.core.Keyword(null,\"transitive\",\"transitive\",3584713111).cljs$core$IFn$_invoke$arity$1(x_12608))?\"stroke-dasharray: 5, 5;\":null), \"label\": new cljs.core.Keyword(null,\"label\",\"label\",1116631654).cljs$core$IFn$_invoke$arity$1(x_12608)});\n{\nvar G__12609 = cljs.core.next.call(null,seq__12512_12602__$1);\nvar G__12610 = null;\nvar G__12611 = 0;\nvar G__12612 = 0;\nseq__12512_12592 = G__12609;\nchunk__12513_12593 = G__12610;\ncount__12514_12594 = G__12611;\ni__12515_12595 = G__12612;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn g;\n});\nlt.plugins.elm_light.graph.d3_sel = (function d3_sel(selector){console.log(lt.plugins.elm_light.graph.d3.select(selector));\nreturn lt.plugins.elm_light.graph.d3.select(selector);\n});\nlt.plugins.elm_light.graph.dimensions = (function dimensions(this$){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"w\",\"w\",1013904361),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)).clientWidth,new cljs.core.Keyword(null,\"h\",\"h\",1013904346),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)).clientHeight], null);\n});\nlt.plugins.elm_light.graph.init_zoom = (function init_zoom(svg,g){var zoom = lt.plugins.elm_light.graph.d3.behavior.zoom().on(\"zoom\",(function (){return g.attr(\"transform\",[cljs.core.str(\"translate(\"),cljs.core.str(lt.plugins.elm_light.graph.d3.event.translate),cljs.core.str(\")\"),cljs.core.str(\"scale(\"),cljs.core.str(lt.plugins.elm_light.graph.d3.event.scale),cljs.core.str(\")\")].join(''));\n}));return svg.call(zoom);\n});\nlt.plugins.elm_light.graph.resize_graph = (function resize_graph(this$,svg){var dim = lt.plugins.elm_light.graph.dimensions.call(null,this$);svg.attr(\"width\",(new cljs.core.Keyword(null,\"w\",\"w\",1013904361).cljs$core$IFn$_invoke$arity$1(dim) + 20));\nreturn svg.attr(\"height\",(new cljs.core.Keyword(null,\"h\",\"h\",1013904346).cljs$core$IFn$_invoke$arity$1(dim) + 20));\n});\nlt.plugins.elm_light.graph.__BEH__on_render = (function __BEH__on_render(this$){var svg = lt.plugins.elm_light.graph.d3.select(\"svg\");var g = svg.select(\"g\");var renderer = lt.plugins.elm_light.graph.dagreD3.render();renderer.call(null,g,lt.plugins.elm_light.graph.create_graph.call(null,new cljs.core.Keyword(null,\"data\",\"data\",1016980252).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))));\nlt.plugins.elm_light.graph.init_zoom.call(null,svg,g);\nreturn lt.plugins.elm_light.graph.resize_graph.call(null,this$,svg);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.graph\",\"on-render\",\"lt.plugins.elm-light.graph/on-render\",4390043473),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.graph.__BEH__on_render,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm render dependencies\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.graph.render\",\"elm.graph.render\",2076182000),null], null), null));\nlt.plugins.elm_light.graph.get_package_json = (function get_package_json(dep,callback){var url = [cljs.core.str(\"http://package.elm-lang.org/packages/\"),cljs.core.str(new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(dep)),cljs.core.str(\"/\"),cljs.core.str(new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(dep)),cljs.core.str(\"/\"),cljs.core.str(\"elm-package.json\")].join('');return fetch.core.xhr.call(null,url,cljs.core.PersistentArrayMap.EMPTY,((function (url){\nreturn (function (data){return callback.call(null,cljs.core.js__GT_clj.call(null,JSON.parse(data),new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672),true));\n});})(url))\n);\n});\nlt.plugins.elm_light.graph.add_edges_for_dep = (function add_edges_for_dep(this$,origin,pkg_json){var temp__4092__auto__ = cljs.core.seq.call(null,cljs.core.map.call(null,(function (dep){return new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"a\",\"a\",1013904339),lt.plugins.elm_light.graph.dep_id.call(null,origin),new cljs.core.Keyword(null,\"b\",\"b\",1013904340),lt.plugins.elm_light.graph.dep_id.call(null,dep),new cljs.core.Keyword(null,\"transitive\",\"transitive\",3584713111),true,new cljs.core.Keyword(null,\"label\",\"label\",1116631654),new cljs.core.Keyword(null,\"range\",\"range\",1122184367).cljs$core$IFn$_invoke$arity$1(dep)], null);\n}),cljs.core.map.call(null,(function (p__12520){var vec__12521 = p__12520;var k = cljs.core.nth.call(null,vec__12521,0,null);var v = cljs.core.nth.call(null,vec__12521,1,null);return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"range\",\"range\",1122184367),new cljs.core.Keyword(null,\"version\",\"version\",1365512266)],[lt.plugins.elm_light.utils.nskw__GT_name.call(null,k),v,new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(cljs.core.some.call(null,((function (vec__12521,k,v){\nreturn (function (p1__12516_SHARP_){if(cljs.core._EQ_.call(null,lt.plugins.elm_light.utils.nskw__GT_name.call(null,k),new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(p1__12516_SHARP_)))\n{return p1__12516_SHARP_;\n} else\n{return null;\n}\n});})(vec__12521,k,v))\n,new cljs.core.Keyword(null,\"packages\",\"packages\",1764771935).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"data\",\"data\",1016980252).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))))]);\n}),new cljs.core.Keyword(null,\"dependencies\",\"dependencies\",1517678747).cljs$core$IFn$_invoke$arity$1(pkg_json))));if(temp__4092__auto__)\n{var edges = temp__4092__auto__;lt.object.update_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"data\",\"data\",1016980252),new cljs.core.Keyword(null,\"edges\",\"edges\",1110261192)], null),((function (edges,temp__4092__auto__){\nreturn (function (p1__12517_SHARP_){return cljs.core.concat.call(null,p1__12517_SHARP_,edges);\n});})(edges,temp__4092__auto__))\n);\nreturn lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"elm.graph.render\",\"elm.graph.render\",2076182000));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.graph.__BEH__on_get_transitives = (function __BEH__on_get_transitives(this$){var transitives = cljs.core.remove.call(null,new cljs.core.Keyword(null,\"range\",\"range\",1122184367),new cljs.core.Keyword(null,\"packages\",\"packages\",1764771935).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"data\",\"data\",1016980252).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))));lt.object.update_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"data\",\"data\",1016980252),new cljs.core.Keyword(null,\"nodes\",\"nodes\",1118897699)], null),((function (transitives){\nreturn (function (p1__12522_SHARP_){return cljs.core.concat.call(null,p1__12522_SHARP_,transitives);\n});})(transitives))\n);\nlt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"elm.graph.render\",\"elm.graph.render\",2076182000));\nvar seq__12527 = cljs.core.seq.call(null,cljs.core.filter.call(null,new cljs.core.Keyword(null,\"version\",\"version\",1365512266),new cljs.core.Keyword(null,\"packages\",\"packages\",1764771935).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"data\",\"data\",1016980252).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))));var chunk__12528 = null;var count__12529 = 0;var i__12530 = 0;while(true){\nif((i__12530 < count__12529))\n{var x = cljs.core._nth.call(null,chunk__12528,i__12530);lt.plugins.elm_light.graph.get_package_json.call(null,x,cljs.core.partial.call(null,lt.plugins.elm_light.graph.add_edges_for_dep,this$,x));\n{\nvar G__12613 = seq__12527;\nvar G__12614 = chunk__12528;\nvar G__12615 = count__12529;\nvar G__12616 = (i__12530 + 1);\nseq__12527 = G__12613;\nchunk__12528 = G__12614;\ncount__12529 = G__12615;\ni__12530 = G__12616;\ncontinue;\n}\n} else\n{var temp__4092__auto__ = cljs.core.seq.call(null,seq__12527);if(temp__4092__auto__)\n{var seq__12527__$1 = temp__4092__auto__;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12527__$1))\n{var c__5632__auto__ = cljs.core.chunk_first.call(null,seq__12527__$1);{\nvar G__12617 = cljs.core.chunk_rest.call(null,seq__12527__$1);\nvar G__12618 = c__5632__auto__;\nvar G__12619 = cljs.core.count.call(null,c__5632__auto__);\nvar G__12620 = 0;\nseq__12527 = G__12617;\nchunk__12528 = G__12618;\ncount__12529 = G__12619;\ni__12530 = G__12620;\ncontinue;\n}\n} else\n{var x = cljs.core.first.call(null,seq__12527__$1);lt.plugins.elm_light.graph.get_package_json.call(null,x,cljs.core.partial.call(null,lt.plugins.elm_light.graph.add_edges_for_dep,this$,x));\n{\nvar G__12621 = cljs.core.next.call(null,seq__12527__$1);\nvar G__12622 = null;\nvar G__12623 = 0;\nvar G__12624 = 0;\nseq__12527 = G__12621;\nchunk__12528 = G__12622;\ncount__12529 = G__12623;\ni__12530 = G__12624;\ncontinue;\n}\n}\n} else\n{return null;\n}\n}\nbreak;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.graph\",\"on-get-transitives\",\"lt.plugins.elm-light.graph/on-get-transitives\",3355428108),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.graph.__BEH__on_get_transitives,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm get 1.st level transitive dependencies\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.graph.get-transitives\",\"elm.graph.get-transitives\",689262209),null], null), null));\nlt.plugins.elm_light.graph.get_dependency_data = (function get_dependency_data(project_path){var pkgs = cljs.core.map.call(null,(function (p1__12532_SHARP_){return cljs.core.assoc.call(null,p1__12532_SHARP_,new cljs.core.Keyword(null,\"summary\",\"summary\",3451231000),new cljs.core.Keyword(null,\"summary\",\"summary\",3451231000).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.graph.find_package_by_name.call(null,lt.plugins.elm_light.graph.dependency_graph,new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(p1__12532_SHARP_))));\n}),cljs.core.map.call(null,(function (p1__12531_SHARP_){return clojure.set.rename_keys.call(null,p1__12531_SHARP_,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"exact\",\"exact\",1110851185),new cljs.core.Keyword(null,\"version\",\"version\",1365512266)], null));\n}),lt.plugins.elm_light.utils.get_project_deps.call(null,project_path)));var direct = cljs.core.filter.call(null,new cljs.core.Keyword(null,\"range\",\"range\",1122184367),pkgs);var rootVersion = new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.utils.parse_json_file.call(null,lt.objs.files.join.call(null,project_path,\"elm-package.json\")));var root = new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"package\",\"package\",4501809080),lt.objs.files.basename.call(null,project_path),new cljs.core.Keyword(null,\"version\",\"version\",1365512266),rootVersion,new cljs.core.Keyword(null,\"shape\",\"shape\",1123304211),\"ellipse\"], null);return new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"packages\",\"packages\",1764771935),pkgs,new cljs.core.Keyword(null,\"nodes\",\"nodes\",1118897699),cljs.core.conj.call(null,direct,root),new cljs.core.Keyword(null,\"edges\",\"edges\",1110261192),cljs.core.map.call(null,((function (pkgs,direct,rootVersion,root){\nreturn (function (p1__12533_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"a\",\"a\",1013904339),new cljs.core.Keyword(null,\"b\",\"b\",1013904340),new cljs.core.Keyword(null,\"label\",\"label\",1116631654)],[lt.plugins.elm_light.graph.dep_id.call(null,root),lt.plugins.elm_light.graph.dep_id.call(null,p1__12533_SHARP_),new cljs.core.Keyword(null,\"range\",\"range\",1122184367).cljs$core$IFn$_invoke$arity$1(p1__12533_SHARP_)]);\n});})(pkgs,direct,rootVersion,root))\n,direct)], null);\n});\nlt.plugins.elm_light.graph.__BEH__on_get_data = (function __BEH__on_get_data(this$){var data = lt.plugins.elm_light.graph.get_dependency_data.call(null,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));lt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"data\",\"data\",1016980252)], null),data);\nlt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"elm.graph.render\",\"elm.graph.render\",2076182000));\nreturn lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"elm.graph.get-transitives\",\"elm.graph.get-transitives\",689262209));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.graph\",\"on-get-data\",\"lt.plugins.elm-light.graph/on-get-data\",4501730286),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.graph.__BEH__on_get_data,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm retrieve dependency data for project\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.graph.get-data\",\"elm.graph.get-data\",2085474843),null], null), null));\nlt.plugins.elm_light.graph.__BEH__on_show_dependencies = (function __BEH__on_show_dependencies(this$,project_path,focus_tab_QMARK_){if(cljs.core.truth_(focus_tab_QMARK_))\n{lt.objs.tabs.add_or_focus_BANG_.call(null,this$);\n} else\n{}\nlt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907)], null),project_path);\nlt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"data\",\"data\",1016980252)], null),cljs.core.PersistentArrayMap.EMPTY);\nreturn lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"elm.graph.get-data\",\"elm.graph.get-data\",2085474843));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.graph\",\"on-show-dependencies\",\"lt.plugins.elm-light.graph/on-show-dependencies\",928753546),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.graph.__BEH__on_show_dependencies,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm show dependency graph\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.graph.show-dependencies\",\"elm.graph.show-dependencies\",3464547203),null], null), null));\nlt.plugins.elm_light.graph.__BEH__on_tab_resized = (function __BEH__on_tab_resized(_){var svg = lt.plugins.elm_light.graph.d3.select(\"svg\");return lt.plugins.elm_light.graph.resize_graph.call(null,lt.plugins.elm_light.graph.dependency_graph,svg);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.graph\",\"on-tab-resized\",\"lt.plugins.elm-light.graph/on-tab-resized\",4543261451),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.graph.__BEH__on_tab_resized,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"end-drag\",\"end-drag\",2692811352),null], null), null));\nlt.plugins.elm_light.graph.dependency_graph = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.graph\",\"dependency-graph\",\"lt.plugins.elm-light.graph/dependency-graph\",2371711049));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"show-elm-dep-graph\",\"show-elm-dep-graph\",2736186955),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Show dependency graph\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var temp__4092__auto____$1 = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));if(cljs.core.truth_(temp__4092__auto____$1))\n{var path = temp__4092__auto____$1;return lt.object.raise.call(null,lt.plugins.elm_light.graph.dependency_graph,new cljs.core.Keyword(null,\"elm.graph.show-dependencies\",\"elm.graph.show-dependencies\",3464547203),path,true);\n} else\n{return null;\n}\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.packages')) {\ngoog.provide('lt.plugins.elm_light.packages');\ngoog.require('cljs.core');\ngoog.require('clojure.walk');\ngoog.require('lt.objs.files');\ngoog.require('lt.plugins.elm_light.graph');\ngoog.require('lt.plugins.elm_light.autocompleter');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.util.dom');\ngoog.require('lt.plugins.elm_light.graph');\ngoog.require('quiescent');\ngoog.require('lt.objs.tabs');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.notifos');\ngoog.require('quiescent.dom');\ngoog.require('lt.objs.browser');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('clojure.walk');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('clojure.string');\ngoog.require('quiescent');\ngoog.require('lt.objs.browser');\ngoog.require('quiescent.dom');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.console');\ngoog.require('lt.plugins.elm_light.autocompleter');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.packages.remove_pkg = (function remove_pkg(path,pkg){var pkg_file = lt.objs.files.join.call(null,path,\"elm-package.json\");return cljs.core.partial.call(null,lt.objs.files.save,pkg_file).call(null,lt.plugins.elm_light.utils.pretty_json.call(null,cljs.core.update_in.call(null,lt.plugins.elm_light.utils.parse_json_file.call(null,pkg_file),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"dependencies\",\"dependencies\",1517678747)], null),((function (pkg_file){\nreturn (function (deps){return cljs.core.dissoc.call(null,cljs.core.into.call(null,cljs.core.PersistentArrayMap.EMPTY,cljs.core.map.call(null,((function (pkg_file){\nreturn (function (p__19754){var vec__19755 = p__19754;var k = cljs.core.nth.call(null,vec__19755,0,null);var v = cljs.core.nth.call(null,vec__19755,1,null);return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.elm_light.utils.nskw__GT_name.call(null,k),v], null);\n});})(pkg_file))\n,deps)),pkg);\n});})(pkg_file))\n)));\n});\nlt.plugins.elm_light.packages.project_wrapper = (function project_wrapper(this$){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.elm\",\"div.elm\",2686466363),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div\",\"div\",1014003715),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"id\",\"id\",1013907597),\"project-packages-wrapper\"], null),\"Retrieving project package info...\"], null)], null));var seq__19762_19787 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19763_19788 = null;var count__19764_19789 = 0;var i__19765_19790 = 0;while(true){\nif((i__19765_19790 < count__19764_19789))\n{var vec__19766_19791 = cljs.core._nth.call(null,chunk__19763_19788,i__19765_19790);var ev__6318__auto___19792 = cljs.core.nth.call(null,vec__19766_19791,0,null);var func__6319__auto___19793 = cljs.core.nth.call(null,vec__19766_19791,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19792,func__6319__auto___19793);\n{\nvar G__19794 = seq__19762_19787;\nvar G__19795 = chunk__19763_19788;\nvar G__19796 = count__19764_19789;\nvar G__19797 = (i__19765_19790 + 1);\nseq__19762_19787 = G__19794;\nchunk__19763_19788 = G__19795;\ncount__19764_19789 = G__19796;\ni__19765_19790 = G__19797;\ncontinue;\n}\n} else\n{var temp__4092__auto___19798 = cljs.core.seq.call(null,seq__19762_19787);if(temp__4092__auto___19798)\n{var seq__19762_19799__$1 = temp__4092__auto___19798;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19762_19799__$1))\n{var c__5632__auto___19800 = cljs.core.chunk_first.call(null,seq__19762_19799__$1);{\nvar G__19801 = cljs.core.chunk_rest.call(null,seq__19762_19799__$1);\nvar G__19802 = c__5632__auto___19800;\nvar G__19803 = cljs.core.count.call(null,c__5632__auto___19800);\nvar G__19804 = 0;\nseq__19762_19787 = G__19801;\nchunk__19763_19788 = G__19802;\ncount__19764_19789 = G__19803;\ni__19765_19790 = G__19804;\ncontinue;\n}\n} else\n{var vec__19767_19805 = cljs.core.first.call(null,seq__19762_19799__$1);var ev__6318__auto___19806 = cljs.core.nth.call(null,vec__19767_19805,0,null);var func__6319__auto___19807 = cljs.core.nth.call(null,vec__19767_19805,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19806,func__6319__auto___19807);\n{\nvar G__19808 = cljs.core.next.call(null,seq__19762_19799__$1);\nvar G__19809 = null;\nvar G__19810 = 0;\nvar G__19811 = 0;\nseq__19762_19787 = G__19808;\nchunk__19763_19788 = G__19809;\ncount__19764_19789 = G__19810;\ni__19765_19790 = G__19811;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.packages\",\"elm-packages\",\"lt.plugins.elm-light.packages/elm-packages\",4552372902),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.packages\",\"elm.packages\",3931311271),null], null), null),new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Elm project packages\",new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"Elm project packages\",new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){lt.plugins.elm_light.utils.fetch_all_packages.call(null,(function (p1__19768_SHARP_){return lt.object.merge_BANG_.call(null,this$,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"all-packages\",\"all-packages\",1123981067),p1__19768_SHARP_], null));\n}));\nreturn lt.plugins.elm_light.packages.project_wrapper.call(null,this$);\n}));\nlt.plugins.elm_light.packages.ensure_visible = (function ensure_visible(this$){var list = lt.util.dom.$.call(null,\".autocomplete-dropdown-menu\",lt.object.__GT_content.call(null,this$));var elem = lt.util.dom.$.call(null,\".autocomplete-active\",list);if((elem.offsetTop < list.scrollTop))\n{return list.scrollTop = (elem.offsetTop - 15);\n} else\n{if(((elem.offsetTop + elem.offsetHeight) > (list.scrollTop + list.clientHeight)))\n{return list.scrollTop = (((elem.offsetTop + elem.offsetHeight) + 15) - list.clientHeight);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return null;\n} else\n{return null;\n}\n}\n}\n});\nlt.plugins.elm_light.packages.filter_packages = (function filter_packages(token,pkgs){return cljs.core.vec.call(null,cljs.core.filter.call(null,(function (pkg){return (clojure.string.lower_case.call(null,new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(pkg)).indexOf(clojure.string.lower_case.call(null,token)) > -1);\n}),pkgs));\n});\nlt.plugins.elm_light.packages.idx_active = (function idx_active(items){return cljs.core.first.call(null,cljs.core.keep_indexed.call(null,(function (p1__19770_SHARP_,p2__19769_SHARP_){if(cljs.core.truth_(new cljs.core.Keyword(null,\"active\",\"active\",3885920888).cljs$core$IFn$_invoke$arity$1(p2__19769_SHARP_)))\n{return p1__19770_SHARP_;\n} else\n{return null;\n}\n}),items));\n});\nlt.plugins.elm_light.packages.move_down = (function move_down(items){if(cljs.core.empty_QMARK_.call(null,items))\n{return null;\n} else\n{return cljs.core.assoc_in.call(null,cljs.core.assoc_in.call(null,items,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.elm_light.packages.idx_active.call(null,items),new cljs.core.Keyword(null,\"active\",\"active\",3885920888)], null),false),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [(function (){var x__5198__auto__ = (cljs.core.count.call(null,items) - 1);var y__5199__auto__ = (lt.plugins.elm_light.packages.idx_active.call(null,items) + 1);return ((x__5198__auto__ < y__5199__auto__) ? x__5198__auto__ : y__5199__auto__);\n})(),new cljs.core.Keyword(null,\"active\",\"active\",3885920888)], null),true);\n}\n});\nlt.plugins.elm_light.packages.move_up = (function move_up(items){if(cljs.core.empty_QMARK_.call(null,items))\n{return null;\n} else\n{return cljs.core.assoc_in.call(null,cljs.core.assoc_in.call(null,items,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.elm_light.packages.idx_active.call(null,items),new cljs.core.Keyword(null,\"active\",\"active\",3885920888)], null),false),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [(function (){var x__5191__auto__ = 0;var y__5192__auto__ = (lt.plugins.elm_light.packages.idx_active.call(null,items) - 1);return ((x__5191__auto__ > y__5192__auto__) ? x__5191__auto__ : y__5192__auto__);\n})(),new cljs.core.Keyword(null,\"active\",\"active\",3885920888)], null),true);\n}\n});\nlt.plugins.elm_light.packages.on_pkg_down = (function on_pkg_down(){lt.object.update_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226)], null),lt.plugins.elm_light.packages.move_down);\nlt.plugins.elm_light.packages.render.call(null,cljs.core.PersistentArrayMap.EMPTY);\nreturn lt.plugins.elm_light.packages.ensure_visible.call(null,lt.plugins.elm_light.packages.elm_packages);\n});\nlt.plugins.elm_light.packages.on_pkg_up = (function on_pkg_up(){lt.object.update_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226)], null),lt.plugins.elm_light.packages.move_up);\nlt.plugins.elm_light.packages.render.call(null,cljs.core.PersistentArrayMap.EMPTY);\nreturn lt.plugins.elm_light.packages.ensure_visible.call(null,lt.plugins.elm_light.packages.elm_packages);\n});\nlt.plugins.elm_light.packages.on_pkg_sel = (function on_pkg_sel(){var items_19812 = new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages));var temp__4090__auto___19813 = lt.plugins.elm_light.packages.idx_active.call(null,items_19812);if(cljs.core.truth_(temp__4090__auto___19813))\n{var idx_19814 = temp__4090__auto___19813;lt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-versions\",\"ac-versions\",3107155800)], null),new cljs.core.Keyword(null,\"versions\",\"versions\",3323818509).cljs$core$IFn$_invoke$arity$1(cljs.core.nth.call(null,items_19812,idx_19814)));\nlt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-version\",\"ac-version\",2051259807)], null),cljs.core.first.call(null,new cljs.core.Keyword(null,\"versions\",\"versions\",3323818509).cljs$core$IFn$_invoke$arity$1(cljs.core.nth.call(null,items_19812,idx_19814))));\nlt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-package\",\"ac-package\",892589325)], null),new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(cljs.core.nth.call(null,items_19812,idx_19814)));\n} else\n{lt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-versions\",\"ac-versions\",3107155800)], null),cljs.core.PersistentVector.EMPTY);\n}\nlt.object.merge_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226),null], null));\nreturn lt.plugins.elm_light.packages.render.call(null,cljs.core.PersistentArrayMap.EMPTY);\n});\nlt.plugins.elm_light.packages.on_pkg_cancel = (function on_pkg_cancel(){lt.object.merge_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226),null,new cljs.core.Keyword(null,\"ac-versions\",\"ac-versions\",3107155800),cljs.core.PersistentVector.EMPTY], null));\nreturn lt.plugins.elm_light.packages.render.call(null,cljs.core.PersistentArrayMap.EMPTY);\n});\nlt.plugins.elm_light.packages.on_pkg_blur = (function on_pkg_blur(){lt.object.merge_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226),null], null));\nreturn lt.plugins.elm_light.packages.render.call(null,cljs.core.PersistentArrayMap.EMPTY);\n});\nlt.plugins.elm_light.packages.on_pkg_change = (function on_pkg_change(v){var items = lt.plugins.elm_light.packages.filter_packages.call(null,v,new cljs.core.Keyword(null,\"all-packages\",\"all-packages\",1123981067).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)));lt.object.merge_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226),items,new cljs.core.Keyword(null,\"ac-package\",\"ac-package\",892589325),v,new cljs.core.Keyword(null,\"ac-versions\",\"ac-versions\",3107155800),cljs.core.PersistentVector.EMPTY,new cljs.core.Keyword(null,\"ac-version\",\"ac-version\",2051259807),null], null));\nif(cljs.core.empty_QMARK_.call(null,items))\n{} else\n{lt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226),0,new cljs.core.Keyword(null,\"active\",\"active\",3885920888)], null),true);\n}\nreturn lt.plugins.elm_light.packages.render.call(null,cljs.core.PersistentArrayMap.EMPTY);\n});\nlt.plugins.elm_light.packages.pkg_install = (function pkg_install(pkg,v){var args = cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [\"install\",\"--yes\"], null),(cljs.core.truth_(pkg)?new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [pkg,v], null):cljs.core.PersistentVector.EMPTY));lt.objs.notifos.working.call(null,clojure.string.join.call(null,\" \",cljs.core.cons.call(null,\"elm-package\",args)));\nvar proc = require(\"child_process\").spawn(\"elm-package\",cljs.core.clj__GT_js.call(null,args),{\"cwd\": new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages))});proc.on(\"exit\",((function (proc,args){\nreturn (function (p1__19771_SHARP_){if(cljs.core._EQ_.call(null,p1__19771_SHARP_,0))\n{lt.objs.notifos.done_working.call(null);\n} else\n{lt.objs.notifos.set_msg_BANG_.call(null,\"Error installing elm package\",new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\",new cljs.core.Keyword(null,\"timeout\",\"timeout\",3994960083),5000], null));\n}\nlt.object.raise.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.Keyword(null,\"elm.show.project.packages\",\"elm.show.project.packages\",3385102109),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)));\nreturn lt.object.raise.call(null,lt.plugins.elm_light.graph.dependency_graph,new cljs.core.Keyword(null,\"elm.graph.show-dependencies\",\"elm.graph.show-dependencies\",3464547203),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),false);\n});})(proc,args))\n);\nproc.stdout.on(\"data\",((function (proc,args){\nreturn (function (p1__19772_SHARP_){return lt.objs.notifos.msg_STAR_.call(null,[cljs.core.str(\"Package install: \"),cljs.core.str(p1__19772_SHARP_)].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"timeout\",\"timeout\",3994960083),5000], null));\n});})(proc,args))\n);\nreturn proc.stderr.on(\"data\",((function (proc,args){\nreturn (function (p1__19773_SHARP_){return lt.objs.console.error.call(null,[cljs.core.str(p1__19773_SHARP_)].join(''));\n});})(proc,args))\n);\n});\nlt.plugins.elm_light.packages.on_add_package = (function on_add_package(){return lt.plugins.elm_light.packages.pkg_install.call(null,new cljs.core.Keyword(null,\"ac-package\",\"ac-package\",892589325).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),new cljs.core.Keyword(null,\"ac-version\",\"ac-version\",2051259807).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)));\n});\nlt.plugins.elm_light.packages.on_pkg_refresh = (function on_pkg_refresh(){return lt.plugins.elm_light.packages.pkg_install.call(null,null,null);\n});\nlt.plugins.elm_light.packages.on_remove_pkg = (function on_remove_pkg(pkg){lt.plugins.elm_light.packages.remove_pkg.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),pkg);\nreturn lt.plugins.elm_light.packages.pkg_install.call(null,null,null);\n});\nlt.plugins.elm_light.packages.on_change_version = (function on_change_version(v){lt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-version\",\"ac-version\",2051259807)], null),v);\nreturn lt.plugins.elm_light.packages.render.call(null,cljs.core.PersistentArrayMap.EMPTY);\n});\nlt.plugins.elm_light.packages.on_pkg_browse = (function on_pkg_browse(pkg,version){var url = [cljs.core.str(\"http://package.elm-lang.org/packages/\"),cljs.core.str(pkg),cljs.core.str(\"/\"),cljs.core.str(version)].join('');var b = (function (){var or__4884__auto__ = cljs.core.first.call(null,lt.object.by_tag.call(null,new cljs.core.Keyword(null,\"browser\",\"browser\",1164844698)));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return lt.objs.browser.add.call(null);\n}\n})();lt.objs.tabs.add_or_focus_BANG_.call(null,b);\nreturn lt.object.raise.call(null,b,new cljs.core.Keyword(null,\"navigate!\",\"navigate!\",1766726722),url);\n});\nlt.plugins.elm_light.packages.on_show_graph = (function on_show_graph(){return lt.object.raise.call(null,lt.plugins.elm_light.graph.dependency_graph,new cljs.core.Keyword(null,\"elm.graph.show-dependencies\",\"elm.graph.show-dependencies\",3464547203),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),true);\n});\n/**\n* \n*/\nlt.plugins.elm_light.packages.AddPackageForm = quiescent.component.call(null,(function (props){return quiescent.dom.div.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),\"add-package\"], null),quiescent.dom.h3.call(null,cljs.core.PersistentArrayMap.EMPTY,\"Add package:\"),lt.plugins.elm_light.autocompleter.AutoComplete.call(null,new cljs.core.Keyword(null,\"ac-props\",\"ac-props\",1626585975).cljs$core$IFn$_invoke$arity$1(props)));\n}));\n/**\n* \n*/\nlt.plugins.elm_light.packages.PackageRow = quiescent.component.call(null,(function (p__19774){var map__19775 = p__19774;var map__19775__$1 = ((cljs.core.seq_QMARK_.call(null,map__19775))?cljs.core.apply.call(null,cljs.core.hash_map,map__19775):map__19775);var on_browse = cljs.core.get.call(null,map__19775__$1,new cljs.core.Keyword(null,\"on-browse\",\"on-browse\",587885994));var on_remove = cljs.core.get.call(null,map__19775__$1,new cljs.core.Keyword(null,\"on-remove\",\"on-remove\",1033879460));var exact = cljs.core.get.call(null,map__19775__$1,new cljs.core.Keyword(null,\"exact\",\"exact\",1110851185));var range = cljs.core.get.call(null,map__19775__$1,new cljs.core.Keyword(null,\"range\",\"range\",1122184367));var package$ = cljs.core.get.call(null,map__19775__$1,new cljs.core.Keyword(null,\"package\",\"package\",4501809080));return quiescent.dom.tr.call(null,cljs.core.PersistentArrayMap.EMPTY,quiescent.dom.td.call(null,cljs.core.PersistentArrayMap.EMPTY,(cljs.core.truth_((function (){var and__4872__auto__ = package$;if(cljs.core.truth_(and__4872__auto__))\n{return exact;\n} else\n{return and__4872__auto__;\n}\n})())?quiescent.dom.span.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),\"link\",new cljs.core.Keyword(null,\"onClick\",\"onClick\",3956969051),((function (map__19775,map__19775__$1,on_browse,on_remove,exact,range,package$){\nreturn (function (){return on_browse.call(null,package$,exact);\n});})(map__19775,map__19775__$1,on_browse,on_remove,exact,range,package$))\n], null),package$):package$)),quiescent.dom.td.call(null,cljs.core.PersistentArrayMap.EMPTY,range),quiescent.dom.td.call(null,cljs.core.PersistentArrayMap.EMPTY,exact),quiescent.dom.td.call(null,cljs.core.PersistentArrayMap.EMPTY,(cljs.core.truth_(range)?quiescent.dom.button.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"onClick\",\"onClick\",3956969051),((function (map__19775,map__19775__$1,on_browse,on_remove,exact,range,package$){\nreturn (function (){return on_remove.call(null,package$);\n});})(map__19775,map__19775__$1,on_browse,on_remove,exact,range,package$))\n], null),\"remove\"):null)));\n}));\n/**\n* \n*/\nlt.plugins.elm_light.packages.PackageTable = quiescent.component.call(null,(function (props){return quiescent.dom.table.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),\"package-table\"], null),quiescent.dom.thead.call(null,cljs.core.PersistentArrayMap.EMPTY,quiescent.dom.tr.call(null,cljs.core.PersistentArrayMap.EMPTY,quiescent.dom.th.call(null,cljs.core.PersistentArrayMap.EMPTY,\"Package\"),quiescent.dom.th.call(null,cljs.core.PersistentArrayMap.EMPTY,\"Range\"),quiescent.dom.th.call(null,cljs.core.PersistentArrayMap.EMPTY,\"Exact\"),quiescent.dom.th.call(null,cljs.core.PersistentArrayMap.EMPTY,\"\"))),cljs.core.apply.call(null,quiescent.dom.tbody,cljs.core.PersistentArrayMap.EMPTY,cljs.core.map.call(null,(function (p1__19776_SHARP_){return lt.plugins.elm_light.packages.PackageRow.call(null,cljs.core.assoc.call(null,p1__19776_SHARP_,new cljs.core.Keyword(null,\"on-remove\",\"on-remove\",1033879460),new cljs.core.Keyword(null,\"on-remove\",\"on-remove\",1033879460).cljs$core$IFn$_invoke$arity$1(props),new cljs.core.Keyword(null,\"on-browse\",\"on-browse\",587885994),new cljs.core.Keyword(null,\"on-browse\",\"on-browse\",587885994).cljs$core$IFn$_invoke$arity$1(props)));\n}),new cljs.core.Keyword(null,\"packages\",\"packages\",1764771935).cljs$core$IFn$_invoke$arity$1(props))));\n}));\n/**\n* \n*/\nlt.plugins.elm_light.packages.ProjectPackages = quiescent.component.call(null,(function (props){return quiescent.dom.div.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),\"project-packages\"], null),quiescent.dom.h1.call(null,cljs.core.PersistentArrayMap.EMPTY,[cljs.core.str(lt.objs.files.basename.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(props))),cljs.core.str(\" - packages\")].join('')),lt.plugins.elm_light.packages.PackageTable.call(null,props),quiescent.dom.button.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"onClick\",\"onClick\",3956969051),(function (){return new cljs.core.Keyword(null,\"on-pkg-refresh\",\"on-pkg-refresh\",1806751838).cljs$core$IFn$_invoke$arity$1(props).call(null);\n})], null),\"Refresh packages\"),quiescent.dom.button.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"onClick\",\"onClick\",3956969051),(function (){return new cljs.core.Keyword(null,\"on-show-graph\",\"on-show-graph\",4544855710).cljs$core$IFn$_invoke$arity$1(props).call(null);\n}),new cljs.core.Keyword(null,\"style\",\"style\",1123684643),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"marginLeft\",\"marginLeft\",2984838727),\"10px\"], null)], null),\"Show dependency graph\"),lt.plugins.elm_light.packages.AddPackageForm.call(null,props));\n}));\nlt.plugins.elm_light.packages.render = (function render(props){return quiescent.render.call(null,lt.plugins.elm_light.packages.ProjectPackages.call(null,cljs.core.merge.call(null,props,new cljs.core.PersistentArrayMap(null, 8, [new cljs.core.Keyword(null,\"path\",\"path\",1017337751),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),new cljs.core.Keyword(null,\"packages\",\"packages\",1764771935),new cljs.core.Keyword(null,\"packages\",\"packages\",1764771935).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),new cljs.core.Keyword(null,\"on-pkg-refresh\",\"on-pkg-refresh\",1806751838),lt.plugins.elm_light.packages.on_pkg_refresh,new cljs.core.Keyword(null,\"on-remove\",\"on-remove\",1033879460),lt.plugins.elm_light.packages.on_remove_pkg,new cljs.core.Keyword(null,\"on-browse\",\"on-browse\",587885994),lt.plugins.elm_light.packages.on_pkg_browse,new cljs.core.Keyword(null,\"on-show-graph\",\"on-show-graph\",4544855710),lt.plugins.elm_light.packages.on_show_graph,new cljs.core.Keyword(null,\"ac-props\",\"ac-props\",1626585975),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,\"on-add-package\",\"on-add-package\",3601701790),new cljs.core.Keyword(null,\"on-select\",\"on-select\",1062468636),new cljs.core.Keyword(null,\"items\",\"items\",1114430258),new cljs.core.Keyword(null,\"on-cancel\",\"on-cancel\",600765850),new cljs.core.Keyword(null,\"on-blur\",\"on-blur\",3936357127),new cljs.core.Keyword(null,\"on-change\",\"on-change\",606853840),new cljs.core.Keyword(null,\"version\",\"version\",1365512266),new cljs.core.Keyword(null,\"on-change-version\",\"on-change-version\",822058203),new cljs.core.Keyword(null,\"on-down\",\"on-down\",3936419650),new cljs.core.Keyword(null,\"on-up\",\"on-up\",1119739067),new cljs.core.Keyword(null,\"versions\",\"versions\",3323818509),new cljs.core.Keyword(null,\"value\",\"value\",1125876963)],[lt.plugins.elm_light.packages.on_add_package,lt.plugins.elm_light.packages.on_pkg_sel,new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),lt.plugins.elm_light.packages.on_pkg_cancel,lt.plugins.elm_light.packages.on_pkg_blur,lt.plugins.elm_light.packages.on_pkg_change,new cljs.core.Keyword(null,\"ac-version\",\"ac-version\",2051259807).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),lt.plugins.elm_light.packages.on_change_version,lt.plugins.elm_light.packages.on_pkg_down,lt.plugins.elm_light.packages.on_pkg_up,new cljs.core.Keyword(null,\"ac-versions\",\"ac-versions\",3107155800).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages)),new cljs.core.Keyword(null,\"ac-package\",\"ac-package\",892589325).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages))]),new cljs.core.Keyword(null,\"all-packages\",\"all-packages\",1123981067),new cljs.core.Keyword(null,\"all-packages\",\"all-packages\",1123981067).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.packages.elm_packages))], null))),document.getElementById(\"project-packages-wrapper\"));\n});\nlt.plugins.elm_light.packages.__BEH__on_close_project_packages = (function __BEH__on_close_project_packages(this$){return lt.objs.tabs.rem_BANG_.call(null,this$);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.packages\",\"on-close-project-packages\",\"lt.plugins.elm-light.packages/on-close-project-packages\",801429622),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.packages.__BEH__on_close_project_packages,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"close\",\"close\",1108660586),null], null), null));\nlt.plugins.elm_light.packages.__BEH__show_project_packages = (function __BEH__show_project_packages(this$,path){lt.objs.tabs.add_or_focus_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages);\nlt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-packages\",\"ac-packages\",1548109226)], null),null);\nlt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-package\",\"ac-package\",892589325)], null),null);\nlt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-versions\",\"ac-versions\",3107155800)], null),cljs.core.PersistentVector.EMPTY);\nlt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ac-version\",\"ac-version\",2051259807)], null),null);\nlt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"path\",\"path\",1017337751)], null),path);\nlt.object.assoc_in_BANG_.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"packages\",\"packages\",1764771935)], null),lt.plugins.elm_light.utils.get_project_deps.call(null,path));\nreturn lt.plugins.elm_light.packages.render.call(null,cljs.core.PersistentArrayMap.EMPTY);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.packages\",\"show-project-packages\",\"lt.plugins.elm-light.packages/show-project-packages\",999583331),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.packages.__BEH__show_project_packages,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.show.project.packages\",\"elm.show.project.packages\",3385102109),null], null), null));\nlt.plugins.elm_light.packages.elm_packages = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.packages\",\"elm-packages\",\"lt.plugins.elm-light.packages/elm-packages\",4552372902));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"show-elm-project-packages\",\"show-elm-project-packages\",3767469994),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Show project packages\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var temp__4092__auto____$1 = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));if(cljs.core.truth_(temp__4092__auto____$1))\n{var path = temp__4092__auto____$1;return lt.object.raise.call(null,lt.plugins.elm_light.packages.elm_packages,new cljs.core.Keyword(null,\"elm.show.project.packages\",\"elm.show.project.packages\",3385102109),path);\n} else\n{return null;\n}\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.inline-doc')) {\ngoog.provide('lt.plugins.elm_light.inline_doc');\ngoog.require('cljs.core');\ngoog.require('lt.objs.files');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.util.dom');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.browser');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.browser');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.editor');\nlt.plugins.elm_light.inline_doc.marked = require(lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node_modules\",\"marked\"));\nlt.plugins.elm_light.inline_doc.doc_ui_header = (function doc_ui_header(doc){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.inline-doc\",\"div.inline-doc\",3323486451),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"h1\",\"h1\",1013907515),new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(doc)], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"h2\",\"h2\",1013907516),new cljs.core.Keyword(null,\"ns\",\"ns\",1013907767).cljs$core$IFn$_invoke$arity$1(doc)], null),(cljs.core.truth_((function (){var and__4872__auto__ = new cljs.core.Keyword(null,\"args\",\"args\",1016906831).cljs$core$IFn$_invoke$arity$1(doc);if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.not_EQ_.call(null,new cljs.core.Keyword(null,\"args\",\"args\",1016906831).cljs$core$IFn$_invoke$arity$1(doc),\"nil\");\n} else\n{return and__4872__auto__;\n}\n})())?new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"h3\",\"h3\",1013907517),new cljs.core.Keyword(null,\"args\",\"args\",1016906831).cljs$core$IFn$_invoke$arity$1(doc)], null):null)], null));var seq__19041_19073 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19042_19074 = null;var count__19043_19075 = 0;var i__19044_19076 = 0;while(true){\nif((i__19044_19076 < count__19043_19075))\n{var vec__19045_19077 = cljs.core._nth.call(null,chunk__19042_19074,i__19044_19076);var ev__6318__auto___19078 = cljs.core.nth.call(null,vec__19045_19077,0,null);var func__6319__auto___19079 = cljs.core.nth.call(null,vec__19045_19077,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19078,func__6319__auto___19079);\n{\nvar G__19080 = seq__19041_19073;\nvar G__19081 = chunk__19042_19074;\nvar G__19082 = count__19043_19075;\nvar G__19083 = (i__19044_19076 + 1);\nseq__19041_19073 = G__19080;\nchunk__19042_19074 = G__19081;\ncount__19043_19075 = G__19082;\ni__19044_19076 = G__19083;\ncontinue;\n}\n} else\n{var temp__4092__auto___19084 = cljs.core.seq.call(null,seq__19041_19073);if(temp__4092__auto___19084)\n{var seq__19041_19085__$1 = temp__4092__auto___19084;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19041_19085__$1))\n{var c__5632__auto___19086 = cljs.core.chunk_first.call(null,seq__19041_19085__$1);{\nvar G__19087 = cljs.core.chunk_rest.call(null,seq__19041_19085__$1);\nvar G__19088 = c__5632__auto___19086;\nvar G__19089 = cljs.core.count.call(null,c__5632__auto___19086);\nvar G__19090 = 0;\nseq__19041_19073 = G__19087;\nchunk__19042_19074 = G__19088;\ncount__19043_19075 = G__19089;\ni__19044_19076 = G__19090;\ncontinue;\n}\n} else\n{var vec__19046_19091 = cljs.core.first.call(null,seq__19041_19085__$1);var ev__6318__auto___19092 = cljs.core.nth.call(null,vec__19046_19091,0,null);var func__6319__auto___19093 = cljs.core.nth.call(null,vec__19046_19091,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19092,func__6319__auto___19093);\n{\nvar G__19094 = cljs.core.next.call(null,seq__19041_19085__$1);\nvar G__19095 = null;\nvar G__19096 = 0;\nvar G__19097 = 0;\nseq__19041_19073 = G__19094;\nchunk__19042_19074 = G__19095;\ncount__19043_19075 = G__19096;\ni__19044_19076 = G__19097;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.inline_doc.marked_doc = (function marked_doc(md_doc){var elem = document.createElement(\"div\");lt.util.dom.add_class.call(null,elem,\"elm-inline-doc\");\nelem.innerHTML = lt.plugins.elm_light.inline_doc.marked.call(null,md_doc,cljs.core.clj__GT_js.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"sanitize\",\"sanitize\",3011877851),false], null)));\nreturn elem;\n});\nlt.plugins.elm_light.inline_doc.maybe_append_marked_doc = (function maybe_append_marked_doc(elem,doc){var temp__4090__auto__ = new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882).cljs$core$IFn$_invoke$arity$1(doc);if(cljs.core.truth_(temp__4090__auto__))\n{var md_str = temp__4090__auto__;lt.util.dom.append.call(null,elem,lt.plugins.elm_light.inline_doc.marked_doc.call(null,md_str));\nreturn elem;\n} else\n{return elem;\n}\n});\nlt.plugins.elm_light.inline_doc.highlight_code = (function highlight_code(container_elem){var seq__19051 = cljs.core.seq.call(null,lt.util.dom.$$.call(null,\"pre > code\",container_elem));var chunk__19052 = null;var count__19053 = 0;var i__19054 = 0;while(true){\nif((i__19054 < count__19053))\n{var code = cljs.core._nth.call(null,chunk__19052,i__19054);hljs.highlightBlock(code);\n{\nvar G__19098 = seq__19051;\nvar G__19099 = chunk__19052;\nvar G__19100 = count__19053;\nvar G__19101 = (i__19054 + 1);\nseq__19051 = G__19098;\nchunk__19052 = G__19099;\ncount__19053 = G__19100;\ni__19054 = G__19101;\ncontinue;\n}\n} else\n{var temp__4092__auto__ = cljs.core.seq.call(null,seq__19051);if(temp__4092__auto__)\n{var seq__19051__$1 = temp__4092__auto__;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19051__$1))\n{var c__5632__auto__ = cljs.core.chunk_first.call(null,seq__19051__$1);{\nvar G__19102 = cljs.core.chunk_rest.call(null,seq__19051__$1);\nvar G__19103 = c__5632__auto__;\nvar G__19104 = cljs.core.count.call(null,c__5632__auto__);\nvar G__19105 = 0;\nseq__19051 = G__19102;\nchunk__19052 = G__19103;\ncount__19053 = G__19104;\ni__19054 = G__19105;\ncontinue;\n}\n} else\n{var code = cljs.core.first.call(null,seq__19051__$1);hljs.highlightBlock(code);\n{\nvar G__19106 = cljs.core.next.call(null,seq__19051__$1);\nvar G__19107 = null;\nvar G__19108 = 0;\nvar G__19109 = 0;\nseq__19051 = G__19106;\nchunk__19052 = G__19107;\ncount__19053 = G__19108;\ni__19054 = G__19109;\ncontinue;\n}\n}\n} else\n{return null;\n}\n}\nbreak;\n}\n});\nlt.plugins.elm_light.inline_doc.handle_url_click = (function handle_url_click(url){var b = (function (){var or__4884__auto__ = cljs.core.first.call(null,lt.object.by_tag.call(null,new cljs.core.Keyword(null,\"browser\",\"browser\",1164844698)));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return lt.objs.browser.add.call(null);\n}\n})();return lt.object.raise.call(null,b,new cljs.core.Keyword(null,\"navigate!\",\"navigate!\",1766726722),url);\n});\nlt.plugins.elm_light.inline_doc.add_click_handlers = (function add_click_handlers(elem){var seq__19059 = cljs.core.seq.call(null,lt.util.dom.$$.call(null,\"a\",elem));var chunk__19060 = null;var count__19061 = 0;var i__19062 = 0;while(true){\nif((i__19062 < count__19061))\n{var link = cljs.core._nth.call(null,chunk__19060,i__19062);lt.util.dom.on.call(null,link,\"click\",((function (seq__19059,chunk__19060,count__19061,i__19062,link){\nreturn (function (){return lt.plugins.elm_light.inline_doc.handle_url_click.call(null,lt.util.dom.attr.call(null,link,new cljs.core.Keyword(null,\"href\",\"href\",1017115293)));\n});})(seq__19059,chunk__19060,count__19061,i__19062,link))\n);\n{\nvar G__19110 = seq__19059;\nvar G__19111 = chunk__19060;\nvar G__19112 = count__19061;\nvar G__19113 = (i__19062 + 1);\nseq__19059 = G__19110;\nchunk__19060 = G__19111;\ncount__19061 = G__19112;\ni__19062 = G__19113;\ncontinue;\n}\n} else\n{var temp__4092__auto__ = cljs.core.seq.call(null,seq__19059);if(temp__4092__auto__)\n{var seq__19059__$1 = temp__4092__auto__;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19059__$1))\n{var c__5632__auto__ = cljs.core.chunk_first.call(null,seq__19059__$1);{\nvar G__19114 = cljs.core.chunk_rest.call(null,seq__19059__$1);\nvar G__19115 = c__5632__auto__;\nvar G__19116 = cljs.core.count.call(null,c__5632__auto__);\nvar G__19117 = 0;\nseq__19059 = G__19114;\nchunk__19060 = G__19115;\ncount__19061 = G__19116;\ni__19062 = G__19117;\ncontinue;\n}\n} else\n{var link = cljs.core.first.call(null,seq__19059__$1);lt.util.dom.on.call(null,link,\"click\",((function (seq__19059,chunk__19060,count__19061,i__19062,link,seq__19059__$1,temp__4092__auto__){\nreturn (function (){return lt.plugins.elm_light.inline_doc.handle_url_click.call(null,lt.util.dom.attr.call(null,link,new cljs.core.Keyword(null,\"href\",\"href\",1017115293)));\n});})(seq__19059,chunk__19060,count__19061,i__19062,link,seq__19059__$1,temp__4092__auto__))\n);\n{\nvar G__19118 = cljs.core.next.call(null,seq__19059__$1);\nvar G__19119 = null;\nvar G__19120 = 0;\nvar G__19121 = 0;\nseq__19059 = G__19118;\nchunk__19060 = G__19119;\ncount__19061 = G__19120;\ni__19062 = G__19121;\ncontinue;\n}\n}\n} else\n{return null;\n}\n}\nbreak;\n}\n});\nlt.plugins.elm_light.inline_doc.__BEH__editor__DOT__elm__DOT__doc__DOT__show_BANG_ = (function __BEH__editor__DOT__elm__DOT__doc__DOT__show_BANG_(ed,doc){if(cljs.core.not_EQ_.call(null,new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(doc),\"\"))\n{var doc_elem = lt.plugins.elm_light.inline_doc.maybe_append_marked_doc.call(null,lt.plugins.elm_light.inline_doc.doc_ui_header.call(null,doc),doc);lt.plugins.elm_light.inline_doc.inline_doc.call(null,ed,doc_elem,new cljs.core.Keyword(null,\"loc\",\"loc\",1014011570).cljs$core$IFn$_invoke$arity$1(doc));\nlt.plugins.elm_light.inline_doc.highlight_code.call(null,doc_elem);\nreturn lt.plugins.elm_light.inline_doc.add_click_handlers.call(null,doc_elem);\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.inline-doc\",\"editor.elm.doc.show!\",\"lt.plugins.elm-light.inline-doc/editor.elm.doc.show!\",1579757949),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.inline_doc.__BEH__editor__DOT__elm__DOT__doc__DOT__show_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.elm.doc.show!\",\"editor.elm.doc.show!\",3977559543),null], null), null));\nlt.plugins.elm_light.inline_doc.inline_doc = (function inline_doc(this$,doc_elem,loc){var ed = new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$));var type = new cljs.core.Keyword(null,\"underline\",\"underline\",4281907774);var line = lt.objs.editor.line_handle.call(null,ed,new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(loc));var res_obj = lt.object.create.call(null,new cljs.core.Keyword(\"lt.objs.eval\",\"underline-result\",\"lt.objs.eval/underline-result\",1485297066),new cljs.core.PersistentArrayMap(null, 6, [new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473),this$,new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"underline\",new cljs.core.Keyword(null,\"opts\",\"opts\",1017322386),cljs.core.PersistentArrayMap.EMPTY,new cljs.core.Keyword(null,\"result\",\"result\",4374444943),doc_elem,new cljs.core.Keyword(null,\"loc\",\"loc\",1014011570),loc,new cljs.core.Keyword(null,\"line\",\"line\",1017226086),line], null));lt.object.add_tags.call(null,res_obj,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"inline.doc\",\"inline.doc\",1790840789)], null));\nlt.object.update_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"widgets\",\"widgets\",2354242081)], null),cljs.core.assoc,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [line,new cljs.core.Keyword(null,\"underline\",\"underline\",4281907774)], null),res_obj);\nreturn res_obj;\n});\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.autocompleter.core')) {\ngoog.provide('lt.plugins.elm_light.autocompleter.core');\ngoog.require('cljs.core');\ngoog.require('cljs.core.async');\ngoog.require('lt.util.js');\ngoog.require('lt.util.js');\ngoog.require('lt.util.dom');\ngoog.require('cljs.core.async');\ngoog.require('lt.objs.context');\ngoog.require('lt.objs.context');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.keyboard');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.editor');\ngoog.require('cljs.core.async');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.keyboard');\nlt.plugins.elm_light.autocompleter.core.curr_time = (function curr_time(){return (new Date()).getTime();\n});\nlt.plugins.elm_light.autocompleter.core.elapsed = (function elapsed(start){return [cljs.core.str((lt.plugins.elm_light.autocompleter.core.curr_time.call(null) - start)),cljs.core.str(\" ms\")].join('');\n});\nlt.plugins.elm_light.autocompleter.core.default_options = new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,\"async\",\"async\",1107031534),true,new cljs.core.Keyword(null,\"completeSingle\",\"completeSingle\",2100037203),false,new cljs.core.Keyword(null,\"supportsSelection\",\"supportsSelection\",3475218138),true,new cljs.core.Keyword(null,\"closeOnUnfocus\",\"closeOnUnfocus\",2215570266),true,new cljs.core.Keyword(null,\"customKeys\",\"customKeys\",3726901367),new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,\"Up\",\"Up\",1013906989),(function (p1__20624_SHARP_,p2__20623_SHARP_){return p2__20623_SHARP_.moveFocus.call(null,-1);\n}),new cljs.core.Keyword(null,\"Down\",\"Down\",1016040500),(function (p1__20626_SHARP_,p2__20625_SHARP_){return p2__20625_SHARP_.moveFocus.call(null,1);\n}),new cljs.core.Keyword(null,\"Enter\",\"Enter\",1081018922),(function (a,b){return b.pick();\n}),new cljs.core.Keyword(null,\"Tab\",\"Tab\",1013988071),(function (a,b){return b.pick();\n}),new cljs.core.Keyword(null,\"Esc\",\"Esc\",1013974215),(function (p1__20628_SHARP_,p2__20627_SHARP_){return p2__20627_SHARP_.close.call(null);\n})], null)], null);\nlt.plugins.elm_light.autocompleter.core.distinct_completions = (function distinct_completions(hints){var seen = {};return cljs.core.filter.call(null,((function (seen){\nreturn (function (hint){if((seen[[cljs.core.str(new cljs.core.Keyword(null,\"moduleName\",\"moduleName\",4438520457).cljs$core$IFn$_invoke$arity$1(hint)),cljs.core.str(\"_\"),cljs.core.str(new cljs.core.Keyword(null,\"text\",\"text\",1017460895).cljs$core$IFn$_invoke$arity$1(hint))].join('')]) === true)\n{return false;\n} else\n{return (seen[[cljs.core.str(new cljs.core.Keyword(null,\"moduleName\",\"moduleName\",4438520457).cljs$core$IFn$_invoke$arity$1(hint)),cljs.core.str(\"_\"),cljs.core.str(new cljs.core.Keyword(null,\"text\",\"text\",1017460895).cljs$core$IFn$_invoke$arity$1(hint))].join('')] = true);\n}\n});})(seen))\n,hints);\n});\n/**\n* Prepare found hints for display through CM showHint\n*/\nlt.plugins.elm_light.autocompleter.core.process_hint_results = (function process_hint_results(hints){if(cljs.core.seq.call(null,hints))\n{return cljs.core.clj__GT_js.call(null,(function (p1__20630_SHARP_){var fst = cljs.core.first.call(null,new cljs.core.Keyword(null,\"list\",\"list\",1017226256).cljs$core$IFn$_invoke$arity$1(p1__20630_SHARP_));return cljs.core.assoc.call(null,p1__20630_SHARP_,new cljs.core.Keyword(null,\"from\",\"from\",1017056028),new cljs.core.Keyword(null,\"from\",\"from\",1017056028).cljs$core$IFn$_invoke$arity$1(fst),new cljs.core.Keyword(null,\"to\",\"to\",1013907949),new cljs.core.Keyword(null,\"to\",\"to\",1013907949).cljs$core$IFn$_invoke$arity$1(fst));\n}).call(null,cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"list\",\"list\",1017226256)],[cljs.core.take.call(null,25,lt.plugins.elm_light.autocompleter.core.distinct_completions.call(null,cljs.core.filter.call(null,(function (p1__20629_SHARP_){return (new cljs.core.Keyword(null,\"displayText\",\"displayText\",2728236161).cljs$core$IFn$_invoke$arity$1(p1__20629_SHARP_).length < 1000);\n}),hints)))])));\n} else\n{return null;\n}\n});\n/**\n* Listen for hint results from all given channels\n* Will raise a behavior to show results when all channels have delivered a result\n* or alternatively the specified timeout has elapsed\n*/\nlt.plugins.elm_light.autocompleter.core.listen_for_hint_results = (function listen_for_hint_results(ed,channels,hinter_ch){var t = cljs.core.async.timeout.call(null,500);var c__13951__auto__ = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto__,t){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto__,t){\nreturn (function (state_20716){var state_val_20717 = (state_20716[1]);if((state_val_20717 === 1))\n{var inst_20685 = cljs.core.conj.call(null,channels,t);var inst_20686 = cljs.core.PersistentVector.EMPTY;var inst_20687 = inst_20685;var state_20716__$1 = (function (){var statearr_20718 = state_20716;(statearr_20718[7] = inst_20686);\n(statearr_20718[8] = inst_20687);\nreturn statearr_20718;\n})();var statearr_20719_20777 = state_20716__$1;(statearr_20719_20777[2] = null);\n(statearr_20719_20777[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_20717 === 2))\n{var inst_20687 = (state_20716[8]);var inst_20689 = cljs.core.count.call(null,inst_20687);var inst_20690 = cljs.core._EQ_.call(null,1,inst_20689);var state_20716__$1 = state_20716;if(inst_20690)\n{var statearr_20720_20778 = state_20716__$1;(statearr_20720_20778[1] = 4);\n} else\n{var statearr_20721_20779 = state_20716__$1;(statearr_20721_20779[1] = 5);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_20717 === 3))\n{var inst_20714 = (state_20716[2]);var state_20716__$1 = state_20716;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_20716__$1,inst_20714);\n} else\n{if((state_val_20717 === 4))\n{var inst_20686 = (state_20716[7]);var inst_20692 = cljs.core.async.put_BANG_.call(null,hinter_ch,inst_20686);var state_20716__$1 = state_20716;var statearr_20722_20780 = state_20716__$1;(statearr_20722_20780[2] = inst_20692);\n(statearr_20722_20780[1] = 6);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_20717 === 5))\n{var inst_20687 = (state_20716[8]);var state_20716__$1 = state_20716;return cljs.core.async.impl.ioc_helpers.ioc_alts_BANG_.call(null,state_20716__$1,7,inst_20687);\n} else\n{if((state_val_20717 === 6))\n{var inst_20712 = (state_20716[2]);var state_20716__$1 = state_20716;var statearr_20723_20781 = state_20716__$1;(statearr_20723_20781[2] = inst_20712);\n(statearr_20723_20781[1] = 3);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_20717 === 7))\n{var inst_20698 = (state_20716[9]);var inst_20696 = (state_20716[2]);var inst_20697 = cljs.core.nth.call(null,inst_20696,0,null);var inst_20698__$1 = cljs.core.nth.call(null,inst_20696,1,null);var inst_20699 = (inst_20698__$1 === t);var state_20716__$1 = (function (){var statearr_20724 = state_20716;(statearr_20724[10] = inst_20697);\n(statearr_20724[9] = inst_20698__$1);\nreturn statearr_20724;\n})();if(cljs.core.truth_(inst_20699))\n{var statearr_20725_20782 = state_20716__$1;(statearr_20725_20782[1] = 8);\n} else\n{var statearr_20726_20783 = state_20716__$1;(statearr_20726_20783[1] = 9);\n}\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_20717 === 8))\n{var inst_20686 = (state_20716[7]);var inst_20701 = cljs.core.println.call(null,\"WARNING: Timeout waiting for hinter provider channel results\");var inst_20702 = cljs.core.async.put_BANG_.call(null,hinter_ch,inst_20686);var state_20716__$1 = (function (){var statearr_20727 = state_20716;(statearr_20727[11] = inst_20701);\nreturn statearr_20727;\n})();var statearr_20728_20784 = state_20716__$1;(statearr_20728_20784[2] = inst_20702);\n(statearr_20728_20784[1] = 10);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_20717 === 9))\n{var inst_20686 = (state_20716[7]);var inst_20687 = (state_20716[8]);var inst_20697 = (state_20716[10]);var inst_20698 = (state_20716[9]);var inst_20704 = cljs.core.into.call(null,inst_20686,inst_20697);var inst_20705 = [inst_20698];var inst_20706 = cljs.core.PersistentHashSet.fromArray.call(null,inst_20705,true);var inst_20707 = cljs.core.remove.call(null,inst_20706,inst_20687);var inst_20686__$1 = inst_20704;var inst_20687__$1 = inst_20707;var state_20716__$1 = (function (){var statearr_20729 = state_20716;(statearr_20729[7] = inst_20686__$1);\n(statearr_20729[8] = inst_20687__$1);\nreturn statearr_20729;\n})();var statearr_20730_20785 = state_20716__$1;(statearr_20730_20785[2] = null);\n(statearr_20730_20785[1] = 2);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if((state_val_20717 === 10))\n{var inst_20710 = (state_20716[2]);var state_20716__$1 = state_20716;var statearr_20731_20786 = state_20716__$1;(statearr_20731_20786[2] = inst_20710);\n(statearr_20731_20786[1] = 6);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{return null;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n});})(c__13951__auto__,t))\n;return ((function (switch__13881__auto__,c__13951__auto__,t){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_20735 = [null,null,null,null,null,null,null,null,null,null,null,null];(statearr_20735[0] = state_machine__13882__auto__);\n(statearr_20735[1] = 1);\nreturn statearr_20735;\n});\nvar state_machine__13882__auto____1 = (function (state_20716){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_20716);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e20736){if((e20736 instanceof Object))\n{var ex__13885__auto__ = e20736;var statearr_20737_20787 = state_20716;(statearr_20737_20787[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_20716);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e20736;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__20788 = state_20716;\nstate_20716 = G__20788;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_20716){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_20716);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto__,t))\n})();var state__13953__auto__ = (function (){var statearr_20738 = f__13952__auto__.call(null);(statearr_20738[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto__);\nreturn statearr_20738;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto__,t))\n);\nreturn c__13951__auto__;\n});\nlt.plugins.elm_light.autocompleter.core.completion_active_QMARK_ = (function completion_active_QMARK_(ed){return lt.objs.editor.__GT_cm_ed.call(null,ed).state.completionActive;\n});\nlt.plugins.elm_light.autocompleter.core.maybe_close_hinter = (function maybe_close_hinter(ed){var temp__4092__auto__ = lt.plugins.elm_light.autocompleter.core.completion_active_QMARK_.call(null,ed);if(cljs.core.truth_(temp__4092__auto__))\n{var state = temp__4092__auto__;return state.close();\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.autocompleter.core.on_line_change = (function on_line_change(line,ch){var ed = lt.objs.editor.pool.last_active.call(null);if(cljs.core.not.call(null,lt.plugins.elm_light.autocompleter.core.completion_active_QMARK_.call(null,ed)))\n{return CodeMirror.off(line,\"change\",on_line_change);\n} else\n{if(cljs.core._EQ_.call(null,\"+delete\",ch.origin))\n{return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"start-hinting\",\"start-hinting\",3115741442));\n} else\n{return null;\n}\n}\n});\n/**\n* Creates a channel for writing results that are to be popped up with the hinter ui\n* Displays hint results async by calling the showHint plugin callback when\n* results are received on the channel\n*/\nlt.plugins.elm_light.autocompleter.core.init_show_hint_ch = (function init_show_hint_ch(ed){var ch = cljs.core.async.chan.call(null);CodeMirror.showHint(lt.objs.editor.__GT_cm_ed.call(null,ed),((function (ch){\nreturn (function (_,cb){var chs = lt.object.raise_reduce.call(null,ed,new cljs.core.Keyword(null,\"init-hints\",\"init-hints\",4468593473),cljs.core.PersistentVector.EMPTY);if(cljs.core.seq.call(null,chs))\n{var c__13951__auto___20789 = cljs.core.async.chan.call(null,1);cljs.core.async.impl.dispatch.run.call(null,((function (c__13951__auto___20789,chs,ch){\nreturn (function (){var f__13952__auto__ = (function (){var switch__13881__auto__ = ((function (c__13951__auto___20789,chs,ch){\nreturn (function (state_20758){var state_val_20759 = (state_20758[1]);if((state_val_20759 === 2))\n{var inst_20754 = (state_20758[2]);var inst_20755 = lt.plugins.elm_light.autocompleter.core.process_hint_results.call(null,inst_20754);var inst_20756 = cb.call(null,inst_20755);var state_20758__$1 = state_20758;return cljs.core.async.impl.ioc_helpers.return_chan.call(null,state_20758__$1,inst_20756);\n} else\n{if((state_val_20759 === 1))\n{var state_20758__$1 = state_20758;return cljs.core.async.impl.ioc_helpers.take_BANG_.call(null,state_20758__$1,2,ch);\n} else\n{return null;\n}\n}\n});})(c__13951__auto___20789,chs,ch))\n;return ((function (switch__13881__auto__,c__13951__auto___20789,chs,ch){\nreturn (function() {\nvar state_machine__13882__auto__ = null;\nvar state_machine__13882__auto____0 = (function (){var statearr_20763 = [null,null,null,null,null,null,null];(statearr_20763[0] = state_machine__13882__auto__);\n(statearr_20763[1] = 1);\nreturn statearr_20763;\n});\nvar state_machine__13882__auto____1 = (function (state_20758){while(true){\nvar ret_value__13883__auto__ = (function (){try{while(true){\nvar result__13884__auto__ = switch__13881__auto__.call(null,state_20758);if(cljs.core.keyword_identical_QMARK_.call(null,result__13884__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\ncontinue;\n}\n} else\n{return result__13884__auto__;\n}\nbreak;\n}\n}catch (e20764){if((e20764 instanceof Object))\n{var ex__13885__auto__ = e20764;var statearr_20765_20790 = state_20758;(statearr_20765_20790[5] = ex__13885__auto__);\ncljs.core.async.impl.ioc_helpers.process_exception.call(null,state_20758);\nreturn new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{throw e20764;\n} else\n{return null;\n}\n}\n}})();if(cljs.core.keyword_identical_QMARK_.call(null,ret_value__13883__auto__,new cljs.core.Keyword(null,\"recur\",\"recur\",1122293407)))\n{{\nvar G__20791 = state_20758;\nstate_20758 = G__20791;\ncontinue;\n}\n} else\n{return ret_value__13883__auto__;\n}\nbreak;\n}\n});\nstate_machine__13882__auto__ = function(state_20758){\nswitch(arguments.length){\ncase 0:\nreturn state_machine__13882__auto____0.call(this);\ncase 1:\nreturn state_machine__13882__auto____1.call(this,state_20758);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$0 = state_machine__13882__auto____0;\nstate_machine__13882__auto__.cljs$core$IFn$_invoke$arity$1 = state_machine__13882__auto____1;\nreturn state_machine__13882__auto__;\n})()\n;})(switch__13881__auto__,c__13951__auto___20789,chs,ch))\n})();var state__13953__auto__ = (function (){var statearr_20766 = f__13952__auto__.call(null);(statearr_20766[cljs.core.async.impl.ioc_helpers.USER_START_IDX] = c__13951__auto___20789);\nreturn statearr_20766;\n})();return cljs.core.async.impl.ioc_helpers.run_state_machine_wrapped.call(null,state__13953__auto__);\n});})(c__13951__auto___20789,chs,ch))\n);\nreturn lt.plugins.elm_light.autocompleter.core.listen_for_hint_results.call(null,ed,chs,ch);\n} else\n{return null;\n}\n});})(ch))\n,cljs.core.clj__GT_js.call(null,lt.plugins.elm_light.autocompleter.core.default_options));\nreturn ch;\n});\nlt.plugins.elm_light.autocompleter.core.__BEH__start_hinting = (function __BEH__start_hinting(ed){var pos = lt.objs.editor.__GT_cursor.call(null,ed);var line_handle = lt.objs.editor.line_handle.call(null,ed,new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(pos));if(cljs.core.truth_(lt.plugins.elm_light.autocompleter.core.completion_active_QMARK_.call(null,ed)))\n{return null;\n} else\n{return lt.plugins.elm_light.autocompleter.core.init_show_hint_ch.call(null,ed);\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.autocompleter.core\",\"start-hinting\",\"lt.plugins.elm-light.autocompleter.core/start-hinting\",540241633),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.autocompleter.core.__BEH__start_hinting,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Autocompleter: Start hinting\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"start-hinting\",\"start-hinting\",3115741442),null], null), null));\nlt.plugins.elm_light.autocompleter.core.__BEH__auto_show_on_input = (function __BEH__auto_show_on_input(ed,_,ch){return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"start-hinting\",\"start-hinting\",3115741442));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.autocompleter.core\",\"auto-show-on-input\",\"lt.plugins.elm-light.autocompleter.core/auto-show-on-input\",3970467043),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.autocompleter.core.__BEH__auto_show_on_input,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Autocompleter: Show on change\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"input\",\"input\",1114262332),null], null), null),new cljs.core.Keyword(null,\"debounce\",\"debounce\",1556599227),10);\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.selection')) {\ngoog.provide('lt.plugins.elm_light.selection');\ngoog.require('cljs.core');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.editor');\nlt.plugins.elm_light.selection.indented_QMARK_ = (function indented_QMARK_(s){return (cljs.core.count.call(null,cljs.core.re_find.call(null,/\\s*/,s)) > 0);\n});\nlt.plugins.elm_light.selection.comment_line_QMARK_ = (function comment_line_QMARK_(ed,l){return cljs.core._EQ_.call(null,\"comment\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(lt.objs.editor.__GT_token.call(null,ed,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),l,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),1], null))));\n});\nlt.plugins.elm_light.selection.no_content_line_QMARK_ = (function no_content_line_QMARK_(s){return (!((s == null))) && (cljs.core._EQ_.call(null,0,cljs.core.count.call(null,s.trim())));\n});\nlt.plugins.elm_light.selection.top_level_line_QMARK_ = (function top_level_line_QMARK_(ed,l){var line_str = lt.objs.editor.line.call(null,ed,l);return (!(lt.plugins.elm_light.selection.indented_QMARK_.call(null,line_str))) && (!(lt.plugins.elm_light.selection.no_content_line_QMARK_.call(null,line_str))) && (!(lt.plugins.elm_light.selection.comment_line_QMARK_.call(null,ed,l)));\n});\nlt.plugins.elm_light.selection.get_top_level_line_back = (function get_top_level_line_back(ed,pos){var line = new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(pos);while(true){\nif(lt.plugins.elm_light.selection.top_level_line_QMARK_.call(null,ed,line))\n{return line;\n} else\n{if(cljs.core._EQ_.call(null,0,line))\n{return null;\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{{\nvar G__19823 = (line - 1);\nline = G__19823;\ncontinue;\n}\n} else\n{return null;\n}\n}\n}\nbreak;\n}\n});\nlt.plugins.elm_light.selection.get_top_level_line_down = (function get_top_level_line_down(ed,start_line){var last_line = lt.objs.editor.last_line.call(null,ed);var line = start_line;while(true){\nif(lt.plugins.elm_light.selection.top_level_line_QMARK_.call(null,ed,line))\n{return line;\n} else\n{if(cljs.core._EQ_.call(null,line,last_line))\n{return null;\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{{\nvar G__19824 = (line + 1);\nline = G__19824;\ncontinue;\n}\n} else\n{return null;\n}\n}\n}\nbreak;\n}\n});\nlt.plugins.elm_light.selection.maybe_backup = (function maybe_backup(ed,l){var line = l;while(true){\nif((lt.plugins.elm_light.selection.no_content_line_QMARK_.call(null,lt.objs.editor.line.call(null,ed,line))) || (lt.plugins.elm_light.selection.comment_line_QMARK_.call(null,ed,line)))\n{{\nvar G__19825 = (line - 1);\nline = G__19825;\ncontinue;\n}\n} else\n{return line;\n}\nbreak;\n}\n});\nlt.plugins.elm_light.selection.get_top_level_expr = (function get_top_level_expr(ed,pos){var temp__4092__auto__ = lt.plugins.elm_light.selection.get_top_level_line_back.call(null,ed,pos);if(cljs.core.truth_(temp__4092__auto__))\n{var start_line = temp__4092__auto__;var last_line = lt.objs.editor.last_line.call(null,ed);var end_line = lt.plugins.elm_light.selection.maybe_backup.call(null,ed,((cljs.core._EQ_.call(null,last_line,start_line))?start_line:(function (){var temp__4090__auto__ = lt.plugins.elm_light.selection.get_top_level_line_down.call(null,ed,(start_line + 1));if(cljs.core.truth_(temp__4090__auto__))\n{var l = temp__4090__auto__;return (l - 1);\n} else\n{return last_line;\n}\n})()));return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"from\",\"from\",1017056028),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),start_line,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),0], null),new cljs.core.Keyword(null,\"to\",\"to\",1013907949),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),end_line,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),lt.objs.editor.line_length.call(null,ed,end_line)], null)], null);\n} else\n{return null;\n}\n});\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.clients')) {\ngoog.provide('lt.plugins.elm_light.clients');\ngoog.require('cljs.core');\ngoog.require('lt.objs.files');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.clients');\ngoog.require('lt.objs.platform');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.popup');\ngoog.require('lt.objs.dialogs');\ngoog.require('lt.objs.popup');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.objs.proc');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.platform');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.sidebar.clients');\ngoog.require('lt.objs.eval');\ngoog.require('clojure.string');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.dialogs');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.proc');\ngoog.require('lt.objs.console');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.objs.eval');\ngoog.require('lt.objs.clients');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.sidebar.clients');\nlt.plugins.elm_light.clients.cp = require(\"child_process\");\nlt.plugins.elm_light.clients.os = require(\"os\");\nlt.plugins.elm_light.clients.elm_client_path = lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node/elm-client.js\");\nlt.plugins.elm_light.clients.elm_node_path = lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node_modules\");\nlt.plugins.elm_light.clients.shelljs = require(lt.objs.files.join.call(null,lt.plugins.elm_light.clients.elm_node_path,\"shelljs\"));\nlt.plugins.elm_light.clients.harbor = require(lt.objs.files.join.call(null,lt.plugins.elm_light.clients.elm_node_path,\"harbor\")).call(null,3000,4000);\nlt.plugins.elm_light.clients.claim_reactor_port = (function claim_reactor_port(path,cb){return lt.plugins.elm_light.clients.harbor.claim(path,cb);\n});\nlt.plugins.elm_light.clients.release_reactor_port = (function release_reactor_port(path){return lt.plugins.elm_light.clients.harbor.release(path);\n});\nlt.plugins.elm_light.clients.on_exit = (function on_exit(client){lt.plugins.elm_light.elm_ast.delete_project_ast_BANG_.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client)));\nvar seq__12133_12174 = cljs.core.seq.call(null,lt.objs.editor.pool.containing_path.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client))));var chunk__12134_12175 = null;var count__12135_12176 = 0;var i__12136_12177 = 0;while(true){\nif((i__12136_12177 < count__12135_12176))\n{var ed_12178 = cljs.core._nth.call(null,chunk__12134_12175,i__12136_12177);lt.object.raise.call(null,ed_12178,new cljs.core.Keyword(null,\"project-disconnected\",\"project-disconnected\",2085293025));\n{\nvar G__12179 = seq__12133_12174;\nvar G__12180 = chunk__12134_12175;\nvar G__12181 = count__12135_12176;\nvar G__12182 = (i__12136_12177 + 1);\nseq__12133_12174 = G__12179;\nchunk__12134_12175 = G__12180;\ncount__12135_12176 = G__12181;\ni__12136_12177 = G__12182;\ncontinue;\n}\n} else\n{var temp__4092__auto___12183 = cljs.core.seq.call(null,seq__12133_12174);if(temp__4092__auto___12183)\n{var seq__12133_12184__$1 = temp__4092__auto___12183;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12133_12184__$1))\n{var c__5632__auto___12185 = cljs.core.chunk_first.call(null,seq__12133_12184__$1);{\nvar G__12186 = cljs.core.chunk_rest.call(null,seq__12133_12184__$1);\nvar G__12187 = c__5632__auto___12185;\nvar G__12188 = cljs.core.count.call(null,c__5632__auto___12185);\nvar G__12189 = 0;\nseq__12133_12174 = G__12186;\nchunk__12134_12175 = G__12187;\ncount__12135_12176 = G__12188;\ni__12136_12177 = G__12189;\ncontinue;\n}\n} else\n{var ed_12190 = cljs.core.first.call(null,seq__12133_12184__$1);lt.object.raise.call(null,ed_12190,new cljs.core.Keyword(null,\"project-disconnected\",\"project-disconnected\",2085293025));\n{\nvar G__12191 = cljs.core.next.call(null,seq__12133_12184__$1);\nvar G__12192 = null;\nvar G__12193 = 0;\nvar G__12194 = 0;\nseq__12133_12174 = G__12191;\nchunk__12134_12175 = G__12192;\ncount__12135_12176 = G__12193;\ni__12136_12177 = G__12194;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nlt.plugins.elm_light.clients.release_reactor_port.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client)));\nreturn lt.objs.clients.rem_BANG_.call(null,client);\n});\nlt.plugins.elm_light.clients.on_elm_message = (function on_elm_message(client,data){var msg = lt.plugins.elm_light.utils.mod_js__GT_clj.call(null,data,new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672),true);var logTime = (new Date());var logPrefix = [cljs.core.str(logTime.getSeconds()),cljs.core.str(\":\"),cljs.core.str(logTime.getMilliseconds()),cljs.core.str(\" >>\")].join('');if(cljs.core._EQ_.call(null,cljs.core.second.call(null,msg),\"elm.client.connected\"))\n{lt.objs.notifos.done_working.call(null,[cljs.core.str(\"Project connected: \"),cljs.core.str(new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client)))].join(''));\nlt.object.raise.call(null,client,new cljs.core.Keyword(null,\"connect\",\"connect\",1965255772));\nlt.object.raise.call(null,lt.objs.clients.clients,new cljs.core.Keyword(null,\"connect\",\"connect\",1965255772),client);\nvar seq__12143 = cljs.core.seq.call(null,lt.objs.editor.pool.containing_path.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client))));var chunk__12144 = null;var count__12145 = 0;var i__12146 = 0;while(true){\nif((i__12146 < count__12145))\n{var ed = cljs.core._nth.call(null,chunk__12144,i__12146);lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"project-connected\",\"project-connected\",3474311367));\n{\nvar G__12195 = seq__12143;\nvar G__12196 = chunk__12144;\nvar G__12197 = count__12145;\nvar G__12198 = (i__12146 + 1);\nseq__12143 = G__12195;\nchunk__12144 = G__12196;\ncount__12145 = G__12197;\ni__12146 = G__12198;\ncontinue;\n}\n} else\n{var temp__4092__auto__ = cljs.core.seq.call(null,seq__12143);if(temp__4092__auto__)\n{var seq__12143__$1 = temp__4092__auto__;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12143__$1))\n{var c__5632__auto__ = cljs.core.chunk_first.call(null,seq__12143__$1);{\nvar G__12199 = cljs.core.chunk_rest.call(null,seq__12143__$1);\nvar G__12200 = c__5632__auto__;\nvar G__12201 = cljs.core.count.call(null,c__5632__auto__);\nvar G__12202 = 0;\nseq__12143 = G__12199;\nchunk__12144 = G__12200;\ncount__12145 = G__12201;\ni__12146 = G__12202;\ncontinue;\n}\n} else\n{var ed = cljs.core.first.call(null,seq__12143__$1);lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"project-connected\",\"project-connected\",3474311367));\n{\nvar G__12203 = cljs.core.next.call(null,seq__12143__$1);\nvar G__12204 = null;\nvar G__12205 = 0;\nvar G__12206 = 0;\nseq__12143 = G__12203;\nchunk__12144 = G__12204;\ncount__12145 = G__12205;\ni__12146 = G__12206;\ncontinue;\n}\n}\n} else\n{return null;\n}\n}\nbreak;\n}\n} else\n{if(cljs.core._EQ_.call(null,cljs.core.second.call(null,msg),\"elm.ast.update\"))\n{var map__12147 = cljs.core.last.call(null,msg);var map__12147__$1 = ((cljs.core.seq_QMARK_.call(null,map__12147))?cljs.core.apply.call(null,cljs.core.hash_map,map__12147):map__12147);var package$ = cljs.core.get.call(null,map__12147__$1,new cljs.core.Keyword(null,\"package\",\"package\",4501809080));var error = cljs.core.get.call(null,map__12147__$1,new cljs.core.Keyword(null,\"error\",\"error\",1110689146));var ast = cljs.core.get.call(null,map__12147__$1,new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140));var type = cljs.core.get.call(null,map__12147__$1,new cljs.core.Keyword(null,\"type\",\"type\",1017479852));var file = cljs.core.get.call(null,map__12147__$1,new cljs.core.Keyword(null,\"file\",\"file\",1017047278));var G__12148 = type;if(cljs.core._EQ_.call(null,\"packagesDeleted\",G__12148))\n{lt.plugins.elm_light.elm_ast.delete_package_asts_BANG_.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client)));\nreturn lt.objs.notifos.set_msg_BANG_.call(null,[cljs.core.str(\"Elm stuff for \"),cljs.core.str(new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client))),cljs.core.str(\" was nuked, all package ASTs are lost. Do a package install or lint to get them back !\")].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\n} else\n{if(cljs.core._EQ_.call(null,\"deleted\",G__12148))\n{return lt.plugins.elm_light.elm_ast.delete_ast_BANG_.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client)),file);\n} else\n{if(cljs.core._EQ_.call(null,\"parsed\",G__12148))\n{return lt.plugins.elm_light.elm_ast.upsert_ast_BANG_.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client)),new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"file\",\"file\",1017047278),file,new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140),ast,new cljs.core.Keyword(null,\"package\",\"package\",4501809080),package$], null));\n} else\n{if(cljs.core._EQ_.call(null,\"parseError\",G__12148))\n{return lt.objs.console.error.call(null,[cljs.core.str(file),cljs.core.str(\"\\n\"),cljs.core.str(error)].join(''));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.println.call(null,\"Unhandled ast event:\",type,file);\n} else\n{return null;\n}\n}\n}\n}\n}\n} else\n{if(cljs.core._EQ_.call(null,cljs.core.second.call(null,msg),\"doc.search.results\"))\n{return lt.object.raise.call(null,lt.plugins.elm_light.clients.elm,new cljs.core.Keyword(null,\"elm.doc.search.results\",\"elm.doc.search.results\",3225944800),cljs.core.assoc_in.call(null,msg,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [2,new cljs.core.Keyword(null,\"project-dir\",\"project-dir\",4367844171)], null),new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client))));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return lt.object.raise.call(null,lt.objs.clients.clients,new cljs.core.Keyword(null,\"message\",\"message\",1968829305),msg);\n} else\n{return null;\n}\n}\n}\n}\n});\nlt.plugins.elm_light.clients.start_elm_worker = (function start_elm_worker(path,port,client){var worker = lt.plugins.elm_light.clients.cp.fork(lt.plugins.elm_light.clients.elm_client_path,[port],cljs.core.clj__GT_js.call(null,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"execPath\",\"execPath\",3055801288),process.executable,new cljs.core.Keyword(null,\"cwd\",\"cwd\",1014003170),path,new cljs.core.Keyword(null,\"silent\",\"silent\",4406544327),true,new cljs.core.Keyword(null,\"env\",\"env\",1014004831),((cljs.core._EQ_.call(null,lt.plugins.elm_light.clients.os.platform(),\"win32\"))?new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"NODE_PATH\",\"NODE_PATH\",4295742388),lt.plugins.elm_light.clients.elm_node_path], null):lt.objs.proc.merge_env.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"NODE_PATH\",\"NODE_PATH\",4295742388),lt.plugins.elm_light.clients.elm_node_path], null)))], null)));worker.stdout.on(\"data\",((function (worker){\nreturn (function (msg){return cljs.core.println.call(null,[cljs.core.str(\"out: \"),cljs.core.str(msg)].join(''));\n});})(worker))\n);\nworker.stderr.on(\"data\",((function (worker){\nreturn (function (err){lt.objs.notifos.set_msg_BANG_.call(null,[cljs.core.str(\"Elm error: \"),cljs.core.str(err)].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nreturn lt.objs.console.error.call(null,err);\n});})(worker))\n);\nworker.on(\"message\",((function (worker){\nreturn (function (p1__12149_SHARP_){return lt.plugins.elm_light.clients.on_elm_message.call(null,client,p1__12149_SHARP_);\n});})(worker))\n);\nworker.on(\"exit\",((function (worker){\nreturn (function (){return lt.plugins.elm_light.clients.on_exit.call(null,client);\n});})(worker))\n);\nreturn worker;\n});\nlt.plugins.elm_light.clients.__BEH__send_BANG_ = (function __BEH__send_BANG_(client,msg){return new cljs.core.Keyword(null,\"worker\",\"worker\",4526786288).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client)).send(cljs.core.clj__GT_js.call(null,msg));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.clients\",\"send!\",\"lt.plugins.elm-light.clients/send!\",867013595),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.clients.__BEH__send_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"send!\",\"send!\",1123226891),null], null), null));\nlt.plugins.elm_light.clients.start_elm_client = (function start_elm_client(p__12150){var map__12152 = p__12150;var map__12152__$1 = ((cljs.core.seq_QMARK_.call(null,map__12152))?cljs.core.apply.call(null,cljs.core.hash_map,map__12152):map__12152);var props = map__12152__$1;var client = cljs.core.get.call(null,map__12152__$1,new cljs.core.Keyword(null,\"client\",\"client\",3951159101));var proj_path = cljs.core.get.call(null,map__12152__$1,new cljs.core.Keyword(null,\"proj-path\",\"proj-path\",4362692615));var path = cljs.core.get.call(null,map__12152__$1,new cljs.core.Keyword(null,\"path\",\"path\",1017337751));lt.objs.notifos.working.call(null,\"Connecting..\");\nreturn lt.plugins.elm_light.clients.claim_reactor_port.call(null,proj_path,((function (map__12152,map__12152__$1,props,client,proj_path,path){\nreturn (function (_,port){var worker = lt.plugins.elm_light.clients.start_elm_worker.call(null,proj_path,port,client);lt.object.merge_BANG_.call(null,client,new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),lt.objs.files.basename.call(null,proj_path),new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711),proj_path,new cljs.core.Keyword(null,\"reactor-port\",\"reactor-port\",4649590590),port,new cljs.core.Keyword(null,\"worker\",\"worker\",4526786288),worker,new cljs.core.Keyword(null,\"commands\",\"commands\",4706336250),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 13, [new cljs.core.Keyword(null,\"editor.elm.lint\",\"editor.elm.lint\",1086056222),null,new cljs.core.Keyword(null,\"editor.elm.make\",\"editor.elm.make\",1086078217),null,new cljs.core.Keyword(null,\"editor.elm.ast.passthrough\",\"editor.elm.ast.passthrough\",3082755153),null,new cljs.core.Keyword(null,\"editor.eval.elm\",\"editor.eval.elm\",1083015975),null,new cljs.core.Keyword(null,\"elm.test\",\"elm.test\",1176854604),null,new cljs.core.Keyword(null,\"editor.elm.hint\",\"editor.elm.hint\",1085937058),null,new cljs.core.Keyword(null,\"elm.test.suite\",\"elm.test.suite\",666703958),null,new cljs.core.Keyword(null,\"elm.repl.restart\",\"elm.repl.restart\",2931654218),null,new cljs.core.Keyword(null,\"editor.elm.ast.parsetext\",\"editor.elm.ast.parsetext\",1992138717),null,new cljs.core.Keyword(null,\"docs.elm.search\",\"docs.elm.search\",737241333),null,new cljs.core.Keyword(null,\"editor.elm.doc\",\"editor.elm.doc\",1570413537),null,new cljs.core.Keyword(null,\"editor.elm.gendoc\",\"editor.elm.gendoc\",1485628611),null,new cljs.core.Keyword(null,\"elm.reload.ast\",\"elm.reload.ast\",3046520423),null], null), null)], null));\nreturn lt.object.add_behavior_BANG_.call(null,client,new cljs.core.Keyword(\"lt.plugins.elm-light.clients\",\"send!\",\"lt.plugins.elm-light.clients/send!\",867013595));\n});})(map__12152,map__12152__$1,props,client,proj_path,path))\n);\n});\nlt.plugins.elm_light.clients.handle_no_elm = (function handle_no_elm(){lt.objs.notifos.done_working.call(null);\nlt.objs.console.log.call(null,process.env.PATH);\nreturn lt.objs.popup.popup_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"header\",\"header\",4087600639),\"We couldn't find Elm (elm-make) in your path\",new cljs.core.Keyword(null,\"body\",\"body\",1016933652),[cljs.core.str(\"In order to use elm-light, Elm must be installed and on your system PATH.\"),cljs.core.str(\"(Check the console for PATH as seen from Light Table\")].join(''),new cljs.core.Keyword(null,\"buttons\",\"buttons\",1255256819),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Install Elm\",new cljs.core.Keyword(null,\"action\",\"action\",3885920680),(function (){return lt.objs.platform.open.call(null,\"https://guide.elm-lang.org/install.html\");\n})], null),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"ok\"], null)], null)], null));\n});\nlt.plugins.elm_light.clients.check_elm = (function check_elm(){return lt.plugins.elm_light.clients.shelljs.which(\"elm-make\");\n});\nlt.plugins.elm_light.clients.try_connect = (function try_connect(p__12153){var map__12156 = p__12153;var map__12156__$1 = ((cljs.core.seq_QMARK_.call(null,map__12156))?cljs.core.apply.call(null,cljs.core.hash_map,map__12156):map__12156);var props = map__12156__$1;var command = cljs.core.get.call(null,map__12156__$1,new cljs.core.Keyword(null,\"command\",\"command\",1964298941));var info = cljs.core.get.call(null,map__12156__$1,new cljs.core.Keyword(null,\"info\",\"info\",1017141280));var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info);var proj_path = lt.plugins.elm_light.utils.project_path.call(null,path);var client = lt.objs.clients.client_BANG_.call(null,new cljs.core.Keyword(null,\"elm-client\",\"elm-client\",1622336068));if(cljs.core.not.call(null,cljs.core.seq.call(null,proj_path)))\n{lt.objs.notifos.done_working.call(null);\nlt.objs.notifos.set_msg_BANG_.call(null,[cljs.core.str(\"Couldn't find a elm-package.json in any parent of path: \"),cljs.core.str(path)].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nlt.objs.clients.rem_BANG_.call(null,client);\n} else\n{if(cljs.core.not.call(null,lt.plugins.elm_light.clients.check_elm.call(null)))\n{lt.plugins.elm_light.clients.handle_no_elm.call(null);\nlt.objs.clients.rem_BANG_.call(null,client);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{var vec__12157_12207 = lt.plugins.elm_light.utils.valid_project_elm_version.call(null,proj_path);var ok_QMARK__12208 = cljs.core.nth.call(null,vec__12157_12207,0,null);var msg_12209 = cljs.core.nth.call(null,vec__12157_12207,1,null);if(cljs.core.truth_(ok_QMARK__12208))\n{lt.plugins.elm_light.clients.start_elm_client.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"path\",\"path\",1017337751),path,new cljs.core.Keyword(null,\"proj-path\",\"proj-path\",4362692615),proj_path,new cljs.core.Keyword(null,\"client\",\"client\",3951159101),client], null));\n} else\n{lt.objs.notifos.done_working.call(null);\nlt.objs.console.error.call(null,msg_12209);\nlt.objs.notifos.set_msg_BANG_.call(null,msg_12209,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nlt.objs.clients.rem_BANG_.call(null,client);\n}\n} else\n{}\n}\n}\nreturn client;\n});\nlt.plugins.elm_light.clients.find_client = (function find_client(p__12158){var map__12164 = p__12158;var map__12164__$1 = ((cljs.core.seq_QMARK_.call(null,map__12164))?cljs.core.apply.call(null,cljs.core.hash_map,map__12164):map__12164);var opts = map__12164__$1;var create = cljs.core.get.call(null,map__12164__$1,new cljs.core.Keyword(null,\"create\",\"create\",3956577390));var info = cljs.core.get.call(null,map__12164__$1,new cljs.core.Keyword(null,\"info\",\"info\",1017141280));var command = cljs.core.get.call(null,map__12164__$1,new cljs.core.Keyword(null,\"command\",\"command\",1964298941));var origin = cljs.core.get.call(null,map__12164__$1,new cljs.core.Keyword(null,\"origin\",\"origin\",4300251800));var proj_path = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info));var vec__12165 = lt.objs.clients.discover.call(null,command,info);var result = cljs.core.nth.call(null,vec__12165,0,null);var client = cljs.core.nth.call(null,vec__12165,1,null);var pred__12166 = cljs.core._EQ_;var expr__12167 = result;if(cljs.core.truth_(pred__12166.call(null,new cljs.core.Keyword(null,\"none\",\"none\",1017291434),expr__12167)))\n{if(cljs.core.truth_(create))\n{return create.call(null,opts);\n} else\n{lt.objs.notifos.done_working.call(null);\nlt.object.raise.call(null,lt.objs.eval.evaler,new cljs.core.Keyword(null,\"no-client\",\"no-client\",4161042633),opts);\nreturn lt.objs.clients.placeholder.call(null);\n}\n} else\n{if(cljs.core.truth_(pred__12166.call(null,new cljs.core.Keyword(null,\"found\",\"found\",1111526132),expr__12167)))\n{if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client)),proj_path))\n{return client;\n} else\n{return create.call(null,opts);\n}\n} else\n{if(cljs.core.truth_(pred__12166.call(null,new cljs.core.Keyword(null,\"select\",\"select\",4402849902),expr__12167)))\n{lt.object.raise.call(null,lt.objs.eval.evaler,new cljs.core.Keyword(null,\"select-client\",\"select-client\",4292921646),client,((function (pred__12166,expr__12167,proj_path,vec__12165,result,client,map__12164,map__12164__$1,opts,create,info,command,origin){\nreturn (function (client__$1){lt.objs.clients.swap_client_BANG_.call(null,new cljs.core.Keyword(null,\"default\",\"default\",2558708147).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"client\",\"client\",3951159101).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,origin))),client__$1);\nreturn lt.object.update_BANG_.call(null,origin,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"client\",\"client\",3951159101)], null),cljs.core.assoc,new cljs.core.Keyword(null,\"default\",\"default\",2558708147),client__$1);\n});})(pred__12166,expr__12167,proj_path,vec__12165,result,client,map__12164,map__12164__$1,opts,create,info,command,origin))\n);\nreturn lt.objs.clients.placeholder.call(null);\n} else\n{throw (new Error([cljs.core.str(\"No matching clause: \"),cljs.core.str(expr__12167)].join('')));\n}\n}\n}\n});\n/**\n* Helper method to get eval client for a given editor and command\n* If none found it will try to connect\n*/\nlt.plugins.elm_light.clients.get_eval_client = (function() {\nvar get_eval_client = null;\nvar get_eval_client__2 = (function (ed,cmd){return get_eval_client.call(null,ed,cmd,lt.plugins.elm_light.clients.try_connect);\n});\nvar get_eval_client__3 = (function (ed,cmd,create){var cur = new cljs.core.Keyword(null,\"default\",\"default\",2558708147).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"client\",\"client\",3951159101).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_((function (){var and__4872__auto__ = cur;if(cljs.core.truth_(and__4872__auto__))\n{return lt.objs.clients.available_QMARK_.call(null,cur);\n} else\n{return and__4872__auto__;\n}\n})()))\n{return cur;\n} else\n{var neue = lt.plugins.elm_light.clients.find_client.call(null,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),cmd,new cljs.core.Keyword(null,\"origin\",\"origin\",4300251800),ed,new cljs.core.Keyword(null,\"info\",\"info\",1017141280),new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)),new cljs.core.Keyword(null,\"create\",\"create\",3956577390),create], null));lt.object.update_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"client\",\"client\",3951159101)], null),cljs.core.assoc,new cljs.core.Keyword(null,\"default\",\"default\",2558708147),neue);\nlt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"set-client\",\"set-client\",2248164104),neue);\nreturn neue;\n}\n});\nget_eval_client = function(ed,cmd,create){\nswitch(arguments.length){\ncase 2:\nreturn get_eval_client__2.call(this,ed,cmd);\ncase 3:\nreturn get_eval_client__3.call(this,ed,cmd,create);\n}\nthrow(new Error('Invalid arity: ' + arguments.length));\n};\nget_eval_client.cljs$core$IFn$_invoke$arity$2 = get_eval_client__2;\nget_eval_client.cljs$core$IFn$_invoke$arity$3 = get_eval_client__3;\nreturn get_eval_client;\n})()\n;\n/**\n* Helper method to get eval client for a given editor and command\n*/\nlt.plugins.elm_light.clients.get_eval_client_if_connected = (function get_eval_client_if_connected(ed,cmd){return lt.plugins.elm_light.clients.get_eval_client.call(null,ed,cmd,(function (opts){lt.objs.notifos.done_working.call(null,\"\");\nreturn null;\n}));\n});\nlt.plugins.elm_light.clients.__BEH__elm_doc_search_results = (function __BEH__elm_doc_search_results(_,p__12169){var vec__12171 = p__12169;var client_id = cljs.core.nth.call(null,vec__12171,0,null);var command = cljs.core.nth.call(null,vec__12171,1,null);var msg = cljs.core.nth.call(null,vec__12171,2,null);return lt.object.raise.call(null,lt.objs.clients.clients,new cljs.core.Keyword(null,\"message\",\"message\",1968829305),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [client_id,command,lt.plugins.elm_light.elm_ast.search_docs.call(null,new cljs.core.Keyword(null,\"search\",\"search\",4402534682).cljs$core$IFn$_invoke$arity$1(msg),new cljs.core.Keyword(null,\"project-dir\",\"project-dir\",4367844171).cljs$core$IFn$_invoke$arity$1(msg))], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.clients\",\"elm-doc-search-results\",\"lt.plugins.elm-light.clients/elm-doc-search-results\",565676279),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.clients.__BEH__elm_doc_search_results,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Workaround behavior for showing doc search results in sidebar\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.doc.search.results\",\"elm.doc.search.results\",3225944800),null], null), null));\nlt.plugins.elm_light.clients.__BEH__eval_BANG_ = (function __BEH__eval_BANG_(this$,event){var map__12173 = event;var map__12173__$1 = ((cljs.core.seq_QMARK_.call(null,map__12173))?cljs.core.apply.call(null,cljs.core.hash_map,map__12173):map__12173);var origin = cljs.core.get.call(null,map__12173__$1,new cljs.core.Keyword(null,\"origin\",\"origin\",4300251800));var info = cljs.core.get.call(null,map__12173__$1,new cljs.core.Keyword(null,\"info\",\"info\",1017141280));lt.objs.notifos.working.call(null,\"Evaluating elm...\");\nreturn lt.objs.clients.send.call(null,lt.objs.eval.get_client_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"editor.eval.elm\",\"editor.eval.elm\",1083015975),new cljs.core.Keyword(null,\"origin\",\"origin\",4300251800),origin,new cljs.core.Keyword(null,\"info\",\"info\",1017141280),info,new cljs.core.Keyword(null,\"create\",\"create\",3956577390),lt.plugins.elm_light.clients.try_connect], null)),new cljs.core.Keyword(null,\"editor.eval.elm\",\"editor.eval.elm\",1083015975),info,new cljs.core.Keyword(null,\"only\",\"only\",1017320222),origin);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.clients\",\"eval!\",\"lt.plugins.elm-light.clients/eval!\",845960815),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.clients.__BEH__eval_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"eval!\",\"eval!\",1110791799),null], null), null));\nlt.plugins.elm_light.clients.__BEH__connect = (function __BEH__connect(this$,path){return lt.plugins.elm_light.clients.try_connect.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"info\",\"info\",1017141280),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"path\",\"path\",1017337751),path], null)], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.clients\",\"connect\",\"lt.plugins.elm-light.clients/connect\",3850263638),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.clients.__BEH__connect,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"connect\",\"connect\",1965255772),null], null), null));\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.clients\",\"elm-lang\",\"lt.plugins.elm-light.clients/elm-lang\",4404942079),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.lang\",\"elm.lang\",1176612264),null], null), null));\nlt.plugins.elm_light.clients.elm = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.clients\",\"elm-lang\",\"lt.plugins.elm-light.clients/elm-lang\",4404942079));\nlt.objs.sidebar.clients.add_connector.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"Elm\",new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Select a directory to serve as the root of your elm project.\",new cljs.core.Keyword(null,\"connect\",\"connect\",1965255772),(function (){return lt.objs.dialogs.dir.call(null,lt.plugins.elm_light.clients.elm,new cljs.core.Keyword(null,\"connect\",\"connect\",1965255772));\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.docpreview')) {\ngoog.provide('lt.plugins.elm_light.docpreview');\ngoog.require('cljs.core');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.files');\ngoog.require('lt.util.js');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.eval');\ngoog.require('lt.objs.clients');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.util.load');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.editor');\ngoog.require('lt.util.load');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.objs.eval');\ngoog.require('lt.objs.clients');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.util.js');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.docpreview.highlight_js = lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"js\",\"highlight.pack.js\");\nlt.plugins.elm_light.docpreview.preview_skeleton = (function preview_skeleton(this$){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div\",\"div\",1014003715),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"elm-doc-preview\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"h1\",\"h1\",1013907515),\"Generating elm docs, please wait a little...\"], null)], null));var seq__12216_12240 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__12217_12241 = null;var count__12218_12242 = 0;var i__12219_12243 = 0;while(true){\nif((i__12219_12243 < count__12218_12242))\n{var vec__12220_12244 = cljs.core._nth.call(null,chunk__12217_12241,i__12219_12243);var ev__6318__auto___12245 = cljs.core.nth.call(null,vec__12220_12244,0,null);var func__6319__auto___12246 = cljs.core.nth.call(null,vec__12220_12244,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___12245,func__6319__auto___12246);\n{\nvar G__12247 = seq__12216_12240;\nvar G__12248 = chunk__12217_12241;\nvar G__12249 = count__12218_12242;\nvar G__12250 = (i__12219_12243 + 1);\nseq__12216_12240 = G__12247;\nchunk__12217_12241 = G__12248;\ncount__12218_12242 = G__12249;\ni__12219_12243 = G__12250;\ncontinue;\n}\n} else\n{var temp__4092__auto___12251 = cljs.core.seq.call(null,seq__12216_12240);if(temp__4092__auto___12251)\n{var seq__12216_12252__$1 = temp__4092__auto___12251;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12216_12252__$1))\n{var c__5632__auto___12253 = cljs.core.chunk_first.call(null,seq__12216_12252__$1);{\nvar G__12254 = cljs.core.chunk_rest.call(null,seq__12216_12252__$1);\nvar G__12255 = c__5632__auto___12253;\nvar G__12256 = cljs.core.count.call(null,c__5632__auto___12253);\nvar G__12257 = 0;\nseq__12216_12240 = G__12254;\nchunk__12217_12241 = G__12255;\ncount__12218_12242 = G__12256;\ni__12219_12243 = G__12257;\ncontinue;\n}\n} else\n{var vec__12221_12258 = cljs.core.first.call(null,seq__12216_12252__$1);var ev__6318__auto___12259 = cljs.core.nth.call(null,vec__12221_12258,0,null);var func__6319__auto___12260 = cljs.core.nth.call(null,vec__12221_12258,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___12259,func__6319__auto___12260);\n{\nvar G__12261 = cljs.core.next.call(null,seq__12216_12252__$1);\nvar G__12262 = null;\nvar G__12263 = 0;\nvar G__12264 = 0;\nseq__12216_12240 = G__12261;\nchunk__12217_12241 = G__12262;\ncount__12218_12242 = G__12263;\ni__12219_12243 = G__12264;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"elmdoc\",\"lt.plugins.elm-light.docpreview/elmdoc\",1597859033),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elmdoc\",\"elmdoc\",4008535620)], null),new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"elmdoc\",new cljs.core.Keyword(null,\"behaviors\",\"behaviors\",607554515),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"on-close-destroy\",\"lt.plugins.elm-light.docpreview/on-close-destroy\",906178052)], null),new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$,filename){lt.object.update_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949)], null),cljs.core.constantly.call(null,[cljs.core.str(filename),cljs.core.str(\" - Live\")].join('')));\nreturn lt.plugins.elm_light.docpreview.preview_skeleton.call(null,this$);\n}));\nlt.plugins.elm_light.docpreview.__BEH__on_close_destroy = (function __BEH__on_close_destroy(this$){var temp__4092__auto___12265 = new cljs.core.Keyword(\"lt.objs.tabs\",\"tabset\",\"lt.objs.tabs/tabset\",3378091779).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$));if(cljs.core.truth_(temp__4092__auto___12265))\n{var ts_12266 = temp__4092__auto___12265;if(cljs.core._EQ_.call(null,cljs.core.count.call(null,new cljs.core.Keyword(null,\"objs\",\"objs\",1017308622).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ts_12266))),1))\n{lt.objs.tabs.rem_tabset.call(null,ts_12266);\n} else\n{}\n} else\n{}\nvar temp__4092__auto___12267 = new cljs.core.Keyword(null,\"owner-ed\",\"owner-ed\",2677003627).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$));if(cljs.core.truth_(temp__4092__auto___12267))\n{var ed_12268 = temp__4092__auto___12267;lt.object.assoc_in_BANG_.call(null,ed_12268,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elmdoc\",\"elmdoc\",4008535620)], null),null);\n} else\n{}\nreturn lt.object.destroy_BANG_.call(null,this$);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"on-close-destroy\",\"lt.plugins.elm-light.docpreview/on-close-destroy\",906178052),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.docpreview.__BEH__on_close_destroy,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"close\",\"close\",1108660586),null], null), null));\nlt.plugins.elm_light.docpreview.__BEH__gendoc = (function __BEH__gendoc(ed){var info = new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));var cl = lt.objs.eval.get_client_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"editor.elm.gendoc\",\"editor.elm.gendoc\",1485628611),new cljs.core.Keyword(null,\"origin\",\"origin\",4300251800),ed,new cljs.core.Keyword(null,\"info\",\"info\",1017141280),info,new cljs.core.Keyword(null,\"create\",\"create\",3956577390),lt.plugins.elm_light.clients.try_connect], null));lt.objs.notifos.working.call(null,[cljs.core.str(\"Starting elm doc generation for: \"),cljs.core.str(new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info))].join(''));\nreturn lt.objs.clients.send.call(null,cl,new cljs.core.Keyword(null,\"editor.elm.gendoc\",\"editor.elm.gendoc\",1485628611),cljs.core.assoc.call(null,info,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907),lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info))),new cljs.core.Keyword(null,\"only\",\"only\",1017320222),ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"gendoc\",\"lt.plugins.elm-light.docpreview/gendoc\",1698030579),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.docpreview.__BEH__gendoc,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"gendoc\",\"gendoc\",4059359066),null], null), null),new cljs.core.Keyword(null,\"description\",\"description\",3584325486),\"Preview package doc for a given Elm file\");\nlt.plugins.elm_light.docpreview.maybe_create_elm_preview = (function maybe_create_elm_preview(elmdoc){var temp__4090__auto__ = new cljs.core.Keyword(null,\"preview\",\"preview\",695719738).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,elmdoc));if(cljs.core.truth_(temp__4090__auto__))\n{var preview = temp__4090__auto__;return preview;\n} else\n{var el = lt.object.__GT_content.call(null,elmdoc);var preview = Elm.embed(Elm.DocPreview,el,cljs.core.clj__GT_js.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"modules\",\"modules\",2241338105),\"[]\",new cljs.core.Keyword(null,\"selectModule\",\"selectModule\",2877951482),\"\"], null)));lt.object.assoc_in_BANG_.call(null,elmdoc,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"preview\",\"preview\",695719738)], null),preview);\nreturn preview;\n}\n});\nlt.plugins.elm_light.docpreview.__BEH__elm_gendoc_res = (function __BEH__elm_gendoc_res(ed,res){lt.objs.notifos.done_working.call(null,\"Elm doc generated\");\nvar temp__4092__auto__ = new cljs.core.Keyword(null,\"elmdoc\",\"elmdoc\",4008535620).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));if(cljs.core.truth_(temp__4092__auto__))\n{var elmdoc = temp__4092__auto__;var preview = lt.plugins.elm_light.docpreview.maybe_create_elm_preview.call(null,elmdoc);var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var module_name = lt.plugins.elm_light.elm_ast.get_module_name.call(null,lt.plugins.elm_light.elm_ast.get_module_ast.call(null,lt.plugins.elm_light.utils.project_path.call(null,path),path));preview.ports.modules.send(res);\npreview.ports.selectModule.send(module_name);\nreturn window.requestAnimationFrame(((function (preview,path,module_name,elmdoc,temp__4092__auto__){\nreturn (function (){var seq__12226 = cljs.core.seq.call(null,lt.util.dom.$$.call(null,\"pre > code\",lt.object.__GT_content.call(null,elmdoc)));var chunk__12227 = null;var count__12228 = 0;var i__12229 = 0;while(true){\nif((i__12229 < count__12228))\n{var block = cljs.core._nth.call(null,chunk__12227,i__12229);hljs.highlightBlock(block);\n{\nvar G__12269 = seq__12226;\nvar G__12270 = chunk__12227;\nvar G__12271 = count__12228;\nvar G__12272 = (i__12229 + 1);\nseq__12226 = G__12269;\nchunk__12227 = G__12270;\ncount__12228 = G__12271;\ni__12229 = G__12272;\ncontinue;\n}\n} else\n{var temp__4092__auto____$1 = cljs.core.seq.call(null,seq__12226);if(temp__4092__auto____$1)\n{var seq__12226__$1 = temp__4092__auto____$1;if(cljs.core.chunked_seq_QMARK_.call(null,seq__12226__$1))\n{var c__5632__auto__ = cljs.core.chunk_first.call(null,seq__12226__$1);{\nvar G__12273 = cljs.core.chunk_rest.call(null,seq__12226__$1);\nvar G__12274 = c__5632__auto__;\nvar G__12275 = cljs.core.count.call(null,c__5632__auto__);\nvar G__12276 = 0;\nseq__12226 = G__12273;\nchunk__12227 = G__12274;\ncount__12228 = G__12275;\ni__12229 = G__12276;\ncontinue;\n}\n} else\n{var block = cljs.core.first.call(null,seq__12226__$1);hljs.highlightBlock(block);\n{\nvar G__12277 = cljs.core.next.call(null,seq__12226__$1);\nvar G__12278 = null;\nvar G__12279 = 0;\nvar G__12280 = 0;\nseq__12226 = G__12277;\nchunk__12227 = G__12278;\ncount__12228 = G__12279;\ni__12229 = G__12280;\ncontinue;\n}\n}\n} else\n{return null;\n}\n}\nbreak;\n}\n});})(preview,path,module_name,elmdoc,temp__4092__auto__))\n);\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"elm-gendoc-res\",\"lt.plugins.elm-light.docpreview/elm-gendoc-res\",871221001),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.docpreview.__BEH__elm_gendoc_res,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.gendoc.res\",\"elm.gendoc.res\",3626116948),null], null), null));\nlt.plugins.elm_light.docpreview.__BEH__gen_on_save = (function __BEH__gen_on_save(ed){return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"gendoc\",\"gendoc\",4059359066));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"gen-on-save\",\"lt.plugins.elm-light.docpreview/gen-on-save\",713063605),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.docpreview.__BEH__gen_on_save,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"save\",\"save\",1017427183),null], null), null));\nlt.plugins.elm_light.docpreview.__BEH__elm_docpreview = (function __BEH__elm_docpreview(ed){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var elmdoc_obj = (function (){var or__4884__auto__ = new cljs.core.Keyword(null,\"elmdoc\",\"elmdoc\",4008535620).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"elmdoc\",\"lt.plugins.elm-light.docpreview/elmdoc\",1597859033),path);\n}\n})();lt.util.load.js.call(null,lt.plugins.elm_light.docpreview.highlight_js,new cljs.core.Keyword(null,\"sync\",\"sync\",1017449997));\nlt.objs.tabs.add_or_focus_BANG_.call(null,elmdoc_obj);\nlt.object.assoc_in_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elmdoc\",\"elmdoc\",4008535620)], null),elmdoc_obj);\nlt.object.assoc_in_BANG_.call(null,elmdoc_obj,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"owner-ed\",\"owner-ed\",2677003627)], null),ed);\nlt.object.add_behavior_BANG_.call(null,ed,new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"gen-on-save\",\"lt.plugins.elm-light.docpreview/gen-on-save\",713063605));\nreturn lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"gendoc\",\"gendoc\",4059359066));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.docpreview\",\"elm-docpreview\",\"lt.plugins.elm-light.docpreview/elm-docpreview\",1000581284),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.docpreview.__BEH__elm_docpreview,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.docpreview\",\"elm.docpreview\",3479917898),null], null), null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.docpreview\",\"elm.docpreview\",3479917898),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Preview doc for selected file\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.docpreview\",\"elm.docpreview\",3479917898));\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.modulebrowser')) {\ngoog.provide('lt.plugins.elm_light.modulebrowser');\ngoog.require('cljs.core');\ngoog.require('lt.objs.sidebar.command');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.sidebar.command');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.sidebar');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.sidebar');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('clojure.string');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.modulebrowser.resolve_module_file = (function resolve_module_file(project_path,pck_json,package$,module,version){return cljs.core.some.call(null,(function (p1__19691_SHARP_){if(cljs.core.truth_(lt.objs.files.exists_QMARK_.call(null,p1__19691_SHARP_)))\n{return p1__19691_SHARP_;\n} else\n{return null;\n}\n}),cljs.core.map.call(null,(function (p1__19690_SHARP_){return lt.objs.files.join.call(null,project_path,\"elm-stuff/packages\",package$,version,p1__19690_SHARP_,[cljs.core.str(clojure.string.replace.call(null,module,\".\",lt.objs.files.separator)),cljs.core.str(\".elm\")].join(''));\n}),new cljs.core.Keyword(null,\"source-directories\",\"source-directories\",4475397259).cljs$core$IFn$_invoke$arity$1(pck_json)));\n});\nlt.plugins.elm_light.modulebrowser.get_exposed_modules = (function get_exposed_modules(project_path,p__19692){var map__19694 = p__19692;var map__19694__$1 = ((cljs.core.seq_QMARK_.call(null,map__19694))?cljs.core.apply.call(null,cljs.core.hash_map,map__19694):map__19694);var exact = cljs.core.get.call(null,map__19694__$1,new cljs.core.Keyword(null,\"exact\",\"exact\",1110851185));var package$ = cljs.core.get.call(null,map__19694__$1,new cljs.core.Keyword(null,\"package\",\"package\",4501809080));var pck_json = lt.plugins.elm_light.utils.parse_json_file.call(null,lt.objs.files.join.call(null,project_path,\"elm-stuff/packages\",package$,exact,\"elm-package.json\"));return cljs.core.map.call(null,((function (pck_json,map__19694,map__19694__$1,exact,package$){\nreturn (function (x){return new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),x,new cljs.core.Keyword(null,\"packageName\",\"packageName\",1922663267),package$,new cljs.core.Keyword(null,\"version\",\"version\",1365512266),exact,new cljs.core.Keyword(null,\"file\",\"file\",1017047278),lt.plugins.elm_light.modulebrowser.resolve_module_file.call(null,project_path,pck_json,package$,x,exact)], null);\n});})(pck_json,map__19694,map__19694__$1,exact,package$))\n,new cljs.core.Keyword(null,\"exposed-modules\",\"exposed-modules\",4185867084).cljs$core$IFn$_invoke$arity$1(pck_json));\n});\nlt.plugins.elm_light.modulebrowser.get_package_modules = (function get_package_modules(project_path){return cljs.core.sort_by.call(null,new cljs.core.Keyword(null,\"name\",\"name\",1017277949),cljs.core.mapcat.call(null,cljs.core.partial.call(null,lt.plugins.elm_light.modulebrowser.get_exposed_modules,project_path),cljs.core.filter.call(null,new cljs.core.Keyword(null,\"exact\",\"exact\",1110851185),lt.plugins.elm_light.utils.get_project_deps.call(null,project_path))));\n});\nlt.plugins.elm_light.modulebrowser.deduce_module_name = (function deduce_module_name(root_path,elm_file_path){return clojure.string.replace.call(null,clojure.string.replace.call(null,clojure.string.replace.call(null,clojure.string.replace.call(null,elm_file_path,root_path,\"\"),\".elm\",\"\"),/^\\//,\"\"),lt.objs.files.separator,\".\");\n});\nlt.plugins.elm_light.modulebrowser.get_project_modules = (function get_project_modules(project_path){var pck_json = lt.plugins.elm_light.utils.parse_json_file.call(null,lt.objs.files.join.call(null,project_path,\"elm-package.json\"));return cljs.core.sort_by.call(null,new cljs.core.Keyword(null,\"name\",\"name\",1017277949),cljs.core.map.call(null,((function (pck_json){\nreturn (function (m){return cljs.core.assoc.call(null,m,new cljs.core.Keyword(null,\"packageName\",\"packageName\",1922663267),lt.objs.files.basename.call(null,project_path),new cljs.core.Keyword(null,\"version\",\"version\",1365512266),new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(pck_json));\n});})(pck_json))\n,cljs.core.mapcat.call(null,((function (pck_json){\nreturn (function (dir){if(cljs.core._EQ_.call(null,dir,\".\"))\n{return cljs.core.map.call(null,((function (pck_json){\nreturn (function (x){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),lt.plugins.elm_light.modulebrowser.deduce_module_name.call(null,\"\",x),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),lt.objs.files.join.call(null,project_path,x)], null);\n});})(pck_json))\n,cljs.core.filter.call(null,((function (pck_json){\nreturn (function (p1__19695_SHARP_){return cljs.core._EQ_.call(null,lt.objs.files.ext.call(null,p1__19695_SHARP_),\"elm\");\n});})(pck_json))\n,lt.objs.files.ls.call(null,project_path)));\n} else\n{return cljs.core.map.call(null,((function (pck_json){\nreturn (function (x){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),lt.plugins.elm_light.modulebrowser.deduce_module_name.call(null,lt.objs.files.join.call(null,project_path,dir),x),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),x], null);\n});})(pck_json))\n,lt.objs.files.filter_walk.call(null,((function (pck_json){\nreturn (function (p1__19696_SHARP_){return cljs.core._EQ_.call(null,lt.objs.files.ext.call(null,p1__19696_SHARP_),\"elm\");\n});})(pck_json))\n,lt.objs.files.join.call(null,project_path,dir)));\n}\n});})(pck_json))\n,new cljs.core.Keyword(null,\"source-directories\",\"source-directories\",4475397259).cljs$core$IFn$_invoke$arity$1(pck_json))));\n});\nlt.plugins.elm_light.modulebrowser.get_all_modules = (function get_all_modules(project_path){return cljs.core.concat.call(null,lt.plugins.elm_light.modulebrowser.get_project_modules.call(null,project_path),lt.plugins.elm_light.modulebrowser.get_package_modules.call(null,project_path));\n});\nlt.plugins.elm_light.modulebrowser.wrapper = (function wrapper(this$){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div\",\"div\",1014003715),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"id\",\"id\",1013907597),\"elm-module-browser\"], null),\"Retrieving modules...\"], null));var seq__19703_19719 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19704_19720 = null;var count__19705_19721 = 0;var i__19706_19722 = 0;while(true){\nif((i__19706_19722 < count__19705_19721))\n{var vec__19707_19723 = cljs.core._nth.call(null,chunk__19704_19720,i__19706_19722);var ev__6318__auto___19724 = cljs.core.nth.call(null,vec__19707_19723,0,null);var func__6319__auto___19725 = cljs.core.nth.call(null,vec__19707_19723,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19724,func__6319__auto___19725);\n{\nvar G__19726 = seq__19703_19719;\nvar G__19727 = chunk__19704_19720;\nvar G__19728 = count__19705_19721;\nvar G__19729 = (i__19706_19722 + 1);\nseq__19703_19719 = G__19726;\nchunk__19704_19720 = G__19727;\ncount__19705_19721 = G__19728;\ni__19706_19722 = G__19729;\ncontinue;\n}\n} else\n{var temp__4092__auto___19730 = cljs.core.seq.call(null,seq__19703_19719);if(temp__4092__auto___19730)\n{var seq__19703_19731__$1 = temp__4092__auto___19730;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19703_19731__$1))\n{var c__5632__auto___19732 = cljs.core.chunk_first.call(null,seq__19703_19731__$1);{\nvar G__19733 = cljs.core.chunk_rest.call(null,seq__19703_19731__$1);\nvar G__19734 = c__5632__auto___19732;\nvar G__19735 = cljs.core.count.call(null,c__5632__auto___19732);\nvar G__19736 = 0;\nseq__19703_19719 = G__19733;\nchunk__19704_19720 = G__19734;\ncount__19705_19721 = G__19735;\ni__19706_19722 = G__19736;\ncontinue;\n}\n} else\n{var vec__19708_19737 = cljs.core.first.call(null,seq__19703_19731__$1);var ev__6318__auto___19738 = cljs.core.nth.call(null,vec__19708_19737,0,null);var func__6319__auto___19739 = cljs.core.nth.call(null,vec__19708_19737,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19738,func__6319__auto___19739);\n{\nvar G__19740 = cljs.core.next.call(null,seq__19703_19731__$1);\nvar G__19741 = null;\nvar G__19742 = 0;\nvar G__19743 = 0;\nseq__19703_19719 = G__19740;\nchunk__19704_19720 = G__19741;\ncount__19705_19721 = G__19742;\ni__19706_19722 = G__19743;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.modulebrowser.__BEH__clear_BANG_ = (function __BEH__clear_BANG_(this$){return lt.objs.command.exec_BANG_.call(null,new cljs.core.Keyword(null,\"close-sidebar\",\"close-sidebar\",1108494329));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.modulebrowser\",\"clear!\",\"lt.plugins.elm-light.modulebrowser/clear!\",830826271),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.modulebrowser.__BEH__clear_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"clear!\",\"clear!\",3951036134),null], null), null));\nlt.plugins.elm_light.modulebrowser.__BEH__focus_BANG_ = (function __BEH__focus_BANG_(this$){var input = lt.util.dom.$.call(null,\"#elm-module-browser input\");return input.focus();\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.modulebrowser\",\"focus!\",\"lt.plugins.elm-light.modulebrowser/focus!\",876390918),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.modulebrowser.__BEH__focus_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"focus!\",\"focus!\",4039653819),null], null), null));\nlt.plugins.elm_light.modulebrowser.__BEH__ensure_visible = (function __BEH__ensure_visible(this$){return lt.objs.sidebar.command.ensure_visible.call(null,this$);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.modulebrowser\",\"ensure-visible\",\"lt.plugins.elm-light.modulebrowser/ensure-visible\",547005840),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.modulebrowser.__BEH__ensure_visible,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"ensure-visible\",\"ensure-visible\",4239017301),null], null), null));\nlt.plugins.elm_light.modulebrowser.__BEH__show_project_modules = (function __BEH__show_project_modules(this$,prj_path){var modules = lt.plugins.elm_light.modulebrowser.get_all_modules.call(null,prj_path);var el = lt.util.dom.$.call(null,\"#elm-module-browser\");var mod_browser = Elm.embed(Elm.ModuleBrowser,el,cljs.core.clj__GT_js.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"modzPort\",\"modzPort\",4708408779),cljs.core.PersistentVector.EMPTY], null)));mod_browser.ports.modzPort.send(cljs.core.clj__GT_js.call(null,modules));\nmod_browser.ports.changeSelection.subscribe(((function (modules,el,mod_browser){\nreturn (function (){return lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"ensure-visible\",\"ensure-visible\",4239017301));\n});})(modules,el,mod_browser))\n);\nmod_browser.ports.select.subscribe(((function (modules,el,mod_browser){\nreturn (function (file){lt.objs.command.exec_BANG_.call(null,new cljs.core.Keyword(null,\"open-path\",\"open-path\",2513940794),file);\nreturn lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"clear!\",\"clear!\",3951036134));\n});})(modules,el,mod_browser))\n);\nmod_browser.ports.close.subscribe(((function (modules,el,mod_browser){\nreturn (function (){return lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"clear!\",\"clear!\",3951036134));\n});})(modules,el,mod_browser))\n);\nreturn lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"focus!\",\"focus!\",4039653819));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.modulebrowser\",\"show-project-modules\",\"lt.plugins.elm-light.modulebrowser/show-project-modules\",4239249840),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.modulebrowser.__BEH__show_project_modules,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"show-project-modules\",\"show-project-modules\",2830590325),null], null), null));\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.modulebrowser\",\"modulebrowser\",\"lt.plugins.elm-light.modulebrowser/modulebrowser\",2756314871),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.modulebrowser\",\"elm.modulebrowser\",1437552486),null], null), null),new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Elm module browser\",new cljs.core.Keyword(null,\"order\",\"order\",1119910592),2,new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){return lt.plugins.elm_light.modulebrowser.wrapper.call(null,this$);\n}));\nlt.plugins.elm_light.modulebrowser.module_bar = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.modulebrowser\",\"modulebrowser\",\"lt.plugins.elm-light.modulebrowser/modulebrowser\",2756314871));\nlt.objs.sidebar.add_item.call(null,lt.objs.sidebar.rightbar,lt.plugins.elm_light.modulebrowser.module_bar);\nlt.plugins.elm_light.modulebrowser.__BEH__list_modules = (function __BEH__list_modules(ed){var temp__4092__auto__ = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));if(cljs.core.truth_(temp__4092__auto__))\n{var prj_path = temp__4092__auto__;lt.object.raise.call(null,lt.objs.sidebar.rightbar,new cljs.core.Keyword(null,\"toggle\",\"toggle\",4440567494),lt.plugins.elm_light.modulebrowser.module_bar);\nreturn lt.object.raise.call(null,lt.plugins.elm_light.modulebrowser.module_bar,new cljs.core.Keyword(null,\"show-project-modules\",\"show-project-modules\",2830590325),prj_path);\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.modulebrowser\",\"list-modules\",\"lt.plugins.elm-light.modulebrowser/list-modules\",1482195219),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.modulebrowser.__BEH__list_modules,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.elm.list-modules\",\"editor.elm.list-modules\",4718639987),null], null), null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"show-modulebrowser\",\"show-modulebrowser\",3667882974),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Show module-browser\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.list-modules\",\"editor.elm.list-modules\",4718639987));\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.usages')) {\ngoog.provide('lt.plugins.elm_light.usages');\ngoog.require('cljs.core');\ngoog.require('lt.objs.files');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.context');\ngoog.require('lt.objs.tabs');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('crate.core');\ngoog.require('lt.objs.context');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('lt.objs.jump_stack');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.clients');\ngoog.require('clojure.string');\ngoog.require('lt.objs.jump_stack');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.console');\ngoog.require('crate.core');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.objs.clients');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.plugins.elm_light.clients');\nlt.plugins.elm_light.usages.wrapper = (function wrapper(this$){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div\",\"div\",1014003715),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"search-results elm-usages\"], null),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ul.res\",\"ul.res\",4464738363)], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.searcher\",\"div.searcher\",3267271812),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"p\",\"p\",1013904354),\"\"], null)], null)], null));var seq__20307_20409 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__20308_20410 = null;var count__20309_20411 = 0;var i__20310_20412 = 0;while(true){\nif((i__20310_20412 < count__20309_20411))\n{var vec__20311_20413 = cljs.core._nth.call(null,chunk__20308_20410,i__20310_20412);var ev__6318__auto___20414 = cljs.core.nth.call(null,vec__20311_20413,0,null);var func__6319__auto___20415 = cljs.core.nth.call(null,vec__20311_20413,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20414,func__6319__auto___20415);\n{\nvar G__20416 = seq__20307_20409;\nvar G__20417 = chunk__20308_20410;\nvar G__20418 = count__20309_20411;\nvar G__20419 = (i__20310_20412 + 1);\nseq__20307_20409 = G__20416;\nchunk__20308_20410 = G__20417;\ncount__20309_20411 = G__20418;\ni__20310_20412 = G__20419;\ncontinue;\n}\n} else\n{var temp__4092__auto___20420 = cljs.core.seq.call(null,seq__20307_20409);if(temp__4092__auto___20420)\n{var seq__20307_20421__$1 = temp__4092__auto___20420;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20307_20421__$1))\n{var c__5632__auto___20422 = cljs.core.chunk_first.call(null,seq__20307_20421__$1);{\nvar G__20423 = cljs.core.chunk_rest.call(null,seq__20307_20421__$1);\nvar G__20424 = c__5632__auto___20422;\nvar G__20425 = cljs.core.count.call(null,c__5632__auto___20422);\nvar G__20426 = 0;\nseq__20307_20409 = G__20423;\nchunk__20308_20410 = G__20424;\ncount__20309_20411 = G__20425;\ni__20310_20412 = G__20426;\ncontinue;\n}\n} else\n{var vec__20312_20427 = cljs.core.first.call(null,seq__20307_20421__$1);var ev__6318__auto___20428 = cljs.core.nth.call(null,vec__20312_20427,0,null);var func__6319__auto___20429 = cljs.core.nth.call(null,vec__20312_20427,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20428,func__6319__auto___20429);\n{\nvar G__20430 = cljs.core.next.call(null,seq__20307_20421__$1);\nvar G__20431 = null;\nvar G__20432 = 0;\nvar G__20433 = 0;\nseq__20307_20409 = G__20430;\nchunk__20308_20410 = G__20431;\ncount__20309_20411 = G__20432;\ni__20310_20412 = G__20433;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.usages.loader = (function loader(){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.bubblingG\",\"div.bubblingG\",1068758387),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"id\",\"id\",1013907597),\"bubblingG_1\"], null)], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"id\",\"id\",1013907597),\"bubblingG_2\"], null)], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"id\",\"id\",1013907597),\"bubblingG_3\"], null)], null)], null));var seq__20319_20434 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__20320_20435 = null;var count__20321_20436 = 0;var i__20322_20437 = 0;while(true){\nif((i__20322_20437 < count__20321_20436))\n{var vec__20323_20438 = cljs.core._nth.call(null,chunk__20320_20435,i__20322_20437);var ev__6318__auto___20439 = cljs.core.nth.call(null,vec__20323_20438,0,null);var func__6319__auto___20440 = cljs.core.nth.call(null,vec__20323_20438,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20439,func__6319__auto___20440);\n{\nvar G__20441 = seq__20319_20434;\nvar G__20442 = chunk__20320_20435;\nvar G__20443 = count__20321_20436;\nvar G__20444 = (i__20322_20437 + 1);\nseq__20319_20434 = G__20441;\nchunk__20320_20435 = G__20442;\ncount__20321_20436 = G__20443;\ni__20322_20437 = G__20444;\ncontinue;\n}\n} else\n{var temp__4092__auto___20445 = cljs.core.seq.call(null,seq__20319_20434);if(temp__4092__auto___20445)\n{var seq__20319_20446__$1 = temp__4092__auto___20445;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20319_20446__$1))\n{var c__5632__auto___20447 = cljs.core.chunk_first.call(null,seq__20319_20446__$1);{\nvar G__20448 = cljs.core.chunk_rest.call(null,seq__20319_20446__$1);\nvar G__20449 = c__5632__auto___20447;\nvar G__20450 = cljs.core.count.call(null,c__5632__auto___20447);\nvar G__20451 = 0;\nseq__20319_20434 = G__20448;\nchunk__20320_20435 = G__20449;\ncount__20321_20436 = G__20450;\ni__20322_20437 = G__20451;\ncontinue;\n}\n} else\n{var vec__20324_20452 = cljs.core.first.call(null,seq__20319_20446__$1);var ev__6318__auto___20453 = cljs.core.nth.call(null,vec__20324_20452,0,null);var func__6319__auto___20454 = cljs.core.nth.call(null,vec__20324_20452,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20453,func__6319__auto___20454);\n{\nvar G__20455 = cljs.core.next.call(null,seq__20319_20446__$1);\nvar G__20456 = null;\nvar G__20457 = 0;\nvar G__20458 = 0;\nseq__20319_20434 = G__20455;\nchunk__20320_20435 = G__20456;\ncount__20321_20436 = G__20457;\ni__20322_20437 = G__20458;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.usages.highlight = (function highlight(line,sym){return clojure.string.replace.call(null,line,cljs.core.re_pattern.call(null,[cljs.core.str(\"\\\\b\"),cljs.core.str(sym),cljs.core.str(\"\\\\b\")].join('')),[cljs.core.str(\"<em>\"),cljs.core.str(sym),cljs.core.str(\"</em>\")].join('')).substring(0,150);\n});\nlt.plugins.elm_light.usages.open_hit = (function open_hit(file,hit){lt.objs.command.exec_BANG_.call(null,new cljs.core.Keyword(null,\"open-path\",\"open-path\",2513940794),file);\nvar ed = lt.objs.editor.pool.last_active.call(null);return lt.objs.editor.move_cursor.call(null,ed,new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(hit));\n});\nlt.plugins.elm_light.usages.hit_entry = (function hit_entry(sym,file,hit){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"p\",\"p\",1013904354),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"entry\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span.line\",\"span.line\",4619821962),[cljs.core.str(new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(hit))),cljs.core.str(\",\"),cljs.core.str(new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(hit)))].join('')], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"pre\",\"pre\",1014015509),crate.core.raw.call(null,lt.plugins.elm_light.usages.highlight.call(null,new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(hit),sym))], null)], null));var seq__20331_20459 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"click\",\"click\",1108654330),((function (e__6317__auto__){\nreturn (function (){return lt.plugins.elm_light.usages.open_hit.call(null,file,hit);\n});})(e__6317__auto__))\n], null)));var chunk__20332_20460 = null;var count__20333_20461 = 0;var i__20334_20462 = 0;while(true){\nif((i__20334_20462 < count__20333_20461))\n{var vec__20335_20463 = cljs.core._nth.call(null,chunk__20332_20460,i__20334_20462);var ev__6318__auto___20464 = cljs.core.nth.call(null,vec__20335_20463,0,null);var func__6319__auto___20465 = cljs.core.nth.call(null,vec__20335_20463,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20464,func__6319__auto___20465);\n{\nvar G__20466 = seq__20331_20459;\nvar G__20467 = chunk__20332_20460;\nvar G__20468 = count__20333_20461;\nvar G__20469 = (i__20334_20462 + 1);\nseq__20331_20459 = G__20466;\nchunk__20332_20460 = G__20467;\ncount__20333_20461 = G__20468;\ni__20334_20462 = G__20469;\ncontinue;\n}\n} else\n{var temp__4092__auto___20470 = cljs.core.seq.call(null,seq__20331_20459);if(temp__4092__auto___20470)\n{var seq__20331_20471__$1 = temp__4092__auto___20470;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20331_20471__$1))\n{var c__5632__auto___20472 = cljs.core.chunk_first.call(null,seq__20331_20471__$1);{\nvar G__20473 = cljs.core.chunk_rest.call(null,seq__20331_20471__$1);\nvar G__20474 = c__5632__auto___20472;\nvar G__20475 = cljs.core.count.call(null,c__5632__auto___20472);\nvar G__20476 = 0;\nseq__20331_20459 = G__20473;\nchunk__20332_20460 = G__20474;\ncount__20333_20461 = G__20475;\ni__20334_20462 = G__20476;\ncontinue;\n}\n} else\n{var vec__20336_20477 = cljs.core.first.call(null,seq__20331_20471__$1);var ev__6318__auto___20478 = cljs.core.nth.call(null,vec__20336_20477,0,null);var func__6319__auto___20479 = cljs.core.nth.call(null,vec__20336_20477,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20478,func__6319__auto___20479);\n{\nvar G__20480 = cljs.core.next.call(null,seq__20331_20471__$1);\nvar G__20481 = null;\nvar G__20482 = 0;\nvar G__20483 = 0;\nseq__20331_20459 = G__20480;\nchunk__20332_20460 = G__20481;\ncount__20333_20461 = G__20482;\ni__20334_20462 = G__20483;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.usages.module_item = (function module_item(sym,p__20338){var map__20346 = p__20338;var map__20346__$1 = ((cljs.core.seq_QMARK_.call(null,map__20346))?cljs.core.apply.call(null,cljs.core.hash_map,map__20346):map__20346);var module = map__20346__$1;var file = cljs.core.get.call(null,map__20346__$1,new cljs.core.Keyword(null,\"file\",\"file\",1017047278));var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"li\",\"li\",1013907695),new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"p.path\",\"p.path\",4266284629),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span.file\",\"span.file\",4619643154),lt.objs.files.basename.call(null,file)], null),\"(\",lt.objs.files.parent.call(null,file),\")\"], null),cljs.core.map.call(null,((function (map__20346,map__20346__$1,module,file){\nreturn (function (p1__20337_SHARP_){return lt.plugins.elm_light.usages.hit_entry.call(null,sym,file,p1__20337_SHARP_);\n});})(map__20346,map__20346__$1,module,file))\n,new cljs.core.Keyword(null,\"hits\",\"hits\",1017107122).cljs$core$IFn$_invoke$arity$1(module))], null));var seq__20347_20484 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__20348_20485 = null;var count__20349_20486 = 0;var i__20350_20487 = 0;while(true){\nif((i__20350_20487 < count__20349_20486))\n{var vec__20351_20488 = cljs.core._nth.call(null,chunk__20348_20485,i__20350_20487);var ev__6318__auto___20489 = cljs.core.nth.call(null,vec__20351_20488,0,null);var func__6319__auto___20490 = cljs.core.nth.call(null,vec__20351_20488,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20489,func__6319__auto___20490);\n{\nvar G__20491 = seq__20347_20484;\nvar G__20492 = chunk__20348_20485;\nvar G__20493 = count__20349_20486;\nvar G__20494 = (i__20350_20487 + 1);\nseq__20347_20484 = G__20491;\nchunk__20348_20485 = G__20492;\ncount__20349_20486 = G__20493;\ni__20350_20487 = G__20494;\ncontinue;\n}\n} else\n{var temp__4092__auto___20495 = cljs.core.seq.call(null,seq__20347_20484);if(temp__4092__auto___20495)\n{var seq__20347_20496__$1 = temp__4092__auto___20495;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20347_20496__$1))\n{var c__5632__auto___20497 = cljs.core.chunk_first.call(null,seq__20347_20496__$1);{\nvar G__20498 = cljs.core.chunk_rest.call(null,seq__20347_20496__$1);\nvar G__20499 = c__5632__auto___20497;\nvar G__20500 = cljs.core.count.call(null,c__5632__auto___20497);\nvar G__20501 = 0;\nseq__20347_20484 = G__20498;\nchunk__20348_20485 = G__20499;\ncount__20349_20486 = G__20500;\ni__20350_20487 = G__20501;\ncontinue;\n}\n} else\n{var vec__20352_20502 = cljs.core.first.call(null,seq__20347_20496__$1);var ev__6318__auto___20503 = cljs.core.nth.call(null,vec__20352_20502,0,null);var func__6319__auto___20504 = cljs.core.nth.call(null,vec__20352_20502,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20503,func__6319__auto___20504);\n{\nvar G__20505 = cljs.core.next.call(null,seq__20347_20496__$1);\nvar G__20506 = null;\nvar G__20507 = 0;\nvar G__20508 = 0;\nseq__20347_20484 = G__20505;\nchunk__20348_20485 = G__20506;\ncount__20349_20486 = G__20507;\ni__20350_20487 = G__20508;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.usages.search_results = (function search_results(p__20354){var map__20362 = p__20354;var map__20362__$1 = ((cljs.core.seq_QMARK_.call(null,map__20362))?cljs.core.apply.call(null,cljs.core.hash_map,map__20362):map__20362);var candidate = cljs.core.get.call(null,map__20362__$1,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413));var usages_per_module = cljs.core.get.call(null,map__20362__$1,new cljs.core.Keyword(null,\"usages-per-module\",\"usages-per-module\",3285520969));var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ul.res\",\"ul.res\",4464738363),cljs.core.map.call(null,((function (map__20362,map__20362__$1,candidate,usages_per_module){\nreturn (function (p1__20353_SHARP_){return lt.plugins.elm_light.usages.module_item.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate),p1__20353_SHARP_);\n});})(map__20362,map__20362__$1,candidate,usages_per_module))\n,usages_per_module)], null));var seq__20363_20509 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__20364_20510 = null;var count__20365_20511 = 0;var i__20366_20512 = 0;while(true){\nif((i__20366_20512 < count__20365_20511))\n{var vec__20367_20513 = cljs.core._nth.call(null,chunk__20364_20510,i__20366_20512);var ev__6318__auto___20514 = cljs.core.nth.call(null,vec__20367_20513,0,null);var func__6319__auto___20515 = cljs.core.nth.call(null,vec__20367_20513,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20514,func__6319__auto___20515);\n{\nvar G__20516 = seq__20363_20509;\nvar G__20517 = chunk__20364_20510;\nvar G__20518 = count__20365_20511;\nvar G__20519 = (i__20366_20512 + 1);\nseq__20363_20509 = G__20516;\nchunk__20364_20510 = G__20517;\ncount__20365_20511 = G__20518;\ni__20366_20512 = G__20519;\ncontinue;\n}\n} else\n{var temp__4092__auto___20520 = cljs.core.seq.call(null,seq__20363_20509);if(temp__4092__auto___20520)\n{var seq__20363_20521__$1 = temp__4092__auto___20520;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20363_20521__$1))\n{var c__5632__auto___20522 = cljs.core.chunk_first.call(null,seq__20363_20521__$1);{\nvar G__20523 = cljs.core.chunk_rest.call(null,seq__20363_20521__$1);\nvar G__20524 = c__5632__auto___20522;\nvar G__20525 = cljs.core.count.call(null,c__5632__auto___20522);\nvar G__20526 = 0;\nseq__20363_20509 = G__20523;\nchunk__20364_20510 = G__20524;\ncount__20365_20511 = G__20525;\ni__20366_20512 = G__20526;\ncontinue;\n}\n} else\n{var vec__20368_20527 = cljs.core.first.call(null,seq__20363_20521__$1);var ev__6318__auto___20528 = cljs.core.nth.call(null,vec__20368_20527,0,null);var func__6319__auto___20529 = cljs.core.nth.call(null,vec__20368_20527,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20528,func__6319__auto___20529);\n{\nvar G__20530 = cljs.core.next.call(null,seq__20363_20521__$1);\nvar G__20531 = null;\nvar G__20532 = 0;\nvar G__20533 = 0;\nseq__20363_20509 = G__20530;\nchunk__20364_20510 = G__20531;\ncount__20365_20511 = G__20532;\ni__20366_20512 = G__20533;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.usages.count_hits = (function count_hits(mods){return cljs.core.count.call(null,cljs.core.mapcat.call(null,new cljs.core.Keyword(null,\"hits\",\"hits\",1017107122),mods));\n});\nlt.plugins.elm_light.usages.candidate_link = (function candidate_link(candidate){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span.link\",\"span.link\",4619821968),[cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\" (\"),cljs.core.str(new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(candidate)),cljs.core.str(\")\")].join('')], null));var seq__20375_20534 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"click\",\"click\",1108654330),((function (e__6317__auto__){\nreturn (function (){lt.objs.command.exec_BANG_.call(null,new cljs.core.Keyword(null,\"open-path\",\"open-path\",2513940794),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(candidate));\nvar ed = lt.objs.editor.pool.last_active.call(null);return lt.objs.editor.move_cursor.call(null,ed,new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.__GT_range.call(null,new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(candidate))));\n});})(e__6317__auto__))\n], null)));var chunk__20376_20535 = null;var count__20377_20536 = 0;var i__20378_20537 = 0;while(true){\nif((i__20378_20537 < count__20377_20536))\n{var vec__20379_20538 = cljs.core._nth.call(null,chunk__20376_20535,i__20378_20537);var ev__6318__auto___20539 = cljs.core.nth.call(null,vec__20379_20538,0,null);var func__6319__auto___20540 = cljs.core.nth.call(null,vec__20379_20538,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20539,func__6319__auto___20540);\n{\nvar G__20541 = seq__20375_20534;\nvar G__20542 = chunk__20376_20535;\nvar G__20543 = count__20377_20536;\nvar G__20544 = (i__20378_20537 + 1);\nseq__20375_20534 = G__20541;\nchunk__20376_20535 = G__20542;\ncount__20377_20536 = G__20543;\ni__20378_20537 = G__20544;\ncontinue;\n}\n} else\n{var temp__4092__auto___20545 = cljs.core.seq.call(null,seq__20375_20534);if(temp__4092__auto___20545)\n{var seq__20375_20546__$1 = temp__4092__auto___20545;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20375_20546__$1))\n{var c__5632__auto___20547 = cljs.core.chunk_first.call(null,seq__20375_20546__$1);{\nvar G__20548 = cljs.core.chunk_rest.call(null,seq__20375_20546__$1);\nvar G__20549 = c__5632__auto___20547;\nvar G__20550 = cljs.core.count.call(null,c__5632__auto___20547);\nvar G__20551 = 0;\nseq__20375_20534 = G__20548;\nchunk__20376_20535 = G__20549;\ncount__20377_20536 = G__20550;\ni__20378_20537 = G__20551;\ncontinue;\n}\n} else\n{var vec__20380_20552 = cljs.core.first.call(null,seq__20375_20546__$1);var ev__6318__auto___20553 = cljs.core.nth.call(null,vec__20380_20552,0,null);var func__6319__auto___20554 = cljs.core.nth.call(null,vec__20380_20552,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20553,func__6319__auto___20554);\n{\nvar G__20555 = cljs.core.next.call(null,seq__20375_20546__$1);\nvar G__20556 = null;\nvar G__20557 = 0;\nvar G__20558 = 0;\nseq__20375_20534 = G__20555;\nchunk__20376_20535 = G__20556;\ncount__20377_20536 = G__20557;\ni__20378_20537 = G__20558;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.usages.searcher = (function searcher(p__20381){var map__20389 = p__20381;var map__20389__$1 = ((cljs.core.seq_QMARK_.call(null,map__20389))?cljs.core.apply.call(null,cljs.core.hash_map,map__20389):map__20389);var token = cljs.core.get.call(null,map__20389__$1,new cljs.core.Keyword(null,\"token\",\"token\",1124445547));var candidate = cljs.core.get.call(null,map__20389__$1,new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413));var usages_per_module = cljs.core.get.call(null,map__20389__$1,new cljs.core.Keyword(null,\"usages-per-module\",\"usages-per-module\",3285520969));var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.searcher\",\"div.searcher\",3267271812),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"p\",\"p\",1013904354),crate.core.raw.call(null,[cljs.core.str(\"Found \"),cljs.core.str(lt.plugins.elm_light.usages.count_hits.call(null,usages_per_module)),cljs.core.str(\" usages for \")].join('')),(cljs.core.truth_(candidate)?lt.plugins.elm_light.usages.candidate_link.call(null,candidate):new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"strong\",\"strong\",4416891401),token], null)], null))], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.signature\",\"div.signature\",1444193037),(function (){var or__4884__auto__ = new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(candidate));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(candidate);if(cljs.core.truth_(or__4884__auto____$1))\n{return or__4884__auto____$1;\n} else\n{return new cljs.core.Keyword(null,\"paramsRaw\",\"paramsRaw\",2968749108).cljs$core$IFn$_invoke$arity$1(candidate);\n}\n}\n})()], null)], null));var seq__20390_20559 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__20391_20560 = null;var count__20392_20561 = 0;var i__20393_20562 = 0;while(true){\nif((i__20393_20562 < count__20392_20561))\n{var vec__20394_20563 = cljs.core._nth.call(null,chunk__20391_20560,i__20393_20562);var ev__6318__auto___20564 = cljs.core.nth.call(null,vec__20394_20563,0,null);var func__6319__auto___20565 = cljs.core.nth.call(null,vec__20394_20563,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20564,func__6319__auto___20565);\n{\nvar G__20566 = seq__20390_20559;\nvar G__20567 = chunk__20391_20560;\nvar G__20568 = count__20392_20561;\nvar G__20569 = (i__20393_20562 + 1);\nseq__20390_20559 = G__20566;\nchunk__20391_20560 = G__20567;\ncount__20392_20561 = G__20568;\ni__20393_20562 = G__20569;\ncontinue;\n}\n} else\n{var temp__4092__auto___20570 = cljs.core.seq.call(null,seq__20390_20559);if(temp__4092__auto___20570)\n{var seq__20390_20571__$1 = temp__4092__auto___20570;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20390_20571__$1))\n{var c__5632__auto___20572 = cljs.core.chunk_first.call(null,seq__20390_20571__$1);{\nvar G__20573 = cljs.core.chunk_rest.call(null,seq__20390_20571__$1);\nvar G__20574 = c__5632__auto___20572;\nvar G__20575 = cljs.core.count.call(null,c__5632__auto___20572);\nvar G__20576 = 0;\nseq__20390_20559 = G__20573;\nchunk__20391_20560 = G__20574;\ncount__20392_20561 = G__20575;\ni__20393_20562 = G__20576;\ncontinue;\n}\n} else\n{var vec__20395_20577 = cljs.core.first.call(null,seq__20390_20571__$1);var ev__6318__auto___20578 = cljs.core.nth.call(null,vec__20395_20577,0,null);var func__6319__auto___20579 = cljs.core.nth.call(null,vec__20395_20577,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20578,func__6319__auto___20579);\n{\nvar G__20580 = cljs.core.next.call(null,seq__20390_20571__$1);\nvar G__20581 = null;\nvar G__20582 = 0;\nvar G__20583 = 0;\nseq__20390_20559 = G__20580;\nchunk__20391_20560 = G__20581;\ncount__20392_20561 = G__20582;\ni__20393_20562 = G__20583;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.usages.show_results = (function show_results(this$,res){var container = lt.object.__GT_content.call(null,this$);var results_ul = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"ul.res\",\"ul.res\",4464738363),container);var searcher_ui = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.searcher\",\"div.searcher\",3267271812),container);lt.util.dom.replace_with.call(null,results_ul,lt.plugins.elm_light.usages.search_results.call(null,res));\nreturn lt.util.dom.replace_with.call(null,searcher_ui,lt.plugins.elm_light.usages.searcher.call(null,res));\n});\nlt.plugins.elm_light.usages.add_or_focus_BANG_ = (function add_or_focus_BANG_(obj){var next_ts = lt.objs.tabs.next_tabset.call(null,lt.objs.context.__GT_obj.call(null,new cljs.core.Keyword(null,\"tabset\",\"tabset\",4427500575)));var prev_ts = lt.objs.tabs.prev_tabset.call(null,lt.objs.context.__GT_obj.call(null,new cljs.core.Keyword(null,\"tabset\",\"tabset\",4427500575)));if(cljs.core.truth_(lt.objs.tabs.in_tab_QMARK_.call(null,obj)))\n{} else\n{if(cljs.core.truth_(next_ts))\n{lt.objs.tabs.add_BANG_.call(null,obj,next_ts);\n} else\n{if(cljs.core.truth_(prev_ts))\n{lt.objs.tabs.add_BANG_.call(null,obj,prev_ts);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{var ts_20584 = lt.objs.tabs.spawn_tabset.call(null);lt.objs.tabs.equalize_tabset_widths.call(null);\nlt.objs.tabs.add_BANG_.call(null,obj,ts_20584);\n} else\n{}\n}\n}\n}\nreturn lt.objs.tabs.active_BANG_.call(null,obj);\n});\nlt.plugins.elm_light.usages.ast_pass_through = (function ast_pass_through(this$,ed,msg){return lt.objs.clients.send.call(null,lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.ast.passthrough\",\"editor.elm.ast.passthrough\",3082755153)),new cljs.core.Keyword(null,\"editor.elm.ast.passthrough\",\"editor.elm.ast.passthrough\",3082755153),msg,new cljs.core.Keyword(null,\"only\",\"only\",1017320222),this$);\n});\nlt.plugins.elm_light.usages.__BEH__elm__DOT__find_usages__DOT__complete = (function __BEH__elm__DOT__find_usages__DOT__complete(this$,p__20396){var map__20398 = p__20396;var map__20398__$1 = ((cljs.core.seq_QMARK_.call(null,map__20398))?cljs.core.apply.call(null,cljs.core.hash_map,map__20398):map__20398);var project_path = cljs.core.get.call(null,map__20398__$1,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907));var path = cljs.core.get.call(null,map__20398__$1,new cljs.core.Keyword(null,\"path\",\"path\",1017337751));var token = cljs.core.get.call(null,map__20398__$1,new cljs.core.Keyword(null,\"token\",\"token\",1124445547));lt.plugins.elm_light.usages.show_results.call(null,this$,lt.plugins.elm_light.elm_ast.find_usages.call(null,token,project_path,path));\nreturn lt.objs.notifos.done_working.call(null);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.usages\",\"elm.find-usages.complete\",\"lt.plugins.elm-light.usages/elm.find-usages.complete\",4127058703),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.usages.__BEH__elm__DOT__find_usages__DOT__complete,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.find-usages.complete\",\"elm.find-usages.complete\",3242363995),null], null), null));\nlt.plugins.elm_light.usages.__BEH__elm__DOT__find_usages = (function __BEH__elm__DOT__find_usages(this$,ed,token){lt.objs.notifos.working.call(null,[cljs.core.str(\"Finding usages for \"),cljs.core.str(token)].join(''));\nvar path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));lt.plugins.elm_light.usages.add_or_focus_BANG_.call(null,lt.plugins.elm_light.usages.elm_usages);\nlt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"clear!\",\"clear!\",3951036134));\nreturn lt.plugins.elm_light.usages.ast_pass_through.call(null,this$,ed,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"target\",\"target\",4427965699),new cljs.core.Keyword(null,\"elm.find-usages.complete\",\"elm.find-usages.complete\",3242363995),new cljs.core.Keyword(null,\"data\",\"data\",1016980252),new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"token\",\"token\",1124445547),token,new cljs.core.Keyword(null,\"path\",\"path\",1017337751),path,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907),lt.plugins.elm_light.utils.project_path.call(null,path)], null)], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.usages\",\"elm.find-usages\",\"lt.plugins.elm-light.usages/elm.find-usages\",4366307814),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.usages.__BEH__elm__DOT__find_usages,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.find-usages\",\"elm.find-usages\",3531858864),null], null), null));\nlt.plugins.elm_light.usages.__BEH__on_close = (function __BEH__on_close(this$){return lt.objs.tabs.rem_BANG_.call(null,this$);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.usages\",\"on-close\",\"lt.plugins.elm-light.usages/on-close\",2200537002),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.usages.__BEH__on_close,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"close\",\"close\",1108660586),null], null), null));\nlt.plugins.elm_light.usages.__BEH__clear_BANG_ = (function __BEH__clear_BANG_(this$){lt.util.dom.empty.call(null,lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"ul.res\",\"ul.res\",4464738363),lt.object.__GT_content.call(null,this$)));\nlt.util.dom.empty.call(null,lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.searcher\",\"div.searcher\",3267271812),lt.object.__GT_content.call(null,this$)));\nreturn lt.util.dom.append.call(null,lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.searcher\",\"div.searcher\",3267271812),lt.object.__GT_content.call(null,this$)),lt.plugins.elm_light.usages.loader.call(null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.usages\",\"clear!\",\"lt.plugins.elm-light.usages/clear!\",4751978132),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.usages.__BEH__clear_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"clear!\",\"clear!\",3951036134),null], null), null));\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.usages\",\"elm-usages\",\"lt.plugins.elm-light.usages/elm-usages\",797200415),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.usages\",\"elm.usages\",3031392428),null], null), null),new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Elm usages\",new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"Elm usages\",new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){return lt.plugins.elm_light.usages.wrapper.call(null,this$);\n}));\nlt.plugins.elm_light.usages.elm_usages = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.usages\",\"elm-usages\",\"lt.plugins.elm-light.usages/elm-usages\",797200415));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm-find-usages\",\"elm-find-usages\",3402776145),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Find usages of symbol at cursor\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var temp__4092__auto____$1 = lt.plugins.elm_light.utils.find_symbol.call(null,ed,lt.objs.editor.__GT_cursor.call(null,ed));if(cljs.core.truth_(temp__4092__auto____$1))\n{var token = temp__4092__auto____$1;return lt.object.raise.call(null,lt.plugins.elm_light.usages.elm_usages,new cljs.core.Keyword(null,\"elm.find-usages\",\"elm.find-usages\",3531858864),ed,token);\n} else\n{return null;\n}\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.hinter')) {\ngoog.provide('lt.plugins.elm_light.hinter');\ngoog.require('cljs.core');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('cljs.core.async');\ngoog.require('lt.util.dom');\ngoog.require('cljs.core.async');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.clients');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.editor');\ngoog.require('cljs.core.async');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.objs.clients');\nlt.plugins.elm_light.hinter.curr_time = (function curr_time(){return (new Date()).getTime();\n});\nlt.plugins.elm_light.hinter.chan_id = (function chan_id(ch){return (lt.plugins.elm_light.hinter.curr_time.call(null) + cljs.core.hash.call(null,ch));\n});\nlt.plugins.elm_light.hinter.store_ch = (function store_ch(ed,ch){var chs = (function (){var or__4884__auto__ = new cljs.core.Keyword(null,\"elm-async-channels\",\"elm-async-channels\",3712460666).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return cljs.core.PersistentArrayMap.EMPTY;\n}\n})();var ch_id = lt.plugins.elm_light.hinter.chan_id.call(null,ch);lt.object.assoc_in_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elm-async-channels\",\"elm-async-channels\",3712460666)], null),cljs.core.assoc.call(null,chs,ch_id,ch));\nreturn ch_id;\n});\nlt.plugins.elm_light.hinter.get_ch = (function get_ch(ed,ch_id){return cljs.core.get_in.call(null,cljs.core.deref.call(null,ed),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elm-async-channels\",\"elm-async-channels\",3712460666),ch_id], null));\n});\nlt.plugins.elm_light.hinter.remove_ch = (function remove_ch(ed,ch_id){var chs = (function (){var or__4884__auto__ = new cljs.core.Keyword(null,\"elm-async-channels\",\"elm-async-channels\",3712460666).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return cljs.core.PersistentArrayMap.EMPTY;\n}\n})();return lt.object.assoc_in_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elm-async-channels\",\"elm-async-channels\",3712460666)], null),cljs.core.dissoc.call(null,chs,ch_id));\n});\nlt.plugins.elm_light.hinter.get_token = (function get_token(ed){var pos = lt.objs.editor.__GT_cursor.call(null,ed);var sym = lt.plugins.elm_light.utils.find_symbol.call(null,ed,pos);if(cljs.core.truth_((function (){var and__4872__auto__ = sym;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.seq.call(null,sym);\n} else\n{return and__4872__auto__;\n}\n})()))\n{return new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"string\",\"string\",4416885635),sym,new cljs.core.Keyword(null,\"start\",\"start\",1123661780),(new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415).cljs$core$IFn$_invoke$arity$1(pos) - cljs.core.count.call(null,sym)),new cljs.core.Keyword(null,\"end\",\"end\",1014004813),new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415).cljs$core$IFn$_invoke$arity$1(pos),new cljs.core.Keyword(null,\"line\",\"line\",1017226086),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(pos)], null);\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.hinter.trunc_str = (function trunc_str(v,max_length){if((100 > cljs.core.count.call(null,v)))\n{return lt.plugins.elm_light.hinter.sig;\n} else\n{return [cljs.core.str(v.substring(0,lt.plugins.elm_light.hinter.max_lenght)),cljs.core.str(\"...\")].join('');\n}\n});\nlt.plugins.elm_light.hinter.display_text_elem = (function display_text_elem(token,completion){var elem = document.createElement(\"div\");lt.util.dom.add_class.call(null,elem,\"display-text\");\nlt.util.dom.html.call(null,elem,wrapMatch(completion.text,{\"matched\": new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(token)}));\nreturn elem;\n});\nlt.plugins.elm_light.hinter.module_elem = (function module_elem(completion){var elem = document.createElement(\"div\");lt.util.dom.add_class.call(null,elem,\"module\");\nlt.util.dom.html.call(null,elem,completion.moduleName);\nreturn elem;\n});\nlt.plugins.elm_light.hinter.item_wrapper = (function item_wrapper(){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div\",\"div\",1014003715),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.elm-completion\",\"div.elm-completion\",1209841106),\"\"], null)], null));var seq__16261_16283 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__16262_16284 = null;var count__16263_16285 = 0;var i__16264_16286 = 0;while(true){\nif((i__16264_16286 < count__16263_16285))\n{var vec__16265_16287 = cljs.core._nth.call(null,chunk__16262_16284,i__16264_16286);var ev__6318__auto___16288 = cljs.core.nth.call(null,vec__16265_16287,0,null);var func__6319__auto___16289 = cljs.core.nth.call(null,vec__16265_16287,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___16288,func__6319__auto___16289);\n{\nvar G__16290 = seq__16261_16283;\nvar G__16291 = chunk__16262_16284;\nvar G__16292 = count__16263_16285;\nvar G__16293 = (i__16264_16286 + 1);\nseq__16261_16283 = G__16290;\nchunk__16262_16284 = G__16291;\ncount__16263_16285 = G__16292;\ni__16264_16286 = G__16293;\ncontinue;\n}\n} else\n{var temp__4092__auto___16294 = cljs.core.seq.call(null,seq__16261_16283);if(temp__4092__auto___16294)\n{var seq__16261_16295__$1 = temp__4092__auto___16294;if(cljs.core.chunked_seq_QMARK_.call(null,seq__16261_16295__$1))\n{var c__5632__auto___16296 = cljs.core.chunk_first.call(null,seq__16261_16295__$1);{\nvar G__16297 = cljs.core.chunk_rest.call(null,seq__16261_16295__$1);\nvar G__16298 = c__5632__auto___16296;\nvar G__16299 = cljs.core.count.call(null,c__5632__auto___16296);\nvar G__16300 = 0;\nseq__16261_16283 = G__16297;\nchunk__16262_16284 = G__16298;\ncount__16263_16285 = G__16299;\ni__16264_16286 = G__16300;\ncontinue;\n}\n} else\n{var vec__16266_16301 = cljs.core.first.call(null,seq__16261_16295__$1);var ev__6318__auto___16302 = cljs.core.nth.call(null,vec__16266_16301,0,null);var func__6319__auto___16303 = cljs.core.nth.call(null,vec__16266_16301,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___16302,func__6319__auto___16303);\n{\nvar G__16304 = cljs.core.next.call(null,seq__16261_16295__$1);\nvar G__16305 = null;\nvar G__16306 = 0;\nvar G__16307 = 0;\nseq__16261_16283 = G__16304;\nchunk__16262_16284 = G__16305;\ncount__16263_16285 = G__16306;\ni__16264_16286 = G__16307;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.hinter.item_ui = (function item_ui(token,completion){var item_wrapper = lt.plugins.elm_light.hinter.item_wrapper.call(null);var wrapper = lt.util.dom.$.call(null,\"div.elm-completion\",item_wrapper);lt.util.dom.append.call(null,wrapper,lt.plugins.elm_light.hinter.display_text_elem.call(null,token,completion));\nlt.util.dom.append.call(null,wrapper,lt.plugins.elm_light.hinter.module_elem.call(null,completion));\nreturn item_wrapper;\n});\nlt.plugins.elm_light.hinter.__GT_hints = (function __GT_hints(token,completions){return cljs.core.map.call(null,(function (p1__16267_SHARP_){return cljs.core.PersistentHashMap.fromArrays.call(null,[new cljs.core.Keyword(null,\"text\",\"text\",1017460895),new cljs.core.Keyword(null,\"displayText\",\"displayText\",2728236161),new cljs.core.Keyword(null,\"moduleName\",\"moduleName\",4438520457),new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554),new cljs.core.Keyword(null,\"render\",\"render\",4374279432),new cljs.core.Keyword(null,\"from\",\"from\",1017056028),new cljs.core.Keyword(null,\"to\",\"to\",1013907949)],[new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413).cljs$core$IFn$_invoke$arity$1(p1__16267_SHARP_),new cljs.core.Keyword(null,\"candidate\",\"candidate\",1522567413).cljs$core$IFn$_invoke$arity$1(p1__16267_SHARP_),new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(p1__16267_SHARP_),new cljs.core.Keyword(null,\"signature\",\"signature\",2087488554).cljs$core$IFn$_invoke$arity$1(p1__16267_SHARP_),(function (el,self,data){return lt.util.dom.html.call(null,el,lt.util.dom.html.call(null,lt.plugins.elm_light.hinter.item_ui.call(null,token,data)));\n}),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(token),new cljs.core.Keyword(null,\"line\",\"line\",1017226086),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(token)], null),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),new cljs.core.Keyword(null,\"end\",\"end\",1014004813).cljs$core$IFn$_invoke$arity$1(token),new cljs.core.Keyword(null,\"line\",\"line\",1017226086),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(token)], null)]);\n}),completions);\n});\nlt.plugins.elm_light.hinter.connected_QMARK_ = (function connected_QMARK_(ed){var temp__4092__auto__ = new cljs.core.Keyword(null,\"default\",\"default\",2558708147).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"client\",\"client\",3951159101).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_(temp__4092__auto__))\n{var default_client = temp__4092__auto__;if(cljs.core.truth_(cljs.core.deref.call(null,default_client)))\n{return true;\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.hinter.bg_parser = lt.objs.thread.thread_STAR_.call(null,(function tfun16268(){var orig__6390__auto__ = argsArray(arguments);var msg__6391__auto__ = orig__6390__auto__.shift();var args__6392__auto__ = orig__6390__auto__.map(cljs.reader.read_string);var raise = ((function (orig__6390__auto__,msg__6391__auto__,args__6392__auto__){\nreturn (function (obj__6393__auto__,k__6394__auto__,v__6395__auto__){return _send(obj__6393__auto__,k__6394__auto__,cljs.core.pr_str.call(null,v__6395__auto__),\"clj\");\n});})(orig__6390__auto__,msg__6391__auto__,args__6392__auto__))\n;args__6392__auto__.unshift(msg__6391__auto__.obj);\nreturn ((function (orig__6390__auto__,msg__6391__auto__,args__6392__auto__,raise){\nreturn (function (obj_id,ch_id,elm_parser_path,elm_code){var parser = require(elm_parser_path);try{var res = parser.parse.call(null,elm_code,{\"startRule\": \"headerOnly\"});return _send(obj_id,new cljs.core.Keyword(null,\"elm.hints.parser.results\",\"elm.hints.parser.results\",1182545987),{\"module\": res, \"ch-id\": ch_id, \"status\": \"ok\"});\n}catch (e16270){var e = e16270;return _send(obj_id,new cljs.core.Keyword(null,\"elm.hints.parser.results\",\"elm.hints.parser.results\",1182545987),{\"error\": e, \"ch-id\": ch_id, \"status\": \"fail\"});\n}});})(orig__6390__auto__,msg__6391__auto__,args__6392__auto__,raise))\n.apply(null,args__6392__auto__);\n}));\nlt.plugins.elm_light.hinter.__BEH__elm_hints_parser_results = (function __BEH__elm_hints_parser_results(ed,res){var pos = lt.objs.editor.__GT_cursor.call(null,ed);var token = lt.plugins.elm_light.hinter.get_token.call(null,ed);var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var map__16272 = lt.plugins.elm_light.utils.mod_js__GT_clj.call(null,res,new cljs.core.Keyword(null,\"keywordize-keys\",\"keywordize-keys\",4191781672),true);var map__16272__$1 = ((cljs.core.seq_QMARK_.call(null,map__16272))?cljs.core.apply.call(null,cljs.core.hash_map,map__16272):map__16272);var error = cljs.core.get.call(null,map__16272__$1,new cljs.core.Keyword(null,\"error\",\"error\",1110689146));var status = cljs.core.get.call(null,map__16272__$1,new cljs.core.Keyword(null,\"status\",\"status\",4416389988));var module = cljs.core.get.call(null,map__16272__$1,new cljs.core.Keyword(null,\"module\",\"module\",4240087518));var ch_id = cljs.core.get.call(null,map__16272__$1,new cljs.core.Keyword(null,\"ch-id\",\"ch-id\",1108477685));var ch = lt.plugins.elm_light.hinter.get_ch.call(null,ed,ch_id);var get_hints = cljs.core.partial.call(null,lt.plugins.elm_light.elm_ast.get_hints,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"token\",\"token\",1124445547),new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(token),new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430),pos,new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473),ed], null),path,lt.plugins.elm_light.utils.project_path.call(null,path));if(cljs.core._EQ_.call(null,\"ok\",status))\n{cljs.core.async.put_BANG_.call(null,ch,lt.plugins.elm_light.hinter.__GT_hints.call(null,token,get_hints.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140),module,new cljs.core.Keyword(null,\"file\",\"file\",1017047278),path], null))));\n} else\n{cljs.core.async.put_BANG_.call(null,ch,lt.plugins.elm_light.hinter.__GT_hints.call(null,token,get_hints.call(null)));\n}\nreturn lt.plugins.elm_light.hinter.remove_ch.call(null,ed,ch_id);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.hinter\",\"elm-hints-parser-results\",\"lt.plugins.elm-light.hinter/elm-hints-parser-results\",3539628406),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.hinter.__BEH__elm_hints_parser_results,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Trigger hints after parsing relevant parts of editor for hinting\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.hints.parser.results\",\"elm.hints.parser.results\",1182545987),null], null), null));\nlt.plugins.elm_light.hinter.__BEH__elm_hints = (function __BEH__elm_hints(ed,channels){var pos = lt.objs.editor.__GT_cursor.call(null,ed);var token = lt.plugins.elm_light.hinter.get_token.call(null,ed);var ch = cljs.core.async.chan.call(null);var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_((function (){var and__4872__auto__ = token;if(cljs.core.truth_(and__4872__auto__))\n{return lt.plugins.elm_light.hinter.connected_QMARK_.call(null,ed);\n} else\n{return and__4872__auto__;\n}\n})()))\n{if(cljs.core.truth_(lt.plugins.elm_light.elm_ast.find_top_level_declaration_by_pos.call(null,pos,lt.plugins.elm_light.utils.project_path.call(null,path),path)))\n{cljs.core.async.put_BANG_.call(null,ch,lt.plugins.elm_light.hinter.__GT_hints.call(null,token,lt.plugins.elm_light.elm_ast.get_hints.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"token\",\"token\",1124445547),new cljs.core.Keyword(null,\"string\",\"string\",4416885635).cljs$core$IFn$_invoke$arity$1(token),new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430),pos,new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473),ed], null),path,lt.plugins.elm_light.utils.project_path.call(null,path))));\nreturn cljs.core.conj.call(null,channels,ch);\n} else\n{var ch_id = lt.plugins.elm_light.hinter.store_ch.call(null,ed,ch);lt.plugins.elm_light.hinter.bg_parser.call(null,ed,ch_id,lt.plugins.elm_light.elm_ast.elm_parser_path,lt.objs.editor.__GT_val.call(null,ed));\nreturn cljs.core.conj.call(null,channels,ch);\n}\n} else\n{return channels;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.hinter\",\"elm-hints\",\"lt.plugins.elm-light.hinter/elm-hints\",3388910241),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.hinter.__BEH__elm_hints,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Provide Elm hints for current cursor position\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"init-hints\",\"init-hints\",4468593473),null], null), null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.linter')) {\ngoog.provide('lt.plugins.elm_light.linter');\ngoog.require('cljs.core');\ngoog.require('crate.binding');\ngoog.require('lt.objs.statusbar');\ngoog.require('lt.util.dom');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.statusbar');\ngoog.require('crate.binding');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.linter.status_class = (function status_class(p__19122){var map__19124 = p__19122;var map__19124__$1 = ((cljs.core.seq_QMARK_.call(null,map__19124))?cljs.core.apply.call(null,cljs.core.hash_map,map__19124):map__19124);var warnings = cljs.core.get.call(null,map__19124__$1,new cljs.core.Keyword(null,\"warnings\",\"warnings\",1511995337));var errors = cljs.core.get.call(null,map__19124__$1,new cljs.core.Keyword(null,\"errors\",\"errors\",4014236381));if((errors > 0))\n{return \"error\";\n} else\n{if((warnings > 0))\n{return \"warning\";\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return \"\";\n} else\n{return null;\n}\n}\n}\n});\nlt.plugins.elm_light.linter.status_text = (function status_text(p__19125){var map__19127 = p__19125;var map__19127__$1 = ((cljs.core.seq_QMARK_.call(null,map__19127))?cljs.core.apply.call(null,cljs.core.hash_map,map__19127):map__19127);var warnings = cljs.core.get.call(null,map__19127__$1,new cljs.core.Keyword(null,\"warnings\",\"warnings\",1511995337));var errors = cljs.core.get.call(null,map__19127__$1,new cljs.core.Keyword(null,\"errors\",\"errors\",4014236381));return [cljs.core.str(\"Lint status: \"),cljs.core.str(errors),cljs.core.str(\"/\"),cljs.core.str(warnings)].join('');\n});\nlt.plugins.elm_light.linter.__GT_status_ui = (function __GT_status_ui(p__19128){var map__19130 = p__19128;var map__19130__$1 = ((cljs.core.seq_QMARK_.call(null,map__19130))?cljs.core.apply.call(null,cljs.core.hash_map,map__19130):map__19130);var lint_summary = cljs.core.get.call(null,map__19130__$1,new cljs.core.Keyword(null,\"lint-summary\",\"lint-summary\",2275048270));return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),[cljs.core.str(\"lint-status \"),cljs.core.str(lt.plugins.elm_light.linter.status_class.call(null,lint_summary))].join('')], null),lt.plugins.elm_light.linter.status_text.call(null,lint_summary)], null);\n});\nlt.plugins.elm_light.linter.__BEH__update_lint_status = (function __BEH__update_lint_status(this$,f){return lt.object.update_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"lint-summary\",\"lint-summary\",2275048270)], null),f);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.linter\",\"update-lint-status\",\"lt.plugins.elm-light.linter/update-lint-status\",1465899355),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.linter.__BEH__update_lint_status,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"update!\",\"update!\",779473898),null], null), null));\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.linter\",\"statusbar.lint-status\",\"lt.plugins.elm-light.linter/statusbar.lint-status\",2197520852),new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),cljs.core.PersistentHashSet.EMPTY,new cljs.core.Keyword(null,\"behaviors\",\"behaviors\",607554515),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(\"lt.plugins.elm-light.linter\",\"update-lint-status\",\"lt.plugins.elm-light.linter/update-lint-status\",1465899355),null], null), null),new cljs.core.Keyword(null,\"lint-summary\",\"lint-summary\",2275048270),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"errors\",\"errors\",4014236381),0,new cljs.core.Keyword(null,\"warnings\",\"warnings\",1511995337),0], null),new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){return lt.objs.statusbar.statusbar_item.call(null,crate.binding.bound.call(null,this$,lt.plugins.elm_light.linter.__GT_status_ui),\"\");\n}));\nlt.plugins.elm_light.linter.statusbar_lint_summary = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.linter\",\"statusbar.lint-status\",\"lt.plugins.elm-light.linter/statusbar.lint-status\",2197520852));\nlt.objs.statusbar.add_statusbar_item.call(null,lt.plugins.elm_light.linter.statusbar_lint_summary);\nlt.plugins.elm_light.linter.grouped_lint_count = (function grouped_lint_count(ed){var temp__4090__auto__ = new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));if(cljs.core.truth_(temp__4090__auto__))\n{var results = temp__4090__auto__;return cljs.core.into.call(null,cljs.core.PersistentArrayMap.EMPTY,cljs.core.map.call(null,((function (results,temp__4090__auto__){\nreturn (function (p__19133){var vec__19134 = p__19133;var k = cljs.core.nth.call(null,vec__19134,0,null);var v = cljs.core.nth.call(null,vec__19134,1,null);return new cljs.core.PersistentArrayMap.fromArray([k,cljs.core.count.call(null,v)], true, false);\n});})(results,temp__4090__auto__))\n,cljs.core.group_by.call(null,new cljs.core.Keyword(null,\"category\",\"category\",1064415344),cljs.core.map.call(null,new cljs.core.Keyword(null,\"result\",\"result\",4374444943),cljs.core.vals.call(null,results)))));\n} else\n{return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"error\",\"error\",1110689146),0,new cljs.core.Keyword(null,\"warning\",\"warning\",2138350350),0], null);\n}\n});\nlt.plugins.elm_light.linter.update_status_for_editor = (function update_status_for_editor(ed){var map__19137 = lt.plugins.elm_light.linter.grouped_lint_count.call(null,ed);var map__19137__$1 = ((cljs.core.seq_QMARK_.call(null,map__19137))?cljs.core.apply.call(null,cljs.core.hash_map,map__19137):map__19137);var warning = cljs.core.get.call(null,map__19137__$1,new cljs.core.Keyword(null,\"warning\",\"warning\",2138350350));var error = cljs.core.get.call(null,map__19137__$1,new cljs.core.Keyword(null,\"error\",\"error\",1110689146));return lt.object.raise.call(null,lt.plugins.elm_light.linter.statusbar_lint_summary,new cljs.core.Keyword(null,\"update!\",\"update!\",779473898),((function (map__19137,map__19137__$1,warning,error){\nreturn (function (p1__19135_SHARP_){return cljs.core.assoc.call(null,p1__19135_SHARP_,new cljs.core.Keyword(null,\"warnings\",\"warnings\",1511995337),(function (){var or__4884__auto__ = warning;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return 0;\n}\n})(),new cljs.core.Keyword(null,\"errors\",\"errors\",4014236381),(function (){var or__4884__auto__ = error;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return 0;\n}\n})());\n});})(map__19137,map__19137__$1,warning,error))\n);\n});\nlt.plugins.elm_light.linter.__BEH__update_linter_on_editor_change = (function __BEH__update_linter_on_editor_change(ed){return lt.plugins.elm_light.linter.update_status_for_editor.call(null,ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.linter\",\"update-linter-on-editor-change\",\"lt.plugins.elm-light.linter/update-linter-on-editor-change\",2858337088),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.linter.__BEH__update_linter_on_editor_change,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"focus\",\"focus\",1111509066),null], null), null));\nlt.plugins.elm_light.linter.remove_widget = (function remove_widget(ed,el){try{lt.util.dom.remove.call(null,el);\n}catch (e19139){var e_19204 = e19139;}return lt.objs.editor.focus.call(null,ed);\n});\nlt.plugins.elm_light.linter.remove_res = (function remove_res(ed,res_id){var map__19141_19205 = cljs.core.get_in.call(null,cljs.core.deref.call(null,ed),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083),res_id], null));var map__19141_19206__$1 = ((cljs.core.seq_QMARK_.call(null,map__19141_19205))?cljs.core.apply.call(null,cljs.core.hash_map,map__19141_19205):map__19141_19205);var dill_19207 = map__19141_19206__$1;var result_19208 = cljs.core.get.call(null,map__19141_19206__$1,new cljs.core.Keyword(null,\"result\",\"result\",4374444943));var mark_19209 = cljs.core.get.call(null,map__19141_19206__$1,new cljs.core.Keyword(null,\"mark\",\"mark\",1017248319));if(cljs.core.truth_(mark_19209))\n{mark_19209.clear();\n} else\n{}\nlt.object.update_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083)], null),cljs.core.dissoc,res_id);\nreturn lt.objs.editor.focus.call(null,ed);\n});\nlt.plugins.elm_light.linter.current_range = (function current_range(ed,mark){var rng = mark.find();var from = rng.from;var to = rng.to;return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"from\",\"from\",1017056028),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),from.ch,new cljs.core.Keyword(null,\"line\",\"line\",1017226086),from.line], null),new cljs.core.Keyword(null,\"to\",\"to\",1013907949),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),to.ch,new cljs.core.Keyword(null,\"line\",\"line\",1017226086),to.line], null)], null);\n});\nlt.plugins.elm_light.linter.execute_action = (function execute_action(ed,res_id,action_fn,res){var map__19143 = cljs.core.get_in.call(null,cljs.core.deref.call(null,ed),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083),res_id], null));var map__19143__$1 = ((cljs.core.seq_QMARK_.call(null,map__19143))?cljs.core.apply.call(null,cljs.core.hash_map,map__19143):map__19143);var mark = cljs.core.get.call(null,map__19143__$1,new cljs.core.Keyword(null,\"mark\",\"mark\",1017248319));action_fn.call(null,res,lt.plugins.elm_light.linter.current_range.call(null,ed,mark));\nreturn lt.plugins.elm_light.linter.remove_res.call(null,ed,res_id);\n});\nlt.plugins.elm_light.linter.action_ui = (function action_ui(ed,action,res_id,res){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span.button\",\"span.button\",4282180040),[cljs.core.str(new cljs.core.Keyword(null,\"text\",\"text\",1017460895).cljs$core$IFn$_invoke$arity$1(action))].join('')], null));var seq__19150_19210 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"click\",\"click\",1108654330),((function (e__6317__auto__){\nreturn (function (){return lt.plugins.elm_light.linter.execute_action.call(null,ed,res_id,new cljs.core.Keyword(null,\"action\",\"action\",3885920680).cljs$core$IFn$_invoke$arity$1(action),res);\n});})(e__6317__auto__))\n], null)));var chunk__19151_19211 = null;var count__19152_19212 = 0;var i__19153_19213 = 0;while(true){\nif((i__19153_19213 < count__19152_19212))\n{var vec__19154_19214 = cljs.core._nth.call(null,chunk__19151_19211,i__19153_19213);var ev__6318__auto___19215 = cljs.core.nth.call(null,vec__19154_19214,0,null);var func__6319__auto___19216 = cljs.core.nth.call(null,vec__19154_19214,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19215,func__6319__auto___19216);\n{\nvar G__19217 = seq__19150_19210;\nvar G__19218 = chunk__19151_19211;\nvar G__19219 = count__19152_19212;\nvar G__19220 = (i__19153_19213 + 1);\nseq__19150_19210 = G__19217;\nchunk__19151_19211 = G__19218;\ncount__19152_19212 = G__19219;\ni__19153_19213 = G__19220;\ncontinue;\n}\n} else\n{var temp__4092__auto___19221 = cljs.core.seq.call(null,seq__19150_19210);if(temp__4092__auto___19221)\n{var seq__19150_19222__$1 = temp__4092__auto___19221;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19150_19222__$1))\n{var c__5632__auto___19223 = cljs.core.chunk_first.call(null,seq__19150_19222__$1);{\nvar G__19224 = cljs.core.chunk_rest.call(null,seq__19150_19222__$1);\nvar G__19225 = c__5632__auto___19223;\nvar G__19226 = cljs.core.count.call(null,c__5632__auto___19223);\nvar G__19227 = 0;\nseq__19150_19210 = G__19224;\nchunk__19151_19211 = G__19225;\ncount__19152_19212 = G__19226;\ni__19153_19213 = G__19227;\ncontinue;\n}\n} else\n{var vec__19155_19228 = cljs.core.first.call(null,seq__19150_19222__$1);var ev__6318__auto___19229 = cljs.core.nth.call(null,vec__19155_19228,0,null);var func__6319__auto___19230 = cljs.core.nth.call(null,vec__19155_19228,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19229,func__6319__auto___19230);\n{\nvar G__19231 = cljs.core.next.call(null,seq__19150_19222__$1);\nvar G__19232 = null;\nvar G__19233 = 0;\nvar G__19234 = 0;\nseq__19150_19210 = G__19231;\nchunk__19151_19211 = G__19232;\ncount__19152_19212 = G__19233;\ni__19153_19213 = G__19234;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.linter.inline_ui = (function inline_ui(ed,res_id,p__19159){var map__19167 = p__19159;var map__19167__$1 = ((cljs.core.seq_QMARK_.call(null,map__19167))?cljs.core.apply.call(null,cljs.core.hash_map,map__19167):map__19167);var res = map__19167__$1;var actions = cljs.core.get.call(null,map__19167__$1,new cljs.core.Keyword(null,\"actions\",\"actions\",4147068015));var category = cljs.core.get.call(null,map__19167__$1,new cljs.core.Keyword(null,\"category\",\"category\",1064415344));var details = cljs.core.get.call(null,map__19167__$1,new cljs.core.Keyword(null,\"details\",\"details\",2571625908));var title = cljs.core.get.call(null,map__19167__$1,new cljs.core.Keyword(null,\"title\",\"title\",1124275658));var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div\",\"div\",1014003715),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"tabindex\",\"tabindex\",4410954191),-1,new cljs.core.Keyword(null,\"class\",\"class\",1108647146),[cljs.core.str(\"linter-res \"),cljs.core.str((function (){var or__4884__auto__ = cljs.core.name.call(null,category);if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return \"error\";\n}\n})())].join('')], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"p.title\",\"p.title\",3057381068),title], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.details\",\"div.details\",4139669847),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"pre\",\"pre\",1014015509),details], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div\",\"div\",1014003715),cljs.core.map.call(null,((function (map__19167,map__19167__$1,res,actions,category,details,title){\nreturn (function (p1__19156_SHARP_){return lt.plugins.elm_light.linter.action_ui.call(null,ed,p1__19156_SHARP_,res_id,res);\n});})(map__19167,map__19167__$1,res,actions,category,details,title))\n,actions)], null)], null)], null));var seq__19168_19235 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"blur\",\"blur\",1016931289),((function (e__6317__auto__,map__19167,map__19167__$1,res,actions,category,details,title){\nreturn (function (p1__19157_SHARP_){return lt.plugins.elm_light.linter.remove_widget.call(null,ed,p1__19157_SHARP_.target);\n});})(e__6317__auto__,map__19167,map__19167__$1,res,actions,category,details,title))\n,new cljs.core.Keyword(null,\"keydown\",\"keydown\",4493897459),((function (e__6317__auto__,map__19167,map__19167__$1,res,actions,category,details,title){\nreturn (function (p1__19158_SHARP_){var kc = p1__19158_SHARP_.keyCode;if(cljs.core._EQ_.call(null,kc,27))\n{lt.plugins.elm_light.linter.remove_widget.call(null,ed,p1__19158_SHARP_.target);\n} else\n{}\nif((cljs.core._EQ_.call(null,kc,13)) && (cljs.core.seq.call(null,actions)))\n{p1__19158_SHARP_.preventDefault();\np1__19158_SHARP_.stopPropagation();\nreturn lt.plugins.elm_light.linter.execute_action.call(null,ed,res_id,new cljs.core.Keyword(null,\"action\",\"action\",3885920680).cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,actions)),res);\n} else\n{return null;\n}\n});})(e__6317__auto__,map__19167,map__19167__$1,res,actions,category,details,title))\n], null)));var chunk__19169_19236 = null;var count__19170_19237 = 0;var i__19171_19238 = 0;while(true){\nif((i__19171_19238 < count__19170_19237))\n{var vec__19172_19239 = cljs.core._nth.call(null,chunk__19169_19236,i__19171_19238);var ev__6318__auto___19240 = cljs.core.nth.call(null,vec__19172_19239,0,null);var func__6319__auto___19241 = cljs.core.nth.call(null,vec__19172_19239,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19240,func__6319__auto___19241);\n{\nvar G__19242 = seq__19168_19235;\nvar G__19243 = chunk__19169_19236;\nvar G__19244 = count__19170_19237;\nvar G__19245 = (i__19171_19238 + 1);\nseq__19168_19235 = G__19242;\nchunk__19169_19236 = G__19243;\ncount__19170_19237 = G__19244;\ni__19171_19238 = G__19245;\ncontinue;\n}\n} else\n{var temp__4092__auto___19246 = cljs.core.seq.call(null,seq__19168_19235);if(temp__4092__auto___19246)\n{var seq__19168_19247__$1 = temp__4092__auto___19246;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19168_19247__$1))\n{var c__5632__auto___19248 = cljs.core.chunk_first.call(null,seq__19168_19247__$1);{\nvar G__19249 = cljs.core.chunk_rest.call(null,seq__19168_19247__$1);\nvar G__19250 = c__5632__auto___19248;\nvar G__19251 = cljs.core.count.call(null,c__5632__auto___19248);\nvar G__19252 = 0;\nseq__19168_19235 = G__19249;\nchunk__19169_19236 = G__19250;\ncount__19170_19237 = G__19251;\ni__19171_19238 = G__19252;\ncontinue;\n}\n} else\n{var vec__19173_19253 = cljs.core.first.call(null,seq__19168_19247__$1);var ev__6318__auto___19254 = cljs.core.nth.call(null,vec__19173_19253,0,null);var func__6319__auto___19255 = cljs.core.nth.call(null,vec__19173_19253,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19254,func__6319__auto___19255);\n{\nvar G__19256 = cljs.core.next.call(null,seq__19168_19247__$1);\nvar G__19257 = null;\nvar G__19258 = 0;\nvar G__19259 = 0;\nseq__19168_19235 = G__19256;\nchunk__19169_19236 = G__19257;\ncount__19170_19237 = G__19258;\ni__19171_19238 = G__19259;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.linter.add_widget = (function add_widget(ed,res_id){var map__19175 = cljs.core.get_in.call(null,cljs.core.deref.call(null,ed),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083),res_id], null));var map__19175__$1 = ((cljs.core.seq_QMARK_.call(null,map__19175))?cljs.core.apply.call(null,cljs.core.hash_map,map__19175):map__19175);var result = cljs.core.get.call(null,map__19175__$1,new cljs.core.Keyword(null,\"result\",\"result\",4374444943));var mark = cljs.core.get.call(null,map__19175__$1,new cljs.core.Keyword(null,\"mark\",\"mark\",1017248319));var ui = lt.plugins.elm_light.linter.inline_ui.call(null,ed,res_id,result);var from = mark.find().from;lt.objs.editor.__GT_cm_ed.call(null,ed).addWidget(from,ui,{\"scrollIntoView\": true});\nreturn lt.util.dom.focus.call(null,ui);\n});\nlt.plugins.elm_light.linter.mark_range = (function mark_range(ed,p__19176){var map__19178 = p__19176;var map__19178__$1 = ((cljs.core.seq_QMARK_.call(null,map__19178))?cljs.core.apply.call(null,cljs.core.hash_map,map__19178):map__19178);var code_range = map__19178__$1;var to = cljs.core.get.call(null,map__19178__$1,new cljs.core.Keyword(null,\"to\",\"to\",1013907949));var from = cljs.core.get.call(null,map__19178__$1,new cljs.core.Keyword(null,\"from\",\"from\",1017056028));if(!(cljs.core._EQ_.call(null,from,to)))\n{return code_range;\n} else\n{return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"from\",\"from\",1017056028),cljs.core.assoc.call(null,from,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),0),new cljs.core.Keyword(null,\"to\",\"to\",1013907949),cljs.core.assoc.call(null,to,new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),lt.objs.editor.line_length.call(null,ed,new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(from)))], null);\n}\n});\nlt.plugins.elm_light.linter.create_mark = (function create_mark(ed,p__19179){var map__19182 = p__19179;var map__19182__$1 = ((cljs.core.seq_QMARK_.call(null,map__19182))?cljs.core.apply.call(null,cljs.core.hash_map,map__19182):map__19182);var code_range = cljs.core.get.call(null,map__19182__$1,new cljs.core.Keyword(null,\"code-range\",\"code-range\",3297446095));var category = cljs.core.get.call(null,map__19182__$1,new cljs.core.Keyword(null,\"category\",\"category\",1064415344));var map__19183 = lt.plugins.elm_light.linter.mark_range.call(null,ed,code_range);var map__19183__$1 = ((cljs.core.seq_QMARK_.call(null,map__19183))?cljs.core.apply.call(null,cljs.core.hash_map,map__19183):map__19183);var to = cljs.core.get.call(null,map__19183__$1,new cljs.core.Keyword(null,\"to\",\"to\",1013907949));var from = cljs.core.get.call(null,map__19183__$1,new cljs.core.Keyword(null,\"from\",\"from\",1017056028));return lt.objs.editor.mark.call(null,ed,from,to,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"className\",\"className\",1004015509),[cljs.core.str(\"lint-\"),cljs.core.str((function (){var or__4884__auto__ = cljs.core.name.call(null,category);if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return \"error\";\n}\n})())].join(''),new cljs.core.Keyword(null,\"inclusiveLeft\",\"inclusiveLeft\",4040813445),false,new cljs.core.Keyword(null,\"inclusiveRight\",\"inclusiveRight\",4659437314),false], null));\n});\nlt.plugins.elm_light.linter.__BEH__linter_result_BANG_ = (function __BEH__linter_result_BANG_(ed,res){var id = [cljs.core.str(cljs.core.gensym.call(null,\"linter-res\"))].join('');var mark = lt.plugins.elm_light.linter.create_mark.call(null,ed,res);mark.ltlintid = id;\nmark.lttype = new cljs.core.Keyword(null,\"linter\",\"linter\",4206213986);\nlt.object.update_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083)], null),cljs.core.assoc,id,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"mark\",\"mark\",1017248319),mark,new cljs.core.Keyword(null,\"result\",\"result\",4374444943),res], null));\nreturn lt.plugins.elm_light.linter.update_status_for_editor.call(null,ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.linter\",\"linter-result!\",\"lt.plugins.elm-light.linter/linter-result!\",4030814380),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.linter.__BEH__linter_result_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"linter-result!\",\"linter-result!\",4482067001),null], null), null));\nlt.plugins.elm_light.linter.__BEH__clear_linter_results_BANG_ = (function __BEH__clear_linter_results_BANG_(ed){var seq__19190_19260 = cljs.core.seq.call(null,new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var chunk__19191_19261 = null;var count__19192_19262 = 0;var i__19193_19263 = 0;while(true){\nif((i__19193_19263 < count__19192_19262))\n{var vec__19194_19264 = cljs.core._nth.call(null,chunk__19191_19261,i__19193_19263);var id_19265 = cljs.core.nth.call(null,vec__19194_19264,0,null);var res_19266 = cljs.core.nth.call(null,vec__19194_19264,1,null);var temp__4092__auto___19267 = new cljs.core.Keyword(null,\"mark\",\"mark\",1017248319).cljs$core$IFn$_invoke$arity$1(res_19266);if(cljs.core.truth_(temp__4092__auto___19267))\n{var m_19268 = temp__4092__auto___19267;m_19268.clear();\n} else\n{}\nvar temp__4092__auto___19269 = new cljs.core.Keyword(null,\"widget\",\"widget\",4520824246).cljs$core$IFn$_invoke$arity$1(res_19266);if(cljs.core.truth_(temp__4092__auto___19269))\n{var w_19270 = temp__4092__auto___19269;lt.util.dom.remove.call(null,w_19270);\n} else\n{}\n{\nvar G__19271 = seq__19190_19260;\nvar G__19272 = chunk__19191_19261;\nvar G__19273 = count__19192_19262;\nvar G__19274 = (i__19193_19263 + 1);\nseq__19190_19260 = G__19271;\nchunk__19191_19261 = G__19272;\ncount__19192_19262 = G__19273;\ni__19193_19263 = G__19274;\ncontinue;\n}\n} else\n{var temp__4092__auto___19275 = cljs.core.seq.call(null,seq__19190_19260);if(temp__4092__auto___19275)\n{var seq__19190_19276__$1 = temp__4092__auto___19275;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19190_19276__$1))\n{var c__5632__auto___19277 = cljs.core.chunk_first.call(null,seq__19190_19276__$1);{\nvar G__19278 = cljs.core.chunk_rest.call(null,seq__19190_19276__$1);\nvar G__19279 = c__5632__auto___19277;\nvar G__19280 = cljs.core.count.call(null,c__5632__auto___19277);\nvar G__19281 = 0;\nseq__19190_19260 = G__19278;\nchunk__19191_19261 = G__19279;\ncount__19192_19262 = G__19280;\ni__19193_19263 = G__19281;\ncontinue;\n}\n} else\n{var vec__19195_19282 = cljs.core.first.call(null,seq__19190_19276__$1);var id_19283 = cljs.core.nth.call(null,vec__19195_19282,0,null);var res_19284 = cljs.core.nth.call(null,vec__19195_19282,1,null);var temp__4092__auto___19285__$1 = new cljs.core.Keyword(null,\"mark\",\"mark\",1017248319).cljs$core$IFn$_invoke$arity$1(res_19284);if(cljs.core.truth_(temp__4092__auto___19285__$1))\n{var m_19286 = temp__4092__auto___19285__$1;m_19286.clear();\n} else\n{}\nvar temp__4092__auto___19287__$1 = new cljs.core.Keyword(null,\"widget\",\"widget\",4520824246).cljs$core$IFn$_invoke$arity$1(res_19284);if(cljs.core.truth_(temp__4092__auto___19287__$1))\n{var w_19288 = temp__4092__auto___19287__$1;lt.util.dom.remove.call(null,w_19288);\n} else\n{}\n{\nvar G__19289 = cljs.core.next.call(null,seq__19190_19276__$1);\nvar G__19290 = null;\nvar G__19291 = 0;\nvar G__19292 = 0;\nseq__19190_19260 = G__19289;\nchunk__19191_19261 = G__19290;\ncount__19192_19262 = G__19291;\ni__19193_19263 = G__19292;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nlt.object.assoc_in_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083)], null),null);\nreturn lt.plugins.elm_light.linter.update_status_for_editor.call(null,ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.linter\",\"clear-linter-results!\",\"lt.plugins.elm-light.linter/clear-linter-results!\",4126992011),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.linter.__BEH__clear_linter_results_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"clear-linter-results!\",\"clear-linter-results!\",4528495642),null], null), null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"editor.linter.remove-all\",\"editor.linter.remove-all\",3899267783),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Editor: Clear all lint results\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"clear-linter-results!\",\"clear-linter-results!\",4528495642));\n} else\n{return null;\n}\n})], null));\nlt.plugins.elm_light.linter.find_current_lint_mark = (function find_current_lint_mark(ed){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__19196_SHARP_){return cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"linter\",\"linter\",4206213986),p1__19196_SHARP_.lttype);\n}),lt.objs.editor.find_marks.call(null,ed,lt.objs.editor.__GT_cursor.call(null,ed))));\n});\nlt.plugins.elm_light.linter.get_widget_by_mark = (function get_widget_by_mark(ed,mark){return cljs.core.get_in.call(null,cljs.core.deref.call(null,ed),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"linter-results\",\"linter-results\",4482067083),mark.ltlintid,new cljs.core.Keyword(null,\"widget\",\"widget\",4520824246)], null));\n});\nlt.plugins.elm_light.linter.mark__GT_pos = (function mark__GT_pos(mark){var cm_pos = mark.find().from;return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),cm_pos.ch,new cljs.core.Keyword(null,\"line\",\"line\",1017226086),cm_pos.line], null);\n});\nlt.plugins.elm_light.linter.get_all_lint_marks = (function get_all_lint_marks(ed){return cljs.core.sort_by.call(null,(function (p1__19198_SHARP_){return cljs.core.juxt.call(null,new cljs.core.Keyword(null,\"line\",\"line\",1017226086),new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415)).call(null,lt.plugins.elm_light.linter.mark__GT_pos.call(null,p1__19198_SHARP_));\n}),cljs.core.filter.call(null,(function (p1__19197_SHARP_){return cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"linter\",\"linter\",4206213986),p1__19197_SHARP_.lttype);\n}),lt.objs.editor.__GT_cm_ed.call(null,ed).getAllMarks()));\n});\nlt.plugins.elm_light.linter.split_with_mark = (function split_with_mark(ed){var all_marks = lt.plugins.elm_light.linter.get_all_lint_marks.call(null,ed);var curr_mark = lt.plugins.elm_light.linter.find_current_lint_mark.call(null,ed);return cljs.core.split_with.call(null,((function (all_marks,curr_mark){\nreturn (function (p1__19199_SHARP_){return !(cljs.core._EQ_.call(null,(cljs.core.truth_(curr_mark)?curr_mark.ltlintid:null),p1__19199_SHARP_.ltlintid));\n});})(all_marks,curr_mark))\n,all_marks);\n});\nlt.plugins.elm_light.linter.find_next_mark = (function find_next_mark(ed){var vec__19201 = lt.plugins.elm_light.linter.split_with_mark.call(null,ed);var ms1 = cljs.core.nth.call(null,vec__19201,0,null);var ms2 = cljs.core.nth.call(null,vec__19201,1,null);return cljs.core.first.call(null,cljs.core.into.call(null,cljs.core.vec.call(null,cljs.core.drop.call(null,1,ms2)),ms1));\n});\nlt.plugins.elm_light.linter.find_prev_mark = (function find_prev_mark(ed){var vec__19203 = lt.plugins.elm_light.linter.split_with_mark.call(null,ed);var ms1 = cljs.core.nth.call(null,vec__19203,0,null);var ms2 = cljs.core.nth.call(null,vec__19203,1,null);return cljs.core.first.call(null,cljs.core.into.call(null,cljs.core.reverse.call(null,cljs.core.drop.call(null,1,ms2)),ms1));\n});\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"editor.linter.details\",\"editor.linter.details\",4312538199),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Linter: Show details at cursor\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var temp__4092__auto____$1 = lt.plugins.elm_light.linter.find_current_lint_mark.call(null,ed);if(cljs.core.truth_(temp__4092__auto____$1))\n{var mark = temp__4092__auto____$1;return lt.plugins.elm_light.linter.add_widget.call(null,ed,mark.ltlintid);\n} else\n{return null;\n}\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"editor.next.lint-result\",\"editor.next.lint-result\",4143748223),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Linter: Move to next result\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var temp__4092__auto____$1 = lt.plugins.elm_light.linter.find_next_mark.call(null,ed);if(cljs.core.truth_(temp__4092__auto____$1))\n{var next_mark = temp__4092__auto____$1;return lt.objs.editor.move_cursor.call(null,ed,lt.plugins.elm_light.linter.mark__GT_pos.call(null,next_mark));\n} else\n{return null;\n}\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"editor.prev.lint-result\",\"editor.prev.lint-result\",1674890175),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Linter: Move to previous result\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var temp__4092__auto____$1 = lt.plugins.elm_light.linter.find_prev_mark.call(null,ed);if(cljs.core.truth_(temp__4092__auto____$1))\n{var prev_mark = temp__4092__auto____$1;return lt.objs.editor.move_cursor.call(null,ed,lt.plugins.elm_light.linter.mark__GT_pos.call(null,lt.plugins.elm_light.linter.next_mark));\n} else\n{return null;\n}\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light')) {\ngoog.provide('lt.plugins.elm_light');\ngoog.require('cljs.core');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('lt.objs.files');\ngoog.require('lt.util.js');\ngoog.require('lt.plugins.elm_light.gutter');\ngoog.require('lt.plugins.elm_light.linter');\ngoog.require('lt.objs.tabs');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.popup');\ngoog.require('lt.objs.popup');\ngoog.require('lt.plugins.elm_light.linter');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('lt.objs.browser');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.plugins.elm_light.widgets.selector');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.sidebar.clients');\ngoog.require('lt.objs.eval');\ngoog.require('lt.objs.clients');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.objs.browser');\ngoog.require('lt.plugins.elm_light.selection');\ngoog.require('lt.plugins.elm_light.selection');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.console');\ngoog.require('lt.plugins.elm_light.gutter');\ngoog.require('lt.plugins.elm_light.repl');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.plugins.elm_light.widgets.selector');\ngoog.require('lt.objs.eval');\ngoog.require('lt.objs.clients');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.util.js');\ngoog.require('lt.objs.sidebar.clients');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.__BEH__elm_unsupported = (function __BEH__elm_unsupported(_,res){lt.objs.notifos.done_working.call(null);\nreturn lt.objs.notifos.set_msg_BANG_.call(null,new cljs.core.Keyword(null,\"err\",\"err\",1014004951).cljs$core$IFn$_invoke$arity$1(res),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-unsupported\",\"lt.plugins.elm-light/elm-unsupported\",2702653399),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_unsupported,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.unsupported\",\"elm.unsupported\",3962342495),null], null), null));\nlt.plugins.elm_light.colorize_msg = (function colorize_msg(msg){return clojure.string.replace.call(null,clojure.string.replace.call(null,msg,/\\[\\d+m/,\"\"),/\\[0m/,\"\");\n});\nlt.plugins.elm_light.__GT_lt_range = (function __GT_lt_range(p__6726){var map__6728 = p__6726;var map__6728__$1 = ((cljs.core.seq_QMARK_.call(null,map__6728))?cljs.core.apply.call(null,cljs.core.hash_map,map__6728):map__6728);var end = cljs.core.get.call(null,map__6728__$1,new cljs.core.Keyword(null,\"end\",\"end\",1014004813));var start = cljs.core.get.call(null,map__6728__$1,new cljs.core.Keyword(null,\"start\",\"start\",1123661780));return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"from\",\"from\",1017056028),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),(new cljs.core.Keyword(null,\"column\",\"column\",3954034376).cljs$core$IFn$_invoke$arity$1(start) - 1),new cljs.core.Keyword(null,\"line\",\"line\",1017226086),(new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(start) - 1)], null),new cljs.core.Keyword(null,\"to\",\"to\",1013907949),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),(new cljs.core.Keyword(null,\"column\",\"column\",3954034376).cljs$core$IFn$_invoke$arity$1(end) - 1),new cljs.core.Keyword(null,\"line\",\"line\",1017226086),(new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(end) - 1)], null)], null);\n});\nlt.plugins.elm_light.maybe_trim = (function maybe_trim(ss){if(cljs.core.truth_(ss))\n{return clojure.string.trim.call(null,ss);\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.str_contains_QMARK_ = (function str_contains_QMARK_(source,target){if(cljs.core.truth_((function (){var and__4872__auto__ = source;if(cljs.core.truth_(and__4872__auto__))\n{return target;\n} else\n{return and__4872__auto__;\n}\n})()))\n{return (-1 < source.indexOf(target));\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.maybe_strip_hint = (function maybe_strip_hint(source){if(cljs.core.truth_(source))\n{if(cljs.core.truth_(lt.plugins.elm_light.str_contains_QMARK_.call(null,source,\"Hint:\")))\n{return clojure.string.trim.call(null,cljs.core.first.call(null,cljs.core.re_find.call(null,/([\\s\\S]*?(?=Hint:))/m,source)));\n} else\n{return source;\n}\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.linter_action = (function linter_action(ed,row){var G__6740 = new cljs.core.Keyword(null,\"tag\",\"tag\",1014018828).cljs$core$IFn$_invoke$arity$1(row);if(cljs.core._EQ_.call(null,\"TYPE MISMATCH\",G__6740))\n{var ann = lt.plugins.elm_light.maybe_strip_hint.call(null,lt.plugins.elm_light.maybe_trim.call(null,cljs.core.second.call(null,cljs.core.re_find.call(null,/But I am inferring that the definition has this type:([\\s\\S]*$)/m,new cljs.core.Keyword(null,\"details\",\"details\",2571625908).cljs$core$IFn$_invoke$arity$1(row)))));if(cljs.core.truth_((function (){var and__4872__auto__ = ann;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.not.call(null,lt.plugins.elm_light.str_contains_QMARK_.call(null,ann,\"...\"));\n} else\n{return and__4872__auto__;\n}\n})()))\n{return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"text\",\"text\",1017460895),\"Fix annotation\",new cljs.core.Keyword(null,\"action\",\"action\",3885920680),((function (ann,G__6740){\nreturn (function (_,p__6741){var map__6742 = p__6741;var map__6742__$1 = ((cljs.core.seq_QMARK_.call(null,map__6742))?cljs.core.apply.call(null,cljs.core.hash_map,map__6742):map__6742);var to = cljs.core.get.call(null,map__6742__$1,new cljs.core.Keyword(null,\"to\",\"to\",1013907949));var from = cljs.core.get.call(null,map__6742__$1,new cljs.core.Keyword(null,\"from\",\"from\",1017056028));return lt.objs.editor.replace.call(null,ed,from,to,ann);\n});})(ann,G__6740))\n], null)], null);\n} else\n{return cljs.core.PersistentVector.EMPTY;\n}\n} else\n{if(cljs.core._EQ_.call(null,\"NAMING ERROR\",G__6740))\n{var fixes = cljs.core.filter.call(null,cljs.core.seq,cljs.core.map.call(null,clojure.string.trim,clojure.string.split_lines.call(null,cljs.core.second.call(null,cljs.core.re_find.call(null,/Maybe you want one of the following\\?(:?[\\s\\S]*$)/m,new cljs.core.Keyword(null,\"details\",\"details\",2571625908).cljs$core$IFn$_invoke$arity$1(row))))));return cljs.core.map.call(null,((function (fixes,G__6740){\nreturn (function (suggestion){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"text\",\"text\",1017460895),suggestion,new cljs.core.Keyword(null,\"action\",\"action\",3885920680),((function (fixes,G__6740){\nreturn (function (_,p__6743){var map__6744 = p__6743;var map__6744__$1 = ((cljs.core.seq_QMARK_.call(null,map__6744))?cljs.core.apply.call(null,cljs.core.hash_map,map__6744):map__6744);var to = cljs.core.get.call(null,map__6744__$1,new cljs.core.Keyword(null,\"to\",\"to\",1013907949));var from = cljs.core.get.call(null,map__6744__$1,new cljs.core.Keyword(null,\"from\",\"from\",1017056028));return lt.objs.editor.replace.call(null,ed,from,to,suggestion);\n});})(fixes,G__6740))\n], null);\n});})(fixes,G__6740))\n,fixes);\n} else\n{if(cljs.core._EQ_.call(null,\"missing type annotation\",G__6740))\n{return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"text\",\"text\",1017460895),\"Add\",new cljs.core.Keyword(null,\"action\",\"action\",3885920680),((function (G__6740){\nreturn (function (p__6745,p__6746){var map__6747 = p__6745;var map__6747__$1 = ((cljs.core.seq_QMARK_.call(null,map__6747))?cljs.core.apply.call(null,cljs.core.hash_map,map__6747):map__6747);var details = cljs.core.get.call(null,map__6747__$1,new cljs.core.Keyword(null,\"details\",\"details\",2571625908));var map__6748 = p__6746;var map__6748__$1 = ((cljs.core.seq_QMARK_.call(null,map__6748))?cljs.core.apply.call(null,cljs.core.hash_map,map__6748):map__6748);var from = cljs.core.get.call(null,map__6748__$1,new cljs.core.Keyword(null,\"from\",\"from\",1017056028));var ann = [cljs.core.str(clojure.string.trim.call(null,cljs.core.second.call(null,cljs.core.re_find.call(null,/I inferred the type annotation so you can copy it into your code:([\\s\\S]*$)/m,details)))),cljs.core.str(\"\\n\")].join('');return lt.objs.editor.replace.call(null,ed,from,ann);\n});})(G__6740))\n], null)], null);\n} else\n{if(cljs.core._EQ_.call(null,\"unused import\",G__6740))\n{return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"text\",\"text\",1017460895),\"Remove\",new cljs.core.Keyword(null,\"action\",\"action\",3885920680),((function (G__6740){\nreturn (function (_,p__6749){var map__6750 = p__6749;var map__6750__$1 = ((cljs.core.seq_QMARK_.call(null,map__6750))?cljs.core.apply.call(null,cljs.core.hash_map,map__6750):map__6750);var to = cljs.core.get.call(null,map__6750__$1,new cljs.core.Keyword(null,\"to\",\"to\",1013907949));var from = cljs.core.get.call(null,map__6750__$1,new cljs.core.Keyword(null,\"from\",\"from\",1017056028));lt.objs.editor.replace.call(null,ed,from,to,\"\");\nreturn CodeMirror.commands.deleteLine(lt.objs.editor.__GT_cm_ed.call(null,ed));\n});})(G__6740))\n], null)], null);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.PersistentVector.EMPTY;\n} else\n{return null;\n}\n}\n}\n}\n}\n});\nlt.plugins.elm_light.display_make_results = (function display_make_results(ed,res,path){lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"clear-linter-results!\",\"clear-linter-results!\",4528495642));\nif(cljs.core.seq.call(null,cljs.core.filter.call(null,(function (p1__6751_SHARP_){return cljs.core._EQ_.call(null,\"error\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(p1__6751_SHARP_));\n}),res)))\n{lt.objs.notifos.set_msg_BANG_.call(null,\"Elm make returned errors; check you editor or the console for details\",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\n} else\n{}\nvar seq__6758 = cljs.core.seq.call(null,res);var chunk__6759 = null;var count__6760 = 0;var i__6761 = 0;while(true){\nif((i__6761 < count__6760))\n{var map__6762 = cljs.core._nth.call(null,chunk__6759,i__6761);var map__6762__$1 = ((cljs.core.seq_QMARK_.call(null,map__6762))?cljs.core.apply.call(null,cljs.core.hash_map,map__6762):map__6762);var row = map__6762__$1;var tag = cljs.core.get.call(null,map__6762__$1,new cljs.core.Keyword(null,\"tag\",\"tag\",1014018828));var subregion = cljs.core.get.call(null,map__6762__$1,new cljs.core.Keyword(null,\"subregion\",\"subregion\",1501636774));var region = cljs.core.get.call(null,map__6762__$1,new cljs.core.Keyword(null,\"region\",\"region\",4374076006));var details = cljs.core.get.call(null,map__6762__$1,new cljs.core.Keyword(null,\"details\",\"details\",2571625908));var overview = cljs.core.get.call(null,map__6762__$1,new cljs.core.Keyword(null,\"overview\",\"overview\",1544020203));var type = cljs.core.get.call(null,map__6762__$1,new cljs.core.Keyword(null,\"type\",\"type\",1017479852));var file = cljs.core.get.call(null,map__6762__$1,new cljs.core.Keyword(null,\"file\",\"file\",1017047278));var msg_6791 = [cljs.core.str(overview),cljs.core.str(\"\\n\"),cljs.core.str(lt.plugins.elm_light.colorize_msg.call(null,details))].join('');if(cljs.core.truth_((function (){var and__4872__auto__ = cljs.core._EQ_.call(null,path,file);if(and__4872__auto__)\n{return cljs.core.some.call(null,new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [\"error\",null,\"warning\",null], null), null),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [type], null));\n} else\n{return and__4872__auto__;\n}\n})()))\n{lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"linter-result!\",\"linter-result!\",4482067001),new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,\"title\",\"title\",1124275658),tag,new cljs.core.Keyword(null,\"details\",\"details\",2571625908),msg_6791,new cljs.core.Keyword(null,\"category\",\"category\",1064415344),cljs.core.keyword.call(null,type),new cljs.core.Keyword(null,\"actions\",\"actions\",4147068015),lt.plugins.elm_light.linter_action.call(null,ed,row),new cljs.core.Keyword(null,\"code-range\",\"code-range\",3297446095),lt.plugins.elm_light.__GT_lt_range.call(null,(function (){var or__4884__auto__ = subregion;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return region;\n}\n})())], null));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{lt.objs.console.verbatim.call(null,cljs.core._conj.call(null,cljs.core._conj.call(null,cljs.core._conj.call(null,cljs.core._conj.call(null,cljs.core.List.EMPTY,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"pre\",\"pre\",1014015509),overview], null)),\": \"),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"em.line\",\"em.line\",3623844076),\"[Elm error]\"], null)),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"em.file\",\"em.file\",3623665268),file], null)),\"error\");\n} else\n{}\n}\n{\nvar G__6792 = seq__6758;\nvar G__6793 = chunk__6759;\nvar G__6794 = count__6760;\nvar G__6795 = (i__6761 + 1);\nseq__6758 = G__6792;\nchunk__6759 = G__6793;\ncount__6760 = G__6794;\ni__6761 = G__6795;\ncontinue;\n}\n} else\n{var temp__4092__auto__ = cljs.core.seq.call(null,seq__6758);if(temp__4092__auto__)\n{var seq__6758__$1 = temp__4092__auto__;if(cljs.core.chunked_seq_QMARK_.call(null,seq__6758__$1))\n{var c__5632__auto__ = cljs.core.chunk_first.call(null,seq__6758__$1);{\nvar G__6796 = cljs.core.chunk_rest.call(null,seq__6758__$1);\nvar G__6797 = c__5632__auto__;\nvar G__6798 = cljs.core.count.call(null,c__5632__auto__);\nvar G__6799 = 0;\nseq__6758 = G__6796;\nchunk__6759 = G__6797;\ncount__6760 = G__6798;\ni__6761 = G__6799;\ncontinue;\n}\n} else\n{var map__6763 = cljs.core.first.call(null,seq__6758__$1);var map__6763__$1 = ((cljs.core.seq_QMARK_.call(null,map__6763))?cljs.core.apply.call(null,cljs.core.hash_map,map__6763):map__6763);var row = map__6763__$1;var tag = cljs.core.get.call(null,map__6763__$1,new cljs.core.Keyword(null,\"tag\",\"tag\",1014018828));var subregion = cljs.core.get.call(null,map__6763__$1,new cljs.core.Keyword(null,\"subregion\",\"subregion\",1501636774));var region = cljs.core.get.call(null,map__6763__$1,new cljs.core.Keyword(null,\"region\",\"region\",4374076006));var details = cljs.core.get.call(null,map__6763__$1,new cljs.core.Keyword(null,\"details\",\"details\",2571625908));var overview = cljs.core.get.call(null,map__6763__$1,new cljs.core.Keyword(null,\"overview\",\"overview\",1544020203));var type = cljs.core.get.call(null,map__6763__$1,new cljs.core.Keyword(null,\"type\",\"type\",1017479852));var file = cljs.core.get.call(null,map__6763__$1,new cljs.core.Keyword(null,\"file\",\"file\",1017047278));var msg_6800 = [cljs.core.str(overview),cljs.core.str(\"\\n\"),cljs.core.str(lt.plugins.elm_light.colorize_msg.call(null,details))].join('');if(cljs.core.truth_((function (){var and__4872__auto__ = cljs.core._EQ_.call(null,path,file);if(and__4872__auto__)\n{return cljs.core.some.call(null,new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, [\"error\",null,\"warning\",null], null), null),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [type], null));\n} else\n{return and__4872__auto__;\n}\n})()))\n{lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"linter-result!\",\"linter-result!\",4482067001),new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,\"title\",\"title\",1124275658),tag,new cljs.core.Keyword(null,\"details\",\"details\",2571625908),msg_6800,new cljs.core.Keyword(null,\"category\",\"category\",1064415344),cljs.core.keyword.call(null,type),new cljs.core.Keyword(null,\"actions\",\"actions\",4147068015),lt.plugins.elm_light.linter_action.call(null,ed,row),new cljs.core.Keyword(null,\"code-range\",\"code-range\",3297446095),lt.plugins.elm_light.__GT_lt_range.call(null,(function (){var or__4884__auto__ = subregion;if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return region;\n}\n})())], null));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{lt.objs.console.verbatim.call(null,cljs.core._conj.call(null,cljs.core._conj.call(null,cljs.core._conj.call(null,cljs.core._conj.call(null,cljs.core.List.EMPTY,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"pre\",\"pre\",1014015509),overview], null)),\": \"),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"em.line\",\"em.line\",3623844076),\"[Elm error]\"], null)),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"em.file\",\"em.file\",3623665268),file], null)),\"error\");\n} else\n{}\n}\n{\nvar G__6801 = cljs.core.next.call(null,seq__6758__$1);\nvar G__6802 = null;\nvar G__6803 = 0;\nvar G__6804 = 0;\nseq__6758 = G__6801;\nchunk__6759 = G__6802;\ncount__6760 = G__6803;\ni__6761 = G__6804;\ncontinue;\n}\n}\n} else\n{return null;\n}\n}\nbreak;\n}\n});\nlt.plugins.elm_light.__BEH__lint = (function __BEH__lint(ed,result_handler_trigger){var info = new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));lt.objs.notifos.working.call(null,[cljs.core.str(\"Starting elm linting of: \"),cljs.core.str(new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info))].join(''));\nreturn lt.objs.clients.send.call(null,lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.lint\",\"editor.elm.lint\",1086056222)),new cljs.core.Keyword(null,\"editor.elm.lint\",\"editor.elm.lint\",1086056222),cljs.core.assoc.call(null,info,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907),lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info)),new cljs.core.Keyword(null,\"handler\",\"handler\",1706707644),cljs.core.name.call(null,result_handler_trigger)),new cljs.core.Keyword(null,\"only\",\"only\",1017320222),ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"lint\",\"lt.plugins.elm-light/lint\",1497250906),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__lint,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"lint\",\"lint\",1017226101),null], null), null),new cljs.core.Keyword(null,\"description\",\"description\",3584325486),\"Lint (/make) a given elm file\");\nlt.plugins.elm_light.__BEH__elm_lint_res = (function __BEH__elm_lint_res(ed,res){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));lt.objs.notifos.done_working.call(null,\"Elm linted\");\nreturn lt.plugins.elm_light.display_make_results.call(null,ed,res,path);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-lint-res\",\"lt.plugins.elm-light/elm-lint-res\",2508500808),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_lint_res,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.lint.res\",\"elm.lint.res\",4381822959),null], null), null));\nlt.plugins.elm_light.__BEH__make = (function __BEH__make(ed){var info = new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));var cl = lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.make\",\"editor.elm.make\",1086078217));lt.objs.notifos.working.call(null,[cljs.core.str(\"Starting elm make for: \"),cljs.core.str(new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info))].join(''));\nreturn lt.objs.clients.send.call(null,cl,new cljs.core.Keyword(null,\"editor.elm.make\",\"editor.elm.make\",1086078217),cljs.core.assoc.call(null,info,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907),lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info))),new cljs.core.Keyword(null,\"only\",\"only\",1017320222),ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"make\",\"lt.plugins.elm-light/make\",1497244279),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__make,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.make\",\"elm.make\",1176641960),null], null), null),new cljs.core.Keyword(null,\"description\",\"description\",3584325486),\"Make (to js) a given elm file\");\nlt.plugins.elm_light.missing_make_info_popup = (function missing_make_info_popup(){return lt.objs.popup.popup_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"header\",\"header\",4087600639),\"You need to configure make info for your project\",new cljs.core.Keyword(null,\"body\",\"body\",1016933652),[cljs.core.str(\"You configure a key \\\"make-info\\\" in your elm-package.json\\n                              Example:\\n                             \\\"make-info\\\": {\\\"main\\\": \\\"src/Main.elm\\\", \\\"out\\\": \\\"dist/main.js\\\"}\")].join(''),new cljs.core.Keyword(null,\"buttons\",\"buttons\",1255256819),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Ok\"], null)], null)], null));\n});\nlt.plugins.elm_light.__BEH__make_project = (function __BEH__make_project(ed){var info = new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed));var project_path = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info));var map__6765 = new cljs.core.Keyword(null,\"make-info\",\"make-info\",2233727135).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.utils.parse_json_file.call(null,lt.objs.files.join.call(null,project_path,\"elm-package.json\")));var map__6765__$1 = ((cljs.core.seq_QMARK_.call(null,map__6765))?cljs.core.apply.call(null,cljs.core.hash_map,map__6765):map__6765);var out = cljs.core.get.call(null,map__6765__$1,new cljs.core.Keyword(null,\"out\",\"out\",1014014656));var main = cljs.core.get.call(null,map__6765__$1,new cljs.core.Keyword(null,\"main\",\"main\",1017248043));if(cljs.core.truth_((function (){var and__4872__auto__ = main;if(cljs.core.truth_(and__4872__auto__))\n{return out;\n} else\n{return and__4872__auto__;\n}\n})()))\n{lt.objs.notifos.working.call(null,[cljs.core.str(\"Starting elm make for project: \"),cljs.core.str(project_path)].join(''));\nreturn lt.objs.clients.send.call(null,lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.make\",\"editor.elm.make\",1086078217)),new cljs.core.Keyword(null,\"editor.elm.make\",\"editor.elm.make\",1086078217),cljs.core.assoc.call(null,info,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907),project_path,new cljs.core.Keyword(null,\"path\",\"path\",1017337751),lt.objs.files.join.call(null,project_path,main),new cljs.core.Keyword(null,\"outputFile\",\"outputFile\",4034596239),lt.objs.files.join.call(null,project_path,out)),new cljs.core.Keyword(null,\"only\",\"only\",1017320222),ed);\n} else\n{return lt.plugins.elm_light.missing_make_info_popup.call(null);\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"make-project\",\"lt.plugins.elm-light/make-project\",3492644131),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__make_project,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.make-project\",\"elm.make-project\",2779298292),null], null), null),new cljs.core.Keyword(null,\"description\",\"description\",3584325486),\"Make Elm Project\");\nlt.plugins.elm_light.__BEH__elm_make_res = (function __BEH__elm_make_res(ed,p__6766){var map__6768 = p__6766;var map__6768__$1 = ((cljs.core.seq_QMARK_.call(null,map__6768))?cljs.core.apply.call(null,cljs.core.hash_map,map__6768):map__6768);var res = cljs.core.get.call(null,map__6768__$1,new cljs.core.Keyword(null,\"res\",\"res\",1014017042));var outputFile = cljs.core.get.call(null,map__6768__$1,new cljs.core.Keyword(null,\"outputFile\",\"outputFile\",4034596239));lt.objs.notifos.done_working.call(null,[cljs.core.str(\"Elm make compiled to: \"),cljs.core.str(outputFile)].join(''));\nreturn lt.plugins.elm_light.display_make_results.call(null,ed,res,lt.plugins.elm_light.path);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-make-res\",\"lt.plugins.elm-light/elm-make-res\",3896116701),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_make_res,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.make.res\",\"elm.make.res\",3219830874),null], null), null));\nlt.plugins.elm_light.__BEH__elm_make_err = (function __BEH__elm_make_err(ed,res){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));lt.objs.notifos.done_working.call(null,\"\");\nlt.objs.notifos.set_msg_BANG_.call(null,[cljs.core.str(\"Elm make error: \"),cljs.core.str(res)].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nreturn lt.objs.console.error.call(null,res);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-make-err\",\"lt.plugins.elm-light/elm-make-err\",3896146200),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_make_err,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.make.err\",\"elm.make.err\",3219818783),null], null), null));\nlt.plugins.elm_light.__BEH__on_eval__DOT__one = (function __BEH__on_eval__DOT__one(ed){var pos = lt.objs.editor.__GT_cursor.call(null,ed);var info = cljs.core.conj.call(null,new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)),(cljs.core.truth_(lt.objs.editor.selection_QMARK_.call(null,ed))?new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"code\",\"code\",1016963423),lt.objs.editor.selection.call(null,ed),new cljs.core.Keyword(null,\"meta\",\"meta\",1017252215),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"start\",\"start\",1123661780),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(lt.objs.editor.__GT_cursor.call(null,ed,\"start\")),new cljs.core.Keyword(null,\"end\",\"end\",1014004813),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(lt.objs.editor.__GT_cursor.call(null,ed,\"end\"))], null)], null):(function (){var temp__4090__auto__ = lt.plugins.elm_light.selection.get_top_level_expr.call(null,ed,pos);if(cljs.core.truth_(temp__4090__auto__))\n{var rng = temp__4090__auto__;return new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430),pos,new cljs.core.Keyword(null,\"code\",\"code\",1016963423),lt.objs.editor.range.call(null,ed,new cljs.core.Keyword(null,\"from\",\"from\",1017056028).cljs$core$IFn$_invoke$arity$1(rng),new cljs.core.Keyword(null,\"to\",\"to\",1013907949).cljs$core$IFn$_invoke$arity$1(rng)),new cljs.core.Keyword(null,\"meta\",\"meta\",1017252215),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"start\",\"start\",1123661780),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"from\",\"from\",1017056028).cljs$core$IFn$_invoke$arity$1(rng)),new cljs.core.Keyword(null,\"end\",\"end\",1014004813),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"end\",\"end\",1014004813).cljs$core$IFn$_invoke$arity$1(rng))], null)], null);\n} else\n{return new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430),pos,new cljs.core.Keyword(null,\"code\",\"code\",1016963423),lt.objs.editor.line.call(null,ed,new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(pos)),new cljs.core.Keyword(null,\"meta\",\"meta\",1017252215),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"start\",\"start\",1123661780),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(pos),new cljs.core.Keyword(null,\"end\",\"end\",1014004813),new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(pos)], null)], null);\n}\n})()));return lt.object.raise.call(null,lt.plugins.elm_light.clients.elm,new cljs.core.Keyword(null,\"eval!\",\"eval!\",1110791799),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"origin\",\"origin\",4300251800),ed,new cljs.core.Keyword(null,\"info\",\"info\",1017141280),info], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"on-eval.one\",\"lt.plugins.elm-light/on-eval.one\",3108499739),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__on_eval__DOT__one,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm repl: Eval current selection\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"eval.one\",\"eval.one\",1173589382),null], null), null));\nlt.plugins.elm_light.__BEH__eval_result = (function __BEH__eval_result(ed,res){lt.objs.notifos.done_working.call(null,\"Elm evaluated\");\nreturn lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"editor.result\",\"editor.result\",4030217008),new cljs.core.Keyword(null,\"result\",\"result\",4374444943).cljs$core$IFn$_invoke$arity$1(res),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"meta\",\"meta\",1017252215).cljs$core$IFn$_invoke$arity$1(res))], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"eval-result\",\"lt.plugins.elm-light/eval-result\",1791693047),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__eval_result,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm repl: Eval result\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.elm.eval.res\",\"editor.elm.eval.res\",1719787241),null], null), null));\nlt.plugins.elm_light.__BEH__eval_err = (function __BEH__eval_err(ed,res){lt.objs.notifos.done_working.call(null);\nlt.objs.notifos.set_msg_BANG_.call(null,\"Elm eval reported errors.\",new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nreturn lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"editor.exception\",\"editor.exception\",3983021184),new cljs.core.Keyword(null,\"result\",\"result\",4374444943).cljs$core$IFn$_invoke$arity$1(res),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"meta\",\"meta\",1017252215).cljs$core$IFn$_invoke$arity$1(res))], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"eval-err\",\"lt.plugins.elm-light/eval-err\",1049569193),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__eval_err,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm repl: Eval error\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.elm.eval.err\",\"editor.elm.eval.err\",1719775150),null], null), null));\nlt.plugins.elm_light.__BEH__repl_restart_BANG_ = (function __BEH__repl_restart_BANG_(p__6769){var map__6771 = p__6769;var map__6771__$1 = ((cljs.core.seq_QMARK_.call(null,map__6771))?cljs.core.apply.call(null,cljs.core.hash_map,map__6771):map__6771);var ed = map__6771__$1;var info = cljs.core.get.call(null,map__6771__$1,new cljs.core.Keyword(null,\"info\",\"info\",1017141280));var temp__4092__auto__ = new cljs.core.Keyword(null,\"default\",\"default\",2558708147).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"client\",\"client\",3951159101).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_(temp__4092__auto__))\n{var default_client = temp__4092__auto__;if(cljs.core.truth_(cljs.core.deref.call(null,default_client)))\n{lt.objs.notifos.working.call(null,\"Restaring elm-repl...\");\nreturn lt.objs.clients.send.call(null,default_client,new cljs.core.Keyword(null,\"elm.repl.restart\",\"elm.repl.restart\",2931654218),info,new cljs.core.Keyword(null,\"only\",\"only\",1017320222),ed);\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"repl-restart!\",\"lt.plugins.elm-light/repl-restart!\",1802858197),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__repl_restart_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.repl.restart\",\"elm.repl.restart\",2931654218),null], null), null));\nlt.plugins.elm_light.__BEH__repl_restart_res = (function __BEH__repl_restart_res(ed,res){return lt.objs.notifos.done_working.call(null,\"Elm Repl restarted\");\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"repl-restart-res\",\"lt.plugins.elm-light/repl-restart-res\",4193190105),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__repl_restart_res,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.repl.restart.res\",\"elm.repl.restart.res\",2086859772),null], null), null));\nlt.plugins.elm_light.__BEH__elm_browse_BANG_ = (function __BEH__elm_browse_BANG_(ed,debug_QMARK_){var path = lt.plugins.elm_light.utils.reactor_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));var client = lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"editor.eval.elm\",\"editor.eval.elm\",1083015975));if(cljs.core.truth_((function (){var and__4872__auto__ = client;if(cljs.core.truth_(and__4872__auto__))\n{return path;\n} else\n{return and__4872__auto__;\n}\n})()))\n{lt.objs.notifos.working.call(null,\"Opening elm file in browser\");\nvar b_6805 = (function (){var or__4884__auto__ = cljs.core.first.call(null,lt.object.by_tag.call(null,new cljs.core.Keyword(null,\"browser\",\"browser\",1164844698)));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return lt.objs.browser.add.call(null);\n}\n})();var get_url_6806 = ((function (b_6805,path,client){\nreturn (function (){return [cljs.core.str(\"http://localhost:\"),cljs.core.str(new cljs.core.Keyword(null,\"reactor-port\",\"reactor-port\",4649590590).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client))),cljs.core.str(path),cljs.core.str((cljs.core.truth_(debug_QMARK_)?\"?debug\":\"\"))].join('');\n});})(b_6805,path,client))\n;if(cljs.core.truth_(new cljs.core.Keyword(null,\"connected\",\"connected\",4729661051).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,client))))\n{lt.object.raise.call(null,b_6805,new cljs.core.Keyword(null,\"navigate!\",\"navigate!\",1766726722),get_url_6806.call(null));\n} else\n{lt.util.js.wait.call(null,100,((function (b_6805,get_url_6806,path,client){\nreturn (function (){return lt.object.raise.call(null,b_6805,new cljs.core.Keyword(null,\"navigate!\",\"navigate!\",1766726722),get_url_6806.call(null));\n});})(b_6805,get_url_6806,path,client))\n);\n}\nreturn lt.objs.notifos.done_working.call(null);\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-browse!\",\"lt.plugins.elm-light/elm-browse!\",2398181301),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_browse_BANG_,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.browse\",\"elm.browse\",2486947908),null], null), null));\nlt.plugins.elm_light.__BEH__elm_doc_search = (function __BEH__elm_doc_search(this$,cur){return cljs.core.conj.call(null,cur,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"elm\",new cljs.core.Keyword(null,\"trigger\",\"trigger\",4248979754),new cljs.core.Keyword(null,\"docs.elm.search\",\"docs.elm.search\",737241333),new cljs.core.Keyword(null,\"file-types\",\"file-types\",1727875162),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [\"elm\",null], null), null)], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-doc-search\",\"lt.plugins.elm-light/elm-doc-search\",546131961),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_doc_search,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"types+\",\"types+\",4450069060),null], null), null));\nlt.plugins.elm_light.get_editor_client = (function get_editor_client(ed){var temp__4092__auto__ = new cljs.core.Keyword(null,\"default\",\"default\",2558708147).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"client\",\"client\",3951159101).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_(temp__4092__auto__))\n{var default_client = temp__4092__auto__;if(cljs.core.truth_(cljs.core.deref.call(null,default_client)))\n{return default_client;\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.location__GT_pos = (function location__GT_pos(loc){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"line\",\"line\",1017226086),(new cljs.core.Keyword(null,\"line\",\"line\",1017226086).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(loc)) - 1),new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),(new cljs.core.Keyword(null,\"column\",\"column\",3954034376).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(loc)) - 1)], null);\n});\nlt.plugins.elm_light.ast_pass_through = (function ast_pass_through(ed,msg){return lt.objs.clients.send.call(null,lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.ast.passthrough\",\"editor.elm.ast.passthrough\",3082755153)),new cljs.core.Keyword(null,\"editor.elm.ast.passthrough\",\"editor.elm.ast.passthrough\",3082755153),msg,new cljs.core.Keyword(null,\"only\",\"only\",1017320222),ed);\n});\nlt.plugins.elm_light.__BEH__elm_reload_ast = (function __BEH__elm_reload_ast(ed){var project = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));lt.objs.notifos.working.call(null,[cljs.core.str(\"Init reload of ast for project: \"),cljs.core.str(project)].join(''));\nlt.plugins.elm_light.elm_ast.delete_project_ast_BANG_.call(null,project);\nreturn lt.objs.clients.send.call(null,lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"elm.reload.ast\",\"elm.reload.ast\",3046520423)),new cljs.core.Keyword(null,\"elm.reload.ast\",\"elm.reload.ast\",3046520423),cljs.core.PersistentArrayMap.EMPTY,new cljs.core.Keyword(null,\"only\",\"only\",1017320222),ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-reload-ast\",\"lt.plugins.elm-light/elm-reload-ast\",3847082128),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_reload_ast,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.reload-ast\",\"elm.reload-ast\",3046490632),null], null), null));\nlt.plugins.elm_light.__BEH__elm_reload_ast_started = (function __BEH__elm_reload_ast_started(ed){return lt.objs.notifos.done_working.call(null,\"Parsing ast started\");\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-reload-ast-started\",\"lt.plugins.elm-light/elm-reload-ast-started\",3781906644),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_reload_ast_started,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.ast.reload.started\",\"elm.ast.reload.started\",2010853330),null], null), null));\nlt.plugins.elm_light.__BEH__elm_jump_to_definition_start = (function __BEH__elm_jump_to_definition_start(ed){lt.objs.notifos.working.call(null,[cljs.core.str(\"Initiate jump to definition\")].join(''));\nvar temp__4090__auto__ = lt.plugins.elm_light.get_editor_client.call(null,ed);if(cljs.core.truth_(temp__4090__auto__))\n{var default_client = temp__4090__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.jump-to-definition\",\"editor.elm.jump-to-definition\",1945362401),cljs.core.PersistentArrayMap.EMPTY);\n} else\n{return lt.plugins.elm_light.ast_pass_through.call(null,ed,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"target\",\"target\",4427965699),new cljs.core.Keyword(null,\"editor.elm.jump-to-definition\",\"editor.elm.jump-to-definition\",1945362401),new cljs.core.Keyword(null,\"data\",\"data\",1016980252),cljs.core.PersistentArrayMap.EMPTY], null));\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-jump-to-definition-start\",\"lt.plugins.elm-light/elm-jump-to-definition-start\",3920864187),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_jump_to_definition_start,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.jump-to-definition-at-cursor!\",\"editor.jump-to-definition-at-cursor!\",4501637705),null], null), null));\nlt.plugins.elm_light.__BEH__elm_jump_to_definition = (function __BEH__elm_jump_to_definition(ed,data){lt.objs.notifos.done_working.call(null,\"\");\nvar pos = lt.objs.editor.__GT_cursor.call(null,ed);var token = lt.plugins.elm_light.utils.find_symbol.call(null,ed,pos);var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_(token))\n{var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.get_jump_to_definition.call(null,token,pos,path,lt.plugins.elm_light.utils.project_path.call(null,path));if(cljs.core.truth_(temp__4092__auto__))\n{var target = temp__4092__auto__;if(cljs.core.truth_(new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(target)))\n{return lt.object.raise.call(null,lt.objs.jump_stack.jump_stack,new cljs.core.Keyword(null,\"jump-stack.push!\",\"jump-stack.push!\",4063822260),ed,new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(target),lt.plugins.elm_light.location__GT_pos.call(null,new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(target)));\n} else\n{return null;\n}\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-jump-to-definition\",\"lt.plugins.elm-light/elm-jump-to-definition\",4117986136),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_jump_to_definition,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.elm.jump-to-definition\",\"editor.elm.jump-to-definition\",1945362401),null], null), null));\nlt.plugins.elm_light.__BEH__elm_doc_start = (function __BEH__elm_doc_start(ed){lt.objs.notifos.working.call(null,[cljs.core.str(\"Initiate show doc\")].join(''));\nvar temp__4090__auto__ = lt.plugins.elm_light.get_editor_client.call(null,ed);if(cljs.core.truth_(temp__4090__auto__))\n{var default_client = temp__4090__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.doc\",\"editor.elm.doc\",1570413537),cljs.core.PersistentArrayMap.EMPTY);\n} else\n{return lt.plugins.elm_light.ast_pass_through.call(null,ed,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"target\",\"target\",4427965699),new cljs.core.Keyword(null,\"editor.elm.doc\",\"editor.elm.doc\",1570413537),new cljs.core.Keyword(null,\"data\",\"data\",1016980252),cljs.core.PersistentArrayMap.EMPTY], null));\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-doc-start\",\"lt.plugins.elm-light/elm-doc-start\",1839924543),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_doc_start,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.doc\",\"editor.doc\",3751347369),null], null), null));\nlt.plugins.elm_light.__BEH__elm_doc = (function __BEH__elm_doc(ed){var pos = lt.objs.editor.__GT_cursor.call(null,ed);var token = lt.plugins.elm_light.utils.find_symbol.call(null,ed,pos);var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_(token))\n{lt.objs.notifos.done_working.call(null,\"\");\n} else\n{}\nvar temp__4092__auto__ = lt.plugins.elm_light.elm_ast.get_jump_to_definition.call(null,token,pos,path,lt.plugins.elm_light.utils.project_path.call(null,path));if(cljs.core.truth_(temp__4092__auto__))\n{var target = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.doc.show!\",\"editor.elm.doc.show!\",3977559543),new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),[cljs.core.str(new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(target)),cljs.core.str((cljs.core.truth_(new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(target))?\".\":null)),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(target)),cljs.core.str((function (){var temp__4092__auto____$1 = new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(target);if(cljs.core.truth_(temp__4092__auto____$1))\n{var pck = temp__4092__auto____$1;return [cljs.core.str(\" (\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(pck)),cljs.core.str(\" \"),cljs.core.str(new cljs.core.Keyword(null,\"version\",\"version\",1365512266).cljs$core$IFn$_invoke$arity$1(pck)),cljs.core.str(\")\")].join('');\n} else\n{return null;\n}\n})())].join(''),new cljs.core.Keyword(null,\"args\",\"args\",1016906831),(function (){var or__4884__auto__ = new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"annotation\",\"annotation\",3753828001).cljs$core$IFn$_invoke$arity$1(target));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = new cljs.core.Keyword(null,\"signatureRaw\",\"signatureRaw\",3837738946).cljs$core$IFn$_invoke$arity$1(target);if(cljs.core.truth_(or__4884__auto____$1))\n{return or__4884__auto____$1;\n} else\n{return new cljs.core.Keyword(null,\"paramsRaw\",\"paramsRaw\",2968749108).cljs$core$IFn$_invoke$arity$1(target);\n}\n}\n})(),new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882),(function (){var temp__4092__auto____$1 = new cljs.core.Keyword(null,\"doc\",\"doc\",1014003882).cljs$core$IFn$_invoke$arity$1(target);if(cljs.core.truth_(temp__4092__auto____$1))\n{var doc = temp__4092__auto____$1;return doc.trim();\n} else\n{return null;\n}\n})(),new cljs.core.Keyword(null,\"loc\",\"loc\",1014011570),pos], null));\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-doc\",\"lt.plugins.elm-light/elm-doc\",3124390860),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_doc,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.elm.doc\",\"editor.elm.doc\",1570413537),null], null), null));\nlt.plugins.elm_light.__BEH__elm_parse_editor_on_change = (function __BEH__elm_parse_editor_on_change(ed){return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.parse.editor\",\"elm.parse.editor\",2241470658));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-parse-editor-on-change\",\"lt.plugins.elm-light/elm-parse-editor-on-change\",1092931718),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_parse_editor_on_change,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Parse a connected elm editor on content change\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"change\",\"change\",3947235106),null], null), null),new cljs.core.Keyword(null,\"debounce\",\"debounce\",1556599227),300);\nlt.plugins.elm_light.__BEH__elm_parse_editor = (function __BEH__elm_parse_editor(ed){if(!(lt.plugins.elm_light.utils.str_contains.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))),\"elm-stuff\")))\n{var client = lt.plugins.elm_light.clients.get_eval_client_if_connected.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.ast.parsetext\",\"editor.elm.ast.parsetext\",1992138717));var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_((function (){var and__4872__auto__ = client;if(cljs.core.truth_(and__4872__auto__))\n{return (cljs.core._EQ_.call(null,lt.objs.editor.pool.last_active.call(null),ed)) && (!(lt.plugins.elm_light.utils.str_contains.call(null,path,\"elm-stuff\")));\n} else\n{return and__4872__auto__;\n}\n})()))\n{return lt.objs.clients.send.call(null,client,new cljs.core.Keyword(null,\"editor.elm.ast.parsetext\",\"editor.elm.ast.parsetext\",1992138717),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"code\",\"code\",1016963423),lt.objs.editor.__GT_val.call(null,ed)], null),new cljs.core.Keyword(null,\"only\",\"only\",1017320222),ed);\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-parse-editor\",\"lt.plugins.elm-light/elm-parse-editor\",583860183),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_parse_editor,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Initiate parsing of the content/elm code of the given editor\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"focus\",\"focus\",1111509066),null,new cljs.core.Keyword(null,\"project-connected\",\"project-connected\",3474311367),null,new cljs.core.Keyword(null,\"elm.parse.editor\",\"elm.parse.editor\",2241470658),null], null), null));\nlt.plugins.elm_light.__BEH__elm_editor_disconnected = (function __BEH__elm_editor_disconnected(ed){lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"clear-linter-results!\",\"clear-linter-results!\",4528495642));\nlt.object.update_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ast-status\",\"ast-status\",2421112079)], null),cljs.core.assoc,new cljs.core.Keyword(null,\"status\",\"status\",4416389988),null,new cljs.core.Keyword(null,\"error\",\"error\",1110689146),null);\nlt.plugins.elm_light.elm_ast.update_status_for_editor.call(null,ed);\nreturn lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.gutter.exposeds.mark\",\"elm.gutter.exposeds.mark\",3035248815));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-editor-disconnected\",\"lt.plugins.elm-light/elm-editor-disconnected\",3526187369),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_editor_disconnected,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Clean up state when project connection for an editor has been disconnected\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"project-disconnected\",\"project-disconnected\",2085293025),null], null), null));\nlt.plugins.elm_light.__BEH__elm_parse_editor_result = (function __BEH__elm_parse_editor_result(ed,res){var temp__4090__auto___6807 = new cljs.core.Keyword(null,\"error\",\"error\",1110689146).cljs$core$IFn$_invoke$arity$1(res);if(cljs.core.truth_(temp__4090__auto___6807))\n{var error_6808 = temp__4090__auto___6807;lt.object.update_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ast-status\",\"ast-status\",2421112079)], null),cljs.core.assoc,new cljs.core.Keyword(null,\"status\",\"status\",4416389988),new cljs.core.Keyword(null,\"error\",\"error\",1110689146),new cljs.core.Keyword(null,\"error\",\"error\",1110689146),error_6808);\nlt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.gutter.refresh\",\"elm.gutter.refresh\",722016962));\n} else\n{var path_6809 = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));lt.object.update_BANG_.call(null,ed,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ast-status\",\"ast-status\",2421112079)], null),cljs.core.assoc,new cljs.core.Keyword(null,\"status\",\"status\",4416389988),new cljs.core.Keyword(null,\"ok\",\"ok\",1013907790),new cljs.core.Keyword(null,\"error\",\"error\",1110689146),null);\nlt.plugins.elm_light.elm_ast.upsert_ast_BANG_.call(null,new cljs.core.Keyword(null,\"dir\",\"dir\",1014003711).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.get_editor_client.call(null,ed))),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"file\",\"file\",1017047278),path_6809,new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140),new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(res)], null));\nlt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.gutter.exposeds.mark\",\"elm.gutter.exposeds.mark\",3035248815));\n}\nreturn lt.plugins.elm_light.elm_ast.update_status_for_editor.call(null,ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-parse-editor-result\",\"lt.plugins.elm-light/elm-parse-editor-result\",3556794401),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_parse_editor_result,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Handle parse results for a parsed editors content\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"editor.elm.ast.parsetext.result\",\"editor.elm.ast.parsetext.result\",1834022514),null], null), null));\nlt.plugins.elm_light.cm_pos__GT_pos = (function cm_pos__GT_pos(cm_pos){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"ch\",\"ch\",1013907415),cm_pos.ch,new cljs.core.Keyword(null,\"line\",\"line\",1017226086),cm_pos.line], null);\n});\nlt.plugins.elm_light.safe_move_cursor = (function safe_move_cursor(ed,bm,pos){var temp__4090__auto__ = bm.find();if(cljs.core.truth_(temp__4090__auto__))\n{var bm_pos = temp__4090__auto__;return lt.objs.editor.move_cursor.call(null,ed,lt.plugins.elm_light.cm_pos__GT_pos.call(null,bm_pos));\n} else\n{return lt.objs.editor.move_cursor.call(null,ed,pos);\n}\n});\nlt.plugins.elm_light.__BEH__elm_expose_top_level = (function __BEH__elm_expose_top_level(ed){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var prj_path = lt.plugins.elm_light.utils.project_path.call(null,path);var module = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,prj_path,path);var exposing = new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));if(cljs.core.truth_(exposing))\n{var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.find_top_level_declaration_by_pos.call(null,lt.objs.editor.__GT_cursor.call(null,ed),module);if(cljs.core.truth_(temp__4092__auto__))\n{var decl = temp__4092__auto__;if(lt.plugins.elm_light.elm_ast.exposed_by_module_QMARK_.call(null,module,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl)))\n{return null;\n} else\n{var map__6773 = lt.plugins.elm_light.elm_ast.__GT_range.call(null,new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(exposing));var map__6773__$1 = ((cljs.core.seq_QMARK_.call(null,map__6773))?cljs.core.apply.call(null,cljs.core.hash_map,map__6773):map__6773);var end = cljs.core.get.call(null,map__6773__$1,new cljs.core.Keyword(null,\"end\",\"end\",1014004813));var start = cljs.core.get.call(null,map__6773__$1,new cljs.core.Keyword(null,\"start\",\"start\",1123661780));var upd_exp = lt.plugins.elm_light.elm_ast.expose_decl.call(null,decl,exposing);var pos = lt.objs.editor.__GT_cursor.call(null,ed);var bm = lt.objs.editor.bookmark.call(null,ed,pos);lt.objs.editor.replace.call(null,ed,start,end,lt.plugins.elm_light.elm_ast.print_exposing.call(null,upd_exp));\nreturn lt.plugins.elm_light.safe_move_cursor.call(null,ed,bm,pos);\n}\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-expose-top-level\",\"lt.plugins.elm-light/elm-expose-top-level\",2519767763),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_expose_top_level,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Behavior to expose top level Elm declaration\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.expose.top.level\",\"elm.expose.top.level\",3091507131),null], null), null));\nlt.plugins.elm_light.__BEH__elm_unexpose_top_level = (function __BEH__elm_unexpose_top_level(ed){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var prj_path = lt.plugins.elm_light.utils.project_path.call(null,path);var module = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,prj_path,path);var exposing = new cljs.core.Keyword(null,\"exposing\",\"exposing\",3382854387).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"moduleDeclaration\",\"moduleDeclaration\",1240624864).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));if(cljs.core.truth_(exposing))\n{var temp__4092__auto__ = lt.plugins.elm_light.elm_ast.find_top_level_declaration_by_pos.call(null,lt.objs.editor.__GT_cursor.call(null,ed),module);if(cljs.core.truth_(temp__4092__auto__))\n{var decl = temp__4092__auto__;if((lt.plugins.elm_light.elm_ast.exposed_by_module_QMARK_.call(null,module,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(decl))) && (!(lt.plugins.elm_light.elm_ast.exposeAll_QMARK_.call(null,exposing))))\n{var map__6775 = lt.plugins.elm_light.elm_ast.__GT_range.call(null,new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(exposing));var map__6775__$1 = ((cljs.core.seq_QMARK_.call(null,map__6775))?cljs.core.apply.call(null,cljs.core.hash_map,map__6775):map__6775);var end = cljs.core.get.call(null,map__6775__$1,new cljs.core.Keyword(null,\"end\",\"end\",1014004813));var start = cljs.core.get.call(null,map__6775__$1,new cljs.core.Keyword(null,\"start\",\"start\",1123661780));var upd_exp = lt.plugins.elm_light.elm_ast.unexpose_decl.call(null,decl,exposing);var pos = lt.objs.editor.__GT_cursor.call(null,ed);var bm = lt.objs.editor.bookmark.call(null,ed,pos);lt.objs.editor.replace.call(null,ed,start,end,lt.plugins.elm_light.elm_ast.print_exposing.call(null,upd_exp));\nreturn lt.plugins.elm_light.safe_move_cursor.call(null,ed,bm,pos);\n} else\n{return null;\n}\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-unexpose-top-level\",\"lt.plugins.elm-light/elm-unexpose-top-level\",4048820218),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_unexpose_top_level,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Behavior to unexpose top level Elm declaration\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.unexpose.top.level\",\"elm.unexpose.top.level\",3630199380),null], null), null));\nlt.plugins.elm_light.__BEH__elm_sort_imports = (function __BEH__elm_sort_imports(ed){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var prj_path = lt.plugins.elm_light.utils.project_path.call(null,path);var module = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,prj_path,path);var imports = new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));var location = new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));if(cljs.core.seq.call(null,imports))\n{var map__6777 = lt.plugins.elm_light.elm_ast.__GT_range.call(null,location);var map__6777__$1 = ((cljs.core.seq_QMARK_.call(null,map__6777))?cljs.core.apply.call(null,cljs.core.hash_map,map__6777):map__6777);var end = cljs.core.get.call(null,map__6777__$1,new cljs.core.Keyword(null,\"end\",\"end\",1014004813));var start = cljs.core.get.call(null,map__6777__$1,new cljs.core.Keyword(null,\"start\",\"start\",1123661780));var pos = lt.objs.editor.__GT_cursor.call(null,ed);var bm = lt.objs.editor.bookmark.call(null,ed,lt.objs.editor.__GT_cursor.call(null,ed));lt.objs.editor.replace.call(null,ed,start,end,lt.plugins.elm_light.elm_ast.print_imports.call(null,cljs.core.partial.call(null,lt.plugins.elm_light.elm_ast.sort_imports_default,prj_path),imports));\nreturn lt.plugins.elm_light.safe_move_cursor.call(null,ed,bm,pos);\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-sort-imports\",\"lt.plugins.elm-light/elm-sort-imports\",2846847583),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_sort_imports,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Behavior to sort import declarations for given Elm editor\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.sort.imports\",\"elm.sort.imports\",1131863256),null], null), null));\nlt.plugins.elm_light.__BEH__elm_autoimport_module_selected = (function __BEH__elm_autoimport_module_selected(ed,item){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var prj_path = lt.plugins.elm_light.utils.project_path.call(null,path);var pos = lt.objs.editor.__GT_cursor.call(null,ed);var bm = lt.objs.editor.bookmark.call(null,ed,pos);var token = lt.plugins.elm_light.utils.find_symbol.call(null,ed,pos);var aliaz = cljs.core.first.call(null,clojure.string.split.call(null,token,/\\./));var module = lt.plugins.elm_light.elm_ast.get_module_ast.call(null,prj_path,path);var imports = new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)));var map__6779 = lt.plugins.elm_light.elm_ast.__GT_range.call(null,new cljs.core.Keyword(null,\"location\",\"location\",2914947879).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module))));var map__6779__$1 = ((cljs.core.seq_QMARK_.call(null,map__6779))?cljs.core.apply.call(null,cljs.core.hash_map,map__6779):map__6779);var end = cljs.core.get.call(null,map__6779__$1,new cljs.core.Keyword(null,\"end\",\"end\",1014004813));var start = cljs.core.get.call(null,map__6779__$1,new cljs.core.Keyword(null,\"start\",\"start\",1123661780));var upd_imports = lt.plugins.elm_light.elm_ast.upsert_imports.call(null,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(item),aliaz,imports);lt.objs.editor.replace.call(null,ed,start,end,lt.plugins.elm_light.elm_ast.print_imports.call(null,cljs.core.partial.call(null,lt.plugins.elm_light.elm_ast.sort_imports_default,prj_path),upd_imports));\nlt.plugins.elm_light.safe_move_cursor.call(null,ed,bm,pos);\nreturn lt.objs.editor.focus.call(null,ed);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-autoimport-module-selected\",\"lt.plugins.elm-light/elm-autoimport-module-selected\",1551172531),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_autoimport_module_selected,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Behaviour triggered when user selects a module in select for autoimport suggestions\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.autoimport.module.selected\",\"elm.autoimport.module.selected\",3875550653),null], null), null));\nlt.plugins.elm_light.__BEH__elm_autoimport_module_init = (function __BEH__elm_autoimport_module_init(ed){var path = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));var pos = lt.objs.editor.__GT_cursor.call(null,ed);var token = lt.plugins.elm_light.utils.find_symbol.call(null,ed,pos);var token_parts = (cljs.core.truth_(token)?clojure.string.split.call(null,token,/\\./):cljs.core.PersistentVector.EMPTY);if(cljs.core.truth_((function (){var and__4872__auto__ = cljs.core._EQ_.call(null,2,cljs.core.count.call(null,token_parts));if(and__4872__auto__)\n{return cljs.core.re_find.call(null,/[A-Z].*/,cljs.core.first.call(null,token_parts));\n} else\n{return and__4872__auto__;\n}\n})()))\n{var candidates = cljs.core.map.call(null,((function (path,pos,token,token_parts){\nreturn (function (p1__6780_SHARP_){return cljs.core.assoc.call(null,p1__6780_SHARP_,new cljs.core.Keyword(null,\"label\",\"label\",1116631654),[cljs.core.str(new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(p1__6780_SHARP_)),cljs.core.str((function (){var temp__4092__auto__ = new cljs.core.Keyword(null,\"package\",\"package\",4501809080).cljs$core$IFn$_invoke$arity$1(p1__6780_SHARP_);if(cljs.core.truth_(temp__4092__auto__))\n{var pck = temp__4092__auto__;return [cljs.core.str(\" (\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(pck)),cljs.core.str(\")\")].join('');\n} else\n{return null;\n}\n})())].join(''));\n});})(path,pos,token,token_parts))\n,lt.plugins.elm_light.elm_ast.get_autoimport_candidates.call(null,cljs.core.first.call(null,token_parts),cljs.core.second.call(null,token_parts),path,lt.plugins.elm_light.utils.project_path.call(null,path)));if(cljs.core._EQ_.call(null,1,cljs.core.count.call(null,candidates)))\n{return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.autoimport.module.selected\",\"elm.autoimport.module.selected\",3875550653),cljs.core.first.call(null,candidates));\n} else\n{if((0 < cljs.core.count.call(null,candidates)))\n{return lt.plugins.elm_light.widgets.selector.make.call(null,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"ed\",\"ed\",1013907473),ed,new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430),pos,new cljs.core.Keyword(null,\"behavior\",\"behavior\",2524816836),new cljs.core.Keyword(null,\"elm.autoimport.module.selected\",\"elm.autoimport.module.selected\",3875550653),new cljs.core.Keyword(null,\"items\",\"items\",1114430258),candidates], null));\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return null;\n} else\n{return null;\n}\n}\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light\",\"elm-autoimport-module-init\",\"lt.plugins.elm-light/elm-autoimport-module-init\",1053455558),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.__BEH__elm_autoimport_module_init,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Behaviour triggered when user tries to autoimport module for an aliased declaration\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.autoimport.module.init\",\"elm.autoimport.module.init\",2552692786),null], null), null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.reload.ast\",\"elm.reload.ast\",3046520423),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Load/Reload project AST\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.reload-ast\",\"elm.reload-ast\",3046490632));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.lint\",\"elm.lint\",1176619965),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Lint selected file\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"lint\",\"lint\",1017226101),new cljs.core.Keyword(null,\"elm.lint.res\",\"elm.lint.res\",4381822959));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.make\",\"elm.make\",1176641960),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Make selected file\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.make\",\"elm.make\",1176641960));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.make-project\",\"elm.make-project\",2779298292),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Make current project\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.make-project\",\"elm.make-project\",2779298292));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.browse\",\"elm.browse\",2486947908),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: View current elm file in browser (elm-reactor)\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.browse\",\"elm.browse\",2486947908),false);\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.restart-repl\",\"elm.restart-repl\",4116096039),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Restart repl for current project\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.repl.restart\",\"elm.repl.restart\",2931654218));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.expose-top-level\",\"elm.expose-top-level\",3259391485),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Expose top level definition\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.expose.top.level\",\"elm.expose.top.level\",3091507131));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.unexpose-top-level\",\"elm.unexpose-top-level\",3798083734),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Un-expose top level definition\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.unexpose.top.level\",\"elm.unexpose.top.level\",3630199380));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.autoimport.module\",\"elm.autoimport.module\",2749496240),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Autoimport module\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.autoimport.module.init\",\"elm.autoimport.module.init\",2552692786));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.sort.imports\",\"elm.sort.imports\",1131863256),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Sort imports\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.sort.imports\",\"elm.sort.imports\",1131863256));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.help\",\"elm.help\",1176496891),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Help !\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var b = lt.objs.browser.add.call(null);return lt.object.raise.call(null,b,new cljs.core.Keyword(null,\"navigate!\",\"navigate!\",1766726722),\"https://rundis.gitbooks.io/elm-light-guide/content/\");\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.select.top.level\",\"elm.select.top.level\",3366757107),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Select top level expression from current cursor position\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var temp__4092__auto____$1 = lt.plugins.elm_light.selection.get_top_level_expr.call(null,ed,lt.objs.editor.__GT_cursor.call(null,ed));if(cljs.core.truth_(temp__4092__auto____$1))\n{var rng = temp__4092__auto____$1;return lt.objs.editor.set_selection.call(null,ed,new cljs.core.Keyword(null,\"from\",\"from\",1017056028).cljs$core$IFn$_invoke$arity$1(rng),new cljs.core.Keyword(null,\"to\",\"to\",1013907949).cljs$core$IFn$_invoke$arity$1(rng));\n} else\n{return null;\n}\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.module-graph')) {\ngoog.provide('lt.plugins.elm_light.module_graph');\ngoog.require('cljs.core');\ngoog.require('clojure.set');\ngoog.require('lt.objs.files');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.util.js');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.tabs');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('clojure.set');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.console');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.util.js');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.module_graph.dagreD3 = require(lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node_modules/dagre-d3\"));\nlt.plugins.elm_light.module_graph.d3 = require(lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"node_modules/d3\"));\nlt.plugins.elm_light.module_graph.module_graph_ui = (function module_graph_ui(this$){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.graph\",\"div.graph\",2030351651),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.filters\",\"div.filters\",1727400720),\"Add filters here !\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.module-graph\",\"div.module-graph\",913393756),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"svg:svg\",\"svg:svg\",3472817088),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"width\",\"width\",1127031096),\"650\",new cljs.core.Keyword(null,\"height\",\"height\",4087841945),\"680\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"svg:g\",\"svg:g\",1123725379),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"transform\",\"transform\",2066570974),\"translate(20,20)\"], null)], null)], null)], null)], null));var seq__19299_19425 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19300_19426 = null;var count__19301_19427 = 0;var i__19302_19428 = 0;while(true){\nif((i__19302_19428 < count__19301_19427))\n{var vec__19303_19429 = cljs.core._nth.call(null,chunk__19300_19426,i__19302_19428);var ev__6318__auto___19430 = cljs.core.nth.call(null,vec__19303_19429,0,null);var func__6319__auto___19431 = cljs.core.nth.call(null,vec__19303_19429,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19430,func__6319__auto___19431);\n{\nvar G__19432 = seq__19299_19425;\nvar G__19433 = chunk__19300_19426;\nvar G__19434 = count__19301_19427;\nvar G__19435 = (i__19302_19428 + 1);\nseq__19299_19425 = G__19432;\nchunk__19300_19426 = G__19433;\ncount__19301_19427 = G__19434;\ni__19302_19428 = G__19435;\ncontinue;\n}\n} else\n{var temp__4092__auto___19436 = cljs.core.seq.call(null,seq__19299_19425);if(temp__4092__auto___19436)\n{var seq__19299_19437__$1 = temp__4092__auto___19436;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19299_19437__$1))\n{var c__5632__auto___19438 = cljs.core.chunk_first.call(null,seq__19299_19437__$1);{\nvar G__19439 = cljs.core.chunk_rest.call(null,seq__19299_19437__$1);\nvar G__19440 = c__5632__auto___19438;\nvar G__19441 = cljs.core.count.call(null,c__5632__auto___19438);\nvar G__19442 = 0;\nseq__19299_19425 = G__19439;\nchunk__19300_19426 = G__19440;\ncount__19301_19427 = G__19441;\ni__19302_19428 = G__19442;\ncontinue;\n}\n} else\n{var vec__19304_19443 = cljs.core.first.call(null,seq__19299_19437__$1);var ev__6318__auto___19444 = cljs.core.nth.call(null,vec__19304_19443,0,null);var func__6319__auto___19445 = cljs.core.nth.call(null,vec__19304_19443,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19444,func__6319__auto___19445);\n{\nvar G__19446 = cljs.core.next.call(null,seq__19299_19437__$1);\nvar G__19447 = null;\nvar G__19448 = 0;\nvar G__19449 = 0;\nseq__19299_19425 = G__19446;\nchunk__19300_19426 = G__19447;\ncount__19301_19427 = G__19448;\ni__19302_19428 = G__19449;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.module_graph.exposeds_filter_ui = (function exposeds_filter_ui(this$){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span.filter.checkbox\",\"span.filter.checkbox\",4381384263),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"input\",\"input\",1114262332),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"type\",\"type\",1017479852),\"checkbox\"], null)], null),\"Show module exposeds\"], null)], null));var seq__19311_19450 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"change\",\"change\",3947235106),((function (e__6317__auto__){\nreturn (function (ev){return lt.plugins.elm_light.module_graph.toggle_exposeds_filter_BANG_.call(null,this$,ev.target.checked);\n});})(e__6317__auto__))\n], null)));var chunk__19312_19451 = null;var count__19313_19452 = 0;var i__19314_19453 = 0;while(true){\nif((i__19314_19453 < count__19313_19452))\n{var vec__19315_19454 = cljs.core._nth.call(null,chunk__19312_19451,i__19314_19453);var ev__6318__auto___19455 = cljs.core.nth.call(null,vec__19315_19454,0,null);var func__6319__auto___19456 = cljs.core.nth.call(null,vec__19315_19454,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19455,func__6319__auto___19456);\n{\nvar G__19457 = seq__19311_19450;\nvar G__19458 = chunk__19312_19451;\nvar G__19459 = count__19313_19452;\nvar G__19460 = (i__19314_19453 + 1);\nseq__19311_19450 = G__19457;\nchunk__19312_19451 = G__19458;\ncount__19313_19452 = G__19459;\ni__19314_19453 = G__19460;\ncontinue;\n}\n} else\n{var temp__4092__auto___19461 = cljs.core.seq.call(null,seq__19311_19450);if(temp__4092__auto___19461)\n{var seq__19311_19462__$1 = temp__4092__auto___19461;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19311_19462__$1))\n{var c__5632__auto___19463 = cljs.core.chunk_first.call(null,seq__19311_19462__$1);{\nvar G__19464 = cljs.core.chunk_rest.call(null,seq__19311_19462__$1);\nvar G__19465 = c__5632__auto___19463;\nvar G__19466 = cljs.core.count.call(null,c__5632__auto___19463);\nvar G__19467 = 0;\nseq__19311_19450 = G__19464;\nchunk__19312_19451 = G__19465;\ncount__19313_19452 = G__19466;\ni__19314_19453 = G__19467;\ncontinue;\n}\n} else\n{var vec__19316_19468 = cljs.core.first.call(null,seq__19311_19462__$1);var ev__6318__auto___19469 = cljs.core.nth.call(null,vec__19316_19468,0,null);var func__6319__auto___19470 = cljs.core.nth.call(null,vec__19316_19468,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19469,func__6319__auto___19470);\n{\nvar G__19471 = cljs.core.next.call(null,seq__19311_19462__$1);\nvar G__19472 = null;\nvar G__19473 = 0;\nvar G__19474 = 0;\nseq__19311_19450 = G__19471;\nchunk__19312_19451 = G__19472;\ncount__19313_19452 = G__19473;\ni__19314_19453 = G__19474;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.module_graph.module_filter_option_ui = (function module_filter_option_ui(this$,module){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"option\",\"option\",4298734567),new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(module)], null));var seq__19323_19475 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19324_19476 = null;var count__19325_19477 = 0;var i__19326_19478 = 0;while(true){\nif((i__19326_19478 < count__19325_19477))\n{var vec__19327_19479 = cljs.core._nth.call(null,chunk__19324_19476,i__19326_19478);var ev__6318__auto___19480 = cljs.core.nth.call(null,vec__19327_19479,0,null);var func__6319__auto___19481 = cljs.core.nth.call(null,vec__19327_19479,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19480,func__6319__auto___19481);\n{\nvar G__19482 = seq__19323_19475;\nvar G__19483 = chunk__19324_19476;\nvar G__19484 = count__19325_19477;\nvar G__19485 = (i__19326_19478 + 1);\nseq__19323_19475 = G__19482;\nchunk__19324_19476 = G__19483;\ncount__19325_19477 = G__19484;\ni__19326_19478 = G__19485;\ncontinue;\n}\n} else\n{var temp__4092__auto___19486 = cljs.core.seq.call(null,seq__19323_19475);if(temp__4092__auto___19486)\n{var seq__19323_19487__$1 = temp__4092__auto___19486;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19323_19487__$1))\n{var c__5632__auto___19488 = cljs.core.chunk_first.call(null,seq__19323_19487__$1);{\nvar G__19489 = cljs.core.chunk_rest.call(null,seq__19323_19487__$1);\nvar G__19490 = c__5632__auto___19488;\nvar G__19491 = cljs.core.count.call(null,c__5632__auto___19488);\nvar G__19492 = 0;\nseq__19323_19475 = G__19489;\nchunk__19324_19476 = G__19490;\ncount__19325_19477 = G__19491;\ni__19326_19478 = G__19492;\ncontinue;\n}\n} else\n{var vec__19328_19493 = cljs.core.first.call(null,seq__19323_19487__$1);var ev__6318__auto___19494 = cljs.core.nth.call(null,vec__19328_19493,0,null);var func__6319__auto___19495 = cljs.core.nth.call(null,vec__19328_19493,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19494,func__6319__auto___19495);\n{\nvar G__19496 = cljs.core.next.call(null,seq__19323_19487__$1);\nvar G__19497 = null;\nvar G__19498 = 0;\nvar G__19499 = 0;\nseq__19323_19475 = G__19496;\nchunk__19324_19476 = G__19497;\ncount__19325_19477 = G__19498;\ni__19326_19478 = G__19499;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.module_graph.module_filter_ui = (function module_filter_ui(this$,modules){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span.filter\",\"span.filter\",4385375758),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Module: \"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"select\",\"select\",4402849902),cljs.core.map.call(null,cljs.core.partial.call(null,lt.plugins.elm_light.module_graph.module_filter_option_ui,this$),cljs.core.cons.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"\"], null),modules))], null)], null));var seq__19335_19500 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"change\",\"change\",3947235106),((function (e__6317__auto__){\nreturn (function (ev){return lt.plugins.elm_light.module_graph.set_module_filter_BANG_.call(null,this$,ev.target.value);\n});})(e__6317__auto__))\n], null)));var chunk__19336_19501 = null;var count__19337_19502 = 0;var i__19338_19503 = 0;while(true){\nif((i__19338_19503 < count__19337_19502))\n{var vec__19339_19504 = cljs.core._nth.call(null,chunk__19336_19501,i__19338_19503);var ev__6318__auto___19505 = cljs.core.nth.call(null,vec__19339_19504,0,null);var func__6319__auto___19506 = cljs.core.nth.call(null,vec__19339_19504,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19505,func__6319__auto___19506);\n{\nvar G__19507 = seq__19335_19500;\nvar G__19508 = chunk__19336_19501;\nvar G__19509 = count__19337_19502;\nvar G__19510 = (i__19338_19503 + 1);\nseq__19335_19500 = G__19507;\nchunk__19336_19501 = G__19508;\ncount__19337_19502 = G__19509;\ni__19338_19503 = G__19510;\ncontinue;\n}\n} else\n{var temp__4092__auto___19511 = cljs.core.seq.call(null,seq__19335_19500);if(temp__4092__auto___19511)\n{var seq__19335_19512__$1 = temp__4092__auto___19511;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19335_19512__$1))\n{var c__5632__auto___19513 = cljs.core.chunk_first.call(null,seq__19335_19512__$1);{\nvar G__19514 = cljs.core.chunk_rest.call(null,seq__19335_19512__$1);\nvar G__19515 = c__5632__auto___19513;\nvar G__19516 = cljs.core.count.call(null,c__5632__auto___19513);\nvar G__19517 = 0;\nseq__19335_19500 = G__19514;\nchunk__19336_19501 = G__19515;\ncount__19337_19502 = G__19516;\ni__19338_19503 = G__19517;\ncontinue;\n}\n} else\n{var vec__19340_19518 = cljs.core.first.call(null,seq__19335_19512__$1);var ev__6318__auto___19519 = cljs.core.nth.call(null,vec__19340_19518,0,null);var func__6319__auto___19520 = cljs.core.nth.call(null,vec__19340_19518,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19519,func__6319__auto___19520);\n{\nvar G__19521 = cljs.core.next.call(null,seq__19335_19512__$1);\nvar G__19522 = null;\nvar G__19523 = 0;\nvar G__19524 = 0;\nseq__19335_19500 = G__19521;\nchunk__19336_19501 = G__19522;\ncount__19337_19502 = G__19523;\ni__19338_19503 = G__19524;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.module_graph.group_filter_option_ui = (function group_filter_option_ui(this$,group){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"option\",\"option\",4298734567),new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(group)], null));var seq__19347_19525 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19348_19526 = null;var count__19349_19527 = 0;var i__19350_19528 = 0;while(true){\nif((i__19350_19528 < count__19349_19527))\n{var vec__19351_19529 = cljs.core._nth.call(null,chunk__19348_19526,i__19350_19528);var ev__6318__auto___19530 = cljs.core.nth.call(null,vec__19351_19529,0,null);var func__6319__auto___19531 = cljs.core.nth.call(null,vec__19351_19529,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19530,func__6319__auto___19531);\n{\nvar G__19532 = seq__19347_19525;\nvar G__19533 = chunk__19348_19526;\nvar G__19534 = count__19349_19527;\nvar G__19535 = (i__19350_19528 + 1);\nseq__19347_19525 = G__19532;\nchunk__19348_19526 = G__19533;\ncount__19349_19527 = G__19534;\ni__19350_19528 = G__19535;\ncontinue;\n}\n} else\n{var temp__4092__auto___19536 = cljs.core.seq.call(null,seq__19347_19525);if(temp__4092__auto___19536)\n{var seq__19347_19537__$1 = temp__4092__auto___19536;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19347_19537__$1))\n{var c__5632__auto___19538 = cljs.core.chunk_first.call(null,seq__19347_19537__$1);{\nvar G__19539 = cljs.core.chunk_rest.call(null,seq__19347_19537__$1);\nvar G__19540 = c__5632__auto___19538;\nvar G__19541 = cljs.core.count.call(null,c__5632__auto___19538);\nvar G__19542 = 0;\nseq__19347_19525 = G__19539;\nchunk__19348_19526 = G__19540;\ncount__19349_19527 = G__19541;\ni__19350_19528 = G__19542;\ncontinue;\n}\n} else\n{var vec__19352_19543 = cljs.core.first.call(null,seq__19347_19537__$1);var ev__6318__auto___19544 = cljs.core.nth.call(null,vec__19352_19543,0,null);var func__6319__auto___19545 = cljs.core.nth.call(null,vec__19352_19543,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19544,func__6319__auto___19545);\n{\nvar G__19546 = cljs.core.next.call(null,seq__19347_19537__$1);\nvar G__19547 = null;\nvar G__19548 = 0;\nvar G__19549 = 0;\nseq__19347_19525 = G__19546;\nchunk__19348_19526 = G__19547;\ncount__19349_19527 = G__19548;\ni__19350_19528 = G__19549;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.module_graph.group_filter_ui = (function group_filter_ui(this$,groups){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span.filter\",\"span.filter\",4385375758),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Group: \"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"select\",\"select\",4402849902),cljs.core.map.call(null,cljs.core.partial.call(null,lt.plugins.elm_light.module_graph.group_filter_option_ui,this$),cljs.core.cons.call(null,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"\"], null),groups))], null)], null));var seq__19359_19550 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"change\",\"change\",3947235106),((function (e__6317__auto__){\nreturn (function (ev){return lt.plugins.elm_light.module_graph.set_group_filter_BANG_.call(null,this$,ev.target.value);\n});})(e__6317__auto__))\n], null)));var chunk__19360_19551 = null;var count__19361_19552 = 0;var i__19362_19553 = 0;while(true){\nif((i__19362_19553 < count__19361_19552))\n{var vec__19363_19554 = cljs.core._nth.call(null,chunk__19360_19551,i__19362_19553);var ev__6318__auto___19555 = cljs.core.nth.call(null,vec__19363_19554,0,null);var func__6319__auto___19556 = cljs.core.nth.call(null,vec__19363_19554,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19555,func__6319__auto___19556);\n{\nvar G__19557 = seq__19359_19550;\nvar G__19558 = chunk__19360_19551;\nvar G__19559 = count__19361_19552;\nvar G__19560 = (i__19362_19553 + 1);\nseq__19359_19550 = G__19557;\nchunk__19360_19551 = G__19558;\ncount__19361_19552 = G__19559;\ni__19362_19553 = G__19560;\ncontinue;\n}\n} else\n{var temp__4092__auto___19561 = cljs.core.seq.call(null,seq__19359_19550);if(temp__4092__auto___19561)\n{var seq__19359_19562__$1 = temp__4092__auto___19561;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19359_19562__$1))\n{var c__5632__auto___19563 = cljs.core.chunk_first.call(null,seq__19359_19562__$1);{\nvar G__19564 = cljs.core.chunk_rest.call(null,seq__19359_19562__$1);\nvar G__19565 = c__5632__auto___19563;\nvar G__19566 = cljs.core.count.call(null,c__5632__auto___19563);\nvar G__19567 = 0;\nseq__19359_19550 = G__19564;\nchunk__19360_19551 = G__19565;\ncount__19361_19552 = G__19566;\ni__19362_19553 = G__19567;\ncontinue;\n}\n} else\n{var vec__19364_19568 = cljs.core.first.call(null,seq__19359_19562__$1);var ev__6318__auto___19569 = cljs.core.nth.call(null,vec__19364_19568,0,null);var func__6319__auto___19570 = cljs.core.nth.call(null,vec__19364_19568,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19569,func__6319__auto___19570);\n{\nvar G__19571 = cljs.core.next.call(null,seq__19359_19562__$1);\nvar G__19572 = null;\nvar G__19573 = 0;\nvar G__19574 = 0;\nseq__19359_19550 = G__19571;\nchunk__19360_19551 = G__19572;\ncount__19361_19552 = G__19573;\ni__19362_19553 = G__19574;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.module_graph.filters_ui = (function filters_ui(this$,filters){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.filters\",\"div.filters\",1727400720),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"h1\",\"h1\",1013907515),lt.objs.files.basename.call(null,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))], null),lt.plugins.elm_light.module_graph.group_filter_ui.call(null,this$,new cljs.core.Keyword(null,\"groups\",\"groups\",4071411014).cljs$core$IFn$_invoke$arity$1(filters)),lt.plugins.elm_light.module_graph.module_filter_ui.call(null,this$,new cljs.core.Keyword(null,\"modules\",\"modules\",2241338105).cljs$core$IFn$_invoke$arity$1(filters)),lt.plugins.elm_light.module_graph.exposeds_filter_ui.call(null,this$)], null));var seq__19371_19575 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19372_19576 = null;var count__19373_19577 = 0;var i__19374_19578 = 0;while(true){\nif((i__19374_19578 < count__19373_19577))\n{var vec__19375_19579 = cljs.core._nth.call(null,chunk__19372_19576,i__19374_19578);var ev__6318__auto___19580 = cljs.core.nth.call(null,vec__19375_19579,0,null);var func__6319__auto___19581 = cljs.core.nth.call(null,vec__19375_19579,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19580,func__6319__auto___19581);\n{\nvar G__19582 = seq__19371_19575;\nvar G__19583 = chunk__19372_19576;\nvar G__19584 = count__19373_19577;\nvar G__19585 = (i__19374_19578 + 1);\nseq__19371_19575 = G__19582;\nchunk__19372_19576 = G__19583;\ncount__19373_19577 = G__19584;\ni__19374_19578 = G__19585;\ncontinue;\n}\n} else\n{var temp__4092__auto___19586 = cljs.core.seq.call(null,seq__19371_19575);if(temp__4092__auto___19586)\n{var seq__19371_19587__$1 = temp__4092__auto___19586;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19371_19587__$1))\n{var c__5632__auto___19588 = cljs.core.chunk_first.call(null,seq__19371_19587__$1);{\nvar G__19589 = cljs.core.chunk_rest.call(null,seq__19371_19587__$1);\nvar G__19590 = c__5632__auto___19588;\nvar G__19591 = cljs.core.count.call(null,c__5632__auto___19588);\nvar G__19592 = 0;\nseq__19371_19575 = G__19589;\nchunk__19372_19576 = G__19590;\ncount__19373_19577 = G__19591;\ni__19374_19578 = G__19592;\ncontinue;\n}\n} else\n{var vec__19376_19593 = cljs.core.first.call(null,seq__19371_19587__$1);var ev__6318__auto___19594 = cljs.core.nth.call(null,vec__19376_19593,0,null);var func__6319__auto___19595 = cljs.core.nth.call(null,vec__19376_19593,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___19594,func__6319__auto___19595);\n{\nvar G__19596 = cljs.core.next.call(null,seq__19371_19587__$1);\nvar G__19597 = null;\nvar G__19598 = 0;\nvar G__19599 = 0;\nseq__19371_19575 = G__19596;\nchunk__19372_19576 = G__19597;\ncount__19373_19577 = G__19598;\ni__19374_19578 = G__19599;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.module_graph.render_filters = (function render_filters(this$,filters){var container = lt.object.__GT_content.call(null,this$);var curr_filters = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.filters\",\"div.filters\",1727400720),container);return lt.util.dom.replace_with.call(null,curr_filters,lt.plugins.elm_light.module_graph.filters_ui.call(null,this$,filters));\n});\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.module-graph\",\"module-graph\",\"lt.plugins.elm-light.module-graph/module-graph\",2992764911),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"elm.graph.module\",\"elm.graph.module\",1941990086)], null),new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"Module graph\",new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){return lt.plugins.elm_light.module_graph.module_graph_ui.call(null,this$);\n}));\nlt.plugins.elm_light.module_graph.__BEH__on_close_destroy = (function __BEH__on_close_destroy(this$){var temp__4092__auto___19600 = new cljs.core.Keyword(\"lt.objs.tabs\",\"tabset\",\"lt.objs.tabs/tabset\",3378091779).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$));if(cljs.core.truth_(temp__4092__auto___19600))\n{var ts_19601 = temp__4092__auto___19600;if(cljs.core._EQ_.call(null,cljs.core.count.call(null,new cljs.core.Keyword(null,\"objs\",\"objs\",1017308622).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ts_19601))),1))\n{lt.objs.tabs.rem_tabset.call(null,ts_19601);\n} else\n{}\n} else\n{}\nreturn lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"destroy\",\"destroy\",2571277164));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.module-graph\",\"on-close-destroy\",\"lt.plugins.elm-light.module-graph/on-close-destroy\",3099505529),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.module_graph.__BEH__on_close_destroy,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"close\",\"close\",1108660586),null], null), null));\nlt.plugins.elm_light.module_graph.node_id = (function node_id(x){return new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(x);\n});\nlt.plugins.elm_light.module_graph.exposeds_html = (function exposeds_html(exposeds){return [cljs.core.str(\"<ul>\"),cljs.core.str(clojure.string.join.call(null,cljs.core.map.call(null,(function (exp){return [cljs.core.str(\"<li>\"),cljs.core.str(exp),cljs.core.str(\"</li>\")].join('');\n}),exposeds))),cljs.core.str(\"</ul>\")].join('');\n});\nlt.plugins.elm_light.module_graph.node_label = (function node_label(this$,x){return {\"label\": [cljs.core.str(\"<div class='graph-label'>\"),cljs.core.str(\"<span>\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(x)),cljs.core.str(\"</span>\"),cljs.core.str((cljs.core.truth_(new cljs.core.Keyword(null,\"show-exposeds?\",\"show-exposeds?\",784237550).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"filters\",\"filters\",4454324077).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))))?lt.plugins.elm_light.module_graph.exposeds_html.call(null,new cljs.core.Keyword(null,\"exposeds\",\"exposeds\",3382850245).cljs$core$IFn$_invoke$arity$1(x)):null)),cljs.core.str(\"</div>\")].join(''), \"style\": ((cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(x),new cljs.core.Keyword(null,\"current-module\",\"current-module\",2268519602).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"filters\",\"filters\",4454324077).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))))?\"fill: #FFF8DC\":null), \"labelType\": \"html\", \"shape\": (function (){var temp__4090__auto__ = new cljs.core.Keyword(null,\"shape\",\"shape\",1123304211).cljs$core$IFn$_invoke$arity$1(x);if(cljs.core.truth_(temp__4090__auto__))\n{var shape = temp__4090__auto__;return shape;\n} else\n{return \"rect\";\n}\n})()};\n});\nlt.plugins.elm_light.module_graph.level_styles = new cljs.core.PersistentArrayMap(null, 5, [1,\"fill: #474747\",2,\"fill: #6D686E\",3,\"fill: #7E7880\",4,\"fill: #807A78\",5,\"fill: #919394\"], null);\nlt.plugins.elm_light.module_graph.group_label = (function group_label(x){return {\"label\": [cljs.core.str(\"<div class='group-label'>\"),cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(x)),cljs.core.str(\"</div>\")].join(''), \"clusterLabelPos\": \"top\", \"class\": \"level-class\", \"style\": cljs.core.get.call(null,lt.plugins.elm_light.module_graph.level_styles,new cljs.core.Keyword(null,\"level\",\"level\",1116770038).cljs$core$IFn$_invoke$arity$1(x)), \"labelType\": \"html\", \"shape\": (function (){var temp__4090__auto__ = new cljs.core.Keyword(null,\"shape\",\"shape\",1123304211).cljs$core$IFn$_invoke$arity$1(x);if(cljs.core.truth_(temp__4090__auto__))\n{var shape = temp__4090__auto__;return shape;\n} else\n{return \"rect\";\n}\n})()};\n});\nlt.plugins.elm_light.module_graph.create_graph = (function create_graph(this$,data){var g = (new lt.plugins.elm_light.module_graph.dagreD3.graphlib.Graph({\"compound\": true})).setGraph({});var seq__19393_19602 = cljs.core.seq.call(null,new cljs.core.Keyword(null,\"groups\",\"groups\",4071411014).cljs$core$IFn$_invoke$arity$1(data));var chunk__19394_19603 = null;var count__19395_19604 = 0;var i__19396_19605 = 0;while(true){\nif((i__19396_19605 < count__19395_19604))\n{var x_19606 = cljs.core._nth.call(null,chunk__19394_19603,i__19396_19605);g.setNode(new cljs.core.Keyword(null,\"group\",\"group\",1112533489).cljs$core$IFn$_invoke$arity$1(x_19606),lt.plugins.elm_light.module_graph.group_label.call(null,x_19606));\n{\nvar G__19607 = seq__19393_19602;\nvar G__19608 = chunk__19394_19603;\nvar G__19609 = count__19395_19604;\nvar G__19610 = (i__19396_19605 + 1);\nseq__19393_19602 = G__19607;\nchunk__19394_19603 = G__19608;\ncount__19395_19604 = G__19609;\ni__19396_19605 = G__19610;\ncontinue;\n}\n} else\n{var temp__4092__auto___19611 = cljs.core.seq.call(null,seq__19393_19602);if(temp__4092__auto___19611)\n{var seq__19393_19612__$1 = temp__4092__auto___19611;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19393_19612__$1))\n{var c__5632__auto___19613 = cljs.core.chunk_first.call(null,seq__19393_19612__$1);{\nvar G__19614 = cljs.core.chunk_rest.call(null,seq__19393_19612__$1);\nvar G__19615 = c__5632__auto___19613;\nvar G__19616 = cljs.core.count.call(null,c__5632__auto___19613);\nvar G__19617 = 0;\nseq__19393_19602 = G__19614;\nchunk__19394_19603 = G__19615;\ncount__19395_19604 = G__19616;\ni__19396_19605 = G__19617;\ncontinue;\n}\n} else\n{var x_19618 = cljs.core.first.call(null,seq__19393_19612__$1);g.setNode(new cljs.core.Keyword(null,\"group\",\"group\",1112533489).cljs$core$IFn$_invoke$arity$1(x_19618),lt.plugins.elm_light.module_graph.group_label.call(null,x_19618));\n{\nvar G__19619 = cljs.core.next.call(null,seq__19393_19612__$1);\nvar G__19620 = null;\nvar G__19621 = 0;\nvar G__19622 = 0;\nseq__19393_19602 = G__19619;\nchunk__19394_19603 = G__19620;\ncount__19395_19604 = G__19621;\ni__19396_19605 = G__19622;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nvar seq__19397_19623 = cljs.core.seq.call(null,new cljs.core.Keyword(null,\"nodes\",\"nodes\",1118897699).cljs$core$IFn$_invoke$arity$1(data));var chunk__19398_19624 = null;var count__19399_19625 = 0;var i__19400_19626 = 0;while(true){\nif((i__19400_19626 < count__19399_19625))\n{var x_19627 = cljs.core._nth.call(null,chunk__19398_19624,i__19400_19626);g.setNode(lt.plugins.elm_light.module_graph.node_id.call(null,x_19627),lt.plugins.elm_light.module_graph.node_label.call(null,this$,x_19627));\nvar temp__4092__auto___19628 = new cljs.core.Keyword(null,\"parent\",\"parent\",4313447452).cljs$core$IFn$_invoke$arity$1(x_19627);if(cljs.core.truth_(temp__4092__auto___19628))\n{var parent_19629 = temp__4092__auto___19628;g.setParent(lt.plugins.elm_light.module_graph.node_id.call(null,x_19627),parent_19629);\n} else\n{}\n{\nvar G__19630 = seq__19397_19623;\nvar G__19631 = chunk__19398_19624;\nvar G__19632 = count__19399_19625;\nvar G__19633 = (i__19400_19626 + 1);\nseq__19397_19623 = G__19630;\nchunk__19398_19624 = G__19631;\ncount__19399_19625 = G__19632;\ni__19400_19626 = G__19633;\ncontinue;\n}\n} else\n{var temp__4092__auto___19634 = cljs.core.seq.call(null,seq__19397_19623);if(temp__4092__auto___19634)\n{var seq__19397_19635__$1 = temp__4092__auto___19634;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19397_19635__$1))\n{var c__5632__auto___19636 = cljs.core.chunk_first.call(null,seq__19397_19635__$1);{\nvar G__19637 = cljs.core.chunk_rest.call(null,seq__19397_19635__$1);\nvar G__19638 = c__5632__auto___19636;\nvar G__19639 = cljs.core.count.call(null,c__5632__auto___19636);\nvar G__19640 = 0;\nseq__19397_19623 = G__19637;\nchunk__19398_19624 = G__19638;\ncount__19399_19625 = G__19639;\ni__19400_19626 = G__19640;\ncontinue;\n}\n} else\n{var x_19641 = cljs.core.first.call(null,seq__19397_19635__$1);g.setNode(lt.plugins.elm_light.module_graph.node_id.call(null,x_19641),lt.plugins.elm_light.module_graph.node_label.call(null,this$,x_19641));\nvar temp__4092__auto___19642__$1 = new cljs.core.Keyword(null,\"parent\",\"parent\",4313447452).cljs$core$IFn$_invoke$arity$1(x_19641);if(cljs.core.truth_(temp__4092__auto___19642__$1))\n{var parent_19643 = temp__4092__auto___19642__$1;g.setParent(lt.plugins.elm_light.module_graph.node_id.call(null,x_19641),parent_19643);\n} else\n{}\n{\nvar G__19644 = cljs.core.next.call(null,seq__19397_19635__$1);\nvar G__19645 = null;\nvar G__19646 = 0;\nvar G__19647 = 0;\nseq__19397_19623 = G__19644;\nchunk__19398_19624 = G__19645;\ncount__19399_19625 = G__19646;\ni__19400_19626 = G__19647;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nvar seq__19401_19648 = cljs.core.seq.call(null,cljs.core.filter.call(null,new cljs.core.Keyword(null,\"parent\",\"parent\",4313447452),new cljs.core.Keyword(null,\"groups\",\"groups\",4071411014).cljs$core$IFn$_invoke$arity$1(data)));var chunk__19402_19649 = null;var count__19403_19650 = 0;var i__19404_19651 = 0;while(true){\nif((i__19404_19651 < count__19403_19650))\n{var x_19652 = cljs.core._nth.call(null,chunk__19402_19649,i__19404_19651);g.setParent(new cljs.core.Keyword(null,\"group\",\"group\",1112533489).cljs$core$IFn$_invoke$arity$1(x_19652),new cljs.core.Keyword(null,\"parent\",\"parent\",4313447452).cljs$core$IFn$_invoke$arity$1(x_19652));\n{\nvar G__19653 = seq__19401_19648;\nvar G__19654 = chunk__19402_19649;\nvar G__19655 = count__19403_19650;\nvar G__19656 = (i__19404_19651 + 1);\nseq__19401_19648 = G__19653;\nchunk__19402_19649 = G__19654;\ncount__19403_19650 = G__19655;\ni__19404_19651 = G__19656;\ncontinue;\n}\n} else\n{var temp__4092__auto___19657 = cljs.core.seq.call(null,seq__19401_19648);if(temp__4092__auto___19657)\n{var seq__19401_19658__$1 = temp__4092__auto___19657;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19401_19658__$1))\n{var c__5632__auto___19659 = cljs.core.chunk_first.call(null,seq__19401_19658__$1);{\nvar G__19660 = cljs.core.chunk_rest.call(null,seq__19401_19658__$1);\nvar G__19661 = c__5632__auto___19659;\nvar G__19662 = cljs.core.count.call(null,c__5632__auto___19659);\nvar G__19663 = 0;\nseq__19401_19648 = G__19660;\nchunk__19402_19649 = G__19661;\ncount__19403_19650 = G__19662;\ni__19404_19651 = G__19663;\ncontinue;\n}\n} else\n{var x_19664 = cljs.core.first.call(null,seq__19401_19658__$1);g.setParent(new cljs.core.Keyword(null,\"group\",\"group\",1112533489).cljs$core$IFn$_invoke$arity$1(x_19664),new cljs.core.Keyword(null,\"parent\",\"parent\",4313447452).cljs$core$IFn$_invoke$arity$1(x_19664));\n{\nvar G__19665 = cljs.core.next.call(null,seq__19401_19658__$1);\nvar G__19666 = null;\nvar G__19667 = 0;\nvar G__19668 = 0;\nseq__19401_19648 = G__19665;\nchunk__19402_19649 = G__19666;\ncount__19403_19650 = G__19667;\ni__19404_19651 = G__19668;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nvar seq__19405_19669 = cljs.core.seq.call(null,new cljs.core.Keyword(null,\"edges\",\"edges\",1110261192).cljs$core$IFn$_invoke$arity$1(data));var chunk__19406_19670 = null;var count__19407_19671 = 0;var i__19408_19672 = 0;while(true){\nif((i__19408_19672 < count__19407_19671))\n{var x_19673 = cljs.core._nth.call(null,chunk__19406_19670,i__19408_19672);g.setEdge(new cljs.core.Keyword(null,\"a\",\"a\",1013904339).cljs$core$IFn$_invoke$arity$1(x_19673),new cljs.core.Keyword(null,\"b\",\"b\",1013904340).cljs$core$IFn$_invoke$arity$1(x_19673),{\"label\": new cljs.core.Keyword(null,\"label\",\"label\",1116631654).cljs$core$IFn$_invoke$arity$1(x_19673)});\n{\nvar G__19674 = seq__19405_19669;\nvar G__19675 = chunk__19406_19670;\nvar G__19676 = count__19407_19671;\nvar G__19677 = (i__19408_19672 + 1);\nseq__19405_19669 = G__19674;\nchunk__19406_19670 = G__19675;\ncount__19407_19671 = G__19676;\ni__19408_19672 = G__19677;\ncontinue;\n}\n} else\n{var temp__4092__auto___19678 = cljs.core.seq.call(null,seq__19405_19669);if(temp__4092__auto___19678)\n{var seq__19405_19679__$1 = temp__4092__auto___19678;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19405_19679__$1))\n{var c__5632__auto___19680 = cljs.core.chunk_first.call(null,seq__19405_19679__$1);{\nvar G__19681 = cljs.core.chunk_rest.call(null,seq__19405_19679__$1);\nvar G__19682 = c__5632__auto___19680;\nvar G__19683 = cljs.core.count.call(null,c__5632__auto___19680);\nvar G__19684 = 0;\nseq__19405_19669 = G__19681;\nchunk__19406_19670 = G__19682;\ncount__19407_19671 = G__19683;\ni__19408_19672 = G__19684;\ncontinue;\n}\n} else\n{var x_19685 = cljs.core.first.call(null,seq__19405_19679__$1);g.setEdge(new cljs.core.Keyword(null,\"a\",\"a\",1013904339).cljs$core$IFn$_invoke$arity$1(x_19685),new cljs.core.Keyword(null,\"b\",\"b\",1013904340).cljs$core$IFn$_invoke$arity$1(x_19685),{\"label\": new cljs.core.Keyword(null,\"label\",\"label\",1116631654).cljs$core$IFn$_invoke$arity$1(x_19685)});\n{\nvar G__19686 = cljs.core.next.call(null,seq__19405_19679__$1);\nvar G__19687 = null;\nvar G__19688 = 0;\nvar G__19689 = 0;\nseq__19405_19669 = G__19686;\nchunk__19406_19670 = G__19687;\ncount__19407_19671 = G__19688;\ni__19408_19672 = G__19689;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn g;\n});\nlt.plugins.elm_light.module_graph.d3_sel = (function d3_sel(selector){return lt.plugins.elm_light.module_graph.d3.select(selector);\n});\nlt.plugins.elm_light.module_graph.dimensions = (function dimensions(this$){return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"w\",\"w\",1013904361),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)).clientWidth,new cljs.core.Keyword(null,\"h\",\"h\",1013904346),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)).clientHeight], null);\n});\nlt.plugins.elm_light.module_graph.init_zoom = (function init_zoom(svg,g){var zoom = lt.plugins.elm_light.module_graph.d3.behavior.zoom().on(\"zoom\",(function (){return g.attr(\"transform\",[cljs.core.str(\"translate(\"),cljs.core.str(lt.plugins.elm_light.module_graph.d3.event.translate),cljs.core.str(\")\"),cljs.core.str(\"scale(\"),cljs.core.str(lt.plugins.elm_light.module_graph.d3.event.scale),cljs.core.str(\")\")].join(''));\n}));return svg.call(zoom);\n});\nlt.plugins.elm_light.module_graph.resize_graph = (function resize_graph(this$,svg){var dim = lt.plugins.elm_light.module_graph.dimensions.call(null,this$);svg.attr(\"width\",(new cljs.core.Keyword(null,\"w\",\"w\",1013904361).cljs$core$IFn$_invoke$arity$1(dim) + 20));\nreturn svg.attr(\"height\",(new cljs.core.Keyword(null,\"h\",\"h\",1013904346).cljs$core$IFn$_invoke$arity$1(dim) + 20));\n});\nlt.plugins.elm_light.module_graph.__BEH__on_render = (function __BEH__on_render(this$,data){var svg = lt.plugins.elm_light.module_graph.d3.select(\"svg\");var g = svg.select(\"g\");var renderer = lt.plugins.elm_light.module_graph.dagreD3.render();renderer.call(null,g,lt.plugins.elm_light.module_graph.create_graph.call(null,this$,data));\nlt.plugins.elm_light.module_graph.init_zoom.call(null,svg,g);\nreturn lt.util.js.wait.call(null,200,((function (svg,g,renderer){\nreturn (function (){return lt.plugins.elm_light.module_graph.resize_graph.call(null,this$,svg);\n});})(svg,g,renderer))\n);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.module-graph\",\"on-render\",\"lt.plugins.elm-light.module-graph/on-render\",3178205958),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.module_graph.__BEH__on_render,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm render project modules\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.module-graph.render\",\"elm.module-graph.render\",3905237537),null], null), null));\nlt.plugins.elm_light.module_graph.get_project_modules = (function get_project_modules(project_path){return cljs.core.remove.call(null,new cljs.core.Keyword(null,\"package\",\"package\",4501809080),new cljs.core.Keyword(null,\"file-asts\",\"file-asts\",3945857876).cljs$core$IFn$_invoke$arity$1(lt.plugins.elm_light.elm_ast.get_project.call(null,project_path)));\n});\nlt.plugins.elm_light.module_graph.get_group_names = (function get_group_names(module_names){return cljs.core.sort.call(null,cljs.core.set.call(null,cljs.core.mapcat.call(null,(function (parts){return cljs.core.reduce.call(null,(function (a,b){var group_name = [cljs.core.str(new cljs.core.Keyword(null,\"name\",\"name\",1017277949).cljs$core$IFn$_invoke$arity$1(cljs.core.last.call(null,a))),cljs.core.str(((cljs.core.seq.call(null,a))?\".\":null)),cljs.core.str(b)].join('');return cljs.core.conj.call(null,a,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"group\",\"group\",1112533489),[cljs.core.str(\"g-\"),cljs.core.str(group_name)].join(''),new cljs.core.Keyword(null,\"name\",\"name\",1017277949),group_name,new cljs.core.Keyword(null,\"level\",\"level\",1116770038),(cljs.core.count.call(null,a) + 1),new cljs.core.Keyword(null,\"parent\",\"parent\",4313447452),new cljs.core.Keyword(null,\"group\",\"group\",1112533489).cljs$core$IFn$_invoke$arity$1(cljs.core.last.call(null,a))], null));\n}),cljs.core.PersistentVector.EMPTY,parts);\n}),cljs.core.map.call(null,cljs.core.drop_last,cljs.core.filter.call(null,(function (p1__19410_SHARP_){return (1 < cljs.core.count.call(null,p1__19410_SHARP_));\n}),cljs.core.map.call(null,(function (p1__19409_SHARP_){return clojure.string.split.call(null,p1__19409_SHARP_,/\\./);\n}),module_names))))));\n});\nlt.plugins.elm_light.module_graph.get_exposeds_names = (function get_exposeds_names(module){return cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),cljs.core.remove.call(null,(function (p1__19411_SHARP_){return cljs.core._EQ_.call(null,\"adtDef\",new cljs.core.Keyword(null,\"type\",\"type\",1017479852).cljs$core$IFn$_invoke$arity$1(p1__19411_SHARP_));\n}),lt.plugins.elm_light.elm_ast.get_exposed_declarations_memo.call(null,module)));\n});\nlt.plugins.elm_light.module_graph.create_graph_data = (function create_graph_data(modules){var module_names = cljs.core.set.call(null,cljs.core.map.call(null,lt.plugins.elm_light.elm_ast.get_module_name,modules));return new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"groups\",\"groups\",4071411014),lt.plugins.elm_light.module_graph.get_group_names.call(null,module_names),new cljs.core.Keyword(null,\"nodes\",\"nodes\",1118897699),cljs.core.map.call(null,((function (module_names){\nreturn (function (module){var mod_name = lt.plugins.elm_light.elm_ast.get_module_name.call(null,module);return new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),lt.plugins.elm_light.elm_ast.get_module_name.call(null,module),new cljs.core.Keyword(null,\"parent\",\"parent\",4313447452),(((-1 < mod_name.indexOf(\".\")))?[cljs.core.str(\"g-\"),cljs.core.str(clojure.string.join.call(null,\".\",cljs.core.drop_last.call(null,clojure.string.split.call(null,mod_name,/\\./))))].join(''):null),new cljs.core.Keyword(null,\"exposeds\",\"exposeds\",3382850245),lt.plugins.elm_light.module_graph.get_exposeds_names.call(null,module),new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(module)], null);\n});})(module_names))\n,modules),new cljs.core.Keyword(null,\"edges\",\"edges\",1110261192),cljs.core.mapcat.call(null,((function (module_names){\nreturn (function (module){return cljs.core.map.call(null,((function (module_names){\nreturn (function (imp){return new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"a\",\"a\",1013904339),lt.plugins.elm_light.elm_ast.get_module_name.call(null,module),new cljs.core.Keyword(null,\"b\",\"b\",1013904340),new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(imp),new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"\"], null);\n});})(module_names))\n,cljs.core.filter.call(null,((function (module_names){\nreturn (function (p1__19412_SHARP_){return cljs.core.contains_QMARK_.call(null,module_names,new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__19412_SHARP_));\n});})(module_names))\n,new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)))));\n});})(module_names))\n,modules)], null);\n});\nlt.plugins.elm_light.module_graph.get_module_import_names = (function get_module_import_names(module){return cljs.core.set.call(null,cljs.core.map.call(null,new cljs.core.Keyword(null,\"value\",\"value\",1125876963),new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"imports\",\"imports\",2939942112).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"ast\",\"ast\",1014001140).cljs$core$IFn$_invoke$arity$1(module)))));\n});\nlt.plugins.elm_light.module_graph.maybe_filter_by_group = (function maybe_filter_by_group(current_group,modules){if(cljs.core.not.call(null,clojure.string.blank_QMARK_.call(null,current_group)))\n{return cljs.core.filter.call(null,(function (p1__19413_SHARP_){return lt.plugins.elm_light.elm_ast.get_module_name.call(null,p1__19413_SHARP_).startsWith(current_group);\n}),modules);\n} else\n{return modules;\n}\n});\nlt.plugins.elm_light.module_graph.maybe_filter_by_module = (function maybe_filter_by_module(current_module,modules){if(cljs.core.not.call(null,clojure.string.blank_QMARK_.call(null,current_module)))\n{var module = cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__19414_SHARP_){return cljs.core._EQ_.call(null,current_module,lt.plugins.elm_light.elm_ast.get_module_name.call(null,p1__19414_SHARP_));\n}),modules));var module_import_names = lt.plugins.elm_light.module_graph.get_module_import_names.call(null,module);return cljs.core.filter.call(null,((function (module,module_import_names){\nreturn (function (m){return (cljs.core._EQ_.call(null,module,m)) || (cljs.core.contains_QMARK_.call(null,module_import_names,lt.plugins.elm_light.elm_ast.get_module_name.call(null,m))) || (cljs.core.contains_QMARK_.call(null,lt.plugins.elm_light.module_graph.get_module_import_names.call(null,m),current_module));\n});})(module,module_import_names))\n,modules);\n} else\n{return modules;\n}\n});\nlt.plugins.elm_light.module_graph.refresh_graph = (function refresh_graph(this$){var modules = lt.plugins.elm_light.module_graph.maybe_filter_by_module.call(null,new cljs.core.Keyword(null,\"current-module\",\"current-module\",2268519602).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"filters\",\"filters\",4454324077).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))),lt.plugins.elm_light.module_graph.maybe_filter_by_group.call(null,new cljs.core.Keyword(null,\"current-group\",\"current-group\",2157313181).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"filters\",\"filters\",4454324077).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))),lt.plugins.elm_light.module_graph.get_project_modules.call(null,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))));return lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"elm.module-graph.render\",\"elm.module-graph.render\",3905237537),lt.plugins.elm_light.module_graph.create_graph_data.call(null,modules));\n});\nlt.plugins.elm_light.module_graph.set_group_filter_BANG_ = (function set_group_filter_BANG_(this$,group_name){lt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"filters\",\"filters\",4454324077),new cljs.core.Keyword(null,\"current-group\",\"current-group\",2157313181)], null),group_name);\nreturn lt.plugins.elm_light.module_graph.refresh_graph.call(null,this$);\n});\nlt.plugins.elm_light.module_graph.set_module_filter_BANG_ = (function set_module_filter_BANG_(this$,module_name){lt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"filters\",\"filters\",4454324077),new cljs.core.Keyword(null,\"current-module\",\"current-module\",2268519602)], null),module_name);\nreturn lt.plugins.elm_light.module_graph.refresh_graph.call(null,this$);\n});\nlt.plugins.elm_light.module_graph.toggle_exposeds_filter_BANG_ = (function toggle_exposeds_filter_BANG_(this$,v){lt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"filters\",\"filters\",4454324077),new cljs.core.Keyword(null,\"show-exposeds?\",\"show-exposeds?\",784237550)], null),v);\nreturn lt.plugins.elm_light.module_graph.refresh_graph.call(null,this$);\n});\nlt.plugins.elm_light.module_graph.__BEH__on_show_modules = (function __BEH__on_show_modules(this$,project_path){lt.objs.tabs.add_or_focus_BANG_.call(null,this$);\nvar modules = lt.plugins.elm_light.module_graph.get_project_modules.call(null,project_path);var groups = lt.plugins.elm_light.module_graph.get_group_names.call(null,cljs.core.set.call(null,cljs.core.map.call(null,lt.plugins.elm_light.elm_ast.get_module_name,modules)));lt.object.merge_BANG_.call(null,this$,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"filters\",\"filters\",4454324077),cljs.core.PersistentArrayMap.EMPTY,new cljs.core.Keyword(null,\"project-path\",\"project-path\",1907176907),project_path], null));\nlt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"elm.module-graph.render\",\"elm.module-graph.render\",3905237537),lt.plugins.elm_light.module_graph.create_graph_data.call(null,modules));\nreturn lt.plugins.elm_light.module_graph.render_filters.call(null,this$,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"groups\",\"groups\",4071411014),groups,new cljs.core.Keyword(null,\"modules\",\"modules\",2241338105),cljs.core.map.call(null,((function (modules,groups){\nreturn (function (module){return new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"name\",\"name\",1017277949),lt.plugins.elm_light.elm_ast.get_module_name.call(null,module)], null);\n});})(modules,groups))\n,modules)], null));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.module-graph\",\"on-show-modules\",\"lt.plugins.elm-light.module-graph/on-show-modules\",4191379367),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.module_graph.__BEH__on_show_modules,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm show module graph\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.module-graph.show\",\"elm.module-graph.show\",2773368264),null], null), null));\nlt.plugins.elm_light.module_graph.__BEH__on_tab_resized = (function __BEH__on_tab_resized(_){var svg = lt.plugins.elm_light.module_graph.d3.select(\"svg\");return lt.plugins.elm_light.module_graph.resize_graph.call(null,lt.plugins.elm_light.module_graph.module_graph,svg);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.module-graph\",\"on-tab-resized\",\"lt.plugins.elm-light.module-graph/on-tab-resized\",4489178700),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.module_graph.__BEH__on_tab_resized,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"end-drag\",\"end-drag\",2692811352),null], null), null));\nlt.plugins.elm_light.module_graph.__BEH__on_move = (function __BEH__on_move(this$){var svg = lt.plugins.elm_light.module_graph.d3.select(\"svg\");return lt.plugins.elm_light.module_graph.resize_graph.call(null,this$,svg);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.module-graph\",\"on-move\",\"lt.plugins.elm-light.module-graph/on-move\",2390003777),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.module_graph.__BEH__on_move,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"move\",\"move\",1017261891),null], null), null));\nlt.plugins.elm_light.module_graph.module_graph = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.module-graph\",\"module-graph\",\"lt.plugins.elm-light.module-graph/module-graph\",2992764911));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"show-elm-module-graph\",\"show-elm-module-graph\",3276287158),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Show module graph\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;var temp__4092__auto____$1 = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));if(cljs.core.truth_(temp__4092__auto____$1))\n{var path = temp__4092__auto____$1;return lt.object.raise.call(null,lt.plugins.elm_light.module_graph.module_graph,new cljs.core.Keyword(null,\"elm.module-graph.show\",\"elm.module-graph.show\",2773368264),path);\n} else\n{return null;\n}\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('clojure.zip')) {\ngoog.provide('clojure.zip');\ngoog.require('cljs.core');\n/**\n* Creates a new zipper structure.\n* \n* branch? is a fn that, given a node, returns true if can have\n* children, even if it currently doesn't.\n* \n* children is a fn that, given a branch node, returns a seq of its\n* children.\n* \n* make-node is a fn that, given an existing node and a seq of\n* children, returns a new branch node with the supplied children.\n* root is the root node.\n*/\nclojure.zip.zipper = (function zipper(branch_QMARK_,children,make_node,root){return cljs.core.with_meta(new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [root,null], null),new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(\"zip\",\"make-node\",\"zip/make-node\",2241612572),make_node,new cljs.core.Keyword(\"zip\",\"children\",\"zip/children\",2681289882),children,new cljs.core.Keyword(\"zip\",\"branch?\",\"zip/branch?\",1159334776),branch_QMARK_], null));\n});\n/**\n* Returns a zipper for nested sequences, given a root sequence\n*/\nclojure.zip.seq_zip = (function seq_zip(root){return clojure.zip.zipper.call(null,cljs.core.seq_QMARK_,cljs.core.identity,(function (node,children){return cljs.core.with_meta.call(null,children,cljs.core.meta.call(null,node));\n}),root);\n});\n/**\n* Returns a zipper for nested vectors, given a root vector\n*/\nclojure.zip.vector_zip = (function vector_zip(root){return clojure.zip.zipper.call(null,cljs.core.vector_QMARK_,cljs.core.seq,(function (node,children){return cljs.core.with_meta.call(null,cljs.core.vec.call(null,children),cljs.core.meta.call(null,node));\n}),root);\n});\n/**\n* Returns a zipper for xml elements (as from xml/parse),\n* given a root element\n*/\nclojure.zip.xml_zip = (function xml_zip(root){return clojure.zip.zipper.call(null,cljs.core.complement.call(null,cljs.core.string_QMARK_),cljs.core.comp.call(null,cljs.core.seq,new cljs.core.Keyword(null,\"content\",\"content\",1965434859)),(function (node,children){return cljs.core.assoc.call(null,node,new cljs.core.Keyword(null,\"content\",\"content\",1965434859),(function (){var and__4872__auto__ = children;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.apply.call(null,cljs.core.vector,children);\n} else\n{return and__4872__auto__;\n}\n})());\n}),root);\n});\n/**\n* Returns the node at loc\n*/\nclojure.zip.node = (function node(loc){return loc.call(null,0);\n});\n/**\n* Returns true if the node at loc is a branch\n*/\nclojure.zip.branch_QMARK_ = (function branch_QMARK_(loc){return new cljs.core.Keyword(\"zip\",\"branch?\",\"zip/branch?\",1159334776).cljs$core$IFn$_invoke$arity$1(cljs.core.meta.call(null,loc)).call(null,clojure.zip.node.call(null,loc));\n});\n/**\n* Returns a seq of the children of node at loc, which must be a branch\n*/\nclojure.zip.children = (function children(loc){if(cljs.core.truth_(clojure.zip.branch_QMARK_.call(null,loc)))\n{return new cljs.core.Keyword(\"zip\",\"children\",\"zip/children\",2681289882).cljs$core$IFn$_invoke$arity$1(cljs.core.meta.call(null,loc)).call(null,clojure.zip.node.call(null,loc));\n} else\n{throw \"called children on a leaf node\";\n}\n});\n/**\n* Returns a new branch node, given an existing node and new\n* children. The loc is only used to supply the constructor.\n*/\nclojure.zip.make_node = (function make_node(loc,node,children){return new cljs.core.Keyword(\"zip\",\"make-node\",\"zip/make-node\",2241612572).cljs$core$IFn$_invoke$arity$1(cljs.core.meta.call(null,loc)).call(null,node,children);\n});\n/**\n* Returns a seq of nodes leading to this loc\n*/\nclojure.zip.path = (function path(loc){return new cljs.core.Keyword(null,\"pnodes\",\"pnodes\",4325362611).cljs$core$IFn$_invoke$arity$1(loc.call(null,1));\n});\n/**\n* Returns a seq of the left siblings of this loc\n*/\nclojure.zip.lefts = (function lefts(loc){return cljs.core.seq.call(null,new cljs.core.Keyword(null,\"l\",\"l\",1013904350).cljs$core$IFn$_invoke$arity$1(loc.call(null,1)));\n});\n/**\n* Returns a seq of the right siblings of this loc\n*/\nclojure.zip.rights = (function rights(loc){return new cljs.core.Keyword(null,\"r\",\"r\",1013904356).cljs$core$IFn$_invoke$arity$1(loc.call(null,1));\n});\n/**\n* Returns the loc of the leftmost child of the node at this loc, or\n* nil if no children\n*/\nclojure.zip.down = (function down(loc){if(cljs.core.truth_(clojure.zip.branch_QMARK_.call(null,loc)))\n{var vec__20258 = loc;var node = cljs.core.nth.call(null,vec__20258,0,null);var path = cljs.core.nth.call(null,vec__20258,1,null);var vec__20259 = clojure.zip.children.call(null,loc);var c = cljs.core.nth.call(null,vec__20259,0,null);var cnext = cljs.core.nthnext.call(null,vec__20259,1);var cs = vec__20259;if(cljs.core.truth_(cs))\n{return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [c,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,\"l\",\"l\",1013904350),cljs.core.PersistentVector.EMPTY,new cljs.core.Keyword(null,\"pnodes\",\"pnodes\",4325362611),(cljs.core.truth_(path)?cljs.core.conj.call(null,new cljs.core.Keyword(null,\"pnodes\",\"pnodes\",4325362611).cljs$core$IFn$_invoke$arity$1(path),node):new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [node], null)),new cljs.core.Keyword(null,\"ppath\",\"ppath\",1120772103),path,new cljs.core.Keyword(null,\"r\",\"r\",1013904356),cnext], null)], null),cljs.core.meta.call(null,loc));\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\n/**\n* Returns the loc of the parent of the node at this loc, or nil if at\n* the top\n*/\nclojure.zip.up = (function up(loc){var vec__20262 = loc;var node = cljs.core.nth.call(null,vec__20262,0,null);var map__20263 = cljs.core.nth.call(null,vec__20262,1,null);var map__20263__$1 = ((cljs.core.seq_QMARK_.call(null,map__20263))?cljs.core.apply.call(null,cljs.core.hash_map,map__20263):map__20263);var path = map__20263__$1;var l = cljs.core.get.call(null,map__20263__$1,new cljs.core.Keyword(null,\"l\",\"l\",1013904350));var ppath = cljs.core.get.call(null,map__20263__$1,new cljs.core.Keyword(null,\"ppath\",\"ppath\",1120772103));var pnodes = cljs.core.get.call(null,map__20263__$1,new cljs.core.Keyword(null,\"pnodes\",\"pnodes\",4325362611));var r = cljs.core.get.call(null,map__20263__$1,new cljs.core.Keyword(null,\"r\",\"r\",1013904356));var changed_QMARK_ = cljs.core.get.call(null,map__20263__$1,new cljs.core.Keyword(null,\"changed?\",\"changed?\",2446321533));if(cljs.core.truth_(pnodes))\n{var pnode = cljs.core.peek.call(null,pnodes);return cljs.core.with_meta.call(null,(cljs.core.truth_(changed_QMARK_)?new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [clojure.zip.make_node.call(null,loc,pnode,cljs.core.concat.call(null,l,cljs.core.cons.call(null,node,r))),(function (){var and__4872__auto__ = ppath;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.assoc.call(null,ppath,new cljs.core.Keyword(null,\"changed?\",\"changed?\",2446321533),true);\n} else\n{return and__4872__auto__;\n}\n})()], null):new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [pnode,ppath], null)),cljs.core.meta.call(null,loc));\n} else\n{return null;\n}\n});\n/**\n* zips all the way up and returns the root node, reflecting any\n* changes.\n*/\nclojure.zip.root = (function root(loc){while(true){\nif(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"end\",\"end\",1014004813),loc.call(null,1)))\n{return clojure.zip.node.call(null,loc);\n} else\n{var p = clojure.zip.up.call(null,loc);if(cljs.core.truth_(p))\n{{\nvar G__20296 = p;\nloc = G__20296;\ncontinue;\n}\n} else\n{return clojure.zip.node.call(null,loc);\n}\n}\nbreak;\n}\n});\n/**\n* Returns the loc of the right sibling of the node at this loc, or nil\n*/\nclojure.zip.right = (function right(loc){var vec__20267 = loc;var node = cljs.core.nth.call(null,vec__20267,0,null);var map__20268 = cljs.core.nth.call(null,vec__20267,1,null);var map__20268__$1 = ((cljs.core.seq_QMARK_.call(null,map__20268))?cljs.core.apply.call(null,cljs.core.hash_map,map__20268):map__20268);var path = map__20268__$1;var l = cljs.core.get.call(null,map__20268__$1,new cljs.core.Keyword(null,\"l\",\"l\",1013904350));var vec__20269 = cljs.core.get.call(null,map__20268__$1,new cljs.core.Keyword(null,\"r\",\"r\",1013904356));var r = cljs.core.nth.call(null,vec__20269,0,null);var rnext = cljs.core.nthnext.call(null,vec__20269,1);var rs = vec__20269;if(cljs.core.truth_((function (){var and__4872__auto__ = path;if(cljs.core.truth_(and__4872__auto__))\n{return rs;\n} else\n{return and__4872__auto__;\n}\n})()))\n{return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [r,cljs.core.assoc.call(null,path,new cljs.core.Keyword(null,\"l\",\"l\",1013904350),cljs.core.conj.call(null,l,node),new cljs.core.Keyword(null,\"r\",\"r\",1013904356),rnext)], null),cljs.core.meta.call(null,loc));\n} else\n{return null;\n}\n});\n/**\n* Returns the loc of the rightmost sibling of the node at this loc, or self\n*/\nclojure.zip.rightmost = (function rightmost(loc){var vec__20272 = loc;var node = cljs.core.nth.call(null,vec__20272,0,null);var map__20273 = cljs.core.nth.call(null,vec__20272,1,null);var map__20273__$1 = ((cljs.core.seq_QMARK_.call(null,map__20273))?cljs.core.apply.call(null,cljs.core.hash_map,map__20273):map__20273);var path = map__20273__$1;var l = cljs.core.get.call(null,map__20273__$1,new cljs.core.Keyword(null,\"l\",\"l\",1013904350));var r = cljs.core.get.call(null,map__20273__$1,new cljs.core.Keyword(null,\"r\",\"r\",1013904356));if(cljs.core.truth_((function (){var and__4872__auto__ = path;if(cljs.core.truth_(and__4872__auto__))\n{return r;\n} else\n{return and__4872__auto__;\n}\n})()))\n{return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.last.call(null,r),cljs.core.assoc.call(null,path,new cljs.core.Keyword(null,\"l\",\"l\",1013904350),cljs.core.apply.call(null,cljs.core.conj,l,node,cljs.core.butlast.call(null,r)),new cljs.core.Keyword(null,\"r\",\"r\",1013904356),null)], null),cljs.core.meta.call(null,loc));\n} else\n{return loc;\n}\n});\n/**\n* Returns the loc of the left sibling of the node at this loc, or nil\n*/\nclojure.zip.left = (function left(loc){var vec__20276 = loc;var node = cljs.core.nth.call(null,vec__20276,0,null);var map__20277 = cljs.core.nth.call(null,vec__20276,1,null);var map__20277__$1 = ((cljs.core.seq_QMARK_.call(null,map__20277))?cljs.core.apply.call(null,cljs.core.hash_map,map__20277):map__20277);var path = map__20277__$1;var l = cljs.core.get.call(null,map__20277__$1,new cljs.core.Keyword(null,\"l\",\"l\",1013904350));var r = cljs.core.get.call(null,map__20277__$1,new cljs.core.Keyword(null,\"r\",\"r\",1013904356));if(cljs.core.truth_((function (){var and__4872__auto__ = path;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.seq.call(null,l);\n} else\n{return and__4872__auto__;\n}\n})()))\n{return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.peek.call(null,l),cljs.core.assoc.call(null,path,new cljs.core.Keyword(null,\"l\",\"l\",1013904350),cljs.core.pop.call(null,l),new cljs.core.Keyword(null,\"r\",\"r\",1013904356),cljs.core.cons.call(null,node,r))], null),cljs.core.meta.call(null,loc));\n} else\n{return null;\n}\n});\n/**\n* Returns the loc of the leftmost sibling of the node at this loc, or self\n*/\nclojure.zip.leftmost = (function leftmost(loc){var vec__20280 = loc;var node = cljs.core.nth.call(null,vec__20280,0,null);var map__20281 = cljs.core.nth.call(null,vec__20280,1,null);var map__20281__$1 = ((cljs.core.seq_QMARK_.call(null,map__20281))?cljs.core.apply.call(null,cljs.core.hash_map,map__20281):map__20281);var path = map__20281__$1;var l = cljs.core.get.call(null,map__20281__$1,new cljs.core.Keyword(null,\"l\",\"l\",1013904350));var r = cljs.core.get.call(null,map__20281__$1,new cljs.core.Keyword(null,\"r\",\"r\",1013904356));if(cljs.core.truth_((function (){var and__4872__auto__ = path;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.seq.call(null,l);\n} else\n{return and__4872__auto__;\n}\n})()))\n{return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.first.call(null,l),cljs.core.assoc.call(null,path,new cljs.core.Keyword(null,\"l\",\"l\",1013904350),cljs.core.PersistentVector.EMPTY,new cljs.core.Keyword(null,\"r\",\"r\",1013904356),cljs.core.concat.call(null,cljs.core.rest.call(null,l),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [node], null),r))], null),cljs.core.meta.call(null,loc));\n} else\n{return loc;\n}\n});\n/**\n* Inserts the item as the left sibling of the node at this loc,\n* without moving\n*/\nclojure.zip.insert_left = (function insert_left(loc,item){var vec__20284 = loc;var node = cljs.core.nth.call(null,vec__20284,0,null);var map__20285 = cljs.core.nth.call(null,vec__20284,1,null);var map__20285__$1 = ((cljs.core.seq_QMARK_.call(null,map__20285))?cljs.core.apply.call(null,cljs.core.hash_map,map__20285):map__20285);var path = map__20285__$1;var l = cljs.core.get.call(null,map__20285__$1,new cljs.core.Keyword(null,\"l\",\"l\",1013904350));if((path == null))\n{throw \"Insert at top\";\n} else\n{return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [node,cljs.core.assoc.call(null,path,new cljs.core.Keyword(null,\"l\",\"l\",1013904350),cljs.core.conj.call(null,l,item),new cljs.core.Keyword(null,\"changed?\",\"changed?\",2446321533),true)], null),cljs.core.meta.call(null,loc));\n}\n});\n/**\n* Inserts the item as the right sibling of the node at this loc,\n* without moving\n*/\nclojure.zip.insert_right = (function insert_right(loc,item){var vec__20288 = loc;var node = cljs.core.nth.call(null,vec__20288,0,null);var map__20289 = cljs.core.nth.call(null,vec__20288,1,null);var map__20289__$1 = ((cljs.core.seq_QMARK_.call(null,map__20289))?cljs.core.apply.call(null,cljs.core.hash_map,map__20289):map__20289);var path = map__20289__$1;var r = cljs.core.get.call(null,map__20289__$1,new cljs.core.Keyword(null,\"r\",\"r\",1013904356));if((path == null))\n{throw \"Insert at top\";\n} else\n{return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [node,cljs.core.assoc.call(null,path,new cljs.core.Keyword(null,\"r\",\"r\",1013904356),cljs.core.cons.call(null,item,r),new cljs.core.Keyword(null,\"changed?\",\"changed?\",2446321533),true)], null),cljs.core.meta.call(null,loc));\n}\n});\n/**\n* Replaces the node at this loc, without moving\n*/\nclojure.zip.replace = (function replace(loc,node){var vec__20291 = loc;var _ = cljs.core.nth.call(null,vec__20291,0,null);var path = cljs.core.nth.call(null,vec__20291,1,null);return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [node,cljs.core.assoc.call(null,path,new cljs.core.Keyword(null,\"changed?\",\"changed?\",2446321533),true)], null),cljs.core.meta.call(null,loc));\n});\n/**\n* Replaces the node at this loc with the value of (f node args)\n* @param {...*} var_args\n*/\nclojure.zip.edit = (function() { \nvar edit__delegate = function (loc,f,args){return clojure.zip.replace.call(null,loc,cljs.core.apply.call(null,f,clojure.zip.node.call(null,loc),args));\n};\nvar edit = function (loc,f,var_args){\nvar args = null;if (arguments.length > 2) {\n  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);} \nreturn edit__delegate.call(this,loc,f,args);};\nedit.cljs$lang$maxFixedArity = 2;\nedit.cljs$lang$applyTo = (function (arglist__20297){\nvar loc = cljs.core.first(arglist__20297);\narglist__20297 = cljs.core.next(arglist__20297);\nvar f = cljs.core.first(arglist__20297);\nvar args = cljs.core.rest(arglist__20297);\nreturn edit__delegate(loc,f,args);\n});\nedit.cljs$core$IFn$_invoke$arity$variadic = edit__delegate;\nreturn edit;\n})()\n;\n/**\n* Inserts the item as the leftmost child of the node at this loc,\n* without moving\n*/\nclojure.zip.insert_child = (function insert_child(loc,item){return clojure.zip.replace.call(null,loc,clojure.zip.make_node.call(null,loc,clojure.zip.node.call(null,loc),cljs.core.cons.call(null,item,clojure.zip.children.call(null,loc))));\n});\n/**\n* Inserts the item as the rightmost child of the node at this loc,\n* without moving\n*/\nclojure.zip.append_child = (function append_child(loc,item){return clojure.zip.replace.call(null,loc,clojure.zip.make_node.call(null,loc,clojure.zip.node.call(null,loc),cljs.core.concat.call(null,clojure.zip.children.call(null,loc),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [item], null))));\n});\n/**\n* Moves to the next loc in the hierarchy, depth-first. When reaching\n* the end, returns a distinguished loc detectable via end?. If already\n* at the end, stays there.\n*/\nclojure.zip.next = (function next(loc){if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"end\",\"end\",1014004813),loc.call(null,1)))\n{return loc;\n} else\n{var or__4884__auto__ = (function (){var and__4872__auto__ = clojure.zip.branch_QMARK_.call(null,loc);if(cljs.core.truth_(and__4872__auto__))\n{return clojure.zip.down.call(null,loc);\n} else\n{return and__4872__auto__;\n}\n})();if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{var or__4884__auto____$1 = clojure.zip.right.call(null,loc);if(cljs.core.truth_(or__4884__auto____$1))\n{return or__4884__auto____$1;\n} else\n{var p = loc;while(true){\nif(cljs.core.truth_(clojure.zip.up.call(null,p)))\n{var or__4884__auto____$2 = clojure.zip.right.call(null,clojure.zip.up.call(null,p));if(cljs.core.truth_(or__4884__auto____$2))\n{return or__4884__auto____$2;\n} else\n{{\nvar G__20298 = clojure.zip.up.call(null,p);\np = G__20298;\ncontinue;\n}\n}\n} else\n{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [clojure.zip.node.call(null,p),new cljs.core.Keyword(null,\"end\",\"end\",1014004813)], null);\n}\nbreak;\n}\n}\n}\n}\n});\n/**\n* Moves to the previous loc in the hierarchy, depth-first. If already\n* at the root, returns nil.\n*/\nclojure.zip.prev = (function prev(loc){var temp__4090__auto__ = clojure.zip.left.call(null,loc);if(cljs.core.truth_(temp__4090__auto__))\n{var lloc = temp__4090__auto__;var loc__$1 = lloc;while(true){\nvar temp__4090__auto____$1 = (function (){var and__4872__auto__ = clojure.zip.branch_QMARK_.call(null,loc__$1);if(cljs.core.truth_(and__4872__auto__))\n{return clojure.zip.down.call(null,loc__$1);\n} else\n{return and__4872__auto__;\n}\n})();if(cljs.core.truth_(temp__4090__auto____$1))\n{var child = temp__4090__auto____$1;{\nvar G__20299 = clojure.zip.rightmost.call(null,child);\nloc__$1 = G__20299;\ncontinue;\n}\n} else\n{return loc__$1;\n}\nbreak;\n}\n} else\n{return clojure.zip.up.call(null,loc);\n}\n});\n/**\n* Returns true if loc represents the end of a depth-first walk\n*/\nclojure.zip.end_QMARK_ = (function end_QMARK_(loc){return cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"end\",\"end\",1014004813),loc.call(null,1));\n});\n/**\n* Removes the node at loc, returning the loc that would have preceded\n* it in a depth-first walk.\n*/\nclojure.zip.remove = (function remove(loc){var vec__20294 = loc;var node = cljs.core.nth.call(null,vec__20294,0,null);var map__20295 = cljs.core.nth.call(null,vec__20294,1,null);var map__20295__$1 = ((cljs.core.seq_QMARK_.call(null,map__20295))?cljs.core.apply.call(null,cljs.core.hash_map,map__20295):map__20295);var path = map__20295__$1;var l = cljs.core.get.call(null,map__20295__$1,new cljs.core.Keyword(null,\"l\",\"l\",1013904350));var ppath = cljs.core.get.call(null,map__20295__$1,new cljs.core.Keyword(null,\"ppath\",\"ppath\",1120772103));var pnodes = cljs.core.get.call(null,map__20295__$1,new cljs.core.Keyword(null,\"pnodes\",\"pnodes\",4325362611));var rs = cljs.core.get.call(null,map__20295__$1,new cljs.core.Keyword(null,\"r\",\"r\",1013904356));if((path == null))\n{throw \"Remove at top\";\n} else\n{if((cljs.core.count.call(null,l) > 0))\n{var loc__$1 = cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.peek.call(null,l),cljs.core.assoc.call(null,path,new cljs.core.Keyword(null,\"l\",\"l\",1013904350),cljs.core.pop.call(null,l),new cljs.core.Keyword(null,\"changed?\",\"changed?\",2446321533),true)], null),cljs.core.meta.call(null,loc));while(true){\nvar temp__4090__auto__ = (function (){var and__4872__auto__ = clojure.zip.branch_QMARK_.call(null,loc__$1);if(cljs.core.truth_(and__4872__auto__))\n{return clojure.zip.down.call(null,loc__$1);\n} else\n{return and__4872__auto__;\n}\n})();if(cljs.core.truth_(temp__4090__auto__))\n{var child = temp__4090__auto__;{\nvar G__20300 = clojure.zip.rightmost.call(null,child);\nloc__$1 = G__20300;\ncontinue;\n}\n} else\n{return loc__$1;\n}\nbreak;\n}\n} else\n{return cljs.core.with_meta.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [clojure.zip.make_node.call(null,loc,cljs.core.peek.call(null,pnodes),rs),(function (){var and__4872__auto__ = ppath;if(cljs.core.truth_(and__4872__auto__))\n{return cljs.core.assoc.call(null,ppath,new cljs.core.Keyword(null,\"changed?\",\"changed?\",2446321533),true);\n} else\n{return and__4872__auto__;\n}\n})()], null),cljs.core.meta.call(null,loc));\n}\n}\n});\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.test')) {\ngoog.provide('lt.plugins.elm_light.test');\ngoog.require('cljs.core');\ngoog.require('clojure.zip');\ngoog.require('lt.objs.files');\ngoog.require('lt.objs.statusbar');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.tabs');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('clojure.zip');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.util.dom');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.files');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('lt.objs.statusbar');\ngoog.require('lt.objs.clients');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.tabs');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.console');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.plugins.elm_light.elm_ast');\ngoog.require('lt.objs.clients');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.test.default_test_deps = new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(\"elm-community\",\"elm-test\",\"elm-community/elm-test\",3717467561),\"3.0.0 <= v < 4.0.0\",new cljs.core.Keyword(\"rtfeldman\",\"node-test-runner\",\"rtfeldman/node-test-runner\",1294875377),\"3.0.0 <= v < 4.0.0\"], null);\nlt.plugins.elm_light.test.__GT_test_src_dir = (function __GT_test_src_dir(src_dir){if(cljs.core._EQ_.call(null,src_dir,\".\"))\n{return \"../\";\n} else\n{return [cljs.core.str(\"../\"),cljs.core.str(src_dir)].join('');\n}\n});\nlt.plugins.elm_light.test.__GT_test_src_dirs = (function __GT_test_src_dirs(src_dirs){return cljs.core.conj.call(null,cljs.core.mapv.call(null,lt.plugins.elm_light.test.__GT_test_src_dir,src_dirs),\".\");\n});\nlt.plugins.elm_light.test.deps__GT_named = (function deps__GT_named(deps){return cljs.core.into.call(null,cljs.core.PersistentArrayMap.EMPTY,cljs.core.map.call(null,(function (p__19868){var vec__19869 = p__19868;var k = cljs.core.nth.call(null,vec__19869,0,null);var v = cljs.core.nth.call(null,vec__19869,1,null);return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.elm_light.utils.nskw__GT_name.call(null,k),v], null);\n}),deps));\n});\nlt.plugins.elm_light.test.__GT_test_config = (function __GT_test_config(project_cfg){return cljs.core.update_in.call(null,cljs.core.update_in.call(null,cljs.core.assoc.call(null,cljs.core.update_in.call(null,project_cfg,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"source-directories\",\"source-directories\",4475397259)], null),lt.plugins.elm_light.test.__GT_test_src_dirs),new cljs.core.Keyword(null,\"exposed-modules\",\"exposed-modules\",4185867084),cljs.core.PersistentVector.EMPTY),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"dependencies\",\"dependencies\",1517678747)], null),(function (p1__19870_SHARP_){return cljs.core.merge.call(null,p1__19870_SHARP_,lt.plugins.elm_light.test.default_test_deps);\n})),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"dependencies\",\"dependencies\",1517678747)], null),lt.plugins.elm_light.test.deps__GT_named);\n});\nlt.plugins.elm_light.test.parse_project_cfg = (function parse_project_cfg(project_path){return lt.plugins.elm_light.utils.parse_json_file.call(null,lt.objs.files.join.call(null,project_path,\"elm-package.json\"));\n});\nlt.plugins.elm_light.test.save_test_cfg_BANG_ = (function save_test_cfg_BANG_(path,test_cfg){return lt.objs.files.save.call(null,path,lt.plugins.elm_light.utils.pretty_json.call(null,test_cfg));\n});\nlt.plugins.elm_light.test.maybe_create_test_path_BANG_ = (function maybe_create_test_path_BANG_(project_path){var test_path = lt.objs.files.join.call(null,project_path,\"tests\");if(cljs.core.truth_(lt.objs.files.exists_QMARK_.call(null,test_path)))\n{} else\n{lt.objs.files.mkdir.call(null,test_path);\n}\nreturn test_path;\n});\nlt.plugins.elm_light.test.install_packages_BANG_ = (function install_packages_BANG_(test_path){var args = new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [\"install\",\"--yes\"], null);var proc = require(\"child_process\").spawn(\"elm-package\",cljs.core.clj__GT_js.call(null,args),{\"cwd\": test_path});proc.stdout.on(\"data\",((function (args,proc){\nreturn (function (p1__19871_SHARP_){return cljs.core.println.call(null,[cljs.core.str(\"Test package install: \"),cljs.core.str(p1__19871_SHARP_)].join(''));\n});})(args,proc))\n);\nproc.stderr.on(\"data\",((function (args,proc){\nreturn (function (p1__19872_SHARP_){return lt.objs.console.error.call(null,[cljs.core.str(p1__19872_SHARP_)].join(''));\n});})(args,proc))\n);\nproc.on(\"exit\",((function (args,proc){\nreturn (function (p1__19873_SHARP_){if(cljs.core._EQ_.call(null,p1__19873_SHARP_,0))\n{return lt.objs.notifos.done_working.call(null,\"Successfully configured elm test\");\n} else\n{return lt.objs.notifos.set_msg_BANG_.call(null,\"Error installing test elm packages\",new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\",new cljs.core.Keyword(null,\"timeout\",\"timeout\",3994960083),5000], null));\n}\n});})(args,proc))\n);\nreturn null;\n});\nlt.plugins.elm_light.test.maybe_add_templates = (function maybe_add_templates(test_path){var templ_dir = lt.objs.files.join.call(null,lt.plugins.elm_light.utils.elm_plugin_dir,\"templates/test\");var runner = lt.objs.files.join.call(null,templ_dir,\"Main.elm\");var tests = lt.objs.files.join.call(null,templ_dir,\"Tests.elm\");if(cljs.core.truth_(lt.objs.files.exists_QMARK_.call(null,lt.objs.files.join.call(null,test_path,\"Main.elm\"))))\n{} else\n{lt.objs.files.copy.call(null,runner,lt.objs.files.join.call(null,test_path,\"Main.elm\"));\n}\nif(cljs.core.truth_(lt.objs.files.exists_QMARK_.call(null,lt.objs.files.join.call(null,test_path,\"Tests.elm\"))))\n{return null;\n} else\n{return lt.objs.files.copy.call(null,tests,lt.objs.files.join.call(null,test_path,\"Tests.elm\"));\n}\n});\nlt.plugins.elm_light.test.setup_test = (function setup_test(project_path){var temp__4092__auto__ = lt.plugins.elm_light.test.parse_project_cfg.call(null,project_path);if(cljs.core.truth_(temp__4092__auto__))\n{var project_cfg = temp__4092__auto__;lt.objs.notifos.working.call(null,\"Init elm test config\");\nvar test_path = lt.plugins.elm_light.test.maybe_create_test_path_BANG_.call(null,project_path);var test_cfg_path = lt.objs.files.join.call(null,test_path,\"elm-package.json\");lt.plugins.elm_light.test.maybe_add_templates.call(null,test_path);\nlt.plugins.elm_light.test.save_test_cfg_BANG_.call(null,test_cfg_path,lt.plugins.elm_light.test.__GT_test_config.call(null,project_cfg));\nreturn lt.plugins.elm_light.test.install_packages_BANG_.call(null,test_path);\n} else\n{return null;\n}\n});\nlt.plugins.elm_light.test.z_top = (function z_top(zloc){return cljs.core.last.call(null,cljs.core.take_while.call(null,cljs.core.identity,cljs.core.iterate.call(null,clojure.zip.up,zloc)));\n});\nlt.plugins.elm_light.test.z_find_by_label = (function z_find_by_label(label,zloc){return cljs.core.first.call(null,cljs.core.filter.call(null,(function (p1__19874_SHARP_){return cljs.core._EQ_.call(null,label,clojure.zip.node.call(null,p1__19874_SHARP_));\n}),cljs.core.take_while.call(null,cljs.core.complement.call(null,clojure.zip.end_QMARK_),cljs.core.take_while.call(null,cljs.core.identity,cljs.core.iterate.call(null,clojure.zip.next,zloc)))));\n});\nlt.plugins.elm_light.test.suitify_test = (function suitify_test(p__19875){var map__19878 = p__19875;var map__19878__$1 = ((cljs.core.seq_QMARK_.call(null,map__19878))?cljs.core.apply.call(null,cljs.core.hash_map,map__19878):map__19878);var failures = cljs.core.get.call(null,map__19878__$1,new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587));var labels = cljs.core.get.call(null,map__19878__$1,new cljs.core.Keyword(null,\"labels\",\"labels\",4198454129));var vec__19879 = labels;var head = cljs.core.nth.call(null,vec__19879,0,null);var tail = cljs.core.nthnext.call(null,vec__19879,1);var root = clojure.zip.vector_zip.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [head], null));return lt.plugins.elm_light.test.z_top.call(null,clojure.zip.append_child.call(null,cljs.core.reduce.call(null,((function (vec__19879,head,tail,root,map__19878,map__19878__$1,failures,labels){\nreturn (function (zloc,label){return clojure.zip.right.call(null,clojure.zip.down.call(null,clojure.zip.append_child.call(null,zloc,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [label], null))));\n});})(vec__19879,head,tail,root,map__19878,map__19878__$1,failures,labels))\n,root,tail),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587),failures], null)));\n});\nlt.plugins.elm_light.test.add_test_to_suite = (function add_test_to_suite(p__19880,p__19881){var map__19885 = p__19880;var map__19885__$1 = ((cljs.core.seq_QMARK_.call(null,map__19885))?cljs.core.apply.call(null,cljs.core.hash_map,map__19885):map__19885);var labels = cljs.core.get.call(null,map__19885__$1,new cljs.core.Keyword(null,\"labels\",\"labels\",4198454129));var zloc = cljs.core.get.call(null,map__19885__$1,new cljs.core.Keyword(null,\"zloc\",\"zloc\",1017646072));var map__19886 = p__19881;var map__19886__$1 = ((cljs.core.seq_QMARK_.call(null,map__19886))?cljs.core.apply.call(null,cljs.core.hash_map,map__19886):map__19886);var failures = cljs.core.get.call(null,map__19886__$1,new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587));var vec__19887 = labels;var head = cljs.core.nth.call(null,vec__19887,0,null);var tail = cljs.core.nthnext.call(null,vec__19887,1);var root = ((cljs.core.seq.call(null,labels))?clojure.zip.right.call(null,clojure.zip.insert_right.call(null,clojure.zip.rightmost.call(null,zloc),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [head], null))):null);if(cljs.core.seq.call(null,labels))\n{return lt.plugins.elm_light.test.z_top.call(null,clojure.zip.append_child.call(null,cljs.core.reduce.call(null,((function (vec__19887,head,tail,root,map__19885,map__19885__$1,labels,zloc,map__19886,map__19886__$1,failures){\nreturn (function (zl,label){return clojure.zip.right.call(null,clojure.zip.down.call(null,clojure.zip.append_child.call(null,zl,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [label], null))));\n});})(vec__19887,head,tail,root,map__19885,map__19885__$1,labels,zloc,map__19886,map__19886__$1,failures))\n,root,tail),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587),failures], null)));\n} else\n{var z_failures = clojure.zip.right.call(null,zloc);var curr_fails = new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587).cljs$core$IFn$_invoke$arity$1(clojure.zip.node.call(null,z_failures));return lt.plugins.elm_light.test.z_top.call(null,clojure.zip.replace.call(null,z_failures,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587),cljs.core.concat.call(null,curr_fails,failures)], null)));\n}\n});\nlt.plugins.elm_light.test.find_branch = (function find_branch(zloc_suite,labels){var zloc = zloc_suite;var lbls = labels;while(true){\nvar branch = lt.plugins.elm_light.test.z_find_by_label.call(null,cljs.core.first.call(null,lbls),zloc);if(cljs.core.truth_((function (){var and__4872__auto__ = branch;if(cljs.core.truth_(and__4872__auto__))\n{var or__4884__auto__ = cljs.core.not.call(null,cljs.core.second.call(null,lbls));if(or__4884__auto__)\n{return or__4884__auto__;\n} else\n{var and__4872__auto____$1 = cljs.core.second.call(null,lbls);if(cljs.core.truth_(and__4872__auto____$1))\n{return (lt.plugins.elm_light.test.z_find_by_label.call(null,cljs.core.second.call(null,lbls),branch) == null);\n} else\n{return and__4872__auto____$1;\n}\n}\n} else\n{return and__4872__auto__;\n}\n})()))\n{return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"zloc\",\"zloc\",1017646072),branch,new cljs.core.Keyword(null,\"labels\",\"labels\",4198454129),cljs.core.drop.call(null,1,lbls)], null);\n} else\n{if((branch == null))\n{return null;\n} else\n{if(cljs.core.truth_(branch))\n{{\nvar G__20037 = branch;\nvar G__20038 = cljs.core.drop.call(null,1,lbls);\nzloc = G__20037;\nlbls = G__20038;\ncontinue;\n}\n} else\n{return null;\n}\n}\n}\nbreak;\n}\n});\nlt.plugins.elm_light.test.group_tests = (function group_tests(tests){return cljs.core.reduce.call(null,(function (acc,t){var prev = cljs.core.last.call(null,acc);if(cljs.core.not.call(null,prev))\n{return cljs.core.conj.call(null,acc,lt.plugins.elm_light.test.suitify_test.call(null,t));\n} else\n{var temp__4090__auto__ = lt.plugins.elm_light.test.find_branch.call(null,prev,new cljs.core.Keyword(null,\"labels\",\"labels\",4198454129).cljs$core$IFn$_invoke$arity$1(t));if(cljs.core.truth_(temp__4090__auto__))\n{var branch = temp__4090__auto__;return cljs.core.conj.call(null,cljs.core.vec.call(null,cljs.core.drop_last.call(null,acc)),lt.plugins.elm_light.test.add_test_to_suite.call(null,branch,t));\n} else\n{return cljs.core.conj.call(null,acc,lt.plugins.elm_light.test.suitify_test.call(null,t));\n}\n}\n}),cljs.core.PersistentVector.EMPTY,tests);\n});\nlt.plugins.elm_light.test.get_status_count = (function get_status_count(status,items){return cljs.core.count.call(null,cljs.core.filter.call(null,(function (p1__19888_SHARP_){return cljs.core._EQ_.call(null,status,new cljs.core.Keyword(null,\"status\",\"status\",4416389988).cljs$core$IFn$_invoke$arity$1(p1__19888_SHARP_));\n}),items));\n});\nlt.plugins.elm_light.test.wrapper = (function wrapper(){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.elmtest-dashboard\",\"div.elmtest-dashboard\",2556225684),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"h1.title\",\"h1.title\",3842872421),\"Elm Test Dashboard\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.project-container\",\"div.project-container\",3841828386),\"Project stuff here\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.result-container\",\"div.result-container\",4736622080),\"Placeholder for results\"], null)], null));var seq__19895_20039 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19896_20040 = null;var count__19897_20041 = 0;var i__19898_20042 = 0;while(true){\nif((i__19898_20042 < count__19897_20041))\n{var vec__19899_20043 = cljs.core._nth.call(null,chunk__19896_20040,i__19898_20042);var ev__6318__auto___20044 = cljs.core.nth.call(null,vec__19899_20043,0,null);var func__6319__auto___20045 = cljs.core.nth.call(null,vec__19899_20043,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20044,func__6319__auto___20045);\n{\nvar G__20046 = seq__19895_20039;\nvar G__20047 = chunk__19896_20040;\nvar G__20048 = count__19897_20041;\nvar G__20049 = (i__19898_20042 + 1);\nseq__19895_20039 = G__20046;\nchunk__19896_20040 = G__20047;\ncount__19897_20041 = G__20048;\ni__19898_20042 = G__20049;\ncontinue;\n}\n} else\n{var temp__4092__auto___20050 = cljs.core.seq.call(null,seq__19895_20039);if(temp__4092__auto___20050)\n{var seq__19895_20051__$1 = temp__4092__auto___20050;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19895_20051__$1))\n{var c__5632__auto___20052 = cljs.core.chunk_first.call(null,seq__19895_20051__$1);{\nvar G__20053 = cljs.core.chunk_rest.call(null,seq__19895_20051__$1);\nvar G__20054 = c__5632__auto___20052;\nvar G__20055 = cljs.core.count.call(null,c__5632__auto___20052);\nvar G__20056 = 0;\nseq__19895_20039 = G__20053;\nchunk__19896_20040 = G__20054;\ncount__19897_20041 = G__20055;\ni__19898_20042 = G__20056;\ncontinue;\n}\n} else\n{var vec__19900_20057 = cljs.core.first.call(null,seq__19895_20051__$1);var ev__6318__auto___20058 = cljs.core.nth.call(null,vec__19900_20057,0,null);var func__6319__auto___20059 = cljs.core.nth.call(null,vec__19900_20057,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20058,func__6319__auto___20059);\n{\nvar G__20060 = cljs.core.next.call(null,seq__19895_20051__$1);\nvar G__20061 = null;\nvar G__20062 = 0;\nvar G__20063 = 0;\nseq__19895_20039 = G__20060;\nchunk__19896_20040 = G__20061;\ncount__19897_20041 = G__20062;\ni__19898_20042 = G__20063;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.test.loader = (function loader(){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.bubblingG\",\"div.bubblingG\",1068758387),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"id\",\"id\",1013907597),\"bubblingG_1\"], null)], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"id\",\"id\",1013907597),\"bubblingG_2\"], null)], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"id\",\"id\",1013907597),\"bubblingG_3\"], null)], null)], null));var seq__19907_20064 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19908_20065 = null;var count__19909_20066 = 0;var i__19910_20067 = 0;while(true){\nif((i__19910_20067 < count__19909_20066))\n{var vec__19911_20068 = cljs.core._nth.call(null,chunk__19908_20065,i__19910_20067);var ev__6318__auto___20069 = cljs.core.nth.call(null,vec__19911_20068,0,null);var func__6319__auto___20070 = cljs.core.nth.call(null,vec__19911_20068,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20069,func__6319__auto___20070);\n{\nvar G__20071 = seq__19907_20064;\nvar G__20072 = chunk__19908_20065;\nvar G__20073 = count__19909_20066;\nvar G__20074 = (i__19910_20067 + 1);\nseq__19907_20064 = G__20071;\nchunk__19908_20065 = G__20072;\ncount__19909_20066 = G__20073;\ni__19910_20067 = G__20074;\ncontinue;\n}\n} else\n{var temp__4092__auto___20075 = cljs.core.seq.call(null,seq__19907_20064);if(temp__4092__auto___20075)\n{var seq__19907_20076__$1 = temp__4092__auto___20075;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19907_20076__$1))\n{var c__5632__auto___20077 = cljs.core.chunk_first.call(null,seq__19907_20076__$1);{\nvar G__20078 = cljs.core.chunk_rest.call(null,seq__19907_20076__$1);\nvar G__20079 = c__5632__auto___20077;\nvar G__20080 = cljs.core.count.call(null,c__5632__auto___20077);\nvar G__20081 = 0;\nseq__19907_20064 = G__20078;\nchunk__19908_20065 = G__20079;\ncount__19909_20066 = G__20080;\ni__19910_20067 = G__20081;\ncontinue;\n}\n} else\n{var vec__19912_20082 = cljs.core.first.call(null,seq__19907_20076__$1);var ev__6318__auto___20083 = cljs.core.nth.call(null,vec__19912_20082,0,null);var func__6319__auto___20084 = cljs.core.nth.call(null,vec__19912_20082,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20083,func__6319__auto___20084);\n{\nvar G__20085 = cljs.core.next.call(null,seq__19907_20076__$1);\nvar G__20086 = null;\nvar G__20087 = 0;\nvar G__20088 = 0;\nseq__19907_20064 = G__20085;\nchunk__19908_20065 = G__20086;\ncount__19909_20066 = G__20087;\ni__19910_20067 = G__20088;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.test.testprogress_ui = (function testprogress_ui(this$,p__19914){var map__19922 = p__19914;var map__19922__$1 = ((cljs.core.seq_QMARK_.call(null,map__19922))?cljs.core.apply.call(null,cljs.core.hash_map,map__19922):map__19922);var evt = map__19922__$1;var status = cljs.core.get.call(null,map__19922__$1,new cljs.core.Keyword(null,\"status\",\"status\",4416389988));var labels = cljs.core.get.call(null,map__19922__$1,new cljs.core.Keyword(null,\"labels\",\"labels\",4198454129));var e__6317__auto__ = crate.core.html.call(null,(function (){var testCount = (function (){var or__4884__auto__ = new cljs.core.Keyword(null,\"testCount\",\"testCount\",4102757135).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));if(cljs.core.truth_(or__4884__auto__))\n{return or__4884__auto__;\n} else\n{return 0;\n}\n})();var progress = [cljs.core.str(cljs.core.count.call(null,new cljs.core.Keyword(null,\"tests\",\"tests\",1124155795).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))),cljs.core.str(\"/\"),cljs.core.str(testCount)].join('');var test_name = clojure.string.join.call(null,\" -> \",labels);var clazz = (cljs.core.truth_(new cljs.core.Keyword(null,\"failures?\",\"failures?\",4788123816).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))?\"error\":\"ok\");var failed = lt.plugins.elm_light.test.get_status_count.call(null,\"fail\",new cljs.core.Keyword(null,\"tests\",\"tests\",1124155795).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));var passed = lt.plugins.elm_light.test.get_status_count.call(null,\"pass\",new cljs.core.Keyword(null,\"tests\",\"tests\",1124155795).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));var duration = ((cljs.core._EQ_.call(null,\"runComplete\",new cljs.core.Keyword(null,\"event\",\"event\",1110795788).cljs$core$IFn$_invoke$arity$1(evt)))?new cljs.core.Keyword(null,\"duration\",\"duration\",3316859142).cljs$core$IFn$_invoke$arity$1(evt):cljs.core.reduce.call(null,cljs.core._PLUS_,cljs.core.map.call(null,((function (testCount,progress,test_name,clazz,failed,passed,map__19922,map__19922__$1,evt,status,labels){\nreturn (function (p1__19913_SHARP_){return (new cljs.core.Keyword(null,\"duration\",\"duration\",3316859142).cljs$core$IFn$_invoke$arity$1(p1__19913_SHARP_) | 0);\n});})(testCount,progress,test_name,clazz,failed,passed,map__19922,map__19922__$1,evt,status,labels))\n,new cljs.core.Keyword(null,\"tests\",\"tests\",1124155795).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))));return new cljs.core.PersistentVector(null, 4, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.test-progress\",\"div.test-progress\",3379553757),new cljs.core.PersistentVector(null, 6, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.summary\",\"div.summary\",724307643),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.summary-item\",\"div.summary-item\",2380798601),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Runs:\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),progress], null)], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.summary-item\",\"div.summary-item\",2380798601),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Passed:\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),passed], null)], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.summary-item\",\"div.summary-item\",2380798601),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Failed:\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),failed], null)], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.summary-item\",\"div.summary-item\",2380798601),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Seed:\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),new cljs.core.Keyword(null,\"initialSeed\",\"initialSeed\",2247248711).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"start\",\"start\",1123661780).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)))], null)], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.summary-item\",\"div.summary-item\",2380798601),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Duration:\"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),[cljs.core.str(duration),cljs.core.str(\" ms\")].join('')], null)], null)], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.progress\",\"div.progress\",1377547868),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"progress\",\"progress\",4307793311),new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"value\",\"value\",1125876963),cljs.core.count.call(null,new cljs.core.Keyword(null,\"tests\",\"tests\",1124155795).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))),new cljs.core.Keyword(null,\"max\",\"max\",1014012118),testCount,new cljs.core.Keyword(null,\"class\",\"class\",1108647146),clazz], null)], null)], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"p.curr-test\",\"p.curr-test\",1775184577),(cljs.core.truth_(clojure.string.blank_QMARK_.call(null,test_name))?null:[cljs.core.str(\"(\"),cljs.core.str(test_name),cljs.core.str(\")\")].join(''))], null)], null);\n})());var seq__19923_20089 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19924_20090 = null;var count__19925_20091 = 0;var i__19926_20092 = 0;while(true){\nif((i__19926_20092 < count__19925_20091))\n{var vec__19927_20093 = cljs.core._nth.call(null,chunk__19924_20090,i__19926_20092);var ev__6318__auto___20094 = cljs.core.nth.call(null,vec__19927_20093,0,null);var func__6319__auto___20095 = cljs.core.nth.call(null,vec__19927_20093,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20094,func__6319__auto___20095);\n{\nvar G__20096 = seq__19923_20089;\nvar G__20097 = chunk__19924_20090;\nvar G__20098 = count__19925_20091;\nvar G__20099 = (i__19926_20092 + 1);\nseq__19923_20089 = G__20096;\nchunk__19924_20090 = G__20097;\ncount__19925_20091 = G__20098;\ni__19926_20092 = G__20099;\ncontinue;\n}\n} else\n{var temp__4092__auto___20100 = cljs.core.seq.call(null,seq__19923_20089);if(temp__4092__auto___20100)\n{var seq__19923_20101__$1 = temp__4092__auto___20100;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19923_20101__$1))\n{var c__5632__auto___20102 = cljs.core.chunk_first.call(null,seq__19923_20101__$1);{\nvar G__20103 = cljs.core.chunk_rest.call(null,seq__19923_20101__$1);\nvar G__20104 = c__5632__auto___20102;\nvar G__20105 = cljs.core.count.call(null,c__5632__auto___20102);\nvar G__20106 = 0;\nseq__19923_20089 = G__20103;\nchunk__19924_20090 = G__20104;\ncount__19925_20091 = G__20105;\ni__19926_20092 = G__20106;\ncontinue;\n}\n} else\n{var vec__19928_20107 = cljs.core.first.call(null,seq__19923_20101__$1);var ev__6318__auto___20108 = cljs.core.nth.call(null,vec__19928_20107,0,null);var func__6319__auto___20109 = cljs.core.nth.call(null,vec__19928_20107,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20108,func__6319__auto___20109);\n{\nvar G__20110 = cljs.core.next.call(null,seq__19923_20101__$1);\nvar G__20111 = null;\nvar G__20112 = 0;\nvar G__20113 = 0;\nseq__19923_20089 = G__20110;\nchunk__19924_20090 = G__20111;\ncount__19925_20091 = G__20112;\ni__19926_20092 = G__20113;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.test.failure_item = (function failure_item(p__19929){var map__19937 = p__19929;var map__19937__$1 = ((cljs.core.seq_QMARK_.call(null,map__19937))?cljs.core.apply.call(null,cljs.core.hash_map,map__19937):map__19937);var failure = map__19937__$1;var actual = cljs.core.get.call(null,map__19937__$1,new cljs.core.Keyword(null,\"actual\",\"actual\",3885931776));var given = cljs.core.get.call(null,map__19937__$1,new cljs.core.Keyword(null,\"given\",\"given\",1112271599));var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div\",\"div\",1014003715),(cljs.core.truth_(clojure.string.blank_QMARK_.call(null,given))?null:new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.given\",\"div.given\",2030103378),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Given: \"], null),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span\",\"span\",1017440956),given], null)], null)),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"pre\",\"pre\",1014015509),actual], null)], null));var seq__19938_20114 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19939_20115 = null;var count__19940_20116 = 0;var i__19941_20117 = 0;while(true){\nif((i__19941_20117 < count__19940_20116))\n{var vec__19942_20118 = cljs.core._nth.call(null,chunk__19939_20115,i__19941_20117);var ev__6318__auto___20119 = cljs.core.nth.call(null,vec__19942_20118,0,null);var func__6319__auto___20120 = cljs.core.nth.call(null,vec__19942_20118,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20119,func__6319__auto___20120);\n{\nvar G__20121 = seq__19938_20114;\nvar G__20122 = chunk__19939_20115;\nvar G__20123 = count__19940_20116;\nvar G__20124 = (i__19941_20117 + 1);\nseq__19938_20114 = G__20121;\nchunk__19939_20115 = G__20122;\ncount__19940_20116 = G__20123;\ni__19941_20117 = G__20124;\ncontinue;\n}\n} else\n{var temp__4092__auto___20125 = cljs.core.seq.call(null,seq__19938_20114);if(temp__4092__auto___20125)\n{var seq__19938_20126__$1 = temp__4092__auto___20125;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19938_20126__$1))\n{var c__5632__auto___20127 = cljs.core.chunk_first.call(null,seq__19938_20126__$1);{\nvar G__20128 = cljs.core.chunk_rest.call(null,seq__19938_20126__$1);\nvar G__20129 = c__5632__auto___20127;\nvar G__20130 = cljs.core.count.call(null,c__5632__auto___20127);\nvar G__20131 = 0;\nseq__19938_20114 = G__20128;\nchunk__19939_20115 = G__20129;\ncount__19940_20116 = G__20130;\ni__19941_20117 = G__20131;\ncontinue;\n}\n} else\n{var vec__19943_20132 = cljs.core.first.call(null,seq__19938_20126__$1);var ev__6318__auto___20133 = cljs.core.nth.call(null,vec__19943_20132,0,null);var func__6319__auto___20134 = cljs.core.nth.call(null,vec__19943_20132,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20133,func__6319__auto___20134);\n{\nvar G__20135 = cljs.core.next.call(null,seq__19938_20126__$1);\nvar G__20136 = null;\nvar G__20137 = 0;\nvar G__20138 = 0;\nseq__19938_20114 = G__20135;\nchunk__19939_20115 = G__20136;\ncount__19940_20116 = G__20137;\ni__19941_20117 = G__20138;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.test.dufus_ui = (function dufus_ui(nd){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ul\",\"ul\",1013907977),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"li\",\"li\",1013907695),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"span.test-label\",\"span.test-label\",4291111567),[cljs.core.str(cljs.core.first.call(null,nd))].join('')], null),((cljs.core.map_QMARK_.call(null,cljs.core.second.call(null,nd)))?cljs.core.map.call(null,lt.plugins.elm_light.test.failure_item,new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587).cljs$core$IFn$_invoke$arity$1(cljs.core.second.call(null,nd))):cljs.core.map.call(null,dufus_ui,cljs.core.drop.call(null,1,nd)))], null)], null));var seq__19950_20139 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19951_20140 = null;var count__19952_20141 = 0;var i__19953_20142 = 0;while(true){\nif((i__19953_20142 < count__19952_20141))\n{var vec__19954_20143 = cljs.core._nth.call(null,chunk__19951_20140,i__19953_20142);var ev__6318__auto___20144 = cljs.core.nth.call(null,vec__19954_20143,0,null);var func__6319__auto___20145 = cljs.core.nth.call(null,vec__19954_20143,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20144,func__6319__auto___20145);\n{\nvar G__20146 = seq__19950_20139;\nvar G__20147 = chunk__19951_20140;\nvar G__20148 = count__19952_20141;\nvar G__20149 = (i__19953_20142 + 1);\nseq__19950_20139 = G__20146;\nchunk__19951_20140 = G__20147;\ncount__19952_20141 = G__20148;\ni__19953_20142 = G__20149;\ncontinue;\n}\n} else\n{var temp__4092__auto___20150 = cljs.core.seq.call(null,seq__19950_20139);if(temp__4092__auto___20150)\n{var seq__19950_20151__$1 = temp__4092__auto___20150;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19950_20151__$1))\n{var c__5632__auto___20152 = cljs.core.chunk_first.call(null,seq__19950_20151__$1);{\nvar G__20153 = cljs.core.chunk_rest.call(null,seq__19950_20151__$1);\nvar G__20154 = c__5632__auto___20152;\nvar G__20155 = cljs.core.count.call(null,c__5632__auto___20152);\nvar G__20156 = 0;\nseq__19950_20139 = G__20153;\nchunk__19951_20140 = G__20154;\ncount__19952_20141 = G__20155;\ni__19953_20142 = G__20156;\ncontinue;\n}\n} else\n{var vec__19955_20157 = cljs.core.first.call(null,seq__19950_20151__$1);var ev__6318__auto___20158 = cljs.core.nth.call(null,vec__19955_20157,0,null);var func__6319__auto___20159 = cljs.core.nth.call(null,vec__19955_20157,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20158,func__6319__auto___20159);\n{\nvar G__20160 = cljs.core.next.call(null,seq__19950_20151__$1);\nvar G__20161 = null;\nvar G__20162 = 0;\nvar G__20163 = 0;\nseq__19950_20139 = G__20160;\nchunk__19951_20140 = G__20161;\ncount__19952_20141 = G__20162;\ni__19953_20142 = G__20163;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.test.failed_test_ui = (function failed_test_ui(z_failed_test){var e__6317__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"li\",\"li\",1013907695),lt.plugins.elm_light.test.dufus_ui.call(null,clojure.zip.node.call(null,z_failed_test))], null));var seq__19962_20164 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19963_20165 = null;var count__19964_20166 = 0;var i__19965_20167 = 0;while(true){\nif((i__19965_20167 < count__19964_20166))\n{var vec__19966_20168 = cljs.core._nth.call(null,chunk__19963_20165,i__19965_20167);var ev__6318__auto___20169 = cljs.core.nth.call(null,vec__19966_20168,0,null);var func__6319__auto___20170 = cljs.core.nth.call(null,vec__19966_20168,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20169,func__6319__auto___20170);\n{\nvar G__20171 = seq__19962_20164;\nvar G__20172 = chunk__19963_20165;\nvar G__20173 = count__19964_20166;\nvar G__20174 = (i__19965_20167 + 1);\nseq__19962_20164 = G__20171;\nchunk__19963_20165 = G__20172;\ncount__19964_20166 = G__20173;\ni__19965_20167 = G__20174;\ncontinue;\n}\n} else\n{var temp__4092__auto___20175 = cljs.core.seq.call(null,seq__19962_20164);if(temp__4092__auto___20175)\n{var seq__19962_20176__$1 = temp__4092__auto___20175;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19962_20176__$1))\n{var c__5632__auto___20177 = cljs.core.chunk_first.call(null,seq__19962_20176__$1);{\nvar G__20178 = cljs.core.chunk_rest.call(null,seq__19962_20176__$1);\nvar G__20179 = c__5632__auto___20177;\nvar G__20180 = cljs.core.count.call(null,c__5632__auto___20177);\nvar G__20181 = 0;\nseq__19962_20164 = G__20178;\nchunk__19963_20165 = G__20179;\ncount__19964_20166 = G__20180;\ni__19965_20167 = G__20181;\ncontinue;\n}\n} else\n{var vec__19967_20182 = cljs.core.first.call(null,seq__19962_20176__$1);var ev__6318__auto___20183 = cljs.core.nth.call(null,vec__19967_20182,0,null);var func__6319__auto___20184 = cljs.core.nth.call(null,vec__19967_20182,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20183,func__6319__auto___20184);\n{\nvar G__20185 = cljs.core.next.call(null,seq__19962_20176__$1);\nvar G__20186 = null;\nvar G__20187 = 0;\nvar G__20188 = 0;\nseq__19962_20164 = G__20185;\nchunk__19963_20165 = G__20186;\ncount__19964_20166 = G__20187;\ni__19965_20167 = G__20188;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\n/**\n* @param {...*} var_args\n*/\nlt.plugins.elm_light.test.failed_tests_ui = (function() { \nvar failed_tests_ui__delegate = function (failed_tests,ldr){var e__6317__auto__ = crate.core.html.call(null,(function (){var grouped = lt.plugins.elm_light.test.group_tests.call(null,failed_tests);return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.test-failures\",\"div.test-failures\",761603033),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"h2\",\"h2\",1013907516),\"Test Failures\"], null),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"ul\",\"ul\",1013907977),(cljs.core.truth_(ldr)?ldr:null),cljs.core.map.call(null,lt.plugins.elm_light.test.failed_test_ui,grouped)], null)], null);\n})());var seq__19974_20189 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19975_20190 = null;var count__19976_20191 = 0;var i__19977_20192 = 0;while(true){\nif((i__19977_20192 < count__19976_20191))\n{var vec__19978_20193 = cljs.core._nth.call(null,chunk__19975_20190,i__19977_20192);var ev__6318__auto___20194 = cljs.core.nth.call(null,vec__19978_20193,0,null);var func__6319__auto___20195 = cljs.core.nth.call(null,vec__19978_20193,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20194,func__6319__auto___20195);\n{\nvar G__20196 = seq__19974_20189;\nvar G__20197 = chunk__19975_20190;\nvar G__20198 = count__19976_20191;\nvar G__20199 = (i__19977_20192 + 1);\nseq__19974_20189 = G__20196;\nchunk__19975_20190 = G__20197;\ncount__19976_20191 = G__20198;\ni__19977_20192 = G__20199;\ncontinue;\n}\n} else\n{var temp__4092__auto___20200 = cljs.core.seq.call(null,seq__19974_20189);if(temp__4092__auto___20200)\n{var seq__19974_20201__$1 = temp__4092__auto___20200;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19974_20201__$1))\n{var c__5632__auto___20202 = cljs.core.chunk_first.call(null,seq__19974_20201__$1);{\nvar G__20203 = cljs.core.chunk_rest.call(null,seq__19974_20201__$1);\nvar G__20204 = c__5632__auto___20202;\nvar G__20205 = cljs.core.count.call(null,c__5632__auto___20202);\nvar G__20206 = 0;\nseq__19974_20189 = G__20203;\nchunk__19975_20190 = G__20204;\ncount__19976_20191 = G__20205;\ni__19977_20192 = G__20206;\ncontinue;\n}\n} else\n{var vec__19979_20207 = cljs.core.first.call(null,seq__19974_20201__$1);var ev__6318__auto___20208 = cljs.core.nth.call(null,vec__19979_20207,0,null);var func__6319__auto___20209 = cljs.core.nth.call(null,vec__19979_20207,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20208,func__6319__auto___20209);\n{\nvar G__20210 = cljs.core.next.call(null,seq__19974_20201__$1);\nvar G__20211 = null;\nvar G__20212 = 0;\nvar G__20213 = 0;\nseq__19974_20189 = G__20210;\nchunk__19975_20190 = G__20211;\ncount__19976_20191 = G__20212;\ni__19977_20192 = G__20213;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n};\nvar failed_tests_ui = function (failed_tests,var_args){\nvar ldr = null;if (arguments.length > 1) {\n  ldr = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);} \nreturn failed_tests_ui__delegate.call(this,failed_tests,ldr);};\nfailed_tests_ui.cljs$lang$maxFixedArity = 1;\nfailed_tests_ui.cljs$lang$applyTo = (function (arglist__20214){\nvar failed_tests = cljs.core.first(arglist__20214);\nvar ldr = cljs.core.rest(arglist__20214);\nreturn failed_tests_ui__delegate(failed_tests,ldr);\n});\nfailed_tests_ui.cljs$core$IFn$_invoke$arity$variadic = failed_tests_ui__delegate;\nreturn failed_tests_ui;\n})()\n;\nlt.plugins.elm_light.test.project_ui = (function project_ui(this$){var e__6317__auto__ = crate.core.html.call(null,(function (){var proj_path = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"file\",\"file\",1017047278).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));var proj_name = [cljs.core.str(cljs.core.last.call(null,lt.objs.files.path_segs.call(null,proj_path))),cljs.core.str(lt.objs.files.basename.call(null,proj_path))].join('');return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"div.project-container\",\"div.project-container\",3841828386),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"h1\",\"h1\",1013907515),proj_name], null)], null);\n})());var seq__19986_20215 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__19987_20216 = null;var count__19988_20217 = 0;var i__19989_20218 = 0;while(true){\nif((i__19989_20218 < count__19988_20217))\n{var vec__19990_20219 = cljs.core._nth.call(null,chunk__19987_20216,i__19989_20218);var ev__6318__auto___20220 = cljs.core.nth.call(null,vec__19990_20219,0,null);var func__6319__auto___20221 = cljs.core.nth.call(null,vec__19990_20219,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20220,func__6319__auto___20221);\n{\nvar G__20222 = seq__19986_20215;\nvar G__20223 = chunk__19987_20216;\nvar G__20224 = count__19988_20217;\nvar G__20225 = (i__19989_20218 + 1);\nseq__19986_20215 = G__20222;\nchunk__19987_20216 = G__20223;\ncount__19988_20217 = G__20224;\ni__19989_20218 = G__20225;\ncontinue;\n}\n} else\n{var temp__4092__auto___20226 = cljs.core.seq.call(null,seq__19986_20215);if(temp__4092__auto___20226)\n{var seq__19986_20227__$1 = temp__4092__auto___20226;if(cljs.core.chunked_seq_QMARK_.call(null,seq__19986_20227__$1))\n{var c__5632__auto___20228 = cljs.core.chunk_first.call(null,seq__19986_20227__$1);{\nvar G__20229 = cljs.core.chunk_rest.call(null,seq__19986_20227__$1);\nvar G__20230 = c__5632__auto___20228;\nvar G__20231 = cljs.core.count.call(null,c__5632__auto___20228);\nvar G__20232 = 0;\nseq__19986_20215 = G__20229;\nchunk__19987_20216 = G__20230;\ncount__19988_20217 = G__20231;\ni__19989_20218 = G__20232;\ncontinue;\n}\n} else\n{var vec__19991_20233 = cljs.core.first.call(null,seq__19986_20227__$1);var ev__6318__auto___20234 = cljs.core.nth.call(null,vec__19991_20233,0,null);var func__6319__auto___20235 = cljs.core.nth.call(null,vec__19991_20233,1,null);lt.util.dom.on.call(null,e__6317__auto__,ev__6318__auto___20234,func__6319__auto___20235);\n{\nvar G__20236 = cljs.core.next.call(null,seq__19986_20227__$1);\nvar G__20237 = null;\nvar G__20238 = 0;\nvar G__20239 = 0;\nseq__19986_20215 = G__20236;\nchunk__19987_20216 = G__20237;\ncount__19988_20217 = G__20238;\ni__19989_20218 = G__20239;\ncontinue;\n}\n}\n} else\n{}\n}\nbreak;\n}\nreturn e__6317__auto__;\n});\nlt.plugins.elm_light.test.__BEH__on_close_destroy = (function __BEH__on_close_destroy(this$){var temp__4092__auto___20240 = new cljs.core.Keyword(\"lt.objs.tabs\",\"tabset\",\"lt.objs.tabs/tabset\",3378091779).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$));if(cljs.core.truth_(temp__4092__auto___20240))\n{var ts_20241 = temp__4092__auto___20240;if(cljs.core._EQ_.call(null,cljs.core.count.call(null,new cljs.core.Keyword(null,\"objs\",\"objs\",1017308622).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ts_20241))),1))\n{lt.objs.tabs.rem_tabset.call(null,ts_20241);\n} else\n{}\n} else\n{}\nreturn lt.object.raise.call(null,this$,new cljs.core.Keyword(null,\"destroy\",\"destroy\",2571277164));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"on-close-destroy\",\"lt.plugins.elm-light.test/on-close-destroy\",4267233941),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.test.__BEH__on_close_destroy,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"close\",\"close\",1108660586),null], null), null));\nlt.plugins.elm_light.test.__BEH__on_testrun_init = (function __BEH__on_testrun_init(this$,path){var result_container = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.result-container\",\"div.result-container\",4736622080),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));var proj_container = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.project-container\",\"div.project-container\",3841828386),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));lt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"start\",\"start\",1123661780)], null),null);\nlt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"tests\",\"tests\",1124155795)], null),cljs.core.PersistentVector.EMPTY);\nlt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"failures?\",\"failures?\",4788123816)], null),null);\nlt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"file\",\"file\",1017047278)], null),path);\nlt.util.dom.replace_with.call(null,proj_container,lt.plugins.elm_light.test.project_ui.call(null,this$));\nlt.util.dom.empty.call(null,result_container);\nlt.util.dom.append.call(null,result_container,lt.plugins.elm_light.test.testprogress_ui.call(null,this$,cljs.core.PersistentArrayMap.EMPTY));\nreturn lt.util.dom.append.call(null,result_container,lt.plugins.elm_light.test.failed_tests_ui.call(null,cljs.core.PersistentVector.EMPTY,lt.plugins.elm_light.test.loader.call(null)));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"on-testrun-init\",\"lt.plugins.elm-light.test/on-testrun-init\",3317249002),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.test.__BEH__on_testrun_init,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.test.init\",\"elm.test.init\",2526420246),null], null), null));\nlt.plugins.elm_light.test.log_end = (function log_end(failures_QMARK_,p__19992){var map__19994 = p__19992;var map__19994__$1 = ((cljs.core.seq_QMARK_.call(null,map__19994))?cljs.core.apply.call(null,cljs.core.hash_map,map__19994):map__19994);var evt = map__19994__$1;var duration = cljs.core.get.call(null,map__19994__$1,new cljs.core.Keyword(null,\"duration\",\"duration\",3316859142));var failed = cljs.core.get.call(null,map__19994__$1,new cljs.core.Keyword(null,\"failed\",\"failed\",4026894255));var passed = cljs.core.get.call(null,map__19994__$1,new cljs.core.Keyword(null,\"passed\",\"passed\",4313490402));var summary = [cljs.core.str(\"Test run completed in \"),cljs.core.str(duration),cljs.core.str(\"ms. Results: \"),cljs.core.str(passed),cljs.core.str(\" passed, \"),cljs.core.str(failed),cljs.core.str(\" failed\")].join('');lt.objs.console.log.call(null,summary,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nreturn lt.objs.notifos.msg_STAR_.call(null,summary,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),(cljs.core.truth_(failures_QMARK_)?\"error\":\"\"),new cljs.core.Keyword(null,\"timeout\",\"timeout\",3994960083),5000], null));\n});\nlt.plugins.elm_light.test.handle_end = (function handle_end(this$,p__19995){var map__19997 = p__19995;var map__19997__$1 = ((cljs.core.seq_QMARK_.call(null,map__19997))?cljs.core.apply.call(null,cljs.core.hash_map,map__19997):map__19997);var evt = map__19997__$1;var duration = cljs.core.get.call(null,map__19997__$1,new cljs.core.Keyword(null,\"duration\",\"duration\",3316859142));var failed = cljs.core.get.call(null,map__19997__$1,new cljs.core.Keyword(null,\"failed\",\"failed\",4026894255));var passed = cljs.core.get.call(null,map__19997__$1,new cljs.core.Keyword(null,\"passed\",\"passed\",4313490402));lt.util.dom.replace_with.call(null,lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.test-progress\",\"div.test-progress\",3379553757),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$))),lt.plugins.elm_light.test.testprogress_ui.call(null,this$,evt));\nreturn lt.plugins.elm_light.test.log_end.call(null,new cljs.core.Keyword(null,\"failures?\",\"failures?\",4788123816).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)),evt);\n});\nlt.plugins.elm_light.test.log_test_failures = (function log_test_failures(failures_QMARK_,p__19998){var map__20004 = p__19998;var map__20004__$1 = ((cljs.core.seq_QMARK_.call(null,map__20004))?cljs.core.apply.call(null,cljs.core.hash_map,map__20004):map__20004);var failures = cljs.core.get.call(null,map__20004__$1,new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587));var labels = cljs.core.get.call(null,map__20004__$1,new cljs.core.Keyword(null,\"labels\",\"labels\",4198454129));var test_name = clojure.string.join.call(null,\" -> \",labels);lt.objs.notifos.msg_STAR_.call(null,test_name,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),(cljs.core.truth_(failures)?\"error\":\"\")], null));\nlt.objs.console.log.call(null,test_name,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nvar seq__20005 = cljs.core.seq.call(null,failures);var chunk__20006 = null;var count__20007 = 0;var i__20008 = 0;while(true){\nif((i__20008 < count__20007))\n{var failure = cljs.core._nth.call(null,chunk__20006,i__20008);if(cljs.core.truth_(clojure.string.blank_QMARK_.call(null,new cljs.core.Keyword(null,\"given\",\"given\",1112271599).cljs$core$IFn$_invoke$arity$1(failure))))\n{} else\n{lt.objs.console.log.call(null,[cljs.core.str(\"Given: \"),cljs.core.str(new cljs.core.Keyword(null,\"given\",\"given\",1112271599).cljs$core$IFn$_invoke$arity$1(failure))].join(''));\n}\nlt.objs.console.log.call(null,[cljs.core.str(new cljs.core.Keyword(null,\"actual\",\"actual\",3885931776).cljs$core$IFn$_invoke$arity$1(failure)),cljs.core.str(\"\\n\\n\")].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\n{\nvar G__20242 = seq__20005;\nvar G__20243 = chunk__20006;\nvar G__20244 = count__20007;\nvar G__20245 = (i__20008 + 1);\nseq__20005 = G__20242;\nchunk__20006 = G__20243;\ncount__20007 = G__20244;\ni__20008 = G__20245;\ncontinue;\n}\n} else\n{var temp__4092__auto__ = cljs.core.seq.call(null,seq__20005);if(temp__4092__auto__)\n{var seq__20005__$1 = temp__4092__auto__;if(cljs.core.chunked_seq_QMARK_.call(null,seq__20005__$1))\n{var c__5632__auto__ = cljs.core.chunk_first.call(null,seq__20005__$1);{\nvar G__20246 = cljs.core.chunk_rest.call(null,seq__20005__$1);\nvar G__20247 = c__5632__auto__;\nvar G__20248 = cljs.core.count.call(null,c__5632__auto__);\nvar G__20249 = 0;\nseq__20005 = G__20246;\nchunk__20006 = G__20247;\ncount__20007 = G__20248;\ni__20008 = G__20249;\ncontinue;\n}\n} else\n{var failure = cljs.core.first.call(null,seq__20005__$1);if(cljs.core.truth_(clojure.string.blank_QMARK_.call(null,new cljs.core.Keyword(null,\"given\",\"given\",1112271599).cljs$core$IFn$_invoke$arity$1(failure))))\n{} else\n{lt.objs.console.log.call(null,[cljs.core.str(\"Given: \"),cljs.core.str(new cljs.core.Keyword(null,\"given\",\"given\",1112271599).cljs$core$IFn$_invoke$arity$1(failure))].join(''));\n}\nlt.objs.console.log.call(null,[cljs.core.str(new cljs.core.Keyword(null,\"actual\",\"actual\",3885931776).cljs$core$IFn$_invoke$arity$1(failure)),cljs.core.str(\"\\n\\n\")].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\n{\nvar G__20250 = cljs.core.next.call(null,seq__20005__$1);\nvar G__20251 = null;\nvar G__20252 = 0;\nvar G__20253 = 0;\nseq__20005 = G__20250;\nchunk__20006 = G__20251;\ncount__20007 = G__20252;\ni__20008 = G__20253;\ncontinue;\n}\n}\n} else\n{return null;\n}\n}\nbreak;\n}\n});\nlt.plugins.elm_light.test.handle_test_result = (function handle_test_result(this$,p__20010){var map__20012 = p__20010;var map__20012__$1 = ((cljs.core.seq_QMARK_.call(null,map__20012))?cljs.core.apply.call(null,cljs.core.hash_map,map__20012):map__20012);var evt = map__20012__$1;var failures = cljs.core.get.call(null,map__20012__$1,new cljs.core.Keyword(null,\"failures\",\"failures\",1689842587));var status = cljs.core.get.call(null,map__20012__$1,new cljs.core.Keyword(null,\"status\",\"status\",4416389988));var labels = cljs.core.get.call(null,map__20012__$1,new cljs.core.Keyword(null,\"labels\",\"labels\",4198454129));lt.object.update_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"tests\",\"tests\",1124155795)], null),cljs.core.conj,evt);\nif(cljs.core._EQ_.call(null,\"fail\",status))\n{lt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"failures?\",\"failures?\",4788123816)], null),true);\nlt.plugins.elm_light.test.log_test_failures.call(null,new cljs.core.Keyword(null,\"failures?\",\"failures?\",4788123816).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)),evt);\n} else\n{}\nvar container = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.result-container\",\"div.result-container\",4736622080),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));var failed_tests = cljs.core.filter.call(null,((function (container,map__20012,map__20012__$1,evt,failures,status,labels){\nreturn (function (p1__20009_SHARP_){return cljs.core._EQ_.call(null,\"fail\",new cljs.core.Keyword(null,\"status\",\"status\",4416389988).cljs$core$IFn$_invoke$arity$1(p1__20009_SHARP_));\n});})(container,map__20012,map__20012__$1,evt,failures,status,labels))\n,new cljs.core.Keyword(null,\"tests\",\"tests\",1124155795).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));lt.util.dom.empty.call(null,container);\nlt.util.dom.append.call(null,container,lt.plugins.elm_light.test.testprogress_ui.call(null,this$,evt));\nreturn lt.util.dom.append.call(null,container,lt.plugins.elm_light.test.failed_tests_ui.call(null,failed_tests));\n});\nlt.plugins.elm_light.test.log_start = (function log_start(evt){return lt.objs.notifos.set_msg_BANG_.call(null,\"About to run  \".call(null,new cljs.core.Keyword(null,\"testCount\",\"testCount\",4102757135).cljs$core$IFn$_invoke$arity$1(evt),\" Elm tests\"));\n});\nlt.plugins.elm_light.test.handle_start = (function handle_start(this$,evt){var container = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.result-container\",\"div.result-container\",4736622080),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));lt.util.dom.empty.call(null,container);\nlt.util.dom.append.call(null,container,lt.plugins.elm_light.test.testprogress_ui.call(null,this$,evt));\nlt.util.dom.append.call(null,container,lt.plugins.elm_light.test.failed_tests_ui.call(null,cljs.core.PersistentVector.EMPTY,lt.plugins.elm_light.test.loader.call(null)));\nlt.object.assoc_in_BANG_.call(null,this$,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,\"start\",\"start\",1123661780)], null),evt);\nreturn lt.plugins.elm_light.test.log_start.call(null,evt);\n});\n/**\n* Create a test suite on the fly for running elm tests\n*/\nlt.plugins.elm_light.test.create_suite = (function create_suite(suite_name,project_tests){var imports = [cljs.core.str(\"import \"),cljs.core.str(clojure.string.join.call(null,\"\\nimport \",cljs.core.set.call(null,cljs.core.map.call(null,new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710),project_tests))))].join('');var tests = clojure.string.join.call(null,\",\",cljs.core.map.call(null,((function (imports){\nreturn (function (p1__20013_SHARP_){return [cljs.core.str(new cljs.core.Keyword(null,\"module-name\",\"module-name\",4067691710).cljs$core$IFn$_invoke$arity$1(p1__20013_SHARP_)),cljs.core.str(\".\"),cljs.core.str(new cljs.core.Keyword(null,\"value\",\"value\",1125876963).cljs$core$IFn$_invoke$arity$1(p1__20013_SHARP_))].join('');\n});})(imports))\n,project_tests));return [cljs.core.str(\"port module \"),cljs.core.str(suite_name),cljs.core.str(\" exposing (..)\\n\\nimport Test.Runner.Node exposing (run)\\nimport Json.Encode exposing (Value)\\nimport Test\"),cljs.core.str(\"\\n\"),cljs.core.str(imports),cljs.core.str(\"\\n\"),cljs.core.str(\"main : Test.Runner.Node.TestProgram\\nmain =\\n    run emit <| Test.concat [\"),cljs.core.str(tests),cljs.core.str(\"]\\n\\nport emit : ( String, Value ) -> Cmd msg\")].join('');\n});\nlt.plugins.elm_light.test.__BEH__elm_test_result = (function __BEH__elm_test_result(this$,res){var G__20015 = new cljs.core.Keyword(null,\"event\",\"event\",1110795788).cljs$core$IFn$_invoke$arity$1(res);if(cljs.core._EQ_.call(null,\"runComplete\",G__20015))\n{return lt.plugins.elm_light.test.handle_end.call(null,this$,res);\n} else\n{if(cljs.core._EQ_.call(null,\"testCompleted\",G__20015))\n{return lt.plugins.elm_light.test.handle_test_result.call(null,this$,res);\n} else\n{if(cljs.core._EQ_.call(null,\"runStart\",G__20015))\n{return lt.plugins.elm_light.test.handle_start.call(null,this$,res);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.println.call(null,\"Unknown messsage: \",res);\n} else\n{return null;\n}\n}\n}\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"elm-test-result\",\"lt.plugins.elm-light.test/elm-test-result\",3684004911),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.test.__BEH__elm_test_result,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm test result event\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.test.result\",\"elm.test.result\",3092491043),null], null), null));\nlt.plugins.elm_light.test.__BEH__elm_test_error = (function __BEH__elm_test_error(this$,err){var container_20254 = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.result-container\",\"div.result-container\",4736622080),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,this$)));lt.util.dom.empty.call(null,container_20254);\nlt.util.dom.append.call(null,container_20254,lt.plugins.elm_light.test.testprogress_ui.call(null,this$,cljs.core.PersistentArrayMap.EMPTY));\nlt.util.dom.append.call(null,container_20254,lt.plugins.elm_light.test.failed_tests_ui.call(null,cljs.core.PersistentVector.EMPTY));\nreturn lt.objs.console.error.call(null,new cljs.core.Keyword(null,\"message\",\"message\",1968829305).cljs$core$IFn$_invoke$arity$1(err));\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"elm-test-error\",\"lt.plugins.elm-light.test/elm-test-error\",2939564972),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.test.__BEH__elm_test_error,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm test error\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.test.error\",\"elm.test.error\",653693798),null], null), null));\nlt.object.object_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"dashboard\",\"lt.plugins.elm-light.test/dashboard\",1095963052),new cljs.core.Keyword(null,\"tags\",\"tags\",1017456523),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.test.dashboard\",\"elm.test.dashboard\",4421572082),null], null), null),new cljs.core.Keyword(null,\"name\",\"name\",1017277949),\"Elm Test Dashboard\",new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Elm Test Dashboard\",new cljs.core.Keyword(null,\"init\",\"init\",1017141378),(function (this$){return lt.plugins.elm_light.test.wrapper.call(null);\n}));\nlt.plugins.elm_light.test.dashboard = lt.object.create.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"dashboard\",\"lt.plugins.elm-light.test/dashboard\",1095963052));\nlt.plugins.elm_light.test.__BEH__elm_test = (function __BEH__elm_test(ed){var map__20017 = cljs.core.deref.call(null,ed);var map__20017__$1 = ((cljs.core.seq_QMARK_.call(null,map__20017))?cljs.core.apply.call(null,cljs.core.hash_map,map__20017):map__20017);var info = cljs.core.get.call(null,map__20017__$1,new cljs.core.Keyword(null,\"info\",\"info\",1017141280));lt.objs.tabs.add_or_focus_BANG_.call(null,lt.plugins.elm_light.test.dashboard);\nlt.object.raise.call(null,lt.plugins.elm_light.test.dashboard,new cljs.core.Keyword(null,\"elm.test.init\",\"elm.test.init\",2526420246),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info));\nreturn lt.objs.clients.send.call(null,lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"elm.test\",\"elm.test\",1176854604)),new cljs.core.Keyword(null,\"elm.test\",\"elm.test\",1176854604),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"file\",\"file\",1017047278),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)))], null),new cljs.core.Keyword(null,\"only\",\"only\",1017320222),lt.plugins.elm_light.test.dashboard);\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"elm-test\",\"lt.plugins.elm-light.test/elm-test\",4453364343),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.test.__BEH__elm_test,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Run all Elm tests in your test project\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.test\",\"elm.test\",1176854604),null], null), null));\nlt.plugins.elm_light.test.get_applicable_tests = (function get_applicable_tests(p__20018){var map__20021 = p__20018;var map__20021__$1 = ((cljs.core.seq_QMARK_.call(null,map__20021))?cljs.core.apply.call(null,cljs.core.hash_map,map__20021):map__20021);var suite_type = cljs.core.get.call(null,map__20021__$1,new cljs.core.Keyword(null,\"suite-type\",\"suite-type\",4285261921));var path = cljs.core.get.call(null,map__20021__$1,new cljs.core.Keyword(null,\"path\",\"path\",1017337751));var pos = cljs.core.get.call(null,map__20021__$1,new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430));var project_path = lt.plugins.elm_light.utils.project_path.call(null,path);var G__20022 = cljs.core.keyword.call(null,suite_type);if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"module\",\"module\",4240087518),G__20022))\n{return lt.plugins.elm_light.elm_ast.get_module_tests.call(null,project_path,path);\n} else\n{if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"single\",\"single\",4406605754),G__20022))\n{return lt.plugins.elm_light.elm_ast.get_test_by_pos.call(null,pos,project_path,path);\n} else\n{if(cljs.core._EQ_.call(null,new cljs.core.Keyword(null,\"all\",\"all\",1014000915),G__20022))\n{return lt.plugins.elm_light.elm_ast.get_project_tests.call(null,project_path);\n} else\n{if(new cljs.core.Keyword(null,\"else\",\"else\",1017020587))\n{return cljs.core.PersistentVector.EMPTY;\n} else\n{return null;\n}\n}\n}\n}\n});\nlt.plugins.elm_light.test.__BEH__elm_test_suite = (function __BEH__elm_test_suite(ed,msg){var project_path = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));var project_tests = lt.plugins.elm_light.test.get_applicable_tests.call(null,msg);var suite_name = [cljs.core.str(\"ElmTempTestSuite\"),cljs.core.str(cljs.core.rand_int.call(null,1000000))].join('');if(cljs.core.seq.call(null,project_tests))\n{return lt.objs.clients.send.call(null,lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"elm.test.suite\",\"elm.test.suite\",666703958)),new cljs.core.Keyword(null,\"elm.test.suite\",\"elm.test.suite\",666703958),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"module\",\"module\",4240087518),suite_name,new cljs.core.Keyword(null,\"suite\",\"suite\",1123699306),lt.plugins.elm_light.test.create_suite.call(null,suite_name,project_tests)], null),new cljs.core.Keyword(null,\"only\",\"only\",1017320222),lt.plugins.elm_light.test.dashboard);\n} else\n{var container_20255 = lt.util.dom.$.call(null,new cljs.core.Keyword(null,\"div.result-container\",\"div.result-container\",4736622080),new cljs.core.Keyword(null,\"content\",\"content\",1965434859).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.elm_light.test.dashboard)));lt.util.dom.empty.call(null,container_20255);\nlt.util.dom.append.call(null,container_20255,lt.plugins.elm_light.test.testprogress_ui.call(null,lt.plugins.elm_light.test.dashboard,cljs.core.PersistentArrayMap.EMPTY));\nlt.util.dom.append.call(null,container_20255,lt.plugins.elm_light.test.failed_tests_ui.call(null,cljs.core.PersistentVector.EMPTY));\nreturn lt.objs.notifos.set_msg_BANG_.call(null,\"No tests found for project / given selection\");\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"elm-test-suite\",\"lt.plugins.elm-light.test/elm-test-suite\",2925305500),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.test.__BEH__elm_test_suite,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Start test suite, now that project is connected\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.test.suite.start\",\"elm.test.suite.start\",3349712458),null], null), null));\nlt.plugins.elm_light.test.ast_pass_through = (function ast_pass_through(this$,ed,msg){return lt.objs.clients.send.call(null,lt.plugins.elm_light.clients.get_eval_client.call(null,ed,new cljs.core.Keyword(null,\"editor.elm.ast.passthrough\",\"editor.elm.ast.passthrough\",3082755153)),new cljs.core.Keyword(null,\"editor.elm.ast.passthrough\",\"editor.elm.ast.passthrough\",3082755153),msg,new cljs.core.Keyword(null,\"only\",\"only\",1017320222),this$);\n});\nlt.plugins.elm_light.test.check_elm_version = (function check_elm_version(proj_path){var elm_v = lt.plugins.elm_light.utils.get_elm_version.call(null);if(!(lt.plugins.elm_light.utils.ver_LTE_QMARK_.call(null,\"0.18.0\",elm_v)))\n{lt.objs.console.error.call(null,[cljs.core.str(\"Test feature requires elm 0.18.0, but current elm version is: \"),cljs.core.str(elm_v)].join(''));\nlt.objs.notifos.set_msg_BANG_.call(null,[cljs.core.str(\"Test feature requires elm 0.18.0, but current elm version is: \"),cljs.core.str(elm_v)].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nreturn false;\n} else\n{var vec__20024 = lt.plugins.elm_light.utils.project_satisfies_version_QMARK_.call(null,\"0.18.0\",proj_path);var ok_QMARK_ = cljs.core.nth.call(null,vec__20024,0,null);var bounds = cljs.core.nth.call(null,vec__20024,1,null);if(cljs.core.truth_(ok_QMARK_))\n{return true;\n} else\n{lt.objs.console.error.call(null,[cljs.core.str(\"Elm test requires elm version 0.18.0 or higher but project has: \"),cljs.core.str(bounds)].join(''));\nlt.objs.notifos.set_msg_BANG_.call(null,[cljs.core.str(\"Elm test requires elm version 0.18.0 or higher but project has: \"),cljs.core.str(bounds)].join(''),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\"], null));\nreturn false;\n}\n}\n});\nlt.plugins.elm_light.test.__BEH__elm_test_suite__DOT__init = (function __BEH__elm_test_suite__DOT__init(ed,suite_type){var temp__4092__auto__ = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));if(cljs.core.truth_(temp__4092__auto__))\n{var proj_path = temp__4092__auto__;if(lt.plugins.elm_light.test.check_elm_version.call(null,proj_path))\n{var map__20026 = cljs.core.deref.call(null,ed);var map__20026__$1 = ((cljs.core.seq_QMARK_.call(null,map__20026))?cljs.core.apply.call(null,cljs.core.hash_map,map__20026):map__20026);var info = cljs.core.get.call(null,map__20026__$1,new cljs.core.Keyword(null,\"info\",\"info\",1017141280));var pos = lt.objs.editor.__GT_cursor.call(null,ed);lt.objs.tabs.add_or_focus_BANG_.call(null,lt.plugins.elm_light.test.dashboard);\nlt.object.raise.call(null,lt.plugins.elm_light.test.dashboard,new cljs.core.Keyword(null,\"elm.test.init\",\"elm.test.init\",2526420246),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info));\nreturn lt.plugins.elm_light.test.ast_pass_through.call(null,ed,ed,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"target\",\"target\",4427965699),new cljs.core.Keyword(null,\"elm.test.suite.start\",\"elm.test.suite.start\",3349712458),new cljs.core.Keyword(null,\"data\",\"data\",1016980252),new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"pos\",\"pos\",1014015430),pos,new cljs.core.Keyword(null,\"path\",\"path\",1017337751),new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(info),new cljs.core.Keyword(null,\"suite-type\",\"suite-type\",4285261921),suite_type], null)], null));\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"elm-test-suite.init\",\"lt.plugins.elm-light.test/elm-test-suite.init\",2514809874),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.test.__BEH__elm_test_suite__DOT__init,new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Initialize run of test suite\",new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.test.suite.init\",\"elm.test.suite.init\",673307468),null], null), null));\nlt.plugins.elm_light.test.__BEH__elm_test_setup = (function __BEH__elm_test_setup(ed){var temp__4092__auto__ = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));if(cljs.core.truth_(temp__4092__auto__))\n{var prj_path = temp__4092__auto__;if(lt.plugins.elm_light.test.check_elm_version.call(null,prj_path))\n{return lt.plugins.elm_light.test.setup_test.call(null,prj_path);\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.test\",\"elm-test-setup\",\"lt.plugins.elm-light.test/elm-test-setup\",2926934567),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.test.__BEH__elm_test_setup,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.test.setup\",\"elm.test.setup\",666237915),null], null), null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.test.suite\",\"elm.test.suite\",666703958),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Test All\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.test.suite.init\",\"elm.test.suite.init\",673307468),new cljs.core.Keyword(null,\"all\",\"all\",1014000915));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.test.module\",\"elm.test.module\",2958133618),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Test Module\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.test.suite.init\",\"elm.test.suite.init\",673307468),new cljs.core.Keyword(null,\"module\",\"module\",4240087518));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.test.single\",\"elm.test.single\",3124651854),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Test Current\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.test.suite.init\",\"elm.test.suite.init\",673307468),new cljs.core.Keyword(null,\"single\",\"single\",4406605754));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm.test.setup\",\"elm.test.setup\",666237915),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Test Setup\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.test.setup\",\"elm.test.setup\",666237915));\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('lt.plugins.elm-light.format')) {\ngoog.provide('lt.plugins.elm_light.format');\ngoog.require('cljs.core');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.platform');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.utils');\ngoog.require('lt.objs.popup');\ngoog.require('lt.objs.popup');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('lt.objs.notifos');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\ngoog.require('lt.objs.platform');\ngoog.require('lt.plugins.elm_light.clients');\ngoog.require('clojure.string');\ngoog.require('lt.plugins.elm_light.selection');\ngoog.require('lt.plugins.elm_light.selection');\ngoog.require('lt.objs.editor');\ngoog.require('lt.object');\ngoog.require('lt.object');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.editor');\ngoog.require('lt.objs.console');\ngoog.require('lt.objs.editor.pool');\ngoog.require('lt.objs.command');\nlt.plugins.elm_light.format.handle_no_elm_format = (function handle_no_elm_format(){lt.objs.notifos.done_working.call(null);\nlt.objs.console.log.call(null,process.env.PATH);\nreturn lt.objs.popup.popup_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"header\",\"header\",4087600639),\"We couldn't find elm-format in your path\",new cljs.core.Keyword(null,\"body\",\"body\",1016933652),[cljs.core.str(\"In order to formatting related commands, elm-format must be installed and on your system PATH.\"),cljs.core.str(\"(Check the console for PATH as seen from Light Table\")].join(''),new cljs.core.Keyword(null,\"buttons\",\"buttons\",1255256819),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"Install elm-format\",new cljs.core.Keyword(null,\"action\",\"action\",3885920680),(function (){return lt.objs.platform.open.call(null,\"https://github.com/avh4/elm-format#installation-\");\n})], null),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"label\",\"label\",1116631654),\"ok\"], null)], null)], null));\n});\nlt.plugins.elm_light.format.verify_installed = (function verify_installed(){if(cljs.core.truth_(lt.plugins.elm_light.clients.shelljs.which(\"elm-format\")))\n{return true;\n} else\n{lt.plugins.elm_light.format.handle_no_elm_format.call(null);\nreturn null;\n}\n});\n/**\n* Format string input using elm-format.\n* If successful returns [true result]\n* If errors returns [false err]\n*/\nlt.plugins.elm_light.format.format_input = (function format_input(cwd,input){try{return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [true,require(\"child_process\").execSync(\"elm-format --stdin\",cljs.core.clj__GT_js.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"cwd\",\"cwd\",1014003170),cwd,new cljs.core.Keyword(null,\"input\",\"input\",1114262332),input,new cljs.core.Keyword(null,\"stdio\",\"stdio\",1123664379),\"pipe\"], null))).toString()], null);\n}catch (e12443){var e = e12443;return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [false,e.message], null);\n}});\n/**\n* Format file or all elm files in dir using elm-format.\n* If successful returns [true nil]\n* If errors returns [false err]\n*/\nlt.plugins.elm_light.format.format_path = (function format_path(cwd,path){try{require(\"child_process\").execSync([cljs.core.str(\"elm-format --yes \"),cljs.core.str(path)].join(''),cljs.core.clj__GT_js.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"cwd\",\"cwd\",1014003170),cwd,new cljs.core.Keyword(null,\"stdio\",\"stdio\",1123664379),\"pipe\"], null)));\nreturn new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [true,null], null);\n}catch (e12445){var e = e12445;return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [false,e.message], null);\n}});\nlt.plugins.elm_light.format.handle_format_error = (function handle_format_error(err){lt.objs.notifos.set_msg_BANG_.call(null,\"Elm format reported errors. See console for details\",new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,\"class\",\"class\",1108647146),\"error\",new cljs.core.Keyword(null,\"timeout\",\"timeout\",3994960083),5000], null));\nreturn lt.objs.console.error.call(null,err);\n});\nlt.plugins.elm_light.format.__BEH__elm_format = (function __BEH__elm_format(ed){if(cljs.core.truth_(lt.plugins.elm_light.format.verify_installed.call(null)))\n{var temp__4092__auto__ = new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)));if(cljs.core.truth_(temp__4092__auto__))\n{var path = temp__4092__auto__;var pos = lt.objs.editor.__GT_cursor.call(null,ed);var vec__12447 = lt.plugins.elm_light.format.format_path.call(null,lt.plugins.elm_light.utils.project_path.call(null,path),path);var ok_QMARK_ = cljs.core.nth.call(null,vec__12447,0,null);var res = cljs.core.nth.call(null,vec__12447,1,null);if(cljs.core.truth_(ok_QMARK_))\n{lt.objs.editor.pool.reload.call(null,ed);\n} else\n{lt.plugins.elm_light.format.handle_format_error.call(null,res);\n}\nlt.objs.editor.move_cursor.call(null,ed,pos);\nreturn lt.objs.editor.center_cursor.call(null,ed);\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.format\",\"elm-format\",\"lt.plugins.elm-light.format/elm-format\",4432445084),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.format.__BEH__elm_format,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.format\",\"elm.format\",2598773169),null], null), null));\nlt.plugins.elm_light.format.strip_module = (function strip_module(expr){return clojure.string.join.call(null,\"\\n\",cljs.core.drop.call(null,3,clojure.string.split_lines.call(null,expr)));\n});\nlt.plugins.elm_light.format.__BEH__elm_format_expression = (function __BEH__elm_format_expression(ed){if(cljs.core.truth_(lt.plugins.elm_light.format.verify_installed.call(null)))\n{var pos = lt.objs.editor.__GT_cursor.call(null,ed);var cwd = lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed))));var temp__4092__auto__ = lt.plugins.elm_light.selection.get_top_level_expr.call(null,ed,pos);if(cljs.core.truth_(temp__4092__auto__))\n{var map__12450 = temp__4092__auto__;var map__12450__$1 = ((cljs.core.seq_QMARK_.call(null,map__12450))?cljs.core.apply.call(null,cljs.core.hash_map,map__12450):map__12450);var to = cljs.core.get.call(null,map__12450__$1,new cljs.core.Keyword(null,\"to\",\"to\",1013907949));var from = cljs.core.get.call(null,map__12450__$1,new cljs.core.Keyword(null,\"from\",\"from\",1017056028));var vec__12451 = lt.plugins.elm_light.format.format_input.call(null,cwd,lt.objs.editor.range.call(null,ed,from,to));var ok_QMARK_ = cljs.core.nth.call(null,vec__12451,0,null);var res = cljs.core.nth.call(null,vec__12451,1,null);if(cljs.core.truth_(ok_QMARK_))\n{lt.objs.editor.replace.call(null,ed,from,to,lt.plugins.elm_light.format.strip_module.call(null,res));\n} else\n{lt.plugins.elm_light.format.handle_format_error.call(null,res);\n}\nreturn lt.objs.editor.move_cursor.call(null,ed,pos);\n} else\n{return null;\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.format\",\"elm-format-expression\",\"lt.plugins.elm-light.format/elm-format-expression\",731246833),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.format.__BEH__elm_format_expression,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.format-expression\",\"elm.format-expression\",2402661976),null], null), null));\nlt.plugins.elm_light.format.__BEH__elm_format_buffer = (function __BEH__elm_format_buffer(ed){if(cljs.core.truth_(lt.plugins.elm_light.format.verify_installed.call(null)))\n{var pos = lt.objs.editor.__GT_cursor.call(null,ed);var vec__12453 = lt.plugins.elm_light.format.format_input.call(null,lt.plugins.elm_light.utils.project_path.call(null,new cljs.core.Keyword(null,\"path\",\"path\",1017337751).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,\"info\",\"info\",1017141280).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,ed)))),lt.objs.editor.__GT_val.call(null,ed));var ok_QMARK_ = cljs.core.nth.call(null,vec__12453,0,null);var res = cljs.core.nth.call(null,vec__12453,1,null);if(cljs.core.truth_(ok_QMARK_))\n{lt.objs.editor.set_val_and_keep_cursor.call(null,ed,res);\nreturn lt.objs.editor.center_cursor.call(null,ed);\n} else\n{return lt.plugins.elm_light.format.handle_format_error.call(null,res);\n}\n} else\n{return null;\n}\n});\nlt.object.behavior_STAR_.call(null,new cljs.core.Keyword(\"lt.plugins.elm-light.format\",\"elm-format-buffer\",\"lt.plugins.elm-light.format/elm-format-buffer\",2032820105),new cljs.core.Keyword(null,\"reaction\",\"reaction\",4441361819),lt.plugins.elm_light.format.__BEH__elm_format_buffer,new cljs.core.Keyword(null,\"triggers\",\"triggers\",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,\"elm.format-buffer\",\"elm.format-buffer\",4209381120),null], null), null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm-format\",\"elm-format\",1711269488),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Format file\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.format\",\"elm.format\",2598773169));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm-format-buffer\",\"elm-format-buffer\",4714939745),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Format editor contents\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.format-buffer\",\"elm.format-buffer\",4209381120));\n} else\n{return null;\n}\n})], null));\nlt.objs.command.command.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,\"command\",\"command\",1964298941),new cljs.core.Keyword(null,\"elm-format-expression\",\"elm-format-expression\",3399734329),new cljs.core.Keyword(null,\"desc\",\"desc\",1016984067),\"Elm: Format top level expression at point\",new cljs.core.Keyword(null,\"exec\",\"exec\",1017031683),(function (){var temp__4092__auto__ = lt.objs.editor.pool.last_active.call(null);if(cljs.core.truth_(temp__4092__auto__))\n{var ed = temp__4092__auto__;return lt.object.raise.call(null,ed,new cljs.core.Keyword(null,\"elm.format-expression\",\"elm.format-expression\",2402661976));\n} else\n{return null;\n}\n})], null));\n}\nif(!lt.util.load.provided_QMARK_('')) {\n}\n\n//# sourceMappingURL=elm-light_compiled.js.map"
  },
  {
    "path": "elm.keymap",
    "content": "[\n [:editor.keys.normal.elm \"tab\" :passthrough]\n\n  ]\n"
  },
  {
    "path": "js/highlight.pack.js",
    "content": "!function(e){\"undefined\"!=typeof exports?e(exports):(window.hljs=e({}),\"function\"==typeof define&&define.amd&&define(\"hljs\",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,\"&amp;\").replace(/</gm,\"&lt;\").replace(/>/gm,\"&gt;\")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+\" \";if(i+=e.parentNode?e.parentNode.className:\"\",t=/\\blang(?:uage)?-([\\w-]+)\\b/i.exec(i))return w(t[1])?t[1]:\"no-highlight\";for(i=i.split(/\\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:\"start\",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:\"start\"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return\" \"+e.nodeName+'=\"'+n(e.value)+'\"'}f+=\"<\"+t(e)+Array.prototype.map.call(e.attributes,r).join(\"\")+\">\"}function u(e){f+=\"</\"+t(e)+\">\"}function c(e){(\"start\"==e.event?o:u)(e.node)}for(var s=0,f=\"\",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else\"start\"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.cI?\"i\":\"\")+(r?\"g\":\"\"))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");u[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof a.k?c(\"keyword\",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\\b\\w+\\b/,!0),i&&(a.bK&&(a.b=\"\\\\b(\"+a.bK.split(\" \").join(\"|\")+\")\\\\b\"),a.b||(a.b=/\\B|\\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\\B|\\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||\"\",a.eW&&i.tE&&(a.tE+=(a.e?\"|\":\"\")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push(\"self\"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?\"\\\\.?(\"+e.b+\")\\\\.?\":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join(\"|\"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?\"\":E.classPrefix,i='<span class=\"'+a,o=t?\"\":\"</span>\";return i+=e+'\">',i+n+o}function p(){if(!L.k)return n(y);var e=\"\",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function d(){var e=\"string\"==typeof L.sL;if(e&&!x[L.sL])return n(y);var t=e?f(L.sL,y,!0,M[L.sL]):l(y,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(M[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,\"\",!0):\"\";e.rB?(k+=r,y=\"\"):e.eB?(k+=n(t)+r,y=\"\"):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+=\"</span>\"),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y=\"\",a.starts&&v(a.starts,\"\"),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme \"'+t+'\" for mode \"'+(L.cN||\"<unnamed>\")+'\"');return y+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: \"'+e+'\"');s(N);var R,L=i||N,M={},k=\"\";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,\"\",!0)+k);var y=\"\",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+=\"</span>\");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf(\"Illegal\"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\\t)+)/gm,function(e,n){return n.replace(/\\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\\n/g,\"<br>\")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),t.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll(\"pre code\");Array.prototype.forEach.call(e,p)}}function v(){addEventListener(\"DOMContentLoaded\",b,!1),addEventListener(\"load\",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR=\"[a-zA-Z]\\\\w*\",e.UIR=\"[a-zA-Z_]\\\\w*\",e.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.CNR=\"(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BNR=\"\\\\b(0b[01]+)\",e.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0},e.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[e.BE]},e.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},e.PWM={b:/\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\\b/},e.C=function(n,t,r){var a=e.inherit({cN:\"comment\",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",r:0}),a},e.CLCM=e.C(\"//\",\"$\"),e.CBCM=e.C(\"/\\\\*\",\"\\\\*/\"),e.HCM=e.C(\"#\",\"$\"),e.NM={cN:\"number\",b:e.NR,r:0},e.CNM={cN:\"number\",b:e.CNR,r:0},e.BNM={cN:\"number\",b:e.BNR,r:0},e.CSSNM={cN:\"number\",b:e.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0},e.RM={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[e.BE,{b:/\\[/,e:/\\]/,r:0,c:[e.BE]}]},e.TM={cN:\"title\",b:e.IR,r:0},e.UTM={cN:\"title\",b:e.UIR,r:0},e});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},s={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]},a={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\.]+/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",operator:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"shebang\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage(\"css\",function(e){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\",a={cN:\"function\",b:c+\"\\\\(\",rB:!0,eE:!0,e:\"\\\\(\"},r={cN:\"rule\",b:/[A-Z\\_\\.\\-]+\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{cN:\"value\",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"},{cN:\"important\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,r,{cN:\"id\",b:/\\#[A-Za-z0-9_-]+/},{cN:\"class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"attr_selector\",b:/\\[/,e:/\\]/,i:\"$\"},{cN:\"pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/},{cN:\"at_rule\",b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",c:[{cN:\"keyword\",b:/\\S+/},{b:/\\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:\"tag\",b:c,r:0},{cN:\"rules\",b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage(\"elm\",function(e){var c=[e.C(\"--\",\"$\"),e.C(\"{-\",\"-}\",{c:[\"self\"]})],i={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",r:0},n={cN:\"container\",b:\"\\\\(\",e:\"\\\\)\",i:'\"',c:[{cN:\"type\",b:\"\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?\"}].concat(c)},t={cN:\"container\",b:\"{\",e:\"}\",c:n.c};return{k:\"let in if then else case of where module import exposing type alias as infix infixl infixr port\",c:[{cN:\"module\",b:\"\\\\bmodule\\\\b\",e:\"where\",k:\"module where\",c:[n].concat(c),i:\"\\\\W\\\\.|;\"},{cN:\"import\",b:\"\\\\bimport\\\\b\",e:\"$\",k:\"import|0 as exposing\",c:[n].concat(c),i:\"\\\\W\\\\.|;\"},{cN:\"typedef\",b:\"\\\\btype\\\\b\",e:\"$\",k:\"type alias\",c:[i,n,t].concat(c)},{cN:\"infix\",bK:\"infix infixl infixr\",e:\"$\",c:[e.CNM].concat(c)},{cN:\"foreign\",b:\"\\\\bport\\\\b\",e:\"$\",k:\"port\",c:c},e.QSM,e.CNM,i,e.inherit(e.TM,{b:\"^[_a-z][\\\\w']*\"}),{b:\"->|<-\"}].concat(c)}});hljs.registerLanguage(\"json\",function(e){var t={literal:\"true false null\"},i=[e.QSM,e.CNM],l={cN:\"value\",e:\",\",eW:!0,eE:!0,c:i,k:t},c={b:\"{\",e:\"}\",c:[{cN:\"attribute\",b:'\\\\s*\"',e:'\"\\\\s*:\\\\s*',eB:!0,eE:!0,c:[e.BE],i:\"\\\\n\",starts:l}],i:\"\\\\S\"},n={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(l,{cN:null})],i:\"\\\\S\"};return i.splice(i.length,0,c,n),{c:i,k:t,i:\"\\\\S\"}});hljs.registerLanguage(\"javascript\",function(e){return{aliases:[\"js\"],k:{keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},c:[{cN:\"pi\",r:10,b:/^\\s*['\"]use (strict|asm)['\"]/},e.ASM,e.QSM,{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,{cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\"}]},e.CLCM,e.CBCM,{cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)\"},{b:\"\\\\b(0[oO][0-7]+)\"},{b:e.CNR}],r:0},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>\\s*[);\\]]/,r:0,sL:\"xml\"}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\\[|%/},{b:/\\$[(.]/},{b:\"\\\\.\"+e.IR,r:0},{bK:\"import\",e:\"[;$]\",k:\"import from as\",c:[e.ASM,e.QSM]},{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]}],i:/#/}});hljs.registerLanguage(\"xml\",function(t){var s=\"[A-Za-z0-9\\\\._:-]+\",c={b:/<\\?(php)?(?!\\w)/,e:/\\?>/,sL:\"php\"},e={eW:!0,i:/</,r:0,c:[c,{cN:\"attribute\",b:s,r:0},{b:\"=\",r:0,c:[{cN:\"value\",c:[c],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\\/>]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xsl\",\"plist\"],cI:!0,c:[{cN:\"doctype\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},t.C(\"<!--\",\"-->\",{r:10}),{cN:\"cdata\",b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{title:\"style\"},c:[e],starts:{e:\"</style>\",rE:!0,sL:\"css\"}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{title:\"script\"},c:[e],starts:{e:\"</script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\"]}},c,{cN:\"pi\",b:/<\\?\\w+/,e:/\\?>/,r:10},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"title\",b:/[^ \\/><\\n\\t]+/,r:0},e]}]}});\n"
  },
  {
    "path": "js/show-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var HINT_ELEMENT_CLASS        = \"CodeMirror-hint\";\n  var ACTIVE_HINT_ELEMENT_CLASS = \"CodeMirror-hint-active\";\n\n  // This is the old interface, kept around for now to stay\n  // backwards-compatible.\n  CodeMirror.showHint = function(cm, getHints, options) {\n    if (!getHints) return cm.showHint(options);\n    if (options && options.async) getHints.async = true;\n    var newOpts = {hint: getHints};\n    if (options) for (var prop in options) newOpts[prop] = options[prop];\n    return cm.showHint(newOpts);\n  };\n\n  CodeMirror.defineExtension(\"showHint\", function(options) {\n    options = parseOptions(this, this.getCursor(\"start\"), options);\n    var selections = this.listSelections()\n    if (selections.length > 1) return;\n    // By default, don't allow completion when something is selected.\n    // A hint function can have a `supportsSelection` property to\n    // indicate that it can handle selections.\n    if (this.somethingSelected()) {\n      if (!options.hint.supportsSelection) return;\n      // Don't try with cross-line selections\n      for (var i = 0; i < selections.length; i++)\n        if (selections[i].head.line != selections[i].anchor.line) return;\n    }\n\n    if (this.state.completionActive) this.state.completionActive.close();\n    var completion = this.state.completionActive = new Completion(this, options);\n    if (!completion.options.hint) return;\n\n    CodeMirror.signal(this, \"startCompletion\", this);\n    completion.update(true);\n  });\n\n  function Completion(cm, options) {\n    this.cm = cm;\n    this.options = options;\n    this.widget = null;\n    this.debounce = 0;\n    this.tick = 0;\n    this.startPos = this.cm.getCursor(\"start\");\n    this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;\n\n    var self = this;\n    cm.on(\"cursorActivity\", this.activityFunc = function() { self.cursorActivity(); });\n  }\n\n  var requestAnimationFrame = window.requestAnimationFrame || function(fn) {\n    return setTimeout(fn, 1000/60);\n  };\n  var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;\n\n  Completion.prototype = {\n    close: function() {\n      if (!this.active()) return;\n      this.cm.state.completionActive = null;\n      this.tick = null;\n      this.cm.off(\"cursorActivity\", this.activityFunc);\n\n      if (this.widget && this.data) CodeMirror.signal(this.data, \"close\");\n      if (this.widget) this.widget.close();\n      CodeMirror.signal(this.cm, \"endCompletion\", this.cm);\n    },\n\n    active: function() {\n      return this.cm.state.completionActive == this;\n    },\n\n    pick: function(data, i) {\n      var completion = data.list[i];\n\n      if (completion.hint) completion.hint(this.cm, data, completion);\n      else this.cm.replaceRange(getText(completion), completion.from || data.from,\n                                completion.to || data.to, \"complete\");\n      CodeMirror.signal(data, \"pick\", completion);\n      this.close();\n    },\n\n    cursorActivity: function() {\n      if (this.debounce) {\n        cancelAnimationFrame(this.debounce);\n        this.debounce = 0;\n      }\n\n      var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);\n      if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||\n          pos.ch < this.startPos.ch || this.cm.somethingSelected() ||\n          (pos.ch && this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {\n        this.close();\n      } else {\n        var self = this;\n        this.debounce = requestAnimationFrame(function() {self.update();});\n        if (this.widget) this.widget.disable();\n      }\n    },\n\n    update: function(first) {\n      if (this.tick == null) return\n      var self = this, myTick = ++this.tick\n      fetchHints(this.options.hint, this.cm, this.options, function(data) {\n        if (self.tick == myTick) self.finishUpdate(data, first)\n      })\n    },\n\n    finishUpdate: function(data, first) {\n      if (this.data) CodeMirror.signal(this.data, \"update\");\n\n      var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);\n      if (this.widget) this.widget.close();\n\n      if (data && this.data && isNewCompletion(this.data, data)) return;\n      this.data = data;\n\n      if (data && data.list.length) {\n        if (picked && data.list.length == 1) {\n          this.pick(data, 0);\n        } else {\n          this.widget = new Widget(this, data);\n          CodeMirror.signal(data, \"shown\");\n        }\n      }\n    }\n  };\n\n  function isNewCompletion(old, nw) {\n    var moved = CodeMirror.cmpPos(nw.from, old.from)\n    return moved > 0 && old.to.ch - old.from.ch != nw.to.ch - nw.from.ch\n  }\n\n  function parseOptions(cm, pos, options) {\n    var editor = cm.options.hintOptions;\n    var out = {};\n    for (var prop in defaultOptions) out[prop] = defaultOptions[prop];\n    if (editor) for (var prop in editor)\n      if (editor[prop] !== undefined) out[prop] = editor[prop];\n    if (options) for (var prop in options)\n      if (options[prop] !== undefined) out[prop] = options[prop];\n    if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)\n    return out;\n  }\n\n  function getText(completion) {\n    if (typeof completion == \"string\") return completion;\n    else return completion.text;\n  }\n\n  function buildKeyMap(completion, handle) {\n    var baseMap = {\n      Up: function() {handle.moveFocus(-1);},\n      Down: function() {handle.moveFocus(1);},\n      PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},\n      PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},\n      Home: function() {handle.setFocus(0);},\n      End: function() {handle.setFocus(handle.length - 1);},\n      Enter: handle.pick,\n      Tab: handle.pick,\n      Esc: handle.close\n    };\n    var custom = completion.options.customKeys;\n    var ourMap = custom ? {} : baseMap;\n    function addBinding(key, val) {\n      var bound;\n      if (typeof val != \"string\")\n        bound = function(cm) { return val(cm, handle); };\n      // This mechanism is deprecated\n      else if (baseMap.hasOwnProperty(val))\n        bound = baseMap[val];\n      else\n        bound = val;\n      ourMap[key] = bound;\n    }\n    if (custom)\n      for (var key in custom) if (custom.hasOwnProperty(key))\n        addBinding(key, custom[key]);\n    var extra = completion.options.extraKeys;\n    if (extra)\n      for (var key in extra) if (extra.hasOwnProperty(key))\n        addBinding(key, extra[key]);\n    return ourMap;\n  }\n\n  function getHintElement(hintsElement, el) {\n    while (el && el != hintsElement) {\n      if (el.nodeName.toUpperCase() === \"LI\" && el.parentNode == hintsElement) return el;\n      el = el.parentNode;\n    }\n  }\n\n  function Widget(completion, data) {\n    this.completion = completion;\n    this.data = data;\n    this.picked = false;\n    var widget = this, cm = completion.cm;\n\n    var hints = this.hints = document.createElement(\"ul\");\n    hints.className = \"CodeMirror-hints\";\n    this.selectedHint = data.selectedHint || 0;\n\n    var completions = data.list;\n    for (var i = 0; i < completions.length; ++i) {\n      var elt = hints.appendChild(document.createElement(\"li\")), cur = completions[i];\n      var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? \"\" : \" \" + ACTIVE_HINT_ELEMENT_CLASS);\n      if (cur.className != null) className = cur.className + \" \" + className;\n      elt.className = className;\n      if (cur.render) cur.render(elt, data, cur);\n      else elt.appendChild(document.createTextNode(cur.displayText || getText(cur)));\n      elt.hintId = i;\n    }\n\n    var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);\n    var left = pos.left, top = pos.bottom, below = true;\n    hints.style.left = left + \"px\";\n    hints.style.top = top + \"px\";\n    // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.\n    var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);\n    var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);\n    (completion.options.container || document.body).appendChild(hints);\n    var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;\n    if (overlapY > 0) {\n      var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);\n      if (curTop - height > 0) { // Fits above cursor\n        hints.style.top = (top = pos.top - height) + \"px\";\n        below = false;\n      } else if (height > winH) {\n        hints.style.height = (winH - 5) + \"px\";\n        hints.style.top = (top = pos.bottom - box.top) + \"px\";\n        var cursor = cm.getCursor();\n        if (data.from.ch != cursor.ch) {\n          pos = cm.cursorCoords(cursor);\n          hints.style.left = (left = pos.left) + \"px\";\n          box = hints.getBoundingClientRect();\n        }\n      }\n    }\n    var overlapX = box.right - winW;\n    if (overlapX > 0) {\n      if (box.right - box.left > winW) {\n        hints.style.width = (winW - 5) + \"px\";\n        overlapX -= (box.right - box.left) - winW;\n      }\n      hints.style.left = (left = pos.left - overlapX) + \"px\";\n    }\n\n    cm.addKeyMap(this.keyMap = buildKeyMap(completion, {\n      moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },\n      setFocus: function(n) { widget.changeActive(n); },\n      menuSize: function() { return widget.screenAmount(); },\n      length: completions.length,\n      close: function() { completion.close(); },\n      pick: function() { widget.pick(); },\n      data: data\n    }));\n\n    if (completion.options.closeOnUnfocus) {\n      var closingOnBlur;\n      cm.on(\"blur\", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });\n      cm.on(\"focus\", this.onFocus = function() { clearTimeout(closingOnBlur); });\n    }\n\n    var startScroll = cm.getScrollInfo();\n    cm.on(\"scroll\", this.onScroll = function() {\n      var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();\n      var newTop = top + startScroll.top - curScroll.top;\n      var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop);\n      if (!below) point += hints.offsetHeight;\n      if (point <= editor.top || point >= editor.bottom) return completion.close();\n      hints.style.top = newTop + \"px\";\n      hints.style.left = (left + startScroll.left - curScroll.left) + \"px\";\n    });\n\n    CodeMirror.on(hints, \"dblclick\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}\n    });\n\n    CodeMirror.on(hints, \"click\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {\n        widget.changeActive(t.hintId);\n        if (completion.options.completeOnSingleClick) widget.pick();\n      }\n    });\n\n    CodeMirror.on(hints, \"mousedown\", function() {\n      setTimeout(function(){cm.focus();}, 20);\n    });\n\n    CodeMirror.signal(data, \"select\", completions[0], hints.firstChild);\n    return true;\n  }\n\n  Widget.prototype = {\n    close: function() {\n      if (this.completion.widget != this) return;\n      this.completion.widget = null;\n      this.hints.parentNode.removeChild(this.hints);\n      this.completion.cm.removeKeyMap(this.keyMap);\n\n      var cm = this.completion.cm;\n      if (this.completion.options.closeOnUnfocus) {\n        cm.off(\"blur\", this.onBlur);\n        cm.off(\"focus\", this.onFocus);\n      }\n      cm.off(\"scroll\", this.onScroll);\n    },\n\n    disable: function() {\n      this.completion.cm.removeKeyMap(this.keyMap);\n      var widget = this;\n      this.keyMap = {Enter: function() { widget.picked = true; }};\n      this.completion.cm.addKeyMap(this.keyMap);\n    },\n\n    pick: function() {\n      this.completion.pick(this.data, this.selectedHint);\n    },\n\n    changeActive: function(i, avoidWrap) {\n      if (i >= this.data.list.length)\n        i = avoidWrap ? this.data.list.length - 1 : 0;\n      else if (i < 0)\n        i = avoidWrap ? 0  : this.data.list.length - 1;\n      if (this.selectedHint == i) return;\n      var node = this.hints.childNodes[this.selectedHint];\n      node.className = node.className.replace(\" \" + ACTIVE_HINT_ELEMENT_CLASS, \"\");\n      node = this.hints.childNodes[this.selectedHint = i];\n      node.className += \" \" + ACTIVE_HINT_ELEMENT_CLASS;\n      if (node.offsetTop < this.hints.scrollTop)\n        this.hints.scrollTop = node.offsetTop - 3;\n      else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)\n        this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;\n      CodeMirror.signal(this.data, \"select\", this.data.list[this.selectedHint], node);\n    },\n\n    screenAmount: function() {\n      return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;\n    }\n  };\n\n  function applicableHelpers(cm, helpers) {\n    if (!cm.somethingSelected()) return helpers\n    var result = []\n    for (var i = 0; i < helpers.length; i++)\n      if (helpers[i].supportsSelection) result.push(helpers[i])\n    return result\n  }\n\n  function fetchHints(hint, cm, options, callback) {\n    if (hint.async) {\n      hint(cm, callback, options)\n    } else {\n      var result = hint(cm, options)\n      if (result && result.then) result.then(callback)\n      else callback(result)\n    }\n  }\n\n  function resolveAutoHints(cm, pos) {\n    var helpers = cm.getHelpers(pos, \"hint\"), words\n    if (helpers.length) {\n      var resolved = function(cm, callback, options) {\n        var app = applicableHelpers(cm, helpers);\n        function run(i) {\n          if (i == app.length) return callback(null)\n          fetchHints(app[i], cm, options, function(result) {\n            if (result && result.list.length > 0) callback(result)\n            else run(i + 1)\n          })\n        }\n        run(0)\n      }\n      resolved.async = true\n      resolved.supportsSelection = true\n      return resolved\n    } else if (words = cm.getHelper(cm.getCursor(), \"hintWords\")) {\n      return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }\n    } else if (CodeMirror.hint.anyword) {\n      return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }\n    } else {\n      return function() {}\n    }\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"auto\", {\n    resolve: resolveAutoHints\n  });\n\n  CodeMirror.registerHelper(\"hint\", \"fromList\", function(cm, options) {\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur);\n    var to = CodeMirror.Pos(cur.line, token.end);\n    if (token.string && /\\w/.test(token.string[token.string.length - 1])) {\n      var term = token.string, from = CodeMirror.Pos(cur.line, token.start);\n    } else {\n      var term = \"\", from = to;\n    }\n    var found = [];\n    for (var i = 0; i < options.words.length; i++) {\n      var word = options.words[i];\n      if (word.slice(0, term.length) == term)\n        found.push(word);\n    }\n\n    if (found.length) return {list: found, from: from, to: to};\n  });\n\n  CodeMirror.commands.autocomplete = CodeMirror.showHint;\n\n  var defaultOptions = {\n    hint: CodeMirror.hint.auto,\n    completeSingle: true,\n    alignWithWord: true,\n    closeCharacters: /[\\s()\\[\\]{};:>,]/,\n    closeOnUnfocus: true,\n    completeOnSingleClick: true,\n    container: null,\n    customKeys: null,\n    extraKeys: null\n  };\n\n  CodeMirror.defineOption(\"hintOptions\", null);\n});\n"
  },
  {
    "path": "js/show-hint2.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var HINT_ELEMENT_CLASS        = \"CodeMirror-hint\";\n  var ACTIVE_HINT_ELEMENT_CLASS = \"CodeMirror-hint-active\";\n\n  // This is the old interface, kept around for now to stay\n  // backwards-compatible.\n  CodeMirror.showHint = function(cm, getHints, options) {\n    if (!getHints) return cm.showHint(options);\n    if (options && options.async) getHints.async = true;\n    var newOpts = {hint: getHints};\n    if (options) for (var prop in options) newOpts[prop] = options[prop];\n    return cm.showHint(newOpts);\n  };\n\n  CodeMirror.defineExtension(\"showHint\", function(options) {\n    options = parseOptions(this, this.getCursor(\"start\"), options);\n    var selections = this.listSelections()\n    if (selections.length > 1) return;\n    // By default, don't allow completion when something is selected.\n    // A hint function can have a `supportsSelection` property to\n    // indicate that it can handle selections.\n    if (this.somethingSelected()) {\n      if (!options.hint.supportsSelection) return;\n      // Don't try with cross-line selections\n      for (var i = 0; i < selections.length; i++)\n        if (selections[i].head.line != selections[i].anchor.line) return;\n    }\n\n    if (this.state.completionActive) {\n      this.state.completionActive.close();\n    }\n    var completion = this.state.completionActive = new Completion(this, options);\n    if (!completion.options.hint) return;\n\n    CodeMirror.signal(this, \"startCompletion\", this);\n    completion.update(true);\n  });\n\n  function Completion(cm, options) {\n    this.cm = cm;\n    this.options = options;\n    this.widget = null;\n    this.debounce = 0;\n    this.tick = 0;\n    this.startPos = this.cm.getCursor(\"start\");\n    this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;\n\n    var self = this;\n    cm.on(\"cursorActivity\", this.activityFunc = function() { self.cursorActivity(); });\n  }\n\n  var requestAnimationFrame = window.requestAnimationFrame || function(fn) {\n    return setTimeout(fn, 1000/60);\n  };\n  var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;\n\n  Completion.prototype = {\n    close: function() {\n      if (!this.active()) return;\n      this.cm.state.completionActive = null;\n      this.tick = null;\n      this.cm.off(\"cursorActivity\", this.activityFunc);\n\n      if (this.widget && this.data) CodeMirror.signal(this.data, \"close\");\n      if (this.widget) this.widget.close();\n      CodeMirror.signal(this.cm, \"endCompletion\", this.cm);\n    },\n\n    active: function() {\n      return this.cm.state.completionActive == this;\n    },\n\n    pick: function(data, i) {\n      var completion = data.list[i];\n      if (completion.hint) completion.hint(this.cm, data, completion);\n      else this.cm.replaceRange(getText(completion), completion.from || data.from,\n                                completion.to || data.to, \"complete\");\n      CodeMirror.signal(data, \"pick\", completion);\n      this.close();\n    },\n\n    cursorActivity: function() {\n      if (this.debounce) {\n        cancelAnimationFrame(this.debounce);\n        this.debounce = 0;\n      }\n\n      var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);\n      if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||\n          pos.ch < this.startPos.ch || this.cm.somethingSelected() ||\n          (pos.ch && this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {\n        this.close();\n      } else {\n        var self = this;\n        this.debounce = requestAnimationFrame(function() {self.update();});\n        if (this.widget) this.widget.disable();\n      }\n    },\n\n    update: function(first) {\n      if (this.tick == null) return\n      var self = this, myTick = ++this.tick\n      fetchHints(this.options.hint, this.cm, this.options, function(data) {\n        if (self.tick == myTick) self.finishUpdate(data, first)\n      })\n    },\n\n    finishUpdate: function(data, first) {\n      if (this.data) CodeMirror.signal(this.data, \"update\");\n\n      var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);\n      if (this.widget) {\n        this.widget.close();\n      }\n\n      if (data && this.data && isNewCompletion(this.data, data)) return;\n      this.data = data;\n\n      if (data && data.list.length) {\n        if (picked && data.list.length == 1) {\n          this.pick(data, 0);\n        } else {\n          this.widget = new Widget(this, data);\n          CodeMirror.signal(data, \"shown\");\n        }\n      }\n    }\n  };\n\n  function isNewCompletion(old, nw) {\n    var moved = CodeMirror.cmpPos(nw.from, old.from)\n    return moved > 0 && old.to.ch - old.from.ch != nw.to.ch - nw.from.ch\n  }\n\n  function parseOptions(cm, pos, options) {\n    var editor = cm.options.hintOptions;\n    var out = {};\n    for (var prop in defaultOptions) out[prop] = defaultOptions[prop];\n    if (editor) for (var prop in editor)\n      if (editor[prop] !== undefined) out[prop] = editor[prop];\n    if (options) for (var prop in options)\n      if (options[prop] !== undefined) out[prop] = options[prop];\n    if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)\n    return out;\n  }\n\n  function getText(completion) {\n    if (typeof completion == \"string\") return completion;\n    else return completion.text;\n  }\n\n  function buildKeyMap(completion, handle) {\n    var baseMap = {\n      Up: function() {handle.moveFocus(-1);},\n      Down: function() {handle.moveFocus(1);},\n      PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},\n      PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},\n      Home: function() {handle.setFocus(0);},\n      End: function() {handle.setFocus(handle.length - 1);},\n      Enter: handle.pick,\n      Tab: handle.pick,\n      Esc: handle.close\n    };\n    var custom = completion.options.customKeys;\n    var ourMap = custom ? {} : baseMap;\n    function addBinding(key, val) {\n      var bound;\n      if (typeof val != \"string\")\n        bound = function(cm) { return val(cm, handle); };\n      // This mechanism is deprecated\n      else if (baseMap.hasOwnProperty(val))\n        bound = baseMap[val];\n      else\n        bound = val;\n      ourMap[key] = bound;\n    }\n    if (custom)\n      for (var key in custom) if (custom.hasOwnProperty(key))\n        addBinding(key, custom[key]);\n    var extra = completion.options.extraKeys;\n    if (extra)\n      for (var key in extra) if (extra.hasOwnProperty(key))\n        addBinding(key, extra[key]);\n    return ourMap;\n  }\n\n  function getHintElement(hintsElement, el) {\n    while (el && el != hintsElement) {\n      if (el.nodeName.toUpperCase() === \"LI\" && el.parentNode == hintsElement) return el;\n      el = el.parentNode;\n    }\n  }\n\n  function Widget(completion, data) {\n    this.completion = completion;\n    this.data = data;\n    this.picked = false;\n    var widget = this, cm = completion.cm;\n\n    var hints = this.hints = document.createElement(\"ul\");\n    hints.className = \"CodeMirror-hints\";\n    this.selectedHint = data.selectedHint || 0;\n\n    var completions = data.list;\n    for (var i = 0; i < completions.length; ++i) {\n      var elt = hints.appendChild(document.createElement(\"li\")), cur = completions[i];\n      var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? \"\" : \" \" + ACTIVE_HINT_ELEMENT_CLASS);\n      if (cur.className != null) className = cur.className + \" \" + className;\n      elt.className = className;\n      if (cur.render) cur.render(elt, data, cur);\n      else elt.appendChild(document.createTextNode(cur.displayText || getText(cur)));\n      elt.hintId = i;\n    }\n\n    var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);\n    var left = pos.left, top = pos.bottom, below = true;\n    hints.style.left = left + \"px\";\n    hints.style.top = top + \"px\";\n    // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.\n    var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);\n    var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);\n    (completion.options.container || document.body).appendChild(hints);\n    var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;\n    var scrolls = hints.scrollHeight > hints.clientHeight + 1\n    var startScroll = cm.getScrollInfo();\n\n    if (overlapY > 0) {\n      var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);\n      if (curTop - height > 0) { // Fits above cursor\n        hints.style.top = (top = pos.top - height) + \"px\";\n        below = false;\n      } else if (height > winH) {\n        hints.style.height = (winH - 5) + \"px\";\n        hints.style.top = (top = pos.bottom - box.top) + \"px\";\n        var cursor = cm.getCursor();\n        if (data.from.ch != cursor.ch) {\n          pos = cm.cursorCoords(cursor);\n          hints.style.left = (left = pos.left) + \"px\";\n          box = hints.getBoundingClientRect();\n        }\n      }\n    }\n    var overlapX = box.right - winW;\n    if (overlapX > 0) {\n      if (box.right - box.left > winW) {\n        hints.style.width = (winW - 5) + \"px\";\n        overlapX -= (box.right - box.left) - winW;\n      }\n      hints.style.left = (left = pos.left - overlapX) + \"px\";\n    }\n    if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)\n      node.style.paddingRight = cm.display.nativeBarWidth + \"px\"\n\n    cm.addKeyMap(this.keyMap = buildKeyMap(completion, {\n      moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },\n      setFocus: function(n) { widget.changeActive(n); },\n      menuSize: function() { return widget.screenAmount(); },\n      length: completions.length,\n      close: function() { completion.close(); },\n      pick: function() { widget.pick(); },\n      data: data\n    }));\n\n    if (completion.options.closeOnUnfocus) {\n      var closingOnBlur;\n      cm.on(\"blur\", this.onBlur = function() {\n        closingOnBlur = setTimeout(function() {\n          completion.close();\n        }, 100);\n      });\n      cm.on(\"focus\", this.onFocus = function() { clearTimeout(closingOnBlur); });\n    }\n\n    cm.on(\"scroll\", this.onScroll = function() {\n      var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();\n      var newTop = top + startScroll.top - curScroll.top;\n      var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop);\n      if (!below) point += hints.offsetHeight;\n      if (point <= editor.top || point >= editor.bottom) {\n        return completion.close();\n      }\n      hints.style.top = newTop + \"px\";\n      hints.style.left = (left + startScroll.left - curScroll.left) + \"px\";\n    });\n\n    CodeMirror.on(hints, \"dblclick\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}\n    });\n\n    CodeMirror.on(hints, \"click\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {\n        widget.changeActive(t.hintId);\n        if (completion.options.completeOnSingleClick) widget.pick();\n      }\n    });\n\n    CodeMirror.on(hints, \"mousedown\", function() {\n      setTimeout(function(){cm.focus();}, 20);\n    });\n\n    CodeMirror.signal(data, \"select\", completions[0], hints.firstChild);\n    return true;\n  }\n\n  Widget.prototype = {\n    close: function() {\n      if (this.completion.widget != this) return;\n      this.completion.widget = null;\n      this.hints.parentNode.removeChild(this.hints);\n      this.completion.cm.removeKeyMap(this.keyMap);\n\n      var cm = this.completion.cm;\n      if (this.completion.options.closeOnUnfocus) {\n        cm.off(\"blur\", this.onBlur);\n        cm.off(\"focus\", this.onFocus);\n      }\n      cm.off(\"scroll\", this.onScroll);\n    },\n\n    disable: function() {\n      this.completion.cm.removeKeyMap(this.keyMap);\n      var widget = this;\n      this.keyMap = {Enter: function() { widget.picked = true; }};\n      this.completion.cm.addKeyMap(this.keyMap);\n    },\n\n    pick: function() {\n      this.completion.pick(this.data, this.selectedHint);\n    },\n\n    changeActive: function(i, avoidWrap) {\n      if (i >= this.data.list.length)\n        i = avoidWrap ? this.data.list.length - 1 : 0;\n      else if (i < 0)\n        i = avoidWrap ? 0  : this.data.list.length - 1;\n      if (this.selectedHint == i) return;\n      var node = this.hints.childNodes[this.selectedHint];\n      node.className = node.className.replace(\" \" + ACTIVE_HINT_ELEMENT_CLASS, \"\");\n      node = this.hints.childNodes[this.selectedHint = i];\n      node.className += \" \" + ACTIVE_HINT_ELEMENT_CLASS;\n      if (node.offsetTop < this.hints.scrollTop)\n        this.hints.scrollTop = node.offsetTop - 3;\n      else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)\n        this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;\n      CodeMirror.signal(this.data, \"select\", this.data.list[this.selectedHint], node);\n    },\n\n    screenAmount: function() {\n      return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;\n    }\n  };\n\n  function applicableHelpers(cm, helpers) {\n    if (!cm.somethingSelected()) return helpers\n    var result = []\n    for (var i = 0; i < helpers.length; i++)\n      if (helpers[i].supportsSelection) result.push(helpers[i])\n    return result\n  }\n\n  function fetchHints(hint, cm, options, callback) {\n    if (hint.async) {\n      hint(cm, callback, options)\n    } else if (options.async) {\n        hint(cm, callback, options); // Added by Magnus !\n    } else {\n      var result = hint(cm, options)\n      if (result && result.then) result.then(callback)\n      else callback(result)\n    }\n  }\n\n  function resolveAutoHints(cm, pos) {\n    var helpers = cm.getHelpers(pos, \"hint\"), words\n    if (helpers.length) {\n      var resolved = function(cm, callback, options) {\n        var app = applicableHelpers(cm, helpers);\n        function run(i) {\n          if (i == app.length) return callback(null)\n          fetchHints(app[i], cm, options, function(result) {\n            if (result && result.list.length > 0) callback(result)\n            else run(i + 1)\n          })\n        }\n        run(0)\n      }\n      resolved.async = true\n      resolved.supportsSelection = true\n      return resolved\n    } else if (words = cm.getHelper(cm.getCursor(), \"hintWords\")) {\n      return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }\n    } else if (CodeMirror.hint.anyword) {\n      return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }\n    } else {\n      return function() {}\n    }\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"auto\", {\n    resolve: resolveAutoHints\n  });\n\n  CodeMirror.registerHelper(\"hint\", \"fromList\", function(cm, options) {\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur);\n    var to = CodeMirror.Pos(cur.line, token.end);\n    if (token.string && /\\w/.test(token.string[token.string.length - 1])) {\n      var term = token.string, from = CodeMirror.Pos(cur.line, token.start);\n    } else {\n      var term = \"\", from = to;\n    }\n    var found = [];\n    for (var i = 0; i < options.words.length; i++) {\n      var word = options.words[i];\n      if (word.slice(0, term.length) == term)\n        found.push(word);\n    }\n\n    if (found.length) return {list: found, from: from, to: to};\n  });\n\n  CodeMirror.commands.autocomplete = CodeMirror.showHint;\n\n  var defaultOptions = {\n    hint: CodeMirror.hint.auto,\n    completeSingle: true,\n    alignWithWord: true,\n    closeCharacters: /[\\s()\\[\\]{};:>,]/,\n    closeOnUnfocus: true,\n    completeOnSingleClick: true,\n    container: null,\n    customKeys: null,\n    extraKeys: null\n  };\n\n  CodeMirror.defineOption(\"hintOptions\", null);\n});\n"
  },
  {
    "path": "mode/elm.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n\n\n  CodeMirror.defineMode(\"elm\", function() {\n\n    function switchState(source, setState, f) {\n      setState(f);\n      return f(source, setState);\n    }\n\n    // These should all be Unicode extended, as per the Haskell 2010 report\n    var smallRE = /[a-z_]/;\n    var largeRE = /[A-Z]/;\n    var digitRE = /[0-9]/;\n    var hexitRE = /[0-9A-Fa-f]/;\n    var octitRE = /[0-7]/;\n    var idRE = /[a-z_A-Z0-9\\']/;\n    var symbolRE = /[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]/;\n    var specialRE = /[(),;[\\]`{}]/;\n    var whiteCharRE = /[ \\t\\v\\f]/; // newlines are handled in tokenizer\n\n    function normal() {\n      return function (source, setState) {\n        if (source.eatWhile(whiteCharRE)) {\n          return null;\n        }\n\n        var ch = source.next();\n        if (specialRE.test(ch)) {\n          if (ch == '{' && source.eat('-')) {\n            var t = \"comment\";\n            if (source.eat('#')) t = \"meta\";\n            return switchState(source, setState, ncomment(t, 1));\n          }\n          return null;\n        }\n\n        if (ch == '\\'') {\n          if (source.eat('\\\\'))\n            source.next();  // should handle other escapes here\n          else\n            source.next();\n\n          if (source.eat('\\''))\n            return \"string\";\n          return \"string\"; //  \"error\";\n        }\n\n        if (ch == '\"') {\n          if(source.match('\"\"')) {\n            return switchState(source, setState, nstring(1));\n          } else {\n            return switchState(source, setState, stringLiteral);\n          }\n        }\n\n        if (largeRE.test(ch)) {\n          source.eatWhile(idRE);\n          if (source.eat('.'))\n            return \"qualifier\";\n          return \"variable-2\";\n        }\n\n        if (smallRE.test(ch)) {\n          var isDef = source.pos === 1;\n          source.eatWhile(idRE);\n          return isDef ? \"def\" : \"variable\";\n        }\n\n        if (digitRE.test(ch)) {\n          if (ch == '0') {\n            if (source.eat(/[xX]/)) {\n              source.eatWhile(hexitRE); // should require at least 1\n              return \"integer\";\n            }\n            if (source.eat(/[oO]/)) {\n              source.eatWhile(octitRE); // should require at least 1\n              return \"number\";\n            }\n          }\n          source.eatWhile(digitRE);\n          var t = \"number\";\n          if (source.eat('.')) {\n            t = \"number\";\n            source.eatWhile(digitRE); // should require at least 1\n          }\n          if (source.eat(/[eE]/)) {\n            t = \"number\";\n            source.eat(/[-+]/);\n            source.eatWhile(digitRE); // should require at least 1\n          }\n          return t;\n        }\n\n        if (symbolRE.test(ch)) {\n          if (ch == '-' && source.eat(/-/)) {\n            source.eatWhile(/-/);\n            if (!source.eat(symbolRE)) {\n              source.skipToEnd();\n              return \"comment\";\n            }\n          }\n          source.eatWhile(symbolRE);\n          return \"builtin\";\n        }\n\n        return \"error\";\n      }\n    }\n\n    function ncomment(type, nest) {\n      if (nest === 0) {\n        return normal();\n      }\n      return function(source, setState) {\n        var currNest = nest;\n        while (!source.eol()) {\n          var ch = source.next();\n          if (ch == '{' && source.eat('-')) {\n            ++currNest;\n          } else if (ch == '-' && source.eat('}')) {\n            --currNest;\n            if (currNest === 0) {\n              setState(normal());\n              return type;\n            }\n          }\n        }\n        setState(ncomment(type, currNest));\n        return type;\n      }\n    }\n\n    function nstring(nest) {\n      if (nest == 0) {\n        return normal();\n      }\n      return function(source, setState) {\n        var currNest = nest;\n        while (!source.eol()) {\n          var ch = source.next();\n          if(ch == '\"' && source.match('\"\"')) {\n            --currNest\n            if(currNest == 0) {\n              setState(normal());\n              return \"string\";\n            }\n          }\n        }\n        setState(nstring(currNest));\n        return \"string\";\n      }\n    }\n\n\n\n    function stringLiteral(source, setState) {\n      while (!source.eol()) {\n        var ch = source.next();\n        if (ch == '\"') {\n          setState(normal());\n          return \"string\";\n        }\n        if (ch == '\\\\') {\n          if (source.eol() || source.eat(whiteCharRE)) {\n            setState(stringGap);\n            return \"string\";\n          }\n          if (!source.eat('&')) source.next(); // should handle other escapes here\n        }\n      }\n      setState(normal());\n      return \"string\"; //  \"error\";\n    }\n\n    function stringGap(source, setState) {\n      if (source.eat('\\\\')) {\n        return switchState(source, setState, stringLiteral);\n      }\n      source.next();\n      setState(normal());\n      return \"string\"; //\"error\";\n    }\n\n\n    var wellKnownWords = (function() {\n      var wkw = {};\n\n      var keywords = [\n        \"case\", \"of\", \"as\",\n        \"if\", \"then\", \"else\",\n        \"let\", \"in\",\n        \"infix\", \"infixl\", \"infixr\",\n        \"type\", \"alias\",\n        \"foreign\", \"port\", \"effect\",\n        \"module\", \"where\", \"import\", \"exposing\",\n        \"_\", \"..\", \"|\", \":\", \"=\", \"\\\\\",  \"->\", \"<-\"  // \"\\\"\",\n      ];\n\n      for (var i = keywords.length; i--;)\n        wkw[keywords[i]] = \"keyword\";\n\n      return wkw;\n    })();\n\n\n\n    return {\n      startState: function ()  { return { f: normal() }; },\n      copyState:  function (s) { return { f: s.f }; },\n\n      token: function(stream, state) {\n        var t = state.f(stream, function(s) { state.f = s; });\n        var w = stream.current();\n        return (wellKnownWords.hasOwnProperty(w)) ? wellKnownWords[w] : t;\n      },\n      lineComment: \"--\",\n      blockCommentStart: \"{-\",\n      blockCommentEnd: \"-}\",\n      fold: \"indent\"\n    };\n\n  });\n\n  CodeMirror.defineMIME(\"text/x-elm\", \"elm\");\n});\n"
  },
  {
    "path": "node/elm-client.js",
    "content": "var path = require(\"path\");\nvar fs = require(\"fs\");\nvar net = require(\"net\");\nvar psTree = require(\"ps-tree\");\nvar cp = require(\"child_process\");\nvar wrench = require(\"wrench\");\nvar os = require(\"os\");\nvar chokidar = require(\"chokidar\")\nvar walker = require('fs-walk');\nvar temp = require(\"temp\").track();\nvar spawn = require('cross-spawn');\n\nvar elmParser = require(\"./elmparser\");\n\n\n\n\nprocess.setMaxListeners(100);\n\n\nvar elmGlobals = {\n  repl: null,\n  reactor: null,\n  watcher: null\n};\n\n\n/* Some polyfills */\nif (!String.prototype.endsWith) {\n  String.prototype.endsWith = function(searchString, position) {\n      var subjectString = this.toString();\n      if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n        position = subjectString.length;\n      }\n      position -= searchString.length;\n      var lastIndex = subjectString.lastIndexOf(searchString, position);\n      return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\n\n\n/* ----------- START CLIENT / BOOTSTRAP --------- */\n\n\n// Not much useful can be done without packages, might as well try to insall by default\n// If already installed the overhead is neglible\n// Also elm-repl will delete elm-stuff on exit if not created before it's started !\ndoPackageInstall();\n\n\n\n\n// Start parsing as early as possible\nstartWatcher();\nparseSourceFiles();\nparseAllPackageSources();\n\nstartRepl(\n  function (err) {\n    console.error(err);\n    handleClose();\n  },\n  function (out) {\n    elmGlobals.repl.stdout.removeAllListeners(\"data\");\n    elmGlobals.repl.stderr.removeAllListeners(\"data\");\n    startReactor(\n      function (err) {\n        console.error (err);\n        handleClose();\n      },\n      function (out) {\n        elmGlobals.reactor.stderr.removeAllListeners(\"data\");\n        elmGlobals.reactor.stdout.removeAllListeners(\"data\");\n        startMessageListener();\n\n      },\n      process.cwd(),\n      parseInt(process.argv[2])\n    );\n  },\n  process.cwd()\n);\n\n\nfunction doPackageInstall() {\n  try {\n    cp.execSync(\"elm-package install --yes\", {cwd: process.cwd()});\n  } catch (e) {\n    console.error(\"Error running package install\" + e);\n  }\n}\n\n\n\nfunction startRepl(error, success, projectPath) {\n  elmGlobals.repl = spawn(\"elm-repl\", [\"--interpreter\", process.execPath ], {cwd: projectPath});\n\n  var outBuffer = \"\";\n  elmGlobals.repl.stdout.on(\"data\", function(out) {\n    outBuffer += out;\n    if(outBuffer.indexOf(\":help\") > -1) {\n      success(outBuffer);\n    }\n  });\n  elmGlobals.repl.stderr.on(\"data\", function(err) {\n    error(err.toString());\n  });\n\n  elmGlobals.repl.on(\"error\", function(err) {\n    console.log(\"error starting repl\");\n    console.log(err);\n  });\n\n}\n\nfunction startReactor(error, success, projectPath, port) {\n  elmGlobals.reactor = spawn(\"elm-reactor\", [\"--port=\" + port], {cwd: projectPath});\n\n  var errBuff = \"\";\n  elmGlobals.reactor.stdout.on(\"data\", function(out) {\n    console.log(\"Reactor out: \" + out);\n  });\n  elmGlobals.reactor.stderr.on(\"data\", function(err) {\n    errBuff += err;\n    if(errBuff.indexOf(\"Listening\") > -1) {\n      success(errBuff);\n    }\n    if(errBuff.indexOf(\"Error on startup\") > -1) {\n      error(errBuff);\n    }\n  });\n  elmGlobals.reactor.on(\"error\", function(err) {\n    console.error(\"Reactor err event: \" + err);\n  });\n}\n\n\n\nfunction startMessageListener() {\n  send([1, \"elm.client.connected\", []]); // notify lt we`re ready to receive messages\n\n  process.on(\"message\", function (msg) {\n    var cb   = msg.cb;\n    var cmd  = msg.command;\n    var data = msg.data;\n\n    try {\n      switch (cmd) {\n        case \"client.close\":\n          handleClose();\n          break;\n        case \"editor.elm.ast.passthrough\":\n          handleAstPassThrough(cb, data);\n          break;\n        case \"elm.reload.ast\":\n          handleReloadAst(cb);\n          break;\n        case \"editor.elm.ast.parsetext\":\n          handleParseEditorText(cb, data);\n          break;\n        case \"editor.elm.lint\":\n          handleLint(cb, data);\n          break;\n        case \"editor.elm.make\":\n          handleMake(cb, data);\n          break;\n        case \"editor.elm.gendoc\":\n          handleGendoc(cb, data);\n          break;\n        case \"editor.eval.elm\":\n          handleEval(cb, data);\n          break;\n        case \"elm.repl.restart\":\n          handleReplRestart(cb);\n          break;\n        case \"docs.elm.search\":\n          handleDocsSearch(cb, data);\n          break;\n        case \"elm.test\":\n          handleTest(cb, data);\n          break;\n        case \"elm.test.suite\":\n          handleTestSuite(cb, data);\n          break;\n\n\n      }\n    } catch (ex) {\n      console.error(\"Error in elm client message listener for command: \" + cmd);\n      console.error(ex);\n      handleClose();\n    }\n  });\n}\n\n\nfunction startWatcher() {\n  var watcher = chokidar.watch(['elm-package.json',\n                                'elm-stuff/exact-dependencies.json',\n                                '**/*.elm'], {\n    cwd: process.cwd(),\n    persistent: true,\n    ignoreInitial: false,\n    //ignored: ['elm-stuff/**'], // need to find a robust way to handle these !\n    followSymlinks: false,\n    atomic: false\n  });\n\n\n  /* concers to handle\n  - Package deleted -> Just report a delete event (on .elm files)  and let client deal with it.\n  - Package added -> Only listen for moved directory under elm-stuff, parse package.json and only parse src directories for that package\n  - if not under elm-stuff, check if source file (remember to use latest elm-package.json)\n  - if source file and event moved, need to stat if file is present or not to decide if add or remove !\n  - On directory move stat if exists to notify of directory delete or directory add (on add parse all elm files... not very efficient though)\n  */\n\n  watcher.on(\"raw\", function(event, file, details) {\n    var relFile = file ? path.relative(process.cwd(), file) : null;\n    var sourceDirs = getSourceDirs(process.cwd());\n\n\n    // chokidar or whatever it's using underneath seems to get this wrong.\n    if (file && event === \"modified\" && !fileExists(file)) {\n      return;  // phony change event when\n    }\n\n\n    if(relFile === \"elm-stuff/exact-dependencies.json\") {\n      if ( event === \"modified\") {\n        parseAllPackageSources();\n      }\n      if (event === \"deleted\" && !fileExists(file)) {\n        sendAstMsg({\n          type: \"packagesDeleted\"\n        });\n      }\n    }\n\n\n    if (file && isSourceFile(sourceDirs, file) && event === \"modified\") {\n      parseAndSend(file);\n    }\n\n    if (file && isSourceFile(sourceDirs, file) && event === \"deleted\") {\n      sendAstMsg({\n        file: file,\n        type: \"deleted\"\n      });\n    }\n\n    if (file && isSourceFile(sourceDirs, file)\n        && event === \"moved\") {\n      if(fileExists(file)) {\n        parseAndSend(file);\n      } else {\n        sendAstMsg({\n          file: file,\n          type: \"deleted\"\n        });\n      }\n    }\n  });\n\n\n  elmGlobals.watcher = watcher;\n\n}\n\nfunction parseSourceFiles() {\n  var sourceDirs = getSourceDirs(process.cwd());\n\n  sourceDirs.forEach(function (d) {\n    walker.files(path.join(process.cwd(), d), function (basedir, filename, stat, next) {\n      if (path.extname(filename) === \".elm\" &&\n         !(basedir.startsWith(path.join(process.cwd(), \"elm-stuff\"))) &&\n         !(basedir.startsWith(path.join(process.cwd(), \"test\")))\n         //(basedir.toString().indexOf(\"elm-stuff\") === -1)\n         ) {\n        parseAndSend(path.join(basedir, filename));\n      }\n      next();\n    });\n  });\n}\n\nfunction parseAllPackageSources() {\n  var deps = getProjectDeps(process.cwd());\n  deps.forEach(function (dep) {\n    var packageDir = path.join(process.cwd(), \"elm-stuff/packages\", dep.name, dep.version);\n    parsePackageSources({\n      packageDir: packageDir,\n      name: dep.name,\n      version: dep.version\n    });\n  });\n}\n\nfunction parsePackageSources(package) {\n  var sourceDirs = getSourceDirs(package.packageDir);\n\n  sourceDirs.forEach(function (d) {\n    walker.files(path.join(package.packageDir, d), function (basedir, filename, stat, next) {\n      if (path.extname(filename) === \".elm\") {\n        parseAndSendPackageSource(package, path.join(basedir, filename));\n      }\n      next();\n    });\n  });\n}\n\n\nfunction getProjectDeps(projectDir) {\n  var packages = [];\n  try {\n    var depsPath = path.join(projectDir, \"elm-stuff/exact-dependencies.json\");\n    var deps = JSON.parse(fs.readFileSync(depsPath).toString());\n    var packageJsonPath = path.join(projectDir, \"elm-package.json\");\n    var packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());\n    var exposedPackages = Object.keys(packageJson[\"dependencies\"]);\n\n    packages =\n      Object.keys(deps).map(function(packageName) {\n      return {\n        name: packageName,\n        version: deps[packageName]\n      };\n    }).filter(function(pck) {\n      return exposedPackages.indexOf(pck.name) > -1;\n    });\n\n\n  } catch (e) {\n    console.log(\"Failed to get projectDeps: \" + e.toString());\n  }\n  return packages;\n}\n\n\n\n\nfunction parseAndSend(file) {\n\n  try {\n    var code = fs.readFileSync(file).toString();\n    var start = new Date().getTime();\n\n    if (code.length > 0) {\n      var ast = elmParser.parse(code);\n      // console.log(\"Parsed sourcefile (\" + ((new Date().getTime()) - start)  + \" ms) - \" + file );\n\n      sendAstMsg({\n        file: file,\n        type: \"parsed\",\n        ast: ast\n      });\n    }\n\n  } catch (e) {\n    sendAstMsg({\n      file: file,\n      type: \"parseError\",\n      error: e\n    });\n  }\n}\n\nfunction parseAndSendPackageSource(package, file) {\n  try {\n    var exposedModules = getExposedModules(package.packageDir);\n\n    var shouldParse = exposedModules.map (function (mod) {\n      return mod.replace(/\\./g, path.sep) + \".elm\";\n    }).find(function (v) {\n      return file.endsWith(v);\n    });\n\n\n    if(shouldParse) {\n      var ast = elmParser.parse(fs.readFileSync(file).toString());\n      sendAstMsg({\n        file: file,\n        type: \"parsed\",\n        ast: ast,\n        package: package\n      });\n    }\n\n  } catch(e) {\n    console.error(\"ERROR parsing package source: \" + file + \"\\n\" + e.toString());\n  }\n}\n\n\n\n\nfunction sendAstMsg(msg) {\n  send([1, \"elm.ast.update\", msg]);\n}\n\n\nfunction getSourceDirs (projectDir) {\n  var jsonPath = path.join(projectDir, \"elm-package.json\");\n\n  var sourceDirs = [];\n  try {\n    var json = JSON.parse(fs.readFileSync(jsonPath).toString());\n    sourceDirs = json[\"source-directories\"];\n\n  } catch(e) {\n    console.error(\"ERROR getting sourcedirs for: \" + jsonPath + \"\\n\" + e.toString());\n  }\n  return sourceDirs;\n}\n\nfunction getExposedModules (projectDir) {\n  var jsonPath = path.join(projectDir, \"elm-package.json\");\n\n  var modules = [];\n  try {\n    var json = JSON.parse(fs.readFileSync(jsonPath).toString());\n    modules = json[\"exposed-modules\"];\n\n  } catch(e) {\n    console.log(\"ERROR getting exposed modules for: \" + jsonPath + \"\\n\" + e.toString());\n  }\n  return modules;\n}\n\n\n\n\nfunction fileExists(file) {\n  var stat = null;\n  try {\n    stat = fs.statSync(file);\n  } catch (e) {}\n\n  return stat ? true : false;\n}\n\nfunction isSourceFile(sourceDirs, file) {\n  if (path.extname(file) !== \".elm\") {\n    return false;\n  }\n\n\n  var hits = sourceDirs.map(function(dir) {\n    return path.resolve(process.cwd(), dir);\n  }).filter(function (d) {\n    return file.startsWith(d);\n  });\n\n  return hits.length > 0;\n}\n\n\n\n\n/* ----------- HANDLER RELATED FUNCTIONS --------- */\n\n// For ast operations that executes right after connecting\n// NoOp, just passes back and trigger appropriate behavior\nfunction handleAstPassThrough(clientId, msg) {\n  send([clientId, msg.target, msg.data]);\n}\n\nfunction handleReloadAst(clientId) {\n  doPackageInstall();\n  parseSourceFiles();\n  parseAllPackageSources();\n  send([clientId, \"elm.ast.reload.started\", null]);\n}\n\nfunction handleParseEditorText(clientId, msg) {\n  try {\n    var start = new Date().getTime();\n    var ast = elmParser.parse(msg.code);\n    // console.log(\"Parsed editor contents in (\" + ((new Date().getTime()) - start)  + \" ms) \");\n    send([clientId, \"editor.elm.ast.parsetext.result\", {ast: ast}]);\n  } catch(e) {\n    send([clientId, \"editor.elm.ast.parsetext.result\", {error: e}]);\n  }\n\n}\n\n\n\nfunction handleReplRestart(clientId) {\n  elmGlobals.repl.stdout.removeAllListeners(\"data\");\n  elmGlobals.repl.stderr.removeAllListeners(\"data\");\n\n  elmGlobals.repl.kill();\n  startRepl(\n    function (err) {\n      console.error(err);\n      handleClose();\n    },\n    function (out) {\n      send([clientId, \"elm.repl.restart.res\", \"hopefully ok...\"]);\n    },\n\n    process.cwd()\n  );\n}\n\nfunction idxReplTerminator(x) {\n  return x.lastIndexOf(os.EOL + \">\");\n}\n\nfunction maybeRemoveLastLine (x) {\n  var idx = idxReplTerminator(x);\n\n  if( idx > -1) {\n    return x.substring(0, idx);\n  } else {\n    return x;\n  }\n}\n\n\n\nfunction stripReplNewLines(x) {\n  var arr = x.split(\" \");\n  var idx = arr.findIndex(function(v, i, a) { return v !== \"\" && v !== \"|\"; });\n  return idx > -1 ? arr.slice(idx).join(\" \") : \"\";\n}\n\n\n\nfunction handleEval(clientId, msg) {\n  var meta = msg.meta;\n\n  var errBuff = \"\";\n  var outBuff = \"\";\n\n  var onOut = function(data) {\n    if(errBuff.length > 0) {\n      send([clientId, \"editor.elm.eval.err\", {result: errBuff, meta: meta}]);\n      return;\n    }\n    outBuff += stripReplNewLines(data.toString());\n    if (outBuff.trim() === \">\") {\n      send([clientId, \"editor.elm.eval.res\", {result: \"✓\", meta: meta}]);\n      return;\n    }\n\n    var idx = idxReplTerminator(outBuff);\n    if (idx >= 0) {\n      var res = maybeRemoveLastLine(outBuff);\n      if (res.length > 0) {\n        send([clientId, \"editor.elm.eval.res\", {result: res, meta: meta}]);\n      } else {\n        send([clientId, \"editor.elm.eval.res\", {result: \"✓\", meta: meta}]);\n      }\n    }\n  };\n\n\n  var onErr = function(data) {\n    errBuff += data.toString();\n  };\n\n  elmGlobals.repl.stdout.removeAllListeners(\"data\");\n  elmGlobals.repl.stderr.removeAllListeners(\"data\");\n\n  elmGlobals.repl.stdout.on(\"data\", onOut);\n  elmGlobals.repl.stderr.on(\"data\", onErr);\n\n  elmGlobals.repl.stdin.write(msg.code.replace(/\\n/g, \"\\\\\\n\") + \"\\n\");\n}\n\n\n\n\nfunction parseMakeResults(data) {\n  var results =\n      data.split(\"\\n\")\n          .filter(function(s) { return s.indexOf(\"[{\") === 0;})\n          .map(function (item) { return JSON.parse(item); })\n  if (results.length > 0) {\n    results = results.reduce(function(a, b) {return a.concat(b);});\n  }\n  return results;\n}\n\nfunction send(msg) { process.send(msg); }\n\nfunction handleLint(clientId, msg) {\n  var res = spawn.sync(\"elm-make\",\n               [msg.path, \"--warn\", \"--yes\", \"--report=json\", \"--output=/dev/null\"],\n               {cwd: process.cwd()});\n\n\n  var err = res.output[2] + \"\";\n  if (err) {\n    send([clientId, \"elm.make.err\", err]);\n  } else {\n    var lintResults = parseMakeResults(res.output[1].toString());\n    send([clientId, msg.handler, lintResults]);\n  }\n}\n\nfunction lowerFirstLetter(str) {\n    return str.charAt(0).toLowerCase() + str.slice(1);\n}\n\n\n\nfunction inferOutputFile(filePath) {\n  var parsed = path.parse(filePath);\n  parsed.ext = \"js\";\n  parsed.base = lowerFirstLetter(parsed.name) + \".js\";\n  parsed.name = lowerFirstLetter(parsed.name);\n\n  return path.format(parsed);\n}\n\nfunction handleMake(clientId, msg) {\n  if(!msg.path) {\n    send([clientId, \"elm.make.res\", []]);\n    return;\n  }\n\n  var outputFile = msg.outputFile || inferOutputFile(msg.path);\n  var res = spawn.sync(\"elm-make\",\n               [msg.path, \"--warn\", \"--yes\", \"--report=json\", \"--output=\" + outputFile],\n               {cwd: process.cwd()});\n\n\n  var err = res.output[2] + \"\";\n  if (err.length > 1) {\n    send([clientId, \"elm.make.err\", err]);\n  } else {\n    var results = {\n      outputFile: outputFile,\n      res: parseMakeResults(res.output[1].toString())\n    };\n    send([clientId, \"elm.make.res\", results]);\n  }\n}\n\n\nfunction handleGendoc(clientId, msg) {\n  var res = spawn.sync(\"elm-make\",\n               [msg.path, \"--yes\", \"--docs=elm-stuff/docs.json\", \"--output=/dev/null\"],\n               {cwd: process.cwd()});\n\n  var err = res.output[2] + \"\";\n  if (err) {\n    send([clientId, \"elm.make.err\", err]);\n  } else {\n    var docFile = path.join(process.cwd(), \"elm-stuff\", \"docs.json\");\n    var docResults = fs.readFileSync(docFile, \"utf-8\");\n\n    //var docResults = res.output[1].toString();\n    send([clientId, \"elm.gendoc.res\", docResults]);\n  }\n}\n\n\n\nfunction handleDocsSearch(clientId, msg) {\n  // workaround, just pass the msg back, will perform search client side\n  send([clientId, \"doc.search.results\", msg])\n}\n\n\n\nfunction handleTest(clientId, msg) {\n  var elmTest =  cp.fork(\"/Users/mrundberget/projects/node-test-runner/bin/elm-test\",\n                         [msg.file, \"--report=json\"],\n                         {cwd: process.cwd(), silent: true});\n\n\n  elmTest.stdout.on(\"data\", function(out) {\n    //console.log(\"Test out: \" + out);\n    try {\n      var rawMessages = out.toString().split(\"\\n\").filter(function(s) { return s.indexOf(\"{\\\"event\") === 0;});\n      rawMessages.forEach (function (rawMessage) {\n        var testMsg = JSON.parse(rawMessage);\n        send([clientId, \"elm.test.result\", testMsg])\n      });\n    } catch (e) {\n      console.error(\"Error parsing: \" + out);\n      console.error(e);\n    }\n  });\n\n  elmTest.stderr.on(\"data\", function(err) {\n    console.error(\"Error stuff: \" + err)\n  });\n\n  elmTest.on(\"error\", function(err) {\n    console.log(\"Elm test error event: \");\n    console.log(err);\n  });\n\n  elmTest.on(\"exit\", function(exitCode) {\n    console.log(\"Exit test process with exitCode: \" + exitCode);\n  });\n}\n\n\nfunction handleTestSuite(clientId, msg) {\n\n  var testModuleName = msg.module;\n  var suite = msg.suite;\n  var suiteFile = path.join(process.cwd(), \"temp-\" + testModuleName + \".elm\");\n  var seed = msg.seed ? msg.seed : null;\n\n  var evalElmCode = function (compiledCode, finishedCb) {\n    var Elm = function(module) { eval(compiledCode); return module.exports; }({});\n    // TODO: hnndle case if Elm is undefined\n\n    var testModule = Elm[testModuleName];\n\n    // Apply Node polyfills as necessary.\n    var window = {Date: Date, addEventListener: function() {}, removeEventListener: function() {}};\n    var document = {body: {}, createTextNode: function() {}};\n    if (typeof XMLHttpRequest === 'undefined') { XMLHttpRequest = function() { return { addEventListener: function() {}, open: function() {}, send: function() {} }; }; }\n    if (typeof FormData === 'undefined') { FormData = function () { this._data = []; }; FormData.prototype.append = function () { this._data.push(Array.prototype.slice.call(arguments)); }; }\n\n\n    var app = testModule.worker({seed: seed, report: \"json\"});\n    app.ports.emit.subscribe(function(msg) {\n      var msgType = msg[0];\n      var data = msg[1];\n\n      send([clientId, \"elm.test.result\", data.message]);\n\n      if(msgType === \"FINISHED\") {\n        finishedCb()\n      }\n    });\n  };\n\n  var cleanUp = function() {\n    fs.unlink(suiteFile, function(err) {\n      if (err) {\n        console.error(\"Error deleting temp test suite file: \" + suiteFile + \" Error: \" + err);\n      }\n    });\n  };\n\n\n  fs.writeFileSync(suiteFile, suite, {encoding: \"utf8\"}); // TODO: Error handling\n  temp.open({prefix: 'elm_test_', suffix: '.js'}, function (err, info) {\n    var res = spawn.sync(\"elm-make\",\n               [suiteFile, \"--yes\", \"--output=\" + info.path],\n               {cwd: process.cwd()});\n\n    var err = res.output[2] + \"\";\n    if(err.length > 0) {\n      send([clientId, \"elm.test.error\", {category: \"compile\", message: err.toString()}])\n      console.error(\"Error from elm-make: \" + err);\n      cleanUp();\n    } else {\n      evalElmCode(fs.readFileSync(info.path, {encoding: \"utf8\"}), cleanUp);\n    }\n\n  });\n\n}\n\n\n\n/* Kill any externaly spawned children\n   Useful mostly for OS/X (reactor process)\n*/\nfunction killExternalChildren(pid, cb) {\n  var callback = cb || function () {};\n\n  psTree(pid, function (err, children) {\n    [pid].concat(\n      children.map(function (p) {\n        return p.PID;\n      })\n    ).forEach(function (tpid) {\n      try { process.kill(tpid, \"SIGKILL\") }\n      catch (ex) { }\n    });\n\n    callback();\n  });\n}\n\n\n\nfunction handleClose() {\n  if(elmGlobals.watcher) {\n    elmGlobals.watcher.close();\n  }\n\n  if(os.platform() !== \"darwin\") {\n    process.exit(0);\n  } else {\n    if (elmGlobals.reactor) {\n      killExternalChildren(elmGlobals.reactor.pid, null);\n      // Ugly, but couldn`t figure out a better way to ensure child killing completed before exit\n      setTimeout(function () {\n        process.exit(0);\n      }, 100);\n    } else {\n      process.exit(0);\n    }\n  }\n}\n\n\nprocess.on('uncaughtException', function(err) {\n  console.error(\"Unhandled error in elm-light project node process: \" + err);\n});\n\n\n\n\n//setTimeout(function() {handleClose();}, 30000);\n\n"
  },
  {
    "path": "node/elmparser.js",
    "content": "module.exports = (function() {\n  \"use strict\";\n\n  /*\n   * Generated by PEG.js 0.9.0.\n   *\n   * http://pegjs.org/\n   */\n\n  function peg$subclass(child, parent) {\n    function ctor() { this.constructor = child; }\n    ctor.prototype = parent.prototype;\n    child.prototype = new ctor();\n  }\n\n  function peg$SyntaxError(message, expected, found, location) {\n    this.message  = message;\n    this.expected = expected;\n    this.found    = found;\n    this.location = location;\n    this.name     = \"SyntaxError\";\n\n    if (typeof Error.captureStackTrace === \"function\") {\n      Error.captureStackTrace(this, peg$SyntaxError);\n    }\n  }\n\n  peg$subclass(peg$SyntaxError, Error);\n\n  function peg$parse(input) {\n    var options = arguments.length > 1 ? arguments[1] : {},\n        parser  = this,\n\n        peg$FAILED = {},\n\n        peg$startRuleFunctions = { start: peg$parsestart, headerOnly: peg$parseheaderOnly },\n        peg$startRuleFunction  = peg$parsestart,\n\n        peg$c0 = function(module) { return module; },\n        peg$c1 = function(declaration, d) { return d},\n        peg$c2 = function(declaration) {return null},\n        peg$c3 = function(declaration, moduleDoc, imports, toplevel) {\n\n\n              return {\n              \tmoduleDeclaration: declaration ? declaration[0] : null,\n                doc: moduleDoc,\n                imports: imports || [],\n                declarations: toplevel || []\n              }\n            },\n        peg$c4 = { type: \"any\", description: \"any character\" },\n        peg$c5 = function(declaration, moduleDoc, imports) {\n              \treturn {\n                  moduleDeclaration: declaration,\n                  doc: moduleDoc,\n                  imports: imports || []\n                }\n              },\n        peg$c6 = \"effect\",\n        peg$c7 = { type: \"literal\", value: \"effect\", description: \"\\\"effect\\\"\" },\n        peg$c8 = \"port\",\n        peg$c9 = { type: \"literal\", value: \"port\", description: \"\\\"port\\\"\" },\n        peg$c10 = function(type) { return type; },\n        peg$c11 = \"module\",\n        peg$c12 = { type: \"literal\", value: \"module\", description: \"\\\"module\\\"\" },\n        peg$c13 = function(type, name, exposing) {\n              return {\n                type: (type || \"\") + \" module\".trim(),\n                value: name,\n                exposing: exposing,\n                location: location()\n              };\n            },\n        peg$c14 = \"where\",\n        peg$c15 = { type: \"literal\", value: \"where\", description: \"\\\"where\\\"\" },\n        peg$c16 = \"{\",\n        peg$c17 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n        peg$c18 = \"}\",\n        peg$c19 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n        peg$c20 = function(first, imp) {return imp},\n        peg$c21 = function(first, rest) {\n              var imps = [first].concat(rest);\n              var start = first.location.start;\n              var end = imps[imps.length - 1].location.end;\n\n              return {\n                type: \"imports\",\n              \timports: imps,\n                location: {start: start, end: end}\n              }\n            },\n        peg$c22 = \"import\",\n        peg$c23 = { type: \"literal\", value: \"import\", description: \"\\\"import\\\"\" },\n        peg$c24 = \"as\",\n        peg$c25 = { type: \"literal\", value: \"as\", description: \"\\\"as\\\"\" },\n        peg$c26 = function(module, id) { return id},\n        peg$c27 = function(module, alias, exp) {return exp;},\n        peg$c28 = function(module, alias, exposing) {\n              return {\n              \ttype: \"import\",\n                value: module,\n                alias: alias,\n                exposing: exposing,\n                location: location()\n              };\n            },\n        peg$c29 = \"exposing\",\n        peg$c30 = { type: \"literal\", value: \"exposing\", description: \"\\\"exposing\\\"\" },\n        peg$c31 = \"(\",\n        peg$c32 = { type: \"literal\", value: \"(\", description: \"\\\"(\\\"\" },\n        peg$c33 = \")\",\n        peg$c34 = { type: \"literal\", value: \")\", description: \"\\\")\\\"\" },\n        peg$c35 = function(exports) {\n            \treturn {\n            \t\ttype: \"exposing\",\n                    exports: exports,\n                    location: location()\n                };\n            },\n        peg$c36 = \"..\",\n        peg$c37 = { type: \"literal\", value: \"..\", description: \"\\\"..\\\"\" },\n        peg$c38 = function() {\n              return {\n              \ttype: \"exports\",\n                exports:[{ type: \"exposeAll\"}],\n                location: location()\n              };\n            },\n        peg$c39 = \",\",\n        peg$c40 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n        peg$c41 = function(first, e) {return e},\n        peg$c42 = function(first, rest) {\n              return {\n              \ttype: \"exports\",\n                exports: [first].concat(rest),\n                location: location(),\n              }\n            },\n        peg$c43 = function(name, exps) {return exps;},\n        peg$c44 = function(name, subexps) {\n              return {\n              \ttype: \"adt\",\n                value: name,\n                exports: subexps\n              }\n            },\n        peg$c45 = function(expAll) {\n            \treturn expAll;\n            },\n        peg$c46 = function(first, s) {return s},\n        peg$c47 = function(first, rest) {\n            \treturn {\n                 type: \"exports\",\n                 exports: [first].concat(rest),\n                 location: location()\n                }\n            },\n        peg$c48 = function(name) {\n              return {\n              \ttype: \"adtsub\",\n                value: name\n              }\n            },\n        peg$c49 = function(doc, decl) {var retVal=decl; retVal[\"doc\"] = doc;  return retVal },\n        peg$c50 = function(first, doc, decl) {var retVal=decl; retVal[\"doc\"] = doc;  return retVal },\n        peg$c51 = function(first, rest) {\n            \treturn [first].concat(rest);\n            },\n        peg$c52 = function(decl) {\n              decl.location = location()\n              return decl;\n            },\n        peg$c53 = function(d) { return d},\n        peg$c54 = function() {return null},\n        peg$c55 = \"type\",\n        peg$c56 = { type: \"literal\", value: \"type\", description: \"\\\"type\\\"\" },\n        peg$c57 = \"alias\",\n        peg$c58 = { type: \"literal\", value: \"alias\", description: \"\\\"alias\\\"\" },\n        peg$c59 = function(name, p) {return p; },\n        peg$c60 = \"=\",\n        peg$c61 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n        peg$c62 = function(name, params, type) {\n              return {\n              \ttype: \"typeAliasDecl\",\n                value: name,\n                params: params,\n                tipe : type\n                //expr: exp\n              }\n            },\n        peg$c63 = function(name, params, type, tail) {\n              return {\n              \ttype: \"typeAliasDecl\",\n                value: name,\n                params: params,\n                tipe : {\n                  type : \"typeFun\",\n                  signature: [type].concat(tail.signature)\n                }\n              }\n            },\n        peg$c64 = function(name, params, adtDefs) {\n              return {\n              \ttype: \"typeDecl\",\n                value: name,\n                params: params,\n                adtDefs: adtDefs\n                //expr: expr\n              }\n            },\n        peg$c65 = \"|\",\n        peg$c66 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n        peg$c67 = function(first, a) {return a;},\n        peg$c68 = function(first, rest) { return [first].concat(rest); },\n        peg$c69 = function(name, t) {return t},\n        peg$c70 = function(name, first, t) {return t;},\n        peg$c71 = function(name, first, rest) {\n              return {\n              \ttype: \"adtDef\",\n                value: name,\n                params: first ? [first].concat(rest) : [],\n                paramsRaw: first ? name + \" : \" + text().replace(name, \"\").trim() : \"\",\n                location: location()\n              }\n            },\n        peg$c72 = function(ann, val) {\n              val[\"annotation\"] = ann;\n              return val;\n            },\n        peg$c73 = function(val) {\n              val[\"annotation\"] = null;\n              return val;\n            },\n        peg$c74 = function(id, first, p) { return p},\n        peg$c75 = function(id, first, rest) {return [first].concat(rest); },\n        peg$c76 = function(id, patterns, expr) {\n              return {\n              \ttype: \"nameDef\",\n                value: id,\n                patterns: patterns || []\n                //expr: expr\n              }\n            },\n        peg$c77 = function(binOp, first, p) {return p},\n        peg$c78 = function(binOp, first, rest) {return [first].concat(rest); },\n        peg$c79 = function(binOp, patterns, expr) {\n\n              return {\n              \ttype: \"binOpDef\",\n                value: binOp.value,\n                patterns: patterns || []\n                //expr: expr\n              }\n            },\n        peg$c80 = \":\",\n        peg$c81 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n        peg$c82 = \"->\",\n        peg$c83 = { type: \"literal\", value: \"->\", description: \"\\\"->\\\"\" },\n        peg$c84 = function(ref, first, t) { return t;},\n        peg$c85 = function(ref, first, rest) {return {raw: text(), signature: [first].concat(rest) }},\n        peg$c86 = function(ref, sig) {\n              var tipe = ref.type === \"binOpRef\" ? \"binOpDef\" : \"nameDef\";\n              return {\n              \ttype: tipe,\n                value: ref.value,\n                signature: sig.signature,\n                signatureRaw: text(),\n                signatureRawSansName: sig.raw,\n                location: location()\n              }\n            },\n        peg$c87 = \"infixr\",\n        peg$c88 = { type: \"literal\", value: \"infixr\", description: \"\\\"infixr\\\"\" },\n        peg$c89 = \"infixl\",\n        peg$c90 = { type: \"literal\", value: \"infixl\", description: \"\\\"infixl\\\"\" },\n        peg$c91 = \"infix\",\n        peg$c92 = { type: \"literal\", value: \"infix\", description: \"\\\"infix\\\"\" },\n        peg$c93 = function(fix, fixity, op) {\n              return {\n              \ttype: \"infixDef\",\n                value: fix,\n                fixity: fixity,\n                op: op\n              }\n            },\n        peg$c94 = \"`\",\n        peg$c95 = { type: \"literal\", value: \"`\", description: \"\\\"`\\\"\" },\n        peg$c96 = function(op) {\n              return {\n                type: \"infixOp\",\n                value: op\n              }\n            },\n        peg$c97 = function(ann) {\n          \treturn {\n              type: \"portDef\",\n              value: ann.value,\n              signature: ann.signature,\n              signatureRaw: text(),\n              signatureRawSansName: ann.signatureRawSansName\n            }\n          },\n        peg$c98 = function(first, t) { return t; },\n        peg$c99 = function(first, rest) {\n                return {\n                  type: \"typeTuple\",\n                  elements: [first].concat(rest)\n                }\n              },\n        peg$c100 = function(first, tail) {\n                return {\n                  type: \"typeFun\",\n                  signature: [first].concat(tail.signature)\n                }\n              },\n        peg$c101 = function(t) { return t; },\n        peg$c102 = function(value) {\n                return {\n                  type: \"typeBracket\",\n                  element: value\n                }\n              },\n        peg$c103 = function(first, t) { return t;},\n        peg$c104 = function(first, rest) {\n              return {\n              \ttype: \"funTail\",\n                signature: [first].concat(rest)\n              }\n            },\n        peg$c105 = function() {\n              return {\n                type: \"unit\"\n              }\n            },\n        peg$c106 = function(val, first, t) {return t},\n        peg$c107 = function(val, first, rest) {return [first].concat(rest); },\n        peg$c108 = function(val, params) {\n                return {\n                  type: \"typeAdt\",\n                  value: val,\n                  params: params || []\n                }\n              },\n        peg$c109 = function(val) {\n                return {\n                  type: \"typeVar\",\n                  value: val\n                }\n              },\n        peg$c110 = function(first, r) { return r; },\n        peg$c111 = function(first, rest) { return [first].concat(rest) },\n        peg$c112 = function(rs) {\n              return {\n              \ttype: \"typeRec\",\n                fieldDefs: rs || [],\n                location: location(),\n                signatureRaw: text()\n              }\n            },\n        peg$c113 = function(id, first, r) { return r; },\n        peg$c114 = function(id, first, rest) { return [first].concat(rest) },\n        peg$c115 = function(id, rs) {\n              return {\n              \ttype: \"typeRecExt\",\n                param: id,\n                fieldDefs: rs || []\n              }\n            },\n        peg$c116 = function(id, first, tail) {\n            \tvar fun = {\n                \ttype: \"typeFun\",\n                    signature: [first].concat(tail.signature)\n                }\n\n                return {\n                \ttype: \"typeRecBind\",\n                    name: id,\n                    tipe: fun,\n                    location: location(),\n                    signatureRaw: text()\n                };\n            },\n        peg$c117 = function(id, type) {\n              return {\n              \ttype: \"typeRecBind\",\n                name: id,\n                tipe: type,\n                location: location(),\n                signatureRaw: text()\n              }\n            },\n        peg$c118 = function(value) {\n                return {\n                  type: \"patternBracket\",\n                  pattern: value\n                }\n              },\n        peg$c119 = function(first, p) { return p; },\n        peg$c120 = function(first, rest) {\n                return {\n                  type: \"patternTuple\",\n                  patterns: [first].concat(rest)\n                }\n              },\n        peg$c121 = function(p, alias) {\n            \treturn {\n                \ttype: \"patternTupleElem\",\n                    value: p,\n                    alias: alias\n                }\n            },\n        peg$c122 = function(p, alias) {\n              return {\n              \ttype: \"pattern\",\n                value: p,\n                alias: alias\n              }\n            },\n        peg$c123 = function(id) {return id},\n        peg$c124 = \"[\",\n        peg$c125 = { type: \"literal\", value: \"[\", description: \"\\\"[\\\"\" },\n        peg$c126 = \"]\",\n        peg$c127 = { type: \"literal\", value: \"]\", description: \"\\\"]\\\"\" },\n        peg$c128 = function(first, rest) {\n                return {\n                  type: \"patternList\",\n                  patterns: [first].concat(rest)\n                }\n            },\n        peg$c129 = function(ps) {\n              return {\n              \ttype: \"patternRec\",\n                patterns: ps || []\n              }\n            },\n        peg$c130 = function(id) {\n              return {\n              \ttype: \"variable\",\n                value: id\n              }\n            },\n        peg$c131 = function(adt, p) {return p},\n        peg$c132 = function(adt, vars) {\n              return {\n              \ttype: \"patternAdt\",\n                value: adt,\n                variables: vars\n              }\n            },\n        peg$c133 = \"_\",\n        peg$c134 = { type: \"literal\", value: \"_\", description: \"\\\"_\\\"\" },\n        peg$c135 = function() {return {type: \"unnamed\"}},\n        peg$c136 = \"--\",\n        peg$c137 = { type: \"literal\", value: \"--\", description: \"\\\"--\\\"\" },\n        peg$c138 = function(dill) {return text()},\n        peg$c139 = function(id) {\n              return {\n                type: \"ref\",\n                value: id\n              }\n            },\n        peg$c140 = \".\",\n        peg$c141 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n        peg$c142 = function(first, rest) {\n              return first + rest.map(function (sub) {\n                return sub.join(\"\");\n              }).join(\"\");\n            },\n        peg$c143 = function(first, rest) { return first + rest.join(\"\"); },\n        peg$c144 = function(up, id) {\n              return {\n              \ttype: \"prefixedId\",\n                prefix: up,\n                id: id\n              }\n            },\n        peg$c145 = function(a) {return a},\n        peg$c146 = { type: \"other\", description: \"comment\" },\n        peg$c147 = \"{-|\",\n        peg$c148 = { type: \"literal\", value: \"{-|\", description: \"\\\"{-|\\\"\" },\n        peg$c149 = \"-}\",\n        peg$c150 = { type: \"literal\", value: \"-}\", description: \"\\\"-}\\\"\" },\n        peg$c151 = function(d) {return \"{-\" + d + \"-}\"},\n        peg$c152 = function(m) {return m},\n        peg$c153 = function(s) {return s},\n        peg$c154 = function(char) {return char;},\n        peg$c155 = function(commentChars) {return commentChars.join(\"\");},\n        peg$c156 = \"{-\",\n        peg$c157 = { type: \"literal\", value: \"{-\", description: \"\\\"{-\\\"\" },\n        peg$c158 = function(d) {return d},\n        peg$c159 = function(h) {return h},\n        peg$c160 = function(chars) {return \"{-\" + chars.join(\"\") + \"}\"},\n        peg$c161 = \"\\\"\\\"\\\"\",\n        peg$c162 = { type: \"literal\", value: \"\\\"\\\"\\\"\", description: \"\\\"\\\\\\\"\\\\\\\"\\\\\\\"\\\"\" },\n        peg$c163 = \"if\",\n        peg$c164 = { type: \"literal\", value: \"if\", description: \"\\\"if\\\"\" },\n        peg$c165 = \"then\",\n        peg$c166 = { type: \"literal\", value: \"then\", description: \"\\\"then\\\"\" },\n        peg$c167 = \"else\",\n        peg$c168 = { type: \"literal\", value: \"else\", description: \"\\\"else\\\"\" },\n        peg$c169 = \"let\",\n        peg$c170 = { type: \"literal\", value: \"let\", description: \"\\\"let\\\"\" },\n        peg$c171 = \"in\",\n        peg$c172 = { type: \"literal\", value: \"in\", description: \"\\\"in\\\"\" },\n        peg$c173 = \"case\",\n        peg$c174 = { type: \"literal\", value: \"case\", description: \"\\\"case\\\"\" },\n        peg$c175 = \"of\",\n        peg$c176 = { type: \"literal\", value: \"of\", description: \"\\\"of\\\"\" },\n        peg$c177 = \"'\",\n        peg$c178 = { type: \"literal\", value: \"'\", description: \"\\\"'\\\"\" },\n        peg$c179 = /^[A-Z]/,\n        peg$c180 = { type: \"class\", value: \"[A-Z]\", description: \"[A-Z]\" },\n        peg$c181 = /^[a-z]/,\n        peg$c182 = { type: \"class\", value: \"[a-z]\", description: \"[a-z]\" },\n        peg$c183 = /^[0-9]/,\n        peg$c184 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n        peg$c185 = function(binOp) {\n              return {\n              \ttype: \"binOpRef\",\n                value: binOp.value\n              }\n            },\n        peg$c186 = function(first, rest) {\n              var binOp = first + rest.join(\"\");\n              validateBinOp(binOp);\n              return {\n                type: \"binOp\",\n                value: binOp\n              }\n            },\n        peg$c187 = \"+\",\n        peg$c188 = { type: \"literal\", value: \"+\", description: \"\\\"+\\\"\" },\n        peg$c189 = \"-\",\n        peg$c190 = { type: \"literal\", value: \"-\", description: \"\\\"-\\\"\" },\n        peg$c191 = \"*\",\n        peg$c192 = { type: \"literal\", value: \"*\", description: \"\\\"*\\\"\" },\n        peg$c193 = \"&\",\n        peg$c194 = { type: \"literal\", value: \"&\", description: \"\\\"&\\\"\" },\n        peg$c195 = \"%\",\n        peg$c196 = { type: \"literal\", value: \"%\", description: \"\\\"%\\\"\" },\n        peg$c197 = \"^\",\n        peg$c198 = { type: \"literal\", value: \"^\", description: \"\\\"^\\\"\" },\n        peg$c199 = \"<\",\n        peg$c200 = { type: \"literal\", value: \"<\", description: \"\\\"<\\\"\" },\n        peg$c201 = \">\",\n        peg$c202 = { type: \"literal\", value: \">\", description: \"\\\">\\\"\" },\n        peg$c203 = \"$\",\n        peg$c204 = { type: \"literal\", value: \"$\", description: \"\\\"$\\\"\" },\n        peg$c205 = \"@\",\n        peg$c206 = { type: \"literal\", value: \"@\", description: \"\\\"@\\\"\" },\n        peg$c207 = \"#\",\n        peg$c208 = { type: \"literal\", value: \"#\", description: \"\\\"#\\\"\" },\n        peg$c209 = \"/\",\n        peg$c210 = { type: \"literal\", value: \"/\", description: \"\\\"/\\\"\" },\n        peg$c211 = \"?\",\n        peg$c212 = { type: \"literal\", value: \"?\", description: \"\\\"?\\\"\" },\n        peg$c213 = \"~\",\n        peg$c214 = { type: \"literal\", value: \"~\", description: \"\\\"~\\\"\" },\n        peg$c215 = \"!\",\n        peg$c216 = { type: \"literal\", value: \"!\", description: \"\\\"!\\\"\" },\n        peg$c217 = /^[\\n\\r\\u2028\\u2029]/,\n        peg$c218 = { type: \"class\", value: \"[\\\\n\\\\r\\\\u2028\\\\u2029]\", description: \"[\\\\n\\\\r\\\\u2028\\\\u2029]\" },\n        peg$c219 = { type: \"other\", description: \"end of line\" },\n        peg$c220 = \"\\n\",\n        peg$c221 = { type: \"literal\", value: \"\\n\", description: \"\\\"\\\\n\\\"\" },\n        peg$c222 = \"\\r\\n\",\n        peg$c223 = { type: \"literal\", value: \"\\r\\n\", description: \"\\\"\\\\r\\\\n\\\"\" },\n        peg$c224 = \"\\r\",\n        peg$c225 = { type: \"literal\", value: \"\\r\", description: \"\\\"\\\\r\\\"\" },\n        peg$c226 = \"\\u2028\",\n        peg$c227 = { type: \"literal\", value: \"\\u2028\", description: \"\\\"\\\\u2028\\\"\" },\n        peg$c228 = \"\\u2029\",\n        peg$c229 = { type: \"literal\", value: \"\\u2029\", description: \"\\\"\\\\u2029\\\"\" },\n        peg$c230 = { type: \"other\", description: \"newline\" },\n        peg$c231 = { type: \"other\", description: \"whitespace\" },\n        peg$c232 = \"\\t\",\n        peg$c233 = { type: \"literal\", value: \"\\t\", description: \"\\\"\\\\t\\\"\" },\n        peg$c234 = \"\\x0B\",\n        peg$c235 = { type: \"literal\", value: \"\\x0B\", description: \"\\\"\\\\x0B\\\"\" },\n        peg$c236 = \"\\f\",\n        peg$c237 = { type: \"literal\", value: \"\\f\", description: \"\\\"\\\\f\\\"\" },\n        peg$c238 = \" \",\n        peg$c239 = { type: \"literal\", value: \" \", description: \"\\\" \\\"\" },\n        peg$c240 = \"\\xA0\",\n        peg$c241 = { type: \"literal\", value: \"\\xA0\", description: \"\\\"\\\\xA0\\\"\" },\n        peg$c242 = \"\\uFEFF\",\n        peg$c243 = { type: \"literal\", value: \"\\uFEFF\", description: \"\\\"\\\\uFEFF\\\"\" },\n\n        peg$currPos          = 0,\n        peg$savedPos         = 0,\n        peg$posDetailsCache  = [{ line: 1, column: 1, seenCR: false }],\n        peg$maxFailPos       = 0,\n        peg$maxFailExpected  = [],\n        peg$silentFails      = 0,\n\n        peg$result;\n\n    if (\"startRule\" in options) {\n      if (!(options.startRule in peg$startRuleFunctions)) {\n        throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n      }\n\n      peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n    }\n\n    function text() {\n      return input.substring(peg$savedPos, peg$currPos);\n    }\n\n    function location() {\n      return peg$computeLocation(peg$savedPos, peg$currPos);\n    }\n\n    function expected(description) {\n      throw peg$buildException(\n        null,\n        [{ type: \"other\", description: description }],\n        input.substring(peg$savedPos, peg$currPos),\n        peg$computeLocation(peg$savedPos, peg$currPos)\n      );\n    }\n\n    function error(message) {\n      throw peg$buildException(\n        message,\n        null,\n        input.substring(peg$savedPos, peg$currPos),\n        peg$computeLocation(peg$savedPos, peg$currPos)\n      );\n    }\n\n    function peg$computePosDetails(pos) {\n      var details = peg$posDetailsCache[pos],\n          p, ch;\n\n      if (details) {\n        return details;\n      } else {\n        p = pos - 1;\n        while (!peg$posDetailsCache[p]) {\n          p--;\n        }\n\n        details = peg$posDetailsCache[p];\n        details = {\n          line:   details.line,\n          column: details.column,\n          seenCR: details.seenCR\n        };\n\n        while (p < pos) {\n          ch = input.charAt(p);\n          if (ch === \"\\n\") {\n            if (!details.seenCR) { details.line++; }\n            details.column = 1;\n            details.seenCR = false;\n          } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n            details.line++;\n            details.column = 1;\n            details.seenCR = true;\n          } else {\n            details.column++;\n            details.seenCR = false;\n          }\n\n          p++;\n        }\n\n        peg$posDetailsCache[pos] = details;\n        return details;\n      }\n    }\n\n    function peg$computeLocation(startPos, endPos) {\n      var startPosDetails = peg$computePosDetails(startPos),\n          endPosDetails   = peg$computePosDetails(endPos);\n\n      return {\n        start: {\n          offset: startPos,\n          line:   startPosDetails.line,\n          column: startPosDetails.column\n        },\n        end: {\n          offset: endPos,\n          line:   endPosDetails.line,\n          column: endPosDetails.column\n        }\n      };\n    }\n\n    function peg$fail(expected) {\n      if (peg$currPos < peg$maxFailPos) { return; }\n\n      if (peg$currPos > peg$maxFailPos) {\n        peg$maxFailPos = peg$currPos;\n        peg$maxFailExpected = [];\n      }\n\n      peg$maxFailExpected.push(expected);\n    }\n\n    function peg$buildException(message, expected, found, location) {\n      function cleanupExpected(expected) {\n        var i = 1;\n\n        expected.sort(function(a, b) {\n          if (a.description < b.description) {\n            return -1;\n          } else if (a.description > b.description) {\n            return 1;\n          } else {\n            return 0;\n          }\n        });\n\n        while (i < expected.length) {\n          if (expected[i - 1] === expected[i]) {\n            expected.splice(i, 1);\n          } else {\n            i++;\n          }\n        }\n      }\n\n      function buildMessage(expected, found) {\n        function stringEscape(s) {\n          function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n          return s\n            .replace(/\\\\/g,   '\\\\\\\\')\n            .replace(/\"/g,    '\\\\\"')\n            .replace(/\\x08/g, '\\\\b')\n            .replace(/\\t/g,   '\\\\t')\n            .replace(/\\n/g,   '\\\\n')\n            .replace(/\\f/g,   '\\\\f')\n            .replace(/\\r/g,   '\\\\r')\n            .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n            .replace(/[\\x10-\\x1F\\x80-\\xFF]/g,    function(ch) { return '\\\\x'  + hex(ch); })\n            .replace(/[\\u0100-\\u0FFF]/g,         function(ch) { return '\\\\u0' + hex(ch); })\n            .replace(/[\\u1000-\\uFFFF]/g,         function(ch) { return '\\\\u'  + hex(ch); });\n        }\n\n        var expectedDescs = new Array(expected.length),\n            expectedDesc, foundDesc, i;\n\n        for (i = 0; i < expected.length; i++) {\n          expectedDescs[i] = expected[i].description;\n        }\n\n        expectedDesc = expected.length > 1\n          ? expectedDescs.slice(0, -1).join(\", \")\n              + \" or \"\n              + expectedDescs[expected.length - 1]\n          : expectedDescs[0];\n\n        foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n        return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n      }\n\n      if (expected !== null) {\n        cleanupExpected(expected);\n      }\n\n      return new peg$SyntaxError(\n        message !== null ? message : buildMessage(expected, found),\n        expected,\n        found,\n        location\n      );\n    }\n\n    function peg$parsestart() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parsemodule();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c0(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsemodule() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = peg$parsemoduleDeclaration();\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parseEOS();\n        if (s3 !== peg$FAILED) {\n          s2 = [s2, s3];\n          s1 = s2;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s1;\n        s1 = peg$FAILED;\n      }\n      if (s1 === peg$FAILED) {\n        s1 = null;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = peg$parseMANDATORY_LAYOUT();\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parseDocComment();\n          if (s4 !== peg$FAILED) {\n            s5 = peg$currPos;\n            peg$silentFails++;\n            s6 = peg$parseMANDATORY_LAYOUT();\n            peg$silentFails--;\n            if (s6 !== peg$FAILED) {\n              peg$currPos = s5;\n              s5 = void 0;\n            } else {\n              s5 = peg$FAILED;\n            }\n            if (s5 !== peg$FAILED) {\n              peg$savedPos = s2;\n              s3 = peg$c1(s1, s4);\n              s2 = s3;\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n        if (s2 === peg$FAILED) {\n          s2 = peg$currPos;\n          s3 = peg$parseLAYOUT();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s2;\n            s3 = peg$c2(s1);\n          }\n          s2 = s3;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseimports();\n          if (s3 === peg$FAILED) {\n            s3 = null;\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parsetopLevelDeclarations();\n            if (s4 === peg$FAILED) {\n              s4 = null;\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = [];\n              s6 = peg$parseComment();\n              if (s6 === peg$FAILED) {\n                s6 = peg$parseNewLine();\n                if (s6 === peg$FAILED) {\n                  s6 = peg$parseWhiteSpace();\n                }\n              }\n              while (s6 !== peg$FAILED) {\n                s5.push(s6);\n                s6 = peg$parseComment();\n                if (s6 === peg$FAILED) {\n                  s6 = peg$parseNewLine();\n                  if (s6 === peg$FAILED) {\n                    s6 = peg$parseWhiteSpace();\n                  }\n                }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c3(s1, s2, s3, s4);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseheaderOnly() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      s1 = peg$parsemoduleDeclaration();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseEOS();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          s4 = peg$parseMANDATORY_LAYOUT();\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parseDocComment();\n            if (s5 !== peg$FAILED) {\n              s6 = peg$currPos;\n              peg$silentFails++;\n              s7 = peg$parseMANDATORY_LAYOUT();\n              peg$silentFails--;\n              if (s7 !== peg$FAILED) {\n                peg$currPos = s6;\n                s6 = void 0;\n              } else {\n                s6 = peg$FAILED;\n              }\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s3;\n                s4 = peg$c1(s1, s5);\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = peg$currPos;\n            s4 = peg$parseLAYOUT();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s3;\n              s4 = peg$c2(s1);\n            }\n            s3 = s4;\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseimports();\n            if (s4 === peg$FAILED) {\n              s4 = null;\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = [];\n              if (input.length > peg$currPos) {\n                s6 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c4); }\n              }\n              while (s6 !== peg$FAILED) {\n                s5.push(s6);\n                if (input.length > peg$currPos) {\n                  s6 = input.charAt(peg$currPos);\n                  peg$currPos++;\n                } else {\n                  s6 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c4); }\n                }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c5(s1, s3, s4);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsemoduleDeclaration() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c6) {\n        s2 = peg$c6;\n        peg$currPos += 6;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c7); }\n      }\n      if (s2 === peg$FAILED) {\n        if (input.substr(peg$currPos, 4) === peg$c8) {\n          s2 = peg$c8;\n          peg$currPos += 4;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c9); }\n        }\n      }\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parse__();\n        if (s3 !== peg$FAILED) {\n          peg$savedPos = s1;\n          s2 = peg$c10(s2);\n          s1 = s2;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s1;\n        s1 = peg$FAILED;\n      }\n      if (s1 === peg$FAILED) {\n        s1 = null;\n      }\n      if (s1 !== peg$FAILED) {\n        if (input.substr(peg$currPos, 6) === peg$c11) {\n          s2 = peg$c11;\n          peg$currPos += 6;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c12); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseupperIds();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse__();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$currPos;\n                s7 = peg$parseeffectWhere();\n                if (s7 !== peg$FAILED) {\n                  s8 = peg$parse__();\n                  if (s8 !== peg$FAILED) {\n                    s7 = [s7, s8];\n                    s6 = s7;\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n                if (s6 === peg$FAILED) {\n                  s6 = null;\n                }\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parseexposing();\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c13(s1, s4, s7);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseeffectWhere() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 5) === peg$c14) {\n        s1 = peg$c14;\n        peg$currPos += 5;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c15); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 123) {\n            s3 = peg$c16;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c17); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$currPos;\n              s6 = [];\n              s7 = peg$currPos;\n              s8 = peg$currPos;\n              peg$silentFails++;\n              if (input.charCodeAt(peg$currPos) === 125) {\n                s9 = peg$c18;\n                peg$currPos++;\n              } else {\n                s9 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c19); }\n              }\n              peg$silentFails--;\n              if (s9 === peg$FAILED) {\n                s8 = void 0;\n              } else {\n                peg$currPos = s8;\n                s8 = peg$FAILED;\n              }\n              if (s8 !== peg$FAILED) {\n                s9 = peg$parseSourceCharacter();\n                if (s9 !== peg$FAILED) {\n                  s8 = [s8, s9];\n                  s7 = s8;\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s7;\n                s7 = peg$FAILED;\n              }\n              while (s7 !== peg$FAILED) {\n                s6.push(s7);\n                s7 = peg$currPos;\n                s8 = peg$currPos;\n                peg$silentFails++;\n                if (input.charCodeAt(peg$currPos) === 125) {\n                  s9 = peg$c18;\n                  peg$currPos++;\n                } else {\n                  s9 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c19); }\n                }\n                peg$silentFails--;\n                if (s9 === peg$FAILED) {\n                  s8 = void 0;\n                } else {\n                  peg$currPos = s8;\n                  s8 = peg$FAILED;\n                }\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parseSourceCharacter();\n                  if (s9 !== peg$FAILED) {\n                    s8 = [s8, s9];\n                    s7 = s8;\n                  } else {\n                    peg$currPos = s7;\n                    s7 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n              }\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parse_();\n                if (s7 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 125) {\n                    s8 = peg$c18;\n                    peg$currPos++;\n                  } else {\n                    s8 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c19); }\n                  }\n                  if (s8 !== peg$FAILED) {\n                    s6 = [s6, s7, s8];\n                    s5 = s6;\n                  } else {\n                    peg$currPos = s5;\n                    s5 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n              if (s5 !== peg$FAILED) {\n                s1 = [s1, s2, s3, s4, s5];\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseimports() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      s1 = peg$parseLAYOUT();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseimport();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$currPos;\n          s5 = peg$parseLAYOUT();\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parseimport();\n            if (s6 !== peg$FAILED) {\n              peg$savedPos = s4;\n              s5 = peg$c20(s2, s6);\n              s4 = s5;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$currPos;\n            s5 = peg$parseLAYOUT();\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parseimport();\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s4;\n                s5 = peg$c20(s2, s6);\n                s4 = s5;\n              } else {\n                peg$currPos = s4;\n                s4 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c21(s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseimport() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c22) {\n        s1 = peg$c22;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c23); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseupperIds();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$currPos;\n            s5 = peg$parse__();\n            if (s5 !== peg$FAILED) {\n              if (input.substr(peg$currPos, 2) === peg$c24) {\n                s6 = peg$c24;\n                peg$currPos += 2;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c25); }\n              }\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parse__();\n                if (s7 !== peg$FAILED) {\n                  s8 = peg$parseupperId();\n                  if (s8 !== peg$FAILED) {\n                    peg$savedPos = s4;\n                    s5 = peg$c26(s3, s8);\n                    s4 = s5;\n                  } else {\n                    peg$currPos = s4;\n                    s4 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s4;\n                  s4 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s4;\n                s4 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n            if (s4 === peg$FAILED) {\n              s4 = null;\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$currPos;\n              s6 = peg$parse_();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parseexposing();\n                if (s7 !== peg$FAILED) {\n                  peg$savedPos = s5;\n                  s6 = peg$c27(s3, s4, s7);\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n              if (s5 === peg$FAILED) {\n                s5 = null;\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parseEOS();\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c28(s3, s4, s5);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseexposing() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 8) === peg$c29) {\n        s1 = peg$c29;\n        peg$currPos += 8;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c30); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 40) {\n            s3 = peg$c31;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c32); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseexposeAll();\n              if (s5 === peg$FAILED) {\n                s5 = peg$parseexports();\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse_();\n                if (s6 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 41) {\n                    s7 = peg$c33;\n                    peg$currPos++;\n                  } else {\n                    s7 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c34); }\n                  }\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c35(s5);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseexposeAll() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c36) {\n        s1 = peg$c36;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c37); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c38();\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseexports() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      s1 = peg$parseexport();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (s4 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s5 = peg$c39;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c40); }\n          }\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parse_();\n            if (s6 !== peg$FAILED) {\n              s7 = peg$parseexport();\n              if (s7 !== peg$FAILED) {\n                peg$savedPos = s3;\n                s4 = peg$c41(s1, s7);\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$parse_();\n          if (s4 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 44) {\n              s5 = peg$c39;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c40); }\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parse_();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parseexport();\n                if (s7 !== peg$FAILED) {\n                  peg$savedPos = s3;\n                  s4 = peg$c41(s1, s7);\n                  s3 = s4;\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c42(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseexport() {\n      var s0;\n\n      s0 = peg$parseref();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseadtExport();\n      }\n\n      return s0;\n    }\n\n    function peg$parseadtExport() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      s1 = peg$parseupperId();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = peg$parse_();\n        if (s3 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 40) {\n            s4 = peg$c31;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c32); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parse_();\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parseadtSubExports();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parse_();\n                if (s7 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 41) {\n                    s8 = peg$c33;\n                    peg$currPos++;\n                  } else {\n                    s8 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c34); }\n                  }\n                  if (s8 !== peg$FAILED) {\n                    peg$savedPos = s2;\n                    s3 = peg$c43(s1, s6);\n                    s2 = s3;\n                  } else {\n                    peg$currPos = s2;\n                    s2 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s2;\n                  s2 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s2;\n                s2 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n        if (s2 === peg$FAILED) {\n          s2 = null;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c44(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseadtSubExports() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      s1 = peg$parseexposeAll();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c45(s1);\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseadtSubExport();\n        if (s1 !== peg$FAILED) {\n          s2 = [];\n          s3 = peg$currPos;\n          s4 = peg$parse_();\n          if (s4 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 44) {\n              s5 = peg$c39;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c40); }\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parse_();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parseadtSubExport();\n                if (s7 !== peg$FAILED) {\n                  peg$savedPos = s3;\n                  s4 = peg$c46(s1, s7);\n                  s3 = s4;\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s5 = peg$c39;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c40); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse_();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parseadtSubExport();\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s3;\n                    s4 = peg$c46(s1, s7);\n                    s3 = s4;\n                  } else {\n                    peg$currPos = s3;\n                    s3 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          }\n          if (s2 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c47(s1, s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseadtSubExport() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parseupperId();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c48(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsetopLevelDeclarations() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = peg$parsetopLevelDoc();\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parsetopLevelDeclaration();\n        if (s3 !== peg$FAILED) {\n          peg$savedPos = s1;\n          s2 = peg$c49(s2, s3);\n          s1 = s2;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s1;\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$parsetopLevelDoc();\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parsetopLevelDeclaration();\n          if (s5 !== peg$FAILED) {\n            peg$savedPos = s3;\n            s4 = peg$c50(s1, s4, s5);\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$parsetopLevelDoc();\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parsetopLevelDeclaration();\n            if (s5 !== peg$FAILED) {\n              peg$savedPos = s3;\n              s4 = peg$c50(s1, s4, s5);\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c51(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetopLevelDeclaration() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parsetypeAliasFunDecl();\n      if (s1 === peg$FAILED) {\n        s1 = peg$parsetypeAliasDecl();\n        if (s1 === peg$FAILED) {\n          s1 = peg$parsetypeDecl();\n          if (s1 === peg$FAILED) {\n            s1 = peg$parsedef();\n            if (s1 === peg$FAILED) {\n              s1 = peg$parseinfixDef();\n              if (s1 === peg$FAILED) {\n                s1 = peg$parseportDef();\n              }\n            }\n          }\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c52(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsetopLevelDoc() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parseMANDATORY_LAYOUT();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseDocComment();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseMANDATORY_LAYOUT();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c53(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseLAYOUT();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c54();\n        }\n        s0 = s1;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeAliasDecl() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c55) {\n        s1 = peg$c55;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c56); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          if (input.substr(peg$currPos, 5) === peg$c57) {\n            s3 = peg$c57;\n            peg$currPos += 5;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c58); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseupperId();\n              if (s5 !== peg$FAILED) {\n                s6 = [];\n                s7 = peg$currPos;\n                s8 = peg$parse__();\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parsevariable();\n                  if (s9 !== peg$FAILED) {\n                    peg$savedPos = s7;\n                    s8 = peg$c59(s5, s9);\n                    s7 = s8;\n                  } else {\n                    peg$currPos = s7;\n                    s7 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n                while (s7 !== peg$FAILED) {\n                  s6.push(s7);\n                  s7 = peg$currPos;\n                  s8 = peg$parse__();\n                  if (s8 !== peg$FAILED) {\n                    s9 = peg$parsevariable();\n                    if (s9 !== peg$FAILED) {\n                      peg$savedPos = s7;\n                      s8 = peg$c59(s5, s9);\n                      s7 = s8;\n                    } else {\n                      peg$currPos = s7;\n                      s7 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s7;\n                    s7 = peg$FAILED;\n                  }\n                }\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parse_();\n                  if (s7 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 61) {\n                      s8 = peg$c60;\n                      peg$currPos++;\n                    } else {\n                      s8 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c61); }\n                    }\n                    if (s8 !== peg$FAILED) {\n                      s9 = peg$parse_();\n                      if (s9 !== peg$FAILED) {\n                        s10 = peg$parsetype();\n                        if (s10 !== peg$FAILED) {\n                          peg$savedPos = s0;\n                          s1 = peg$c62(s5, s6, s10);\n                          s0 = s1;\n                        } else {\n                          peg$currPos = s0;\n                          s0 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeAliasFunDecl() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c55) {\n        s1 = peg$c55;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c56); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          if (input.substr(peg$currPos, 5) === peg$c57) {\n            s3 = peg$c57;\n            peg$currPos += 5;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c58); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseupperId();\n              if (s5 !== peg$FAILED) {\n                s6 = [];\n                s7 = peg$currPos;\n                s8 = peg$parse__();\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parsevariable();\n                  if (s9 !== peg$FAILED) {\n                    peg$savedPos = s7;\n                    s8 = peg$c59(s5, s9);\n                    s7 = s8;\n                  } else {\n                    peg$currPos = s7;\n                    s7 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n                while (s7 !== peg$FAILED) {\n                  s6.push(s7);\n                  s7 = peg$currPos;\n                  s8 = peg$parse__();\n                  if (s8 !== peg$FAILED) {\n                    s9 = peg$parsevariable();\n                    if (s9 !== peg$FAILED) {\n                      peg$savedPos = s7;\n                      s8 = peg$c59(s5, s9);\n                      s7 = s8;\n                    } else {\n                      peg$currPos = s7;\n                      s7 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s7;\n                    s7 = peg$FAILED;\n                  }\n                }\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parse_();\n                  if (s7 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 61) {\n                      s8 = peg$c60;\n                      peg$currPos++;\n                    } else {\n                      s8 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c61); }\n                    }\n                    if (s8 !== peg$FAILED) {\n                      s9 = peg$parse_();\n                      if (s9 !== peg$FAILED) {\n                        s10 = peg$parsetype();\n                        if (s10 !== peg$FAILED) {\n                          s11 = peg$parse_();\n                          if (s11 !== peg$FAILED) {\n                            s12 = peg$parsetypeFunTail();\n                            if (s12 !== peg$FAILED) {\n                              peg$savedPos = s0;\n                              s1 = peg$c63(s5, s6, s10, s12);\n                              s0 = s1;\n                            } else {\n                              peg$currPos = s0;\n                              s0 = peg$FAILED;\n                            }\n                          } else {\n                            peg$currPos = s0;\n                            s0 = peg$FAILED;\n                          }\n                        } else {\n                          peg$currPos = s0;\n                          s0 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeDecl() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c55) {\n        s1 = peg$c55;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c56); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseupperId();\n          if (s3 !== peg$FAILED) {\n            s4 = [];\n            s5 = peg$currPos;\n            s6 = peg$parse__();\n            if (s6 !== peg$FAILED) {\n              s7 = peg$parsevariable();\n              if (s7 !== peg$FAILED) {\n                peg$savedPos = s5;\n                s6 = peg$c59(s3, s7);\n                s5 = s6;\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n            while (s5 !== peg$FAILED) {\n              s4.push(s5);\n              s5 = peg$currPos;\n              s6 = peg$parse__();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parsevariable();\n                if (s7 !== peg$FAILED) {\n                  peg$savedPos = s5;\n                  s6 = peg$c59(s3, s7);\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse_();\n              if (s5 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 61) {\n                  s6 = peg$c60;\n                  peg$currPos++;\n                } else {\n                  s6 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c61); }\n                }\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parse_();\n                  if (s7 !== peg$FAILED) {\n                    s8 = peg$parseadtDefs();\n                    if (s8 !== peg$FAILED) {\n                      peg$savedPos = s0;\n                      s1 = peg$c64(s3, s4, s8);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseadtDefs() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      s1 = peg$parseadtDef();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (s4 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 124) {\n            s5 = peg$c65;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c66); }\n          }\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parse_();\n            if (s6 !== peg$FAILED) {\n              s7 = peg$parseadtDef();\n              if (s7 !== peg$FAILED) {\n                peg$savedPos = s3;\n                s4 = peg$c67(s1, s7);\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$parse_();\n          if (s4 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 124) {\n              s5 = peg$c65;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c66); }\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parse_();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parseadtDef();\n                if (s7 !== peg$FAILED) {\n                  peg$savedPos = s3;\n                  s4 = peg$c67(s1, s7);\n                  s3 = s4;\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c68(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseadtDef() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      s1 = peg$parseupperId();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = peg$parse__();\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parsetype();\n          if (s4 !== peg$FAILED) {\n            peg$savedPos = s2;\n            s3 = peg$c69(s1, s4);\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n        if (s2 === peg$FAILED) {\n          s2 = null;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$currPos;\n          s5 = peg$parse__();\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parsetype();\n            if (s6 !== peg$FAILED) {\n              peg$savedPos = s4;\n              s5 = peg$c70(s1, s2, s6);\n              s4 = s5;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$currPos;\n            s5 = peg$parse__();\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parsetype();\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s4;\n                s5 = peg$c70(s1, s2, s6);\n                s4 = s5;\n              } else {\n                peg$currPos = s4;\n                s4 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c71(s1, s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsedef() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parseannotation();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseLAYOUT();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsevalueDef();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c72(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parsevalueDef();\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c73(s1);\n        }\n        s0 = s1;\n      }\n\n      return s0;\n    }\n\n    function peg$parsevalueDef() {\n      var s0;\n\n      s0 = peg$parsenameDef();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsebinOpDef();\n      }\n\n      return s0;\n    }\n\n    function peg$parsenameDef() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n      s0 = peg$currPos;\n      s1 = peg$parseid();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          s4 = peg$parsepattern();\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parse__();\n            if (s5 !== peg$FAILED) {\n              s6 = [];\n              s7 = peg$currPos;\n              s8 = peg$parse_();\n              if (s8 !== peg$FAILED) {\n                s9 = peg$parsepattern();\n                if (s9 !== peg$FAILED) {\n                  peg$savedPos = s7;\n                  s8 = peg$c74(s1, s4, s9);\n                  s7 = s8;\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s7;\n                s7 = peg$FAILED;\n              }\n              while (s7 !== peg$FAILED) {\n                s6.push(s7);\n                s7 = peg$currPos;\n                s8 = peg$parse_();\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parsepattern();\n                  if (s9 !== peg$FAILED) {\n                    peg$savedPos = s7;\n                    s8 = peg$c74(s1, s4, s9);\n                    s7 = s8;\n                  } else {\n                    peg$currPos = s7;\n                    s7 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n              }\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s3;\n                s4 = peg$c75(s1, s4, s6);\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = null;\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 61) {\n                s5 = peg$c60;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c61); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parseexpr();\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c76(s1, s3, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsebinOpDef() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n      s0 = peg$currPos;\n      s1 = peg$parsebinOpRef();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          s4 = peg$parsepattern();\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parse__();\n            if (s5 !== peg$FAILED) {\n              s6 = [];\n              s7 = peg$currPos;\n              s8 = peg$parse_();\n              if (s8 !== peg$FAILED) {\n                s9 = peg$parsepattern();\n                if (s9 !== peg$FAILED) {\n                  peg$savedPos = s7;\n                  s8 = peg$c77(s1, s4, s9);\n                  s7 = s8;\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s7;\n                s7 = peg$FAILED;\n              }\n              while (s7 !== peg$FAILED) {\n                s6.push(s7);\n                s7 = peg$currPos;\n                s8 = peg$parse_();\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parsepattern();\n                  if (s9 !== peg$FAILED) {\n                    peg$savedPos = s7;\n                    s8 = peg$c77(s1, s4, s9);\n                    s7 = s8;\n                  } else {\n                    peg$currPos = s7;\n                    s7 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s7;\n                  s7 = peg$FAILED;\n                }\n              }\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s3;\n                s4 = peg$c78(s1, s4, s6);\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = null;\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 61) {\n                s5 = peg$c60;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c61); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parseexpr();\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c79(s1, s3, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseannotation() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n      s0 = peg$currPos;\n      s1 = peg$parseref();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 58) {\n            s3 = peg$c80;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c81); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$currPos;\n              s6 = peg$parsetype();\n              if (s6 !== peg$FAILED) {\n                s7 = [];\n                s8 = peg$currPos;\n                s9 = peg$parse_();\n                if (s9 !== peg$FAILED) {\n                  if (input.substr(peg$currPos, 2) === peg$c82) {\n                    s10 = peg$c82;\n                    peg$currPos += 2;\n                  } else {\n                    s10 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c83); }\n                  }\n                  if (s10 !== peg$FAILED) {\n                    s11 = peg$parse_();\n                    if (s11 !== peg$FAILED) {\n                      s12 = peg$parsetype();\n                      if (s12 !== peg$FAILED) {\n                        peg$savedPos = s8;\n                        s9 = peg$c84(s1, s6, s12);\n                        s8 = s9;\n                      } else {\n                        peg$currPos = s8;\n                        s8 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s8;\n                      s8 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s8;\n                    s8 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s8;\n                  s8 = peg$FAILED;\n                }\n                while (s8 !== peg$FAILED) {\n                  s7.push(s8);\n                  s8 = peg$currPos;\n                  s9 = peg$parse_();\n                  if (s9 !== peg$FAILED) {\n                    if (input.substr(peg$currPos, 2) === peg$c82) {\n                      s10 = peg$c82;\n                      peg$currPos += 2;\n                    } else {\n                      s10 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c83); }\n                    }\n                    if (s10 !== peg$FAILED) {\n                      s11 = peg$parse_();\n                      if (s11 !== peg$FAILED) {\n                        s12 = peg$parsetype();\n                        if (s12 !== peg$FAILED) {\n                          peg$savedPos = s8;\n                          s9 = peg$c84(s1, s6, s12);\n                          s8 = s9;\n                        } else {\n                          peg$currPos = s8;\n                          s8 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s8;\n                        s8 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s8;\n                      s8 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s8;\n                    s8 = peg$FAILED;\n                  }\n                }\n                if (s7 !== peg$FAILED) {\n                  peg$savedPos = s5;\n                  s6 = peg$c85(s1, s6, s7);\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c86(s1, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseinfixDef() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c87) {\n        s1 = peg$c87;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c88); }\n      }\n      if (s1 === peg$FAILED) {\n        if (input.substr(peg$currPos, 6) === peg$c89) {\n          s1 = peg$c89;\n          peg$currPos += 6;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c90); }\n        }\n        if (s1 === peg$FAILED) {\n          if (input.substr(peg$currPos, 5) === peg$c91) {\n            s1 = peg$c91;\n            peg$currPos += 5;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c92); }\n          }\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse__();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsenumber();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse__();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsebinOp();\n              if (s5 === peg$FAILED) {\n                s5 = peg$parseinfixOp();\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c93(s1, s3, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseinfixOp() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 96) {\n        s1 = peg$c94;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c95); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseid();\n        if (s2 === peg$FAILED) {\n          s2 = peg$parseprefixedId();\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 96) {\n            s3 = peg$c94;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c95); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c96(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseportDef() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c8) {\n        s1 = peg$c8;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c9); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseannotation();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c97(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetype() {\n      var s0;\n\n      s0 = peg$parsetypeBracket();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseunit();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parsetypeTuple();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parsetypeAdt();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parsetypeVar();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parsetypeRec();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parsetypeRecExt();\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeTuple() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = peg$parsetupleFirst();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parsetupleRem();\n          if (s5 !== peg$FAILED) {\n            peg$savedPos = s3;\n            s4 = peg$c98(s1, s5);\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$currPos;\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsetupleRem();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s3;\n                s4 = peg$c98(s1, s5);\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse_();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 41) {\n              s4 = peg$c33;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c34); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c99(s1, s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetupleFirst() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c31;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c32); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsetype();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsetypeFunTail();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c100(s3, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 40) {\n          s1 = peg$c31;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c32); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse_();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parsetype();\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c101(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsetupleRem() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 44) {\n        s1 = peg$c39;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c40); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsetype();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsetypeFunTail();\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c100(s3, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 44) {\n          s1 = peg$c39;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c40); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse_();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parsetype();\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c101(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeBracket() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parsetupleFirst();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 41) {\n            s3 = peg$c33;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c34); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c102(s1);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeFunTail() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c82) {\n        s1 = peg$c82;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c83); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsetype();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = [];\n              s6 = peg$currPos;\n              s7 = peg$parse_();\n              if (s7 !== peg$FAILED) {\n                if (input.substr(peg$currPos, 2) === peg$c82) {\n                  s8 = peg$c82;\n                  peg$currPos += 2;\n                } else {\n                  s8 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c83); }\n                }\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parse_();\n                  if (s9 !== peg$FAILED) {\n                    s10 = peg$parsetype();\n                    if (s10 !== peg$FAILED) {\n                      peg$savedPos = s6;\n                      s7 = peg$c103(s3, s10);\n                      s6 = s7;\n                    } else {\n                      peg$currPos = s6;\n                      s6 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n              while (s6 !== peg$FAILED) {\n                s5.push(s6);\n                s6 = peg$currPos;\n                s7 = peg$parse_();\n                if (s7 !== peg$FAILED) {\n                  if (input.substr(peg$currPos, 2) === peg$c82) {\n                    s8 = peg$c82;\n                    peg$currPos += 2;\n                  } else {\n                    s8 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c83); }\n                  }\n                  if (s8 !== peg$FAILED) {\n                    s9 = peg$parse_();\n                    if (s9 !== peg$FAILED) {\n                      s10 = peg$parsetype();\n                      if (s10 !== peg$FAILED) {\n                        peg$savedPos = s6;\n                        s7 = peg$c103(s3, s10);\n                        s6 = s7;\n                      } else {\n                        peg$currPos = s6;\n                        s6 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s6;\n                      s6 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c104(s3, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseunit() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c31;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c32); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 41) {\n            s3 = peg$c33;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c34); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c105();\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeAdt() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      s1 = peg$parseupperIds();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = peg$parse__();\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parsetype();\n          if (s4 !== peg$FAILED) {\n            s5 = [];\n            s6 = peg$currPos;\n            s7 = peg$parse__();\n            if (s7 !== peg$FAILED) {\n              s8 = peg$parsetype();\n              if (s8 !== peg$FAILED) {\n                peg$savedPos = s6;\n                s7 = peg$c106(s1, s4, s8);\n                s6 = s7;\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s6;\n              s6 = peg$FAILED;\n            }\n            while (s6 !== peg$FAILED) {\n              s5.push(s6);\n              s6 = peg$currPos;\n              s7 = peg$parse__();\n              if (s7 !== peg$FAILED) {\n                s8 = peg$parsetype();\n                if (s8 !== peg$FAILED) {\n                  peg$savedPos = s6;\n                  s7 = peg$c106(s1, s4, s8);\n                  s6 = s7;\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            }\n            if (s5 !== peg$FAILED) {\n              peg$savedPos = s2;\n              s3 = peg$c107(s1, s4, s5);\n              s2 = s3;\n            } else {\n              peg$currPos = s2;\n              s2 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n        if (s2 === peg$FAILED) {\n          s2 = null;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c108(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeVar() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parseid();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c109(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsetypeRec() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 123) {\n        s1 = peg$c16;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c17); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          s4 = peg$parsetypeRecBind();\n          if (s4 !== peg$FAILED) {\n            s5 = [];\n            s6 = peg$currPos;\n            s7 = peg$parse_();\n            if (s7 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s8 = peg$c39;\n                peg$currPos++;\n              } else {\n                s8 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c40); }\n              }\n              if (s8 !== peg$FAILED) {\n                s9 = peg$parse_();\n                if (s9 !== peg$FAILED) {\n                  s10 = peg$parsetypeRecBind();\n                  if (s10 !== peg$FAILED) {\n                    peg$savedPos = s6;\n                    s7 = peg$c110(s4, s10);\n                    s6 = s7;\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s6;\n              s6 = peg$FAILED;\n            }\n            while (s6 !== peg$FAILED) {\n              s5.push(s6);\n              s6 = peg$currPos;\n              s7 = peg$parse_();\n              if (s7 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 44) {\n                  s8 = peg$c39;\n                  peg$currPos++;\n                } else {\n                  s8 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c40); }\n                }\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parse_();\n                  if (s9 !== peg$FAILED) {\n                    s10 = peg$parsetypeRecBind();\n                    if (s10 !== peg$FAILED) {\n                      peg$savedPos = s6;\n                      s7 = peg$c110(s4, s10);\n                      s6 = s7;\n                    } else {\n                      peg$currPos = s6;\n                      s6 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            }\n            if (s5 !== peg$FAILED) {\n              peg$savedPos = s3;\n              s4 = peg$c111(s4, s5);\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = null;\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 125) {\n                s5 = peg$c18;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c19); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c112(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeRecExt() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 123) {\n        s1 = peg$c16;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c17); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseid();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 124) {\n                s5 = peg$c65;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c66); }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse_();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$currPos;\n                  s8 = peg$parsetypeRecBind();\n                  if (s8 !== peg$FAILED) {\n                    s9 = [];\n                    s10 = peg$currPos;\n                    s11 = peg$parse_();\n                    if (s11 !== peg$FAILED) {\n                      if (input.charCodeAt(peg$currPos) === 44) {\n                        s12 = peg$c39;\n                        peg$currPos++;\n                      } else {\n                        s12 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c40); }\n                      }\n                      if (s12 !== peg$FAILED) {\n                        s13 = peg$parse_();\n                        if (s13 !== peg$FAILED) {\n                          s14 = peg$parsetypeRecBind();\n                          if (s14 !== peg$FAILED) {\n                            peg$savedPos = s10;\n                            s11 = peg$c113(s3, s8, s14);\n                            s10 = s11;\n                          } else {\n                            peg$currPos = s10;\n                            s10 = peg$FAILED;\n                          }\n                        } else {\n                          peg$currPos = s10;\n                          s10 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s10;\n                        s10 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s10;\n                      s10 = peg$FAILED;\n                    }\n                    while (s10 !== peg$FAILED) {\n                      s9.push(s10);\n                      s10 = peg$currPos;\n                      s11 = peg$parse_();\n                      if (s11 !== peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 44) {\n                          s12 = peg$c39;\n                          peg$currPos++;\n                        } else {\n                          s12 = peg$FAILED;\n                          if (peg$silentFails === 0) { peg$fail(peg$c40); }\n                        }\n                        if (s12 !== peg$FAILED) {\n                          s13 = peg$parse_();\n                          if (s13 !== peg$FAILED) {\n                            s14 = peg$parsetypeRecBind();\n                            if (s14 !== peg$FAILED) {\n                              peg$savedPos = s10;\n                              s11 = peg$c113(s3, s8, s14);\n                              s10 = s11;\n                            } else {\n                              peg$currPos = s10;\n                              s10 = peg$FAILED;\n                            }\n                          } else {\n                            peg$currPos = s10;\n                            s10 = peg$FAILED;\n                          }\n                        } else {\n                          peg$currPos = s10;\n                          s10 = peg$FAILED;\n                        }\n                      } else {\n                        peg$currPos = s10;\n                        s10 = peg$FAILED;\n                      }\n                    }\n                    if (s9 !== peg$FAILED) {\n                      peg$savedPos = s7;\n                      s8 = peg$c114(s3, s8, s9);\n                      s7 = s8;\n                    } else {\n                      peg$currPos = s7;\n                      s7 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s7;\n                    s7 = peg$FAILED;\n                  }\n                  if (s7 === peg$FAILED) {\n                    s7 = null;\n                  }\n                  if (s7 !== peg$FAILED) {\n                    s8 = peg$parse_();\n                    if (s8 !== peg$FAILED) {\n                      if (input.charCodeAt(peg$currPos) === 125) {\n                        s9 = peg$c18;\n                        peg$currPos++;\n                      } else {\n                        s9 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c19); }\n                      }\n                      if (s9 !== peg$FAILED) {\n                        peg$savedPos = s0;\n                        s1 = peg$c115(s3, s7);\n                        s0 = s1;\n                      } else {\n                        peg$currPos = s0;\n                        s0 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsetypeRecBind() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      s1 = peg$parseid();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 58) {\n            s3 = peg$c80;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c81); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsetype();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse_();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parsetypeFunTail();\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c116(s1, s5, s7);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parseid();\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parse_();\n          if (s2 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 58) {\n              s3 = peg$c80;\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c81); }\n            }\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parse_();\n              if (s4 !== peg$FAILED) {\n                s5 = peg$parsetype();\n                if (s5 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c117(s1, s5);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsepattern() {\n      var s0;\n\n      s0 = peg$parsepatternBracket();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsepatternTuple();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parsepatternList();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parsepatternRec();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseunit();\n              if (s0 === peg$FAILED) {\n                s0 = peg$parsevariable();\n                if (s0 === peg$FAILED) {\n                  s0 = peg$parsepatternAdt();\n                  if (s0 === peg$FAILED) {\n                    s0 = peg$parseunnamed();\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsepatternBracket() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parsepatternTupleFst();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 41) {\n            s3 = peg$c33;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c34); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c118(s1);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepatternTuple() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = peg$parsepatternTupleFst();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$parsepatternTupleRem();\n        if (s4 !== peg$FAILED) {\n          peg$savedPos = s3;\n          s4 = peg$c119(s1, s4);\n        }\n        s3 = s4;\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$currPos;\n            s4 = peg$parsepatternTupleRem();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s3;\n              s4 = peg$c119(s1, s4);\n            }\n            s3 = s4;\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse_();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 41) {\n              s4 = peg$c33;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c34); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c120(s1, s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepatternTupleFst() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c31;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c32); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsepattern();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parsepatternAlias();\n            if (s4 === peg$FAILED) {\n              s4 = null;\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c121(s3, s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepatternTupleRem() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = peg$parse_();\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 44) {\n          s2 = peg$c39;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c40); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse_();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parsepattern();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsepatternAlias();\n              if (s5 === peg$FAILED) {\n                s5 = null;\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c122(s4, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepatternAlias() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = peg$parse__();\n      if (s1 !== peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c24) {\n          s2 = peg$c24;\n          peg$currPos += 2;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c25); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse__();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseid();\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c123(s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepatternList() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 91) {\n        s1 = peg$c124;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c125); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsepattern();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = [];\n              s6 = peg$currPos;\n              s7 = peg$parse_();\n              if (s7 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 44) {\n                  s8 = peg$c39;\n                  peg$currPos++;\n                } else {\n                  s8 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c40); }\n                }\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parse_();\n                  if (s9 !== peg$FAILED) {\n                    s10 = peg$parsepattern();\n                    if (s10 !== peg$FAILED) {\n                      peg$savedPos = s6;\n                      s7 = peg$c119(s3, s10);\n                      s6 = s7;\n                    } else {\n                      peg$currPos = s6;\n                      s6 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n              while (s6 !== peg$FAILED) {\n                s5.push(s6);\n                s6 = peg$currPos;\n                s7 = peg$parse_();\n                if (s7 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 44) {\n                    s8 = peg$c39;\n                    peg$currPos++;\n                  } else {\n                    s8 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c40); }\n                  }\n                  if (s8 !== peg$FAILED) {\n                    s9 = peg$parse_();\n                    if (s9 !== peg$FAILED) {\n                      s10 = peg$parsepattern();\n                      if (s10 !== peg$FAILED) {\n                        peg$savedPos = s6;\n                        s7 = peg$c119(s3, s10);\n                        s6 = s7;\n                      } else {\n                        peg$currPos = s6;\n                        s6 = peg$FAILED;\n                      }\n                    } else {\n                      peg$currPos = s6;\n                      s6 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse_();\n                if (s6 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 93) {\n                    s7 = peg$c126;\n                    peg$currPos++;\n                  } else {\n                    s7 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c127); }\n                  }\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s0;\n                    s1 = peg$c128(s3, s5);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepatternRec() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 123) {\n        s1 = peg$c16;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c17); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          s4 = peg$parsepattern();\n          if (s4 !== peg$FAILED) {\n            s5 = [];\n            s6 = peg$currPos;\n            s7 = peg$parse_();\n            if (s7 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s8 = peg$c39;\n                peg$currPos++;\n              } else {\n                s8 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c40); }\n              }\n              if (s8 !== peg$FAILED) {\n                s9 = peg$parse_();\n                if (s9 !== peg$FAILED) {\n                  s10 = peg$parsepattern();\n                  if (s10 !== peg$FAILED) {\n                    peg$savedPos = s6;\n                    s7 = peg$c119(s4, s10);\n                    s6 = s7;\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s6;\n              s6 = peg$FAILED;\n            }\n            while (s6 !== peg$FAILED) {\n              s5.push(s6);\n              s6 = peg$currPos;\n              s7 = peg$parse_();\n              if (s7 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 44) {\n                  s8 = peg$c39;\n                  peg$currPos++;\n                } else {\n                  s8 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c40); }\n                }\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parse_();\n                  if (s9 !== peg$FAILED) {\n                    s10 = peg$parsepattern();\n                    if (s10 !== peg$FAILED) {\n                      peg$savedPos = s6;\n                      s7 = peg$c119(s4, s10);\n                      s6 = s7;\n                    } else {\n                      peg$currPos = s6;\n                      s6 = peg$FAILED;\n                    }\n                  } else {\n                    peg$currPos = s6;\n                    s6 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            }\n            if (s5 !== peg$FAILED) {\n              peg$savedPos = s3;\n              s4 = peg$c111(s4, s5);\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = null;\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 125) {\n                s5 = peg$c18;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c19); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c129(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsevariable() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parseid();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c130(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsepatternAdt() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = peg$parseupperIds();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parsepattern();\n          if (s5 !== peg$FAILED) {\n            peg$savedPos = s3;\n            s4 = peg$c131(s1, s5);\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$parse_();\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parsepattern();\n            if (s5 !== peg$FAILED) {\n              peg$savedPos = s3;\n              s4 = peg$c131(s1, s5);\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c132(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseunnamed() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 95) {\n        s1 = peg$c133;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c134); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c135();\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseexpr() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$currPos;\n      s3 = peg$currPos;\n      peg$silentFails++;\n      s4 = peg$currPos;\n      s5 = peg$parseNewLine();\n      if (s5 !== peg$FAILED) {\n        s6 = peg$parseDocComment();\n        if (s6 === peg$FAILED) {\n          s6 = peg$parseidchar();\n          if (s6 === peg$FAILED) {\n            s6 = peg$currPos;\n            s7 = peg$currPos;\n            peg$silentFails++;\n            if (input.substr(peg$currPos, 2) === peg$c136) {\n              s8 = peg$c136;\n              peg$currPos += 2;\n            } else {\n              s8 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c137); }\n            }\n            peg$silentFails--;\n            if (s8 === peg$FAILED) {\n              s7 = void 0;\n            } else {\n              peg$currPos = s7;\n              s7 = peg$FAILED;\n            }\n            if (s7 !== peg$FAILED) {\n              s8 = peg$parsebinOpChar();\n              if (s8 !== peg$FAILED) {\n                s7 = [s7, s8];\n                s6 = s7;\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s6;\n              s6 = peg$FAILED;\n            }\n            if (s6 === peg$FAILED) {\n              s6 = peg$parsebinOpDef();\n            }\n          }\n        }\n        if (s6 !== peg$FAILED) {\n          s5 = [s5, s6];\n          s4 = s5;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s4;\n        s4 = peg$FAILED;\n      }\n      peg$silentFails--;\n      if (s4 === peg$FAILED) {\n        s3 = void 0;\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        s4 = peg$parseMultiLineComment();\n        if (s4 === peg$FAILED) {\n          s4 = peg$parseMultiLineString();\n          if (s4 === peg$FAILED) {\n            s4 = peg$parseSourceCharacter();\n          }\n        }\n        if (s4 !== peg$FAILED) {\n          s3 = [s3, s4];\n          s2 = s3;\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$FAILED;\n      }\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$currPos;\n        s3 = peg$currPos;\n        peg$silentFails++;\n        s4 = peg$currPos;\n        s5 = peg$parseNewLine();\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parseDocComment();\n          if (s6 === peg$FAILED) {\n            s6 = peg$parseidchar();\n            if (s6 === peg$FAILED) {\n              s6 = peg$currPos;\n              s7 = peg$currPos;\n              peg$silentFails++;\n              if (input.substr(peg$currPos, 2) === peg$c136) {\n                s8 = peg$c136;\n                peg$currPos += 2;\n              } else {\n                s8 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c137); }\n              }\n              peg$silentFails--;\n              if (s8 === peg$FAILED) {\n                s7 = void 0;\n              } else {\n                peg$currPos = s7;\n                s7 = peg$FAILED;\n              }\n              if (s7 !== peg$FAILED) {\n                s8 = peg$parsebinOpChar();\n                if (s8 !== peg$FAILED) {\n                  s7 = [s7, s8];\n                  s6 = s7;\n                } else {\n                  peg$currPos = s6;\n                  s6 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s6;\n                s6 = peg$FAILED;\n              }\n              if (s6 === peg$FAILED) {\n                s6 = peg$parsebinOpDef();\n              }\n            }\n          }\n          if (s6 !== peg$FAILED) {\n            s5 = [s5, s6];\n            s4 = s5;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        peg$silentFails--;\n        if (s4 === peg$FAILED) {\n          s3 = void 0;\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parseMultiLineComment();\n          if (s4 === peg$FAILED) {\n            s4 = peg$parseMultiLineString();\n            if (s4 === peg$FAILED) {\n              s4 = peg$parseSourceCharacter();\n            }\n          }\n          if (s4 !== peg$FAILED) {\n            s3 = [s3, s4];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c138(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseref() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parseid();\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c139(s1);\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsebinOpRef();\n      }\n\n      return s0;\n    }\n\n    function peg$parseupperIds() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = peg$parseupperId();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s4 = peg$c140;\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c141); }\n        }\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parseupperId();\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 46) {\n            s4 = peg$c140;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c141); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parseupperId();\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c142(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseupperId() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parseupper();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseidchar();\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$parseidchar();\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c143(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseprefixedId() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parseupperIds();\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s2 = peg$c140;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c141); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseidName();\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c144(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseid() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      peg$silentFails++;\n      s2 = peg$parsereserved();\n      peg$silentFails--;\n      if (s2 === peg$FAILED) {\n        s1 = void 0;\n      } else {\n        peg$currPos = s1;\n        s1 = peg$FAILED;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseidName();\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c145(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseidName() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parselower();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parseidchar();\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$parseidchar();\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c143(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseComment() {\n      var s0, s1;\n\n      peg$silentFails++;\n      s0 = peg$parseMultiLineComment();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseSingleLineComment();\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c146); }\n      }\n\n      return s0;\n    }\n\n    function peg$parseDocComment() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c147) {\n        s1 = peg$c147;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c148); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$currPos;\n        peg$silentFails++;\n        if (input.substr(peg$currPos, 2) === peg$c149) {\n          s5 = peg$c149;\n          peg$currPos += 2;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c150); }\n        }\n        peg$silentFails--;\n        if (s5 === peg$FAILED) {\n          s4 = void 0;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        if (s4 !== peg$FAILED) {\n          s5 = peg$currPos;\n          s6 = peg$parseDocComment();\n          if (s6 !== peg$FAILED) {\n            peg$savedPos = s5;\n            s6 = peg$c151(s6);\n          }\n          s5 = s6;\n          if (s5 === peg$FAILED) {\n            s5 = peg$currPos;\n            s6 = peg$parseMultiLineComment();\n            if (s6 !== peg$FAILED) {\n              peg$savedPos = s5;\n              s6 = peg$c152(s6);\n            }\n            s5 = s6;\n            if (s5 === peg$FAILED) {\n              s5 = peg$currPos;\n              s6 = peg$parseSourceCharacter();\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s5;\n                s6 = peg$c153(s6);\n              }\n              s5 = s6;\n            }\n          }\n          if (s5 !== peg$FAILED) {\n            peg$savedPos = s3;\n            s4 = peg$c154(s5);\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.substr(peg$currPos, 2) === peg$c149) {\n            s5 = peg$c149;\n            peg$currPos += 2;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c150); }\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$currPos;\n            s6 = peg$parseDocComment();\n            if (s6 !== peg$FAILED) {\n              peg$savedPos = s5;\n              s6 = peg$c151(s6);\n            }\n            s5 = s6;\n            if (s5 === peg$FAILED) {\n              s5 = peg$currPos;\n              s6 = peg$parseMultiLineComment();\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s5;\n                s6 = peg$c152(s6);\n              }\n              s5 = s6;\n              if (s5 === peg$FAILED) {\n                s5 = peg$currPos;\n                s6 = peg$parseSourceCharacter();\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s5;\n                  s6 = peg$c153(s6);\n                }\n                s5 = s6;\n              }\n            }\n            if (s5 !== peg$FAILED) {\n              peg$savedPos = s3;\n              s4 = peg$c154(s5);\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c149) {\n            s3 = peg$c149;\n            peg$currPos += 2;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c150); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c155(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseMultiLineComment() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c156) {\n        s1 = peg$c156;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c157); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        peg$silentFails++;\n        if (input.charCodeAt(peg$currPos) === 124) {\n          s3 = peg$c65;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c66); }\n        }\n        peg$silentFails--;\n        if (s3 === peg$FAILED) {\n          s2 = void 0;\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$currPos;\n          s5 = peg$currPos;\n          peg$silentFails++;\n          if (input.substr(peg$currPos, 2) === peg$c149) {\n            s6 = peg$c149;\n            peg$currPos += 2;\n          } else {\n            s6 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c150); }\n          }\n          peg$silentFails--;\n          if (s6 === peg$FAILED) {\n            s5 = void 0;\n          } else {\n            peg$currPos = s5;\n            s5 = peg$FAILED;\n          }\n          if (s5 !== peg$FAILED) {\n            s6 = peg$currPos;\n            s7 = peg$parseDocComment();\n            if (s7 !== peg$FAILED) {\n              peg$savedPos = s6;\n              s7 = peg$c158(s7);\n            }\n            s6 = s7;\n            if (s6 === peg$FAILED) {\n              s6 = peg$currPos;\n              s7 = peg$parseMultiLineComment();\n              if (s7 !== peg$FAILED) {\n                peg$savedPos = s6;\n                s7 = peg$c152(s7);\n              }\n              s6 = s7;\n              if (s6 === peg$FAILED) {\n                s6 = peg$currPos;\n                s7 = peg$parseSourceCharacter();\n                if (s7 !== peg$FAILED) {\n                  peg$savedPos = s6;\n                  s7 = peg$c153(s7);\n                }\n                s6 = s7;\n              }\n            }\n            if (s6 !== peg$FAILED) {\n              peg$savedPos = s4;\n              s5 = peg$c159(s6);\n              s4 = s5;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$currPos;\n            s5 = peg$currPos;\n            peg$silentFails++;\n            if (input.substr(peg$currPos, 2) === peg$c149) {\n              s6 = peg$c149;\n              peg$currPos += 2;\n            } else {\n              s6 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c150); }\n            }\n            peg$silentFails--;\n            if (s6 === peg$FAILED) {\n              s5 = void 0;\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$currPos;\n              s7 = peg$parseDocComment();\n              if (s7 !== peg$FAILED) {\n                peg$savedPos = s6;\n                s7 = peg$c158(s7);\n              }\n              s6 = s7;\n              if (s6 === peg$FAILED) {\n                s6 = peg$currPos;\n                s7 = peg$parseMultiLineComment();\n                if (s7 !== peg$FAILED) {\n                  peg$savedPos = s6;\n                  s7 = peg$c152(s7);\n                }\n                s6 = s7;\n                if (s6 === peg$FAILED) {\n                  s6 = peg$currPos;\n                  s7 = peg$parseSourceCharacter();\n                  if (s7 !== peg$FAILED) {\n                    peg$savedPos = s6;\n                    s7 = peg$c153(s7);\n                  }\n                  s6 = s7;\n                }\n              }\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s4;\n                s5 = peg$c159(s6);\n                s4 = s5;\n              } else {\n                peg$currPos = s4;\n                s4 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s4;\n              s4 = peg$FAILED;\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            if (input.substr(peg$currPos, 2) === peg$c149) {\n              s4 = peg$c149;\n              peg$currPos += 2;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c150); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c160(s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseMultiLineCommentNoLineTerminator() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c156) {\n        s1 = peg$c156;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c157); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$currPos;\n        peg$silentFails++;\n        if (input.substr(peg$currPos, 2) === peg$c149) {\n          s5 = peg$c149;\n          peg$currPos += 2;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c150); }\n        }\n        if (s5 === peg$FAILED) {\n          s5 = peg$parseLineTerminator();\n        }\n        peg$silentFails--;\n        if (s5 === peg$FAILED) {\n          s4 = void 0;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parseSourceCharacter();\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.substr(peg$currPos, 2) === peg$c149) {\n            s5 = peg$c149;\n            peg$currPos += 2;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c150); }\n          }\n          if (s5 === peg$FAILED) {\n            s5 = peg$parseLineTerminator();\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parseSourceCharacter();\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.substr(peg$currPos, 2) === peg$c149) {\n            s3 = peg$c149;\n            peg$currPos += 2;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c150); }\n          }\n          if (s3 !== peg$FAILED) {\n            s1 = [s1, s2, s3];\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseSingleLineComment() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c136) {\n        s1 = peg$c136;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c137); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$currPos;\n        peg$silentFails++;\n        s5 = peg$parseLineTerminator();\n        peg$silentFails--;\n        if (s5 === peg$FAILED) {\n          s4 = void 0;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parseSourceCharacter();\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          s5 = peg$parseLineTerminator();\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parseSourceCharacter();\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          s1 = [s1, s2];\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseMultiLineString() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 3) === peg$c161) {\n        s1 = peg$c161;\n        peg$currPos += 3;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c162); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$currPos;\n        peg$silentFails++;\n        if (input.substr(peg$currPos, 3) === peg$c161) {\n          s5 = peg$c161;\n          peg$currPos += 3;\n        } else {\n          s5 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c162); }\n        }\n        peg$silentFails--;\n        if (s5 === peg$FAILED) {\n          s4 = void 0;\n        } else {\n          peg$currPos = s4;\n          s4 = peg$FAILED;\n        }\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parseSourceCharacter();\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$currPos;\n          s4 = peg$currPos;\n          peg$silentFails++;\n          if (input.substr(peg$currPos, 3) === peg$c161) {\n            s5 = peg$c161;\n            peg$currPos += 3;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c162); }\n          }\n          peg$silentFails--;\n          if (s5 === peg$FAILED) {\n            s4 = void 0;\n          } else {\n            peg$currPos = s4;\n            s4 = peg$FAILED;\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parseSourceCharacter();\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.substr(peg$currPos, 3) === peg$c161) {\n            s3 = peg$c161;\n            peg$currPos += 3;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c162); }\n          }\n          if (s3 !== peg$FAILED) {\n            s1 = [s1, s2, s3];\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsereserved() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c11) {\n        s1 = peg$c11;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c12); }\n      }\n      if (s1 === peg$FAILED) {\n        if (input.substr(peg$currPos, 4) === peg$c55) {\n          s1 = peg$c55;\n          peg$currPos += 4;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c56); }\n        }\n        if (s1 === peg$FAILED) {\n          if (input.substr(peg$currPos, 8) === peg$c29) {\n            s1 = peg$c29;\n            peg$currPos += 8;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c30); }\n          }\n          if (s1 === peg$FAILED) {\n            if (input.substr(peg$currPos, 6) === peg$c22) {\n              s1 = peg$c22;\n              peg$currPos += 6;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c23); }\n            }\n            if (s1 === peg$FAILED) {\n              if (input.substr(peg$currPos, 4) === peg$c8) {\n                s1 = peg$c8;\n                peg$currPos += 4;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c9); }\n              }\n              if (s1 === peg$FAILED) {\n                if (input.substr(peg$currPos, 2) === peg$c163) {\n                  s1 = peg$c163;\n                  peg$currPos += 2;\n                } else {\n                  s1 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c164); }\n                }\n                if (s1 === peg$FAILED) {\n                  if (input.substr(peg$currPos, 4) === peg$c165) {\n                    s1 = peg$c165;\n                    peg$currPos += 4;\n                  } else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c166); }\n                  }\n                  if (s1 === peg$FAILED) {\n                    if (input.substr(peg$currPos, 4) === peg$c167) {\n                      s1 = peg$c167;\n                      peg$currPos += 4;\n                    } else {\n                      s1 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c168); }\n                    }\n                    if (s1 === peg$FAILED) {\n                      if (input.substr(peg$currPos, 3) === peg$c169) {\n                        s1 = peg$c169;\n                        peg$currPos += 3;\n                      } else {\n                        s1 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c170); }\n                      }\n                      if (s1 === peg$FAILED) {\n                        if (input.substr(peg$currPos, 2) === peg$c171) {\n                          s1 = peg$c171;\n                          peg$currPos += 2;\n                        } else {\n                          s1 = peg$FAILED;\n                          if (peg$silentFails === 0) { peg$fail(peg$c172); }\n                        }\n                        if (s1 === peg$FAILED) {\n                          if (input.substr(peg$currPos, 4) === peg$c173) {\n                            s1 = peg$c173;\n                            peg$currPos += 4;\n                          } else {\n                            s1 = peg$FAILED;\n                            if (peg$silentFails === 0) { peg$fail(peg$c174); }\n                          }\n                          if (s1 === peg$FAILED) {\n                            if (input.substr(peg$currPos, 2) === peg$c175) {\n                              s1 = peg$c175;\n                              peg$currPos += 2;\n                            } else {\n                              s1 = peg$FAILED;\n                              if (peg$silentFails === 0) { peg$fail(peg$c176); }\n                            }\n                            if (s1 === peg$FAILED) {\n                              if (input.substr(peg$currPos, 2) === peg$c24) {\n                                s1 = peg$c24;\n                                peg$currPos += 2;\n                              } else {\n                                s1 = peg$FAILED;\n                                if (peg$silentFails === 0) { peg$fail(peg$c25); }\n                              }\n                              if (s1 === peg$FAILED) {\n                                if (input.substr(peg$currPos, 5) === peg$c91) {\n                                  s1 = peg$c91;\n                                  peg$currPos += 5;\n                                } else {\n                                  s1 = peg$FAILED;\n                                  if (peg$silentFails === 0) { peg$fail(peg$c92); }\n                                }\n                                if (s1 === peg$FAILED) {\n                                  if (input.substr(peg$currPos, 6) === peg$c89) {\n                                    s1 = peg$c89;\n                                    peg$currPos += 6;\n                                  } else {\n                                    s1 = peg$FAILED;\n                                    if (peg$silentFails === 0) { peg$fail(peg$c90); }\n                                  }\n                                  if (s1 === peg$FAILED) {\n                                    if (input.substr(peg$currPos, 6) === peg$c87) {\n                                      s1 = peg$c87;\n                                      peg$currPos += 6;\n                                    } else {\n                                      s1 = peg$FAILED;\n                                      if (peg$silentFails === 0) { peg$fail(peg$c88); }\n                                    }\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        peg$silentFails++;\n        s3 = peg$parseidchar();\n        peg$silentFails--;\n        if (s3 === peg$FAILED) {\n          s2 = void 0;\n        } else {\n          peg$currPos = s2;\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          s1 = [s1, s2];\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseidchar() {\n      var s0;\n\n      s0 = peg$parseupper();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parselower();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parsenumber();\n          if (s0 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 95) {\n              s0 = peg$c133;\n              peg$currPos++;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c134); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 39) {\n                s0 = peg$c177;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c178); }\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseupper() {\n      var s0;\n\n      if (peg$c179.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c180); }\n      }\n\n      return s0;\n    }\n\n    function peg$parselower() {\n      var s0;\n\n      if (peg$c181.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c182); }\n      }\n\n      return s0;\n    }\n\n    function peg$parsenumber() {\n      var s0;\n\n      if (peg$c183.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c184); }\n      }\n\n      return s0;\n    }\n\n    function peg$parsebinOpRef() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c31;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c32); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsebinOp();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 41) {\n                s5 = peg$c33;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c34); }\n              }\n              if (s5 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c185(s3);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsebinOp() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parsebinOpChar();\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$parsebinOpChar();\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          s3 = peg$parsebinOpChar();\n        }\n        if (s2 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c186(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parsebinOpChar() {\n      var s0;\n\n      if (input.charCodeAt(peg$currPos) === 43) {\n        s0 = peg$c187;\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c188); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 45) {\n          s0 = peg$c189;\n          peg$currPos++;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c190); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 42) {\n            s0 = peg$c191;\n            peg$currPos++;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c192); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 38) {\n              s0 = peg$c193;\n              peg$currPos++;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c194); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 37) {\n                s0 = peg$c195;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c196); }\n              }\n              if (s0 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 94) {\n                  s0 = peg$c197;\n                  peg$currPos++;\n                } else {\n                  s0 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c198); }\n                }\n                if (s0 === peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 60) {\n                    s0 = peg$c199;\n                    peg$currPos++;\n                  } else {\n                    s0 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c200); }\n                  }\n                  if (s0 === peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 62) {\n                      s0 = peg$c201;\n                      peg$currPos++;\n                    } else {\n                      s0 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c202); }\n                    }\n                    if (s0 === peg$FAILED) {\n                      if (input.charCodeAt(peg$currPos) === 124) {\n                        s0 = peg$c65;\n                        peg$currPos++;\n                      } else {\n                        s0 = peg$FAILED;\n                        if (peg$silentFails === 0) { peg$fail(peg$c66); }\n                      }\n                      if (s0 === peg$FAILED) {\n                        if (input.charCodeAt(peg$currPos) === 61) {\n                          s0 = peg$c60;\n                          peg$currPos++;\n                        } else {\n                          s0 = peg$FAILED;\n                          if (peg$silentFails === 0) { peg$fail(peg$c61); }\n                        }\n                        if (s0 === peg$FAILED) {\n                          if (input.charCodeAt(peg$currPos) === 36) {\n                            s0 = peg$c203;\n                            peg$currPos++;\n                          } else {\n                            s0 = peg$FAILED;\n                            if (peg$silentFails === 0) { peg$fail(peg$c204); }\n                          }\n                          if (s0 === peg$FAILED) {\n                            if (input.charCodeAt(peg$currPos) === 64) {\n                              s0 = peg$c205;\n                              peg$currPos++;\n                            } else {\n                              s0 = peg$FAILED;\n                              if (peg$silentFails === 0) { peg$fail(peg$c206); }\n                            }\n                            if (s0 === peg$FAILED) {\n                              if (input.charCodeAt(peg$currPos) === 35) {\n                                s0 = peg$c207;\n                                peg$currPos++;\n                              } else {\n                                s0 = peg$FAILED;\n                                if (peg$silentFails === 0) { peg$fail(peg$c208); }\n                              }\n                              if (s0 === peg$FAILED) {\n                                if (input.charCodeAt(peg$currPos) === 47) {\n                                  s0 = peg$c209;\n                                  peg$currPos++;\n                                } else {\n                                  s0 = peg$FAILED;\n                                  if (peg$silentFails === 0) { peg$fail(peg$c210); }\n                                }\n                                if (s0 === peg$FAILED) {\n                                  if (input.charCodeAt(peg$currPos) === 58) {\n                                    s0 = peg$c80;\n                                    peg$currPos++;\n                                  } else {\n                                    s0 = peg$FAILED;\n                                    if (peg$silentFails === 0) { peg$fail(peg$c81); }\n                                  }\n                                  if (s0 === peg$FAILED) {\n                                    if (input.charCodeAt(peg$currPos) === 63) {\n                                      s0 = peg$c211;\n                                      peg$currPos++;\n                                    } else {\n                                      s0 = peg$FAILED;\n                                      if (peg$silentFails === 0) { peg$fail(peg$c212); }\n                                    }\n                                    if (s0 === peg$FAILED) {\n                                      if (input.charCodeAt(peg$currPos) === 126) {\n                                        s0 = peg$c213;\n                                        peg$currPos++;\n                                      } else {\n                                        s0 = peg$FAILED;\n                                        if (peg$silentFails === 0) { peg$fail(peg$c214); }\n                                      }\n                                      if (s0 === peg$FAILED) {\n                                        if (input.charCodeAt(peg$currPos) === 33) {\n                                          s0 = peg$c215;\n                                          peg$currPos++;\n                                        } else {\n                                          s0 = peg$FAILED;\n                                          if (peg$silentFails === 0) { peg$fail(peg$c216); }\n                                        }\n                                        if (s0 === peg$FAILED) {\n                                          if (input.charCodeAt(peg$currPos) === 46) {\n                                            s0 = peg$c140;\n                                            peg$currPos++;\n                                          } else {\n                                            s0 = peg$FAILED;\n                                            if (peg$silentFails === 0) { peg$fail(peg$c141); }\n                                          }\n                                        }\n                                      }\n                                    }\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseLineTerminator() {\n      var s0;\n\n      if (peg$c217.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c218); }\n      }\n\n      return s0;\n    }\n\n    function peg$parseLineTerminatorSequence() {\n      var s0, s1;\n\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 10) {\n        s0 = peg$c220;\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c221); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c222) {\n          s0 = peg$c222;\n          peg$currPos += 2;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c223); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 13) {\n            s0 = peg$c224;\n            peg$currPos++;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c225); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 8232) {\n              s0 = peg$c226;\n              peg$currPos++;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c227); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 8233) {\n                s0 = peg$c228;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c229); }\n              }\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c219); }\n      }\n\n      return s0;\n    }\n\n    function peg$parseMANDATORY_LAYOUT() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = [];\n      s1 = peg$parseNewLine();\n      if (s1 === peg$FAILED) {\n        s1 = peg$currPos;\n        s2 = peg$parseMultiLineComment();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseEOS();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseNewLine();\n            if (s4 !== peg$FAILED) {\n              s2 = [s2, s3, s4];\n              s1 = s2;\n            } else {\n              peg$currPos = s1;\n              s1 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n        if (s1 === peg$FAILED) {\n          s1 = peg$currPos;\n          s2 = peg$parseEOS();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseNewLine();\n            if (s3 !== peg$FAILED) {\n              s2 = [s2, s3];\n              s1 = s2;\n            } else {\n              peg$currPos = s1;\n              s1 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n          }\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        while (s1 !== peg$FAILED) {\n          s0.push(s1);\n          s1 = peg$parseNewLine();\n          if (s1 === peg$FAILED) {\n            s1 = peg$currPos;\n            s2 = peg$parseMultiLineComment();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseEOS();\n              if (s3 !== peg$FAILED) {\n                s4 = peg$parseNewLine();\n                if (s4 !== peg$FAILED) {\n                  s2 = [s2, s3, s4];\n                  s1 = s2;\n                } else {\n                  peg$currPos = s1;\n                  s1 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s1;\n              s1 = peg$FAILED;\n            }\n            if (s1 === peg$FAILED) {\n              s1 = peg$currPos;\n              s2 = peg$parseEOS();\n              if (s2 !== peg$FAILED) {\n                s3 = peg$parseNewLine();\n                if (s3 !== peg$FAILED) {\n                  s2 = [s2, s3];\n                  s1 = s2;\n                } else {\n                  peg$currPos = s1;\n                  s1 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n              }\n            }\n          }\n        }\n      } else {\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseLAYOUT() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = [];\n      s1 = peg$parseNewLine();\n      if (s1 === peg$FAILED) {\n        s1 = peg$currPos;\n        s2 = peg$parseMultiLineComment();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseEOS();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseNewLine();\n            if (s4 !== peg$FAILED) {\n              s2 = [s2, s3, s4];\n              s1 = s2;\n            } else {\n              peg$currPos = s1;\n              s1 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s1;\n          s1 = peg$FAILED;\n        }\n        if (s1 === peg$FAILED) {\n          s1 = peg$currPos;\n          s2 = peg$parseEOS();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseNewLine();\n            if (s3 !== peg$FAILED) {\n              s2 = [s2, s3];\n              s1 = s2;\n            } else {\n              peg$currPos = s1;\n              s1 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n          }\n        }\n      }\n      while (s1 !== peg$FAILED) {\n        s0.push(s1);\n        s1 = peg$parseNewLine();\n        if (s1 === peg$FAILED) {\n          s1 = peg$currPos;\n          s2 = peg$parseMultiLineComment();\n          if (s2 !== peg$FAILED) {\n            s3 = peg$parseEOS();\n            if (s3 !== peg$FAILED) {\n              s4 = peg$parseNewLine();\n              if (s4 !== peg$FAILED) {\n                s2 = [s2, s3, s4];\n                s1 = s2;\n              } else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s1;\n              s1 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s1;\n            s1 = peg$FAILED;\n          }\n          if (s1 === peg$FAILED) {\n            s1 = peg$currPos;\n            s2 = peg$parseEOS();\n            if (s2 !== peg$FAILED) {\n              s3 = peg$parseNewLine();\n              if (s3 !== peg$FAILED) {\n                s2 = [s2, s3];\n                s1 = s2;\n              } else {\n                peg$currPos = s1;\n                s1 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s1;\n              s1 = peg$FAILED;\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseEOS() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parseWhiteSpace();\n      if (s2 === peg$FAILED) {\n        s2 = peg$parseMultiLineComment();\n      }\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$parseWhiteSpace();\n        if (s2 === peg$FAILED) {\n          s2 = peg$parseMultiLineComment();\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseSingleLineComment();\n        if (s2 === peg$FAILED) {\n          s2 = null;\n        }\n        if (s2 !== peg$FAILED) {\n          s1 = [s1, s2];\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseEOF() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      peg$silentFails++;\n      if (input.length > peg$currPos) {\n        s1 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c4); }\n      }\n      peg$silentFails--;\n      if (s1 === peg$FAILED) {\n        s0 = void 0;\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parseNewLine() {\n      var s0, s1;\n\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 10) {\n        s0 = peg$c220;\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c221); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.substr(peg$currPos, 2) === peg$c222) {\n          s0 = peg$c222;\n          peg$currPos += 2;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c223); }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c230); }\n      }\n\n      return s0;\n    }\n\n    function peg$parse__() {\n      var s0, s1;\n\n      s0 = [];\n      s1 = peg$parsews_ignores();\n      if (s1 !== peg$FAILED) {\n        while (s1 !== peg$FAILED) {\n          s0.push(s1);\n          s1 = peg$parsews_ignores();\n        }\n      } else {\n        s0 = peg$FAILED;\n      }\n\n      return s0;\n    }\n\n    function peg$parse_() {\n      var s0, s1;\n\n      s0 = [];\n      s1 = peg$parsews_ignores();\n      while (s1 !== peg$FAILED) {\n        s0.push(s1);\n        s1 = peg$parsews_ignores();\n      }\n\n      return s0;\n    }\n\n    function peg$parsews_ignores() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$parseWhiteSpace();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseMultiLineComment();\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$parseSingleLineComment();\n          if (s1 !== peg$FAILED) {\n            s2 = peg$currPos;\n            peg$silentFails++;\n            s3 = peg$parseNewLine();\n            peg$silentFails--;\n            if (s3 !== peg$FAILED) {\n              peg$currPos = s2;\n              s2 = void 0;\n            } else {\n              s2 = peg$FAILED;\n            }\n            if (s2 !== peg$FAILED) {\n              s1 = [s1, s2];\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            s1 = peg$parseNewLine();\n            if (s1 !== peg$FAILED) {\n              s2 = peg$currPos;\n              peg$silentFails++;\n              s3 = peg$parseNewLine();\n              if (s3 === peg$FAILED) {\n                s3 = peg$parseMultiLineComment();\n                if (s3 === peg$FAILED) {\n                  s3 = peg$parseSingleLineComment();\n                  if (s3 === peg$FAILED) {\n                    s3 = peg$parseWhiteSpace();\n                  }\n                }\n              }\n              peg$silentFails--;\n              if (s3 !== peg$FAILED) {\n                peg$currPos = s2;\n                s2 = void 0;\n              } else {\n                s2 = peg$FAILED;\n              }\n              if (s2 !== peg$FAILED) {\n                s1 = [s1, s2];\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseWhiteSpace() {\n      var s0, s1;\n\n      peg$silentFails++;\n      if (input.charCodeAt(peg$currPos) === 9) {\n        s0 = peg$c232;\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c233); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 11) {\n          s0 = peg$c234;\n          peg$currPos++;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c235); }\n        }\n        if (s0 === peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 12) {\n            s0 = peg$c236;\n            peg$currPos++;\n          } else {\n            s0 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c237); }\n          }\n          if (s0 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 32) {\n              s0 = peg$c238;\n              peg$currPos++;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c239); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 160) {\n                s0 = peg$c240;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c241); }\n              }\n              if (s0 === peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 65279) {\n                  s0 = peg$c242;\n                  peg$currPos++;\n                } else {\n                  s0 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c243); }\n                }\n              }\n            }\n          }\n        }\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c231); }\n      }\n\n      return s0;\n    }\n\n    function peg$parseSourceCharacter() {\n      var s0;\n\n      if (input.length > peg$currPos) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c4); }\n      }\n\n      return s0;\n    }\n\n\n      function placeholder() {\n      }\n\n      function validateBinOp(binOp) {\n      \tif ([\"|\", \"->\", \"--\", \"=\", \":\", \"..\"].indexOf(binOp) > -1) {\n          error(binOp + \" is an illegal binop\");\n        }\n      }\n\n\n    peg$result = peg$startRuleFunction();\n\n    if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n      return peg$result;\n    } else {\n      if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n        peg$fail({ type: \"end\", description: \"end of input\" });\n      }\n\n      throw peg$buildException(\n        null,\n        peg$maxFailExpected,\n        peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n        peg$maxFailPos < input.length\n          ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n          : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n      );\n    }\n  }\n\n  return {\n    SyntaxError: peg$SyntaxError,\n    parse:       peg$parse\n  };\n})();\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"elm-light\",\n    \"preferGlobal\": true,\n    \"version\": \"0.0.1\",\n    \"author\": \"Magnus Rundberge <mrundberget@hotmail.com>\",\n    \"description\": \"Set up of node deps for Light Table elm-light plugin\",\n    \"license\": \"MIT\",\n    \"engines\": {\n        \"node\": \">=0.10\"\n    },\n    \"dependencies\": {\n        \"d3\": \"~3.5.12\",\n        \"dagre-d3\": \"~0.4.11\",\n        \"fs-walk\": \"~0.0.1\",\n        \"harbor\":  \"~0.3.0\",\n        \"marked\": \"~0.3.6\",\n        \"ps-tree\": \"~1.0.1\",\n        \"wrench\": \"~1.5.8\",\n        \"temp\": \"0.8.3\",\n        \"cross-spawn\" : \"5.0.1\",\n        \"shelljs\" : \"0.7.5\"\n\n    }\n}\n"
  },
  {
    "path": "plugin.edn",
    "content": "{:name \"elm-light\"\n :version \"0.5.1\"\n :author \"Magnus Rundberget\"\n :source \"https://github.com/rundis/elm-light\"\n :desc \"Elm language plugin for Light Table\"\n :behaviors \"elm-light.behaviors\"}\n"
  },
  {
    "path": "project.clj",
    "content": "(defproject elm-light \"0.5.1\"\n  :dependencies [[org.clojure/clojure \"1.5.1\"]\n                 [quiescent \"0.1.4\"]\n                 [org.clojure/core.async \"0.1.267.0-0d7780-alpha\"]])\n"
  },
  {
    "path": "src/lt/plugins/elm_light/autocompleter/core.cljs",
    "content": "(ns lt.plugins.elm-light.autocompleter.core\n  \"Basis for generic autocompleter for LT\"\n  (:require [lt.objs.editor :as editor]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.command :as cmd]\n            [lt.object :as object]\n            [lt.util.js :as jsutil]\n            [lt.util.dom :as dom]\n            [lt.objs.context :as ctx]\n            [lt.objs.keyboard :as keyboard]\n            [cljs.core.async :as async :refer [<! put! chan timeout]])\n  (:require-macros [lt.macros :refer [behavior]]\n                    [cljs.core.async.macros :refer [go go-loop]]))\n\n\n(defn- curr-time []\n  (.getTime (js/Date.)))\n\n(defn- elapsed [start]\n  (str (- (curr-time) start) \" ms\"))\n\n\n;; TODO: Needs to be configurable (keymap and preferences for completeSingle etc)\n(def default-options\n  {:async true\n   :completeSingle false\n   :supportsSelection true\n   :closeOnUnfocus true\n   :customKeys {:Up #((.-moveFocus %2) -1 )\n                :Down #((.-moveFocus %2) 1)\n                :Enter  (fn [a b]\n                          (.pick b))\n                :Tab (fn [a b]\n                       (.pick b))\n                :Esc #((.-close %2 ))}})\n\n\n\n(defn- distinct-completions [hints]\n  (let [seen #js {}]\n    (filter (fn [hint]\n              (if (true? (aget seen (str (:moduleName hint) \"_\" (:text hint) )))\n                false\n                (aset seen (str (:moduleName hint) \"_\" (:text hint) ) true)))\n            hints)))\n\n\n;; TODO:\n;; - Configurable sorting\n;; - Configurable number of results ?\n;; - Configurable max completion length\n(defn- process-hint-results\n  \"Prepare found hints for display through CM showHint\"\n  [hints]\n\n  (when (seq hints)\n     (->> hints\n          (filter #(< (.-length (:displayText %)) 1000))\n          distinct-completions\n          (take 25)\n          (hash-map :list)\n          (#(let [fst (-> % :list first)]\n              (assoc % :from (:from fst) :to (:to fst)))) ;; allthough we've enforced from-to on each item, CM insists on having this props at root level to\n          clj->js)))\n\n\n\n(defn- listen-for-hint-results\n  \"Listen for hint results from all given channels\n  Will raise a behavior to show results when all channels have delivered a result\n  or alternatively the specified timeout has elapsed\"\n  [ed channels hinter-ch]\n  (let [t (timeout 500)] ;; should be configurable ?\n    (go-loop [all-results []\n              chs (conj channels t)]\n             (if (= 1 (count chs))\n               (put! hinter-ch all-results)\n               (let [[res source] (async/alts! chs)]\n                 (if (identical? source t)\n                   (do\n                     (println \"WARNING: Timeout waiting for hinter provider channel results\")\n                     (put! hinter-ch all-results))\n                   (recur (into all-results res) (remove #{source} chs))))))))\n\n\n\n(defn- completion-active? [ed]\n  (.-completionActive (.-state (editor/->cm-ed ed))))\n\n(defn- maybe-close-hinter [ed]\n  (when-let [state (completion-active? ed)]\n    (.close state)))\n\n\n\n\n(defn- on-line-change [line ch]\n  (let [ed (pool/last-active)]\n    (if-not (completion-active? ed)\n      (js/CodeMirror.off line \"change\" on-line-change)\n      (when (= \"+delete\" (.-origin ch)) ;; TODO: should probably handle paste and other things to\n        (object/raise ed :start-hinting)))))\n\n\n(defn- init-show-hint-ch\n  \"Creates a channel for writing results that are to be popped up with the hinter ui\n  Displays hint results async by calling the showHint plugin callback when\n  results are received on the channel\"\n  [ed]\n  (let [ch (chan)]\n    (js/CodeMirror.showHint (editor/->cm-ed ed)\n                            (fn [_ cb]\n                              (let [chs (object/raise-reduce ed :init-hints [])]\n                                (when (seq chs)\n                                  (go\n                                   (let [hints (<! ch)]\n                                     (cb (process-hint-results hints))))\n                                  (listen-for-hint-results ed chs ch))))\n                            (clj->js default-options))\n    ch))\n\n\n\n(behavior ::start-hinting\n          :triggers #{:start-hinting}\n          :desc \"Autocompleter: Start hinting\"\n          :reaction (fn [ed]\n                      (let [pos (editor/->cursor ed)\n                            line-handle (editor/line-handle ed (:line pos))]\n                        (when-not (completion-active? ed)\n                          (init-show-hint-ch ed)))))\n\n\n\n(behavior ::auto-show-on-input\n          :triggers #{:input}\n          :debounce 10\n          :desc \"Autocompleter: Show on change\"\n          :reaction (fn [ed _ ch]\n                      (object/raise ed :start-hinting)))\n"
  },
  {
    "path": "src/lt/plugins/elm_light/autocompleter.cljs",
    "content": "(ns lt.plugins.elm-light.autocompleter\n  (:require [quiescent :as q :include-macros true]\n            [quiescent.dom :as d]))\n\n\n\n(defn find-active [items]\n  (first (filter :active items)))\n\n(defn- handle-keypress\n  [{:keys [on-up on-down on-select on-cancel] :as props}\n   ev]\n  (let [kk (.-which ev)]\n    (case kk\n      38 (do (.preventDefault ev) (on-up))\n      40 (do (.preventDefault ev) (on-down))\n      13 (do\n           (.preventDefault ev)\n           (when-let [active (find-active (:items props))]\n             (set! (.-value (.-target ev)) (:name active)))\n           (on-select))\n      27 (do\n           (.preventDefault ev)\n           (set! (.-value (.-target ev)) \"\")\n           (on-cancel))\n      :default)))\n\n\n(q/defcomponent AutoCompleteMenu [props]\n  (let [items        (:items props)\n        style        (when-not (seq items) {:display \"none\"})\n        item-classes #(.concat \"autocomplete-dropdown-item row\" (if (:active %) \" autocomplete-active\" \"\"))]\n    (apply d/div {:onMouseDown (fn [e]\n                                 (.preventDefault e)\n                                 (.stopPropagation e))\n                  :className   \"autocomplete-dropdown-menu\" :style style}\n      (map (fn [item]\n               (d/div {:className (item-classes item)}\n                 (d/div {} (:name item)))) items))))\n\n\n(q/defcomponent Adder\n  [{:keys [on-add-package disabled] :as props}]\n  (d/button {:className \"btn\"\n             :disabled disabled\n             :onClick #(on-add-package)}\n            \"Add package\"))\n\n(q/defcomponent Versions [props]\n  (apply d/select {:className \"versions\"\n                   :value (:version props)\n                   :onChange #((:on-change-version props) (.-value (.-target %)))}\n         (map #(d/option {} %) (:versions props))))\n\n(q/defcomponent AutoComplete [props]\n  (d/span {}\n          (d/input {:value (:value props)\n                    :style        {:width \"250px\"}\n                    :name         \"package-search\"\n                    :autoComplete \"off\"\n                    :autoFocus    true\n                    :type         \"text\"\n                    :onKeyDown    (partial handle-keypress props)\n                    :onBlur       (fn [_] ((:on-blur props)))\n                    :onChange     (fn [ev]\n                                    ((:on-change props) (aget ev \"target\" \"value\")))})\n          (Versions props)\n          (Adder (assoc props :disabled (nil? (:version props))))\n          (d/div {:className \"autocomplete-dropdown\"}\n                 (AutoCompleteMenu props))))\n"
  },
  {
    "path": "src/lt/plugins/elm_light/clients.cljs",
    "content": "(ns lt.plugins.elm-light.clients\n  (:require [lt.plugins.elm-light.utils :as u]\n            [lt.plugins.elm-light.elm-ast :as ast]\n            [lt.objs.files :as files]\n            [lt.object :as object]\n            [lt.objs.console :as console]\n            [lt.objs.notifos :as notifos]\n            [lt.objs.clients :as cs]\n            [lt.objs.proc :as proc]\n            [lt.objs.eval :as eval]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.dialogs :as dialogs]\n            [lt.objs.sidebar.clients :as scl]\n            [lt.objs.popup :as popup]\n            [lt.objs.platform :as platform]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [behavior]]))\n\n(def cp (js/require \"child_process\"))\n(def os (js/require \"os\"))\n(def elm-client-path (files/join u/elm-plugin-dir \"node/elm-client.js\"))\n(def elm-node-path (files/join u/elm-plugin-dir \"node_modules\"))\n(def shelljs (js/require (files/join elm-node-path \"shelljs\")))\n\n\n\n\n(declare elm)\n\n(def harbor\n  ((js/require (files/join elm-node-path \"harbor\")) 3000, 4000))\n\n(defn claim-reactor-port [path cb]\n  (.claim harbor path cb))\n\n(defn release-reactor-port [path]\n  (.release harbor path))\n\n\n(defn on-exit [client]\n  (ast/delete-project-ast! (:dir @client))\n  (doseq [ed (pool/containing-path (:dir @client))]\n          (object/raise ed :project-disconnected))\n  (release-reactor-port (:dir @client))\n  (cs/rem! client))\n\n\n\n(defn on-elm-message [client data]\n  (let [msg (u/mod-js->clj data :keywordize-keys true)\n        logTime (js/Date.)\n        logPrefix (str (.getSeconds logTime) \":\" (.getMilliseconds logTime) \" >>\")]\n    (cond\n\n      (= (second msg) \"elm.client.connected\")\n      (do\n        (notifos/done-working (str \"Project connected: \" (:dir @client)))\n        (object/raise client :connect)\n        (object/raise cs/clients :connect client)\n        (doseq [ed (pool/containing-path (:dir @client))]\n          ;(println \"Raise connected : \" (-> @ed :info :path))\n          (object/raise ed :project-connected)))\n\n      (= (second msg) \"elm.ast.update\")\n      (let [{:keys [file type ast error package]} (last msg)]\n        (case type\n          \"parseError\"\n          (console/error (str file \"\\n\" error))\n\n          \"parsed\"\n          (ast/upsert-ast! (:dir @client)\n                           {:file file\n                            :ast ast\n                            :package package})\n          \"deleted\"\n          (ast/delete-ast! (:dir @client) file)\n\n          \"packagesDeleted\"\n          (do\n            (ast/delete-package-asts! (:dir @client))\n            (notifos/set-msg! (str \"Elm stuff for \" (:dir @client) \" was nuked, all package ASTs are lost. Do a package install or lint to get them back !\")\n                              {:class \"error\"}))\n\n          (do\n            (println \"Unhandled ast event:\" type file))))\n\n      (= (second msg) \"doc.search.results\")\n      (object/raise elm :elm.doc.search.results\n                    (assoc-in msg [2 :project-dir] (:dir @client)))\n\n\n      :else\n      (object/raise cs/clients :message msg))))\n\n\n(defn start-elm-worker [path port client]\n  (let [worker (.fork cp\n                      elm-client-path\n                      #js [port]\n                      (clj->js {:execPath (.-executable js/process)\n                                :cwd path\n                                :silent true\n                                :env (if (= (.platform os) \"win32\")\n                                       {:NODE_PATH elm-node-path}\n                                       (proc/merge-env {:NODE_PATH elm-node-path}))}))]\n\n    (.on (.-stdout worker) \"data\" (fn [msg]\n                                    (println (str \"out: \" msg))))\n    (.on (.-stderr worker) \"data\" (fn [err]\n                                    (notifos/set-msg! (str \"Elm error: \" err) {:class \"error\"})\n                                    (console/error err)))\n    (.on worker \"message\" #(on-elm-message client %))\n    (.on worker \"exit\" #(on-exit client))\n    worker))\n\n\n(behavior ::send!\n          :triggers #{:send!}\n          :reaction (fn [client msg]\n                      (.send (:worker @client) (clj->js msg))))\n\n\n\n(defn start-elm-client [{:keys [path proj-path client] :as props}]\n  (notifos/working \"Connecting..\")\n  (claim-reactor-port proj-path\n                      (fn [_ port]\n                        (let [worker (start-elm-worker proj-path port client)]\n                          (object/merge! client\n                                         {:name (files/basename proj-path)\n                                          :dir proj-path\n                                          :reactor-port port\n                                          :worker worker\n                                          :commands #{:editor.elm.lint\n                                                      :editor.eval.elm\n                                                      :editor.elm.make\n                                                      :editor.elm.ast.passthrough\n                                                      :elm.reload.ast\n                                                      :editor.elm.ast.parsetext\n                                                      :editor.elm.hint\n                                                      :docs.elm.search\n                                                      :editor.elm.doc\n                                                      :elm.repl.restart\n                                                      :editor.elm.gendoc\n                                                      :elm.test\n                                                      :elm.test.suite}})\n                          (object/add-behavior! client ::send!)))))\n\n\n\n\n(defn handle-no-elm []\n  (notifos/done-working)\n  (console/log (.-PATH (.-env js/process)))\n  (popup/popup! {:header \"We couldn't find Elm (elm-make) in your path\"\n                 :body (str \"In order to use elm-light, Elm must be installed and on your system PATH.\"\n                            \"(Check the console for PATH as seen from Light Table\")\n                 :buttons [{:label \"Install Elm\"\n                            :action (fn []\n                                      (platform/open \"https://guide.elm-lang.org/install.html\"))}\n                           {:label \"ok\"}]}))\n\n\n(defn check-elm []\n  (.which shelljs \"elm-make\"))\n\n\n\n(defn try-connect [{:keys [info command] :as props}]\n  (let [path (:path info)\n        proj-path (u/project-path path)\n        client (cs/client! :elm-client)]\n    (cond\n      (not (seq proj-path))\n      (do\n        (notifos/done-working)\n        (notifos/set-msg! (str \"Couldn't find a elm-package.json in any parent of path: \" path) {:class \"error\"})\n        (cs/rem! client))\n\n      (not (check-elm))\n      (do\n        (handle-no-elm)\n        (cs/rem! client))\n\n      :else\n      (let [[ok? msg] (u/valid-project-elm-version proj-path)]\n        (if ok?\n          (start-elm-client {:path path\n                             :proj-path proj-path\n                             :client client})\n          (do\n            (notifos/done-working)\n            (console/error msg)\n            (notifos/set-msg! msg {:class \"error\"})\n            (cs/rem! client)))))\n    client))\n\n\n\n\n(defn find-client [{:keys [origin command info create] :as opts}]\n  (let [proj-path (u/project-path (:path info))\n        [result client] (cs/discover command info)]\n\n    (condp = result\n      :none (if create\n              (create opts)\n              (do\n                (notifos/done-working)\n                (object/raise eval/evaler :no-client opts)\n                (cs/placeholder)))\n      :found (if (= (:dir @client) proj-path)\n               client\n               (create opts))\n      :select (do\n                (object/raise eval/evaler\n                              :select-client\n                              client\n                              (fn [client]\n                                (cs/swap-client! (-> @origin :client :default) client)\n                                (object/update! origin [:client] assoc :default client)))\n                (cs/placeholder)))))\n\n\n(defn get-eval-client\n  \"Helper method to get eval client for a given editor and command\n  If none found it will try to connect\"\n  ([ed cmd] (get-eval-client ed cmd try-connect))\n  ([ed cmd create]\n   (let [cur (-> @ed :client :default)]\n     (if (and cur (cs/available? cur))\n       cur\n       (let [neue (find-client {:command cmd\n                                :origin ed\n                                :info (:info @ed)\n                                :create create})]\n\n         (object/update! ed [:client] assoc :default neue)\n         (object/raise ed :set-client neue)\n         neue)))))\n\n\n(defn get-eval-client-if-connected\n  \"Helper method to get eval client for a given editor and command\"\n  [ed cmd]\n  (get-eval-client ed cmd (fn [opts]\n                               (notifos/done-working \"\")\n                               nil)))\n\n\n;; TODO : Need to have this here for now, because behaviour must be defined before Elm object is created\n(behavior ::elm-doc-search-results\n          :desc \"Workaround behavior for showing doc search results in sidebar\"\n          :triggers #{:elm.doc.search.results}\n          :reaction (fn [_ [client-id command msg]]\n                      (object/raise cs/clients\n                                      :message\n                                      [client-id\n                                       command\n                                       (ast/search-docs\n                                         (:search msg)\n                                         (:project-dir msg))])))\n\n(behavior ::eval!\n          :triggers #{:eval!}\n          :reaction (fn [this event]\n                      (let [{:keys [info origin]} event]\n                        (notifos/working \"Evaluating elm...\")\n                        (cs/send (eval/get-client! {:command :editor.eval.elm\n                                                    :origin origin\n                                                    :info info\n                                                    :create try-connect})\n                                 :editor.eval.elm info\n                                 :only origin))))\n\n\n\n\n;;****************************************************\n;; LT Connection stuff\n;;****************************************************\n(behavior ::connect\n          :triggers #{:connect}\n          :reaction (fn [this path]\n                      (try-connect {:info {:path path}})))\n\n\n(object/object* ::elm-lang\n                :tags #{:elm.lang})\n\n\n(def elm (object/create ::elm-lang))\n\n\n(scl/add-connector {:name \"Elm\"\n                    :desc \"Select a directory to serve as the root of your elm project.\"\n                    :connect (fn []\n                               (dialogs/dir elm :connect))})\n\n\n\n"
  },
  {
    "path": "src/lt/plugins/elm_light/docpreview.cljs",
    "content": "(ns lt.plugins.elm-light.docpreview\n  (:require [lt.plugins.elm-light.clients :refer [try-connect]]\n            [lt.plugins.elm-light.utils :refer [project-path elm-plugin-dir]]\n            [lt.plugins.elm-light.elm-ast :as ast]\n            [lt.object :as object]\n            [lt.objs.eval :as eval]\n            [lt.objs.clients :as clients]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.editor :as editor]\n            [lt.objs.notifos :as notifos]\n            [lt.objs.tabs :as tabs]\n            [lt.util.dom :as dom]\n            [lt.util.js :as js-util]\n            [lt.util.load :as loadz]\n            [lt.objs.files :as files])\n  (:require-macros [lt.macros :refer [defui behavior]]))\n\n\n(def highlight-js (files/join elm-plugin-dir \"js\" \"highlight.pack.js\"))\n\n\n(defui preview-skeleton [this]\n  [:div {:class \"elm-doc-preview\"}\n   [:h1 \"Generating elm docs, please wait a little...\"]])\n\n\n\n(object/object* ::elmdoc\n                :tags [:elmdoc]\n                :name \"elmdoc\"\n                :behaviors [::on-close-destroy]\n                :init (fn [this filename]\n                        (object/update! this [:name] (constantly (str filename \" - Live\")))\n                        (preview-skeleton this)))\n\n\n\n(behavior ::on-close-destroy\n          :triggers #{:close}\n          :reaction (fn [this]\n                      (when-let [ts (:lt.objs.tabs/tabset @this)]\n                        (when (= (count (:objs @ts)) 1)\n                          (tabs/rem-tabset ts)))\n                      (when-let [ed (:owner-ed @this)]\n                        (object/assoc-in! ed [:elmdoc] nil))\n                      (object/destroy! this)))\n\n\n;; (doseq [x (object/by-tag :elmdoc)]\n;;   (println \"Found one\")\n;;   (object/destroy! x))\n\n\n(behavior ::gendoc\n          :description \"Preview package doc for a given Elm file\"\n          :triggers #{:gendoc}\n          :reaction (fn [ed]\n                      (let [info (:info @ed)\n                            cl (eval/get-client! {:command :editor.elm.gendoc\n                                                  :origin ed\n                                                  :info info\n                                                  :create try-connect})]\n                        (notifos/working (str \"Starting elm doc generation for: \" (:path info)))\n                        (clients/send cl\n                                      :editor.elm.gendoc (assoc info :project-path (project-path (:path info)))\n                                      :only ed))))\n\n\n\n(defn- maybe-create-elm-preview [elmdoc]\n  (if-let [preview (:preview @elmdoc)]\n    preview\n    (let [el (object/->content elmdoc)\n          preview (.embed js/Elm js/Elm.DocPreview el (clj->js {:modules \"[]\" :selectModule \"\"}))]\n      (object/assoc-in! elmdoc [:preview] preview)\n      preview)))\n\n\n(behavior ::elm-gendoc-res\n          :triggers #{:elm.gendoc.res}\n          :reaction (fn [ed res]\n                      (notifos/done-working \"Elm doc generated\")\n                      (when-let [elmdoc (:elmdoc @ed)]\n                        (let [preview (maybe-create-elm-preview elmdoc)\n                              path (-> @ed :info :path)\n                              module-name (-> (ast/get-module-ast (project-path path) path)\n                                              ast/get-module-name)]\n                          (.send (.-modules (.-ports preview)) res)\n                          (.send (.-selectModule (.-ports preview)) module-name)\n                          ;; Hack, when kittens go to die (:\n                          (.requestAnimationFrame js/window\n                                                  #(doseq [block (dom/$$ \"pre > code\" (object/->content elmdoc))]\n                                                     (.highlightBlock js/hljs block)))\n;;                           (js-util/wait 50\n;;                                         #(doseq [block (dom/$$ \"pre > code\" (object/->content elmdoc))]\n;;                                            (.highlightBlock js/hljs block)))\n                          ))))\n\n\n(behavior ::gen-on-save\n          :triggers #{:save}\n          :reaction (fn [ed]\n                      (object/raise ed :gendoc)))\n\n\n(behavior ::elm-docpreview\n          :triggers #{:elm.docpreview}\n          :reaction (fn [ed]\n                      (let [path (-> @ed :info :path)\n                            elmdoc-obj (or (:elmdoc @ed) (object/create ::elmdoc path))]\n                        (loadz/js highlight-js :sync)\n                        (tabs/add-or-focus! elmdoc-obj)\n                        (object/assoc-in! ed [:elmdoc] elmdoc-obj)\n                        (object/assoc-in! elmdoc-obj [:owner-ed] ed)\n                        (object/add-behavior! ed ::gen-on-save)\n                        (object/raise ed :gendoc))))\n\n\n\n(cmd/command {:command :elm.docpreview\n              :desc \"Elm: Preview doc for selected file\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.docpreview)))})\n"
  },
  {
    "path": "src/lt/plugins/elm_light/elm_ast.cljs",
    "content": "(ns lt.plugins.elm-light.elm-ast\n  (:require [lt.plugins.elm-light.utils :as util]\n            [lt.objs.console :as console]\n            [lt.object :as object]\n            [lt.objs.editor :as editor]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.statusbar :as statusbar]\n            [lt.objs.files :as files]\n            [crate.binding :refer [bound]]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [defui behavior background]]))\n\n(def elm-parser-path (files/join util/elm-plugin-dir \"node\" \"elmparser\"))\n(def elm-parser (js/require elm-parser-path))\n\n\n(defn- start-with? [the-str fragment]\n  (when (and the-str fragment)\n    (= 0 (.indexOf the-str fragment))))\n\n(defn idx-of\n  [pred coll]\n  (first\n    (keep-indexed\n      (fn [idx x]\n        (when (pred x)\n          idx))\n      coll)))\n\n\n;; High level desc of ast structure\n(comment\n  [{:project \"/somedir/another/projectDir\"\n    :file-asts [{:file \"/somedir/another/projectDir/src/MyModule.elm\"\n                 :ast {:moduleDeclaration {}\n                       :doc \"some module doc\"\n                       :imports []\n                       :declarations []}}\n                {:file \"/somedir/another/projectDir/elm-stuff/packages/elm-lang/core/4.0.5/src/Array.elm\"\n                 :ast {:moduleDeclaration {}\n                       :doc \"some module doc\"\n                       :imports []\n                       :declarations []}\n                 :package {:name \"elm-lang/core\"\n                           :version \"4.0.5\"}}]}\n   {:project \"/somedir/another/projectDir2\"\n    :file-asts [{:file \"/somedir/another/projectDir2/src/MyModule2.elm\"\n                 :ast {:moduleDeclaration {}\n                       :doc \"some module doc2\"\n                       :imports []\n                       :declarations []}}\n                {:file \"/somedir/another/projectDir2/elm-stuff/packages/elm-lang/core/4.0.5/src/Array.elm\"\n                 :ast {:moduleDeclaration {}\n                       :doc \"some module doc2\"\n                       :imports []\n                       :declarations []}\n                 :package {:name \"elm-lang/core\"\n                           :version \"4.0.5\"}}]}])\n\n(defonce project-asts\n  (atom []))\n\n;; AST Mutants\n\n(defn upsert-ast! [project file-ast]\n  (let [prj-idx (idx-of #(= project (:project %)) @project-asts)]\n     (if prj-idx\n       (swap! project-asts update-in\n              [prj-idx :file-asts]\n              (fn [file-asts]\n                (-> (filterv #(not= (:file file-ast) (:file %)) file-asts)\n                    (conj file-ast))))\n       (swap! project-asts conj {:project project :file-asts [file-ast]}))))\n\n\n(defn delete-ast! [project file]\n  (when-let [prj-idx (idx-of #(= project (:project %)) @project-asts)]\n    (swap! project-asts update-in\n           [prj-idx :file-asts]\n           (fn [file-asts]\n             (filterv #(not= file (:file %)) file-asts)))))\n\n(defn delete-package-asts! [project]\n  (when-let [prj-idx (idx-of #(= project (:project %)) @project-asts)]\n    (swap! project-asts update-in\n           [prj-idx :file-asts]\n           (fn [file-asts]\n             (vec (remove :package file-asts))))))\n\n(defn delete-project-ast! [project]\n  (swap! project-asts\n         (fn [prjs]\n           (filterv #(not= project (:project %)) prjs))))\n\n(defn reset-asts! []\n  (reset! project-asts []))\n\n\n\n;; AST Queries\n(defn get-project [project]\n  (->> @project-asts\n       (filter #(= project (:project %)))\n       first))\n\n(defn get-module-ast [project module-file]\n  (when-let [prj (get-project project)]\n    (->> prj\n         :file-asts\n         (filter #(= module-file (:file %)))\n         first)))\n\n\n(defn get-module-by-name [project module-name]\n  (when-let [prj (get-project project)]\n    (->> prj\n         :file-asts\n         (filter #(= module-name (-> % :ast :moduleDeclaration :value)))\n         first)))\n\n\n\n\n(defn parse-editor-sync [ed]\n  (try\n    (let [res (.parse elm-parser (editor/->val ed))]\n      {:file (-> @ed :info :path)\n       :ast (util/mod-js->clj res :keywordize-keys true)})\n    (catch :default e\n      (println \"Parse editor contents failed\" e)\n      nil)))\n\n\n(defn parse-editor-header-sync [ed]\n  (try\n    (let [res (.parse elm-parser (editor/->val ed) #js {:startRule \"headerOnly\"})]\n       {:file (-> @ed :info :path)\n        :ast (js->clj res :keywordize-keys true)})\n    (catch :default e\n      (println \"Parse editor header block failed\" e)\n      nil)))\n\n(def parse-editor-async\n  (background\n    (fn [obj-id  parser-path callback-behavior elm-code]\n      (time (let [parser (js/require parser-path)]\n              (try\n                (let [res (parser/parse elm-code)]\n                  (js/_send obj-id\n                            callback-behavior\n                            #js {:status \"ok\" :module res}))\n                (catch :default e\n                  (js/_send obj-id\n                            callback-behavior\n                            #js {:status \"fail\" :error e}))))))))\n\n\n\n\n\n\n\n\n\n\n;; Helpers\n(defn get-module-name [module]\n  (-> module :ast :moduleDeclaration :value))\n\n(defn exposeAll? [exposing]\n  (= \"exposeAll\" (-> exposing :exports :exports first :type)))\n\n\n\n(defn package-import? [modules import]\n  (->> (filter :package modules)\n       (some #(= (:value import) (-> % :ast :moduleDeclaration :value)))))\n\n\n(defn extract-exports [exposing]\n  (->> exposing\n       :exports\n       :exports\n       (map :value)))\n\n(defn exposed-by-module? [module candidate]\n  (let [exposing (-> module :ast :moduleDeclaration :exposing)]\n    (if (exposeAll? exposing)\n      true\n      (-> (extract-exports exposing) set (contains? candidate)))))\n\n\n\n(defn find-type-exposing [module-exposing type-name]\n  (->> module-exposing\n       :exports\n       :exports\n       (filter #(= type-name (:value %)))\n       first))\n\n(defn find-import-type-exposing [imp owning-type-name type-name]\n  (->> imp\n       :exposing\n       :exports\n       :exports\n       (filter #(= owning-type-name (:value %)))\n       first))\n\n(defn enrich-type-declarations\n  [module-exposing\n   exp-all?\n   module-name\n   package\n   file\n   type-decl\n   ]\n  (let [type-exposing (find-type-exposing module-exposing (:value type-decl))\n        exp-all-type? (exposeAll? type-exposing)\n        exports-type (set (extract-exports type-exposing))\n        exp-by-mod? #(or exp-all?\n                         exp-all-type?\n                         (contains? exports-type %))]\n\n    (->> (:adtDefs type-decl)\n                   (map #(assoc % :exposed? (exp-by-mod? (:value %))\n                           :owning-type-name (:value type-decl)\n                           :file file\n                           :module-name module-name\n                           :package package)))))\n\n\n(defn enrich-module-declarations\n  [module]\n  (let [exposing (-> module :ast :moduleDeclaration :exposing)\n        expAll? (exposeAll? exposing)\n        exports (-> (extract-exports exposing) set)\n        exp-by-mod? #(or expAll? (contains? exports %))\n        file (:file module)\n        module-name (get-module-name module)\n        package (:package module)]\n\n    (->> (-> module :ast :declarations)\n         (map #(assoc % :exposed?  (exp-by-mod? (:value %))\n                 :file file\n                 :module-name module-name\n                 :package package))\n         (mapcat (fn [decl]\n                   (case (:type decl)\n                     \"typeDecl\"\n                     (conj (enrich-type-declarations\n                             exposing\n                             expAll?\n                             module-name\n                             package\n                             file\n                             decl) decl)\n\n                     [decl]))))))\n\n\n\n(defn get-exposed-declarations [module]\n  (->> (enrich-module-declarations module)\n       (filter :exposed?)))\n\n(def get-exposed-declarations-memo\n  (memoize\n    (fn [module]\n     (get-exposed-declarations module))))\n\n\n(defn get-import-candidate-tokens\n  [imp\n   imp-module-name\n   imp-alias\n   imp-exported-names\n   imp-exports-all?\n   exposed-declaration]\n\n\n  (let [decl-name (:value exposed-declaration)\n        type-exposing (when (= \"adtDef\" (:type exposed-declaration))\n                        (find-import-type-exposing imp\n                                                   (:owning-type-name exposed-declaration)\n                                                   (:value exposed-declaration)))\n        exp-all-type? (exposeAll? type-exposing)\n        exports-type (set (extract-exports type-exposing))]\n    (-> #{(if imp-alias\n            (str imp-alias \".\" decl-name)\n            (str imp-module-name \".\" decl-name ))\n          (when (or imp-exports-all?\n                    exp-all-type?\n                    (contains? imp-exported-names decl-name)\n                    (contains? exports-type decl-name))\n            decl-name)}\n        (disj nil))))\n\n\n(defn get-external-exposed-modules\n  [curr-module-name\n   imported-mod-names\n   modules]\n  (->> modules\n       (filter #(and (not= curr-module-name (get-module-name %))\n                     (contains? imported-mod-names (get-module-name %))))\n       (mapcat #(get-exposed-declarations-memo %))\n       (group-by :module-name)))\n\n\n\n(defn get-external-candidates [module modules]\n  (let [imports (-> module :ast :imports :imports)\n        imported-mod-names (->> imports (map :value) set)\n        external-exposed (get-external-exposed-modules (get-module-name module)\n                                                       imported-mod-names\n                                                       modules)]\n    (->> imports\n         (mapcat\n           (fn [imp]\n             (let [imp-exported-names (-> (:exposing imp) -> extract-exports set)\n                   imp-exports-all? (exposeAll? (:exposing imp))]\n               (->> (get external-exposed (:value imp))\n                    (map #(assoc % :candidate-tokens\n                            (get-import-candidate-tokens imp\n                                                         (:value imp)\n                                                         (:alias imp)\n                                                         imp-exported-names\n                                                         imp-exports-all?\n                                                         %))))))))))\n\n\n\n(defn get-core-modules [all-modules]\n  (->> (filter #(= \"elm-lang/core\" (-> % :package :name)) all-modules)\n       (group-by #(-> % :ast :moduleDeclaration :value))))\n\n\n\n(defn- elm-18? [version]\n  (and version (<= 5 (js/parseInt (first version)))))\n\n\n\n\n;; TODO: Could potentially be memoized...\n(defn get-default-candidates\n  \"Get candidates for Elm default imports as per\n  https://github.com/elm-lang/core\"\n  [modules]\n  (->> (concat\n         (->> (get modules \"Basics\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens #{(:value %)}) ))\n         (->> (get modules \"Debug\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens #{(str \"Debug.\" (:value %))}) ))\n         (->> (get modules \"Maybe\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens\n                      (if (contains? #{\"Just\" \"Nothing\"} (:value %))\n                        #{(:value %) (str \"Maybe.\" (:value %))}\n                        #{(str \"Maybe.\" (:value %))})) ))\n         (->> (get modules \"Result\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens\n                      (if (contains? #{\"Ok\" \"Err\"} (:value %) )\n                        #{(:value %) (str \"Result.\" (:value %))}\n                        #{(str \"Result.\" (:value %))})) ))\n         (->> (get modules \"Platform\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens\n                      (if (= (:value %) \"Program\")\n                        #{\"Program\"}\n                        #{(str \"Platform.\" (:value %))}))))\n         (->> (get modules \"Platfrom.Cmd\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens\n                      (case (:value %)\n                        \"Cmd\" #{\"Cmd\"}\n                        \"!\" #{\"!\"}\n                        #{(str \"Platform.Cmd.\" (:value %))\n                          (str \"Cmd.\" (:value %))}))))\n         (->> (get modules \"Platform.Sub\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens\n                      (if (= (:value %) \"Sub\")\n                        #{\"Sub\"}\n                        #{(str \"Platform.Sub.\" (:value %))\n                          (str \"Sub.\" (:value %))}))))\n         (->> (get modules \"List\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens\n                      (if (= \"::\" (:value %))\n                        #{\"::\"}\n                        #{(str \"List.\" (:value %))}))))\n\n         ;; 0.18 specific\n         (->> (get modules \"Tuple\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens #{(str \"Tuple.\" (:value %))}) ))\n         (when (-> (get modules \"String\") first :package :version elm-18?)\n           (->> (get modules \"String\")\n              (mapcat get-exposed-declarations)\n              (map #(assoc % :candidate-tokens #{(str \"String.\" (:value %))}) ))))\n       (map #(assoc % :default-candidate? true))))\n\n\n(def get-default-candidates-memo\n  (memoize\n    (fn [core-modules]\n     (get-default-candidates core-modules))))\n\n\n(defn get-current-module-candidates [module]\n  (let [mod-name (get-module-name module)]\n    (->> (enrich-module-declarations module)\n         (map #(assoc % :candidate-tokens #{(:value %)})))))\n\n\n\n(defn get-jump-to-candidates [module modules]\n  (concat\n    (get-current-module-candidates module)\n    (get-external-candidates module modules)\n    (get-default-candidates (get-core-modules modules))))\n\n\n\n(defn get-candidate-by-token [token module modules]\n  (->> (get-jump-to-candidates module modules)\n       (filter #(contains? (:candidate-tokens % ) token))\n       first))\n\n\n\n\n(defn- create-param-candidate [param candidate]\n  {:value (:value candidate)\n   :candidate (:value param)\n   :location (:location candidate)\n   :package (:package candidate)\n   :file (:file candidate)\n   :doc (:doc candidate)\n   :module-name (:module-name candidate)})\n\n(defn- create-typealias-rec-candidates [param candidate]\n  (concat [(create-param-candidate param candidate)]\n          (map #(hash-map\n                  :value (str (:value candidate) \".\" (:name %))\n                  :candidate (str (:value param) \".\" (:name %))\n                  :package (:package candidate)\n                  :location (:location %)\n                  :signatureRaw (:signatureRaw %)\n                  :file (:file candidate)\n                  :module-name (:module-name candidate))\n               (-> candidate :tipe :fieldDefs))))\n\n\n(defn- create-destructured-type-alias-candidates [param candidate]\n  (let [get-field-def #(->> candidate :tipe :fieldDefs\n                            (filter (fn [x] (= % (:name x))))\n                            first)]\n    (map (fn [field]\n           (let [{:keys [location doc signatureRaw]} (get-field-def (:value field)) ]\n             {:value (str (:value candidate) \".\" (:value field))\n              :candidate (:value field)\n              :package (:package candidate)\n              :file (:file candidate)\n              :doc signatureRaw\n              :location location\n              :module-name (:module-name candidate)}))\n         (:patterns param))))\n\n(defn- create-bracketed-type-alias-candidates [param candidate]\n  (let [aliaz (-> param :pattern :alias)\n        get-field-def #(->> candidate :tipe :fieldDefs\n                            (filter (fn [x] (= % (:name x))))\n                            first)]\n    (concat\n      (when aliaz\n        (concat\n          [(-> (create-param-candidate param candidate)\n               (assoc :candidate aliaz))]\n\n          (map #(hash-map\n                  :value (str (:value candidate ) \".\" (:name %))\n                  :candidate (str aliaz \".\" (:name %))\n                  :location (:location %)\n                  :doc (:signatureRaw %)\n                  :package (:package candidate)\n                  :file (:file candidate)\n                  :module-name (:module-name candidate))\n               (-> candidate :tipe :fieldDefs))))\n      (->>\n        (map\n          (fn [field]\n            (when-let [field-def (get-field-def (:value field))]\n              {:value  (str (:value candidate) \".\" (:value field))\n               :candidate (:value field)\n               :location (:location field-def)\n               :package (:package candidate)\n               :file (:file candidate)\n               :doc (:signatureRaw field-def)\n               :module-name (:module-name candidate)}))\n          (-> param :pattern :value :patterns))\n        (filter identity)))))\n\n\n(defn- print-rec [rec]\n  (str \"{ \"\n       (->> (map :signatureRaw (:fieldDefs rec))\n           (s/join \"\\n, \"))\n       \"\\n}\"))\n\n\n\n\n(defn- create-bracketed-adt-candidates [param candidate module modules]\n  (let [adtType (-> candidate :adtDefs first)\n        adtPattern (:pattern param)\n        fst-destruct-variable (-> param :pattern :value :variables first)]\n    (concat\n      [{:value (str (:value candidate) \".\" (:value adtType))\n        :candidate (:value adtType)\n        :location (:location adtType)\n        :package (:package candidate)\n        :file (:file candidate)\n        :doc (:paramsRaw adtType)\n        :module-name (:module-name candidate)}]\n\n      (when-let [aliaz (:alias adtPattern)]\n        [(-> (create-param-candidate param candidate)\n             (assoc :candidate aliaz))])\n\n      (when (= \"variable\" (:type fst-destruct-variable))\n        (let [adtParam (-> adtType :params first)\n              adtCandidate (get-candidate-by-token (:value adtParam) module modules) ]\n          (concat\n            (when adtCandidate\n              [{:value (:value adtCandidate)\n                :candidate (:value fst-destruct-variable)\n                :location (:location adtCandidate)\n                :package (:package adtCandidate)\n                :file (:file adtCandidate)\n                :doc (:doc adtCandidate)\n                :module-name (:module-name adtCandidate)}])\n\n            (when (= \"typeRec\" (:type adtParam))\n              (concat\n                [{:value (str (:value candidate) \".\" (:value adtType) \".<customrecord>\")\n                 :candidate (:value fst-destruct-variable)\n                 :location (:location adtParam)\n                 :doc (print-rec adtParam)\n                 :package (:package candidate)\n                 :file (:file candidate)\n                 :module-name (:module-name candidate)}])\n              (map #(hash-map\n                      :value (str (:value candidate) \".\" (:value adtType) \".<customrecord>.\" (:name %))\n                      :candidate (str (:value fst-destruct-variable) \".\" (:name %))\n                      :location (:location %)\n                      :doc (:signatureRaw %)\n                      :package (:package candidate)\n                      :file (:file candidate)\n                      :module-name (:module-name candidate))\n                   (:fieldDefs adtParam))))))\n\n\n      (when [(= \"patternRec\" (:type fst-destruct-variable))]\n        (let [adtParam (-> adtType :params first)\n              adtCandidate (get-candidate-by-token (:value adtParam) module modules)\n              get-field-def #(->> adtCandidate :tipe :fieldDefs\n                                  (filter (fn [x] (= % (:name x))))\n                                  first)]\n          (concat\n            (when (= \"typeAliasDecl\" (:type adtCandidate))\n              (concat\n                (when-let [aliaz (-> fst-destruct-variable :pattern :alias)]\n                  (concat\n                    [(create-param-candidate {:value aliaz} adtCandidate)]\n                    (map #(hash-map\n                            :value (str (:value adtCandidate) \".\" (:name %))\n                            :candidate (str aliaz \".\" (:name %))\n                            :file (:file adtCandidate)\n                            :package (:package adtCandidate)\n                            :doc (:signatureRaw %)\n                            :location (:location %)\n                            :module-name (:module-name adtCandidate))\n                         (-> adtCandidate :tipe :fieldDefs))))\n\n                (when (= \"patternRec\" (:type fst-destruct-variable))\n                  (map (fn [field]\n                         (when (get-field-def (:value field))\n                           (let [{:keys [location doc signatureRaw]} (get-field-def (:value field)) ]\n                             {:value (str (:value adtCandidate) \".\" (:value field))\n                              :candidate (:value field)\n                              :package (:package adtCandidate)\n                              :file (:file adtCandidate)\n                              :doc signatureRaw\n                              :location location\n                              :module-name (:module-name adtCandidate)})))\n                       (-> fst-destruct-variable :patterns)))\n\n                (when (= \"patternBracket\" (:type fst-destruct-variable))\n                  (map (fn [field]\n                         (when (get-field-def (:value field))\n                           (let [{:keys [location doc signatureRaw]} (get-field-def (:value field)) ]\n                             {:value (str (:value adtCandidate) \".\" (:value field))\n                              :candidate (:value field)\n                              :package (:package adtCandidate)\n                              :file (:file adtCandidate)\n                              :doc signatureRaw\n                              :location location\n                              :module-name (:module-name adtCandidate)})))\n                       (-> fst-destruct-variable :pattern :value :patterns)))))\n\n            (when (= \"typeRec\" (-> adtType :params first :type))\n              (concat\n                (when-let [aliaz (-> fst-destruct-variable :pattern :alias)]\n                  (concat\n                    [{:value (str (:value candidate) \".\" (:value adtType) \".<unamed record>\")\n                      :candidate aliaz\n                      :file (:file candidate)\n                      :package (:package candidate)\n                      :location (-> adtType :params first :location)\n                      :doc (-> adtType :params first print-rec)  ;(-> adtType :params first :signatureRaw)\n                      :module-name (:module-name candidate)}]\n                    (map #(hash-map\n                            :value (str (:value candidate) \".\" (:value adtType) \".\" (:name %))\n                            :candidate (str aliaz \".\" (:name %))\n                            :file (:file candidate)\n                            :package (:package candidate)\n                            :doc (:signatureRaw %)\n                            :location (:location %)\n                            :module-name (:module-name candidate))\n                         (-> adtType :params first :fieldDefs))))\n\n                (map (fn [field]\n                       {:value (str (:value candidate) \".\" (:value adtType) \".\" (:name field))\n                        :candidate (:name field)\n                        :package (:package candidate)\n                        :file (:file candidate)\n                        :doc (:signatureRaw field)\n                        :location (:location field)\n                        :module-name (:module-name candidate)})\n\n                     (-> adtType :params first :fieldDefs))))))))))\n\n\n(defn- get-candidate-by-token-loc-aware [token pos module modules]\n  (let [jump-to-candidates (get-jump-to-candidates module modules)\n        decl (find-top-level-declaration-by-pos pos module)]\n    (if (and (= \"nameDef\" (:type decl))\n             (-> decl :annotation :signature))\n      (->> (mapcat (fn [param {:keys [candidate] :as ann}]\n                     (cond\n                       (and (= \"variable\" (:type param))\n                            (= \"typeAliasDecl\" (:type candidate)))\n                       (create-typealias-rec-candidates param candidate)\n\n\n                       (and (= \"variable\" (:type param))\n                            (= \"typeDecl\" (:type candidate)))\n\n                       [(create-param-candidate param candidate)]\n\n\n                       (and (= \"patternRec\" (:type param))\n                            (= \"typeAliasDecl\" (:type candidate)))\n                       (create-destructured-type-alias-candidates param candidate)\n\n\n                       (and (= \"patternBracket\" (:type param))\n                            (= \"typeAliasDecl\" (:type candidate)))\n                       (create-bracketed-type-alias-candidates param candidate)\n\n\n                       (and (= \"patternBracket\" (:type param))\n                            (= \"typeDecl\" (:type candidate))\n                            (= 1 (-> candidate :adtDefs count))\n                            (not (in-range? pos (-> decl :annotation))))\n                       (create-bracketed-adt-candidates param candidate module modules)\n\n\n                       :else []))\n                   (:patterns decl)\n                   (-> decl\n                       (enrich-top-level-declaration jump-to-candidates)\n                       :annotation\n                       :signature))\n           (filter #(= token (:candidate %)))\n           first\n           ((fn [x]\n              (or x\n                  (get-candidate-by-token token module modules)))))\n\n      ;; fallback to default\n      (get-candidate-by-token token module modules))))\n\n\n\n\n\n(defn ->pos [ast-pos]\n  {:line (-> ast-pos :line dec)\n   :ch (-> ast-pos :column dec)})\n\n\n(defn ->range [location]\n  {:start (->pos (:start location))\n   :end (->pos (:end location))})\n\n\n(defn- in-range? [{:keys [ch line]} decl]\n  (let [{:keys [start end]} (->range (:location decl))]\n    (cond\n      (or (< line (:line start) )\n          (> line (:line end) ))\n      false\n\n      (or (and (= (:line start) line)\n               (< ch (:ch start) ))\n          (and (= (:line end) line)\n               (> ch (:ch end) )))\n      false\n\n      :else\n      true)))\n\n\n\n(defn find-top-level-declaration-by-pos\n  ([pos module]\n   (->> (:ast module)\n        :declarations\n        (filter #(in-range? pos %))\n        first))\n  ([pos project-dir module-file]\n   (find-top-level-declaration-by-pos\n     pos\n     (get-module-ast project-dir module-file))))\n\n(defn find-import-by-pos\n  ([pos module]\n   (->> (:ast module)\n        :imports\n        :imports\n        (filter #(in-range? pos %))\n        first))\n  ([pos project-dir module-file]\n   (find-import-by-pos\n     pos\n     (get-module-ast project-dir module-file))))\n\n\n(defn enrich-top-level-declaration\n  \"For annotated definitions it tries to add extended information\n  about types for each parameter (ie union types and type aliases)\"\n  [decl jump-to-candidates]\n  (let [get-cand (fn [token]\n                   (->> jump-to-candidates\n                        (filter #(contains? (:candidate-tokens % ) token))\n                        first))]\n    (update-in decl [:annotation :signature]\n               (fn [items]\n                 (map (fn [item]\n                        (if (= \"typeAdt\" (:type item))\n                          (assoc item :candidate\n                            (get-cand (:value item)))\n                          item))\n                      items)))))\n\n\n\n;; FEATURES\n\n\n;; JUMP TO DEFINITION\n\n(defn get-jump-to-definition [token pos module-file project-file]\n  (when-let [module (get-module-ast project-file module-file)]\n    (get-candidate-by-token-loc-aware token pos module (:file-asts (get-project project-file)))))\n\n\n\n;; Autocompleter hints\n(defn- to-hint [curr-module-name candidate]\n  (map\n    (fn [c-tok]\n      {:type (:type candidate)  ; TODO: one of #{:type :definition :module} etc\n       :candidate c-tok\n       :module-name (when (not= curr-module-name (:module-name candidate))\n                      (:module-name candidate))\n       :signature (-> candidate :annotation :signatureRawSansName)})\n    (:candidate-tokens candidate)))\n\n\n(def dot-ex\n  (js/RegExp \"\\\\.\" \"g\"))\n\n(defn- compare-dots [a b]\n  (let [num-dots #(count (.match % dot-ex))]\n    (compare (num-dots a) (num-dots b))))\n\n\n\n\n\n(defn- declaration-param-hint-items\n  [pos module jump-to-candidates]\n  (let [decl (find-top-level-declaration-by-pos pos module)\n        m-name #(when-not (= (get-module-name module) (:module-name %))\n                  (str \"(\" (:value %) \") \" (:module-name %)))\n        get-jump-to-by-token (fn [tok]\n                               (first\n                                 (filter\n                                   #(contains? (:candidate-tokens %) tok)\n                                   jump-to-candidates)))\n        mod-name (when-not (= (:module-name %)\n                              (get-module-name module))\n                   (str \"(\" (:value %) \") \"\n                        (:module-name %) ))]\n\n    (if (and (= \"nameDef\" (:type decl))\n             (-> decl :annotation :signature))\n      (mapcat (fn [param {:keys [candidate] :as ann}]\n\n                (cond\n                  (and (= \"variable\" (:type param))\n                       (= \"typeRec\" (:type ann)))\n                  (->> (map #(hash-map\n                               :candidate (str (:value param) \".\" (:name %)))\n                            (:fieldDefs ann))\n                       (cons {:candidate (:value param)}))\n\n                  (and (= \"patternRec\" (:type param))\n                       (= \"typeRec\" (:type ann)))\n                  (map #(hash-map\n                          :candidate (:value %))\n                       (:patterns param))\n\n                  (and (= \"patternBracket\" (:type param))\n                       (= \"typeRec\" (:type ann)))\n                  (concat\n                    (when-let [aliaz (-> param :pattern :alias)]\n                      (concat\n                        [{:candidate aliaz}]\n                        (map #(hash-map\n                                :candidate (str aliaz \".\" (:name %)))\n                             (:fieldDefs ann))))\n                    (map #(hash-map\n                            :candidate (:value %))\n                         (-> param :pattern :value :patterns)))\n\n\n                  (and (= \"variable\" (:type param))\n                       (= \"typeAliasDecl\" (:type candidate)))\n                  (->> (map #(hash-map\n                               :candidate (str (:value param) \".\" (:name %))\n                               :module-name (mod-name candidate))\n                            (-> candidate :tipe :fieldDefs))\n                       (cons {:candidate (:value param)\n                              :module-name (mod-name candidate)}))\n\n                  (and (= \"patternRec\" (:type param))\n                       (= \"typeAliasDecl\" (:type candidate)))\n\n                  (map (fn [pattern]\n                         {:candidate (:value pattern)\n                          :module-name (mod-name candidate)})\n                       (:patterns param) )\n\n\n\n                  (and (= \"patternBracket\" (:type param))\n                       (= \"typeAliasDecl\" (:type candidate)))\n\n                  (let [aliaz (-> param :pattern :alias)]\n                    (concat\n                      (when aliaz\n                        (concat\n                          [{:candidate aliaz\n                            :module-name (mod-name candidate)}]\n                          (map #(hash-map\n                                  :candidate (str aliaz \".\" (:name %))\n                                  :module-name (mod-name candidate))\n                               (-> candidate :tipe :fieldDefs))))\n\n                      (map\n                        #(hash-map\n                           :candidate (:value %)\n                           :module-name (mod-name candidate))\n                        (-> param :pattern :value :patterns))))\n\n                  (and (= \"patternBracket\" (:type param))\n                       (= \"typeDecl\" (:type candidate))\n                       (= 1 (-> candidate :adtDefs count))\n                       (not (in-range? pos (-> decl :annotation))))\n\n\n\n                  (let [pattern-param (-> param :pattern :value :variables first)\n                        adtType (-> candidate :adtDefs first)\n                        adtPattern (:pattern param)\n                        adtParam (-> adtType :params first)\n                        adtCandidate (get-jump-to-by-token (:value adtParam))]\n\n                    (concat\n                      (when-let [aliaz (:alias adtPattern)]\n                        [{:candidate aliaz\n                          :module-name (mod-name candidate)}])\n\n                      (when (and (= \"variable\" (:type pattern-param))\n                                 (nil? (:type adtCandidate)))\n                        [{:candidate (:value pattern-param)}])\n\n                      (when (and (= \"variable\" (:type pattern-param))\n                                 (= \"typeRec\" (:type adtParam)))\n                        (map #(hash-map\n                                :candidate (str (:value pattern-param) \".\" (:name %))\n                                :module-name (mod-name candidate))\n                             (:fieldDefs adtParam)))\n\n                      (when (and (= \"variable\" (:type pattern-param))\n                                 (= \"typeAliasDecl\" (:type adtCandidate)))\n                        (map #(hash-map\n                                :candidate (str (:value pattern-param) \".\" (:name %))\n                                :module-name (mod-name candidate))\n                             (-> adtCandidate :tipe :fieldDefs)))\n\n                      (when (= \"patternRec\" (:type pattern-param))\n                        (map #(hash-map\n                                :candidate (:value %)\n                                :module-name (mod-name candidate))\n                             (:patterns pattern-param)))\n\n                      (when (= \"patternBracket\" (:type pattern-param))\n\n                        (when (= \"patternRec\" (-> pattern-param :pattern :value :type))\n                          (concat\n                            (when-let [aliaz (-> pattern-param :pattern :alias)]\n                              (concat\n                                [{:candidate aliaz\n                                  :module-name (when adtCandidate\n                                                 (mod-name adtCandidate))}]\n                                (when adtCandidate\n                                  (map #(hash-map\n                                          :candidate  (str aliaz \".\" (:name %))\n                                          :module-name (mod-name adtCandidate))\n                                       (-> adtCandidate :tipe :fieldDefs)))\n\n                                (when (= \"typeRec\" (:type adtParam))\n                                  (map #(hash-map\n                                          :candidate (str aliaz \".\" (:name %))\n                                          :module-name (mod-name candidate))\n                                       (:fieldDefs adtParam)))))\n\n                            (map #(hash-map :candidate (:value %))\n                                 (-> pattern-param :pattern :value :patterns)))))))\n\n\n\n\n                  (= \"variable\" (:type param))\n                  [{:candidate (:value param)\n                    :module-name (m-name candidate)}]\n\n\n                  :else []))\n              (:patterns decl)\n              (-> decl\n                  (enrich-top-level-declaration jump-to-candidates)\n                  :annotation\n                  :signature))\n      [])))\n\n\n\n\n(defn- declarations-hints\n  [{:keys [token pos]} module modules]\n  (let [jump-to-candidates (get-jump-to-candidates module modules)]\n    (->> jump-to-candidates\n         (filter (fn [decl]\n                   (some #(= 0 (.indexOf % token))\n                         (:candidate-tokens decl))))\n         (mapcat (partial to-hint (get-module-name module)))\n         (concat (declaration-param-hint-items pos module jump-to-candidates))\n         (filter #(= 0 (.indexOf (:candidate %) token)))\n         (sort (fn [a b]\n                 (let [mod-sort (compare-dots (:candidate a) (:candidate b))]\n                   (if (= 0 mod-sort)\n                     (.localeCompare (:candidate a) (:candidate b))\n                     mod-sort)))))))\n\n\n(defn- import-hints\n  [{:keys [token pos]} imp mod-header modules]\n  (let [curr-exports (->> imp :exposing :exports :exports (map :value) set)\n        existing-import-names (->> mod-header :ast :imports :imports (map :value) set)]\n    (cond\n      ;; Return Modules Completions\n      (and (not (:alias imp))\n           (not (seq (-> imp :exposing :exports))))\n      (->>  modules\n            (map #(-> % :ast :moduleDeclaration))\n            (filter identity)\n            (filter #(and (= 0 (.indexOf (:value %) token))\n                          (not (= (get-module-name mod-header) (:value %)))\n                          (not (contains? existing-import-names (:value %)))))\n            (map #(hash-map :candidate (:value %) ))\n            (sort-by :candidate))\n\n      ;; Return completions for exposing for given import\n      (and (seq (-> imp :exposing :exports))\n           (or (in-range? pos (-> imp :exposing :exports))\n               ;;                (in-range? (update-in pos [:ch] #(- % (count token)))\n               ;;                           (-> imp :exposing :exports))\n               ))\n      (->> (filter #(= (:value imp) (-> % :ast :moduleDeclaration :value)) modules)\n           first\n           get-exposed-declarations\n           (map :value)\n           (filter #(and (= 0 (.indexOf % token))\n                         (or (= token %)  ;; TODO: Need to be a little more clever here (try on for Html.Events!)\n                             (not (contains? curr-exports %)))))\n           sort\n           (map #(hash-map :candidate %)))\n\n      :else [])))\n\n(defn- module-header-hints\n  \"Provides hints when cursor inside exposing parens.\n  Pls note that mod-header is the latest and greatest (if current editor content parses ok)\"\n  [{:keys [token pos]} mod-header module]\n\n  (let [exposing (-> mod-header :ast :moduleDeclaration :exposing)\n        exports-container (:exports exposing)\n        curr-exports (-> (extract-exports exposing) set)\n        decls (-> module :ast :declarations)]\n\n\n\n    (cond\n      (in-range? pos exports-container)\n      (->> (map :value decls)\n           (filter #(and (= 0 (.indexOf % token))\n                         (not (contains? curr-exports %))))\n           sort\n           (map #(hash-map :candidate %)))\n      :else\n      [])))\n\n\n(defn reserved-words-hints [token]\n  (->> [\"import\" \"type\" \"type alias\" \"type\" \"port\"]\n       (filter #(= 0 (.indexOf % token)))\n       sort\n       (map #(hash-map :candidate %))))\n\n\n(defn get-hints\n  \"Return hints for a given module file and project.\n  The context parameter provides additional info to filter results\n  and to help make the results context aware to provide better more relevant results\n\n  TODO: Only token is used and only toplevel declarations currently TBI\"\n\n  ([ctx module-file project-dir]\n   (get-hints ctx module-file project-dir nil))\n  ([{:keys [pos token ed] :as ctx} module-file project-dir module-header]\n\n   (let [ed-tok (editor/->token ed pos)\n         module (get-module-ast project-dir module-file)\n         top-level-decl? (find-top-level-declaration-by-pos pos module)\n         mod-header (or module-header module) ;; to cater for invalid ast\n         modules (-> (get-project project-dir) :file-asts)\n         imp (find-import-by-pos {:line (:line pos)\n                                  :ch 0} mod-header)]\n\n\n\n     (when module\n       (cond\n         (= 0 (:start ed-tok))\n         (reserved-words-hints token)\n\n         imp\n         (import-hints ctx imp mod-header modules)\n\n         (in-range? pos (-> mod-header :ast :moduleDeclaration))\n         (module-header-hints ctx mod-header module)\n\n\n         :else\n         (declarations-hints ctx module modules))))))\n\n\n\n\n\n(defn- find-all-occs [line tok]\n  (let [pattern (re-pattern (str \"\\\\b\" tok \"\\\\b(?!\\\\.)\"))]\n    (loop [s line\n           items []\n           curr-idx 0]\n      (let [idx (.search s pattern)\n            act-idx (+ curr-idx idx)]\n        (if (= -1 idx)\n          items\n          (recur (subs s (+ idx (count tok) 1))\n                 (conj items act-idx)\n                 (+ act-idx (count tok) 1)))))))\n\n(defn- get-usage-editor [file]\n  (if-let [ed (first (pool/by-path file))]\n    {:ed ed\n     :close-fn #()}\n    (let [content (->  (files/open-sync file) :content)\n        ed (pool/create {:mime \"text/x-elm\" :content content})]\n      {:ed ed\n       :close-fn #(object/destroy! ed)})))\n\n\n(defn- find-usage-hits [candidate-module]\n  (let [{:keys [ed close-fn]} (get-usage-editor (:file candidate-module))\n        line-count (editor/line-count ed)]\n    (->> (mapcat\n           (fn [l]\n             (let [line (editor/line ed l)]\n               (mapcat\n                 (fn [token]\n                   (map #(hash-map\n                           :start {:ch % :line l}\n                           :end {:ch (+ % (count token)) :line l}\n                           :token token\n                           :line line)\n                        (find-all-occs line token)))\n                 (:candidate-tokens candidate-module))))\n           (range 0 line-count))\n         (filter seq)\n         (group-by #(str (-> % :end :line)\n                         \"-\"\n                         (-> % :end :ch)))\n         (map (fn [[_ v]]\n                (->> (sort-by #(count (:token %)) v)\n                     first)))\n         (sort-by #(-> % :start :line))\n         ((fn [xs]\n            (close-fn)\n            (assoc candidate-module :hits xs))))))\n\n\n(defn find-usages [token project-file module-file]\n  (let [modules (:file-asts (get-project project-file))\n        candidate (get-jump-to-definition token {} module-file project-file)\n        candidate-module (get-module-ast project-file (:file candidate))\n        cand-mods (->> (get-project project-file)\n                       :file-asts\n                       (remove :package)\n                       (filter (fn [mod]\n                                 (or\n                                   (:default-candidate? candidate)\n                                   (contains?\n                                     (->> mod :ast :imports :imports (map :value) set)\n                                     (:module-name candidate)))))\n                       (concat [(when-not (:package candidate-module)\n                                  candidate-module)])\n                       (filter identity)\n                       (sort-by #(-> % :ast :moduleDeclaration :value)))]\n\n    (->> cand-mods\n         (mapcat (fn [mod]\n                   (->> (get-jump-to-candidates mod modules)\n                        (map #(assoc % :candidate-module-file (:file mod)))\n                        (filter #(or false\n                                     (and (= (:module-name candidate) (:module-name %))\n                                          (= (:value candidate) (:value %))))))))\n\n         (map #(hash-map :file (:candidate-module-file %)\n                         :candidate-tokens (:candidate-tokens %)))\n         (map find-usage-hits)\n         (filter #(seq (:hits %)))\n         ((fn [mod-usages]\n            {:candidate candidate\n             :usages-per-module mod-usages\n             :token token})))))\n\n\n\n\n\n\n;; Sidebar doc search\n(defn search-docs [sym project-dir]\n  \"Search all top level declarations for a given project.\n  Currently just implements starts-with for name or qualified name\"\n  (let [qualified-name #(str (:module-name %) \".\" (:value %))]\n    (when-let [prj (get-project project-dir)]\n      (->> (:file-asts prj)\n           (mapcat get-exposed-declarations)\n           (filter\n             (fn [decl]\n               (or\n                 (start-with? (:value decl) sym)\n                 (start-with? (qualified-name decl) sym))))\n           (map\n             (fn [decl]\n               {:name (:value decl)\n                :ns (:module-name decl)\n                :args (or\n                        (-> decl :annotation :signatureRaw)\n                        (-> decl :signatureRaw))\n                :doc (:doc decl)\n                :value (:value decl)\n                :module-name (:module-name decl)}))\n           (sort-by (juxt :value :module-name))))))\n\n\n;; Get gutter marker info for a given module\n(defn get-gutter-exposeds [module-file project-file]\n  (when-let [module (get-module-ast project-file module-file)]\n    (->> (get-exposed-declarations module)\n         (remove #(= \"adtDef\" (:type %))))))\n\n\n\n\n\n;; *********** REFACTORINGS !!! ***************************************\n(declare print-exports)\n\n\n(defn- print-export [export]\n  (str (if (= \"binOpRef\" (:type export))\n         (str \"(\" (:value export) \")\")\n         (:value export))\n       (cond\n\n         (not (seq (:exports export)))\n         \"\"\n\n         :else\n         (str \" (\" (print-exports (-> export :exports)) \")\" ))))\n\n(defn- print-exports [exports]\n  (cond\n    (not (seq exports))\n    \"\"\n    (= \"exposeAll\" (-> exports :exports first :type))\n    \"..\"\n\n    :else\n    (->> (map print-export (:exports exports))\n         (s/join \", \"))))\n\n\n(defn print-exposing [{:keys [exports] :as exposing}]\n  (if-not (seq exports)\n    \"\"\n    (str \"exposing (\"\n         (print-exports exports)\n         \")\")))\n\n\n\n(defn print-import [imp]\n  (str \"import \" (:value imp)\n       (when-let [aliaz (:alias imp)]\n         (str \" as \" aliaz))\n       (when (seq (:exposing imp))\n         (str \" \" (print-exposing (:exposing imp))))))\n\n(defn print-imports\n  ([imports]\n   (print-imports identity imports))\n  ([sort-fn imports]\n   (->> (sort-fn imports)\n        (map print-import)\n        (s/join \"\\n\"))))\n\n\n\n\n(defn sort-imports-default [project-dir imports]\n  (let [modules (-> (get-project project-dir) :file-asts)]\n    (sort-by (juxt (partial package-import? modules) :value) imports)))\n\n\n\n(defn sym-exposed?\n  [sym\n   project-dir\n   module-file]\n  (-> (get-module-ast project-dir module-file)\n      (exposed-by-module? sym)))\n\n\n\n(defn expose-decl\n  \"Adds an export to exposing node\n  NOTE: Does not check if exposeAll or already exposed.\"\n  [decl exposing]\n  (let [value (:value decl)]\n    (update-in exposing [:exports :exports]\n              (fn [exports]\n                (conj\n                  exports\n                  (case (:type decl)\n                    \"typeAliasDecl\"\n                    {:type \"adt\"\n                     :value value}\n\n                    \"typeDecl\"\n                    {:type \"adt\"\n                     :value value}\n\n                    \"binOpDef\"\n                    {:type \"binOpRef\"\n                     :value value}\n\n                    {:type \"ref\"\n                     :value value}))))))\n\n(defn unexpose-decl\n  \"Removes an export from and exposing node. Ignored if exposed through exposeAll (..)\"\n  [decl exposing]\n  (let [value (:value decl)]\n    (update-in exposing [:exports :exports]\n              (fn [exports]\n                (remove #(= value (:value %)) exports)))))\n\n\n\n\n\n;; Autoimport feature\n(defn get-autoimport-candidates\n  \"Find applicable import candidates based on token for a given module\"\n  [aliaz token module-file project-dir]\n\n  (when-let [module (get-module-ast project-dir module-file)]\n\n    (let [modules (-> (get-project project-dir) :file-asts)]\n\n      (->> (filter #(not= module-file (:file %)) modules)\n           (mapcat get-exposed-declarations)\n           (concat (get-default-candidates (get-core-modules modules)))\n           (filter (fn [candidate]\n                     (and (= token (:value candidate))\n                          (not\n                            (some\n                              #(and (:alias %) (= (:module-name candidate) (:value %)))\n                              (-> module :ast :imports :imports))))))))))\n\n\n(defn upsert-imports\n  \"Add import with alias or update an existing import with given alias\"\n  [module-name aliaz imports]\n  (if-let [idx (idx-of #(= module-name (:value %)) imports)]\n    (assoc-in (vec imports) [idx :alias] aliaz)\n    (conj imports {:value module-name\n                   :type \"import\"\n                   :alias aliaz\n                   :exposing []})))\n\n\n\n\n;;**********************************************************\n;; Elm Test related\n;;**********************************************************\n\n\n(defn- test-module-candidate? [module]\n  (let [imp-names (->> module :ast :imports :imports (map :value) set)]\n    (contains? imp-names \"Test\")))\n\n\n(defn- ignore-test? [decl]\n  (when (:doc decl)\n    (-> decl :doc (util/str-contains \"@ltignore\"))))\n\n\n\n(defn- get-test-decls [module]\n  (->> (get-exposed-declarations-memo module)\n       (filter #(and\n                  (not (ignore-test? %))\n                  (= \"Test\" (-> (:annotation %) :signature first :value))))))\n\n(defn- ->suite-tests [module]\n  (->> (get-test-decls module)\n       (map #(select-keys % [:value :module-name]))))\n\n(defn get-project-tests [project-path]\n  (let [project (get-project project-path)]\n    (->> (:file-asts project)\n         (filter (fn [module]\n                   (when-not (:package module)\n                     (test-module-candidate? module))))\n         (mapcat ->suite-tests))))\n\n\n(defn get-module-tests [project-path module-file]\n  (let [module (get-module-ast project-path module-file)]\n    (if (test-module-candidate? module)\n      (->suite-tests module)\n      [])))\n\n\n(defn get-test-by-pos [pos project-path module-file]\n  (let [module (get-module-ast project-path module-file)\n        decl (find-top-level-declaration-by-pos pos module)]\n\n    (if (and (test-module-candidate? module)\n             (exposed-by-module?  module (:value decl))\n             (= \"Test\" (-> (:annotation decl) :signature first :value))\n             (not (ignore-test? decl)))\n      [{:value (:value decl)\n        :module-name (get-module-name module)}]\n      [])))\n\n\n\n\n\n;;**********************************************************\n;; AST status shown in statusbar\n;;**********************************************************\n\n(defn- status-class [{:keys [status]}]\n  (case status\n    :error \"error\"\n    :ok \"ok\"\n    \"\"))\n\n\n\n(defn- status-text [{:keys [status error]}]\n  (str \"AST: \"\n       (case status\n         :ok \"Ok\"\n         :error \"Error\"\n         \"Not connected\")))\n\n(defn ->status-ui [{:keys [ast-summary]}]\n  [:span {:class (str \"ast-status \" (status-class ast-summary))}\n   (status-text ast-summary)])\n\n\n(behavior ::update-ast-status\n          :triggers #{:update!}\n          :reaction (fn [this f]\n                      (object/update! this [:ast-summary] f)))\n\n(object/object* ::statusbar.ast-status\n                :triggers #{}\n                :behaviors #{::update-ast-status}\n                :ast-summary {:status \"\"}\n                :init (fn [this]\n                        (statusbar/statusbar-item (bound this ->status-ui) \"\")))\n\n(def statusbar-ast-summary (object/create ::statusbar.ast-status))\n(statusbar/add-statusbar-item statusbar-ast-summary)\n\n\n\n(defn update-status-for-editor [ed]\n  (let [{:keys [status error]} (:ast-status @ed)]\n    (object/raise statusbar-ast-summary\n                  :update!\n                  #(assoc % :status status :error error))))\n\n(behavior ::update-ast-status-on-editor-change\n          :triggers #{:focus}\n          :reaction (fn [ed]\n                      (update-status-for-editor ed)))\n\n\n\n"
  },
  {
    "path": "src/lt/plugins/elm_light/format.cljs",
    "content": "(ns lt.plugins.elm-light.format\n  (:require [lt.plugins.elm-light.utils :as u]\n            [lt.plugins.elm-light.selection :as sel]\n            [lt.plugins.elm-light.clients :as clients]\n            [lt.objs.console :as console]\n            [lt.objs.notifos :as notifos]\n            [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.editor :as editor]\n            [lt.objs.popup :as popup]\n            [lt.objs.platform :as platform]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [behavior]]))\n\n\n\n(defn handle-no-elm-format []\n  (notifos/done-working)\n  (console/log (.-PATH (.-env js/process)))\n  (popup/popup! {:header \"We couldn't find elm-format in your path\"\n                 :body (str \"In order to formatting related commands, elm-format must be installed and on your system PATH.\"\n                            \"(Check the console for PATH as seen from Light Table\")\n                 :buttons [{:label \"Install elm-format\"\n                            :action (fn []\n                                      (platform/open \"https://github.com/avh4/elm-format#installation-\"))}\n                           {:label \"ok\"}]}))\n\n\n(defn verify-installed []\n  (if (.which clients/shelljs \"elm-format\")\n    true\n    (do\n      (handle-no-elm-format)\n      nil)))\n\n\n\n(defn format-input\n  \"Format string input using elm-format.\n    If successful returns [true result]\n    If errors returns [false err]\"\n  [cwd input]\n  (try\n    [true (.toString (.execSync (js/require \"child_process\")\n                                \"elm-format --stdin\"\n                                (clj->js {:cwd cwd\n                                          :input input\n                                          :stdio \"pipe\"})))]\n    (catch :default e\n      [false (.-message e)])))\n\n\n\n\n(defn format-path\n  \"Format file or all elm files in dir using elm-format.\n  If successful returns [true nil]\n  If errors returns [false err]\"\n  [cwd path]\n  (try\n    (do\n      (.execSync (js/require \"child_process\")\n                 (str \"elm-format --yes \" path)\n                 (clj->js {:cwd cwd\n                           :stdio \"pipe\"}))\n      [true nil])\n    (catch :default e\n      [false (.-message e)])))\n\n\n\n(defn- handle-format-error [err]\n  (notifos/set-msg! \"Elm format reported errors. See console for details\" {:class \"error\" :timeout 5000})\n  (console/error err))\n\n\n\n;; ****************************************************\n;; Elm format\n;; ****************************************************\n(behavior ::elm-format\n          :triggers #{:elm.format}\n          :reaction (fn [ed]\n                      (when (verify-installed)\n                        (when-let [path (-> @ed :info :path)]\n                         (let [pos (editor/->cursor ed)\n                               [ok? res] (format-path (u/project-path path) path)]\n                           (if ok?\n                             (pool/reload ed)\n                             (handle-format-error res))\n                           (editor/move-cursor ed pos)\n                           (editor/center-cursor ed))))))\n\n(defn- strip-module [expr]\n  (->> (s/split-lines expr)\n       (drop 3)\n       (s/join \"\\n\")))\n\n\n\n\n(behavior ::elm-format-expression\n          :triggers #{:elm.format-expression}\n          :reaction (fn [ed]\n                      (when (verify-installed)\n                        (let [pos (editor/->cursor ed)\n                              cwd (-> @ed :info :path u/project-path)]\n                          (when-let [{:keys [from to]} (sel/get-top-level-expr ed pos)]\n                            (let [[ok? res] (format-input cwd (editor/range ed from to))]\n                              (if ok?\n                                (editor/replace ed from to (strip-module res))\n                                (handle-format-error res))\n                              (editor/move-cursor ed pos)))))))\n\n(behavior ::elm-format-buffer\n          :triggers #{:elm.format-buffer}\n          :reaction (fn [ed]\n                      (when (verify-installed)\n                        (let [pos (editor/->cursor ed)\n                              [ok? res] (format-input (-> @ed :info :path u/project-path)\n                                                      (editor/->val ed))]\n                          (if ok?\n                            (do\n                              (editor/set-val-and-keep-cursor ed res)\n                              (editor/center-cursor ed))\n                            (handle-format-error res))))))\n\n\n\n(cmd/command {:command :elm-format\n              :desc \"Elm: Format file\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.format)))})\n\n(cmd/command {:command :elm-format-buffer\n              :desc \"Elm: Format editor contents\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.format-buffer)))})\n\n(cmd/command {:command :elm-format-expression\n              :desc \"Elm: Format top level expression at point\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.format-expression)))})\n"
  },
  {
    "path": "src/lt/plugins/elm_light/graph.cljs",
    "content": "(ns lt.plugins.elm-light.graph\n  (:require [lt.plugins.elm-light.utils :as u]\n            [lt.objs.files :as files]\n            [lt.objs.tabs :as tabs]\n            [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.console :as console]\n            [lt.objs.notifos :as notifos]\n            [lt.util.dom :as dom]\n            [fetch.core :as fetch]\n            [clojure.set :refer [rename-keys]]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [defui behavior]]))\n\n\n\n(def dagreD3 (js/require (files/join u/elm-plugin-dir \"node_modules/dagre-d3\")))\n(def d3 (js/require (files/join u/elm-plugin-dir \"node_modules/d3\")))\n\n\n(defn lower [term]\n  (s/lower-case term))\n\n(defn find-package-by-name [this name]\n  (some #(when (= (lower (:name %)) (lower name)) %) (:all-packages @this)))\n\n\n\n(defui dependency-graph-ui [this]\n  [:div.graph\n   [:div.dependency-graph\n    [:svg:svg {:width \"650\" :height \"680\"}\n     [:svg:g {:transform \"translate(20,20)\"}]]]])\n\n\n(object/object* ::dependency-graph\n                :tags [:elm.graph.dependency]\n                :name \"Dependency graph\"\n                :init (fn [this]\n                        (u/fetch-all-packages #(object/merge! this {:all-packages %}))\n                        (dependency-graph-ui this)))\n\n(declare dependency-graph)\n\n\n(behavior ::on-close-destroy\n          :triggers #{:close}\n          :reaction (fn [this]\n                      (when-let [ts (:lt.objs.tabs/tabset @this)]\n                        (when (= (count (:objs @ts)) 1)\n                          (tabs/rem-tabset ts)))\n                      (object/raise this :destroy)))\n\n(def select-values (comp vals select-keys))\n\n(defn dep-id [dep]\n  (s/join \":\" (select-values dep [:package :version])))\n\n\n\n(defn node-label [x]\n  #js {:shape (if-let [shape (:shape x)] shape \"rect\")\n       :style (when-not (:version x) \"fill: #73404c\")\n       :labelType \"html\"\n       :label (str \"<div class='graph-label\"\n                   (if (:version x) \"'\" \" error'\")\n                   \" title='\" (or (:summary x) (dep-id x)) \"'>\"\n                   (:package x) \"<br/>\"  (:version x)\n                   \"</div>\")})\n\n(defn create-graph [data]\n  (let [g (.setGraph (new dagreD3.graphlib.Graph)  #js {})]\n    (doseq [x (:nodes data)]\n      (.setNode g (dep-id x) (node-label x)))\n    (doseq [x (:edges data)]\n      (.setEdge g (:a x) (:b x) #js {:label (:label x)\n                                     :style (when (:transitive x)\n                                              \"stroke-dasharray: 5, 5;\")}))\n    g))\n\n\n(defn d3-sel [selector]\n  (.log js/console (.select d3 selector))\n  (.select d3 selector))\n\n(defn dimensions [this]\n  {:w  (.-clientWidth (:content @this))\n   :h  (.-clientHeight (:content @this))})\n\n\n(defn init-zoom [svg g]\n  (let [zoom (.on (.zoom (.-behavior d3))\n                  \"zoom\"\n                  #(.attr g \"transform\" (str \"translate(\" (.-translate (.-event d3)) \")\"\n                                             \"scale(\" (.-scale (.-event d3)) \")\")))]\n    (.call svg zoom)))\n\n\n(defn resize-graph [this svg]\n  (let [dim (dimensions this)]\n    (.attr svg \"width\" (+ (:w dim) 20))\n    (.attr svg \"height\" (+ (:h dim) 20))))\n\n(behavior ::on-render\n          :desc \"Elm render dependencies\"\n          :triggers #{:elm.graph.render}\n          :reaction (fn [this]\n                      (let [svg (.select d3 \"svg\")\n                            g (.select svg \"g\")\n                            renderer (.render dagreD3)]\n                        (renderer g (create-graph (:data @this)))\n                        (init-zoom svg g)\n                        (resize-graph this svg))))\n\n\n(defn get-package-json [dep callback]\n  (let [url (str \"http://package.elm-lang.org/packages/\"\n                 (:package dep) \"/\"\n                 (:version dep) \"/\"\n                 \"elm-package.json\")]\n    (fetch/xhr url\n               {}\n               (fn [data]\n                 (callback (js->clj (.parse js/JSON data) :keywordize-keys true))))))\n\n\n(defn add-edges-for-dep [this origin pkg-json]\n  (when-let [edges (->> (:dependencies pkg-json)\n                        (map (fn [[k v]]\n                               (hash-map :package (u/nskw->name k)\n                                         :range v\n                                         :version (-> (some #(when ( = (u/nskw->name k) (:package %)) %)\n                                                            (-> @this :data :packages))\n                                                      :version))))\n                        (map (fn [dep]\n                               {:a (dep-id origin)\n                                :b (dep-id dep)\n                                :transitive true\n                                :label (:range dep)}))\n                        seq)]\n    (object/update! this [:data :edges] #(concat % edges))\n    (object/raise this :elm.graph.render)))\n\n(behavior ::on-get-transitives\n          :desc \"Elm get 1.st level transitive dependencies\"\n          :triggers #{:elm.graph.get-transitives}\n          :reaction (fn [this]\n                      (let [transitives (remove :range (-> @this :data :packages))]\n                        (object/update! this [:data :nodes] #(concat % transitives))\n                        (object/raise this :elm.graph.render)\n\n                        (doseq [x (filter :version (-> @this :data :packages))]\n                          (get-package-json x (partial add-edges-for-dep this x))))))\n\n\n\n\n(defn get-dependency-data [project-path]\n  (let [pkgs (->> (u/get-project-deps project-path)\n                  (map #(rename-keys % {:exact :version}))\n                  (map #(assoc % :summary (-> (find-package-by-name dependency-graph (:package %))\n                                              :summary))))\n        direct (filter :range pkgs)\n        rootVersion (-> (u/parse-json-file (files/join project-path \"elm-package.json\"))\n                        :version)\n        root {:package (files/basename project-path) :version rootVersion :shape \"ellipse\"}]\n    {:packages pkgs\n     :nodes (conj direct root )\n     :edges (map #(hash-map :a (dep-id root)\n                            :b (dep-id %)\n                            :label (:range %)) direct)}))\n\n\n(behavior ::on-get-data\n          :desc \"Elm retrieve dependency data for project\"\n          :triggers #{:elm.graph.get-data}\n          :reaction (fn [this]\n                      (let [data (get-dependency-data (:project-path @this))]\n                        (object/assoc-in! this [:data] data)\n                        (object/raise this :elm.graph.render)\n                        (object/raise this :elm.graph.get-transitives))))\n\n(behavior ::on-show-dependencies\n          :desc \"Elm show dependency graph\"\n          :triggers #{:elm.graph.show-dependencies}\n          :reaction (fn [this project-path focus-tab?]\n                      (when focus-tab?\n                        (tabs/add-or-focus! this))\n                      (object/assoc-in! this [:project-path] project-path)\n                      (object/assoc-in! this [:data] {})\n                      (object/raise this :elm.graph.get-data)))\n\n\n(behavior ::on-tab-resized\n          :triggers #{:end-drag}\n          :reaction (fn [_]\n                      (let [svg (.select d3 \"svg\")]\n                        (resize-graph dependency-graph svg))))\n\n\n(def dependency-graph (object/create ::dependency-graph))\n\n;; (doseq [obj (object/by-tag :elm.graph.dependency)]\n;;       (println \"Destroying\")\n;;       (object/destroy! obj))\n\n\n\n(cmd/command {:command :show-elm-dep-graph\n              :desc \"Elm: Show dependency graph\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (when-let [path (-> @ed :info :path u/project-path)]\n                          (object/raise dependency-graph :elm.graph.show-dependencies path true))))})\n\n"
  },
  {
    "path": "src/lt/plugins/elm_light/gutter.cljs",
    "content": "(ns lt.plugins.elm-light.gutter\n  (:require [lt.plugins.elm-light.elm-ast :as ast]\n            [lt.plugins.elm-light.utils :as utils]\n            [lt.object :as object]\n            [lt.objs.editor :as editor]\n            [lt.objs.files :as files]\n            [lt.util.dom :as dom])\n  (:require-macros [lt.macros :refer [behavior defui]]))\n\n\n(def icon-url\n  (files/join utils/elm-plugin-dir \"css\" \"export.svg\"))\n\n\n(def marker-templ\n  (let [elem (.createElement js/document \"div\")]\n    (dom/html elem \"@\")\n    (dom/add-class elem \"elm-gutter-marker\")\n    elem))\n\n(defn gutter-marker-exposed []\n  (.cloneNode marker-templ true))\n\n\n(behavior ::show-elm-gutter\n          :triggers #{:object.instant}\n          :type \"user\"\n          :desc \"Editor Elm: Display elm gutter\"\n          :reaction (fn [ed]\n                      (when-not (:elm-gutter @ed)\n                        (editor/add-gutter ed \"elm-gutter\" 15)\n                        (object/assoc-in! ed [:elm-gutter] true))))\n\n(behavior ::elm-gutter-exposeds\n          :triggers #{:elm.gutter.refresh}\n          :reaction (fn [ed]\n                      (let [cm-ed (editor/->cm-ed ed)]\n                        (editor/operation\n                               cm-ed\n                               (fn []\n                                 (.clearGutter cm-ed \"elm-gutter\")\n                                 (doseq [bm (-> @ed :elm-exposeds-bookmarks)]\n                                   (when-let [pos (.find bm)]\n                                     (when-let [line (.-line pos)]\n                                       (.setGutterMarker cm-ed\n                                                         line\n                                                         \"elm-gutter\"\n                                                         (gutter-marker-exposed))))))))))\n\n\n\n(behavior ::elm-gutter-exposeds-mark\n          :triggers #{:elm.gutter.exposeds.mark}\n          :reaction (fn [ed]\n                      (let [path (-> @ed :info :path)\n                            exposeds (ast/get-gutter-exposeds\n                                       path\n                                       (utils/project-path path))\n                            cm-ed (editor/->cm-ed ed)]\n                        (editor/operation\n                          cm-ed\n                          (fn []\n                            (doseq [bm (-> @ed :elm-exposeds-bookmarks)]\n                              (.clear bm))\n                            (->> (map (fn [exposed]\n                                        (.setBookmark cm-ed #js {:ch 1\n                                                                 :line (-> exposed :location :start :line dec)}))\n                                      exposeds)\n                                 (object/assoc-in! ed [:elm-exposeds-bookmarks]))))\n                        (object/raise ed :elm.gutter.refresh))))\n"
  },
  {
    "path": "src/lt/plugins/elm_light/hinter.cljs",
    "content": "(ns lt.plugins.elm-light.hinter\n  \"Hinter implementation for Elm\"\n  (:require [lt.plugins.elm-light.utils :as utils]\n            [lt.plugins.elm-light.elm-ast :as ast]\n            [lt.plugins.elm-light.utils :refer [find-symbol project-path]]\n            [lt.objs.editor :as editor]\n            [lt.object :as object]\n            [lt.util.dom :as dom]\n            [lt.objs.clients :as clients]\n            [cljs.core.async :as async :refer [put! chan]]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [behavior defui background]]))\n\n\n(defn- curr-time []\n  (.getTime (js/Date.)))\n\n;; TODO: not exactly uid quality...\n(defn- chan-id [ch]\n  (+ (curr-time) (hash ch)))\n\n(defn- store-ch [ed ch]\n  (let [chs (or (:elm-async-channels @ed) {})\n        ch-id (chan-id ch)]\n    (object/assoc-in! ed\n                      [:elm-async-channels]\n                      (assoc chs ch-id ch))\n    ch-id))\n\n(defn- get-ch [ed ch-id]\n  (get-in @ed [:elm-async-channels ch-id]))\n\n(defn- remove-ch [ed ch-id]\n  (let [chs (or (:elm-async-channels @ed) {})]\n    (object/assoc-in! ed\n                      [:elm-async-channels]\n                      (dissoc chs ch-id ))))\n\n\n(defn- get-token [ed]\n  (let [pos (editor/->cursor ed)\n        sym (find-symbol ed pos)]\n    (when (and sym (seq sym))\n      {:string sym\n       :start (- (:ch pos) (count sym))\n       :end (:ch pos)\n       :line (:line pos)})))\n\n\n\n\n(defn- trunc-str [v max-length]\n  (if (> 100 (count v))\n    sig\n    (str (.substring v 0 max-lenght) \"...\")))\n\n\n(defn- display-text-elem [token completion]\n  (let [elem (.createElement js/document \"div\")]\n    (dom/add-class elem \"display-text\")\n    (dom/html elem (js/wrapMatch (.-text completion) #js {:matched (:string token)}))\n    elem))\n\n(defn- module-elem [completion]\n  (let [elem (.createElement js/document \"div\")]\n    (dom/add-class elem \"module\")\n    (dom/html elem (.-moduleName completion))\n    elem))\n\n(defui item-wrapper []\n  [:div\n   [:div.elm-completion \"\"]])\n\n(defn item-ui [token completion]\n  (let [item-wrapper (item-wrapper)\n        wrapper (dom/$ \"div.elm-completion\" item-wrapper)]\n    (dom/append wrapper (display-text-elem token completion))\n    (dom/append wrapper (module-elem completion))\n    item-wrapper))\n\n\n\n(defn- ->hints [token completions]\n  (map #(hash-map :text (:candidate %)\n                  :displayText (:candidate %)\n                  :moduleName (:module-name %)\n                  :signature (:signature %)\n                  :render (fn [el self data]\n                            (dom/html el (dom/html (item-ui token data))))\n                  :from {:ch (:start token) :line (:line token)}\n                  :to {:ch (:end token) :line (:line token)})\n       completions))\n\n\n\n(defn- connected? [ed]\n  (when-let [default-client (-> @ed :client :default)] ;; dont if not already connected\n    (when @default-client\n      true)))\n\n\n(def bg-parser\n  (background\n    (fn [obj-id ch-id elm-parser-path elm-code]\n      (let [parser (js/require elm-parser-path)]\n         (try\n           (let [res (parser/parse elm-code #js {:startRule \"headerOnly\"})]\n             (js/_send obj-id\n                       :elm.hints.parser.results\n                       #js {:status \"ok\" :ch-id ch-id :module res}))\n           (catch :default e\n             (js/_send obj-id\n                       :elm.hints.parser.results\n                       #js {:status \"fail\" :ch-id ch-id :error e})))))))\n\n\n\n(behavior ::elm-hints-parser-results\n          :triggers #{:elm.hints.parser.results}\n          :desc \"Trigger hints after parsing relevant parts of editor for hinting\"\n          :reaction (fn [ed res]\n                      (let [pos (editor/->cursor ed)\n                            token (get-token ed)\n                            path (-> @ed :info :path)\n                            {:keys [ch-id module status error]} (utils/mod-js->clj res :keywordize-keys true)\n                            ch (get-ch ed ch-id)\n                            get-hints (partial ast/get-hints\n                                               {:token (:string token)\n                                                :pos pos\n                                                :ed ed}\n                                               path\n                                               (project-path path))]\n\n                        (if (= \"ok\" status)\n                          (->> (get-hints {:ast module\n                                           :file path})\n                               (->hints token)\n                               (put! ch))\n                          (->> (get-hints)\n                               (->hints token)\n                               (put! ch)))\n                        (remove-ch ed ch-id))))\n\n\n\n(behavior ::elm-hints\n          :triggers #{:init-hints}\n          :desc \"Provide Elm hints for current cursor position\"\n          :reaction (fn [ed channels]\n                      (let [pos (editor/->cursor ed)\n                            token (get-token ed)\n                            ch (chan)\n                            path (-> @ed :info :path)]\n                        (if (and token (connected? ed))\n                          (if (ast/find-top-level-declaration-by-pos pos\n                                                                     (project-path path)\n                                                                     path)\n                            (do ; don't need to parse module header for this scenario\n                              (->> (ast/get-hints {:token (:string token)\n                                                    :pos pos\n                                                    :ed ed}\n                                                   path\n                                                   (project-path path))\n                                   (->hints token)\n                                   (put! ch))\n                              (conj channels ch))\n                            (let [ch-id (store-ch ed ch)]\n                              (bg-parser ed ch-id ast/elm-parser-path (editor/->val ed))\n                              (conj channels ch)))\n                          channels))))\n"
  },
  {
    "path": "src/lt/plugins/elm_light/inline-doc.cljs",
    "content": "(ns lt.plugins.elm-light.inline-doc\n  (:require [lt.plugins.elm-light.utils :as u]\n            [lt.util.dom :as dom]\n            [lt.objs.files :as files]\n            [lt.object :as object]\n            [lt.objs.editor :as editor]\n            [lt.objs.browser :as browser])\n  (:require-macros [lt.macros :refer [defui behavior]]))\n\n(def marked (js/require (files/join u/elm-plugin-dir \"node_modules\" \"marked\")))\n\n\n(defui doc-ui-header [doc]\n  [:div.inline-doc\n   [:h1 (:name doc)]\n   [:h2 (:ns doc)]\n   (when (and (:args doc)\n              (not= (:args doc) \"nil\"))\n     [:h3 (:args doc)])])\n\n\n(defn marked-doc [md-doc]\n  (let [elem (.createElement js/document \"div\")]\n    (dom/add-class elem \"elm-inline-doc\")\n    (set! (.-innerHTML elem)\n          (marked md-doc (clj->js {:sanitize false})))\n    elem))\n\n(defn maybe-append-marked-doc [elem doc]\n  (if-let [md-str (:doc doc)]\n    (do (dom/append elem (marked-doc md-str))\n      elem)\n    elem))\n\n(defn highlight-code [container-elem]\n  (doseq [code (dom/$$ \"pre > code\" container-elem)]\n    (.highlightBlock js/hljs code)))\n\n\n(defn handle-url-click [url]\n  (let [b (or (first (object/by-tag :browser))\n              (browser/add))]\n    (object/raise b :navigate! url)))\n\n(defn add-click-handlers [elem]\n  (doseq [link (dom/$$ \"a\" elem)]\n    (dom/on link \"click\" #(handle-url-click (dom/attr link :href)))))\n\n\n(behavior ::editor.elm.doc.show!\n          :triggers #{:editor.elm.doc.show!}\n          :reaction (fn [ed doc]\n                      (when (not= (:name doc) \"\")\n                        (let [doc-elem (-> (doc-ui-header doc)\n                                            (maybe-append-marked-doc doc))]\n                          (inline-doc ed doc-elem (:loc doc))\n                          (highlight-code doc-elem)\n                          (add-click-handlers doc-elem)))))\n\n(defn inline-doc [this doc-elem loc]\n  (let [ed (:ed @this)\n        type :underline\n        line (editor/line-handle ed (:line loc))\n        res-obj (object/create :lt.objs.eval/underline-result {:ed this\n                                                               :class \"underline\"\n                                                               :opts {}\n                                                               :result doc-elem\n                                                               :loc loc\n                                                               :line line})]\n    (object/add-tags res-obj [:inline.doc])\n    (object/update! this [:widgets] assoc [line :underline] res-obj)\n    res-obj))\n"
  },
  {
    "path": "src/lt/plugins/elm_light/linter.cljs",
    "content": "(ns lt.plugins.elm-light.linter\n  \"Generic linter for highlighting errors/warnings and providing context sensitive actions\"\n  (:require [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor :as editor]\n            [lt.objs.editor.pool :as pool]\n            [lt.util.dom :as dom]\n            [lt.objs.statusbar :as statusbar]\n            [crate.binding :refer [bound]])\n  (:require-macros [lt.macros :refer [defui behavior]]))\n\n\n;;**********************************************************\n;; Lint summary shown in statusbar\n;;**********************************************************\n\n(defn- status-class [{:keys [errors warnings]}]\n  (cond\n    (> errors 0) \"error\"\n    (> warnings 0) \"warning\"\n    :else \"\"))\n\n\n(defn- status-text [{:keys [errors warnings]}]\n  (str \"Lint status: \" errors \"/\" warnings))\n\n(defn ->status-ui [{:keys [lint-summary]}]\n  [:span {:class (str \"lint-status \" (status-class lint-summary))}\n   (status-text lint-summary)])\n\n(behavior ::update-lint-status\n          :triggers #{:update!}\n          :reaction (fn [this f]\n                      (object/update! this [:lint-summary] f)))\n\n(object/object* ::statusbar.lint-status\n                :triggers #{}\n                :behaviors #{::update-lint-status}\n                :lint-summary {:errors 0 :warnings 0}\n                :init (fn [this]\n                        (statusbar/statusbar-item (bound this ->status-ui) \"\")))\n\n(def statusbar-lint-summary (object/create ::statusbar.lint-status))\n(statusbar/add-statusbar-item statusbar-lint-summary)\n\n\n\n(defn- grouped-lint-count [ed]\n  (if-let [results (:linter-results @ed)]\n    (->> (vals results)\n         (map :result)\n         (group-by :category)\n         (map (fn [[k v]]\n                {k (count v)}))\n         (into {}))\n    {:error 0 :warning 0}))\n\n\n(defn update-status-for-editor [ed]\n  (let [{:keys [error warning]} (grouped-lint-count ed)]\n    (object/raise statusbar-lint-summary\n                  :update!\n                  #(assoc % :warnings (or warning 0) :errors (or error 0)))))\n\n(behavior ::update-linter-on-editor-change\n          :triggers #{:focus}\n          :reaction (fn [ed]\n                      (update-status-for-editor ed)))\n\n\n;;**********************************************************\n;; In editor display of lint results\n;;**********************************************************\n\n(defn- remove-widget [ed el]\n  (try\n    (dom/remove el)\n    (catch :default e\n      nil))\n  (editor/focus ed))\n\n\n\n(defn- remove-res [ed res-id ]\n  (let [{:keys [mark result] :as dill} (get-in @ed [:linter-results res-id ])]\n    (when mark (.clear mark))\n    (object/update! ed [:linter-results] dissoc res-id))\n  (editor/focus ed))\n\n\n(defn- current-range [ed mark]\n  (let [rng (.find mark)\n        from (.-from rng)\n        to (.-to rng)]\n    {:from {:ch (.-ch from) :line (.-line from)}\n     :to {:ch (.-ch to) :line (.-line to)}}))\n\n\n(defn- execute-action [ed res-id action-fn res]\n  (let [{:keys [mark]} (get-in @ed [:linter-results res-id ])]\n    (action-fn res (current-range ed mark))\n    (remove-res ed res-id)))\n\n\n(defui action-ui [ed action res-id res]\n  [:span.button (str (:text action))]\n  :click #(execute-action ed res-id (:action action) res))\n\n\n(defui inline-ui [ed res-id {:keys [title details category actions] :as res}]\n  [:div {:tabindex -1 :class (str \"linter-res \" (or (name category) \"error\"))}\n   [:p.title title]\n   [:div.details\n    [:pre details]\n    [:div (map #(action-ui ed % res-id res) actions)]]]\n  :blur #(remove-widget ed (.-target %))\n  :keydown #(let [kc (.-keyCode %)]\n              (when (= kc 27)\n                (remove-widget ed (.-target %)))\n              (when (and (= kc 13) (seq actions))\n                (.preventDefault %)\n                (.stopPropagation %)\n                (execute-action ed res-id (-> actions first :action) res))))\n\n\n\n(defn add-widget [ed res-id]\n  (let [{:keys [mark result]} (get-in @ed [:linter-results res-id ])\n        ui (inline-ui ed res-id result)\n        from (.-from (.find mark))]\n    (.addWidget (editor/->cm-ed ed) from ui #js {:scrollIntoView true})\n    (dom/focus ui)))\n\n\n(defn- mark-range [ed {:keys [from to] :as code-range}]\n  (if-not (= from to )\n    code-range\n    {:from (assoc from :ch 0)\n     :to (assoc to :ch (editor/line-length ed (:line from)))}))\n\n(defn create-mark [ed {:keys [category code-range]}]\n  (let [{:keys [from to]} (mark-range ed code-range)]\n    (editor/mark ed\n                 from\n                 to\n                 {:className (str \"lint-\" (or (name category) \"error\"))\n                  :inclusiveLeft false\n                  :inclusiveRight false})))\n\n\n;; Expected format of a lint result\n(comment\n  {:category :error\n   :code-range {:from {:ch 1 :line 1}\n                :to {:ch 10 :line 13}}\n   :title \"Syntax error\"\n   :details \"Something went really bad\"\n   :actions [{:text \"Change to xyz\" :on-select #(println \"this was selected\")}]})\n\n\n\n(behavior ::linter-result!\n          :triggers #{:linter-result!}\n          :reaction (fn [ed res]\n                      (let [id (-> (gensym \"linter-res\") str)\n                            mark (create-mark ed res)]\n                        (set! (.-ltlintid mark) id)\n                        (set! (.-lttype mark) :linter)\n                        (object/update! ed [:linter-results] assoc id {:mark mark\n                                                                       :result res})\n                        (update-status-for-editor ed))))\n\n(behavior ::clear-linter-results!\n          :triggers #{:clear-linter-results!}\n          :reaction (fn [ed]\n                      (doseq [[id res] (:linter-results @ed)]\n                        (when-let [m (:mark res)] (.clear m))\n                        (when-let [w (:widget res)]\n                          (dom/remove w)))\n                      (object/assoc-in! ed [:linter-results] nil)\n                      (update-status-for-editor ed)))\n\n\n\n(cmd/command {:command :editor.linter.remove-all\n              :desc \"Editor: Clear all lint results\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :clear-linter-results!)))})\n\n\n(defn find-current-lint-mark [ed]\n  (->> (editor/find-marks ed (editor/->cursor ed))\n       (filter #(= :linter (.-lttype %)))\n       first))\n\n(defn get-widget-by-mark [ed mark]\n  (get-in @ed [:linter-results (.-ltlintid mark) :widget]))\n\n\n(defn mark->pos [mark]\n  (let [cm-pos (.-from (.find mark))]\n    {:ch (.-ch cm-pos) :line (.-line cm-pos)}))\n\n(defn get-all-lint-marks [ed]\n  (->> (.getAllMarks (editor/->cm-ed ed))\n       (filter #(= :linter (.-lttype %)))\n       (sort-by #((juxt :line :ch) (mark->pos %)))))\n\n(defn split-with-mark [ed]\n  (let [all-marks (get-all-lint-marks ed)\n        curr-mark (find-current-lint-mark ed)]\n    (split-with #(not (= (when curr-mark (.-ltlintid curr-mark)) (.-ltlintid %))) all-marks)))\n\n(defn find-next-mark [ed]\n  (let [[ms1 ms2] (split-with-mark ed)]\n    (first (into (vec (drop 1 ms2)) ms1))))\n\n(defn find-prev-mark [ed]\n  (let [[ms1 ms2] (split-with-mark ed)]\n    (first (into (reverse (drop 1 ms2)) ms1))))\n\n\n\n(cmd/command {:command :editor.linter.details\n              :desc \"Linter: Show details at cursor\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (when-let [mark (find-current-lint-mark ed)]\n                          (add-widget ed (.-ltlintid mark)))))})\n\n(cmd/command {:command :editor.next.lint-result\n              :desc \"Linter: Move to next result\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (when-let [next-mark (find-next-mark ed)]\n                          (editor/move-cursor ed (mark->pos next-mark)))))})\n\n(cmd/command {:command :editor.prev.lint-result\n              :desc \"Linter: Move to previous result\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (when-let [prev-mark (find-prev-mark ed)]\n                          (editor/move-cursor ed (mark->pos next-mark)))))})\n\n"
  },
  {
    "path": "src/lt/plugins/elm_light/make.cljs",
    "content": ""
  },
  {
    "path": "src/lt/plugins/elm_light/module_graph.cljs",
    "content": "(ns lt.plugins.elm-light.module-graph\n  (:require [lt.plugins.elm-light.utils :as u]\n            [lt.plugins.elm-light.elm-ast :as elm-ast]\n            [lt.objs.files :as files]\n            [lt.objs.tabs :as tabs]\n            [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.console :as console]\n            [lt.objs.notifos :as notifos]\n            [lt.util.dom :as dom]\n            [lt.util.js :as js-util]\n            [clojure.set :refer [rename-keys]]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [defui behavior]]))\n\n(def dagreD3 (js/require (files/join u/elm-plugin-dir \"node_modules/dagre-d3\")))\n(def d3 (js/require (files/join u/elm-plugin-dir \"node_modules/d3\")))\n\n(declare set-group-filter!)\n(declare set-module-filter!)\n(declare toggle-exposeds-filter!)\n\n\n(defui module-graph-ui [this]\n  [:div.graph\n   [:div.filters \"Add filters here !\"]\n   [:div.module-graph\n    [:svg:svg {:width \"650\" :height \"680\"}\n     [:svg:g {:transform \"translate(20,20)\"}]]]])\n\n\n\n(defui exposeds-filter-ui [this]\n  [:span.filter.checkbox\n   [:label [:input {:type \"checkbox\"}] \"Show module exposeds\"]]\n  :change (fn [ev]\n            (toggle-exposeds-filter! this (.-checked (.-target ev)))))\n\n\n(defui module-filter-option-ui [this module]\n  [:option (:name module)])\n\n(defui module-filter-ui [this modules]\n  [:span.filter\n   [:label \"Module: \"]\n   [:select\n    (map (partial module-filter-option-ui this) (cons {:name \"\"} modules))]]\n  :change (fn [ev]\n            (set-module-filter! this (.-value (.-target ev)))))\n\n\n(defui group-filter-option-ui [this group]\n  [:option (:name group)])\n\n(defui group-filter-ui [this groups]\n  [:span.filter\n   [:label \"Group: \"]\n   [:select\n    (map (partial group-filter-option-ui this) (cons {:name \"\"} groups))]]\n  :change (fn [ev]\n            (set-group-filter! this (.-value (.-target ev)))))\n\n(defui filters-ui [this filters]\n  [:div.filters\n   [:h1 (files/basename (:project-path @this))]\n   (group-filter-ui this (:groups filters))\n   (module-filter-ui this (:modules filters))\n   (exposeds-filter-ui this)])\n\n\n(defn render-filters [this filters]\n  (let [container (object/->content this)\n        curr-filters (dom/$ :div.filters container)]\n    (dom/replace-with curr-filters (filters-ui this filters))))\n\n\n(object/object* ::module-graph\n                :tags [:elm.graph.module]\n                :name \"Module graph\"\n                :init (fn [this]\n                        (module-graph-ui this)))\n\n\n(declare module-graph)\n\n\n(behavior ::on-close-destroy\n          :triggers #{:close}\n          :reaction (fn [this]\n                      (when-let [ts (:lt.objs.tabs/tabset @this)]\n                        (when (= (count (:objs @ts)) 1)\n                          (tabs/rem-tabset ts)))\n                      (object/raise this :destroy)))\n\n\n(defn node-id [x]\n  (:name x))\n\n;;\n\n(defn exposeds-html [exposeds]\n  (str \"<ul>\"\n       (->> (map (fn [exp]\n                   (str \"<li>\" exp \"</li>\")) exposeds)\n            s/join)\n       \"</ul>\"))\n\n\n\n(defn node-label [this x]\n  #js {:shape (if-let [shape (:shape x)] shape \"rect\")\n       :labelType \"html\"\n       :style (when (= (:name x) (-> @this :filters :current-module))\n                \"fill: #FFF8DC\")\n       :label (str \"<div class='graph-label'>\"\n                   \"<span>\" (:name x) \"</span>\"\n                   (when (-> @this :filters :show-exposeds?)\n                     (exposeds-html (:exposeds x)))\n                   \"</div>\")})\n\n(def level-styles\n  {1 \"fill: #474747\"\n   2 \"fill: #6D686E\"\n   3 \"fill: #7E7880\"\n   4 \"fill: #807A78\"\n   5 \"fill: #919394\"})\n\n\n\n(defn group-label [x]\n  #js {:shape (if-let [shape (:shape x)] shape \"rect\")\n       :labelType \"html\"\n       :style (get level-styles (:level x) )\n       :class \"level-class\"\n       :clusterLabelPos \"top\"\n       :label (str \"<div class='group-label'>\"\n                   (:name x)\n                   \"</div>\")})\n\n\n(defn create-graph [this data]\n  (let [g (.setGraph (new dagreD3.graphlib.Graph #js {:compound true}) #js {})]\n    (doseq [x (:groups data)]\n      (.setNode g (:group x) (group-label x)))\n\n    (doseq [x (:nodes data)]\n      (.setNode g (node-id x) (node-label this x))\n      (when-let [parent (:parent x)]\n        (.setParent g (node-id x) parent)))\n\n    (doseq [x (filter :parent (:groups data))]\n      (.setParent g (:group x) (:parent x)))\n\n\n    (doseq [x (:edges data)]\n      (.setEdge g (:a x) (:b x) #js {:label (:label x)}))\n    g))\n\n\n(defn d3-sel [selector]\n  (.select d3 selector))\n\n(defn dimensions [this]\n  {:w  (.-clientWidth (:content @this))\n   :h  (.-clientHeight (:content @this))})\n\n\n(defn init-zoom [svg g]\n  (let [zoom (.on (.zoom (.-behavior d3))\n                  \"zoom\"\n                  #(.attr g \"transform\" (str \"translate(\" (.-translate (.-event d3)) \")\"\n                                             \"scale(\" (.-scale (.-event d3)) \")\")))]\n    (.call svg zoom)))\n\n\n(defn resize-graph [this svg]\n  (let [dim (dimensions this)]\n    (.attr svg \"width\" (+ (:w dim) 20))\n    (.attr svg \"height\" (+ (:h dim) 20))))\n\n\n(behavior ::on-render\n          :desc \"Elm render project modules\"\n          :triggers #{:elm.module-graph.render}\n          :reaction (fn [this data]\n                      (let [svg (.select d3 \"svg\")\n                            g (.select svg \"g\")\n                            renderer (.render dagreD3)]\n                        (renderer g (create-graph this data))\n                        (init-zoom svg g)\n                        (js-util/wait 200 #(resize-graph this svg)))))\n\n\n\n\n\n\n(defn get-project-modules [project-path]\n  (->> (elm-ast/get-project project-path)\n       :file-asts\n       (remove :package)))\n\n(defn get-group-names [module-names]\n  (->> module-names\n       (map #(s/split % #\"\\.\"))\n       (filter #(< 1 (count %)))\n       (map drop-last)\n       (mapcat (fn [parts]\n                 (reduce (fn [a b]\n                           (let [group-name (str (:name (last a)) (when (seq a) \".\") b)]\n                             (conj a\n                                   {:group (str \"g-\" group-name)\n                                    :name group-name\n                                    :level (inc (count a))\n                                    :parent (:group (last a))}))\n                           )\n                         []\n                         parts)))\n       set\n       sort))\n\n\n\n\n(defn- get-exposeds-names [module]\n  (->> (elm-ast/get-exposed-declarations-memo module)\n       (remove #(= \"adtDef\" (:type %)))\n       (map :value)))\n\n(defn create-graph-data [modules]\n  (let [module-names (set (map elm-ast/get-module-name modules)) ]\n\n    {:groups (get-group-names module-names)\n     :nodes (map (fn [module]\n                   (let [mod-name (elm-ast/get-module-name module)]\n                     {:name  (elm-ast/get-module-name module)\n                      :parent (when (< -1 (.indexOf mod-name \".\"))\n                                (->> (s/split mod-name #\"\\.\")\n                                     drop-last\n                                     (s/join \".\")\n                                     (str \"g-\")))\n                      :exposeds (get-exposeds-names module)\n                      :file (:file module)}))\n                 modules)\n     :edges (mapcat\n              (fn [module]\n                (map\n                  (fn [imp]\n                    {:a (elm-ast/get-module-name module)\n                     :b (:value imp)\n                     :label \"\"})\n                  (->> (-> module :ast :imports :imports)\n                       (filter #(contains? module-names (:value %))))))\n              modules)}))\n\n\n;; todo : move to elm-ast\n(defn- get-module-import-names [module]\n  (->> module :ast :imports :imports (map :value) set))\n\n(defn- maybe-filter-by-group [current-group modules]\n  (if-not (s/blank? current-group)\n    (filter #(.startsWith (elm-ast/get-module-name %) current-group) modules)\n    modules))\n\n\n(defn- maybe-filter-by-module [current-module modules]\n  (if-not (s/blank? current-module)\n    (let [module (-> (filter #(= current-module (elm-ast/get-module-name %)) modules)\n                     first)\n          module-import-names (get-module-import-names module)]\n\n      (filter (fn [m]\n                (or\n                  (= module m)\n                  (contains? module-import-names (elm-ast/get-module-name m))\n                  (contains? (get-module-import-names m) current-module)))\n              modules))\n    modules))\n\n\n(defn refresh-graph [this]\n  (let [modules (->> (get-project-modules (:project-path @this))\n                     (maybe-filter-by-group (-> @this :filters :current-group))\n                     (maybe-filter-by-module (-> @this :filters :current-module)))]\n    (object/raise this :elm.module-graph.render (create-graph-data modules))))\n\n\n(defn- set-group-filter! [this group-name]\n  (object/assoc-in! this [:filters :current-group] group-name)\n  (refresh-graph this))\n\n(defn- set-module-filter! [this module-name]\n  (object/assoc-in! this [:filters :current-module] module-name)\n  (refresh-graph this))\n\n(defn- toggle-exposeds-filter! [this v]\n  (object/assoc-in! this [:filters :show-exposeds?] v)\n  (refresh-graph this))\n\n\n\n(behavior ::on-show-modules\n          :desc \"Elm show module graph\"\n          :triggers #{:elm.module-graph.show}\n          :reaction (fn [this project-path ]\n                      (tabs/add-or-focus! this)\n                      (let [modules (get-project-modules project-path)\n                            groups (get-group-names (set (map elm-ast/get-module-name modules)))]\n                        (object/merge! this {:filters {}\n                                             :project-path project-path})\n                        (object/raise this :elm.module-graph.render (create-graph-data modules))\n                        (render-filters this {:groups groups\n                                              :modules (map (fn [module]\n                                                              {:name (elm-ast/get-module-name module)})\n                                                            modules)}))))\n\n(behavior ::on-tab-resized\n          :triggers #{:end-drag}\n          :reaction (fn [_]\n                      (let [svg (.select d3 \"svg\")]\n                        (resize-graph module-graph svg))))\n\n(behavior ::on-move\n          :triggers #{:move}\n          :reaction (fn [this]\n                      (let [svg (.select d3 \"svg\")]\n                        (resize-graph this svg))))\n\n\n\n\n(def module-graph (object/create ::module-graph))\n\n;; (doseq [obj (object/by-tag :elm.graph.module)]\n;;   (println \"Destroying !\")\n;;     (object/destroy! obj))\n\n\n\n(cmd/command {:command :show-elm-module-graph\n              :desc \"Elm: Show module graph\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (when-let [path (-> @ed :info :path u/project-path)]\n                          (object/raise module-graph :elm.module-graph.show path ))))})\n\n"
  },
  {
    "path": "src/lt/plugins/elm_light/modulebrowser.cljs",
    "content": "(ns lt.plugins.elm-light.modulebrowser\n  (:require [lt.plugins.elm-light.utils :as u]\n            [lt.objs.files :as files]\n            [lt.object :as object]\n            [lt.objs.sidebar :as sidebar]\n            [lt.objs.sidebar.command :as sidebar-cmd]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.notifos :as notifos]\n            [lt.util.dom :as dom]\n            [clojure.string :as s])\n    (:require-macros [lt.macros :refer [defui behavior]]))\n\n\n(defn- resolve-module-file [project-path pck-json package module version]\n  (->> pck-json\n       :source-directories\n       (map #(files/join project-path\n                         \"elm-stuff/packages\"\n                         package\n                         version\n                         %\n                         (str (s/replace module \".\" files/separator) \".elm\")))\n       (some #(if (files/exists? %) % nil))))\n\n\n(defn- get-exposed-modules [project-path {:keys [package exact]}]\n  (let [pck-json (u/parse-json-file (files/join project-path\n                                                \"elm-stuff/packages\"\n                                                package exact\n                                                \"elm-package.json\"))]\n    (->> pck-json\n         :exposed-modules\n         (map (fn [x]\n                {:name x\n                 :packageName package\n                 :version exact\n                 :file (resolve-module-file project-path pck-json package x exact)})))))\n\n\n(defn- get-package-modules [project-path]\n  (->> (u/get-project-deps project-path)\n       (filter :exact)\n       (mapcat (partial get-exposed-modules project-path))\n       (sort-by :name)))\n\n\n(defn- deduce-module-name [root-path elm-file-path]\n  (-> elm-file-path\n      (s/replace root-path \"\")\n      (s/replace \".elm\" \"\")\n      (s/replace #\"^/\" \"\")\n      (s/replace files/separator \".\")))\n\n\n(defn- get-project-modules [project-path]\n  (let [pck-json (u/parse-json-file (files/join project-path \"elm-package.json\"))]\n    (->> (:source-directories pck-json)\n         (mapcat (fn [dir]\n                   (if (= dir \".\")\n                     (->> (files/ls project-path) ;; fixme: no nesting allowed to avoid elm-stuff etc\n                          (filter #(= (files/ext %) \"elm\"))\n                          (map (fn [x]\n                                 {:name (deduce-module-name \"\" x)\n                                  :file (files/join project-path x)})))\n                     (->> (files/filter-walk #(= (files/ext %) \"elm\") (files/join project-path dir))\n                          (map (fn [x]\n                                 {:name (deduce-module-name (files/join project-path dir) x)\n                                  :file x}))))))\n         (map (fn [m]\n                (assoc m :packageName (files/basename project-path) :version (:version pck-json))))\n         (sort-by :name))))\n\n\n\n(defn get-all-modules [project-path]\n  (concat\n    (get-project-modules project-path)\n    (get-package-modules project-path)))\n\n\n;(println (u/pretty-json (get-all-modules \"/Users/mrundberget/projects/albums/frontend\")))\n\n\n(defui wrapper [this]\n   [:div {:id \"elm-module-browser\"} \"Retrieving modules...\"])\n\n\n(behavior ::clear!\n          :triggers #{:clear!}\n          :reaction (fn [this]\n                      (cmd/exec! :close-sidebar)))\n\n(behavior ::focus!\n          :triggers #{:focus!}\n          :reaction (fn [this]\n                      (let [input (dom/$ \"#elm-module-browser input\")]\n                        (.focus input))))\n\n(behavior ::ensure-visible\n          :triggers #{:ensure-visible}\n          :reaction (fn [this]\n                      (sidebar-cmd/ensure-visible this)))\n\n(behavior ::show-project-modules\n          :triggers #{:show-project-modules}\n          :reaction (fn [this prj-path]\n                      (let [modules (get-all-modules prj-path)\n                            el (dom/$ \"#elm-module-browser\")\n                            mod-browser (.embed js/Elm js/Elm.ModuleBrowser el (clj->js {:modzPort []}))]\n\n                        (.send (.-modzPort (.-ports mod-browser)) (clj->js modules))\n\n                        ;; set up port subscriptions\n\n                        (.subscribe (.-changeSelection (.-ports mod-browser))\n                                    (fn []\n                                      (object/raise this :ensure-visible)))\n\n                        (.subscribe (.-select (.-ports mod-browser))\n                                    (fn [file]\n                                      (cmd/exec! :open-path file)\n                                      (object/raise this :clear!)))\n\n                        (.subscribe (.-close (.-ports mod-browser))\n                                    (fn []\n                                      (object/raise this :clear!)))\n\n\n                        (object/raise this :focus!))))\n\n\n\n(object/object* ::modulebrowser\n                :tags #{:elm.modulebrowser}\n                :label \"Elm module browser\"\n                :order 2\n                :init (fn [this]\n                        (wrapper this)))\n\n(def module-bar (object/create ::modulebrowser))\n\n(sidebar/add-item sidebar/rightbar module-bar)\n\n\n(behavior ::list-modules\n          :triggers #{:editor.elm.list-modules}\n          :reaction (fn [ed]\n                      (when-let [prj-path (u/project-path (-> @ed :info :path))]\n                        (do\n                          (object/raise sidebar/rightbar :toggle module-bar)\n                          (object/raise module-bar :show-project-modules prj-path)))))\n\n\n(cmd/command {:command :show-modulebrowser\n              :desc \"Elm: Show module-browser\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :editor.elm.list-modules)))})\n"
  },
  {
    "path": "src/lt/plugins/elm_light/packages.cljs",
    "content": "(ns lt.plugins.elm-light.packages\n  (:require [lt.plugins.elm-light.utils :as u]\n            [lt.plugins.elm-light.graph :as graph]\n            [lt.plugins.elm-light.autocompleter :as ac]\n            [lt.objs.files :as files]\n            [lt.objs.tabs :as tabs]\n            [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.console :as console]\n            [lt.objs.notifos :as notifos]\n            [lt.objs.browser :as browser]\n            [lt.util.dom :as dom]\n            [quiescent :as q :include-macros true]\n            [quiescent.dom :as d]\n            [clojure.string :as s]\n            [clojure.walk :refer [keywordize-keys]])\n  (:require-macros [lt.macros :refer [defui behavior]]))\n\n\n\n\n(defn remove-pkg [path pkg]\n  (let [pkg-file (files/join path \"elm-package.json\")]\n    (-> (u/parse-json-file pkg-file)\n        (update-in [:dependencies] (fn [deps]\n                                     (-> (into {}\n                                               (map (fn [[k v]]\n                                                      [(u/nskw->name k) v]) deps))\n                                         (dissoc pkg))))\n        u/pretty-json\n        ((partial files/save pkg-file)))))\n\n\n(defui project-wrapper [this]\n  [:div.elm\n   [:div {:id \"project-packages-wrapper\"} \"Retrieving project package info...\"]])\n\n(object/object* ::elm-packages\n                :tags #{:elm.packages}\n                :label \"Elm project packages\"\n                :name \"Elm project packages\"\n                :init (fn [this]\n                        (u/fetch-all-packages #(object/merge! this {:all-packages %}))\n                        (project-wrapper this)))\n\n\n\n(declare elm-packages)\n\n\n;; react rendering\n(declare render)\n\n\n\n\n(defn ensure-visible [this]\n  (let [list (dom/$ \".autocomplete-dropdown-menu\" (object/->content this))\n        elem (dom/$ \".autocomplete-active\" list)]\n    (cond\n     (< (.-offsetTop elem) (.-scrollTop list)) (set! (.-scrollTop list) (- (.-offsetTop elem) 15))\n     (> (+ (.-offsetTop elem) (.-offsetHeight elem))\n        (+ (.-scrollTop list) (.-clientHeight list))) (set! (.-scrollTop list)\n                                                            (- (+ (.-offsetTop elem) (.-offsetHeight elem) 15) (.-clientHeight list)))\n     :else nil)))\n\n\n;; stateless joy !\n\n(defn filter-packages [token pkgs]\n  (vec\n   (filter (fn [pkg]\n             (> (.indexOf (s/lower-case (:name pkg)) (s/lower-case token)) -1)) pkgs)))\n\n(defn idx-active [items]\n  (first (keep-indexed #(when (:active %2) %1) items)))\n\n(defn move-down [items]\n  (when-not (empty? items)\n    (-> (assoc-in items [(idx-active items) :active] false)\n        (assoc-in [(min (dec (count items)) (inc (idx-active items))) :active] true))))\n\n(defn move-up [items]\n  (when-not (empty? items)\n    (-> (assoc-in items [(idx-active items) :active] false)\n        (assoc-in [(max 0 (dec (idx-active items))) :active] true))))\n\n\n;; Warning - Mutants ahead\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n(defn on-pkg-down []\n  (object/update! elm-packages [:ac-packages] move-down)\n  (render {})\n  (ensure-visible elm-packages))\n\n\n\n(defn on-pkg-up []\n  (object/update! elm-packages [:ac-packages] move-up)\n  (render {})\n  (ensure-visible elm-packages))\n\n\n(defn on-pkg-sel []\n  (let [items (:ac-packages @elm-packages)]\n    (if-let [idx (idx-active items)]\n      (do\n        (object/assoc-in! elm-packages [:ac-versions] (:versions (nth items idx)))\n        (object/assoc-in! elm-packages [:ac-version] (first (:versions (nth items idx))))\n        (object/assoc-in! elm-packages [:ac-package] (:name (nth items idx))))\n      (object/assoc-in! elm-packages [:ac-versions] [])))\n  (object/merge! elm-packages {:ac-packages nil})\n  (render {}))\n\n(defn on-pkg-cancel []\n  (object/merge! elm-packages {:ac-packages nil\n                               :ac-versions []})\n  (render {}))\n\n(defn on-pkg-blur []\n  (object/merge! elm-packages {:ac-packages nil})\n  (render {}))\n\n\n(defn on-pkg-change [v]\n  (let [items (filter-packages v (:all-packages @elm-packages))]\n    (object/merge! elm-packages {:ac-packages items\n                                 :ac-package v\n                                 :ac-versions []\n                                 :ac-version nil})\n    (when-not (empty? items)\n      (object/assoc-in! elm-packages [:ac-packages 0 :active] true))\n    (render {})))\n\n\n(defn pkg-install [pkg v]\n  (let [args (concat [\"install\" \"--yes\"] (if pkg [pkg v] []))]\n    (notifos/working (s/join \" \" (cons \"elm-package\" args)))\n    (let [proc (.spawn (js/require \"child_process\")\n                       \"elm-package\"\n                       (clj->js args)\n                       #js {:cwd (:path @elm-packages)})]\n      (.on proc \"exit\" #(do\n                          (if (= % 0 )\n                            (notifos/done-working)\n                            (notifos/set-msg! \"Error installing elm package\" {:class \"error\" :timeout 5000}))\n                          (object/raise elm-packages :elm.show.project.packages (:path @elm-packages))\n                          (object/raise graph/dependency-graph\n                                        :elm.graph.show-dependencies\n                                        (:path @elm-packages)\n                                        false)))\n      (.stdout.on proc \"data\" #(notifos/msg* (str \"Package install: \" %) {:timeout 5000}))\n      (.stderr.on proc \"data\" #(console/error (str %))))))\n\n(defn on-add-package []\n  (pkg-install (:ac-package @elm-packages) (:ac-version @elm-packages)))\n\n(defn on-pkg-refresh []\n  (pkg-install nil nil))\n\n(defn on-remove-pkg [pkg]\n  (remove-pkg (:path @elm-packages) pkg)\n  (pkg-install nil nil))\n\n\n(defn on-change-version [v]\n  (object/assoc-in! elm-packages [:ac-version] v)\n  (render {}))\n\n(defn on-pkg-browse [pkg version]\n  (let [url (str \"http://package.elm-lang.org/packages/\" pkg \"/\" version)\n        b (or (first (object/by-tag :browser))\n              (browser/add))]\n    (tabs/add-or-focus! b)\n    (object/raise b :navigate! url)))\n\n\n(defn on-show-graph []\n  (object/raise graph/dependency-graph\n                :elm.graph.show-dependencies\n                (:path @elm-packages)\n                true))\n\n;; React view components\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n(q/defcomponent AddPackageForm [props]\n  (d/div\n   {:className \"add-package\"}\n   (d/h3 {} \"Add package:\")\n   (ac/AutoComplete (:ac-props props))))\n\n(q/defcomponent PackageRow\n  [{:keys [package range exact on-remove on-browse]}]\n  (d/tr\n   {}\n   (d/td {} (if (and package exact)\n              (d/span {:className \"link\" :onClick #(on-browse package exact)} package)\n              package) )\n   (d/td {} range)\n   (d/td {} exact)\n   (d/td {} (when range\n              (d/button {:onClick #(on-remove package)} \"remove\")))))\n\n(q/defcomponent PackageTable [props]\n  (d/table\n   {:className \"package-table\"}\n   (d/thead\n    {}\n    (d/tr\n     {}\n     (d/th {} \"Package\")\n     (d/th {} \"Range\")\n     (d/th {} \"Exact\")\n     (d/th {} \"\")))\n   (apply d/tbody {}\n          (map #(PackageRow (assoc %\n                              :on-remove (:on-remove props)\n                              :on-browse (:on-browse props)))\n               (:packages props)))))\n\n\n(q/defcomponent ProjectPackages [props]\n  (d/div {:className \"project-packages\"}\n         (d/h1 {} (str (files/basename (:path props)) \" - packages\"))\n         (PackageTable props)\n         (d/button {:onClick #((:on-pkg-refresh props))} \"Refresh packages\")\n         (d/button {:onClick #((:on-show-graph props))\n                    :style {:marginLeft \"10px\"}} \"Show dependency graph\")\n         (AddPackageForm props)))\n\n\n\n(defn render [props]\n  (q/render (ProjectPackages (merge props {:path (:path @elm-packages)\n                                           :packages (:packages @elm-packages)\n                                           :on-pkg-refresh on-pkg-refresh\n                                           :on-remove on-remove-pkg\n                                           :on-browse on-pkg-browse\n                                           :on-show-graph on-show-graph\n                                           :ac-props {:items (:ac-packages @elm-packages)\n                                                      :value (:ac-package @elm-packages)\n                                                      :versions (:ac-versions @elm-packages)\n                                                      :version (:ac-version @elm-packages)\n                                                      :on-change on-pkg-change\n                                                      :on-up on-pkg-up\n                                                      :on-down on-pkg-down\n                                                      :on-select on-pkg-sel\n                                                      :on-blur on-pkg-blur\n                                                      :on-cancel on-pkg-cancel\n                                                      :on-change-version on-change-version\n                                                      :on-add-package on-add-package}\n                                           :all-packages (:all-packages @elm-packages)}))\n            (.getElementById js/document \"project-packages-wrapper\")))\n\n\n;; Behaviours and commands\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n(behavior ::on-close-project-packages\n          :triggers #{:close}\n          :reaction (fn [this]\n                      (tabs/rem! this)))\n\n(behavior ::show-project-packages\n          :triggers #{:elm.show.project.packages}\n          :reaction (fn [this path]\n                      (tabs/add-or-focus! elm-packages)\n                      (object/assoc-in! elm-packages [:ac-packages] nil)\n                      (object/assoc-in! elm-packages [:ac-package] nil)\n                      (object/assoc-in! elm-packages [:ac-versions] [])\n                      (object/assoc-in! elm-packages [:ac-version] nil)\n                      (object/assoc-in! elm-packages [:path] path)\n                      (object/assoc-in! elm-packages [:packages] (u/get-project-deps path))\n                      (render {})))\n\n\n(def elm-packages (object/create ::elm-packages))\n\n;; (doseq [obj (object/by-tag :elm.packages)]\n;;       (println \"Destroying\")\n;;       (object/destroy! obj))\n\n\n\n\n\n(cmd/command {:command :show-elm-project-packages\n              :desc \"Elm: Show project packages\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (when-let [path (-> @ed :info :path u/project-path)]\n                          (object/raise elm-packages :elm.show.project.packages path))))})\n\n\n\n\n"
  },
  {
    "path": "src/lt/plugins/elm_light/repl.cljs",
    "content": "(ns lt.plugins.elm-light.repl\n  \"Implementation of anyonymous Elm Repl Tab\"\n  (:require [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor :as editor]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.tabs :as tabs])\n  (:require-macros [lt.macros :refer [behavior]]))\n\n\n(behavior ::on-focus-repl-ed\n          :triggers #{:focus!}\n          :reaction (fn [this]\n                      (when (:main @this)\n                        (object/raise (:main @this) :focus!))))\n\n\n(behavior ::repl-destroy-on-close\n          :triggers #{:close}\n          :reaction (fn [this]\n                      (object/raise (:main @this) :close)\n                      (object/destroy! this)))\n\n(behavior ::repl-close-parent\n          :triggers #{:destroy}\n          :reaction (fn [this]\n                      (object/destroy! (:frame @this))))\n\n(behavior ::on-show-repl-refresh-eds\n          :triggers #{:show}\n          :reaction (fn [this]\n                      (when (:main @this)\n                        (object/raise (:main @this) :show)\n                        (object/raise (:main @this) :refresh!)\n                        (editor/focus (:main @this)))))\n\n(object/object* ::elmrepl\n                :tags #{:elmrepl}\n                :name \"elmrepl\"\n                :live true\n                :init (fn [this]\n                        (let [main (-> (pool/create {:mime \"text/x-elm\" :content \"\" :ns \"user\"})\n                                       (object/remove-tags [:editor.elm])\n                                       (object/add-tags [:editor.elm.repl :editor.transient]))]\n                          (object/merge! main {:frame this})\n                          (editor/clear-history main)\n                          (object/merge! main {:dirty false\n                                               :editor.generation (editor/->generation main)})\n                          (object/merge! this {:main main\n                                               :dirty false})\n                          (editor/+class main :main)\n                          (editor/move-cursor main {:line 0 :ch 0})\n                          [:div.elmrepl\n                           (object/->content main)])))\n\n\n(defn add-repl []\n  (let [elmrepl (object/create ::elmrepl)]\n    (tabs/add! elmrepl)\n    (tabs/active! elmrepl)\n    elmrepl))\n\n(cmd/command {:command :elmrepl\n              :desc \"Elm repl: Open a elm repl\"\n              :exec (fn []\n                      (add-repl))})\n"
  },
  {
    "path": "src/lt/plugins/elm_light/selection.cljs",
    "content": "(ns lt.plugins.elm-light.selection\n  (:require [lt.objs.editor :as editor]))\n\n\n(defn indented? [s]\n  (> (count (re-find #\"\\s*\" s)) 0))\n\n(defn comment-line? [ed l]\n  (= \"comment\" (:type (editor/->token ed {:line l :ch 1}))))\n\n(defn no-content-line? [s]\n  (and (not (nil? s))\n       (= 0 (count (.trim s)))))\n\n\n(defn top-level-line? [ed l]\n  (let [line-str (editor/line ed l)]\n    (and (not (indented? line-str))\n         (not (no-content-line? line-str))\n         (not (comment-line? ed l)))))\n\n\n(defn get-top-level-line-back [ed pos]\n  (loop [line (:line pos)]\n    (cond\n     (top-level-line? ed line) line\n     (= 0 line) nil\n     :else (recur (dec line)))))\n\n(defn get-top-level-line-down [ed start-line]\n\n  (let [last-line (editor/last-line ed)]\n    (loop [line start-line]\n      (cond\n       (top-level-line? ed line) line\n       (= line last-line) nil\n       :else (recur (inc line))))))\n\n\n(defn maybe-backup [ed l]\n  (loop [line l]\n    (if (or (no-content-line? (editor/line ed line))\n            (comment-line? ed line))\n      (recur (dec line))\n      line)))\n\n\n(defn get-top-level-expr [ed pos]\n  (when-let [start-line  (get-top-level-line-back ed pos)]\n    (let [last-line (editor/last-line ed)\n          end-line (maybe-backup ed\n                                 (if (= last-line start-line)\n                                   start-line\n                                   (if-let [l (get-top-level-line-down ed (inc start-line))]\n                                     (dec l)\n                                     last-line)))]\n      {:from {:line start-line :ch 0}\n       :to   {:line end-line   :ch (editor/line-length ed end-line)}})))\n"
  },
  {
    "path": "src/lt/plugins/elm_light/test.cljs",
    "content": "(ns lt.plugins.elm-light.test\n  (:require [lt.plugins.elm-light.utils :as util]\n            [lt.plugins.elm-light.clients :as elm-clients]\n            [lt.plugins.elm-light.elm-ast :as elm-ast]\n            [lt.objs.console :as console]\n            [lt.objs.notifos :as notifos]\n            [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.clients :as clients]\n            [lt.objs.editor :as editor]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.tabs :as tabs]\n            [lt.objs.statusbar :as statusbar]\n            [lt.objs.files :as files]\n            [lt.util.dom :as dom]\n            [clojure.string :as s]\n            [clojure.zip :as zip])\n  (:require-macros [lt.macros :refer [behavior defui]]))\n\n\n\n; Setup tests\n(def default-test-deps\n  {:elm-community/elm-test \"3.0.0 <= v < 4.0.0\"\n   :rtfeldman/node-test-runner \"3.0.0 <= v < 4.0.0\"})\n\n(defn ->test-src-dir [src-dir]\n  (if (= src-dir \".\")\n    \"../\"\n    (str \"../\" src-dir)))\n\n(defn ->test-src-dirs [src-dirs]\n  (conj (mapv ->test-src-dir src-dirs) \".\"))\n\n\n(defn deps->named [deps]\n  (into {}\n        (map (fn [[k v]]\n               [(util/nskw->name k) v]) deps)))\n\n(defn ->test-config [project-cfg]\n  (-> project-cfg\n      (update-in [:source-directories] ->test-src-dirs)\n      (assoc :exposed-modules [])\n      (update-in [:dependencies] #(merge % default-test-deps))\n      (update-in [:dependencies] deps->named)))\n\n\n(defn parse-project-cfg [project-path]\n  (util/parse-json-file (files/join project-path \"elm-package.json\")))\n\n(defn save-test-cfg! [path test-cfg]\n  (->> (util/pretty-json test-cfg)\n       (files/save path)))\n\n(defn maybe-create-test-path! [project-path]\n  (let [test-path (files/join project-path \"tests\")]\n    (when-not (files/exists? test-path)\n      (files/mkdir test-path))\n    test-path))\n\n(defn install-packages! [test-path]\n  (let [args [\"install\" \"--yes\"]\n        proc (.spawn (js/require \"child_process\")\n                     \"elm-package\"\n                     (clj->js args)\n                     #js {:cwd test-path})]\n\n    (.stdout.on proc \"data\" #(println (str \"Test package install: \" %)))\n    (.stderr.on proc \"data\" #(console/error (str %)))\n    (.on proc \"exit\" #(if (= % 0 )\n                        (notifos/done-working \"Successfully configured elm test\")\n                        (notifos/set-msg! \"Error installing test elm packages\" {:class \"error\" :timeout 5000})))\n    nil))\n\n\n(defn maybe-add-templates [test-path]\n  (let [templ-dir (files/join util/elm-plugin-dir \"templates/test\")\n        runner (files/join templ-dir \"Main.elm\")\n        tests (files/join templ-dir \"Tests.elm\")]\n    (when-not (files/exists? (files/join test-path \"Main.elm\"))\n      (files/copy runner (files/join test-path \"Main.elm\")))\n    (when-not (files/exists? (files/join test-path \"Tests.elm\"))\n      (files/copy tests (files/join test-path \"Tests.elm\")))))\n\n(defn setup-test [project-path]\n  (when-let [project-cfg (parse-project-cfg project-path)]\n    (notifos/working \"Init elm test config\")\n    (let [test-path (maybe-create-test-path! project-path)\n          test-cfg-path (files/join test-path \"elm-package.json\")]\n      (maybe-add-templates test-path)\n      (->> (->test-config project-cfg)\n           (save-test-cfg! test-cfg-path))\n      (install-packages! test-path))))\n\n\n\n\n\n\n; --- ZIPPERS FOR GROUPING TESTS\n\n(defn- z-top [zloc]\n  (->> (iterate zip/up zloc)\n       (take-while identity)\n       last))\n\n(defn- z-find-by-label [label zloc]\n  (->> (iterate zip/next zloc)\n       (take-while identity)\n       (take-while (complement zip/end?))\n       (filter #(= label (zip/node %)))\n       first))\n\n\n(defn- suitify-test [{:keys [labels failures]}]\n  (let [[head & tail] labels\n        root (zip/vector-zip [head])]\n    (-> (reduce (fn [zloc label]\n                  (-> (zip/append-child zloc [label])\n                      zip/down\n                      zip/right))\n                root\n                tail)\n        (zip/append-child {:failures failures})\n        z-top)))\n\n(defn- add-test-to-suite [{:keys [zloc labels]}  {:keys [failures]}]\n  (let [[head & tail] labels\n        root (when (seq labels)\n               (-> (zip/rightmost zloc)\n                   (zip/insert-right [head])\n                   zip/right)) ]\n\n    (if (seq labels)\n      (-> (reduce (fn [zl label]\n                    (-> (zip/append-child zl [label])\n                        zip/down\n                        zip/right))\n                  root\n                  tail)\n          (zip/append-child {:failures failures})\n          z-top)\n\n      ;; Just append the failures all labels are similar to get here...\n      (let [z-failures (zip/right zloc)\n            curr-fails (-> (zip/node z-failures) :failures)]\n        (->> {:failures (concat curr-fails failures)}\n             (zip/replace z-failures)\n             z-top)))))\n\n\n(defn- find-branch [zloc-suite labels]\n  (loop [zloc zloc-suite\n         lbls labels]\n    (let [branch (z-find-by-label (first lbls) zloc)]\n      (cond\n        (and branch\n             (or (not (second lbls))\n                 (and (second lbls)\n                      (nil? (z-find-by-label (second lbls) branch)))))\n        {:zloc branch :labels (drop 1 lbls)}\n\n        (nil? branch)\n        nil\n\n        branch\n        (recur branch (drop 1 lbls))))))\n\n\n(defn group-tests [tests]\n  (reduce (fn [acc t]\n            (let [prev (last acc)]\n              (if-not prev\n                (conj acc (suitify-test t))\n                (if-let [branch (find-branch prev (:labels t))]\n                    (-> (drop-last acc)\n                        vec\n                        (conj (add-test-to-suite branch t)))\n                    (conj acc (suitify-test t))))))\n          []\n          tests))\n\n;; (let [sample1 {:labels [\"oxfordify\" \"given a sentence with multiple items\" \"returns an oxford-style sentence\"] :failures [\"failure 1\"]}\n;;       sample2 {:labels [\"oxfordify\" \"given a sentence with multiple items\" \"returns an oxford-style sentence\"] :failures [\"failure 2\"]}]\n;;   (let [suite1 (suitify-test sample1)]\n;;     (add-test-to-suite (find-branch suite1 (:labels sample2))\n;;                        sample2)))\n\n\n\n(declare dashboard)\n\n\n(defn- get-status-count [status items]\n  (->> (filter #(= status (:status %)) items)\n       count))\n\n(defui wrapper []\n  [:div.elmtest-dashboard\n   [:h1.title \"Elm Test Dashboard\"]\n   [:div.project-container \"Project stuff here\"]\n   [:div.result-container \"Placeholder for results\"]])\n\n\n(defui loader []\n  [:div.bubblingG\n   [:span {:id \"bubblingG_1\"}]\n   [:span {:id \"bubblingG_2\"}]\n   [:span {:id \"bubblingG_3\"}]])\n\n\n(defui testprogress-ui [this {:keys [labels status] :as evt}]\n  (let [testCount (or (-> @this :start :testCount) 0)\n        progress (str (count (:tests @this)) \"/\" testCount)\n        test-name (s/join \" -> \" labels)\n        clazz (if (:failures? @this) \"error\" \"ok\")\n        failed (get-status-count \"fail\" (:tests @this))\n        passed (get-status-count \"pass\" (:tests @this))\n        duration (if (= \"runComplete\" (:event evt))\n                   (:duration evt)\n                   (->> (map #(-> (:duration %) int) (-> @this :tests))\n                        (reduce +)))]\n\n    [:div.test-progress\n     [:div.summary\n      [:div.summary-item\n       [:label \"Runs:\"]\n       [:span progress]]\n      [:div.summary-item\n       [:label \"Passed:\"]\n       [:span passed]]\n      [:div.summary-item\n       [:label \"Failed:\"]\n       [:span failed]]\n      [:div.summary-item\n       [:label \"Seed:\"]\n       [:span (-> @this :start :initialSeed)]]\n      [:div.summary-item\n       [:label \"Duration:\"]\n       [:span (str duration \" ms\")]]]\n     [:div.progress\n      [:progress {:value (count (:tests @this)) :max testCount :class clazz}]]\n     [:p.curr-test (when-not (s/blank? test-name) (str \"(\" test-name \")\"))]]))\n\n\n\n(defui failure-item [{:keys [given actual] :as failure}]\n  [:div\n   (when-not (s/blank? given)\n     [:div.given\n      [:label \"Given: \"]\n      [:span given]])\n   [:pre actual]])\n\n\n(defui dufus-ui [nd]\n  [:ul\n   [:li\n    [:span.test-label (str (first nd))]\n    (if (map? (second nd))\n      (map failure-item (:failures (second nd)))\n      (map dufus-ui (drop 1 nd))\n      )\n    ]])\n\n\n(defui failed-test-ui [z-failed-test]\n  [:li\n   (dufus-ui (zip/node z-failed-test))])\n\n(defui failed-tests-ui [failed-tests & ldr]\n  (let [grouped (group-tests failed-tests)]\n    [:div.test-failures\n    [:h2 \"Test Failures\"]\n    [:ul\n     (when ldr\n       ldr)\n     (map failed-test-ui grouped)]]))\n\n\n\n\n(defui project-ui [this]\n  (let [proj-path (util/project-path (:file @this))\n        proj-name (str (last (files/path-segs proj-path)) (files/basename proj-path))]\n    [:div.project-container\n     [:h1 proj-name]]))\n\n\n\n(behavior ::on-close-destroy\n          :triggers #{:close}\n          :reaction (fn [this]\n                      (when-let [ts (:lt.objs.tabs/tabset @this)]\n                        (when (= (count (:objs @ts)) 1)\n                          (tabs/rem-tabset ts)))\n                      (object/raise this :destroy)))\n\n\n\n(behavior ::on-testrun-init\n          :triggers #{:elm.test.init}\n          :reaction (fn [this path]\n                      (let [result-container (dom/$ :div.result-container (:content @this))\n                            proj-container (dom/$ :div.project-container (:content @this))]\n\n                        (object/assoc-in! this [:start] nil)\n                        (object/assoc-in! this [:tests] [])\n                        (object/assoc-in! this [:failures?] nil)\n                        (object/assoc-in! this [:file] path)\n                        (dom/replace-with proj-container (project-ui this))\n\n                        (dom/empty result-container)\n                        (dom/append result-container (testprogress-ui this {}))\n                        (dom/append result-container (failed-tests-ui [] (loader)))\n\n                        ;; TODO: Show some initial message, maybe which file is used ?\n                        )))\n\n\n(defn- log-end [failures? {:keys [passed failed duration] :as evt}]\n  (let [summary (str \"Test run completed in \" duration \"ms. Results: \"\n                     passed \" passed, \"\n                     failed \" failed\")]\n    (console/log summary {:class \"error\"})\n    (notifos/msg* summary\n                 {:class (if failures? \"error\" \"\")\n                  :timeout 5000})))\n\n\n\n(defn handle-end [this {:keys [passed failed duration] :as evt}]\n  (dom/replace-with (dom/$ :div.test-progress (:content @this))\n                      (testprogress-ui this evt ))\n  (log-end (:failures? @this) evt))\n\n\n(defn- log-test-failures [failures? {:keys [labels failures]}]\n  (let [test-name (s/join \" -> \" labels)]\n    (notifos/msg* test-name  {:class (if failures \"error\" \"\")})\n    (console/log test-name {:class \"error\"})\n    (doseq [failure failures]\n        (when-not (s/blank? (:given failure))\n          (console/log (str \"Given: \" (:given failure))))\n        (console/log (str (:actual failure) \"\\n\\n\") {:class \"error\"}))))\n\n\n\n(defn- handle-test-result [this {:keys [labels status failures] :as evt}]\n  (object/update! this [:tests] conj evt)\n\n  (when (= \"fail\" status)\n    (object/assoc-in! this [:failures?] true)\n    (log-test-failures (:failures? @this) evt))\n\n  (let [container (dom/$ :div.result-container (:content @this))\n        failed-tests (->> (:tests @this)\n                          (filter #(= \"fail\" (:status %))))]\n    ;(println \"Failed tests: \" failed-tests)\n    (dom/empty container)\n    (dom/append container (testprogress-ui this evt))\n    (dom/append container (failed-tests-ui failed-tests))))\n\n\n\n(defn- log-start [evt]\n  (notifos/set-msg! (\"About to run  \" (:testCount evt) \" Elm tests\")))\n\n\n(defn- handle-start [this evt]\n  (let [container (dom/$ :div.result-container (:content @this))]\n    (dom/empty container)\n    (dom/append container (testprogress-ui this evt))\n    (dom/append container (failed-tests-ui [] (loader)))\n    (object/assoc-in! this [:start] evt)\n\n    (log-start evt)\n    ;(dom/append container (testinit-ui))\n    ))\n\n\n\n\n\n(defn create-suite\n  \"Create a test suite on the fly for running elm tests\"\n  [suite-name project-tests]\n  (let [imports (->> (map :module-name project-tests)\n                     set\n                     (s/join \"\\nimport \")\n                     (str \"import \"))\n        tests (->> (map #(str (:module-name %) \".\" (:value %)) project-tests)\n                   (s/join \",\"))]\n\n  (str\n\"port module \" suite-name \" exposing (..)\n\nimport Test.Runner.Node exposing (run)\nimport Json.Encode exposing (Value)\nimport Test\"\n\"\\n\" imports \"\\n\"\n\"main : Test.Runner.Node.TestProgram\nmain =\n    run emit <| Test.concat [\" tests \"]\n\nport emit : ( String, Value ) -> Cmd msg\")))\n\n\n\n\n\n(behavior ::elm-test-result\n          :triggers #{:elm.test.result}\n          :desc \"Elm test result event\"\n          :reaction (fn [this res]\n                      (case (:event res)\n                        \"runStart\"\n                        (handle-start this res)\n\n                        \"testCompleted\"\n                        (handle-test-result this res)\n\n                        \"runComplete\"\n                        (handle-end this res)\n\n                        (println \"Unknown messsage: \" res))))\n\n\n(behavior ::elm-test-error\n          :triggers #{:elm.test.error}\n          :desc \"Elm test error\"\n          :reaction (fn [this err]\n                      (let [container (dom/$ :div.result-container (:content @this))]\n                        (dom/empty container)\n                        (dom/append container (testprogress-ui this {}))\n                        (dom/append container (failed-tests-ui [])))\n                      (console/error (:message err))))\n\n\n(object/object* ::dashboard\n                :tags #{:elm.test.dashboard}\n                :name \"Elm Test Dashboard\"\n                :label \"Elm Test Dashboard\"\n                :init (fn [this]\n                        (wrapper)))\n\n\n\n(def dashboard (object/create ::dashboard))\n\n;; (doseq [obj (object/by-tag :elm.test.dashboard)]\n;;       (println \"Destroying\")\n;;       (object/destroy! obj))\n\n\n\n\n(behavior ::elm-test\n          :triggers #{:elm.test}\n          :desc \"Run all Elm tests in your test project\"\n          :reaction (fn [ed]\n                      (let [{:keys [info]} @ed]\n                        ; (notifos/working \"Initiate elm tests...\")\n                        (tabs/add-or-focus! dashboard)\n                        (object/raise dashboard :elm.test.init (:path info))\n\n                        (clients/send (elm-clients/get-eval-client ed :elm.test)\n                           :elm.test\n                           {:file (-> @ed :info :path)}\n                           :only dashboard))))\n\n\n(defn- get-applicable-tests [{:keys [pos path suite-type]}]\n  (let [project-path (util/project-path path)]\n    (case (keyword suite-type)\n      :all\n      (elm-ast/get-project-tests project-path)\n\n      :single\n      (elm-ast/get-test-by-pos pos project-path path)\n\n      :module\n      (elm-ast/get-module-tests project-path path)\n\n      [])))\n\n\n(behavior ::elm-test-suite\n          :triggers #{:elm.test.suite.start}\n          :desc \"Start test suite, now that project is connected\"\n          :reaction (fn [ed msg]\n                      (let [project-path (util/project-path (-> @ed :info :path))\n                            project-tests (get-applicable-tests msg)\n                            suite-name (str \"ElmTempTestSuite\" (rand-int 1000000))]\n\n                        (if (seq project-tests)\n                          (clients/send (elm-clients/get-eval-client ed :elm.test.suite)\n                                        :elm.test.suite\n                                        {:module suite-name\n                                         :suite (create-suite suite-name project-tests)}\n                                        :only dashboard)\n                          (do\n                            (let [container (dom/$ :div.result-container (:content @dashboard))]\n                              (dom/empty container)\n                              (dom/append container (testprogress-ui dashboard {}))\n                              (dom/append container (failed-tests-ui [])))\n                            (notifos/set-msg! \"No tests found for project / given selection\"))))))\n\n\n(defn- ast-pass-through [this ed msg]\n  (clients/send\n    (elm-clients/get-eval-client ed :editor.elm.ast.passthrough)\n    :editor.elm.ast.passthrough\n    msg\n    :only this))\n\n\n(defn- check-elm-version [proj-path]\n  (let [elm-v (util/get-elm-version)]\n    (if-not (util/ver-LTE? \"0.18.0\" elm-v)\n      (do\n        (console/error (str \"Test feature requires elm 0.18.0, but current elm version is: \" elm-v))\n        (notifos/set-msg! (str \"Test feature requires elm 0.18.0, but current elm version is: \" elm-v)\n                          {:class \"error\"})\n        false)\n      (let [[ok? bounds] (util/project-satisfies-version? \"0.18.0\" proj-path)]\n        (if ok?\n          true\n          (do\n            (console/error (str \"Elm test requires elm version 0.18.0 or higher but project has: \" bounds))\n            (notifos/set-msg! (str \"Elm test requires elm version 0.18.0 or higher but project has: \" bounds) {:class \"error\"})\n            false))))))\n\n\n\n\n;(check-elm-version)\n\n(behavior ::elm-test-suite.init\n          :triggers #{:elm.test.suite.init}\n          :desc \"Initialize run of test suite\"\n          :reaction (fn [ed suite-type]\n                      (when-let [proj-path (util/project-path (-> @ed :info :path))]\n                        (when (check-elm-version proj-path)\n                         (let [{:keys [info]} @ed\n                               pos (editor/->cursor ed)]\n                           ; (notifos/working \"Initiate elm tests...\")\n                           (tabs/add-or-focus! dashboard)\n                           (object/raise dashboard :elm.test.init (:path info))\n                           (ast-pass-through ed\n                                             ed\n                                             {:target :elm.test.suite.start\n                                              :data {:pos pos\n                                                     :path (:path info)\n                                                     :suite-type suite-type}}))))))\n\n(behavior ::elm-test-setup\n          :triggers #{:elm.test.setup}\n          :reaction (fn [ed]\n                      (when-let [prj-path (util/project-path (-> @ed :info :path))]\n                        (when (check-elm-version prj-path)\n                          (setup-test prj-path)))))\n\n\n\n(cmd/command {:command :elm.test.suite\n              :desc \"Elm: Test All\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.test.suite.init :all)))})\n\n(cmd/command {:command :elm.test.module\n              :desc \"Elm: Test Module\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.test.suite.init :module)))})\n\n(cmd/command {:command :elm.test.single\n              :desc \"Elm: Test Current\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.test.suite.init :single)))})\n\n\n(cmd/command {:command :elm.test.setup\n              :desc \"Elm: Test Setup\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.test.setup)))})\n"
  },
  {
    "path": "src/lt/plugins/elm_light/usages.cljs",
    "content": "(ns lt.plugins.elm-light.usages\n  (:require [lt.plugins.elm-light.elm-ast :as ast]\n            [lt.plugins.elm-light.utils :as util]\n            [lt.plugins.elm-light.clients :as elm-client]\n            [lt.objs.clients :as clients]\n            [lt.objs.console :as console]\n            [lt.objs.notifos :as notifos]\n            [lt.object :as object]\n            [lt.objs.tabs :as tabs]\n            [lt.objs.editor :as editor]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.files :as files]\n            [lt.util.dom :as dom]\n            [crate.core :as crate]\n            [lt.objs.command :as cmd]\n            [lt.objs.jump-stack :as jumper]\n            [lt.objs.context :as ctx]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [defui behavior]]))\n\n\n(declare elm-usages)\n\n\n(defui wrapper [this]\n  [:div {:class \"search-results elm-usages\"}\n   [:ul.res\n    ]\n   [:div.searcher\n    [:p \"\"]]])\n\n\n(defui loader []\n  [:div.bubblingG\n   [:span {:id \"bubblingG_1\"}]\n   [:span {:id \"bubblingG_2\"}]\n   [:span {:id \"bubblingG_3\"}]])\n\n\n(defn- highlight [line sym]\n  (-> line\n      (s/replace (re-pattern (str \"\\\\b\" sym \"\\\\b\")) (str \"<em>\" sym \"</em>\"))\n      (.substring 0 150)))\n\n\n(defn open-hit [file hit]\n  (cmd/exec! :open-path file)\n  (let [ed (pool/last-active)]\n    (editor/move-cursor ed (:start hit))))\n\n(defui hit-entry [sym file hit]\n  [:p {:class \"entry\"}\n   [:span.line (str (-> hit :start :line) \",\" (-> hit :start :ch))]\n   [:pre (crate/raw\n          (highlight (:line hit) sym))]]\n  :click (fn []\n           (open-hit file hit)))\n\n(defui module-item\n  [sym\n   {:keys [file] :as module}]\n  [:li\n     [:p.path [:span.file (files/basename file)] \"(\" (files/parent file) \")\"]\n     (map #(hit-entry sym file %) (:hits module))])\n\n\n(defui search-results\n  [{:keys [usages-per-module candidate]}]\n  [:ul.res\n   (map #(module-item (:value candidate) %) usages-per-module)])\n\n\n(defn- count-hits [mods]\n  (->> (mapcat :hits mods)\n       count))\n\n(defui candidate-link [candidate]\n  [:span.link\n   (str (:value candidate) \" (\" (:module-name candidate) \")\")]\n  :click (fn []\n           (cmd/exec! :open-path (:file candidate))\n           (let [ed (pool/last-active)]\n             (editor/move-cursor ed (-> candidate :location ast/->range :start)))))\n\n(defui searcher\n  [{:keys [usages-per-module candidate token]}]\n  [:div.searcher\n   [:p (crate/raw\n         (str \"Found \"\n              (count-hits usages-per-module)\n              \" usages for \"))\n    (if candidate\n      (candidate-link candidate)\n      [:span [:strong token]])]\n   [:div.signature\n    (or\n      (-> candidate :annotation :signatureRaw)\n      (-> candidate :signatureRaw)\n      (-> candidate :paramsRaw))]])\n\n(defn show-results [this res]\n  (let [container (object/->content this)\n        results-ul (dom/$ :ul.res container)\n        searcher-ui (dom/$ :div.searcher container)]\n    (dom/replace-with results-ul (search-results res))\n    (dom/replace-with searcher-ui (searcher res))))\n\n\n\n(defn add-or-focus! [obj]\n  (let [next-ts (tabs/next-tabset (ctx/->obj :tabset))\n        prev-ts (tabs/prev-tabset (ctx/->obj :tabset))]\n    (when-not (tabs/in-tab? obj)\n      (cond\n        next-ts\n          (tabs/add! obj next-ts)\n        prev-ts\n          (tabs/add! obj prev-ts)\n\n        :else\n          (let [ts (tabs/spawn-tabset)]\n            (tabs/equalize-tabset-widths)\n            (tabs/add! obj ts))))\n    (tabs/active! obj)))\n\n\n(defn- ast-pass-through [this ed msg]\n  (clients/send\n    (elm-client/get-eval-client ed :editor.elm.ast.passthrough)\n    :editor.elm.ast.passthrough\n    msg\n    :only this))\n\n\n(behavior ::elm.find-usages.complete\n          :triggers #{:elm.find-usages.complete}\n          :reaction (fn [this {:keys [token path project-path]}]\n                      (show-results this\n                                      (ast/find-usages token\n                                                       project-path\n                                                       path))\n                      (notifos/done-working)))\n\n\n(behavior ::elm.find-usages\n          :triggers #{:elm.find-usages}\n          :reaction (fn [this ed token]\n                      (notifos/working (str \"Finding usages for \" token) )\n                      (let [path (-> @ed :info :path)]\n                        (add-or-focus! elm-usages)\n                        (object/raise this :clear!)\n                        (ast-pass-through this\n                                          ed\n                                          {:target :elm.find-usages.complete\n                                           :data {:token token\n                                                  :path path\n                                                  :project-path (util/project-path path)}}))))\n\n\n(behavior ::on-close\n          :triggers #{:close}\n          :reaction (fn [this]\n                      (tabs/rem! this)))\n\n(behavior ::clear!\n          :triggers #{:clear!}\n          :reaction (fn [this]\n                      (dom/empty (dom/$ :ul.res (object/->content this)))\n                      (dom/empty (dom/$ :div.searcher (object/->content this)))\n                      (dom/append (dom/$ :div.searcher (object/->content this))\n                                  (loader))))\n\n\n(object/object* ::elm-usages\n                :tags #{:elm.usages}\n                :label \"Elm usages\"\n                :name \"Elm usages\"\n                :init (fn [this]\n                        (wrapper this)))\n\n(def elm-usages\n  (object/create ::elm-usages))\n\n\n;; (doseq [obj (object/by-tag :elm.usages)]\n;;     (println \"Destroying\")\n;;     (object/destroy! obj))\n\n\n\n\n(cmd/command {:command :elm-find-usages\n              :desc \"Elm: Find usages of symbol at cursor\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (when-let [token (util/find-symbol ed (editor/->cursor ed))]\n                          (object/raise elm-usages :elm.find-usages ed token))))})\n\n\n"
  },
  {
    "path": "src/lt/plugins/elm_light/utils.cljs",
    "content": "(ns lt.plugins.elm-light.utils\n  (:require [lt.objs.files :as files]\n            [lt.objs.editor :as editor]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.plugins :as plugins]\n            [lt.object :as object]\n            [fetch.core :as fetch]\n            [lt.util.dom :as dom]\n            [clojure.string :as s]))\n\n(def elm-plugin-dir (plugins/find-plugin \"elm-light\"))\n(def cp (js/require \"child_process\"))\n(def marked (js/require (files/join elm-plugin-dir \"node_modules\" \"marked\")))\n\n(def pattern #\"^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$\")\n\n\n(defn get-elm-version []\n  (try\n    (s/trim (.toString (.execSync cp \"elm --version\" #js {:stdio \"pipe\"})))\n    (catch :default e\n      (console/error \"elm command not found in path\")\n      nil)))\n\n\n(defn try-parse-int [o]\n  (try\n    (js/parseInt o)\n    (catch :default e o)))\n\n\n(defn parse-version [s]\n  (let [[[_ major minor patch pre-release build]] (re-seq pattern s)]\n    {:major (try-parse-int major)\n     :minor (try-parse-int minor)\n     :patch (try-parse-int patch)\n     :pre-release pre-release\n     :build build}))\n\n\n(defn compare-versions [a b]\n  (let [key-for-ident #(when %\n                         (into [] (map try-parse-int (s/split % #\"\\.\"))))\n        kay           (juxt :major\n                            :minor\n                            :patch\n                            #(nil? (% :pre-release))\n                            #(key-for-ident (:pre-release %))\n                            #(key-for-ident (:build %)))]\n    (compare (kay (parse-version a))\n             (kay (parse-version b)))))\n\n(defn ver-GT? [a b]\n  (pos? (compare-versions a b)))\n\n(defn ver-LT? [a b]\n  (neg? (compare-versions a b)))\n\n(defn ver-EQ? [a b]\n  (zero? (compare-versions a b)))\n\n(defn ver-LTE? [a b]\n  (or\n    (ver-LT? a b)\n    (ver-EQ? a b)))\n\n\n(defn parse-bounds-op [op]\n  (if (= \"<\" op) ver-LT? ver-LTE?))\n\n(defn parse-version-bounds [bounds-str]\n  (let [[lower lower-op _ upper-op upper] (s/split bounds-str \" \")]\n    {:lower lower\n     :lower-op (parse-bounds-op lower-op)\n     :upper upper\n     :upper-op (parse-bounds-op upper-op)}))\n\n(defn satisfies-version [v-str bounds-str]\n  (let [{:keys [lower lower-op upper upper-op]} (parse-version-bounds bounds-str)]\n    (and (lower-op lower v-str)\n         (upper-op v-str upper))))\n\n\n(defn str-contains [s v]\n  (> (.indexOf s v) -1))\n\n\n\n(defn find-symbol [ed pos]\n  (let [curr-tok (editor/->token ed pos)]\n    (case (:type curr-tok)\n      \"def\" (str (find-symbol ed (assoc pos :ch (:start curr-tok))) (:string curr-tok))\n      \"keyword\" (str (find-symbol ed (assoc pos :ch (:start curr-tok))) (:string curr-tok))\n      \"qualifier\" (str (find-symbol ed (assoc pos :ch (:start curr-tok))) (:string curr-tok))\n      \"variable\" (str (find-symbol ed (assoc pos :ch (:start curr-tok))) (:string curr-tok))\n      \"variable-2\" (str (find-symbol ed (assoc pos :ch (:start curr-tok))) (:string curr-tok))\n      \"variable-3\" (str (find-symbol ed (assoc pos :ch (:start curr-tok))) (:string curr-tok))\n      \"builtin\" (str (find-symbol ed (assoc pos :ch (:start curr-tok))) (:string curr-tok))\n      \"\")))\n\n\n\n(defn project-path [path]\n  (if (files/dir? path)\n    path\n    (if-let [pkg-json (files/walk-up-find path \"elm-package.json\")]\n      (files/parent pkg-json)\n      nil ;(files/parent path)\n      )))\n\n(defn reactor-path [path]\n  (let [root (project-path path)]\n    (when (= (.indexOf path root) 0)\n      (subs path (count root)))))\n\n(defn parse-json-file [json-file]\n  (when (files/exists? json-file)\n    (-> (->> (files/open-sync json-file)\n             :content\n             (.parse js/JSON))\n        (js->clj :keywordize-keys true))))\n\n\n(defn pretty-json [data]\n  (.stringify js/JSON (clj->js data) null 4))\n\n(defn nskw->name [kw]\n  (str (namespace kw) \"/\" (name kw)))\n\n\n(defn get-project-deps [project-path]\n  (let [pkg-json (files/join project-path \"elm-package.json\")\n        deps-json (files/join project-path \"elm-stuff\" \"exact-dependencies.json\")]\n\n    (->> (parse-json-file pkg-json)\n         :dependencies\n         (mapv (fn [[k v]]\n                 {:package (nskw->name k) :range v}))\n         (concat (->> (parse-json-file deps-json)\n                      (mapv (fn [[k v]]\n                              {:package (nskw->name k) :exact v}))))\n         (group-by :package)\n         (mapv (fn [[_ vs]] (apply merge vs))))))\n\n(defn valid-project-elm-version [project-path]\n  (let [elm (get-elm-version)\n        json (parse-json-file (files/join project-path \"elm-package.json\"))\n        v-bounds (:elm-version json)]\n\n    (if (and elm json v-bounds)\n      (if (satisfies-version elm v-bounds)\n        [true nil]\n        [false (str \"Invalid elm-version for project: \" v-bounds \", but currently installed elm platform is in version: \" elm)])\n      [false \"Error checking elm version constraint\"])))\n\n(defn project-satisfies-version? [version project-path]\n  (let [json (parse-json-file (files/join project-path \"elm-package.json\"))\n        v-bounds (:elm-version json)]\n\n    (if (and version json v-bounds)\n      (if (satisfies-version version v-bounds)\n        [true nil]\n        [false v-bounds])\n      (do\n        (console/error \"Error checking elm version constraints.\")\n        [false v-bounds]))))\n\n\n;(project-satisfies-version? \"0.19.0\" \"/Users/mrundberget/projects/elm-docker-cloud\")\n\n\n;(valid-project-elm-version \"/Users/mrundberget/projects/elm-docker-cloud\")\n\n\n(defn fetch-all-packages\n  \"Fetch all packages from package.elm-lang.org\"\n  [callback]\n  (fetch/xhr (str \"http://package.elm-lang.org/all-packages?date=\" (.getTime (new js/Date)))\n             {}\n             (fn [data]\n               (let [pkgs (js->clj (.parse js/JSON data) :keywordize-keys true)]\n                 (callback pkgs)))))\n\n\n(defn mod-js->clj\n  \"Recursively transforms JavaScript arrays into ClojureScript\n  vectors, and JavaScript objects into ClojureScript maps.  With\n  option ':keywordize-keys true' will convert object fields from\n  strings to keywords.\"\n  ([x] (mod-js->clj3 x {:keywordize-keys false}))\n  ([x & opts]\n    (cond\n      (satisfies? IEncodeClojure x)\n      (-js->clj x (apply array-map opts))\n      (seq opts)\n      (let [{:keys [keywordize-keys]} opts\n            keyfn (if keywordize-keys keyword str)\n            f (fn thisfn [x]\n                (cond\n                  (seq? x)\n                  (doall (map thisfn x))\n                  (coll? x)\n                  (into (empty x) (map thisfn x))\n                  (array? x)\n                  (persistent!\n                    (reduce #(conj! %1 (thisfn %2))\n                            (transient []) x))\n                  (identical? (type x) js/Object)\n                  (persistent!\n                    (reduce (fn [r k] (assoc! r (keyfn k) (thisfn (aget x k))))\n                            (transient {}) (js-keys x)))\n                  :else x))]\n        (f x)))))\n\n"
  },
  {
    "path": "src/lt/plugins/elm_light/widgets/selector.cljs",
    "content": "(ns lt.plugins.elm-light.widgets.selector\n  \"Drop down select widget positioned absolutely in editor at given line/ch\"\n   (:require [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.editor :as editor]\n            [lt.objs.files :as files]\n            [lt.util.dom :as dom]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [defui behavior]]))\n\n\n(defn remove-form [this]\n  ;;\"Hacky solution to try and address race conflict between keydown and blur\"\n  (when-not (:deleted @this)\n    (object/merge! this {:deleted true})\n    (object/destroy! this)))\n\n(defui select-item [this idx item]\n  [:option {:value idx\n            :selected (= idx 0)} (if (map? item) (:label item) item)])\n\n(defui select-form [this items]\n  [:div.elm-select\n   [:select {:size (count items)}\n    (map-indexed (partial select-item this) items)]])\n\n\n(defn on-keydown [this ed ev]\n  (let [kc (.-keyCode ev)\n        el (.-target ev)]\n    (cond\n     (or (= 13 kc) (= 9 kc)) (do\n                               (dom/stop-propagation ev)\n                               (dom/prevent ev)\n                               (let [idx  (.-value (dom/$ \"option:checked\" el))\n                                     item (nth (vec (:items @this)) idx)\n                                     the-ed (:ed @this)\n                                     beh (:behavior @this)]\n                                 (object/raise the-ed beh item)\n                                 (remove-form this)))\n\n     (= 27 kc) (do\n                 (dom/stop-propagation ev)\n                 (dom/prevent ev)\n                 (remove-form this)\n                 (editor/focus ed)))))\n\n\n(object/object* ::elm-selector\n                :triggers #{:click :clear!}\n                :tags #{:inline :inline.elm.selector}\n                :init (fn [this info]\n                        (when-let [ed (editor/->cm-ed (:ed info))]\n                          (object/merge! this info)\n                          (let [content (select-form this (:items info))]\n                            (dom/on (dom/$ :select content) \"blur\"\n                                    (fn []\n                                      ;(println \"Remove from blur\")\n                                      (remove-form this)))\n\n                            (dom/on content \"keydown\" (partial on-keydown this ed))\n                            (dom/val (dom/$ :option content) 0)\n\n                            (js/CodeMirror.positionHint ed content (:line (:pos info)))\n                            (dom/focus (dom/$ :select content))\n                            content))))\n\n\n\n(defn make\n  \"Create a selector. It expects a map with the following keys\n   :ed - the editor the selector is used by\n   :pos - Where to position the selector\n   :Items - List of items , if item is a map it must have a :label key used for display in the dropdown\n   :behavior - The behavior to be raise when an item is selected. It will pass the item back\"\n  [info]\n  (object/create ::elm-selector info))\n"
  },
  {
    "path": "src/lt/plugins/elm_light.cljs",
    "content": "(ns lt.plugins.elm-light\n  (:require [lt.plugins.elm-light.selection :as elm-sel]\n            [lt.plugins.elm-light.utils :refer [find-symbol project-path reactor-path parse-json-file str-contains]]\n            [lt.plugins.elm-light.clients :refer [try-connect get-eval-client get-eval-client-if-connected elm]]\n            [lt.plugins.elm-light.elm-ast :as elm-ast]\n            [lt.plugins.elm-light.linter :as linter]\n            [lt.plugins.elm-light.gutter :as gutter]\n            [lt.plugins.elm-light.widgets.selector :as selector]\n            [lt.plugins.elm-light.repl]\n            [lt.object :as object]\n            [lt.objs.command :as cmd]\n            [lt.objs.editor.pool :as pool]\n            [lt.objs.editor :as editor]\n            [lt.objs.tabs :as tabs]\n            [lt.objs.notifos :as notifos]\n            [lt.objs.console :as console]\n            [lt.objs.clients :as clients]\n            [lt.objs.popup :as popup]\n            [lt.objs.files :as files]\n            [lt.objs.browser :as browser]\n            [lt.objs.eval :as eval]\n            [lt.objs.sidebar.clients :as scl]\n            [lt.util.js :as js-util]\n            [clojure.string :as s])\n  (:require-macros [lt.macros :refer [behavior]]))\n\n\n\n\n(behavior ::elm-unsupported\n          :triggers #{:elm.unsupported}\n          :reaction (fn [_ res]\n                      (notifos/done-working)\n                      (notifos/set-msg! (:err res) {:class \"error\"})))\n\n\n(defn colorize-msg [msg]\n  (-> msg\n      (s/replace #\"\\[\\d+m\" \"\")\n      (s/replace #\"\\[0m\" \"\")))\n\n\n(defn ->lt-range [{:keys [start end]}]\n  {:from {:ch (dec (:column start)) :line (dec (:line start))}\n   :to   {:ch (dec (:column end)) :line (dec (:line end))}})\n\n\n(defn- maybe-trim [ss]\n  (when ss\n    (s/trim ss)))\n\n(defn- str-contains? [source target]\n  (when (and source target)\n    (< -1 (.indexOf source target))))\n\n(defn- maybe-strip-hint [source]\n  (when source\n    (if (str-contains? source \"Hint:\")\n      (-> (re-find #\"(?m)([\\s\\S]*?(?=Hint:))\" source)\n          first\n          s/trim)\n      source)))\n\n(defn linter-action [ed row]\n  (case (:tag row)\n    \"unused import\" [{:text \"Remove\"\n                      :action (fn [_ {:keys [from to]}]\n                                (editor/replace ed from to \"\")\n                                (js/CodeMirror.commands.deleteLine (editor/->cm-ed ed)))}]\n\n    \"missing type annotation\" [{:text \"Add\"\n                                :action (fn [{:keys [details]} {:keys [from]}]\n                                          (let [ann (-> (re-find #\"(?m)I inferred the type annotation so you can copy it into your code:([\\s\\S]*$)\" details)\n                                                        second\n                                                        s/trim\n                                                        (str \"\\n\"))]\n                                            (editor/replace ed from ann)))}]\n\n    \"NAMING ERROR\" (let [fixes (->> (re-find #\"(?m)Maybe you want one of the following\\?(:?[\\s\\S]*$)\" (:details row))\n                                    second\n                                    (s/split-lines)\n                                    (map s/trim)\n                                    (filter seq))]\n                     (map\n                       (fn [suggestion]\n                         {:text suggestion\n                          :action (fn [_ {:keys [from to]}]\n                                    (editor/replace ed from to suggestion))})\n                       fixes))\n\n    \"TYPE MISMATCH\"  (let [ann (-> (re-find #\"(?m)But I am inferring that the definition has this type:([\\s\\S]*$)\" (:details row))\n                                   second\n                                   maybe-trim\n                                   maybe-strip-hint)]\n                       (if (and ann (not (str-contains? ann \"...\")))\n                         [{:text \"Fix annotation\"\n                           :action (fn [_ {:keys [from to]}]\n                                     (editor/replace ed from to ann))}]\n                         ;; TODO: Could potentially handle typo's in records here too, but need to reliably find what the annotation belogs too (:\n                         []))\n\n\n    []))\n\n\n(defn display-make-results [ed res path]\n  (object/raise ed :clear-linter-results!)\n  (when (seq (filter #(= \"error\" (:type %)) res))\n    (notifos/set-msg! \"Elm make returned errors; check you editor or the console for details\"\n                      {:class \"error\"}))\n\n  (doseq [{:keys [file type overview details region subregion tag] :as row} res]\n    (let [msg (str overview \"\\n\" (colorize-msg details))]\n      (cond\n       (and (= path file)\n            (some #{\"warning\" \"error\"} [type]))\n       (object/raise ed :linter-result! {:title tag\n                                         :details msg\n                                         :category (keyword type)\n                                         :actions (linter-action ed row)\n                                         :code-range (->lt-range (or subregion region))})\n\n       :else (console/verbatim\n              (list [:em.file file] [:em.line \"[Elm error]\"] \": \" [:pre overview]) \"error\")))))\n\n\n\n\n(behavior ::lint\n          :description \"Lint (/make) a given elm file\"\n          :triggers #{:lint}\n          :reaction (fn [ed result-handler-trigger]\n                      (let [info (:info @ed)                            ]\n                        (notifos/working (str \"Starting elm linting of: \" (:path info)))\n                        (clients/send (get-eval-client ed :editor.elm.lint)\n                                      :editor.elm.lint\n                                      (assoc info :project-path (project-path (:path info))\n                                                  :handler (name result-handler-trigger))\n                                      :only ed))))\n\n\n\n\n(behavior ::elm-lint-res\n          :triggers #{:elm.lint.res}\n          :reaction (fn [ed res]\n                      (let [path (-> @ed :info :path)]\n                        (notifos/done-working \"Elm linted\")\n                        (display-make-results ed res path))))\n\n\n\n(behavior ::make\n          :description \"Make (to js) a given elm file\"\n          :triggers #{:elm.make}\n          :reaction (fn [ed]\n                      (let [info (:info @ed)\n                            cl (get-eval-client ed :editor.elm.make)]\n                        (notifos/working (str \"Starting elm make for: \" (:path info)))\n                        (clients/send cl\n                                      :editor.elm.make (assoc info :project-path (project-path (:path info)))\n                                      :only ed))))\n\n\n(defn missing-make-info-popup []\n  (popup/popup! {:header \"You need to configure make info for your project\"\n                 :body (str \"You configure a key \\\"make-info\\\" in your elm-package.json\n                              Example:\n                             \\\"make-info\\\": {\\\"main\\\": \\\"src/Main.elm\\\", \\\"out\\\": \\\"dist/main.js\\\"}\")\n                 :buttons [{:label \"Ok\"}]}))\n\n(behavior ::make-project\n          :description \"Make Elm Project\"\n          :triggers #{:elm.make-project}\n          :reaction (fn [ed]\n                      (let [info (:info @ed)\n                            project-path (project-path (:path info))\n                            {:keys [main out]} (-> project-path\n                                                   (files/join \"elm-package.json\")\n                                                   parse-json-file\n                                                   :make-info)]\n                        (if (and main out)\n                          (do\n                            (notifos/working (str \"Starting elm make for project: \" project-path))\n                            (clients/send (get-eval-client ed :editor.elm.make)\n                                          :editor.elm.make\n                                          (assoc info :project-path project-path\n                                                      :path (files/join project-path main)\n                                                      :outputFile (files/join project-path out))\n                                          :only ed))\n                          (missing-make-info-popup)))))\n\n\n(behavior ::elm-make-res\n          :triggers #{:elm.make.res}\n          :reaction (fn [ed {:keys [outputFile res]}]\n                      (notifos/done-working (str \"Elm make compiled to: \" outputFile))\n                      (display-make-results ed res path)))\n\n\n(behavior ::elm-make-err\n          :triggers #{:elm.make.err}\n          :reaction (fn [ed res]\n                      (let [path (-> @ed :info :path)]\n                        (notifos/done-working \"\")\n                        (notifos/set-msg! (str \"Elm make error: \" res) {:class \"error\"})\n                        (console/error res))))\n\n\n\n;;****************************************************\n;; Eval\n;;****************************************************\n\n\n\n(behavior ::on-eval.one\n          :desc \"Elm repl: Eval current selection\"\n          :triggers #{:eval.one}\n          :reaction (fn [ed]\n                      (let [pos (editor/->cursor ed)\n                            info (conj (:info @ed)\n                                       (if (editor/selection? ed)\n                                         {:code (editor/selection ed) :meta {:start (-> (editor/->cursor ed \"start\") :line)\n                                                                             :end (-> (editor/->cursor ed \"end\") :line)}}\n                                         (if-let [rng (elm-sel/get-top-level-expr ed pos)]\n                                           {:pos pos\n                                            :code (editor/range ed (:from rng) (:to rng))\n                                            :meta {:start (-> rng :from :line)\n                                                    :end (-> rng :end :line)}}\n                                           {:pos pos\n                                            :code (editor/line ed (:line pos))\n                                            :meta {:start (:line pos) :end (:line pos)}})))]\n                        (object/raise elm :eval! {:origin ed :info info}))))\n\n\n\n\n(behavior ::eval-result\n          :desc \"Elm repl: Eval result\"\n          :triggers #{:editor.elm.eval.res}\n          :reaction (fn [ed res]\n                      (notifos/done-working \"Elm evaluated\")\n                      (object/raise ed\n                                    :editor.result\n                                    (:result res)\n                                    {:line (-> res :meta :start)})))\n\n\n(behavior ::eval-err\n          :desc \"Elm repl: Eval error\"\n          :triggers #{:editor.elm.eval.err}\n          :reaction (fn [ed res]\n                      (notifos/done-working)\n                      (notifos/set-msg! \"Elm eval reported errors.\" {:class \"error\"})\n                      (object/raise ed\n                                    :editor.exception\n                                    (:result res)\n                                    {:line (-> res :meta :start)})))\n\n\n\n(behavior ::repl-restart!\n          :triggers #{:elm.repl.restart}\n          :reaction (fn [{:keys [info] :as ed}]\n                      (when-let [default-client (-> @ed :client :default)] ;; dont if not already connected\n                        (when @default-client\n                          (notifos/working \"Restaring elm-repl...\")\n                          (clients/send default-client\n                                        :elm.repl.restart info\n                                        :only ed)))))\n\n(behavior ::repl-restart-res\n          :triggers #{:elm.repl.restart.res}\n          :reaction (fn [ed res]\n                      (notifos/done-working \"Elm Repl restarted\")))\n\n\n\n;TODO : Make debug optional !\n(behavior ::elm-browse!\n          :triggers #{:elm.browse}\n          :reaction (fn [ed debug?]\n                      (let [path (reactor-path (-> @ed :info :path))\n                            client (get-eval-client ed :editor.eval.elm)]\n                        (when (and client path)\n                          (notifos/working \"Opening elm file in browser\")\n                          (let [b (or (first (object/by-tag :browser))\n                                      (browser/add))\n                                get-url #(str \"http://localhost:\" (:reactor-port @client) path (if debug? \"?debug\" \"\"))]\n\n                            (if (:connected @client)\n                              (object/raise b :navigate! (get-url))\n                              (js-util/wait 100 #(object/raise b :navigate! (get-url)))))\n                          (notifos/done-working)))))\n\n\n\n;;****************************************************\n;; DOCS\n;;****************************************************\n\n(behavior ::elm-doc-search\n          :triggers #{:types+}\n          :reaction (fn [this cur]\n                      (conj cur {:label \"elm\" :trigger :docs.elm.search :file-types #{\"elm\"}})))\n\n\n\n\n;;****************************************************\n;; NEW AST Based features\n;;****************************************************\n\n(defn- get-editor-client [ed]\n  (when-let [default-client (-> @ed :client :default)]\n    (when @default-client\n      default-client)))\n\n(defn- location->pos [loc]\n  {:line (-> loc :start :line dec)\n   :ch (-> loc :start :column dec)})\n\n(defn- ast-pass-through [ed msg]\n  (clients/send\n    (get-eval-client ed :editor.elm.ast.passthrough)\n    :editor.elm.ast.passthrough\n    msg\n    :only ed))\n\n(behavior ::elm-reload-ast\n          :triggers #{:elm.reload-ast}\n          :reaction (fn [ed]\n                      (let [project (project-path (-> @ed :info :path))]\n                        (notifos/working (str \"Init reload of ast for project: \" project))\n                        (elm-ast/delete-project-ast! project)\n                        (clients/send\n                          (get-eval-client ed :elm.reload.ast)\n                          :elm.reload.ast\n                          {}\n                          :only ed))))\n\n(behavior ::elm-reload-ast-started\n          :triggers #{:elm.ast.reload.started}\n          :reaction (fn [ed]\n                      (notifos/done-working \"Parsing ast started\")))\n\n\n\n(behavior ::elm-jump-to-definition-start\n          :triggers #{:editor.jump-to-definition-at-cursor!}\n          :reaction (fn [ed]\n                      (notifos/working (str \"Initiate jump to definition\"))\n                      (if-let [default-client (get-editor-client ed)]\n                        (object/raise ed :editor.elm.jump-to-definition {})\n                        (ast-pass-through ed {:target :editor.elm.jump-to-definition\n                                              :data {}}))))\n\n\n\n(behavior ::elm-jump-to-definition\n          :triggers #{:editor.elm.jump-to-definition}\n          :reaction (fn [ed data]\n                      (notifos/done-working \"\")\n                      (let [pos (editor/->cursor ed)\n                            token (find-symbol ed pos)\n                            path (-> @ed :info :path)]\n                        (when token\n                          (when-let [target (elm-ast/get-jump-to-definition token pos path (project-path path))]\n                            (when (:file target)\n                              (object/raise lt.objs.jump-stack/jump-stack\n                                           :jump-stack.push!\n                                           ed\n                                           (:file target)\n                                           (location->pos (:location target)))))))))\n\n\n(behavior ::elm-doc-start\n          :triggers #{:editor.doc}\n          :reaction (fn [ed]\n                      (notifos/working (str \"Initiate show doc\"))\n                      (if-let [default-client (get-editor-client ed)]\n                        (object/raise ed :editor.elm.doc {})\n                        (ast-pass-through ed {:target :editor.elm.doc\n                                              :data {}}))))\n\n\n(behavior ::elm-doc\n          :triggers #{:editor.elm.doc}\n          :reaction (fn [ed]\n                      (let [pos (editor/->cursor ed)\n                            token (find-symbol ed pos)\n                            path (-> @ed :info :path)]\n                        (when token\n                          (notifos/done-working \"\"))\n                        (when-let [target (elm-ast/get-jump-to-definition token\n                                                                          pos\n                                                                          path\n                                                                          (project-path path))]\n                          (object/raise ed\n                                        :editor.elm.doc.show!\n                                        {:name (str (:module-name target)\n                                                    (when (:module-name target) \".\")\n                                                    (:value target)\n                                                    (when-let [pck (:package target)]\n                                                      (str \" (\" (:name pck) \" \" (:version pck) \")\")))\n                                         :args (or\n                                                 (-> target :annotation :signatureRaw)\n                                                 (-> target :signatureRaw)\n                                                 (-> target :paramsRaw))\n\n                                         :doc (when-let [doc (:doc target)]\n                                                (.trim doc))\n                                         :loc pos})))))\n\n\n\n(behavior ::elm-parse-editor-on-change\n          :desc \"Parse a connected elm editor on content change\"\n          :triggers #{:change}\n          :debounce 300\n          :reaction (fn [ed]\n                      (object/raise ed :elm.parse.editor)))\n\n\n(behavior ::elm-parse-editor\n          :desc \"Initiate parsing of the content/elm code of the given editor\"\n          :triggers #{:elm.parse.editor :focus :project-connected }\n          :reaction (fn [ed]\n                      (when (not (str-contains (-> @ed :info :path) \"elm-stuff\"))\n                        (let [client (get-eval-client-if-connected ed :editor.elm.ast.parsetext)\n                             path (-> @ed :info :path)]\n\n                         (when (and client\n                                  (= (pool/last-active) ed)\n                                  (not (str-contains path \"elm-stuff\")))\n\n                           (clients/send client\n                                         :editor.elm.ast.parsetext\n                                         {:code (editor/->val ed)}\n                                         :only ed))))))\n\n(behavior ::elm-editor-disconnected\n          :desc \"Clean up state when project connection for an editor has been disconnected\"\n          :triggers #{:project-disconnected}\n          :reaction (fn [ed]\n                      (do\n                        (object/raise ed :clear-linter-results!)\n                        (object/update! ed [:ast-status] assoc :status nil :error nil)\n                        (elm-ast/update-status-for-editor ed)\n                        (object/raise ed :elm.gutter.exposeds.mark))))\n\n\n(behavior ::elm-parse-editor-result\n          :desc \"Handle parse results for a parsed editors content\"\n          :triggers #{:editor.elm.ast.parsetext.result}\n          :reaction (fn [ed res]\n\n\n                      (if-let [error (:error res)]\n                        (do\n                          (object/update! ed [:ast-status] assoc :status :error :error error)\n                          (object/raise ed :elm.gutter.refresh))\n                        (let [path (-> @ed :info :path)]\n                          (object/update! ed [:ast-status] assoc :status :ok :error nil)\n\n                          ;; Is this really safe to do ?!\n                          (elm-ast/upsert-ast! (-> (get-editor-client ed) deref :dir)\n                                               {:file path\n                                                :ast (:ast res)})\n                          (object/raise ed :elm.gutter.exposeds.mark)))\n\n\n                      (elm-ast/update-status-for-editor ed)))\n\n\n\n;;************ Refactoring behaviors ****************\n(defn- cm-pos->pos [cm-pos]\n  {:ch (.-ch cm-pos)\n   :line (.-line cm-pos)})\n\n\n(defn- safe-move-cursor [ed bm pos]\n  (if-let [bm-pos (.find bm)]\n    (editor/move-cursor ed (cm-pos->pos bm-pos))\n    (editor/move-cursor ed pos)))\n\n\n(behavior ::elm-expose-top-level\n          :desc \"Behavior to expose top level Elm declaration\"\n          :triggers #{:elm.expose.top.level}\n          :reaction (fn [ed]\n                      (let [path (-> @ed :info :path)\n                            prj-path (project-path path)\n                            module (elm-ast/get-module-ast prj-path path)\n                            exposing (-> module :ast :moduleDeclaration :exposing)]\n\n                        (when exposing\n                          (when-let [decl (elm-ast/find-top-level-declaration-by-pos\n                                            (editor/->cursor ed)\n                                            module)]\n                            (when-not (elm-ast/exposed-by-module? module (:value decl))\n                              (let [{:keys [start end]} (elm-ast/->range (:location exposing))\n                                    upd-exp (elm-ast/expose-decl decl exposing)\n                                    pos (editor/->cursor ed)\n                                    bm (editor/bookmark ed pos)]\n                                (editor/replace ed\n                                                start\n                                                end\n                                                (elm-ast/print-exposing upd-exp))\n                                (safe-move-cursor ed bm pos))))))))\n\n\n(behavior ::elm-unexpose-top-level\n          :desc \"Behavior to unexpose top level Elm declaration\"\n          :triggers #{:elm.unexpose.top.level}\n          :reaction (fn [ed]\n                      (let [path (-> @ed :info :path)\n                            prj-path (project-path path)\n                            module (elm-ast/get-module-ast prj-path path)\n                            exposing (-> module :ast :moduleDeclaration :exposing)]\n\n                        (when exposing\n                          (when-let [decl (elm-ast/find-top-level-declaration-by-pos\n                                            (editor/->cursor ed)\n                                            module)]\n                            (when (and (elm-ast/exposed-by-module? module (:value decl))\n                                       (not (elm-ast/exposeAll? exposing)))\n                              (let [{:keys [start end]} (elm-ast/->range (:location exposing))\n                                    upd-exp (elm-ast/unexpose-decl decl exposing)\n                                    pos (editor/->cursor ed)\n                                    bm (editor/bookmark ed pos)]\n                                (editor/replace ed\n                                                start\n                                                end\n                                                (elm-ast/print-exposing upd-exp))\n                                (safe-move-cursor ed bm pos))))))))\n\n\n(behavior ::elm-sort-imports\n          :desc \"Behavior to sort import declarations for given Elm editor\"\n          :triggers #{:elm.sort.imports}\n          :reaction (fn [ed]\n                      (let [path (-> @ed :info :path)\n                            prj-path (project-path path)\n                            module (elm-ast/get-module-ast prj-path path)\n                            imports (-> module :ast :imports :imports)\n                            location (-> module :ast :imports :location)]\n\n                        (when (seq imports)\n                          (let [{:keys [start end]} (elm-ast/->range location)\n                                pos (editor/->cursor ed)\n                                bm (editor/bookmark ed (editor/->cursor ed))]\n                            (editor/replace ed\n                                            start\n                                            end\n                                            (elm-ast/print-imports\n                                              (partial elm-ast/sort-imports-default prj-path)\n                                              imports))\n                            (safe-move-cursor ed bm pos))))))\n\n\n\n(behavior ::elm-autoimport-module-selected\n          :desc \"Behaviour triggered when user selects a module in select for autoimport suggestions\"\n          :triggers #{:elm.autoimport.module.selected}\n          :reaction (fn [ed item]\n                      (let [path (-> @ed :info :path)\n                            prj-path (project-path path)\n                            pos (editor/->cursor ed)\n                            bm (editor/bookmark ed pos)\n                            token (find-symbol ed pos)\n                            aliaz (-> (s/split token #\"\\.\") first)\n                            module (elm-ast/get-module-ast prj-path path)\n                            imports (-> module :ast :imports :imports)\n                            {:keys [start end]} (-> module\n                                                    :ast\n                                                    :imports\n                                                    :location\n                                                    elm-ast/->range)]\n\n                        (let [upd-imports (elm-ast/upsert-imports (:module-name item)\n                                                                  aliaz\n                                                                  imports)]\n                          (editor/replace ed\n                                          start\n                                          end\n                                          (elm-ast/print-imports\n                                            (partial elm-ast/sort-imports-default prj-path)\n                                            upd-imports))\n                          (safe-move-cursor ed bm pos)\n                          (editor/focus ed)))))\n\n\n(behavior ::elm-autoimport-module-init\n          :desc \"Behaviour triggered when user tries to autoimport module for an aliased declaration\"\n          :triggers #{:elm.autoimport.module.init}\n          :reaction (fn [ed]\n                      (let [path (-> @ed :info :path)\n                            pos (editor/->cursor ed)\n                            token (find-symbol ed pos)\n                            token-parts (if token (s/split token #\"\\.\") [])]\n\n                        (when (and (= 2 (count token-parts))\n                                   (re-find #\"[A-Z].*\" (first token-parts)))\n\n                          (let [candidates (->> (elm-ast/get-autoimport-candidates (first token-parts)\n                                                                                   (second token-parts)\n                                                                                   path\n                                                                                   (project-path path))\n                                                (map #(assoc % :label (str (:module-name %)\n                                                                           (when-let [pck (:package %)]\n                                                                             (str \" (\" (:name pck) \")\"))))))]\n\n                            (cond\n                              (= 1 (count candidates))\n                              (object/raise ed\n                                            :elm.autoimport.module.selected\n                                            (first candidates))\n\n                              (< 0 (count candidates))\n                              (selector/make {:ed ed\n                                              :pos pos\n                                              :behavior :elm.autoimport.module.selected\n                                              :items candidates})\n                              :else nil))))))\n\n\n\n\n\n\n\n\n;; Commands\n\n(cmd/command {:command :elm.reload.ast\n              :desc \"Elm: Load/Reload project AST\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.reload-ast)))})\n\n(cmd/command {:command :elm.lint\n              :desc \"Elm: Lint selected file\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :lint :elm.lint.res)))})\n\n(cmd/command {:command :elm.make\n              :desc \"Elm: Make selected file\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.make)))})\n\n(cmd/command {:command :elm.make-project\n              :desc \"Elm: Make current project\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.make-project)))})\n\n\n(cmd/command {:command :elm.browse\n              :desc \"Elm: View current elm file in browser (elm-reactor)\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.browse false)))})\n\n\n(cmd/command {:command :elm.restart-repl\n              :desc \"Elm: Restart repl for current project\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.repl.restart)))})\n\n\n(cmd/command {:command :elm.expose-top-level\n              :desc \"Elm: Expose top level definition\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.expose.top.level)))})\n\n(cmd/command {:command :elm.unexpose-top-level\n              :desc \"Elm: Un-expose top level definition\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.unexpose.top.level)))})\n\n(cmd/command {:command :elm.autoimport.module\n              :desc \"Elm: Autoimport module\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.autoimport.module.init)))})\n\n(cmd/command {:command :elm.sort.imports\n              :desc \"Elm: Sort imports\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (object/raise ed :elm.sort.imports)))})\n\n\n(cmd/command {:command :elm.help\n              :desc \"Elm: Help !\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (let [b (browser/add)]\n                          (object/raise b :navigate! \"https://rundis.gitbooks.io/elm-light-guide/content/\"))))})\n\n\n\n\n(cmd/command {:command :elm.select.top.level\n              :desc \"Elm: Select top level expression from current cursor position\"\n              :exec (fn []\n                      (when-let [ed (pool/last-active)]\n                        (when-let [rng (elm-sel/get-top-level-expr ed (editor/->cursor ed))]\n                          (editor/set-selection ed (:from rng) (:to rng)))))})\n"
  },
  {
    "path": "templates/test/Main.elm",
    "content": "port module Main exposing (..)\n\nimport Tests\nimport Test.Runner.Node exposing (run, TestProgram)\nimport Json.Encode exposing (Value)\n\n\nmain : TestProgram\nmain =\n    run emit Tests.all\n\n\nport emit : ( String, Value ) -> Cmd msg\n"
  },
  {
    "path": "templates/test/Tests.elm",
    "content": "module Tests exposing (..)\n\nimport Test exposing (..)\nimport Expect\nimport Fuzz exposing (list, int, tuple, string)\nimport String\n\nall : Test\nall =\n    describe \"Sample Test Suite\"\n        [ describe \"Unit test examples\"\n            [ test \"Addition\" <|\n                \\() ->\n                    Expect.equal (3 + 7) 10\n            , test \"String.left\" <|\n                \\() ->\n                    Expect.equal \"a\" (String.left 1 \"abcdefg\")\n            , test \"This test should fail - you should remove it\" <|\n                \\() ->\n                    Expect.fail \"Failed as expected!\"\n            ]\n        , describe \"Fuzz test examples, using randomly generated input\"\n            [ fuzz (list int) \"Lists always have positive length\" <|\n                \\aList ->\n                    List.length aList |> Expect.atLeast 0\n            , fuzz (list int) \"Sorting a list does not change its length\" <|\n                \\aList ->\n                    List.sort aList |> List.length |> Expect.equal (List.length aList)\n            , fuzzWith { runs = 1000 } int \"List.member will find an integer in a list containing it\" <|\n                \\i ->\n                    List.member i [ i ] |> Expect.true \"If you see this, List.member returned False!\"\n            , fuzz2 string string \"The length of a string equals the sum of its substrings' lengths\" <|\n                \\s1 s2 ->\n                    s1 ++ s2 |> String.length |> Expect.equal (String.length s1 + String.length s2)\n            ]\n        ]\n"
  }
]