{"version":3,"sources":["../node_modules/browser-pack/_prelude.js","../_stream_0.js","../node_modules/cassowary/bin/c.js"],"names":["_processEqualSpacer","context","stackView","equalSpacerIndex","name","lineIndex","constraints","push","view1","attr1","horizontal","Attribute","WIDTH","HEIGHT","relation","Relation","EQU","view2","attr2","priority","view","multiplier","undefined","constant","CONST","i","prevViews","length","prevView","orientation","Orientation","HORIZONTAL","prevAttr","RIGHT","LEFT","curAttr","VERTICAL","BOTTOM","TOP","ZINDEX","_processProportionalSpacer","proportionalSpacerIndex","_processStackView","subView","viewName","orientations","stack","processedOrientations","type","j","subViews","_getRange","range","match","substring","parseInt","start","res","_processCascade","cascade","parentItem","curViews","item","Array","isArray","hasOwnProperty","items","z","viewRange","r","curView","p","n","attribute","variable","VARIABLE","equalSpacing","err","Error","column","$parserOffset","_getConst","value","vr","c","Variable","this","_solver","addConstraint","StayConstraint","Strength","required","_getSubView","_subViews","SubView","solver","_type","_parentSubView","_getSpacing","constraint","index","_spacingVars","_spacingExpr","addEditVar","minus","suggestValue","_spacing","_addConstraint","call","_getAttr","plus","times","strength","defaultPriorityStrength","Equation","GEQ","Inequality","LEQ","_compareSpacing","old","newz","require","NOTANATTRIBUTE","CENTERX","CENTERY","Priority","REQUIRED","DEFAULTHIGH","DEFAULTLOW","parser","peg$subclass","child","parent","ctor","constructor","prototype","SyntaxError","message","expected","found","offset","line","parse","input","peg$reportedPos","peg$computePosDetails","pos","advance","details","startPos","endPos","ch","charAt","seenCR","peg$cachedPos","peg$cachedPosDetails","peg$fail","peg$currPos","peg$maxFailPos","peg$maxFailExpected","peg$buildException","cleanupExpected","sort","a","b","description","splice","buildMessage","stringEscape","s","hex","charCodeAt","toString","toUpperCase","replace","expectedDesc","foundDesc","expectedDescs","slice","join","posDetails","peg$parsevisualFormatString","s0","s1","s2","s3","s4","s5","s6","s7","peg$parseorientation","peg$FAILED","peg$c2","peg$silentFails","peg$c3","peg$c0","peg$c1","peg$parsesuperview","peg$parseconnection","peg$parseview","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$parseviewName","peg$parsepredicateListWithParens","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$parsepredicateList","peg$c21","peg$c22","peg$c23","peg$c24","peg$parsesimplePredicate","peg$parsenumber","peg$c25","peg$c26","peg$c27","peg$parsepredicate","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$parserelation","peg$parseobjectOfPredicate","peg$c33","peg$c34","peg$parsepriority","peg$c35","substr","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$parseconstant","peg$c45","test","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","extend","dst","arguments","k","peg$result","options","peg$startRuleFunctions","visualFormatString","peg$startRuleFunction","o","superto","views","tosuper","concat","apply","orient","predicates","predicateList","ps","map","digits","f","v","decimals","parseFloat","startRule","parserExt","peg$parsevisualFormatStringExt","peg$parsevisualFormatStringConstraintExpression","peg$parseattributePredicate","peg$parsecomments","peg$c4","peg$parseattribute","peg$parseviewGroup","peg$parseviewNameRange","peg$parsecascadedViews","peg$parseequalSpacingPredicateList","peg$parsepercentage","peg$c58","peg$c59","peg$c60","peg$parseequalSpacingPredicate","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$c66","peg$c67","peg$c68","peg$c69","peg$c70","peg$parseviewPredicate","peg$c71","peg$c72","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$parsemultiplier","peg$parseconstantExpr","peg$c82","peg$c83","peg$c84","peg$c85","peg$c86","peg$c87","peg$c88","peg$c89","peg$c90","peg$c91","peg$c92","peg$c93","peg$c94","peg$c95","peg$c96","peg$c97","peg$c98","peg$c99","peg$c100","peg$c101","peg$c102","peg$c103","peg$c104","peg$c105","peg$c106","peg$c107","peg$c108","peg$c109","peg$c110","peg$c111","peg$c112","peg$c113","peg$c114","peg$c115","peg$c116","peg$c117","peg$c118","peg$c119","peg$c120","peg$c121","peg$c122","peg$c123","peg$c124","peg$c125","peg$c126","peg$parserange","peg$c127","peg$c128","peg$c129","peg$c130","peg$c131","peg$c132","peg$c133","peg$c134","peg$c135","visualFormatStringExt","attributes","comments","attr","cascadedViews","connection","vn","m","d","metaInfoCategories","VisualFormat","visualFormat","extended","indexOf","outFormat","predicate","lineSeparator","parseLine","source","lines","parseOptions","strict","split","trim","prefix","key","metaInfo","category","prefixedCategory","names","viewport","aspectRatio","height","width","widths","isNaN","heights","spacing","JSON","sIdx","len","_classCallCheck","_name","_attr","left","top","stringify","toJSON","process","CASSOWARYJS","divide","_getAttrValue","_intrinsicWidth","resolve","_intrinsicHeight","View","setSpacing","setSize","addConstraints","intrinsicWidth","intrinsicHeight","AutoLayout","module","exports","bind","Object","defineProperty","Function","enumerable","configurable","writable","HTMLElement","tagName","e","g","__super__","h","debug","trace","verbose","traceAdded","GC","inherit","initialize","_t","create","l","__proto__","created","decorate","upgrade","document","createElement","own","getOwnPropertyDescriptor","get","set","getOwnPropertyNames","forEach","traceprint","console","log","fnenterprint","fnexitprint","assert","InternalError","Expression","approx","Math","abs","_inc","parseJSON","load","hashCode","keys","HashTable","size","_store","_keyStrMap","_deleted","clear","_compact","_compactThreshold","_perhapsCompact","_size","delete","each","escapingEach","retval","brk","clone","equals","HashSet","storage","add","values","has","data","fromJSON","_description","extends","ConstraintNotFound","NonExpression","NotEnoughStays","RequiredFailure","TooDifficult","SymbolicWeight","symbolicWeight","isRequired","strong","medium","weak","AbstractVariable","isDummy","isExternal","isPivotable","isRestricted","_init","_prefix","_map","DummyVariable","ObjectiveVariable","SlackVariable","Point","_x","_y","x","y","terms","setVariable","initializeFromHash","multiplyMe","isConstant","addExpression","addVariable","noteRemovedVariable","noteAddedVariable","anyPivotableVariable","substituteOut","changeSubject","newSubject","coefficientFor","Plus","Minus","Times","Divide","AbstractConstraint","weight","isEditConstraint","isInequality","isStayConstraint","expression","EditConstraint","Constraint","_cloneOrNewCle","q","t","EditInfo","editPlus","editMinus","prevEditConstant","Tableau","columns","rows","_infeasibleRows","_externalRows","_externalParametricVars","insertColVar","getInternalInfo","addRow","removeColumn","removeRow","columnsHasKey","SimplexSolver","_stayMinusErrorVars","_stayPlusErrorVars","_errorVars","_markerVars","_objective","_editVarMap","_editVarList","_slackCounter","_artificialCounter","_dummyCounter","autoSolve","_fNeedsSolving","_optimizeCount","_stkCedcns","addLowerBound","addUpperBound","addBounds","newExpression","tryAddingDirectly","addWithArtificialVariable","warn","info","optimize","_setExternalVariables","addConstraintNoException","beginEdit","_resetStayConstants","endEdit","pop","removeEditVarsTo","removeAllEditVars","removeConstraint","addPointStays","addStay","pow","removeConstraintInternal","pivot","reset","resolveArray","resolvePair","dualOptimize","deltaEditConstant","solve","setEditedValue","addVar","getDebugInfo","getConstraintMap","chooseSubject","Number","MAX_VALUE","insertErrorVar","time","timeEnd","onsolved","Timer","isRunning","_elapsedMs","_startReading","Date","stop","elapsedTime","__cassowary_parser","escape","P","u","w","A","C","B","D","E","F","G","H","I","operator","J","K","right","L","M","N","O","Q","R","max","Statement","SourceCharacter","IdentifierStart","WhiteSpace","LineTerminator","LineTerminatorSequence","EOS","EOF","Comment","MultiLineComment","MultiLineCommentNoLineTerminator","SingleLineComment","_","__","Literal","Integer","Real","SignedInteger","Identifier","IdentifierName","PrimaryExpression","UnaryExpression","UnaryOperator","MultiplicativeExpression","MultiplicativeOperator","AdditiveExpression","AdditiveOperator","InequalityExpression","InequalityOperator","LinearExpression","S","T","U","V","toSource","_source","compiled"],"mappings":"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","file":"bundle.js","sourcesContent":["(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})","var c = require('cassowary/bin/c')\n'use strict';\n\n/**\n * Layout attributes.\n * @enum {String}\n */\nvar Attribute = {\n    CONST: 'const',\n    NOTANATTRIBUTE: 'const',\n    VARIABLE: 'var',\n    LEFT: 'left',\n    RIGHT: 'right',\n    TOP: 'top',\n    BOTTOM: 'bottom',\n    WIDTH: 'width',\n    HEIGHT: 'height',\n    CENTERX: 'centerX',\n    CENTERY: 'centerY',\n    /*LEADING: 'leading',\n    TRAILING: 'trailing'*/\n    /** Used by the extended VFL syntax. */\n    ZINDEX: 'zIndex'\n};\n\n/**\n * Relation types.\n * @enum {String}\n */\nvar Relation = {\n    /** Less than or equal */\n    LEQ: 'leq',\n    /** Equal */\n    EQU: 'equ',\n    /** Greater than or equal */\n    GEQ: 'geq'\n};\n\n/**\n * Layout priorities.\n * @enum {String}\n */\nvar Priority = {\n    REQUIRED: 1000,\n    DEFAULTHIGH: 750,\n    DEFAULTLOW: 250\n    //FITTINGSIZELEVEL: 50,\n};\n\nvar parser = (function() {\n  /*\n   * Generated by PEG.js 0.8.0.\n   *\n   * http://pegjs.majda.cz/\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 SyntaxError(message, expected, found, offset, line, column) {\n    this.message  = message;\n    this.expected = expected;\n    this.found    = found;\n    this.offset   = offset;\n    this.line     = line;\n    this.column   = column;\n\n    this.name     = \"SyntaxError\";\n  }\n\n  peg$subclass(SyntaxError, Error);\n\n  function parse(input) {\n    var options = arguments.length > 1 ? arguments[1] : {},\n\n        peg$FAILED = {},\n\n        peg$startRuleFunctions = { visualFormatString: peg$parsevisualFormatString },\n        peg$startRuleFunction  = peg$parsevisualFormatString,\n\n        peg$c0 = peg$FAILED,\n        peg$c1 = null,\n        peg$c2 = \":\",\n        peg$c3 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n        peg$c4 = [],\n        peg$c5 = function(o, superto, view, views, tosuper) { return {\n              orientation: o ? o[0] : 'horizontal',\n              cascade: (superto || []).concat(\n                [view],\n                [].concat.apply([], views),\n                (tosuper || [])\n              )\n            }\n          },\n        peg$c6 = \"H\",\n        peg$c7 = { type: \"literal\", value: \"H\", description: \"\\\"H\\\"\" },\n        peg$c8 = \"V\",\n        peg$c9 = { type: \"literal\", value: \"V\", description: \"\\\"V\\\"\" },\n        peg$c10 = function(orient) { return orient == 'H' ? 'horizontal' : 'vertical' },\n        peg$c11 = \"|\",\n        peg$c12 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n        peg$c13 = function() { return { view: null } },\n        peg$c14 = \"[\",\n        peg$c15 = { type: \"literal\", value: \"[\", description: \"\\\"[\\\"\" },\n        peg$c16 = \"]\",\n        peg$c17 = { type: \"literal\", value: \"]\", description: \"\\\"]\\\"\" },\n        peg$c18 = function(view, predicates) { return extend(view, predicates ? { constraints: predicates } : {}) },\n        peg$c19 = \"-\",\n        peg$c20 = { type: \"literal\", value: \"-\", description: \"\\\"-\\\"\" },\n        peg$c21 = function(predicateList) { return predicateList },\n        peg$c22 = function() { return [{ relation: 'equ', constant: 'default', $parserOffset: offset() }] },\n        peg$c23 = \"\",\n        peg$c24 = function() { return [{ relation: 'equ', constant: 0, $parserOffset: offset() }] },\n        peg$c25 = function(n) { return [{ relation: 'equ', constant: n, $parserOffset: offset() }] },\n        peg$c26 = \"(\",\n        peg$c27 = { type: \"literal\", value: \"(\", description: \"\\\"(\\\"\" },\n        peg$c28 = \",\",\n        peg$c29 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n        peg$c30 = \")\",\n        peg$c31 = { type: \"literal\", value: \")\", description: \"\\\")\\\"\" },\n        peg$c32 = function(p, ps) { return [p].concat(ps.map(function(p){ return p[1] })) },\n        peg$c33 = \"@\",\n        peg$c34 = { type: \"literal\", value: \"@\", description: \"\\\"@\\\"\" },\n        peg$c35 = function(r, o, p) { return extend({ relation: 'equ' }, (r || {}), o, (p ? p[1]: {})) },\n        peg$c36 = \"==\",\n        peg$c37 = { type: \"literal\", value: \"==\", description: \"\\\"==\\\"\" },\n        peg$c38 = function() { return { relation: 'equ', $parserOffset: offset() } },\n        peg$c39 = \"<=\",\n        peg$c40 = { type: \"literal\", value: \"<=\", description: \"\\\"<=\\\"\" },\n        peg$c41 = function() { return { relation: 'leq', $parserOffset: offset() } },\n        peg$c42 = \">=\",\n        peg$c43 = { type: \"literal\", value: \">=\", description: \"\\\">=\\\"\" },\n        peg$c44 = function() { return { relation: 'geq', $parserOffset: offset() } },\n        peg$c45 = /^[0-9]/,\n        peg$c46 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n        peg$c47 = function(digits) { return { priority: parseInt(digits.join(\"\"), 10) } },\n        peg$c48 = function(n) { return { constant: n } },\n        peg$c49 = /^[a-zA-Z_]/,\n        peg$c50 = { type: \"class\", value: \"[a-zA-Z_]\", description: \"[a-zA-Z_]\" },\n        peg$c51 = /^[a-zA-Z0-9_]/,\n        peg$c52 = { type: \"class\", value: \"[a-zA-Z0-9_]\", description: \"[a-zA-Z0-9_]\" },\n        peg$c53 = function(f, v) { return { view: f + v } },\n        peg$c54 = \".\",\n        peg$c55 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n        peg$c56 = function(digits, decimals) { return parseFloat(digits.concat(\".\").concat(decimals).join(\"\"), 10); },\n        peg$c57 = function(digits) { return parseInt(digits.join(\"\"), 10); },\n\n        peg$currPos          = 0,\n        peg$reportedPos      = 0,\n        peg$cachedPos        = 0,\n        peg$cachedPosDetails = { 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$reportedPos, peg$currPos);\n    }\n\n    function offset() {\n      return peg$reportedPos;\n    }\n\n    function line() {\n      return peg$computePosDetails(peg$reportedPos).line;\n    }\n\n    function column() {\n      return peg$computePosDetails(peg$reportedPos).column;\n    }\n\n    function expected(description) {\n      throw peg$buildException(\n        null,\n        [{ type: \"other\", description: description }],\n        peg$reportedPos\n      );\n    }\n\n    function error(message) {\n      throw peg$buildException(message, null, peg$reportedPos);\n    }\n\n    function peg$computePosDetails(pos) {\n      function advance(details, startPos, endPos) {\n        var p, ch;\n\n        for (p = startPos; p < endPos; p++) {\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      }\n\n      if (peg$cachedPos !== pos) {\n        if (peg$cachedPos > pos) {\n          peg$cachedPos = 0;\n          peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n        }\n        advance(peg$cachedPosDetails, peg$cachedPos, pos);\n        peg$cachedPos = pos;\n      }\n\n      return peg$cachedPosDetails;\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, pos) {\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(/[\\u0180-\\u0FFF]/g,         function(ch) { return '\\\\u0' + hex(ch); })\n            .replace(/[\\u1080-\\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      var posDetails = peg$computePosDetails(pos),\n          found      = pos < input.length ? input.charAt(pos) : null;\n\n      if (expected !== null) {\n        cleanupExpected(expected);\n      }\n\n      return new SyntaxError(\n        message !== null ? message : buildMessage(expected, found),\n        expected,\n        found,\n        pos,\n        posDetails.line,\n        posDetails.column\n      );\n    }\n\n    function peg$parsevisualFormatString() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = peg$parseorientation();\n      if (s2 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 58) {\n          s3 = peg$c2;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c3); }\n        }\n        if (s3 !== peg$FAILED) {\n          s2 = [s2, s3];\n          s1 = s2;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$c0;\n        }\n      } else {\n        peg$currPos = s1;\n        s1 = peg$c0;\n      }\n      if (s1 === peg$FAILED) {\n        s1 = peg$c1;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = peg$parsesuperview();\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parseconnection();\n          if (s4 !== peg$FAILED) {\n            s3 = [s3, s4];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$c0;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$c0;\n        }\n        if (s2 === peg$FAILED) {\n          s2 = peg$c1;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseview();\n          if (s3 !== peg$FAILED) {\n            s4 = [];\n            s5 = peg$currPos;\n            s6 = peg$parseconnection();\n            if (s6 !== peg$FAILED) {\n              s7 = peg$parseview();\n              if (s7 !== peg$FAILED) {\n                s6 = [s6, s7];\n                s5 = s6;\n              } else {\n                peg$currPos = s5;\n                s5 = peg$c0;\n              }\n            } else {\n              peg$currPos = s5;\n              s5 = peg$c0;\n            }\n            while (s5 !== peg$FAILED) {\n              s4.push(s5);\n              s5 = peg$currPos;\n              s6 = peg$parseconnection();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parseview();\n                if (s7 !== peg$FAILED) {\n                  s6 = [s6, s7];\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$c0;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$c0;\n              }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$currPos;\n              s6 = peg$parseconnection();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parsesuperview();\n                if (s7 !== peg$FAILED) {\n                  s6 = [s6, s7];\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$c0;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$c0;\n              }\n              if (s5 === peg$FAILED) {\n                s5 = peg$c1;\n              }\n              if (s5 !== peg$FAILED) {\n                peg$reportedPos = s0;\n                s1 = peg$c5(s1, s2, s3, s4, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c0;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseorientation() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 72) {\n        s1 = peg$c6;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c7); }\n      }\n      if (s1 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 86) {\n          s1 = peg$c8;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c9); }\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c10(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsesuperview() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 124) {\n        s1 = peg$c11;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c12); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c13();\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseview() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 91) {\n        s1 = peg$c14;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c15); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseviewName();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsepredicateListWithParens();\n          if (s3 === peg$FAILED) {\n            s3 = peg$c1;\n          }\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 93) {\n              s4 = peg$c16;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c17); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c18(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseconnection() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 45) {\n        s1 = peg$c19;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c20); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parsepredicateList();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 45) {\n            s3 = peg$c19;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c21(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 45) {\n          s1 = peg$c19;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c20); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c22();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$c23;\n          if (s1 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c24();\n          }\n          s0 = s1;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsepredicateList() {\n      var s0;\n\n      s0 = peg$parsesimplePredicate();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsepredicateListWithParens();\n      }\n\n      return s0;\n    }\n\n    function peg$parsesimplePredicate() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parsenumber();\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c25(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsepredicateListWithParens() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c26;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c27); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parsepredicate();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s5 = peg$c28;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c29); }\n          }\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parsepredicate();\n            if (s6 !== peg$FAILED) {\n              s5 = [s5, s6];\n              s4 = s5;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$c0;\n            }\n          } else {\n            peg$currPos = s4;\n            s4 = peg$c0;\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 44) {\n              s5 = peg$c28;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c29); }\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parsepredicate();\n              if (s6 !== peg$FAILED) {\n                s5 = [s5, s6];\n                s4 = s5;\n              } else {\n                peg$currPos = s4;\n                s4 = peg$c0;\n              }\n            } else {\n              peg$currPos = s4;\n              s4 = peg$c0;\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 41) {\n              s4 = peg$c30;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c31); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c32(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepredicate() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = peg$parserelation();\n      if (s1 === peg$FAILED) {\n        s1 = peg$c1;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseobjectOfPredicate();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 64) {\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            s5 = peg$parsepriority();\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$c0;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$c0;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = peg$c1;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c35(s1, s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parserelation() {\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$reportedPos = s0;\n        s1 = peg$c38();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c39) {\n          s1 = peg$c39;\n          peg$currPos += 2;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c40); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c41();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c42) {\n            s1 = peg$c42;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c43); }\n          }\n          if (s1 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c44();\n          }\n          s0 = s1;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseobjectOfPredicate() {\n      var s0;\n\n      s0 = peg$parseconstant();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseviewName();\n      }\n\n      return s0;\n    }\n\n    function peg$parsepriority() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = [];\n      if (peg$c45.test(input.charAt(peg$currPos))) {\n        s2 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c46); }\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          if (peg$c45.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c46); }\n          }\n        }\n      } else {\n        s1 = peg$c0;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c47(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseconstant() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parsenumber();\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c48(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseviewName() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = [];\n      if (peg$c49.test(input.charAt(peg$currPos))) {\n        s3 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c50); }\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          if (peg$c49.test(input.charAt(peg$currPos))) {\n            s3 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c50); }\n          }\n        }\n      } else {\n        s2 = peg$c0;\n      }\n      if (s2 !== peg$FAILED) {\n        s2 = input.substring(s1, peg$currPos);\n      }\n      s1 = s2;\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = [];\n        if (peg$c51.test(input.charAt(peg$currPos))) {\n          s4 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c52); }\n        }\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          if (peg$c51.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c52); }\n          }\n        }\n        if (s3 !== peg$FAILED) {\n          s3 = input.substring(s2, peg$currPos);\n        }\n        s2 = s3;\n        if (s2 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c53(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parsenumber() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = [];\n      if (peg$c45.test(input.charAt(peg$currPos))) {\n        s2 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c46); }\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          if (peg$c45.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c46); }\n          }\n        }\n      } else {\n        s1 = peg$c0;\n      }\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s2 = peg$c54;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c55); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          if (peg$c45.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c46); }\n          }\n          if (s4 !== peg$FAILED) {\n            while (s4 !== peg$FAILED) {\n              s3.push(s4);\n              if (peg$c45.test(input.charAt(peg$currPos))) {\n                s4 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c46); }\n              }\n            }\n          } else {\n            s3 = peg$c0;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c56(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = [];\n        if (peg$c45.test(input.charAt(peg$currPos))) {\n          s2 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c46); }\n        }\n        if (s2 !== peg$FAILED) {\n          while (s2 !== peg$FAILED) {\n            s1.push(s2);\n            if (peg$c45.test(input.charAt(peg$currPos))) {\n              s2 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c46); }\n            }\n          }\n        } else {\n          s1 = peg$c0;\n        }\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c57(s1);\n        }\n        s0 = s1;\n      }\n\n      return s0;\n    }\n\n\n      function extend(dst) {\n        for (var i = 1; i < arguments.length; i++) {\n          for (var k in arguments[i]) {\n            dst[k] = arguments[i][k];\n          }\n        }\n        return dst;\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(null, peg$maxFailExpected, peg$maxFailPos);\n    }\n  }\n\n  return {\n    SyntaxError: SyntaxError,\n    parse:       parse\n  };\n})();\n\nvar parserExt = (function() {\n  /*\n   * Generated by PEG.js 0.8.0.\n   *\n   * http://pegjs.majda.cz/\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 SyntaxError(message, expected, found, offset, line, column) {\n    this.message  = message;\n    this.expected = expected;\n    this.found    = found;\n    this.offset   = offset;\n    this.line     = line;\n    this.column   = column;\n\n    this.name     = \"SyntaxError\";\n  }\n\n  peg$subclass(SyntaxError, Error);\n\n  function parse(input) {\n    var options = arguments.length > 1 ? arguments[1] : {},\n\n        peg$FAILED = {},\n\n        peg$startRuleFunctions = { visualFormatStringExt: peg$parsevisualFormatStringExt },\n        peg$startRuleFunction  = peg$parsevisualFormatStringExt,\n\n        peg$c0 = peg$FAILED,\n        peg$c1 = \"C:\",\n        peg$c2 = { type: \"literal\", value: \"C:\", description: \"\\\"C:\\\"\" },\n        peg$c3 = [],\n        peg$c4 = null,\n        peg$c5 = function(view, attribute, attributes, comments) { return {\n              type: 'attribute',\n              view: view.view,\n              attributes: [attribute].concat(attributes)\n            }\n          },\n        peg$c6 = function(attr, predicates) { return { attr: attr, predicates:predicates } },\n        peg$c7 = \":\",\n        peg$c8 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n        peg$c9 = function(o, superto, view, views, tosuper, comments) { return {\n              type: 'vfl',\n              orientation: o ? o[0] : 'horizontal',\n              cascade: (superto || []).concat(\n                view,\n                [].concat.apply([], views),\n                (tosuper || [])\n              )\n            }\n          },\n        peg$c10 = \"HV\",\n        peg$c11 = { type: \"literal\", value: \"HV\", description: \"\\\"HV\\\"\" },\n        peg$c12 = function() { return 'horzvert' },\n        peg$c13 = \"H\",\n        peg$c14 = { type: \"literal\", value: \"H\", description: \"\\\"H\\\"\" },\n        peg$c15 = function() { return 'horizontal' },\n        peg$c16 = \"V\",\n        peg$c17 = { type: \"literal\", value: \"V\", description: \"\\\"V\\\"\" },\n        peg$c18 = function() { return 'vertical' },\n        peg$c19 = \"Z\",\n        peg$c20 = { type: \"literal\", value: \"Z\", description: \"\\\"Z\\\"\" },\n        peg$c21 = function() { return 'zIndex' },\n        peg$c22 = \" \",\n        peg$c23 = { type: \"literal\", value: \" \", description: \"\\\" \\\"\" },\n        peg$c24 = \"//\",\n        peg$c25 = { type: \"literal\", value: \"//\", description: \"\\\"//\\\"\" },\n        peg$c26 = { type: \"any\", description: \"any character\" },\n        peg$c27 = \"|\",\n        peg$c28 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n        peg$c29 = function() { return { view: null } },\n        peg$c30 = \"[\",\n        peg$c31 = { type: \"literal\", value: \"[\", description: \"\\\"[\\\"\" },\n        peg$c32 = \",\",\n        peg$c33 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n        peg$c34 = \"]\",\n        peg$c35 = { type: \"literal\", value: \"]\", description: \"\\\"]\\\"\" },\n        peg$c36 = function(view, views) { return views.length ? [view].concat([].concat.apply([], views)) : view },\n        peg$c37 = function(view, predicates, cascadedViews) { return extend(extend(view, predicates ? { constraints: predicates } : {}), cascadedViews ? {\n            cascade: cascadedViews\n          } : {}) },\n        peg$c38 = function(views, connection) { return [].concat([].concat.apply([], views),[connection]); },\n        peg$c39 = \"->\",\n        peg$c40 = { type: \"literal\", value: \"->\", description: \"\\\"->\\\"\" },\n        peg$c41 = function() { return [{ relation: 'none' }] },\n        peg$c42 = \"-\",\n        peg$c43 = { type: \"literal\", value: \"-\", description: \"\\\"-\\\"\" },\n        peg$c44 = function(predicateList) { return predicateList },\n        peg$c45 = function() { return [{ relation: 'equ', constant: 'default' }] },\n        peg$c46 = \"~\",\n        peg$c47 = { type: \"literal\", value: \"~\", description: \"\\\"~\\\"\" },\n        peg$c48 = function() { return [{ relation: 'equ', equalSpacing: true }] },\n        peg$c49 = \"\",\n        peg$c50 = function() { return [{ relation: 'equ', constant: 0 }] },\n        peg$c51 = function(p) { return [{ relation: 'equ', multiplier: p.multiplier }] },\n        peg$c52 = function(n) { return [{ relation: 'equ', constant: n }] },\n        peg$c53 = \"(\",\n        peg$c54 = { type: \"literal\", value: \"(\", description: \"\\\"(\\\"\" },\n        peg$c55 = \")\",\n        peg$c56 = { type: \"literal\", value: \")\", description: \"\\\")\\\"\" },\n        peg$c57 = function(p, ps) { return [p].concat(ps.map(function(p){ return p[1] })) },\n        peg$c58 = \"@\",\n        peg$c59 = { type: \"literal\", value: \"@\", description: \"\\\"@\\\"\" },\n        peg$c60 = function(r, o, p) { return extend({ relation: 'equ' }, (r || {}), o, (p ? p[1]: {})) },\n        peg$c61 = function(r, o, p) { return extend({ relation: 'equ', equalSpacing: true }, (r || {}), o, (p ? p[1]: {})) },\n        peg$c62 = \"==\",\n        peg$c63 = { type: \"literal\", value: \"==\", description: \"\\\"==\\\"\" },\n        peg$c64 = function() { return { relation: 'equ' } },\n        peg$c65 = \"<=\",\n        peg$c66 = { type: \"literal\", value: \"<=\", description: \"\\\"<=\\\"\" },\n        peg$c67 = function() { return { relation: 'leq' } },\n        peg$c68 = \">=\",\n        peg$c69 = { type: \"literal\", value: \">=\", description: \"\\\">=\\\"\" },\n        peg$c70 = function() { return { relation: 'geq' } },\n        peg$c71 = /^[0-9]/,\n        peg$c72 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n        peg$c73 = function(digits) { return { priority: parseInt(digits.join(\"\"), 10) } },\n        peg$c74 = function(n) { return { constant: n } },\n        peg$c75 = function(n) { return { constant: -n } },\n        peg$c76 = \"+\",\n        peg$c77 = { type: \"literal\", value: \"+\", description: \"\\\"+\\\"\" },\n        peg$c78 = \"%\",\n        peg$c79 = { type: \"literal\", value: \"%\", description: \"\\\"%\\\"\" },\n        peg$c80 = function(n) { return { view: null, multiplier: n / 100 } },\n        peg$c81 = function(n) { return { view: null, multiplier: n / -100 } },\n        peg$c82 = function(vn, a, m, c) { return { view: vn.view, attribute: a ? a : undefined, multiplier: m ? m : 1, constant: c ? c : undefined } },\n        peg$c83 = \".left\",\n        peg$c84 = { type: \"literal\", value: \".left\", description: \"\\\".left\\\"\" },\n        peg$c85 = function() { return 'left'},\n        peg$c86 = \".right\",\n        peg$c87 = { type: \"literal\", value: \".right\", description: \"\\\".right\\\"\" },\n        peg$c88 = function() { return 'right'},\n        peg$c89 = \".top\",\n        peg$c90 = { type: \"literal\", value: \".top\", description: \"\\\".top\\\"\" },\n        peg$c91 = function() { return 'top'},\n        peg$c92 = \".bottom\",\n        peg$c93 = { type: \"literal\", value: \".bottom\", description: \"\\\".bottom\\\"\" },\n        peg$c94 = function() { return 'bottom'},\n        peg$c95 = \".width\",\n        peg$c96 = { type: \"literal\", value: \".width\", description: \"\\\".width\\\"\" },\n        peg$c97 = function() { return 'width'},\n        peg$c98 = \".height\",\n        peg$c99 = { type: \"literal\", value: \".height\", description: \"\\\".height\\\"\" },\n        peg$c100 = function() { return 'height'},\n        peg$c101 = \".centerX\",\n        peg$c102 = { type: \"literal\", value: \".centerX\", description: \"\\\".centerX\\\"\" },\n        peg$c103 = function() { return 'centerX'},\n        peg$c104 = \".centerY\",\n        peg$c105 = { type: \"literal\", value: \".centerY\", description: \"\\\".centerY\\\"\" },\n        peg$c106 = function() { return 'centerY'},\n        peg$c107 = \"/\",\n        peg$c108 = { type: \"literal\", value: \"/\", description: \"\\\"/\\\"\" },\n        peg$c109 = function(n) { return 1 / n; },\n        peg$c110 = \"/+\",\n        peg$c111 = { type: \"literal\", value: \"/+\", description: \"\\\"/+\\\"\" },\n        peg$c112 = \"/-\",\n        peg$c113 = { type: \"literal\", value: \"/-\", description: \"\\\"/-\\\"\" },\n        peg$c114 = function(n) { return -1 / n; },\n        peg$c115 = \"*\",\n        peg$c116 = { type: \"literal\", value: \"*\", description: \"\\\"*\\\"\" },\n        peg$c117 = function(n) { return n; },\n        peg$c118 = \"*+\",\n        peg$c119 = { type: \"literal\", value: \"*+\", description: \"\\\"*+\\\"\" },\n        peg$c120 = \"*-\",\n        peg$c121 = { type: \"literal\", value: \"*-\", description: \"\\\"*-\\\"\" },\n        peg$c122 = function(n) { return -n; },\n        peg$c123 = /^[a-zA-Z_]/,\n        peg$c124 = { type: \"class\", value: \"[a-zA-Z_]\", description: \"[a-zA-Z_]\" },\n        peg$c125 = /^[a-zA-Z0-9_]/,\n        peg$c126 = { type: \"class\", value: \"[a-zA-Z0-9_]\", description: \"[a-zA-Z0-9_]\" },\n        peg$c127 = function(f, v, r) { return { view: f + v, range: r, $parserOffset: offset() } },\n        peg$c128 = function(f, v) { return { view: f + v, $parserOffset: offset() } },\n        peg$c129 = \"..\",\n        peg$c130 = { type: \"literal\", value: \"..\", description: \"\\\"..\\\"\" },\n        peg$c131 = function(d) { return parseInt(d) },\n        peg$c132 = \".\",\n        peg$c133 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n        peg$c134 = function(digits, decimals) { return parseFloat(digits.concat(\".\").concat(decimals).join(\"\"), 10); },\n        peg$c135 = function(digits) { return parseInt(digits.join(\"\"), 10); },\n\n        peg$currPos          = 0,\n        peg$reportedPos      = 0,\n        peg$cachedPos        = 0,\n        peg$cachedPosDetails = { 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$reportedPos, peg$currPos);\n    }\n\n    function offset() {\n      return peg$reportedPos;\n    }\n\n    function line() {\n      return peg$computePosDetails(peg$reportedPos).line;\n    }\n\n    function column() {\n      return peg$computePosDetails(peg$reportedPos).column;\n    }\n\n    function expected(description) {\n      throw peg$buildException(\n        null,\n        [{ type: \"other\", description: description }],\n        peg$reportedPos\n      );\n    }\n\n    function error(message) {\n      throw peg$buildException(message, null, peg$reportedPos);\n    }\n\n    function peg$computePosDetails(pos) {\n      function advance(details, startPos, endPos) {\n        var p, ch;\n\n        for (p = startPos; p < endPos; p++) {\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      }\n\n      if (peg$cachedPos !== pos) {\n        if (peg$cachedPos > pos) {\n          peg$cachedPos = 0;\n          peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n        }\n        advance(peg$cachedPosDetails, peg$cachedPos, pos);\n        peg$cachedPos = pos;\n      }\n\n      return peg$cachedPosDetails;\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, pos) {\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(/[\\u0180-\\u0FFF]/g,         function(ch) { return '\\\\u0' + hex(ch); })\n            .replace(/[\\u1080-\\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      var posDetails = peg$computePosDetails(pos),\n          found      = pos < input.length ? input.charAt(pos) : null;\n\n      if (expected !== null) {\n        cleanupExpected(expected);\n      }\n\n      return new SyntaxError(\n        message !== null ? message : buildMessage(expected, found),\n        expected,\n        found,\n        pos,\n        posDetails.line,\n        posDetails.column\n      );\n    }\n\n    function peg$parsevisualFormatStringExt() {\n      var s0;\n\n      s0 = peg$parsevisualFormatString();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsevisualFormatStringConstraintExpression();\n      }\n\n      return s0;\n    }\n\n    function peg$parsevisualFormatStringConstraintExpression() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c1) {\n        s1 = peg$c1;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c2); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseviewName();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseattributePredicate();\n          if (s3 !== peg$FAILED) {\n            s4 = [];\n            s5 = peg$parseattributePredicate();\n            while (s5 !== peg$FAILED) {\n              s4.push(s5);\n              s5 = peg$parseattributePredicate();\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parsecomments();\n              if (s5 === peg$FAILED) {\n                s5 = peg$c4;\n              }\n              if (s5 !== peg$FAILED) {\n                peg$reportedPos = s0;\n                s1 = peg$c5(s2, s3, s4, s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c0;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseattributePredicate() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = peg$parseattribute();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parsepredicateListWithParens();\n        if (s2 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c6(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parsevisualFormatString() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = peg$parseorientation();\n      if (s2 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 58) {\n          s3 = peg$c7;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c8); }\n        }\n        if (s3 !== peg$FAILED) {\n          s2 = [s2, s3];\n          s1 = s2;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$c0;\n        }\n      } else {\n        peg$currPos = s1;\n        s1 = peg$c0;\n      }\n      if (s1 === peg$FAILED) {\n        s1 = peg$c4;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = peg$parsesuperview();\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parseconnection();\n          if (s4 !== peg$FAILED) {\n            s3 = [s3, s4];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$c0;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$c0;\n        }\n        if (s2 === peg$FAILED) {\n          s2 = peg$c4;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseviewGroup();\n          if (s3 !== peg$FAILED) {\n            s4 = [];\n            s5 = peg$currPos;\n            s6 = peg$parseconnection();\n            if (s6 !== peg$FAILED) {\n              s7 = peg$parseviewGroup();\n              if (s7 !== peg$FAILED) {\n                s6 = [s6, s7];\n                s5 = s6;\n              } else {\n                peg$currPos = s5;\n                s5 = peg$c0;\n              }\n            } else {\n              peg$currPos = s5;\n              s5 = peg$c0;\n            }\n            while (s5 !== peg$FAILED) {\n              s4.push(s5);\n              s5 = peg$currPos;\n              s6 = peg$parseconnection();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parseviewGroup();\n                if (s7 !== peg$FAILED) {\n                  s6 = [s6, s7];\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$c0;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$c0;\n              }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$currPos;\n              s6 = peg$parseconnection();\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parsesuperview();\n                if (s7 !== peg$FAILED) {\n                  s6 = [s6, s7];\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$c0;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$c0;\n              }\n              if (s5 === peg$FAILED) {\n                s5 = peg$c4;\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parsecomments();\n                if (s6 === peg$FAILED) {\n                  s6 = peg$c4;\n                }\n                if (s6 !== peg$FAILED) {\n                  peg$reportedPos = s0;\n                  s1 = peg$c9(s1, s2, s3, s4, s5, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$c0;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c0;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseorientation() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c10) {\n        s1 = peg$c10;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c11); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c12();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 72) {\n          s1 = peg$c13;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c14); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c15();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 86) {\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            peg$reportedPos = s0;\n            s1 = peg$c18();\n          }\n          s0 = s1;\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 90) {\n              s1 = peg$c19;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c20); }\n            }\n            if (s1 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c21();\n            }\n            s0 = s1;\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsecomments() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = [];\n      if (input.charCodeAt(peg$currPos) === 32) {\n        s2 = peg$c22;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c23); }\n      }\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        if (input.charCodeAt(peg$currPos) === 32) {\n          s2 = peg$c22;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c23); }\n        }\n      }\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 = [];\n          if (input.length > peg$currPos) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c26); }\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            if (input.length > peg$currPos) {\n              s4 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c26); }\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            s1 = [s1, s2, s3];\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parsesuperview() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 124) {\n        s1 = peg$c27;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c28); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c29();\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseviewGroup() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 91) {\n        s1 = peg$c30;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c31); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseview();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s5 = peg$c32;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c33); }\n          }\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parseview();\n            if (s6 !== peg$FAILED) {\n              s5 = [s5, s6];\n              s4 = s5;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$c0;\n            }\n          } else {\n            peg$currPos = s4;\n            s4 = peg$c0;\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 44) {\n              s5 = peg$c32;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c33); }\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parseview();\n              if (s6 !== peg$FAILED) {\n                s5 = [s5, s6];\n                s4 = s5;\n              } else {\n                peg$currPos = s4;\n                s4 = peg$c0;\n              }\n            } else {\n              peg$currPos = s4;\n              s4 = peg$c0;\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 93) {\n              s4 = peg$c34;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c35); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c36(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseview() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parseviewNameRange();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parsepredicateListWithParens();\n        if (s2 === peg$FAILED) {\n          s2 = peg$c4;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsecascadedViews();\n          if (s3 === peg$FAILED) {\n            s3 = peg$c4;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c37(s1, s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parsecascadedViews() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 58) {\n        s1 = peg$c7;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c8); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        s3 = peg$currPos;\n        s4 = peg$parseconnection();\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parseviewGroup();\n          if (s5 !== peg$FAILED) {\n            s4 = [s4, s5];\n            s3 = s4;\n          } else {\n            peg$currPos = s3;\n            s3 = peg$c0;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$c0;\n        }\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            s3 = peg$currPos;\n            s4 = peg$parseconnection();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseviewGroup();\n              if (s5 !== peg$FAILED) {\n                s4 = [s4, s5];\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$c0;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$c0;\n            }\n          }\n        } else {\n          s2 = peg$c0;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseconnection();\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c38(s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseconnection() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c39) {\n        s1 = peg$c39;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c40); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c41();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 45) {\n          s1 = peg$c42;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c43); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parsepredicateList();\n          if (s2 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 45) {\n              s3 = peg$c42;\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c43); }\n            }\n            if (s3 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c44(s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 45) {\n            s1 = peg$c42;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c43); }\n          }\n          if (s1 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c45();\n          }\n          s0 = s1;\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 126) {\n              s1 = peg$c46;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c47); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parseequalSpacingPredicateList();\n              if (s2 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 126) {\n                  s3 = peg$c46;\n                  peg$currPos++;\n                } else {\n                  s3 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c47); }\n                }\n                if (s3 !== peg$FAILED) {\n                  peg$reportedPos = s0;\n                  s1 = peg$c44(s2);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$c0;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c0;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.charCodeAt(peg$currPos) === 126) {\n                s1 = peg$c46;\n                peg$currPos++;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c47); }\n              }\n              if (s1 !== peg$FAILED) {\n                peg$reportedPos = s0;\n                s1 = peg$c48();\n              }\n              s0 = s1;\n              if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                s1 = peg$c49;\n                if (s1 !== peg$FAILED) {\n                  peg$reportedPos = s0;\n                  s1 = peg$c50();\n                }\n                s0 = s1;\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsepredicateList() {\n      var s0;\n\n      s0 = peg$parsesimplePredicate();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsepredicateListWithParens();\n      }\n\n      return s0;\n    }\n\n    function peg$parsesimplePredicate() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parsepercentage();\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c51(s1);\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parsenumber();\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c52(s1);\n        }\n        s0 = s1;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepredicateListWithParens() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c53;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c54); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parsepredicate();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s5 = peg$c32;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c33); }\n          }\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parsepredicate();\n            if (s6 !== peg$FAILED) {\n              s5 = [s5, s6];\n              s4 = s5;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$c0;\n            }\n          } else {\n            peg$currPos = s4;\n            s4 = peg$c0;\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 44) {\n              s5 = peg$c32;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c33); }\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parsepredicate();\n              if (s6 !== peg$FAILED) {\n                s5 = [s5, s6];\n                s4 = s5;\n              } else {\n                peg$currPos = s4;\n                s4 = peg$c0;\n              }\n            } else {\n              peg$currPos = s4;\n              s4 = peg$c0;\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 41) {\n              s4 = peg$c55;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c56); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c57(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepredicate() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = peg$parserelation();\n      if (s1 === peg$FAILED) {\n        s1 = peg$c4;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseobjectOfPredicate();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 64) {\n            s4 = peg$c58;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c59); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parsepriority();\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$c0;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$c0;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = peg$c4;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c60(s1, s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseequalSpacingPredicateList() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 40) {\n        s1 = peg$c53;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c54); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseequalSpacingPredicate();\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          s4 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s5 = peg$c32;\n            peg$currPos++;\n          } else {\n            s5 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c33); }\n          }\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parseequalSpacingPredicate();\n            if (s6 !== peg$FAILED) {\n              s5 = [s5, s6];\n              s4 = s5;\n            } else {\n              peg$currPos = s4;\n              s4 = peg$c0;\n            }\n          } else {\n            peg$currPos = s4;\n            s4 = peg$c0;\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            s4 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 44) {\n              s5 = peg$c32;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c33); }\n            }\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parseequalSpacingPredicate();\n              if (s6 !== peg$FAILED) {\n                s5 = [s5, s6];\n                s4 = s5;\n              } else {\n                peg$currPos = s4;\n                s4 = peg$c0;\n              }\n            } else {\n              peg$currPos = s4;\n              s4 = peg$c0;\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 41) {\n              s4 = peg$c55;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c56); }\n            }\n            if (s4 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c57(s2, s3);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseequalSpacingPredicate() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = peg$parserelation();\n      if (s1 === peg$FAILED) {\n        s1 = peg$c4;\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseobjectOfPredicate();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 64) {\n            s4 = peg$c58;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c59); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parsepriority();\n            if (s5 !== peg$FAILED) {\n              s4 = [s4, s5];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$c0;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$c0;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = peg$c4;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c61(s1, s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parserelation() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c62) {\n        s1 = peg$c62;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c63); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c64();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c65) {\n          s1 = peg$c65;\n          peg$currPos += 2;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c66); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c67();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c68) {\n            s1 = peg$c68;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c69); }\n          }\n          if (s1 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c70();\n          }\n          s0 = s1;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseobjectOfPredicate() {\n      var s0;\n\n      s0 = peg$parsepercentage();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseconstant();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseviewPredicate();\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsepriority() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = [];\n      if (peg$c71.test(input.charAt(peg$currPos))) {\n        s2 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c72); }\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          if (peg$c71.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c72); }\n          }\n        }\n      } else {\n        s1 = peg$c0;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c73(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseconstant() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = peg$parsenumber();\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c74(s1);\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 45) {\n          s1 = peg$c42;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c43); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parsenumber();\n          if (s2 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c75(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 43) {\n            s1 = peg$c76;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c77); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumber();\n            if (s2 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c74(s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsepercentage() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$parsenumber();\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 37) {\n          s2 = peg$c78;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c79); }\n        }\n        if (s2 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c80(s1);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 45) {\n          s1 = peg$c42;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c43); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parsenumber();\n          if (s2 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 37) {\n              s3 = peg$c78;\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c79); }\n            }\n            if (s3 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c81(s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 43) {\n            s1 = peg$c76;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c77); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumber();\n            if (s2 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 37) {\n                s3 = peg$c78;\n                peg$currPos++;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c79); }\n              }\n              if (s3 !== peg$FAILED) {\n                peg$reportedPos = s0;\n                s1 = peg$c80(s2);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c0;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseviewPredicate() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = peg$parseviewName();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseattribute();\n        if (s2 === peg$FAILED) {\n          s2 = peg$c4;\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsemultiplier();\n          if (s3 === peg$FAILED) {\n            s3 = peg$c4;\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parseconstantExpr();\n            if (s4 === peg$FAILED) {\n              s4 = peg$c4;\n            }\n            if (s4 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c82(s1, s2, s3, s4);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parseattribute() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 5) === peg$c83) {\n        s1 = peg$c83;\n        peg$currPos += 5;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c84); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c85();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 6) === peg$c86) {\n          s1 = peg$c86;\n          peg$currPos += 6;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c87); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c88();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 4) === peg$c89) {\n            s1 = peg$c89;\n            peg$currPos += 4;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c90); }\n          }\n          if (s1 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c91();\n          }\n          s0 = s1;\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 7) === peg$c92) {\n              s1 = peg$c92;\n              peg$currPos += 7;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c93); }\n            }\n            if (s1 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c94();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 6) === peg$c95) {\n                s1 = peg$c95;\n                peg$currPos += 6;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c96); }\n              }\n              if (s1 !== peg$FAILED) {\n                peg$reportedPos = s0;\n                s1 = peg$c97();\n              }\n              s0 = s1;\n              if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.substr(peg$currPos, 7) === peg$c98) {\n                  s1 = peg$c98;\n                  peg$currPos += 7;\n                } else {\n                  s1 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c99); }\n                }\n                if (s1 !== peg$FAILED) {\n                  peg$reportedPos = s0;\n                  s1 = peg$c100();\n                }\n                s0 = s1;\n                if (s0 === peg$FAILED) {\n                  s0 = peg$currPos;\n                  if (input.substr(peg$currPos, 8) === peg$c101) {\n                    s1 = peg$c101;\n                    peg$currPos += 8;\n                  } else {\n                    s1 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c102); }\n                  }\n                  if (s1 !== peg$FAILED) {\n                    peg$reportedPos = s0;\n                    s1 = peg$c103();\n                  }\n                  s0 = s1;\n                  if (s0 === peg$FAILED) {\n                    s0 = peg$currPos;\n                    if (input.substr(peg$currPos, 8) === peg$c104) {\n                      s1 = peg$c104;\n                      peg$currPos += 8;\n                    } else {\n                      s1 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c105); }\n                    }\n                    if (s1 !== peg$FAILED) {\n                      peg$reportedPos = s0;\n                      s1 = peg$c106();\n                    }\n                    s0 = s1;\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsemultiplier() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 47) {\n        s1 = peg$c107;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c108); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parsenumber();\n        if (s2 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c109(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c110) {\n          s1 = peg$c110;\n          peg$currPos += 2;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c111); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parsenumber();\n          if (s2 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c109(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c112) {\n            s1 = peg$c112;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c113); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parsenumber();\n            if (s2 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c114(s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.charCodeAt(peg$currPos) === 42) {\n              s1 = peg$c115;\n              peg$currPos++;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c116); }\n            }\n            if (s1 !== peg$FAILED) {\n              s2 = peg$parsenumber();\n              if (s2 !== peg$FAILED) {\n                peg$reportedPos = s0;\n                s1 = peg$c117(s2);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c0;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c0;\n            }\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 2) === peg$c118) {\n                s1 = peg$c118;\n                peg$currPos += 2;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c119); }\n              }\n              if (s1 !== peg$FAILED) {\n                s2 = peg$parsenumber();\n                if (s2 !== peg$FAILED) {\n                  peg$reportedPos = s0;\n                  s1 = peg$c117(s2);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$c0;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c0;\n              }\n              if (s0 === peg$FAILED) {\n                s0 = peg$currPos;\n                if (input.substr(peg$currPos, 2) === peg$c120) {\n                  s1 = peg$c120;\n                  peg$currPos += 2;\n                } else {\n                  s1 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c121); }\n                }\n                if (s1 !== peg$FAILED) {\n                  s2 = peg$parsenumber();\n                  if (s2 !== peg$FAILED) {\n                    peg$reportedPos = s0;\n                    s1 = peg$c122(s2);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$c0;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$c0;\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseconstantExpr() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 45) {\n        s1 = peg$c42;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c43); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parsenumber();\n        if (s2 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c122(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 43) {\n          s1 = peg$c76;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c77); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = peg$parsenumber();\n          if (s2 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c117(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseviewNameRange() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = [];\n      if (peg$c123.test(input.charAt(peg$currPos))) {\n        s3 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c124); }\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          if (peg$c123.test(input.charAt(peg$currPos))) {\n            s3 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c124); }\n          }\n        }\n      } else {\n        s2 = peg$c0;\n      }\n      if (s2 !== peg$FAILED) {\n        s2 = input.substring(s1, peg$currPos);\n      }\n      s1 = s2;\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = [];\n        if (peg$c125.test(input.charAt(peg$currPos))) {\n          s4 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c126); }\n        }\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          if (peg$c125.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c126); }\n          }\n        }\n        if (s3 !== peg$FAILED) {\n          s3 = input.substring(s2, peg$currPos);\n        }\n        s2 = s3;\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parserange();\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c127(s1, s2, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$currPos;\n        s2 = [];\n        if (peg$c123.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c124); }\n        }\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            if (peg$c123.test(input.charAt(peg$currPos))) {\n              s3 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c124); }\n            }\n          }\n        } else {\n          s2 = peg$c0;\n        }\n        if (s2 !== peg$FAILED) {\n          s2 = input.substring(s1, peg$currPos);\n        }\n        s1 = s2;\n        if (s1 !== peg$FAILED) {\n          s2 = peg$currPos;\n          s3 = [];\n          if (peg$c125.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c126); }\n          }\n          while (s4 !== peg$FAILED) {\n            s3.push(s4);\n            if (peg$c125.test(input.charAt(peg$currPos))) {\n              s4 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c126); }\n            }\n          }\n          if (s3 !== peg$FAILED) {\n            s3 = input.substring(s2, peg$currPos);\n          }\n          s2 = s3;\n          if (s2 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c128(s1, s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parseviewName() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      s2 = [];\n      if (peg$c123.test(input.charAt(peg$currPos))) {\n        s3 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c124); }\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          if (peg$c123.test(input.charAt(peg$currPos))) {\n            s3 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c124); }\n          }\n        }\n      } else {\n        s2 = peg$c0;\n      }\n      if (s2 !== peg$FAILED) {\n        s2 = input.substring(s1, peg$currPos);\n      }\n      s1 = s2;\n      if (s1 !== peg$FAILED) {\n        s2 = peg$currPos;\n        s3 = [];\n        if (peg$c125.test(input.charAt(peg$currPos))) {\n          s4 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s4 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c126); }\n        }\n        while (s4 !== peg$FAILED) {\n          s3.push(s4);\n          if (peg$c125.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c126); }\n          }\n        }\n        if (s3 !== peg$FAILED) {\n          s3 = input.substring(s2, peg$currPos);\n        }\n        s2 = s3;\n        if (s2 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c128(s1, s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parserange() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 2) === peg$c129) {\n        s1 = peg$c129;\n        peg$currPos += 2;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c130); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        if (peg$c71.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c72); }\n        }\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            if (peg$c71.test(input.charAt(peg$currPos))) {\n              s3 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c72); }\n            }\n          }\n        } else {\n          s2 = peg$c0;\n        }\n        if (s2 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c131(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n\n      return s0;\n    }\n\n    function peg$parsenumber() {\n      var s0, s1, s2, s3, s4;\n\n      s0 = peg$currPos;\n      s1 = [];\n      if (peg$c71.test(input.charAt(peg$currPos))) {\n        s2 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c72); }\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          if (peg$c71.test(input.charAt(peg$currPos))) {\n            s2 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s2 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c72); }\n          }\n        }\n      } else {\n        s1 = peg$c0;\n      }\n      if (s1 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 46) {\n          s2 = peg$c132;\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c133); }\n        }\n        if (s2 !== peg$FAILED) {\n          s3 = [];\n          if (peg$c71.test(input.charAt(peg$currPos))) {\n            s4 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c72); }\n          }\n          if (s4 !== peg$FAILED) {\n            while (s4 !== peg$FAILED) {\n              s3.push(s4);\n              if (peg$c71.test(input.charAt(peg$currPos))) {\n                s4 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s4 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c72); }\n              }\n            }\n          } else {\n            s3 = peg$c0;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c134(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c0;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c0;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c0;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = [];\n        if (peg$c71.test(input.charAt(peg$currPos))) {\n          s2 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c72); }\n        }\n        if (s2 !== peg$FAILED) {\n          while (s2 !== peg$FAILED) {\n            s1.push(s2);\n            if (peg$c71.test(input.charAt(peg$currPos))) {\n              s2 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c72); }\n            }\n          }\n        } else {\n          s1 = peg$c0;\n        }\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c135(s1);\n        }\n        s0 = s1;\n      }\n\n      return s0;\n    }\n\n\n      function extend(dst) {\n        for (var i = 1; i < arguments.length; i++) {\n          for (var k in arguments[i]) {\n            dst[k] = arguments[i][k];\n          }\n        }\n        return dst;\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(null, peg$maxFailExpected, peg$maxFailPos);\n    }\n  }\n\n  return {\n    SyntaxError: SyntaxError,\n    parse:       parse\n  };\n})();\n\nconst Orientation = {\n    HORIZONTAL: 1,\n    VERTICAL: 2,\n    ZINDEX: 4\n};\n\n/**\n * Helper function that inserts equal spacers (~).\n * @private\n */\nfunction _processEqualSpacer(context, stackView) {\n\n    // Determine unique name for the spacer\n    context.equalSpacerIndex = context.equalSpacerIndex || 1;\n    const name = '_~' + context.lineIndex + ':' + context.equalSpacerIndex + '~';\n    if (context.equalSpacerIndex > 1) {\n\n        // Ensure that all spacers have the same width/height\n        context.constraints.push({\n            view1: '_~' + context.lineIndex + ':1~',\n            attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n            relation: context.relation.relation || Relation.EQU,\n            view2: name,\n            attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n            priority: context.relation.priority\n        });\n    }\n    context.equalSpacerIndex++;\n\n    // Enforce view/proportional width/height\n    if (context.relation.view || (context.relation.multiplier && (context.relation.multiplier !== 1))) {\n        context.constraints.push({\n            view1: name,\n            attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n            relation: context.relation.relation || Relation.EQU,\n            view2: context.relation.view,\n            attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n            priority: context.relation.priority,\n            multiplier: context.relation.multiplier\n        });\n        context.relation.multiplier = undefined;\n    }\n    else if (context.relation.constant) {\n        context.constraints.push({\n            view1: name,\n            attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n            relation: Relation.EQU,\n            view2: null,\n            attr2: Attribute.CONST,\n            priority: context.relation.priority,\n            constant: context.relation.constant\n        });\n        context.relation.constant = undefined;\n    }\n\n    // Add constraint\n    for (var i = 0; i < context.prevViews.length; i++) {\n        const prevView = context.prevViews[i];\n        switch (context.orientation) {\n            case Orientation.HORIZONTAL:\n                context.prevAttr = (prevView !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n                context.curAttr = Attribute.LEFT;\n                break;\n            case Orientation.VERTICAL:\n                context.prevAttr = (prevView !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n                context.curAttr = Attribute.TOP;\n                break;\n            case Orientation.ZINDEX:\n                context.prevAttr = Attribute.ZINDEX;\n                context.curAttr = Attribute.ZINDEX;\n                context.relation.constant = (prevView !== stackView) ? 'default' : 0;\n                break;\n        }\n        context.constraints.push({\n            view1: prevView,\n            attr1: context.prevAttr,\n            relation: context.relation.relation,\n            view2: name,\n            attr2: context.curAttr,\n            priority: context.relation.priority\n        });\n    }\n    context.prevViews = [name];\n}\n\n/**\n * Helper function that inserts proportional spacers (-12%-).\n * @private\n */\nfunction _processProportionalSpacer(context, stackView) {\n    context.proportionalSpacerIndex = context.proportionalSpacerIndex || 1;\n    const name = '_-' + context.lineIndex + ':' + context.proportionalSpacerIndex + '-';\n    context.proportionalSpacerIndex++;\n    context.constraints.push({\n        view1: name,\n        attr1: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n        relation: context.relation.relation || Relation.EQU,\n        view2: context.relation.view, // or relative to the stackView... food for thought\n        attr2: context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT,\n        priority: context.relation.priority,\n        multiplier: context.relation.multiplier\n    });\n    context.relation.multiplier = undefined;\n\n    // Add constraint\n    for (var i = 0; i < context.prevViews.length; i++) {\n        const prevView = context.prevViews[i];\n        switch (context.orientation) {\n            case Orientation.HORIZONTAL:\n                context.prevAttr = (prevView !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n                context.curAttr = Attribute.LEFT;\n                break;\n            case Orientation.VERTICAL:\n                context.prevAttr = (prevView !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n                context.curAttr = Attribute.TOP;\n                break;\n            case Orientation.ZINDEX:\n                context.prevAttr = Attribute.ZINDEX;\n                context.curAttr = Attribute.ZINDEX;\n                context.relation.constant = (prevView !== stackView) ? 'default' : 0;\n                break;\n        }\n        context.constraints.push({\n            view1: prevView,\n            attr1: context.prevAttr,\n            relation: context.relation.relation,\n            view2: name,\n            attr2: context.curAttr,\n            priority: context.relation.priority\n        });\n    }\n    context.prevViews = [name];\n}\n\n/**\n * In case of a stack-view, set constraints for opposite orientations\n * @private\n */\nfunction _processStackView(context, name, subView) {\n    let viewName;\n    for (var orientation = 1; orientation <= 4; orientation *= 2) {\n        if ((subView.orientations & orientation) &&\n            (subView.stack.orientation !== orientation) &&\n            !(subView.stack.processedOrientations & orientation)) {\n            subView.stack.processedOrientations = subView.stack.processedOrientations | orientation;\n            viewName = viewName || {\n                name: name,\n                type: 'stack'\n            };\n            for (var i = 0, j = subView.stack.subViews.length; i < j; i++) {\n                if (orientation === Orientation.ZINDEX) {\n                    context.constraints.push({\n                        view1: viewName,\n                        attr1: Attribute.ZINDEX,\n                        relation: Relation.EQU,\n                        view2: subView.stack.subViews[i],\n                        attr2: Attribute.ZINDEX\n                    });\n                }\n                else {\n                    context.constraints.push({\n                        view1: viewName,\n                        attr1: (orientation === Orientation.VERTICAL) ? Attribute.HEIGHT : Attribute.WIDTH,\n                        relation: Relation.EQU,\n                        view2: subView.stack.subViews[i],\n                        attr2: (orientation === Orientation.VERTICAL) ? Attribute.HEIGHT : Attribute.WIDTH\n                    });\n                    context.constraints.push({\n                        view1: viewName,\n                        attr1: (orientation === Orientation.VERTICAL) ? Attribute.TOP : Attribute.LEFT,\n                        relation: Relation.EQU,\n                        view2: subView.stack.subViews[i],\n                        attr2: (orientation === Orientation.VERTICAL) ? Attribute.TOP : Attribute.LEFT\n                    });\n                }\n            }\n        }\n    }\n}\n\n/**\n * Recursive helper function converts a view-name and a range to a series\n * of view-names (e.g. [child1, child2, child3, ...]).\n * @private\n */\nfunction _getRange(name, range) {\n    if (range === true) {\n        range = name.match(/\\.\\.\\d+$/);\n        if (range) {\n            name = name.substring(0, name.length - range[0].length);\n            range = parseInt(range[0].substring(2));\n        }\n    }\n    if (!range) {\n        return [name];\n    }\n    var start = name.match(/\\d+$/);\n    var res = [];\n    var i;\n    if (start) {\n        name = name.substring(0, name.length - start[0].length);\n        for (i = parseInt(start); i <= range; i++) {\n            res.push(name + i);\n        }\n    }\n    else {\n        res.push(name);\n        for (i = 2; i <= range; i++) {\n            res.push(name + i);\n        }\n    }\n    return res;\n}\n\n/**\n * Recursive helper function that processes the cascaded data.\n * @private\n */\nfunction _processCascade(context, cascade, parentItem) {\n    const stackView = parentItem ? parentItem.view : null;\n    const subViews = [];\n    let curViews = [];\n    let subView;\n    if (stackView) {\n        cascade.push({view: stackView});\n        curViews.push(stackView);\n    }\n    for (var i = 0; i < cascade.length; i++) {\n        let item = cascade[i];\n        if ((!Array.isArray(item) && item.hasOwnProperty('view')) ||\n            (Array.isArray(item) && item[0].view && !item[0].relation)) {\n            const items = Array.isArray(item) ? item : [item];\n            for (var z = 0; z < items.length; z++) {\n                item = items[z];\n                const viewRange = (item === ',') ? [] : item.view ? _getRange(item.view, item.range) : [null];\n                for (var r = 0; r < viewRange.length; r++) {\n                    const curView = viewRange[r];\n                    curViews.push(curView);\n\n                    //\n                    // Add this view to the collection of subViews\n                    //\n                    if (curView !== stackView) {\n                        subViews.push(curView);\n                        subView = context.subViews[curView];\n                        if (!subView) {\n                            subView = {orientations: 0};\n                            context.subViews[curView] = subView;\n                        }\n                        subView.orientations = subView.orientations | context.orientation;\n                        if (subView.stack) {\n                            _processStackView(context, curView, subView);\n                        }\n                    }\n\n                    //\n                    // Process the relationship between this and the previous views\n                    //\n                    if ((context.prevViews !== undefined) && (curView !== undefined) && context.relation) {\n                        if (context.relation.relation !== 'none') {\n                            for (var p = 0; p < context.prevViews.length; p++) {\n                                const prevView = context.prevViews[p];\n                                switch (context.orientation) {\n                                    case Orientation.HORIZONTAL:\n                                        context.prevAttr = (prevView !== stackView) ? Attribute.RIGHT : Attribute.LEFT;\n                                        context.curAttr = (curView !== stackView) ? Attribute.LEFT : Attribute.RIGHT;\n                                        break;\n                                    case Orientation.VERTICAL:\n                                        context.prevAttr = (prevView !== stackView) ? Attribute.BOTTOM : Attribute.TOP;\n                                        context.curAttr = (curView !== stackView) ? Attribute.TOP : Attribute.BOTTOM;\n                                        break;\n                                    case Orientation.ZINDEX:\n                                        context.prevAttr = Attribute.ZINDEX;\n                                        context.curAttr = Attribute.ZINDEX;\n                                        context.relation.constant = !prevView ? 0 : (context.relation.constant || 'default');\n                                        break;\n                                }\n                                context.constraints.push({\n                                    view1: prevView,\n                                    attr1: context.prevAttr,\n                                    relation: context.relation.relation,\n                                    view2: curView,\n                                    attr2: context.curAttr,\n                                    multiplier: context.relation.multiplier,\n                                    constant: ((context.relation.constant === 'default') || !context.relation.constant) ? context.relation.constant : -context.relation.constant,\n                                    priority: context.relation.priority\n                                });\n                            }\n                        }\n                    }\n\n                    //\n                    // Process view size constraints\n                    //\n                    const constraints = item.constraints;\n                    if (constraints) {\n                        for (var n = 0; n < constraints.length; n++) {\n                            context.prevAttr = context.horizontal ? Attribute.WIDTH : Attribute.HEIGHT;\n                            context.curAttr = (constraints[n].view || constraints[n].multiplier) ?\n                                    (constraints[n].attribute || context.prevAttr) :\n                                    (constraints[n].variable ? Attribute.VARIABLE : Attribute.CONST);\n                            context.constraints.push({\n                                view1: curView,\n                                attr1: context.prevAttr,\n                                relation: constraints[n].relation,\n                                view2: constraints[n].view,\n                                attr2: context.curAttr,\n                                multiplier: constraints[n].multiplier,\n                                constant: constraints[n].constant,\n                                priority: constraints[n].priority\n                            });\n                        }\n                    }\n\n                    //\n                    // Process cascaded data (child stack-views)\n                    //\n                    if (item.cascade) {\n                        _processCascade(context, item.cascade, item);\n                    }\n                }\n            }\n        }\n        else if (item !== ',') {\n            context.prevViews = curViews;\n            curViews = [];\n            context.relation = item[0];\n            if (context.prevViews !== undefined) {\n                if (context.relation.equalSpacing) {\n                    _processEqualSpacer(context, stackView);\n                }\n                if (context.relation.multiplier) {\n                    _processProportionalSpacer(context, stackView);\n                }\n            }\n        }\n    }\n\n    if (stackView) {\n        subView = context.subViews[stackView];\n        if (!subView) {\n            subView = {orientations: context.orientation};\n            context.subViews[stackView] = subView;\n        }\n        else if (subView.stack) {\n            const err = new Error('A stack named \"' + stackView + '\" has already been created');\n            err.column = parentItem.$parserOffset + 1;\n            throw err;\n        }\n        subView.stack = {\n            orientation: context.orientation,\n            processedOrientations: context.orientation,\n            subViews: subViews\n        };\n        _processStackView(context, stackView, subView);\n    }\n}\n\nconst metaInfoCategories = [\n    'viewport',\n    'spacing',\n    'colors',\n    'shapes',\n    'widths',\n    'heights'\n];\n\n/**\n * VisualFormat\n *\n * @namespace VisualFormat\n */\nclass VisualFormat {\n\n    /**\n     * Parses a single line of vfl into an array of constraint definitions.\n     *\n     * When the visual-format could not be succesfully parsed an exception is thrown containing\n     * additional info about the parse error and column position.\n     *\n     * @param {String} visualFormat Visual format string (cannot contain line-endings!).\n     * @param {Object} [options] Configuration options.\n     * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false).\n     * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`).\n     * @param {Number} [options.lineIndex] Line-index used when auto generating equal-spacing constraints.\n     * @return {Array} Array of constraint definitions.\n     */\n    static parseLine(visualFormat, options) {\n        if ((visualFormat.length === 0) ||\n            (options && options.extended && (visualFormat.indexOf('//') === 0))) {\n            return [];\n        }\n        const res = (options && options.extended) ? parserExt.parse(visualFormat) : parser.parse(visualFormat);\n        if (options && options.outFormat === 'raw') {\n            return [res];\n        }\n        let context = {\n            constraints: [],\n            lineIndex: (options ? options.lineIndex : undefined) || 1,\n            subViews: (options ? options.subViews : undefined) || {}\n        };\n        if (res.type === 'attribute') {\n            for (let n = 0; n < res.attributes.length; n++) {\n                const attr = res.attributes[n];\n                for (let m = 0; m < attr.predicates.length; m++) {\n                    const predicate = attr.predicates[m];\n                    context.constraints.push({\n                      view1: res.view,\n                      attr1: attr.attr,\n                      relation: predicate.relation,\n                      view2: predicate.view,\n                      attr2: predicate.attribute || attr.attr,\n                      multiplier: predicate.multiplier,\n                      constant: predicate.constant,\n                      priority: predicate.priority\n                    });\n                }\n            }\n        } else {\n          switch (res.orientation) {\n            case 'horizontal':\n              context.orientation = Orientation.HORIZONTAL;\n              context.horizontal = true;\n              _processCascade(context, res.cascade, null);\n              break;\n            case 'vertical':\n              context.orientation = Orientation.VERTICAL;\n              _processCascade(context, res.cascade, null);\n              break;\n            case 'horzvert':\n              context.orientation = Orientation.HORIZONTAL;\n              context.horizontal = true;\n              _processCascade(context, res.cascade, null);\n              context = {\n                constraints: context.constraints,\n                lineIndex: context.lineIndex,\n                subViews: context.subViews,\n                orientation: Orientation.VERTICAL\n              };\n              _processCascade(context, res.cascade, null);\n              break;\n            case 'zIndex':\n              context.orientation = Orientation.ZINDEX;\n              _processCascade(context, res.cascade, null);\n              break;\n          }\n        }\n        return context.constraints;\n    }\n\n    /**\n     * Parses one or more visual format strings into an array of constraint definitions.\n     *\n     * When the visual-format could not be succesfully parsed an exception is thrown containing\n     * additional info about the parse error and column position.\n     *\n     * @param {String|Array} visualFormat One or more visual format strings.\n     * @param {Object} [options] Configuration options.\n     * @param {Boolean} [options.extended] When set to true uses the extended syntax (default: false).\n     * @param {Boolean} [options.strict] When set to false trims any leading/trailing spaces and ignores empty lines (default: true).\n     * @param {String} [options.lineSeparator] String that defines the end of a line (default `\\n`).\n     * @param {String} [options.outFormat] Output format (`constraints` or `raw`) (default: `constraints`).\n     * @return {Array} Array of constraint definitions.\n     */\n    static parse(visualFormat, options) {\n        const lineSeparator = (options && options.lineSeparator) ? options.lineSeparator : '\\n';\n        if (!Array.isArray(visualFormat) && (visualFormat.indexOf(lineSeparator) < 0)) {\n            try {\n                return this.parseLine(visualFormat, options);\n            }\n            catch (err) {\n                err.source = visualFormat;\n                throw err;\n            }\n        }\n\n        // Decompose visual-format into an array of strings, and within those strings\n        // search for line-endings, and treat each line as a seperate visual-format.\n        visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat];\n        let lines;\n        let constraints = [];\n        let lineIndex = 0;\n        let line;\n        const parseOptions = {\n            lineIndex: lineIndex,\n            extended: (options && options.extended),\n            strict: (options && (options.strict !== undefined)) ? options.strict : true,\n            outFormat: options ? options.outFormat : undefined,\n            subViews: {}\n        };\n        try {\n            for (var i = 0; i < visualFormat.length; i++) {\n                lines = visualFormat[i].split(lineSeparator);\n                for (var j = 0; j < lines.length; j++) {\n                    line = lines[j];\n                    lineIndex++;\n                    parseOptions.lineIndex = lineIndex;\n                    if (!parseOptions.strict) {\n                        line = line.trim();\n                    }\n                    if (parseOptions.strict || line.length) {\n                        constraints = constraints.concat(this.parseLine(line, parseOptions));\n                    }\n                }\n            }\n        }\n        catch (err) {\n            err.source = line;\n            err.line = lineIndex;\n            throw err;\n        }\n        return constraints;\n    }\n\n    /**\n     * Parses meta information from the comments in the VFL.\n     *\n     * Additional meta information can be specified in the comments\n     * for previewing and rendering purposes. For instance, the view-port\n     * aspect-ratio, sub-view widths and colors, can be specified. The\n     * following example renders three colored circles in the visual-format editor:\n     *\n     * ```vfl\n     * //viewport aspect-ratio:3/1 max-height:300\n     * //colors red:#FF0000 green:#00FF00 blue:#0000FF\n     * //shapes red:circle green:circle blue:circle\n     * H:|-[row:[red(green,blue)]-[green]-[blue]]-|\n     * V:|[row]|\n     * ```\n     *\n     * Supported categories and properties:\n     *\n     * |Category|Property|Example|\n     * |--------|--------|-------|\n     * |`viewport`|`aspect-ratio:{width}/{height}`|`//viewport aspect-ratio:16/9`|\n     * ||`width:[{number}/intrinsic]`|`//viewport width:10`|\n     * ||`height:[{number}/intrinsic]`|`//viewport height:intrinsic`|\n     * ||`min-width:{number}`|\n     * ||`max-width:{number}`|\n     * ||`min-height:{number}`|\n     * ||`max-height:{number}`|\n     * |`spacing`|`[{number}/array]`|`//spacing:8` or `//spacing:[10, 20, 5]`|\n     * |`widths`|`{view-name}:[{number}/intrinsic]`|`//widths subview1:100`|\n     * |`heights`|`{view-name}:[{number}/intrinsic]`|`//heights subview1:intrinsic`|\n     * |`colors`|`{view-name}:{color}`|`//colors redview:#FF0000 blueview:#00FF00`|\n     * |`shapes`|`{view-name}:[circle/square]`|`//shapes avatar:circle`|\n     *\n     * @param {String|Array} visualFormat One or more visual format strings.\n     * @param {Object} [options] Configuration options.\n     * @param {String} [options.lineSeparator] String that defines the end of a line (default `\\n`).\n     * @param {String} [options.prefix] When specified, also processes the categories using that prefix (e.g. \"-dev-viewport max-height:10\").\n     * @return {Object} meta-info\n     */\n    static parseMetaInfo(visualFormat, options) {\n        const lineSeparator = (options && options.lineSeparator) ? options.lineSeparator : '\\n';\n        const prefix = options ? options.prefix : undefined;\n        visualFormat = Array.isArray(visualFormat) ? visualFormat : [visualFormat];\n        const metaInfo = {};\n        var key;\n        for (var k = 0; k < visualFormat.length; k++) {\n            const lines = visualFormat[k].split(lineSeparator);\n            for (var i = 0; i < lines.length; i++) {\n                const line = lines[i];\n                for (var c = 0; c < metaInfoCategories.length; c++) {\n                    for (var s = 0; s < (prefix ? 2 : 1); s++) {\n                        const category = metaInfoCategories[c];\n                        const prefixedCategory = ((s === 0) ? '' : prefix) + category;\n                        if (line.indexOf('//' + prefixedCategory + ' ') === 0) {\n                            const items = line.substring(3 + prefixedCategory.length).split(' ');\n                            for (var j = 0; j < items.length; j++) {\n                                metaInfo[category] = metaInfo[category] || {};\n                                const item = items[j].split(':');\n                                const names = _getRange(item[0], true);\n                                for (var r = 0; r < names.length; r++) {\n                                    metaInfo[category][names[r]] = (item.length > 1) ? item[1] : '';\n                                }\n                            }\n                        }\n                        else if (line.indexOf('//' + prefixedCategory + ':') === 0) {\n                            metaInfo[category] = line.substring(3 + prefixedCategory.length);\n                        }\n                    }\n                }\n            }\n        }\n        if (metaInfo.viewport) {\n            const viewport = metaInfo.viewport;\n            var aspectRatio = viewport['aspect-ratio'];\n            if (aspectRatio) {\n                aspectRatio = aspectRatio.split('/');\n                viewport['aspect-ratio'] = parseInt(aspectRatio[0]) / parseInt(aspectRatio[1]);\n            }\n            if (viewport.height !== undefined) {\n                viewport.height = (viewport.height === 'intrinsic') ? true : parseInt(viewport.height);\n            }\n            if (viewport.width !== undefined) {\n                viewport.width = (viewport.width === 'intrinsic') ? true : parseInt(viewport.width);\n            }\n            if (viewport['max-height'] !== undefined) {\n                viewport['max-height'] = parseInt(viewport['max-height']);\n            }\n            if (viewport['max-width'] !== undefined) {\n                viewport['max-width'] = parseInt(viewport['max-width']);\n            }\n            if (viewport['min-height'] !== undefined) {\n                viewport['min-height'] = parseInt(viewport['min-height']);\n            }\n            if (viewport['min-width'] !== undefined) {\n                viewport['min-width'] = parseInt(viewport['min-width']);\n            }\n        }\n        if (metaInfo.widths) {\n            for (key in metaInfo.widths) {\n                const width = (metaInfo.widths[key] === 'intrinsic') ? true : parseInt(metaInfo.widths[key]);\n                metaInfo.widths[key] = width;\n                if ((width === undefined) || isNaN(width)) {\n                    delete metaInfo.widths[key];\n                }\n            }\n        }\n        if (metaInfo.heights) {\n            for (key in metaInfo.heights) {\n                const height = (metaInfo.heights[key] === 'intrinsic') ? true : parseInt(metaInfo.heights[key]);\n                metaInfo.heights[key] = height;\n                if ((height === undefined) || isNaN(height)) {\n                    delete metaInfo.heights[key];\n                }\n            }\n        }\n        if (metaInfo.spacing) {\n            const value = JSON.parse(metaInfo.spacing);\n            metaInfo.spacing = value;\n            if (Array.isArray(value)){\n              for (var sIdx = 0, len = value.length; sIdx < len; sIdx++) {\n                if (isNaN(value[sIdx])){\n                  delete metaInfo.spacing;\n                  break;\n                }\n              }\n            } else if (value === undefined || isNaN(value)){\n              delete metaInfo.spacing;\n            }\n        }\n        return metaInfo;\n    }\n}\n\n/**\n * A SubView is automatically generated when constraints are added to a View.\n *\n * @namespace SubView\n */\nclass SubView {\n    constructor(options) {\n        this._name = options.name;\n        this._type = options.type;\n        this._solver = options.solver;\n        this._attr = {};\n        if (!options.name) {\n            if (process.env.CASSOWARYJS) {\n                this._attr[Attribute.LEFT] = new c.Variable();\n                this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.LEFT], c.Strength.required));\n                this._attr[Attribute.TOP] = new c.Variable();\n                this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.TOP], c.Strength.required));\n                this._attr[Attribute.ZINDEX] = new c.Variable();\n                this._solver.addConstraint(new c.StayConstraint(this._attr[Attribute.ZINDEX], c.Strength.required));\n            }\n            else {\n                this._attr[Attribute.LEFT] = new kiwi.Variable();\n                this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.LEFT], kiwi.Operator.Eq, 0));\n                this._attr[Attribute.TOP] = new kiwi.Variable();\n                this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.TOP], kiwi.Operator.Eq, 0));\n                this._attr[Attribute.ZINDEX] = new kiwi.Variable();\n                this._solver.addConstraint(new kiwi.Constraint(this._attr[Attribute.ZINDEX], kiwi.Operator.Eq, 0));\n            }\n        }\n    }\n    toJSON() {\n        return {\n            name: this.name,\n            left: this.left,\n            top: this.top,\n            width: this.width,\n            height: this.height\n        };\n    }\n    toString() {\n        JSON.stringify(this.toJSON(), undefined, 2);\n    }\n\n    /**\n     * Name of the sub-view.\n     * @readonly\n     * @type {String}\n     */\n    get name() {\n        return this._name;\n    }\n\n    /**\n     * Left value (`Attribute.LEFT`).\n     * @readonly\n     * @type {Number}\n     */\n    get left() {\n        return this._getAttrValue(Attribute.LEFT);\n    }\n\n    /**\n     * Right value (`Attribute.RIGHT`).\n     * @readonly\n     * @type {Number}\n     */\n    get right() {\n        return this._getAttrValue(Attribute.RIGHT);\n    }\n\n    /**\n     * Width value (`Attribute.WIDTH`).\n     * @type {Number}\n     */\n    get width() {\n        return this._getAttrValue(Attribute.WIDTH);\n    }\n\n    /**\n     * Height value (`Attribute.HEIGHT`).\n     * @readonly\n     * @type {Number}\n     */\n    get height() {\n        return this._getAttrValue(Attribute.HEIGHT);\n    }\n\n    /**\n     * Intrinsic width of the sub-view.\n     *\n     * Use this property to explicitely set the width of the sub-view, e.g.:\n     * ```javascript\n     * var view = new AutoLayout.View(AutoLayout.VisualFormat.parse('|[child1][child2]|'), {\n     *   width: 500\n     * });\n     * view.subViews.child1.intrinsicWidth = 100;\n     * console.log('child2 width: ' + view.subViews.child2.width); // 400\n     * ```\n     *\n     * @type {Number}\n     */\n    get intrinsicWidth() {\n        return this._intrinsicWidth;\n    }\n    set intrinsicWidth(value) {\n        if ((value !== undefined) && (value !== this._intrinsicWidth)) {\n            const attr = this._getAttr(Attribute.WIDTH);\n            if (this._intrinsicWidth === undefined) {\n                if (process.env.CASSOWARYJS) {\n                    this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000));\n                }\n                else {\n                    this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000));\n                }\n            }\n            this._intrinsicWidth = value;\n            this._solver.suggestValue(attr, value);\n            if (process.env.CASSOWARYJS) {\n                this._solver.resolve();\n            }\n            else {\n                this._solver.updateVariables();\n            }\n        }\n    }\n\n    /**\n     * Intrinsic height of the sub-view.\n     *\n     * See `intrinsicWidth`.\n     *\n     * @type {Number}\n     */\n    get intrinsicHeight() {\n        return this._intrinsicHeight;\n    }\n    set intrinsicHeight(value) {\n        if ((value !== undefined) && (value !== this._intrinsicHeight)) {\n            const attr = this._getAttr(Attribute.HEIGHT);\n            if (this._intrinsicHeight === undefined) {\n                if (process.env.CASSOWARYJS) {\n                    this._solver.addEditVar(attr, new c.Strength('required', this._name ? 998 : 999, 1000, 1000));\n                }\n                else {\n                    this._solver.addEditVariable(attr, kiwi.Strength.create(this._name ? 998 : 999, 1000, 1000));\n                }\n            }\n            this._intrinsicHeight = value;\n            this._solver.suggestValue(attr, value);\n            if (process.env.CASSOWARYJS) {\n                this._solver.resolve();\n            }\n            else {\n                this._solver.updateVariables();\n            }\n        }\n    }\n\n    /**\n     * Top value (`Attribute.TOP`).\n     * @readonly\n     * @type {Number}\n     */\n    get top() {\n        return this._getAttrValue(Attribute.TOP);\n    }\n\n    /**\n     * Bottom value (`Attribute.BOTTOM`).\n     * @readonly\n     * @type {Number}\n     */\n    get bottom() {\n        return this._getAttrValue(Attribute.BOTTOM);\n    }\n\n    /**\n     * Horizontal center (`Attribute.CENTERX`).\n     * @readonly\n     * @type {Number}\n     */\n    get centerX() {\n        return this._getAttrValue(Attribute.CENTERX);\n    }\n\n    /**\n     * Vertical center (`Attribute.CENTERY`).\n     * @readonly\n     * @type {Number}\n     */\n    get centerY() {\n        return this._getAttrValue(Attribute.CENTERY);\n    }\n\n    /**\n     * Z-index (`Attribute.ZINDEX`).\n     * @readonly\n     * @type {Number}\n     */\n    get zIndex() {\n        return this._getAttrValue(Attribute.ZINDEX);\n    }\n\n    /**\n     * Returns the type of the sub-view.\n     * @readonly\n     * @type {String}\n     */\n    get type() {\n        return this._type;\n    }\n\n    /**\n     * Gets the value of one of the attributes.\n     *\n     * @param {String|Attribute} attr Attribute name (e.g. 'right', 'centerY', Attribute.TOP).\n     * @return {Number} value or `undefined`\n     */\n    getValue(attr) {\n        return this._attr[attr] ? this._attr[attr].value() : undefined;\n    }\n\n    /**\n     * @private\n     */\n    _getAttr(attr) {\n        if (this._attr[attr]) {\n            return this._attr[attr];\n        }\n        this._attr[attr] = process.env.CASSOWARYJS ? new c.Variable() : new kiwi.Variable();\n        switch (attr) {\n            case Attribute.RIGHT:\n                this._getAttr(Attribute.LEFT);\n                this._getAttr(Attribute.WIDTH);\n                if (process.env.CASSOWARYJS) {\n                    this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], this._attr[Attribute.WIDTH])));\n                }\n                else {\n                    this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH])));\n                }\n                break;\n            case Attribute.BOTTOM:\n                this._getAttr(Attribute.TOP);\n                this._getAttr(Attribute.HEIGHT);\n                if (process.env.CASSOWARYJS) {\n                    this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], this._attr[Attribute.HEIGHT])));\n                }\n                else {\n                    this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT])));\n                }\n                break;\n            case Attribute.CENTERX:\n                this._getAttr(Attribute.LEFT);\n                this._getAttr(Attribute.WIDTH);\n                if (process.env.CASSOWARYJS) {\n                    this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.LEFT], c.divide(this._attr[Attribute.WIDTH], 2))));\n                }\n                else {\n                    this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.LEFT].plus(this._attr[Attribute.WIDTH].divide(2))));\n                }\n                break;\n            case Attribute.CENTERY:\n                this._getAttr(Attribute.TOP);\n                this._getAttr(Attribute.HEIGHT);\n                if (process.env.CASSOWARYJS) {\n                    this._solver.addConstraint(new c.Equation(this._attr[attr], c.plus(this._attr[Attribute.TOP], c.divide(this._attr[Attribute.HEIGHT], 2))));\n                }\n                else {\n                    this._solver.addConstraint(new kiwi.Constraint(this._attr[attr], kiwi.Operator.Eq, this._attr[Attribute.TOP].plus(this._attr[Attribute.HEIGHT].divide(2))));\n                }\n                break;\n        }\n        if (!process.env.CASSOWARYJS) {\n            this._solver.updateVariables();\n        }\n        return this._attr[attr];\n    }\n\n    /**\n     * @private\n     */\n    _getAttrValue(attr) {\n        if (process.env.CASSOWARYJS) {\n            return this._getAttr(attr).value;\n        }\n        else {\n            return this._getAttr(attr).value();\n        }\n    }\n}\n\nconst defaultPriorityStrength = process.env.CASSOWARYJS ? new c.Strength('defaultPriority', 0, 1000, 1000) : kiwi.Strength.create(0, 1000, 1000);\n\nfunction _getConst(name, value) {\n    if (process.env.CASSOWARYJS) {\n        const vr = new c.Variable({value: value});\n        this._solver.addConstraint(new c.StayConstraint(vr, c.Strength.required, 0));\n        return vr;\n    }\n    else {\n        const vr = new kiwi.Variable();\n        this._solver.addConstraint(new kiwi.Constraint(vr, kiwi.Operator.Eq, value));\n        return vr;\n    }\n}\n\nfunction _getSubView(viewName) {\n    if (!viewName) {\n        return this._parentSubView;\n    }\n    else if (viewName.name) {\n        this._subViews[viewName.name] = this._subViews[viewName.name] || new SubView({\n            name: viewName.name,\n            solver: this._solver\n        });\n        this._subViews[viewName.name]._type = this._subViews[viewName.name]._type || viewName.type;\n        return this._subViews[viewName.name];\n    }\n    else {\n        this._subViews[viewName] = this._subViews[viewName] || new SubView({\n            name: viewName,\n            solver: this._solver\n        });\n        return this._subViews[viewName];\n    }\n}\n\nfunction _getSpacing(constraint) {\n    let index = 4;\n    if (!constraint.view1 && (constraint.attr1 === 'left')) {\n        index = 3;\n    }\n    else if (!constraint.view1 && (constraint.attr1 === 'top')) {\n        index = 0;\n    }\n    else if (!constraint.view2 && (constraint.attr2 === 'right')) {\n        index = 1;\n    }\n    else if (!constraint.view2 && (constraint.attr2 === 'bottom')) {\n        index = 2;\n    }\n    else {\n        switch (constraint.attr1) {\n            case 'left':\n            case 'right':\n            case 'centerX':\n            case 'leading':\n            case 'trailing':\n                index = 4;\n                break;\n            case 'zIndex':\n                index = 6;\n                break;\n            default:\n                index = 5;\n        }\n    }\n    this._spacingVars = this._spacingVars || new Array(7);\n    this._spacingExpr = this._spacingExpr || new Array(7);\n    if (!this._spacingVars[index]) {\n        if (process.env.CASSOWARYJS) {\n            this._spacingVars[index] = new c.Variable();\n            this._solver.addEditVar(this._spacingVars[index]);\n            this._spacingExpr[index] = c.minus(0, this._spacingVars[index]);\n        }\n        else {\n            this._spacingVars[index] = new kiwi.Variable();\n            this._solver.addEditVariable(this._spacingVars[index], kiwi.Strength.create(999, 1000, 1000));\n            this._spacingExpr[index] = this._spacingVars[index].multiply(-1);\n        }\n        this._solver.suggestValue(this._spacingVars[index], this._spacing[index]);\n    }\n    return this._spacingExpr[index];\n}\n\nfunction _addConstraint(constraint) {\n    //this.constraints.push(constraint);\n    let relation;\n    const multiplier = (constraint.multiplier !== undefined) ? constraint.multiplier : 1;\n    let constant = (constraint.constant !== undefined) ? constraint.constant : 0;\n    if (constant === 'default') {\n        constant = _getSpacing.call(this, constraint);\n    }\n    const attr1 = _getSubView.call(this, constraint.view1)._getAttr(constraint.attr1);\n    let attr2;\n    if (process.env.CASSOWARYJS) {\n        if (constraint.attr2 === Attribute.CONST) {\n            attr2 = _getConst.call(this, undefined, constraint.constant);\n        }\n        else {\n            attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2);\n            if ((multiplier !== 1) && constant) {\n                attr2 = c.plus(c.times(attr2, multiplier), constant);\n            }\n            else if (constant) {\n                attr2 = c.plus(attr2, constant);\n            }\n            else if (multiplier !== 1) {\n                attr2 = c.times(attr2, multiplier);\n            }\n        }\n        const strength = ((constraint.priority !== undefined) && (constraint.priority < 1000)) ? new c.Strength('priority', 0, constraint.priority, 1000) : defaultPriorityStrength;\n        switch (constraint.relation) {\n            case Relation.EQU:\n                relation = new c.Equation(attr1, attr2, strength);\n                break;\n            case Relation.GEQ:\n                relation = new c.Inequality(attr1, c.GEQ, attr2, strength);\n                break;\n            case Relation.LEQ:\n                relation = new c.Inequality(attr1, c.LEQ, attr2, strength);\n                break;\n            default:\n                throw 'Invalid relation specified: ' + constraint.relation;\n        }\n    }\n    else {\n        if (constraint.attr2 === Attribute.CONST) {\n            attr2 = _getConst.call(this, undefined, constraint.constant);\n        }\n        else {\n            attr2 = _getSubView.call(this, constraint.view2)._getAttr(constraint.attr2);\n            if ((multiplier !== 1) && constant) {\n                attr2 = attr2.multiply(multiplier).plus(constant);\n            }\n            else if (constant) {\n                attr2 = attr2.plus(constant);\n            }\n            else if (multiplier !== 1) {\n                attr2 = attr2.multiply(multiplier);\n            }\n        }\n        const strength = ((constraint.priority !== undefined) && (constraint.priority < 1000)) ? kiwi.Strength.create(0, constraint.priority, 1000) : defaultPriorityStrength;\n        switch (constraint.relation) {\n            case Relation.EQU:\n                relation = new kiwi.Constraint(attr1, kiwi.Operator.Eq, attr2, strength);\n                break;\n            case Relation.GEQ:\n                relation = new kiwi.Constraint(attr1, kiwi.Operator.Ge, attr2, strength);\n                break;\n            case Relation.LEQ:\n                relation = new kiwi.Constraint(attr1, kiwi.Operator.Le, attr2, strength);\n                break;\n            default:\n                throw 'Invalid relation specified: ' + constraint.relation;\n        }\n    }\n    this._solver.addConstraint(relation);\n}\n\nfunction _compareSpacing(old, newz) {\n    if (old === newz) {\n        return true;\n    }\n    if (!old || !newz) {\n        return false;\n    }\n    for (var i = 0; i < 7; i++) {\n        if (old[i] !== newz[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n\n/**\n * AutoLayoutJS API reference.\n *\n * ### Index\n *\n * |Entity|Type|Description|\n * |---|---|---|\n * |[AutoLayout](#autolayout)|`namespace`|Top level AutoLayout object.|\n * |[VisualFormat](#autolayoutvisualformat--object)|`namespace`|Parses VFL into constraints.|\n * |[View](#autolayoutview)|`class`|Main entity for adding & evaluating constraints.|\n * |[SubView](#autolayoutsubview--object)|`class`|SubView's are automatically created when constraints are added to views. They give access to the evaluated results.|\n * |[Attribute](#autolayoutattribute--enum)|`enum`|Attribute types that are supported when adding constraints.|\n * |[Relation](#autolayoutrelation--enum)|`enum`|Relationship types that are supported when adding constraints.|\n * |[Priority](#autolayoutpriority--enum)|`enum`|Default priority values for when adding constraints.|\n *\n * ### AutoLayout\n *\n * @module AutoLayout\n */\nclass View {\n\n    /**\n     * @class View\n     * @param {Object} [options] Configuration options.\n     * @param {Number} [options.width] Initial width of the view.\n     * @param {Number} [options.height] Initial height of the view.\n     * @param {Number|Object} [options.spacing] Spacing for the view (default: 8) (see `setSpacing`).\n     * @param {Array} [options.constraints] One or more constraint definitions (see `addConstraints`).\n     */\n    constructor(options) {\n        this._solver = process.env.CASSOWARYJS ? new c.SimplexSolver() : new kiwi.Solver();\n        this._subViews = {};\n        //this._spacing = undefined;\n        this._parentSubView = new SubView({\n            solver: this._solver\n        });\n        this.setSpacing((options && (options.spacing !== undefined)) ? options.spacing : 8);\n        //this.constraints = [];\n        if (options) {\n            if ((options.width !== undefined) || (options.height !== undefined)) {\n                this.setSize(options.width, options.height);\n            }\n            if (options.constraints) {\n                this.addConstraints(options.constraints);\n            }\n        }\n    }\n\n    /**\n     * Sets the width and height of the view.\n     *\n     * @param {Number} width Width of the view.\n     * @param {Number} height Height of the view.\n     * @return {View} this\n     */\n    setSize(width, height /*, depth*/) {\n        this._parentSubView.intrinsicWidth = width;\n        this._parentSubView.intrinsicHeight = height;\n        return this;\n    }\n\n    /**\n     * Width that was set using `setSize`.\n     * @readonly\n     * @type {Number}\n     */\n    get width() {\n        return this._parentSubView.intrinsicWidth;\n    }\n\n    /**\n     * Height that was set using `setSize`.\n     * @readonly\n     * @type {Number}\n     */\n    get height() {\n        return this._parentSubView.intrinsicHeight;\n    }\n\n    /**\n     * Width that is calculated from the constraints and the `.intrinsicWidth` of\n     * the sub-views.\n     *\n     * When the width has been explicitely set using `setSize`, the fittingWidth\n     * will **always** be the same as the explicitely set width. To calculate the size\n     * based on the content, use:\n     * ```javascript\n     * var view = new AutoLayout.View({\n     *   constraints: VisualFormat.parse('|-[view1]-[view2]-'),\n     *   spacing: 20\n     * });\n     * view.subViews.view1.intrinsicWidth = 100;\n     * view.subViews.view2.intrinsicWidth = 100;\n     * console.log('fittingWidth: ' + view.fittingWidth); // 260\n     * ```\n     *\n     * @readonly\n     * @type {Number}\n     */\n    get fittingWidth() {\n        return this._parentSubView.width;\n    }\n\n    /**\n     * Height that is calculated from the constraints and the `.intrinsicHeight` of\n     * the sub-views.\n     *\n     * See `.fittingWidth`.\n     *\n     * @readonly\n     * @type {Number}\n     */\n    get fittingHeight() {\n        return this._parentSubView.height;\n    }\n\n    /**\n     * Sets the spacing for the view.\n     *\n     * The spacing can be set for 7 different variables:\n     * `top`, `right`, `bottom`, `left`, `width`, `height` and `zIndex`. The `left`-spacing is\n     * used when a spacer is used between the parent-view and a sub-view (e.g. `|-[subView]`).\n     * The same is true for the `right`, `top` and `bottom` spacers. The `width` and `height` are\n     * used for spacers in between sub-views (e.g. `[view1]-[view2]`).\n     *\n     * Instead of using the full spacing syntax, it is also possible to use shorthand notations:\n     *\n     * |Syntax|Type|Description|\n     * |---|---|---|\n     * |`[top, right, bottom, left, width, height, zIndex]`|Array(7)|Full syntax including z-index **(clockwise order)**.|\n     * |`[top, right, bottom, left, width, height]`|Array(6)|Full horizontal & vertical spacing syntax (no z-index) **(clockwise order)**.|\n     * |`[horizontal, vertical, zIndex]`|Array(3)|Horizontal = left, right, width, vertical = top, bottom, height.|\n     * |`[horizontal, vertical]`|Array(2)|Horizontal = left, right, width, vertical = top, bottom, height, z-index = 1.|\n     * |`spacing`|Number|Horizontal & vertical spacing are all the same, z-index = 1.|\n     *\n     * Examples:\n     * ```javascript\n     * view.setSpacing(10); // horizontal & vertical spacing 10\n     * view.setSpacing([10, 15, 2]); // horizontal spacing 10, vertical spacing 15, z-axis spacing 2\n     * view.setSpacing([10, 20, 10, 20, 5, 5]); // top, right, bottom, left, horizontal, vertical\n     * view.setSpacing([10, 20, 10, 20, 5, 5, 1]); // top, right, bottom, left, horizontal, vertical, z\n     * ```\n     *\n     * @param {Number|Array} spacing\n     * @return {View} this\n     */\n    setSpacing(spacing) {\n        // convert spacing into array: [top, right, bottom, left, horz, vert, z-index]\n        switch (Array.isArray(spacing) ? spacing.length : -1) {\n            case -1: spacing = [spacing, spacing, spacing, spacing, spacing, spacing, 1]; break;\n            case 1: spacing = [spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], spacing[0], 1]; break;\n            case 2: spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], 1]; break;\n            case 3: spacing = [spacing[1], spacing[0], spacing[1], spacing[0], spacing[0], spacing[1], spacing[2]]; break;\n            case 6: spacing = [spacing[0], spacing[1], spacing[2], spacing[3], spacing[4], spacing[5], 1]; break;\n            case 7: break;\n            default: throw 'Invalid spacing syntax';\n        }\n        if (!_compareSpacing(this._spacing, spacing)) {\n            this._spacing = spacing;\n            // update spacing variables\n            if (this._spacingVars) {\n                for (var i = 0; i < this._spacingVars.length; i++) {\n                    if (this._spacingVars[i]) {\n                        this._solver.suggestValue(this._spacingVars[i], this._spacing[i]);\n                    }\n                }\n                if (process.env.CASSOWARYJS) {\n                    this._solver.resolve();\n                }\n                else {\n                    this._solver.updateVariables();\n                }\n            }\n        }\n        return this;\n    }\n\n    /**\n     * Adds a constraint definition.\n     *\n     * A constraint definition has the following format:\n     *\n     * ```javascript\n     * constraint: {\n     *   view1: {String},\n     *   attr1: {AutoLayout.Attribute},\n     *   relation: {AutoLayout.Relation},\n     *   view2: {String},\n     *   attr2: {AutoLayout.Attribute},\n     *   multiplier: {Number},\n     *   constant: {Number},\n     *   priority: {Number}(0..1000)\n     * }\n     * ```\n     * @param {Object} constraint Constraint definition.\n     * @return {View} this\n     */\n    addConstraint(constraint) {\n        _addConstraint.call(this, constraint);\n        if (!process.env.CASSOWARYJS) {\n            this._solver.updateVariables();\n        }\n        return this;\n    }\n\n    /**\n     * Adds one or more constraint definitions.\n     *\n     * A constraint definition has the following format:\n     *\n     * ```javascript\n     * constraint: {\n     *   view1: {String},\n     *   attr1: {AutoLayout.Attribute},\n     *   relation: {AutoLayout.Relation},\n     *   view2: {String},\n     *   attr2: {AutoLayout.Attribute},\n     *   multiplier: {Number},\n     *   constant: {Number},\n     *   priority: {Number}(0..1000)\n     * }\n     * ```\n     * @param {Array} constraints One or more constraint definitions.\n     * @return {View} this\n     */\n    addConstraints(constraints) {\n        for (var j = 0; j < constraints.length; j++) {\n            _addConstraint.call(this, constraints[j]);\n        }\n        if (!process.env.CASSOWARYJS) {\n            this._solver.updateVariables();\n        }\n        return this;\n    }\n\n    /**\n     * Dictionary of `SubView` objects that have been created when adding constraints.\n     * @readonly\n     * @type {Object.SubView}\n     */\n    get subViews() {\n        return this._subViews;\n    }\n\n    /**\n     * Checks whether the constraints incompletely specify the location\n     * of the subViews.\n     * @private\n     */\n    //get hasAmbiguousLayout() {\n        // Todo\n    //}\n}\n\n//import DOM from './DOM';\n\n/**\n * AutoLayout.\n *\n * @namespace AutoLayout\n * @property {Attribute} Attribute\n * @property {Relation} Relation\n * @property {Priority} Priority\n * @property {VisualFormat} VisualFormat\n * @property {View} View\n * @property {SubView} SubView\n */\nvar AutoLayout = {\n    Attribute: Attribute,\n    Relation: Relation,\n    Priority: Priority,\n    VisualFormat: VisualFormat,\n    View: View,\n    SubView: SubView\n    //DOM: DOM\n};\n\nmodule.exports = AutoLayout;","/**\n * Parts Copyright (C) 2011-2012, Alex Russell (slightlyoff@chromium.org)\n * Parts Copyright (C) Copyright (C) 1998-2000 Greg J. Badros\n *\n * Use of this source code is governed by the LGPL, which can be found in the\n * COPYING.LGPL file.\n *\n * This is a compiled version of Cassowary/JS. For source versions or to\n * contribute, see the github project:\n *\n *  https://github.com/slightlyoff/cassowary-js-refactor\n *\n */\n\n(function() {\n(function(a){\"use strict\";try{(function(){}).bind(a)}catch(b){Object.defineProperty(Function.prototype,\"bind\",{value:function(a){var b=this;return function(){return b.apply(a,arguments)}},enumerable:!1,configurable:!0,writable:!0})}var c=a.HTMLElement!==void 0,d=function(a){for(var b=null;a&&a!=Object.prototype;){if(a.tagName){b=a.tagName;break}a=a.prototype}return b||\"div\"},e=1e-8,f={},g=function(a,b){if(a&&b){if(\"function\"==typeof a[b])return a[b];var c=a.prototype;if(c&&\"function\"==typeof c[b])return c[b];if(c!==Object.prototype&&c!==Function.prototype)return\"function\"==typeof a.__super__?g(a.__super__,b):void 0}},h=a.c={debug:!1,trace:!1,verbose:!1,traceAdded:!1,GC:!1,GEQ:1,LEQ:2,inherit:function(b){var e=null,g=null;b[\"extends\"]&&(g=b[\"extends\"],delete b[\"extends\"]),b.initialize&&(e=b.initialize,delete b.initialize);var h=e||function(){};Object.defineProperty(h,\"__super__\",{value:g?g:Object,enumerable:!1,configurable:!0,writable:!1}),b._t&&(f[b._t]=h);var i=h.prototype=Object.create(g?g.prototype:Object.prototype);if(this.extend(i,b),c&&g&&g.prototype instanceof a.HTMLElement){var j=h,k=d(i),l=function(a){return a.__proto__=i,j.apply(a,arguments),i.created&&a.created(),i.decorate&&a.decorate(),a};this.extend(i,{upgrade:l}),h=function(){return l(a.document.createElement(k))},h.prototype=i,this.extend(h,{ctor:j})}return h},extend:function(a,b){return this.own(b,function(c){var d=Object.getOwnPropertyDescriptor(b,c);try{\"function\"==typeof d.get||\"function\"==typeof d.set?Object.defineProperty(a,c,d):\"function\"==typeof d.value||\"_\"===c.charAt(0)?(d.writable=!0,d.configurable=!0,d.enumerable=!1,Object.defineProperty(a,c,d)):a[c]=b[c]}catch(e){}}),a},own:function(b,c,d){return Object.getOwnPropertyNames(b).forEach(c,d||a),b},traceprint:function(a){h.verbose&&console.log(a)},fnenterprint:function(a){console.log(\"* \"+a)},fnexitprint:function(a){console.log(\"- \"+a)},assert:function(a,b){if(!a)throw new h.InternalError(\"Assertion failed: \"+b)},plus:function(a,b){return a instanceof h.Expression||(a=new h.Expression(a)),b instanceof h.Expression||(b=new h.Expression(b)),a.plus(b)},minus:function(a,b){return a instanceof h.Expression||(a=new h.Expression(a)),b instanceof h.Expression||(b=new h.Expression(b)),a.minus(b)},times:function(a,b){return(\"number\"==typeof a||a instanceof h.Variable)&&(a=new h.Expression(a)),(\"number\"==typeof b||b instanceof h.Variable)&&(b=new h.Expression(b)),a.times(b)},divide:function(a,b){return(\"number\"==typeof a||a instanceof h.Variable)&&(a=new h.Expression(a)),(\"number\"==typeof b||b instanceof h.Variable)&&(b=new h.Expression(b)),a.divide(b)},approx:function(a,b){if(a===b)return!0;var c,d;return c=a instanceof h.Variable?a.value:a,d=b instanceof h.Variable?b.value:b,0==c?e>Math.abs(d):0==d?e>Math.abs(c):Math.abs(c-d)<Math.abs(c)*e},_inc:function(a){return function(){return a++}}(0),parseJSON:function(a){return JSON.parse(a,function(a,b){if(\"object\"!=typeof b||\"string\"!=typeof b._t)return b;var c=b._t,d=f[c];if(c&&d){var e=g(d,\"fromJSON\");if(e)return e(b,d)}return b})}};\"function\"==typeof require&&\"undefined\"!=typeof module&&\"undefined\"==typeof load&&(a.exports=h)})(this),function(a){\"use strict\";var b=function(a){var b=a.hashCode?a.hashCode:\"\"+a;return b},c=function(a,b){Object.keys(a).forEach(function(c){b[c]=a[c]})},d={};a.HashTable=a.inherit({initialize:function(){this.size=0,this._store={},this._keyStrMap={},this._deleted=0},set:function(a,c){var d=b(a);this._store.hasOwnProperty(d)||this.size++,this._store[d]=c,this._keyStrMap[d]=a},get:function(a){if(!this.size)return null;a=b(a);var c=this._store[a];return c!==void 0?this._store[a]:null},clear:function(){this.size=0,this._store={},this._keyStrMap={}},_compact:function(){var a={};c(this._store,a),this._store=a},_compactThreshold:100,_perhapsCompact:function(){this._size>64||this._deleted>this._compactThreshold&&(this._compact(),this._deleted=0)},\"delete\":function(a){a=b(a),this._store.hasOwnProperty(a)&&(this._deleted++,delete this._store[a],this.size>0&&this.size--)},each:function(a,b){if(this.size){this._perhapsCompact();var c=this._store,d=this._keyStrMap;Object.keys(this._store).forEach(function(e){a.call(b||null,d[e],c[e])},this)}},escapingEach:function(a,b){if(this.size){this._perhapsCompact();for(var c=this,e=this._store,f=this._keyStrMap,g=d,h=Object.keys(e),i=0;h.length>i;i++)if(function(d){c._store.hasOwnProperty(d)&&(g=a.call(b||null,f[d],e[d]))}(h[i]),g){if(void 0!==g.retval)return g;if(g.brk)break}}},clone:function(){var b=new a.HashTable;return this.size&&(b.size=this.size,c(this._store,b._store),c(this._keyStrMap,b._keyStrMap)),b},equals:function(b){if(b===this)return!0;if(!(b instanceof a.HashTable)||b._size!==this._size)return!1;for(var c=Object.keys(this._store),d=0;c.length>d;d++){var e=c[d];if(this._keyStrMap[e]!==b._keyStrMap[e]||this._store[e]!==b._store[e])return!1}return!0},toString:function(){var b=\"\";return this.each(function(a,c){b+=a+\" => \"+c+\"\\n\"}),b}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.HashSet=a.inherit({_t:\"c.HashSet\",initialize:function(){this.storage=[],this.size=0},add:function(a){var b=this.storage;b.indexOf(a),-1==b.indexOf(a)&&b.push(a),this.size=this.storage.length},values:function(){return this.storage},has:function(a){var b=this.storage;return-1!=b.indexOf(a)},\"delete\":function(a){var b=this.storage.indexOf(a);return-1==b?null:(this.storage.splice(b,1)[0],this.size=this.storage.length,void 0)},clear:function(){this.storage.length=0},each:function(a,b){this.size&&this.storage.forEach(a,b)},escapingEach:function(a,b){this.size&&this.storage.forEach(a,b)},toString:function(){var a=this.size+\" {\",b=!0;return this.each(function(c){b?b=!1:a+=\", \",a+=c}),a+=\"}\\n\"},toJSON:function(){var a=[];return this.each(function(b){a.push(b.toJSON())}),{_t:\"c.HashSet\",data:a}},fromJSON:function(b){var c=new a.HashSet;return b.data&&(c.size=b.data.length,c.storage=b.data),c}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Error=a.inherit({initialize:function(a){a&&(this._description=a)},_name:\"c.Error\",_description:\"An error has occured in Cassowary\",set description(a){this._description=a},get description(){return\"(\"+this._name+\") \"+this._description},get message(){return this.description},toString:function(){return this.description}});var b=function(b,c){return a.inherit({\"extends\":a.Error,initialize:function(){a.Error.apply(this,arguments)},_name:b||\"\",_description:c||\"\"})};a.ConstraintNotFound=b(\"c.ConstraintNotFound\",\"Tried to remove a constraint never added to the tableu\"),a.InternalError=b(\"c.InternalError\"),a.NonExpression=b(\"c.NonExpression\",\"The resulting expression would be non\"),a.NotEnoughStays=b(\"c.NotEnoughStays\",\"There are not enough stays to give specific values to every variable\"),a.RequiredFailure=b(\"c.RequiredFailure\",\"A required constraint cannot be satisfied\"),a.TooDifficult=b(\"c.TooDifficult\",\"The constraints are too difficult to solve\")}(this.c||module.parent.exports||{}),function(a){\"use strict\";var b=1e3;a.SymbolicWeight=a.inherit({_t:\"c.SymbolicWeight\",initialize:function(){this.value=0;for(var a=1,c=arguments.length-1;c>=0;--c)this.value+=arguments[c]*a,a*=b},toJSON:function(){return{_t:this._t,value:this.value}}})}(this.c||module.parent.exports||{}),function(a){a.Strength=a.inherit({initialize:function(b,c,d,e){this.name=b,this.symbolicWeight=c instanceof a.SymbolicWeight?c:new a.SymbolicWeight(c,d,e)},get required(){return this===a.Strength.required},toString:function(){return this.name+(this.isRequired?\"\":\":\"+this.symbolicWeight)}}),a.Strength.required=new a.Strength(\"<Required>\",1e3,1e3,1e3),a.Strength.strong=new a.Strength(\"strong\",1,0,0),a.Strength.medium=new a.Strength(\"medium\",0,1,0),a.Strength.weak=new a.Strength(\"weak\",0,0,1)}(this.c||(\"undefined\"!=typeof module?module.parent.exports.c:{})),function(a){\"use strict\";a.AbstractVariable=a.inherit({isDummy:!1,isExternal:!1,isPivotable:!1,isRestricted:!1,_init:function(b,c){this.hashCode=a._inc(),this.name=(c||\"\")+this.hashCode,b&&(b.name!==void 0&&(this.name=b.name),b.value!==void 0&&(this.value=b.value),b.prefix!==void 0&&(this._prefix=b.prefix))},_prefix:\"\",name:\"\",value:0,toJSON:function(){var a={};return this._t&&(a._t=this._t),this.name&&(a.name=this.name),this.value!==void 0&&(a.value=this.value),this._prefix&&(a._prefix=this._prefix),this._t&&(a._t=this._t),a},fromJSON:function(b,c){var d=new c;return a.extend(d,b),d},toString:function(){return this._prefix+\"[\"+this.name+\":\"+this.value+\"]\"}}),a.Variable=a.inherit({_t:\"c.Variable\",\"extends\":a.AbstractVariable,initialize:function(b){this._init(b,\"v\");var c=a.Variable._map;c&&(c[this.name]=this)},isExternal:!0}),a.DummyVariable=a.inherit({_t:\"c.DummyVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"d\")},isDummy:!0,isRestricted:!0,value:\"dummy\"}),a.ObjectiveVariable=a.inherit({_t:\"c.ObjectiveVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"o\")},value:\"obj\"}),a.SlackVariable=a.inherit({_t:\"c.SlackVariable\",\"extends\":a.AbstractVariable,initialize:function(a){this._init(a,\"s\")},isPivotable:!0,isRestricted:!0,value:\"slack\"})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Point=a.inherit({initialize:function(b,c,d){if(b instanceof a.Variable)this._x=b;else{var e={value:b};d&&(e.name=\"x\"+d),this._x=new a.Variable(e)}if(c instanceof a.Variable)this._y=c;else{var f={value:c};d&&(f.name=\"y\"+d),this._y=new a.Variable(f)}},get x(){return this._x},set x(b){b instanceof a.Variable?this._x=b:this._x.value=b},get y(){return this._y},set y(b){b instanceof a.Variable?this._y=b:this._y.value=b},toString:function(){return\"(\"+this.x+\", \"+this.y+\")\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Expression=a.inherit({initialize:function(b,c,d){a.GC&&console.log(\"new c.Expression\"),this.constant=\"number\"!=typeof d||isNaN(d)?0:d,this.terms=new a.HashTable,b instanceof a.AbstractVariable?this.setVariable(b,\"number\"==typeof c?c:1):\"number\"==typeof b&&(isNaN(b)?console.trace():this.constant=b)},initializeFromHash:function(b,c){return a.verbose&&(console.log(\"*******************************\"),console.log(\"clone c.initializeFromHash\"),console.log(\"*******************************\")),a.GC&&console.log(\"clone c.Expression\"),this.constant=b,this.terms=c.clone(),this},multiplyMe:function(a){this.constant*=a;var b=this.terms;return b.each(function(c,d){b.set(c,d*a)}),this},clone:function(){a.verbose&&(console.log(\"*******************************\"),console.log(\"clone c.Expression\"),console.log(\"*******************************\"));var b=new a.Expression;return b.initializeFromHash(this.constant,this.terms),b},times:function(b){if(\"number\"==typeof b)return this.clone().multiplyMe(b);if(this.isConstant)return b.times(this.constant);if(b.isConstant)return this.times(b.constant);throw new a.NonExpression},plus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,1):b instanceof a.Variable?this.clone().addVariable(b,1):void 0},minus:function(b){return b instanceof a.Expression?this.clone().addExpression(b,-1):b instanceof a.Variable?this.clone().addVariable(b,-1):void 0},divide:function(b){if(\"number\"==typeof b){if(a.approx(b,0))throw new a.NonExpression;return this.times(1/b)}if(b instanceof a.Expression){if(!b.isConstant)throw new a.NonExpression;return this.times(1/b.constant)}},addExpression:function(b,c,d,e){return b instanceof a.AbstractVariable&&(b=new a.Expression(b),a.trace&&console.log(\"addExpression: Had to cast a var to an expression\")),c=c||1,this.constant+=c*b.constant,b.terms.each(function(a,b){this.addVariable(a,b*c,d,e)},this),this},addVariable:function(b,c,d,e){null==c&&(c=1),a.trace&&console.log(\"c.Expression::addVariable():\",b,c);var f=this.terms.get(b);if(f){var g=f+c;0==g||a.approx(g,0)?(e&&e.noteRemovedVariable(b,d),this.terms.delete(b)):this.setVariable(b,g)}else a.approx(c,0)||(this.setVariable(b,c),e&&e.noteAddedVariable(b,d));return this},setVariable:function(a,b){return this.terms.set(a,b),this},anyPivotableVariable:function(){if(this.isConstant)throw new a.InternalError(\"anyPivotableVariable called on a constant\");var b=this.terms.escapingEach(function(a){return a.isPivotable?{retval:a}:void 0});return b&&void 0!==b.retval?b.retval:null},substituteOut:function(b,c,d,e){a.trace&&(a.fnenterprint(\"CLE:substituteOut: \"+b+\", \"+c+\", \"+d+\", ...\"),a.traceprint(\"this = \"+this));var f=this.setVariable.bind(this),g=this.terms,h=g.get(b);g.delete(b),this.constant+=h*c.constant,c.terms.each(function(b,c){var i=g.get(b);if(i){var j=i+h*c;a.approx(j,0)?(e.noteRemovedVariable(b,d),g.delete(b)):f(b,j)}else f(b,h*c),e&&e.noteAddedVariable(b,d)}),a.trace&&a.traceprint(\"Now this is \"+this)},changeSubject:function(a,b){this.setVariable(a,this.newSubject(b))},newSubject:function(b){a.trace&&a.fnenterprint(\"newSubject:\"+b);var c=1/this.terms.get(b);return this.terms.delete(b),this.multiplyMe(-c),c},coefficientFor:function(a){return this.terms.get(a)||0},get isConstant(){return 0==this.terms.size},toString:function(){var b=\"\",c=!1;if(!a.approx(this.constant,0)||this.isConstant){if(b+=this.constant,this.isConstant)return b;c=!0}return this.terms.each(function(a,d){c&&(b+=\" + \"),b+=d+\"*\"+a,c=!0}),b},equals:function(b){return b===this?!0:b instanceof a.Expression&&b.constant===this.constant&&b.terms.equals(this.terms)},Plus:function(a,b){return a.plus(b)},Minus:function(a,b){return a.minus(b)},Times:function(a,b){return a.times(b)},Divide:function(a,b){return a.divide(b)}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.AbstractConstraint=a.inherit({initialize:function(b,c){this.hashCode=a._inc(),this.strength=b||a.Strength.required,this.weight=c||1},isEditConstraint:!1,isInequality:!1,isStayConstraint:!1,get required(){return this.strength===a.Strength.required},toString:function(){return this.strength+\" {\"+this.weight+\"} (\"+this.expression+\")\"}});var b=a.AbstractConstraint.prototype.toString,c=function(b,c,d){a.AbstractConstraint.call(this,c||a.Strength.strong,d),this.variable=b,this.expression=new a.Expression(b,-1,b.value)};a.EditConstraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isEditConstraint:!0,toString:function(){return\"edit:\"+b.call(this)}}),a.StayConstraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(){c.apply(this,arguments)},isStayConstraint:!0,toString:function(){return\"stay:\"+b.call(this)}});var d=a.Constraint=a.inherit({\"extends\":a.AbstractConstraint,initialize:function(b,c,d){a.AbstractConstraint.call(this,c,d),this.expression=b}});a.Inequality=a.inherit({\"extends\":a.Constraint,_cloneOrNewCle:function(b){return b.clone?b.clone():new a.Expression(b)},initialize:function(b,c,e,f,g){var h=b instanceof a.Expression,i=e instanceof a.Expression,j=b instanceof a.AbstractVariable,k=e instanceof a.AbstractVariable,l=\"number\"==typeof b,m=\"number\"==typeof e;if((h||l)&&k){var n=b,o=c,p=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.GEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addVariable(p,-1)}}else if(j&&(i||m)){var n=e,o=c,p=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(n),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addVariable(p);else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addVariable(p,-1)}}else{if(h&&m){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.LEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.GEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(l&&i){var s=e,o=c,t=b,q=f,r=g;if(d.call(this,this._cloneOrNewCle(s),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(t));else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(t),-1)}return this}if(h&&i){var s=b,o=c,t=e,q=f,r=g;if(d.call(this,this._cloneOrNewCle(t),q,r),o==a.GEQ)this.expression.multiplyMe(-1),this.expression.addExpression(this._cloneOrNewCle(s));else{if(o!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");this.expression.addExpression(this._cloneOrNewCle(s),-1)}}else{if(h)return d.call(this,b,c,e);if(c==a.GEQ)d.call(this,new a.Expression(e),f,g),this.expression.multiplyMe(-1),this.expression.addVariable(b);else{if(c!=a.LEQ)throw new a.InternalError(\"Invalid operator in c.Inequality constructor\");d.call(this,new a.Expression(e),f,g),this.expression.addVariable(b,-1)}}}},isInequality:!0,toString:function(){return d.prototype.toString.call(this)+\" >= 0) id: \"+this.hashCode}}),a.Equation=a.inherit({\"extends\":a.Constraint,initialize:function(b,c,e,f){if(b instanceof a.Expression&&!c||c instanceof a.Strength)d.call(this,b,c,e);else if(b instanceof a.AbstractVariable&&c instanceof a.Expression){var g=b,h=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.AbstractVariable&&\"number\"==typeof c){var g=b,k=c,i=e,j=f;d.call(this,new a.Expression(k),i,j),this.expression.addVariable(g,-1)}else if(b instanceof a.Expression&&c instanceof a.AbstractVariable){var h=b,g=c,i=e,j=f;d.call(this,h.clone(),i,j),this.expression.addVariable(g,-1)}else{if(!(b instanceof a.Expression||b instanceof a.AbstractVariable||\"number\"==typeof b)||!(c instanceof a.Expression||c instanceof a.AbstractVariable||\"number\"==typeof c))throw\"Bad initializer to c.Equation\";b=b instanceof a.Expression?b.clone():new a.Expression(b),c=c instanceof a.Expression?c.clone():new a.Expression(c),d.call(this,b,e,f),this.expression.addExpression(c,-1)}a.assert(this.strength instanceof a.Strength,\"_strength not set\")},toString:function(){return d.prototype.toString.call(this)+\" = 0)\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.EditInfo=a.inherit({initialize:function(a,b,c,d,e){this.constraint=a,this.editPlus=b,this.editMinus=c,this.prevEditConstant=d,this.index=e},toString:function(){return\"<cn=\"+this.constraint+\", ep=\"+this.editPlus+\", em=\"+this.editMinus+\", pec=\"+this.prevEditConstant+\", index=\"+this.index+\">\"}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Tableau=a.inherit({initialize:function(){this.columns=new a.HashTable,this.rows=new a.HashTable,this._infeasibleRows=new a.HashSet,this._externalRows=new a.HashSet,this._externalParametricVars=new a.HashSet},noteRemovedVariable:function(b,c){a.trace&&console.log(\"c.Tableau::noteRemovedVariable: \",b,c);var d=this.columns.get(b);c&&d&&d.delete(c)},noteAddedVariable:function(a,b){b&&this.insertColVar(a,b)},getInternalInfo:function(){var a=\"Tableau Information:\\n\";return a+=\"Rows: \"+this.rows.size,a+=\" (= \"+(this.rows.size-1)+\" constraints)\",a+=\"\\nColumns: \"+this.columns.size,a+=\"\\nInfeasible Rows: \"+this._infeasibleRows.size,a+=\"\\nExternal basic variables: \"+this._externalRows.size,a+=\"\\nExternal parametric variables: \",a+=this._externalParametricVars.size,a+=\"\\n\"},toString:function(){var a=\"Tableau:\\n\";return this.rows.each(function(b,c){a+=b,a+=\" <==> \",a+=c,a+=\"\\n\"}),a+=\"\\nColumns:\\n\",a+=this.columns,a+=\"\\nInfeasible rows: \",a+=this._infeasibleRows,a+=\"External basic variables: \",a+=this._externalRows,a+=\"External parametric variables: \",a+=this._externalParametricVars},insertColVar:function(b,c){var d=this.columns.get(b);d||(d=new a.HashSet,this.columns.set(b,d)),d.add(c)},addRow:function(b,c){a.trace&&a.fnenterprint(\"addRow: \"+b+\", \"+c),this.rows.set(b,c),c.terms.each(function(a){this.insertColVar(a,b),a.isExternal&&this._externalParametricVars.add(a)},this),b.isExternal&&this._externalRows.add(b),a.trace&&a.traceprint(\"\"+this)},removeColumn:function(b){a.trace&&a.fnenterprint(\"removeColumn:\"+b);var c=this.columns.get(b);c?(this.columns.delete(b),c.each(function(a){var c=this.rows.get(a);c.terms.delete(b)},this)):a.trace&&console.log(\"Could not find var\",b,\"in columns\"),b.isExternal&&(this._externalRows.delete(b),this._externalParametricVars.delete(b))},removeRow:function(b){a.trace&&a.fnenterprint(\"removeRow:\"+b);var c=this.rows.get(b);return a.assert(null!=c),c.terms.each(function(c){var e=this.columns.get(c);null!=e&&(a.trace&&console.log(\"removing from varset:\",b),e.delete(b))},this),this._infeasibleRows.delete(b),b.isExternal&&this._externalRows.delete(b),this.rows.delete(b),a.trace&&a.fnexitprint(\"returning \"+c),c},substituteOut:function(b,c){a.trace&&a.fnenterprint(\"substituteOut:\"+b+\", \"+c),a.trace&&a.traceprint(\"\"+this);var d=this.columns.get(b);d.each(function(a){var d=this.rows.get(a);d.substituteOut(b,c,a,this),a.isRestricted&&0>d.constant&&this._infeasibleRows.add(a)},this),b.isExternal&&(this._externalRows.add(b),this._externalParametricVars.delete(b)),this.columns.delete(b)},columnsHasKey:function(a){return!!this.columns.get(a)}})}(this.c||module.parent.exports||{}),function(a){var b=a.Tableau,c=b.prototype,d=1e-8,e=a.Strength.weak;a.SimplexSolver=a.inherit({\"extends\":a.Tableau,initialize:function(){a.Tableau.call(this),this._stayMinusErrorVars=[],this._stayPlusErrorVars=[],this._errorVars=new a.HashTable,this._markerVars=new a.HashTable,this._objective=new a.ObjectiveVariable({name:\"Z\"}),this._editVarMap=new a.HashTable,this._editVarList=[],this._slackCounter=0,this._artificialCounter=0,this._dummyCounter=0,this.autoSolve=!0,this._fNeedsSolving=!1,this._optimizeCount=0,this.rows.set(this._objective,new a.Expression),this._stkCedcns=[0],a.trace&&a.traceprint(\"objective expr == \"+this.rows.get(this._objective))},addLowerBound:function(b,c){var d=new a.Inequality(b,a.GEQ,new a.Expression(c));return this.addConstraint(d)},addUpperBound:function(b,c){var d=new a.Inequality(b,a.LEQ,new a.Expression(c));return this.addConstraint(d)},addBounds:function(a,b,c){return this.addLowerBound(a,b),this.addUpperBound(a,c),this},add:function(){for(var a=0;arguments.length>a;a++)this.addConstraint(arguments[a]);return this},addConstraint:function(b){a.trace&&a.fnenterprint(\"addConstraint: \"+b);var c=Array(2),d=Array(1),e=this.newExpression(b,c,d);if(d=d[0],this.tryAddingDirectly(e)||this.addWithArtificialVariable(e),this._fNeedsSolving=!0,b.isEditConstraint){var f=this._editVarMap.size,g=c[0],h=c[1];!g instanceof a.SlackVariable&&console.warn(\"cvEplus not a slack variable =\",g),!h instanceof a.SlackVariable&&console.warn(\"cvEminus not a slack variable =\",h),a.debug&&console.log(\"new c.EditInfo(\"+b+\", \"+g+\", \"+h+\", \"+d+\", \"+f+\")\");var i=new a.EditInfo(b,g,h,d,f);this._editVarMap.set(b.variable,i),this._editVarList[f]={v:b.variable,info:i}}return this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},addConstraintNoException:function(b){a.trace&&a.fnenterprint(\"addConstraintNoException: \"+b);try{return this.addConstraint(b),!0}catch(c){return!1}},addEditVar:function(b,c){return a.trace&&a.fnenterprint(\"addEditVar: \"+b+\" @ \"+c),this.addConstraint(new a.EditConstraint(b,c||a.Strength.strong))},beginEdit:function(){return a.assert(this._editVarMap.size>0,\"_editVarMap.size > 0\"),this._infeasibleRows.clear(),this._resetStayConstants(),this._stkCedcns.push(this._editVarMap.size),this},endEdit:function(){return a.assert(this._editVarMap.size>0,\"_editVarMap.size > 0\"),this.resolve(),this._stkCedcns.pop(),this.removeEditVarsTo(this._stkCedcns[this._stkCedcns.length-1]),this},removeAllEditVars:function(){return this.removeEditVarsTo(0)},removeEditVarsTo:function(b){try{for(var c=this._editVarList.length,d=b;c>d;d++)this._editVarList[d]&&this.removeConstraint(this._editVarMap.get(this._editVarList[d].v).constraint);return this._editVarList.length=b,a.assert(this._editVarMap.size==b,\"_editVarMap.size == n\"),this}catch(e){throw new a.InternalError(\"Constraint not found in removeEditVarsTo\")}},addPointStays:function(b){return a.trace&&console.log(\"addPointStays\",b),b.forEach(function(a,b){this.addStay(a.x,e,Math.pow(2,b)),this.addStay(a.y,e,Math.pow(2,b))},this),this},addStay:function(b,c,d){var f=new a.StayConstraint(b,c||e,d||1);return this.addConstraint(f)},removeConstraint:function(a){return this.removeConstraintInternal(a),this},removeConstraintInternal:function(b){a.trace&&a.fnenterprint(\"removeConstraintInternal: \"+b),a.trace&&a.traceprint(\"\"+this),this._fNeedsSolving=!0,this._resetStayConstants();var c=this.rows.get(this._objective),d=this._errorVars.get(b);a.trace&&a.traceprint(\"eVars == \"+d),null!=d&&d.each(function(e){var f=this.rows.get(e);null==f?c.addVariable(e,-b.weight*b.strength.symbolicWeight.value,this._objective,this):c.addExpression(f,-b.weight*b.strength.symbolicWeight.value,this._objective,this),a.trace&&a.traceprint(\"now eVars == \"+d)},this);var e=this._markerVars.get(b);if(this._markerVars.delete(b),null==e)throw new a.InternalError(\"Constraint not found in removeConstraintInternal\");if(a.trace&&a.traceprint(\"Looking to remove var \"+e),null==this.rows.get(e)){var f=this.columns.get(e);a.trace&&a.traceprint(\"Must pivot -- columns are \"+f);var g=null,h=0;f.each(function(b){if(b.isRestricted){var c=this.rows.get(b),d=c.coefficientFor(e);if(a.trace&&a.traceprint(\"Marker \"+e+\"'s coefficient in \"+c+\" is \"+d),0>d){var f=-c.constant/d;(null==g||h>f||a.approx(f,h)&&b.hashCode<g.hashCode)&&(h=f,g=b)}}},this),null==g&&(a.trace&&a.traceprint(\"exitVar is still null\"),f.each(function(a){if(a.isRestricted){var b=this.rows.get(a),c=b.coefficientFor(e),d=b.constant/c;(null==g||h>d)&&(h=d,g=a)}},this)),null==g&&(0==f.size?this.removeColumn(e):f.escapingEach(function(a){return a!=this._objective?(g=a,{brk:!0}):void 0},this)),null!=g&&this.pivot(e,g)}if(null!=this.rows.get(e)&&this.removeRow(e),null!=d&&d.each(function(a){a!=e&&this.removeColumn(a)},this),b.isStayConstraint){if(null!=d)for(var j=0;this._stayPlusErrorVars.length>j;j++)d.delete(this._stayPlusErrorVars[j]),d.delete(this._stayMinusErrorVars[j])}else if(b.isEditConstraint){a.assert(null!=d,\"eVars != null\");var k=this._editVarMap.get(b.variable);this.removeColumn(k.editMinus),this._editVarMap.delete(b.variable)}return null!=d&&this._errorVars.delete(d),this.autoSolve&&(this.optimize(this._objective),this._setExternalVariables()),this},reset:function(){throw a.trace&&a.fnenterprint(\"reset\"),new a.InternalError(\"reset not implemented\")},resolveArray:function(b){a.trace&&a.fnenterprint(\"resolveArray\"+b);var c=b.length;this._editVarMap.each(function(a,d){var e=d.index;c>e&&this.suggestValue(a,b[e])},this),this.resolve()},resolvePair:function(a,b){this.suggestValue(this._editVarList[0].v,a),this.suggestValue(this._editVarList[1].v,b),this.resolve()},resolve:function(){a.trace&&a.fnenterprint(\"resolve()\"),this.dualOptimize(),this._setExternalVariables(),this._infeasibleRows.clear(),this._resetStayConstants()},suggestValue:function(b,c){a.trace&&console.log(\"suggestValue(\"+b+\", \"+c+\")\");var d=this._editVarMap.get(b);if(!d)throw new a.Error(\"suggestValue for variable \"+b+\", but var is not an edit variable\");var e=c-d.prevEditConstant;return d.prevEditConstant=c,this.deltaEditConstant(e,d.editPlus,d.editMinus),this},solve:function(){return this._fNeedsSolving&&(this.optimize(this._objective),this._setExternalVariables()),this},setEditedValue:function(b,c){if(!this.columnsHasKey(b)&&null==this.rows.get(b))return b.value=c,this;if(!a.approx(c,b.value)){this.addEditVar(b),this.beginEdit();try{this.suggestValue(b,c)}catch(d){throw new a.InternalError(\"Error in setEditedValue\")}this.endEdit()}return this},addVar:function(b){if(!this.columnsHasKey(b)&&null==this.rows.get(b)){try{this.addStay(b)}catch(c){throw new a.InternalError(\"Error in addVar -- required failure is impossible\")}a.trace&&a.traceprint(\"added initial stay on \"+b)}return this},getInternalInfo:function(){var a=c.getInternalInfo.call(this);return a+=\"\\nSolver info:\\n\",a+=\"Stay Error Variables: \",a+=this._stayPlusErrorVars.length+this._stayMinusErrorVars.length,a+=\" (\"+this._stayPlusErrorVars.length+\" +, \",a+=this._stayMinusErrorVars.length+\" -)\\n\",a+=\"Edit Variables: \"+this._editVarMap.size,a+=\"\\n\"},getDebugInfo:function(){return\"\"+this+this.getInternalInfo()+\"\\n\"},toString:function(){var a=c.getInternalInfo.call(this);return a+=\"\\n_stayPlusErrorVars: \",a+=\"[\"+this._stayPlusErrorVars+\"]\",a+=\"\\n_stayMinusErrorVars: \",a+=\"[\"+this._stayMinusErrorVars+\"]\",a+=\"\\n\",a+=\"_editVarMap:\\n\"+this._editVarMap,a+=\"\\n\"},getConstraintMap:function(){return this._markerVars},addWithArtificialVariable:function(b){a.trace&&a.fnenterprint(\"addWithArtificialVariable: \"+b);var c=new a.SlackVariable({value:++this._artificialCounter,prefix:\"a\"}),d=new a.ObjectiveVariable({name:\"az\"}),e=b.clone();a.trace&&a.traceprint(\"before addRows:\\n\"+this),this.addRow(d,e),this.addRow(c,b),a.trace&&a.traceprint(\"after addRows:\\n\"+this),this.optimize(d);var f=this.rows.get(d);if(a.trace&&a.traceprint(\"azTableauRow.constant == \"+f.constant),!a.approx(f.constant,0))throw this.removeRow(d),this.removeColumn(c),new a.RequiredFailure;var g=this.rows.get(c);if(null!=g){if(g.isConstant)return this.removeRow(c),this.removeRow(d),void 0;var h=g.anyPivotableVariable();this.pivot(h,c)}a.assert(null==this.rows.get(c),\"rowExpression(av) == null\"),this.removeColumn(c),this.removeRow(d)},tryAddingDirectly:function(b){a.trace&&a.fnenterprint(\"tryAddingDirectly: \"+b);var c=this.chooseSubject(b);return null==c?(a.trace&&a.fnexitprint(\"returning false\"),!1):(b.newSubject(c),this.columnsHasKey(c)&&this.substituteOut(c,b),this.addRow(c,b),a.trace&&a.fnexitprint(\"returning true\"),!0)},chooseSubject:function(b){a.trace&&a.fnenterprint(\"chooseSubject: \"+b);var c=null,d=!1,e=!1,f=b.terms,g=f.escapingEach(function(a,b){if(d){if(!a.isRestricted&&!this.columnsHasKey(a))return{retval:a}}else if(a.isRestricted){if(!e&&!a.isDummy&&0>b){var f=this.columns.get(a);(null==f||1==f.size&&this.columnsHasKey(this._objective))&&(c=a,e=!0)}}else c=a,d=!0},this);if(g&&void 0!==g.retval)return g.retval;if(null!=c)return c;var h=0,g=f.escapingEach(function(a,b){return a.isDummy?(this.columnsHasKey(a)||(c=a,h=b),void 0):{retval:null}},this);if(g&&void 0!==g.retval)return g.retval;if(!a.approx(b.constant,0))throw new a.RequiredFailure;return h>0&&b.multiplyMe(-1),c},deltaEditConstant:function(b,c,d){a.trace&&a.fnenterprint(\"deltaEditConstant :\"+b+\", \"+c+\", \"+d);var e=this.rows.get(c);if(null!=e)return e.constant+=b,0>e.constant&&this._infeasibleRows.add(c),void 0;var f=this.rows.get(d);if(null!=f)return f.constant+=-b,0>f.constant&&this._infeasibleRows.add(d),void 0;var g=this.columns.get(d);g||console.log(\"columnVars is null -- tableau is:\\n\"+this),g.each(function(a){var c=this.rows.get(a),e=c.coefficientFor(d);c.constant+=e*b,a.isRestricted&&0>c.constant&&this._infeasibleRows.add(a)},this)},dualOptimize:function(){a.trace&&a.fnenterprint(\"dualOptimize:\");for(var b=this.rows.get(this._objective);this._infeasibleRows.size;){var c=this._infeasibleRows.values()[0];this._infeasibleRows.delete(c);var d=null,e=this.rows.get(c);if(e&&0>e.constant){var g,f=Number.MAX_VALUE,h=e.terms;if(h.each(function(c,e){if(e>0&&c.isPivotable){var h=b.coefficientFor(c);g=h/e,(f>g||a.approx(g,f)&&c.hashCode<d.hashCode)&&(d=c,f=g)}}),f==Number.MAX_VALUE)throw new a.InternalError(\"ratio == nil (MAX_VALUE) in dualOptimize\");this.pivot(d,c)}}},newExpression:function(b,c,d){a.trace&&(a.fnenterprint(\"newExpression: \"+b),a.traceprint(\"cn.isInequality == \"+b.isInequality),a.traceprint(\"cn.required == \"+b.required));var e=b.expression,f=new a.Expression(e.constant),g=new a.SlackVariable,h=new a.DummyVariable,i=new a.SlackVariable,j=new a.SlackVariable,k=e.terms;if(k.each(function(a,b){var c=this.rows.get(a);c?f.addExpression(c,b):f.addVariable(a,b)},this),b.isInequality){if(a.trace&&a.traceprint(\"Inequality, adding slack\"),++this._slackCounter,g=new a.SlackVariable({value:this._slackCounter,prefix:\"s\"}),f.setVariable(g,-1),this._markerVars.set(b,g),!b.required){++this._slackCounter,i=new a.SlackVariable({value:this._slackCounter,prefix:\"em\"}),f.setVariable(i,1);\nvar l=this.rows.get(this._objective);l.setVariable(i,b.strength.symbolicWeight.value*b.weight),this.insertErrorVar(b,i),this.noteAddedVariable(i,this._objective)}}else if(b.required)a.trace&&a.traceprint(\"Equality, required\"),++this._dummyCounter,h=new a.DummyVariable({value:this._dummyCounter,prefix:\"d\"}),f.setVariable(h,1),this._markerVars.set(b,h),a.trace&&a.traceprint(\"Adding dummyVar == d\"+this._dummyCounter);else{a.trace&&a.traceprint(\"Equality, not required\"),++this._slackCounter,j=new a.SlackVariable({value:this._slackCounter,prefix:\"ep\"}),i=new a.SlackVariable({value:this._slackCounter,prefix:\"em\"}),f.setVariable(j,-1),f.setVariable(i,1),this._markerVars.set(b,j);var l=this.rows.get(this._objective);a.trace&&console.log(l);var m=b.strength.symbolicWeight.value*b.weight;0==m&&(a.trace&&a.traceprint(\"cn == \"+b),a.trace&&a.traceprint(\"adding \"+j+\" and \"+i+\" with swCoeff == \"+m)),l.setVariable(j,m),this.noteAddedVariable(j,this._objective),l.setVariable(i,m),this.noteAddedVariable(i,this._objective),this.insertErrorVar(b,i),this.insertErrorVar(b,j),b.isStayConstraint?(this._stayPlusErrorVars.push(j),this._stayMinusErrorVars.push(i)):b.isEditConstraint&&(c[0]=j,c[1]=i,d[0]=e.constant)}return 0>f.constant&&f.multiplyMe(-1),a.trace&&a.fnexitprint(\"returning \"+f),f},optimize:function(b){a.trace&&a.fnenterprint(\"optimize: \"+b),a.trace&&a.traceprint(\"\"+this),this._optimizeCount++;var c=this.rows.get(b);a.assert(null!=c,\"zRow != null\");for(var g,h,e=null,f=null;;){if(g=0,h=c.terms,h.escapingEach(function(a,b){return a.isPivotable&&g>b?(g=b,e=a,{brk:1}):void 0},this),g>=-d)return;a.trace&&console.log(\"entryVar:\",e,\"objectiveCoeff:\",g);var i=Number.MAX_VALUE,j=this.columns.get(e),k=0;if(j.each(function(b){if(a.trace&&a.traceprint(\"Checking \"+b),b.isPivotable){var c=this.rows.get(b),d=c.coefficientFor(e);a.trace&&a.traceprint(\"pivotable, coeff = \"+d),0>d&&(k=-c.constant/d,(i>k||a.approx(k,i)&&b.hashCode<f.hashCode)&&(i=k,f=b))}},this),i==Number.MAX_VALUE)throw new a.InternalError(\"Objective function is unbounded in optimize\");this.pivot(e,f),a.trace&&a.traceprint(\"\"+this)}},pivot:function(b,c){a.trace&&console.log(\"pivot: \",b,c);var d=!1;d&&console.time(\" SimplexSolver::pivot\"),null==b&&console.warn(\"pivot: entryVar == null\"),null==c&&console.warn(\"pivot: exitVar == null\"),d&&console.time(\"  removeRow\");var e=this.removeRow(c);d&&console.timeEnd(\"  removeRow\"),d&&console.time(\"  changeSubject\"),e.changeSubject(c,b),d&&console.timeEnd(\"  changeSubject\"),d&&console.time(\"  substituteOut\"),this.substituteOut(b,e),d&&console.timeEnd(\"  substituteOut\"),d&&console.time(\"  addRow\"),this.addRow(b,e),d&&console.timeEnd(\"  addRow\"),d&&console.timeEnd(\" SimplexSolver::pivot\")},_resetStayConstants:function(){a.trace&&console.log(\"_resetStayConstants\");for(var b=0;this._stayPlusErrorVars.length>b;b++){var c=this.rows.get(this._stayPlusErrorVars[b]);null==c&&(c=this.rows.get(this._stayMinusErrorVars[b])),null!=c&&(c.constant=0)}},_setExternalVariables:function(){a.trace&&a.fnenterprint(\"_setExternalVariables:\"),a.trace&&a.traceprint(\"\"+this),this._externalParametricVars.each(function(b){null!=this.rows.get(b)?a.trace&&console.log(\"Error: variable\"+b+\" in _externalParametricVars is basic\"):b.value=0},this),this._externalRows.each(function(a){var b=this.rows.get(a);a.value!=b.constant&&(a.value=b.constant)},this),this._fNeedsSolving=!1,this.onsolved()},onsolved:function(){},insertErrorVar:function(b,c){a.trace&&a.fnenterprint(\"insertErrorVar:\"+b+\", \"+c);var d=this._errorVars.get(c);d||(d=new a.HashSet,this._errorVars.set(b,d)),d.add(c)}})}(this.c||module.parent.exports||{}),function(a){\"use strict\";a.Timer=a.inherit({initialize:function(){this.isRunning=!1,this._elapsedMs=0},start:function(){return this.isRunning=!0,this._startReading=new Date,this},stop:function(){return this.isRunning=!1,this._elapsedMs+=new Date-this._startReading,this},reset:function(){return this.isRunning=!1,this._elapsedMs=0,this},elapsedTime:function(){return this.isRunning?(this._elapsedMs+(new Date-this._startReading))/1e3:this._elapsedMs/1e3}})}(this.c||module.parent.exports||{}),__cassowary_parser=function(){function a(a){return'\"'+a.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\x08/g,\"\\\\b\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\f/g,\"\\\\f\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x07\\x0B\\x0E-\\x1F\\x80-\\uFFFF]/g,escape)+'\"'}var b={parse:function(b,c){function k(a){g>e||(e>g&&(g=e,h=[]),h.push(a))}function l(){var a,b,c,d,f;if(d=e,f=e,a=z(),null!==a){if(c=m(),null!==c)for(b=[];null!==c;)b.push(c),c=m();else b=null;null!==b?(c=z(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)}else a=null,e=f;return null!==a&&(a=function(a,b){return b}(d,a[1])),null===a&&(e=d),a}function m(){var a,b,c,d;return c=e,d=e,a=P(),null!==a?(b=s(),null!==b?a=[a,b]:(a=null,e=d)):(a=null,e=d),null!==a&&(a=function(a,b){return b}(c,a[0])),null===a&&(e=c),a}function n(){var a;return b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k(\"any character\")),a}function o(){var a;return/^[a-zA-Z]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[a-zA-Z]\")),null===a&&(36===b.charCodeAt(e)?(a=\"$\",e++):(a=null,0===f&&k('\"$\"')),null===a&&(95===b.charCodeAt(e)?(a=\"_\",e++):(a=null,0===f&&k('\"_\"')))),a}function p(){var a;return f++,/^[\\t\\x0B\\f \\xA0\\uFEFF]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\t\\\\x0B\\\\f \\\\xA0\\\\uFEFF]\")),f--,0===f&&null===a&&k(\"whitespace\"),a}function q(){var a;return/^[\\n\\r\\u2028\\u2029]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\n\\\\r\\\\u2028\\\\u2029]\")),a}function r(){var a;return f++,10===b.charCodeAt(e)?(a=\"\\n\",e++):(a=null,0===f&&k('\"\\\\n\"')),null===a&&(\"\\r\\n\"===b.substr(e,2)?(a=\"\\r\\n\",e+=2):(a=null,0===f&&k('\"\\\\r\\\\n\"')),null===a&&(13===b.charCodeAt(e)?(a=\"\\r\",e++):(a=null,0===f&&k('\"\\\\r\"')),null===a&&(8232===b.charCodeAt(e)?(a=\"\\u2028\",e++):(a=null,0===f&&k('\"\\\\u2028\"')),null===a&&(8233===b.charCodeAt(e)?(a=\"\\u2029\",e++):(a=null,0===f&&k('\"\\\\u2029\"')))))),f--,0===f&&null===a&&k(\"end of line\"),a}function s(){var a,c,d;return d=e,a=z(),null!==a?(59===b.charCodeAt(e)?(c=\";\",e++):(c=null,0===f&&k('\";\"')),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=y(),null!==a?(c=r(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d),null===a&&(d=e,a=z(),null!==a?(c=t(),null!==c?a=[a,c]:(a=null,e=d)):(a=null,e=d))),a}function t(){var a,c;return c=e,f++,b.length>e?(a=b.charAt(e),e++):(a=null,0===f&&k(\"any character\")),f--,null===a?a=\"\":(a=null,e=c),a}function u(){var a;return f++,a=v(),null===a&&(a=x()),f--,0===f&&null===a&&k(\"comment\"),a}function v(){var a,c,d,g,h,i,j;if(h=e,\"/*\"===b.substr(e,2)?(a=\"/*\",e+=2):(a=null,0===f&&k('\"/*\"')),null!==a){for(c=[],i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?(\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function w(){var a,c,d,g,h,i,j;if(h=e,\"/*\"===b.substr(e,2)?(a=\"/*\",e+=2):(a=null,0===f&&k('\"/*\"')),null!==a){for(c=[],i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null===d&&(d=q()),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null===d&&(d=q()),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?(\"*/\"===b.substr(e,2)?(d=\"*/\",e+=2):(d=null,0===f&&k('\"*/\"')),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)}else a=null,e=h;return a}function x(){var a,c,d,g,h,i,j;if(h=e,\"//\"===b.substr(e,2)?(a=\"//\",e+=2):(a=null,0===f&&k('\"//\"')),null!==a){for(c=[],i=e,j=e,f++,d=q(),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==d;)c.push(d),i=e,j=e,f++,d=q(),f--,null===d?d=\"\":(d=null,e=j),null!==d?(g=n(),null!==g?d=[d,g]:(d=null,e=i)):(d=null,e=i);null!==c?a=[a,c]:(a=null,e=h)}else a=null,e=h;return a}function y(){var a,b;for(a=[],b=p(),null===b&&(b=w(),null===b&&(b=x()));null!==b;)a.push(b),b=p(),null===b&&(b=w(),null===b&&(b=x()));return a}function z(){var a,b;for(a=[],b=p(),null===b&&(b=r(),null===b&&(b=u()));null!==b;)a.push(b),b=p(),null===b&&(b=r(),null===b&&(b=u()));return a}function A(){var a,b;return b=e,a=C(),null===a&&(a=B()),null!==a&&(a=function(a,b){return{type:\"NumericLiteral\",value:b}}(b,a)),null===a&&(e=b),a}function B(){var a,c,d;if(d=e,/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k(\"[0-9]\")),null!==c)for(a=[];null!==c;)a.push(c),/^[0-9]/.test(b.charAt(e))?(c=b.charAt(e),e++):(c=null,0===f&&k(\"[0-9]\"));else a=null;return null!==a&&(a=function(a,b){return parseInt(b.join(\"\"))}(d,a)),null===a&&(e=d),a}function C(){var a,c,d,g,h;return g=e,h=e,a=B(),null!==a?(46===b.charCodeAt(e)?(c=\".\",e++):(c=null,0===f&&k('\".\"')),null!==c?(d=B(),null!==d?a=[a,c,d]:(a=null,e=h)):(a=null,e=h)):(a=null,e=h),null!==a&&(a=function(a,b){return parseFloat(b.join(\"\"))}(g,a)),null===a&&(e=g),a}function D(){var a,c,d,g;if(g=e,/^[\\-+]/.test(b.charAt(e))?(a=b.charAt(e),e++):(a=null,0===f&&k(\"[\\\\-+]\")),a=null!==a?a:\"\",null!==a){if(/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k(\"[0-9]\")),null!==d)for(c=[];null!==d;)c.push(d),/^[0-9]/.test(b.charAt(e))?(d=b.charAt(e),e++):(d=null,0===f&&k(\"[0-9]\"));else c=null;null!==c?a=[a,c]:(a=null,e=g)}else a=null,e=g;return a}function E(){var a,b;return f++,b=e,a=F(),null!==a&&(a=function(a,b){return b}(b,a)),null===a&&(e=b),f--,0===f&&null===a&&k(\"identifier\"),a}function F(){var a,b,c,d,g;if(f++,d=e,g=e,a=o(),null!==a){for(b=[],c=o();null!==c;)b.push(c),c=o();null!==b?a=[a,b]:(a=null,e=g)}else a=null,e=g;return null!==a&&(a=function(a,b,c){return b+c.join(\"\")}(d,a[0],a[1])),null===a&&(e=d),f--,0===f&&null===a&&k(\"identifier\"),a}function G(){var a,c,d,g,h,i,j;return i=e,a=E(),null!==a&&(a=function(a,b){return{type:\"Variable\",name:b}}(i,a)),null===a&&(e=i),null===a&&(a=A(),null===a&&(i=e,j=e,40===b.charCodeAt(e)?(a=\"(\",e++):(a=null,0===f&&k('\"(\"')),null!==a?(c=z(),null!==c?(d=P(),null!==d?(g=z(),null!==g?(41===b.charCodeAt(e)?(h=\")\",e++):(h=null,0===f&&k('\")\"')),null!==h?a=[a,c,d,g,h]:(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j)):(a=null,e=j),null!==a&&(a=function(a,b){return b}(i,a[2])),null===a&&(e=i))),a}function H(){var a,b,c,d,f;return a=G(),null===a&&(d=e,f=e,a=I(),null!==a?(b=z(),null!==b?(c=H(),null!==c?a=[a,b,c]:(a=null,e=f)):(a=null,e=f)):(a=null,e=f),null!==a&&(a=function(a,b,c){return{type:\"UnaryExpression\",operator:b,expression:c}}(d,a[0],a[2])),null===a&&(e=d)),a}function I(){var a;return 43===b.charCodeAt(e)?(a=\"+\",e++):(a=null,0===f&&k('\"+\"')),null===a&&(45===b.charCodeAt(e)?(a=\"-\",e++):(a=null,0===f&&k('\"-\"')),null===a&&(33===b.charCodeAt(e)?(a=\"!\",e++):(a=null,0===f&&k('\"!\"')))),a}function J(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=H(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=K(),null!==d?(f=z(),null!==f?(g=H(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"MultiplicativeExpression\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function K(){var a;return 42===b.charCodeAt(e)?(a=\"*\",e++):(a=null,0===f&&k('\"*\"')),null===a&&(47===b.charCodeAt(e)?(a=\"/\",e++):(a=null,0===f&&k('\"/\"'))),a}function L(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=J(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=M(),null!==d?(f=z(),null!==f?(g=J(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"AdditiveExpression\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function M(){var a;return 43===b.charCodeAt(e)?(a=\"+\",e++):(a=null,0===f&&k('\"+\"')),null===a&&(45===b.charCodeAt(e)?(a=\"-\",e++):(a=null,0===f&&k('\"-\"'))),a}function N(){var a,b,c,d,f,g,h,i,j;if(h=e,i=e,a=L(),null!==a){for(b=[],j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==c;)b.push(c),j=e,c=z(),null!==c?(d=O(),null!==d?(f=z(),null!==f?(g=L(),null!==g?c=[c,d,f,g]:(c=null,e=j)):(c=null,e=j)):(c=null,e=j)):(c=null,e=j);null!==b?a=[a,b]:(a=null,e=i)}else a=null,e=i;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"Inequality\",operator:c[e][1],left:d,right:c[e][3]};return d}(h,a[0],a[1])),null===a&&(e=h),a}function O(){var a;return\"<=\"===b.substr(e,2)?(a=\"<=\",e+=2):(a=null,0===f&&k('\"<=\"')),null===a&&(\">=\"===b.substr(e,2)?(a=\">=\",e+=2):(a=null,0===f&&k('\">=\"')),null===a&&(60===b.charCodeAt(e)?(a=\"<\",e++):(a=null,0===f&&k('\"<\"')),null===a&&(62===b.charCodeAt(e)?(a=\">\",e++):(a=null,0===f&&k('\">\"'))))),a}function P(){var a,c,d,g,h,i,j,l,m;if(j=e,l=e,a=N(),null!==a){for(c=[],m=e,d=z(),null!==d?(\"==\"===b.substr(e,2)?(g=\"==\",e+=2):(g=null,0===f&&k('\"==\"')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==d;)c.push(d),m=e,d=z(),null!==d?(\"==\"===b.substr(e,2)?(g=\"==\",e+=2):(g=null,0===f&&k('\"==\"')),null!==g?(h=z(),null!==h?(i=N(),null!==i?d=[d,g,h,i]:(d=null,e=m)):(d=null,e=m)):(d=null,e=m)):(d=null,e=m);null!==c?a=[a,c]:(a=null,e=l)}else a=null,e=l;return null!==a&&(a=function(a,b,c){for(var d=b,e=0;c.length>e;e++)d={type:\"Equality\",operator:c[e][1],left:d,right:c[e][3]};return d}(j,a[0],a[1])),null===a&&(e=j),a}function Q(a){a.sort();for(var b=null,c=[],d=0;a.length>d;d++)a[d]!==b&&(c.push(a[d]),b=a[d]);return c}function R(){for(var a=1,c=1,d=!1,f=0;Math.max(e,g)>f;f++){var h=b.charAt(f);\"\\n\"===h?(d||a++,c=1,d=!1):\"\\r\"===h||\"\\u2028\"===h||\"\\u2029\"===h?(a++,c=1,d=!0):(c++,d=!1)}return{line:a,column:c}}var d={start:l,Statement:m,SourceCharacter:n,IdentifierStart:o,WhiteSpace:p,LineTerminator:q,LineTerminatorSequence:r,EOS:s,EOF:t,Comment:u,MultiLineComment:v,MultiLineCommentNoLineTerminator:w,SingleLineComment:x,_:y,__:z,Literal:A,Integer:B,Real:C,SignedInteger:D,Identifier:E,IdentifierName:F,PrimaryExpression:G,UnaryExpression:H,UnaryOperator:I,MultiplicativeExpression:J,MultiplicativeOperator:K,AdditiveExpression:L,AdditiveOperator:M,InequalityExpression:N,InequalityOperator:O,LinearExpression:P};if(void 0!==c){if(void 0===d[c])throw Error(\"Invalid rule name: \"+a(c)+\".\")}else c=\"start\";var e=0,f=0,g=0,h=[],S=d[c]();if(null===S||e!==b.length){var T=Math.max(e,g),U=b.length>T?b.charAt(T):null,V=R();throw new this.SyntaxError(Q(h),U,T,V.line,V.column)}return S},toSource:function(){return this._source}};return b.SyntaxError=function(b,c,d,e,f){function g(b,c){var d,e;switch(b.length){case 0:d=\"end of input\";break;case 1:d=b[0];break;default:d=b.slice(0,b.length-1).join(\", \")+\" or \"+b[b.length-1]}return e=c?a(c):\"end of input\",\"Expected \"+d+\" but \"+e+\" found.\"}this.name=\"SyntaxError\",this.expected=b,this.found=c,this.message=g(b,c),this.offset=d,this.line=e,this.column=f},b.SyntaxError.prototype=Error.prototype,b}();\n}).call(\n  (typeof module != \"undefined\") ?\n      (module.compiled = true && module) : this\n);\n"]}