From 94f732d7b0b9317e57ad43996d6aea7cfd92a017 Mon Sep 17 00:00:00 2001 From: Seth Kinast <skinast@linkedin.com> Date: Thu, 4 Sep 2014 18:40:42 -0700 Subject: [PATCH 1/3] Upgrade pegJS to 0.8 --- bower.json | 2 +- lib/parser.js | 4839 +++++++++++++-------------- package.json | 2 +- src/build.js | 5 +- src/dust.pegjs | 54 +- test/jasmine-test/spec/coreTests.js | 10 +- 6 files changed, 2366 insertions(+), 2546 deletions(-) diff --git a/bower.json b/bower.json index 156adc50..dcc8a4dd 100644 --- a/bower.json +++ b/bower.json @@ -3,7 +3,7 @@ "version": "2.3.5", "main": "dist/dust-full.min.js", "devDependencies": { - "pegjs": "0.7.0" + "pegjs": "0.8.0" }, "ignore": [ "**/.*", diff --git a/lib/parser.js b/lib/parser.js index e683df63..745acaf9 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -9,2811 +9,2630 @@ factory(root.dust); } }(this, function(dust) { - var parser = (function(){ + var parser = (function() { /* - * Generated by PEG.js 0.7.0. + * Generated by PEG.js 0.8.0. * * http://pegjs.majda.cz/ */ - - function quote(s) { - /* - * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a - * string literal except for the closing quote character, backslash, - * carriage return, line separator, paragraph separator, and line feed. - * Any character may appear in the form of an escape sequence. - * - * For portability, we also escape escape all control and non-ASCII - * characters. Note that "\0" and "\v" escape sequences are not used - * because JSHint does not like the first and IE the second. - */ - return '"' + s - .replace(/\\/g, '\\\\') // backslash - .replace(/"/g, '\\"') // closing quote character - .replace(/\x08/g, '\\b') // backspace - .replace(/\t/g, '\\t') // horizontal tab - .replace(/\n/g, '\\n') // line feed - .replace(/\f/g, '\\f') // form feed - .replace(/\r/g, '\\r') // carriage return - .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape) - + '"'; + + function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); } - - var result = { - /* - * Parses the input with a generated parser. If the parsing is successfull, - * returns a value explicitly or implicitly specified by the grammar from - * which the parser was generated (see |PEG.buildParser|). If the parsing is - * unsuccessful, throws |PEG.parser.SyntaxError| describing the error. - */ - parse: function(input, startRule) { - var parseFunctions = { - "body": parse_body, - "part": parse_part, - "section": parse_section, - "sec_tag_start": parse_sec_tag_start, - "end_tag": parse_end_tag, - "context": parse_context, - "params": parse_params, - "bodies": parse_bodies, - "reference": parse_reference, - "partial": parse_partial, - "filters": parse_filters, - "special": parse_special, - "identifier": parse_identifier, - "number": parse_number, - "float": parse_float, - "integer": parse_integer, - "path": parse_path, - "key": parse_key, - "array": parse_array, - "array_part": parse_array_part, - "inline": parse_inline, - "inline_part": parse_inline_part, - "buffer": parse_buffer, - "literal": parse_literal, - "esc": parse_esc, - "raw": parse_raw, - "comment": parse_comment, - "tag": parse_tag, - "ld": parse_ld, - "rd": parse_rd, - "lb": parse_lb, - "rb": parse_rb, - "eol": parse_eol, - "ws": parse_ws - }; - - if (startRule !== undefined) { - if (parseFunctions[startRule] === undefined) { - throw new Error("Invalid rule name: " + quote(startRule) + "."); - } - } else { - startRule = "body"; - } - - var pos = { offset: 0, line: 1, column: 1, seenCR: false }; - var reportFailures = 0; - var rightmostFailuresPos = { offset: 0, line: 1, column: 1, seenCR: false }; - var rightmostFailuresExpected = []; - - function padLeft(input, padding, length) { - var result = input; - - var padLength = length - input.length; - for (var i = 0; i < padLength; i++) { - result = padding + result; - } - - return result; - } - - function escape(ch) { - var charCode = ch.charCodeAt(0); - var escapeChar; - var length; - - if (charCode <= 0xFF) { - escapeChar = 'x'; - length = 2; - } else { - escapeChar = 'u'; - length = 4; - } - - return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length); - } - - function clone(object) { - var result = {}; - for (var key in object) { - result[key] = object[key]; - } - return result; - } - - function advance(pos, n) { - var endOffset = pos.offset + n; - - for (var offset = pos.offset; offset < endOffset; offset++) { - var ch = input.charAt(offset); + + function SyntaxError(message, expected, found, offset, line, column) { + this.message = message; + this.expected = expected; + this.found = found; + this.offset = offset; + this.line = line; + this.column = column; + + this.name = "SyntaxError"; + } + + peg$subclass(SyntaxError, Error); + + function parse(input) { + var options = arguments.length > 1 ? arguments[1] : {}, + + peg$FAILED = {}, + + peg$startRuleFunctions = { start: peg$parsestart }, + peg$startRuleFunction = peg$parsestart, + + peg$c0 = [], + peg$c1 = function(p) { return ["body"].concat(p).concat([['line', line()], ['col', column()]]) }, + peg$c2 = { type: "other", description: "section" }, + peg$c3 = peg$FAILED, + peg$c4 = null, + peg$c5 = function(t, b, e, n) {if( (!n) || (t[1].text !== n.text) ) { throw new Error("Expected end tag for "+t[1].text+" but it was not found. At line : "+line()+", column : " + column())} return true;}, + peg$c6 = void 0, + peg$c7 = function(t, b, e, n) { e.push(["param", ["literal", "block"], b]); t.push(e); return t.concat([['line', line()], ['col', column()]]) }, + peg$c8 = "/", + peg$c9 = { type: "literal", value: "/", description: "\"/\"" }, + peg$c10 = function(t) { t.push(["bodies"]); return t.concat([['line', line()], ['col', column()]]) }, + peg$c11 = /^[#?\^<+@%]/, + peg$c12 = { type: "class", value: "[#?\\^<+@%]", description: "[#?\\^<+@%]" }, + peg$c13 = function(t, n, c, p) { return [t, n, c, p] }, + peg$c14 = { type: "other", description: "end tag" }, + peg$c15 = function(n) { return n }, + peg$c16 = ":", + peg$c17 = { type: "literal", value: ":", description: "\":\"" }, + peg$c18 = function(n) {return n}, + peg$c19 = function(n) { return n ? ["context", n] : ["context"] }, + peg$c20 = { type: "other", description: "params" }, + peg$c21 = "=", + peg$c22 = { type: "literal", value: "=", description: "\"=\"" }, + peg$c23 = function(k, v) {return ["param", ["literal", k], v]}, + peg$c24 = function(p) { return ["params"].concat(p) }, + peg$c25 = { type: "other", description: "bodies" }, + peg$c26 = function(p) { return ["bodies"].concat(p) }, + peg$c27 = { type: "other", description: "reference" }, + peg$c28 = function(n, f) { return ["reference", n, f].concat([['line', line()], ['col', column()]]) }, + peg$c29 = { type: "other", description: "partial" }, + peg$c30 = ">", + peg$c31 = { type: "literal", value: ">", description: "\">\"" }, + peg$c32 = "+", + peg$c33 = { type: "literal", value: "+", description: "\"+\"" }, + peg$c34 = function(k) {return ["literal", k]}, + peg$c35 = function(s, n, c, p) { var key = (s ===">")? "partial" : s; return [key, n, c, p].concat([['line', line()], ['col', column()]]) }, + peg$c36 = { type: "other", description: "filters" }, + peg$c37 = "|", + peg$c38 = { type: "literal", value: "|", description: "\"|\"" }, + peg$c39 = function(f) { return ["filters"].concat(f) }, + peg$c40 = { type: "other", description: "special" }, + peg$c41 = "~", + peg$c42 = { type: "literal", value: "~", description: "\"~\"" }, + peg$c43 = function(k) { return ["special", k].concat([['line', line()], ['col', column()]]) }, + peg$c44 = { type: "other", description: "identifier" }, + peg$c45 = function(p) { var arr = ["path"].concat(p); arr.text = p[1].join('.'); return arr; }, + peg$c46 = function(k) { var arr = ["key", k]; arr.text = k; return arr; }, + peg$c47 = { type: "other", description: "number" }, + peg$c48 = function(n) { return ['literal', n]; }, + peg$c49 = { type: "other", description: "float" }, + peg$c50 = ".", + peg$c51 = { type: "literal", value: ".", description: "\".\"" }, + peg$c52 = function(l, r) { return parseFloat(l + "." + r.join('')); }, + peg$c53 = { type: "other", description: "integer" }, + peg$c54 = /^[0-9]/, + peg$c55 = { type: "class", value: "[0-9]", description: "[0-9]" }, + peg$c56 = function(digits) { return parseInt(digits.join(""), 10); }, + peg$c57 = { type: "other", description: "path" }, + peg$c58 = function(k, d) { + d = d[0]; + if (k && d) { + d.unshift(k); + return [false, d].concat([['line', line()], ['col', column()]]); + } + return [true, d].concat([['line', line()], ['col', column()]]); + }, + peg$c59 = function(d) { + if (d.length > 0) { + return [true, d[0]].concat([['line', line()], ['col', column()]]); + } + return [true, []].concat([['line', line()], ['col', column()]]); + }, + peg$c60 = { type: "other", description: "key" }, + peg$c61 = /^[a-zA-Z_$]/, + peg$c62 = { type: "class", value: "[a-zA-Z_$]", description: "[a-zA-Z_$]" }, + peg$c63 = /^[0-9a-zA-Z_$\-]/, + peg$c64 = { type: "class", value: "[0-9a-zA-Z_$\\-]", description: "[0-9a-zA-Z_$\\-]" }, + peg$c65 = function(h, t) { return h + t.join('') }, + peg$c66 = { type: "other", description: "array" }, + peg$c67 = function(n) {return n.join('')}, + peg$c68 = function(a) {return a; }, + peg$c69 = function(i, nk) { if(nk) { nk.unshift(i); } else {nk = [i] } return nk; }, + peg$c70 = { type: "other", description: "array_part" }, + peg$c71 = function(k) {return k}, + peg$c72 = function(d, a) { if (a) { return d.concat(a); } else { return d; } }, + peg$c73 = { type: "other", description: "inline" }, + peg$c74 = "\"", + peg$c75 = { type: "literal", value: "\"", description: "\"\\\"\"" }, + peg$c76 = function() { return ["literal", ""].concat([['line', line()], ['col', column()]]) }, + peg$c77 = function(l) { return ["literal", l].concat([['line', line()], ['col', column()]]) }, + peg$c78 = function(l) { return ["buffer", l] }, + peg$c79 = { type: "other", description: "buffer" }, + peg$c80 = function(e, w) { return ["format", e, w.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c81 = { type: "any", description: "any character" }, + peg$c82 = function(c) {return c}, + peg$c83 = function(b) { return ["buffer", b.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c84 = { type: "other", description: "literal" }, + peg$c85 = /^[^"]/, + peg$c86 = { type: "class", value: "[^\"]", description: "[^\"]" }, + peg$c87 = function(b) { return b.join('') }, + peg$c88 = "\\\"", + peg$c89 = { type: "literal", value: "\\\"", description: "\"\\\\\\\"\"" }, + peg$c90 = function() { return '"' }, + peg$c91 = { type: "other", description: "raw" }, + peg$c92 = "{`", + peg$c93 = { type: "literal", value: "{`", description: "\"{`\"" }, + peg$c94 = "`}", + peg$c95 = { type: "literal", value: "`}", description: "\"`}\"" }, + peg$c96 = function(char) {return char}, + peg$c97 = function(rawText) { return ["raw", rawText.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c98 = { type: "other", description: "comment" }, + peg$c99 = "{!", + peg$c100 = { type: "literal", value: "{!", description: "\"{!\"" }, + peg$c101 = "!}", + peg$c102 = { type: "literal", value: "!}", description: "\"!}\"" }, + peg$c103 = function(c) { return ["comment", c.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c104 = /^[#?\^><+%:@\/~%]/, + peg$c105 = { type: "class", value: "[#?\\^><+%:@\\/~%]", description: "[#?\\^><+%:@\\/~%]" }, + peg$c106 = "{", + peg$c107 = { type: "literal", value: "{", description: "\"{\"" }, + peg$c108 = "}", + peg$c109 = { type: "literal", value: "}", description: "\"}\"" }, + peg$c110 = "[", + peg$c111 = { type: "literal", value: "[", description: "\"[\"" }, + peg$c112 = "]", + peg$c113 = { type: "literal", value: "]", description: "\"]\"" }, + peg$c114 = "\n", + peg$c115 = { type: "literal", value: "\n", description: "\"\\n\"" }, + peg$c116 = "\r\n", + peg$c117 = { type: "literal", value: "\r\n", description: "\"\\r\\n\"" }, + peg$c118 = "\r", + peg$c119 = { type: "literal", value: "\r", description: "\"\\r\"" }, + peg$c120 = "\u2028", + peg$c121 = { type: "literal", value: "\u2028", description: "\"\\u2028\"" }, + peg$c122 = "\u2029", + peg$c123 = { type: "literal", value: "\u2029", description: "\"\\u2029\"" }, + peg$c124 = /^[\t\x0B\f \xA0\uFEFF]/, + peg$c125 = { type: "class", value: "[\\t\\x0B\\f \\xA0\\uFEFF]", description: "[\\t\\x0B\\f \\xA0\\uFEFF]" }, + + peg$currPos = 0, + peg$reportedPos = 0, + peg$cachedPos = 0, + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }, + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$reportedPos, peg$currPos); + } + + function offset() { + return peg$reportedPos; + } + + function line() { + return peg$computePosDetails(peg$reportedPos).line; + } + + function column() { + return peg$computePosDetails(peg$reportedPos).column; + } + + function expected(description) { + throw peg$buildException( + null, + [{ type: "other", description: description }], + peg$reportedPos + ); + } + + function error(message) { + throw peg$buildException(message, null, peg$reportedPos); + } + + function peg$computePosDetails(pos) { + function advance(details, startPos, endPos) { + var p, ch; + + for (p = startPos; p < endPos; p++) { + ch = input.charAt(p); if (ch === "\n") { - if (!pos.seenCR) { pos.line++; } - pos.column = 1; - pos.seenCR = false; + if (!details.seenCR) { details.line++; } + details.column = 1; + details.seenCR = false; } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { - pos.line++; - pos.column = 1; - pos.seenCR = true; + details.line++; + details.column = 1; + details.seenCR = true; } else { - pos.column++; - pos.seenCR = false; - } - } - - pos.offset += n; - } - - function matchFailed(failure) { - if (pos.offset < rightmostFailuresPos.offset) { - return; - } - - if (pos.offset > rightmostFailuresPos.offset) { - rightmostFailuresPos = clone(pos); - rightmostFailuresExpected = []; - } - - rightmostFailuresExpected.push(failure); - } - - function parse_body() { - var result0, result1; - var pos0; - - pos0 = clone(pos); - result0 = []; - result1 = parse_part(); - while (result1 !== null) { - result0.push(result1); - result1 = parse_part(); - } - if (result0 !== null) { - result0 = (function(offset, line, column, p) { return ["body"].concat(p).concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - return result0; - } - - function parse_part() { - var result0; - - result0 = parse_raw(); - if (result0 === null) { - result0 = parse_comment(); - if (result0 === null) { - result0 = parse_section(); - if (result0 === null) { - result0 = parse_partial(); - if (result0 === null) { - result0 = parse_special(); - if (result0 === null) { - result0 = parse_reference(); - if (result0 === null) { - result0 = parse_buffer(); - } + details.column++; + details.seenCR = false; + } + } + } + + if (peg$cachedPos !== pos) { + if (peg$cachedPos > pos) { + peg$cachedPos = 0; + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }; + } + advance(peg$cachedPosDetails, peg$cachedPos, pos); + peg$cachedPos = pos; + } + + return peg$cachedPosDetails; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildException(message, expected, pos) { + function cleanupExpected(expected) { + var i = 1; + + expected.sort(function(a, b) { + if (a.description < b.description) { + return -1; + } else if (a.description > b.description) { + return 1; + } else { + return 0; + } + }); + + while (i < expected.length) { + if (expected[i - 1] === expected[i]) { + expected.splice(i, 1); + } else { + i++; + } + } + } + + function buildMessage(expected, found) { + function stringEscape(s) { + function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } + + return s + .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\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); }) + .replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); }) + .replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); }); + } + + var expectedDescs = new Array(expected.length), + expectedDesc, foundDesc, i; + + for (i = 0; i < expected.length; i++) { + expectedDescs[i] = expected[i].description; + } + + expectedDesc = expected.length > 1 + ? expectedDescs.slice(0, -1).join(", ") + + " or " + + expectedDescs[expected.length - 1] + : expectedDescs[0]; + + foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; + + return "Expected " + expectedDesc + " but " + foundDesc + " found."; + } + + var posDetails = peg$computePosDetails(pos), + found = pos < input.length ? input.charAt(pos) : null; + + if (expected !== null) { + cleanupExpected(expected); + } + + return new SyntaxError( + message !== null ? message : buildMessage(expected, found), + expected, + found, + pos, + posDetails.line, + posDetails.column + ); + } + + function peg$parsestart() { + var s0; + + s0 = peg$parsebody(); + + return s0; + } + + function peg$parsebody() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsepart(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsepart(); + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c1(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsepart() { + var s0; + + s0 = peg$parseraw(); + if (s0 === peg$FAILED) { + s0 = peg$parsecomment(); + if (s0 === peg$FAILED) { + s0 = peg$parsesection(); + if (s0 === peg$FAILED) { + s0 = peg$parsepartial(); + if (s0 === peg$FAILED) { + s0 = peg$parsespecial(); + if (s0 === peg$FAILED) { + s0 = peg$parsereference(); + if (s0 === peg$FAILED) { + s0 = peg$parsebuffer(); } } } } } - return result0; - } - - function parse_section() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_sec_tag_start(); - if (result0 !== null) { - result1 = []; - result2 = parse_ws(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - if (result1 !== null) { - result2 = parse_rd(); - if (result2 !== null) { - result3 = parse_body(); - if (result3 !== null) { - result4 = parse_bodies(); - if (result4 !== null) { - result5 = parse_end_tag(); - result5 = result5 !== null ? result5 : ""; - if (result5 !== null) { - result6 = (function(offset, line, column, t, b, e, n) {if( (!n) || (t[1].text !== n.text) ) { throw new Error("Expected end tag for "+t[1].text+" but it was not found. At line : "+line+", column : " + column)} return true;})(pos.offset, pos.line, pos.column, result0, result3, result4, result5) ? "" : null; - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = clone(pos1); - } + } + + return s0; + } + + function peg$parsesection() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsesec_tag_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsews(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsews(); + } + if (s2 !== peg$FAILED) { + s3 = peg$parserd(); + if (s3 !== peg$FAILED) { + s4 = peg$parsebody(); + if (s4 !== peg$FAILED) { + s5 = peg$parsebodies(); + if (s5 !== peg$FAILED) { + s6 = peg$parseend_tag(); + if (s6 === peg$FAILED) { + s6 = peg$c4; + } + if (s6 !== peg$FAILED) { + peg$reportedPos = peg$currPos; + s7 = peg$c5(s1, s4, s5, s6); + if (s7) { + s7 = peg$c6; } else { - result0 = null; - pos = clone(pos1); + s7 = peg$c3; + } + if (s7 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c7(s1, s4, s5, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, t, b, e, n) { e.push(["param", ["literal", "block"], b]); t.push(e); return t.concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[0], result0[3], result0[4], result0[5]); - } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_sec_tag_start(); - if (result0 !== null) { - result1 = []; - result2 = parse_ws(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 47) { - result2 = "/"; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"/\""); - } - } - if (result2 !== null) { - result3 = parse_rd(); - if (result3 !== null) { - result0 = [result0, result1, result2, result3]; - } else { - result0 = null; - pos = clone(pos1); - } + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsesec_tag_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsews(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsews(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 47) { + s3 = peg$c8; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parserd(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c10(s1); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, t) { t.push(["bodies"]); return t.concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[0]); - } - if (result0 === null) { - pos = clone(pos0); - } - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("section"); - } - return result0; - } - - function parse_sec_tag_start() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1; - - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - if (/^[#?^<+@%]/.test(input.charAt(pos.offset))) { - result1 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[#?^<+@%]"); - } + peg$currPos = s0; + s0 = peg$c3; } - if (result1 !== null) { - result2 = []; - result3 = parse_ws(); - while (result3 !== null) { - result2.push(result3); - result3 = parse_ws(); - } - if (result2 !== null) { - result3 = parse_identifier(); - if (result3 !== null) { - result4 = parse_context(); - if (result4 !== null) { - result5 = parse_params(); - if (result5 !== null) { - result0 = [result0, result1, result2, result3, result4, result5]; - } else { - result0 = null; - pos = clone(pos1); - } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + + return s0; + } + + function peg$parsesec_tag_start() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + if (peg$c11.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsews(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseidentifier(); + if (s4 !== peg$FAILED) { + s5 = peg$parsecontext(); + if (s5 !== peg$FAILED) { + s6 = peg$parseparams(); + if (s6 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c13(s2, s4, s5, s6); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, t, n, c, p) { return [t, n, c, p] })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3], result0[4], result0[5]); - } - if (result0 === null) { - pos = clone(pos0); - } - return result0; - } - - function parse_end_tag() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 47) { - result1 = "/"; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"/\""); - } - } - if (result1 !== null) { - result2 = []; - result3 = parse_ws(); - while (result3 !== null) { - result2.push(result3); - result3 = parse_ws(); - } - if (result2 !== null) { - result3 = parse_identifier(); - if (result3 !== null) { - result4 = []; - result5 = parse_ws(); - while (result5 !== null) { - result4.push(result5); - result5 = parse_ws(); - } - if (result4 !== null) { - result5 = parse_rd(); - if (result5 !== null) { - result0 = [result0, result1, result2, result3, result4, result5]; - } else { - result0 = null; - pos = clone(pos1); - } + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + + return s0; + } + + function peg$parseend_tag() { + var s0, s1, s2, s3, s4, s5, s6; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 47) { + s2 = peg$c8; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsews(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseidentifier(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsews(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsews(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parserd(); + if (s6 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c15(s4); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, n) { return n })(pos0.offset, pos0.line, pos0.column, result0[3]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("end tag"); - } - return result0; - } - - function parse_context() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - if (input.charCodeAt(pos.offset) === 58) { - result0 = ":"; - advance(pos, 1); + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c14); } + } + + return s0; + } + + function peg$parsecontext() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c16; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseidentifier(); + if (s3 !== peg$FAILED) { + peg$reportedPos = s1; + s2 = peg$c18(s3); + s1 = s2; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\":\""); - } + peg$currPos = s1; + s1 = peg$c3; } - if (result0 !== null) { - result1 = parse_identifier(); - if (result1 !== null) { - result0 = [result0, result1]; + } else { + peg$currPos = s1; + s1 = peg$c3; + } + if (s1 === peg$FAILED) { + s1 = peg$c4; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c19(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseparams() { + var s0, s1, s2, s3, s4, s5, s6; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = []; + s4 = peg$parsews(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); + } + } else { + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 61) { + s5 = peg$c21; + peg$currPos++; } else { - result0 = null; - pos = clone(pos2); - } - } else { - result0 = null; - pos = clone(pos2); - } - if (result0 !== null) { - result0 = (function(offset, line, column, n) {return n})(pos1.offset, pos1.line, pos1.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos1); - } - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { - result0 = (function(offset, line, column, n) { return n ? ["context", n] : ["context"] })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - return result0; - } - - function parse_params() { - var result0, result1, result2, result3, result4; - var pos0, pos1, pos2; - - reportFailures++; - pos0 = clone(pos); - result0 = []; - pos1 = clone(pos); - pos2 = clone(pos); - result2 = parse_ws(); - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - } else { - result1 = null; - } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - if (input.charCodeAt(pos.offset) === 61) { - result3 = "="; - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("\"=\""); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c22); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parsenumber(); + if (s6 === peg$FAILED) { + s6 = peg$parseidentifier(); + if (s6 === peg$FAILED) { + s6 = peg$parseinline(); } } - if (result3 !== null) { - result4 = parse_number(); - if (result4 === null) { - result4 = parse_identifier(); - if (result4 === null) { - result4 = parse_inline(); - } - } - if (result4 !== null) { - result1 = [result1, result2, result3, result4]; - } else { - result1 = null; - pos = clone(pos2); - } + if (s6 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c23(s4, s6); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k, v) {return ["param", ["literal", k], v]})(pos1.offset, pos1.line, pos1.column, result1[1], result1[3]); - } - if (result1 === null) { - pos = clone(pos1); - } - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - result2 = parse_ws(); - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - } else { - result1 = null; - } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - if (input.charCodeAt(pos.offset) === 61) { - result3 = "="; - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("\"=\""); + peg$currPos = s2; + s2 = peg$c3; + } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = []; + s4 = peg$parsews(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); + } + } else { + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 61) { + s5 = peg$c21; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c22); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parsenumber(); + if (s6 === peg$FAILED) { + s6 = peg$parseidentifier(); + if (s6 === peg$FAILED) { + s6 = peg$parseinline(); } } - if (result3 !== null) { - result4 = parse_number(); - if (result4 === null) { - result4 = parse_identifier(); - if (result4 === null) { - result4 = parse_inline(); - } - } - if (result4 !== null) { - result1 = [result1, result2, result3, result4]; - } else { - result1 = null; - pos = clone(pos2); - } + if (s6 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c23(s4, s6); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k, v) {return ["param", ["literal", k], v]})(pos1.offset, pos1.line, pos1.column, result1[1], result1[3]); - } - if (result1 === null) { - pos = clone(pos1); - } - } - if (result0 !== null) { - result0 = (function(offset, line, column, p) { return ["params"].concat(p) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("params"); - } - return result0; - } - - function parse_bodies() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - reportFailures++; - pos0 = clone(pos); - result0 = []; - pos1 = clone(pos); - pos2 = clone(pos); - result1 = parse_ld(); - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 58) { - result2 = ":"; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\":\""); - } + peg$currPos = s2; + s2 = peg$c3; } - if (result2 !== null) { - result3 = parse_key(); - if (result3 !== null) { - result4 = parse_rd(); - if (result4 !== null) { - result5 = parse_body(); - if (result5 !== null) { - result1 = [result1, result2, result3, result4, result5]; - } else { - result1 = null; - pos = clone(pos2); - } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c24(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + + return s0; + } + + function peg$parsebodies() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parseld(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c16; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsekey(); + if (s5 !== peg$FAILED) { + s6 = peg$parserd(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebody(); + if (s7 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c23(s5, s7); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k, v) {return ["param", ["literal", k], v]})(pos1.offset, pos1.line, pos1.column, result1[2], result1[4]); - } - if (result1 === null) { - pos = clone(pos1); - } - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - result1 = parse_ld(); - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 58) { - result2 = ":"; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\":\""); - } - } - if (result2 !== null) { - result3 = parse_key(); - if (result3 !== null) { - result4 = parse_rd(); - if (result4 !== null) { - result5 = parse_body(); - if (result5 !== null) { - result1 = [result1, result2, result3, result4, result5]; - } else { - result1 = null; - pos = clone(pos2); - } + peg$currPos = s2; + s2 = peg$c3; + } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parseld(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c16; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsekey(); + if (s5 !== peg$FAILED) { + s6 = peg$parserd(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebody(); + if (s7 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c23(s5, s7); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k, v) {return ["param", ["literal", k], v]})(pos1.offset, pos1.line, pos1.column, result1[2], result1[4]); - } - if (result1 === null) { - pos = clone(pos1); - } - } - if (result0 !== null) { - result0 = (function(offset, line, column, p) { return ["bodies"].concat(p) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("bodies"); - } - return result0; - } - - function parse_reference() { - var result0, result1, result2, result3; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - result1 = parse_identifier(); - if (result1 !== null) { - result2 = parse_filters(); - if (result2 !== null) { - result3 = parse_rd(); - if (result3 !== null) { - result0 = [result0, result1, result2, result3]; - } else { - result0 = null; - pos = clone(pos1); - } + peg$currPos = s2; + s2 = peg$c3; + } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c26(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + + return s0; + } + + function peg$parsereference() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + s2 = peg$parseidentifier(); + if (s2 !== peg$FAILED) { + s3 = peg$parsefilters(); + if (s3 !== peg$FAILED) { + s4 = peg$parserd(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c28(s2, s3); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, n, f) { return ["reference", n, f].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1], result0[2]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("reference"); - } - return result0; - } - - function parse_partial() { - var result0, result1, result2, result3, result4, result5, result6, result7, result8; - var pos0, pos1, pos2; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 62) { - result1 = ">"; - advance(pos, 1); + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + + return s0; + } + + function peg$parsepartial() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 62) { + s2 = peg$c30; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c31); } + } + if (s2 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c32; + peg$currPos++; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\">\""); - } - } - if (result1 === null) { - if (input.charCodeAt(pos.offset) === 43) { - result1 = "+"; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"+\""); - } - } - } - if (result1 !== null) { - result2 = []; - result3 = parse_ws(); - while (result3 !== null) { - result2.push(result3); - result3 = parse_ws(); - } - if (result2 !== null) { - pos2 = clone(pos); - result3 = parse_key(); - if (result3 !== null) { - result3 = (function(offset, line, column, k) {return ["literal", k]})(pos2.offset, pos2.line, pos2.column, result3); - } - if (result3 === null) { - pos = clone(pos2); - } - if (result3 === null) { - result3 = parse_inline(); - } - if (result3 !== null) { - result4 = parse_context(); - if (result4 !== null) { - result5 = parse_params(); - if (result5 !== null) { - result6 = []; - result7 = parse_ws(); - while (result7 !== null) { - result6.push(result7); - result7 = parse_ws(); + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c33); } + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsews(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsekey(); + if (s5 !== peg$FAILED) { + peg$reportedPos = s4; + s5 = peg$c34(s5); + } + s4 = s5; + if (s4 === peg$FAILED) { + s4 = peg$parseinline(); + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecontext(); + if (s5 !== peg$FAILED) { + s6 = peg$parseparams(); + if (s6 !== peg$FAILED) { + s7 = []; + s8 = peg$parsews(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsews(); + } + if (s7 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 47) { + s8 = peg$c8; + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } } - if (result6 !== null) { - if (input.charCodeAt(pos.offset) === 47) { - result7 = "/"; - advance(pos, 1); - } else { - result7 = null; - if (reportFailures === 0) { - matchFailed("\"/\""); - } - } - if (result7 !== null) { - result8 = parse_rd(); - if (result8 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8]; - } else { - result0 = null; - pos = clone(pos1); - } + if (s8 !== peg$FAILED) { + s9 = peg$parserd(); + if (s9 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c35(s2, s4, s5, s6); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, s, n, c, p) { var key = (s ===">")? "partial" : s; return [key, n, c, p].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3], result0[4], result0[5]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("partial"); - } - return result0; - } - - function parse_filters() { - var result0, result1, result2; - var pos0, pos1, pos2; - - reportFailures++; - pos0 = clone(pos); - result0 = []; - pos1 = clone(pos); - pos2 = clone(pos); - if (input.charCodeAt(pos.offset) === 124) { - result1 = "|"; - advance(pos, 1); + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c29); } + } + + return s0; + } + + function peg$parsefilters() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 124) { + s3 = peg$c37; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c18(s4); + s2 = s3; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"|\""); - } + peg$currPos = s2; + s2 = peg$c3; } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = clone(pos2); - } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 124) { + s3 = peg$c37; + peg$currPos++; } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, n) {return n})(pos1.offset, pos1.line, pos1.column, result1[1]); - } - if (result1 === null) { - pos = clone(pos1); - } - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - if (input.charCodeAt(pos.offset) === 124) { - result1 = "|"; - advance(pos, 1); + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c18(s4); + s2 = s3; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"|\""); - } + peg$currPos = s2; + s2 = peg$c3; } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = clone(pos2); - } - } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, n) {return n})(pos1.offset, pos1.line, pos1.column, result1[1]); - } - if (result1 === null) { - pos = clone(pos1); - } - } - if (result0 !== null) { - result0 = (function(offset, line, column, f) { return ["filters"].concat(f) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("filters"); + } else { + peg$currPos = s2; + s2 = peg$c3; } - return result0; } - - function parse_special() { - var result0, result1, result2, result3; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 126) { - result1 = "~"; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"~\""); - } - } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result3 = parse_rd(); - if (result3 !== null) { - result0 = [result0, result1, result2, result3]; - } else { - result0 = null; - pos = clone(pos1); - } - } else { - result0 = null; - pos = clone(pos1); - } - } else { - result0 = null; - pos = clone(pos1); - } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c39(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + + return s0; + } + + function peg$parsespecial() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 126) { + s2 = peg$c41; + peg$currPos++; } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, k) { return ["special", k].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[2]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("special"); - } - return result0; - } - - function parse_identifier() { - var result0; - var pos0; - - reportFailures++; - pos0 = clone(pos); - result0 = parse_path(); - if (result0 !== null) { - result0 = (function(offset, line, column, p) { var arr = ["path"].concat(p); arr.text = p[1].join('.'); return arr; })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - result0 = parse_key(); - if (result0 !== null) { - result0 = (function(offset, line, column, k) { var arr = ["key", k]; arr.text = k; return arr; })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("identifier"); - } - return result0; - } - - function parse_number() { - var result0; - var pos0; - - reportFailures++; - pos0 = clone(pos); - result0 = parse_float(); - if (result0 === null) { - result0 = parse_integer(); - } - if (result0 !== null) { - result0 = (function(offset, line, column, n) { return ['literal', n]; })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("number"); - } - return result0; - } - - function parse_float() { - var result0, result1, result2, result3; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_integer(); - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 46) { - result1 = "."; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } - } - if (result1 !== null) { - result3 = parse_integer(); - if (result3 !== null) { - result2 = []; - while (result3 !== null) { - result2.push(result3); - result3 = parse_integer(); - } - } else { - result2 = null; - } - if (result2 !== null) { - result0 = [result0, result1, result2]; + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c42); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsekey(); + if (s3 !== peg$FAILED) { + s4 = peg$parserd(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c43(s3); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, l, r) { return parseFloat(l + "." + r.join('')); })(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("float"); - } - return result0; - } - - function parse_integer() { - var result0, result1; - var pos0; - - reportFailures++; - pos0 = clone(pos); - if (/^[0-9]/.test(input.charAt(pos.offset))) { - result1 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } - } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - if (/^[0-9]/.test(input.charAt(pos.offset))) { - result1 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } - } - } + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c40); } + } + + return s0; + } + + function peg$parseidentifier() { + var s0, s1; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsepath(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c45(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsekey(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c46(s1); + } + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c44); } + } + + return s0; + } + + function peg$parsenumber() { + var s0, s1; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsefloat(); + if (s1 === peg$FAILED) { + s1 = peg$parseinteger(); + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c48(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c47); } + } + + return s0; + } + + function peg$parsefloat() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseinteger(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c50; + peg$currPos++; } else { - result0 = null; - } - if (result0 !== null) { - result0 = (function(offset, line, column, digits) { return parseInt(digits.join(""), 10); })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("integer"); - } - return result0; - } - - function parse_path() { - var result0, result1, result2; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_key(); - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { - result2 = parse_array_part(); - if (result2 === null) { - result2 = parse_array(); - } - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - result2 = parse_array_part(); - if (result2 === null) { - result2 = parse_array(); - } + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseinteger(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseinteger(); } } else { - result1 = null; + s3 = peg$c3; } - if (result1 !== null) { - result0 = [result0, result1]; + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c52(s1, s3); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, k, d) { - d = d[0]; - if (k && d) { - d.unshift(k); - return [false, d].concat([['line', line], ['col', column]]); - } - return [true, d].concat([['line', line], ['col', column]]); - })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - if (input.charCodeAt(pos.offset) === 46) { - result0 = "."; - advance(pos, 1); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + + return s0; + } + + function peg$parseinteger() { + var s0, s1, s2; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (peg$c54.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c54.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } } - if (result0 !== null) { - result1 = []; - result2 = parse_array_part(); - if (result2 === null) { - result2 = parse_array(); - } - while (result2 !== null) { - result1.push(result2); - result2 = parse_array_part(); - if (result2 === null) { - result2 = parse_array(); - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = clone(pos1); + } + } else { + s1 = peg$c3; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c56(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c53); } + } + + return s0; + } + + function peg$parsepath() { + var s0, s1, s2, s3; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsekey(); + if (s1 === peg$FAILED) { + s1 = peg$c4; + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsearray_part(); + if (s3 === peg$FAILED) { + s3 = peg$parsearray(); + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsearray_part(); + if (s3 === peg$FAILED) { + s3 = peg$parsearray(); } - } else { - result0 = null; - pos = clone(pos1); } - if (result0 !== null) { - result0 = (function(offset, line, column, d) { - if (d.length > 0) { - return [true, d[0]].concat([['line', line], ['col', column]]); - } - return [true, []].concat([['line', line], ['col', column]]); - })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("path"); - } - return result0; - } - - function parse_key() { - var result0, result1, result2; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - if (/^[a-zA-Z_$]/.test(input.charAt(pos.offset))) { - result0 = input.charAt(pos.offset); - advance(pos, 1); } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[a-zA-Z_$]"); - } + s2 = peg$c3; } - if (result0 !== null) { - result1 = []; - if (/^[0-9a-zA-Z_$\-]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[0-9a-zA-Z_$\\-]"); - } - } - while (result2 !== null) { - result1.push(result2); - if (/^[0-9a-zA-Z_$\-]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[0-9a-zA-Z_$\\-]"); - } - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = clone(pos1); - } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c58(s1, s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, h, t) { return h + t.join('') })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("key"); - } - return result0; - } - - function parse_array() { - var result0, result1, result2; - var pos0, pos1, pos2, pos3, pos4; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - result0 = parse_lb(); - if (result0 !== null) { - pos4 = clone(pos); - if (/^[0-9]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } - } - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - if (/^[0-9]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } - } - } - } else { - result1 = null; - } - if (result1 !== null) { - result1 = (function(offset, line, column, n) {return n.join('')})(pos4.offset, pos4.line, pos4.column, result1); - } - if (result1 === null) { - pos = clone(pos4); - } - if (result1 === null) { - result1 = parse_identifier(); - } - if (result1 !== null) { - result2 = parse_rb(); - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = clone(pos3); - } + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s1 = peg$c50; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsearray_part(); + if (s3 === peg$FAILED) { + s3 = peg$parsearray(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsearray_part(); + if (s3 === peg$FAILED) { + s3 = peg$parsearray(); + } + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c59(s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos3); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos3); - } - if (result0 !== null) { - result0 = (function(offset, line, column, a) {return a; })(pos2.offset, pos2.line, pos2.column, result0[1]); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 === null) { - pos = clone(pos2); - } - if (result0 !== null) { - result1 = parse_array_part(); - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { - result0 = [result0, result1]; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c57); } + } + + return s0; + } + + function peg$parsekey() { + var s0, s1, s2, s3; + + peg$silentFails++; + s0 = peg$currPos; + if (peg$c61.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c63.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c63.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; } else { - result0 = null; - pos = clone(pos1); + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } } + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c65(s1, s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, i, nk) { if(nk) { nk.unshift(i); } else {nk = [i] } return nk; })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("array"); - } - return result0; - } - - function parse_array_part() { - var result0, result1, result2; - var pos0, pos1, pos2, pos3; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - if (input.charCodeAt(pos.offset) === 46) { - result1 = "."; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } + peg$currPos = s0; + s0 = peg$c3; } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = clone(pos3); - } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c60); } + } + + return s0; + } + + function peg$parsearray() { + var s0, s1, s2, s3, s4, s5; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parselb(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c54.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k) {return k})(pos2.offset, pos2.line, pos2.column, result1[1]); - } - if (result1 === null) { - pos = clone(pos2); - } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - pos2 = clone(pos); - pos3 = clone(pos); - if (input.charCodeAt(pos.offset) === 46) { - result1 = "."; - advance(pos, 1); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c54.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } - } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = clone(pos3); - } - } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k) {return k})(pos2.offset, pos2.line, pos2.column, result1[1]); - } - if (result1 === null) { - pos = clone(pos2); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } } } } else { - result0 = null; - } - if (result0 !== null) { - result1 = parse_array(); - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { - result0 = [result0, result1]; + s4 = peg$c3; + } + if (s4 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c67(s4); + } + s3 = s4; + if (s3 === peg$FAILED) { + s3 = peg$parseidentifier(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parserb(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s1; + s2 = peg$c68(s3); + s1 = s2; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s1; + s1 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, d, a) { if (a) { return d.concat(a); } else { return d; } })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("array_part"); - } - return result0; - } - - function parse_inline() { - var result0, result1, result2; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - if (input.charCodeAt(pos.offset) === 34) { - result0 = "\""; - advance(pos, 1); + peg$currPos = s1; + s1 = peg$c3; + } + } else { + peg$currPos = s1; + s1 = peg$c3; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsearray_part(); + if (s2 === peg$FAILED) { + s2 = peg$c4; + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c69(s1, s2); + s0 = s1; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c66); } + } + + return s0; + } + + function peg$parsearray_part() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c50; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c71(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c3; } - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 34) { - result1 = "\""; - advance(pos, 1); + } else { + peg$currPos = s2; + s2 = peg$c3; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c50; + peg$currPos++; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c71(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c3; } - } - if (result1 !== null) { - result0 = [result0, result1]; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s2; + s2 = peg$c3; } + } + } else { + s1 = peg$c3; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsearray(); + if (s2 === peg$FAILED) { + s2 = peg$c4; + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c72(s1, s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column) { return ["literal", ""].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c70); } + } + + return s0; + } + + function peg$parseinline() { + var s0, s1, s2, s3; + + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c74; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s2 = peg$c74; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } } - if (result0 === null) { - pos = clone(pos0); + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c76(); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c3; } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - if (input.charCodeAt(pos.offset) === 34) { - result0 = "\""; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c74; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseliteral(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c74; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } } - } - if (result0 !== null) { - result1 = parse_literal(); - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 34) { - result2 = "\""; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = clone(pos1); - } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c77(s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, l) { return ["literal", l].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - if (input.charCodeAt(pos.offset) === 34) { - result0 = "\""; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c74; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseinline_part(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseinline_part(); } + } else { + s2 = peg$c3; } - if (result0 !== null) { - result2 = parse_inline_part(); - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - result2 = parse_inline_part(); - } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c74; + peg$currPos++; } else { - result1 = null; + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } } - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 34) { - result2 = "\""; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = clone(pos1); - } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c1(s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, p) { return ["body"].concat(p).concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } + } else { + peg$currPos = s0; + s0 = peg$c3; } } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("inline"); - } - return result0; - } - - function parse_inline_part() { - var result0; - var pos0; - - result0 = parse_special(); - if (result0 === null) { - result0 = parse_reference(); - if (result0 === null) { - pos0 = clone(pos); - result0 = parse_literal(); - if (result0 !== null) { - result0 = (function(offset, line, column, l) { return ["buffer", l] })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + + return s0; + } + + function peg$parseinline_part() { + var s0, s1; + + s0 = peg$parsespecial(); + if (s0 === peg$FAILED) { + s0 = peg$parsereference(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseliteral(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c78(s1); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parsebuffer() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseeol(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsews(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsews(); + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c80(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c3; } - return result0; - } - - function parse_buffer() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2, pos3; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_eol(); - if (result0 !== null) { - result1 = []; - result2 = parse_ws(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = clone(pos1); - } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsetag(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = peg$c6; } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, e, w) { return ["format", e, w.join('')].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - reportFailures++; - result1 = parse_tag(); - reportFailures--; - if (result1 === null) { - result1 = ""; + peg$currPos = s3; + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseraw(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - pos3 = clone(pos); - reportFailures++; - result2 = parse_raw(); - reportFailures--; - if (result2 === null) { - result2 = ""; + peg$currPos = s4; + s4 = peg$c3; + } + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsecomment(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = peg$c6; } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - pos3 = clone(pos); - reportFailures++; - result3 = parse_comment(); - reportFailures--; - if (result3 === null) { - result3 = ""; + peg$currPos = s5; + s5 = peg$c3; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseeol(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = peg$c6; } else { - result3 = null; - pos = clone(pos3); + peg$currPos = s6; + s6 = peg$c3; } - if (result3 !== null) { - pos3 = clone(pos); - reportFailures++; - result4 = parse_eol(); - reportFailures--; - if (result4 === null) { - result4 = ""; + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; } else { - result4 = null; - pos = clone(pos3); + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } } - if (result4 !== null) { - if (input.length > pos.offset) { - result5 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result5 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result5 !== null) { - result1 = [result1, result2, result3, result4, result5]; - } else { - result1 = null; - pos = clone(pos2); - } + if (s7 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c82(s7); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, c) {return c})(pos1.offset, pos1.line, pos1.column, result1[4]); - } - if (result1 === null) { - pos = clone(pos1); - } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - reportFailures++; - result1 = parse_tag(); - reportFailures--; - if (result1 === null) { - result1 = ""; + peg$currPos = s2; + s2 = peg$c3; + } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsetag(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = peg$c6; + } else { + peg$currPos = s3; + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseraw(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; } else { - result1 = null; - pos = clone(pos3); + peg$currPos = s4; + s4 = peg$c3; } - if (result1 !== null) { - pos3 = clone(pos); - reportFailures++; - result2 = parse_raw(); - reportFailures--; - if (result2 === null) { - result2 = ""; + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsecomment(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = peg$c6; } else { - result2 = null; - pos = clone(pos3); + peg$currPos = s5; + s5 = peg$c3; } - if (result2 !== null) { - pos3 = clone(pos); - reportFailures++; - result3 = parse_comment(); - reportFailures--; - if (result3 === null) { - result3 = ""; + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseeol(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = peg$c6; } else { - result3 = null; - pos = clone(pos3); + peg$currPos = s6; + s6 = peg$c3; } - if (result3 !== null) { - pos3 = clone(pos); - reportFailures++; - result4 = parse_eol(); - reportFailures--; - if (result4 === null) { - result4 = ""; + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; } else { - result4 = null; - pos = clone(pos3); + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } } - if (result4 !== null) { - if (input.length > pos.offset) { - result5 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result5 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result5 !== null) { - result1 = [result1, result2, result3, result4, result5]; - } else { - result1 = null; - pos = clone(pos2); - } + if (s7 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c82(s7); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, c) {return c})(pos1.offset, pos1.line, pos1.column, result1[4]); + peg$currPos = s2; + s2 = peg$c3; } - if (result1 === null) { - pos = clone(pos1); - } - } - } else { - result0 = null; - } - if (result0 !== null) { - result0 = (function(offset, line, column, b) { return ["buffer", b.join('')].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("buffer"); - } - return result0; - } - - function parse_literal() { - var result0, result1, result2; - var pos0, pos1, pos2, pos3; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - reportFailures++; - result1 = parse_tag(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - result2 = parse_esc(); - if (result2 === null) { - if (/^[^"]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[^\"]"); - } + peg$currPos = s2; + s2 = peg$c3; } } - if (result2 !== null) { - result1 = [result1, result2]; + } else { + s1 = peg$c3; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c83(s1); + } + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c79); } + } + + return s0; + } + + function peg$parseliteral() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsetag(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = peg$c6; + } else { + peg$currPos = s3; + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseesc(); + if (s4 === peg$FAILED) { + if (peg$c85.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; } else { - result1 = null; - pos = clone(pos2); + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c86); } } + } + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c82(s4); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, c) {return c})(pos1.offset, pos1.line, pos1.column, result1[1]); - } - if (result1 === null) { - pos = clone(pos1); - } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - reportFailures++; - result1 = parse_tag(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - result2 = parse_esc(); - if (result2 === null) { - if (/^[^"]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[^\"]"); - } - } - } - if (result2 !== null) { - result1 = [result1, result2]; + peg$currPos = s2; + s2 = peg$c3; + } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsetag(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = peg$c6; + } else { + peg$currPos = s3; + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseesc(); + if (s4 === peg$FAILED) { + if (peg$c85.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; } else { - result1 = null; - pos = clone(pos2); + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c86); } } - } else { - result1 = null; - pos = clone(pos2); } - if (result1 !== null) { - result1 = (function(offset, line, column, c) {return c})(pos1.offset, pos1.line, pos1.column, result1[1]); - } - if (result1 === null) { - pos = clone(pos1); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c82(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c3; } + } else { + peg$currPos = s2; + s2 = peg$c3; } - } else { - result0 = null; } - if (result0 !== null) { - result0 = (function(offset, line, column, b) { return b.join('') })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("literal"); - } - return result0; + } else { + s1 = peg$c3; } - - function parse_esc() { - var result0; - var pos0; - - pos0 = clone(pos); - if (input.substr(pos.offset, 2) === "\\\"") { - result0 = "\\\""; - advance(pos, 2); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c87(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c84); } + } + + return s0; + } + + function peg$parseesc() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c88) { + s1 = peg$c88; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c90(); + } + s0 = s1; + + return s0; + } + + function peg$parseraw() { + var s0, s1, s2, s3, s4, s5; + + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c92) { + s1 = peg$c92; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c93); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 2) === peg$c94) { + s5 = peg$c94; + peg$currPos += 2; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\\\\"\""); - } - } - if (result0 !== null) { - result0 = (function(offset, line, column) { return '"' })(pos0.offset, pos0.line, pos0.column); - } - if (result0 === null) { - pos = clone(pos0); - } - return result0; - } - - function parse_raw() { - var result0, result1, result2, result3; - var pos0, pos1, pos2, pos3, pos4; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - if (input.substr(pos.offset, 2) === "{`") { - result0 = "{`"; - advance(pos, 2); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c95); } + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"{`\""); - } - } - if (result0 !== null) { - result1 = []; - pos2 = clone(pos); - pos3 = clone(pos); - pos4 = clone(pos); - reportFailures++; - if (input.substr(pos.offset, 2) === "`}") { - result2 = "`}"; - advance(pos, 2); + peg$currPos = s4; + s4 = peg$c3; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"`}\""); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } } - reportFailures--; - if (result2 === null) { - result2 = ""; + if (s5 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c96(s5); + s3 = s4; } else { - result2 = null; - pos = clone(pos4); + peg$currPos = s3; + s3 = peg$c3; } - if (result2 !== null) { - if (input.length > pos.offset) { - result3 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result3 !== null) { - result2 = [result2, result3]; - } else { - result2 = null; - pos = clone(pos3); - } + } else { + peg$currPos = s3; + s3 = peg$c3; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 2) === peg$c94) { + s5 = peg$c94; + peg$currPos += 2; } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - result2 = (function(offset, line, column, char) {return char})(pos2.offset, pos2.line, pos2.column, result2[1]); - } - if (result2 === null) { - pos = clone(pos2); - } - while (result2 !== null) { - result1.push(result2); - pos2 = clone(pos); - pos3 = clone(pos); - pos4 = clone(pos); - reportFailures++; - if (input.substr(pos.offset, 2) === "`}") { - result2 = "`}"; - advance(pos, 2); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"`}\""); - } - } - reportFailures--; - if (result2 === null) { - result2 = ""; - } else { - result2 = null; - pos = clone(pos4); - } - if (result2 !== null) { - if (input.length > pos.offset) { - result3 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result3 !== null) { - result2 = [result2, result3]; - } else { - result2 = null; - pos = clone(pos3); - } - } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - result2 = (function(offset, line, column, char) {return char})(pos2.offset, pos2.line, pos2.column, result2[1]); - } - if (result2 === null) { - pos = clone(pos2); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c95); } + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; + } else { + peg$currPos = s4; + s4 = peg$c3; } - if (result1 !== null) { - if (input.substr(pos.offset, 2) === "`}") { - result2 = "`}"; - advance(pos, 2); + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"`}\""); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } } - if (result2 !== null) { - result0 = [result0, result1, result2]; + if (s5 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c96(s5); + s3 = s4; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s3; + s3 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s3; + s3 = peg$c3; + } + } + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c94) { + s3 = peg$c94; + peg$currPos += 2; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c95); } } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c97(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + + return s0; + } + + function peg$parsecomment() { + var s0, s1, s2, s3, s4, s5; + + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c99) { + s1 = peg$c99; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c100); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 2) === peg$c101) { + s5 = peg$c101; + peg$currPos += 2; } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, rawText) { return ["raw", rawText.join('')].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("raw"); - } - return result0; - } - - function parse_comment() { - var result0, result1, result2, result3; - var pos0, pos1, pos2, pos3, pos4; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - if (input.substr(pos.offset, 2) === "{!") { - result0 = "{!"; - advance(pos, 2); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c102); } + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"{!\""); - } - } - if (result0 !== null) { - result1 = []; - pos2 = clone(pos); - pos3 = clone(pos); - pos4 = clone(pos); - reportFailures++; - if (input.substr(pos.offset, 2) === "!}") { - result2 = "!}"; - advance(pos, 2); + peg$currPos = s4; + s4 = peg$c3; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"!}\""); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } } - reportFailures--; - if (result2 === null) { - result2 = ""; + if (s5 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c82(s5); + s3 = s4; } else { - result2 = null; - pos = clone(pos4); + peg$currPos = s3; + s3 = peg$c3; } - if (result2 !== null) { - if (input.length > pos.offset) { - result3 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result3 !== null) { - result2 = [result2, result3]; - } else { - result2 = null; - pos = clone(pos3); - } + } else { + peg$currPos = s3; + s3 = peg$c3; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 2) === peg$c101) { + s5 = peg$c101; + peg$currPos += 2; } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - result2 = (function(offset, line, column, c) {return c})(pos2.offset, pos2.line, pos2.column, result2[1]); - } - if (result2 === null) { - pos = clone(pos2); - } - while (result2 !== null) { - result1.push(result2); - pos2 = clone(pos); - pos3 = clone(pos); - pos4 = clone(pos); - reportFailures++; - if (input.substr(pos.offset, 2) === "!}") { - result2 = "!}"; - advance(pos, 2); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"!}\""); - } - } - reportFailures--; - if (result2 === null) { - result2 = ""; - } else { - result2 = null; - pos = clone(pos4); - } - if (result2 !== null) { - if (input.length > pos.offset) { - result3 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result3 !== null) { - result2 = [result2, result3]; - } else { - result2 = null; - pos = clone(pos3); - } - } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - result2 = (function(offset, line, column, c) {return c})(pos2.offset, pos2.line, pos2.column, result2[1]); - } - if (result2 === null) { - pos = clone(pos2); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c102); } } - if (result1 !== null) { - if (input.substr(pos.offset, 2) === "!}") { - result2 = "!}"; - advance(pos, 2); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; + } else { + peg$currPos = s4; + s4 = peg$c3; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"!}\""); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } } - if (result2 !== null) { - result0 = [result0, result1, result2]; + if (s5 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c82(s5); + s3 = s4; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s3; + s3 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s3; + s3 = peg$c3; + } + } + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c101) { + s3 = peg$c101; + peg$currPos += 2; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c102); } + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c103(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, c) { return ["comment", c.join('')].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("comment"); - } - return result0; - } - - function parse_tag() { - var result0, result1, result2, result3, result4, result5, result6, result7; - var pos0, pos1, pos2; - - pos0 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - result1 = []; - result2 = parse_ws(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - if (result1 !== null) { - if (/^[#?^><+%:@\/~%]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[#?^><+%:@\\/~%]"); - } - } - if (result2 !== null) { - result3 = []; - result4 = parse_ws(); - while (result4 !== null) { - result3.push(result4); - result4 = parse_ws(); + peg$currPos = s0; + s0 = peg$c3; + } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c98); } + } + + return s0; + } + + function peg$parsetag() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsews(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsews(); + } + if (s2 !== peg$FAILED) { + if (peg$c104.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c105); } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parsews(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parsews(); + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parserd(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = peg$c6; + } else { + peg$currPos = s7; + s7 = peg$c3; } - if (result3 !== null) { - pos1 = clone(pos); - pos2 = clone(pos); - reportFailures++; - result5 = parse_rd(); - reportFailures--; - if (result5 === null) { - result5 = ""; + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$parseeol(); + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = peg$c6; } else { - result5 = null; - pos = clone(pos2); + peg$currPos = s8; + s8 = peg$c3; } - if (result5 !== null) { - pos2 = clone(pos); - reportFailures++; - result6 = parse_eol(); - reportFailures--; - if (result6 === null) { - result6 = ""; + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; } else { - result6 = null; - pos = clone(pos2); + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } } - if (result6 !== null) { - if (input.length > pos.offset) { - result7 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result7 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result7 !== null) { - result5 = [result5, result6, result7]; - } else { - result5 = null; - pos = clone(pos1); - } + if (s9 !== peg$FAILED) { + s7 = [s7, s8, s9]; + s6 = s7; } else { - result5 = null; - pos = clone(pos1); + peg$currPos = s6; + s6 = peg$c3; } } else { - result5 = null; - pos = clone(pos1); + peg$currPos = s6; + s6 = peg$c3; } - if (result5 !== null) { - result4 = []; - while (result5 !== null) { - result4.push(result5); - pos1 = clone(pos); - pos2 = clone(pos); - reportFailures++; - result5 = parse_rd(); - reportFailures--; - if (result5 === null) { - result5 = ""; + } else { + peg$currPos = s6; + s6 = peg$c3; + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parserd(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = peg$c6; + } else { + peg$currPos = s7; + s7 = peg$c3; + } + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$parseeol(); + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = peg$c6; } else { - result5 = null; - pos = clone(pos2); + peg$currPos = s8; + s8 = peg$c3; } - if (result5 !== null) { - pos2 = clone(pos); - reportFailures++; - result6 = parse_eol(); - reportFailures--; - if (result6 === null) { - result6 = ""; + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; } else { - result6 = null; - pos = clone(pos2); + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } } - if (result6 !== null) { - if (input.length > pos.offset) { - result7 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result7 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result7 !== null) { - result5 = [result5, result6, result7]; - } else { - result5 = null; - pos = clone(pos1); - } + if (s9 !== peg$FAILED) { + s7 = [s7, s8, s9]; + s6 = s7; } else { - result5 = null; - pos = clone(pos1); + peg$currPos = s6; + s6 = peg$c3; } } else { - result5 = null; - pos = clone(pos1); + peg$currPos = s6; + s6 = peg$c3; } + } else { + peg$currPos = s6; + s6 = peg$c3; } - } else { - result4 = null; } - if (result4 !== null) { - result5 = []; - result6 = parse_ws(); - while (result6 !== null) { - result5.push(result6); - result6 = parse_ws(); - } - if (result5 !== null) { - result6 = parse_rd(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = clone(pos0); - } + } else { + s5 = peg$c3; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parsews(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsews(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parserd(); + if (s7 !== peg$FAILED) { + s1 = [s1, s2, s3, s4, s5, s6, s7]; + s0 = s1; } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 === null) { - result0 = parse_reference(); - } - return result0; + } else { + peg$currPos = s0; + s0 = peg$c3; } - - function parse_ld() { - var result0; - - if (input.charCodeAt(pos.offset) === 123) { - result0 = "{"; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"{\""); - } - } - return result0; + if (s0 === peg$FAILED) { + s0 = peg$parsereference(); } - - function parse_rd() { - var result0; - - if (input.charCodeAt(pos.offset) === 125) { - result0 = "}"; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"}\""); - } - } - return result0; + + return s0; + } + + function peg$parseld() { + var s0; + + if (input.charCodeAt(peg$currPos) === 123) { + s0 = peg$c106; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c107); } } - - function parse_lb() { - var result0; - - if (input.charCodeAt(pos.offset) === 91) { - result0 = "["; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"[\""); - } - } - return result0; + + return s0; + } + + function peg$parserd() { + var s0; + + if (input.charCodeAt(peg$currPos) === 125) { + s0 = peg$c108; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c109); } } - - function parse_rb() { - var result0; - - if (input.charCodeAt(pos.offset) === 93) { - result0 = "]"; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"]\""); - } - } - return result0; + + return s0; + } + + function peg$parselb() { + var s0; + + if (input.charCodeAt(peg$currPos) === 91) { + s0 = peg$c110; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c111); } + } + + return s0; + } + + function peg$parserb() { + var s0; + + if (input.charCodeAt(peg$currPos) === 93) { + s0 = peg$c112; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c113); } + } + + return s0; + } + + function peg$parseeol() { + var s0; + + if (input.charCodeAt(peg$currPos) === 10) { + s0 = peg$c114; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c115); } } - - function parse_eol() { - var result0; - - if (input.charCodeAt(pos.offset) === 10) { - result0 = "\n"; - advance(pos, 1); + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c116) { + s0 = peg$c116; + peg$currPos += 2; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\n\""); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c117); } } - if (result0 === null) { - if (input.substr(pos.offset, 2) === "\r\n") { - result0 = "\r\n"; - advance(pos, 2); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c118; + peg$currPos++; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\r\\n\""); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c119); } } - if (result0 === null) { - if (input.charCodeAt(pos.offset) === 13) { - result0 = "\r"; - advance(pos, 1); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8232) { + s0 = peg$c120; + peg$currPos++; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\r\""); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c121); } } - if (result0 === null) { - if (input.charCodeAt(pos.offset) === 8232) { - result0 = "\u2028"; - advance(pos, 1); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8233) { + s0 = peg$c122; + peg$currPos++; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\u2028\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos.offset) === 8233) { - result0 = "\u2029"; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\u2029\""); - } - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c123); } } } } } - return result0; } - - function parse_ws() { - var result0; - - if (/^[\t\x0B\f \xA0\uFEFF]/.test(input.charAt(pos.offset))) { - result0 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[\\t\\x0B\\f \\xA0\\uFEFF]"); - } - } - if (result0 === null) { - result0 = parse_eol(); - } - return result0; + + return s0; + } + + function peg$parsews() { + var s0; + + if (peg$c124.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c125); } } - - - function cleanupExpected(expected) { - expected.sort(); - - var lastExpected = null; - var cleanExpected = []; - for (var i = 0; i < expected.length; i++) { - if (expected[i] !== lastExpected) { - cleanExpected.push(expected[i]); - lastExpected = expected[i]; - } - } - return cleanExpected; - } - - - - var result = parseFunctions[startRule](); - - /* - * The parser is now in one of the following three states: - * - * 1. The parser successfully parsed the whole input. - * - * - |result !== null| - * - |pos.offset === input.length| - * - |rightmostFailuresExpected| may or may not contain something - * - * 2. The parser successfully parsed only a part of the input. - * - * - |result !== null| - * - |pos.offset < input.length| - * - |rightmostFailuresExpected| may or may not contain something - * - * 3. The parser did not successfully parse any part of the input. - * - * - |result === null| - * - |pos.offset === 0| - * - |rightmostFailuresExpected| contains at least one failure - * - * All code following this comment (including called functions) must - * handle these states. - */ - if (result === null || pos.offset !== input.length) { - var offset = Math.max(pos.offset, rightmostFailuresPos.offset); - var found = offset < input.length ? input.charAt(offset) : null; - var errorPosition = pos.offset > rightmostFailuresPos.offset ? pos : rightmostFailuresPos; - - throw new parser.SyntaxError( - cleanupExpected(rightmostFailuresExpected), - found, - offset, - errorPosition.line, - errorPosition.column - ); - } - - return result; - }, - - /* Returns the parser source code. */ - toSource: function() { return this._source; } - }; - - /* Thrown when a parser encounters a syntax error. */ - - result.SyntaxError = function(expected, found, offset, line, column) { - function buildMessage(expected, found) { - var expectedHumanized, foundHumanized; - - switch (expected.length) { - case 0: - expectedHumanized = "end of input"; - break; - case 1: - expectedHumanized = expected[0]; - break; - default: - expectedHumanized = expected.slice(0, expected.length - 1).join(", ") - + " or " - + expected[expected.length - 1]; - } - - foundHumanized = found ? quote(found) : "end of input"; - - return "Expected " + expectedHumanized + " but " + foundHumanized + " found."; + if (s0 === peg$FAILED) { + s0 = peg$parseeol(); + } + + return s0; } - - this.name = "SyntaxError"; - this.expected = expected; - this.found = found; - this.message = buildMessage(expected, found); - this.offset = offset; - this.line = line; - this.column = column; + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail({ type: "end", description: "end of input" }); + } + + throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); + } + } + + return { + SyntaxError: SyntaxError, + parse: parse }; - - result.SyntaxError.prototype = Error.prototype; - - return result; })(); // expose parser methods diff --git a/package.json b/package.json index 122a240b..1ddd398a 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "views" ], "devDependencies": { - "pegjs": "0.7.0", + "pegjs": "0.8.0", "grunt": "~0.4.2", "grunt-contrib-connect": "~0.5.0", "grunt-template-jasmine-istanbul": "~0.2.5", diff --git a/src/build.js b/src/build.js index 97762a15..f8d8f73b 100644 --- a/src/build.js +++ b/src/build.js @@ -6,7 +6,8 @@ var peg = require('pegjs'), var options = { cache: false, - trackLineAndColumn: true + trackLineAndColumn: true, + output: 'source' }; var parser = peg.buildParser(fs.readFileSync(path.join(root, 'src', 'dust.pegjs'), 'utf8'), options), @@ -16,4 +17,4 @@ var parser = peg.buildParser(fs.readFileSync(path.join(root, 'src', 'dust.pegjs' buildMessage = 'Do not edit the parser directly. This is a generated file created using a build script and the PEG grammar.'; -fs.writeFileSync(path.join(root, 'lib', 'parser.js'), umdWrapper.replace(parserPlaceholder, parser.toSource()).replace(buildMessagePlaceHolder, buildMessage).replace('this.SyntaxError','parser.SyntaxError')); +fs.writeFileSync(path.join(root, 'lib', 'parser.js'), umdWrapper.replace(parserPlaceholder, parser).replace(buildMessagePlaceHolder, buildMessage).replace('this.SyntaxError','parser.SyntaxError')); diff --git a/src/dust.pegjs b/src/dust.pegjs index 65df1d4c..8119a40f 100644 --- a/src/dust.pegjs +++ b/src/dust.pegjs @@ -5,7 +5,7 @@ start body is defined as anything that matches with the part 0 or more times ---------------------------------------------------------------------------------------------------------------------------------------*/ body - = p:part* { return ["body"].concat(p).concat([['line', line], ['col', column]]) } + = p:part* { return ["body"].concat(p).concat([['line', line()], ['col', column()]]) } /*------------------------------------------------------------------------------------------------------------------------------------- part is defined as anything that matches with raw or comment or section or partial or special or reference or buffer @@ -18,13 +18,13 @@ part plus bodies plus end_tag or sec_tag_start followed by a slash and closing brace ---------------------------------------------------------------------------------------------------------------------------------------*/ section "section" - = t:sec_tag_start ws* rd b:body e:bodies n:end_tag? &{if( (!n) || (t[1].text !== n.text) ) { throw new Error("Expected end tag for "+t[1].text+" but it was not found. At line : "+line+", column : " + column)} return true;} - { e.push(["param", ["literal", "block"], b]); t.push(e); return t.concat([['line', line], ['col', column]]) } + = t:sec_tag_start ws* rd b:body e:bodies n:end_tag? &{if( (!n) || (t[1].text !== n.text) ) { throw new Error("Expected end tag for "+t[1].text+" but it was not found. At line : "+line()+", column : " + column())} return true;} + { e.push(["param", ["literal", "block"], b]); t.push(e); return t.concat([['line', line()], ['col', column()]]) } / t:sec_tag_start ws* "/" rd - { t.push(["bodies"]); return t.concat([['line', line], ['col', column]]) } + { t.push(["bodies"]); return t.concat([['line', line()], ['col', column()]]) } /*------------------------------------------------------------------------------------------------------------------------------------- - sec_tag_start is defined as matching an opening brace followed by one of #?^<+@% plus identifier plus context plus param + sec_tag_start is defined as matching an opening brace followed by one of #?^<+@% plus identifier plus context plus param followed by 0 or more white spaces ---------------------------------------------------------------------------------------------------------------------------------------*/ sec_tag_start @@ -32,7 +32,7 @@ sec_tag_start { return [t, n, c, p] } /*------------------------------------------------------------------------------------------------------------------------------------- - end_tag is defined as matching an opening brace followed by a slash plus 0 or more white spaces plus identifier followed + end_tag is defined as matching an opening brace followed by a slash plus 0 or more white spaces plus identifier followed by 0 or more white spaces and ends with closing brace ---------------------------------------------------------------------------------------------------------------------------------------*/ end_tag "end tag" @@ -65,15 +65,15 @@ bodies "bodies" ---------------------------------------------------------------------------------------------------------------------------------------*/ reference "reference" = ld n:identifier f:filters rd - { return ["reference", n, f].concat([['line', line], ['col', column]]) } + { return ["reference", n, f].concat([['line', line()], ['col', column()]]) } /*------------------------------------------------------------------------------------------------------------------------------------- - partial is defined as matching a opening brace followed by a > plus anything that matches with key or inline plus + partial is defined as matching a opening brace followed by a > plus anything that matches with key or inline plus context followed by slash and closing brace ---------------------------------------------------------------------------------------------------------------------------------------*/ partial "partial" = ld s:(">"/"+") ws* n:(k:key {return ["literal", k]} / inline) c:context p:params ws* "/" rd - { var key = (s ===">")? "partial" : s; return [key, n, c, p].concat([['line', line], ['col', column]]) } + { var key = (s ===">")? "partial" : s; return [key, n, c, p].concat([['line', line()], ['col', column()]]) } /*------------------------------------------------------------------------------------------------------------------------------------- filters is defined as matching a pipe character followed by anything that matches the key @@ -87,7 +87,7 @@ filters "filters" ---------------------------------------------------------------------------------------------------------------------------------------*/ special "special" = ld "~" k:key rd - { return ["special", k].concat([['line', line], ['col', column]]) } + { return ["special", k].concat([['line', line()], ['col', column()]]) } /*------------------------------------------------------------------------------------------------------------------------------------- identifier is defined as matching a path or key @@ -106,26 +106,26 @@ integer "integer" = digits:[0-9]+ { return parseInt(digits.join(""), 10); } /*------------------------------------------------------------------------------------------------------------------------------------- - path is defined as matching a key plus one or more characters of key preceded by a dot + path is defined as matching a key plus one or more characters of key preceded by a dot ---------------------------------------------------------------------------------------------------------------------------------------*/ path "path" = k:key? d:(array_part / array)+ { d = d[0]; if (k && d) { d.unshift(k); - return [false, d].concat([['line', line], ['col', column]]); + return [false, d].concat([['line', line()], ['col', column()]]); } - return [true, d].concat([['line', line], ['col', column]]); + return [true, d].concat([['line', line()], ['col', column()]]); } / "." d:(array_part / array)* { if (d.length > 0) { - return [true, d[0]].concat([['line', line], ['col', column]]); + return [true, d[0]].concat([['line', line()], ['col', column()]]); } - return [true, []].concat([['line', line], ['col', column]]); + return [true, []].concat([['line', line()], ['col', column()]]); } /*------------------------------------------------------------------------------------------------------------------------------------- - key is defined as a character matching a to z, upper or lower case, followed by 0 or more alphanumeric characters + key is defined as a character matching a to z, upper or lower case, followed by 0 or more alphanumeric characters ---------------------------------------------------------------------------------------------------------------------------------------*/ key "key" = h:[a-zA-Z_$] t:[0-9a-zA-Z_$-]* @@ -138,25 +138,25 @@ array_part "array_part" = d:("." k:key {return k})+ a:(array)? { if (a) { return d.concat(a); } else { return d; } } /*------------------------------------------------------------------------------------------------------------------------------------- - inline params is defined as matching two double quotes or double quotes plus literal followed by closing double quotes or + inline params is defined as matching two double quotes or double quotes plus literal followed by closing double quotes or double quotes plus inline_part followed by the closing double quotes ---------------------------------------------------------------------------------------------------------------------------------------*/ inline "inline" - = '"' '"' { return ["literal", ""].concat([['line', line], ['col', column]]) } - / '"' l:literal '"' { return ["literal", l].concat([['line', line], ['col', column]]) } - / '"' p:inline_part+ '"' { return ["body"].concat(p).concat([['line', line], ['col', column]]) } + = '"' '"' { return ["literal", ""].concat([['line', line()], ['col', column()]]) } + / '"' l:literal '"' { return ["literal", l].concat([['line', line()], ['col', column()]]) } + / '"' p:inline_part+ '"' { return ["body"].concat(p).concat([['line', line()], ['col', column()]]) } /*------------------------------------------------------------------------------------------------------------------------------------- - inline_part is defined as matching a special or reference or literal + inline_part is defined as matching a special or reference or literal ---------------------------------------------------------------------------------------------------------------------------------------*/ inline_part = special / reference / l:literal { return ["buffer", l] } buffer "buffer" = e:eol w:ws* - { return ["format", e, w.join('')].concat([['line', line], ['col', column]]) } + { return ["format", e, w.join('')].concat([['line', line()], ['col', column()]]) } / b:(!tag !raw !comment !eol c:. {return c})+ - { return ["buffer", b.join('')].concat([['line', line], ['col', column]]) } + { return ["buffer", b.join('')].concat([['line', line()], ['col', column()]]) } /*------------------------------------------------------------------------------------------------------------------------------------- literal is defined as matching esc or any character except the double quotes and it cannot be a tag @@ -170,13 +170,13 @@ esc raw "raw" = "{`" rawText:(!"`}" char:. {return char})* "`}" - { return ["raw", rawText.join('')].concat([['line', line], ['col', column]]) } + { return ["raw", rawText.join('')].concat([['line', line()], ['col', column()]]) } comment "comment" = "{!" c:(!"!}" c:. {return c})* "!}" - { return ["comment", c.join('')].concat([['line', line], ['col', column]]) } + { return ["comment", c.join('')].concat([['line', line()], ['col', column()]]) } /*------------------------------------------------------------------------------------------------------------------------------------- - tag is defined as matching an opening brace plus any of #?^><+%:@/~% plus 0 or more whitespaces plus any character or characters that + tag is defined as matching an opening brace plus any of #?^><+%:@/~% plus 0 or more whitespaces plus any character or characters that doesn't match rd or eol plus 0 or more whitespaces plus a closing brace ---------------------------------------------------------------------------------------------------------------------------------------*/ tag @@ -195,7 +195,7 @@ lb rb = "]" -eol +eol = "\n" //line feed / "\r\n" //carriage + line feed / "\r" //carriage return diff --git a/test/jasmine-test/spec/coreTests.js b/test/jasmine-test/spec/coreTests.js index eee6223b..532b036f 100755 --- a/test/jasmine-test/spec/coreTests.js +++ b/test/jasmine-test/spec/coreTests.js @@ -958,7 +958,7 @@ var coreTests = [ /** * PARTIAL DEFINITIONS TESTS */ - { + { name: "partial definitions", tests: [ { @@ -1389,7 +1389,7 @@ var coreTests = [ name: "error: whitespaces between the opening brace and any of (#,?,@,^,+,%) is not allowed", source: '{ # helper foo="bar" boo="boo" } {/helper}', context: { "helper": function(chunk, context, bodies, params) { return chunk.write(params.boo + " " + params.foo); } }, - error: 'Expected buffer, comment, partial, raw, reference, section or special but "{" found. At line : 1, column : 1', + error: 'Expected buffer, comment, end of input, partial, raw, reference, section or special but "{" found. At line : 1, column : 1', message: "should show an error for whitespces between the opening brace and any of (#,?,@,^,+,%)" }, { @@ -1417,7 +1417,7 @@ var coreTests = [ name: "error: whitespaces between the forward slash and the closing brace in self closing tags", source: '{#helper foo="bar" boo="boo" / }', context: { "helper": function(chunk, context, bodies, params) { return chunk.write(params.boo + " " + params.foo); } }, - error: 'Expected buffer, comment, partial, raw, reference, section or special but "{" found. At line : 1, column : 1', + error: 'Expected buffer, comment, end of input, partial, raw, reference, section or special but "{" found. At line : 1, column : 1', message: "should show an error for whitespaces etween the forward slash and the closing brace in self closing tags" }, { @@ -1431,7 +1431,7 @@ var coreTests = [ name: "error : whitespaces between the '{' plus '>' and partial identifier is not supported", source: '{ > partial/} {> "hello_world"/} {> "{ref}"/}', context: { "name": "Jim", "count": 42, "ref": "hello_world" }, - error: 'Expected buffer, comment, partial, raw, reference, section or special but "{" found. At line : 1, column : 1', + error: 'Expected buffer, comment, end of input, partial, raw, reference, section or special but "{" found. At line : 1, column : 1', message: "should show an error for whitespaces between the '{' plus '>' and partial identifier" }, { @@ -1531,7 +1531,7 @@ var coreTests = [ name: "Dust syntax error", source: "RRR {##}", context: { name: "Mick", count: 30 }, - error: 'Expected buffer, comment, partial, raw, reference, section or special but "{" found. At line : 1, column : 5', + error: 'Expected buffer, comment, end of input, partial, raw, reference, section or special but "{" found. At line : 1, column : 5', message: "should test that the error message shows line and column." }, { From 3b39e052413a49765f8209568dbf805603489c9f Mon Sep 17 00:00:00 2001 From: Seth Kinast <skinast@linkedin.com> Date: Thu, 4 Sep 2014 19:19:27 -0700 Subject: [PATCH 2/3] Grammar cleanup. Use new |error| grammar. --- lib/parser.js | 290 ++++++++++++++++++++++++++----------------------- src/dust.pegjs | 30 ++++- 2 files changed, 179 insertions(+), 141 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 745acaf9..687387c5 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -44,16 +44,32 @@ peg$startRuleFunction = peg$parsestart, peg$c0 = [], - peg$c1 = function(p) { return ["body"].concat(p).concat([['line', line()], ['col', column()]]) }, + peg$c1 = function(p) { + return ["body"] + .concat(p) + .concat([['line', line()], ['col', column()]]); + }, peg$c2 = { type: "other", description: "section" }, peg$c3 = peg$FAILED, peg$c4 = null, - peg$c5 = function(t, b, e, n) {if( (!n) || (t[1].text !== n.text) ) { throw new Error("Expected end tag for "+t[1].text+" but it was not found. At line : "+line()+", column : " + column())} return true;}, + peg$c5 = function(t, b, e, n) { + if( (!n) || (t[1].text !== n.text) ) { + error("Expected end tag for "+t[1].text+" but it was not found."); + } + return true; + }, peg$c6 = void 0, - peg$c7 = function(t, b, e, n) { e.push(["param", ["literal", "block"], b]); t.push(e); return t.concat([['line', line()], ['col', column()]]) }, + peg$c7 = function(t, b, e, n) { + e.push(["param", ["literal", "block"], b]); + t.push(e); + return t.concat([['line', line()], ['col', column()]]); + }, peg$c8 = "/", peg$c9 = { type: "literal", value: "/", description: "\"/\"" }, - peg$c10 = function(t) { t.push(["bodies"]); return t.concat([['line', line()], ['col', column()]]) }, + peg$c10 = function(t) { + t.push(["bodies"]); + return t.concat([['line', line()], ['col', column()]]); + }, peg$c11 = /^[#?\^<+@%]/, peg$c12 = { type: "class", value: "[#?\\^<+@%]", description: "[#?\\^<+@%]" }, peg$c13 = function(t, n, c, p) { return [t, n, c, p] }, @@ -78,7 +94,10 @@ peg$c32 = "+", peg$c33 = { type: "literal", value: "+", description: "\"+\"" }, peg$c34 = function(k) {return ["literal", k]}, - peg$c35 = function(s, n, c, p) { var key = (s ===">")? "partial" : s; return [key, n, c, p].concat([['line', line()], ['col', column()]]) }, + peg$c35 = function(s, n, c, p) { + var key = (s === ">") ? "partial" : s; + return [key, n, c, p].concat([['line', line()], ['col', column()]]); + }, peg$c36 = { type: "other", description: "filters" }, peg$c37 = "|", peg$c38 = { type: "literal", value: "|", description: "\"|\"" }, @@ -133,54 +152,55 @@ peg$c75 = { type: "literal", value: "\"", description: "\"\\\"\"" }, peg$c76 = function() { return ["literal", ""].concat([['line', line()], ['col', column()]]) }, peg$c77 = function(l) { return ["literal", l].concat([['line', line()], ['col', column()]]) }, - peg$c78 = function(l) { return ["buffer", l] }, - peg$c79 = { type: "other", description: "buffer" }, - peg$c80 = function(e, w) { return ["format", e, w.join('')].concat([['line', line()], ['col', column()]]) }, - peg$c81 = { type: "any", description: "any character" }, - peg$c82 = function(c) {return c}, - peg$c83 = function(b) { return ["buffer", b.join('')].concat([['line', line()], ['col', column()]]) }, - peg$c84 = { type: "other", description: "literal" }, - peg$c85 = /^[^"]/, - peg$c86 = { type: "class", value: "[^\"]", description: "[^\"]" }, - peg$c87 = function(b) { return b.join('') }, - peg$c88 = "\\\"", - peg$c89 = { type: "literal", value: "\\\"", description: "\"\\\\\\\"\"" }, - peg$c90 = function() { return '"' }, - peg$c91 = { type: "other", description: "raw" }, - peg$c92 = "{`", - peg$c93 = { type: "literal", value: "{`", description: "\"{`\"" }, - peg$c94 = "`}", - peg$c95 = { type: "literal", value: "`}", description: "\"`}\"" }, - peg$c96 = function(char) {return char}, - peg$c97 = function(rawText) { return ["raw", rawText.join('')].concat([['line', line()], ['col', column()]]) }, - peg$c98 = { type: "other", description: "comment" }, - peg$c99 = "{!", - peg$c100 = { type: "literal", value: "{!", description: "\"{!\"" }, - peg$c101 = "!}", - peg$c102 = { type: "literal", value: "!}", description: "\"!}\"" }, - peg$c103 = function(c) { return ["comment", c.join('')].concat([['line', line()], ['col', column()]]) }, - peg$c104 = /^[#?\^><+%:@\/~%]/, - peg$c105 = { type: "class", value: "[#?\\^><+%:@\\/~%]", description: "[#?\\^><+%:@\\/~%]" }, - peg$c106 = "{", - peg$c107 = { type: "literal", value: "{", description: "\"{\"" }, - peg$c108 = "}", - peg$c109 = { type: "literal", value: "}", description: "\"}\"" }, - peg$c110 = "[", - peg$c111 = { type: "literal", value: "[", description: "\"[\"" }, - peg$c112 = "]", - peg$c113 = { type: "literal", value: "]", description: "\"]\"" }, - peg$c114 = "\n", - peg$c115 = { type: "literal", value: "\n", description: "\"\\n\"" }, - peg$c116 = "\r\n", - peg$c117 = { type: "literal", value: "\r\n", description: "\"\\r\\n\"" }, - peg$c118 = "\r", - peg$c119 = { type: "literal", value: "\r", description: "\"\\r\"" }, - peg$c120 = "\u2028", - peg$c121 = { type: "literal", value: "\u2028", description: "\"\\u2028\"" }, - peg$c122 = "\u2029", - peg$c123 = { type: "literal", value: "\u2029", description: "\"\\u2029\"" }, - peg$c124 = /^[\t\x0B\f \xA0\uFEFF]/, - peg$c125 = { type: "class", value: "[\\t\\x0B\\f \\xA0\\uFEFF]", description: "[\\t\\x0B\\f \\xA0\\uFEFF]" }, + peg$c78 = function(p) { return ["body"].concat(p).concat([['line', line()], ['col', column()]]) }, + peg$c79 = function(l) { return ["buffer", l] }, + peg$c80 = { type: "other", description: "buffer" }, + peg$c81 = function(e, w) { return ["format", e, w.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c82 = { type: "any", description: "any character" }, + peg$c83 = function(c) {return c}, + peg$c84 = function(b) { return ["buffer", b.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c85 = { type: "other", description: "literal" }, + peg$c86 = /^[^"]/, + peg$c87 = { type: "class", value: "[^\"]", description: "[^\"]" }, + peg$c88 = function(b) { return b.join('') }, + peg$c89 = "\\\"", + peg$c90 = { type: "literal", value: "\\\"", description: "\"\\\\\\\"\"" }, + peg$c91 = function() { return '"' }, + peg$c92 = { type: "other", description: "raw" }, + peg$c93 = "{`", + peg$c94 = { type: "literal", value: "{`", description: "\"{`\"" }, + peg$c95 = "`}", + peg$c96 = { type: "literal", value: "`}", description: "\"`}\"" }, + peg$c97 = function(char) {return char}, + peg$c98 = function(rawText) { return ["raw", rawText.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c99 = { type: "other", description: "comment" }, + peg$c100 = "{!", + peg$c101 = { type: "literal", value: "{!", description: "\"{!\"" }, + peg$c102 = "!}", + peg$c103 = { type: "literal", value: "!}", description: "\"!}\"" }, + peg$c104 = function(c) { return ["comment", c.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c105 = /^[#?\^><+%:@\/~%]/, + peg$c106 = { type: "class", value: "[#?\\^><+%:@\\/~%]", description: "[#?\\^><+%:@\\/~%]" }, + peg$c107 = "{", + peg$c108 = { type: "literal", value: "{", description: "\"{\"" }, + peg$c109 = "}", + peg$c110 = { type: "literal", value: "}", description: "\"}\"" }, + peg$c111 = "[", + peg$c112 = { type: "literal", value: "[", description: "\"[\"" }, + peg$c113 = "]", + peg$c114 = { type: "literal", value: "]", description: "\"]\"" }, + peg$c115 = "\n", + peg$c116 = { type: "literal", value: "\n", description: "\"\\n\"" }, + peg$c117 = "\r\n", + peg$c118 = { type: "literal", value: "\r\n", description: "\"\\r\\n\"" }, + peg$c119 = "\r", + peg$c120 = { type: "literal", value: "\r", description: "\"\\r\"" }, + peg$c121 = "\u2028", + peg$c122 = { type: "literal", value: "\u2028", description: "\"\\u2028\"" }, + peg$c123 = "\u2029", + peg$c124 = { type: "literal", value: "\u2029", description: "\"\\u2029\"" }, + peg$c125 = /^[\t\x0B\f \xA0\uFEFF]/, + peg$c126 = { type: "class", value: "[\\t\\x0B\\f \\xA0\\uFEFF]", description: "[\\t\\x0B\\f \\xA0\\uFEFF]" }, peg$currPos = 0, peg$reportedPos = 0, @@ -1710,7 +1730,7 @@ } if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c1(s2); + s1 = peg$c78(s2); s0 = s1; } else { peg$currPos = s0; @@ -1746,7 +1766,7 @@ s1 = peg$parseliteral(); if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c78(s1); + s1 = peg$c79(s1); } s0 = s1; } @@ -1770,7 +1790,7 @@ } if (s2 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c80(s1, s2); + s1 = peg$c81(s1, s2); s0 = s1; } else { peg$currPos = s0; @@ -1833,11 +1853,11 @@ peg$currPos++; } else { s7 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c81); } + if (peg$silentFails === 0) { peg$fail(peg$c82); } } if (s7 !== peg$FAILED) { peg$reportedPos = s2; - s3 = peg$c82(s7); + s3 = peg$c83(s7); s2 = s3; } else { peg$currPos = s2; @@ -1912,11 +1932,11 @@ peg$currPos++; } else { s7 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c81); } + if (peg$silentFails === 0) { peg$fail(peg$c82); } } if (s7 !== peg$FAILED) { peg$reportedPos = s2; - s3 = peg$c82(s7); + s3 = peg$c83(s7); s2 = s3; } else { peg$currPos = s2; @@ -1944,14 +1964,14 @@ } if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c83(s1); + s1 = peg$c84(s1); } s0 = s1; } peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c79); } + if (peg$silentFails === 0) { peg$fail(peg$c80); } } return s0; @@ -1977,17 +1997,17 @@ if (s3 !== peg$FAILED) { s4 = peg$parseesc(); if (s4 === peg$FAILED) { - if (peg$c85.test(input.charAt(peg$currPos))) { + if (peg$c86.test(input.charAt(peg$currPos))) { s4 = input.charAt(peg$currPos); peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c86); } + if (peg$silentFails === 0) { peg$fail(peg$c87); } } } if (s4 !== peg$FAILED) { peg$reportedPos = s2; - s3 = peg$c82(s4); + s3 = peg$c83(s4); s2 = s3; } else { peg$currPos = s2; @@ -2014,17 +2034,17 @@ if (s3 !== peg$FAILED) { s4 = peg$parseesc(); if (s4 === peg$FAILED) { - if (peg$c85.test(input.charAt(peg$currPos))) { + if (peg$c86.test(input.charAt(peg$currPos))) { s4 = input.charAt(peg$currPos); peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c86); } + if (peg$silentFails === 0) { peg$fail(peg$c87); } } } if (s4 !== peg$FAILED) { peg$reportedPos = s2; - s3 = peg$c82(s4); + s3 = peg$c83(s4); s2 = s3; } else { peg$currPos = s2; @@ -2040,13 +2060,13 @@ } if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c87(s1); + s1 = peg$c88(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c84); } + if (peg$silentFails === 0) { peg$fail(peg$c85); } } return s0; @@ -2056,16 +2076,16 @@ var s0, s1; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c88) { - s1 = peg$c88; + if (input.substr(peg$currPos, 2) === peg$c89) { + s1 = peg$c89; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c89); } + if (peg$silentFails === 0) { peg$fail(peg$c90); } } if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c90(); + s1 = peg$c91(); } s0 = s1; @@ -2077,24 +2097,24 @@ peg$silentFails++; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c92) { - s1 = peg$c92; + if (input.substr(peg$currPos, 2) === peg$c93) { + s1 = peg$c93; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c93); } + if (peg$silentFails === 0) { peg$fail(peg$c94); } } if (s1 !== peg$FAILED) { s2 = []; s3 = peg$currPos; s4 = peg$currPos; peg$silentFails++; - if (input.substr(peg$currPos, 2) === peg$c94) { - s5 = peg$c94; + if (input.substr(peg$currPos, 2) === peg$c95) { + s5 = peg$c95; peg$currPos += 2; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c95); } + if (peg$silentFails === 0) { peg$fail(peg$c96); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -2109,11 +2129,11 @@ peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c81); } + if (peg$silentFails === 0) { peg$fail(peg$c82); } } if (s5 !== peg$FAILED) { peg$reportedPos = s3; - s4 = peg$c96(s5); + s4 = peg$c97(s5); s3 = s4; } else { peg$currPos = s3; @@ -2128,12 +2148,12 @@ s3 = peg$currPos; s4 = peg$currPos; peg$silentFails++; - if (input.substr(peg$currPos, 2) === peg$c94) { - s5 = peg$c94; + if (input.substr(peg$currPos, 2) === peg$c95) { + s5 = peg$c95; peg$currPos += 2; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c95); } + if (peg$silentFails === 0) { peg$fail(peg$c96); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -2148,11 +2168,11 @@ peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c81); } + if (peg$silentFails === 0) { peg$fail(peg$c82); } } if (s5 !== peg$FAILED) { peg$reportedPos = s3; - s4 = peg$c96(s5); + s4 = peg$c97(s5); s3 = s4; } else { peg$currPos = s3; @@ -2164,16 +2184,16 @@ } } if (s2 !== peg$FAILED) { - if (input.substr(peg$currPos, 2) === peg$c94) { - s3 = peg$c94; + if (input.substr(peg$currPos, 2) === peg$c95) { + s3 = peg$c95; peg$currPos += 2; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c95); } + if (peg$silentFails === 0) { peg$fail(peg$c96); } } if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c97(s2); + s1 = peg$c98(s2); s0 = s1; } else { peg$currPos = s0; @@ -2190,7 +2210,7 @@ peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c91); } + if (peg$silentFails === 0) { peg$fail(peg$c92); } } return s0; @@ -2201,24 +2221,24 @@ peg$silentFails++; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c99) { - s1 = peg$c99; + if (input.substr(peg$currPos, 2) === peg$c100) { + s1 = peg$c100; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c100); } + if (peg$silentFails === 0) { peg$fail(peg$c101); } } if (s1 !== peg$FAILED) { s2 = []; s3 = peg$currPos; s4 = peg$currPos; peg$silentFails++; - if (input.substr(peg$currPos, 2) === peg$c101) { - s5 = peg$c101; + if (input.substr(peg$currPos, 2) === peg$c102) { + s5 = peg$c102; peg$currPos += 2; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c102); } + if (peg$silentFails === 0) { peg$fail(peg$c103); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -2233,11 +2253,11 @@ peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c81); } + if (peg$silentFails === 0) { peg$fail(peg$c82); } } if (s5 !== peg$FAILED) { peg$reportedPos = s3; - s4 = peg$c82(s5); + s4 = peg$c83(s5); s3 = s4; } else { peg$currPos = s3; @@ -2252,12 +2272,12 @@ s3 = peg$currPos; s4 = peg$currPos; peg$silentFails++; - if (input.substr(peg$currPos, 2) === peg$c101) { - s5 = peg$c101; + if (input.substr(peg$currPos, 2) === peg$c102) { + s5 = peg$c102; peg$currPos += 2; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c102); } + if (peg$silentFails === 0) { peg$fail(peg$c103); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -2272,11 +2292,11 @@ peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c81); } + if (peg$silentFails === 0) { peg$fail(peg$c82); } } if (s5 !== peg$FAILED) { peg$reportedPos = s3; - s4 = peg$c82(s5); + s4 = peg$c83(s5); s3 = s4; } else { peg$currPos = s3; @@ -2288,16 +2308,16 @@ } } if (s2 !== peg$FAILED) { - if (input.substr(peg$currPos, 2) === peg$c101) { - s3 = peg$c101; + if (input.substr(peg$currPos, 2) === peg$c102) { + s3 = peg$c102; peg$currPos += 2; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c102); } + if (peg$silentFails === 0) { peg$fail(peg$c103); } } if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c103(s2); + s1 = peg$c104(s2); s0 = s1; } else { peg$currPos = s0; @@ -2314,7 +2334,7 @@ peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c98); } + if (peg$silentFails === 0) { peg$fail(peg$c99); } } return s0; @@ -2333,12 +2353,12 @@ s3 = peg$parsews(); } if (s2 !== peg$FAILED) { - if (peg$c104.test(input.charAt(peg$currPos))) { + if (peg$c105.test(input.charAt(peg$currPos))) { s3 = input.charAt(peg$currPos); peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c105); } + if (peg$silentFails === 0) { peg$fail(peg$c106); } } if (s3 !== peg$FAILED) { s4 = []; @@ -2377,7 +2397,7 @@ peg$currPos++; } else { s9 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c81); } + if (peg$silentFails === 0) { peg$fail(peg$c82); } } if (s9 !== peg$FAILED) { s7 = [s7, s8, s9]; @@ -2425,7 +2445,7 @@ peg$currPos++; } else { s9 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c81); } + if (peg$silentFails === 0) { peg$fail(peg$c82); } } if (s9 !== peg$FAILED) { s7 = [s7, s8, s9]; @@ -2497,11 +2517,11 @@ var s0; if (input.charCodeAt(peg$currPos) === 123) { - s0 = peg$c106; + s0 = peg$c107; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c107); } + if (peg$silentFails === 0) { peg$fail(peg$c108); } } return s0; @@ -2511,11 +2531,11 @@ var s0; if (input.charCodeAt(peg$currPos) === 125) { - s0 = peg$c108; + s0 = peg$c109; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c109); } + if (peg$silentFails === 0) { peg$fail(peg$c110); } } return s0; @@ -2525,11 +2545,11 @@ var s0; if (input.charCodeAt(peg$currPos) === 91) { - s0 = peg$c110; + s0 = peg$c111; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c111); } + if (peg$silentFails === 0) { peg$fail(peg$c112); } } return s0; @@ -2539,11 +2559,11 @@ var s0; if (input.charCodeAt(peg$currPos) === 93) { - s0 = peg$c112; + s0 = peg$c113; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c113); } + if (peg$silentFails === 0) { peg$fail(peg$c114); } } return s0; @@ -2553,43 +2573,43 @@ var s0; if (input.charCodeAt(peg$currPos) === 10) { - s0 = peg$c114; + s0 = peg$c115; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c115); } + if (peg$silentFails === 0) { peg$fail(peg$c116); } } if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 2) === peg$c116) { - s0 = peg$c116; + if (input.substr(peg$currPos, 2) === peg$c117) { + s0 = peg$c117; peg$currPos += 2; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c117); } + if (peg$silentFails === 0) { peg$fail(peg$c118); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 13) { - s0 = peg$c118; + s0 = peg$c119; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c119); } + if (peg$silentFails === 0) { peg$fail(peg$c120); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8232) { - s0 = peg$c120; + s0 = peg$c121; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c121); } + if (peg$silentFails === 0) { peg$fail(peg$c122); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8233) { - s0 = peg$c122; + s0 = peg$c123; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c123); } + if (peg$silentFails === 0) { peg$fail(peg$c124); } } } } @@ -2602,12 +2622,12 @@ function peg$parsews() { var s0; - if (peg$c124.test(input.charAt(peg$currPos))) { + if (peg$c125.test(input.charAt(peg$currPos))) { s0 = input.charAt(peg$currPos); peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c125); } + if (peg$silentFails === 0) { peg$fail(peg$c126); } } if (s0 === peg$FAILED) { s0 = peg$parseeol(); diff --git a/src/dust.pegjs b/src/dust.pegjs index 8119a40f..5b9a0667 100644 --- a/src/dust.pegjs +++ b/src/dust.pegjs @@ -5,7 +5,11 @@ start body is defined as anything that matches with the part 0 or more times ---------------------------------------------------------------------------------------------------------------------------------------*/ body - = p:part* { return ["body"].concat(p).concat([['line', line()], ['col', column()]]) } + = p:part* { + return ["body"] + .concat(p) + .concat([['line', line()], ['col', column()]]); + } /*------------------------------------------------------------------------------------------------------------------------------------- part is defined as anything that matches with raw or comment or section or partial or special or reference or buffer @@ -18,10 +22,21 @@ part plus bodies plus end_tag or sec_tag_start followed by a slash and closing brace ---------------------------------------------------------------------------------------------------------------------------------------*/ section "section" - = t:sec_tag_start ws* rd b:body e:bodies n:end_tag? &{if( (!n) || (t[1].text !== n.text) ) { throw new Error("Expected end tag for "+t[1].text+" but it was not found. At line : "+line()+", column : " + column())} return true;} - { e.push(["param", ["literal", "block"], b]); t.push(e); return t.concat([['line', line()], ['col', column()]]) } - / t:sec_tag_start ws* "/" rd - { t.push(["bodies"]); return t.concat([['line', line()], ['col', column()]]) } + = t:sec_tag_start ws* rd b:body e:bodies n:end_tag? &{ + if( (!n) || (t[1].text !== n.text) ) { + error("Expected end tag for "+t[1].text+" but it was not found."); + } + return true; + } + { + e.push(["param", ["literal", "block"], b]); + t.push(e); + return t.concat([['line', line()], ['col', column()]]); + } + / t:sec_tag_start ws* "/" rd { + t.push(["bodies"]); + return t.concat([['line', line()], ['col', column()]]); + } /*------------------------------------------------------------------------------------------------------------------------------------- sec_tag_start is defined as matching an opening brace followed by one of #?^<+@% plus identifier plus context plus param @@ -73,7 +88,10 @@ reference "reference" ---------------------------------------------------------------------------------------------------------------------------------------*/ partial "partial" = ld s:(">"/"+") ws* n:(k:key {return ["literal", k]} / inline) c:context p:params ws* "/" rd - { var key = (s ===">")? "partial" : s; return [key, n, c, p].concat([['line', line()], ['col', column()]]) } + { + var key = (s === ">") ? "partial" : s; + return [key, n, c, p].concat([['line', line()], ['col', column()]]); + } /*------------------------------------------------------------------------------------------------------------------------------------- filters is defined as matching a pipe character followed by anything that matches the key From 48171d98ea9fbc69fbe9759b51d4d53e17680a12 Mon Sep 17 00:00:00 2001 From: Seth Kinast <skinast@linkedin.com> Date: Fri, 5 Sep 2014 20:20:18 -0700 Subject: [PATCH 3/3] Release v2.3.6 --- archive/dust-2.3.6.tar.gz | Bin 0 -> 45510 bytes archive/dust-2.3.6.zip | Bin 0 -> 47022 bytes bower.json | 2 +- dist/dust-core.js | 2 +- dist/dust-core.min.js | 4 +- dist/dust-full.js | 4789 ++++++++++++++++++------------------- dist/dust-full.min.js | 6 +- package.json | 2 +- 8 files changed, 2322 insertions(+), 2483 deletions(-) create mode 100644 archive/dust-2.3.6.tar.gz create mode 100644 archive/dust-2.3.6.zip diff --git a/archive/dust-2.3.6.tar.gz b/archive/dust-2.3.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..1ab896dfa7e6ce8e61f07dcfb8e6db268759c4c6 GIT binary patch literal 45510 zcmZtNQ*<W47B=YE_+r~h$F^<Twr$&X(lI)=Z5tiiw*Efn{4+N*wd%h1MXj~he(NcM zXeglnEHKc^Zck$z@g#Z<{|n_5hMUX+(T6$T47EvQ(<*gZZ_>A?nT0HT0GQ+&Y9C}k z8f(M0`OXe~98YBfOhNJW^Q9KEZIWtcVxptDiOI^|o6p_w^0aj}dutw_XWPr=@OH1y zz5nK``@`{*|DOD3)lXN4@7HnfrA~K`@6-FAY<4@nkMyftYxbJ!PwD2baYibjp-)KW z0+wt!jL_A+`Gyy+R*v?$yO*!Y!L#+v_19Mu#i#I#<>jl~tMmS|(~~y?Cyp#tf4uy> zILO+QbUI)DtZw|-lY_Hj?Afa1c^jA87Op&a^62?JF;^Cx*vd0SRvxUWIB}e1BQ1Dx z`>Muyn>d8U;9&zEEcv)9LDnIU^f@O-5Qc}d`Tc1FHlc$-D~5de@B`po)$ql=w~Kib zMh%CqqPsH-y(bKcqRN*6ug4YBgu(gU#{~}%i=qjARr`_X<g>TmS+U2_>mCxAILjVP zJiPp*2;c86pI$a3b)5i1Kj@77Sw_(PcE#>I{J8j6XVOJ3Zhj8DS$Vd~K}JD>9Qrw@ znef5+kZy+fKWEih@pAI?zyp{blR6}B3t^AIwhTRq7Bdv~a;3EonK38naWm#9aL~UC zhWAiOlac(f;W2!Krs7M>$`;vkHXOJ(ah-b}I@9U8hpPJfAJY@3L_K*j=>jSfv@r=K zDAli)KTRCGwD4kL3^3h!+K0sX@TRUmfw-78V<5|x*ImdDmdn~B?|QeY^n6}kkMs$6 zcB=Ba%6t63w|>0tEp8N-y>CJMU)U;p`8?mQ-1)nz=l0)%&FO!-->)5?cGr8=e^!&t z<Jl^^e?C4=yy^8+c6fUq59xRKeH+5f<@0!b-Uo{)W_v1n#Cpwlx~uc}-X@dNf!^;s zqd>9CDZEc#+TJI(AHsJ)?t^Rdd3^8hci8E8{qFCv4EesVJ)a8RzxyB3<?+97ANwE9 zKM3;tf3~7|;eMbD@_9X<Upd9rKPI;u)3Y(rX8)BC%3q1G!{_myBCP9m3tHzd_gNXf z<NI?noA2{*HF>^ylgGC)I9U4<u>S9`>obLnrNJ`9yie02ug6__#2zBI*{U0$qc<`( z<;%)mzs^x{+#BHUpS?+n9o_>Le7~2=Bj?ZdKutb>td8%e@#yZ@^Zo}4dWnS5+1`)I z5wau{ULZVyxtsMoA)<;<fj|-qp`fn-Np8C3qHaieVAxB~w0ir87u&(_zUx6M2h6YD zPp+I9v26Zneq4h>3SHyQpI%4nla1!AA8|s52gDzJ!Xpa*rl+@~b0m|3_upO&{@hr3 zQ>Fi|V3!xCm#-Vl4{Ytd=u<RUL^@xs9C~zPr?z(4!T2l*$Ktec+r~ri^qouez{8>s ztS$ZuNz_G2#J=8>j|&&})Skf%*-`;TFjZ|{CH)`1osK1buKb9PYvxz2+HKv+N_~jN zC}Y*m<<1uzk3RppHE)l)k$mfKhnqKNOg5fW{Q+Z-2y>r_{5_(}FL$4@{Jp)R?ppuX zF!`hO+gBGaAGih{ye}rM+=Hi{u2OriPdp#&z5#c~OZff^)xHz@o!-xvUf%D$bzv76 z=E3R#7AP!1b*@IL&u0%N4qq-_H;#?-J=Db2+Gy`|0gwgb2L~628VO(^Xvf)|DI|W` zu%hmD8!nOo@!-Wb2`)QZReE!KEOFdeq`*XQD5B#<<&K~8e`Nq+@Q0re0I$53BlD@` z`>G`pWN$Y;zmNk|^i);DXu{+^ka{bn$Ths>Icy&Cl)*|H&w$@*2$3GAD#sraTBHV= z=53Vlrb_LPp*UGbyc*Pf+qJjWMeMJH12Bbu7~WN1nAM=9m^Mg8)SwhybJnc^1O3`0 z3&wZPHX%Ut*+X=sBkP^VA-gKfzq&;EZ4(oXogLiV-dpkuqcf-D$XN1fX}+LdyMNw$ zf+XTZ<X^iOkw_wC4OnB!9cslN-gZ5}_IWd=A?(>_%@&7KoOg1VA6aEctg`uKN0Yy` zn$rj~r~lXkl3yH=!}Lhg`ziR(!94W0rZF{aeG%%*OU>&DieU|GeZM)0{PcJ^m1MDI z2^7`a;xwmbkec~Jbs}Vu@G1d+>BMyW44Uo^p%~rofhN&3$BSp%ys#qO6xSFQq@`x| zPAwe#I?6{Fib3SmneFR}D`(6OBqMfo;|Ucs05N{U8%A~k-!5z!@OtVudIrsmoZqr4 zuf7J5Ps^I1c<2S%uo}1QQDWO4zM^rFNwbEXW(ULC@f+|GJ5y;J49(^W%=Pvc2uf<) z_oL|FG^LO^K^9<<Y!(^?hCCSdSl;T2uUG7hY1GXsMIFGMaCpes2#drw2DxIre3=oC zkz)VaT#-+6XP2pMhU;i-%OC&svU~fJqK5#sR7&r_$m?F1cQLLdZJWH@S^4*y7#R0l z;iyyH!oCl}7sas;>yLOpkGlq~sv64F8Wro>>xq1b39d+973XS>lV?0qWv$?_fmxTd zej}_gtMrv9>-BL*vnr9O%JEZKGN#qJ)v%Iz1PHdWS#O1kf~X}yE~R<lY9}OU847Bc z(!x%aS=SBOL@h-|in2e3L>CI!i)l9nfJSy>jlNK?=6vxY=3-z>eS?B&DKwOhNV4zw zw+fD){?{g<m7oiq@=JQ1`$19zOZ}tnH+;97TOH!0EWa!x>M)f_Ty@QI_NDty(3<@n z5=$q(H_cr8SJ{tVtUeLN{6w%!S^el0RsW=4Lkize)Ev1`FcsJ^P^3&yi>8Dqt&{2W z{2PPVAA6vh7D^ZOuY<}Fxno_RXvyGJUR=2he3`N61{ltqLDwp!^=B>H%_Z~)_8kR+ zC-6jQQtEz-oibr~n^F|Dc+JAH*KlZpL)c)3C?axVWimp6bT=wsM`sQUVDb0njq{9f zwITZbNwN^NM6j@!4&sq3=S&12!4qRh;_Sgh#+Qv}G%+HWHc5nqPMJ<J;lbPnCXh2k zS56F=5XbW<G~@1~%=*7(5Z?>ukH;+>$~6?;cNF=4TVmrr!*hAI1QO~(totzI<U9>V zFx5ZFQp)Va!q;iQ$x}Nq%W)pngLiK8<&*rHg!-m&L|DhgBQ{6RS~%_7Da<D!8k7}C zPCwY2byVE#CL$jX3GPNvRvQz_U#37%Lo37YBS<EFJDe9Uzdqh7Rvx8y`Wb%o3G>kr z%5Uc}{H_;;fh(W5dwjwQ`WQ{_anp{khI3NHaX;0S3WoWSbpbd&$ZMUPVLAH*FHWD= zQWQyg#KaKM?$aL#n^6=hL}ay@4G|j!6yF>^(mq5`AL|@XTVAfmwZS9Qjm@?1;yI0D z+inKQPtgSX4cP=U7_eo?f{~OJ8Cfz<i-DWS2?I}r6!7F=z%3kps-!5Xr>ZCdhE2R3 z%DWW9O@gs9*}(=nBD)w#F=N$c&KPPT%}jHIHG;~=$~I!^S}GvPy>+t)3*o-_7iX9X zSB{{TAmHDlW<#3?O>@~wTTUfZNFe~$X$qLCA2ALg;4u!AG^nJBsMS3Fg})461d@^E zmRO5FlzaOXRab8pUw6~m7O*O)Lb^qx+obq%5fGHeDe#X;f@j)w3st2;iR({ca%KYH zyM+4$plC|DKv;d8j6!$axjbQ}hzo$E3T%49Qr)y3j}$kSplTSVX2MsDN{*RruDh7i z1@<jJGq7BJb#OfRv@RV@NuKq~cCT{2-&;AvSfyNQ&R@@sA;vA{Yt|Xm|J*A)DW(u6 zE>!#|K`DwTIo?5MfY6i-hDiVZfD3x}i1JAtIYPy61p!k_Zge~FW7Ejtu(f%drw>+c z-7jt&AXar9=gpgxzae9(Gfz0Fj&+egs$SuU7$JN*3k!!R8He#_3}rTZl<{6pr)#iS zTWymM_iHX~C_FcV#?fr@byt~|AE_ma51I*X%~J9t9?#s&pp5C_s_jhD%^~TIVDNE? zDqggCczW!u)4{iqGauD18pq)8S{qo|^|`1m3jV{7=!eyXIWuA&{pX~J<Wih?xcMoz zxca*^Il~@Wvjq+@rX)mSC8>f6$W7yBFx!FK`TZR_o3nio)TIsiCjfDMB~n~$_-{n) z1w)XTVS%joYHhr^iA=lroWutqJ(Ti{4waKDLlWjD!9u*MV@8{sH?(-cx%QvTTr!OM zumOZK!)4}QUQ?ieF)g$K4h88iG^g;<Xq2gJiwlC6u_k+@%mt;vEuzf2K5}|><`p5? zS44U8Xlr#Ucq_Yakop~5+^LVipbMr73KSXWvj~pRIiLgV&}374pAXY!-E$XkO+G>G z@rt6>$4cVX1A{sK{tXCI<T`(P@ZAuo*&3b5hy>$;6+e$iG$0Rgy-_hiTp=29Hk^&6 z`)IsmxPsISEJW}C&qqYQFjx5VYvAzS+B*5zg!d<?>?1?G`uZ#4KHweo3%G&1?Dd51 zRdWd(vODT2wW&0R{fhdtP3=Qcy2)B{d?e7pMA$D5!J~8+zyKM~Gp8j?c2LPu!-+4R zSZRStP_Y!gDu}!avO{P%HTbXN%;twZq?8~ibB#w5jqv&hXzg&5o_Bo9u?KLs{im<L zCxdUR_<~)OJTYV=otro*le*T(O_rZzdD~SZ6>t^zk{KcM;5TpIuc?y}NfP?fFcg#9 zDna;bs3d<SsK3dPaO#^C6f=&C0F_cUobmAONW{Q?jr#gKnE*5~U&xJj{<F9o5&x@k zuuFV`4H;|3{VcmGRD+I603k=L!A@gM@FM#oYvKz9gf}P~>JzC4>nJ`t{PLR#3jsm` zwyCMa)20pp6%Qglx7jwi6t`=FB3H6FN!W$zJW&xFOvNgPRMJK{)159`h(z>ubNE78 zxxzd33j3=`Yn6ZY0&n(4%^_35?d$e4(vCJ4F<Bh3UM@#20c_Qse;W1xlR~m`(%<iH zt5Ko~a2nX`GpK6fpgT4=&P)b>Zk^ztO=3MO3Y3;UHqD4q&Qu^402^8g$hen6S&i26 zqr}uiXv2bV(OLtOiLxm*ubO6=u)6?D>=LKDCt%^ks^(#oQI0L_1d;y{u-hAEw<$x^ zoLxM-HNW(FO?t-y)k#*YnH3cD@*Vs0`CB9%qeZ>Vx*&-i21WNV{ZN(*X1mP4A@x<S z@cyEIwy3sVHAajtxCh~MER&MK%)dM`xrZ)4(2l@b+?v)v6#h@@VXso1;hh}G=^WMW zGl-^v3|=8QF?sObpP*_@<y=cMxQSOy?}Erb28`=1Fj1#rywx|RA0=M5UnqApqeY=M z^N4ly2>ibaV@frC^@>CPbiF5o`&if^+UQHN?z4l@1h?MM&`Bo{6P(c}HQ`h3PM;6I zVOe(<WZjzALc*@iuAkNjX@7V=x=s6$#Y_*oFnczw`?U0qm@Aw$52yT?UZ}$u@_!Aw z*CCXyCF9F%tA7kWtk>8W^j7w)gqLUIkO+Hn1X=sX&Uwt_T9sxV7xlx@A5%i`h(=ke zNDk+3_;juA0U=6<hn{TiBDJ5?1=8vU0rz+H3Lek_nc;iSC92pf+(NF-mYeX}zz^j% zoXb-eJe=n$>J*tGA)s=p&`FPXL<>{g%Xt|_dgC|Lp-Me$`%nZbIa7rHdG+$&<l(x1 zlq3eaE%zjP|4pE3ac`_F^=0;zyX&QzV;wsqHyZt|wFW#UqE|h*!;r~0vH>W!bUF5J z+%age6{?PL!Xp3WZ6t&n65L2cD9OuIt)@E0ne)Or&VPtL2|5&_0#*|yCSlY!X7~XG zSH_S?z3s~O4X!EoF)0(z*z!J&E~Hz1gsQX+V;T|ED8}>^tv{Y+;M)BOnn;j$GsG|Y zfE6`!yv8Cx3eBkb`HqaY3^ESuvIhhJ^^Gul9xIw_lOe%Es+UF?N|SuFb(lx#r7DQ( zJr6d4{Cylo6`Bsbaw5(s-1aPl_V_8Ytm*?>WV)bTpVpo@caInqSL{dtS{lHDIx;wY zr-SkRrrn=#Xkl>Xu<SNbY=ZE?<biD6NOV#F-_DH}l=-fKHX$MwoS)0V6=DtlBjq1o zEF9QW^1E3!<3VbW8n>SgLFWK?&x$*d%6aWYb>NXco84*F&<mPFc)SmpK0vw*F>b#i z1(tE!**dzw2gndx;_hh=mC1`Ex4OT^?C)q;yann!80G-FUNPt^*r#r=d?=N@ZKk)b z@iJFZZyy{E1T3m64f{?3E;ia}6udhnWuV27$C49mAXc0JhNntAwHFzR8uen^dlF3Q z3`Apu64qJFD0TVA@45r^NL-`PQ+U;wU;Mxm{HwB>l?X%z2*H3~s(+8TAGR>)B1hJi zjV*b9<vvRM21jyn{uKn9o{sNEHWSQt9w9cgW11@S7N-Lj+o!6Tl-Qf&+np!Aw$t&1 zz8kWu-LUzG8&s~k2-;@QcvBl>qGFKw!<S`#gcXU25#t8CEzgP3py648ok@r+HwvS~ z^7w7s>IaXVe@ufW@i+I#`SBOc9dl1InKo%<>Db(wGQ>eaeRU}I_nH}S<pv93Bld%K zN|reKj`R>fbM;mLLf#=_TiXW}(gJjPAzg*E+)<(u|C>5){LHLxa=y+jG0@f(xx?5{ z$h~}I;u}gD-BY<t4cUt2EP&)!vncqe9+o6nWIih1t-$_7kXXrIz;7`1%@HUOOnqm@ zbS6+iHlbjY>K8(CK3SMHOYUuJ)H7_|MK`)R{5(LhLtH3WkFb8BMwq4GXRG~m3fDz; zc<^vv$d<Iol+}Dt$Z}!ALVAReL*%-t@BUb+WvKbuN$OE0rVaCbrT)+nXbMa?v&J2c zi*yD46V>4$qaxmh5e1mO8Sm8T;DZ01sEF27@$=efmHLMOgNCcz1En+Eh;8^85h$%6 zPG|kFQ!!jRh(3Kbgl`?GqsYc7p0MQYlXYQ5bt3EWxZ!Cdgf?|lh#R=$bF+Mg(RAr? zY;2MNp^wr|Cj_}in@Sy4MeG<0<L*AT77MK0sz`f>3=Ru*^H4@<m863Ybg`@zur-lI zGl|Ac5D11D`P2&0vo*G4Ceol#3~G_E=eZ-@HUQ)RR@v}Px#h$q&~nphL3&3LG1W43 z*p?0`C{Z?#m@a`9wLb?*HpoM*^j1!VHI%>>G#{IwB=CkGsOcvQA@Y!$7`|Tv4s0?T zxz^Q1>w&gHV{)6e15!jLfEP;IdRHaHwN*W!0d+W#@f$$MBM@OrYMZvn@Jn~3NSmkK zowPBWa5$vHO+bTbT8$eE*k#a58HWm*!wy+W!Z5dMmBj)?6$EH^tg>(VoG4B~!hl^g z1z64LE@XGP#J(|;6-_25!+TFgNJO|~?Z@ua?y6Z)06=OS`9|Jaf*TNH-aujh6ngF| zhkmV=F%k3`c_UXWe=)F-Q`}ECmK%xG>4Pj-sjesCK#5|PUWA0;`MgRgU=XTAkzDF( zSL&C+L1mGc1oVNJsr1CUA%nnrtkC-=R0)HkXg~w?CpsNWNFy&u(+-go3W-Wo7DNv0 z^+81&De_d>jvR@!t$+V*cW{b+tsSSbLy8~o9=e4{zT}(*%QXM^@82>5gFjM5H%Rof zZ!4yt9hI>hIm8$frq#Gq<=R1P#T<FwD5HN&p)E9?LJdk+=8>Z~8<A6c<Oyd2l1B~C zhb?|TwXX=tr#$*%aBcB{m$d~(5ftWA)Vla?tqH+j)j4Mwoxzo3wORzEmhWtQhSr4T zC#~FrIwXUVeeIhBB;!jkN?=e~ut*wcHcJY{>|!THG<ygmY)NuWZ<sP7;RP6$IHNXr z(WlaeXHMKzCN*h(5%Qf-;Ex);8~Cwd$Hk9~RdY|k_YTI${mIFsB#)rc6WG~o2d!YF z8h$MdOd$gbRqHPK9C2k*+o*uC*>@;}$te$2_lZZqIj!`AXuXC}6lfJ?g`utb8WHvY z%MPUSwylXp@M;<2CNn}~BDoZrXx8XzWQ<6Wz-}Sg#nZ($;lUkn@JE9)wnDx*T7d!K zwk)?tA{+FZdD}m2seQ)8PmLNw5gV{xzTl1py~q}UOoX3O?;Dx_V{Ak|4Uno_;|GU{ zIaMMJa2^^AuTGWn+A1VUdl)HG<~4yL5~r!Zp-BCS?$^9!89>R)2HSiUUKYx0V9Xn_ zkj_g|_lQ!KdKweb3s(p=0!&&Q;*Aa)e*>_L4(Zp(_>^C#dV0oWOoPRA0{}40OfXVY zi5zJrM!UU66KvU|i%SADFM}>Bm!^cdeu)LHGDJYO9?0pa_KhNnVa&@`bF{~ZN2xhh zXdPaBCS;!qOWFGvO&dYl3&@;>oX8QDBV;iai4Br5DBip^$A}Kxux|BQTr?J-Lg)q) z0~G&a25CW3;&dtb;-I4K)n_ptk{|@q`(o`IWX4e@$(Y<EVE+z1a7!)G3^3an(7sn; z)37<zuO!RnV;!z8kx<tK4a$0Cj9EunSvKHNKH;%-(9ql1ywrlt-*k$t!DmE^9$ED- z^>FArdwIB}%iV(9TgGZ!fpN@l<^Ihxc&c{jL=B$SGYRyY57%pr9uXF286S6lZyqjr zOvlxl%E1~y=qjd?a-)2h(~;P#gdHfRr&{BIG=A6PL(dy4JVVrDwRnp463YpukVD!Z zg=KTb)tD5)ZffF>T8<;`)YRc2OD{B(iv0ByqS5W{F&13g>f!-_i)!_~e5XPe9TS>l zG!=wo?fo+KFtIV^M%xFpK}1)I3yePSURyq`GjXnDMPz)K>!B5_NgQxRPfjHDF`5p% zVjC{SUgMG;&nR`u2ue88BTEB2G;y|ZI@mH~%5C=?AED5})uY<0dUi6bI@u8W2gvsc z9gRmYkR}(uhq9~f{pwi)<iR=2CPDt7s#Fq7%Xs3Ybfr`kW0FK;qC`OBi2W{zp4!0d za3u}rug^Upp5;?&_KN9*emtjOTvYpO915fK*Q(&`m``oYBE*zQ!VC6<jm#KlYwGia z@hZRPufDP68TNptV4%*{r>C<5Z>B(nrYLY;qXMKTmzMfnM0CVuPwm*Fj!@lOrBp=! zC42MT$`qM0<hPC=fQ!wqoAS{BOf9A#sdTJPEkD4Q8DC?NR#VHZ0GzNG3mlc**icx* zN{}W0T*I2#IA~57F=PCVqmYA+;J}a^YZO+S!2u}P6^f}<M?h;C+KoU0CdK4o%6`Bt zy9u8BH<5F&gXWApHxzccZy;r1srFss2JwoPK(ou{rj(9E!1~)hSPfXDRf@|+%xwna zo;H?15a|Z2{?KYQ?2a;%QnaXL;s6qB-YZ%-qyed@+j49tS>qKr>TjRam5jOTNJbCX z@qBuPp(1mS`mjEDg0|CYsS8msMYnpnaLSE-c(K2qV$Zqb;J>6&gUUg8PB`tMK<TV; z4k9Aul)aq;t=Rak>q?l78_lA>ntuX0jY_Z<j$mfso4<!;4N&7HpgEFIhn?(Obf6>A zSrYm%SVj_iz$y}1{15m~K-bl{*-AP@&`C6duAsK+;lHE0l{IJzwTjb8uv-?LL!y0i zMuz#Qv?>zg9E_tCUgfG%8&^B-MTx@pKS{t*4aN{NQd1=&6di%!1dn%&>_xT?jRF%= z1OA8s9U7T7=qS+)%C4=%+z^|&#(13L<Dv~EanVs@Dy22H29TLMAramIZE)HYYWxz+ zGG(+PbpWz#^6b*&&6ev?a1I2g_Zom7fRa2lOq0bcdfuo$TmTq_-+f!NWQ%dNZSRAp z7VW+-6XEa604Zlk0STxhjWmQFnlw}JKvR3cd6I4)N>OQWZzzyxH)UEmpNmzcb|_MO zX6OTe2@$fXGgS}u9Vtlm)hOGl%bOc0d8Db#p1Qew`=CH*MJ1qoQ9iO6nA6n;TUC`* zxs2H!G64yl!iO#57GM6ltG1VBXOR~MwzG?s@(L7u*a)N?=@(?}TQk|zV`U_HaUxly zTaxT9RIMuGPJhc+xBFtemQ4353WFHQULB_2%gaNsSFqUqiP1h&beP{CZ+`MJAmV<C z-pG}<8vefFHN<l5RevCw<IRW{F@*y&$OP+T5OTv2l)4gBJ7UxO6%T0U$WKVSU|LOD z8W&Fcl>4nk`DO7~HTU$OqZzj+A@xfM*p=AktMn8Xpw;ssvc4+ow6=JlCg6)~c7~T; z4WV^rx$ZVo+P7UDK&0CFHhQ&2!ghF=!|+-X#l2jFgE#yNHSxOzkKlHUQ&Yl&a$UC0 zkda8nRR*ZL^dpXj+_G|B3~>1tMoi14+bKcW*4ID<qD3XMvgP4D3K~j23pA)-+<@UY zp0@$L3z$(cG9z0U>x41z4#awBX?U^W7<PxEbq5+cQZX?$5aLT?@dpKC$AQ2!TE|@m z4MhZv!9brt^BrdK4RMXtO%;OLeHZvbM?$qGy3W;6R76(+JBOMr%S*nuw$yDk2wcrZ zD#Vt+ny#$uPNW)f3a(*b6K^SV9!p6>iz2g{?Or!Cgqy^M4St)q9a@^mag36$NA6Kk zX>YZglRMu(YtpJD17l5l&_t`sAStYoz@)#8!H6Y^FFl4+kF2MPMlk$!>iZ;Y+`m89 zSm&YT12Ms-k_}-8DkC;0rvx8dJ@Pmfq01Yv$=&t)Niw>;li`IIlY1wg1|^?onWpWx zB+L+%soqT#%|1YPhRBmZeC3vAi!v#8T?1HTHa^+v%^RZFuvOBc;f&Fw3Pk1X26~SJ z>la0H@HlBbFJ3f56FpEBL(Q3r9ZicEo82jqXRCok13P8flD|;xoQ@~4)ZVzZby37s zJY=Cexy2>11swYY>ujT$2(t-jKA?uE((1H~OSmRT+Js3<y>5>y6Y_6temfEL=_)28 z2r0V232<oUz=$5<T}fxSl^Sex$ncN;A~Rruj%r%zE(Fe_p}uz+mSv&Hv{|E!J9pi# z=yC?)gYfy5fG}X@d4k7`6tBBTwy|BQT5TsVfn%hj;1;!F2yu{#!bNv#ioBkLSu#{a zcA1r6)d8eSiLM925EJHt9WZAqT{+YS_QCl`85H+1nUwHD7rZ*I**oI#*_Ejy`S5XV ze>_$9Hvg=r>wm3%I9@HQt?~HWrr%K6b}p}&YwzvvmC?V&Aol*-(1^WJh(A~1H?Nqq z{+GjL^pA}BHMV<J`Ud1yIEbx9;Sa3@ZV<@qVPm0B=<xJY<ms+<4r~wLT-^1M_49)R zxMfN{J)Ag1a0GGh8P6jd=E1AxFDom9gJtx0moABX?_u$Ajp8{t_}@3qmva=krZbcg zub29@Tm8;xqcPIsSsA$RS%25x??xqBM&C_n_&i^AHm3HI%QlWb&!3k!@6KNC&T?NL z*OkwBBjxk>(kR65#-sfYP#ne=KjRMt2d2{XrSnCT6aDiJrXlO+-$;dIM!@lXzCc($ zk$zT$q^Np)s_9#$Zt%adT`p6%yXV~bYf|<2eCY7ZOWfsM1q$8HzFzLWau+_#<-wne zAFt1hJ>6BjUhb_uTTjzS6zCPPY`pf@*ffNO>wi0}!rMsZ=Et!KqbQ0qVpb4f49bXt zYrhF&>vTN&b?57FKFoMfpu^W@(0?4dFaH4FE-DA$HsA1%*WQ0Y;uig+>;#;Ce-AF> ztk&4B_WU>;j67BO`~2)JI(I_fy?lO!PxeR8LHy}`;Qwj~`8GH(Fm7{f`<5e?ki@-2 zU^_&d4!XoY)z3O!!#meMi*kOs^#%G6LO41Uz|!VK<#%u7e!XnW+gRAXuA!~B)q%*3 z3)ZPU4wj3*FLa18Gl-DR-*^KbUK(@{kD&BxU6p2Bc>qWSAm^+-6RmbjG2x`ExQ<nm z-g-7L*}4Cu{svI@xY6HWzA5N7bH@ZAy&~IiVUdI(-|!w_W2fu>wI8tFa`*nUw-=td zx_&+sw+{|o=;ZxwZSB8*+rt0Z+)VfrvX%FFYI_S|eQ9*M%I<cxiQ}Zo>rE|zb+|0X z^S9yR*L5u@csE$~80n5}U0Iq!o45=60R^jD<ZT$wlwBpcti<pv9}0aW96Wzs;?MA` zoX@l7H(vNwlV_CJvrtd5VZ_~w?(koSu6!9OeTnQm{<z<nGR#*gJT25^aNlB|d4nIF z2&iDB?2w&^bhktiddu3q=`j%f?sR~o#|H#j;~w>mB1e;w2wW#@$WF-KFLGoBW9(~7 z!cD#pnY?JGG=3t7y6@%d1~%5Ui`{Y_5UKnAfE~ZdpRn(0$l{VvGweZk-~wVwjb86t zKi)lu-ZBE<Q(exsg+bQKZkphyC-|+Z39y^SSp>lRS-(3c?8>63qRIO%AMHe*3Mt~s z4MI$aTbXxq%!KznsD#f()!tn_Uzw`^F8jdG^QJ)avYy$ZcB{kvZl0dm*_!rwR0j>< zNNW2w9piD89Mbwv*F3BbWUU(_q5p#ZBu(QpjxgHY;8sE@R?UT{HR<B^x<~>mt_`kT z2K71XIV6rjnjYVW9?bSfk*j_DP|EakH$1#w;XNOY79{>gpO5eCDPhrq$f})yzq+_( zxo0++N5Am~Puxd1aP3p9p%{91FWX?kkfb6^You_=$L+A(>MhSj_qUvjDjiud8dl}X zo!s$)>88r9YncFp0Ac5XWs^50F<oZU;8W*BO=`JXUE<)!;CHzIkDySd7yH~VE43Tb zwE^W^(@bRcua29>FtPG$p$~C7q+(&QTFNM<hUnVl!`tt|Ii0(O&HNjJLrDn_(=%&# zVMI0%JVbWF+!<+?hbdix;;H4M)*YLDQ?^*jXPjP{#MGHN)W0cC7dLnQ?#YZ&U_KC) z>qiqt&obymF8`vF(0-h*WU48mZh`d<t*xv#>W_;aFS-vJE;cY@saQR~M#f*~*X~}e zwn~kBzKMEKmqz*T84<K15jiHqOV_D;_Pw_DOSxrRgBNP{fEq}%QSVdAr7Z~Z;2poB z_uJN|1>W8&-G@#;d7*}_!2En+csYObXwVRDuW%Q~!L6&O*sI#G&!>s&!k?(Jix-4m z>}{O=38ez|HG&?Y9nk!~Ig!U`yn~SJ8VS@gw<**>-~_?mc(;IPi=AHa+~%<q+t<<S zKy7Mgy+RJ4g>+xF7kc|0w5+Y(F6WnqPQVtPB%$babuye(=2h(c^;`w>`}yrQkr{R2 z?EJOE&+T&ec21C^%a1|&XPb5%Wl-DI@FhWa2fu<fMt+}}Sn@*EPQXT|QwTs{aR2G0 zv>ehv1b(KUrcZNctc-of*Ifx<OQtr}Dn<Cbm=xB=m2$W7w&kHqX$J%EKNKzGC~i?l zm&o6R_uzN+E-S+$BK@Uz@s)|a(4_xw;6;)Iqj~f@C~LGst#fB5NW89sqmQju*X_t| zVr+u$xEZ0iM<dM@o5gkR%2k?^+j3n<wx%}z1nTtG*fGP9-zJEdwGJ5iWCIY6dxD8^ zA@F9=FS(+HTS6ozv~H7=`36)S+>Z8NA6>-)!-=<H0e+A2A0Y^^gi=ntYtz9SiKt-b z(_2GH@B~CyH90mpcHyi(;81jOHwA=uLiPb^dG4my5LOqt#jnJ>#m^sU7_(fzE-WFe zw4dIOzC6*QzSLwbJb5o9!1%|*(-VYm9stHce}{nxe}LmH4>}GJ#q4kqP4-OQ)d&q) zfiezlk-j<bzwyR>Zja*nx;o7|?(nbidp=nm98RRZ^mQA^#4W$ZkSy2z72~kl-?J_+ za+xn>v{({(*dLA1p?&qRck95WIB^-<tH;UN^$;kY>uudoRfmdr+$V?{PSyL0tJ+2@ zk@u^WBB0eL;^CqjhaU=KR~IE7!=AGsoD;cxZCc9x@YdAtFul-KkyDT=kTR3}4EeTY zR~YA(rCon`*NL(??N){+o=jj!eQ#5|!j!~ii@`3V6w?2V3-!ZF4-wT(q-H8P413P> zNj#maQq(6vh<V6x=Bm)W-C+_IR(Yis309CEjxQeZC|YmbelKZrCt576EOqe`)H$2; zg`xk~SjHKOpWmyQ-{WWuHw`LTrz>S%OrkDPep>d;S3@xa#*bgMhGzia&Nw4R9h69s zIi$&ja(U|tNfTSQ*+3Uo7Gn6vc8KZ3KMTdTx1UwDfsu~0uc=JguAnP9_qm@J2|7fd z$n>-r=QQufx1uT?G4i(4Yz({r4Cv)>=u$u)Y@{cz6>-E0HUn%)`j6W|tf-7pjVsSE zpBbp&FIH;_x&kdA&Sjcg0~xQZ_Mo>ydE>dtrPbnVZ_8_{^`2Mta3Imqr~-%iDT<=3 zzZMH9K~HRc1S!fX5*$V;NOjRcY{}z9a01CzJ~)x&5P58ZP_fLgUBSbsRLpSiQgW`q z0cHt_oSTWMac6}sft8E}5o+WE>(bXs^H8;J!6C31yC5R{@`$V9U!d@G9$Df7ANydA z!58o`(ru?;Bj(<q*`Pfe9Pd^x_94q7L{stss-t(>?dB$Gg5qII2swcUD~4yGq&;~S z3%*e|O0S9EVcMz_L`+g^0ZrMQr2?xT;8CQ!0-mvvLg8CqpHCzGG_eIju+v%iCP*LK zOl*Iggd-d83*r_88z{Xkj+Dp2NkrQ%dNqf_6s6FHaxt7pLuO-{u6s@^yueo+vcVm9 z`eq*RZ5};VAy_1fc)?f%Rl<m-lC@d9+7Jsd9{4psp}Ys|`LF@<*o+uH3Xnq4xdDRO z%wh?uC{S%g?_WcKW5Y1(EUaRH>!Jk9>%ek42Sg7%F!knpJ-BF<J|n|H3fb2_zToSc z=f+vEpzRBT?jmoaVwxLMcCo);$OuPB4w}MjLbM}_!-Tk@n7)wa;Zs&{;Yp>(GbNGA z0stfT9S*o{l{CGtz4sBpWFR0#0eORxLwH0t#Dsh1tO@FSGWNR-a(Z`Mk=OPF<eo6# zPg!(PT9#iXo1o=^38J7cS+^n4FvJiH3LSS<F?1Pt<X?&6u&v+k9jf*Od}}d~Z^K}~ zd9TjAJ^X*`eob!)<F4<FVeAaq;aS@^UU@s+`qj~yiNvPsk_^y_ga*5UwN|uamrqa6 zAfTG5J<~JM4v}9i_6eA#Y}q0Vkui0X5wYvcI`ob%JIH_T7gpcPas)I|?2?*GmYDpF zUt&bt#mrbk+Cf1A_8LB@ZAm;`MFDFlAnZGwmCei8;*Hy5?}>J~d9AwR_4}c;T{{g= zF6umRH31X*N`}YK&r`#*#~sZLDj{Tf1qISvfsTqw?&$;42_fL@c7Ow73r~8}n;5^d z3;5M%I;BKu*kXp76{;rj#N@1Gce2rnU%)2rk`0jYikEa!EkcXCcLdgh{W10Iegw+5 z?P$#e<(*SW)=Y(hV53$8)X7wr!y9*&5=$u3Tp{GXhs&*)Hr*<#9f3Oe(<>34zN;)* z$Z<-Hj8!0o*kG|@!f}aq%;f5(&^c|`M0!B|be0Uxr~lEk7=w6ekeT)&({4<0yZjCJ zvRz2N%KHTqY&=@PhHy29f*hV@<S;yn-k}L}d}m;T@FdToGT1kI``0J<R40c_=rz_T z>5+l^keK<N4<RmEV#@>T?NPjwY_<frBEN5s%{k(ml%X~@^=I7Hl^LT!+!v_VxL<e8 zHUUHEYA{H8f%h3Z_n?&KV@p~oo+*QXN-#kG1LtG=ymB$6^Tzen5D;6zOHAO2>xKF| z*Z?U07jCNVVh1y8(y{`gK!j%xH?~_+rq{T<2~-K>3lYjUxXvZEfi0xa?&o0NOB5oA zqjZmMZ*KN(@&R$QCw(9FP(j3a5@ttQH(WtPr-(hWYha;g>wzU(Pptsrl0Ly-Z32N^ zs%*HQI{sQsTf~AL>AHfFC**-N1o#3QKXn8c9^ZBvbI_iCd3;C%#m|~N-~=I$&zTAT zJ+r@|6Ss{4a;<)Kce~53`Mzl@FC>4lL-rliu3n0*dec>}UNoBXd4!hz;#EJ!Nh&sO zESLT6HL9Mym6~>puVNJTE-?D?L*L@xU@z_n_(th}4f;<|==uJ1|MdU<H!j_o4Uos* z!Af81e{R;Otnd%Wqc8P-V$*Ag=O-M^KBPt@0f5o&dC|ux8U=KD@NLQD72yB9Q=$$+ zZWKb`+pZ+BQTmJ~Yu<w$U3(BWO6UC^+sfOP%=_JhCr>esg4%R2u6Pe-dg;*s7_ehG zr~HHc<)@cJcl=dz3N=pZ-(z3FKU#D5-fdQLK_D-MO31qSenWC;=0CAvAGfag<9l^J zotwRS@wBtKx%yrHLw9$f%>Ti=>M#CPx_?oDM#oLn$Pp97YsXDB#3aw7aWKp3PwAcG zL){xP`U~Y)`5O*VlW!vY6ANEzm@$8Xevc8BOc<O=PaD2L=j{(cWpk$uJN5np^)AZw zhIkoZ-cZdDJLH#o;HbFda`oW6T1y3i{QR(yX~0PzPZ<dvSylDnn%4!5-oZj(dSk0h zR(LJCp>h=2R9CJLiN#kzIvzDK!D~A-<Iq3q$}TPO6{7fG>3XKwW)jr=5@Ku~3%0oa z7~rFxkd%<Sd(m8{ii74eY!SBEUnk5my5-ci1W0G$NtB=3*%P(c2nS*e`!;;6x;C#C z(EbM1#lH*U)e8^Xj3ocuKe7a}k4+L*TPM}B3#l<ogb4sX9D^=4l4Yxb<{Bw+{R^)6 zUXL>4eh=v<Ics|-XiF@X#GogZj{YCt>NvdsgrRz+_B7GV$w$V<^v|_Ecjr$aRwAX^ z*!c!)<b)JrBuc{$S%Z1R$1j&esB7m3>n=Z5zxzzibcflO@p0Z8)r%JeKNxq$z`S7a z{ExHl^Wv_-lf^p1ZyZ`=@p>?4$dW!KvHWh5{KcQH{lZtPr{wgx(9d}7f#mQ$-pp>S zbMF$CopFe*)J`;{dL7}Od|tT)^aWkD-G6bOtA_L4GJ42egTd%l=ltqhDbQ+?pF%oh zuHU$Q^Hu8QcZrbhAM1FLue)d{@NPu46(%Y9?=t|!vHXlKvdL#9Rj)QR1jK(hD;p*Y zZh}}~r#8rUoY*~RIuD>tigsC|fD|G|Ujy~OpmkwDic=B^t}gyQRX2QLxq(f_NenZR zhqhr<rC4KUzVz=q?h*KLKz6gN$P=OcpHMRxq1;|)38Zcs)QFR-qJ)>#rpJ7O2o&l& zkdIEZAC{o7#X%;nGc^v(T>{V~(0r|96oeEC^vPj}xA6f_E4^@dZE6g(h$+^`W<$%S z;K1oK6npJ4l|(KHacVCQz606VwHqb3Sy5qkPxvh^_?EwE#MH+_0F>I`IE+%-9YG>9 z`;jgg)$Wa15}!WSV(GgrM@5-aayok90-Ct^R*;-qJqeGl!Fl?9=>)=IStd{W9&zxk zz4pKM+KckaGQ$a0nFrMF?m-3ZT2`uz*Nq0H(q@?ci{D+Uvd0{W^xWPrK`<NjaVqfO zAv<pdObL;jWxR)b|HG&smhn;SNDE#^FQ1UzlSV1!J`)CK<xHx{+|tTWTh+i3#V>eJ z#Az8Iy05BmUCCuilKS4q;o?fj=TB_^VW^T#aq(Y)JH!BS`O!IUHJ~JhHBv#LqXtgg z0qVmPPwjA9z7K`RA!;Ho|6tN;A(HVuO7xU(choeCu7vIRai{?JTH)nj8bgsx4Zl^$ zx?NHA!_ot!E4=(;xY!Q55HV~>R>nWhE)hAJ7M1NB&kviA;3??|qoRQ?HU1DnSr2Og zvYJG&zH0d#!4(Tjo#gR+LayvL<hfjai635<WF_%<wzr$LSxN>1s&Qqtv$v`1|5c_h zADu~d&5ncPISU091|%+r`Asv6%z9_M99z|ge#ZV&ybu~g`VNsD+g4YsCOn`;1bb=9 z3|$_`v@=h_rVMc@ntm?RbjN+%J|r4Nwp9X14-=<P(7kmBpk~4AA`A`xdRn>0#%^aq zh)od)Qzwl8Fxb&vm&YQi6J8}Fsz4=W1ah&sXA#0U1T)hCvb+}1!{|r?;2X>qrV=Yf z(dZ1g#_yN{?~^r+km&1jb_HpL?WxbCRvN|QC0PHx1jR}>PQaGo;M=<YWME^jK@Num zC(q6SxybpK>9se@$5(UuOzG!2#RLp^#Yfi?_Vwnff!N!yAkV9lt+RB@=8J@(EtGe3 z+Wh_Eui_+mv8?zZ#7^0%S5*ucUjJeITGX~7<w$2JOen+Y1ulg_3JP?hh`zJ8YKwUg z%D|)>t+Aq}it*6gy9Fw6M^qHveE5H<&8l=_O@(}HCqdH>7kJAae_8K0S)5`lvRx|< zD?P@d+13Ut&T(al@44`@c*T}n+8cc+KoqQQfW-&o2wM5;{6DtTN_+`3y-Y2j&&p}V z?(flVmSkpZ9=?7wlXRuo$#PD#5Gc*B5FT^eVsC2m<`F>_hzfajo-{mHV+>7}!?MFm z;i5{rm_~!nD;4cf?6cJ*@qUm05Yl;>AzRz>nF~AD292EQ8#~*7$!M<Jo$vJY>f+CU zlV=@gE}s2fcE^7RX&K0|wm%-8&6nrx<nFKo8=tlf@5_y~y{|JDFJ{iSECu5Za)S*P zKBhD@@a%0B9+<o=aNVF6!8X_n&P-`-eqClVH;+I#%^l)vf~{)QSh>f<$cQVZU?YP9 z$F4eoe4(i#o#2C)ACY$#J+|?O@OwQqLXjZz(F+;+7WLq=6(netPpl+t`4evj`}_+3 zt6{~twu*x@F!)E935b;ZQ%o`IXtdzdVDk9>hHCfkq(&%nSWs})v^<#vKM^isIU<(6 zHnF|K@3q(G$;V0HJ4U|0RvAHOpQG~!7u6U&45xqNg4@UI1v9}eccQO)TyE>>t<r<C zPb~g<(bIrg&_4L&)p|uh_?(od{{I6;Whfb$@nL`-%yevYgF8ld_j41;IPK5q9WNKe z_TyjBYMi3B7th@pw1Bd<Y(^u?Mn>$ajpg<mSXh9gR2XpE=i*UR{MMh`33Z&DyJxBV z+GPH;@!ni8FoBbykg8f8nfU%$_RtW4ugfrBnF$wHh%yH1;zRG}azf7Nm>T3FeOP{Z znmxw65S@Bd=68%D=2;?LY9ALzbNkcAV4?gL47e0R6t<#~N$H?U)G2;yE_O)z(0NPK zClVUP+`BL2=80a5pk<bo03lD#{m5!2aZn)!@@piZizfw^jesfYVO~F=`7aKgruhdc zJY&|n@R!Vg^FQ_OvIP0gb|A>@%&m%S=VPL=JDhw|@#8RL{7kt{qWW9Y2I+NwYJYyi zMPj~b<gsl2L!p08Gb}9W=S#}PN8|wt6^==y^}2;RY@uTH8Uyr!)i$fAWy>A=fLf5A zlYb_3|ASrFCg=0ND0EN7-Ul`Q38vSfrB(DqRg?Y!U|*~{v4P09JqeJG1yU}QC1QY) z{zpEioRx;E6|aCA<_ARPizO-oNQP+sXFfX-0RH#m;|4Q_K1Q$7v4z^U|1+O=hPcq# z2~USu{Qonb>Fwl2I{DUyxb)8{aZ)axhTfr_5Y(PU4D+J?lH0{ayT0!f+L1SC)ZVHD z*l%#}Tm>ZNI%ZQ33K))eA*{X2W`Dq|%L|*6KGk7X)T~?JB&RyM1r(wy%t!0+!U?Tc zRLrxmf|>kQ@GXpX)MZ-W3FhG=A8yEAw0U2@BSn_VuXPzhuk|yGeide#lmwMkT%j0R z$c;yE3tQ#-3D+@seBiIT(aR+epZs}w1y4)Nv{6j`FY}~N3K<UJAN+d0FHG-*v4z(M z(rnaUcXejmlEJrS%fG6<!&33GWjyj<e@_)!lmEHJs}81mE{05gS>`)`b~gq6P<?9V z8zTEOHlalHOy{Gc8*2V=uo?2<!=Ab|@?+xV|ED}dX2lLHGXCp42UeF;3~nR-I<M{a zVDtqTZ0{5}VgM10^k3)J$HsxVZ;*i8!0KJdJ(!eLzbC_-c6phju3Bh@2=~lC&Ap<j zBjR!;x-Y<DMLi^h%675uoc)$5q^JkdzGI!4v5uZTB&!MMGbg7O({IXvk@Xu={-&N{ z3>m{7U;kkhpo{3zfaFY#t@qgEtg)dQdt%S9%?8jEeVZ`JXgm+Kum?Lhuz|7U=JceF z>8SSi=9iJqd}JLG$nD5fLOzqRT}Mr@?<9zE9kd{ZMn-tAuD@bj0yg!{ykhE??OOon zMzm!K_iB{F{~}q2M;tmoGV7q_r+dU#ZJwP-|EM6NX|BBKddmP;#37Tr3uzY>x3T{} z=b6m&&enDsxq}KYkpK+)C*wtA;gq84L1^R?48!ehz^cwYdfOQ-OV|%<9g7J~^0$-V z?38PSxVH0Ac*NbjFqaP2fo~_`M!5x*JlFghOOPDj^u^+dY+g?YhT=kVFB|0Q;!_J{ zN}TWO>DvV@N15wg*a^%aB2$+PiQH&#J~Bj$GdR%+tSqG>#M9o4l*t_IsYNdJU++rv zMp%^Y!*YXIvB;Anz#U$E17zY{W4ASnD)0p`z$2WMBRC2m{A5<&HBuSn#eS?&-Xpdp ztqjOlWUv$D$N?=<K2$Iq{h@7Ke1#+3Lt-}hjnTHC-yS)ecq?ok1+RGM1s|J{GGYXR zAj&_VNIWNszg!fh2hEL}1DR^6BRNAzhOsSD5#yqUzt{VJ!RLNR3cCs;lOXU>e*A4W z0;_6B0Ou}B#JB7gJ9Bj~2fGz|x`?rj?H$b@wI4&$1zBXLm9)?x=}E2xwsXpl8EdX~ z7uci}W*X=KwW;784)0&Z(%`adXcpI8<PJi&wCh(Zxxf@F^Q4^6P_fc@d4_KPmwe7T z+n<Sml3Q2lMh&#($222Tbr@IMowusjrB+&gl|r`o9p$mTA4uqDLo}%xe;b+Hb&J3W z3cSN3n%shgpLP$6I|i`L@e~2QckDh@{1<mt>L;`4vh5yOXmpPCwQxai)iV@ws~DU5 zhmb{gRVdRyvu3%>d25`Xayh3HM-tv8{|3dE(8)}w4U;C7axk)u5eT_s#c)2m1eiEi z!CvrE<_F6);oY!`xjd5<5;y0<Hic7wQRNsfN8QY+Q>N{m^xW?BuqvMyWAyCi`C`c3 zk%eHXg)_116HizhxoPHeG+1gC9x-8BAvnGPl}z+%ow7|TmOc@UU~^LGp>q?xGF=#o z5!m*;5);#!DS2NWELZswVpemNd7={c4vlcis5@zWvbj;L&K2W^gApp8M>NfIhb8S^ ztR{gZur`eFaKibn7)XmI&edT0>wkn$t=L#?uTer{fMxHz)R0s0xtoVc<w4v#=_xQH zv&zD?y*~WbbXbe5xL~rKD^G6;oo<qlGNW(+q2fls?C&t!tHYx2W7G~uZYoVg4K>h+ zNHlVxl;@op#(}m3=w}S3@tb<fVPv$>QglD+epPWaNP-J6G*F){pgRh_7Ss=6LhrY= z{bh&s*{Axnz<FJIrG)Ro5csG)OOWU(LRVx+Ba(Ip6owiH#V7W_nu)Xw-7ygwfm{k= z+NQRuBdz#8IkXD-jBki{qm>V^C9y@TZ_b4oo-yHXRo3x)l0pe2uq>q+2*&*({?*?t zCV85LB*0#Mbx%SD{KN-MR!poApz>}x2K67<*|uRTF<o6@K>PsFy<Z}M1fOd3(^=Tr zyebB49<UI-sf0jS2R1ma?OS+fEr;G7NR+^Tw>9Hj9=j5XWvaXe-p<Tulzxa?GP@O6 zLnkrOI<_))<HngZ8MpG!af%9N@d@RiHc3bZ{0TZ~`uVAq!Lq%j-4}^b@j_NKs9GwX zi!$<rG2=`ogF<3l#EJa$l+qL-eovxO4gzD>*unS7cmwBl7gkk2D-&M1d6z_wGZP2C zLP2uQ4+?Cij_pa;2_v0^a8boU;$x;0hdECxfTxN(*&d?HL=N9SPXY@KQ`Ltuv%;e- z%wX>Qn4kcd6V@+bQnf(KT?Rm}5bH!AG2yn#&qv^tzdD|O@pzV8TzI3^0wk;LEW&da zQKiiVrrSh8t3|$6j_JwQZj~3b{DAD73Wncd{h-k0n^RF)vPf@pGXGz|xxb<Ek8r-n z{D*KV{C^1N#Fdt-rLkC<+Kdb;$`BfT!OfKpkd=%Squ*LrUX?WXhW%M(QPn%v-wqlP z;H|Vvi9*xVE!Y3U$UQ}A5;X~<F59+kyUVt1+qP|^%QoM#ZKJEYY}-6NGvCbmFV9`B z$h_Q$-1~{3z(GhbWMwj|p8)`m*cUoVm-%w|nPc*Y!|nFLb04^wRF=$)6n3(Wdvb;D zeNVdSyHQf9=WQw>xf5c`0YAHVQfB?P&RpUa+Svu1Kjn@BcXZgok96-U{+G_g^v8vU zBkowBgIO3W>W^d)1L2b3^OdA_JHkDP{i3@cEicX}dG=yM`S4eMn~Q0|Yrhqp)jPkF z3Zqk4$C{2^NarJmy+tceJrAntMks_CAxd8u=Z%jU`y^%&MfRpDwAjo@o~r$`#t19B zMIP4)M2z;%3Qm43i6_ItOx5&HXm;Pq0b%czNMy!G``!0S&hwNZ1#<93$waqlk#x1k zeD?)ONVjDQprIY9R(HSnj!VDpNq3+LaDvZz{x{K7?)Yz_8KaYeMd|(;O36vmpfuyE zOMv50RYLtgOf%`6LK}tzxq}5A@2R(Su2dfq#VZ;4+;;E}HTJEAG_Y~_+Ef^Ii=mBl zs_q{V%h5?+UNSrR_wL~@4=IzvVQJmeuDeBOuIDqTJ&zteGq=+j5#jZdNI$wE)!yx? z#$8P|DUuWo1I2Qmc6CNEeSt8$T;8fpI$_g?)!)PhttVTJ7I#Psi_9+v9XlsJ=&9uE zRf0ws^7mH2YdOrYDD%@PCE>)R_UaL;F1|Io6*RapC~;4ckpv-4oRKpPGa)%*;v%9} z&bJsxKvYNl3u(5lpoL4p{e~dHf%(-^b?~Yl1W;FDxZXhp%R5dA&uC)Mbh(QLj#&jT z|0^`hR<$N?$Nx;aZ_j-e5z!RphOPTJ!xQUJjA^3+yZ^+JKKfG=<F0Axs;7g+Q=^VD z%B1O8{vlRDTD*foq3L=Vm=VH*NI5&ax;W#e8J5E`rrxf)4|n3OUFk?SL45=D1;Ic< zmP|x8lBAG&f`t({=89ot52Xw-5GQ^uFHlC;GVTO_pl5WF7<jd`U1Sg}>Q<g#Vs^Dq zMhKuFnF}hlM&C(q-N*ZfGqH^R2WL_fkx8fnT!n~>ag!$sf@QcYUOv{5)YyN#WI^i~ zU)DUaEaCTRx+yg{1Ge#06(|&~)s=R+cwyZXONw*S5<JU6qu-B|LDy4bW#`DjK3=Vt zm@>c0IJUDpOwarCrx1n5M(Z)d2x9xA8?SGiYxxH%SW}%<RZ<&bh!ee$kcnYVb>nNK z=p&C+@NMkOWfS3AuX88=Da}{gP#ZRXA!ZaDFC$n81jB~g5py=oM0K~|Ey!dL@^!w4 zoQ5q5yO1c$@y!<htg+3Okb<BM%*e$*h}}|l$Z{mAGHpFtqXM2X)saNzPQm!Z>+lH) z*r>f}z+{p|J-1?fl<At7z2&AQ7&7Wl$~q+0kz4U5l{zTvYMj^U)2*2EuhlJsIqnLv z13FkAZy-;$?lO1@FGleWRW16WNM@K9u91_&)U6MVZ+<+QOdXD=gTXZYE_n~(OtFS< zPQ#+*l|3DTYSMqN0%SAF|Ho;vZ<}|9@6*`BjZ}Jt3k8kgLDccoP9AOBcA%ipTM`8^ zTE?o7IkU|#y$ZIj#LHDOB-wN;0dOwj?QS(h75oqbbdXm_dhiy6k->p6Ke*yz{FGai zN%5hPb^dJCsO78ETGYE8!S+NiDoI)H20mK+hiTe`0AU4B_Z4?ejDQd`L+Zo<jgK*F zF;u4QQP|pydXVX0lje1ne_22<a*GLpi<CJ%V>Fb|fL+Hy&d(abju=BP(#0r|27yWz z&m7F0ue;udWy8{WE}+^Y+0a4%nr^BzS=P@{d)4F}{it8C#W~ycj=@xo55CZd@QkdV zY($ZO20En~)NGyiZrni414I86&WGX<!mUcM8qcvjj$v1}@w;=uy3~FdTHx{`lmgsH zg}gc1cpg6W7rgu)wV7CLn%JI}G&3x!+j}4~n09m`(mM<oyKI!_(W3Qht8~?5Fj%;A zd+->B8?lhRPw48;n%kB?W;q0z5tBsgmT7uJ>q%5Dih4d>4?mU_N)M|z`}}<A=DiTN zean<}N;e2NCv^P)TWDOJ79o0?;?UzcT3=$O3H_aItuV^8hzPg<`C2Uh*ZtGzw0Gy; zCnO7e_FKYnj^tASVe5iB_eJNm(YGVSWZX1i(f=XMI23#sZsQG2o!CnB2IY}551lg2 zDs@_H<Qgyxlg;H-{z_jdAzEWUf~txChiKX_xXbU|A;la(fjQeav@^MeNVoNB_52+M z*YlN9(2hLFn(WsaGNmS)1?mMlvgeYZtwadzJZG1!ER~9<rl9WJjW7{@&Hn9X#N4Mi zY;M76SX?~-faI}h8qJqE!-v&qhD`3!4k+J_VYv0=;7Zhz_92^hG~vKtm(c%zd}a{S z|N2bf44il#S5c*J`FnF3L{asulwFa!GZ9gsa5Dsal{vx|Mq=bx&L#w$XEL1vcEdAl z3OKQ}@sa==*byk$<!?)l7@JrY8ym-``@7@!;bq1&6Y<xi{5Wh+<>LRwnGUYGg?XN2 z()5)$=PM#&ME`^)u<EPjv+LZnVN1AQ9F3lX7cH#eIT+MrQKn;7Laf?Yh5J#6!JQ#+ z>Qr@t%|mP=`{I222JV^aOq&J8xDHq0)LksSHmZzii!+WjpNc|AQcADnL!eZ8YiDDu zBK!cIu`zf8-3FdTHkRig+1r1iOv6$gxBo+#9IfjWt*W9xnJ2fu_1J?UugM{O;~1t8 zUU6uIqk;6yRkvl?%=cL@W@?8i=<b`RIZ}L1>u94(xRSY+UwCx4QOB0O<Y2jZ$1I+J zvOnP8>>h&IyMsYX50?hba$<d{z^uB`N`?Ge+G_Xt1G|cNehq0;bfAXW<CY8GJqc`- zF<r?HsP;@gKK#8``F9diAZfFOTYE6gaF$d~YhT2zV>%@6q*`CB%~0@)b^9iALZe^< zNJU97T%)9htkS4=5f}%-IdE=LDdDv+CQ3!)raQDm#ZE@A7%CzIV%tV#WZhG)q~cX1 z4o#M~1t;Uq*x1tt4a#WbV`Eia%m-8a<f_>&M9lmxc}5eU)L1o`_MY0hC0+N_7NKBp zk4@+wWpi=0$GJz$_}LcGt!|+6J&t>QRk>Nk_;o}JG>sIqF*<Y=c=dS|QA+UCzlr4z zqUEq~J80|7{l(wUr!^gBho<G{3?W_m%C{Ll#|T|BkpY%Wd!OGs%<3ye<Q4iaawh{a zLHd^5pY8uIP-B2nv3jTiqK};9M6HFIB4W@-6m-N2D*jJghVI}tP$K5b;QD*^=kcxl zE6)V+dH3_3R6zc-WT8;{LdNg)u9<gx0JeHO(su{lyRwT&FcA`(#n_k5|7kB2_rLBk zRhAQIyrLh=cdKA91NOEwI8iy8@h%s%cax@P2ov!YA)l`yi(K&T3KTdxd;3_%7b1x9 zAHaMi0@;BE$lTmnfdvGVKN1j1?S4p|;qzzodr16y>j<(#-+2V(BBeUYUtSPxBDQBA zd9OehXrua1Uq<RSl9y7b!Lja?z%%H1_iZcG{r1XeAMo)U@m(){)t5nthY%q<vFkGw z!)qMxmtSDrRA~&tTm9iDWTl2~o}gDdR5RngGcU-XzTn8F+i-;EnlnReugJzjknf-` zT0&RnG`FvKvWxuQIL0XNKK2qQxGR5)90Rl1q)8sgY8Pc1FLZ@P@ESLmE1MPoG1Hfi zZ)C}@N!hEKucMLpr1*>OYfAMh#+IwX3x*vI`?nvey*Su1MYCF^^KpCej}Ycju47vI zsG`F*UJJR8Mg9R5yEJPOYO3|<%}eiq+QrKA@zspouRVETe+Ccty~(=fg*%1M_F099 zkeR)JJ9A6jez~FDkYe5M*MQyPyP<#0kBIZ|@<}>@U?lT8xx&j*QPj;~i{G+Lv3zyA zV4Y3W#`D^TLrHh>mRvEuIJar~UnRHt9-|N!;;$7Xke%j`{O;VFus%B}OLg~XY-;hb zfGsB4cKrj3Nr!p<-LxQN8!eu_T{uQc48r#rVHcaVkxa=zMr3?f7tuJFLCqq%yGFw~ z-AhNLX}sIq%e!j=a0BGFsk|3u0ssXf;s>4oT4!l9X89z1kxNc;WwZ!R<l(s>83uWg zsDIso**ICymCD^9mD)f-^4EG|{te)52W92k-th`U9sdLizRk=;4jDtt<J<BH{f^^Q zyj$OY<GvPpY65Oube+^Yqveuf?fV)n<akep!((u-++*GpkNLV)gA}uG4~dWu_K(Ej zhWW{I+Pq=zzV3l}SZupD_`!MAdK3$5`}nXirC;>>TriMe@DG5e8v!+=BN)Mf0D&UR zU=po|vBOf>s`Xa+gYP?yu2baFA%!Rre7AhB)g!)RBaUkp76AeA%A-FC9M8m??Bq#G z4)=Hjggg5O%xU44+t@A|2_Yc~=#-HNgiA1NUz`AtKVE+^0q(I44GV=8y`8uG)Gyn( z>%csZy4gbuJeihv*;#lU@nXeFN~;Z6Z(ivMd1z4lagV^Tr&t<u^WGl*ybMWx8+NGW zxJ#lac=kbRAF#PK?(>M2kv0!e`P@#yvrFJ*;MP#8xAai~aC5CP$P+R$wJ|4btJjZS z@p{61)EJ{7r;|g9LS5MihlTYg^pr_nDdq(4gT?I8HEKog8@`llln<8YUn8)4T?jn? zJbfqp+#RI}e9dX-0J3gOamcRWQl6rk^WAI{iTu{)Yw>9`$iP&=Xy6g0I8Tp3&rK8z z*gsT$KqMxk?cSAkh097+<q2ID@gh-nx^yrj@h5$-`lyjl=My8l#G(rN!G)19bG}RJ zym`?EYs`k<`5(ufXR$nm6Ho}*Dm~JSu^Jdv6wuJX!`#^Fl#RW++=6vy4ojqvTrH7I z+e8zqvrKm%pBa-V%$o05;YJzjaXgiUK{{9lln+3koSTE%;;vJZ$jKI441+{dv(gJ| z6;9@}Y|}bWtF&N?Pf)^;7?5wj^e?H;-O!k{X52ZT)7D2>S`*1BmUG(mi;13lt6-Pd zCpC%uRWj!biDeDaLeFqYn><Q^^I2Ab3Gs1m>(TZsgh%CoIrXD-K01hV)>uH<5Zw{J zLNrPh49O}v;U7<$O28{uk@=JZ(+WJQ6OWZB_YaD7fP927Y{+VN&#j%}itwp4j$6qO zVK>VRU;J$xLqKp1IXdDH;O#%v55>)iT^c<~K<IBf`8zIXGe@|it73|L^)B~+DiyBZ zQMw`#;wHZG7Z2-B+?kiGB&>_yxu<VHSKi)X;?d0x|1}8mv5+G$m=o2RW+=rn%QR%U zdf6ufbiKTahZxX_VnO||;U9=%IB2-Mgk$XCC`gxrZLG24%FLkJ-8m6`6J5@6p{4f! zctMY&UouErB1SLG#@SEe(;1QVj})1K_~Hn+1%L4k{`!ugsC9^Z+N_D$j3Zw~#m6CO z(?aRMP2JiZbF>0Y2;|l<3_dO%6Rin|cK*F>j`)*{{gEkYJ^d(d?l#p5x&w{7R~#7D zq0E3>VISaBj$FJw?(0S>Zk92c3a)6BDO-auHfG}MUB_Xi`>?gf$@5nq(c|E9m*ng? zRwI#WA<}$KHV+A$J=&$?$OVg`UB#xhaz0;ceBLr)D`Ms$YV-HvPe*HPw2V9T>5wHR z8)@Z~A<oFcp2CZyq_q+CCv)OOl?!R}OB^=qkvCQ|!{1$#a7|El#fKY?o38|5z5Lf1 zbUbu=Ly;Q$MK-}02!qeH5XSHPzORIEnyu+gHIX#ozB2w1jTxoN*Q&1V^D)M35sSQX zX0{eCSMeJPkS7Q^HkP%}3$c!G_dC9zCvC8cmCG*SO;80^s)gU;M4Ah(VVL1Ix13A< z+p~t!Y?d3DIaw$L@p{%O4Qlgi1{4C20Kz5Fb$!U$)qcW+Mh;h)g7`A#D;-*>Y}pTo zSjn7w_n3Q(<GkT9fwgj9+6Q(?K9|*|X41YtpNM`V;i%O{H2lEF6FID!6K704n*Dhw z>me33N22y--(}bhO%g*x_a;Z=ls>c%Tv4LtS&dk%eulapv?;>=yE7B%@h;v%A8TYD z6di9>I?V&K1I=zfS0Wav(Ej}YJV!C9)KeZu3SpZ@qSeJt=Ju6r-rnrCY3MKpwl(p9 zZ!h%5S0h_b?)u?CXp&vt;3(@Q8gVg?Xvuo&!Qb`8pnP!_H=I?#EeARO>4gwShu~6( z0%x;q(j;<WwMGi2DxPQB&ndg^#1-AOb$jy9Yoo?3;e89YG{ro%7zuWEE>-p~Yu_!` z&56*t6AaX<jq*`_EQBu&HX;v}ELqLgRUI2ccgmDfmJy2(PC4vO5$yAxkGauMmin#V zNIq<357z=R>9+`_g)jLxxFV*#ZQNi!Y~inSFC)Y(w32C3slWj%PkZvCen`jUtyU-~ zq`45rMn)wL{8`4Eg+O7cl38-El7xL5o2DzX9APyt*Uq_#ynoTsfLf)b+^rPvw~kQA zJzA-ydZys*uWT&{+PI;**dRJ|P1k1K%@Zs;iq`JmOb&Ka7W^!7SfGjrzY^<vyYB^V zzR$*Le^maUug{t`85x=C48Ow$j;6YKkl8FMuIAcB+uZ1-B%n<(@N<NJG``eLi#4js zQA~=fjX{wUq-#;}%JzJX;@!uUmSq-5h)6%jxFq(FX+Jh}rob)C&Y~=Z62u|vr%519 zJsy;Bi&8+$NHxfqz@-YONg&(*aM8v!hwg1uGA-7)F}W%IL8w=v-@&Dkt?USq|6!w* zm*R|RajoH2K8}GQl^W4X3cN4lD|)5IzLR$uCP&%Zf(bp0^q3^go_KY-JE;F_@Z+ia z^?DI<ML0)z^UHq|O4hy39Av2hx5E8HsQ@XqpIH!|=CX~m6n`Qsx;nitf7V1foO8;I z-kkJnL&|c+lGp(B7u<~&r*a6gHXlx-um=N0G;DR(t8d7P&3HW(T@IgbypFIZzRK2V z55ea<R?mT8oKuY$RY*VA(>vN*_j9nL?IK7C$H5zSm2R5iG}@D}9UOzwfZE+X@~&c9 zbrxXC&u3cXK|6G)m5p<6z@&b1!rJ*j0tT>H6>+ijrUb+dI-*LGP&IjCYhH0#NoA>l z7h%eDs1+bu#$IxBnVNMxj7t^BVz&H@yX0Al%@=Y)3$z*ZbwQ$wg>!GFd}T@~1HA2r zkSvMRdZz_bENoG+3T(r!f$9pcicL!o0kh7hGd*7LD*X6n40gs$TyxOcJ27k4ps)NG z6xg#IYptGNr_uA2;)WZHog#^jupi(U@7&j85J8&M>!0|id(l#W>)6;dGghf5V5RC5 zqB~4T+t#$ym$m>$8uCf~FAkv&gq6`cn^G51bjXmwD>03tVhyZ}RAKNgoBCf=oU+Ig z``>v3r@u3UQz)HjN3dN7dAF-)Z?j;oVs{?8*u0*>?9`S!6g?XR3v*x)3M+*SahGkM zcAJ*=zMjlPFeo)G@8`kt#O5)XhfnCOJDdZmn?modcr#guz7KBD3ASV4<r<ql3Fx&2 z5vYNev%&;cYB>nDtYilyiYJE^oTwPS?agGfz8Q(mc@%>;ILyZ`Lq=Z-L>m%IBFAy% zN#lo;8aJ-#GIGp|>(AwEf0zY>Y^2K5;O|b2^Oy#mF7M1_P(M&~SzF>^zK3l|5^G>h z!5zNL3Z$)h@#Fs)@{9CX!GvAS5BtTUO~`$%_Pf&8pnsi%zIg~nwz<@9z`RXDYgBfv zzQb9g{YNdzE-S~N;E=n;uy}w^213=awZqIJR;sYi4ZnWVOvV`Qg`nf!ciEp<@aqRf zTX!E8Yed~Sx97AIIw2$C?A|Mtm4JjT)4+46VBVU!C4T2}BJywbwO4y*Y9`_R(VzvM zs!6}$B9jbPVqJ+6o+I@r?9j8GQ-A@dITe$6Q>BvHHVn}9Qz~r89_8luN%QFUFp68q zaq%a$TpqigkS`LvJvf^{B8Qj!{kIg%Zirh_)37UY%D~ZQY8NXa)=rhSP9X^f|8aVa zpiYY$ccj@UTFBCs<sDs|;OiGP3*UN4wRdDQmZQesi&vIC*p7~}K9`h$PsebbPs064 zEZt3PwM4}kgyCjMU#wZuGhlkY0jJ-Wipty3C#A1owTq~dUZivm_RaV>_+;h&)^U#W z(FKpM3P@qvq<LqH;%Dnc+N1;z{~m~o|3&DR#Lu8Bx)=DFcD_M=I>>2T4BB39QDyiZ zUE>cof$sb4AIe}4P$ly;x+LB~o)L_0_`dJf{(gqpNC;JeK5GL=E+4M&L4NJ{;|)05 zUp35WjDGl9=oo^!3VK0b@@(5@iu{@Wro(X-^9uF$W1#ekJp$&`3V~U__IHM*`zZU8 zoqz&q^CdSI8x+dc(pOq-p^uwdacOX|&oyr)2Q-dgmuiyhnFI~WlbpOXOYO?E80R|@ zeq!=oWM7Gj7i7esjueh56h5H{mW-w0{pmH?7g<uJ(7V+#ZB`WatYn6+KcWN9H-YhX zgglDu)Sa<S?>+#RzDHrduNfWv3P4eOLE+CliW<Xdzn4Q!)WYAbg6)kQa;dvtqbP7n zk9t+~M7kQjl>rGm-ay(@)+KNX3tW<bkuD;a3>*D9w^#JcVuZxv-3BDY<HA&;E*{{W zly7FkJ=(wn;iNDPDxRjONIJ<`GD~2ApS~4$aRCR1ndS^dxw!L;Q3{8=QdVSs8Ih$O z$=rq2LE3iW1E;1YOi0s7fh0P(41=xu&HBML$>X?uWMazym3h&`5Ki4+F45TyL<m|T zbyj|;2G+)!T*R1-<Mxm>zT~o)WHAJL9gp`^iBXvs#lR5MK}0Cs%)hY=<?h4j+!J3w zC?L>PtP7OkH6=+qGz_GGt{jXd=7LuW#t(!x;dRaW!c+PSZdDCdvA`h+&4$iz7(=%x zT?TsX46aV0I_mxRJnD;m_6VpJiRlb39RESus0OSQA;Lu**b%`(OwvtLy-g<qz|z9g zt@w8*)Dt+<t)lbJ0Oaicz&QOU_ZvOnWk)!%yNU!7V)byw4O^goFJSGi5BGIP?(;@H zQA}DZ89g4^7b!V;zc~Ynar7HEe&cHfE}eE&xfX3D{ung%=vfr#!#q!U1%4cWzz!K& zZ7y5~&Q9^x1;jfc2hj<qia&qJG%^q5N(zOvX%3y@+I1y7m@nLZk^5lU%-yE0EXakH zaex}Qr3nMK+x~{qPfSFtkaG+7i|v|;0Wb3hWO~mn1IBOQM||*uHS1qW>A1otZod%a zEhmf55HQ;jKxJp&KVDvyC>8C2tZHAnJ+X7xZ_jbE(!})qjhtjN(mO!!1zG%Bn|7*P zBzt~AqL@hb+M`pQ2!?;kdJ3&V_3p!rxjTchiX^!2-2)yVZqiI*#51aEHavTGKDf@a zdY{BIIw4_&ZL$tkd#iFP_Gc?mXIH!eJW~%T<`z#IRGqg31TTU_`!D*-aBp^aToGPs z;Z$iBjeA&jqKSA-rOr?>!Wc#`LcI7Dat)Q_dIvq|%`h<(v0_`ylDHGS#amM-;f3)> zJ!Xx`zXL$`61p*fA27LhEaRhE$jdty&{CQ(K2f=FNpio~?Y<NQ^J8)(X3LGFutMQR zViq)N6<sm^_;0W4&Id|E;Fe97dh3!9Sp<*Pr8KGEQR6O4ByEap2f{Jr@i>bOgOx-8 zo(@s@XwsHJg+k1`oA6B#PGS1~%V5pWllf0dV6yv{5ln^>5~$qpaX$yWc1EIAO^OJj za}f+UtNGsjCSp2l5-(>F98vY@Q!5lASgB6B@;Tr3<`C9|hp=s2Qf?o6#<5%bU$g|w zA-M4BwT;c8(kVbvaf(80!W)INglhLV2Y=z_<R^>R_R)=9{~9p|uyZD37x?<2ZH=>h zu=bhTlw1JDIollEZW$g*iVOOt4Uc#C8~?m#3kTBws~et8=XK8)!A~!Azk5O$cDwCt z@MQ@k?4+U|>lBg-=Usb$sFuMbEwYuP-LVd_DbjBlvPDg6H@Z+UGFysoL@Bk#t~B|r zTBSXv$stVpiRLXd!5X62-ve$RsvWo<W`mq3V$*LOp&IC7^g)R6iV64>rM>f7h!?Nn zuat=l_gj%<`*Y0)BX^3O#4xD~bgMKfkie5WW3Kq!@MWyZVEo}?Fn&$kLpC73Wz-mE z0k6@x^MHGd>9G2_Z!IDQ(fkF;TeR4;e{&U@h+I7e!UL&vCV-c)9Fc*dv2eJ8XGsGG zKP10FF?!n9b)ckF*%20St858*|FLINh$QR&I=G_24<KWc+jJ&$KXA{sK|ru<Pa(@h z&5A;(A=WE&*z!V7!pYEHqi<tzrimC)_js#KY(RF=MR*05e3=a5I<EZM1POyi@UVY5 z0mKn7RCl=4QepP^2#a&fF0M1PD4=bmbqJliOM-JDh*1Ht>9i>r?=)B`U;NFZpqpoy zXq6b}^;q;x4naKL9&bB8E@sT*S*FxG08=Ar#Y7}G!9yZ1#BgHS%4W0C<A7!COwS__ za0LkADeEhp!0z(#IVE$N(oiihNfxx}Rq?(BwjYq`5isUfi(^m8t<2;ut12xFF8X@1 zFO^Nth^34$#Ccgbo|nZiMg_<jZcMMO@LdHj1pm@xW|$(C=~<&8FC!gxuZ^A-e<A|d zq611DExG$4B;S79<9GQkKK0pFxQi5Fp-)R0>j31?{!~kvH}n@^3&a%7h6vh>6+xMj zs5BpO<Y9t|firtTr^GaH<GRd(k1u4JdWtVl|7TL*G;9!~?{cBF$>+*<G*?t%RL`fH zm7yYP$CXzqw^_NOb?G>5Cdf*2P+7Ym4^rT{ZD2od6-x5IWee$9eQ%tK#M0cp#99p1 zm}@8Fu3{`@3({h1h^4ehf8I?V11$B@PYgAfo5T+h8>07cM$62)ffVQAO{SdXiZ?J! zbSQ-$ZqViGnp!b_IAZN-Hm}SvYc1(6!rRnDSsH0FB{$ZCxs@Mu@|}c;*BiFxsWa7I zm7H{L|1+<5|AIF{%@w{W?0K!_VM<iobz;>U^lW3-)1E=mDeVN@qI_0u-dXa$4xU-| zymcsD#aaqWC*3`$WH3@(gdi!Qr6ZG7S^AqWHcz=F-c7~%_nt=Bcht|Me`U><jP?>W z0t+vVqn2iewqU>Jy1wO~1IAt2Xc6UQBGuiqrgTN@opZ32giO4oIaN2HX-cJKT)?VR zSJBzrD%H$O=_Rv<OQYgGhG;^t#Avgnb%jPJqFR}Hq2_9x{<Eg;BVUyxbVkVz&1VL> zXW`g6JDDum+iSzi#~fTS@kHa5r*oB|&&bn2h)38jg<yLP>vHfzm}R{I|E4>(!65=| z*#rYlUBmalA_i@X##Y{577h<49_-h5;W7>UV;((Uhey(S%Oj3sM^ix$S7)i&^nRaF zC%bpEsASx0tD$tGt*91|mawQ8VApCJs{Ts-NOEaEPVY#%3^L6SDdveV6A*p!Nd|m2 zvlAfbP5O73iLu*So|l`xg{<}~>CE=N#posDp4w5TGrc()q-08tTwJ*Sj|I^^c(dS{ zyI|l!Qgy!-jx2D~v^S=mP7|K8UtA8BM&sAeex)yLWbL4MxckBn#$yztHO~s(9O9&( zZEqt)huO^^c7SC-mm~e4i)CC#n+Q$66V+wv>s`Pj2&-P2u4fSRz;a5IObhls8p8PA z%iq_X+<@qC6|-~+H_rOw9OeNAxO%hu^jn{GltqmpLO^JDxJ%1KYm7{y7!OvF$(ku3 z%b+iPjxUDG8d+)TGKMF;-%45VuKr9&htCH-oVrj5XO81^0f4$RKCyOX*9*X^&P&JM zOpx!y<<)pbh`WNo*;PPqNudSwbJ-TS;C;iIz}FKOhXWDo<Ve&>>b$qS#dSw<H!<A7 z`$Z*oo)|B35!#6%Vp9+WitI_pmo%Ea@j!x2sPh25->J<v?MJP%ClCG1c&XSB$>`bk zq}4Y#FmfXvU7fVq-kiF}<rfY}4;_Eb_YS75teQzb9$|F3+E)cx>UW&izojg*vP;8z zZItX?E@c>Ys1%!S8>`6YhL9ul&CDOA)gg;o-z}C4uc&pvhI-*TBxajCVhh3U^3q1b zcOhHPn48+O1|K^xKX!*FPaL^@Y;<A8iucR3r#bzGsD$lnRb<DeXZ8H{g+_>)b~9Fl z!uJFF(o$}mZPdW^nrNR<;{8t=Q4EL&_?E;w-79I2{%7MscIQ0AXh*gNHpd($;fq)e zTtTP=8Y^s2F+TfVkjYsN*7vkRO}~;!=OFBejbix4z;X}In!R&`;COQW#O9pfHEGkH zG<+pCIDC4HQ-k1lQFjS4dx29Fj#S#k6-jyqWAhLyVV5K0?E$&-+hFF-)Fz#YmD+ix z`XTJ|>{%&<0lqwG=owu<d*L>V(~$gk!JPt;7&8>Me#AbpuEulaM`!t{^4`CKTYlb> z0hPN+C^Ybzb|N^Wb7A+!5knetE5jDmWu^$aE_GB6*ypa1TC6j&nv#t$FAPxxhn&A) z@Jhs~?oLU}(nT4{#X!xl#zJ7EY?$JOx8;)F1{ZbN$6#qdKYR+#@FN*f>|KV7yt*Av zFHdBL6*UI9?C5&B+ABbtvOO`-b>s6-HC)`t)n*X=Vb8^I{ZHLg>tRdFZBvRARn)4q zxPc4~Vja_Qk}l}v+D+5ZXjhUZVkm1;YmHB@65jgb2HH6tNNhFwB)<XZYd0L>J>N=C z24@KB1FycOr#Ns3eUx}@ZTwj#?X$ci!uJy$G&RvDF{UlEyh6c|heqtKYYwo~XFrQt zbQ&8#0iM79uEq7DaUpea;pUS`eayLdtO=ZN=I39$^1}S~{oPIMbai&n553pocgy?i zQN?(~y{@cdKxWPp%hDbHYq>P}L*e*N;_3q%6ozheHt&+)fbtodPPs~sT^wTJ`gjss zQp^00vUuabJ^RDcYQeGi;40mFe1%9%&JjDY^LItT@o2JLZ^Fi^wWPpT1(K^)=Kj>2 z*%g)+;5Tn2q^y{!@`q*#3uNGWiE3%g)xS0$R$8yCweu)O?I~E>?J%X`nro!>+0Yi{ z!KS9lsxkbgzjw<9n+%A;HsyfJkOa}oftjt<LFVA~{<8uP%KwN`J}IsD5P8y5T$0LZ zOrI;kg>`b)861AoGm|X@1Gan9m>9ClAbfOYl1(xi8tr(`#r0ps_H>QXjyOyvq-$J% z%NGU!T}A$>dNlb<0{>PdB*AZ6N^am!^=o}?h30z|OQ3zk^0_-Bv#TzQ-=ahM(wQ_y z4c~WW99ffu^=EhZJFW%na4^bGueRm%*VTu_IltACt`b&&dZf}p?X3J~X*YUSEC=OX zLhyJXA=4YKzZ^flVJED>h7v2<rY#t1@iA37u)2ofe!5|njD3f#FMzuP0p%{<t8qQK zqcLhp;HRfBElMuZJL?(a+fAq6{%RPC`5%xDR&v+GM(xS=H-0pCoMcXZzo#3fZ-3(o zfvEYf1W8`3a4@2Fd7YhSXcc$re9yN;i(?J!<CHZ94OaDsH~c}5<1ZQQiY?#$A5I!G zk+u+VcN-yK)v6sO5Gv!Jd?iCt`8Ht&g&R}ps9&+V#IQ74XpMBAmZEnMVq_dq2P&g% zsm-{?LPDf$8fx(`3a&SVY1xT<-#a5+OEA!s_WGwZddwsX-hQ@JH{!MS$#`9%4t9ln zlQ~OQbTn;eq8ZHAVA%Zox5t1OI=kuMTEQgQ<cuuqwrID`(`jpzE$J+_2ka+fwSzU3 zE?=fX2H`4oV?buE;YSYG2Uc>asEbQe@&I|n#u{ZoDD3xbnV$_AXZsI4NkKN!cZh}@ zr+_uB)G89~7TGOyx&nYDt>G{|^5l_dlxmr-+s?oPjJiH3l&|rVG_EE%U7t<`RFaSI zqjDxIzr)VD{GcPaaL$>d(i~>1lXm^r=7s&g&U<xj`Y$)02#nGS-o-0cldJn_?8w=j z(7iOF625pe-#L#*He+A=Z00wXFN-^{nW5)F@opv_tv!b9&0Ng!j;Q&h(zM$o$wj1_ zwZzw-l#2^J!3f^uG+EcI5=>5DpnvMh&`7C}El7bZqT(TAJE;qm6(5MS>|h}7vQzeE zM#(cgWe`)+_W_a$BzBjIgru*PvB*hS;M}LdSYP@ebA{}NfdAfV2lGk`4GiTac%UDz zB)dfKDF=@web0%4)XaYHm&nLmjNQK%ga#$lI!lum8o@wy_}v}2c&@2b-!NFhczBLh zoW%#K;FsWcMazpktSt3UbzZ1MOGcMlk0e^}E}|QkJ&((p)yF7$y67pBs@G>~BH5>H zJz?{m<@_SGmUlc>S`-Ut#UCZhtKoY>Mz{fH5{}dzuN`Zh6;MqEWS%tPzA9*9y_S)r zgb-YANrzL2=rYf43$9#P6;o}XDbrnRqHKa^7%Ch(6jipU=6XmPUJCK0BvTP$?`Dto z!w|sfOyo|pAdFxt^bM%;7(^1q=>u`DFFQD%0mht!8QKE^Kl*&1^wnb(XD0fJ8YTX5 z&+Es69{w%8m5cwifq9L}|L`FOTof+?{X4wa+S?NF{ZdG2+0@scLgWc^{7^?xrSLs- zUf*uBCuB6lbpWJ`xq>efvZ!db?%FJNn5)ywwo<(T3;T^?-b1ecW|nVo`;8HPdJldm zOaEv5Y0itK+l`f-KlAIxpxNv@V2*xP_gN@KvR3q+kqjAO?}iFlFFR2ZVE!^1vrzM0 z`+<Ha4gOlR8d8UY^}0R4v_{)YtBul2b&g30X(<<d&wir(0Ax26l%3b;vCJL;V0&KV zc0I!rB2Nw#Rk~I=^3(fxZ9w+BH4<kX<;e1X@EhQ~cjE6NxeUbx|F2AN28OAN2;*M` zu?*l>?pZ_~!Z}X96V1|F>~$rf<(|r}r<A;axHM@Po%!Wzz;vWPech=VMlg<5xYB;S zaBc{Eqb+dLIYM6C*0Y>tuReC8Zk|rNVKXN4wDFhsO`7fQnC5_~IXLehVm&fxq2^bv zAgyE;j#n%xlONR$ylof`C-!Qn&n*E2hdbl$n$zf^La_-Jcg2#aeKI5&6s3GS*p-Yp z#TFYpo>H^_Bpg*g#{$sT`Ryq06)ehn&{<+MbP<CrRElD7T3m3KA7nB;lG_3uLQBM% z(3jD?a?+^JBePMlj8XmR>rTNp@vJCzlk$FRVG75;uWQ<eb=x;yc0W%o*>tQ9aIDU9 zUJ0+K8o=e`_=*+a=_;>iBF><RC6<=jgONErkQ?^ETm(`KE{>?D?Az9q;}^mIoY}HG zRjxX>C2@T_bl^63y03~3w9v#^5AJuZv(X8j8yQzaf%vDZ=)uJoH&nXNYO9;jy}R2j zgZm~Ul4IZr8!KSNTinScHpTZ`k?&ui+Rj%q_f=%KkQuocEIV>|rYM&!a9%ew)-&Oa zVB#-JNealGF74mjuvLX!21QY)IZM!C(aXd|P-9xIWID;y%TjjLIdb`Zd9zK#!z41X zOHEgryMq3f?<B98pk5Q^#a}5Cg|6Ph%^I8vWh^(`wbn3>c7Y3}Qf?Fq;lT$c>dN4E z0ScW9kU6z%2bo2YF8gDyJT3&&IXMRJ&B0TqXoFU}#CGe8tp+G8Gnbc0IT(?8Qp?tu zaKKRFi%VtBU()8dxN7cT=Ux&@3AM9}LCY16a~mwOGh|HR#)(w`@V#=VLu*mhQi-pf zQ^lD7Yh^_dQ5UAZPEZ>XtNy~l08Q;j0p3h+7l<ray=>Z2N{~K=aCR1c$YxgVMmNj0 z@H!~DkiaoIVYSIJ+JvmVS3V!p&_&$VAEyZWpMgxGw*~w=B5A9Zi210;0ksrt%vCL@ zjX1U<f<2YPT}C*ya}r{XO1>Lo8|@tvU)dv5gbH~qo1TtoNJ4J7nK%ep|4PjiZUD-q zbBK@wR`k^{;?S++NHNl6`BkyJc(0R=Y_hR-p=qdvY*1uK88*SWf<2leZc@51x!<*^ zWgZ}u*69k9s5VH!p(|}ve0P6KJ=P<1gup|K5p~ERT#4r%vMOf{IiX1aB$%A5S&QZ{ zUn%MWq)lL4E9o*6kftbOiE6G`;6r(Y+rkJUX{B1=AN4I{uf7+^(QAoC!Ad#7h!)Ka z8M|&K&rql}c>dfF3#xQsL*qU$AFJs6F-`eNiD3pnikpcVr7^<!E3U9WP$kvX>KMnU z(~V|uXE4)=5ln5T0Z0Cr_T46$`~N4?|LkFsmQ*W?iufaP*h{OYmHK2`&Kd8>`!Q=> zWewn~PnbKSEHr|X0;{bP^}uSeXJIfV<F67vUxvkk@d2rk82dRat|rVfi;o(ig7r%M z*F5pNTYS?pN2Fmrw%x|h8tyE*i4<etjJ>3h;wtJPre{bb0~tB24vHs#){<YgIdHKH z_U2SQyv;%X(vwz}mo<ZyXWH~W37xGIp5@LcQ&q3`?Vf}sFR#(ufYRnY2f32Ao#<H) zfsrLq{yJgf&i1EW&SfG&vR&8bt*$Jt;}00Lm9<l$!?J0wt`M#Abg+1{gOV=l-tjpD z6*F&1ViTqk8hkMWJtmhbCjz-jofQvm4O@MM0Aax$a2z@y?+SJQknV7bg!_%;w#^jy z&#p-g&`0@U{SP2mj0kGBW{Rdk4(+zgEb*nZp)HICnw;7^j){{-o5J$#GWvf;E861@ zPJ_sAlp#h3TDEJL9++i0kb0=M=bIml#lK!pEmvLj@9atokHVSg!qu&Q-pQKiZvOsE z2GeW~_2KTtgJVCw4`!Yp@}0a%^BDPzC8_rYG^85t)kJ<*vh~&1;HuB^1ixt@@?}l0 zFNcXHj+lo}F%RP}yD-{QAO>FXy($pt+cb0IJeuZk#5uO5E(ZkC<IcoL<<ClO(R@%z zf0iRxi$ixQaNam(S+#Ua>rOzxdXmn;k)WYhc(sfh<0`};F$0&M4us{e<h?`L+3x^R z<%J1~y}Tp%(AlBC;L+!5g?<&{8<9DmY$6&-Yjoptw@k`cA-Rr3lI^L|pooc+f7&;l z3r|~Lrioi){Yu{w5bCyR6c^Ur7?XVBrLwCxP$71b?7dOkwGOF&Vjfi2cqW-G17a=o zB;|@<Py%5Teu(S39{1Gx(imbZX{o|RD;12{Q`E0LR=!!5l^~HF+VngWRnVhd*DkOG zIVU}8G8a{5T_h5<mJFWv1}pSD9AzPQF_zUXQ$<bLK+r<F7FBe19cibhCF;yHVivBq z)Mnv79xXMSmBD&*qM#_3-_^`mFYTu1WTQ5aDTBDNqHs1@k`BVzVSPr)FN)fYv82#8 z^boNR!Yv%#5pC*>fh^LchXug86JxC;w80{r-&kRW;%!lMP>D~R%VFWh<84yoaYOBK z<(&5wk=HPH@IxTdOQy)yk=Xp#N;aDI?=R;6Qnt&~_IyjXu*-lOxgcIErM0l?c@epz z8`EDc%`=^VhTu3@lI~YZdfR`8=JonqOJQw#6Nx)>$(9zlQ6Z8`!(s4uG|KD`;c5gc zY;5E~i!Hij@^Z8r9KHX(A7ZFXr~r<%M#nSJph6u=AWNj4E-JgzLP9k{vyCuX!0$~& z!io88q*2Zg^seuuG5&r^P*Z~Q$)?SxDxC3P|C$*3OO-iQlpp>i$<}8t&`BpLGrpFj z-J!^&*G5`NuGA9EkS$DI*3CN>%>AJ*@6TUgsN_t-R(uXc-AKdT8LZT1rqrU*Mn4J= zzz`>HRrEpYP-@~R*dT;09u_<HK_Xw;oyt-$!ogE#?SBm|6LP&$sf%-ORZ>$GNcbAt zx4gqTQ9NdjM(zCB!jvF<qGzbQLQHyK48e|HHZhT$jqwJcaYo+?aOcP5x7`U`_GcwU z#f)zLiZF{?2G>1p9>1D`33~G3i<6O$fnQ(mb=nIi-v~s{RW~lbH!MFb5z%~FSS8<C zrS`lxTNU$F?DP>|Ljx%WF?ic%y_#wz#_DX*4ejwoGPrUUgiTEkBZp|=$LB*ZJMUnj zvh99(e-nPrx8pg`;>g@-T~1Q0d7HR^h_sCTllwDF1w4IE8V|f~>Q%`Uy*R27<;$`j zeek(K{LPt61Pi}TbP{URDgEV9APuX9t2*H(k(9F|C8fj1zY(}pQfCCODRY+N$cosG zp0AF>S>f9yb%f>~GAkzyS*e*GL1~Rv5Ce7u?WNJ;yg`~{5oMAo@g*;LGm#%uNPckw zzvW0tTi(hhZ_>4Fw0x94CpLBMx;=Wb6-3Q$7vMjYdr^%dvJkskTB0HYrKB<$&OuAE z;EoPfM#h3aZ1CS#OJsKVHgA&n2g?%3Wm~#IR@a&8R<ONWOebKB8x0YotEL1a90M2` z_^?`%NKsfB>=c=k>X6DnYAh}TrZvW=vco?+&%ND^aeq&F15Q+GS}Ud0ZKRuW*$SJ? z{V3$||27_$K+n9c$3%!Gu^<vAt<Qabn?v-2Oz9;@FY#YJOxg|W(J^7c9S`pAi>Egk znEhDWrkdBI0d<Abzi9vraY02iu_o1Uu;VU9<$)UPV&$N_@AH_>&AWOV{wi<a;yy+d zXI4r`!zao#FY;3_(Wu5A-A>UTCbGypPvMf$Ol&zy6^kCxS<z#%PPU|%Q->G@yFo;= zd?SlT@1i~7moD_lVAIkxln(6Itcb_(JCG%dSsMdj{Mp%^o?*<ZN%|r1T1O1y3W*;l zZ47i?+}Rx}JOE2E)M;FqcUrxQ+S*MU80LjD2W$-pcSGmnQg>*8c4H<<cAKuQ+}S+8 z!b|%RCA^KYy2=Jg8gg2l4Zrf>rU4v46m^?kh#;AE-h3s(oT^uR%YHxqVjN9+Kw7Rs zJ}jK2oI>^DXG%n%G`K@rxXt-y*(l%%-KM(6#zoHN+{vc0!bAl=?bhzJv|&x8E-*)g zKBxo1n3@mX4qTnR1ceI+26kXWlG=$W2&0dEs3UltYvL09VG^+I4hkAZ1{<V+x=iNk z+*WY@ogIREJ?S1tatvP6A0d{osi9ezT`0GJNu&xDdZeljuZZ~E*McC>`N)H<tVk$> zWZ_k5g$kwIYj$8Dmk8=HG-}2ThFR!`C)CR`4lL+(0_SX~r~B++ni!IxEh&aM<VW_a z3hcPQ3GYYVyPa2vVS*5k^ph(%PzW9<L#QVAUpV+r(06T`OC1AeT?^N1^_F4VMEatu zUc$^pON%Kw;G}d^9ul(kyTxxa?pW%4ebAH(L~uK$7LATvDqs2|m%m06QJO7K-O7=h zX0suULc;>QwzXimwdM7GbY`&VS2^~?0KAOUVmUinWx)hQm2NUa>phxpOX&Dt^_C7W zH+9djD&{S?cTH&(CQX?_X&f!VDbEN&m8D4hwmV__KhkOkN6M4_Q~6IzrN1z<kvXhY zj~nnc;=#{$M@!Akvt~O4H3)*VXi8{7ti5X`cV&>DJ*X{I*nMVayH_EERhG)uZJD!a zcYHV!${tQ)l%5@#<&TFZGB+L65jwGHx_ILb^}5V2SlkW5nwpH+Zg`KnPS9oOx&>!t z)Sdy^+KlStMT3wL`koIjCt6bv%}(c#`q8yBOMBb^g~e_ug}~SCMbTUMtK*QfL;5yG zeK?7;5D%$Qvx|cfOSIdF=2QGyIIr7lKAB^!b29#%X*5~mfbgmc$AQ#e-U4|NHw3cf zDOOX>`XJwvejCcdql{pOw@YRsZZq3?89luD(<}-Q^4nS*gtCj+O{FpG-4m6|Jqxbs zaz|+&svh9wsDh*SO9}$DFRmvFlqp`jPerEuS-lzZC3VEc!N#gruKWkvb#nWtY&~T@ zIGXTd+bL4n;M;6IJy`Or4*XcN-P?|-NljikUJk`~n>h;I;Ewr-EQnLDb9Zj%Vyuk! z{m}<(IC7&|9vo5w$+8Guw%Jwe&TeW_J*%53>8m)4>M8<$B+<(yg$Ps7ouQ(!y%4!f zN)a5e`c+@srpy8c)11WlMU@l2k9iAfVi%(0=G*xFQj|;!8TkwsqWJULDS5cS>fnRI zDvRFX!i64<Xy1Xyd0ScX#V@DEb%H(4n4pk)C6xq;Gt105bY;*ymUy{l>SM^*R8g7` z0`1H&Zl0*eZ<fo4;X#I*xl(M;5DRZ!9M9e<m7H_4vl0t@IeRv2FC>ac#jj{0Z_Bv* zyZ>tE5{h34I%AX*uz+FS$w3*T#EY{=U-sJf<jOj$VCJi&Dw*KY5{w-+^h!a)L3aC* z<#}^rl}Nejdo$t3{PgM}%T%a1`$J_R*z}z=&SxkVo4N}fB8rnRLwt%&1Jy@wN)-_x zqeM{}Qr{`i$b>eGUKR5`Wq8t5qpxAe`-`Re_-D7hYlzRk8%dlRW9Cs0CVn$%1-A6; zVLkQY7Z^k`EDIkah~e}hdjcTm@&)|#r`%9gtoZ$Iur@5kTY;5hFgCe)>R1g{!(2oY zB{`|}iVD`0B%RWfZ{T>Mj!%!hIdY}@BHvNhOdu=e3bMQi`8_|AWyNDy9fM|%f^JJ9 zl9U3I8PI#E2qVSQ-%Gr+E!J%@o>(2$s=Yjp2{h&h9~gp?-fyV|Z&b|mzol04iV@Rd zHd;<K!Gv_!lSzsWyq@DN-GfM~Te3L9(o1j#Dt>bVfzG9o2qKG#@s`sA%I2|%TvzNN zWpl`CErxcQ&T2%~c|Nx6^>H!D4oj5Edb^Pd=f=lU9($VjQ{mHh84TW-QLji}0vyBd zOr05`&QUO=!Rs8F&OV{cov`8#Swr9GvSqLxKN?>66YU@QEYl9kU-DaBxfiL&tH&!y zg6VH&965f&Hf-cu!~CKI=w-j#Se>txR(6$E2GGiVxoFXVnZ<LUx?}WKJ-}4fSXyi% z(K1>JOsgw%*SD-s(#noxJ;e9R^(QYp+z&rk@+($)74fJiEIx?hF*j-B=?cDJI?Av3 zZ2ltC#;M6g5MmJ|^Gmy#Em!)16E|SR-)v4tX0M$o6o5a0HQO~y3d**^1}Zcnr7T7Z zgj0}+c@xzX%Y+lx9acWW2WO2KkgXPN=cqWF)?VWZR7y&xxeGRT4BXJKg^()(y11|4 zl(@k5G%;tF-B^m1NI6tJGm(K;L{-FqU+Pb7$!TpcIisOEhL6KbZ7ikDl#Y#GfaeYi z4}z4){#}-}EZ*A257(%Vbw)g36<zLk3g0)1>hJF1a$l&sEw2;S(e4_qx1`t<N|ioz zJHC>f^-FrKHk~1{j{*EoW%zwNB~5g9<Q<(1#={=2r)y0^CI~B6X#x3f87xsxm}Q)X z;)V0&j*e&-=GD{M(rvAO?7#a54u_^m_zBhl20u1}VP7x{%4&;8>WL|mE5{X~vn2>c zFOYHzI(5J)_X_3I>#((1-IZL#s7DDn;T)39Il|Vl)HjJ21eYtcQy#nA2NcdnaR8iD zDMu(|Z5L|%Z|1gs{L@9MLHWBI+R{gufA0N7Q+N?LA+W3^cAvAovhQYP<@P|kh%GrO z)xFpJ70X-J6nuSho<3|!W{#x>6@_&BcDv(Jntrn`rx-3t_M%z1egg^?R?BO>I{t>X zTPH=>GPZ0oyK0cdd)?911zyRz;1n>jLdqOh3cwd{quubtE&C~g^|jEA%TYI2dS%@s zeDP_b_5icp)f3pzn2?FD!_ytPcxYt^Rgs30oY$4xmusBd?8f=8E3vB4trF8s(;dT< zqKY3va8Cf>2B`k7BF|3V>ITgQ{TjfQT-bBc$c(HvEnlXIdDMoy7pZE?S^y+9#(KtN znGxI}%*3Km;23jCpT(=HPV0&+tW2k>Y%7K!*O)vAfu|;Od?Wn1_8UIDr^C8%aBn`- zK&%-DpvE7LsVbo6#DX1vacXpZTFP+nCu&7|4XI<^#U^UnYXL?Dn9}mQOyAQYz^rbf zFS@XS*9gnl1p!<82&IM<V97g8l{8NUeoS37m6+L^2PY4j*eX=Q0!Jgc*IY!+;-tWG z42G1CkP&^4fbL>ERneF#0dOc5=Lk)@_B-cmw?$(KPH2&a*q2`0Dp<7Hf(M4A1?ZPS z%U?Tl#Ti41E2IYjw`TWi=jlaAqbiToXP0;}vR?0hR)}%MIl65ch)GSBQd8GmEAr_f z-w>azZf*Vk|4KW@uS~qJ4`<u9U3a!^O}6dHwr$_lWK6c*H(OKPxykl3zrW#md)7Md z&RTn)wXc1Bswws*?LuE-JBPfJS^B*q>2Fi){7YavjVRDQHI%S-#Ngp1ZfS)u3{>bL zi&y;xM%8x9CWSiQ7kspT`R>^?V)1ak)1PvnY%5~d(J+(%`Rh-leT0s`<`gt7r(DdZ z@FtE3Y=P+G1afpav`Sx9C@Vs)GmHE!K3F}}N7$h<aO&#*#_XYNoT1__dGtHs5t^{e zHj<y?%gMcA=;NYtI`a1_2{0!?iqLRjTFYV*pGuyM5es$&F@e*({k8dYVfd(GEo{=p zHKmf;C03<?iEON3mfz6WP0ZoTw;ApsVnk7SidFtH!Hr|94SS=6wpQ<@y<;>9X3U-S zCQMbB5G9t|srR|;1BWt;Q6E31^~5yovG_J5Eq2P}RN{mv8D)l76~UU17iLlwd1S}* zllAo=osVpzH>s96<qr&(Cu>fv4>Wj%DUVuV*5#?>4--~W(6#7cLLzh@C+dyV9U$Ez z$j_jI^(*7^%IXnD?eyeI6=J)~SR~+nd{zg#FxD7$m5*vWEl8hlmj3Fq<f%&?r$Jfz z?-U<l-_cA(qEC#QpEaI`J2_5<AWQWKMdU-7!BK6dJh>#X1R;WrM{QKny1$65HdL2l zrVxn&>6WURLQU|RXvugAT^&gQAq^H6Z!Rt&%C~ui6e8g#Vjv)YIRncg%>JMLz%a8l zD^2`(IS!p@IRvk6P4?`s&2}!sX=NnK)H6lkQh~E3X?N#`6bN3)un{SgdC_yZ|8z2! z+o=(o-6Xq*4U@n}DOs86IOM^1yVJC9OBNx6GnGe)q-4dHs{Ahu)f}|k<OLbMmdC6+ z)m%uK<t$R+DNO>owdi)b?G$Tm1Y2m<OVR=53j2{zwgAWC_mB|3IFsh`HVPFrXMYTc zi*a6&BZCePJuJp|eJI#KSxAQ<=pvNqY&SNX5!bXiJuRJ%{XZGPPR-!1|7>y0j~~>p zoD%1&A;FWONyR&C0QF_MY;@41NAF770i1UK!9-T1T)vudgW*mRgmVe=Qml<>EefNf zCzxOXiTQRIO0hFj$&u4ePUbVF+e*#9;wno=tpm20tKw(5+v_W#xhD#LfOuDMKJ5fe z5|VQ?w#sOtk!A3f{RK%esH(Itq_-eciH9mMVm0{oIbVHwTNw<Aa8@9p3gr(zG6i(4 zJBGSA{jfc3IHzKiZR)1kwG7iLFjP34N|TSF7D;X<E{Ne*V|hf4ivE;)N&|H(3iObT zDj0bNX}cEc4QCYXhB{eb8p|rvezUbfntJA|w`am^pwi*UMDWm|se{=aDHZ(IXq?n8 zDx7ymBsP~n$qX9pZ7+dmtW;N&-;pR&ZV6rNk4W^6oHSVg#d;qG`)Pd||0M+2_f+|5 z*41C+!-DBtFIe1Xy7*)7-Y#rID3-k-8=omXoGcb#YuOc3yrkrpcg=AY<Pv4`Da15p zKK>CeSeF>DOK3+>&<zV^w$mf#byS-mL8G${F$AQRb<3b-^k%U>zv-!7eT&iu7T&y& zTb~`#tB|-)@v3w_=WA5>Ox+qP=UhKlMR_>a2n!ba^9aQHZY=o6Zfx+gB+`4psPFlj z1mJr`><Ee1o>PCVSTLhEC4T^Puf7L#iwT%{V(+qvl1SYWjXV=+llWkVOtsjqgieT- z&WXl<^1-eWs{@f!B3#8#d-LzQfxlF=%?ORURoS^jF_jl4;&pVY5VkqYe(#DH_|{=0 zYx-b9!5lS_MMc023$-?CHfy-rR>{i{dZ1i#t10+QDJx>}jd|4zu2^`ilHj}eR8MBJ z;;?sWrcRa$W7)T+Drs}TamZDC2rC!Qz4WU?bdjh=;7$g<O|JBR;~}7B8TK#qY<z^` zJ{w(|PPO}R6Y;261>q&Wzx-oD+l5PvKiq>{Nw)v{BrGD@?r04Hts3{ge8lAy{U!DP zdOhJ0zJ2;;Ls|tBe+Sa5mST_E{|@+l*4@JFyv?ukE%xW>>o;fz7P;qQw_xMlHI%Cq zG--BRW%;}1=CSKJ68~_i-#hH}qo=h!YSiwRPMo0AQ`G$+g%b+xj38~Z&|xPJUyum# z6RdmfrJXm=6RMNXPw9;_Bu3vRj5k`QXJQH%&r_i}Y5d4R`iAz=MeAC|udjusXYXta z9sk2m%j+d#U}elp0^(;Z!x&axgNzu_zXrXdxOG{zAFd)oZGiQ2fhtkjl*!p{N+5-& z_vHoNYG>HPc7Oyu7-F8UjoOB8ctgXeoK$+P{`I%XA5@9fT;mmiiBe6_fJSUdwa21+ zjo!$kEcvXZ&Ff|Fpqc*^;|5_UeVtHZowjK_(OX}_Eoa<pBVNRo0SxUN<3NrDgNT|I zh#yACQ((!4Btj=@NYsxq{=(MKyTiSB0=Hmphzi!9r~q@pfeMQ~+*{!;Ms_Y7?vIGi z+o9O$lCj7h^m56ZNZ`#<!HJ4^(bwA`@ZVy3r10ls*gNV~-wVyd>o{s-ZZ~R$e}3<z zbaUfyRer%VqHKK`q2SBc#_e1KNuReH>$0KZv=^QvH?;-L-qJoVfl%RtR`o%x1b3e; z4r^IOG8zhR3XeDS2IQtQ2W2iAc7q|Xzi}6|VUgbHtW@lOsaJqDSAh^{W8J>sBCI+Y zDIQ-a0V};_m+rqO*rz<JyJS~kI3e$3hB$QE8)uHD^p2=k!*9=|Pe2DJ+lwF3V+|p; zH|Z}9F`u76){dZPq`I2<f~P^G*BWx`$%-~rjpeGZRiIEJv@l>Y#KiM=1;qAs6QUz^ zcUTbl3AXIGR`1&1#3oDt*xgngmNMDd+OH6Vj<hM3;e)69Y@EQ^h(f&*IQ(Urd`yJl z)1j(xu8)Skse#RUNmBn_@Xnf;C=|rA``Ep1&`QWfFo?2t$hO;R&t7q><3`Zq{|EO3 zaQ#qO;OrYsP$!$>!eKRQNNqkVE^20NeexA%Jx99T?fwC0#07r@r2RvN&CAY#5I^3{ zGlq%!9zU?N35x3p=ggty{~fb~k*obEdrkjxLylpqMOtvom41OoI<*Ux&^tr>pR5-? zg);%Wvu}WYiR=98B2Rudrspu;$M}&YVM3aSZ20I>GLPg;$*(l&G|db0C$9<dt_3Rj zlDkFG7{J)le28oCteu&;a&OaNFTtZCa}T8BMULI2x>mwh=($&QW-O)_dw{T}hlz!p z6e+4{Nj#kB5ss=n-jb5{pjj@89I{aYnd<~acN`H?3@^9*RBI4#q%80==3mn7Pk9~| z9c>@=P)cPAPf4XJ1<$mR<c$hWPH4qEF|QI#MV{stbWgQS8@Zp3Qmq)oIW1|v+TwzX z9Mu~7kyf1+M_V!c6wT`_WzXoQ^w$;-FeoUjIejY1nNHAD;ug4zMYf4#{JalSx+(Un ze{1AY+cYXV_qgyyq+h+Z1tA&Fea{=G47B?~%Z?QYf(1N{OV^q5nytvxyAJO5!|c3$ zcq~Vr2J_&xHTY~eoG4HdsK3^JpVLw9VgBv&<sICFE`P#eJ>E`Pl5SIh#@ga^oY*x9 zl)J1^m(mhd+hBNH#hEVObsL7UR;=9rDe35w--MVz5W8iq+x>bNJ^rTTHou<ly5vZh zW?o~!l3h);tt9Nfjv70bHZ62%TZhY~1(9}x2A$LOK0x($6EYH2D0%HCIc2Vcan_S- zCNiWDK`3Y}c5j=<G8e~*vO$eVNt_`y(H7V!gYA!+%MHZqW}FzI-VdZ)?=P4KIc1;A zlyRdhZB3en)**_ro>Lj7CwM|)jFzsUYO2_*WME2ZY(+!)4DSts_H|)car3+W=&)Q& z@giBH&d#1(-yc-8ho5+y@<J>MbZK1{eBvzC_PWn+F3?Dt(c(}MNN}=L{v?ouDVYgO zj)<vH_7V_MTu}E4@HJhO>yG-0#{;e<N|f5vNCMepWF4E88@3W9w~pv-T<g_8WX##v zEM)uqRB44ezz%SDGUZjxJtV=Ex1sZ;_qb7U+*F4)#hGGU0t7@bXN5MBZ@cjUFQpNn zGPFyd+Yhxy*}E*i`PFp`!9rNtW)4{_eEaTwcDs(-%yVJbt46tHCVe|!l3zLA1etO( zY|o<IfF^Rx_W}*nEfuj+I$HFWc@ADa<0J?gY4+PL%g215t!ivwk<_mZ!+1O9FOGcW z)M_G_-Q=lZCFw0M%Gy-U3Uy*q(*(G&cHVhJj@sYtlx;qYWD9*@|F|z|GNuGTvcN^Q zI76M)N(@y0tJ1*(+`GvQMwGz27}RLVY!e^ZDsatR(Mnaj=f3e4TS+5DMpIiPfQfA2 z3rw(@=@j}iS?tDJ7%v>Q419?V1}1q*N6r$gJ+Vx{{$WTs_F+_JxRQ<1G?9SwbaB%0 z6=BdZhQX1@O&a4xVya`w`Fuf0&_@*O2bmfw9UV@honr9^0aQ+8d(@{YnOO@sY3XRT z!cB>z&<Pi-XTiqhV96M9jXKPZ6WjWZA;dF=<s$A8V5W+uugDBlDDr#*lI~UvF*nsf z?b4g|UsSE1M9WvnCclc1;4;EE9toP95BO(SkcvN%Lu#aZSO+ra8U?8Q#EQLPtut7n zY%Itm&M;`BoD$jNZ$#OTQ^<mbHVX~Gio|@w4w+AmKJcyicztCk5=aIDHcl%6d1glC z<|t*|=>leKW!2ac1lrVs<ez88KAH2W@~my;Sjf6xrsQU2JrFS>W!hZ5c|Yv!{>z(C zG?wN=`(mj}_)j6MZi)|^R5sHT*HiQY4FRG$xZ0MJzOAfd$l1k$4&4@)Keh6jYBR~? zYI@^pQu5N!R9k@xPSzg=;DUdZnye0*&-NQ%2SM51*{ZL<*2XQAO4Be?#<!l0l^~~) zx#U%7`4H-1Rfm>Jp)K%hEesV6Tz&Sa5G88tD|$pR0uo>t3ptPwecYLLzSi92I69DQ z6fHZui6C1P?53m^e+u#^qU2ET1?D7|&=@Yy&>5^A&(plmU@c2B1*g^h(=dz4^BaH( zR8RCNpj1Nf^_pxyT#?%-s@Wn{TRbGPx{z>wDIKvlb!EOmy$ce+nZ@WyxPY6Qd*^jG znxL5fR-*i+RXG>3Vl%nnDXXpAuz*H(iid78^2G|&^OA<iqzA!%<ELY$N4tclNQmAd zOwm{Bg#yE;Dy5CxwauYb_(R|midiElGsyU2#e~s+pn=7ZQM!2zP!dx|rNWjT+vO0= zLWZ*X!AHMFUoOHQ^GrS-GNb2qg0&mGQzt-~J9)9V%qQ@6`no{$i%lb^$4M$);2B%4 zH%Cr_3vHh6%%T9|xz#I4A#0*R?b%8tz`$TDaT{?6I62;^l)br=aWc;V{8s~Pa-`9_ zsZ(Km+)AfBtr8+Z${Ip6FOA5_`BuY&P917dpW7J4kVa4-%0a!iDovE6lDYN3jfn;i zS1)cYr83>II0}L@!WA;R)BJ(`gQS5ZeH)DB^YRBGAyMqwxtL4{Yi@Si(Cj9=Z+Mp& zEJd^C56W}~HH?$t`^7<sCFu7!e{@#Nwh~*Mkq?U2a9Wg)(Vk~&D!Cq^cnjnjD*mw+ z2Tphl(p^h1zAws$80@xXG0Hn^5Cxk0e}N>@;zs5112wVaCXsX>_EqA$wN|%TPv{*P z?lZKuGMX?QuFWDLunp^R*oX}uLj#fWwL`E^C?1Y>4Tc~Bi-vrLf;`$gk5_@YvBn(H zfs!5=$(4Kp1mQ$Dm_hXD&ST&z`S09r32kl5S-!XmFiOeM$B~kz3c&~Qbc*O7@L*`v zr|e95Jv8L;=yw{NM{0-cN(Wk8fgzZyOfS%LAr+9wCL~x|^Nm!SPNGtZIIi1>Gv;Gh z+KBWv5+NpMrx>jgVnHJd`D)0>nwF)EP7FWsKL2BYyYcSvAJjij6P2>nJNu2Oag5Xl z-wiXi%VaG9uNdM{D=p~*-+lWtB+M1cQ~?+wzP0Q%n3|cfh3mAsX;ob6mfpG%zfPs@ z9cSp2U04QMvRSw8&c35FW`}jjjKOdmCQCnjru0yRn1`kLeT6;jVFvy?_H*kU?qS+N z5S0$D_;K?iel`5b{h83O4fVY}D#`;Tw!pP~n=Jqrg|L#L1{LDJz7}j3ya#rgAL9M! z;k-d$1H=5%YA&g$mBBFkGz43K{7x!{6x}2==yfs19E|GC84Exs+IjheoR2Vb05YU! ztMm>PaPgDY!O(^p`gI`Iujj3ZfP;e}v9UxpP6FB+aeX(98l9LBZ?pv)KF-)RyVx5| zD0ZMm?wP@ptXl$6kda6%F`*F~Z^o1{+bo(g%2lq_x!AC}lWWCdM-owNs;2$Bt}M9q z8(7)2X)%nSQxR$UTWOh$RZ`>dhY~tbV^)43QJljt$@cd}rvz|Lqd7S_`1rSM$N<=B zii4O&HM8WA3#tZu{lyI<R^o^am@aWf$UsRrUdx_2f}t%~EJ$pl>@GIG6ps!+Gp}zz zAglajKB`=75lf){@KoAJQ<8bnl9QJ}a%x1OBCjaIGE;#_{qI>3YXzJ(C7oS9Hwg;% zxtp=Ao?#VYAu!SOXS%z!72yk{h5$3W9LKm(F<?V)@g=9y$4x9_7c{lpBgpp>@pHy6 zuBwgl%eP)4*0x9wwVva0=BXth%Lma-#&3%FNO!4}U5kpb*eSR%>0l-?S6b~f;v~gT zUdHhzybyP^7JST$3@WiB;laSwAzI&R%Tjt}XnZsR_TCp<I|db@Xy&d2aX|qx*2Vfd zp_j#@QomNj^?Z$TUWcDU*g?|7`#{O<n@xmO&2go3A+;dF`8vSw<Q2WUajy9*?B~g2 z?`&&>bN_?!YL{Qa-t6<-P_MmC#n%h(_B%oUpS@@9z##8iEEQJUo%a;qdeck(W?5mx zqdi*etjTOLaK1cKFEo^F-N?jq$ZtIlufS6t#RHIeS;Dc`B2W7A&r~>isy-vdd<$uu zv!Je5Y%r5cB#r$m^iA=&H`2vn5|S&Samc#4AVvB(!grp&k!ir^9kx-S;8+&BrB5`h z-gVG}L<cMb)bp)EI$vKLYD?K4is_%tb<t+%;D~PldUMVxd*rm2y7W4WNmAcB3(gZB z50Kb3x;~9$r1Tn$N9@D<tGZQliswJH8E`&;59{)SG~i_qwOCB2GE@2RgtfImO&QGg zowQip-gX`7XvL4NnJhj$Q!@PVT328(M|&ML_X*j%+dBJkvz|`nq%|tfGWoEy3>r-- z4zQ=Y*0LHsoo8&Ezd!3VA~*WO%*kDBTs&%lV={v1z}o5zO&u`D<hz=xP)uc)aXihI zDpT{=#ZadrDnlfdYPzc^UFOjFnC-TBA=Y3jUZk+Nk!DIW=jLL+p4QG@m;6|#VOrPv z3%+dLF;AU<Hw}V2DwsuSsfk9O5b2fapRV3U8|ShZ(+<{#2z3mMW-d4)P}$QCY(kp; z)Rl>pg;twd_MtYaL@rd~+=VFsCJ#9?oN-s;lo&yX@Q>fuJ|qoB2!-;;ph<F4!zg~j z8{?`cx1MlWFhan~UYvt~voU_~#lT-mm-2mgEp>sxH4TR}ER86v=j^ifBiP%4d(IxR zj=C_><l!(Z$4erznbhUEC6m<9-Wyy*R#h@uY^xUn+=itsYkCSV>$A%>&I-SRNNZa* zB_GoR%~ycS$i3NmuL5QxP6mFmBtJ^_Q1<C)%2DSwdyu{ULd$H#H-Foo%{5fLWb#UX zPlpf3=X)`GQfaO)y(AjbbpG4NFqVWue)de|n-7jQ=27rB>M^D&QzkQ<EOv+b@O->J z%s|y2T9-VzzQ`({dx*Y1Arc+Go^6cV&T_U#qIaWK-LRNyu0zFl{9c`k;=%65GH3s- zNG%tt^_k%%FRf;oQ6<~dC^m7(wmjY$!FpaAj~DeH^mo5pgMaz0OI_v)`rNBM?Fd_0 zq=dQ@@4`rvp}>s{4rg8Wl|@C_Pi0{n|0PxJ9Q_*RqQ))fVs#<L#g>{pm&ff=*OjVY zg-xELWc1;hmgOypQWa;l29i)91l0C|<34tAf7`+mDLiU{fu6uu;ch67-vV7ei%X8_ zAejtzM~ABDGY_5w_yIc2D?g^uH`hhG6vVy_1zYGQa{ol4z1(EzAOgJ+c-gtP-n;P& zb%=QaoUpAP<>U&&bHs?5oLhdxrI(Cl7nZP+Ed<mqgZPHCf0Zu3g^B$$ZnC|>DT`K< z*YJKsqcm9rRN}hXcc^(ojIH^D_9H$6xB(PzWx{5gILYC^It0kYBF3ZO)+<9&<h7^B zDjMebqo*MxUocN4G{jwvAWdYE`CyXJ65`12HQ5mQ-FKyD3F`q(ZY=rjRrgP5vtZwd zr9DnypstNbHU(rf3I6ia6(q#oV7ATN@O2$@7eEO{lWMpoEscGkC<tKNvsij6AV;GV zxLt3(|4cXOv#Fy1p$8-M$^mB#vLs_2Mq3Mml33X@eL*xjM685?QXZZwPVobGvEMst z`K*3)cd>H=du1Csuqc2`n_}a(wzvV^Sidm$f9pb^5@4lJ(=gfUeNf7|Uo@00<+Nwe zj1`)e>JY(Nw~W<CoPdH4tN_Qi;dtZ8si)Pl@C4}4>UxC<FwQGa;@wycvx^sN;9@T< zu6EzB4DH^TUYm`4WiIu{gyg7z8S`RVB#9I;q;l`tQfho=DGj+Jx&`S_Cy#T@Eub_2 z0DodR@^2I(==5nyiP>}!Lc}M5(cC*p&k0BC%|7Fmn3dlj?G;d)_XT%FubMVo7-`)? zG7*6?W27voe@KL&&4$Ro%ND1=W0k3}knk2m6|1vFQJ5ScYC*~okmC}S5Ry!MM>iSS zF_O*V8pSR?ae?Pf{JI*j^yY@Vg%Taa)CWzvUbcqT!t`tK#5gn7lAusi^=;XO4xW|0 zAXP1z+Jcg3)MA0Gurv}w&@O{&PIevwws%~d@;DUlK0Z7*CaW2Bea$KC#!<~2*stSx z3_*DwO1q0%V-Z#Qru)(yPcGU2G$de?rp{$dl&%hYXITkwIegBqH1`HE-$vS9CfjE8 z@6g^`xT3VkzYye0Fo=w9N^2j`lW;w*ijZ>LPm2>FF`h}1oMtDH#VquEXB^H;)I#{} z=PHjH4HA$O;D*Cx`elIcb0*uH)HLS9%H_~QXv5*<Lk^1zMMdZgV0|NJ<0Fgcb{(e| z#BI~6{sq7(2jRZ2|E<uqjY#<F)-V679zuDn?>bUDfPTZ7L%A+T6D7*1Z51U;WJQ7N zH|+Sgf=p^sD~*(GTp?$?(*Kxe0Di&hF1Os6LeP$@@k@7|U!9-U3(sCGq0!&8W0Be+ z03#m;SnA~&e~-%}pJ7JO2Ozp6IC<7|t#;}1Y%YCp#xB1uZlPFf6Hc+;+Ar31qiTcc z^YrGaM+NJ|MY$=;E;Ev~)73>0Z6cz-!;CC(Er-g$yu(!9P%%*xbjXjsiolY;i_ytI zh&o<&vr#UXHH(std5)IB=6o4Olkn+(X1N}$^JF$4o%PYzcWS2nY$Fpe3Cy}=c%)N~ zq&v!B@;C7wB?btVbxkqhR!S3K%)%Qqa~-#eKYu!#sMk02ZO9w%u+9^K4k7+i>OTrI zqCC8O8%$u8r!R_3LOL?U|4y{y<WKO2SwgOnXzy=M>NuKL(kw=DT+_XDMs$oETjB3g z6!@-abtkEL5ndfcU>pIvL~q7sf#NRAo=NbOe`Yteq&Msczi9N8(V@4*in^A=$373R zIyd}rxg_2itZxEV3E286ru7Q;q^)%=(s24ox%B?KM?$&|DvdZto|cHuVw8z*Kh`uo zRDgyuIz=)>L0BFCQ`H26EP1Ki=CODy=;Kr3wa6_u8Q4*+D~!>Gh5}^#ZwGqrm{i|3 z78g2Hl*ui0pn<*-9{%b4B|*Rtdh&`~rh=Cj@frixeH;Px24p&nQdEbNoN0PU$qC@T z#y!HVvxYbMJ66lk!3Xc|<Yg{0^Pi$p(_IELV;oE-r%aX9=z7sY;UltxV~e|`|M`h{ ze~EeZJF~nzq<S<(CRCY$-Uz1=!y*NJR9422JF^FZca6onPB2SEv*gFgqyO)mu?7TA z7{C^1g{Y*OunF_x4ZLJ9yZRJbjL>2<HiQTrbspgl6U!lxXbNTE2#xqHH*7*u1T)1N zP!+B-#|)EwnCJ=9Taju(NTJ$PkNN!z>pv}!RwM6dFbuC+$b+OM(u9pG3OpY|{Fn@t zgl|u>y2tkAA5))irwh6VUZ~{pEY-ZNx>4m7&>MnOs&4FvrI$9<80v2b`YB=|>VtZB z8EnFgEmV}Nk9Svwc7bKb<Rs4>?zfJAVT2xp(so|$odsUa{)fS%FEJ=R-M&s{4+h;v zYIr9@*+cdB(-DRwLMo#1p%89(oX>Z~Bn)=jC_9`Vk#MZT!w9lD5#7_k`0fkeUS)Zv z^n{+zf5x=o88j`jMkNggo&)gQmR)DjL~NOo(mRFLz^<xCX`kC{NyY}Q+mU976A1TX z1IZ+hGdcsFj7f8}^TQz>6Y1tT3|coB{Oq?DDG7?>!5Bsgxfdj~xQc*0UFD+*rm3S& zQ4&z1;SFYPYBIBCifzvwT^a5d@dO((AI{S3&<`T;ITNqIw)g}VHaOeaY(%7qEr(~# z5R!Ntglw>C7PdoMOO^q#mnTtdJTk0s2%3p%#C*1Zjsf^JHcjZr=rdq&?!y8jWaDv# zp$I+K5v{Vt39@S#0wTS@4R_Vj%;ypCiz1o>(72&(ftA%m@$)4rS%4=j!gWm`8rm1H z%UDI64b?W_I=8?_j7xOFaFTiIuT1o8I~pGG=||mmSo`X%uEz4!#|Uw;!y%*fUXrIp zAgueBGdJD!*B$SU;V^V**;My;K*{?8#m?s@$BkwkpC>egKM>r}gSA91!tZZVI8QN* zL0gxK3!?uk7)eZHx$Xrdc6H5C4S_+Re$_K!{c~QmZ$H-~Kc%(F4xq~#`j~PcoPW-= zOQPr+?pRvtx^mx9TC+AXV-Xg2N$2Dmo(9UMlG08~G3m31-^H^2vwwm6NHo(+#p-9$ zg^1g8#}^1BvK{8DlZ;u5)=dQxHXRE{1>`WYsRW^dgw4kSGKW3zpQC~ZK|{r#3-Ry9 z%WVu}<un#0D?%)wf7j#RKTxf=uMy)BS=%Q%bb@S-4OY5{0GJ?~1+Hn-eLVoS4VIUt z(`GyTEHP#q$N7P05>YF`&BL+$fLy9tk>tx{_m7&2;!BnIHj$%F1?@k-{z?_mvA#j& z>`5`oyewnk9Xat3dwFjQYe6fs17jiVl$RHtf$HskE$3b}e42_|9Fw*QYcX`*uIDv{ zqZ?WC`jerJ-(k!+-!PPvZg3s<5x7yD-U6nXd-cOHau{JFVA8289jD;}MxLyZ{;OS+ zdu81$oChdmYrXKPzDFf_fafBrLi{M57VvM{q<66?NgU7BFv25y%!3=~3vWH(IZM?` z6WMO|IaBBdkz!BRUu;Amqv#h93}es&_wdJ&{bJ)?JH!DibaeC@4w*LBdox0G1H!+Y z02gwSo2TcD(LPtaa{iBF433I>n3klTgHS3wJ#)cP%Z)8h#9v<fVbx<6*jmqj7mas2 zbo;ufQQonSU?c9d9#I*mii!n4n{_d(cd1Y5FCWV<lUBo#GqJ*owZ-{tWw-;`ZGTk9 z;s8WY6UE)l{Q3xosP^wBaT3!6E6m%B!*SOMg$mjur~f%L@jkH5)g=3t%0Qsf-siv{ zMb0=}4;sHfONBI~-B|=X#US$^p`<3(I_+_WHQ#WoFQOhnp^$zqL-DQpl}9yUC?A$L zfaO<K|6{wG9IZ}2lIW;%5c&;Ft4kt+m%`0(6soS!pJXvYu4A<#m8U^n75?_kGWPs# zS_)2As{Pq74)1bhKcv$2Iw287UFQF;Ue=pP3SMn~b)8J3`tOD$LgJb6mr8KbRLIWz zozr!ALdAmS|3F@vDbYb@CK)>{$mH2@Q7yYLRV7rm;>Y4fxf$<6I2GM)z{D}3JO^HW zRDIs9HT?X3I=M2M2fR=LZMg3tBan~OatwO>-={fFw_ZAT*3}R%x~5G`?C8x=SF%i! zN|2eInUy1<AN2xV?Dnv#qLNr1^(1@MuzQ;CP#q7>*_((HB`@0Ucv?&y&ROgs-KUY1 zvcZ<-QD>E|C@Nk~%?L0m8XUuI6!Imhrq<D{k;ewC?Xu_&VP$M8$|w!2VRAT@kIa;c zg;}F2`vlN%?a6Z~gTNjVke8iw3hBXsc&GNQGh3}I)c_jRGXakwM-gx5-?#$cq&vzT zN(DEBvH$9Q!Ias{Db7~8+0RRwV<FS?_<8;3zk<n_yDtiF-749sehV}S5^I0o>SXx< z1$~FxiM-Fqo0h$`iINbmB*ht|AA2Q}PH0-claibmMN}F4oAi_0)rYxwF@^)|O|nXc z#yd+2ruWcQUw@JMTmM^E8kE7!2*O|pVwI5^jyScuGM-jSQfjr-LD9&k;T@@R*C2cA z)dxCMQ}5@aI;brv(=qdgo|!d|WJND7OtGyGrn&L*4n<)pH}Ph8ci~Ll9xz!!6?F!; zKCwMek$jjkSCS;27Xhp07HE}3csX*Akw!^gPM_q`-VWEL$+FzLLVYuZsMbC6C)Q_F zu%FIE>u@VF7g>TC#(Jql&t=;5-`Dy>C*LO1>9d*M{vI6v<VC)UNhq)~8oXS{7UVdi z_E-c*sYeau)=DoK?d?MfZ2DJ&$LNV#I<cZaBQ2%@?8h2b`=-#u+dM596~i&VdAFTv zYNz)Ags4m0fVN#{OeTIXf5NK0SOI;@2!Ym2#gXM{GWiKmbp5y2$s22fu*CCd%u_JJ zj`bbZJKJ|75(Z3^(Mk+!1EiH6^wMl}zSP9%+%%a2(Ks9JFFxeFM4`)^x2YG(TxCi- z-#?KV5*$4+{gr~SMC9*b|LOBSvszc;a6hE-fPLEl#2Y4hz-lxIJrc3=so%pie%-n> zWq|Ww=hxLa@E)r{5LHl(6rP)yx#42L2Y6t^x1FRh@U^2Yz->Bt*SoG&Kd<57xhDog zTPrZKGsE6@OUpGQ=)@T%!6=oLokSW~)?zEnQeU~y9W5m$SxQ^agAO(DrMIMS_N#Jo zf$TFWJ6yu*F7#N^lDui*54ZZ=zB@7`-XOyb*mw;OMAn!kzc3AaE>4L-ck|Yp8dO7< zaV*ydg}Sf?=tvONi?b!KU#C*=GmLgc+RxB;n2vgV<m|&{rDlRzhdoT%=yFmWEgQFx z@2o)y$i~``rBmkUPbG{u+;0%<pWL2^sn;5Po;%1l%Jh#SYNFby)Q1)37_9V<?ubTo zlJmWBOHzJe)7X?oZs3;d_A^Y~?=cV#Lsvfvl(#t4`fb=Rnr{T~n-xcxJ0Sj?svE4* zN6Bxh08a%9XzHS@b`46;vo;d;sKtr*r?u`Nr_alyT@l-l00%Vp4y}aWTH3Q0rMj8m zS6I1z`>-Me#f%<qCCkZ#j-T+OqLD$GIQk{%X{Xj$7cYaX8KXA~)XXe>QT?H2h9cft zx=5ruW`+!rTdk)=#bjd}{1|o&+=+c%&}R-fSW1<r=^{UHGp}FCd6+TwszQUqvQGs| zirXtb?2a_5dsL*3Ug}I#4GoUy4p=9_0LvzQcVTIdCdojgnIGZ**~(w7PxF!TE!`XS zbvGwb8j#GRvkXoIGv81ozL(xxUma)?qN383PIX|v7M#c55U3Nyhs(VM@ZZ@iq052K z3T$S95*r=B#)nKGAb(8_hWYg2S$1Gd3mim53OrKsU#X>@In3Z9UzpXwdTet2`Kg}g zm!Du5$nV$6Q;_eYF>tr%{#Q@b1w|3_XT~>P->FWOA-~3x&kLpYAHl5F6&sZQ;3r-? z--72(qTFCIC(V_^OCXK0wkWo>iu2shkrJZ_CN80tuq-B$0Hwn{Rbm|^6a0%c|E3RI zNKJb1JMHB%$^Ll6zaVA4kSV}shkFnIeAb(<;NcaRQ>p&ixEMt{F~}t9sJLJj2~e8t z9Pv-@Y99j)7h0GEm^!uL^HBGRX5|1sqnWcmcn9JM#Hg2BG^72z*{1gEqTv%EhvhJ< zgJvA9btLU1prEz`BF`4>*OnPRW|AATen_=Tb!qL7QPlj#$~gK#NPLbs?pu?wus<ur zG_!_+?p+C+zty1%MgG^Yhs+?!Q?x@$?qFJ{UFF)pSg+6``R|GBqApN-Th-6tWZ=Gd z>+%@i70j)0q4{|6ExU1|xeC~s-M0@-Obx4@relJ*6y-+1sKk8p>A{S|j(aaRP5RPx z|M5}G?pfO_tkZvWy=pG(L!W7$Rq5lQuCaHWh~Bk7ecCyV>G8@^U-bAhN+-G9Pdv!K z^&bp$^W!~g8fJZW?v`ZH0Omf$sEnWrXr9AvwuoUXaTynd8riL9A6V0tcTmY8@gu;; zfUpGI*7lV4{wMjDy<XPX@)6-Vs(*c|)5hSXW5=pkr#SeZf{}4m0#Tgbv^c-_e#~c7 zyhKdt%#<<W&is4$Y)ec9+li>InFK7k(cQ0NEhHMyYMF-p|080_ki>pXpFUu;57H+# zisu-9yPOdQm<qP%C;Ml$QJZvh`PSK7hVESUX$+OuG$vw>{O1Xdg0PUtCKcg=4AWtT zJs{Q|&kXmFFvZ%=(7#>AiX8W4{W^k66c|vyY0rQDA0MNWo}iDrwC-QP?r}O>+ibkP zYG}aT7NPt=XHL;w&rUYYA&uKr6My07Jg3OAUgEQ;;U1Z2Dq1cApxx)`6@%Y$|G`t7 zB!+&2_rs*vYRAgX>EwPF#RZ;p2PkHhd>MYu3Dv)Bxr^M#n1x56S4Xm-uCo&dnGc7Q zN42K4_g6l9w1A{Y<7pp~WLeJA4BBss;O@5P+7*6KK&<^2YWIl4PC=*4K17leGB)o# zL}9R6%-aJ%5{qf4AZ=pR3UqwvFDyv-m8oQ1TCBUFw(ue0EhfG=RA@qy(dHWxOVo~* zakB4TLz;aSqmA(rba&>Q_x&{$)PLOH{qgMl@jUl{TlNc0xNuo8wM@zyAQ-K4f%Q?n z&W9#iixfoP7)^S#b^s4#_|P&(A(JW_LZw?g*U0-Hl+P486tZP!SU@)<^(pgy<Z2JW z*?c9s-IjoFU1^)!QHENw9f98-K#Cwddgjt`CF+qe87e&P=ni#5q%py~4M!61IzaPr zNng|)6Vrx+ELicPI|PO&O+#(8qG9gO=!NmC>WiIYfLJkO$w;P+d;J>ar%n}rfFV7U z4xQp!PV61TW<^>?ktv~wvElH+bzfat2G&ur&p@5=vUSr){i4J?J<fP~7AH}w^n#dS z!@4N&ZzYD=D926VsU~10k&OEGqN~<zKrjLjaP!cWf1K?<i?sR^ur$kkR@mVl=M|C6 zQ^s6*8@Wz1{aABTII%GJz0r_m>uJ;8_XKR+G5-^BqTa<gRxX1>b`#JlN{U)+fX=mI zFa2&>kua9nVH5L~M{eAGoE6x&;`siLnEU<qhSKX<0PA;=GFW#tG!VAR+U!2X(aKPb z^=087Bc~wdA1{XFPsiT=gKK!2{@SK3Znz%|+C~)@+KQpIvR4I`eu_e2rUCDGgI&H6 zu=w*6Uqq^jQZ^8xQ1CyWyN9RAeR%(0;7*+b{B11&wCEiduzE9A*vtm^w8Tq5dBRD# z0_t$Q{4>9Vp>On}_i9%gDqjA)cK>#WKbcK^PY92PI_ZCZ#jskzUExdK#RCk7!z_EW z{=?fO<yft*)x*i)?(BC-Hsd#Iuf-@A(oaV%oe+)=0RH<&yGacSn8?E_O|k!Ef;)3C z7|it}*XwLC^+2fS&WyRSfrt%CHFH!9DgUCwl4sCPV9}&AJgIAof?s8zq<%xxP#i`V z?D!Mbr`{sjBw?Su1T4u+q?zxKnGq?!T6GUK8%$GJV4;)uEiz2Upw!d&m*KugGD9xi z#MK3?z}+|KgP~A9SmuSkS1$fw!=oZ;#NR_80!O+qaay|gGq$mZrrFA1udd>X<pMM; zqxnT)A_MFoArFR2OvR7b0d#2Z=_3Ikx*92(qpS@%YRAsp*tB|oZ9}emyG_WuVSPf} zQjJ*pCLltb?uJwu;IV1o!q40)@E|hXC}g4a46<IK!|g^|K1E;e&)Tm_(Ase%m{v|s zXZoqMuZp)N73r&WT2Up{^EM&8+W5@0y)%)vUf4b~Q0YSs^swAP95uiE1krrMm=h6x s{bNHJ5e(G!Vj+HDb(9WZL)X)}NQL}Ajy{4ELcU?0xk9DDULe5!4;%H^-v9sr literal 0 HcmV?d00001 diff --git a/archive/dust-2.3.6.zip b/archive/dust-2.3.6.zip new file mode 100644 index 0000000000000000000000000000000000000000..05f1745d1239da7cf148b28e9118e666f9b94190 GIT binary patch literal 47022 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 literal 0 HcmV?d00001 diff --git a/bower.json b/bower.json index dcc8a4dd..468b6199 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "dustjs-linkedin", - "version": "2.3.5", + "version": "2.3.6", "main": "dist/dust-full.min.js", "devDependencies": { "pegjs": "0.8.0" diff --git a/dist/dust-core.js b/dist/dust-core.js index 5583d05f..179802f8 100644 --- a/dist/dust-core.js +++ b/dist/dust-core.js @@ -1,4 +1,4 @@ -/*! Dust - Asynchronous Templating - v2.3.5 +/*! Dust - Asynchronous Templating - v2.3.6 * http://linkedin.github.io/dustjs/ * Copyright (c) 2014 Aleksander Williams; Released under the MIT License */ (function(root) { diff --git a/dist/dust-core.min.js b/dist/dust-core.min.js index bdee5f12..fcfd6752 100644 --- a/dist/dust-core.min.js +++ b/dist/dust-core.min.js @@ -1,4 +1,4 @@ -/*! Dust - Asynchronous Templating - v2.3.5 +/*! Dust - Asynchronous Templating - v2.3.6 * http://linkedin.github.io/dustjs/ * Copyright (c) 2014 Aleksander Williams; Released under the MIT License */ -!function(root){function Context(a,b,c,d){this.stack=a,this.global=b,this.blocks=c,this.templateName=d}function Stack(a,b,c,d){this.tail=b,this.isObject=a&&"object"==typeof a,this.head=a,this.index=c,this.of=d}function Stub(a){this.head=new Chunk(this),this.callback=a,this.out=""}function Stream(){this.head=new Chunk(this)}function Chunk(a,b,c){this.root=a,this.next=b,this.data=[],this.flushable=!1,this.taps=c}function Tap(a,b){this.head=a,this.tail=b}var dust={},NONE="NONE",ERROR="ERROR",WARN="WARN",INFO="INFO",DEBUG="DEBUG",loggingLevels=[DEBUG,INFO,WARN,ERROR,NONE],EMPTY_FUNC=function(){},logger={},originalLog,loggerContext;dust.debugLevel=NONE,dust.silenceErrors=!1,root&&root.console&&root.console.log&&(loggerContext=root.console,originalLog=root.console.log),logger.log=loggerContext?function(){logger.log="function"==typeof originalLog?function(){originalLog.apply(loggerContext,arguments)}:function(){var a=Array.prototype.slice.apply(arguments).join(" ");originalLog(a)},logger.log.apply(this,arguments)}:function(){},dust.log=function(a,b){if(b=b||INFO,dust.debugLevel!==NONE&&dust.indexInArray(loggingLevels,b)>=dust.indexInArray(loggingLevels,dust.debugLevel)&&(dust.logQueue||(dust.logQueue=[]),dust.logQueue.push({message:a,type:b}),logger.log("[DUST "+b+"]: "+a)),!dust.silenceErrors&&b===ERROR)throw"string"==typeof a?new Error(a):a},dust.onError=function(a,b){if(logger.log("[!!!DEPRECATION WARNING!!!]: dust.onError will no longer return a chunk object."),dust.log(a.message||a,ERROR),dust.silenceErrors)return b;throw a},dust.helpers={},dust.cache={},dust.register=function(a,b){a&&(dust.cache[a]=b)},dust.render=function(a,b,c){var d=new Stub(c).head;try{dust.load(a,d,Context.wrap(b,a)).end()}catch(e){dust.log(e,ERROR)}},dust.stream=function(a,b){var c=new Stream;return dust.nextTick(function(){try{dust.load(a,c.head,Context.wrap(b,a)).end()}catch(d){dust.log(d,ERROR)}}),c},dust.renderSource=function(a,b,c){return dust.compileFn(a)(b,c)},dust.compileFn=function(a,b){b=b||null;var c=dust.loadSource(dust.compile(a,b));return function(a,d){var e=d?new Stub(d):new Stream;return dust.nextTick(function(){"function"==typeof c?c(e.head,Context.wrap(a,b)).end():dust.log(new Error("Template ["+b+"] cannot be resolved to a Dust function"),ERROR)}),e}},dust.load=function(a,b,c){var d=dust.cache[a];return d?d(b,c):dust.onLoad?b.map(function(b){dust.onLoad(a,function(d,e){return d?b.setError(d):(dust.cache[a]||dust.loadSource(dust.compile(e,a)),void dust.cache[a](b,c).end())})}):b.setError(new Error("Template Not Found: "+a))},dust.loadSource=function(source,path){return eval(source)},dust.isArray=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},dust.indexInArray=function(a,b,c){if(c=+c||0,Array.prototype.indexOf)return a.indexOf(b,c);if(void 0===a||null===a)throw new TypeError('cannot call method "indexOf" of null');var d=a.length;for(1/0===Math.abs(c)&&(c=0),0>c&&(c+=d,0>c&&(c=0));d>c;c++)if(a[c]===b)return c;return-1},dust.nextTick=function(){return function(a){setTimeout(a,0)}}(),dust.isEmpty=function(a){return dust.isArray(a)&&!a.length?!0:0===a?!1:!a},dust.filter=function(a,b,c){if(c)for(var d=0,e=c.length;e>d;d++){var f=c[d];"s"===f?b=null:"function"==typeof dust.filters[f]?a=dust.filters[f](a):dust.log("Invalid filter ["+f+"]",WARN)}return b&&(a=dust.filters[b](a)),a},dust.filters={h:function(a){return dust.escapeHtml(a)},j:function(a){return dust.escapeJs(a)},u:encodeURI,uc:encodeURIComponent,js:function(a){return JSON?JSON.stringify(a):(dust.log("JSON is undefined. JSON stringify has not been used on ["+a+"]",WARN),a)},jp:function(a){return JSON?JSON.parse(a):(dust.log("JSON is undefined. JSON parse has not been used on ["+a+"]",WARN),a)}},dust.makeBase=function(a){return new Context(new Stack,a)},Context.wrap=function(a,b){return a instanceof Context?a:new Context(new Stack(a),{},null,b)},Context.prototype.get=function(a,b){return"string"==typeof a&&("."===a[0]&&(b=!0,a=a.substr(1)),a=a.split(".")),this._get(b,a)},Context.prototype._get=function(a,b){var c,d,e,f,g=this.stack,h=1;if(d=b[0],e=b.length,a&&0===e)f=g,g=g.head;else{if(a)g&&(g=g.head?g.head[d]:void 0);else{for(;g&&(!g.isObject||(f=g.head,c=g.head[d],void 0===c));)g=g.tail;g=void 0!==c?c:this.global?this.global[d]:void 0}for(;g&&e>h;)f=g,g=g[b[h]],h++}if("function"==typeof g){var i=function(){try{return g.apply(f,arguments)}catch(a){return dust.log(a,ERROR)}};return i.isFunction=!0,i}return void 0===g&&dust.log("Cannot find the value for reference [{"+b.join(".")+"}] in template ["+this.getTemplateName()+"]"),g},Context.prototype.getPath=function(a,b){return this._get(a,b)},Context.prototype.push=function(a,b,c){return new Context(new Stack(a,this.stack,b,c),this.global,this.blocks,this.getTemplateName())},Context.prototype.rebase=function(a){return new Context(new Stack(a),this.global,this.blocks,this.getTemplateName())},Context.prototype.current=function(){return this.stack.head},Context.prototype.getBlock=function(a){if("function"==typeof a){var b=new Chunk;a=a(b,this).data.join("")}var c=this.blocks;if(!c)return void dust.log("No blocks for context[{"+a+"}] in template ["+this.getTemplateName()+"]",DEBUG);for(var d,e=c.length;e--;)if(d=c[e][a])return d},Context.prototype.shiftBlocks=function(a){var b,c=this.blocks;return a?(b=c?c.concat([a]):[a],new Context(this.stack,this.global,b,this.getTemplateName())):this},Context.prototype.getTemplateName=function(){return this.templateName},Stub.prototype.flush=function(){for(var a=this.head;a;){if(!a.flushable)return a.error?(this.callback(a.error),dust.log("Chunk error ["+a.error+"] thrown. Ceasing to render this template.",WARN),void(this.flush=EMPTY_FUNC)):void 0;this.out+=a.data.join(""),a=a.next,this.head=a}this.callback(null,this.out)},Stream.prototype.flush=function(){for(var a=this.head;a;){if(!a.flushable)return a.error?(this.emit("error",a.error),dust.log("Chunk error ["+a.error+"] thrown. Ceasing to render this template.",WARN),void(this.flush=EMPTY_FUNC)):void 0;this.emit("data",a.data.join("")),a=a.next,this.head=a}this.emit("end")},Stream.prototype.emit=function(a,b){if(!this.events)return dust.log("No events to emit",INFO),!1;var c=this.events[a];if(!c)return dust.log("Event type ["+a+"] does not exist",WARN),!1;if("function"==typeof c)c(b);else if(dust.isArray(c))for(var d=c.slice(0),e=0,f=d.length;f>e;e++)d[e](b);else dust.log("Event Handler ["+c+"] is not of a type that is handled by emit",WARN)},Stream.prototype.on=function(a,b){return this.events||(this.events={}),this.events[a]?"function"==typeof this.events[a]?this.events[a]=[this.events[a],b]:this.events[a].push(b):(dust.log("Event type ["+a+"] does not exist. Using just the specified callback.",WARN),b?this.events[a]=b:dust.log("Callback for type ["+a+"] does not exist. Listener not registered.",WARN)),this},Stream.prototype.pipe=function(a){return this.on("data",function(b){try{a.write(b,"utf8")}catch(c){dust.log(c,ERROR)}}).on("end",function(){try{return a.end()}catch(b){dust.log(b,ERROR)}}).on("error",function(b){a.error(b)}),this},Chunk.prototype.write=function(a){var b=this.taps;return b&&(a=b.go(a)),this.data.push(a),this},Chunk.prototype.end=function(a){return a&&this.write(a),this.flushable=!0,this.root.flush(),this},Chunk.prototype.map=function(a){var b=new Chunk(this.root,this.next,this.taps),c=new Chunk(this.root,b,this.taps);return this.next=c,this.flushable=!0,a(c),b},Chunk.prototype.tap=function(a){var b=this.taps;return this.taps=b?b.push(a):new Tap(a),this},Chunk.prototype.untap=function(){return this.taps=this.taps.tail,this},Chunk.prototype.render=function(a,b){return a(this,b)},Chunk.prototype.reference=function(a,b,c,d){return"function"==typeof a&&(a.isFunction=!0,a=a.apply(b.current(),[this,b,null,{auto:c,filters:d}]),a instanceof Chunk)?a:dust.isEmpty(a)?this:this.write(dust.filter(a,c,d))},Chunk.prototype.section=function(a,b,c,d){if("function"==typeof a&&(a=a.apply(b.current(),[this,b,c,d]),a instanceof Chunk))return a;var e=c.block,f=c["else"];if(d&&(b=b.push(d)),dust.isArray(a)){if(e){var g=a.length,h=this;if(g>0){b.stack.head&&(b.stack.head.$len=g);for(var i=0;g>i;i++)b.stack.head&&(b.stack.head.$idx=i),h=e(h,b.push(a[i],i,g));return b.stack.head&&(b.stack.head.$idx=void 0,b.stack.head.$len=void 0),h}if(f)return f(this,b)}}else if(a===!0){if(e)return e(this,b)}else if(a||0===a){if(e)return e(this,b.push(a))}else if(f)return f(this,b);return dust.log("Not rendering section (#) block in template ["+b.getTemplateName()+"], because above key was not found",DEBUG),this},Chunk.prototype.exists=function(a,b,c){var d=c.block,e=c["else"];if(dust.isEmpty(a)){if(e)return e(this,b)}else if(d)return d(this,b);return dust.log("Not rendering exists (?) block in template ["+b.getTemplateName()+"], because above key was not found",DEBUG),this},Chunk.prototype.notexists=function(a,b,c){var d=c.block,e=c["else"];if(dust.isEmpty(a)){if(d)return d(this,b)}else if(e)return e(this,b);return dust.log("Not rendering not exists (^) block check in template ["+b.getTemplateName()+"], because above key was found",DEBUG),this},Chunk.prototype.block=function(a,b,c){var d=c.block;return a&&(d=a),d?d(this,b):this},Chunk.prototype.partial=function(a,b,c){var d;d=dust.makeBase(b.global),d.blocks=b.blocks,b.stack&&b.stack.tail&&(d.stack=b.stack.tail),c&&(d=d.push(c)),"string"==typeof a&&(d.templateName=a),d=d.push(b.stack.head);var e;return e="function"==typeof a?this.capture(a,d,function(a,b){d.templateName=d.templateName||a,dust.load(a,b,d).end()}):dust.load(a,this,d)},Chunk.prototype.helper=function(a,b,c,d){var e=this;try{return dust.helpers[a]?dust.helpers[a](e,b,c,d):(dust.log("Invalid helper ["+a+"]",WARN),e)}catch(f){return dust.log(f,ERROR),e}},Chunk.prototype.capture=function(a,b,c){return this.map(function(d){var e=new Stub(function(a,b){a?d.setError(a):c(b,d)});a(e.head,b).end()})},Chunk.prototype.setError=function(a){return this.error=a,this.root.flush(),this},Tap.prototype.push=function(a){return new Tap(a,this)},Tap.prototype.go=function(a){for(var b=this;b;)a=b.head(a),b=b.tail;return a};var HCHARS=new RegExp(/[&<>\"\']/),AMP=/&/g,LT=/</g,GT=/>/g,QUOT=/\"/g,SQUOT=/\'/g;dust.escapeHtml=function(a){return"string"==typeof a?HCHARS.test(a)?a.replace(AMP,"&").replace(LT,"<").replace(GT,">").replace(QUOT,""").replace(SQUOT,"'"):a:a};var BS=/\\/g,FS=/\//g,CR=/\r/g,LS=/\u2028/g,PS=/\u2029/g,NL=/\n/g,LF=/\f/g,SQ=/'/g,DQ=/"/g,TB=/\t/g;dust.escapeJs=function(a){return"string"==typeof a?a.replace(BS,"\\\\").replace(FS,"\\/").replace(DQ,'\\"').replace(SQ,"\\'").replace(CR,"\\r").replace(LS,"\\u2028").replace(PS,"\\u2029").replace(NL,"\\n").replace(LF,"\\f").replace(TB,"\\t"):a},"object"==typeof exports?module.exports=dust:root.dust=dust}(function(){return this}()); \ No newline at end of file +!function(root){function Context(a,b,c,d){this.stack=a,this.global=b,this.blocks=c,this.templateName=d}function Stack(a,b,c,d){this.tail=b,this.isObject=a&&"object"==typeof a,this.head=a,this.index=c,this.of=d}function Stub(a){this.head=new Chunk(this),this.callback=a,this.out=""}function Stream(){this.head=new Chunk(this)}function Chunk(a,b,c){this.root=a,this.next=b,this.data=[],this.flushable=!1,this.taps=c}function Tap(a,b){this.head=a,this.tail=b}var dust={},NONE="NONE",ERROR="ERROR",WARN="WARN",INFO="INFO",DEBUG="DEBUG",loggingLevels=[DEBUG,INFO,WARN,ERROR,NONE],EMPTY_FUNC=function(){},logger={},originalLog,loggerContext;dust.debugLevel=NONE,dust.silenceErrors=!1,root&&root.console&&root.console.log&&(loggerContext=root.console,originalLog=root.console.log),logger.log=loggerContext?function(){logger.log="function"==typeof originalLog?function(){originalLog.apply(loggerContext,arguments)}:function(){var a=Array.prototype.slice.apply(arguments).join(" ");originalLog(a)},logger.log.apply(this,arguments)}:function(){},dust.log=function(a,b){if(b=b||INFO,dust.debugLevel!==NONE&&dust.indexInArray(loggingLevels,b)>=dust.indexInArray(loggingLevels,dust.debugLevel)&&(dust.logQueue||(dust.logQueue=[]),dust.logQueue.push({message:a,type:b}),logger.log("[DUST "+b+"]: "+a)),!dust.silenceErrors&&b===ERROR)throw"string"==typeof a?new Error(a):a},dust.onError=function(a,b){if(logger.log("[!!!DEPRECATION WARNING!!!]: dust.onError will no longer return a chunk object."),dust.log(a.message||a,ERROR),dust.silenceErrors)return b;throw a},dust.helpers={},dust.cache={},dust.register=function(a,b){a&&(dust.cache[a]=b)},dust.render=function(a,b,c){var d=new Stub(c).head;try{dust.load(a,d,Context.wrap(b,a)).end()}catch(e){dust.log(e,ERROR)}},dust.stream=function(a,b){var c=new Stream;return dust.nextTick(function(){try{dust.load(a,c.head,Context.wrap(b,a)).end()}catch(d){dust.log(d,ERROR)}}),c},dust.renderSource=function(a,b,c){return dust.compileFn(a)(b,c)},dust.compileFn=function(a,b){b=b||null;var c=dust.loadSource(dust.compile(a,b));return function(a,d){var e=d?new Stub(d):new Stream;return dust.nextTick(function(){"function"==typeof c?c(e.head,Context.wrap(a,b)).end():dust.log(new Error("Template ["+b+"] cannot be resolved to a Dust function"),ERROR)}),e}},dust.load=function(a,b,c){var d=dust.cache[a];return d?d(b,c):dust.onLoad?b.map(function(b){dust.onLoad(a,function(d,e){return d?b.setError(d):(dust.cache[a]||dust.loadSource(dust.compile(e,a)),void dust.cache[a](b,c).end())})}):b.setError(new Error("Template Not Found: "+a))},dust.loadSource=function(source,path){return eval(source)},dust.isArray=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},dust.indexInArray=function(a,b,c){if(c=+c||0,Array.prototype.indexOf)return a.indexOf(b,c);if(void 0===a||null===a)throw new TypeError('cannot call method "indexOf" of null');var d=a.length;for(1/0===Math.abs(c)&&(c=0),0>c&&(c+=d,0>c&&(c=0));d>c;c++)if(a[c]===b)return c;return-1},dust.nextTick=function(){return function(a){setTimeout(a,0)}}(),dust.isEmpty=function(a){return dust.isArray(a)&&!a.length?!0:0===a?!1:!a},dust.filter=function(a,b,c){if(c)for(var d=0,e=c.length;e>d;d++){var f=c[d];"s"===f?b=null:"function"==typeof dust.filters[f]?a=dust.filters[f](a):dust.log("Invalid filter ["+f+"]",WARN)}return b&&(a=dust.filters[b](a)),a},dust.filters={h:function(a){return dust.escapeHtml(a)},j:function(a){return dust.escapeJs(a)},u:encodeURI,uc:encodeURIComponent,js:function(a){return JSON?JSON.stringify(a):(dust.log("JSON is undefined. JSON stringify has not been used on ["+a+"]",WARN),a)},jp:function(a){return JSON?JSON.parse(a):(dust.log("JSON is undefined. JSON parse has not been used on ["+a+"]",WARN),a)}},dust.makeBase=function(a){return new Context(new Stack,a)},Context.wrap=function(a,b){return a instanceof Context?a:new Context(new Stack(a),{},null,b)},Context.prototype.get=function(a,b){return"string"==typeof a&&("."===a[0]&&(b=!0,a=a.substr(1)),a=a.split(".")),this._get(b,a)},Context.prototype._get=function(a,b){var c,d,e,f,g=this.stack,h=1;if(d=b[0],e=b.length,a&&0===e)f=g,g=g.head;else{if(a)g&&(g=g.head?g.head[d]:void 0);else{for(;g&&(!g.isObject||(f=g.head,c=g.head[d],void 0===c));)g=g.tail;g=void 0!==c?c:this.global?this.global[d]:void 0}for(;g&&e>h;)f=g,g=g[b[h]],h++}if("function"==typeof g){var i=function(){try{return g.apply(f,arguments)}catch(a){return dust.log(a,ERROR)}};return i.isFunction=!0,i}return void 0===g&&dust.log("Cannot find the value for reference [{"+b.join(".")+"}] in template ["+this.getTemplateName()+"]"),g},Context.prototype.getPath=function(a,b){return this._get(a,b)},Context.prototype.push=function(a,b,c){return new Context(new Stack(a,this.stack,b,c),this.global,this.blocks,this.getTemplateName())},Context.prototype.rebase=function(a){return new Context(new Stack(a),this.global,this.blocks,this.getTemplateName())},Context.prototype.current=function(){return this.stack.head},Context.prototype.getBlock=function(a){if("function"==typeof a){var b=new Chunk;a=a(b,this).data.join("")}var c=this.blocks;if(!c)return void dust.log("No blocks for context[{"+a+"}] in template ["+this.getTemplateName()+"]",DEBUG);for(var d,e=c.length;e--;)if(d=c[e][a])return d},Context.prototype.shiftBlocks=function(a){var b,c=this.blocks;return a?(b=c?c.concat([a]):[a],new Context(this.stack,this.global,b,this.getTemplateName())):this},Context.prototype.getTemplateName=function(){return this.templateName},Stub.prototype.flush=function(){for(var a=this.head;a;){if(!a.flushable)return a.error?(this.callback(a.error),dust.log("Chunk error ["+a.error+"] thrown. Ceasing to render this template.",WARN),void(this.flush=EMPTY_FUNC)):void 0;this.out+=a.data.join(""),a=a.next,this.head=a}this.callback(null,this.out)},Stream.prototype.flush=function(){for(var a=this.head;a;){if(!a.flushable)return a.error?(this.emit("error",a.error),dust.log("Chunk error ["+a.error+"] thrown. Ceasing to render this template.",WARN),void(this.flush=EMPTY_FUNC)):void 0;this.emit("data",a.data.join("")),a=a.next,this.head=a}this.emit("end")},Stream.prototype.emit=function(a,b){if(!this.events)return dust.log("No events to emit",INFO),!1;var c=this.events[a];if(!c)return dust.log("Event type ["+a+"] does not exist",WARN),!1;if("function"==typeof c)c(b);else if(dust.isArray(c))for(var d=c.slice(0),e=0,f=d.length;f>e;e++)d[e](b);else dust.log("Event Handler ["+c+"] is not of a type that is handled by emit",WARN)},Stream.prototype.on=function(a,b){return this.events||(this.events={}),this.events[a]?"function"==typeof this.events[a]?this.events[a]=[this.events[a],b]:this.events[a].push(b):(dust.log("Event type ["+a+"] does not exist. Using just the specified callback.",WARN),b?this.events[a]=b:dust.log("Callback for type ["+a+"] does not exist. Listener not registered.",WARN)),this},Stream.prototype.pipe=function(a){return this.on("data",function(b){try{a.write(b,"utf8")}catch(c){dust.log(c,ERROR)}}).on("end",function(){try{return a.end()}catch(b){dust.log(b,ERROR)}}).on("error",function(b){a.error(b)}),this},Chunk.prototype.write=function(a){var b=this.taps;return b&&(a=b.go(a)),this.data.push(a),this},Chunk.prototype.end=function(a){return a&&this.write(a),this.flushable=!0,this.root.flush(),this},Chunk.prototype.map=function(a){var b=new Chunk(this.root,this.next,this.taps),c=new Chunk(this.root,b,this.taps);return this.next=c,this.flushable=!0,a(c),b},Chunk.prototype.tap=function(a){var b=this.taps;return this.taps=b?b.push(a):new Tap(a),this},Chunk.prototype.untap=function(){return this.taps=this.taps.tail,this},Chunk.prototype.render=function(a,b){return a(this,b)},Chunk.prototype.reference=function(a,b,c,d){return"function"==typeof a&&(a.isFunction=!0,a=a.apply(b.current(),[this,b,null,{auto:c,filters:d}]),a instanceof Chunk)?a:dust.isEmpty(a)?this:this.write(dust.filter(a,c,d))},Chunk.prototype.section=function(a,b,c,d){if("function"==typeof a&&(a=a.apply(b.current(),[this,b,c,d]),a instanceof Chunk))return a;var e=c.block,f=c["else"];if(d&&(b=b.push(d)),dust.isArray(a)){if(e){var g=a.length,h=this;if(g>0){b.stack.head&&(b.stack.head.$len=g);for(var i=0;g>i;i++)b.stack.head&&(b.stack.head.$idx=i),h=e(h,b.push(a[i],i,g));return b.stack.head&&(b.stack.head.$idx=void 0,b.stack.head.$len=void 0),h}if(f)return f(this,b)}}else if(a===!0){if(e)return e(this,b)}else if(a||0===a){if(e)return e(this,b.push(a))}else if(f)return f(this,b);return dust.log("Not rendering section (#) block in template ["+b.getTemplateName()+"], because above key was not found",DEBUG),this},Chunk.prototype.exists=function(a,b,c){var d=c.block,e=c["else"];if(dust.isEmpty(a)){if(e)return e(this,b)}else if(d)return d(this,b);return dust.log("Not rendering exists (?) block in template ["+b.getTemplateName()+"], because above key was not found",DEBUG),this},Chunk.prototype.notexists=function(a,b,c){var d=c.block,e=c["else"];if(dust.isEmpty(a)){if(d)return d(this,b)}else if(e)return e(this,b);return dust.log("Not rendering not exists (^) block check in template ["+b.getTemplateName()+"], because above key was found",DEBUG),this},Chunk.prototype.block=function(a,b,c){var d=c.block;return a&&(d=a),d?d(this,b):this},Chunk.prototype.partial=function(a,b,c){var d;d=dust.makeBase(b.global),d.blocks=b.blocks,b.stack&&b.stack.tail&&(d.stack=b.stack.tail),c&&(d=d.push(c)),"string"==typeof a&&(d.templateName=a),d=d.push(b.stack.head);var e;return e="function"==typeof a?this.capture(a,d,function(a,b){d.templateName=d.templateName||a,dust.load(a,b,d).end()}):dust.load(a,this,d)},Chunk.prototype.helper=function(a,b,c,d){var e=this;try{return dust.helpers[a]?dust.helpers[a](e,b,c,d):(dust.log("Invalid helper ["+a+"]",WARN),e)}catch(f){return dust.log(f,ERROR),e}},Chunk.prototype.capture=function(a,b,c){return this.map(function(d){var e=new Stub(function(a,b){a?d.setError(a):c(b,d)});a(e.head,b).end()})},Chunk.prototype.setError=function(a){return this.error=a,this.root.flush(),this},Tap.prototype.push=function(a){return new Tap(a,this)},Tap.prototype.go=function(a){for(var b=this;b;)a=b.head(a),b=b.tail;return a};var HCHARS=new RegExp(/[&<>\"\']/),AMP=/&/g,LT=/</g,GT=/>/g,QUOT=/\"/g,SQUOT=/\'/g;dust.escapeHtml=function(a){return"string"==typeof a&&HCHARS.test(a)?a.replace(AMP,"&").replace(LT,"<").replace(GT,">").replace(QUOT,""").replace(SQUOT,"'"):a};var BS=/\\/g,FS=/\//g,CR=/\r/g,LS=/\u2028/g,PS=/\u2029/g,NL=/\n/g,LF=/\f/g,SQ=/'/g,DQ=/"/g,TB=/\t/g;dust.escapeJs=function(a){return"string"==typeof a?a.replace(BS,"\\\\").replace(FS,"\\/").replace(DQ,'\\"').replace(SQ,"\\'").replace(CR,"\\r").replace(LS,"\\u2028").replace(PS,"\\u2029").replace(NL,"\\n").replace(LF,"\\f").replace(TB,"\\t"):a},"object"==typeof exports?module.exports=dust:root.dust=dust}(function(){return this}()); \ No newline at end of file diff --git a/dist/dust-full.js b/dist/dust-full.js index c126a52f..3dfbde4f 100644 --- a/dist/dust-full.js +++ b/dist/dust-full.js @@ -1,4 +1,4 @@ -/*! Dust - Asynchronous Templating - v2.3.5 +/*! Dust - Asynchronous Templating - v2.3.6 * http://linkedin.github.io/dustjs/ * Copyright (c) 2014 Aleksander Williams; Released under the MIT License */ (function(root) { @@ -896,2811 +896,2650 @@ factory(root.dust); } }(this, function(dust) { - var parser = (function(){ + var parser = (function() { /* - * Generated by PEG.js 0.7.0. + * Generated by PEG.js 0.8.0. * * http://pegjs.majda.cz/ */ - - function quote(s) { - /* - * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a - * string literal except for the closing quote character, backslash, - * carriage return, line separator, paragraph separator, and line feed. - * Any character may appear in the form of an escape sequence. - * - * For portability, we also escape escape all control and non-ASCII - * characters. Note that "\0" and "\v" escape sequences are not used - * because JSHint does not like the first and IE the second. - */ - return '"' + s - .replace(/\\/g, '\\\\') // backslash - .replace(/"/g, '\\"') // closing quote character - .replace(/\x08/g, '\\b') // backspace - .replace(/\t/g, '\\t') // horizontal tab - .replace(/\n/g, '\\n') // line feed - .replace(/\f/g, '\\f') // form feed - .replace(/\r/g, '\\r') // carriage return - .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape) - + '"'; + + function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); } - - var result = { - /* - * Parses the input with a generated parser. If the parsing is successfull, - * returns a value explicitly or implicitly specified by the grammar from - * which the parser was generated (see |PEG.buildParser|). If the parsing is - * unsuccessful, throws |PEG.parser.SyntaxError| describing the error. - */ - parse: function(input, startRule) { - var parseFunctions = { - "body": parse_body, - "part": parse_part, - "section": parse_section, - "sec_tag_start": parse_sec_tag_start, - "end_tag": parse_end_tag, - "context": parse_context, - "params": parse_params, - "bodies": parse_bodies, - "reference": parse_reference, - "partial": parse_partial, - "filters": parse_filters, - "special": parse_special, - "identifier": parse_identifier, - "number": parse_number, - "float": parse_float, - "integer": parse_integer, - "path": parse_path, - "key": parse_key, - "array": parse_array, - "array_part": parse_array_part, - "inline": parse_inline, - "inline_part": parse_inline_part, - "buffer": parse_buffer, - "literal": parse_literal, - "esc": parse_esc, - "raw": parse_raw, - "comment": parse_comment, - "tag": parse_tag, - "ld": parse_ld, - "rd": parse_rd, - "lb": parse_lb, - "rb": parse_rb, - "eol": parse_eol, - "ws": parse_ws - }; - - if (startRule !== undefined) { - if (parseFunctions[startRule] === undefined) { - throw new Error("Invalid rule name: " + quote(startRule) + "."); - } - } else { - startRule = "body"; - } - - var pos = { offset: 0, line: 1, column: 1, seenCR: false }; - var reportFailures = 0; - var rightmostFailuresPos = { offset: 0, line: 1, column: 1, seenCR: false }; - var rightmostFailuresExpected = []; - - function padLeft(input, padding, length) { - var result = input; - - var padLength = length - input.length; - for (var i = 0; i < padLength; i++) { - result = padding + result; - } - - return result; - } - - function escape(ch) { - var charCode = ch.charCodeAt(0); - var escapeChar; - var length; - - if (charCode <= 0xFF) { - escapeChar = 'x'; - length = 2; - } else { - escapeChar = 'u'; - length = 4; - } - - return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length); - } - - function clone(object) { - var result = {}; - for (var key in object) { - result[key] = object[key]; - } - return result; - } - - function advance(pos, n) { - var endOffset = pos.offset + n; - - for (var offset = pos.offset; offset < endOffset; offset++) { - var ch = input.charAt(offset); + + function SyntaxError(message, expected, found, offset, line, column) { + this.message = message; + this.expected = expected; + this.found = found; + this.offset = offset; + this.line = line; + this.column = column; + + this.name = "SyntaxError"; + } + + peg$subclass(SyntaxError, Error); + + function parse(input) { + var options = arguments.length > 1 ? arguments[1] : {}, + + peg$FAILED = {}, + + peg$startRuleFunctions = { start: peg$parsestart }, + peg$startRuleFunction = peg$parsestart, + + peg$c0 = [], + peg$c1 = function(p) { + return ["body"] + .concat(p) + .concat([['line', line()], ['col', column()]]); + }, + peg$c2 = { type: "other", description: "section" }, + peg$c3 = peg$FAILED, + peg$c4 = null, + peg$c5 = function(t, b, e, n) { + if( (!n) || (t[1].text !== n.text) ) { + error("Expected end tag for "+t[1].text+" but it was not found."); + } + return true; + }, + peg$c6 = void 0, + peg$c7 = function(t, b, e, n) { + e.push(["param", ["literal", "block"], b]); + t.push(e); + return t.concat([['line', line()], ['col', column()]]); + }, + peg$c8 = "/", + peg$c9 = { type: "literal", value: "/", description: "\"/\"" }, + peg$c10 = function(t) { + t.push(["bodies"]); + return t.concat([['line', line()], ['col', column()]]); + }, + peg$c11 = /^[#?\^<+@%]/, + peg$c12 = { type: "class", value: "[#?\\^<+@%]", description: "[#?\\^<+@%]" }, + peg$c13 = function(t, n, c, p) { return [t, n, c, p] }, + peg$c14 = { type: "other", description: "end tag" }, + peg$c15 = function(n) { return n }, + peg$c16 = ":", + peg$c17 = { type: "literal", value: ":", description: "\":\"" }, + peg$c18 = function(n) {return n}, + peg$c19 = function(n) { return n ? ["context", n] : ["context"] }, + peg$c20 = { type: "other", description: "params" }, + peg$c21 = "=", + peg$c22 = { type: "literal", value: "=", description: "\"=\"" }, + peg$c23 = function(k, v) {return ["param", ["literal", k], v]}, + peg$c24 = function(p) { return ["params"].concat(p) }, + peg$c25 = { type: "other", description: "bodies" }, + peg$c26 = function(p) { return ["bodies"].concat(p) }, + peg$c27 = { type: "other", description: "reference" }, + peg$c28 = function(n, f) { return ["reference", n, f].concat([['line', line()], ['col', column()]]) }, + peg$c29 = { type: "other", description: "partial" }, + peg$c30 = ">", + peg$c31 = { type: "literal", value: ">", description: "\">\"" }, + peg$c32 = "+", + peg$c33 = { type: "literal", value: "+", description: "\"+\"" }, + peg$c34 = function(k) {return ["literal", k]}, + peg$c35 = function(s, n, c, p) { + var key = (s === ">") ? "partial" : s; + return [key, n, c, p].concat([['line', line()], ['col', column()]]); + }, + peg$c36 = { type: "other", description: "filters" }, + peg$c37 = "|", + peg$c38 = { type: "literal", value: "|", description: "\"|\"" }, + peg$c39 = function(f) { return ["filters"].concat(f) }, + peg$c40 = { type: "other", description: "special" }, + peg$c41 = "~", + peg$c42 = { type: "literal", value: "~", description: "\"~\"" }, + peg$c43 = function(k) { return ["special", k].concat([['line', line()], ['col', column()]]) }, + peg$c44 = { type: "other", description: "identifier" }, + peg$c45 = function(p) { var arr = ["path"].concat(p); arr.text = p[1].join('.'); return arr; }, + peg$c46 = function(k) { var arr = ["key", k]; arr.text = k; return arr; }, + peg$c47 = { type: "other", description: "number" }, + peg$c48 = function(n) { return ['literal', n]; }, + peg$c49 = { type: "other", description: "float" }, + peg$c50 = ".", + peg$c51 = { type: "literal", value: ".", description: "\".\"" }, + peg$c52 = function(l, r) { return parseFloat(l + "." + r.join('')); }, + peg$c53 = { type: "other", description: "integer" }, + peg$c54 = /^[0-9]/, + peg$c55 = { type: "class", value: "[0-9]", description: "[0-9]" }, + peg$c56 = function(digits) { return parseInt(digits.join(""), 10); }, + peg$c57 = { type: "other", description: "path" }, + peg$c58 = function(k, d) { + d = d[0]; + if (k && d) { + d.unshift(k); + return [false, d].concat([['line', line()], ['col', column()]]); + } + return [true, d].concat([['line', line()], ['col', column()]]); + }, + peg$c59 = function(d) { + if (d.length > 0) { + return [true, d[0]].concat([['line', line()], ['col', column()]]); + } + return [true, []].concat([['line', line()], ['col', column()]]); + }, + peg$c60 = { type: "other", description: "key" }, + peg$c61 = /^[a-zA-Z_$]/, + peg$c62 = { type: "class", value: "[a-zA-Z_$]", description: "[a-zA-Z_$]" }, + peg$c63 = /^[0-9a-zA-Z_$\-]/, + peg$c64 = { type: "class", value: "[0-9a-zA-Z_$\\-]", description: "[0-9a-zA-Z_$\\-]" }, + peg$c65 = function(h, t) { return h + t.join('') }, + peg$c66 = { type: "other", description: "array" }, + peg$c67 = function(n) {return n.join('')}, + peg$c68 = function(a) {return a; }, + peg$c69 = function(i, nk) { if(nk) { nk.unshift(i); } else {nk = [i] } return nk; }, + peg$c70 = { type: "other", description: "array_part" }, + peg$c71 = function(k) {return k}, + peg$c72 = function(d, a) { if (a) { return d.concat(a); } else { return d; } }, + peg$c73 = { type: "other", description: "inline" }, + peg$c74 = "\"", + peg$c75 = { type: "literal", value: "\"", description: "\"\\\"\"" }, + peg$c76 = function() { return ["literal", ""].concat([['line', line()], ['col', column()]]) }, + peg$c77 = function(l) { return ["literal", l].concat([['line', line()], ['col', column()]]) }, + peg$c78 = function(p) { return ["body"].concat(p).concat([['line', line()], ['col', column()]]) }, + peg$c79 = function(l) { return ["buffer", l] }, + peg$c80 = { type: "other", description: "buffer" }, + peg$c81 = function(e, w) { return ["format", e, w.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c82 = { type: "any", description: "any character" }, + peg$c83 = function(c) {return c}, + peg$c84 = function(b) { return ["buffer", b.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c85 = { type: "other", description: "literal" }, + peg$c86 = /^[^"]/, + peg$c87 = { type: "class", value: "[^\"]", description: "[^\"]" }, + peg$c88 = function(b) { return b.join('') }, + peg$c89 = "\\\"", + peg$c90 = { type: "literal", value: "\\\"", description: "\"\\\\\\\"\"" }, + peg$c91 = function() { return '"' }, + peg$c92 = { type: "other", description: "raw" }, + peg$c93 = "{`", + peg$c94 = { type: "literal", value: "{`", description: "\"{`\"" }, + peg$c95 = "`}", + peg$c96 = { type: "literal", value: "`}", description: "\"`}\"" }, + peg$c97 = function(char) {return char}, + peg$c98 = function(rawText) { return ["raw", rawText.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c99 = { type: "other", description: "comment" }, + peg$c100 = "{!", + peg$c101 = { type: "literal", value: "{!", description: "\"{!\"" }, + peg$c102 = "!}", + peg$c103 = { type: "literal", value: "!}", description: "\"!}\"" }, + peg$c104 = function(c) { return ["comment", c.join('')].concat([['line', line()], ['col', column()]]) }, + peg$c105 = /^[#?\^><+%:@\/~%]/, + peg$c106 = { type: "class", value: "[#?\\^><+%:@\\/~%]", description: "[#?\\^><+%:@\\/~%]" }, + peg$c107 = "{", + peg$c108 = { type: "literal", value: "{", description: "\"{\"" }, + peg$c109 = "}", + peg$c110 = { type: "literal", value: "}", description: "\"}\"" }, + peg$c111 = "[", + peg$c112 = { type: "literal", value: "[", description: "\"[\"" }, + peg$c113 = "]", + peg$c114 = { type: "literal", value: "]", description: "\"]\"" }, + peg$c115 = "\n", + peg$c116 = { type: "literal", value: "\n", description: "\"\\n\"" }, + peg$c117 = "\r\n", + peg$c118 = { type: "literal", value: "\r\n", description: "\"\\r\\n\"" }, + peg$c119 = "\r", + peg$c120 = { type: "literal", value: "\r", description: "\"\\r\"" }, + peg$c121 = "\u2028", + peg$c122 = { type: "literal", value: "\u2028", description: "\"\\u2028\"" }, + peg$c123 = "\u2029", + peg$c124 = { type: "literal", value: "\u2029", description: "\"\\u2029\"" }, + peg$c125 = /^[\t\x0B\f \xA0\uFEFF]/, + peg$c126 = { type: "class", value: "[\\t\\x0B\\f \\xA0\\uFEFF]", description: "[\\t\\x0B\\f \\xA0\\uFEFF]" }, + + peg$currPos = 0, + peg$reportedPos = 0, + peg$cachedPos = 0, + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }, + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$reportedPos, peg$currPos); + } + + function offset() { + return peg$reportedPos; + } + + function line() { + return peg$computePosDetails(peg$reportedPos).line; + } + + function column() { + return peg$computePosDetails(peg$reportedPos).column; + } + + function expected(description) { + throw peg$buildException( + null, + [{ type: "other", description: description }], + peg$reportedPos + ); + } + + function error(message) { + throw peg$buildException(message, null, peg$reportedPos); + } + + function peg$computePosDetails(pos) { + function advance(details, startPos, endPos) { + var p, ch; + + for (p = startPos; p < endPos; p++) { + ch = input.charAt(p); if (ch === "\n") { - if (!pos.seenCR) { pos.line++; } - pos.column = 1; - pos.seenCR = false; + if (!details.seenCR) { details.line++; } + details.column = 1; + details.seenCR = false; } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { - pos.line++; - pos.column = 1; - pos.seenCR = true; + details.line++; + details.column = 1; + details.seenCR = true; } else { - pos.column++; - pos.seenCR = false; + details.column++; + details.seenCR = false; } } - - pos.offset += n; } - - function matchFailed(failure) { - if (pos.offset < rightmostFailuresPos.offset) { - return; - } - - if (pos.offset > rightmostFailuresPos.offset) { - rightmostFailuresPos = clone(pos); - rightmostFailuresExpected = []; + + if (peg$cachedPos !== pos) { + if (peg$cachedPos > pos) { + peg$cachedPos = 0; + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }; } - - rightmostFailuresExpected.push(failure); - } - - function parse_body() { - var result0, result1; - var pos0; - - pos0 = clone(pos); - result0 = []; - result1 = parse_part(); - while (result1 !== null) { - result0.push(result1); - result1 = parse_part(); + advance(peg$cachedPosDetails, peg$cachedPos, pos); + peg$cachedPos = pos; + } + + return peg$cachedPosDetails; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildException(message, expected, pos) { + function cleanupExpected(expected) { + var i = 1; + + expected.sort(function(a, b) { + if (a.description < b.description) { + return -1; + } else if (a.description > b.description) { + return 1; + } else { + return 0; + } + }); + + while (i < expected.length) { + if (expected[i - 1] === expected[i]) { + expected.splice(i, 1); + } else { + i++; + } } - if (result0 !== null) { - result0 = (function(offset, line, column, p) { return ["body"].concat(p).concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0); + } + + function buildMessage(expected, found) { + function stringEscape(s) { + function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } + + return s + .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\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); }) + .replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); }) + .replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); }); } - if (result0 === null) { - pos = clone(pos0); + + var expectedDescs = new Array(expected.length), + expectedDesc, foundDesc, i; + + for (i = 0; i < expected.length; i++) { + expectedDescs[i] = expected[i].description; } - return result0; - } - - function parse_part() { - var result0; - - result0 = parse_raw(); - if (result0 === null) { - result0 = parse_comment(); - if (result0 === null) { - result0 = parse_section(); - if (result0 === null) { - result0 = parse_partial(); - if (result0 === null) { - result0 = parse_special(); - if (result0 === null) { - result0 = parse_reference(); - if (result0 === null) { - result0 = parse_buffer(); - } + + expectedDesc = expected.length > 1 + ? expectedDescs.slice(0, -1).join(", ") + + " or " + + expectedDescs[expected.length - 1] + : expectedDescs[0]; + + foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; + + return "Expected " + expectedDesc + " but " + foundDesc + " found."; + } + + var posDetails = peg$computePosDetails(pos), + found = pos < input.length ? input.charAt(pos) : null; + + if (expected !== null) { + cleanupExpected(expected); + } + + return new SyntaxError( + message !== null ? message : buildMessage(expected, found), + expected, + found, + pos, + posDetails.line, + posDetails.column + ); + } + + function peg$parsestart() { + var s0; + + s0 = peg$parsebody(); + + return s0; + } + + function peg$parsebody() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsepart(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsepart(); + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c1(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsepart() { + var s0; + + s0 = peg$parseraw(); + if (s0 === peg$FAILED) { + s0 = peg$parsecomment(); + if (s0 === peg$FAILED) { + s0 = peg$parsesection(); + if (s0 === peg$FAILED) { + s0 = peg$parsepartial(); + if (s0 === peg$FAILED) { + s0 = peg$parsespecial(); + if (s0 === peg$FAILED) { + s0 = peg$parsereference(); + if (s0 === peg$FAILED) { + s0 = peg$parsebuffer(); } } } } } - return result0; - } - - function parse_section() { - var result0, result1, result2, result3, result4, result5, result6; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_sec_tag_start(); - if (result0 !== null) { - result1 = []; - result2 = parse_ws(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - if (result1 !== null) { - result2 = parse_rd(); - if (result2 !== null) { - result3 = parse_body(); - if (result3 !== null) { - result4 = parse_bodies(); - if (result4 !== null) { - result5 = parse_end_tag(); - result5 = result5 !== null ? result5 : ""; - if (result5 !== null) { - result6 = (function(offset, line, column, t, b, e, n) {if( (!n) || (t[1].text !== n.text) ) { throw new Error("Expected end tag for "+t[1].text+" but it was not found. At line : "+line+", column : " + column)} return true;})(pos.offset, pos.line, pos.column, result0, result3, result4, result5) ? "" : null; - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = clone(pos1); - } + } + + return s0; + } + + function peg$parsesection() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsesec_tag_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsews(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsews(); + } + if (s2 !== peg$FAILED) { + s3 = peg$parserd(); + if (s3 !== peg$FAILED) { + s4 = peg$parsebody(); + if (s4 !== peg$FAILED) { + s5 = peg$parsebodies(); + if (s5 !== peg$FAILED) { + s6 = peg$parseend_tag(); + if (s6 === peg$FAILED) { + s6 = peg$c4; + } + if (s6 !== peg$FAILED) { + peg$reportedPos = peg$currPos; + s7 = peg$c5(s1, s4, s5, s6); + if (s7) { + s7 = peg$c6; } else { - result0 = null; - pos = clone(pos1); + s7 = peg$c3; + } + if (s7 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c7(s1, s4, s5, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, t, b, e, n) { e.push(["param", ["literal", "block"], b]); t.push(e); return t.concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[0], result0[3], result0[4], result0[5]); - } - if (result0 === null) { - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_sec_tag_start(); - if (result0 !== null) { - result1 = []; - result2 = parse_ws(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 47) { - result2 = "/"; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"/\""); - } - } - if (result2 !== null) { - result3 = parse_rd(); - if (result3 !== null) { - result0 = [result0, result1, result2, result3]; - } else { - result0 = null; - pos = clone(pos1); - } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsesec_tag_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsews(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsews(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 47) { + s3 = peg$c8; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parserd(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c10(s1); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, t) { t.push(["bodies"]); return t.concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[0]); - } - if (result0 === null) { - pos = clone(pos0); - } - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("section"); + } else { + peg$currPos = s0; + s0 = peg$c3; } - return result0; - } - - function parse_sec_tag_start() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1; - - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - if (/^[#?^<+@%]/.test(input.charAt(pos.offset))) { - result1 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[#?^<+@%]"); - } - } - if (result1 !== null) { - result2 = []; - result3 = parse_ws(); - while (result3 !== null) { - result2.push(result3); - result3 = parse_ws(); - } - if (result2 !== null) { - result3 = parse_identifier(); - if (result3 !== null) { - result4 = parse_context(); - if (result4 !== null) { - result5 = parse_params(); - if (result5 !== null) { - result0 = [result0, result1, result2, result3, result4, result5]; - } else { - result0 = null; - pos = clone(pos1); - } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + + return s0; + } + + function peg$parsesec_tag_start() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + if (peg$c11.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsews(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseidentifier(); + if (s4 !== peg$FAILED) { + s5 = peg$parsecontext(); + if (s5 !== peg$FAILED) { + s6 = peg$parseparams(); + if (s6 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c13(s2, s4, s5, s6); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, t, n, c, p) { return [t, n, c, p] })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3], result0[4], result0[5]); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 === null) { - pos = clone(pos0); - } - return result0; - } - - function parse_end_tag() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 47) { - result1 = "/"; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"/\""); - } - } - if (result1 !== null) { - result2 = []; - result3 = parse_ws(); - while (result3 !== null) { - result2.push(result3); - result3 = parse_ws(); - } - if (result2 !== null) { - result3 = parse_identifier(); - if (result3 !== null) { - result4 = []; - result5 = parse_ws(); - while (result5 !== null) { - result4.push(result5); - result5 = parse_ws(); - } - if (result4 !== null) { - result5 = parse_rd(); - if (result5 !== null) { - result0 = [result0, result1, result2, result3, result4, result5]; - } else { - result0 = null; - pos = clone(pos1); - } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + + return s0; + } + + function peg$parseend_tag() { + var s0, s1, s2, s3, s4, s5, s6; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 47) { + s2 = peg$c8; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsews(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseidentifier(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsews(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsews(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parserd(); + if (s6 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c15(s4); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, n) { return n })(pos0.offset, pos0.line, pos0.column, result0[3]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("end tag"); - } - return result0; - } - - function parse_context() { - var result0, result1; - var pos0, pos1, pos2; - - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - if (input.charCodeAt(pos.offset) === 58) { - result0 = ":"; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\":\""); - } + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result1 = parse_identifier(); - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = clone(pos2); - } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c14); } + } + + return s0; + } + + function peg$parsecontext() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c16; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseidentifier(); + if (s3 !== peg$FAILED) { + peg$reportedPos = s1; + s2 = peg$c18(s3); + s1 = s2; } else { - result0 = null; - pos = clone(pos2); - } - if (result0 !== null) { - result0 = (function(offset, line, column, n) {return n})(pos1.offset, pos1.line, pos1.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos1); + peg$currPos = s1; + s1 = peg$c3; } - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { - result0 = (function(offset, line, column, n) { return n ? ["context", n] : ["context"] })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - return result0; - } - - function parse_params() { - var result0, result1, result2, result3, result4; - var pos0, pos1, pos2; - - reportFailures++; - pos0 = clone(pos); - result0 = []; - pos1 = clone(pos); - pos2 = clone(pos); - result2 = parse_ws(); - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - } else { - result1 = null; + } else { + peg$currPos = s1; + s1 = peg$c3; + } + if (s1 === peg$FAILED) { + s1 = peg$c4; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c19(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseparams() { + var s0, s1, s2, s3, s4, s5, s6; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = []; + s4 = peg$parsews(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - if (input.charCodeAt(pos.offset) === 61) { - result3 = "="; - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("\"=\""); + } else { + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 61) { + s5 = peg$c21; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c22); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parsenumber(); + if (s6 === peg$FAILED) { + s6 = peg$parseidentifier(); + if (s6 === peg$FAILED) { + s6 = peg$parseinline(); } } - if (result3 !== null) { - result4 = parse_number(); - if (result4 === null) { - result4 = parse_identifier(); - if (result4 === null) { - result4 = parse_inline(); - } - } - if (result4 !== null) { - result1 = [result1, result2, result3, result4]; - } else { - result1 = null; - pos = clone(pos2); - } + if (s6 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c23(s4, s6); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k, v) {return ["param", ["literal", k], v]})(pos1.offset, pos1.line, pos1.column, result1[1], result1[3]); + peg$currPos = s2; + s2 = peg$c3; } - if (result1 === null) { - pos = clone(pos1); - } - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - result2 = parse_ws(); - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - } else { - result1 = null; + } else { + peg$currPos = s2; + s2 = peg$c3; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = []; + s4 = peg$parsews(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - if (input.charCodeAt(pos.offset) === 61) { - result3 = "="; - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("\"=\""); + } else { + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 61) { + s5 = peg$c21; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c22); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parsenumber(); + if (s6 === peg$FAILED) { + s6 = peg$parseidentifier(); + if (s6 === peg$FAILED) { + s6 = peg$parseinline(); } } - if (result3 !== null) { - result4 = parse_number(); - if (result4 === null) { - result4 = parse_identifier(); - if (result4 === null) { - result4 = parse_inline(); - } - } - if (result4 !== null) { - result1 = [result1, result2, result3, result4]; - } else { - result1 = null; - pos = clone(pos2); - } + if (s6 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c23(s4, s6); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k, v) {return ["param", ["literal", k], v]})(pos1.offset, pos1.line, pos1.column, result1[1], result1[3]); + peg$currPos = s2; + s2 = peg$c3; } - if (result1 === null) { - pos = clone(pos1); - } - } - if (result0 !== null) { - result0 = (function(offset, line, column, p) { return ["params"].concat(p) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("params"); + } else { + peg$currPos = s2; + s2 = peg$c3; } - return result0; - } - - function parse_bodies() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2; - - reportFailures++; - pos0 = clone(pos); - result0 = []; - pos1 = clone(pos); - pos2 = clone(pos); - result1 = parse_ld(); - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 58) { - result2 = ":"; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\":\""); - } - } - if (result2 !== null) { - result3 = parse_key(); - if (result3 !== null) { - result4 = parse_rd(); - if (result4 !== null) { - result5 = parse_body(); - if (result5 !== null) { - result1 = [result1, result2, result3, result4, result5]; - } else { - result1 = null; - pos = clone(pos2); - } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c24(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + + return s0; + } + + function peg$parsebodies() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parseld(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c16; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsekey(); + if (s5 !== peg$FAILED) { + s6 = peg$parserd(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebody(); + if (s7 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c23(s5, s7); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k, v) {return ["param", ["literal", k], v]})(pos1.offset, pos1.line, pos1.column, result1[2], result1[4]); + peg$currPos = s2; + s2 = peg$c3; } - if (result1 === null) { - pos = clone(pos1); - } - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - result1 = parse_ld(); - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 58) { - result2 = ":"; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\":\""); - } - } - if (result2 !== null) { - result3 = parse_key(); - if (result3 !== null) { - result4 = parse_rd(); - if (result4 !== null) { - result5 = parse_body(); - if (result5 !== null) { - result1 = [result1, result2, result3, result4, result5]; - } else { - result1 = null; - pos = clone(pos2); - } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parseld(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c16; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsekey(); + if (s5 !== peg$FAILED) { + s6 = peg$parserd(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebody(); + if (s7 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c23(s5, s7); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k, v) {return ["param", ["literal", k], v]})(pos1.offset, pos1.line, pos1.column, result1[2], result1[4]); - } - if (result1 === null) { - pos = clone(pos1); + peg$currPos = s2; + s2 = peg$c3; } + } else { + peg$currPos = s2; + s2 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, p) { return ["bodies"].concat(p) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("bodies"); - } - return result0; - } - - function parse_reference() { - var result0, result1, result2, result3; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - result1 = parse_identifier(); - if (result1 !== null) { - result2 = parse_filters(); - if (result2 !== null) { - result3 = parse_rd(); - if (result3 !== null) { - result0 = [result0, result1, result2, result3]; - } else { - result0 = null; - pos = clone(pos1); - } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c26(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + + return s0; + } + + function peg$parsereference() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + s2 = peg$parseidentifier(); + if (s2 !== peg$FAILED) { + s3 = peg$parsefilters(); + if (s3 !== peg$FAILED) { + s4 = peg$parserd(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c28(s2, s3); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, n, f) { return ["reference", n, f].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1], result0[2]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("reference"); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + + return s0; + } + + function peg$parsepartial() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 62) { + s2 = peg$c30; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c31); } } - return result0; - } - - function parse_partial() { - var result0, result1, result2, result3, result4, result5, result6, result7, result8; - var pos0, pos1, pos2; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 62) { - result1 = ">"; - advance(pos, 1); + if (s2 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c32; + peg$currPos++; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\">\""); - } - } - if (result1 === null) { - if (input.charCodeAt(pos.offset) === 43) { - result1 = "+"; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"+\""); - } - } - } - if (result1 !== null) { - result2 = []; - result3 = parse_ws(); - while (result3 !== null) { - result2.push(result3); - result3 = parse_ws(); - } - if (result2 !== null) { - pos2 = clone(pos); - result3 = parse_key(); - if (result3 !== null) { - result3 = (function(offset, line, column, k) {return ["literal", k]})(pos2.offset, pos2.line, pos2.column, result3); - } - if (result3 === null) { - pos = clone(pos2); - } - if (result3 === null) { - result3 = parse_inline(); - } - if (result3 !== null) { - result4 = parse_context(); - if (result4 !== null) { - result5 = parse_params(); - if (result5 !== null) { - result6 = []; - result7 = parse_ws(); - while (result7 !== null) { - result6.push(result7); - result7 = parse_ws(); + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c33); } + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsews(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsews(); + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsekey(); + if (s5 !== peg$FAILED) { + peg$reportedPos = s4; + s5 = peg$c34(s5); + } + s4 = s5; + if (s4 === peg$FAILED) { + s4 = peg$parseinline(); + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecontext(); + if (s5 !== peg$FAILED) { + s6 = peg$parseparams(); + if (s6 !== peg$FAILED) { + s7 = []; + s8 = peg$parsews(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsews(); + } + if (s7 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 47) { + s8 = peg$c8; + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } } - if (result6 !== null) { - if (input.charCodeAt(pos.offset) === 47) { - result7 = "/"; - advance(pos, 1); - } else { - result7 = null; - if (reportFailures === 0) { - matchFailed("\"/\""); - } - } - if (result7 !== null) { - result8 = parse_rd(); - if (result8 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8]; - } else { - result0 = null; - pos = clone(pos1); - } + if (s8 !== peg$FAILED) { + s9 = peg$parserd(); + if (s9 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c35(s2, s4, s5, s6); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, s, n, c, p) { var key = (s ===">")? "partial" : s; return [key, n, c, p].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3], result0[4], result0[5]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("partial"); - } - return result0; - } - - function parse_filters() { - var result0, result1, result2; - var pos0, pos1, pos2; - - reportFailures++; - pos0 = clone(pos); - result0 = []; - pos1 = clone(pos); - pos2 = clone(pos); - if (input.charCodeAt(pos.offset) === 124) { - result1 = "|"; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"|\""); - } - } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = clone(pos2); - } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c29); } + } + + return s0; + } + + function peg$parsefilters() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 124) { + s3 = peg$c37; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c18(s4); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, n) {return n})(pos1.offset, pos1.line, pos1.column, result1[1]); + peg$currPos = s2; + s2 = peg$c3; } - if (result1 === null) { - pos = clone(pos1); - } - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - if (input.charCodeAt(pos.offset) === 124) { - result1 = "|"; - advance(pos, 1); + } else { + peg$currPos = s2; + s2 = peg$c3; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 124) { + s3 = peg$c37; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c18(s4); + s2 = s3; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"|\""); - } + peg$currPos = s2; + s2 = peg$c3; } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result1 = [result1, result2]; + } else { + peg$currPos = s2; + s2 = peg$c3; + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c39(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + + return s0; + } + + function peg$parsespecial() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 126) { + s2 = peg$c41; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c42); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsekey(); + if (s3 !== peg$FAILED) { + s4 = peg$parserd(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c43(s3); + s0 = s1; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s0; + s0 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, n) {return n})(pos1.offset, pos1.line, pos1.column, result1[1]); - } - if (result1 === null) { - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } + } else { + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, f) { return ["filters"].concat(f) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c40); } + } + + return s0; + } + + function peg$parseidentifier() { + var s0, s1; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsepath(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c45(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsekey(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c46(s1); } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("filters"); + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c44); } + } + + return s0; + } + + function peg$parsenumber() { + var s0, s1; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsefloat(); + if (s1 === peg$FAILED) { + s1 = peg$parseinteger(); + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c48(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c47); } + } + + return s0; + } + + function peg$parsefloat() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseinteger(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c50; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } } - return result0; - } - - function parse_special() { - var result0, result1, result2, result3; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 126) { - result1 = "~"; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"~\""); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseinteger(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseinteger(); } + } else { + s3 = peg$c3; } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result3 = parse_rd(); - if (result3 !== null) { - result0 = [result0, result1, result2, result3]; - } else { - result0 = null; - pos = clone(pos1); - } - } else { - result0 = null; - pos = clone(pos1); - } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c52(s1, s3); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, k) { return ["special", k].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[2]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("special"); + peg$currPos = s0; + s0 = peg$c3; } - return result0; - } - - function parse_identifier() { - var result0; - var pos0; - - reportFailures++; - pos0 = clone(pos); - result0 = parse_path(); - if (result0 !== null) { - result0 = (function(offset, line, column, p) { var arr = ["path"].concat(p); arr.text = p[1].join('.'); return arr; })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - result0 = parse_key(); - if (result0 !== null) { - result0 = (function(offset, line, column, k) { var arr = ["key", k]; arr.text = k; return arr; })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + + return s0; + } + + function peg$parseinteger() { + var s0, s1, s2; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (peg$c54.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c54.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } } } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("identifier"); - } - return result0; - } - - function parse_number() { - var result0; - var pos0; - - reportFailures++; - pos0 = clone(pos); - result0 = parse_float(); - if (result0 === null) { - result0 = parse_integer(); - } - if (result0 !== null) { - result0 = (function(offset, line, column, n) { return ['literal', n]; })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("number"); + } else { + s1 = peg$c3; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c56(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c53); } + } + + return s0; + } + + function peg$parsepath() { + var s0, s1, s2, s3; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsekey(); + if (s1 === peg$FAILED) { + s1 = peg$c4; + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsearray_part(); + if (s3 === peg$FAILED) { + s3 = peg$parsearray(); } - return result0; - } - - function parse_float() { - var result0, result1, result2, result3; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_integer(); - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 46) { - result1 = "."; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } - } - if (result1 !== null) { - result3 = parse_integer(); - if (result3 !== null) { - result2 = []; - while (result3 !== null) { - result2.push(result3); - result3 = parse_integer(); - } - } else { - result2 = null; - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = clone(pos1); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsearray_part(); + if (s3 === peg$FAILED) { + s3 = peg$parsearray(); } - } else { - result0 = null; - pos = clone(pos1); } } else { - result0 = null; - pos = clone(pos1); + s2 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, l, r) { return parseFloat(l + "." + r.join('')); })(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("float"); - } - return result0; - } - - function parse_integer() { - var result0, result1; - var pos0; - - reportFailures++; - pos0 = clone(pos); - if (/^[0-9]/.test(input.charAt(pos.offset))) { - result1 = input.charAt(pos.offset); - advance(pos, 1); + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c58(s1, s2); + s0 = s1; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } + peg$currPos = s0; + s0 = peg$c3; } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - if (/^[0-9]/.test(input.charAt(pos.offset))) { - result1 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } - } - } + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s1 = peg$c50; + peg$currPos++; } else { - result0 = null; - } - if (result0 !== null) { - result0 = (function(offset, line, column, digits) { return parseInt(digits.join(""), 10); })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("integer"); - } - return result0; - } - - function parse_path() { - var result0, result1, result2; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_key(); - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { - result2 = parse_array_part(); - if (result2 === null) { - result2 = parse_array(); - } - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - result2 = parse_array_part(); - if (result2 === null) { - result2 = parse_array(); - } - } + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsearray_part(); + if (s3 === peg$FAILED) { + s3 = peg$parsearray(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsearray_part(); + if (s3 === peg$FAILED) { + s3 = peg$parsearray(); + } + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c59(s2); + s0 = s1; } else { - result1 = null; - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, k, d) { - d = d[0]; - if (k && d) { - d.unshift(k); - return [false, d].concat([['line', line], ['col', column]]); - } - return [true, d].concat([['line', line], ['col', column]]); - })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - if (input.charCodeAt(pos.offset) === 46) { - result0 = "."; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } - } - if (result0 !== null) { - result1 = []; - result2 = parse_array_part(); - if (result2 === null) { - result2 = parse_array(); - } - while (result2 !== null) { - result1.push(result2); - result2 = parse_array_part(); - if (result2 === null) { - result2 = parse_array(); - } - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = clone(pos1); - } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c57); } + } + + return s0; + } + + function peg$parsekey() { + var s0, s1, s2, s3; + + peg$silentFails++; + s0 = peg$currPos; + if (peg$c61.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c63.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c63.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, d) { - if (d.length > 0) { - return [true, d[0]].concat([['line', line], ['col', column]]); - } - return [true, []].concat([['line', line], ['col', column]]); - })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } } } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("path"); - } - return result0; - } - - function parse_key() { - var result0, result1, result2; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - if (/^[a-zA-Z_$]/.test(input.charAt(pos.offset))) { - result0 = input.charAt(pos.offset); - advance(pos, 1); + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c65(s1, s2); + s0 = s1; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[a-zA-Z_$]"); - } + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result1 = []; - if (/^[0-9a-zA-Z_$\-]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[0-9a-zA-Z_$\\-]"); - } - } - while (result2 !== null) { - result1.push(result2); - if (/^[0-9a-zA-Z_$\-]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c60); } + } + + return s0; + } + + function peg$parsearray() { + var s0, s1, s2, s3, s4, s5; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parselb(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c54.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c54.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[0-9a-zA-Z_$\\-]"); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } } } - if (result1 !== null) { - result0 = [result0, result1]; + } else { + s4 = peg$c3; + } + if (s4 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c67(s4); + } + s3 = s4; + if (s3 === peg$FAILED) { + s3 = peg$parseidentifier(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parserb(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s1; + s2 = peg$c68(s3); + s1 = s2; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s1; + s1 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, h, t) { return h + t.join('') })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); + peg$currPos = s1; + s1 = peg$c3; } - if (result0 === null) { - pos = clone(pos0); + } else { + peg$currPos = s1; + s1 = peg$c3; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsearray_part(); + if (s2 === peg$FAILED) { + s2 = peg$c4; + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c69(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c3; } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("key"); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c66); } + } + + return s0; + } + + function peg$parsearray_part() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c50; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c71(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c3; } - return result0; - } - - function parse_array() { - var result0, result1, result2; - var pos0, pos1, pos2, pos3, pos4; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - result0 = parse_lb(); - if (result0 !== null) { - pos4 = clone(pos); - if (/^[0-9]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } - } - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - if (/^[0-9]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[0-9]"); - } - } - } + } else { + peg$currPos = s2; + s2 = peg$c3; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c50; + peg$currPos++; } else { - result1 = null; - } - if (result1 !== null) { - result1 = (function(offset, line, column, n) {return n.join('')})(pos4.offset, pos4.line, pos4.column, result1); - } - if (result1 === null) { - pos = clone(pos4); - } - if (result1 === null) { - result1 = parse_identifier(); - } - if (result1 !== null) { - result2 = parse_rb(); - if (result2 !== null) { - result0 = [result0, result1, result2]; + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsekey(); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c71(s4); + s2 = s3; } else { - result0 = null; - pos = clone(pos3); + peg$currPos = s2; + s2 = peg$c3; } } else { - result0 = null; - pos = clone(pos3); + peg$currPos = s2; + s2 = peg$c3; } - } else { - result0 = null; - pos = clone(pos3); - } - if (result0 !== null) { - result0 = (function(offset, line, column, a) {return a; })(pos2.offset, pos2.line, pos2.column, result0[1]); } - if (result0 === null) { - pos = clone(pos2); + } else { + s1 = peg$c3; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsearray(); + if (s2 === peg$FAILED) { + s2 = peg$c4; } - if (result0 !== null) { - result1 = parse_array_part(); - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = clone(pos1); - } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c72(s1, s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, i, nk) { if(nk) { nk.unshift(i); } else {nk = [i] } return nk; })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("array"); - } - return result0; - } - - function parse_array_part() { - var result0, result1, result2; - var pos0, pos1, pos2, pos3; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - if (input.charCodeAt(pos.offset) === 46) { - result1 = "."; - advance(pos, 1); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c70); } + } + + return s0; + } + + function peg$parseinline() { + var s0, s1, s2, s3; + + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c74; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s2 = peg$c74; + peg$currPos++; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = clone(pos3); - } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c76(); + s0 = s1; } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k) {return k})(pos2.offset, pos2.line, pos2.column, result1[1]); + peg$currPos = s0; + s0 = peg$c3; } - if (result1 === null) { - pos = clone(pos2); - } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - pos2 = clone(pos); - pos3 = clone(pos); - if (input.charCodeAt(pos.offset) === 46) { - result1 = "."; - advance(pos, 1); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c74; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseliteral(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c74; + peg$currPos++; } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\".\""); - } + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } } - if (result1 !== null) { - result2 = parse_key(); - if (result2 !== null) { - result1 = [result1, result2]; - } else { - result1 = null; - pos = clone(pos3); - } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c77(s2); + s0 = s1; } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - result1 = (function(offset, line, column, k) {return k})(pos2.offset, pos2.line, pos2.column, result1[1]); + peg$currPos = s0; + s0 = peg$c3; } - if (result1 === null) { - pos = clone(pos2); - } - } - } else { - result0 = null; - } - if (result0 !== null) { - result1 = parse_array(); - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { - result0 = [result0, result1]; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, d, a) { if (a) { return d.concat(a); } else { return d; } })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("array_part"); - } - return result0; - } - - function parse_inline() { - var result0, result1, result2; - var pos0, pos1; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - if (input.charCodeAt(pos.offset) === 34) { - result0 = "\""; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result0 !== null) { - if (input.charCodeAt(pos.offset) === 34) { - result1 = "\""; - advance(pos, 1); - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result1 !== null) { - result0 = [result0, result1]; + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c74; + peg$currPos++; } else { - result0 = null; - pos = clone(pos1); - } - } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column) { return ["literal", ""].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column); - } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - if (input.charCodeAt(pos.offset) === 34) { - result0 = "\""; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result0 !== null) { - result1 = parse_literal(); - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 34) { - result2 = "\""; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = clone(pos1); + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseinline_part(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseinline_part(); } } else { - result0 = null; - pos = clone(pos1); - } - } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, l) { return ["literal", l].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - if (input.charCodeAt(pos.offset) === 34) { - result0 = "\""; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } + s2 = peg$c3; } - if (result0 !== null) { - result2 = parse_inline_part(); - if (result2 !== null) { - result1 = []; - while (result2 !== null) { - result1.push(result2); - result2 = parse_inline_part(); - } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c74; + peg$currPos++; } else { - result1 = null; + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } } - if (result1 !== null) { - if (input.charCodeAt(pos.offset) === 34) { - result2 = "\""; - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"\\\"\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = clone(pos1); - } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c78(s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, p) { return ["body"].concat(p).concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } + } else { + peg$currPos = s0; + s0 = peg$c3; } } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("inline"); - } - return result0; - } - - function parse_inline_part() { - var result0; - var pos0; - - result0 = parse_special(); - if (result0 === null) { - result0 = parse_reference(); - if (result0 === null) { - pos0 = clone(pos); - result0 = parse_literal(); - if (result0 !== null) { - result0 = (function(offset, line, column, l) { return ["buffer", l] })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + + return s0; + } + + function peg$parseinline_part() { + var s0, s1; + + s0 = peg$parsespecial(); + if (s0 === peg$FAILED) { + s0 = peg$parsereference(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseliteral(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c79(s1); } + s0 = s1; } - return result0; - } - - function parse_buffer() { - var result0, result1, result2, result3, result4, result5; - var pos0, pos1, pos2, pos3; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - result0 = parse_eol(); - if (result0 !== null) { - result1 = []; - result2 = parse_ws(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - if (result1 !== null) { - result0 = [result0, result1]; - } else { - result0 = null; - pos = clone(pos1); - } + } + + return s0; + } + + function peg$parsebuffer() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseeol(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsews(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsews(); + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c81(s1, s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); - } - if (result0 !== null) { - result0 = (function(offset, line, column, e, w) { return ["format", e, w.join('')].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 === null) { - pos = clone(pos0); - } - if (result0 === null) { - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - reportFailures++; - result1 = parse_tag(); - reportFailures--; - if (result1 === null) { - result1 = ""; + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsetag(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = peg$c6; + } else { + peg$currPos = s3; + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseraw(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - pos3 = clone(pos); - reportFailures++; - result2 = parse_raw(); - reportFailures--; - if (result2 === null) { - result2 = ""; + peg$currPos = s4; + s4 = peg$c3; + } + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsecomment(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = peg$c6; } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - pos3 = clone(pos); - reportFailures++; - result3 = parse_comment(); - reportFailures--; - if (result3 === null) { - result3 = ""; + peg$currPos = s5; + s5 = peg$c3; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseeol(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = peg$c6; } else { - result3 = null; - pos = clone(pos3); + peg$currPos = s6; + s6 = peg$c3; } - if (result3 !== null) { - pos3 = clone(pos); - reportFailures++; - result4 = parse_eol(); - reportFailures--; - if (result4 === null) { - result4 = ""; + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; } else { - result4 = null; - pos = clone(pos3); + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c82); } } - if (result4 !== null) { - if (input.length > pos.offset) { - result5 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result5 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result5 !== null) { - result1 = [result1, result2, result3, result4, result5]; - } else { - result1 = null; - pos = clone(pos2); - } + if (s7 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c83(s7); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, c) {return c})(pos1.offset, pos1.line, pos1.column, result1[4]); - } - if (result1 === null) { - pos = clone(pos1); + peg$currPos = s2; + s2 = peg$c3; } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - reportFailures++; - result1 = parse_tag(); - reportFailures--; - if (result1 === null) { - result1 = ""; + } else { + peg$currPos = s2; + s2 = peg$c3; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsetag(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = peg$c6; + } else { + peg$currPos = s3; + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseraw(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; } else { - result1 = null; - pos = clone(pos3); + peg$currPos = s4; + s4 = peg$c3; } - if (result1 !== null) { - pos3 = clone(pos); - reportFailures++; - result2 = parse_raw(); - reportFailures--; - if (result2 === null) { - result2 = ""; + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsecomment(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = peg$c6; } else { - result2 = null; - pos = clone(pos3); + peg$currPos = s5; + s5 = peg$c3; } - if (result2 !== null) { - pos3 = clone(pos); - reportFailures++; - result3 = parse_comment(); - reportFailures--; - if (result3 === null) { - result3 = ""; + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseeol(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = peg$c6; } else { - result3 = null; - pos = clone(pos3); + peg$currPos = s6; + s6 = peg$c3; } - if (result3 !== null) { - pos3 = clone(pos); - reportFailures++; - result4 = parse_eol(); - reportFailures--; - if (result4 === null) { - result4 = ""; + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; } else { - result4 = null; - pos = clone(pos3); + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c82); } } - if (result4 !== null) { - if (input.length > pos.offset) { - result5 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result5 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result5 !== null) { - result1 = [result1, result2, result3, result4, result5]; - } else { - result1 = null; - pos = clone(pos2); - } + if (s7 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c83(s7); + s2 = s3; } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); + peg$currPos = s2; + s2 = peg$c3; } } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, c) {return c})(pos1.offset, pos1.line, pos1.column, result1[4]); - } - if (result1 === null) { - pos = clone(pos1); + peg$currPos = s2; + s2 = peg$c3; } + } else { + peg$currPos = s2; + s2 = peg$c3; } - } else { - result0 = null; - } - if (result0 !== null) { - result0 = (function(offset, line, column, b) { return ["buffer", b.join('')].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); } - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("buffer"); - } - return result0; - } - - function parse_literal() { - var result0, result1, result2; - var pos0, pos1, pos2, pos3; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - reportFailures++; - result1 = parse_tag(); - reportFailures--; - if (result1 === null) { - result1 = ""; } else { - result1 = null; - pos = clone(pos3); + s1 = peg$c3; } - if (result1 !== null) { - result2 = parse_esc(); - if (result2 === null) { - if (/^[^"]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[^\"]"); - } - } - } - if (result2 !== null) { - result1 = [result1, result2]; + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c84(s1); + } + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c80); } + } + + return s0; + } + + function peg$parseliteral() { + var s0, s1, s2, s3, s4; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsetag(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = peg$c6; + } else { + peg$currPos = s3; + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseesc(); + if (s4 === peg$FAILED) { + if (peg$c86.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; } else { - result1 = null; - pos = clone(pos2); + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c87); } } - } else { - result1 = null; - pos = clone(pos2); } - if (result1 !== null) { - result1 = (function(offset, line, column, c) {return c})(pos1.offset, pos1.line, pos1.column, result1[1]); - } - if (result1 === null) { - pos = clone(pos1); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c83(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c3; } - if (result1 !== null) { - result0 = []; - while (result1 !== null) { - result0.push(result1); - pos1 = clone(pos); - pos2 = clone(pos); - pos3 = clone(pos); - reportFailures++; - result1 = parse_tag(); - reportFailures--; - if (result1 === null) { - result1 = ""; - } else { - result1 = null; - pos = clone(pos3); - } - if (result1 !== null) { - result2 = parse_esc(); - if (result2 === null) { - if (/^[^"]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[^\"]"); - } - } - } - if (result2 !== null) { - result1 = [result1, result2]; + } else { + peg$currPos = s2; + s2 = peg$c3; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsetag(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = peg$c6; + } else { + peg$currPos = s3; + s3 = peg$c3; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseesc(); + if (s4 === peg$FAILED) { + if (peg$c86.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; } else { - result1 = null; - pos = clone(pos2); + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c87); } } - } else { - result1 = null; - pos = clone(pos2); - } - if (result1 !== null) { - result1 = (function(offset, line, column, c) {return c})(pos1.offset, pos1.line, pos1.column, result1[1]); } - if (result1 === null) { - pos = clone(pos1); + if (s4 !== peg$FAILED) { + peg$reportedPos = s2; + s3 = peg$c83(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c3; } + } else { + peg$currPos = s2; + s2 = peg$c3; } - } else { - result0 = null; - } - if (result0 !== null) { - result0 = (function(offset, line, column, b) { return b.join('') })(pos0.offset, pos0.line, pos0.column, result0); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("literal"); } - return result0; - } - - function parse_esc() { - var result0; - var pos0; - - pos0 = clone(pos); - if (input.substr(pos.offset, 2) === "\\\"") { - result0 = "\\\""; - advance(pos, 2); + } else { + s1 = peg$c3; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c88(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c85); } + } + + return s0; + } + + function peg$parseesc() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c89) { + s1 = peg$c89; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c90); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c91(); + } + s0 = s1; + + return s0; + } + + function peg$parseraw() { + var s0, s1, s2, s3, s4, s5; + + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c93) { + s1 = peg$c93; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c94); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 2) === peg$c95) { + s5 = peg$c95; + peg$currPos += 2; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\\\\\\"\""); - } - } - if (result0 !== null) { - result0 = (function(offset, line, column) { return '"' })(pos0.offset, pos0.line, pos0.column); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c96); } } - if (result0 === null) { - pos = clone(pos0); - } - return result0; - } - - function parse_raw() { - var result0, result1, result2, result3; - var pos0, pos1, pos2, pos3, pos4; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - if (input.substr(pos.offset, 2) === "{`") { - result0 = "{`"; - advance(pos, 2); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"{`\""); - } + peg$currPos = s4; + s4 = peg$c3; } - if (result0 !== null) { - result1 = []; - pos2 = clone(pos); - pos3 = clone(pos); - pos4 = clone(pos); - reportFailures++; - if (input.substr(pos.offset, 2) === "`}") { - result2 = "`}"; - advance(pos, 2); + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"`}\""); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c82); } } - reportFailures--; - if (result2 === null) { - result2 = ""; + if (s5 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c97(s5); + s3 = s4; } else { - result2 = null; - pos = clone(pos4); + peg$currPos = s3; + s3 = peg$c3; } - if (result2 !== null) { - if (input.length > pos.offset) { - result3 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result3 !== null) { - result2 = [result2, result3]; - } else { - result2 = null; - pos = clone(pos3); - } + } else { + peg$currPos = s3; + s3 = peg$c3; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 2) === peg$c95) { + s5 = peg$c95; + peg$currPos += 2; } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - result2 = (function(offset, line, column, char) {return char})(pos2.offset, pos2.line, pos2.column, result2[1]); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c96); } } - if (result2 === null) { - pos = clone(pos2); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; + } else { + peg$currPos = s4; + s4 = peg$c3; } - while (result2 !== null) { - result1.push(result2); - pos2 = clone(pos); - pos3 = clone(pos); - pos4 = clone(pos); - reportFailures++; - if (input.substr(pos.offset, 2) === "`}") { - result2 = "`}"; - advance(pos, 2); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"`}\""); - } - } - reportFailures--; - if (result2 === null) { - result2 = ""; + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - pos = clone(pos4); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c82); } } - if (result2 !== null) { - if (input.length > pos.offset) { - result3 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result3 !== null) { - result2 = [result2, result3]; - } else { - result2 = null; - pos = clone(pos3); - } + if (s5 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c97(s5); + s3 = s4; } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - result2 = (function(offset, line, column, char) {return char})(pos2.offset, pos2.line, pos2.column, result2[1]); - } - if (result2 === null) { - pos = clone(pos2); + peg$currPos = s3; + s3 = peg$c3; } + } else { + peg$currPos = s3; + s3 = peg$c3; } - if (result1 !== null) { - if (input.substr(pos.offset, 2) === "`}") { - result2 = "`}"; - advance(pos, 2); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"`}\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = clone(pos1); - } + } + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c95) { + s3 = peg$c95; + peg$currPos += 2; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c96); } + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c98(s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, rawText) { return ["raw", rawText.join('')].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("raw"); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c92); } + } + + return s0; + } + + function peg$parsecomment() { + var s0, s1, s2, s3, s4, s5; + + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c100) { + s1 = peg$c100; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c101); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 2) === peg$c102) { + s5 = peg$c102; + peg$currPos += 2; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c103); } } - return result0; - } - - function parse_comment() { - var result0, result1, result2, result3; - var pos0, pos1, pos2, pos3, pos4; - - reportFailures++; - pos0 = clone(pos); - pos1 = clone(pos); - if (input.substr(pos.offset, 2) === "{!") { - result0 = "{!"; - advance(pos, 2); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"{!\""); - } + peg$currPos = s4; + s4 = peg$c3; } - if (result0 !== null) { - result1 = []; - pos2 = clone(pos); - pos3 = clone(pos); - pos4 = clone(pos); - reportFailures++; - if (input.substr(pos.offset, 2) === "!}") { - result2 = "!}"; - advance(pos, 2); + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"!}\""); - } + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c82); } } - reportFailures--; - if (result2 === null) { - result2 = ""; + if (s5 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c83(s5); + s3 = s4; } else { - result2 = null; - pos = clone(pos4); + peg$currPos = s3; + s3 = peg$c3; } - if (result2 !== null) { - if (input.length > pos.offset) { - result3 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result3 !== null) { - result2 = [result2, result3]; - } else { - result2 = null; - pos = clone(pos3); - } + } else { + peg$currPos = s3; + s3 = peg$c3; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 2) === peg$c102) { + s5 = peg$c102; + peg$currPos += 2; } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - result2 = (function(offset, line, column, c) {return c})(pos2.offset, pos2.line, pos2.column, result2[1]); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c103); } } - if (result2 === null) { - pos = clone(pos2); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = peg$c6; + } else { + peg$currPos = s4; + s4 = peg$c3; } - while (result2 !== null) { - result1.push(result2); - pos2 = clone(pos); - pos3 = clone(pos); - pos4 = clone(pos); - reportFailures++; - if (input.substr(pos.offset, 2) === "!}") { - result2 = "!}"; - advance(pos, 2); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"!}\""); - } - } - reportFailures--; - if (result2 === null) { - result2 = ""; + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; } else { - result2 = null; - pos = clone(pos4); + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c82); } } - if (result2 !== null) { - if (input.length > pos.offset) { - result3 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result3 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result3 !== null) { - result2 = [result2, result3]; - } else { - result2 = null; - pos = clone(pos3); - } + if (s5 !== peg$FAILED) { + peg$reportedPos = s3; + s4 = peg$c83(s5); + s3 = s4; } else { - result2 = null; - pos = clone(pos3); - } - if (result2 !== null) { - result2 = (function(offset, line, column, c) {return c})(pos2.offset, pos2.line, pos2.column, result2[1]); - } - if (result2 === null) { - pos = clone(pos2); + peg$currPos = s3; + s3 = peg$c3; } + } else { + peg$currPos = s3; + s3 = peg$c3; } - if (result1 !== null) { - if (input.substr(pos.offset, 2) === "!}") { - result2 = "!}"; - advance(pos, 2); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("\"!}\""); - } - } - if (result2 !== null) { - result0 = [result0, result1, result2]; - } else { - result0 = null; - pos = clone(pos1); - } + } + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c102) { + s3 = peg$c102; + peg$currPos += 2; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c103); } + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c104(s2); + s0 = s1; } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos1); + peg$currPos = s0; + s0 = peg$c3; } - if (result0 !== null) { - result0 = (function(offset, line, column, c) { return ["comment", c.join('')].concat([['line', line], ['col', column]]) })(pos0.offset, pos0.line, pos0.column, result0[1]); - } - if (result0 === null) { - pos = clone(pos0); - } - reportFailures--; - if (reportFailures === 0 && result0 === null) { - matchFailed("comment"); - } - return result0; - } - - function parse_tag() { - var result0, result1, result2, result3, result4, result5, result6, result7; - var pos0, pos1, pos2; - - pos0 = clone(pos); - result0 = parse_ld(); - if (result0 !== null) { - result1 = []; - result2 = parse_ws(); - while (result2 !== null) { - result1.push(result2); - result2 = parse_ws(); - } - if (result1 !== null) { - if (/^[#?^><+%:@\/~%]/.test(input.charAt(pos.offset))) { - result2 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result2 = null; - if (reportFailures === 0) { - matchFailed("[#?^><+%:@\\/~%]"); - } - } - if (result2 !== null) { - result3 = []; - result4 = parse_ws(); - while (result4 !== null) { - result3.push(result4); - result4 = parse_ws(); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c99); } + } + + return s0; + } + + function peg$parsetag() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + + s0 = peg$currPos; + s1 = peg$parseld(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsews(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsews(); + } + if (s2 !== peg$FAILED) { + if (peg$c105.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c106); } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parsews(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parsews(); + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parserd(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = peg$c6; + } else { + peg$currPos = s7; + s7 = peg$c3; } - if (result3 !== null) { - pos1 = clone(pos); - pos2 = clone(pos); - reportFailures++; - result5 = parse_rd(); - reportFailures--; - if (result5 === null) { - result5 = ""; + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$parseeol(); + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = peg$c6; } else { - result5 = null; - pos = clone(pos2); + peg$currPos = s8; + s8 = peg$c3; } - if (result5 !== null) { - pos2 = clone(pos); - reportFailures++; - result6 = parse_eol(); - reportFailures--; - if (result6 === null) { - result6 = ""; + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; } else { - result6 = null; - pos = clone(pos2); + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c82); } } - if (result6 !== null) { - if (input.length > pos.offset) { - result7 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result7 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result7 !== null) { - result5 = [result5, result6, result7]; - } else { - result5 = null; - pos = clone(pos1); - } + if (s9 !== peg$FAILED) { + s7 = [s7, s8, s9]; + s6 = s7; } else { - result5 = null; - pos = clone(pos1); + peg$currPos = s6; + s6 = peg$c3; } } else { - result5 = null; - pos = clone(pos1); + peg$currPos = s6; + s6 = peg$c3; } - if (result5 !== null) { - result4 = []; - while (result5 !== null) { - result4.push(result5); - pos1 = clone(pos); - pos2 = clone(pos); - reportFailures++; - result5 = parse_rd(); - reportFailures--; - if (result5 === null) { - result5 = ""; + } else { + peg$currPos = s6; + s6 = peg$c3; + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parserd(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = peg$c6; + } else { + peg$currPos = s7; + s7 = peg$c3; + } + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$parseeol(); + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = peg$c6; } else { - result5 = null; - pos = clone(pos2); + peg$currPos = s8; + s8 = peg$c3; } - if (result5 !== null) { - pos2 = clone(pos); - reportFailures++; - result6 = parse_eol(); - reportFailures--; - if (result6 === null) { - result6 = ""; + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; } else { - result6 = null; - pos = clone(pos2); + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c82); } } - if (result6 !== null) { - if (input.length > pos.offset) { - result7 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result7 = null; - if (reportFailures === 0) { - matchFailed("any character"); - } - } - if (result7 !== null) { - result5 = [result5, result6, result7]; - } else { - result5 = null; - pos = clone(pos1); - } + if (s9 !== peg$FAILED) { + s7 = [s7, s8, s9]; + s6 = s7; } else { - result5 = null; - pos = clone(pos1); + peg$currPos = s6; + s6 = peg$c3; } } else { - result5 = null; - pos = clone(pos1); + peg$currPos = s6; + s6 = peg$c3; } + } else { + peg$currPos = s6; + s6 = peg$c3; } - } else { - result4 = null; } - if (result4 !== null) { - result5 = []; - result6 = parse_ws(); - while (result6 !== null) { - result5.push(result6); - result6 = parse_ws(); - } - if (result5 !== null) { - result6 = parse_rd(); - if (result6 !== null) { - result0 = [result0, result1, result2, result3, result4, result5, result6]; - } else { - result0 = null; - pos = clone(pos0); - } + } else { + s5 = peg$c3; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parsews(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsews(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parserd(); + if (s7 !== peg$FAILED) { + s1 = [s1, s2, s3, s4, s5, s6, s7]; + s0 = s1; } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); + peg$currPos = s0; + s0 = peg$c3; } } else { - result0 = null; - pos = clone(pos0); - } - } else { - result0 = null; - pos = clone(pos0); - } - if (result0 === null) { - result0 = parse_reference(); - } - return result0; - } - - function parse_ld() { - var result0; - - if (input.charCodeAt(pos.offset) === 123) { - result0 = "{"; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"{\""); - } - } - return result0; - } - - function parse_rd() { - var result0; - - if (input.charCodeAt(pos.offset) === 125) { - result0 = "}"; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"}\""); + peg$currPos = s0; + s0 = peg$c3; } - } - return result0; - } - - function parse_lb() { - var result0; - - if (input.charCodeAt(pos.offset) === 91) { - result0 = "["; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"[\""); - } - } - return result0; - } - - function parse_rb() { - var result0; - - if (input.charCodeAt(pos.offset) === 93) { - result0 = "]"; - advance(pos, 1); } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"]\""); - } + peg$currPos = s0; + s0 = peg$c3; } - return result0; - } - - function parse_eol() { - var result0; - - if (input.charCodeAt(pos.offset) === 10) { - result0 = "\n"; - advance(pos, 1); + } else { + peg$currPos = s0; + s0 = peg$c3; + } + if (s0 === peg$FAILED) { + s0 = peg$parsereference(); + } + + return s0; + } + + function peg$parseld() { + var s0; + + if (input.charCodeAt(peg$currPos) === 123) { + s0 = peg$c107; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c108); } + } + + return s0; + } + + function peg$parserd() { + var s0; + + if (input.charCodeAt(peg$currPos) === 125) { + s0 = peg$c109; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c110); } + } + + return s0; + } + + function peg$parselb() { + var s0; + + if (input.charCodeAt(peg$currPos) === 91) { + s0 = peg$c111; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + + return s0; + } + + function peg$parserb() { + var s0; + + if (input.charCodeAt(peg$currPos) === 93) { + s0 = peg$c113; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + + return s0; + } + + function peg$parseeol() { + var s0; + + if (input.charCodeAt(peg$currPos) === 10) { + s0 = peg$c115; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c116); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c117) { + s0 = peg$c117; + peg$currPos += 2; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\n\""); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c118); } } - if (result0 === null) { - if (input.substr(pos.offset, 2) === "\r\n") { - result0 = "\r\n"; - advance(pos, 2); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c119; + peg$currPos++; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\r\\n\""); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c120); } } - if (result0 === null) { - if (input.charCodeAt(pos.offset) === 13) { - result0 = "\r"; - advance(pos, 1); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8232) { + s0 = peg$c121; + peg$currPos++; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\r\""); - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c122); } } - if (result0 === null) { - if (input.charCodeAt(pos.offset) === 8232) { - result0 = "\u2028"; - advance(pos, 1); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 8233) { + s0 = peg$c123; + peg$currPos++; } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\u2028\""); - } - } - if (result0 === null) { - if (input.charCodeAt(pos.offset) === 8233) { - result0 = "\u2029"; - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("\"\\u2029\""); - } - } + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c124); } } } } } - return result0; - } - - function parse_ws() { - var result0; - - if (/^[\t\x0B\f \xA0\uFEFF]/.test(input.charAt(pos.offset))) { - result0 = input.charAt(pos.offset); - advance(pos, 1); - } else { - result0 = null; - if (reportFailures === 0) { - matchFailed("[\\t\\x0B\\f \\xA0\\uFEFF]"); - } - } - if (result0 === null) { - result0 = parse_eol(); - } - return result0; } - - - function cleanupExpected(expected) { - expected.sort(); - - var lastExpected = null; - var cleanExpected = []; - for (var i = 0; i < expected.length; i++) { - if (expected[i] !== lastExpected) { - cleanExpected.push(expected[i]); - lastExpected = expected[i]; - } - } - return cleanExpected; - } - - - - var result = parseFunctions[startRule](); - - /* - * The parser is now in one of the following three states: - * - * 1. The parser successfully parsed the whole input. - * - * - |result !== null| - * - |pos.offset === input.length| - * - |rightmostFailuresExpected| may or may not contain something - * - * 2. The parser successfully parsed only a part of the input. - * - * - |result !== null| - * - |pos.offset < input.length| - * - |rightmostFailuresExpected| may or may not contain something - * - * 3. The parser did not successfully parse any part of the input. - * - * - |result === null| - * - |pos.offset === 0| - * - |rightmostFailuresExpected| contains at least one failure - * - * All code following this comment (including called functions) must - * handle these states. - */ - if (result === null || pos.offset !== input.length) { - var offset = Math.max(pos.offset, rightmostFailuresPos.offset); - var found = offset < input.length ? input.charAt(offset) : null; - var errorPosition = pos.offset > rightmostFailuresPos.offset ? pos : rightmostFailuresPos; - - throw new parser.SyntaxError( - cleanupExpected(rightmostFailuresExpected), - found, - offset, - errorPosition.line, - errorPosition.column - ); - } - - return result; - }, - - /* Returns the parser source code. */ - toSource: function() { return this._source; } - }; - - /* Thrown when a parser encounters a syntax error. */ - - result.SyntaxError = function(expected, found, offset, line, column) { - function buildMessage(expected, found) { - var expectedHumanized, foundHumanized; - - switch (expected.length) { - case 0: - expectedHumanized = "end of input"; - break; - case 1: - expectedHumanized = expected[0]; - break; - default: - expectedHumanized = expected.slice(0, expected.length - 1).join(", ") - + " or " - + expected[expected.length - 1]; - } - - foundHumanized = found ? quote(found) : "end of input"; - - return "Expected " + expectedHumanized + " but " + foundHumanized + " found."; + + return s0; } - - this.name = "SyntaxError"; - this.expected = expected; - this.found = found; - this.message = buildMessage(expected, found); - this.offset = offset; - this.line = line; - this.column = column; + + function peg$parsews() { + var s0; + + if (peg$c125.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c126); } + } + if (s0 === peg$FAILED) { + s0 = peg$parseeol(); + } + + return s0; + } + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail({ type: "end", description: "end of input" }); + } + + throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); + } + } + + return { + SyntaxError: SyntaxError, + parse: parse }; - - result.SyntaxError.prototype = Error.prototype; - - return result; })(); // expose parser methods diff --git a/dist/dust-full.min.js b/dist/dust-full.min.js index 0441a749..3ac0f041 100644 --- a/dist/dust-full.min.js +++ b/dist/dust-full.min.js @@ -1,5 +1,5 @@ -/*! Dust - Asynchronous Templating - v2.3.5 +/*! Dust - Asynchronous Templating - v2.3.6 * http://linkedin.github.io/dustjs/ * Copyright (c) 2014 Aleksander Williams; Released under the MIT License */ -!function(root){function Context(a,b,c,d){this.stack=a,this.global=b,this.blocks=c,this.templateName=d}function Stack(a,b,c,d){this.tail=b,this.isObject=a&&"object"==typeof a,this.head=a,this.index=c,this.of=d}function Stub(a){this.head=new Chunk(this),this.callback=a,this.out=""}function Stream(){this.head=new Chunk(this)}function Chunk(a,b,c){this.root=a,this.next=b,this.data=[],this.flushable=!1,this.taps=c}function Tap(a,b){this.head=a,this.tail=b}var dust={},NONE="NONE",ERROR="ERROR",WARN="WARN",INFO="INFO",DEBUG="DEBUG",loggingLevels=[DEBUG,INFO,WARN,ERROR,NONE],EMPTY_FUNC=function(){},logger={},originalLog,loggerContext;dust.debugLevel=NONE,dust.silenceErrors=!1,root&&root.console&&root.console.log&&(loggerContext=root.console,originalLog=root.console.log),logger.log=loggerContext?function(){logger.log="function"==typeof originalLog?function(){originalLog.apply(loggerContext,arguments)}:function(){var a=Array.prototype.slice.apply(arguments).join(" ");originalLog(a)},logger.log.apply(this,arguments)}:function(){},dust.log=function(a,b){if(b=b||INFO,dust.debugLevel!==NONE&&dust.indexInArray(loggingLevels,b)>=dust.indexInArray(loggingLevels,dust.debugLevel)&&(dust.logQueue||(dust.logQueue=[]),dust.logQueue.push({message:a,type:b}),logger.log("[DUST "+b+"]: "+a)),!dust.silenceErrors&&b===ERROR)throw"string"==typeof a?new Error(a):a},dust.onError=function(a,b){if(logger.log("[!!!DEPRECATION WARNING!!!]: dust.onError will no longer return a chunk object."),dust.log(a.message||a,ERROR),dust.silenceErrors)return b;throw a},dust.helpers={},dust.cache={},dust.register=function(a,b){a&&(dust.cache[a]=b)},dust.render=function(a,b,c){var d=new Stub(c).head;try{dust.load(a,d,Context.wrap(b,a)).end()}catch(e){dust.log(e,ERROR)}},dust.stream=function(a,b){var c=new Stream;return dust.nextTick(function(){try{dust.load(a,c.head,Context.wrap(b,a)).end()}catch(d){dust.log(d,ERROR)}}),c},dust.renderSource=function(a,b,c){return dust.compileFn(a)(b,c)},dust.compileFn=function(a,b){b=b||null;var c=dust.loadSource(dust.compile(a,b));return function(a,d){var e=d?new Stub(d):new Stream;return dust.nextTick(function(){"function"==typeof c?c(e.head,Context.wrap(a,b)).end():dust.log(new Error("Template ["+b+"] cannot be resolved to a Dust function"),ERROR)}),e}},dust.load=function(a,b,c){var d=dust.cache[a];return d?d(b,c):dust.onLoad?b.map(function(b){dust.onLoad(a,function(d,e){return d?b.setError(d):(dust.cache[a]||dust.loadSource(dust.compile(e,a)),void dust.cache[a](b,c).end())})}):b.setError(new Error("Template Not Found: "+a))},dust.loadSource=function(source,path){return eval(source)},dust.isArray=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},dust.indexInArray=function(a,b,c){if(c=+c||0,Array.prototype.indexOf)return a.indexOf(b,c);if(void 0===a||null===a)throw new TypeError('cannot call method "indexOf" of null');var d=a.length;for(1/0===Math.abs(c)&&(c=0),0>c&&(c+=d,0>c&&(c=0));d>c;c++)if(a[c]===b)return c;return-1},dust.nextTick=function(){return function(a){setTimeout(a,0)}}(),dust.isEmpty=function(a){return dust.isArray(a)&&!a.length?!0:0===a?!1:!a},dust.filter=function(a,b,c){if(c)for(var d=0,e=c.length;e>d;d++){var f=c[d];"s"===f?b=null:"function"==typeof dust.filters[f]?a=dust.filters[f](a):dust.log("Invalid filter ["+f+"]",WARN)}return b&&(a=dust.filters[b](a)),a},dust.filters={h:function(a){return dust.escapeHtml(a)},j:function(a){return dust.escapeJs(a)},u:encodeURI,uc:encodeURIComponent,js:function(a){return JSON?JSON.stringify(a):(dust.log("JSON is undefined. JSON stringify has not been used on ["+a+"]",WARN),a)},jp:function(a){return JSON?JSON.parse(a):(dust.log("JSON is undefined. JSON parse has not been used on ["+a+"]",WARN),a)}},dust.makeBase=function(a){return new Context(new Stack,a)},Context.wrap=function(a,b){return a instanceof Context?a:new Context(new Stack(a),{},null,b)},Context.prototype.get=function(a,b){return"string"==typeof a&&("."===a[0]&&(b=!0,a=a.substr(1)),a=a.split(".")),this._get(b,a)},Context.prototype._get=function(a,b){var c,d,e,f,g=this.stack,h=1;if(d=b[0],e=b.length,a&&0===e)f=g,g=g.head;else{if(a)g&&(g=g.head?g.head[d]:void 0);else{for(;g&&(!g.isObject||(f=g.head,c=g.head[d],void 0===c));)g=g.tail;g=void 0!==c?c:this.global?this.global[d]:void 0}for(;g&&e>h;)f=g,g=g[b[h]],h++}if("function"==typeof g){var i=function(){try{return g.apply(f,arguments)}catch(a){return dust.log(a,ERROR)}};return i.isFunction=!0,i}return void 0===g&&dust.log("Cannot find the value for reference [{"+b.join(".")+"}] in template ["+this.getTemplateName()+"]"),g},Context.prototype.getPath=function(a,b){return this._get(a,b)},Context.prototype.push=function(a,b,c){return new Context(new Stack(a,this.stack,b,c),this.global,this.blocks,this.getTemplateName())},Context.prototype.rebase=function(a){return new Context(new Stack(a),this.global,this.blocks,this.getTemplateName())},Context.prototype.current=function(){return this.stack.head},Context.prototype.getBlock=function(a){if("function"==typeof a){var b=new Chunk;a=a(b,this).data.join("")}var c=this.blocks;if(!c)return void dust.log("No blocks for context[{"+a+"}] in template ["+this.getTemplateName()+"]",DEBUG);for(var d,e=c.length;e--;)if(d=c[e][a])return d},Context.prototype.shiftBlocks=function(a){var b,c=this.blocks;return a?(b=c?c.concat([a]):[a],new Context(this.stack,this.global,b,this.getTemplateName())):this},Context.prototype.getTemplateName=function(){return this.templateName},Stub.prototype.flush=function(){for(var a=this.head;a;){if(!a.flushable)return a.error?(this.callback(a.error),dust.log("Chunk error ["+a.error+"] thrown. Ceasing to render this template.",WARN),void(this.flush=EMPTY_FUNC)):void 0;this.out+=a.data.join(""),a=a.next,this.head=a}this.callback(null,this.out)},Stream.prototype.flush=function(){for(var a=this.head;a;){if(!a.flushable)return a.error?(this.emit("error",a.error),dust.log("Chunk error ["+a.error+"] thrown. Ceasing to render this template.",WARN),void(this.flush=EMPTY_FUNC)):void 0;this.emit("data",a.data.join("")),a=a.next,this.head=a}this.emit("end")},Stream.prototype.emit=function(a,b){if(!this.events)return dust.log("No events to emit",INFO),!1;var c=this.events[a];if(!c)return dust.log("Event type ["+a+"] does not exist",WARN),!1;if("function"==typeof c)c(b);else if(dust.isArray(c))for(var d=c.slice(0),e=0,f=d.length;f>e;e++)d[e](b);else dust.log("Event Handler ["+c+"] is not of a type that is handled by emit",WARN)},Stream.prototype.on=function(a,b){return this.events||(this.events={}),this.events[a]?"function"==typeof this.events[a]?this.events[a]=[this.events[a],b]:this.events[a].push(b):(dust.log("Event type ["+a+"] does not exist. Using just the specified callback.",WARN),b?this.events[a]=b:dust.log("Callback for type ["+a+"] does not exist. Listener not registered.",WARN)),this},Stream.prototype.pipe=function(a){return this.on("data",function(b){try{a.write(b,"utf8")}catch(c){dust.log(c,ERROR)}}).on("end",function(){try{return a.end()}catch(b){dust.log(b,ERROR)}}).on("error",function(b){a.error(b)}),this},Chunk.prototype.write=function(a){var b=this.taps;return b&&(a=b.go(a)),this.data.push(a),this},Chunk.prototype.end=function(a){return a&&this.write(a),this.flushable=!0,this.root.flush(),this},Chunk.prototype.map=function(a){var b=new Chunk(this.root,this.next,this.taps),c=new Chunk(this.root,b,this.taps);return this.next=c,this.flushable=!0,a(c),b},Chunk.prototype.tap=function(a){var b=this.taps;return this.taps=b?b.push(a):new Tap(a),this},Chunk.prototype.untap=function(){return this.taps=this.taps.tail,this},Chunk.prototype.render=function(a,b){return a(this,b)},Chunk.prototype.reference=function(a,b,c,d){return"function"==typeof a&&(a.isFunction=!0,a=a.apply(b.current(),[this,b,null,{auto:c,filters:d}]),a instanceof Chunk)?a:dust.isEmpty(a)?this:this.write(dust.filter(a,c,d))},Chunk.prototype.section=function(a,b,c,d){if("function"==typeof a&&(a=a.apply(b.current(),[this,b,c,d]),a instanceof Chunk))return a;var e=c.block,f=c["else"];if(d&&(b=b.push(d)),dust.isArray(a)){if(e){var g=a.length,h=this;if(g>0){b.stack.head&&(b.stack.head.$len=g);for(var i=0;g>i;i++)b.stack.head&&(b.stack.head.$idx=i),h=e(h,b.push(a[i],i,g));return b.stack.head&&(b.stack.head.$idx=void 0,b.stack.head.$len=void 0),h}if(f)return f(this,b)}}else if(a===!0){if(e)return e(this,b)}else if(a||0===a){if(e)return e(this,b.push(a))}else if(f)return f(this,b);return dust.log("Not rendering section (#) block in template ["+b.getTemplateName()+"], because above key was not found",DEBUG),this},Chunk.prototype.exists=function(a,b,c){var d=c.block,e=c["else"];if(dust.isEmpty(a)){if(e)return e(this,b)}else if(d)return d(this,b);return dust.log("Not rendering exists (?) block in template ["+b.getTemplateName()+"], because above key was not found",DEBUG),this},Chunk.prototype.notexists=function(a,b,c){var d=c.block,e=c["else"];if(dust.isEmpty(a)){if(d)return d(this,b)}else if(e)return e(this,b);return dust.log("Not rendering not exists (^) block check in template ["+b.getTemplateName()+"], because above key was found",DEBUG),this},Chunk.prototype.block=function(a,b,c){var d=c.block;return a&&(d=a),d?d(this,b):this},Chunk.prototype.partial=function(a,b,c){var d;d=dust.makeBase(b.global),d.blocks=b.blocks,b.stack&&b.stack.tail&&(d.stack=b.stack.tail),c&&(d=d.push(c)),"string"==typeof a&&(d.templateName=a),d=d.push(b.stack.head);var e;return e="function"==typeof a?this.capture(a,d,function(a,b){d.templateName=d.templateName||a,dust.load(a,b,d).end()}):dust.load(a,this,d)},Chunk.prototype.helper=function(a,b,c,d){var e=this;try{return dust.helpers[a]?dust.helpers[a](e,b,c,d):(dust.log("Invalid helper ["+a+"]",WARN),e)}catch(f){return dust.log(f,ERROR),e}},Chunk.prototype.capture=function(a,b,c){return this.map(function(d){var e=new Stub(function(a,b){a?d.setError(a):c(b,d)});a(e.head,b).end()})},Chunk.prototype.setError=function(a){return this.error=a,this.root.flush(),this},Tap.prototype.push=function(a){return new Tap(a,this)},Tap.prototype.go=function(a){for(var b=this;b;)a=b.head(a),b=b.tail;return a};var HCHARS=new RegExp(/[&<>\"\']/),AMP=/&/g,LT=/</g,GT=/>/g,QUOT=/\"/g,SQUOT=/\'/g;dust.escapeHtml=function(a){return"string"==typeof a?HCHARS.test(a)?a.replace(AMP,"&").replace(LT,"<").replace(GT,">").replace(QUOT,""").replace(SQUOT,"'"):a:a};var BS=/\\/g,FS=/\//g,CR=/\r/g,LS=/\u2028/g,PS=/\u2029/g,NL=/\n/g,LF=/\f/g,SQ=/'/g,DQ=/"/g,TB=/\t/g;dust.escapeJs=function(a){return"string"==typeof a?a.replace(BS,"\\\\").replace(FS,"\\/").replace(DQ,'\\"').replace(SQ,"\\'").replace(CR,"\\r").replace(LS,"\\u2028").replace(PS,"\\u2029").replace(NL,"\\n").replace(LF,"\\f").replace(TB,"\\t"):a},"object"==typeof exports?module.exports=dust:root.dust=dust}(function(){return this}()),function(a,b){"object"==typeof exports?module.exports=b(require("./dust")):b(a.dust)}(this,function(dust){var a=function(){function b(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 c={parse:function(c,d){function e(a){var b={};for(var c in a)b[c]=a[c];return b}function f(a,b){for(var d=a.offset+b,e=a.offset;d>e;e++){var f=c.charAt(e);"\n"===f?(a.seenCR||a.line++,a.column=1,a.seenCR=!1):"\r"===f||"\u2028"===f||"\u2029"===f?(a.line++,a.column=1,a.seenCR=!0):(a.column++,a.seenCR=!1)}a.offset+=b}function g(a){R.offset<T.offset||(R.offset>T.offset&&(T=e(R),U=[]),U.push(a))}function h(){var a,b,c;for(c=e(R),a=[],b=i();null!==b;)a.push(b),b=i();return null!==a&&(a=function(a,b,c,d){return["body"].concat(d).concat([["line",b],["col",c]])}(c.offset,c.line,c.column,a)),null===a&&(R=e(c)),a}function i(){var a;return a=G(),null===a&&(a=H(),null===a&&(a=j(),null===a&&(a=q(),null===a&&(a=s(),null===a&&(a=p(),null===a&&(a=D())))))),a}function j(){var a,b,d,i,j,m,n,p,q;if(S++,p=e(R),q=e(R),a=k(),null!==a){for(b=[],d=O();null!==d;)b.push(d),d=O();null!==b?(d=K(),null!==d?(i=h(),null!==i?(j=o(),null!==j?(m=l(),m=null!==m?m:"",null!==m?(n=function(a,b,c,d,e,f,g){if(!g||d[1].text!==g.text)throw new Error("Expected end tag for "+d[1].text+" but it was not found. At line : "+b+", column : "+c);return!0}(R.offset,R.line,R.column,a,i,j,m)?"":null,null!==n?a=[a,b,d,i,j,m,n]:(a=null,R=e(q))):(a=null,R=e(q))):(a=null,R=e(q))):(a=null,R=e(q))):(a=null,R=e(q))):(a=null,R=e(q))}else a=null,R=e(q);if(null!==a&&(a=function(a,b,c,d,e,f){return f.push(["param",["literal","block"],e]),d.push(f),d.concat([["line",b],["col",c]])}(p.offset,p.line,p.column,a[0],a[3],a[4],a[5])),null===a&&(R=e(p)),null===a){if(p=e(R),q=e(R),a=k(),null!==a){for(b=[],d=O();null!==d;)b.push(d),d=O();null!==b?(47===c.charCodeAt(R.offset)?(d="/",f(R,1)):(d=null,0===S&&g('"/"')),null!==d?(i=K(),null!==i?a=[a,b,d,i]:(a=null,R=e(q))):(a=null,R=e(q))):(a=null,R=e(q))}else a=null,R=e(q);null!==a&&(a=function(a,b,c,d){return d.push(["bodies"]),d.concat([["line",b],["col",c]])}(p.offset,p.line,p.column,a[0])),null===a&&(R=e(p))}return S--,0===S&&null===a&&g("section"),a}function k(){var a,b,d,h,i,j,k,l;if(k=e(R),l=e(R),a=J(),null!==a)if(/^[#?^<+@%]/.test(c.charAt(R.offset))?(b=c.charAt(R.offset),f(R,1)):(b=null,0===S&&g("[#?^<+@%]")),null!==b){for(d=[],h=O();null!==h;)d.push(h),h=O();null!==d?(h=t(),null!==h?(i=m(),null!==i?(j=n(),null!==j?a=[a,b,d,h,i,j]:(a=null,R=e(l))):(a=null,R=e(l))):(a=null,R=e(l))):(a=null,R=e(l))}else a=null,R=e(l);else a=null,R=e(l);return null!==a&&(a=function(a,b,c,d,e,f,g){return[d,e,f,g]}(k.offset,k.line,k.column,a[1],a[3],a[4],a[5])),null===a&&(R=e(k)),a}function l(){var a,b,d,h,i,j,k,l;if(S++,k=e(R),l=e(R),a=J(),null!==a)if(47===c.charCodeAt(R.offset)?(b="/",f(R,1)):(b=null,0===S&&g('"/"')),null!==b){for(d=[],h=O();null!==h;)d.push(h),h=O();if(null!==d)if(h=t(),null!==h){for(i=[],j=O();null!==j;)i.push(j),j=O();null!==i?(j=K(),null!==j?a=[a,b,d,h,i,j]:(a=null,R=e(l))):(a=null,R=e(l))}else a=null,R=e(l);else a=null,R=e(l)}else a=null,R=e(l);else a=null,R=e(l);return null!==a&&(a=function(a,b,c,d){return d}(k.offset,k.line,k.column,a[3])),null===a&&(R=e(k)),S--,0===S&&null===a&&g("end tag"),a}function m(){var a,b,d,h,i;return d=e(R),h=e(R),i=e(R),58===c.charCodeAt(R.offset)?(a=":",f(R,1)):(a=null,0===S&&g('":"')),null!==a?(b=t(),null!==b?a=[a,b]:(a=null,R=e(i))):(a=null,R=e(i)),null!==a&&(a=function(a,b,c,d){return d}(h.offset,h.line,h.column,a[1])),null===a&&(R=e(h)),a=null!==a?a:"",null!==a&&(a=function(a,b,c,d){return d?["context",d]:["context"]}(d.offset,d.line,d.column,a)),null===a&&(R=e(d)),a}function n(){var a,b,d,h,i,j,k,l;if(S++,j=e(R),a=[],k=e(R),l=e(R),d=O(),null!==d)for(b=[];null!==d;)b.push(d),d=O();else b=null;for(null!==b?(d=y(),null!==d?(61===c.charCodeAt(R.offset)?(h="=",f(R,1)):(h=null,0===S&&g('"="')),null!==h?(i=u(),null===i&&(i=t(),null===i&&(i=B())),null!==i?b=[b,d,h,i]:(b=null,R=e(l))):(b=null,R=e(l))):(b=null,R=e(l))):(b=null,R=e(l)),null!==b&&(b=function(a,b,c,d,e){return["param",["literal",d],e]}(k.offset,k.line,k.column,b[1],b[3])),null===b&&(R=e(k));null!==b;){if(a.push(b),k=e(R),l=e(R),d=O(),null!==d)for(b=[];null!==d;)b.push(d),d=O();else b=null;null!==b?(d=y(),null!==d?(61===c.charCodeAt(R.offset)?(h="=",f(R,1)):(h=null,0===S&&g('"="')),null!==h?(i=u(),null===i&&(i=t(),null===i&&(i=B())),null!==i?b=[b,d,h,i]:(b=null,R=e(l))):(b=null,R=e(l))):(b=null,R=e(l))):(b=null,R=e(l)),null!==b&&(b=function(a,b,c,d,e){return["param",["literal",d],e]}(k.offset,k.line,k.column,b[1],b[3])),null===b&&(R=e(k))}return null!==a&&(a=function(a,b,c,d){return["params"].concat(d)}(j.offset,j.line,j.column,a)),null===a&&(R=e(j)),S--,0===S&&null===a&&g("params"),a}function o(){var a,b,d,i,j,k,l,m,n;for(S++,l=e(R),a=[],m=e(R),n=e(R),b=J(),null!==b?(58===c.charCodeAt(R.offset)?(d=":",f(R,1)):(d=null,0===S&&g('":"')),null!==d?(i=y(),null!==i?(j=K(),null!==j?(k=h(),null!==k?b=[b,d,i,j,k]:(b=null,R=e(n))):(b=null,R=e(n))):(b=null,R=e(n))):(b=null,R=e(n))):(b=null,R=e(n)),null!==b&&(b=function(a,b,c,d,e){return["param",["literal",d],e]}(m.offset,m.line,m.column,b[2],b[4])),null===b&&(R=e(m));null!==b;)a.push(b),m=e(R),n=e(R),b=J(),null!==b?(58===c.charCodeAt(R.offset)?(d=":",f(R,1)):(d=null,0===S&&g('":"')),null!==d?(i=y(),null!==i?(j=K(),null!==j?(k=h(),null!==k?b=[b,d,i,j,k]:(b=null,R=e(n))):(b=null,R=e(n))):(b=null,R=e(n))):(b=null,R=e(n))):(b=null,R=e(n)),null!==b&&(b=function(a,b,c,d,e){return["param",["literal",d],e]}(m.offset,m.line,m.column,b[2],b[4])),null===b&&(R=e(m));return null!==a&&(a=function(a,b,c,d){return["bodies"].concat(d)}(l.offset,l.line,l.column,a)),null===a&&(R=e(l)),S--,0===S&&null===a&&g("bodies"),a}function p(){var a,b,c,d,f,h;return S++,f=e(R),h=e(R),a=J(),null!==a?(b=t(),null!==b?(c=r(),null!==c?(d=K(),null!==d?a=[a,b,c,d]:(a=null,R=e(h))):(a=null,R=e(h))):(a=null,R=e(h))):(a=null,R=e(h)),null!==a&&(a=function(a,b,c,d,e){return["reference",d,e].concat([["line",b],["col",c]])}(f.offset,f.line,f.column,a[1],a[2])),null===a&&(R=e(f)),S--,0===S&&null===a&&g("reference"),a}function q(){var a,b,d,h,i,j,k,l,o,p,q,r;if(S++,p=e(R),q=e(R),a=J(),null!==a)if(62===c.charCodeAt(R.offset)?(b=">",f(R,1)):(b=null,0===S&&g('">"')),null===b&&(43===c.charCodeAt(R.offset)?(b="+",f(R,1)):(b=null,0===S&&g('"+"'))),null!==b){for(d=[],h=O();null!==h;)d.push(h),h=O();if(null!==d)if(r=e(R),h=y(),null!==h&&(h=function(a,b,c,d){return["literal",d]}(r.offset,r.line,r.column,h)),null===h&&(R=e(r)),null===h&&(h=B()),null!==h)if(i=m(),null!==i)if(j=n(),null!==j){for(k=[],l=O();null!==l;)k.push(l),l=O();null!==k?(47===c.charCodeAt(R.offset)?(l="/",f(R,1)):(l=null,0===S&&g('"/"')),null!==l?(o=K(),null!==o?a=[a,b,d,h,i,j,k,l,o]:(a=null,R=e(q))):(a=null,R=e(q))):(a=null,R=e(q))}else a=null,R=e(q);else a=null,R=e(q);else a=null,R=e(q);else a=null,R=e(q)}else a=null,R=e(q);else a=null,R=e(q);return null!==a&&(a=function(a,b,c,d,e,f,g){var h=">"===d?"partial":d;return[h,e,f,g].concat([["line",b],["col",c]])}(p.offset,p.line,p.column,a[1],a[3],a[4],a[5])),null===a&&(R=e(p)),S--,0===S&&null===a&&g("partial"),a}function r(){var a,b,d,h,i,j;for(S++,h=e(R),a=[],i=e(R),j=e(R),124===c.charCodeAt(R.offset)?(b="|",f(R,1)):(b=null,0===S&&g('"|"')),null!==b?(d=y(),null!==d?b=[b,d]:(b=null,R=e(j))):(b=null,R=e(j)),null!==b&&(b=function(a,b,c,d){return d}(i.offset,i.line,i.column,b[1])),null===b&&(R=e(i));null!==b;)a.push(b),i=e(R),j=e(R),124===c.charCodeAt(R.offset)?(b="|",f(R,1)):(b=null,0===S&&g('"|"')),null!==b?(d=y(),null!==d?b=[b,d]:(b=null,R=e(j))):(b=null,R=e(j)),null!==b&&(b=function(a,b,c,d){return d}(i.offset,i.line,i.column,b[1])),null===b&&(R=e(i));return null!==a&&(a=function(a,b,c,d){return["filters"].concat(d)}(h.offset,h.line,h.column,a)),null===a&&(R=e(h)),S--,0===S&&null===a&&g("filters"),a}function s(){var a,b,d,h,i,j;return S++,i=e(R),j=e(R),a=J(),null!==a?(126===c.charCodeAt(R.offset)?(b="~",f(R,1)):(b=null,0===S&&g('"~"')),null!==b?(d=y(),null!==d?(h=K(),null!==h?a=[a,b,d,h]:(a=null,R=e(j))):(a=null,R=e(j))):(a=null,R=e(j))):(a=null,R=e(j)),null!==a&&(a=function(a,b,c,d){return["special",d].concat([["line",b],["col",c]])}(i.offset,i.line,i.column,a[2])),null===a&&(R=e(i)),S--,0===S&&null===a&&g("special"),a}function t(){var a,b;return S++,b=e(R),a=x(),null!==a&&(a=function(a,b,c,d){var e=["path"].concat(d);return e.text=d[1].join("."),e}(b.offset,b.line,b.column,a)),null===a&&(R=e(b)),null===a&&(b=e(R),a=y(),null!==a&&(a=function(a,b,c,d){var e=["key",d];return e.text=d,e}(b.offset,b.line,b.column,a)),null===a&&(R=e(b))),S--,0===S&&null===a&&g("identifier"),a}function u(){var a,b;return S++,b=e(R),a=v(),null===a&&(a=w()),null!==a&&(a=function(a,b,c,d){return["literal",d]}(b.offset,b.line,b.column,a)),null===a&&(R=e(b)),S--,0===S&&null===a&&g("number"),a}function v(){var a,b,d,h,i,j;if(S++,i=e(R),j=e(R),a=w(),null!==a)if(46===c.charCodeAt(R.offset)?(b=".",f(R,1)):(b=null,0===S&&g('"."')),null!==b){if(h=w(),null!==h)for(d=[];null!==h;)d.push(h),h=w();else d=null;null!==d?a=[a,b,d]:(a=null,R=e(j))}else a=null,R=e(j);else a=null,R=e(j);return null!==a&&(a=function(a,b,c,d,e){return parseFloat(d+"."+e.join(""))}(i.offset,i.line,i.column,a[0],a[2])),null===a&&(R=e(i)),S--,0===S&&null===a&&g("float"),a}function w(){var a,b,d;if(S++,d=e(R),/^[0-9]/.test(c.charAt(R.offset))?(b=c.charAt(R.offset),f(R,1)):(b=null,0===S&&g("[0-9]")),null!==b)for(a=[];null!==b;)a.push(b),/^[0-9]/.test(c.charAt(R.offset))?(b=c.charAt(R.offset),f(R,1)):(b=null,0===S&&g("[0-9]"));else a=null;return null!==a&&(a=function(a,b,c,d){return parseInt(d.join(""),10)}(d.offset,d.line,d.column,a)),null===a&&(R=e(d)),S--,0===S&&null===a&&g("integer"),a}function x(){var a,b,d,h,i;if(S++,h=e(R),i=e(R),a=y(),a=null!==a?a:"",null!==a){if(d=A(),null===d&&(d=z()),null!==d)for(b=[];null!==d;)b.push(d),d=A(),null===d&&(d=z());else b=null;null!==b?a=[a,b]:(a=null,R=e(i))}else a=null,R=e(i);if(null!==a&&(a=function(a,b,c,d,e){return e=e[0],d&&e?(e.unshift(d),[!1,e].concat([["line",b],["col",c]])):[!0,e].concat([["line",b],["col",c]])}(h.offset,h.line,h.column,a[0],a[1])),null===a&&(R=e(h)),null===a){if(h=e(R),i=e(R),46===c.charCodeAt(R.offset)?(a=".",f(R,1)):(a=null,0===S&&g('"."')),null!==a){for(b=[],d=A(),null===d&&(d=z());null!==d;)b.push(d),d=A(),null===d&&(d=z());null!==b?a=[a,b]:(a=null,R=e(i))}else a=null,R=e(i);null!==a&&(a=function(a,b,c,d){return d.length>0?[!0,d[0]].concat([["line",b],["col",c]]):[!0,[]].concat([["line",b],["col",c]])}(h.offset,h.line,h.column,a[1])),null===a&&(R=e(h))}return S--,0===S&&null===a&&g("path"),a}function y(){var a,b,d,h,i;if(S++,h=e(R),i=e(R),/^[a-zA-Z_$]/.test(c.charAt(R.offset))?(a=c.charAt(R.offset),f(R,1)):(a=null,0===S&&g("[a-zA-Z_$]")),null!==a){for(b=[],/^[0-9a-zA-Z_$\-]/.test(c.charAt(R.offset))?(d=c.charAt(R.offset),f(R,1)):(d=null,0===S&&g("[0-9a-zA-Z_$\\-]"));null!==d;)b.push(d),/^[0-9a-zA-Z_$\-]/.test(c.charAt(R.offset))?(d=c.charAt(R.offset),f(R,1)):(d=null,0===S&&g("[0-9a-zA-Z_$\\-]"));null!==b?a=[a,b]:(a=null,R=e(i))}else a=null,R=e(i);return null!==a&&(a=function(a,b,c,d,e){return d+e.join("")}(h.offset,h.line,h.column,a[0],a[1])),null===a&&(R=e(h)),S--,0===S&&null===a&&g("key"),a}function z(){var a,b,d,h,i,j,k,l;if(S++,h=e(R),i=e(R),j=e(R),k=e(R),a=L(),null!==a){if(l=e(R),/^[0-9]/.test(c.charAt(R.offset))?(d=c.charAt(R.offset),f(R,1)):(d=null,0===S&&g("[0-9]")),null!==d)for(b=[];null!==d;)b.push(d),/^[0-9]/.test(c.charAt(R.offset))?(d=c.charAt(R.offset),f(R,1)):(d=null,0===S&&g("[0-9]"));else b=null;null!==b&&(b=function(a,b,c,d){return d.join("")}(l.offset,l.line,l.column,b)),null===b&&(R=e(l)),null===b&&(b=t()),null!==b?(d=M(),null!==d?a=[a,b,d]:(a=null,R=e(k))):(a=null,R=e(k))}else a=null,R=e(k);return null!==a&&(a=function(a,b,c,d){return d}(j.offset,j.line,j.column,a[1])),null===a&&(R=e(j)),null!==a?(b=A(),b=null!==b?b:"",null!==b?a=[a,b]:(a=null,R=e(i))):(a=null,R=e(i)),null!==a&&(a=function(a,b,c,d,e){return e?e.unshift(d):e=[d],e}(h.offset,h.line,h.column,a[0],a[1])),null===a&&(R=e(h)),S--,0===S&&null===a&&g("array"),a}function A(){var a,b,d,h,i,j,k;if(S++,h=e(R),i=e(R),j=e(R),k=e(R),46===c.charCodeAt(R.offset)?(b=".",f(R,1)):(b=null,0===S&&g('"."')),null!==b?(d=y(),null!==d?b=[b,d]:(b=null,R=e(k))):(b=null,R=e(k)),null!==b&&(b=function(a,b,c,d){return d}(j.offset,j.line,j.column,b[1])),null===b&&(R=e(j)),null!==b)for(a=[];null!==b;)a.push(b),j=e(R),k=e(R),46===c.charCodeAt(R.offset)?(b=".",f(R,1)):(b=null,0===S&&g('"."')),null!==b?(d=y(),null!==d?b=[b,d]:(b=null,R=e(k))):(b=null,R=e(k)),null!==b&&(b=function(a,b,c,d){return d}(j.offset,j.line,j.column,b[1])),null===b&&(R=e(j));else a=null;return null!==a?(b=z(),b=null!==b?b:"",null!==b?a=[a,b]:(a=null,R=e(i))):(a=null,R=e(i)),null!==a&&(a=function(a,b,c,d,e){return e?d.concat(e):d}(h.offset,h.line,h.column,a[0],a[1])),null===a&&(R=e(h)),S--,0===S&&null===a&&g("array_part"),a}function B(){var a,b,d,h,i;if(S++,h=e(R),i=e(R),34===c.charCodeAt(R.offset)?(a='"',f(R,1)):(a=null,0===S&&g('"\\""')),null!==a?(34===c.charCodeAt(R.offset)?(b='"',f(R,1)):(b=null,0===S&&g('"\\""')),null!==b?a=[a,b]:(a=null,R=e(i))):(a=null,R=e(i)),null!==a&&(a=function(a,b,c){return["literal",""].concat([["line",b],["col",c]])}(h.offset,h.line,h.column)),null===a&&(R=e(h)),null===a&&(h=e(R),i=e(R),34===c.charCodeAt(R.offset)?(a='"',f(R,1)):(a=null,0===S&&g('"\\""')),null!==a?(b=E(),null!==b?(34===c.charCodeAt(R.offset)?(d='"',f(R,1)):(d=null,0===S&&g('"\\""')),null!==d?a=[a,b,d]:(a=null,R=e(i))):(a=null,R=e(i))):(a=null,R=e(i)),null!==a&&(a=function(a,b,c,d){return["literal",d].concat([["line",b],["col",c]])}(h.offset,h.line,h.column,a[1])),null===a&&(R=e(h)),null===a)){if(h=e(R),i=e(R),34===c.charCodeAt(R.offset)?(a='"',f(R,1)):(a=null,0===S&&g('"\\""')),null!==a){if(d=C(),null!==d)for(b=[];null!==d;)b.push(d),d=C();else b=null;null!==b?(34===c.charCodeAt(R.offset)?(d='"',f(R,1)):(d=null,0===S&&g('"\\""')),null!==d?a=[a,b,d]:(a=null,R=e(i))):(a=null,R=e(i))}else a=null,R=e(i);null!==a&&(a=function(a,b,c,d){return["body"].concat(d).concat([["line",b],["col",c]])}(h.offset,h.line,h.column,a[1])),null===a&&(R=e(h))}return S--,0===S&&null===a&&g("inline"),a}function C(){var a,b;return a=s(),null===a&&(a=p(),null===a&&(b=e(R),a=E(),null!==a&&(a=function(a,b,c,d){return["buffer",d]}(b.offset,b.line,b.column,a)),null===a&&(R=e(b)))),a}function D(){var a,b,d,h,i,j,k,l,m,n;if(S++,k=e(R),l=e(R),a=N(),null!==a){for(b=[],d=O();null!==d;)b.push(d),d=O();null!==b?a=[a,b]:(a=null,R=e(l))}else a=null,R=e(l);if(null!==a&&(a=function(a,b,c,d,e){return["format",d,e.join("")].concat([["line",b],["col",c]])}(k.offset,k.line,k.column,a[0],a[1])),null===a&&(R=e(k)),null===a){if(k=e(R),l=e(R),m=e(R),n=e(R),S++,b=I(),S--,null===b?b="":(b=null,R=e(n)),null!==b?(n=e(R),S++,d=G(),S--,null===d?d="":(d=null,R=e(n)),null!==d?(n=e(R),S++,h=H(),S--,null===h?h="":(h=null,R=e(n)),null!==h?(n=e(R),S++,i=N(),S--,null===i?i="":(i=null,R=e(n)),null!==i?(c.length>R.offset?(j=c.charAt(R.offset),f(R,1)):(j=null,0===S&&g("any character")),null!==j?b=[b,d,h,i,j]:(b=null,R=e(m))):(b=null,R=e(m))):(b=null,R=e(m))):(b=null,R=e(m))):(b=null,R=e(m)),null!==b&&(b=function(a,b,c,d){return d}(l.offset,l.line,l.column,b[4])),null===b&&(R=e(l)),null!==b)for(a=[];null!==b;)a.push(b),l=e(R),m=e(R),n=e(R),S++,b=I(),S--,null===b?b="":(b=null,R=e(n)),null!==b?(n=e(R),S++,d=G(),S--,null===d?d="":(d=null,R=e(n)),null!==d?(n=e(R),S++,h=H(),S--,null===h?h="":(h=null,R=e(n)),null!==h?(n=e(R),S++,i=N(),S--,null===i?i="":(i=null,R=e(n)),null!==i?(c.length>R.offset?(j=c.charAt(R.offset),f(R,1)):(j=null,0===S&&g("any character")),null!==j?b=[b,d,h,i,j]:(b=null,R=e(m))):(b=null,R=e(m))):(b=null,R=e(m))):(b=null,R=e(m))):(b=null,R=e(m)),null!==b&&(b=function(a,b,c,d){return d}(l.offset,l.line,l.column,b[4])),null===b&&(R=e(l));else a=null;null!==a&&(a=function(a,b,c,d){return["buffer",d.join("")].concat([["line",b],["col",c]])}(k.offset,k.line,k.column,a)),null===a&&(R=e(k))}return S--,0===S&&null===a&&g("buffer"),a}function E(){var a,b,d,h,i,j,k;if(S++,h=e(R),i=e(R),j=e(R),k=e(R),S++,b=I(),S--,null===b?b="":(b=null,R=e(k)),null!==b?(d=F(),null===d&&(/^[^"]/.test(c.charAt(R.offset))?(d=c.charAt(R.offset),f(R,1)):(d=null,0===S&&g('[^"]'))),null!==d?b=[b,d]:(b=null,R=e(j))):(b=null,R=e(j)),null!==b&&(b=function(a,b,c,d){return d}(i.offset,i.line,i.column,b[1])),null===b&&(R=e(i)),null!==b)for(a=[];null!==b;)a.push(b),i=e(R),j=e(R),k=e(R),S++,b=I(),S--,null===b?b="":(b=null,R=e(k)),null!==b?(d=F(),null===d&&(/^[^"]/.test(c.charAt(R.offset))?(d=c.charAt(R.offset),f(R,1)):(d=null,0===S&&g('[^"]'))),null!==d?b=[b,d]:(b=null,R=e(j))):(b=null,R=e(j)),null!==b&&(b=function(a,b,c,d){return d}(i.offset,i.line,i.column,b[1])),null===b&&(R=e(i));else a=null;return null!==a&&(a=function(a,b,c,d){return d.join("")}(h.offset,h.line,h.column,a)),null===a&&(R=e(h)),S--,0===S&&null===a&&g("literal"),a}function F(){var a,b;return b=e(R),'\\"'===c.substr(R.offset,2)?(a='\\"',f(R,2)):(a=null,0===S&&g('"\\\\\\""')),null!==a&&(a=function(){return'"'}(b.offset,b.line,b.column)),null===a&&(R=e(b)),a}function G(){var a,b,d,h,i,j,k,l,m;if(S++,i=e(R),j=e(R),"{`"===c.substr(R.offset,2)?(a="{`",f(R,2)):(a=null,0===S&&g('"{`"')),null!==a){for(b=[],k=e(R),l=e(R),m=e(R),S++,"`}"===c.substr(R.offset,2)?(d="`}",f(R,2)):(d=null,0===S&&g('"`}"')),S--,null===d?d="":(d=null,R=e(m)),null!==d?(c.length>R.offset?(h=c.charAt(R.offset),f(R,1)):(h=null,0===S&&g("any character")),null!==h?d=[d,h]:(d=null,R=e(l))):(d=null,R=e(l)),null!==d&&(d=function(a,b,c,d){return d}(k.offset,k.line,k.column,d[1])),null===d&&(R=e(k));null!==d;)b.push(d),k=e(R),l=e(R),m=e(R),S++,"`}"===c.substr(R.offset,2)?(d="`}",f(R,2)):(d=null,0===S&&g('"`}"')),S--,null===d?d="":(d=null,R=e(m)),null!==d?(c.length>R.offset?(h=c.charAt(R.offset),f(R,1)):(h=null,0===S&&g("any character")),null!==h?d=[d,h]:(d=null,R=e(l))):(d=null,R=e(l)),null!==d&&(d=function(a,b,c,d){return d}(k.offset,k.line,k.column,d[1])),null===d&&(R=e(k));null!==b?("`}"===c.substr(R.offset,2)?(d="`}",f(R,2)):(d=null,0===S&&g('"`}"')),null!==d?a=[a,b,d]:(a=null,R=e(j))):(a=null,R=e(j))}else a=null,R=e(j);return null!==a&&(a=function(a,b,c,d){return["raw",d.join("")].concat([["line",b],["col",c]])}(i.offset,i.line,i.column,a[1])),null===a&&(R=e(i)),S--,0===S&&null===a&&g("raw"),a}function H(){var a,b,d,h,i,j,k,l,m;if(S++,i=e(R),j=e(R),"{!"===c.substr(R.offset,2)?(a="{!",f(R,2)):(a=null,0===S&&g('"{!"')),null!==a){for(b=[],k=e(R),l=e(R),m=e(R),S++,"!}"===c.substr(R.offset,2)?(d="!}",f(R,2)):(d=null,0===S&&g('"!}"')),S--,null===d?d="":(d=null,R=e(m)),null!==d?(c.length>R.offset?(h=c.charAt(R.offset),f(R,1)):(h=null,0===S&&g("any character")),null!==h?d=[d,h]:(d=null,R=e(l))):(d=null,R=e(l)),null!==d&&(d=function(a,b,c,d){return d}(k.offset,k.line,k.column,d[1])),null===d&&(R=e(k));null!==d;)b.push(d),k=e(R),l=e(R),m=e(R),S++,"!}"===c.substr(R.offset,2)?(d="!}",f(R,2)):(d=null,0===S&&g('"!}"')),S--,null===d?d="":(d=null,R=e(m)),null!==d?(c.length>R.offset?(h=c.charAt(R.offset),f(R,1)):(h=null,0===S&&g("any character")),null!==h?d=[d,h]:(d=null,R=e(l))):(d=null,R=e(l)),null!==d&&(d=function(a,b,c,d){return d}(k.offset,k.line,k.column,d[1])),null===d&&(R=e(k));null!==b?("!}"===c.substr(R.offset,2)?(d="!}",f(R,2)):(d=null,0===S&&g('"!}"')),null!==d?a=[a,b,d]:(a=null,R=e(j))):(a=null,R=e(j))}else a=null,R=e(j);return null!==a&&(a=function(a,b,c,d){return["comment",d.join("")].concat([["line",b],["col",c]])}(i.offset,i.line,i.column,a[1])),null===a&&(R=e(i)),S--,0===S&&null===a&&g("comment"),a}function I(){var a,b,d,h,i,j,k,l,m,n,o;if(m=e(R),a=J(),null!==a){for(b=[],d=O();null!==d;)b.push(d),d=O();if(null!==b)if(/^[#?^><+%:@\/~%]/.test(c.charAt(R.offset))?(d=c.charAt(R.offset),f(R,1)):(d=null,0===S&&g("[#?^><+%:@\\/~%]")),null!==d){for(h=[],i=O();null!==i;)h.push(i),i=O();if(null!==h){if(n=e(R),o=e(R),S++,j=K(),S--,null===j?j="":(j=null,R=e(o)),null!==j?(o=e(R),S++,k=N(),S--,null===k?k="":(k=null,R=e(o)),null!==k?(c.length>R.offset?(l=c.charAt(R.offset),f(R,1)):(l=null,0===S&&g("any character")),null!==l?j=[j,k,l]:(j=null,R=e(n))):(j=null,R=e(n))):(j=null,R=e(n)),null!==j)for(i=[];null!==j;)i.push(j),n=e(R),o=e(R),S++,j=K(),S--,null===j?j="":(j=null,R=e(o)),null!==j?(o=e(R),S++,k=N(),S--,null===k?k="":(k=null,R=e(o)),null!==k?(c.length>R.offset?(l=c.charAt(R.offset),f(R,1)):(l=null,0===S&&g("any character")),null!==l?j=[j,k,l]:(j=null,R=e(n))):(j=null,R=e(n))):(j=null,R=e(n));else i=null;if(null!==i){for(j=[],k=O();null!==k;)j.push(k),k=O();null!==j?(k=K(),null!==k?a=[a,b,d,h,i,j,k]:(a=null,R=e(m))):(a=null,R=e(m))}else a=null,R=e(m)}else a=null,R=e(m)}else a=null,R=e(m);else a=null,R=e(m)}else a=null,R=e(m);return null===a&&(a=p()),a}function J(){var a;return 123===c.charCodeAt(R.offset)?(a="{",f(R,1)):(a=null,0===S&&g('"{"')),a}function K(){var a;return 125===c.charCodeAt(R.offset)?(a="}",f(R,1)):(a=null,0===S&&g('"}"')),a}function L(){var a;return 91===c.charCodeAt(R.offset)?(a="[",f(R,1)):(a=null,0===S&&g('"["')),a}function M(){var a;return 93===c.charCodeAt(R.offset)?(a="]",f(R,1)):(a=null,0===S&&g('"]"')),a -}function N(){var a;return 10===c.charCodeAt(R.offset)?(a="\n",f(R,1)):(a=null,0===S&&g('"\\n"')),null===a&&("\r\n"===c.substr(R.offset,2)?(a="\r\n",f(R,2)):(a=null,0===S&&g('"\\r\\n"')),null===a&&(13===c.charCodeAt(R.offset)?(a="\r",f(R,1)):(a=null,0===S&&g('"\\r"')),null===a&&(8232===c.charCodeAt(R.offset)?(a="\u2028",f(R,1)):(a=null,0===S&&g('"\\u2028"')),null===a&&(8233===c.charCodeAt(R.offset)?(a="\u2029",f(R,1)):(a=null,0===S&&g('"\\u2029"')))))),a}function O(){var a;return/^[\t\x0B\f \xA0\uFEFF]/.test(c.charAt(R.offset))?(a=c.charAt(R.offset),f(R,1)):(a=null,0===S&&g("[\\t\\x0B\\f \\xA0\\uFEFF]")),null===a&&(a=N()),a}function P(a){a.sort();for(var b=null,c=[],d=0;d<a.length;d++)a[d]!==b&&(c.push(a[d]),b=a[d]);return c}var Q={body:h,part:i,section:j,sec_tag_start:k,end_tag:l,context:m,params:n,bodies:o,reference:p,partial:q,filters:r,special:s,identifier:t,number:u,"float":v,integer:w,path:x,key:y,array:z,array_part:A,inline:B,inline_part:C,buffer:D,literal:E,esc:F,raw:G,comment:H,tag:I,ld:J,rd:K,lb:L,rb:M,eol:N,ws:O};if(void 0!==d){if(void 0===Q[d])throw new Error("Invalid rule name: "+b(d)+".")}else d="body";var R={offset:0,line:1,column:1,seenCR:!1},S=0,T={offset:0,line:1,column:1,seenCR:!1},U=[],V=Q[d]();if(null===V||R.offset!==c.length){var W=Math.max(R.offset,T.offset),X=W<c.length?c.charAt(W):null,Y=R.offset>T.offset?R:T;throw new a.SyntaxError(P(U),X,W,Y.line,Y.column)}return V},toSource:function(){return this._source}};return c.SyntaxError=function(a,c,d,e,f){function g(a,c){var d,e;switch(a.length){case 0:d="end of input";break;case 1:d=a[0];break;default:d=a.slice(0,a.length-1).join(", ")+" or "+a[a.length-1]}return e=c?b(c):"end of input","Expected "+d+" but "+e+" found."}this.name="SyntaxError",this.expected=a,this.found=c,this.message=g(a,c),this.offset=d,this.line=e,this.column=f},c.SyntaxError.prototype=Error.prototype,c}();return dust.parse=a.parse,a}),function(a,b){"object"==typeof exports?module.exports=b(require("./parser").parse,require("./dust")):b(a.dust.parse,a.dust)}(this,function(a,dust){function b(a){var b={};return n.filterNode(b,a)}function c(a,b){var c,d,e,f=[b[0]];for(c=1,d=b.length;d>c;c++)e=n.filterNode(a,b[c]),e&&f.push(e);return f}function d(a,b){var c,d,e,f,g=[b[0]];for(d=1,e=b.length;e>d;d++)f=n.filterNode(a,b[d]),f&&("buffer"===f[0]?c?c[1]+=f[1]:(c=f,g.push(f)):(c=null,g.push(f)));return g}function e(a,b){return["buffer",p[b[1]]]}function f(a,b){return b}function g(){}function h(a,b){var c={name:b,bodies:[],blocks:{},index:0,auto:"h"};return"(function(){dust.register("+(b?'"'+b+'"':"null")+","+n.compileNode(c,a)+");"+i(c)+j(c)+"return body_0;})();"}function i(a){var b,c=[],d=a.blocks;for(b in d)c.push('"'+b+'":'+d[b]);return c.length?(a.blocks="ctx=ctx.shiftBlocks(blocks);","var blocks={"+c.join(",")+"};"):a.blocks=""}function j(a){var b,c,d=[],e=a.bodies,f=a.blocks;for(b=0,c=e.length;c>b;b++)d[b]="function body_"+b+"(chk,ctx){"+f+"return chk"+e[b]+";}";return d.join("")}function k(a,b){var c,d,e="";for(c=1,d=b.length;d>c;c++)e+=n.compileNode(a,b[c]);return e}function l(a,b,c){return"."+c+"("+n.compileNode(a,b[1])+","+n.compileNode(a,b[2])+","+n.compileNode(a,b[4])+","+n.compileNode(a,b[3])+")"}function m(a){return a.replace(q,"\\\\").replace(r,'\\"').replace(s,"\\f").replace(t,"\\n").replace(u,"\\r").replace(v,"\\t")}var n={},o=dust.isArray;n.compile=function(c,d){d||null===d||dust.log(new Error("Template name parameter cannot be undefined when calling dust.compile"),"ERROR");try{var e=b(a(c));return h(e,d)}catch(f){if(!f.line||!f.column)throw f;throw new SyntaxError(f.message+" At line : "+f.line+", column : "+f.column)}},n.filterNode=function(a,b){return n.optimizers[b[0]](a,b)},n.optimizers={body:d,buffer:f,special:e,format:g,reference:c,"#":c,"?":c,"^":c,"<":c,"+":c,"@":c,"%":c,partial:c,context:c,params:c,bodies:c,param:c,filters:f,key:f,path:f,literal:f,raw:f,comment:g,line:g,col:g},n.pragmas={esc:function(a,b,c){var d,e=a.auto;return b||(b="h"),a.auto="s"===b?"":b,d=k(a,c.block),a.auto=e,d}};var p={s:" ",n:"\n",r:"\r",lb:"{",rb:"}"};n.compileNode=function(a,b){return n.nodes[b[0]](a,b)},n.nodes={body:function(a,b){var c=a.index++,d="body_"+c;return a.bodies[c]=k(a,b),d},buffer:function(a,b){return".write("+w(b[1])+")"},format:function(a,b){return".write("+w(b[1]+b[2])+")"},reference:function(a,b){return".reference("+n.compileNode(a,b[1])+",ctx,"+n.compileNode(a,b[2])+")"},"#":function(a,b){return l(a,b,"section")},"?":function(a,b){return l(a,b,"exists")},"^":function(a,b){return l(a,b,"notexists")},"<":function(a,b){for(var c=b[4],d=1,e=c.length;e>d;d++){var f=c[d],g=f[1][1];if("block"===g)return a.blocks[b[1].text]=n.compileNode(a,f[2]),""}return""},"+":function(a,b){return"undefined"==typeof b[1].text&&"undefined"==typeof b[4]?".block(ctx.getBlock("+n.compileNode(a,b[1])+",chk, ctx),"+n.compileNode(a,b[2])+", {},"+n.compileNode(a,b[3])+")":".block(ctx.getBlock("+w(b[1].text)+"),"+n.compileNode(a,b[2])+","+n.compileNode(a,b[4])+","+n.compileNode(a,b[3])+")"},"@":function(a,b){return".helper("+w(b[1].text)+","+n.compileNode(a,b[2])+","+n.compileNode(a,b[4])+","+n.compileNode(a,b[3])+")"},"%":function(a,b){var c,d,e,f,g,h,i,j,k,l=b[1][1];if(!n.pragmas[l])return"";for(c=b[4],d={},j=1,k=c.length;k>j;j++)h=c[j],d[h[1][1]]=h[2];for(e=b[3],f={},j=1,k=e.length;k>j;j++)i=e[j],f[i[1][1]]=i[2][1];return g=b[2][1]?b[2][1].text:null,n.pragmas[l](a,g,d,f)},partial:function(a,b){return".partial("+n.compileNode(a,b[1])+","+n.compileNode(a,b[2])+","+n.compileNode(a,b[3])+")"},context:function(a,b){return b[1]?"ctx.rebase("+n.compileNode(a,b[1])+")":"ctx"},params:function(a,b){for(var c=[],d=1,e=b.length;e>d;d++)c.push(n.compileNode(a,b[d]));return c.length?"{"+c.join(",")+"}":"null"},bodies:function(a,b){for(var c=[],d=1,e=b.length;e>d;d++)c.push(n.compileNode(a,b[d]));return"{"+c.join(",")+"}"},param:function(a,b){return n.compileNode(a,b[1])+":"+n.compileNode(a,b[2])},filters:function(a,b){for(var c=[],d=1,e=b.length;e>d;d++){var f=b[d];c.push('"'+f+'"')}return'"'+a.auto+'"'+(c.length?",["+c.join(",")+"]":"")},key:function(a,b){return'ctx.get(["'+b[1]+'"], false)'},path:function(a,b){for(var c=b[1],d=b[2],e=[],f=0,g=d.length;g>f;f++)e.push(o(d[f])?n.compileNode(a,d[f]):'"'+d[f]+'"');return"ctx.getPath("+c+", ["+e.join(",")+"])"},literal:function(a,b){return w(b[1])},raw:function(a,b){return".write("+w(b[1])+")"}};var q=/\\/g,r=/"/g,s=/\f/g,t=/\n/g,u=/\r/g,v=/\t/g,w="undefined"==typeof JSON?function(a){return'"'+m(a)+'"'}:JSON.stringify;return dust.compile=n.compile,dust.filterNode=n.filterNode,dust.optimizers=n.optimizers,dust.pragmas=n.pragmas,dust.compileNode=n.compileNode,dust.nodes=n.nodes,n}); \ No newline at end of file +!function(root){function Context(a,b,c,d){this.stack=a,this.global=b,this.blocks=c,this.templateName=d}function Stack(a,b,c,d){this.tail=b,this.isObject=a&&"object"==typeof a,this.head=a,this.index=c,this.of=d}function Stub(a){this.head=new Chunk(this),this.callback=a,this.out=""}function Stream(){this.head=new Chunk(this)}function Chunk(a,b,c){this.root=a,this.next=b,this.data=[],this.flushable=!1,this.taps=c}function Tap(a,b){this.head=a,this.tail=b}var dust={},NONE="NONE",ERROR="ERROR",WARN="WARN",INFO="INFO",DEBUG="DEBUG",loggingLevels=[DEBUG,INFO,WARN,ERROR,NONE],EMPTY_FUNC=function(){},logger={},originalLog,loggerContext;dust.debugLevel=NONE,dust.silenceErrors=!1,root&&root.console&&root.console.log&&(loggerContext=root.console,originalLog=root.console.log),logger.log=loggerContext?function(){logger.log="function"==typeof originalLog?function(){originalLog.apply(loggerContext,arguments)}:function(){var a=Array.prototype.slice.apply(arguments).join(" ");originalLog(a)},logger.log.apply(this,arguments)}:function(){},dust.log=function(a,b){if(b=b||INFO,dust.debugLevel!==NONE&&dust.indexInArray(loggingLevels,b)>=dust.indexInArray(loggingLevels,dust.debugLevel)&&(dust.logQueue||(dust.logQueue=[]),dust.logQueue.push({message:a,type:b}),logger.log("[DUST "+b+"]: "+a)),!dust.silenceErrors&&b===ERROR)throw"string"==typeof a?new Error(a):a},dust.onError=function(a,b){if(logger.log("[!!!DEPRECATION WARNING!!!]: dust.onError will no longer return a chunk object."),dust.log(a.message||a,ERROR),dust.silenceErrors)return b;throw a},dust.helpers={},dust.cache={},dust.register=function(a,b){a&&(dust.cache[a]=b)},dust.render=function(a,b,c){var d=new Stub(c).head;try{dust.load(a,d,Context.wrap(b,a)).end()}catch(e){dust.log(e,ERROR)}},dust.stream=function(a,b){var c=new Stream;return dust.nextTick(function(){try{dust.load(a,c.head,Context.wrap(b,a)).end()}catch(d){dust.log(d,ERROR)}}),c},dust.renderSource=function(a,b,c){return dust.compileFn(a)(b,c)},dust.compileFn=function(a,b){b=b||null;var c=dust.loadSource(dust.compile(a,b));return function(a,d){var e=d?new Stub(d):new Stream;return dust.nextTick(function(){"function"==typeof c?c(e.head,Context.wrap(a,b)).end():dust.log(new Error("Template ["+b+"] cannot be resolved to a Dust function"),ERROR)}),e}},dust.load=function(a,b,c){var d=dust.cache[a];return d?d(b,c):dust.onLoad?b.map(function(b){dust.onLoad(a,function(d,e){return d?b.setError(d):(dust.cache[a]||dust.loadSource(dust.compile(e,a)),void dust.cache[a](b,c).end())})}):b.setError(new Error("Template Not Found: "+a))},dust.loadSource=function(source,path){return eval(source)},dust.isArray=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},dust.indexInArray=function(a,b,c){if(c=+c||0,Array.prototype.indexOf)return a.indexOf(b,c);if(void 0===a||null===a)throw new TypeError('cannot call method "indexOf" of null');var d=a.length;for(1/0===Math.abs(c)&&(c=0),0>c&&(c+=d,0>c&&(c=0));d>c;c++)if(a[c]===b)return c;return-1},dust.nextTick=function(){return function(a){setTimeout(a,0)}}(),dust.isEmpty=function(a){return dust.isArray(a)&&!a.length?!0:0===a?!1:!a},dust.filter=function(a,b,c){if(c)for(var d=0,e=c.length;e>d;d++){var f=c[d];"s"===f?b=null:"function"==typeof dust.filters[f]?a=dust.filters[f](a):dust.log("Invalid filter ["+f+"]",WARN)}return b&&(a=dust.filters[b](a)),a},dust.filters={h:function(a){return dust.escapeHtml(a)},j:function(a){return dust.escapeJs(a)},u:encodeURI,uc:encodeURIComponent,js:function(a){return JSON?JSON.stringify(a):(dust.log("JSON is undefined. JSON stringify has not been used on ["+a+"]",WARN),a)},jp:function(a){return JSON?JSON.parse(a):(dust.log("JSON is undefined. JSON parse has not been used on ["+a+"]",WARN),a)}},dust.makeBase=function(a){return new Context(new Stack,a)},Context.wrap=function(a,b){return a instanceof Context?a:new Context(new Stack(a),{},null,b)},Context.prototype.get=function(a,b){return"string"==typeof a&&("."===a[0]&&(b=!0,a=a.substr(1)),a=a.split(".")),this._get(b,a)},Context.prototype._get=function(a,b){var c,d,e,f,g=this.stack,h=1;if(d=b[0],e=b.length,a&&0===e)f=g,g=g.head;else{if(a)g&&(g=g.head?g.head[d]:void 0);else{for(;g&&(!g.isObject||(f=g.head,c=g.head[d],void 0===c));)g=g.tail;g=void 0!==c?c:this.global?this.global[d]:void 0}for(;g&&e>h;)f=g,g=g[b[h]],h++}if("function"==typeof g){var i=function(){try{return g.apply(f,arguments)}catch(a){return dust.log(a,ERROR)}};return i.isFunction=!0,i}return void 0===g&&dust.log("Cannot find the value for reference [{"+b.join(".")+"}] in template ["+this.getTemplateName()+"]"),g},Context.prototype.getPath=function(a,b){return this._get(a,b)},Context.prototype.push=function(a,b,c){return new Context(new Stack(a,this.stack,b,c),this.global,this.blocks,this.getTemplateName())},Context.prototype.rebase=function(a){return new Context(new Stack(a),this.global,this.blocks,this.getTemplateName())},Context.prototype.current=function(){return this.stack.head},Context.prototype.getBlock=function(a){if("function"==typeof a){var b=new Chunk;a=a(b,this).data.join("")}var c=this.blocks;if(!c)return void dust.log("No blocks for context[{"+a+"}] in template ["+this.getTemplateName()+"]",DEBUG);for(var d,e=c.length;e--;)if(d=c[e][a])return d},Context.prototype.shiftBlocks=function(a){var b,c=this.blocks;return a?(b=c?c.concat([a]):[a],new Context(this.stack,this.global,b,this.getTemplateName())):this},Context.prototype.getTemplateName=function(){return this.templateName},Stub.prototype.flush=function(){for(var a=this.head;a;){if(!a.flushable)return a.error?(this.callback(a.error),dust.log("Chunk error ["+a.error+"] thrown. Ceasing to render this template.",WARN),void(this.flush=EMPTY_FUNC)):void 0;this.out+=a.data.join(""),a=a.next,this.head=a}this.callback(null,this.out)},Stream.prototype.flush=function(){for(var a=this.head;a;){if(!a.flushable)return a.error?(this.emit("error",a.error),dust.log("Chunk error ["+a.error+"] thrown. Ceasing to render this template.",WARN),void(this.flush=EMPTY_FUNC)):void 0;this.emit("data",a.data.join("")),a=a.next,this.head=a}this.emit("end")},Stream.prototype.emit=function(a,b){if(!this.events)return dust.log("No events to emit",INFO),!1;var c=this.events[a];if(!c)return dust.log("Event type ["+a+"] does not exist",WARN),!1;if("function"==typeof c)c(b);else if(dust.isArray(c))for(var d=c.slice(0),e=0,f=d.length;f>e;e++)d[e](b);else dust.log("Event Handler ["+c+"] is not of a type that is handled by emit",WARN)},Stream.prototype.on=function(a,b){return this.events||(this.events={}),this.events[a]?"function"==typeof this.events[a]?this.events[a]=[this.events[a],b]:this.events[a].push(b):(dust.log("Event type ["+a+"] does not exist. Using just the specified callback.",WARN),b?this.events[a]=b:dust.log("Callback for type ["+a+"] does not exist. Listener not registered.",WARN)),this},Stream.prototype.pipe=function(a){return this.on("data",function(b){try{a.write(b,"utf8")}catch(c){dust.log(c,ERROR)}}).on("end",function(){try{return a.end()}catch(b){dust.log(b,ERROR)}}).on("error",function(b){a.error(b)}),this},Chunk.prototype.write=function(a){var b=this.taps;return b&&(a=b.go(a)),this.data.push(a),this},Chunk.prototype.end=function(a){return a&&this.write(a),this.flushable=!0,this.root.flush(),this},Chunk.prototype.map=function(a){var b=new Chunk(this.root,this.next,this.taps),c=new Chunk(this.root,b,this.taps);return this.next=c,this.flushable=!0,a(c),b},Chunk.prototype.tap=function(a){var b=this.taps;return this.taps=b?b.push(a):new Tap(a),this},Chunk.prototype.untap=function(){return this.taps=this.taps.tail,this},Chunk.prototype.render=function(a,b){return a(this,b)},Chunk.prototype.reference=function(a,b,c,d){return"function"==typeof a&&(a.isFunction=!0,a=a.apply(b.current(),[this,b,null,{auto:c,filters:d}]),a instanceof Chunk)?a:dust.isEmpty(a)?this:this.write(dust.filter(a,c,d))},Chunk.prototype.section=function(a,b,c,d){if("function"==typeof a&&(a=a.apply(b.current(),[this,b,c,d]),a instanceof Chunk))return a;var e=c.block,f=c["else"];if(d&&(b=b.push(d)),dust.isArray(a)){if(e){var g=a.length,h=this;if(g>0){b.stack.head&&(b.stack.head.$len=g);for(var i=0;g>i;i++)b.stack.head&&(b.stack.head.$idx=i),h=e(h,b.push(a[i],i,g));return b.stack.head&&(b.stack.head.$idx=void 0,b.stack.head.$len=void 0),h}if(f)return f(this,b)}}else if(a===!0){if(e)return e(this,b)}else if(a||0===a){if(e)return e(this,b.push(a))}else if(f)return f(this,b);return dust.log("Not rendering section (#) block in template ["+b.getTemplateName()+"], because above key was not found",DEBUG),this},Chunk.prototype.exists=function(a,b,c){var d=c.block,e=c["else"];if(dust.isEmpty(a)){if(e)return e(this,b)}else if(d)return d(this,b);return dust.log("Not rendering exists (?) block in template ["+b.getTemplateName()+"], because above key was not found",DEBUG),this},Chunk.prototype.notexists=function(a,b,c){var d=c.block,e=c["else"];if(dust.isEmpty(a)){if(d)return d(this,b)}else if(e)return e(this,b);return dust.log("Not rendering not exists (^) block check in template ["+b.getTemplateName()+"], because above key was found",DEBUG),this},Chunk.prototype.block=function(a,b,c){var d=c.block;return a&&(d=a),d?d(this,b):this},Chunk.prototype.partial=function(a,b,c){var d;d=dust.makeBase(b.global),d.blocks=b.blocks,b.stack&&b.stack.tail&&(d.stack=b.stack.tail),c&&(d=d.push(c)),"string"==typeof a&&(d.templateName=a),d=d.push(b.stack.head);var e;return e="function"==typeof a?this.capture(a,d,function(a,b){d.templateName=d.templateName||a,dust.load(a,b,d).end()}):dust.load(a,this,d)},Chunk.prototype.helper=function(a,b,c,d){var e=this;try{return dust.helpers[a]?dust.helpers[a](e,b,c,d):(dust.log("Invalid helper ["+a+"]",WARN),e)}catch(f){return dust.log(f,ERROR),e}},Chunk.prototype.capture=function(a,b,c){return this.map(function(d){var e=new Stub(function(a,b){a?d.setError(a):c(b,d)});a(e.head,b).end()})},Chunk.prototype.setError=function(a){return this.error=a,this.root.flush(),this},Tap.prototype.push=function(a){return new Tap(a,this)},Tap.prototype.go=function(a){for(var b=this;b;)a=b.head(a),b=b.tail;return a};var HCHARS=new RegExp(/[&<>\"\']/),AMP=/&/g,LT=/</g,GT=/>/g,QUOT=/\"/g,SQUOT=/\'/g;dust.escapeHtml=function(a){return"string"==typeof a&&HCHARS.test(a)?a.replace(AMP,"&").replace(LT,"<").replace(GT,">").replace(QUOT,""").replace(SQUOT,"'"):a};var BS=/\\/g,FS=/\//g,CR=/\r/g,LS=/\u2028/g,PS=/\u2029/g,NL=/\n/g,LF=/\f/g,SQ=/'/g,DQ=/"/g,TB=/\t/g;dust.escapeJs=function(a){return"string"==typeof a?a.replace(BS,"\\\\").replace(FS,"\\/").replace(DQ,'\\"').replace(SQ,"\\'").replace(CR,"\\r").replace(LS,"\\u2028").replace(PS,"\\u2029").replace(NL,"\\n").replace(LF,"\\f").replace(TB,"\\t"):a},"object"==typeof exports?module.exports=dust:root.dust=dust}(function(){return this}()),function(a,b){"object"==typeof exports?module.exports=b(require("./dust")):b(a.dust)}(this,function(dust){var a=function(){function a(a,b){function c(){this.constructor=a}c.prototype=b.prototype,a.prototype=new c}function b(a,b,c,d,e,f){this.message=a,this.expected=b,this.found=c,this.offset=d,this.line=e,this.column=f,this.name="SyntaxError"}function c(a){function c(){return f(nd).line}function d(){return f(nd).column}function e(a){throw h(a,null,nd)}function f(b){function c(b,c,d){var e,f;for(e=c;d>e;e++)f=a.charAt(e),"\n"===f?(b.seenCR||b.line++,b.column=1,b.seenCR=!1):"\r"===f||"\u2028"===f||"\u2029"===f?(b.line++,b.column=1,b.seenCR=!0):(b.column++,b.seenCR=!1)}return od!==b&&(od>b&&(od=0,pd={line:1,column:1,seenCR:!1}),c(pd,od,b),od=b),pd}function g(a){qd>md||(md>qd&&(qd=md,rd=[]),rd.push(a))}function h(c,d,e){function g(a){var b=1;for(a.sort(function(a,b){return a.description<b.description?-1:a.description>b.description?1:0});b<a.length;)a[b-1]===a[b]?a.splice(b,1):b++}function h(a,b){function c(a){function b(a){return a.charCodeAt(0).toString(16).toUpperCase()}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\x0F]/g,function(a){return"\\x0"+b(a)}).replace(/[\x10-\x1F\x80-\xFF]/g,function(a){return"\\x"+b(a)}).replace(/[\u0180-\u0FFF]/g,function(a){return"\\u0"+b(a)}).replace(/[\u1080-\uFFFF]/g,function(a){return"\\u"+b(a)})}var d,e,f,g=new Array(a.length);for(f=0;f<a.length;f++)g[f]=a[f].description;return d=a.length>1?g.slice(0,-1).join(", ")+" or "+g[a.length-1]:g[0],e=b?'"'+c(b)+'"':"end of input","Expected "+d+" but "+e+" found."}var i=f(e),j=e<a.length?a.charAt(e):null;return null!==d&&g(d),new b(null!==c?c:h(d,j),d,j,e,i.line,i.column)}function i(){var a;return a=j()}function j(){var a,b,c;for(a=md,b=[],c=k();c!==T;)b.push(c),c=k();return b!==T&&(nd=a,b=W(b)),a=b}function k(){var a;return a=I(),a===T&&(a=J(),a===T&&(a=l(),a===T&&(a=s(),a===T&&(a=u(),a===T&&(a=r(),a===T&&(a=F())))))),a}function l(){var b,c,d,e,f,h,i,k;if(sd++,b=md,c=m(),c!==T){for(d=[],e=Q();e!==T;)d.push(e),e=Q();d!==T?(e=M(),e!==T?(f=j(),f!==T?(h=q(),h!==T?(i=n(),i===T&&(i=Z),i!==T?(nd=md,k=$(c,f,h,i),k=k?_:Y,k!==T?(nd=b,c=ab(c,f,h,i),b=c):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y;if(b===T)if(b=md,c=m(),c!==T){for(d=[],e=Q();e!==T;)d.push(e),e=Q();d!==T?(47===a.charCodeAt(md)?(e=bb,md++):(e=T,0===sd&&g(cb)),e!==T?(f=M(),f!==T?(nd=b,c=db(c),b=c):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(X)),b}function m(){var b,c,d,e,f,h,i;if(b=md,c=L(),c!==T)if(eb.test(a.charAt(md))?(d=a.charAt(md),md++):(d=T,0===sd&&g(fb)),d!==T){for(e=[],f=Q();f!==T;)e.push(f),f=Q();e!==T?(f=v(),f!==T?(h=o(),h!==T?(i=p(),i!==T?(nd=b,c=gb(d,f,h,i),b=c):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y;else md=b,b=Y;return b}function n(){var b,c,d,e,f,h,i;if(sd++,b=md,c=L(),c!==T)if(47===a.charCodeAt(md)?(d=bb,md++):(d=T,0===sd&&g(cb)),d!==T){for(e=[],f=Q();f!==T;)e.push(f),f=Q();if(e!==T)if(f=v(),f!==T){for(h=[],i=Q();i!==T;)h.push(i),i=Q();h!==T?(i=M(),i!==T?(nd=b,c=ib(f),b=c):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y;else md=b,b=Y}else md=b,b=Y;else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(hb)),b}function o(){var b,c,d,e;return b=md,c=md,58===a.charCodeAt(md)?(d=jb,md++):(d=T,0===sd&&g(kb)),d!==T?(e=v(),e!==T?(nd=c,d=lb(e),c=d):(md=c,c=Y)):(md=c,c=Y),c===T&&(c=Z),c!==T&&(nd=b,c=mb(c)),b=c}function p(){var b,c,d,e,f,h,i;if(sd++,b=md,c=[],d=md,e=[],f=Q(),f!==T)for(;f!==T;)e.push(f),f=Q();else e=Y;for(e!==T?(f=A(),f!==T?(61===a.charCodeAt(md)?(h=ob,md++):(h=T,0===sd&&g(pb)),h!==T?(i=w(),i===T&&(i=v(),i===T&&(i=D())),i!==T?(nd=d,e=qb(f,i),d=e):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y);d!==T;){if(c.push(d),d=md,e=[],f=Q(),f!==T)for(;f!==T;)e.push(f),f=Q();else e=Y;e!==T?(f=A(),f!==T?(61===a.charCodeAt(md)?(h=ob,md++):(h=T,0===sd&&g(pb)),h!==T?(i=w(),i===T&&(i=v(),i===T&&(i=D())),i!==T?(nd=d,e=qb(f,i),d=e):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)}return c!==T&&(nd=b,c=rb(c)),b=c,sd--,b===T&&(c=T,0===sd&&g(nb)),b}function q(){var b,c,d,e,f,h,i,k;for(sd++,b=md,c=[],d=md,e=L(),e!==T?(58===a.charCodeAt(md)?(f=jb,md++):(f=T,0===sd&&g(kb)),f!==T?(h=A(),h!==T?(i=M(),i!==T?(k=j(),k!==T?(nd=d,e=qb(h,k),d=e):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y);d!==T;)c.push(d),d=md,e=L(),e!==T?(58===a.charCodeAt(md)?(f=jb,md++):(f=T,0===sd&&g(kb)),f!==T?(h=A(),h!==T?(i=M(),i!==T?(k=j(),k!==T?(nd=d,e=qb(h,k),d=e):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y);return c!==T&&(nd=b,c=tb(c)),b=c,sd--,b===T&&(c=T,0===sd&&g(sb)),b}function r(){var a,b,c,d,e;return sd++,a=md,b=L(),b!==T?(c=v(),c!==T?(d=t(),d!==T?(e=M(),e!==T?(nd=a,b=vb(c,d),a=b):(md=a,a=Y)):(md=a,a=Y)):(md=a,a=Y)):(md=a,a=Y),sd--,a===T&&(b=T,0===sd&&g(ub)),a}function s(){var b,c,d,e,f,h,i,j,k,l;if(sd++,b=md,c=L(),c!==T)if(62===a.charCodeAt(md)?(d=xb,md++):(d=T,0===sd&&g(yb)),d===T&&(43===a.charCodeAt(md)?(d=zb,md++):(d=T,0===sd&&g(Ab))),d!==T){for(e=[],f=Q();f!==T;)e.push(f),f=Q();if(e!==T)if(f=md,h=A(),h!==T&&(nd=f,h=Bb(h)),f=h,f===T&&(f=D()),f!==T)if(h=o(),h!==T)if(i=p(),i!==T){for(j=[],k=Q();k!==T;)j.push(k),k=Q();j!==T?(47===a.charCodeAt(md)?(k=bb,md++):(k=T,0===sd&&g(cb)),k!==T?(l=M(),l!==T?(nd=b,c=Cb(d,f,h,i),b=c):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y;else md=b,b=Y;else md=b,b=Y;else md=b,b=Y}else md=b,b=Y;else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(wb)),b}function t(){var b,c,d,e,f;for(sd++,b=md,c=[],d=md,124===a.charCodeAt(md)?(e=Eb,md++):(e=T,0===sd&&g(Fb)),e!==T?(f=A(),f!==T?(nd=d,e=lb(f),d=e):(md=d,d=Y)):(md=d,d=Y);d!==T;)c.push(d),d=md,124===a.charCodeAt(md)?(e=Eb,md++):(e=T,0===sd&&g(Fb)),e!==T?(f=A(),f!==T?(nd=d,e=lb(f),d=e):(md=d,d=Y)):(md=d,d=Y);return c!==T&&(nd=b,c=Gb(c)),b=c,sd--,b===T&&(c=T,0===sd&&g(Db)),b}function u(){var b,c,d,e,f;return sd++,b=md,c=L(),c!==T?(126===a.charCodeAt(md)?(d=Ib,md++):(d=T,0===sd&&g(Jb)),d!==T?(e=A(),e!==T?(f=M(),f!==T?(nd=b,c=Kb(e),b=c):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y),sd--,b===T&&(c=T,0===sd&&g(Hb)),b}function v(){var a,b;return sd++,a=md,b=z(),b!==T&&(nd=a,b=Mb(b)),a=b,a===T&&(a=md,b=A(),b!==T&&(nd=a,b=Nb(b)),a=b),sd--,a===T&&(b=T,0===sd&&g(Lb)),a}function w(){var a,b;return sd++,a=md,b=x(),b===T&&(b=y()),b!==T&&(nd=a,b=Pb(b)),a=b,sd--,a===T&&(b=T,0===sd&&g(Ob)),a}function x(){var b,c,d,e,f;if(sd++,b=md,c=y(),c!==T)if(46===a.charCodeAt(md)?(d=Rb,md++):(d=T,0===sd&&g(Sb)),d!==T){if(e=[],f=y(),f!==T)for(;f!==T;)e.push(f),f=y();else e=Y;e!==T?(nd=b,c=Tb(c,e),b=c):(md=b,b=Y)}else md=b,b=Y;else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(Qb)),b}function y(){var b,c,d;if(sd++,b=md,c=[],Vb.test(a.charAt(md))?(d=a.charAt(md),md++):(d=T,0===sd&&g(Wb)),d!==T)for(;d!==T;)c.push(d),Vb.test(a.charAt(md))?(d=a.charAt(md),md++):(d=T,0===sd&&g(Wb));else c=Y;return c!==T&&(nd=b,c=Xb(c)),b=c,sd--,b===T&&(c=T,0===sd&&g(Ub)),b}function z(){var b,c,d,e;if(sd++,b=md,c=A(),c===T&&(c=Z),c!==T){if(d=[],e=C(),e===T&&(e=B()),e!==T)for(;e!==T;)d.push(e),e=C(),e===T&&(e=B());else d=Y;d!==T?(nd=b,c=Zb(c,d),b=c):(md=b,b=Y)}else md=b,b=Y;if(b===T)if(b=md,46===a.charCodeAt(md)?(c=Rb,md++):(c=T,0===sd&&g(Sb)),c!==T){for(d=[],e=C(),e===T&&(e=B());e!==T;)d.push(e),e=C(),e===T&&(e=B());d!==T?(nd=b,c=$b(d),b=c):(md=b,b=Y)}else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(Yb)),b}function A(){var b,c,d,e;if(sd++,b=md,ac.test(a.charAt(md))?(c=a.charAt(md),md++):(c=T,0===sd&&g(bc)),c!==T){for(d=[],cc.test(a.charAt(md))?(e=a.charAt(md),md++):(e=T,0===sd&&g(dc));e!==T;)d.push(e),cc.test(a.charAt(md))?(e=a.charAt(md),md++):(e=T,0===sd&&g(dc));d!==T?(nd=b,c=ec(c,d),b=c):(md=b,b=Y)}else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(_b)),b}function B(){var b,c,d,e,f,h;if(sd++,b=md,c=md,d=N(),d!==T){if(e=md,f=[],Vb.test(a.charAt(md))?(h=a.charAt(md),md++):(h=T,0===sd&&g(Wb)),h!==T)for(;h!==T;)f.push(h),Vb.test(a.charAt(md))?(h=a.charAt(md),md++):(h=T,0===sd&&g(Wb));else f=Y;f!==T&&(nd=e,f=gc(f)),e=f,e===T&&(e=v()),e!==T?(f=O(),f!==T?(nd=c,d=hc(e),c=d):(md=c,c=Y)):(md=c,c=Y)}else md=c,c=Y;return c!==T?(d=C(),d===T&&(d=Z),d!==T?(nd=b,c=ic(c,d),b=c):(md=b,b=Y)):(md=b,b=Y),sd--,b===T&&(c=T,0===sd&&g(fc)),b}function C(){var b,c,d,e,f;if(sd++,b=md,c=[],d=md,46===a.charCodeAt(md)?(e=Rb,md++):(e=T,0===sd&&g(Sb)),e!==T?(f=A(),f!==T?(nd=d,e=kc(f),d=e):(md=d,d=Y)):(md=d,d=Y),d!==T)for(;d!==T;)c.push(d),d=md,46===a.charCodeAt(md)?(e=Rb,md++):(e=T,0===sd&&g(Sb)),e!==T?(f=A(),f!==T?(nd=d,e=kc(f),d=e):(md=d,d=Y)):(md=d,d=Y);else c=Y;return c!==T?(d=B(),d===T&&(d=Z),d!==T?(nd=b,c=lc(c,d),b=c):(md=b,b=Y)):(md=b,b=Y),sd--,b===T&&(c=T,0===sd&&g(jc)),b}function D(){var b,c,d,e;if(sd++,b=md,34===a.charCodeAt(md)?(c=nc,md++):(c=T,0===sd&&g(oc)),c!==T?(34===a.charCodeAt(md)?(d=nc,md++):(d=T,0===sd&&g(oc)),d!==T?(nd=b,c=pc(),b=c):(md=b,b=Y)):(md=b,b=Y),b===T&&(b=md,34===a.charCodeAt(md)?(c=nc,md++):(c=T,0===sd&&g(oc)),c!==T?(d=G(),d!==T?(34===a.charCodeAt(md)?(e=nc,md++):(e=T,0===sd&&g(oc)),e!==T?(nd=b,c=qc(d),b=c):(md=b,b=Y)):(md=b,b=Y)):(md=b,b=Y),b===T))if(b=md,34===a.charCodeAt(md)?(c=nc,md++):(c=T,0===sd&&g(oc)),c!==T){if(d=[],e=E(),e!==T)for(;e!==T;)d.push(e),e=E();else d=Y;d!==T?(34===a.charCodeAt(md)?(e=nc,md++):(e=T,0===sd&&g(oc)),e!==T?(nd=b,c=rc(d),b=c):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(mc)),b}function E(){var a,b;return a=u(),a===T&&(a=r(),a===T&&(a=md,b=G(),b!==T&&(nd=a,b=sc(b)),a=b)),a}function F(){var b,c,d,e,f,h,i,j;if(sd++,b=md,c=P(),c!==T){for(d=[],e=Q();e!==T;)d.push(e),e=Q();d!==T?(nd=b,c=uc(c,d),b=c):(md=b,b=Y)}else md=b,b=Y;if(b===T){if(b=md,c=[],d=md,e=md,sd++,f=K(),sd--,f===T?e=_:(md=e,e=Y),e!==T?(f=md,sd++,h=I(),sd--,h===T?f=_:(md=f,f=Y),f!==T?(h=md,sd++,i=J(),sd--,i===T?h=_:(md=h,h=Y),h!==T?(i=md,sd++,j=P(),sd--,j===T?i=_:(md=i,i=Y),i!==T?(a.length>md?(j=a.charAt(md),md++):(j=T,0===sd&&g(vc)),j!==T?(nd=d,e=wc(j),d=e):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y),d!==T)for(;d!==T;)c.push(d),d=md,e=md,sd++,f=K(),sd--,f===T?e=_:(md=e,e=Y),e!==T?(f=md,sd++,h=I(),sd--,h===T?f=_:(md=f,f=Y),f!==T?(h=md,sd++,i=J(),sd--,i===T?h=_:(md=h,h=Y),h!==T?(i=md,sd++,j=P(),sd--,j===T?i=_:(md=i,i=Y),i!==T?(a.length>md?(j=a.charAt(md),md++):(j=T,0===sd&&g(vc)),j!==T?(nd=d,e=wc(j),d=e):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y)):(md=d,d=Y);else c=Y;c!==T&&(nd=b,c=xc(c)),b=c}return sd--,b===T&&(c=T,0===sd&&g(tc)),b}function G(){var b,c,d,e,f;if(sd++,b=md,c=[],d=md,e=md,sd++,f=K(),sd--,f===T?e=_:(md=e,e=Y),e!==T?(f=H(),f===T&&(zc.test(a.charAt(md))?(f=a.charAt(md),md++):(f=T,0===sd&&g(Ac))),f!==T?(nd=d,e=wc(f),d=e):(md=d,d=Y)):(md=d,d=Y),d!==T)for(;d!==T;)c.push(d),d=md,e=md,sd++,f=K(),sd--,f===T?e=_:(md=e,e=Y),e!==T?(f=H(),f===T&&(zc.test(a.charAt(md))?(f=a.charAt(md),md++):(f=T,0===sd&&g(Ac))),f!==T?(nd=d,e=wc(f),d=e):(md=d,d=Y)):(md=d,d=Y);else c=Y;return c!==T&&(nd=b,c=Bc(c)),b=c,sd--,b===T&&(c=T,0===sd&&g(yc)),b}function H(){var b,c;return b=md,a.substr(md,2)===Cc?(c=Cc,md+=2):(c=T,0===sd&&g(Dc)),c!==T&&(nd=b,c=Ec()),b=c}function I(){var b,c,d,e,f,h;if(sd++,b=md,a.substr(md,2)===Gc?(c=Gc,md+=2):(c=T,0===sd&&g(Hc)),c!==T){for(d=[],e=md,f=md,sd++,a.substr(md,2)===Ic?(h=Ic,md+=2):(h=T,0===sd&&g(Jc)),sd--,h===T?f=_:(md=f,f=Y),f!==T?(a.length>md?(h=a.charAt(md),md++):(h=T,0===sd&&g(vc)),h!==T?(nd=e,f=Kc(h),e=f):(md=e,e=Y)):(md=e,e=Y);e!==T;)d.push(e),e=md,f=md,sd++,a.substr(md,2)===Ic?(h=Ic,md+=2):(h=T,0===sd&&g(Jc)),sd--,h===T?f=_:(md=f,f=Y),f!==T?(a.length>md?(h=a.charAt(md),md++):(h=T,0===sd&&g(vc)),h!==T?(nd=e,f=Kc(h),e=f):(md=e,e=Y)):(md=e,e=Y);d!==T?(a.substr(md,2)===Ic?(e=Ic,md+=2):(e=T,0===sd&&g(Jc)),e!==T?(nd=b,c=Lc(d),b=c):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(Fc)),b}function J(){var b,c,d,e,f,h;if(sd++,b=md,a.substr(md,2)===Nc?(c=Nc,md+=2):(c=T,0===sd&&g(Oc)),c!==T){for(d=[],e=md,f=md,sd++,a.substr(md,2)===Pc?(h=Pc,md+=2):(h=T,0===sd&&g(Qc)),sd--,h===T?f=_:(md=f,f=Y),f!==T?(a.length>md?(h=a.charAt(md),md++):(h=T,0===sd&&g(vc)),h!==T?(nd=e,f=wc(h),e=f):(md=e,e=Y)):(md=e,e=Y);e!==T;)d.push(e),e=md,f=md,sd++,a.substr(md,2)===Pc?(h=Pc,md+=2):(h=T,0===sd&&g(Qc)),sd--,h===T?f=_:(md=f,f=Y),f!==T?(a.length>md?(h=a.charAt(md),md++):(h=T,0===sd&&g(vc)),h!==T?(nd=e,f=wc(h),e=f):(md=e,e=Y)):(md=e,e=Y);d!==T?(a.substr(md,2)===Pc?(e=Pc,md+=2):(e=T,0===sd&&g(Qc)),e!==T?(nd=b,c=Rc(d),b=c):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y;return sd--,b===T&&(c=T,0===sd&&g(Mc)),b}function K(){var b,c,d,e,f,h,i,j,k,l;if(b=md,c=L(),c!==T){for(d=[],e=Q();e!==T;)d.push(e),e=Q();if(d!==T)if(Sc.test(a.charAt(md))?(e=a.charAt(md),md++):(e=T,0===sd&&g(Tc)),e!==T){for(f=[],h=Q();h!==T;)f.push(h),h=Q();if(f!==T){if(h=[],i=md,j=md,sd++,k=M(),sd--,k===T?j=_:(md=j,j=Y),j!==T?(k=md,sd++,l=P(),sd--,l===T?k=_:(md=k,k=Y),k!==T?(a.length>md?(l=a.charAt(md),md++):(l=T,0===sd&&g(vc)),l!==T?(j=[j,k,l],i=j):(md=i,i=Y)):(md=i,i=Y)):(md=i,i=Y),i!==T)for(;i!==T;)h.push(i),i=md,j=md,sd++,k=M(),sd--,k===T?j=_:(md=j,j=Y),j!==T?(k=md,sd++,l=P(),sd--,l===T?k=_:(md=k,k=Y),k!==T?(a.length>md?(l=a.charAt(md),md++):(l=T,0===sd&&g(vc)),l!==T?(j=[j,k,l],i=j):(md=i,i=Y)):(md=i,i=Y)):(md=i,i=Y);else h=Y;if(h!==T){for(i=[],j=Q();j!==T;)i.push(j),j=Q();i!==T?(j=M(),j!==T?(c=[c,d,e,f,h,i,j],b=c):(md=b,b=Y)):(md=b,b=Y)}else md=b,b=Y}else md=b,b=Y}else md=b,b=Y;else md=b,b=Y}else md=b,b=Y;return b===T&&(b=r()),b}function L(){var b;return 123===a.charCodeAt(md)?(b=Uc,md++):(b=T,0===sd&&g(Vc)),b}function M(){var b;return 125===a.charCodeAt(md)?(b=Wc,md++):(b=T,0===sd&&g(Xc)),b}function N(){var b;return 91===a.charCodeAt(md)?(b=Yc,md++):(b=T,0===sd&&g(Zc)),b}function O(){var b;return 93===a.charCodeAt(md)?(b=$c,md++):(b=T,0===sd&&g(_c)),b}function P(){var b;return 10===a.charCodeAt(md)?(b=ad,md++):(b=T,0===sd&&g(bd)),b===T&&(a.substr(md,2)===cd?(b=cd,md+=2):(b=T,0===sd&&g(dd)),b===T&&(13===a.charCodeAt(md)?(b=ed,md++):(b=T,0===sd&&g(fd)),b===T&&(8232===a.charCodeAt(md)?(b=gd,md++):(b=T,0===sd&&g(hd)),b===T&&(8233===a.charCodeAt(md)?(b=id,md++):(b=T,0===sd&&g(jd)))))),b}function Q(){var b;return kd.test(a.charAt(md))?(b=a.charAt(md),md++):(b=T,0===sd&&g(ld)),b===T&&(b=P()),b}var R,S=arguments.length>1?arguments[1]:{},T={},U={start:i},V=i,W=function(a){return["body"].concat(a).concat([["line",c()],["col",d()]])},X={type:"other",description:"section"},Y=T,Z=null,$=function(a,b,c,d){return d&&a[1].text===d.text||e("Expected end tag for "+a[1].text+" but it was not found."),!0},_=void 0,ab=function(a,b,e){return e.push(["param",["literal","block"],b]),a.push(e),a.concat([["line",c()],["col",d()]])},bb="/",cb={type:"literal",value:"/",description:'"/"'},db=function(a){return a.push(["bodies"]),a.concat([["line",c()],["col",d()]])},eb=/^[#?\^<+@%]/,fb={type:"class",value:"[#?\\^<+@%]",description:"[#?\\^<+@%]"},gb=function(a,b,c,d){return[a,b,c,d]},hb={type:"other",description:"end tag"},ib=function(a){return a},jb=":",kb={type:"literal",value:":",description:'":"'},lb=function(a){return a},mb=function(a){return a?["context",a]:["context"]},nb={type:"other",description:"params"},ob="=",pb={type:"literal",value:"=",description:'"="'},qb=function(a,b){return["param",["literal",a],b]},rb=function(a){return["params"].concat(a)},sb={type:"other",description:"bodies"},tb=function(a){return["bodies"].concat(a)},ub={type:"other",description:"reference"},vb=function(a,b){return["reference",a,b].concat([["line",c()],["col",d()]])},wb={type:"other",description:"partial"},xb=">",yb={type:"literal",value:">",description:'">"'},zb="+",Ab={type:"literal",value:"+",description:'"+"'},Bb=function(a){return["literal",a]},Cb=function(a,b,e,f){var g=">"===a?"partial":a;return[g,b,e,f].concat([["line",c()],["col",d()]])},Db={type:"other",description:"filters"},Eb="|",Fb={type:"literal",value:"|",description:'"|"'},Gb=function(a){return["filters"].concat(a)},Hb={type:"other",description:"special"},Ib="~",Jb={type:"literal",value:"~",description:'"~"'},Kb=function(a){return["special",a].concat([["line",c()],["col",d()]])},Lb={type:"other",description:"identifier"},Mb=function(a){var b=["path"].concat(a);return b.text=a[1].join("."),b},Nb=function(a){var b=["key",a];return b.text=a,b},Ob={type:"other",description:"number"},Pb=function(a){return["literal",a]},Qb={type:"other",description:"float"},Rb=".",Sb={type:"literal",value:".",description:'"."'},Tb=function(a,b){return parseFloat(a+"."+b.join(""))},Ub={type:"other",description:"integer"},Vb=/^[0-9]/,Wb={type:"class",value:"[0-9]",description:"[0-9]"},Xb=function(a){return parseInt(a.join(""),10)},Yb={type:"other",description:"path"},Zb=function(a,b){return b=b[0],a&&b?(b.unshift(a),[!1,b].concat([["line",c()],["col",d()]])):[!0,b].concat([["line",c()],["col",d()]])},$b=function(a){return a.length>0?[!0,a[0]].concat([["line",c()],["col",d()]]):[!0,[]].concat([["line",c()],["col",d()]])},_b={type:"other",description:"key"},ac=/^[a-zA-Z_$]/,bc={type:"class",value:"[a-zA-Z_$]",description:"[a-zA-Z_$]"},cc=/^[0-9a-zA-Z_$\-]/,dc={type:"class",value:"[0-9a-zA-Z_$\\-]",description:"[0-9a-zA-Z_$\\-]"},ec=function(a,b){return a+b.join("")},fc={type:"other",description:"array"},gc=function(a){return a.join("")},hc=function(a){return a},ic=function(a,b){return b?b.unshift(a):b=[a],b},jc={type:"other",description:"array_part"},kc=function(a){return a},lc=function(a,b){return b?a.concat(b):a},mc={type:"other",description:"inline"},nc='"',oc={type:"literal",value:'"',description:'"\\""'},pc=function(){return["literal",""].concat([["line",c()],["col",d()]])},qc=function(a){return["literal",a].concat([["line",c()],["col",d()]])},rc=function(a){return["body"].concat(a).concat([["line",c()],["col",d()]])},sc=function(a){return["buffer",a]},tc={type:"other",description:"buffer"},uc=function(a,b){return["format",a,b.join("")].concat([["line",c()],["col",d()]])},vc={type:"any",description:"any character"},wc=function(a){return a},xc=function(a){return["buffer",a.join("")].concat([["line",c()],["col",d()]])},yc={type:"other",description:"literal"},zc=/^[^"]/,Ac={type:"class",value:'[^"]',description:'[^"]'},Bc=function(a){return a.join("")},Cc='\\"',Dc={type:"literal",value:'\\"',description:'"\\\\\\""'},Ec=function(){return'"'},Fc={type:"other",description:"raw"},Gc="{`",Hc={type:"literal",value:"{`",description:'"{`"'},Ic="`}",Jc={type:"literal",value:"`}",description:'"`}"'},Kc=function(a){return a},Lc=function(a){return["raw",a.join("")].concat([["line",c()],["col",d()]])},Mc={type:"other",description:"comment"},Nc="{!",Oc={type:"literal",value:"{!",description:'"{!"'},Pc="!}",Qc={type:"literal",value:"!}",description:'"!}"'},Rc=function(a){return["comment",a.join("")].concat([["line",c()],["col",d()]])},Sc=/^[#?\^><+%:@\/~%]/,Tc={type:"class",value:"[#?\\^><+%:@\\/~%]",description:"[#?\\^><+%:@\\/~%]"},Uc="{",Vc={type:"literal",value:"{",description:'"{"'},Wc="}",Xc={type:"literal",value:"}",description:'"}"'},Yc="[",Zc={type:"literal",value:"[",description:'"["'},$c="]",_c={type:"literal",value:"]",description:'"]"'},ad="\n",bd={type:"literal",value:"\n",description:'"\\n"'},cd="\r\n",dd={type:"literal",value:"\r\n",description:'"\\r\\n"'},ed="\r",fd={type:"literal",value:"\r",description:'"\\r"'},gd="\u2028",hd={type:"literal",value:"\u2028",description:'"\\u2028"'},id="\u2029",jd={type:"literal",value:"\u2029",description:'"\\u2029"'},kd=/^[\t\x0B\f \xA0\uFEFF]/,ld={type:"class",value:"[\\t\\x0B\\f \\xA0\\uFEFF]",description:"[\\t\\x0B\\f \\xA0\\uFEFF]"},md=0,nd=0,od=0,pd={line:1,column:1,seenCR:!1},qd=0,rd=[],sd=0;if("startRule"in S){if(!(S.startRule in U))throw new Error("Can't start parsing from rule \""+S.startRule+'".');V=U[S.startRule]}if(R=V(),R!==T&&md===a.length)return R;throw R!==T&&md<a.length&&g({type:"end",description:"end of input"}),h(null,rd,qd)}return a(b,Error),{SyntaxError:b,parse:c}}();return dust.parse=a.parse,a}),function(a,b){"object"==typeof exports?module.exports=b(require("./parser").parse,require("./dust")):b(a.dust.parse,a.dust)}(this,function(a,dust){function b(a){var b={};return n.filterNode(b,a)}function c(a,b){var c,d,e,f=[b[0]];for(c=1,d=b.length;d>c;c++)e=n.filterNode(a,b[c]),e&&f.push(e);return f}function d(a,b){var c,d,e,f,g=[b[0]];for(d=1,e=b.length;e>d;d++)f=n.filterNode(a,b[d]),f&&("buffer"===f[0]?c?c[1]+=f[1]:(c=f,g.push(f)):(c=null,g.push(f)));return g}function e(a,b){return["buffer",p[b[1]]]}function f(a,b){return b}function g(){}function h(a,b){var c={name:b,bodies:[],blocks:{},index:0,auto:"h"};return"(function(){dust.register("+(b?'"'+b+'"':"null")+","+n.compileNode(c,a)+");"+i(c)+j(c)+"return body_0;})();"}function i(a){var b,c=[],d=a.blocks;for(b in d)c.push('"'+b+'":'+d[b]);return c.length?(a.blocks="ctx=ctx.shiftBlocks(blocks);","var blocks={"+c.join(",")+"};"):a.blocks=""}function j(a){var b,c,d=[],e=a.bodies,f=a.blocks;for(b=0,c=e.length;c>b;b++)d[b]="function body_"+b+"(chk,ctx){"+f+"return chk"+e[b]+";}";return d.join("")}function k(a,b){var c,d,e="";for(c=1,d=b.length;d>c;c++)e+=n.compileNode(a,b[c]);return e}function l(a,b,c){return"."+c+"("+n.compileNode(a,b[1])+","+n.compileNode(a,b[2])+","+n.compileNode(a,b[4])+","+n.compileNode(a,b[3])+")"}function m(a){return a.replace(q,"\\\\").replace(r,'\\"').replace(s,"\\f").replace(t,"\\n").replace(u,"\\r").replace(v,"\\t") +}var n={},o=dust.isArray;n.compile=function(c,d){d||null===d||dust.log(new Error("Template name parameter cannot be undefined when calling dust.compile"),"ERROR");try{var e=b(a(c));return h(e,d)}catch(f){if(!f.line||!f.column)throw f;throw new SyntaxError(f.message+" At line : "+f.line+", column : "+f.column)}},n.filterNode=function(a,b){return n.optimizers[b[0]](a,b)},n.optimizers={body:d,buffer:f,special:e,format:g,reference:c,"#":c,"?":c,"^":c,"<":c,"+":c,"@":c,"%":c,partial:c,context:c,params:c,bodies:c,param:c,filters:f,key:f,path:f,literal:f,raw:f,comment:g,line:g,col:g},n.pragmas={esc:function(a,b,c){var d,e=a.auto;return b||(b="h"),a.auto="s"===b?"":b,d=k(a,c.block),a.auto=e,d}};var p={s:" ",n:"\n",r:"\r",lb:"{",rb:"}"};n.compileNode=function(a,b){return n.nodes[b[0]](a,b)},n.nodes={body:function(a,b){var c=a.index++,d="body_"+c;return a.bodies[c]=k(a,b),d},buffer:function(a,b){return".write("+w(b[1])+")"},format:function(a,b){return".write("+w(b[1]+b[2])+")"},reference:function(a,b){return".reference("+n.compileNode(a,b[1])+",ctx,"+n.compileNode(a,b[2])+")"},"#":function(a,b){return l(a,b,"section")},"?":function(a,b){return l(a,b,"exists")},"^":function(a,b){return l(a,b,"notexists")},"<":function(a,b){for(var c=b[4],d=1,e=c.length;e>d;d++){var f=c[d],g=f[1][1];if("block"===g)return a.blocks[b[1].text]=n.compileNode(a,f[2]),""}return""},"+":function(a,b){return"undefined"==typeof b[1].text&&"undefined"==typeof b[4]?".block(ctx.getBlock("+n.compileNode(a,b[1])+",chk, ctx),"+n.compileNode(a,b[2])+", {},"+n.compileNode(a,b[3])+")":".block(ctx.getBlock("+w(b[1].text)+"),"+n.compileNode(a,b[2])+","+n.compileNode(a,b[4])+","+n.compileNode(a,b[3])+")"},"@":function(a,b){return".helper("+w(b[1].text)+","+n.compileNode(a,b[2])+","+n.compileNode(a,b[4])+","+n.compileNode(a,b[3])+")"},"%":function(a,b){var c,d,e,f,g,h,i,j,k,l=b[1][1];if(!n.pragmas[l])return"";for(c=b[4],d={},j=1,k=c.length;k>j;j++)h=c[j],d[h[1][1]]=h[2];for(e=b[3],f={},j=1,k=e.length;k>j;j++)i=e[j],f[i[1][1]]=i[2][1];return g=b[2][1]?b[2][1].text:null,n.pragmas[l](a,g,d,f)},partial:function(a,b){return".partial("+n.compileNode(a,b[1])+","+n.compileNode(a,b[2])+","+n.compileNode(a,b[3])+")"},context:function(a,b){return b[1]?"ctx.rebase("+n.compileNode(a,b[1])+")":"ctx"},params:function(a,b){for(var c=[],d=1,e=b.length;e>d;d++)c.push(n.compileNode(a,b[d]));return c.length?"{"+c.join(",")+"}":"null"},bodies:function(a,b){for(var c=[],d=1,e=b.length;e>d;d++)c.push(n.compileNode(a,b[d]));return"{"+c.join(",")+"}"},param:function(a,b){return n.compileNode(a,b[1])+":"+n.compileNode(a,b[2])},filters:function(a,b){for(var c=[],d=1,e=b.length;e>d;d++){var f=b[d];c.push('"'+f+'"')}return'"'+a.auto+'"'+(c.length?",["+c.join(",")+"]":"")},key:function(a,b){return'ctx.get(["'+b[1]+'"], false)'},path:function(a,b){for(var c=b[1],d=b[2],e=[],f=0,g=d.length;g>f;f++)e.push(o(d[f])?n.compileNode(a,d[f]):'"'+d[f]+'"');return"ctx.getPath("+c+", ["+e.join(",")+"])"},literal:function(a,b){return w(b[1])},raw:function(a,b){return".write("+w(b[1])+")"}};var q=/\\/g,r=/"/g,s=/\f/g,t=/\n/g,u=/\r/g,v=/\t/g,w="undefined"==typeof JSON?function(a){return'"'+m(a)+'"'}:JSON.stringify;return dust.compile=n.compile,dust.filterNode=n.filterNode,dust.optimizers=n.optimizers,dust.pragmas=n.pragmas,dust.compileNode=n.compileNode,dust.nodes=n.nodes,n}); \ No newline at end of file diff --git a/package.json b/package.json index 1ddd398a..90c74765 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "dustjs-linkedin", "title": "Dust - Asynchronous Templating", - "version": "2.3.5", + "version": "2.3.6", "author": { "name": "Aleksander Williams", "url": "http://akdubya.github.com/dustjs"