From 23756cdc59ff1838a750130c0e7f65f0c8a0dc15 Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Thu, 13 Apr 2017 09:28:42 -0700 Subject: [PATCH] 1.0 --- CHANGELOG.md | 10 +- docs/prettier.min.js | 4902 ++++++++++++++++++++++++++---------------- package.json | 2 +- 3 files changed, 3065 insertions(+), 1849 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f185de80..52995094d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 1.0.0 + +[link](https://github.com/jlongster/prettier/compare/0.22.0...1.0.0) + +* See announcement blog post: [http://jlongster.com/prettier-1.0](http://jlongster.com/prettier-1.0) + # 0.22.0 [link](https://github.com/jlongster/prettier/compare/0.21.0...0.22.0) @@ -40,10 +46,10 @@ * [JSX] Break before and after jsx whitespace (#836) * re-run snapshot tests * Run prettier 0.20.0 (#835) -* [JSX] Don't wrap JSX Elements in parentheses in {} (#845) +* [JSX] Don't wrap JSX Elements in parentheses in {} (#845) * Fix comment after the last argument of a function (#856) * Fix travis build imag -* Do not break require calls (#841) +* Do not break require calls (#841) * Stabilize import as comments (#855) * Fix jsx expression comment that break (#852) * Inline last arg function arguments (#847) diff --git a/docs/prettier.min.js b/docs/prettier.min.js index 7914d770f..71e868916 100644 --- a/docs/prettier.min.js +++ b/docs/prettier.min.js @@ -1,4 +1,10 @@ var prettier = (function () { +function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs'); +} + + + function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } @@ -7616,107 +7622,113 @@ var e4x = function (fork) { }; var jsx = function (fork) { - fork.use(es7); + fork.use(es7); - var types = fork.use(types$1); - var def = types.Type.def; - var or = types.Type.or; - var defaults = fork.use(shared).defaults; + var types = fork.use(types$1); + var def = types.Type.def; + var or = types.Type.or; + var defaults = fork.use(shared).defaults; - def("JSXAttribute") - .bases("Node") - .build("name", "value") - .field("name", or(def("JSXIdentifier"), def("JSXNamespacedName"))) - .field("value", or( - def("Literal"), // attr="value" - def("JSXExpressionContainer"), // attr={value} - null // attr= or just attr - ), defaults["null"]); + def("JSXAttribute") + .bases("Node") + .build("name", "value") + .field("name", or(def("JSXIdentifier"), def("JSXNamespacedName"))) + .field("value", or( + def("Literal"), // attr="value" + def("JSXExpressionContainer"), // attr={value} + null // attr= or just attr + ), defaults["null"]); - def("JSXIdentifier") - .bases("Identifier") - .build("name") - .field("name", String); + def("JSXIdentifier") + .bases("Identifier") + .build("name") + .field("name", String); - def("JSXNamespacedName") - .bases("Node") - .build("namespace", "name") - .field("namespace", def("JSXIdentifier")) - .field("name", def("JSXIdentifier")); + def("JSXNamespacedName") + .bases("Node") + .build("namespace", "name") + .field("namespace", def("JSXIdentifier")) + .field("name", def("JSXIdentifier")); + def("JSXMemberExpression") + .bases("MemberExpression") + .build("object", "property") + .field("object", or(def("JSXIdentifier"), def("JSXMemberExpression"))) + .field("property", def("JSXIdentifier")) + .field("computed", Boolean, defaults.false); + + var JSXElementName = or( + def("JSXIdentifier"), + def("JSXNamespacedName"), def("JSXMemberExpression") - .bases("MemberExpression") - .build("object", "property") - .field("object", or(def("JSXIdentifier"), def("JSXMemberExpression"))) - .field("property", def("JSXIdentifier")) - .field("computed", Boolean, defaults.false); + ); - var JSXElementName = or( - def("JSXIdentifier"), - def("JSXNamespacedName"), - def("JSXMemberExpression") - ); + def("JSXSpreadAttribute") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + var JSXAttributes = [or( + def("JSXAttribute"), def("JSXSpreadAttribute") - .bases("Node") - .build("argument") - .field("argument", def("Expression")); + )]; - var JSXAttributes = [or( - def("JSXAttribute"), - def("JSXSpreadAttribute") - )]; + def("JSXExpressionContainer") + .bases("Expression") + .build("expression") + .field("expression", def("Expression")); - def("JSXExpressionContainer") - .bases("Expression") - .build("expression") - .field("expression", def("Expression")); + def("JSXElement") + .bases("Expression") + .build("openingElement", "closingElement", "children") + .field("openingElement", def("JSXOpeningElement")) + .field("closingElement", or(def("JSXClosingElement"), null), defaults["null"]) + .field("children", [or( + def("JSXElement"), + def("JSXExpressionContainer"), + def("JSXText"), + def("Literal") // TODO Esprima should return JSXText instead. + )], defaults.emptyArray) + .field("name", JSXElementName, function () { + // Little-known fact: the `this` object inside a default function + // is none other than the partially-built object itself, and any + // fields initialized directly from builder function arguments + // (like openingElement, closingElement, and children) are + // guaranteed to be available. + return this.openingElement.name; + }, true) // hidden from traversal + .field("selfClosing", Boolean, function () { + return this.openingElement.selfClosing; + }, true) // hidden from traversal + .field("attributes", JSXAttributes, function () { + return this.openingElement.attributes; + }, true); // hidden from traversal - def("JSXElement") - .bases("Expression") - .build("openingElement", "closingElement", "children") - .field("openingElement", def("JSXOpeningElement")) - .field("closingElement", or(def("JSXClosingElement"), null), defaults["null"]) - .field("children", [or( - def("JSXElement"), - def("JSXExpressionContainer"), - def("JSXText"), - def("Literal") // TODO Esprima should return JSXText instead. - )], defaults.emptyArray) - .field("name", JSXElementName, function () { - // Little-known fact: the `this` object inside a default function - // is none other than the partially-built object itself, and any - // fields initialized directly from builder function arguments - // (like openingElement, closingElement, and children) are - // guaranteed to be available. - return this.openingElement.name; - }, true) // hidden from traversal - .field("selfClosing", Boolean, function () { - return this.openingElement.selfClosing; - }, true) // hidden from traversal - .field("attributes", JSXAttributes, function () { - return this.openingElement.attributes; - }, true); // hidden from traversal + def("JSXOpeningElement") + .bases("Node") // TODO Does this make sense? Can't really be an JSXElement. + .build("name", "attributes", "selfClosing") + .field("name", JSXElementName) + .field("attributes", JSXAttributes, defaults.emptyArray) + .field("selfClosing", Boolean, defaults["false"]); - def("JSXOpeningElement") - .bases("Node") // TODO Does this make sense? Can't really be an JSXElement. - .build("name", "attributes", "selfClosing") - .field("name", JSXElementName) - .field("attributes", JSXAttributes, defaults.emptyArray) - .field("selfClosing", Boolean, defaults["false"]); + def("JSXClosingElement") + .bases("Node") // TODO Same concern. + .build("name") + .field("name", JSXElementName); - def("JSXClosingElement") - .bases("Node") // TODO Same concern. - .build("name") - .field("name", JSXElementName); + def("JSXText") + .bases("Literal") + .build("value") + .field("value", String); - def("JSXText") - .bases("Literal") - .build("value") - .field("value", String); - - def("JSXEmptyExpression").bases("Expression").build(); + def("JSXEmptyExpression").bases("Expression").build(); + // This PR has caused many people issues, but supporting it seems like a + // good idea anyway: https://github.com/babel/babel/pull/4988 + def("JSXSpreadChild") + .bases("Expression") + .build("expression") + .field("expression", def("Expression")); }; var flow = function (fork) { @@ -7756,6 +7768,14 @@ var flow = function (fork) { .field("value", Number) .field("raw", String); + // Babylon 6 differs in AST from Flow + // same as NumberLiteralTypeAnnotation + def("NumericLiteralTypeAnnotation") + .bases("Type") + .build("value", "raw") + .field("value", Number) + .field("raw", String); + def("StringTypeAnnotation") .bases("Type") .build(); @@ -7902,6 +7922,9 @@ var flow = function (fork) { def("Identifier") .field("typeAnnotation", or(def("TypeAnnotation"), null), defaults["null"]); + def("ObjectPattern") + .field("typeAnnotation", or(def("TypeAnnotation"), null), defaults["null"]); + def("TypeParameterDeclaration") .bases("Node") .build("params") @@ -8255,164 +8278,173 @@ var babel = function (fork) { }; var babel6 = function (fork) { - fork.use(babel); - fork.use(flow); + fork.use(babel); + fork.use(flow); - // var types = fork.types; - var types = fork.use(types$1); - // var defaults = fork.shared.defaults; - var defaults = fork.use(shared).defaults; - var def = types.Type.def; - var or = types.Type.or; + // var types = fork.types; + var types = fork.use(types$1); + // var defaults = fork.shared.defaults; + var defaults = fork.use(shared).defaults; + var def = types.Type.def; + var or = types.Type.or; - def("Directive") - .bases("Node") - .build("value") - .field("value", def("DirectiveLiteral")); + def("Directive") + .bases("Node") + .build("value") + .field("value", def("DirectiveLiteral")); - def("DirectiveLiteral") - .bases("Node", "Expression") - .build("value") - .field("value", String, defaults["use strict"]); + def("DirectiveLiteral") + .bases("Node", "Expression") + .build("value") + .field("value", String, defaults["use strict"]); - def("BlockStatement") - .bases("Statement") - .build("body") - .field("body", [def("Statement")]) - .field("directives", [def("Directive")], defaults.emptyArray); + def("BlockStatement") + .bases("Statement") + .build("body") + .field("body", [def("Statement")]) + .field("directives", [def("Directive")], defaults.emptyArray); - def("Program") - .bases("Node") - .build("body") - .field("body", [def("Statement")]) - .field("directives", [def("Directive")], defaults.emptyArray); + def("Program") + .bases("Node") + .build("body") + .field("body", [def("Statement")]) + .field("directives", [def("Directive")], defaults.emptyArray); - // Split Literal - def("StringLiteral") - .bases("Literal") - .build("value") - .field("value", String); + // Split Literal + def("StringLiteral") + .bases("Literal") + .build("value") + .field("value", String); - def("NumericLiteral") - .bases("Literal") - .build("value") - .field("value", Number); + def("NumericLiteral") + .bases("Literal") + .build("value") + .field("value", Number); - def("NullLiteral") - .bases("Literal") - .build(); + def("NullLiteral") + .bases("Literal") + .build() + .field("value", null, defaults["null"]); - def("BooleanLiteral") - .bases("Literal") - .build("value") - .field("value", Boolean); + def("BooleanLiteral") + .bases("Literal") + .build("value") + .field("value", Boolean); - def("RegExpLiteral") - .bases("Literal") - .build("pattern", "flags") - .field("pattern", String) - .field("flags", String); - - var ObjectExpressionProperty = or( - def("Property"), - def("ObjectMethod"), - def("ObjectProperty"), - def("SpreadProperty") - ); - - // Split Property -> ObjectProperty and ObjectMethod - def("ObjectExpression") - .bases("Expression") - .build("properties") - .field("properties", [ObjectExpressionProperty]); - - // ObjectMethod hoist .value properties to own properties - def("ObjectMethod") - .bases("Node", "Function") - .build("kind", "key", "params", "body", "computed") - .field("kind", or("method", "get", "set")) - .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) - .field("params", [def("Pattern")]) - .field("body", def("BlockStatement")) - .field("computed", Boolean, defaults["false"]) - .field("generator", Boolean, defaults["false"]) - .field("async", Boolean, defaults["false"]) - .field("decorators", - or([def("Decorator")], null), - defaults["null"]); - - def("ObjectProperty") - .bases("Node") - .build("key", "value") - .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) - .field("value", or(def("Expression"), def("Pattern"))) - .field("computed", Boolean, defaults["false"]); - - var ClassBodyElement = or( - def("MethodDefinition"), - def("VariableDeclarator"), - def("ClassPropertyDefinition"), - def("ClassProperty"), - def("ClassMethod") - ); - - // MethodDefinition -> ClassMethod - def("ClassBody") - .bases("Declaration") - .build("body") - .field("body", [ClassBodyElement]); - - def("ClassMethod") - .bases("Declaration", "Function") - .build("kind", "key", "params", "body", "computed", "static") - .field("kind", or("get", "set", "method", "constructor")) - .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) - .field("params", [def("Pattern")]) - .field("body", def("BlockStatement")) - .field("computed", Boolean, defaults["false"]) - .field("static", Boolean, defaults["false"]) - .field("generator", Boolean, defaults["false"]) - .field("async", Boolean, defaults["false"]) - .field("decorators", - or([def("Decorator")], null), - defaults["null"]); - - var ObjectPatternProperty = or( - def("Property"), - def("PropertyPattern"), - def("SpreadPropertyPattern"), - def("SpreadProperty"), // Used by Esprima - def("ObjectProperty"), // Babel 6 - def("RestProperty") // Babel 6 - ); - - // Split into RestProperty and SpreadProperty - def("ObjectPattern") - .bases("Pattern") - .build("properties") - .field("properties", [ObjectPatternProperty]) - .field("decorators", - or([def("Decorator")], null), - defaults["null"]); + def("RegExpLiteral") + .bases("Literal") + .build("pattern", "flags") + .field("pattern", String) + .field("flags", String) + .field("value", RegExp, function () { + return new RegExp(this.pattern, this.flags); + }); + var ObjectExpressionProperty = or( + def("Property"), + def("ObjectMethod"), + def("ObjectProperty"), def("SpreadProperty") - .bases("Node") - .build("argument") - .field("argument", def("Expression")); + ); - def("RestProperty") - .bases("Node") - .build("argument") - .field("argument", def("Expression")); + // Split Property -> ObjectProperty and ObjectMethod + def("ObjectExpression") + .bases("Expression") + .build("properties") + .field("properties", [ObjectExpressionProperty]); - def("ForAwaitStatement") - .bases("Statement") - .build("left", "right", "body") - .field("left", or( - def("VariableDeclaration"), - def("Expression"))) - .field("right", def("Expression")) - .field("body", def("Statement")); + // ObjectMethod hoist .value properties to own properties + def("ObjectMethod") + .bases("Node", "Function") + .build("kind", "key", "params", "body", "computed") + .field("kind", or("method", "get", "set")) + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) + .field("params", [def("Pattern")]) + .field("body", def("BlockStatement")) + .field("computed", Boolean, defaults["false"]) + .field("generator", Boolean, defaults["false"]) + .field("async", Boolean, defaults["false"]) + .field("decorators", + or([def("Decorator")], null), + defaults["null"]); + + def("ObjectProperty") + .bases("Node") + .build("key", "value") + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) + .field("value", or(def("Expression"), def("Pattern"))) + .field("computed", Boolean, defaults["false"]); + + var ClassBodyElement = or( + def("MethodDefinition"), + def("VariableDeclarator"), + def("ClassPropertyDefinition"), + def("ClassProperty"), + def("ClassMethod") + ); + + // MethodDefinition -> ClassMethod + def("ClassBody") + .bases("Declaration") + .build("body") + .field("body", [ClassBodyElement]); + + def("ClassMethod") + .bases("Declaration", "Function") + .build("kind", "key", "params", "body", "computed", "static") + .field("kind", or("get", "set", "method", "constructor")) + .field("key", or(def("Literal"), def("Identifier"), def("Expression"))) + .field("params", [def("Pattern")]) + .field("body", def("BlockStatement")) + .field("computed", Boolean, defaults["false"]) + .field("static", Boolean, defaults["false"]) + .field("generator", Boolean, defaults["false"]) + .field("async", Boolean, defaults["false"]) + .field("decorators", + or([def("Decorator")], null), + defaults["null"]); + + var ObjectPatternProperty = or( + def("Property"), + def("PropertyPattern"), + def("SpreadPropertyPattern"), + def("SpreadProperty"), // Used by Esprima + def("ObjectProperty"), // Babel 6 + def("RestProperty") // Babel 6 + ); + + // Split into RestProperty and SpreadProperty + def("ObjectPattern") + .bases("Pattern") + .build("properties") + .field("properties", [ObjectPatternProperty]) + .field("decorators", + or([def("Decorator")], null), + defaults["null"]); + + def("SpreadProperty") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + + def("RestProperty") + .bases("Node") + .build("argument") + .field("argument", def("Expression")); + + def("ForAwaitStatement") + .bases("Statement") + .build("left", "right", "body") + .field("left", or( + def("VariableDeclaration"), + def("Expression"))) + .field("right", def("Expression")) + .field("body", def("Statement")); + + // The callee node of a dynamic import(...) expression. + def("Import") + .bases("Expression") + .build(); }; var main = fork([ @@ -8433,7 +8465,7 @@ var main = fork([ babel6 ]); -function traverseDoc(doc, onEnter, onExit) { +function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) { var hasStopped = false; function traverseDocRec(doc) { if (onEnter) { @@ -8454,6 +8486,12 @@ function traverseDoc(doc, onEnter, onExit) { if (doc.flatContents) { traverseDocRec(doc.flatContents); } + } else if (doc.type === "group" && doc.expandedStates) { + if (shouldTraverseConditionalGroups) { + doc.expandedStates.forEach(traverseDocRec); + } else { + traverseDocRec(doc.contents); + } } else if (doc.contents) { traverseDocRec(doc.contents); } @@ -8501,18 +8539,6 @@ function isEmpty(n) { return typeof n === "string" && n.length === 0; } -function getFirstString(doc) { - return findInDoc( - doc, - doc => { - if (typeof doc === "string" && doc.trim().length !== 0) { - return doc; - } - }, - null - ); -} - function isLineNext(doc) { return findInDoc( doc, @@ -8538,6 +8564,9 @@ function willBreak$1(doc) { if (doc.type === "line" && doc.hard) { return true; } + if (doc.type === "break-parent") { + return true; + } }, false ); @@ -8574,13 +8603,13 @@ function propagateBreaks(doc) { breakParentGroup(groupStack); } } - } + }, + /* shouldTraverseConditionalGroups */ true ); } var docUtils = { isEmpty, - getFirstString, willBreak: willBreak$1, isLineNext, traverseDoc, @@ -8610,10 +8639,16 @@ function concat$1(parts) { return { type: "concat", parts }; } -function indent$1(n, contents) { +function indent$1(contents) { assertDoc(contents); - return { type: "indent", contents, n }; + return { type: "indent", contents }; +} + +function align$1(n, contents) { + assertDoc(contents); + + return { type: "align", contents, n }; } function group(contents, opts) { @@ -8689,11 +8724,10 @@ var docBuilders$1 = { lineSuffixBoundary, breakParent: breakParent$1, ifBreak, - indent: indent$1 + indent: indent$1, + align: align$1 }; -var require$$0$11 = ( assert$3 && assert$3['default'] ) || assert$3; - var types$3 = main; var n$1 = types$3.namedTypes; @@ -8860,20 +8894,33 @@ function skipNewline(text, index, opts) { const backwards = opts && opts.backwards; if (index === false) { return false; - } else if (backwards) { - if (text.charAt(index) === "\n") { + } + + const atIndex = text.charAt(index); + if (backwards) { + if ( + atIndex === "\n" || + atIndex === "\r" || + atIndex === "\u2028" || + atIndex === "\u2029" + ) { return index - 1; } - if (text.charAt(index - 1) === "\r" && text.charAt(index) === "\n") { + if (text.charAt(index - 1) === "\r" && atIndex === "\n") { return index - 2; } } else { - if (text.charAt(index) === "\n") { - return index + 1; - } - if (text.charAt(index) === "\r" && text.charAt(index + 1) === "\n") { + if (atIndex === "\r" && text.charAt(index + 1) === "\n") { return index + 2; } + if ( + atIndex === "\n" || + atIndex === "\r" || + atIndex === "\u2028" || + atIndex === "\u2029" + ) { + return index + 1; + } } return index; @@ -8908,10 +8955,10 @@ function isPreviousLineEmpty(text, node) { function isNextLineEmpty(text, node) { let oldIdx = null; let idx = locEnd$1(node); - idx = skipToLineEnd(text, idx); while (idx !== oldIdx) { // We need to skip all the potential trailing inline comments oldIdx = idx; + idx = skipToLineEnd(text, idx); idx = skipInlineComment(text, idx); idx = skipSpaces(text, idx); } @@ -8920,6 +8967,19 @@ function isNextLineEmpty(text, node) { return hasNewline(text, idx); } +function getNextNonSpaceNonCommentCharacter$1(text, node) { + let oldIdx = null; + let idx = locEnd$1(node); + while (idx !== oldIdx) { + oldIdx = idx; + idx = skipSpaces(text, idx); + idx = skipInlineComment(text, idx); + idx = skipTrailingComment(text, idx); + idx = skipNewline(text, idx); + } + return text.charAt(idx); +} + function hasSpaces(text, index, opts) { opts = opts || {}; const idx = skipSpaces(text, opts.backwards ? index - 1 : index, opts); @@ -8956,16 +9016,6 @@ function setLocEnd(node, index) { } } -// http://stackoverflow.com/a/7124052 -function htmlEscapeInsideDoubleQuote(str) { - return str.replace(/&/g, "&").replace(/"/g, """); - // Intentionally disable the following since it is safe inside of a - // double quote context - // .replace(/'/g, ''') - // .replace(//g, '>'); -} - // http://stackoverflow.com/a/7124052 function htmlEscapeInsideAngleBracket(str) { return str.replace(//g, ">"); @@ -9007,6 +9057,7 @@ var util$2 = { getParentExportDeclaration, getPenultimate, getLast, + getNextNonSpaceNonCommentCharacter: getNextNonSpaceNonCommentCharacter$1, skipWhitespace, skipSpaces, skipNewline, @@ -9019,10 +9070,11 @@ var util$2 = { locEnd: locEnd$1, setLocStart, setLocEnd, - htmlEscapeInsideDoubleQuote, htmlEscapeInsideAngleBracket }; +var require$$0$11 = ( assert$3 && assert$3['default'] ) || assert$3; + var assert = require$$0$11; var types = main; var n = types.namedTypes; @@ -9039,6 +9091,8 @@ var util = util$2; var childNodesCacheKey = Symbol("child-nodes"); var locStart = util.locStart; var locEnd = util.locEnd; +var getNextNonSpaceNonCommentCharacter = + util.getNextNonSpaceNonCommentCharacter; // TODO Move a non-caching implementation of this function into ast-types, // and implement a caching wrapper function here. @@ -9057,7 +9111,10 @@ function getSortedChildNodes(node, text, resultArray) { // time because we almost always (maybe always?) append the // nodes in order anyway. for (var i = resultArray.length - 1; i >= 0; --i) { - if (locEnd(resultArray[i]) - locStart(node) <= 0) { + if ( + locStart(resultArray[i]) <= locStart(node) && + locEnd(resultArray[i]) <= locEnd(node) + ) { break; } } @@ -9100,7 +9157,7 @@ function decorateComment(node, comment, text) { // Time to dust off the old binary search robes and wizard hat. var left = 0, right = childNodes.length; while (left < right) { - var middle = left + right >> 1; + var middle = (left + right) >> 1; var child = childNodes[middle]; if ( @@ -9167,24 +9224,38 @@ function attach(comments, ast, text, options) { // We also need to check if it's the first line of the file. if ( handleLastFunctionArgComments( + text, precedingNode, enclosingNode, followingNode, comment ) || handleMemberExpressionComments(enclosingNode, followingNode, comment) || - handleIfStatementComments(enclosingNode, followingNode, comment) || + handleIfStatementComments( + text, + precedingNode, + enclosingNode, + followingNode, + comment + ) || handleTryStatementComments(enclosingNode, followingNode, comment) || handleClassComments(enclosingNode, comment) || handleImportSpecifierComments(enclosingNode, comment) || handleObjectPropertyComments(enclosingNode, comment) || + handleForComments(enclosingNode, precedingNode, comment) || handleUnionTypeComments( precedingNode, enclosingNode, followingNode, comment ) || - handleOnlyComments(enclosingNode, ast, comment, isLastComment) + handleOnlyComments(enclosingNode, ast, comment, isLastComment) || + handleImportDeclarationComments( + enclosingNode, + precedingNode, + comment + ) || + handleAssignmentPatternComments(enclosingNode, comment) ) { // We're good } else if (followingNode) { @@ -9209,11 +9280,22 @@ function attach(comments, ast, text, options) { ) || handleImportSpecifierComments(enclosingNode, comment) || handleTemplateLiteralComments(enclosingNode, comment) || + handleIfStatementComments( + text, + precedingNode, + enclosingNode, + followingNode, + comment + ) || handleClassComments(enclosingNode, comment) || + handleLabeledStatementComments(enclosingNode, comment) || handleCallExpressionComments(precedingNode, enclosingNode, comment) || handlePropertyComments(enclosingNode, comment) || handleExportNamedDeclarationComments(enclosingNode, comment) || - handleOnlyComments(enclosingNode, ast, comment, isLastComment) + handleOnlyComments(enclosingNode, ast, comment, isLastComment) || + handleClassMethodComments(enclosingNode, comment) || + handleTypeAliasComments(enclosingNode, followingNode, comment) || + handleVariableDeclaratorComments(enclosingNode, followingNode, comment) ) { // We're good } else if (precedingNode) { @@ -9230,7 +9312,13 @@ function attach(comments, ast, text, options) { } } else { if ( - handleIfStatementComments(enclosingNode, followingNode, comment) || + handleIfStatementComments( + text, + precedingNode, + enclosingNode, + followingNode, + comment + ) || handleObjectPropertyAssignment(enclosingNode, precedingNode, comment) || handleTemplateLiteralComments(enclosingNode, comment) || handleCommentInEmptyParens(enclosingNode, comment) || @@ -9376,13 +9464,30 @@ function addBlockOrNotComment(node, comment) { // // comment // ... // } -function handleIfStatementComments(enclosingNode, followingNode, comment) { +function handleIfStatementComments( + text, + precedingNode, + enclosingNode, + followingNode, + comment +) { if ( !enclosingNode || enclosingNode.type !== "IfStatement" || !followingNode ) { return false; } + // We unfortunately have no way using the AST or location of nodes to know + // if the comment is positioned before or after the condition parenthesis: + // if (a /* comment */) {} + // if (a) /* comment */ {} + // The only workaround I found is to look at the next character to see if + // it is a ). + if (getNextNonSpaceNonCommentCharacter(text, comment) === ")") { + addTrailingComment(precedingNode, comment); + return true; + } + if (followingNode.type === "BlockStatement") { addBlockStatementFirstComment(followingNode, comment); return true; @@ -9443,7 +9548,8 @@ function handleConditionalExpressionComments( comment, text ) { - const isSameLineAsPrecedingNode = precedingNode && + const isSameLineAsPrecedingNode = + precedingNode && !util.hasNewlineInRange(text, locEnd(precedingNode), locStart(comment)); if ( @@ -9497,16 +9603,18 @@ function handleCommentInEmptyParens(enclosingNode, comment) { enclosingNode.type === "ArrowFunctionExpression" || enclosingNode.type === "ClassMethod" || enclosingNode.type === "ObjectMethod") && - enclosingNode.params.length === 0) || - (enclosingNode.type === "CallExpression" && - enclosingNode.arguments.length === 0)) + enclosingNode.params.length === 0) || + (enclosingNode.type === "CallExpression" && + enclosingNode.arguments.length === 0)) ) { addDanglingComment(enclosingNode, comment); return true; } - if (enclosingNode && + if ( + enclosingNode && (enclosingNode.type === "MethodDefinition" && - enclosingNode.value.params.length === 0)) { + enclosingNode.value.params.length === 0) + ) { addDanglingComment(enclosingNode.value, comment); return true; } @@ -9514,6 +9622,7 @@ function handleCommentInEmptyParens(enclosingNode, comment) { } function handleLastFunctionArgComments( + text, precedingNode, enclosingNode, followingNode, @@ -9535,12 +9644,15 @@ function handleLastFunctionArgComments( // Real functions if ( precedingNode && - precedingNode.type === "Identifier" && + (precedingNode.type === "Identifier" || + precedingNode.type === "AssignmentPattern") && enclosingNode && (enclosingNode.type === "ArrowFunctionExpression" || - enclosingNode.type === "FunctionExpression") && - followingNode && - followingNode.type !== "Identifier" + enclosingNode.type === "FunctionExpression" || + enclosingNode.type === "FunctionDeclaration" || + enclosingNode.type === "ObjectMethod" || + enclosingNode.type === "ClassMethod") && + getNextNonSpaceNonCommentCharacter(text, comment) === ")" ) { addTrailingComment(precedingNode, comment); return true; @@ -9576,6 +9688,14 @@ function handleObjectPropertyComments(enclosingNode, comment) { return false; } +function handleLabeledStatementComments(enclosingNode, comment) { + if (enclosingNode && enclosingNode.type === "LabeledStatement") { + addLeadingComment(enclosingNode, comment); + return true; + } + return false; +} + function handleCallExpressionComments(precedingNode, enclosingNode, comment) { if ( enclosingNode && @@ -9596,14 +9716,7 @@ function handleUnionTypeComments( followingNode, comment ) { - if ( - enclosingNode && - enclosingNode.type === "UnionTypeAnnotation" && - precedingNode && - precedingNode.type === "ObjectTypeAnnotation" && - followingNode && - followingNode.type === "ObjectTypeAnnotation" - ) { + if (enclosingNode && enclosingNode.type === "UnionTypeAnnotation") { addTrailingComment(precedingNode, comment); return true; } @@ -9612,10 +9725,9 @@ function handleUnionTypeComments( function handlePropertyComments(enclosingNode, comment) { if ( - enclosingNode && ( - enclosingNode.type === "Property" || - enclosingNode.type === "ObjectProperty" - ) + enclosingNode && + (enclosingNode.type === "Property" || + enclosingNode.type === "ObjectProperty") ) { addLeadingComment(enclosingNode, comment); return true; @@ -9641,8 +9753,10 @@ function handleOnlyComments(enclosingNode, ast, comment, isLastComment) { } return true; } else if ( - enclosingNode && enclosingNode.type === 'Program' && - enclosingNode.body.length === 0 && enclosingNode.directives && + enclosingNode && + enclosingNode.type === "Program" && + enclosingNode.body.length === 0 && + enclosingNode.directives && enclosingNode.directives.length === 0 ) { if (isLastComment) { @@ -9655,6 +9769,78 @@ function handleOnlyComments(enclosingNode, ast, comment, isLastComment) { return false; } +function handleForComments(enclosingNode, precedingNode, comment) { + if ( + enclosingNode && + (enclosingNode.type === "ForInStatement" || + enclosingNode.type === "ForOfStatement") + ) { + addLeadingComment(enclosingNode, comment); + return true; + } + return false; +} + +function handleImportDeclarationComments( + enclosingNode, + precedingNode, + comment +) { + if ( + precedingNode && + enclosingNode && + enclosingNode.type === "ImportDeclaration" && + comment.type !== "CommentBlock" && + comment.type !== "Block" + ) { + addTrailingComment(precedingNode, comment); + return true; + } + return false; +} + +function handleAssignmentPatternComments(enclosingNode, comment) { + if (enclosingNode && enclosingNode.type === "AssignmentPattern") { + addLeadingComment(enclosingNode, comment); + return true; + } + return false; +} + +function handleClassMethodComments(enclosingNode, comment) { + if (enclosingNode && enclosingNode.type === "ClassMethod") { + addTrailingComment(enclosingNode, comment); + return true; + } + return false; +} + +function handleTypeAliasComments(enclosingNode, followingNode, comment) { + if (enclosingNode && enclosingNode.type === "TypeAlias") { + addLeadingComment(enclosingNode, comment); + return true; + } + return false; +} + +function handleVariableDeclaratorComments( + enclosingNode, + followingNode, + comment +) { + if ( + enclosingNode && + enclosingNode.type === "VariableDeclarator" && + followingNode && + (followingNode.type === "ObjectExpression" || + followingNode.type === "ArrayExpression") + ) { + addLeadingComment(followingNode, comment); + return true; + } + return false; +} + function printComment(commentPath) { const comment = commentPath.getValue(); comment.printed = true; @@ -9765,15 +9951,12 @@ function printDanglingComments(path, options, sameIndent) { return ""; } - path.each( - commentPath => { - const comment = commentPath.getValue(); - if (!comment.leading && !comment.trailing) { - parts.push(printComment(commentPath)); - } - }, - "comments" - ); + path.each(commentPath => { + const comment = commentPath.getValue(); + if (!comment.leading && !comment.trailing) { + parts.push(printComment(commentPath)); + } + }, "comments"); if (parts.length === 0) { return ""; @@ -9782,7 +9965,7 @@ function printDanglingComments(path, options, sameIndent) { if (sameIndent) { return join(hardline, parts); } - return indent(options.tabWidth, concat([hardline, join(hardline, parts)])); + return indent(concat([hardline, join(hardline, parts)])); } function printComments(path, print, options) { @@ -9798,29 +9981,24 @@ function printComments(path, print, options) { var leadingParts = []; var trailingParts = [printed]; - path.each( - function(commentPath) { - var comment = commentPath.getValue(); - var leading = types.getFieldValue(comment, "leading"); - var trailing = types.getFieldValue(comment, "trailing"); + path.each(function(commentPath) { + var comment = commentPath.getValue(); + var leading = types.getFieldValue(comment, "leading"); + var trailing = types.getFieldValue(comment, "trailing"); - if (leading) { - leadingParts.push(printLeadingComment(commentPath, print, options)); + if (leading) { + leadingParts.push(printLeadingComment(commentPath, print, options)); - const text = options.originalText; - if ( - util.hasNewline(text, util.skipNewline(text, util.locEnd(comment))) - ) { - leadingParts.push(hardline); - } - } else if (trailing) { - trailingParts.push( - printTrailingComment(commentPath, print, options, parent) - ); + const text = options.originalText; + if (util.hasNewline(text, util.skipNewline(text, util.locEnd(comment)))) { + leadingParts.push(hardline); } - }, - "comments" - ); + } else if (trailing) { + trailingParts.push( + printTrailingComment(commentPath, print, options, parent) + ); + } + }, "comments"); return concat(leadingParts.concat(trailingParts)); } @@ -9828,18 +10006,17 @@ function printComments(path, print, options) { var comments$1 = { attach, printComments, printDanglingComments }; var name = "prettier"; -var version$2 = "0.22.0"; +var version$2 = "1.0.0"; var description = "Prettier is an opinionated JavaScript formatter"; var bin = {"prettier":"./bin/prettier.js"}; -var repository = {"type":"git","url":"git+https://github.com/jlongster/prettier.git"}; +var repository = "prettier/prettier"; var author = "James Long"; var license = "MIT"; -var bugs = {"url":"https://github.com/jlongster/prettier/issues"}; var main$2 = "./index.js"; -var dependencies = {"ast-types":"0.9.4","babel-code-frame":"6.22.0","babylon":"6.15.0","chalk":"1.1.3","esutils":"2.0.2","flow-parser":"0.40.0","get-stdin":"5.0.1","glob":"7.1.1","jest-validate":"19.0.0","minimist":"1.2.0"}; -var devDependencies = {"diff":"3.2.0","jest":"19.0.1","rollup":"0.41.1","rollup-plugin-commonjs":"7.0.0","rollup-plugin-json":"2.1.0","rollup-plugin-node-builtins":"2.0.0","rollup-plugin-node-globals":"1.1.0","rollup-plugin-node-resolve":"2.0.0","typescript":"2.2.1","typescript-eslint-parser":"git://github.com/eslint/typescript-eslint-parser.git#215a012ec4d272939fa5a57d0231d22fb7f7a9e0"}; +var dependencies = {"ast-types":"0.9.8","babel-code-frame":"6.22.0","babylon":"7.0.0-beta.8","chalk":"1.1.3","esutils":"2.0.2","flow-parser":"0.43.0","get-stdin":"5.0.1","glob":"7.1.1","jest-validate":"19.0.0","minimist":"1.2.0"}; +var devDependencies = {"diff":"3.2.0","jest":"19.0.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","rollup":"0.41.1","rollup-plugin-commonjs":"7.0.0","rollup-plugin-json":"2.1.0","rollup-plugin-node-builtins":"2.0.0","rollup-plugin-node-globals":"1.1.0","rollup-plugin-node-resolve":"2.0.0","typescript":"2.2.1","typescript-eslint-parser":"git://github.com/eslint/typescript-eslint-parser.git#bfb1506c48b625871ffeb67dbec7941d460f8941"}; var scripts = {"test":"jest","format":"./bin/prettier.js --write","format:single":"npm run format -- src/printer.js","format:all":"npm run format -- index.js src/*.js bin/*.js","build:docs":"rollup -c docs/rollup.config.js"}; -var jest = {"setupFiles":["/tests_config/run_spec.js"],"testRegex":"jsfmt\\.spec\\.js$","testPathIgnorePatterns":["tests/new_react","tests/more_react"]}; +var jest = {"setupFiles":["/tests_config/run_spec.js"],"snapshotSerializers":["/tests_config/raw-serializer.js"],"testRegex":"jsfmt\\.spec\\.js$","testPathIgnorePatterns":["tests/new_react","tests/more_react"]}; var _package = { name: name, version: version$2, @@ -9848,7 +10025,6 @@ var _package = { repository: repository, author: author, license: license, - bugs: bugs, main: main$2, dependencies: dependencies, devDependencies: devDependencies, @@ -9864,7 +10040,6 @@ var _package$1 = Object.freeze({ repository: repository, author: author, license: license, - bugs: bugs, main: main$2, dependencies: dependencies, devDependencies: devDependencies, @@ -9873,7 +10048,7 @@ var _package$1 = Object.freeze({ default: _package }); -var assert$6 = require$$0$11; +var assert$5 = require$$0$11; var types$5 = main; var util$5 = util$2; var n$2 = types$5.namedTypes; @@ -9881,7 +10056,7 @@ var isArray$3 = types$5.builtInTypes.array; var isNumber$1 = types$5.builtInTypes.number; function FastPath$1(value) { - assert$6.ok(this instanceof FastPath$1); + assert$5.ok(this instanceof FastPath$1); this.stack = [value]; } @@ -9961,11 +10136,11 @@ FPp.isLast = function isLast() { if (this.getParentNode()) { var idx = s[s.length - 2]; // The name of this node should be an index - assert$6.ok(typeof idx === "number"); + assert$5.ok(typeof idx === "number"); const arr = s[s.length - 3]; // We should have an array as a parent node - assert$6.ok(Array.isArray(arr)); + assert$5.ok(Array.isArray(arr)); return idx === arr.length - 1; } @@ -10107,34 +10282,46 @@ FPp.needsParens = function(assumeExpressionContext) { } if ( - parent.type === "ArrowFunctionExpression" && parent.body === node && startsWithNoLookaheadToken(node, /* forbidFunctionAndClass */ false) - || parent.type === "ExpressionStatement" && startsWithNoLookaheadToken(node, /* forbidFunctionAndClass */ true) + (parent.type === "ArrowFunctionExpression" && + parent.body === node && + startsWithNoLookaheadToken(node, /* forbidFunctionAndClass */ false)) || + (parent.type === "ExpressionStatement" && + startsWithNoLookaheadToken(node, /* forbidFunctionAndClass */ true)) ) { return true; } switch (node.type) { case "CallExpression": + if (parent.type === "NewExpression" && parent.callee === node) { + return true; + } return false; case "SpreadElement": case "SpreadProperty": - return parent.type === "MemberExpression" && + return ( + parent.type === "MemberExpression" && name === "object" && - parent.object === node; + parent.object === node + ); case "UpdateExpression": if (parent.type === "UnaryExpression") { - return node.prefix && + return ( + node.prefix && ((node.operator === "++" && parent.operator === "+") || - (node.operator === "--" && parent.operator === "-")); + (node.operator === "--" && parent.operator === "-")) + ); } - // else fall through + // else fall through case "UnaryExpression": switch (parent.type) { case "UnaryExpression": - return node.operator === parent.operator && - (node.operator === "+" || node.operator === "-"); + return ( + node.operator === parent.operator && + (node.operator === "+" || node.operator === "-") + ); case "MemberExpression": return name === "object" && parent.object === node; @@ -10144,7 +10331,7 @@ FPp.needsParens = function(assumeExpressionContext) { case "NewExpression": case "CallExpression": - return name === "callee" && parent.callee == node; + return name === "callee" && parent.callee === node; case "BinaryExpression": return parent.operator === "**" && name === "left"; @@ -10171,7 +10358,7 @@ FPp.needsParens = function(assumeExpressionContext) { if (node.operator === "in" && isLeftOfAForStatement(node)) { return true; } - // else fall through + // else fall through case "LogicalExpression": switch (parent.type) { case "CallExpression": @@ -10207,7 +10394,13 @@ FPp.needsParens = function(assumeExpressionContext) { } if (pp === np && name === "right") { - assert$6.strictEqual(parent.right, node); + assert$5.strictEqual(parent.right, node); + return true; + } + + // Add parenthesis when working with binary operators + // It's not stricly needed but helps with code understanding + if (["|", "^", "&", ">>", "<<", ">>>"].indexOf(po) !== -1) { return true; } @@ -10240,7 +10433,7 @@ FPp.needsParens = function(assumeExpressionContext) { if (parent.type === "UnaryExpression") { return true; } - // else fall through + // else fall through case "AwaitExpression": switch (parent.type) { case "TaggedTemplateExpression": @@ -10267,24 +10460,30 @@ FPp.needsParens = function(assumeExpressionContext) { case "IntersectionTypeAnnotation": case "UnionTypeAnnotation": - return parent.type === "ArrayTypeAnnotation" || + return ( + parent.type === "ArrayTypeAnnotation" || parent.type === "NullableTypeAnnotation" || parent.type === "IntersectionTypeAnnotation" || - parent.type === "UnionTypeAnnotation"; + parent.type === "UnionTypeAnnotation" + ); case "NullableTypeAnnotation": return parent.type === "ArrayTypeAnnotation"; case "FunctionTypeAnnotation": - return parent.type === "UnionTypeAnnotation" || - parent.type === "IntersectionTypeAnnotation"; + return ( + parent.type === "UnionTypeAnnotation" || + parent.type === "IntersectionTypeAnnotation" + ); case "NumericLiteral": case "Literal": - return parent.type === "MemberExpression" && + return ( + parent.type === "MemberExpression" && isNumber$1.check(node.value) && name === "object" && - parent.object === node; + parent.object === node + ); case "AssignmentExpression": if (parent.type === "ArrowFunctionExpression" && parent.body === node) { @@ -10296,6 +10495,8 @@ FPp.needsParens = function(assumeExpressionContext) { return false; } else if (parent.type === "ExpressionStatement") { return node.left.type === "ObjectPattern"; + } else if (parent.type === "AssignmentExpression") { + return false; } return true; @@ -10307,9 +10508,10 @@ FPp.needsParens = function(assumeExpressionContext) { case "SpreadProperty": case "BinaryExpression": case "LogicalExpression": - case "LogicalExpression": case "ExportDefaultDeclaration": case "AwaitExpression": + case "JSXSpreadAttribute": + case "ArrowFunctionExpression": return true; case "NewExpression": @@ -10351,7 +10553,7 @@ FPp.needsParens = function(assumeExpressionContext) { case "BindExpression": case "TaggedTemplateExpression": - case "UnaryExpression": + case "UnaryExpression": case "LogicalExpression": case "BinaryExpression": return true; @@ -10426,11 +10628,20 @@ function startsWithNoLookaheadToken(node, forbidFunctionAndClass) { case "ConditionalExpression": return startsWithNoLookaheadToken(node.test, forbidFunctionAndClass); case "UpdateExpression": - return !node.prefix && startsWithNoLookaheadToken(node.argument, forbidFunctionAndClass); + return ( + !node.prefix && + startsWithNoLookaheadToken(node.argument, forbidFunctionAndClass) + ); case "BindExpression": - return node.object && startsWithNoLookaheadToken(node.object, forbidFunctionAndClass); + return ( + node.object && + startsWithNoLookaheadToken(node.object, forbidFunctionAndClass) + ); case "SequenceExpression": - return startsWithNoLookaheadToken(node.expressions[0], forbidFunctionAndClass) + return startsWithNoLookaheadToken( + node.expressions[0], + forbidFunctionAndClass + ); default: return false; } @@ -10446,7 +10657,7 @@ function getLeftMost(node) { var fastPath = FastPath$1; -var assert$5 = require$$0$11; +var assert$4 = require$$0$11; var comments$3 = comments$1; var FastPath = fastPath; var util$4 = util$2; @@ -10461,6 +10672,7 @@ var softline$1 = docBuilders$3.softline; var literalline$1 = docBuilders$3.literalline; var group$1 = docBuilders$3.group; var indent$2 = docBuilders$3.indent; +var align$2 = docBuilders$3.align; var conditionalGroup$1 = docBuilders$3.conditionalGroup; var ifBreak$1 = docBuilders$3.ifBreak; var breakParent$2 = docBuilders$3.breakParent; @@ -10469,7 +10681,6 @@ var lineSuffixBoundary$1 = docBuilders$3.lineSuffixBoundary; var docUtils$2 = docUtils; var willBreak$2 = docUtils$2.willBreak; var isLineNext$1 = docUtils$2.isLineNext; -var getFirstString$1 = docUtils$2.getFirstString; var isEmpty$1 = docUtils$2.isEmpty; var types$4 = main; @@ -10493,13 +10704,13 @@ function shouldPrintComma(options, level) { } } -function genericPrint(path, options, printPath) { - assert$5.ok(path instanceof FastPath); +function genericPrint(path, options, printPath, args) { + assert$4.ok(path instanceof FastPath); var node = path.getValue(); var parts = []; var needsParens = false; - var linesWithoutParens = genericPrintNoParens(path, options, printPath); + var linesWithoutParens = genericPrintNoParens(path, options, printPath, args); if (!node || isEmpty$1(linesWithoutParens)) { return linesWithoutParens; @@ -10509,7 +10720,7 @@ function genericPrint(path, options, printPath) { if ( node.comments && node.comments.length > 0 && - node.comments[0].value.trim() === "prettier-ignore" + node.comments.some(comment => comment.value.trim() === "prettier-ignore") ) { return options.originalText.slice(util$4.locStart(node), util$4.locEnd(node)); } @@ -10522,15 +10733,13 @@ function genericPrint(path, options, printPath) { !util$4.getParentExportDeclaration(path) ) { const separator = node.decorators.length === 1 && - node.decorators[0].expression.type === "Identifier" + (node.decorators[0].expression.type === "Identifier" || + node.decorators[0].expression.type === "MemberExpression") ? " " : hardline$2; - path.each( - function(decoratorPath) { - parts.push(printPath(decoratorPath), separator); - }, - "decorators" - ); + path.each(function(decoratorPath) { + parts.push(printPath(decoratorPath), separator); + }, "decorators"); } else if ( util$4.isExportDeclaration(node) && node.declaration && @@ -10551,6 +10760,14 @@ function genericPrint(path, options, printPath) { needsParens = path.needsParens(); } + if (node.type) { + // HACK: ASI prevention in no-semi mode relies on knowledge of whether + // or not a paren has been inserted (see `exprNeedsASIProtection()`). + // For now, we're just passing that information by mutating the AST here, + // but it would be nice to find a cleaner way to do this. + node.needsParens = needsParens; + } + if (needsParens) { parts.unshift("("); } @@ -10564,8 +10781,9 @@ function genericPrint(path, options, printPath) { return concat$2(parts); } -function genericPrintNoParens(path, options, print) { +function genericPrintNoParens(path, options, print, args) { var n = path.getValue(); + const semi = options.semi ? ";" : ""; if (!n) { return ""; @@ -10575,10 +10793,10 @@ function genericPrintNoParens(path, options, print) { return n; } - // TODO: For some reason NumericLiteralTypeAnnotation is not - // printable so this throws, but I think that's a bug in ast-types. + // TODO: Investigate types that return not printable. // This assert isn't very useful though. // namedTypes.Printable.assert(n); + var parts = []; switch (n.type) { case "File": @@ -10586,26 +10804,20 @@ function genericPrintNoParens(path, options, print) { case "Program": // Babel 6 if (n.directives) { - path.each( - function(childPath) { - parts.push(print(childPath), ";", hardline$2); - if ( - util$4.isNextLineEmpty(options.originalText, childPath.getValue()) - ) { - parts.push(hardline$2); - } - }, - "directives" - ); + path.each(function(childPath) { + parts.push(print(childPath), semi, hardline$2); + if ( + util$4.isNextLineEmpty(options.originalText, childPath.getValue()) + ) { + parts.push(hardline$2); + } + }, "directives"); } parts.push( - path.call( - function(bodyPath) { - return printStatementSequence(bodyPath, options, print); - }, - "body" - ) + path.call(function(bodyPath) { + return printStatementSequence(bodyPath, options, print); + }, "body") ); parts.push( @@ -10623,35 +10835,28 @@ function genericPrintNoParens(path, options, print) { case "EmptyStatement": return ""; case "ExpressionStatement": - return concat$2([path.call(print, "expression"), ";"]); // Babel extension. + return concat$2([path.call(print, "expression"), semi]); // Babel extension. case "ParenthesizedExpression": return concat$2(["(", path.call(print, "expression"), ")"]); case "AssignmentExpression": - return group$1( - concat$2([ - path.call(print, "left"), - " ", - n.operator, - hasLeadingOwnLineComment(options.originalText, n.right) - ? indent$2( - options.tabWidth, - concat$2([hardline$2, path.call(print, "right")]) - ) - : concat$2([" ", path.call(print, "right")]) - ]) + return printAssignment( + path.call(print, "left"), + n.operator, + n.right, + path.call(print, "right"), + options ); case "BinaryExpression": case "LogicalExpression": { - const parts = []; - printBinaryishExpressions(path, parts, print, options); + const parts = printBinaryishExpressions(path, print, options); const parent = path.getParentNode(); // Avoid indenting sub-expressions in if/etc statements. if ( - (hasLeadingOwnLineComment(options.originalText, n) && - (parent.type === "AssignmentExpression" || - parent.type === "VariableDeclarator")) || + parent.type === "AssignmentExpression" || + parent.type === "VariableDeclarator" || shouldInlineLogicalExpression(n) || + parent.type === "ReturnStatement" || (n !== parent.body && (parent.type === "IfStatement" || parent.type === "WhileStatement" || @@ -10670,7 +10875,7 @@ function genericPrintNoParens(path, options, print) { // level. The first item is guaranteed to be the first // left-most expression. parts.length > 0 ? parts[0] : "", - indent$2(options.tabWidth, rest) + indent$2(rest) ]) ); } @@ -10681,9 +10886,22 @@ function genericPrintNoParens(path, options, print) { path.call(print, "right") ]); case "MemberExpression": { + const parent = path.getParentNode(); + const shouldInline = + n.computed || + (n.object.type === "Identifier" && + n.property.type === "Identifier" && + parent.type !== "MemberExpression"); + return concat$2([ path.call(print, "object"), - printMemberLookup(path, options, print) + shouldInline + ? printMemberLookup(path, options, print) + : group$1( + indent$2( + concat$2([softline$1, printMemberLookup(path, options, print)]) + ) + ) ]); } case "MetaProperty": @@ -10715,6 +10933,7 @@ function genericPrintNoParens(path, options, print) { case "SpreadProperty": case "SpreadPropertyPattern": case "RestElement": + case "ObjectTypeSpreadProperty": return concat$2([ "...", path.call(print, "argument"), @@ -10722,52 +10941,26 @@ function genericPrintNoParens(path, options, print) { ]); case "FunctionDeclaration": case "FunctionExpression": - if (n.async) parts.push("async "); - - parts.push("function"); - - if (n.generator) parts.push("*"); - - if (n.id) { - parts.push(" ", path.call(print, "id")); - } - - parts.push( - path.call(print, "typeParameters"), - group$1( - concat$2([ - printFunctionParams(path, print, options), - printReturnType(path, print) - ]) - ), - " ", - path.call(print, "body") - ); - - return concat$2(parts); - case "ArrowFunctionExpression": + return printFunctionDeclaration(path, print, options); + case "ArrowFunctionExpression": { if (n.async) parts.push("async "); if (n.typeParameters) { parts.push(path.call(print, "typeParameters")); } - if ( - n.params.length === 1 && - !n.rest && - n.params[0].type === "Identifier" && - !n.params[0].typeAnnotation && - !n.params[0].leadingComments && - !n.params[0].trailingComments && - !n.predicate && - !n.returnType - ) { + if (canPrintParamsWithoutParens(n)) { parts.push(path.call(print, "params", 0)); } else { parts.push( group$1( concat$2([ - printFunctionParams(path, print, options), + printFunctionParams( + path, + print, + options, + args && (args.expandLastArg || args.expandFirstArg) + ), printReturnType(path, print) ]) ) @@ -10787,17 +10980,35 @@ function genericPrintNoParens(path, options, print) { n.body.type === "JSXElement" || n.body.type === "BlockStatement" || n.body.type === "TaggedTemplateExpression" || - n.body.type === "TemplateElement" + n.body.type === "TemplateElement" || + n.body.type === "ClassExpression" || + n.body.type === "ArrowFunctionExpression" ) { return group$1(collapsed); } + // if the arrow function is expanded as last argument, we are adding a + // level of indentation and need to add a softline to align the closing ) + // with the opening (. + const shouldAddSoftLine = args && args.expandLastArg; + return group$1( concat$2([ concat$2(parts), - group$1(indent$2(options.tabWidth, concat$2([line$1, body]))) + group$1( + concat$2([ + indent$2(concat$2([line$1, body])), + shouldAddSoftLine + ? concat$2([ + ifBreak$1(shouldPrintComma(options, "all") ? "," : ""), + softline$1 + ]) + : "" + ]) + ) ]) ); + } case "MethodDefinition": if (n.static) { parts.push("static "); @@ -10826,7 +11037,7 @@ function genericPrintNoParens(path, options, print) { parts.push("module", path.call(print, "id")); if (n.source) { - assert$5.ok(!n.body); + assert$4.ok(!n.body); parts.push("from", path.call(print, "source")); } else { @@ -10899,11 +11110,10 @@ function genericPrintNoParens(path, options, print) { parts.push(" as ", path.call(print, "exported")); } - parts.push(" from ", path.call(print, "source"), ";"); + parts.push(" from ", path.call(print, "source"), semi); return concat$2(parts); case "ExportNamespaceSpecifier": - return concat$2(["* as ", path.call(print, "exported")]); case "ExportDefaultSpecifier": return path.call(print, "exported"); case "ImportDeclaration": @@ -10918,20 +11128,17 @@ function genericPrintNoParens(path, options, print) { var standalones = []; var grouped = []; if (n.specifiers && n.specifiers.length > 0) { - path.each( - function(specifierPath) { - var value = specifierPath.getValue(); - if ( - namedTypes.ImportDefaultSpecifier.check(value) || - namedTypes.ImportNamespaceSpecifier.check(value) - ) { - standalones.push(print(specifierPath)); - } else { - grouped.push(print(specifierPath)); - } - }, - "specifiers" - ); + path.each(function(specifierPath) { + var value = specifierPath.getValue(); + if ( + namedTypes.ImportDefaultSpecifier.check(value) || + namedTypes.ImportNamespaceSpecifier.check(value) + ) { + standalones.push(print(specifierPath)); + } else { + grouped.push(print(specifierPath)); + } + }, "specifiers"); if (standalones.length > 0) { parts.push(join$2(", ", standalones)); @@ -10947,7 +11154,6 @@ function genericPrintNoParens(path, options, print) { concat$2([ "{", indent$2( - options.tabWidth, concat$2([ options.bracketSpacing ? line$1 : softline$1, join$2(concat$2([",", line$1]), grouped) @@ -10966,7 +11172,7 @@ function genericPrintNoParens(path, options, print) { parts.push("{} from "); } - fromParts.push(path.call(print, "source"), ";"); + fromParts.push(path.call(print, "source"), semi); // If there's a very long import, break the following way: // @@ -10976,9 +11182,7 @@ function genericPrintNoParens(path, options, print) { // In case there are grouped elements, they will already break the way // we want and this break would take precedence instead. if (grouped.length === 0) { - return group$1( - concat$2([concat$2(parts), indent$2(options.tabWidth, concat$2(fromParts))]) - ); + return group$1(concat$2([concat$2(parts), indent$2(concat$2(fromParts))])); } return concat$2([concat$2(parts), concat$2(fromParts)]); @@ -10987,14 +11191,11 @@ function genericPrintNoParens(path, options, print) { return "import"; } case "BlockStatement": { - var naked = path.call( - function(bodyPath) { - return printStatementSequence(bodyPath, options, print); - }, - "body" - ); + var naked = path.call(function(bodyPath) { + return printStatementSequence(bodyPath, options, print); + }, "body"); - const hasContent = getFirstString$1(naked); + const hasContent = n.body.find(node => node.type !== "EmptyStatement"); const hasDirectives = n.directives && n.directives.length > 0; var parent = path.getParentNode(); @@ -11017,21 +11218,13 @@ function genericPrintNoParens(path, options, print) { // Babel 6 if (hasDirectives) { - path.each( - function(childPath) { - parts.push( - indent$2( - options.tabWidth, - concat$2([hardline$2, print(childPath), ";"]) - ) - ); - }, - "directives" - ); + path.each(function(childPath) { + parts.push(indent$2(concat$2([hardline$2, print(childPath), semi]))); + }, "directives"); } if (hasContent) { - parts.push(indent$2(options.tabWidth, concat$2([hardline$2, naked]))); + parts.push(indent$2(concat$2([hardline$2, naked]))); } parts.push(comments$3.printDanglingComments(path, options)); @@ -11047,20 +11240,42 @@ function genericPrintNoParens(path, options, print) { parts.push( concat$2([ " (", - indent$2( - options.tabWidth, - concat$2([softline$1, path.call(print, "argument")]) - ), + indent$2(concat$2([softline$1, path.call(print, "argument")])), line$1, ")" ]) ); + } else if ( + n.argument.type === "LogicalExpression" || + n.argument.type === "BinaryExpression" + ) { + parts.push( + group$1( + concat$2([ + ifBreak$1(" (", " "), + indent$2(concat$2([softline$1, path.call(print, "argument")])), + softline$1, + ifBreak$1(")") + ]) + ) + ); } else { parts.push(" ", path.call(print, "argument")); } } - parts.push(";"); + const hasDanglingComments = + n.comments && + n.comments.some(comment => !comment.leading && !comment.trailing); + + if (hasDanglingComments) { + parts.push( + " ", + comments$3.printDanglingComments(path, options, /* sameIndent */ true) + ); + } + + parts.push(semi); return concat$2(parts); case "CallExpression": { @@ -11084,6 +11299,7 @@ function genericPrintNoParens(path, options, print) { ) { return concat$2([ path.call(print, "callee"), + path.call(print, "typeParameters"), concat$2(["(", join$2(", ", path.map(print, "arguments")), ")"]) ]); } @@ -11096,6 +11312,7 @@ function genericPrintNoParens(path, options, print) { return concat$2([ path.call(print, "callee"), + path.call(print, "typeParameters"), printArgumentsList(path, options, print) ]); } @@ -11103,60 +11320,67 @@ function genericPrintNoParens(path, options, print) { case "ObjectExpression": case "ObjectPattern": case "ObjectTypeAnnotation": - var allowBreak = false; + case "TSTypeLiteral": var isTypeAnnotation = n.type === "ObjectTypeAnnotation"; + var isTypeScriptTypeAnnotaion = n.type === "TSTypeLiteral"; // Leave this here because we *might* want to make this - // configurable later -- flow accepts ";" for type separators + // configurable later -- flow accepts ";" for type separators, + // typescript accepts ";" and newlines var separator = isTypeAnnotation ? "," : ","; var fields = []; var leftBrace = n.exact ? "{|" : "{"; var rightBrace = n.exact ? "|}" : "}"; var parent = path.getParentNode(0); var parentIsUnionTypeAnnotation = parent.type === "UnionTypeAnnotation"; + var propertiesField = isTypeScriptTypeAnnotaion + ? "members" + : "properties"; if (isTypeAnnotation) { fields.push("indexers", "callProperties"); } - fields.push("properties"); + fields.push(propertiesField); var props = []; let separatorParts = []; fields.forEach(function(field) { - path.each( - function(childPath) { - props.push(concat$2(separatorParts)); - props.push(group$1(print(childPath))); + path.each(function(childPath) { + props.push(concat$2(separatorParts)); + props.push(group$1(print(childPath))); - separatorParts = [separator, line$1]; - if ( - util$4.isNextLineEmpty(options.originalText, childPath.getValue()) - ) { - separatorParts.push(hardline$2); - } - }, - field - ); + separatorParts = [separator, line$1]; + if ( + util$4.isNextLineEmpty(options.originalText, childPath.getValue()) + ) { + separatorParts.push(hardline$2); + } + }, field); }); - const lastElem = util$4.getLast(n.properties); - const canHaveTrailingComma = !(lastElem && - lastElem.type === "RestProperty"); + const lastElem = util$4.getLast(n[propertiesField]); - const shouldBreak = util$4.hasNewlineInRange( - options.originalText, - util$4.locStart(n), - util$4.locEnd(n) + const canHaveTrailingComma = !( + lastElem && + (lastElem.type === "RestProperty" || lastElem.type === "RestElement") ); + const shouldBreak = + n.type !== "ObjectPattern" && + util$4.hasNewlineInRange( + options.originalText, + util$4.locStart(n), + util$4.locEnd(n) + ); + if (props.length === 0) { return group$1( concat$2([ - "{", + leftBrace, comments$3.printDanglingComments(path, options), softline$1, - "}" + rightBrace ]) ); } else { @@ -11164,13 +11388,18 @@ function genericPrintNoParens(path, options, print) { concat$2([ leftBrace, indent$2( - options.tabWidth + (parentIsUnionTypeAnnotation ? 2 : 0), - concat$2([options.bracketSpacing ? line$1 : softline$1, concat$2(props)]) + align$2( + parentIsUnionTypeAnnotation ? 2 : 0, + concat$2([ + options.bracketSpacing ? line$1 : softline$1, + concat$2(props) + ]) + ) ), ifBreak$1( canHaveTrailingComma && shouldPrintComma(options) ? "," : "" ), - indent$2( + align$2( parentIsUnionTypeAnnotation ? 2 : 0, concat$2([options.bracketSpacing ? line$1 : softline$1, rightBrace]) ), @@ -11245,34 +11474,18 @@ function genericPrintNoParens(path, options, print) { // // Note that util.getLast returns null if the array is empty, but // we already check for an empty array just above so we are safe - const needsForcedTrailingComma = canHaveTrailingComma && - lastElem === null; - - var printedElements = []; - let separatorParts = []; - path.each( - function(childPath) { - printedElements.push(concat$2(separatorParts)); - printedElements.push(group$1(print(childPath))); - - separatorParts = [",", line$1]; - if ( - childPath.getValue() && - util$4.isNextLineEmpty(options.originalText, childPath.getValue()) - ) { - separatorParts.push(softline$1); - } - }, - "elements" - ); + const needsForcedTrailingComma = + canHaveTrailingComma && lastElem === null; parts.push( group$1( concat$2([ "[", indent$2( - options.tabWidth, - concat$2([softline$1, concat$2(printedElements)]) + concat$2([ + softline$1, + printArrayItems(path, options, "elements", print) + ]) ), needsForcedTrailingComma ? "," : "", ifBreak$1( @@ -11350,14 +11563,13 @@ function genericPrintNoParens(path, options, print) { concat$2([ path.call(print, "test"), indent$2( - options.tabWidth, concat$2([ line$1, "? ", - indent$2(2, path.call(print, "consequent")), + align$2(2, path.call(print, "consequent")), line$1, ": ", - indent$2(2, path.call(print, "alternate")) + align$2(2, path.call(print, "alternate")) ]) ) ]) @@ -11365,6 +11577,10 @@ function genericPrintNoParens(path, options, print) { case "NewExpression": parts.push("new ", path.call(print, "callee")); + if (n.typeParameters) { + parts.push(path.call(print, "typeParameters")); + } + var args = n.arguments; if (args) { @@ -11373,28 +11589,23 @@ function genericPrintNoParens(path, options, print) { return concat$2(parts); case "VariableDeclaration": - var printed = path.map( - function(childPath) { - return print(childPath); - }, - "declarations" - ); + var printed = path.map(function(childPath) { + return print(childPath); + }, "declarations"); parts = [ n.kind, " ", printed[0], - indent$2( - options.tabWidth, - concat$2(printed.slice(1).map(p => concat$2([",", line$1, p]))) - ) + indent$2(concat$2(printed.slice(1).map(p => concat$2([",", line$1, p])))) ]; // We generally want to terminate all variable declarations with a // semicolon, except when they in the () part of for loops. var parentNode = path.getParentNode(); - var isParentForLoop = namedTypes.ForStatement.check(parentNode) || + var isParentForLoop = + namedTypes.ForStatement.check(parentNode) || namedTypes.ForInStatement.check(parentNode) || (namedTypes.ForOfStatement && namedTypes.ForOfStatement.check(parentNode)) || @@ -11402,73 +11613,64 @@ function genericPrintNoParens(path, options, print) { namedTypes.ForAwaitStatement.check(parentNode)); if (!(isParentForLoop && parentNode.body !== n)) { - parts.push(";"); + parts.push(semi); } return group$1(concat$2(parts)); case "VariableDeclarator": - return n.init - ? concat$2([ - path.call(print, "id"), - " =", - hasLeadingOwnLineComment(options.originalText, n.init) - ? indent$2( - options.tabWidth, - concat$2([hardline$2, path.call(print, "init")]) - ) - : concat$2([" ", path.call(print, "init")]) - ]) - : path.call(print, "id"); + return printAssignment( + path.call(print, "id"), + "=", + n.init, + n.init && path.call(print, "init"), + options + ); case "WithStatement": return concat$2([ "with (", path.call(print, "object"), ")", - adjustClause(path.call(print, "body"), options) + adjustClause(n.body, path.call(print, "body")) ]); case "IfStatement": - const con = adjustClause(path.call(print, "consequent"), options); + const con = adjustClause(n.consequent, path.call(print, "consequent")); + const opening = group$1( + concat$2([ + "if (", + group$1( + concat$2([ + indent$2(concat$2([softline$1, path.call(print, "test")])), + softline$1 + ]) + ), + ")", + con + ]) + ); - parts = [ - "if (", - group$1( - concat$2([ - indent$2( - options.tabWidth, - concat$2([softline$1, path.call(print, "test")]) - ), - softline$1 - ]) - ), - ")", - con - ]; + parts.push(opening); if (n.alternate) { - const hasBraces = isCurlyBracket(con); - const isEmpty = isEmptyBlock(con); - - if (hasBraces && !isEmpty) { + if (n.consequent.type === "BlockStatement") { parts.push(" else"); } else { - // We use `conditionalGroup` to suppress break propagation. - // This allows us to provide a hardline without forcing the - // entire `if` clause to break up. - parts.push(conditionalGroup$1([concat$2([hardline$2, "else"])])); + parts.push(hardline$2, "else"); } parts.push( - adjustClause( - path.call(print, "alternate"), - options, - n.alternate.type === "IfStatement" + group$1( + adjustClause( + n.alternate, + path.call(print, "alternate"), + n.alternate.type === "IfStatement" + ) ) ); } - return group$1(concat$2(parts)); + return concat$2(parts); case "ForStatement": { - const body = adjustClause(path.call(print, "body"), options); + const body = adjustClause(n.body, path.call(print, "body")); // We want to keep dangling comments above the loop to stay consistent. // Any comment positioned between the for statement and the parentheses @@ -11490,7 +11692,6 @@ function genericPrintNoParens(path, options, print) { group$1( concat$2([ indent$2( - options.tabWidth, concat$2([ softline$1, path.call(print, "init"), @@ -11514,15 +11715,12 @@ function genericPrintNoParens(path, options, print) { "while (", group$1( concat$2([ - indent$2( - options.tabWidth, - concat$2([softline$1, path.call(print, "test")]) - ), + indent$2(concat$2([softline$1, path.call(print, "test")])), softline$1 ]) ), ")", - adjustClause(path.call(print, "body"), options) + adjustClause(n.body, path.call(print, "body")) ]); case "ForInStatement": // Note: esprima can't actually parse "for each (". @@ -11532,36 +11730,40 @@ function genericPrintNoParens(path, options, print) { " in ", path.call(print, "right"), ")", - adjustClause(path.call(print, "body"), options) + adjustClause(n.body, path.call(print, "body")) ]); + case "ForOfStatement": - return concat$2([ - "for (", - path.call(print, "left"), - " of ", - path.call(print, "right"), - ")", - adjustClause(path.call(print, "body"), options) - ]); case "ForAwaitStatement": + // Babylon 7 removed ForAwaitStatement in favor of ForOfStatement + // with `"await": true`: + // https://github.com/estree/estree/pull/138 + const isAwait = n.type === "ForAwaitStatement" || n.await; + return concat$2([ - "for await (", + "for", + isAwait ? " await" : "", + " (", path.call(print, "left"), " of ", path.call(print, "right"), ")", - adjustClause(path.call(print, "body"), options) + adjustClause(n.body, path.call(print, "body")) ]); + case "DoWhileStatement": - var clause = adjustClause(path.call(print, "body"), options); + var clause = adjustClause(n.body, path.call(print, "body")); var doBody = concat$2(["do", clause]); var parts = [doBody]; - const hasBraces = isCurlyBracket(clause); - if (hasBraces) parts.push(" while"); - else parts.push(concat$2([line$1, "while"])); + if (n.body.type === "BlockStatement") { + parts.push(" "); + } else { + parts.push(hardline$2); + } + parts.push("while"); - parts.push(" (", path.call(print, "test"), ");"); + parts.push(" (", path.call(print, "test"), ")", semi); return concat$2(parts); case "DoExpression": @@ -11571,7 +11773,7 @@ function genericPrintNoParens(path, options, print) { if (n.label) parts.push(" ", path.call(print, "label")); - parts.push(";"); + parts.push(semi); return concat$2(parts); case "ContinueStatement": @@ -11579,7 +11781,7 @@ function genericPrintNoParens(path, options, print) { if (n.label) parts.push(" ", path.call(print, "label")); - parts.push(";"); + parts.push(semi); return concat$2(parts); case "LabeledStatement": @@ -11598,12 +11800,9 @@ function genericPrintNoParens(path, options, print) { if (n.handler) { parts.push(" ", path.call(print, "handler")); } else if (n.handlers) { - path.each( - function(handlerPath) { - parts.push(" ", print(handlerPath)); - }, - "handlers" - ); + path.each(function(handlerPath) { + parts.push(" ", print(handlerPath)); + }, "handlers"); } if (n.finalizer) { @@ -11622,7 +11821,7 @@ function genericPrintNoParens(path, options, print) { return concat$2(parts); case "ThrowStatement": - return concat$2(["throw ", path.call(print, "argument"), ";"]); + return concat$2(["throw ", path.call(print, "argument"), semi]); // Note: ignoring n.lexical because it has no printing consequences. case "SwitchStatement": return concat$2([ @@ -11630,10 +11829,7 @@ function genericPrintNoParens(path, options, print) { path.call(print, "discriminant"), ") {", n.cases.length > 0 - ? indent$2( - options.tabWidth, - concat$2([hardline$2, join$2(hardline$2, path.map(print, "cases"))]) - ) + ? indent$2(concat$2([hardline$2, join$2(hardline$2, path.map(print, "cases"))])) : "", hardline$2, "}" @@ -11642,25 +11838,43 @@ function genericPrintNoParens(path, options, print) { if (n.test) parts.push("case ", path.call(print, "test"), ":"); else parts.push("default:"); - if (n.consequent.find(node => node.type !== "EmptyStatement")) { - const cons = path.call( - function(consequentPath) { - return printStatementSequence(consequentPath, options, print); - }, - "consequent" - ); + const isFirstCase = path.getNode() === path.getParentNode().cases[0]; + if ( + !isFirstCase && + util$4.isPreviousLineEmpty(options.originalText, path.getValue()) + ) { + parts.unshift(hardline$2); + } + + if (n.consequent.find(node => node.type !== "EmptyStatement")) { + const cons = path.call(consequentPath => { + return join$2( + hardline$2, + consequentPath + .map((p, i) => { + if (n.consequent[i].type === "EmptyStatement") { + return null; + } + const shouldAddLine = + i !== n.consequent.length - 1 && + util$4.isNextLineEmpty(options.originalText, p.getValue()); + return concat$2([print(p), shouldAddLine ? hardline$2 : ""]); + }) + .filter(e => e !== null) + ); + }, "consequent"); parts.push( - isCurlyBracket(cons) + n.consequent.length === 1 && n.consequent[0].type === "BlockStatement" ? concat$2([" ", cons]) - : indent$2(options.tabWidth, concat$2([hardline$2, cons])) + : indent$2(concat$2([hardline$2, cons])) ); } return concat$2(parts); // JSX extensions below. case "DebuggerStatement": - return "debugger;"; + return concat$2(["debugger", semi]); case "JSXAttribute": parts.push(path.call(print, "name")); @@ -11670,7 +11884,11 @@ function genericPrintNoParens(path, options, print) { (n.value.type === "StringLiteral" || n.value.type === "Literal") && typeof n.value.value === "string" ) { - res = '"' + util$4.htmlEscapeInsideDoubleQuote(n.value.value) + '"'; + const value = n.value.extra ? n.value.extra.raw : n.value.raw; + res = + '"' + + value.slice(1, value.length - 1).replace(/"/g, """) + + '"'; } else { res = path.call(print, "value"); } @@ -11695,12 +11913,15 @@ function genericPrintNoParens(path, options, print) { case "JSXExpressionContainer": { const parent = path.getParentNode(0); - const shouldInline = n.expression.type === "ArrayExpression" || + const shouldInline = + n.expression.type === "ArrayExpression" || n.expression.type === "ObjectExpression" || n.expression.type === "ArrowFunctionExpression" || n.expression.type === "CallExpression" || n.expression.type === "FunctionExpression" || n.expression.type === "JSXEmptyExpression" || + n.expression.type === "TemplateLiteral" || + n.expression.type === "TaggedTemplateExpression" || (parent.type === "JSXElement" && (n.expression.type === "ConditionalExpression" || isBinaryish(n.expression))); @@ -11714,10 +11935,7 @@ function genericPrintNoParens(path, options, print) { return group$1( concat$2([ "{", - indent$2( - options.tabWidth, - concat$2([softline$1, path.call(print, "expression")]) - ), + indent$2(concat$2([softline$1, path.call(print, "expression")])), softline$1, lineSuffixBoundary$1, "}" @@ -11735,7 +11953,8 @@ function genericPrintNoParens(path, options, print) { if ( n.attributes.length === 1 && n.attributes[0].value && - n.attributes[0].value.type === "Literal" && + (n.attributes[0].value.type === "Literal" || + n.attributes[0].value.type === "StringLiteral") && typeof n.attributes[0].value.value === "string" ) { return group$1( @@ -11755,7 +11974,6 @@ function genericPrintNoParens(path, options, print) { path.call(print, "name"), concat$2([ indent$2( - options.tabWidth, concat$2( path.map(attr => concat$2([line$1, print(attr)]), "attributes") ) @@ -11771,11 +11989,18 @@ function genericPrintNoParens(path, options, print) { case "JSXText": throw new Error("JSXTest should be handled by JSXElement"); case "JSXEmptyExpression": - return comments$3.printDanglingComments( - path, - options, - /* sameIndent */ true + const requiresHardline = n.comments.some( + comment => comment.type === "Line" || comment.type === "CommentLine" ); + + return concat$2([ + comments$3.printDanglingComments( + path, + options, + /* sameIndent */ !requiresHardline + ), + requiresHardline ? hardline$2 : "" + ]); case "TypeAnnotatedIdentifier": return concat$2([ path.call(print, "annotation"), @@ -11791,15 +12016,11 @@ function genericPrintNoParens(path, options, print) { "{", n.body.length > 0 ? indent$2( - options.tabWidth, concat$2([ hardline$2, - path.call( - function(bodyPath) { - return printStatementSequence(bodyPath, options, print); - }, - "body" - ) + path.call(function(bodyPath) { + return printStatementSequence(bodyPath, options, print); + }, "body") ]) ) : comments$3.printDanglingComments(path, options), @@ -11809,7 +12030,7 @@ function genericPrintNoParens(path, options, print) { case "ClassPropertyDefinition": parts.push("static ", path.call(print, "definition")); - if (!namedTypes.MethodDefinition.check(n.definition)) parts.push(";"); + if (!namedTypes.MethodDefinition.check(n.definition)) parts.push(semi); return concat$2(parts); case "ClassProperty": @@ -11821,10 +12042,17 @@ function genericPrintNoParens(path, options, print) { key = concat$2(["[", path.call(print, "key"), "]"]); } else { key = printPropertyKey(path, options, print); - if (n.variance === "plus") { - key = concat$2(["+", key]); - } else if (n.variance === "minus") { - key = concat$2(["-", key]); + + var variance = getFlowVariance(n, options); + + if (variance) { + key = concat$2([variance, key]); + } else if (n.accessibility === "public") { + key = concat$2(["public ", key]); + } else if (n.accessibility === "protected") { + key = concat$2(["protected ", key]); + } else if (n.accessibility === "private") { + key = concat$2(["private ", key]); } } @@ -11834,7 +12062,7 @@ function genericPrintNoParens(path, options, print) { if (n.value) parts.push(" = ", path.call(print, "value")); - parts.push(";"); + parts.push(semi); return concat$2(parts); case "ClassDeclaration": @@ -11862,23 +12090,20 @@ function genericPrintNoParens(path, options, print) { parts.push("`"); - path.each( - function(childPath) { - var i = childPath.getName(); + path.each(function(childPath) { + var i = childPath.getName(); - parts.push(print(childPath)); + parts.push(print(childPath)); - if (i < expressions.length) { - parts.push( - "${", - removeLines(expressions[i]), - lineSuffixBoundary$1, - "}" - ); - } - }, - "quasis" - ); + if (i < expressions.length) { + parts.push( + "${", + removeLines(expressions[i]), + lineSuffixBoundary$1, + "}" + ); + } + }, "quasis"); parts.push("`"); @@ -11904,12 +12129,17 @@ function genericPrintNoParens(path, options, print) { case "MemberTypeAnnotation": // Flow case "Type": throw new Error("unprintable type: " + JSON.stringify(n.type)); - // Type Annotations for Facebook Flow, typically stripped out or // transformed away before printing. case "TypeAnnotation": if (n.typeAnnotation) { - if (n.typeAnnotation.type !== "FunctionTypeAnnotation") { + if ( + n.typeAnnotation.type !== "FunctionTypeAnnotation" && + !shouldTypeScriptTypeAvoidColon(path) && + // TypeScript should not have a colon before type parameter constraints + !(path.getParentNode().type === "TypeParameter" && + path.getParentNode().constraint) + ) { parts.push(": "); } @@ -11919,9 +12149,25 @@ function genericPrintNoParens(path, options, print) { } return ""; + case "TSTupleType": case "TupleTypeAnnotation": - return concat$2(["[", join$2(", ", path.map(print, "types")), "]"]); - case "ExistentialTypeParam": + let typesField = n.type === "TSTupleType" ? "elementTypes" : "types"; + return group$1( + concat$2([ + "[", + indent$2( + concat$2([ + softline$1, + printArrayItems(path, options, typesField, print) + ]) + ), + ifBreak$1(shouldPrintComma(options) ? "," : ""), + comments$3.printDanglingComments(path, options, /* sameIndent */ true), + softline$1, + "]" + ]) + ); + case "ExistsTypeAnnotation": return "*"; case "EmptyTypeAnnotation": @@ -11934,18 +12180,25 @@ function genericPrintNoParens(path, options, print) { return concat$2([path.call(print, "elementType"), "[]"]); case "BooleanTypeAnnotation": return "boolean"; - case "NumericLiteralTypeAnnotation": case "BooleanLiteralTypeAnnotation": return "" + n.value; case "DeclareClass": return printFlowDeclaration(path, printClass(path, options, print)); case "DeclareFunction": + // For TypeScript the DeclareFunction node shares the AST + // structure with FunctionDeclaration + if (n.params) { + return concat$2([ + "declare ", + printFunctionDeclaration(path, print, options) + ]); + } return printFlowDeclaration(path, [ "function ", path.call(print, "id"), n.predicate ? " " : "", path.call(print, "predicate"), - ";" + semi ]); case "DeclareModule": return printFlowDeclaration(path, [ @@ -11958,28 +12211,42 @@ function genericPrintNoParens(path, options, print) { return printFlowDeclaration(path, [ "module.exports", path.call(print, "typeAnnotation"), - ";" + semi ]); case "DeclareVariable": - return printFlowDeclaration(path, ["var ", path.call(print, "id"), ";"]); + return printFlowDeclaration(path, ["var ", path.call(print, "id"), semi]); case "DeclareExportAllDeclaration": return concat$2(["declare export * from ", path.call(print, "source")]); case "DeclareExportDeclaration": return concat$2(["declare ", printExportDeclaration(path, options, print)]); case "FunctionTypeAnnotation": + case "TSFunctionType": // FunctionTypeAnnotation is ambiguous: // declare function foo(a: B): void; OR // var A: (a: B) => void; var parent = path.getParentNode(0); - var isArrowFunctionTypeAnnotation = !((!parent.variance && - !parent.optional && - namedTypes.ObjectTypeProperty.check(parent)) || - namedTypes.ObjectTypeCallProperty.check(parent) || - namedTypes.DeclareFunction.check(path.getParentNode(2))); + var parentParent = path.getParentNode(1); + var isArrowFunctionTypeAnnotation = + n.type === "TSFunctionType" || + !((!getFlowVariance(parent, options) && + !parent.optional && + namedTypes.ObjectTypeProperty.check(parent)) || + namedTypes.ObjectTypeCallProperty.check(parent) || + namedTypes.DeclareFunction.check(path.getParentNode(2))); - var needsColon = isArrowFunctionTypeAnnotation && + var needsColon = + isArrowFunctionTypeAnnotation && namedTypes.TypeAnnotation.check(parent); + // Sadly we can't put it inside of FastPath::needsColon because we are + // printing ":" as part of the expression and it would put parenthesis + // around :( + const needsParens = + needsColon && + isArrowFunctionTypeAnnotation && + parent.type === "TypeAnnotation" && + parentParent.type === "ArrowFunctionExpression"; + if (isObjectTypePropertyAFunction(parent)) { isArrowFunctionTypeAnnotation = true; needsColon = true; @@ -11988,22 +12255,29 @@ function genericPrintNoParens(path, options, print) { if (needsColon) { parts.push(": "); } + if (needsParens) { + parts.push("("); + } parts.push(path.call(print, "typeParameters")); - parts.push(group$1(printFunctionParams(path, print, options))); + parts.push(printFunctionParams(path, print, options)); // The returnType is not wrapped in a TypeAnnotation, so the colon // needs to be added separately. - if (n.returnType || n.predicate) { + if (n.returnType || n.predicate || n.typeAnnotation) { parts.push( isArrowFunctionTypeAnnotation ? " => " : ": ", path.call(print, "returnType"), - path.call(print, "predicate") + path.call(print, "predicate"), + path.call(print, "typeAnnotation") ); } + if (needsParens) { + parts.push(")"); + } - return concat$2(parts); + return group$1(concat$2(parts)); case "FunctionTypeParam": return concat$2([ path.call(print, "name"), @@ -12028,17 +12302,23 @@ function genericPrintNoParens(path, options, print) { parts.push( "interface ", path.call(print, "id"), - path.call(print, "typeParameters"), - " " + path.call(print, "typeParameters") ); if (n["extends"].length > 0) { - parts.push("extends ", join$2(", ", path.map(print, "extends")), " "); + parts.push( + group$1( + indent$2( + concat$2([line$1, "extends ", join$2(", ", path.map(print, "extends"))]) + ) + ) + ); } + parts.push(" "); parts.push(path.call(print, "body")); - return concat$2(parts); + return group$1(concat$2(parts)); } case "ClassImplements": case "InterfaceExtends": @@ -12046,13 +12326,27 @@ function genericPrintNoParens(path, options, print) { path.call(print, "id"), path.call(print, "typeParameters") ]); - case "IntersectionTypeAnnotation": - case "UnionTypeAnnotation": { + case "IntersectionTypeAnnotation": { const types = path.map(print, "types"); - const isIntersection = n.type === "IntersectionTypeAnnotation"; - const shouldInline = isIntersection && - !(n.types.length > 1 && n.types[0].type === "ObjectTypeAnnotation"); - + const result = []; + for (let i = 0; i < types.length; ++i) { + if (i === 0) { + result.push(types[i]); + } else if ( + n.types[i - 1].type !== "ObjectTypeAnnotation" && + n.types[i].type !== "ObjectTypeAnnotation" + ) { + // If no object is involved, go to the next line if it breaks + result.push(indent$2(concat$2([" &", line$1, types[i]]))); + } else { + // If you go from object to non-object or vis-versa, then inline it + result.push(" & ", i > 1 ? indent$2(types[i]) : types[i]); + } + } + return group$1(concat$2(result)); + } + case "TSUnionType": + case "UnionTypeAnnotation": { // single-line variation // A | B | C @@ -12061,27 +12355,18 @@ function genericPrintNoParens(path, options, print) { // | B // | C - // We want & operators to be inlined. - if (shouldInline) { - return join$2(" & ", types); - } - const parent = path.getParentNode(); // If there's a leading comment, the parent is doing the indentation const shouldIndent = !(parent.type === "TypeAlias" && hasLeadingOwnLineComment(options.originalText, n)); - const token = isIntersection ? "&" : "|"; + //const token = isIntersection ? "&" : "|"; + const code = concat$2([ + ifBreak$1(concat$2([shouldIndent ? line$1 : "", "| "])), + join$2(concat$2([line$1, "| "]), path.map(print, "types")) + ]); - return group$1( - indent$2( - shouldIndent ? options.tabWidth : 0, - concat$2([ - ifBreak$1(concat$2([shouldIndent ? line$1 : "", token, " "])), - join$2(concat$2([line$1, token, " "]), types) - ]) - ) - ); + return group$1(shouldIndent ? indent$2(code) : code); } case "NullableTypeAnnotation": return concat$2(["?", path.call(print, "typeAnnotation")]); @@ -12100,11 +12385,9 @@ function genericPrintNoParens(path, options, print) { return concat$2(parts); case "ObjectTypeIndexer": - var variance = n.variance === "plus" - ? "+" - : n.variance === "minus" ? "-" : ""; + var variance = getFlowVariance(n, options); return concat$2([ - variance, + variance || "", "[", path.call(print, "id"), n.id ? ": " : "", @@ -12113,14 +12396,11 @@ function genericPrintNoParens(path, options, print) { path.call(print, "value") ]); case "ObjectTypeProperty": - var variance = n.variance === "plus" - ? "+" - : n.variance === "minus" ? "-" : ""; + var variance = getFlowVariance(n, options); // TODO: This is a bad hack and we need a better way to know // when to emit an arrow function or not. - var isFunction = !n.variance && - !n.optional && - n.value.type === "FunctionTypeAnnotation"; + var isFunction = + !variance && !n.optional && n.value.type === "FunctionTypeAnnotation"; if (isObjectTypePropertyAFunction(n)) { isFunction = true; @@ -12128,7 +12408,7 @@ function genericPrintNoParens(path, options, print) { return concat$2([ n.static ? "static " : "", - variance, + variance || "", path.call(print, "key"), n.optional ? "?" : "", isFunction ? "" : ": ", @@ -12143,9 +12423,13 @@ function genericPrintNoParens(path, options, print) { case "StringLiteralTypeAnnotation": return nodeStr(n, options); case "NumberLiteralTypeAnnotation": - assert$5.strictEqual(typeof n.value, "number"); + assert$4.strictEqual(typeof n.value, "number"); - return "" + n.value; + if (n.extra != null) { + return printNumber(n.extra.raw); + } else { + return printNumber(n.raw); + } case "StringTypeAnnotation": return "string"; case "DeclareTypeAlias": @@ -12163,12 +12447,9 @@ function genericPrintNoParens(path, options, print) { path.call(print, "typeParameters"), " =", hasLeadingOwnLineComment(options.originalText, n.right) - ? indent$2( - options.tabWidth, - concat$2([hardline$2, path.call(print, "right")]) - ) + ? indent$2(concat$2([hardline$2, path.call(print, "right")])) : concat$2([" ", path.call(print, "right")]), - ";" + semi ); return concat$2(parts); @@ -12181,19 +12462,33 @@ function genericPrintNoParens(path, options, print) { ")" ]); case "TypeParameterDeclaration": - case "TypeParameterInstantiation": - return concat$2(["<", join$2(", ", path.map(print, "params")), ">"]); + case "TypeParameterInstantiation": { + const shouldInline = + n.params.length === 1 && n.params[0].type === "ObjectTypeAnnotation"; + + if (shouldInline) { + return concat$2(["<", join$2(", ", path.map(print, "params")), ">"]); + } + + return group$1( + concat$2([ + "<", + indent$2( + concat$2([ + softline$1, + join$2(concat$2([",", line$1]), path.map(print, "params")) + ]) + ), + softline$1, + ">" + ]) + ); + } case "TypeParameter": - switch (n.variance) { - case "plus": - parts.push("+"); + var variance = getFlowVariance(n, options); - break; - case "minus": - parts.push("-"); - - break; - default: + if (variance) { + parts.push(variance); } parts.push(path.call(print, "name")); @@ -12202,6 +12497,10 @@ function genericPrintNoParens(path, options, print) { parts.push(path.call(print, "bound")); } + if (n.constraint) { + parts.push(" extends ", path.call(print, "constraint")); + } + if (n["default"]) { parts.push("=", path.call(print, "default")); } @@ -12220,6 +12519,60 @@ function genericPrintNoParens(path, options, print) { // supported by the pretty-printer. case "DeclaredPredicate": return concat$2(["%checks(", path.call(print, "value"), ")"]); + case "TSAnyKeyword": + return "any"; + case "TSBooleanKeyword": + return "boolean"; + case "TSNumberKeyword": + return "number"; + case "TSObjectKeyword": + return "object"; + case "TSStringKeyword": + return "string"; + case "TSVoidKeyword": + return "void"; + case "TSAsExpression": + return concat$2([ + path.call(print, "expression"), + " as ", + path.call(print, "typeAnnotation") + ]); + case "TSArrayType": + return concat$2([path.call(print, "elementType"), "[]"]); + case "TSPropertySignature": + parts.push(path.call(print, "name")); + parts.push(path.call(print, "typeAnnotation")); + + return concat$2(parts); + case "TSTypeReference": + return concat$2([path.call(print, "typeName")]); + case "TSCallSignature": + return concat$2([ + "(", + join$2(", ", path.map(print, "parameters")), + "): ", + path.call(print, "typeAnnotation") + ]); + case "TSConstructSignature": + return concat$2([ + "new (", + join$2(", ", path.map(print, "parameters")), + "): ", + path.call(print, "typeAnnotation") + ]); + case "TSTypeQuery": + return concat$2(["typeof ", path.call(print, "exprName")]); + case "TSParenthesizedType": + return concat$2(["(", path.call(print, "typeAnnotation"), ")"]); + case "TSIndexSignature": + return concat$2([ + "[", + // This should only contain a single element, however TypeScript parses + // it using parseDelimitedList that uses commas as delimiter. + join$2(", ", path.map(print, "parameters")), + "]: ", + path.call(print, "typeAnnotation") + ]); // TODO case "ClassHeritage": // TODO @@ -12262,13 +12615,15 @@ function genericPrintNoParens(path, options, print) { debugger; throw new Error("unknown type: " + JSON.stringify(n.type)); } - return p; } function printStatementSequence(path, options, print) { let printed = []; - path.map(function(stmtPath, i) { + const bodyNode = path.getNode(); + const isClass = bodyNode.type === "ClassBody"; + + path.map((stmtPath, i) => { var stmt = stmtPath.getValue(); // Just in case the AST has been modified to contain falsy @@ -12287,8 +12642,24 @@ function printStatementSequence(path, options, print) { const text = options.originalText; const parts = []; + // in no-semi mode, prepend statement with semicolon if it might break ASI + if (!options.semi && !isClass && stmtNeedsASIProtection(stmtPath)) { + parts.push(";"); + } + parts.push(stmtPrinted); + if (!options.semi && isClass) { + if (classPropMayCauseASIProblems(stmtPath)) { + parts.push(";"); + } else if (stmt.type === "ClassProperty") { + const nextChild = bodyNode.body[i + 1]; + if (classChildNeedsASIProtection(nextChild)) { + parts.push(";"); + } + } + } + if (util$4.isNextLineEmpty(text, stmt) && !isLastStatement(stmtPath)) { parts.push(hardline$2); } @@ -12313,7 +12684,10 @@ function printPropertyKey(path, options, print) { (options.parser !== "flow" || key.value.match(/[a-zA-Z0-9$_]/)) ) { // 'a' -> a - return key.value; + return path.call( + keyPath => comments$3.printComments(keyPath, p => key.value, options), + "key" + ); } return path.call(print, "key"); } @@ -12338,7 +12712,7 @@ function printMethod(path, options, print) { parts.push("*"); } } else { - assert$5.ok(kind === "get" || kind === "set"); + assert$4.ok(kind === "get" || kind === "set"); parts.push(kind, " "); } @@ -12354,12 +12728,9 @@ function printMethod(path, options, print) { path.call(print, "value", "typeParameters"), group$1( concat$2([ - path.call( - function(valuePath) { - return printFunctionParams(valuePath, print, options); - }, - "value" - ), + path.call(function(valuePath) { + return printFunctionParams(valuePath, print, options); + }, "value"), path.call(p => printReturnType(p, print), "value") ]) ), @@ -12370,23 +12741,47 @@ function printMethod(path, options, print) { return concat$2(parts); } +function couldGroupArg(arg) { + return ( + (arg.type === "ObjectExpression" && arg.properties.length > 0) || + (arg.type === "ArrayExpression" && arg.elements.length > 0) || + arg.type === "FunctionExpression" || + (arg.type === "ArrowFunctionExpression" && + (arg.body.type === "BlockStatement" || + arg.body.type === "ArrowFunctionExpression" || + arg.body.type === "ObjectExpression" || + arg.body.type === "ArrayExpression" || + arg.body.type === "CallExpression" || + arg.body.type === "JSXElement")) + ); +} + function shouldGroupLastArg(args) { const lastArg = util$4.getLast(args); const penultimateArg = util$4.getPenultimate(args); - return (!lastArg.comments || !lastArg.comments.length) && - (lastArg.type === "ObjectExpression" || - lastArg.type === "ArrayExpression" || - lastArg.type === "FunctionExpression" || - (lastArg.type === "ArrowFunctionExpression" && - (lastArg.body.type === "BlockStatement" || - lastArg.body.type === "ArrowFunctionExpression" || - lastArg.body.type === "ObjectExpression" || - lastArg.body.type === "ArrayExpression" || - lastArg.body.type === "CallExpression" || - lastArg.body.type === "JSXElement"))) && + return ( + (!lastArg.comments || !lastArg.comments.length) && + couldGroupArg(lastArg) && // If the last two arguments are of the same type, // disable last element expansion. - (!penultimateArg || penultimateArg.type !== lastArg.type); + (!penultimateArg || penultimateArg.type !== lastArg.type) + ); +} + +function shouldGroupFirstArg(args) { + if (args.length !== 2) { + return false; + } + + const firstArg = args[0]; + const secondArg = args[1]; + return ( + (!firstArg.comments || !firstArg.comments.length) && + (firstArg.type === "FunctionExpression" || + (firstArg.type === "ArrowFunctionExpression" && + firstArg.body.type === "BlockStatement")) && + !couldGroupArg(secondArg) + ); } function printArgumentsList(path, options, print) { @@ -12404,27 +12799,56 @@ function printArgumentsList(path, options, print) { // This is just an optimization; I think we could return the // conditional group for all function calls, but it's more expensive // so only do it for specific forms. - if (shouldGroupLastArg(args)) { - const shouldBreak = printed.slice(0, -1).some(willBreak$2); + const shouldGroupFirst = shouldGroupFirstArg(args); + const shouldGroupLast = shouldGroupLastArg(args); + if (shouldGroupFirst || shouldGroupLast) { + const shouldBreak = shouldGroupFirst + ? printed.slice(1).some(willBreak$2) + : printed.slice(0, -1).some(willBreak$2); + + // We want to print the last argument with a special flag + let printedExpanded; + let i = 0; + path.each(function(argPath) { + if (shouldGroupFirst && i === 0) { + printedExpanded = + [argPath.call(p => print(p, { expandFirstArg: true }))] + .concat(printed.slice(1)); + } + if (shouldGroupLast && i === args.length - 1) { + printedExpanded = printed + .slice(0, -1) + .concat(argPath.call(p => print(p, { expandLastArg: true }))); + } + i++; + }, "arguments"); + return concat$2([ printed.some(willBreak$2) ? breakParent$2 : "", conditionalGroup$1( [ - concat$2(["(", join$2(concat$2([", "]), printed), ")"]), - concat$2([ - "(", - join$2(concat$2([",", line$1]), printed.slice(0, -1)), - printed.length > 1 ? ", " : "", - group$1(util$4.getLast(printed), { shouldBreak: true }), - ")" - ]), + concat$2(["(", join$2(concat$2([", "]), printedExpanded), ")"]), + shouldGroupFirst + ? concat$2([ + "(", + group$1(printedExpanded[0], { shouldBreak: true }), + printed.length > 1 ? ", " : "", + join$2(concat$2([",", line$1]), printed.slice(1)), + ")" + ]) + : concat$2([ + "(", + join$2(concat$2([",", line$1]), printed.slice(0, -1)), + printed.length > 1 ? ", " : "", + group$1(util$4.getLast(printedExpanded), { + shouldBreak: true + }), + ")" + ]), group$1( concat$2([ "(", - indent$2( - options.tabWidth, - concat$2([line$1, join$2(concat$2([",", line$1]), printed)]) - ), + indent$2(concat$2([line$1, join$2(concat$2([",", line$1]), printed)])), shouldPrintComma(options, "all") ? "," : "", line$1, ")" @@ -12440,10 +12864,7 @@ function printArgumentsList(path, options, print) { return group$1( concat$2([ "(", - indent$2( - options.tabWidth, - concat$2([softline$1, join$2(concat$2([",", line$1]), printed)]) - ), + indent$2(concat$2([softline$1, join$2(concat$2([",", line$1]), printed)])), ifBreak$1(shouldPrintComma(options, "all") ? "," : ""), softline$1, ")" @@ -12452,23 +12873,21 @@ function printArgumentsList(path, options, print) { ); } -function printFunctionParams(path, print, options) { +function printFunctionParams(path, print, options, expandArg) { var fun = path.getValue(); // namedTypes.Function.assert(fun); - var printed = path.map(print, "params"); + var paramsField = fun.type === "TSFunctionType" ? "parameters" : "params"; + var printed = path.map(print, paramsField); if (fun.defaults) { - path.each( - function(defExprPath) { - var i = defExprPath.getName(); - var p = printed[i]; + path.each(function(defExprPath) { + var i = defExprPath.getName(); + var p = printed[i]; - if (p && defExprPath.getValue()) { - printed[i] = concat$2([p, " = ", print(defExprPath)]); - } - }, - "defaults" - ); + if (p && defExprPath.getValue()) { + printed[i] = concat$2([p, " = ", print(defExprPath)]); + } + }, "defaults"); } if (fun.rest) { @@ -12483,12 +12902,12 @@ function printFunctionParams(path, print, options) { ]); } - const lastParam = util$4.getLast(path.getValue().params); - const canHaveTrailingComma = !(lastParam && - lastParam.type === "RestElement") && !fun.rest; + const lastParam = util$4.getLast(fun[paramsField]); + const canHaveTrailingComma = + !(lastParam && lastParam.type === "RestElement") && !fun.rest; - // If the parent is a call with the last argument expansion and this is the - // params of the last argument, we dont want the arguments to break and instead + // If the parent is a call with the first/last argument expansion and this is the + // params of the first/last argument, we dont want the arguments to break and instead // want the whole expression to be on a new line. // // Good: Bad: @@ -12497,29 +12916,92 @@ function printFunctionParams(path, print, options) { // } b, // }) ) => { // }) - const parent = path.getParentNode(); + if (expandArg) { + return group$1(concat$2(["(", join$2(", ", printed), ")"])); + } + + // Single object destructuring should hug + // + // function({ + // a, + // b, + // c + // }) {} if ( - (parent.type === "CallExpression" || parent.type === "NewExpression") && - util$4.getLast(parent.arguments) === path.getValue() && - shouldGroupLastArg(parent.arguments) + fun.params && + fun.params.length === 1 && + !fun.params[0].comments && + (fun.params[0].type === "ObjectPattern" || + (fun.params[0].type === "FunctionTypeParam" && + fun.params[0].typeAnnotation.type === "ObjectTypeAnnotation")) && + !fun.rest ) { return concat$2(["(", join$2(", ", printed), ")"]); } + const parent = path.getParentNode(); + const isFlowShorthandWithOneArg = + (isObjectTypePropertyAFunction(parent) || + isTypeAnnotationAFunction(parent) || + parent.type === "TypeAlias") && + fun[paramsField].length === 1 && + fun[paramsField][0].name === null && + !fun.rest; + return concat$2([ - "(", - indent$2( - options.tabWidth, - concat$2([softline$1, join$2(concat$2([",", line$1]), printed)]) - ), + isFlowShorthandWithOneArg ? "" : "(", + indent$2(concat$2([softline$1, join$2(concat$2([",", line$1]), printed)])), ifBreak$1( canHaveTrailingComma && shouldPrintComma(options, "all") ? "," : "" ), softline$1, - ")" + isFlowShorthandWithOneArg ? "" : ")" ]); } +function canPrintParamsWithoutParens(node) { + return ( + node.params.length === 1 && + !node.rest && + node.params[0].type === "Identifier" && + !node.params[0].typeAnnotation && + !node.params[0].leadingComments && + !node.params[0].trailingComments && + !node.params[0].optional && + !node.predicate && + !node.returnType + ); +} + +function printFunctionDeclaration(path, print, options) { + var n = path.getValue(); + var parts = []; + + if (n.async) parts.push("async "); + + parts.push("function"); + + if (n.generator) parts.push("*"); + + if (n.id) { + parts.push(" ", path.call(print, "id")); + } + + parts.push( + path.call(print, "typeParameters"), + group$1( + concat$2([ + printFunctionParams(path, print, options), + printReturnType(path, print) + ]) + ), + " ", + path.call(print, "body") + ); + + return concat$2(parts); +} + function printObjectMethod(path, options, print) { var objMethod = path.getValue(); var parts = []; @@ -12574,8 +13056,9 @@ function printReturnType(path, print) { } function printExportDeclaration(path, options, print) { - var decl = path.getValue(); - var parts = ["export "]; + const decl = path.getValue(); + const semi = options.semi ? ";" : ""; + let parts = ["export "]; namedTypes.Declaration.assert(decl); @@ -12595,7 +13078,7 @@ function printExportDeclaration(path, options, print) { (decl.declaration.type !== "ClassDeclaration" && decl.declaration.type !== "FunctionDeclaration") ) { - parts.push(";"); + parts.push(semi); } } else { if (decl.specifiers && decl.specifiers.length > 0) { @@ -12604,30 +13087,50 @@ function printExportDeclaration(path, options, print) { decl.specifiers[0].type === "ExportBatchSpecifier" ) { parts.push("*"); - } else if ( - (decl.specifiers.length === 1 && - decl.specifiers[0].type === "ExportDefaultSpecifier") || - decl.specifiers[0].type === "ExportNamespaceSpecifier" - ) { - parts.push(path.map(print, "specifiers")[0]); } else { + let specifiers = []; + let defaultSpecifiers = []; + let namespaceSpecifiers = []; + + path.map(specifierPath => { + const specifierType = path.getValue().type; + if (specifierType === "ExportSpecifier") { + specifiers.push(print(specifierPath)); + } else if (specifierType === "ExportDefaultSpecifier") { + defaultSpecifiers.push(print(specifierPath)); + } else if (specifierType === "ExportNamespaceSpecifier") { + namespaceSpecifiers.push(concat$2(["* as ", print(specifierPath)])); + } + }, "specifiers"); + + const isNamespaceFollowed = + namespaceSpecifiers.length !== 0 && + (specifiers.length !== 0 || defaultSpecifiers.length !== 0); + const isDefaultFollowed = + defaultSpecifiers.length !== 0 && specifiers.length !== 0; + parts.push( decl.exportKind === "type" ? "type " : "", - group$1( - concat$2([ - "{", - indent$2( - options.tabWidth, + concat$2(namespaceSpecifiers), + concat$2([isNamespaceFollowed ? ", " : ""]), + concat$2(defaultSpecifiers), + concat$2([isDefaultFollowed ? ", " : ""]), + specifiers.length !== 0 + ? group$1( concat$2([ + "{", + indent$2( + concat$2([ + options.bracketSpacing ? line$1 : softline$1, + join$2(concat$2([",", line$1]), specifiers) + ]) + ), + ifBreak$1(shouldPrintComma(options) ? "," : ""), options.bracketSpacing ? line$1 : softline$1, - join$2(concat$2([",", line$1]), path.map(print, "specifiers")) + "}" ]) - ), - ifBreak$1(shouldPrintComma(options) ? "," : ""), - options.bracketSpacing ? line$1 : softline$1, - "}" - ]) - ) + ) + : "" ); } } else { @@ -12638,7 +13141,7 @@ function printExportDeclaration(path, options, print) { parts.push(" from ", path.call(print, "source")); } - parts.push(";"); + parts.push(semi); } return concat$2(parts); @@ -12648,7 +13151,7 @@ function printFlowDeclaration(path, parts) { var parentExportDecl = util$4.getParentExportDeclaration(path); if (parentExportDecl) { - assert$5.strictEqual(parentExportDecl.type, "DeclareExportDeclaration"); + assert$4.strictEqual(parentExportDecl.type, "DeclareExportDeclaration"); } else { // If the parent node has type DeclareExportDeclaration, then it // will be responsible for printing the "declare" token. Otherwise @@ -12659,6 +13162,28 @@ function printFlowDeclaration(path, parts) { return concat$2(parts); } +function getFlowVariance(path, options) { + if (!path.variance) { + return null; + } + + // Babylon 7.0 currently uses variance node type, and flow should + // follow suit soon: + // https://github.com/babel/babel/issues/4722 + const variance = path.variance.kind || path.variance; + + switch (variance) { + case "plus": + return "+"; + + case "minus": + return "-"; + + default: + return variance; + } +} + function printClass(path, options, print) { const n = path.getValue(); const parts = ["class"]; @@ -12688,7 +13213,7 @@ function printClass(path, options, print) { } if (partsGroup.length > 0) { - parts.push(group$1(indent$2(options.tabWidth, concat$2(partsGroup)))); + parts.push(group$1(indent$2(concat$2(partsGroup)))); } parts.push(" ", path.call(print, "body")); @@ -12704,12 +13229,7 @@ function printMemberLookup(path, options, print) { n.computed ? [ "[", - group$1( - concat$2([ - indent$2(options.tabWidth, concat$2([softline$1, property])), - softline$1 - ]) - ), + group$1(concat$2([indent$2(concat$2([softline$1, property])), softline$1])), "]" ] : [".", property] @@ -12862,11 +13382,13 @@ function printMemberChain(path, options, print) { // node is just an identifier with the name starting with a capital // letter, just a sequence of _$ or this. The rationale is that they are // likely to be factories. - const shouldMerge = groups[0].length === 1 && + const shouldMerge = + groups.length >= 2 && + !groups[1][0].node.comments && + groups[0].length === 1 && (groups[0][0].node.type === "ThisExpression" || (groups[0][0].node.type === "Identifier" && - groups[0][0].node.name.match(/(^[A-Z])|^[_$]+$/))) && - groups.length >= 2; + groups[0][0].node.name.match(/(^[A-Z])|^[_$]+$/))); function printGroup(printedGroup) { return concat$2(printedGroup.map(tuple => tuple.printed)); @@ -12874,14 +13396,15 @@ function printMemberChain(path, options, print) { function printIndentedGroup(groups) { return indent$2( - options.tabWidth, group$1(concat$2([hardline$2, join$2(hardline$2, groups.map(printGroup))])) ); } const printedGroups = groups.map(printGroup); const oneLine = concat$2(printedGroups); - const hasComment = groups.length >= 2 && groups[1][0].node.comments; + const hasComment = + (groups.length >= 2 && groups[1][0].node.comments) || + (groups.length >= 3 && groups[2][0].node.comments); // If we only have a single `.`, we shouldn't do anything fancy and just // render everything concatenated together. @@ -12911,7 +13434,13 @@ function printMemberChain(path, options, print) { return group$1(expanded); } - return conditionalGroup$1([oneLine, expanded]); + return concat$2([ + // We only need to check `oneLine` because if `expanded` is chosen + // that means that the parent group has already been broken + // naturally + willBreak$2(oneLine) ? breakParent$2 : "", + conditionalGroup$1([oneLine, expanded]) + ]); } function isEmptyJSXElement(node) { @@ -12942,82 +13471,79 @@ function printJSXChildren(path, options, print, jsxWhitespace) { const children = []; // using `map` instead of `each` because it provides `i` - path.map( - function(childPath, i) { - const child = childPath.getValue(); - const isLiteral = namedTypes.Literal.check(child); + path.map(function(childPath, i) { + const child = childPath.getValue(); + const isLiteral = namedTypes.Literal.check(child); - if (isLiteral && typeof child.value === "string") { - // There's a bug in the flow parser where it doesn't unescape the - // value field. To workaround this, we can use rawValue which is - // correctly escaped (since it parsed). - // We really want to use value and re-escape it ourself when possible - // though. - const partiallyEscapedValue = options.parser === "flow" - ? child.raw - : util$4.htmlEscapeInsideAngleBracket(child.value); - const value = partiallyEscapedValue.replace(/\u00a0/g, " "); + if (isLiteral && typeof child.value === "string") { + // There's a bug in the flow parser where it doesn't unescape the + // value field. To workaround this, we can use rawValue which is + // correctly escaped (since it parsed). + // We really want to use value and re-escape it ourself when possible + // though. + const partiallyEscapedValue = options.parser === "flow" + ? child.raw + : util$4.htmlEscapeInsideAngleBracket(child.value); + const value = partiallyEscapedValue.replace(/\u00a0/g, " "); - if (/\S/.test(value)) { - // treat each line of text as its own entity - value.split(/(\n\s*)/).forEach(line => { - const newlines = line.match(/\n/g); - if (newlines) { + if (/\S/.test(value)) { + // treat each line of text as its own entity + value.split(/(\r?\n\s*)/).forEach(line => { + const newlines = line.match(/\n/g); + if (newlines) { + children.push(hardline$2); + + // allow one extra newline + if (newlines.length > 1) { children.push(hardline$2); - - // allow one extra newline - if (newlines.length > 1) { - children.push(hardline$2); - } - return; } + return; + } - const beginSpace = /^\s+/.test(line); - if (beginSpace) { - children.push(jsxWhitespace); - children.push(softline$1); - } - - const stripped = line.replace(/^\s+|\s+$/g, ""); - if (stripped) { - children.push(stripped); - } - - const endSpace = /\s+$/.test(line); - if (endSpace) { - children.push(softline$1); - children.push(jsxWhitespace); - } - }); - - if (!isLineNext$1(util$4.getLast(children))) { + const beginSpace = /^\s+/.test(line); + if (beginSpace) { + children.push(jsxWhitespace); children.push(softline$1); } - } else if (/\n/.test(value)) { - children.push(hardline$2); - // allow one extra newline - if (value.match(/\n/g).length > 1) { - children.push(hardline$2); + const stripped = line.replace(/^\s+|\s+$/g, ""); + if (stripped) { + children.push(stripped); } - } else if (/\s/.test(value)) { - // whitespace-only without newlines, - // eg; a single space separating two elements - children.push(jsxWhitespace); - children.push(softline$1); - } - } else { - children.push(print(childPath)); - // add a line unless it's followed by a JSX newline - let next = n.children[i + 1]; - if (!(next && /^\s*\n/.test(next.value))) { + const endSpace = /\s+$/.test(line); + if (endSpace) { + children.push(softline$1); + children.push(jsxWhitespace); + } + }); + + if (!isLineNext$1(util$4.getLast(children))) { children.push(softline$1); } + } else if (/\n/.test(value)) { + children.push(hardline$2); + + // allow one extra newline + if (value.match(/\n/g).length > 1) { + children.push(hardline$2); + } + } else if (/\s/.test(value)) { + // whitespace-only without newlines, + // eg; a single space separating two elements + children.push(jsxWhitespace); + children.push(softline$1); } - }, - "children" - ); + } else { + children.push(print(childPath)); + + // add a line unless it's followed by a JSX newline + let next = n.children[i + 1]; + if (!(next && /^\s*\n/.test(next.value))) { + children.push(softline$1); + } + } + }, "children"); return children; } @@ -13046,10 +13572,25 @@ function printJSXElement(path, options, print) { delete n.closingElement; } - // If no children, just print the opening element const openingLines = path.call(print, "openingElement"); + const closingLines = path.call(print, "closingElement"); + + if ( + n.children.length === 1 && + n.children[0].type === "JSXExpressionContainer" && + (n.children[0].expression.type === "TemplateLiteral" || + n.children[0].expression.type === "TaggedTemplateExpression") + ) { + return concat$2([ + openingLines, + concat$2(path.map(print, "children")), + closingLines + ]); + } + + // If no children, just print the opening element if (n.openingElement.selfClosing) { - assert$5.ok(!n.closingElement); + assert$4.ok(!n.closingElement); return openingLines; } // Record any breaks. Should never go from true to false, only false to true. @@ -13127,22 +13668,17 @@ function printJSXElement(path, options, print) { concat$2( groups.map( contents => - Array.isArray(contents) + (Array.isArray(contents) ? conditionalGroup$1([concat$2(contents)]) - : contents + : contents) ) ) ]; - const closingLines = path.call(print, "closingElement"); - const multiLineElem = group$1( concat$2([ openingLines, - indent$2( - options.tabWidth, - group$1(concat$2(childrenGroupedByLine), { shouldBreak: true }) - ), + indent$2(group$1(concat$2(childrenGroupedByLine), { shouldBreak: true })), hardline$2, closingLines ]) @@ -13178,7 +13714,7 @@ function maybeWrapJSXElementInParens(path, elem, options) { return group$1( concat$2([ ifBreak$1("("), - indent$2(options.tabWidth, concat$2([softline$1, elem])), + indent$2(concat$2([softline$1, elem])), softline$1, ifBreak$1(")") ]) @@ -13190,9 +13726,11 @@ function isBinaryish(node) { } function shouldInlineLogicalExpression(node) { - return node.type === "LogicalExpression" && + return ( + node.type === "LogicalExpression" && (node.right.type === "ObjectExpression" || - node.right.type === "ArrayExpression"); + node.right.type === "ArrayExpression") + ); } // For binary expressions to be consistent, we need to group @@ -13203,7 +13741,8 @@ function shouldInlineLogicalExpression(node) { // precedence level and the AST is structured based on precedence // level, things are naturally broken up correctly, i.e. `&&` is // broken before `+`. -function printBinaryishExpressions(path, parts, print, options, isNested) { +function printBinaryishExpressions(path, print, options, isNested) { + let parts = []; let node = path.getValue(); // We treat BinaryExpression and LogicalExpression nodes the same. @@ -13219,21 +13758,20 @@ function printBinaryishExpressions(path, parts, print, options, isNested) { // which is unique in that it is right-associative.) if ( util$4.getPrecedence(node.left.operator) === - util$4.getPrecedence(node.operator) - && node.operator !== "**" + util$4.getPrecedence(node.operator) && node.operator !== "**" ) { - // Flatten them out by recursively calling this function. The - // printed values will all be appended to `parts`. - path.call( - left => - printBinaryishExpressions( - left, - parts, - print, - options, - /* isNested */ true - ), - "left" + // Flatten them out by recursively calling this function. + parts = parts.concat( + path.call( + left => + printBinaryishExpressions( + left, + print, + options, + /* isNested */ true + ), + "left" + ) ); } else { parts.push(path.call(print, "left")); @@ -13248,7 +13786,8 @@ function printBinaryishExpressions(path, parts, print, options, isNested) { // If there's only a single binary expression, we want to create a group // in order to avoid having a small right part like -1 be on its own line. const parent = path.getParentNode(); - const shouldGroup = parent.type !== node.type && + const shouldGroup = + parent.type !== node.type && node.left.type !== node.type && node.right.type !== node.type; @@ -13258,7 +13797,7 @@ function printBinaryishExpressions(path, parts, print, options, isNested) { // the other ones since we don't call the normal print on BinaryExpression, // only for the left and right parts if (isNested && node.comments) { - parts.push(comments$3.printComments(path, p => "", options)); + parts = comments$3.printComments(path, p => concat$2(parts), options); } } else { // Our stopping case. Simply print the node normally. @@ -13268,26 +13807,62 @@ function printBinaryishExpressions(path, parts, print, options, isNested) { return parts; } -function adjustClause(clause, options, forceSpace) { - if (clause === "") { +function printAssignment( + printedLeft, + operator, + rightNode, + printedRight, + options +) { + if (!rightNode) { + return printedLeft; + } + + let printed; + if (hasLeadingOwnLineComment(options.originalText, rightNode)) { + printed = indent$2(concat$2([hardline$2, printedRight])); + } else if ( + (isBinaryish(rightNode) && !shouldInlineLogicalExpression(rightNode)) || + rightNode.type === "StringLiteral" || + (rightNode.type === "Literal" && typeof rightNode.value === "string") || + isMemberExpressionChain(rightNode) + ) { + printed = indent$2(concat$2([line$1, printedRight])); + } else { + printed = concat$2([" ", printedRight]); + } + + return group$1(concat$2([printedLeft, " ", operator, printed])); +} + +function adjustClause(node, clause, forceSpace) { + if (node.type === "EmptyStatement") { return ";"; } - if (isCurlyBracket(clause) || forceSpace) { + if (node.type === "BlockStatement" || forceSpace) { return concat$2([" ", clause]); } - return indent$2(options.tabWidth, concat$2([line$1, clause])); + return indent$2(concat$2([line$1, clause])); } -function isCurlyBracket(doc) { - const str = getFirstString$1(doc); - return str === "{" || str === "{}"; -} +function shouldTypeScriptTypeAvoidColon(path) { + // As the special TS nodes isn't returned by the node helpers, + // we use the stack directly to get the parent node. + const parent = path.stack[path.stack.length - 3]; -function isEmptyBlock(doc) { - const str = getFirstString$1(doc); - return str === "{}"; + switch (parent.type) { + case "TSFunctionType": + case "TSIndexSignature": + case "TSParenthesizedType": + case "TSCallSignature": + case "TSConstructSignature": + case "TSAsExpression": + return true; + default: + return false; + } } function nodeStr(node, options) { @@ -13366,16 +13941,18 @@ function makeString(rawContent, enclosingQuote) { } function printNumber(rawNumber) { - return rawNumber - .toLowerCase() - // Remove unnecessary plus and zeroes from scientific notation. - .replace(/^([\d.]+e)(?:\+|(-))?0*(\d)/, "$1$2$3") - // Remove unnecessary scientific notation (1e0). - .replace(/^([\d.]+)e[+-]?0+$/, "$1") - // Make sure numbers always start with a digit. - .replace(/^\./, "0.") - // Remove trailing dot. - .replace(/\.(?=e|$)/, ""); + return ( + rawNumber + .toLowerCase() + // Remove unnecessary plus and zeroes from scientific notation. + .replace(/^([\d.]+e)(?:\+|(-))?0*(\d)/, "$1$2$3") + // Remove unnecessary scientific notation (1e0). + .replace(/^([\d.]+)e[+-]?0+$/, "$1") + // Make sure numbers always start with a digit. + .replace(/^\./, "0.") + // Remove trailing dot. + .replace(/\.(?=e|$)/, "") + ); } function isLastStatement(path) { @@ -13386,16 +13963,124 @@ function isLastStatement(path) { } function hasLeadingOwnLineComment(text, node) { - const res = node.comments && + const res = + node.comments && node.comments.some( - comment => - comment.leading && - util$4.hasNewline(text, util$4.locStart(comment), { backwards: true }) && - util$4.hasNewline(text, util$4.locEnd(comment)) + comment => comment.leading && util$4.hasNewline(text, util$4.locEnd(comment)) ); return res; } +function hasNakedLeftSide(node) { + return ( + node.type === "AssignmentExpression" || + node.type === "BinaryExpression" || + node.type === "LogicalExpression" || + node.type === "ConditionalExpression" || + node.type === "CallExpression" || + node.type === "MemberExpression" || + node.type === "SequenceExpression" || + node.type === "TaggedTemplateExpression" + ); +} + +function getLeftSide(node) { + if (node.expressions) { + return node.expressions[0]; + } + return node.left || node.test || node.callee || node.object || node.tag; +} + +function exprNeedsASIProtection(node) { + // HACK: node.needsParens is added in `genericPrint()` for the sole purpose + // of being used here. It'd be preferable to find a cleaner way to do this. + const maybeASIProblem = + node.needsParens || + node.type === "ParenthesizedExpression" || + node.type === "TypeCastExpression" || + (node.type === "ArrowFunctionExpression" && + !canPrintParamsWithoutParens(node)) || + node.type === "ArrayExpression" || + node.type === "ArrayPattern" || + (node.type === "UnaryExpression" && + node.prefix && + (node.operator === "+" || node.operator === "-")) || + node.type === "TemplateLiteral" || + node.type === "TemplateElement" || + node.type === "JSXElement" || + node.type === "RegExpLiteral" || + (node.type === "Literal" && node.pattern) || + (node.type === "Literal" && node.regex); + + if (maybeASIProblem) { + return true; + } + + if (!hasNakedLeftSide(node)) { + return false; + } + + return exprNeedsASIProtection(getLeftSide(node)); +} + +function stmtNeedsASIProtection(path) { + if (!path) return false; + const node = path.getNode(); + + if (node.type !== "ExpressionStatement") { + return false; + } + + return exprNeedsASIProtection(node.expression); +} + +function classPropMayCauseASIProblems(path) { + const node = path.getNode(); + + if (node.type !== "ClassProperty") { + return false; + } + + const name = node.key && node.key.name; + if (!name) { + return false; + } + + // this isn't actually possible yet with most parsers available today + // so isn't properly tested yet. + if (name === "static" || name === "get" || name === "set") { + return true; + } +} + +function classChildNeedsASIProtection(node) { + if (!node) return; + + let isAsync, isGenerator; + switch (node.type) { + case "ClassProperty": + return node.computed; + // flow + case "MethodDefinition": + // babylon + case "ClassMethod": { + const isAsync = node.value ? node.value.async : node.async; + const isGenerator = node.value ? node.value.generator : node.generator; + if ( + isAsync || node.static || node.kind === "get" || node.kind === "set" + ) { + return false; + } + if (node.computed || isGenerator) { + return true; + } + } + + default: + return false; + } +} + // This recurses the return argument, looking for the first token // (the leftmost leaf node) and, if it (or its parents) has any // leadingComments, returns true (so it can be wrapped in parens). @@ -13404,25 +14089,10 @@ function returnArgumentHasLeadingComment(options, argument) { return true; } - const hasCommentableLeftSide = argument.type === "BinaryExpression" || - argument.type === "LogicalExpression" || - argument.type === "ConditionalExpression" || - argument.type === "CallExpression" || - argument.type === "MemberExpression" || - argument.type === "SequenceExpression" || - argument.type === "TaggedTemplateExpression"; - - if (hasCommentableLeftSide) { - const getLeftSide = (node) => { - if (node.expressions) { - return node.expressions[0]; - } - return node.left || node.test || node.callee || node.object || node.tag; - }; - + if (hasNakedLeftSide(argument)) { let leftMost = argument; let newLeftMost; - while (newLeftMost = getLeftSide(leftMost)) { + while ((newLeftMost = getLeftSide(leftMost))) { leftMost = newLeftMost; if (hasLeadingOwnLineComment(options.originalText, leftMost)) { @@ -13434,14 +14104,38 @@ function returnArgumentHasLeadingComment(options, argument) { return false; } +function isMemberExpressionChain(node) { + if (node.type !== "MemberExpression") { + return false; + } + if (node.object.type === "Identifier") { + return true; + } + return isMemberExpressionChain(node.object); +} + // Hack to differentiate between the following two which have the same ast // type T = { method: () => void }; // type T = { method(): void }; function isObjectTypePropertyAFunction(node) { - return node.type === "ObjectTypeProperty" && + return ( + node.type === "ObjectTypeProperty" && node.value.type === "FunctionTypeAnnotation" && !node.static && - util$4.locStart(node.key) !== util$4.locStart(node.value); + util$4.locStart(node.key) !== util$4.locStart(node.value) + ); +} + +// Hack to differentiate between the following two which have the same ast +// declare function f(a): void; +// var f: (a) => void; +function isTypeAnnotationAFunction(node) { + return ( + node.type === "TypeAnnotation" && + node.typeAnnotation.type === "FunctionTypeAnnotation" && + !node.static && + util$4.locStart(node) !== util$4.locStart(node.typeAnnotation) + ); } function isFlowNodeStartingWithDeclare(node, options) { @@ -13454,11 +14148,31 @@ function isFlowNodeStartingWithDeclare(node, options) { .match(/declare\s*$/); } +function printArrayItems(path, options, printPath, print) { + const printedElements = []; + let separatorParts = []; + + path.each(function(childPath) { + printedElements.push(concat$2(separatorParts)); + printedElements.push(group$1(print(childPath))); + + separatorParts = [",", line$1]; + if ( + childPath.getValue() && + util$4.isNextLineEmpty(options.originalText, childPath.getValue()) + ) { + separatorParts.push(softline$1); + } + }, printPath); + + return concat$2(printedElements); +} + function printAstToDoc$1(ast, options) { - function printGenerically(path) { + function printGenerically(path, args) { return comments$3.printComments( path, - p => genericPrint(p, options, printGenerically), + p => genericPrint(p, options, printGenerically, args), options ); } @@ -13473,6 +14187,33 @@ var printer = { printAstToDoc: printAstToDoc$1 }; const MODE_BREAK = 1; const MODE_FLAT = 2; +function rootIndent() { + return { + indent: 0, + align: { + spaces: 0, + tabs: 0 + } + }; +} + +function makeIndent(ind) { + return { + indent: ind.indent + 1, + align: ind.align + }; +} + +function makeAlign(ind, n) { + return { + indent: ind.indent, + align: { + spaces: ind.align.spaces + n, + tabs: ind.align.tabs + (n ? 1 : 0) + } + }; +} + function fits(next, restCommands, width) { let restIdx = restCommands.length; const cmds = [next]; @@ -13505,7 +14246,11 @@ function fits(next, restCommands, width) { break; case "indent": - cmds.push([ind + doc.n, mode, doc.contents]); + cmds.push([makeIndent(ind), mode, doc.contents]); + + break; + case "align": + cmds.push([makeAlign(ind, doc.n), mode, doc.contents]); break; case "group": @@ -13547,14 +14292,14 @@ function fits(next, restCommands, width) { return false; } -function printDocToString$1(doc, width, newLine) { - newLine = newLine || "\n"; - +function printDocToString$1(doc, options) { + let width = options.printWidth; + let newLine = options.newLine || "\n"; let pos = 0; // cmds is basically a stack. We've turned a recursive call into a // while loop which is much faster. The while loop below adds new // cmds to the array instead of recursively calling `print`. - let cmds = [[0, MODE_BREAK, doc]]; + let cmds = [[rootIndent(), MODE_BREAK, doc]]; let out = []; let shouldRemeasure = false; let lineSuffix = []; @@ -13578,7 +14323,11 @@ function printDocToString$1(doc, width, newLine) { break; case "indent": - cmds.push([ind + doc.n, mode, doc.contents]); + cmds.push([makeIndent(ind), mode, doc.contents]); + + break; + case "align": + cmds.push([makeAlign(ind, doc.n), mode, doc.contents]); break; case "group": @@ -13612,9 +14361,8 @@ function printDocToString$1(doc, width, newLine) { // group has these, we need to manually go through // these states and find the first one that fits. if (doc.expandedStates) { - const mostExpanded = doc.expandedStates[ - doc.expandedStates.length - 1 - ]; + const mostExpanded = + doc.expandedStates[doc.expandedStates.length - 1]; if (doc.break) { cmds.push([ind, MODE_BREAK, mostExpanded]); @@ -13709,8 +14457,12 @@ function printDocToString$1(doc, width, newLine) { ); } - out.push(newLine + " ".repeat(ind)); - pos = ind; + let length = ind.indent * options.tabWidth + ind.align.spaces; + let indentString = options.useTabs + ? "\t".repeat(ind.indent + ind.align.tabs) + : " ".repeat(length); + out.push(newLine + indentString); + pos = length; } break; } @@ -16075,13 +16827,15 @@ var validate = index$20.validate; var deprecatedConfig = deprecated_1; var defaults = { + useTabs: false, tabWidth: 2, printWidth: 80, singleQuote: false, trailingComma: "none", bracketSpacing: true, jsxBracketSameLine: false, - parser: "babylon" + parser: "babylon", + semi: true }; var exampleConfig = Object.assign({}, defaults, { @@ -16127,7 +16881,7 @@ var options = { normalize }; var flow_parser = createCommonjsModule(function (module, exports) { // Generated by js_of_ocaml 2.8.1 (function(aQ){"use strict";var -cL=104,gO="filter",d8=254,G=108,gN=956,fO="expressions",gz="Invalid_argument",bv="get",gZ="Identifier",an=16777215,dS="function",cN="variance",gM="exported",dI=65599,ft="jsError",gy="%ni",go=402,dP="consequent",f5=512,gx="&",gK="src/parser/expression_parser.ml",gL="(global)",gn="End_of_file",d4=120,gl="new",gm="Failure",dW="label",cS="local",fN="empty",bW="params",fD="shorthand",P=128,aJ="0",W=248,f4=-43,dO="constructor",aP="src/parser/spider_monkey_ast.ml",f3="yield",fC="Sys_blocked_io",f1=-53,f2="fd ",gw="superTypeParameters",gY=1023,f0="var",bQ=107,V="camlinternalFormat.ml",fM="Division_by_zero",fZ="0o",gk="elements",fs=-34,gi="each",gj="Sys_error",gJ=112,d7="decorators",fB="protected",fz=-97,fA=1114111,dH=-69,cH=1073741823,fy="%u",cU=105,dV="object",gI="%d",d6="method",cK=110,fL=57343,fK="'",fr="Unix",fY="Popping lex mode from empty stack",gh=218,a9="int_of_string",ce="operator",fX=-80,ci="from",a8="name",gg=810,d3=789,cX="e",cJ="returnType",a6="-",gf="callee",gv=-24,gH=-48,cg="async",dN="src/parser/statement_parser.ml",ge="*-/",cR="predicate",bR="set",dD="types",dG=" : file already exists",fW=109,cQ=240,bu="left",bh="right",d2=2048,fq=216,fJ=-66,X="body",cG="0x",cP="optional",fV="Out_of_memory",fp="\n",fU=101,gG=227,dC=32768,fT="index out of bounds",bP="typeof",gX="package",gF="Lookahead.peek failed",gd="%Li",K=255,cT=224,fo=199,fx="public",gc="loc",fI=65536,gu="enum",gt="in",d0="src/parser/lexer_flow.mll",d1="properties",bV="type",ck=250,cn=1024,bM="source",fw="interface",dZ="arguments",gW="module",a_="static",dY="declaration",cV=246,cf=102,gb="lexing: empty token",dB="generator",ch="init",dM=113,gV="infinity",gU="private",gE=122,cI="default",p="",gD="Stack_overflow",dF="exportKind",dR=-79,gs="instanceof",gT="Property",cW="implements",ae=100,av="argument",gC="Not_found",gr=-17,bU="src/parser/type_parser.ml",d5=103,bx="raw",fv="Match_failure",fS="alternate",gq=1e3,bO=".",bt="+",bg=65535,cm=106,bT="kind",ga="prefix",gB="superClass",fu="%li",gA="const",aK="typeParameters",fH="delete",fG="blocks",f$=252,B=127,dX="false",bL="key",bN="test",gS="mixins",a7=" ",dU="void",f9="RestElement",f_="Undefined_recursive_module",gp="let",bw=256,dK=":",dT="nan",cM=192,f8=116,bS="expression",gR=65520,Y="value",aZ="typeAnnotation",gQ=191,fF="minus",fR=56320,fE=245,dA="specifiers",cO="Set.bal",cj="/",gP="Assert_failure",dE="property",fP=114,fQ=949,cl="computed",f7="%i",aY="as",af="id",dJ="true",dQ="extends",f6="importKind",dL="null";function +cL=104,gO="filter",d8=254,G=108,gN=956,fO="expressions",gz="Invalid_argument",bv="get",gZ="Identifier",an=16777215,dS="function",cN="variance",gM="exported",dI=65599,ft="jsError",gy="%ni",go=402,dP="consequent",f5=512,gx="&",gK="src/parser/expression_parser.ml",gL="(global)",gn="End_of_file",d4=120,gl="new",gm="Failure",dW="label",cS="local",fN="empty",bW="params",fD="shorthand",P=128,aJ="0",W=248,f4=-43,dO="constructor",aP="src/parser/spider_monkey_ast.ml",f3="yield",fC="Sys_blocked_io",f1=-53,f2="fd ",gw="superTypeParameters",gY=1023,f0="var",bQ=107,V="camlinternalFormat.ml",fM="Division_by_zero",fZ="0o",gk="elements",fs=-34,gi="each",gj="Sys_error",gJ=112,d7="decorators",fB="protected",fz=-97,fA=1114111,dH=-69,cH=1073741823,fy="%u",cU=105,dV="object",gI="%d",d6="method",cK=110,fL=57343,fK="'",fr="Unix",fY="Popping lex mode from empty stack",gh=218,a9="int_of_string",cd="operator",fX=-80,ch="from",a8="name",gg=810,d3=789,cX="e",cJ="returnType",a6="-",gf="callee",gv=-24,gH=-48,cf="async",dN="src/parser/statement_parser.ml",ge="*-/",cR="predicate",bR="set",dD="types",dG=" : file already exists",fW=109,cQ=240,bu="left",bh="right",d2=2048,fq=216,fJ=-66,X="body",cG="0x",cP="optional",fV="Out_of_memory",fp="\n",fU=101,gG=227,dC=32768,fT="index out of bounds",bP="typeof",gX="package",gF="Lookahead.peek failed",gd="%Li",K=255,cT=224,fo=199,fx="public",gc="loc",fI=65536,gu="enum",gt="in",d0="src/parser/lexer_flow.mll",d1="properties",bV="type",cj=250,cm=1024,bM="source",fw="interface",dZ="arguments",gW="module",a_="static",dY="declaration",cV=246,ce=102,gb="lexing: empty token",dB="generator",cg="init",dM=113,gV="infinity",gU="private",gE=122,cI="default",p="",gD="Stack_overflow",dF="exportKind",dR=-79,gs="instanceof",gT="Property",cW="implements",ae=100,av="argument",gC="Not_found",gr=-17,bU="src/parser/type_parser.ml",d5=103,bx="raw",fv="Match_failure",fS="alternate",gq=1e3,bO=".",bt="+",bg=65535,cl=106,bT="kind",ga="prefix",gB="superClass",fu="%li",gA="const",aK="typeParameters",fH="delete",fG="blocks",f$=252,B=127,dX="false",bL="key",bN="test",gS="mixins",a7=" ",dU="void",f9="RestElement",f_="Undefined_recursive_module",gp="let",bw=256,dK=":",dT="nan",cM=192,f8=116,bS="expression",gR=65520,Y="value",aZ="typeAnnotation",gQ=191,fF="minus",fR=56320,fE=245,dA="specifiers",cO="Set.bal",ci="/",gP="Assert_failure",dE="property",fP=114,fQ=949,ck="computed",f7="%i",aY="as",af="id",dJ="true",dQ="extends",f6="importKind",dL="null";function hj(b,a){throw[0,b,a]}var S=[0];function HH(b,c){function @@ -16168,7 +16922,7 @@ Array(c);for(var a=0;a>=1;if(b==0)return c;a+=a;d++;if(d==9)a.slice(0,1);}}function -a$(a){if(a.t==2)a.c+=b0(a.l-a.c.length,"\0");else +a$(a){if(a.t==2)a.c+=bZ(a.l-a.c.length,"\0");else a.c=ed(a.c,0,a.c.length);a.t=0;}function g_(a){if(a.length<24){for(var b=0;bB)return false;return true}else @@ -16200,7 +16954,7 @@ j=p,c=p,g,f,h,a,b=0,i=e.length;bf5){c.substr(0,1);j+=c;c=p;j+=e.slice(b,d);}else c+=e.slice(b,d);if(d==i)break;b=d;}a=1;if(++b=55295&&a<57344)a=2;}else{a=3;if(++bfA)a=3;}}}}}if(a<4){b-=a;c+="\ufffd";}else if(a>bg)c+=String.fromCharCode(55232+(a>>10),fR+(a&gY));else -c+=String.fromCharCode(a);if(c.length>cn){c.substr(0,1);j+=c;c=p;}}return j+c}function +c+=String.fromCharCode(a);if(c.length>cm){c.substr(0,1);j+=c;c=p;}}return j+c}function Iy(a){switch(a.t){case 9:return a.c;default:a$(a);case 0:if(g_(a.c)){a.t=9;return a.c}a.t=8;case @@ -16228,11 +16982,11 @@ return 1;else if(a instanceof Array&&a[0]===(a[0]|0)){var -e=a[0];if(e===d8)e=0;if(e===ck){a=a[1];continue}else +e=a[0];if(e===d8)e=0;if(e===cj){a=a[1];continue}else if(b instanceof Array&&b[0]===(b[0]|0)){var -f=b[0];if(f===d8)f=0;if(f===ck){b=b[1];continue}else +f=b[0];if(f===d8)f=0;if(f===cj){b=b[1];continue}else if(e!=f)return eb)return 1;if(a!=b){if(!h)return NaN;if(a==a)return 1;if(b==b)return-1}}if(d.length==0)return 0;var g=d.pop();b=d.pop();a=d.pop();if(g+10)if(c==0&&(b>=a.l||a.t==2&&b>=a.c.length))if(d==0){a.c=p;a.t=2;}else{a.c=b0(b,String.fromCharCode(d));a.t=b==a.l?0:2;}else{if(a.t!=4)cZ(a);for(b+=c;c0)if(c==0&&(b>=a.l||a.t==2&&b>=a.c.length))if(d==0){a.c=p;a.t=2;}else{a.c=bZ(b,String.fromCharCode(d));a.t=b==a.l?0:2;}else{if(a.t!=4)cZ(a);for(b+=c;c>>=0;var d=c.toString(b.base);if(b.prec>=0){b.filler=a7;var -f=b.prec-d.length;if(f>0)d=b0(f,aJ)+d;}return d9(b,d)}var +f=b.prec-d.length;if(f>0)d=bZ(f,aJ)+d;}return d9(b,d)}var In=0;function a0(){return In++}function HR(a,b){return+(cY(a,b,false)>=0)}if(!Math.imul)Math.imul=function(b,a){a|=0;return((b>>16)*a<<16)+(b&bg)*a|0};var @@ -16362,7 +17116,7 @@ f=p,b=f,a,h,c=0,g=e.length;cf5){b.substr(0,1);f+=b;b=p;f+=e.slice(c,d);}else b+=e.slice(c,d);if(d==g)break;c=d;}if(a>6);b+=String.fromCharCode(P|a&63);}else if(a<55296||a>=fL)b+=String.fromCharCode(cT|a>>12,P|a>>6&63,P|a&63);else -if(a>=56319||c+1==g||(h=e.charCodeAt(c+1))fL)b+="\xef\xbf\xbd";else{c++;a=(a<<10)+h-56613888;b+=String.fromCharCode(cQ|a>>18,P|a>>12&63,P|a>>6&63,P|a&63);}if(b.length>cn){b.substr(0,1);f+=b;b=p;}}return f+b}function +if(a>=56319||c+1==g||(h=e.charCodeAt(c+1))fL)b+="\xef\xbf\xbd";else{c++;a=(a<<10)+h-56613888;b+=String.fromCharCode(cQ|a>>18,P|a>>12&63,P|a>>6&63,P|a&63);}if(b.length>cm){b.substr(0,1);f+=b;b=p;}}return f+b}function bk(a){var b=9;if(!g_(a))b=8,a=IA(a);return new aw(b,a,a.length)}function @@ -16377,8 +17131,8 @@ switch(k){case 32:e=a7;break;default:break}if(c>=0&&c<13){var g=Math.pow(2,c*4);a=Math.round(a*g)/g;}var b=a.toString(16);if(c>=0){var -h=b.indexOf(bO);if(h<0)b+=bO+b0(c,aJ);else{var -f=h+1+c;if(b.length>24&an,a>>31&bg]}function @@ -16401,7 +17155,7 @@ H3(g,c){var a=eb(g);if(a.signedconv&&H4(c)){a.sign=-1;c=g7(c);}var b=p,h=c1(a.base),f="0123456789abcdef";do{var e=g9(c,h);c=e[1];b=f.charAt(H_(e[2]))+b;}while(!H5(c));if(a.prec>=0){a.filler=a7;var -d=a.prec-b.length;if(d>0)b=b0(d,aJ)+b;}return d9(a,b)}function +d=a.prec-b.length;if(d>0)b=bZ(d,aJ)+b;}return d9(a,b)}function s(a){return a.l}function ax(a,b){switch(a.t&6){default:if(b>=a.c.length)return 0;case 0:return a.c.charCodeAt(b);case @@ -16493,7 +17247,7 @@ ee(){return Math.floor(IG())}function bi(b){this.data=b;this.inode=hn++;var a=ee();this.atime=a;this.mtime=a;this.ctime=a;}bi.prototype={truncate:function(){this.data=Z(0);this.modified();},modified:function(){var a=ee();this.atime=a;this.mtime=a;}};var -HM=cj;function +HM=ci;function by(){this.content={};this.inode=hn++;var a=ee();this.atime=a;this.mtime=a;this.ctime=a;}by.prototype={exists:function(a){return this.content[a]?1:0},mk:function(b,a){this.content[b]=a;},get:function(a){return this.content[a]},list:function(){var a=[];for(var @@ -16555,7 +17309,7 @@ d=bw;else{d=o[b[e]];b[e]++;}var k=c;c=a.lex_check[g+d]==c?a.lex_trans[g+d]:a.lex_default[c];if(c<0){b[e]=b[i];if(b[h]==-1)aL(gb);else return b[h]}else{var m=a.lex_base_code[k],f;f=a.lex_check_code[m+d]==k?a.lex_trans_code[m+d]:a.lex_default_code[k];if(f>0)If(a.lex_code,f,b[j],b[e]);if(d==bw)b[n]=0;}}}function -bZ(a,b){return+(cY(a,b,false)!=0)}function +bY(a,b){return+(cY(a,b,false)!=0)}function Im(b,a){b[0]=a;return 0}function hf(a){return a instanceof @@ -16595,9 +17349,9 @@ b(a,b){return a.length==1?a(b):bj(a,[b])}function f(a,b,c){return a.length==2?a(b,c):bj(a,[b,c])}function u(a,b,c,d){return a.length==3?a(b,c,d):bj(a,[b,c,d])}function bs(a,b,c,d,e){return a.length==4?a(b,c,d,e):bj(a,[b,c,d,e])}function -cd(a,b,c,d,e,f){return a.length==5?a(b,c,d,e,f):bj(a,[b,c,d,e,f])}var +cc(a,b,c,d,e,f){return a.length==5?a(b,c,d,e,f):bj(a,[b,c,d,e,f])}var c$=[W,a(gm),-3],ef=[W,a(gz),-4],ah=[W,a(gC),-7],t=[W,a(gP),-11],en=[0,a(p),1,0,0],dk=[0,0,0],as=[0,a('\0\0\xb2\xff\xb3\xff\xb9\xffB\0C\0T\0W\0F\0I\0J\0K\0M\0e\0\xdd\xff\xde\xff\xdf\xff\xe0\xff\xe3\xff\xe4\xff\xe5\xff\xe6\xff\xe7\xff\xe8\xff\xc0\0L\0e\0\x17\x01n\x01\xf6\xff\xf7\xffl\0u\0v\0\0\0\x0e\0\x0f\0\x07\x003\x01\xfe\xff\xff\xff\x01\0\x12\0(\0\f\0\x15\0*\0\f\0=\0-\0\t\0\xb6\xff\xf9\xff\xe0\x01B\0u\0\x0f\x000\x004\0\x17\0\xe5\x01(\x008\0\x1a\0K\0:\0\x17\0\xfb\xffh\0a\0\xac\0q\0m\0y\0q\0i\0{\0{\0\xa8\0\xca\xff\xfa\xff\xc9\xff\xf8\xff\x0b\x02\xa5\x02\xfc\x02S\x03\xaa\x03\x01\x04X\x04\xaf\x04\x06\x05]\x05\xb4\x05\x0b\x06b\x06\xb9\x06\xc3\x01\x10\x07g\x07\xbe\x07\x15\bl\b\xc3\b\x1a\tq\t\xc8\t\xb8\0\xe2\xffE\x02\xc7\xff\xdc\xff\xc6\xff\xdb\xff\xb7\xff\xaa\0\xda\xff\xab\0\xd9\xff\xac\0\xd8\xff\xd2\xff\xad\0\xd7\xff\xb0\0\xd0\xff\xcf\xff\xcc\xff\xd4\xff\xcb\xff\xd3\xff\xc8\xff\xc5\xff:\n\xcc\xff\xcd\xff\xcf\xff\xd3\xff\xb0\0\xd9\xff\xda\xff\xdd\xff\xde\xff\xdf\xff\xe0\xff\xe3\xff\xe4\xff~\0\xe7\xff\x80\0\xe9\xff\xea\xff\x9a\0\x94\n\xfa\n\xd6\x01Q\x0b\xa8\x0b\x1a\f\xf9\xff\xcf\0\xf1\0D\0\x9c\0\x9d\0\xa3\0\xc4\x0b\xff\xff\x83\0\xc1\0\xd1\0\xf9\0\xb4\0\xc4\0\xa7\0\xcb\t\xd4\0\x96\0\xfa\xff\x1f\f\xea\0\x1d\x01\xb7\0\xf3\0\xf4\0\xfa\0$\f\xe9\0\x15\x01\xf7\0\xdf\x0b\x17\x01\xd9\0\xfc\xff,\x01&\x01{\x01@\x01<\x01H\x01@\x018\x01J\x01d\x01\xfb\xff\xf3\x01\x0f\x01K\x01j\x01c\x01K\f>\x01N\x01P\x01\xec\x0bp\x01?\x01x\f\xff\fV\r\xad\r\0\x02\x04\x0e[\x0e\xb2\x0e\t\x0f`\x0f\xb7\x0f\x0e\x10e\x10\xbc\x10\x13\x11j\x11\xc1\x11\x18\x12o\x12\xc6\x12\x1d\x13t\x13\xcb\x13"\x14\xd1\x01\xe2\xffy\x14\xd0\x14\'\x15~\x15\x99\x01\x9d\x01\xad\x01\xa6\x01\x9f\x01\xeb\xff\xe6\xff\xe5\xff\xd1\xff\x1b\f\xfc\xff\xfd\xff\xfe\xff\xff\xff\xcf\x15\xee\xff\x01\0\xef\xff\x18\x16\xf4\xff\xf5\xff\xf6\xff\xf7\xff\xf8\xff\xf9\xff\xf1\x02H\x03>\x16\xfe\xff\xff\xffU\x16\xfd\xff\x9f\x03\xfc\xff{\x16\x92\x16\xb8\x16\xcf\x16\xf2\xff\xf5\x16\xf1\xff\xd7\x02\xfb\xff\xea\x01\xfe\xff\xff\xff\xe4\x01\xfd\xff\xfc\xff;\x02\xfd\xff\xfe\xff\xff\xff\0\x17\xf9\xff\xee\x01`\x01\x9c\x01\xa0\x01*\x02)\fC\x15\xfe\xff\xff\xffc\x01\xad\x01\xc7\x01+\x02\xa0\x01\xba\x01\xaa\x01\x87\x15\xca\x01\xa7\x01\xfb\xff\xfc\xff\x0b\x16\xf8\xff\x04\0\xf9\xff\xfa\xff8\x17,\x03\xff\xff\xfd\xff\x05\0\xfe\xff\xc0\x17\x96\t\xfb\xff\xfc\xff\x0b\x02\xff\xff\xfd\xff\xfe\xff2\x18\xf1\xff\xf2\xff\x8a\x18\xf4\xff\xf5\xff\xf6\xff\xf7\xff\xf8\xff\xfa\xffv\x02\xb0\x01!\x02"\x023\x02\x88\x167\x18\xfe\xff\xff\xff\x05\x02L\x02_\x02\xf3\x02@\x02Q\x02C\x02\xbd\x16c\x02%\x02\xfb\xff\xfc\xff|\f\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x06\0\xff\xff\xfc\x18\xf9\xff\xf8\x18\x07\0\xfd\xff\xfe\xff\xff\xffO\x19\xdf\n_\f\x84\x17\x9c\x19\xfc\xff\xfb\xff\xd3\x19\xfa\xff*\x1a\x81\x1a\xd8\x1a/\x1b\x86\x1b\xaa\x02\xf8\x1b\xfa\xff\xfb\xff\xd6\x02G\x02\x83\x02\xa9\x02J\x03\x04\x19K\x1b\xff\xffp\x02\xb7\x02\xd7\x02\x8d\x03\xaa\x02\xba\x02\x9d\x02\xc9\x16\xd9\x02\x9b\x02\xfc\xff\xfd\xff\xc3\x16\xf9\xff\xfa\xff\b\0\xfc\xff\xe1\x02\xfe\xff\xff\xff\xfd\xff\xfb\xff'),a("\xff\xff\xff\xff\xff\xff\xff\xffD\0A\0>\0=\0<\0;\0E\0G\0B\0C\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\0K\0\x1e\0\x15\0\x15\0\xff\xff\xff\xffM\0?\0J\0M\0M\0M\0M\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff@\0\xff\xff\xff\xff\xff\xff\xff\xff\x14\0\x14\0\x15\0\x14\0\x0f\0\x14\0\x14\0\x0b\0\n\0\r\0\f\0\x0e\0\x0e\0\x0e\0\xff\xff\x0e\0\x0e\0\x13\0\x12\0\x11\0\x10\0\x15\0\x13\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff)\0\xff\xff*\0\xff\xff.\0\xff\xff\xff\xff2\0\xff\xff1\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff+\0\xff\xff\x17\0\xff\xff\xff\xff3\0\x13\0\x13\0\x1e\0\x12\0\x12\x001\0\xff\xff)\x003\x003\x003\x003\x003\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\0\x11\0\x11\0\x10\0\xff\xff\x10\0\x0f\0\x0f\0\x12\0\x11\0\f\0\x11\0\x11\0\b\0\x07\0\n\0\t\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0e\0\r\0\xff\xff\xff\xff\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x0f\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\f\0\x05\0\x0f\0\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\0\x06\0\x06\0\x06\0\x06\0\x02\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\x04\0\x07\0\xff\xff\xff\xff\x01\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\f\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\0\x0e\0\x0e\0\x0e\0\x0e\0\x02\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\x06\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\0\x05\0\x05\0\x05\0\x05\0\x01\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\0\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\xff\xff"),a("\x01\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\x01\x01\0\0\0\0\0\0\0\0\x06\x01\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0!\x01\0\0\xff\xff\0\0\0\0\xff\xff\0\0\0\0)\x01\0\0\0\0\0\0-\x01\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0D\x01\0\0\xff\xff\0\0\0\0\xff\xffK\x01\0\0\0\0\xff\xff\0\0\xff\xffP\x01\0\0\0\0\xff\xff\0\0\0\0\0\0W\x01\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0v\x01\0\0\0\0\0\0\0\0\xff\xff\0\0}\x01\0\0\xff\xff\xff\xff\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x01\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xaa\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0"),a("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\0(\0\b\x01&\0&\0F\x01M\x01{\x01\x80\x01\xb2\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\0\n\0\x1e\0\x1f\0\x18\0\x05\0\r\0\x1e\0\x15\0\x14\0 \0\x07\0\x10\0\x06\0\x1a\0!\0\x1c\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x0f\0\x11\0\t\0\x0b\0\b\0\x0e\0\x19\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x13\0'\0\x12\0\x04\0\x18\0\x1d\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x17\0\f\0\x16\0\x03\0\x84\0\x83\0\x82\0\x80\0{\0z\0w\0x\0u\0s\0r\0p\0o\0m\0R\x001\x000\0/\0\x81\x001\0k\0\x7f\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0N\x005\0.\0n\0&\0P\x004\0.\0-\x000\0/\0&\0&\0-\0&\0D\0C\0A\0>\0O\x003\0@\0?\0<\0=\0<\0<\0<\x002\x002\0&\0&\0&\0&\0&\0&\0&\0&\0&\0&\0&\0&\0q\0B\0<\0<\0<\0<\0<\0<\0<\0<\0<\0<\0<\0<\0E\0F\0G\0H\0I\0J\0K\0L\0M\0C\0%\0$\0#\0\x18\0Q\0l\0t\0v\0y\0}\0|\0&\0~\0\xff\0\"\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0<\0\xfe\0\xfd\0\xf7\0\xcc\0\xb1\0\x02\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\xb3\0\xb0\0\xaf\0\xae\0\x18\0\xb2\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0S\0&\0\xad\0\xb1\0&\0&\0\xb0\0\xa6\0\xac\0\xa6\0U\0\xa6\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\xaf\0\xae\0&\0\xa6\0\xa6\0\xc2\0\xc1\0S\0S\0S\0S\0T\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\xc0\0\xbf\0\xbe\0\xbd\0S\0\xba\0S\0S\0S\0S\0T\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\xad\0\xbc\0\xba\0\xba\0\xba\0\xba\0\xac\0\xbb\0\xc3\0U\0\xc4\0W\0W\0W\0W\0W\0W\0W\0W\0\x1b\0\x1b\0\xc5\0\xc6\0\xc7\0\xc8\0\xc9\0\xca\0\xcb\0S\0Y\0S\0S\0T\0S\0S\0S\0S\0S\0S\0S\0S\0S\0X\0S\0S\0S\0S\0S\0S\0S\0S\0V\0S\0S\0\xc1\0\xd8\0\xd7\0\xd2\0S\0\xd2\0S\0Y\0S\0S\0T\0S\0S\0S\0S\0S\0S\0S\0S\0S\0X\0S\0S\0S\0S\0S\0S\0S\0S\0V\0S\0S\0<\0\xd6\0\xd5\0<\0<\0<\0\xd2\0\xd2\0<\0<\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xd4\0\xd2\0\xf2\0<\0\xf8\0\xf9\0\xd3\0\xf1\0<\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xfa\0\xfb\0\xfc\0'\x01,\0+\0*\0%\x01A\x01&\x017\0@\x01?\x01B\x01@\x017\0>\x01=\x01)\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0?\x013\x01S\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\x003\x01S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0*\x016\0>\x01=\x013\x013\x016\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\x003\x01U\x01T\x01\x18\0S\0r\x01S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0s\x01q\x01p\x01o\x01\x18\0t\x01\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0r\x01;\0:\x009\0<\x01<\x01;\0:\x009\0S\0;\x01;\x01q\x01n\x01e\x018\0a\0e\x01a\0m\x018\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0p\x01o\x01#\x01e\x01e\x01e\x01\x8b\x01S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\xa7\x01\"\x01\xa6\x01\xa5\x01S\0\xa8\x01S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\xa4\x01\xa3\x01\xa6\x01h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0M\x01\xa5\x01\x9a\x01L\x01\x9a\x01+\x01\x9a\x01S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\xa4\x01\xa3\x01\x9a\x01\x9a\x01S\0\xb1\x01S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\0\0\0\0\0\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0n\x01\0\0\0\0\0\0\0\0\0\0m\x01f\0f\0f\0f\0f\0f\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0S\0\0\0f\0f\0f\0f\0f\0f\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0_\0\x18\x01\x18\x01\x18\x01\x18\x01\x18\x01\x18\x01\x18\x01\x18\x01$\x01U\0\0\0W\0W\0W\0W\0W\0W\0W\0W\0^\0^\0\xa2\x01\0\0\0\0\0\0\0\0\0\0\xa1\x01_\0_\0_\0_\0`\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\0\0\0\0\0\0\0\0_\0\0\0_\0_\0_\0_\0`\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0S\0\0\0\xa2\x01\0\0\0\0\0\0\0\0\xff\xff\xa1\x01\0\0\0\0\0\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0S\0\0\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\0Z\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0S\0\0\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0[\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\0Z\0[\0[\0[\0[\0[\0[\0[\0[\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0\0\0\0\0\0\0\0\0[\0\0\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0\0\0\0\0\0\0\0\0[\0\0\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0]\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0]\0]\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0\0\0\0\0\0\0\0\0]\0\0\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0\0\0\0\0\0\0\0\0]\0\0\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0U\0\0\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_\0_\0_\0_\0`\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\0\0\0\0\0\0\0\0_\0\0\0_\0_\0_\0_\0`\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\0\0\0\0\0\0\0\0_\0\0\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\0\0\0\0\0\0\0\0\0\0\0\0a\0\0\0a\0\0\0\0\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\0\0\0\0\0\0\0\0_\0\0\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\0\0\0\0\0\0\0\0c\0\0\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\0\0\0\0\0\0\0\0c\0\0\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\0\0\0\0\0\0\0\0e\0\0\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\0\0\0\0\0\0\0\0e\0\0\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0g\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0f\0f\0f\0f\0f\0f\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0\0\0\0\0\0\0\0\0g\0\0\0f\0f\0f\0f\0f\0f\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0\0\0\0\0\0\0\0\0g\0\0\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0S\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0S\0S\0S\0S\0T\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0S\0\0\0S\0S\0S\0S\0T\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0j\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0\0\0\0\0\0\0\0\0j\0\0\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0\0\0\0\0\0\0\0\0\0\0R\x01Q\x01\0\0\0\0\0\0\0\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0\0\0\0\0\0\0\0\0j\0\0\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0\xa6\0\xa7\0\0\0\xa6\0\xa6\0\0\0\0\0\0\0\xa6\0\xa6\0\xa6\0\xa6\0\xa6\0\xa6\0\xa6\0\xa6\0\xa6\0\xa6\0\xa6\0\0\0\0\0\0\0\0\0\xa6\0\0\0\x9f\0\0\0\x99\0\x98\0\x89\0\x9f\0\x92\0\x91\0\xa0\0\x88\0\x8f\0\x9e\0\x9b\0\xa1\0\x9d\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x8e\0\x90\0\x8c\0\x8a\0\x8b\0\x8d\0\xa6\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x97\0S\x01\x96\0\0\0\x99\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x9a\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x95\0\x93\0\x94\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\x99\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\0\0\0\0\xa5\0\xa4\0\xa3\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa2\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\x87\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\x86\x01\0\0\x99\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\xf3\0\x99\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe1\0\0\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xda\0\xda\0\xda\0\xda\0\xdb\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xda\0\xda\0\xda\0\xda\0\xdb\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xa6\0\0\0\0\0\xa6\0\xa6\0\0\0\0\0\0\0\0\0\xe1\0\0\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\x9c\0\x9c\0\0\0\0\0\xa6\0\0\0\0\0\0\0\0\0\xda\0\xe5\0\xda\0\xda\0\xdb\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xe4\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xe2\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xda\0\xe5\0\xda\0\xda\0\xdb\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xe4\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xe2\0\xda\0\xda\0\xd2\0\0\0\x02\x01\xd2\0\xd2\0\xba\0\0\0\0\0\xba\0\xba\0\xba\0\0\0\0\0\xba\0\xba\x003\x01\0\0\0\x003\x013\x01\0\0\0\0\0\0\xd2\0\0\0\0\0\x04\x01\0\0\xba\0\0\0\0\0\x04\x01\0\0\xba\0\0\0\0\0\0\0\xcd\x003\x01\x9d\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\xd2\0\0\0\0\0\xd2\0\xd2\0\xb5\0\0\0\0\0\0\0\0\0\xb5\0\xba\0\xba\0\xba\0\xba\0\xba\0\xba\0\xba\0\xba\0\xba\0\xba\0\xba\0\0\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\x03\x01\0\0\xcd\0\0\0\x9d\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\xb4\0{\x01\0\0\0\0z\x01\xb4\0\0\0\0\0\0\0\xba\0\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\0\0\x89\x01\xd2\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xab\0\xaa\0\xa9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\0\0\xa8\0\0\0\0\0\0\0\0\0x\x01\xda\0\xda\0\xda\0\xda\0\xdb\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xda\0\xda\0\xda\0\xda\0\xdb\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0w\x01\0\0\0\0\0\0\xd1\0\xd0\0\xcf\0\0\0\0\0\xb9\0\xb8\0\xb7\0\0\0\0\0\xb9\0\xb8\0\xb7\0\0\0\xce\0:\x019\x018\x01\0\0\xb6\0\0\0\0\0\0\0\0\0\xb6\0\0\0\0\0\0\0\0\x007\x01\0\0\0\0\x02\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd1\0\xd0\0\xcf\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\xce\0\0\0\0\0\0\0\0\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0y\x01\0\0\0\0\0\0\0\0\xdd\0\0\0\xdd\0\0\0\0\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xe0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\0\0\0\0\0\0\0\0\xe0\0\0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xdf\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\0\0\0\0\0\0\0\0\xdf\0\0\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\0\0\0\0\0\0\0\0\xdf\0\0\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xe0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\0\0\0\0\0\0\0\0\xe0\0\0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xeb\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe1\0\0\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xea\0\xea\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xec\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\0\0\0\0\0\0\0\0\xeb\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xec\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xda\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe6\0\xe6\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\0\0\0\0\0\0\0\0\xda\0\0\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xe7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe6\0\xe6\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\xe7\0\0\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\xe7\0\0\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe9\0\xe9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\0\0\0\0\0\0\0\0\xe9\0\0\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\0\0\0\0\0\0\0\0\xe9\0\0\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xeb\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe1\0\0\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xec\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\0\0\0\0\0\0\0\0\xeb\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xec\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\0\0\0\0\0\0\0\0\xeb\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\0\0\0\0\0\0\0\0\0\0\0\0\xdd\0\0\0\xdd\0\0\0\0\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\0\0\0\0\0\0\0\0\xeb\0\0\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xee\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\0\0\0\0\0\0\0\0\xee\0\0\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\0\0\0\0\0\0\0\0\xee\0\0\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\xf0\0\0\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\x99\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\xf4\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\x99\0\0\0\x99\0\x99\0\x99\0\x99\0\xf5\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\x003\x015\x01\0\x003\x013\x01\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\x003\x01\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\x99\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\xf6\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\b\x01\0\0\0\0\x07\x01\x99\0\0\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\x11\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x013\x013\x013\x013\x013\x013\x013\x013\x013\x013\x013\x01\0\0\0\0\0\0F\x01\0\0\0\0E\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\x019\x018\x01\0\0\0\0\0\0\0\0\x13\x01\0\0\0\0\0\0\0\0\0\0\x0f\x017\x01\0\0\0\0\x0e\x013\x01\0\0\0\0\0\0H\x01\0\0\0\0\r\x01\0\0\0\0\0\0\f\x01\0\0\x0b\x01\t\x01\n\x01\0\0\x12\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0G\x01I\x01\0\0\0\0\0\0\0\0\0\0\0\0\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\0\0\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\0\0\0\0e\x01\0\0\x19\x01e\x01e\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\0\0\0\0\0\0\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\0\0\0\0\0\0e\x01\0\0\0\0\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\0\0\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x16\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\0\0\xab\x01\0\0\x14\x01\xac\x01\0\0\0\0\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\0\0\0\0\0\0\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\0\0\0\0\0\0\0\0\0\0\xae\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\0\0\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x013\x015\x01J\x013\x014\x01\0\0\0\0\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\0\0\0\0\0\0\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\xad\x013\x01\0\0\0\0\xaf\x01\0\0\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01.\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1d\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\0\0e\x01e\x01e\x01e\x01e\x01e\x01e\x01e\x01e\x01e\x01e\x01\0\0\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\0\0\0\0\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01N\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\x01k\x01j\x01e\x01\0\0\0\0\0\0\0\0\0\0\x1f\x01\0\0\0\0\0\0\0\0i\x01\x9a\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01\0\0\0\0\0\0\0\0N\x01\0\0N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01\0\0\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\0\0\0\0\0\0\0\0\0\0\xb0\x01\0\0\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x002\x011\x010\x01N\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\0\0\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x006\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01\0\0\0\0\0\0\0\0N\x01\0\0N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01e\x01g\x01\0\0e\x01f\x01e\x01g\x01\0\0e\x01e\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0e\x01\0\0X\x01\0\0Y\x01e\x01\0\0X\x01\0\0\0\0\0\0\0\0\0\0\0\0[\x01`\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\x01\0\0_\x01Z\x01^\x01\0\0\0\0Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01\0\0\0\0\0\0\0\0Y\x01\0\0Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01]\x01Y\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Y\x01\0\0\0\0Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01\0\0\0\0\0\0\0\0Y\x01\0\0Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01\0\0\x80\x01\0\0\0\0\x7f\x01\0\0\0\0\0\0\x9a\x01\0\0\0\0\x9a\x01\x9a\x01\0\0d\x01c\x01b\x01\0\0\0\0l\x01k\x01j\x01\x84\x01\x83\x01\0\0\x82\x01\0\0\0\0a\x01~\x01\x82\x01\x9a\x01\0\0i\x01\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01h\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\x83\x01\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x8a\x01\0\0\0\0\0\0\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\0\0\0\0\0\0\0\0\x8a\x01\0\0\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\0\0\0\0\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\0\0\x88\x01\0\0\0\0\0\0\0\0\0\0\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\0\0\0\0\xa0\x01\x9f\x01\x9e\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\x8c\x01\0\0\0\0\0\0\0\0\x81\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8e\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\0\0\0\0\0\0\0\0\x8e\x01\0\0\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8f\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\0\0\0\0\0\0\0\0\x8f\x01\0\0\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x90\x01\x9a\x01\x9c\x01\0\0\x9a\x01\x9a\x01\0\0\0\0\0\0\0\0\0\0\0\0\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\0\0\x8b\x01\x9a\x01\0\0\0\0\0\0\0\0\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\0\0\0\0\0\0\0\0\x90\x01\0\0\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x91\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\0\0\0\0\0\0\0\0\x91\x01\0\0\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x9a\x01\x9c\x01\0\0\x9a\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9a\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\xa0\x01\x9f\x01\x9e\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x94\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x99\x01\x98\x01\x97\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x96\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff"),a('\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x07\x01\0\0\0\0E\x01L\x01z\x01\x7f\x01\xac\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\x05\0\x06\0\x07\0\b\0\b\0\t\0\t\0\n\0\x0b\0\x0b\0\f\0\r\0\x19\0\x1f\0#\0$\0$\0\x06\0*\0\x1a\0\x07\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0 \0!\0%\0\r\0-\0 \0!\0,\0%\0+\0+\0.\0/\0,\x001\x006\x007\x009\0;\0 \0!\0:\0:\0=\0;\0>\0?\0A\0"\0)\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x002\0\f\x008\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0B\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0\0\0\0\0\0\0\x18\0N\0k\0s\0u\0w\0z\0z\x000\0|\0\x8a\0\0\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0@\0\x93\0\x95\0\x98\0\xa0\0\xa2\0\0\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\xa1\0\xa3\0\xa4\0\xa4\0\x18\0\xa1\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x1b\0&\0\xa5\0\xa8\0&\0&\0\xa9\0\xac\0\xa5\0\xad\0\x1b\0\xae\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\xaa\0\xaa\0&\0\xb0\0\xb1\0\xb4\0\xb5\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\xb6\0\xb7\0\xb8\0\xb8\0\x1b\0\xbb\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1c\0\xab\0\xb9\0\xbc\0\xbd\0\xbf\0\xc0\0\xab\0\xb9\0\xc2\0\x1c\0\xc3\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\xc4\0\xc5\0\xc6\0\xc7\0\xc8\0\xc9\0\xca\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\xcb\0\xce\0\xcf\0\xd3\0\x1c\0\xd4\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\x005\0\xd0\0\xd0\x005\x005\0<\0\xd5\0\xd7\0<\0<\0a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\xd1\0\xd8\0\xf1\x005\0\xf7\0\xf8\0\xd1\0\x9b\0<\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\xf9\0\xfa\0\xfb\0%\x01&\0&\0&\0"\x01.\x01"\x015\0/\x010\x01.\x017\x01<\x001\x011\x01&\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\x008\x01;\x01S\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0<\x01S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0(\x015\x009\x019\x01=\x01?\x01<\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0@\x01R\x01R\x01m\0S\0a\x01S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0`\x01b\x01c\x01c\x01m\0`\x01m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0m\0i\x015\x005\x005\x002\x01:\x01<\0<\0<\0T\x002\x01:\x01j\x01d\x01m\x015\0T\0n\x01T\0d\x01<\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0k\x01k\x01 \x01o\x01q\x01r\x01\x91\x01T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\x95\x01 \x01\x96\x01\x97\x01T\0\x95\x01T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0U\0\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x10\x01\x98\x01\x98\x01\x9d\x01U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0I\x01\x9e\x01\xa1\x01I\x01\xa2\x01(\x01\xa3\x01U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\x9f\x01\x9f\x01\xa5\x01\xa6\x01U\0\xae\x01U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0V\0\x11\x01\x11\x01\x11\x01\x11\x01\x11\x01\x11\x01\x11\x01\x11\x01\xff\xff\xff\xff\xff\xffV\0V\0V\0V\0V\0V\0V\0V\0V\0V\0l\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffl\x01V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0\xff\xff\xff\xff\xff\xff\xff\xffV\0\xff\xffV\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0W\0\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01\x17\x01 \x01W\0\xff\xffW\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\x99\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\x01W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xff\xff\xff\xff\xff\xff\xffW\0\xff\xffW\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0X\0\xff\xff\xa0\x01\xff\xff\xff\xff\xff\xff\xff\xffI\x01\xa0\x01\xff\xff\xff\xff\xff\xffX\0X\0X\0X\0X\0X\0X\0X\0X\0X\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffX\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0\xff\xff\xff\xff\xff\xff\xff\xffX\0\xff\xffX\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0Y\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffY\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffY\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0\xff\xff\xff\xff\xff\xff\xff\xffY\0\xff\xffY\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffZ\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffZ\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0\xff\xff\xff\xff\xff\xff\xff\xffZ\0\xff\xffZ\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0[\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0\xff\xff\xff\xff\xff\xff\xff\xff[\0\xff\xff[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0[\0\\\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\xff\xff\xff\xff\xff\xff\xff\xff\\\0\xff\xff\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0]\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0\xff\xff\xff\xff\xff\xff\xff\xff]\0\xff\xff]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0]\0^\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff^\0\xff\xff^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0\xff\xff\xff\xff\xff\xff\xff\xff^\0\xff\xff^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0_\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0\xff\xff\xff\xff\xff\xff\xff\xff_\0\xff\xff_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0_\0`\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff`\0\xff\xff`\0\xff\xff\xff\xff`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xff\xff\xff\xff\xff\xff\xff\xff`\0\xff\xff`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffb\0b\0b\0b\0b\0b\0b\0b\0b\0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffb\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0\xff\xff\xff\xff\xff\xff\xff\xffb\0\xff\xffb\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0c\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffc\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffc\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xff\xff\xff\xff\xff\xff\xff\xffc\0\xff\xffc\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0d\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffd\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffd\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xff\xff\xff\xff\xff\xff\xff\xffd\0\xff\xffd\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0e\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffe\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffe\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xff\xff\xff\xff\xff\xff\xffe\0\xff\xffe\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0f\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfff\0f\0f\0f\0f\0f\0f\0f\0f\0f\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfff\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0\xff\xff\xff\xff\xff\xff\xff\xfff\0\xff\xfff\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0g\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffg\0g\0g\0g\0g\0g\0g\0g\0g\0g\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffg\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0\xff\xff\xff\xff\xff\xff\xff\xffg\0\xff\xffg\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0g\0h\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffh\0h\0h\0h\0h\0h\0h\0h\0h\0h\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffh\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\xff\xffh\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0i\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffi\0i\0i\0i\0i\0i\0i\0i\0i\0i\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffi\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0\xff\xff\xff\xff\xff\xff\xff\xffi\0\xff\xffi\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0j\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xffj\0j\0j\0j\0j\0j\0j\0j\0j\0j\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffj\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0\xff\xff\xff\xff\xff\xff\xff\xffj\0\xff\xffj\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0j\0\x85\0\x85\0\xff\xff\x85\0\x85\0\xff\xff\xff\xff\xff\xff\xaf\0\xaf\0\xaf\0\xaf\0\xaf\0\xaf\0\xaf\0\xaf\0\xaf\0\xaf\0\xaf\0\xff\xff\xff\xff\xff\xff\xff\xff\x85\0\xff\xff\x85\0\xff\xff\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\xaf\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0O\x01\x85\0\xff\xff\x85\0\xff\xff\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x99\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\xff\xff\xff\xff\xff\xff\xff\xff\x99\0\xff\xff\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x99\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\xff\xff\x85\0\x85\0\x85\0\x9a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x85\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x85\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\xff\xff\xff\xff\x84\x01\xff\xff\x9a\0\xff\xff\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9a\0\x9c\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\0\xff\xff\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\xff\xff\xff\xff\xff\xff\xff\xff\x9c\0\xff\xff\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9d\0\xa6\0\xff\xff\xff\xff\xa6\0\xa6\0\xff\xff\xff\xff\xff\xff\xff\xff\x9d\0\xff\xff\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\xff\xff\xff\xff\xa6\0\xff\xff\xff\xff\xff\xff\xff\xff\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\xff\xff\xff\xff\xff\xff\xff\xff\x9d\0\xff\xff\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9e\0\xff\xff\0\x01\x9e\0\x9e\0\xb3\0\xff\xff\xff\xff\xb3\0\xb3\0\xba\0\xff\xff\xff\xff\xba\0\xba\x003\x01\xff\xff\xff\xff3\x013\x01\xff\xff\xff\xff\xff\xff\x9e\0\xff\xff\xff\xff\0\x01\xff\xff\xb3\0\xff\xff\xff\xff\0\x01\xff\xff\xba\0\xff\xff\xff\xff\xff\xff\x9e\x003\x01\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\xd2\0\xff\xff\xff\xff\xd2\0\xd2\0\xb3\0\xff\xff\xff\xff\xff\xff\xff\xff\xba\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xff\xff\xd2\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\0\x01\xff\xff\xd2\0\xff\xff\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xb3\0u\x01\xff\xff\xff\xffu\x01\xba\0\xff\xff\xff\xff\xff\xff\xbe\0\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\xff\xff\x85\x01\xd6\0\xd9\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa6\0\xa6\0\xa6\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xff\xff\xa6\0\xff\xff\xff\xff\xff\xff\xff\xffu\x01\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xff\xff\xff\xff\xff\xff\xff\xff\xd9\0\xff\xff\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xff\xff\xff\xff\xff\xff\xff\xffu\x01\xff\xff\xff\xff\xff\xff\x9e\0\x9e\0\x9e\0\xff\xff\xff\xff\xb3\0\xb3\0\xb3\0\xff\xff\xff\xff\xba\0\xba\0\xba\0\xff\xff\x9e\x003\x013\x013\x01\xff\xff\xb3\0\xff\xff\xff\xff\xff\xff\xff\xff\xba\0\xff\xff\xff\xff\xff\xff\xff\xff3\x01\xff\xff\xff\xff\0\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xda\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\0\xd2\0\xd2\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xff\xff\xd2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xff\xff\xff\xff\xff\xff\xff\xff\xda\0\xff\xff\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xda\0\xdb\0\xff\xffu\x01\xff\xff\xff\xff\xff\xff\xff\xff\xdb\0\xff\xff\xdb\0\xff\xff\xff\xff\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xff\xff\xff\xff\xff\xff\xff\xff\xdb\0\xff\xff\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdc\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xff\xff\xff\xff\xff\xff\xff\xff\xdc\0\xff\xff\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xde\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xff\xff\xff\xff\xff\xff\xff\xff\xde\0\xff\xff\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xdf\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xff\xff\xff\xff\xff\xff\xff\xff\xdf\0\xff\xff\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xdf\0\xe0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xff\xff\xff\xff\xff\xff\xff\xff\xe0\0\xff\xff\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe0\0\xe1\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xff\xff\xff\xff\xff\xff\xff\xff\xe1\0\xff\xff\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xff\xff\xff\xff\xff\xff\xff\xff\xe2\0\xff\xff\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe3\0\xff\xff\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xe3\0\xff\xff\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe4\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xff\xff\xff\xff\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xff\xff\xff\xff\xff\xff\xff\xff\xe5\0\xff\xff\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xff\xff\xff\xff\xff\xff\xe6\0\xff\xff\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe7\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xff\xff\xff\xff\xff\xff\xff\xff\xe7\0\xff\xff\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xe8\0\xff\xff\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe9\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xff\xff\xff\xff\xff\xff\xff\xff\xe9\0\xff\xff\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xe9\0\xea\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xea\0\xff\xff\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xff\xff\xff\xff\xff\xff\xff\xff\xea\0\xff\xff\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xeb\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\xff\xff\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xeb\0\xec\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xec\0\xff\xff\xec\0\xff\xff\xff\xff\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xff\xff\xff\xff\xff\xff\xff\xff\xec\0\xff\xff\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xed\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xee\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xff\xff\xff\xff\xff\xff\xff\xff\xee\0\xff\xff\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xee\0\xef\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xff\xff\xff\xff\xff\xff\xff\xff\xef\0\xff\xff\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf3\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xff\xff\xff\xff\xff\xff\xff\xff\xf3\0\xff\xff\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf3\0\xf4\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xff\xff\xff\xff\xff\xff\xff\xff\xf4\0\xff\xff\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf4\0\xf5\x004\x014\x01\xff\xff4\x014\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff4\x01\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf6\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\x05\x01\xff\xff\xff\xff\x05\x01\xf6\0\xff\xff\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xf6\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01>\x01>\x01>\x01>\x01>\x01>\x01>\x01>\x01>\x01>\x01>\x01\xff\xff\xff\xff\xff\xffC\x01\xff\xff\xff\xffC\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff4\x014\x014\x01\xff\xff\xff\xff\xff\xff\xff\xff\x05\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x014\x01\xff\xff\xff\xff\x05\x01>\x01\xff\xff\xff\xff\xff\xffC\x01\xff\xff\xff\xff\x05\x01\xff\xff\xff\xff\xff\xff\x05\x01\xff\xff\x05\x01\x05\x01\x05\x01\xff\xff\x05\x01\t\x01\t\x01\t\x01\t\x01\t\x01\t\x01\t\x01\t\x01\t\x01\t\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\x01\t\x01\t\x01\t\x01\t\x01\t\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffC\x01C\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\xff\xff\t\x01\t\x01\t\x01\t\x01\t\x01\t\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\xff\xff\xff\xffe\x01\xff\xff\t\x01e\x01e\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\xff\xff\xff\xff\xff\xff\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\x12\x01\xff\xff\xff\xff\xff\xffe\x01\xff\xff\xff\xff\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\xff\xff\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x15\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\xff\xff\xa9\x01\xff\xff\x05\x01\xa9\x01\xff\xff\xff\xff\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\xff\xff\xff\xff\xff\xff\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\x19\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\xff\xff\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1a\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01,\x01,\x01C\x01,\x01,\x01\xff\xff\xff\xff\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\xff\xff\xff\xff\xff\xff\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\x1b\x01\xa9\x01,\x01\xff\xff\xff\xff\xa9\x01\xff\xff\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01,\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1c\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\xff\xffp\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xff\xff\xff\xff\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01\x1e\x01H\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffe\x01e\x01e\x01p\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x01\xff\xff\xff\xff\xff\xff\xff\xffe\x01\xa4\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01\xff\xff\xff\xff\xff\xff\xff\xffH\x01\xff\xffH\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01H\x01\xff\xff\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x01\xff\xff\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff,\x01,\x01,\x01N\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\xff\xff\xff\xff\xff\xff\xff\xff,\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff,\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01\xff\xff\xff\xff\xff\xff\xff\xffN\x01\xff\xffN\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01N\x01V\x01V\x01\xff\xffV\x01V\x01f\x01f\x01\xff\xfff\x01f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffV\x01\xff\xffV\x01\xff\xffV\x01f\x01\xff\xffV\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffV\x01V\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffV\x01\xff\xffV\x01V\x01V\x01\xff\xff\xff\xffV\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01\xff\xff\xff\xff\xff\xff\xff\xffV\x01\xff\xffV\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01V\x01Y\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffY\x01\xff\xff\xff\xffY\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffY\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01\xff\xff\xff\xff\xff\xff\xff\xffY\x01\xff\xffY\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01Y\x01\xff\xff|\x01\xff\xff\xff\xff|\x01\xff\xff\xff\xff\xff\xff\x9a\x01\xff\xff\xff\xff\x9a\x01\x9a\x01\xff\xffV\x01V\x01V\x01\xff\xff\xff\xfff\x01f\x01f\x01~\x01~\x01\xff\xff|\x01\xff\xff\xff\xffV\x01|\x01|\x01\x9a\x01\xff\xfff\x01\xff\xff~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01V\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff|\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01~\x01\x83\x01\xff\xff\xff\xff\xff\xff|\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\xff\xff\x87\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\xff\xff\xff\xff\x9a\x01\x9a\x01\x9a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9a\x01\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff|\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\xff\xff\x8c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8c\x01\xff\xff\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\xff\xff\x8e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x01\xff\xff\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8f\x01\x9b\x01\x9b\x01\xff\xff\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\x8f\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x90\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\xff\xff\x90\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\xff\xff\xff\xff\xff\xff\xff\xff\x90\x01\xff\xff\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x92\x01\x92\x01\xff\xff\x92\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x01\x92\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x01'),a('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\x16\0"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x01\0\f\0\0\0\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0,\x006\0_\0B\0v\0L\0N\0\0\0\x81\0\0\0\x98\0\0\0\xa2\0\xac\0\xb6\0\0\0\xc0\0\0\0\xca\0\0\0\xe1\0\xeb\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0e\x01\x1a\x01&\x01W\x01\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\t\0\x0b\0\r\0\x0f\0\xe5\0\x1a\0\b\0h\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\x01\0\0\0\0\0\0\0\0y\x01\r\0\x1c\0\x10\0\x1a\x01\x1d\0E\0\x83\x01\0\0\x8d\x01\x9a\x01\xa4\x01\xae\x01\0\0\0\0\xb8\x01\xc2\x01\xdb\x01\xe5\x01\x89\0\x8b\0\0\0\xf9\x01\0\0\x03\x02\0\0\r\x02\x17\x02\0\0!\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'),a("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0f\0\x0f\0\0\0\x0f\0\0\0\x0f\0\x0f\0\0\0#\0\0\0&\0)\0)\0)\0\0\0)\0)\0\0\0,\0\0\0/\0\0\0\0\0,\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0W\0W\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0h\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0W\0k\0k\0s\0\0\0s\0v\0v\0W\0k\0~\0k\0k\0&\0\x8f\0/\0\x94\0\x99\0\x99\0\x99\0\x99\0\x99\0\x9e\0\xa1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"),a("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"),a("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\t\0\0\0\t\0\t\0\t\0\t\0\t\0e\0\0\0e\0e\0e\0e\0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\t\0\0\0\t\0\0\0\0\0\0\0\0\0e\0\0\0e\0\t\0e\0\0\0\0\0\0\0\0\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\0\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\0\0\x04\0\x04\0\x04\0\x04\0\x04\0\x04\0\x04\0\x04\0\x01\0\x01\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\0\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x18\0\x01\0\x01\0 \0 \0 \0 \0\t\0\t\0\t\0\t\0\t\0\t\0\t\0\t\0\t\0\t\0\t\0\t\0\t\0e\0\t\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0e\0e\x002\x002\x002\0\0\0\t\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x1d\0\x1d\0\x1d\0\x1d\0\x1d\0\x1d\0\x1d\0\x1d\0e\x002\0\t\0\x1d\0\x1d\0\x1d\0\x1d\0\x1d\0\x1d\0\x1d\0\x1d\0\x8c\0\x8c\0\x8c\0\x8c\0\0\0\0\0\t\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x01\0e\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\x002\0\0\0\0\0\0\0\0\0\0\0\0\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\0\0\0\0\0\0\0\0\0\0\0\0\x15\0\x15\0\x15\0\x15\0\x15\0\x15\x002\0\0\0\0\0M\0M\0M\0M\0M\0M\0M\0M\0M\0M\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0\0\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0M\0\0\0`\0`\0`\0`\0`\0`\0`\0`\0R\0R\x002\0\0\0\0\x002\x002\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x002\0M\0M\0M\0M\0M\0M\0M\0M\0M\0M\x002\0\0\0\0\x002\x002\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0\0\0\0\0\0\0e\0\0\0\0\0\0\0\0\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\0\0\0\0\0\0\0\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0\0\0\0\x002\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0R\0R\0R\0R\0R\0R\0R\0R\0R\0R\0{\0{\0{\0{\0{\0{\0{\0{\0{\0{\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{\0{\0{\0{\0{\0{\0R\0\0\0\x81\0\x81\0\x81\0\x81\0\x81\0\x81\0\x81\0\x81\0\x86\0\x86\0\x89\0\x89\0\x89\0\x89\0\x89\0\x89\0\x89\0\x89\0\0\0\0\0\0\0\0\0\0\0\0\0{\0{\0{\0{\0{\0{\0\x89\0\x89\0\x89\0\x89\0\x89\0\x89\0\x89\0\x89\0R\0\0\0\x86\0\x86\0\x86\0\x86\0\x86\0\x86\0\x86\0\x86\0\x86\0\x86\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0p\0{\0{\0{\0{\0{\0{\0{\0{\0{\0{\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{\0{\0{\0{\0{\0{\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{\0{\0{\0{\0{\0{\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"),a("\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff5\0\xff\xff<\x005\x005\0<\0<\0\xb3\0\xff\xff\xba\0\xb3\0\xb3\0\xba\0\xba\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff5\0\xff\xff<\0\xff\xff\xff\xff\xff\xff\xff\xff\xb3\0\xff\xff\xba\0!\0\xa1\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\x1b\0\xff\xff\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1b\0\x1c\0\xff\xff\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0\x1c\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0W\0\xff\xffW\0W\0W\0W\0W\0W\0W\0W\0W\0W\0Y\0Y\0Z\0Z\0>\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0A\0\xbc\0=\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0\xbb\0\xbf\0\xd3\0\xd4\0\xd7\0\xff\xff?\0V\0V\0V\0V\0V\0V\0X\0X\0X\0X\0X\0X\0X\0X\0\xbd\0\xd5\0@\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\xe5\0\xe5\0\xe6\0\xe6\0\xff\xff\xff\xffB\0V\0V\0V\0V\0V\0V\0^\0\xc0\0^\0^\0^\0^\0^\0^\0^\0^\0^\0^\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0\xd8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfff\0f\0f\0f\0f\0f\0h\0h\0h\0h\0h\0h\0h\0h\0h\0h\0i\0i\0i\0i\0i\0i\0i\0i\0i\0i\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfff\0f\0f\0f\0f\0f\0\x85\0\xff\xff\xff\xff\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x85\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9b\0\x9c\0\xff\xff\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9c\0\x9d\0\xff\xff\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9d\0\x9e\0\xff\xff\xff\xff\x9e\0\x9e\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9e\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xd2\0\xff\xff\xff\xff\xd2\0\xd2\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\x9e\0\xff\xff\xff\xff\xff\xff\xbe\0\xff\xff\xff\xff\xff\xff\xff\xff\xd2\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xd6\0\xff\xff\xff\xff\xff\xff\xff\xff\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd2\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xd9\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xdb\0\xff\xff\xff\xff\xd6\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdc\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xdd\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xde\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe3\0\xff\xff\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xea\0\xff\xff\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xea\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xec\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xef\0\xef\0\xef\0\xef\0\xef\0\xef\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"),a("\xff\x01\xff\xff\x03\xff\x01\xff\xff\x02\xff\xff\0\x02\xff\0\x01\xff\x06\xff\xff\x07\xff\xff\x01\xff\x03\xff\xff\x05\xff\xff\x04\xff\xff\0\x04\xff\0\x05\xff\0\x03\xff\0\x06\xff\0\x07\xff\x11\xff\x10\xff\x0e\xff\r\xff\f\xff\x0b\xff\n\xff\t\xff\b\xff\x07\xff\x06\xff\x05\xff\x04\xff\xff\x13\xff\x12\xff\xff\x12\xff\x13\xff\xff\x03\x11\x02\x12\x01\x0f\0\x10\xff\x16\xff\x13\xff\xff\x14\xff\xff\0\x14\xff\x01\x13\0\x0e\xff\x15\xff\xff\0\r\xff\x01\x15\0\f\xff\x19\xff\xff\0\t\xff\x13\xff\x16\xff\xff\x13\xff\xff\x18\xff\xff\x17\xff\xff\x01\x17\0\x04\xff\x01\x18\0\x06\xff\x01\x16\0\b\xff\0\x0b\xff\x01\x19\0\n\xff")],dn=[0,0,0,0,0,1,0],fc=[0,0,0],fd=[0,1];aM(11,[W,a(f_),-12],f_);aM(10,t,gP);aM(9,[W,a(fC),-10],fC);aM(8,[W,a(gD),-9],gD);aM(7,[W,a(fv),-8],fv);aM(6,ah,gC);aM(5,[W,a(fM),-6],fM);aM(4,[W,a(gn),-5],gn);aM(3,ef,gz);aM(2,c$,gm);aM(1,[W,a(gj),-2],gj);aM(0,[W,a(fV),-1],fV);var -ho=a(dJ),hp=a(dX),hs=[0,a("list.ml"),gG,11],hr=a("hd"),hu=a("\\\\"),hv=a("\\'"),hw=a("\\b"),hx=a("\\t"),hy=a("\\n"),hz=a("\\r"),ht=a("Char.chr"),hF=a("String.contains_from / Bytes.contains_from"),hC=a("String.blit / Bytes.blit_string"),hB=a("Bytes.blit"),hA=a("String.sub / Bytes.sub"),hH=a(p),hK=a("Array.blit"),hJ=a("Array.init"),hP=a("Set.remove_min_elt"),hQ=[0,0,0,0],hR=[0,0,0],hS=[0,a("set.ml"),389,18],hL=a(cO),hM=a(cO),hN=a(cO),hO=a(cO),hT=a("CamlinternalLazy.Undefined"),hX=a("Buffer.add: cannot grow buffer"),h6=a("%c"),h7=a("%s"),h8=a(f7),h9=a(fu),h_=a(gy),h$=a(gd),ia=a("%f"),ib=a("%B"),ic=a("%{"),id=a("%}"),ie=a("%("),ig=a("%)"),ih=a("%a"),ii=a("%t"),ij=a("%?"),ik=a("%r"),il=a("%_r"),im=[0,a(V),845,23],iy=[0,a(V),809,21],iq=[0,a(V),gg,21],iz=[0,a(V),813,21],ir=[0,a(V),814,21],iA=[0,a(V),817,19],is=[0,a(V),818,19],iB=[0,a(V),821,22],it=[0,a(V),822,22],iC=[0,a(V),826,30],iu=[0,a(V),827,30],iw=[0,a(V),831,26],io=[0,a(V),832,26],ix=[0,a(V),841,28],ip=[0,a(V),842,28],iv=[0,a(V),846,23],jE=a(fy),jC=[0,a(V),1520,4],jD=a("Printf: bad conversion %["),jF=[0,a(V),1588,39],jG=[0,a(V),1611,31],jH=[0,a(V),1612,31],jI=a("Printf: bad conversion %_"),jJ=a("@{"),jK=a("@["),jA=a(dT),jB=a(bO),jy=a("neg_infinity"),jz=a(gV),jt=a("%.12g"),jg=a("%nd"),jh=a("%+nd"),ji=a("% nd"),jj=a(gy),jk=a("%+ni"),jl=a("% ni"),jm=a("%nx"),jn=a("%#nx"),jo=a("%nX"),jp=a("%#nX"),jq=a("%no"),jr=a("%#no"),js=a("%nu"),i5=a("%ld"),i6=a("%+ld"),i7=a("% ld"),i8=a(fu),i9=a("%+li"),i_=a("% li"),i$=a("%lx"),ja=a("%#lx"),jb=a("%lX"),jc=a("%#lX"),jd=a("%lo"),je=a("%#lo"),jf=a("%lu"),iS=a("%Ld"),iT=a("%+Ld"),iU=a("% Ld"),iV=a(gd),iW=a("%+Li"),iX=a("% Li"),iY=a("%Lx"),iZ=a("%#Lx"),i0=a("%LX"),i1=a("%#LX"),i2=a("%Lo"),i3=a("%#Lo"),i4=a("%Lu"),iF=a(gI),iG=a("%+d"),iH=a("% d"),iI=a(f7),iJ=a("%+i"),iK=a("% i"),iL=a("%x"),iM=a("%#x"),iN=a("%X"),iO=a("%#X"),iP=a("%o"),iQ=a("%#o"),iR=a(fy),hY=a("@]"),hZ=a("@}"),h0=a("@?"),h1=a("@\n"),h2=a("@."),h3=a("@@"),h4=a("@%"),h5=a("@"),iD=a("CamlinternalFormat.Type_mismatch"),jL=a("x"),HF=a("OCAMLRUNPARAM"),HD=a("CAMLRUNPARAM"),jM=a(p),HC=a("TMPDIR"),HB=a("TEMP"),jP=a("Cygwin"),jQ=a(fr),jR=a("Win32"),jS=[0,a("filename.ml"),gQ,9],jV=a("Js.Error"),jW=a(ft),jX=a(gL),jZ=a("Unexpected number"),j0=a("Unexpected string"),j1=a("Unexpected identifier"),j2=a("Unexpected reserved word"),j3=a("Unexpected end of input"),j4=a("Unexpected variance sigil"),j5=a("Type aliases are not allowed in untyped mode"),j6=a("Type annotations are not allowed in untyped mode"),j7=a("Type declarations are not allowed in untyped mode"),j8=a("Type imports are not allowed in untyped mode"),j9=a("Type exports are not allowed in untyped mode"),j_=a("Interfaces are not allowed in untyped mode"),j$=a("Illegal newline after throw"),ka=a("Invalid regular expression"),kb=a("Invalid regular expression: missing /"),kc=a("Invalid left-hand side in assignment"),kd=a("Invalid left-hand side in exponentiation expression"),ke=a("Invalid left-hand side in for-in"),kf=a("Invalid left-hand side in for-of"),kg=a("found an expression instead"),kh=a("Expected an object pattern, array pattern, or an identifier but "),ki=a("More than one default clause in switch statement"),kj=a("Missing catch or finally after try"),kk=a("Illegal continue statement"),kl=a("Illegal break statement"),km=a("Illegal return statement"),kn=a("Illegal yield expression"),ko=a("Strict mode code may not include a with statement"),kp=a("Catch variable may not be eval or arguments in strict mode"),kq=a("Variable name may not be eval or arguments in strict mode"),kr=a("Parameter name eval or arguments is not allowed in strict mode"),ks=a("Strict mode function may not have duplicate parameter names"),kt=a("Function name may not be eval or arguments in strict mode"),ku=a("Octal literals are not allowed in strict mode."),kv=a("Delete of an unqualified identifier in strict mode."),kw=a("Duplicate data property in object literal not allowed in strict mode"),kx=a("Object literal may not have data and accessor property with the same name"),ky=a("Object literal may not have multiple get/set accessors with the same name"),kz=a("Assignment to eval or arguments is not allowed in strict mode"),kA=a("Postfix increment/decrement may not have eval or arguments operand in strict mode"),kB=a("Prefix increment/decrement may not have eval or arguments operand in strict mode"),kC=a("Use of future reserved word in strict mode"),kD=a("JSX attributes must only be assigned a non-empty expression"),kE=a("JSX value should be either an expression or a quoted JSX text"),kF=a("Const must be initialized"),kG=a("Destructuring assignment must be initialized"),kH=a("Illegal newline before arrow"),kI=a(" declared at top level or immediately within another function."),kJ=a("In strict mode code, functions can only be"),kK=a("elements must be wrapped in an enclosing parent tag"),kL=a("Unexpected token <. Remember, adjacent JSX "),kM=a("Rest parameter must be final parameter of an argument list"),kN=a("async is an implementation detail and isn't necessary for your declare function statement. It is sufficient for your declare function to just have a Promise return type."),kO=a("`declare export let` is not supported. Use `declare export var` instead."),kP=a("`declare export const` is not supported. Use `declare export var` instead."),kQ=a("`declare export type` is not supported. Use `export type` instead."),kR=a("`declare export interface` is not supported. Use `export interface` instead."),kS=a("`export * as` is an early-stage proposal and is not enabled by default. To enable support in the parser, use the `esproposal_export_star_as` option"),kT=a("When exporting a class as a named export, you must specify a class name. Did you mean `export default class ...`?"),kU=a("When exporting a function as a named export, you must specify a function name. Did you mean `export default function ...`?"),kV=a("Found a decorator in an unsupported position."),kW=a("Type parameter declaration needs a default, since a preceding type parameter declaration has a default."),kX=a("The Windows version of OCaml has a bug in how it parses hexidecimal numbers. It is fixed in OCaml 4.03.0. Until we can switch to 4.03.0, please avoid either hexidecimal notation or Windows."),kY=a("Duplicate `declare module.exports` statement!"),kZ=a("Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module xor they are a CommonJS module."),k0=a("Getter should have zero parameters"),k1=a("Setter should have exactly one parameter"),k2=a("`import type` or `import typeof`!"),k3=a("Imports within a `declare module` body must always be "),k4=a("The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements"),k5=a("Missing comma between import specifiers"),k6=a("Unexpected parser state: "),k7=a("Unexpected token "),k8=[0,[11,a("Unexpected token `"),[2,0,[11,a("`. Did you mean `"),[2,0,[11,a("`?"),0]]]]],a("Unexpected token `%s`. Did you mean `%s`?")],k9=a(fK),k_=a("Invalid flags supplied to RegExp constructor '"),k$=a(fK),la=a("Undefined label '"),lb=a("' has already been declared"),lc=a(" '"),ld=a("Expected corresponding JSX closing tag for "),le=[0,[11,a("Duplicate export for `"),[2,0,[12,96,0]]],a("Duplicate export for `%s`")],jY=a("Parse_error.Error"),lf=[0,[0]],lg=[0,a(aP),18,6],lh=[0,[0,[0,[0]]]],li=[0,a(aP),39,6],lj=[0,[0]],lk=[0,a(aP),44,6],ll=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],lm=[0,a(aP),gh,6],ln=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],lo=[0,a(aP),516,6],lp=[0,[0,[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0,[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]]]],lq=[0,a(aP),781,6],lr=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],ls=[0,a(aP),884,6],lt=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],lu=[0,a(aP),fQ,6],lv=[0,[0]],lw=[0,a(aP),gN,6],lx=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],ly=[0,a(aP),1009,6],lz=[0,[0,[0,[0]]]],lA=[0,a(aP),1032,6],lB=[0,[0]],lC=[0,[0,[0,[0]]]],lD=[0,[0]],lE=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],lF=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],lG=[0,[0,[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0,[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]]]],lH=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],lI=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],lJ=[0,[0]],lK=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],lL=[0,[0,[0,[0]]]],lY=a("comments"),lZ=a(X),l0=a("Program"),l1=a("EmptyStatement"),l2=a("DebuggerStatement"),l3=a("directive"),l4=a(bS),l5=a("ExpressionStatement"),l6=a(fS),l7=a(dP),l8=a(bN),l9=a("IfStatement"),l_=a(X),l$=a(dW),ma=a("LabeledStatement"),mb=a(dW),mc=a("BreakStatement"),md=a(dW),me=a("ContinueStatement"),mf=a(X),mg=a(dV),mh=a("WithStatement"),mi=a("cases"),mj=a("discriminant"),mk=a("SwitchStatement"),ml=a(av),mm=a("ReturnStatement"),mn=a(av),mo=a("ThrowStatement"),mp=a("finalizer"),mq=a("handler"),mr=a("block"),ms=a("TryStatement"),mt=a(X),mu=a(bN),mv=a("WhileStatement"),mw=a(bN),mx=a(X),my=a("DoWhileStatement"),mz=a(X),mA=a("update"),mB=a(bN),mC=a(ch),mD=a("ForStatement"),mE=a(gi),mF=a(X),mG=a(bh),mH=a(bu),mI=a("ForInStatement"),mJ=a("ForAwaitStatement"),mN=a("ForOfStatement"),mK=a(X),mL=a(bh),mM=a(bu),mO=a("CommonJS"),mT=a("ES"),mP=a(bT),mQ=a(X),mR=a(af),mS=a("DeclareModule"),mU=a(aZ),mV=a("DeclareModuleExports"),m1=a(bM),m2=a("DeclareExportAllDeclaration"),mW=a(bM),mX=a(dA),mY=a(dY),mZ=a(cI),m0=a("DeclareExportDeclaration"),m8=a(dF),m9=a(bM),m_=a("ExportAllDeclaration"),m3=a(dF),m4=a(bM),m5=a(dA),m6=a(dY),m7=a("ExportNamedDeclaration"),m$=a(dF),na=a(dY),nb=a("ExportDefaultDeclaration"),nc=a(bV),nh=a(bP),ni=a(Y),nd=a(f6),ne=a(bM),nf=a(dA),ng=a("ImportDeclaration"),nj=a("ThisExpression"),nk=a("Super"),nl=a(gk),nm=a("ArrayExpression"),nn=a(d1),no=a("ObjectExpression"),np=a(aK),nq=a(cJ),nr=a(bS),ns=a(cR),nt=a(dB),nu=a(cg),nv=a(X),nw=a(bW),nx=a(af),ny=a("ArrowFunctionExpression"),nz=a(fO),nA=a("SequenceExpression"),nB=a(av),nC=a("AwaitExpression"),nD=a(a6),nI=a(bt),nJ=a("!"),nK=a("~"),nL=a(bP),nM=a(dU),nN=a(fH),nO=a("matched above"),nE=a(av),nF=a(ga),nG=a(ce),nH=a("UnaryExpression"),nP=a("=="),nU=a("!="),nV=a("==="),nW=a("!=="),nX=a("<"),nY=a("<="),nZ=a(">"),n0=a(">="),n1=a("<<"),n2=a(">>"),n3=a(">>>"),n4=a(bt),n5=a(a6),n6=a("*"),n7=a("**"),n8=a(cj),n9=a("%"),n_=a("|"),n$=a("^"),oa=a(gx),ob=a(gt),oc=a(gs),nQ=a(bh),nR=a(bu),nS=a(ce),nT=a("BinaryExpression"),od=a("="),oi=a("+="),oj=a("-="),ok=a("*="),ol=a("**="),om=a("/="),on=a("%="),oo=a("<<="),op=a(">>="),oq=a(">>>="),or=a("|="),os=a("^="),ot=a("&="),oe=a(bh),of=a(bu),og=a(ce),oh=a("AssignmentExpression"),oz=a("--"),ou=a("++"),ov=a(ga),ow=a(av),ox=a(ce),oy=a("UpdateExpression"),oF=a("&&"),oA=a("||"),oB=a(bh),oC=a(bu),oD=a(ce),oE=a("LogicalExpression"),oG=a(fS),oH=a(dP),oI=a(bN),oJ=a("ConditionalExpression"),oK=a(dZ),oL=a(gf),oM=a("NewExpression"),oN=a(dZ),oO=a(gf),oP=a("CallExpression"),oQ=a(cl),oR=a(dE),oS=a(dV),oT=a("MemberExpression"),oU=a("delegate"),oV=a(av),oW=a("YieldExpression"),oX=a(gO),oY=a(fG),oZ=a("ComprehensionExpression"),o0=a(gO),o1=a(fG),o2=a("GeneratorExpression"),o3=a(aZ),o4=a(bS),o5=a("TypeCastExpression"),o6=a(dE),o7=a("meta"),o8=a("MetaProperty"),o9=a(aK),o_=a(cJ),o$=a(bS),pa=a(cR),pb=a(dB),pc=a(cg),pd=a(X),pe=a(bW),pf=a(af),pg=a("FunctionDeclaration"),ph=a(aK),pi=a(cJ),pj=a(bS),pk=a(cR),pl=a(dB),pm=a(cg),pn=a(X),po=a(bW),pp=a(af),pq=a("FunctionExpression"),pr=a(cP),ps=a(aZ),pt=a(a8),pu=a(gZ),pv=a(cP),pw=a(aZ),px=a(a8),py=a(gZ),pz=a(dP),pA=a(bN),pB=a("SwitchCase"),pC=a(X),pD=a("param"),pE=a("CatchClause"),pF=a(X),pG=a("BlockStatement"),pH=a(af),pI=a("DeclareVariable"),pJ=a(cR),pK=a(af),pL=a("DeclareFunction"),pM=a(dQ),pN=a(X),pO=a(aK),pP=a(af),pQ=a("DeclareClass"),pS=a(Y),pR=a(bV),pT=a(gM),pU=a("ExportNamespaceSpecifier"),pV=a(bh),pW=a(aK),pX=a(af),pY=a("TypeAlias"),pZ=a(d7),p0=a(cW),p1=a(gw),p2=a(aK),p3=a(gB),p4=a(X),p5=a(af),p6=a("ClassDeclaration"),p7=a(d7),p8=a(cW),p9=a(gw),p_=a(aK),p$=a(gB),qa=a(X),qb=a(af),qc=a("ClassExpression"),qd=a(aK),qe=a(af),qf=a("ClassImplements"),qg=a(X),qh=a("ClassBody"),qi=a(dO),qq=a(d6),qr=a(bv),qs=a(bR),qj=a(d7),qk=a(cl),ql=a(a_),qm=a(bT),qn=a(Y),qo=a(bL),qp=a("MethodDefinition"),qt=a(cN),qu=a(a_),qv=a(cl),qw=a(aZ),qx=a(Y),qy=a(bL),qz=a("ClassProperty"),qA=a(dQ),qB=a(X),qC=a(aK),qD=a(af),qE=a("InterfaceDeclaration"),qF=a(aK),qG=a(af),qH=a("InterfaceExtends"),qI=a(aZ),qJ=a(d1),qK=a("ObjectPattern"),qL=a(aZ),qM=a(gk),qN=a("ArrayPattern"),qO=a(bh),qP=a(bu),qQ=a("AssignmentPattern"),qR=a(av),qS=a(f9),qT=a(av),qU=a(f9),qV=a(ch),q3=a(bv),q4=a(bR),qW=a(cl),qX=a(fD),qY=a(d6),qZ=a(bT),q0=a(Y),q1=a(bL),q2=a(gT),q5=a(av),q6=a("SpreadProperty"),q7=a(cl),q8=a(fD),q9=a(d6),q_=a(ch),q$=a(bT),ra=a(Y),rb=a(bL),rc=a(gT),rd=a(av),re=a("RestProperty"),rf=a(av),rg=a("SpreadElement"),rh=a(gi),ri=a(bh),rj=a(bu),rk=a("ComprehensionBlock"),ro=a("flags"),rp=a("pattern"),rq=a("regex"),rr=a(bx),rs=a(Y),rl=a(bx),rm=a(Y),rn=a("Literal"),rt=a(fO),ru=a("quasis"),rv=a("TemplateLiteral"),rw=a("cooked"),rx=a(bx),ry=a("tail"),rz=a(Y),rA=a("TemplateElement"),rB=a("quasi"),rC=a("tag"),rD=a("TaggedTemplateExpression"),rE=a(f0),rI=a(gp),rJ=a(gA),rF=a(bT),rG=a("declarations"),rH=a("VariableDeclaration"),rK=a(ch),rL=a(af),rM=a("VariableDeclarator"),rO=a(fF),rN=a("plus"),rP=a("AnyTypeAnnotation"),rQ=a("MixedTypeAnnotation"),rR=a("EmptyTypeAnnotation"),rS=a("VoidTypeAnnotation"),rT=a("NullLiteralTypeAnnotation"),rU=a("NumberTypeAnnotation"),rV=a("StringTypeAnnotation"),rW=a("BooleanTypeAnnotation"),rX=a(aZ),rY=a("NullableTypeAnnotation"),rZ=a(aK),r0=a("rest"),r1=a(cJ),r2=a(bW),r3=a("FunctionTypeAnnotation"),r4=a(cP),r5=a(aZ),r6=a(a8),r7=a("FunctionTypeParam"),r8=[0,0,0,0],r9=a("callProperties"),r_=a("indexers"),r$=a(d1),sa=a("exact"),sb=a("ObjectTypeAnnotation"),sm=a("There should not be computed object type property keys"),sc=a(ch),sk=a(bv),sl=a(bR),sd=a(bT),se=a(cN),sf=a(a_),sg=a(cP),sh=a(Y),si=a(bL),sj=a("ObjectTypeProperty"),sn=a(av),so=a("ObjectTypeSpreadProperty"),sp=a(cN),sq=a(a_),sr=a(Y),ss=a(bL),st=a(af),su=a("ObjectTypeIndexer"),sv=a(a_),sw=a(Y),sx=a("ObjectTypeCallProperty"),sy=a("elementType"),sz=a("ArrayTypeAnnotation"),sA=a(af),sB=a("qualification"),sC=a("QualifiedTypeIdentifier"),sD=a(aK),sE=a(af),sF=a("GenericTypeAnnotation"),sG=a(dD),sH=a("UnionTypeAnnotation"),sI=a(dD),sJ=a("IntersectionTypeAnnotation"),sK=a(av),sL=a("TypeofTypeAnnotation"),sM=a(dD),sN=a("TupleTypeAnnotation"),sO=a(bx),sP=a(Y),sQ=a("StringLiteralTypeAnnotation"),sR=a(bx),sS=a(Y),sT=a("NumberLiteralTypeAnnotation"),sU=a(bx),sV=a(Y),sW=a("BooleanLiteralTypeAnnotation"),sX=a("ExistsTypeAnnotation"),sY=a(aZ),sZ=a("TypeAnnotation"),s0=a(bW),s1=a("TypeParameterDeclaration"),s2=a(cI),s3=a(cN),s4=a("bound"),s5=a(a8),s6=a("TypeParameter"),s7=a(bW),s8=a("TypeParameterInstantiation"),s9=a("children"),s_=a("closingElement"),s$=a("openingElement"),ta=a("JSXElement"),tb=a("selfClosing"),tc=a("attributes"),td=a(a8),te=a("JSXOpeningElement"),tf=a(a8),tg=a("JSXClosingElement"),th=a(Y),ti=a(a8),tj=a("JSXAttribute"),tk=a(av),tl=a("JSXSpreadAttribute"),to=a("JSXEmptyExpression"),tm=a(bS),tn=a("JSXExpressionContainer"),tp=a(bx),tq=a(Y),tr=a("JSXText"),ts=a(dE),tt=a(dV),tu=a("JSXMemberExpression"),tv=a(a8),tw=a("namespace"),tx=a("JSXNamespacedName"),ty=a(a8),tz=a("JSXIdentifier"),tA=a(gM),tB=a(cS),tC=a("ExportSpecifier"),tD=a(cS),tE=a("ImportDefaultSpecifier"),tF=a(cS),tG=a("ImportNamespaceSpecifier"),tH=a(bV),tM=a(bP),tI=a(f6),tJ=a(cS),tK=a("imported"),tL=a("ImportSpecifier"),tN=a("Block"),tP=a("Line"),tO=a(Y),tQ=a(Y),tR=a("DeclaredPredicate"),tS=a("InferredPredicate"),lW=a("message"),lX=a(gc),lT=a("range"),lU=a(gc),lV=a(bV),lP=a(gL),lQ=a("end"),lR=a("start"),lS=a(bM),lN=a("column"),lO=a("line"),v9=a(dK),v_=[0,0],v$=[0,0],wa=[0,2],wb=[0,2],wc=[0,1],wd=[0,1],we=[0,3],wf=[0,3],wg=a(dK),wh=[5,3,d3],wi=[5,3,d3],wj=a("\\"),wk=a(cG),wl=a(ge),wm=a("*/"),wn=a(ge),wo=a(p),wp=a(p),wq=a(p),wr=a(p),ws=a(cG),wt=a("iexcl"),At=a("aelig"),Cr=a("Nu"),Dr=a("Eacute"),DX=a("Atilde"),Eb=a("'int'"),Ec=a("AElig"),Ed=a("Aacute"),Ee=a("Acirc"),Ef=a("Agrave"),Eg=a("Alpha"),Eh=a("Aring"),Ei=[0,197],Ej=[0,913],Ek=[0,cM],El=[0,194],Em=[0,193],En=[0,198],Eo=[0,8747],DY=a("Auml"),DZ=a("Beta"),D0=a("Ccedil"),D1=a("Chi"),D2=a("Dagger"),D3=a("Delta"),D4=a("ETH"),D5=[0,208],D6=[0,916],D7=[0,8225],D8=[0,935],D9=[0,fo],D_=[0,914],D$=[0,196],Ea=[0,195],Ds=a("Icirc"),DI=a("Ecirc"),DJ=a("Egrave"),DK=a("Epsilon"),DL=a("Eta"),DM=a("Euml"),DN=a("Gamma"),DO=a("Iacute"),DP=[0,205],DQ=[0,915],DR=[0,203],DS=[0,919],DT=[0,917],DU=[0,200],DV=[0,202],Dt=a("Igrave"),Du=a("Iota"),Dv=a("Iuml"),Dw=a("Kappa"),Dx=a("Lambda"),Dy=a("Mu"),Dz=a("Ntilde"),DA=[0,209],DB=[0,924],DC=[0,923],DD=[0,922],DE=[0,207],DF=[0,921],DG=[0,204],DH=[0,206],DW=[0,201],Cs=a("Sigma"),CY=a("Otilde"),Dc=a("OElig"),Dd=a("Oacute"),De=a("Ocirc"),Df=a("Ograve"),Dg=a("Omega"),Dh=a("Omicron"),Di=a("Oslash"),Dj=[0,fq],Dk=[0,927],Dl=[0,937],Dm=[0,210],Dn=[0,212],Do=[0,211],Dp=[0,338],CZ=a("Ouml"),C0=a("Phi"),C1=a("Pi"),C2=a("Prime"),C3=a("Psi"),C4=a("Rho"),C5=a("Scaron"),C6=[0,352],C7=[0,929],C8=[0,936],C9=[0,8243],C_=[0,928],C$=[0,934],Da=[0,214],Db=[0,213],Ct=a("Uuml"),CJ=a("THORN"),CK=a("Tau"),CL=a("Theta"),CM=a("Uacute"),CN=a("Ucirc"),CO=a("Ugrave"),CP=a("Upsilon"),CQ=[0,933],CR=[0,217],CS=[0,219],CT=[0,gh],CU=[0,920],CV=[0,932],CW=[0,222],Cu=a("Xi"),Cv=a("Yacute"),Cw=a("Yuml"),Cx=a("Zeta"),Cy=a("aacute"),Cz=a("acirc"),CA=a("acute"),CB=[0,180],CC=[0,226],CD=[0,225],CE=[0,918],CF=[0,376],CG=[0,221],CH=[0,926],CI=[0,220],CX=[0,931],Dq=[0,925],Au=a("delta"),Bs=a("cap"),BY=a("aring"),Cc=a("agrave"),Cd=a("alefsym"),Ce=a("alpha"),Cf=a("amp"),Cg=a("and"),Ch=a("ang"),Ci=a("apos"),Cj=[0,39],Ck=[0,8736],Cl=[0,8743],Cm=[0,38],Cn=[0,945],Co=[0,8501],Cp=[0,cT],BZ=a("asymp"),B0=a("atilde"),B1=a("auml"),B2=a("bdquo"),B3=a("beta"),B4=a("brvbar"),B5=a("bull"),B6=[0,8226],B7=[0,166],B8=[0,946],B9=[0,8222],B_=[0,228],B$=[0,gG],Ca=[0,8776],Cb=[0,229],Bt=a("copy"),BJ=a("ccedil"),BK=a("cedil"),BL=a("cent"),BM=a("chi"),BN=a("circ"),BO=a("clubs"),BP=a("cong"),BQ=[0,8773],BR=[0,9827],BS=[0,710],BT=[0,967],BU=[0,162],BV=[0,184],BW=[0,231],Bu=a("crarr"),Bv=a("cup"),Bw=a("curren"),Bx=a("dArr"),By=a("dagger"),Bz=a("darr"),BA=a("deg"),BB=[0,176],BC=[0,8595],BD=[0,8224],BE=[0,8659],BF=[0,164],BG=[0,8746],BH=[0,8629],BI=[0,169],BX=[0,8745],Av=a("fnof"),AZ=a("ensp"),Bd=a("diams"),Be=a("divide"),Bf=a("eacute"),Bg=a("ecirc"),Bh=a("egrave"),Bi=a(fN),Bj=a("emsp"),Bk=[0,8195],Bl=[0,8709],Bm=[0,232],Bn=[0,234],Bo=[0,233],Bp=[0,247],Bq=[0,9830],A0=a("epsilon"),A1=a("equiv"),A2=a("eta"),A3=a("eth"),A4=a("euml"),A5=a("euro"),A6=a("exist"),A7=[0,8707],A8=[0,8364],A9=[0,235],A_=[0,cQ],A$=[0,951],Ba=[0,8801],Bb=[0,fQ],Bc=[0,8194],Aw=a("gt"),AK=a("forall"),AL=a("frac12"),AM=a("frac14"),AN=a("frac34"),AO=a("frasl"),AP=a("gamma"),AQ=a("ge"),AR=[0,8805],AS=[0,947],AT=[0,8260],AU=[0,190],AV=[0,188],AW=[0,189],AX=[0,8704],Ax=a("hArr"),Ay=a("harr"),Az=a("hearts"),AA=a("hellip"),AB=a("iacute"),AC=a("icirc"),AD=[0,238],AE=[0,237],AF=[0,8230],AG=[0,9829],AH=[0,8596],AI=[0,8660],AJ=[0,62],AY=[0,go],Br=[0,948],Cq=[0,230],wu=a("prime"),yu=a("ndash"),zu=a("le"),z0=a("kappa"),Ae=a("igrave"),Af=a("image"),Ag=a("infin"),Ah=a("iota"),Ai=a("iquest"),Aj=a("isin"),Ak=a("iuml"),Al=[0,239],Am=[0,8712],An=[0,gQ],Ao=[0,953],Ap=[0,8734],Aq=[0,8465],Ar=[0,236],z1=a("lArr"),z2=a("lambda"),z3=a("lang"),z4=a("laquo"),z5=a("larr"),z6=a("lceil"),z7=a("ldquo"),z8=[0,8220],z9=[0,8968],z_=[0,8592],z$=[0,171],Aa=[0,10216],Ab=[0,955],Ac=[0,8656],Ad=[0,954],zv=a("macr"),zL=a("lfloor"),zM=a("lowast"),zN=a("loz"),zO=a("lrm"),zP=a("lsaquo"),zQ=a("lsquo"),zR=a("lt"),zS=[0,60],zT=[0,8216],zU=[0,8249],zV=[0,8206],zW=[0,9674],zX=[0,8727],zY=[0,8970],zw=a("mdash"),zx=a("micro"),zy=a("middot"),zz=a(fF),zA=a("mu"),zB=a("nabla"),zC=a("nbsp"),zD=[0,160],zE=[0,8711],zF=[0,gN],zG=[0,8722],zH=[0,183],zI=[0,181],zJ=[0,8212],zK=[0,175],zZ=[0,8804],yv=a("or"),y1=a("oacute"),zf=a("ne"),zg=a("ni"),zh=a("not"),zi=a("notin"),zj=a("nsub"),zk=a("ntilde"),zl=a("nu"),zm=[0,957],zn=[0,241],zo=[0,8836],zp=[0,8713],zq=[0,172],zr=[0,8715],zs=[0,8800],y2=a("ocirc"),y3=a("oelig"),y4=a("ograve"),y5=a("oline"),y6=a("omega"),y7=a("omicron"),y8=a("oplus"),y9=[0,8853],y_=[0,959],y$=[0,969],za=[0,8254],zb=[0,242],zc=[0,339],zd=[0,244],ze=[0,243],yw=a("part"),yM=a("ordf"),yN=a("ordm"),yO=a("oslash"),yP=a("otilde"),yQ=a("otimes"),yR=a("ouml"),yS=a("para"),yT=[0,182],yU=[0,cV],yV=[0,8855],yW=[0,fE],yX=[0,W],yY=[0,186],yZ=[0,170],yx=a("permil"),yy=a("perp"),yz=a("phi"),yA=a("pi"),yB=a("piv"),yC=a("plusmn"),yD=a("pound"),yE=[0,163],yF=[0,177],yG=[0,982],yH=[0,960],yI=[0,966],yJ=[0,8869],yK=[0,8240],yL=[0,8706],y0=[0,8744],zt=[0,8211],wv=a("sup1"),xv=a("rlm"),x1=a("raquo"),yf=a("prod"),yg=a("prop"),yh=a("psi"),yi=a("quot"),yj=a("rArr"),yk=a("radic"),yl=a("rang"),ym=[0,10217],yn=[0,8730],yo=[0,8658],yp=[0,34],yq=[0,968],yr=[0,8733],ys=[0,8719],x2=a("rarr"),x3=a("rceil"),x4=a("rdquo"),x5=a("real"),x6=a("reg"),x7=a("rfloor"),x8=a("rho"),x9=[0,961],x_=[0,8971],x$=[0,174],ya=[0,8476],yb=[0,8221],yc=[0,8969],yd=[0,8594],ye=[0,187],xw=a("sigma"),xM=a("rsaquo"),xN=a("rsquo"),xO=a("sbquo"),xP=a("scaron"),xQ=a("sdot"),xR=a("sect"),xS=a("shy"),xT=[0,173],xU=[0,167],xV=[0,8901],xW=[0,353],xX=[0,8218],xY=[0,8217],xZ=[0,8250],xx=a("sigmaf"),xy=a("sim"),xz=a("spades"),xA=a("sub"),xB=a("sube"),xC=a("sum"),xD=a("sup"),xE=[0,8835],xF=[0,8721],xG=[0,8838],xH=[0,8834],xI=[0,9824],xJ=[0,8764],xK=[0,962],xL=[0,963],x0=[0,8207],ww=a("uarr"),w2=a("thetasym"),xg=a("sup2"),xh=a("sup3"),xi=a("supe"),xj=a("szlig"),xk=a("tau"),xl=a("there4"),xm=a("theta"),xn=[0,952],xo=[0,8756],xp=[0,964],xq=[0,223],xr=[0,8839],xs=[0,179],xt=[0,178],w3=a("thinsp"),w4=a("thorn"),w5=a("tilde"),w6=a("times"),w7=a("trade"),w8=a("uArr"),w9=a("uacute"),w_=[0,ck],w$=[0,8657],xa=[0,8482],xb=[0,215],xc=[0,732],xd=[0,d8],xe=[0,8201],xf=[0,977],wx=a("xi"),wN=a("ucirc"),wO=a("ugrave"),wP=a("uml"),wQ=a("upsih"),wR=a("upsilon"),wS=a("uuml"),wT=a("weierp"),wU=[0,8472],wV=[0,f$],wW=[0,965],wX=[0,978],wY=[0,168],wZ=[0,249],w0=[0,251],wy=a("yacute"),wz=a("yen"),wA=a("yuml"),wB=a("zeta"),wC=a("zwj"),wD=a("zwnj"),wG=[0,8204],wH=[0,8205],wI=[0,950],wJ=[0,K],wK=[0,165],wL=[0,253],wM=[0,958],w1=[0,8593],xu=[0,185],yt=[0,8242],As=[0,161],wE=a(";"),wF=a(gx),Ep=a("}"),Eq=[0,a(p),a(p),a(p)],Er=a("${"),Es=a(fp),v4=a(fZ),v3=a(p),v2=[0,a(d0),620,11],v1=[0,a(d0),614,11],vY=[0,0],v0=[0,a(d0),556,4],vW=a(p),vQ=[1,a("ILLEGAL")],vO=a(cj),vP=a(cj),tT=a("T_IDENTIFIER"),tU=a("T_LCURLY"),tV=a("T_RCURLY"),tW=a("T_LCURLYBAR"),tX=a("T_RCURLYBAR"),tY=a("T_LPAREN"),tZ=a("T_RPAREN"),t0=a("T_LBRACKET"),t1=a("T_RBRACKET"),t2=a("T_SEMICOLON"),t3=a("T_COMMA"),t4=a("T_PERIOD"),t5=a("T_ARROW"),t6=a("T_ELLIPSIS"),t7=a("T_AT"),t8=a("T_FUNCTION"),t9=a("T_IF"),t_=a("T_IN"),t$=a("T_INSTANCEOF"),ua=a("T_RETURN"),ub=a("T_SWITCH"),uc=a("T_THIS"),ud=a("T_THROW"),ue=a("T_TRY"),uf=a("T_VAR"),ug=a("T_WHILE"),uh=a("T_WITH"),ui=a("T_CONST"),uj=a("T_LET"),uk=a("T_NULL"),ul=a("T_FALSE"),um=a("T_TRUE"),un=a("T_BREAK"),uo=a("T_CASE"),up=a("T_CATCH"),uq=a("T_CONTINUE"),ur=a("T_DEFAULT"),us=a("T_DO"),ut=a("T_FINALLY"),uu=a("T_FOR"),uv=a("T_CLASS"),uw=a("T_EXTENDS"),ux=a("T_STATIC"),uy=a("T_ELSE"),uz=a("T_NEW"),uA=a("T_DELETE"),uB=a("T_TYPEOF"),uC=a("T_VOID"),uD=a("T_ENUM"),uE=a("T_EXPORT"),uF=a("T_IMPORT"),uG=a("T_SUPER"),uH=a("T_IMPLEMENTS"),uI=a("T_INTERFACE"),uJ=a("T_PACKAGE"),uK=a("T_PRIVATE"),uL=a("T_PROTECTED"),uM=a("T_PUBLIC"),uN=a("T_YIELD"),uO=a("T_DEBUGGER"),uP=a("T_DECLARE"),uQ=a("T_TYPE"),uR=a("T_OF"),uS=a("T_ASYNC"),uT=a("T_AWAIT"),uU=a("T_CHECKS"),uV=a("T_RSHIFT3_ASSIGN"),uW=a("T_RSHIFT_ASSIGN"),uX=a("T_LSHIFT_ASSIGN"),uY=a("T_BIT_XOR_ASSIGN"),uZ=a("T_BIT_OR_ASSIGN"),u0=a("T_BIT_AND_ASSIGN"),u1=a("T_MOD_ASSIGN"),u2=a("T_DIV_ASSIGN"),u3=a("T_MULT_ASSIGN"),u4=a("T_EXP_ASSIGN"),u5=a("T_MINUS_ASSIGN"),u6=a("T_PLUS_ASSIGN"),u7=a("T_ASSIGN"),u8=a("T_PLING"),u9=a("T_COLON"),u_=a("T_OR"),u$=a("T_AND"),va=a("T_BIT_OR"),vb=a("T_BIT_XOR"),vc=a("T_BIT_AND"),vd=a("T_EQUAL"),ve=a("T_NOT_EQUAL"),vf=a("T_STRICT_EQUAL"),vg=a("T_STRICT_NOT_EQUAL"),vh=a("T_LESS_THAN_EQUAL"),vi=a("T_GREATER_THAN_EQUAL"),vj=a("T_LESS_THAN"),vk=a("T_GREATER_THAN"),vl=a("T_LSHIFT"),vm=a("T_RSHIFT"),vn=a("T_RSHIFT3"),vo=a("T_PLUS"),vp=a("T_MINUS"),vq=a("T_DIV"),vr=a("T_MULT"),vs=a("T_EXP"),vt=a("T_MOD"),vu=a("T_NOT"),vv=a("T_BIT_NOT"),vw=a("T_INCR"),vx=a("T_DECR"),vy=a("T_ERROR"),vz=a("T_EOF"),vA=a("T_JSX_IDENTIFIER"),vB=a("T_ANY_TYPE"),vC=a("T_MIXED_TYPE"),vD=a("T_EMPTY_TYPE"),vE=a("T_BOOLEAN_TYPE"),vF=a("T_NUMBER_TYPE"),vG=a("T_STRING_TYPE"),vH=a("T_VOID_TYPE"),vI=a("T_NUMBER"),vJ=a("T_STRING"),vK=a("T_TEMPLATE_PART"),vL=a("T_REGEXP"),vM=a("T_JSX_TEXT"),vN=a("T_NUMBER_SINGLETON_TYPE"),vR=a("Lexer_flow.FloatOfString.No_good"),v5=ha([[0,a(dS),15],[0,a("if"),16],[0,a(gt),17],[0,a(gs),18],[0,a("return"),19],[0,a("switch"),20],[0,a("this"),21],[0,a("throw"),22],[0,a("try"),23],[0,a(f0),24],[0,a("while"),25],[0,a("with"),26],[0,a(gA),27],[0,a(gp),28],[0,a(dL),29],[0,a(dX),30],[0,a(dJ),31],[0,a("break"),32],[0,a("case"),33],[0,a("catch"),34],[0,a("continue"),35],[0,a(cI),36],[0,a("do"),37],[0,a("finally"),38],[0,a("for"),39],[0,a("class"),40],[0,a(dQ),41],[0,a(a_),42],[0,a("else"),43],[0,a(gl),44],[0,a(fH),45],[0,a(bP),46],[0,a(dU),47],[0,a(gu),48],[0,a("export"),49],[0,a("import"),50],[0,a("super"),51],[0,a(cW),52],[0,a(fw),53],[0,a(gX),54],[0,a(gU),55],[0,a(fB),56],[0,a(fx),57],[0,a(f3),58],[0,a("debugger"),59],[0,a("declare"),60],[0,a(bV),61],[0,a("of"),62],[0,a(cg),63],[0,a("await"),64]]),v6=ha([[0,a(a_),42],[0,a(bP),46],[0,a("any"),cK],[0,a("mixed"),111],[0,a(fN),gJ],[0,a("bool"),dM],[0,a("boolean"),dM],[0,a(dJ),31],[0,a(dX),30],[0,a("number"),fP],[0,a("string"),115],[0,a(dU),f8],[0,a(dL),29]]),EJ=a(fY),EI=a(fY),EG=a(dZ),EH=a("eval"),Ey=a(cW),Ez=a(fw),EA=a(gX),EB=a(gU),EC=a(fB),ED=a(fx),EE=a(a_),EF=a(f3),Ex=a(gu),Ew=[0,a("src/parser/parser_env.ml"),294,2],Ev=[0,0,0],Eu=a(gF),Et=a(gF),EK=a("Parser_env.Try.Rollback"),EO=[0,a("did not consume any tokens")],Fb=[0,1],Fc=[0,0,0],E8=[0,a(bU),496,6],Fa=a(a_),E9=a(bv),E_=a(bR),E$=a(bv),E7=[0,1],E6=[0,[0,0,0]],E5=[0,1],E4=[0,1],E3=[0,1],EW=[0,0],EX=[0,1],EY=[0,2],EZ=[0,7],E0=[0,5],E1=[0,6],E2=[0,3],EV=[0,4],EU=[0,a(bU),G,17],ET=[0,a(bU),87,17],ES=[0,a(bU),65,11],ER=[0,a(bU),69,11],EQ=[0,a(bU),47,14],Fe=[0,31],Fd=[0,31],F9=[0,1],F_=[0,29],F8=[0,a(gK),gg,13],F6=[0,a(gK),712,17],F7=[0,[0,a(p),a(p)],1],F5=a(dL),F4=a(fZ),F3=[0,31],F1=a(gl),F2=a("target"),F0=[0,1],FZ=[0,0],FY=[0,1],FX=[0,0],FP=[0,1],FQ=[0,0],FR=[0,2],FS=[0,3],FT=[0,7],FU=[0,6],FV=[0,4],FW=[0,5],Ft=[0,[0,17,[0,2]]],Fu=[0,[0,18,[0,3]]],Fv=[0,[0,19,[0,4]]],Fw=[0,[0,0,[0,5]]],Fx=[0,[0,1,[0,5]]],Fy=[0,[0,2,[0,5]]],Fz=[0,[0,3,[0,5]]],FA=[0,[0,5,[0,6]]],FB=[0,[0,7,[0,6]]],FC=[0,[0,4,[0,6]]],FD=[0,[0,6,[0,6]]],FE=[0,[0,8,[0,7]]],FF=[0,[0,9,[0,7]]],FG=[0,[0,10,[0,7]]],FH=[0,[0,11,[0,8]]],FI=[0,[0,12,[0,8]]],FJ=[0,[0,15,[0,9]]],FK=[0,[0,13,[0,9]]],FL=[0,[0,14,[1,10]]],FM=[0,[0,16,[0,9]]],FO=[0,[0,21,[0,6]]],FN=[0,[0,20,[0,6]]],Fg=[0,9],Fh=[0,8],Fi=[0,7],Fj=[0,11],Fk=[0,10],Fl=[0,12],Fm=[0,6],Fn=[0,5],Fo=[0,3],Fp=[0,4],Fq=[0,2],Fr=[0,1],Fs=[0,0],Ff=a(cg),Gc=a(dK),Gd=a(bO),Ga=a(p),Gb=[0,a(p)],Gg=a(dO),Gh=a(dO),Gi=[0,1],Gj=[0,1],Gk=[0,1],Gl=[0,1],Gm=a(bv),Gn=a(bR),Ge=a(bv),Gf=a(bR),GX=a(bV),GY=[0,0],G2=a(bP),G3=[0,1],GZ=a(aY),G0=a(aY),G1=a(aY),G5=a(ci),G4=a(aY),GW=a(ci),GT=a(aY),GU=a(aY),GS=a(ci),GV=[0,a(dN),1121,15],GL=a("other than an interface declaration!"),GM=a("Internal Flow Error! Parsed `export interface` into something "),GN=[0,1],GO=a("other than a type alias!"),GP=a("Internal Flow Error! Parsed `export type` into something "),GI=a(aY),GJ=a(aY),GR=a(cI),GK=a(ci),GQ=a("Internal Flow Error! Unexpected export statement declaration!"),GG=a(aY),GH=a(aY),GF=a(ci),GB=[0,1],GC=a(gW),GD=[0,1],GE=a(gW),GA=a("exports"),Gz=[0,1],Gy=[0,1],Gw=a(gS),Gx=a(gS),Gv=[0,1],Gu=[0,1],Gt=a("Label"),Gs=[0,27],Gr=[0,0,0],Gp=[0,a(dN),fo,20],Gq=[0,a(dN),fq,20],Go=a("Parser error: No such thing as an expression pattern!"),Hn=[0,1],Hl=a("use strict"),Hm=[0,0,0],Hj=a(fp),Hk=a("Nooo: "),G6=[0,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],G7=[0,a("src/parser/parser_flow.ml"),39,28],Ho=[0,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],HA=[0,0],Hz=a(" errors");function +ho=a(dJ),hp=a(dX),hs=[0,a("list.ml"),gG,11],hr=a("hd"),hu=a("\\\\"),hv=a("\\'"),hw=a("\\b"),hx=a("\\t"),hy=a("\\n"),hz=a("\\r"),ht=a("Char.chr"),hF=a("String.contains_from / Bytes.contains_from"),hC=a("String.blit / Bytes.blit_string"),hB=a("Bytes.blit"),hA=a("String.sub / Bytes.sub"),hH=a(p),hK=a("Array.blit"),hJ=a("Array.init"),hP=a("Set.remove_min_elt"),hQ=[0,0,0,0],hR=[0,0,0],hS=[0,a("set.ml"),389,18],hL=a(cO),hM=a(cO),hN=a(cO),hO=a(cO),hT=a("CamlinternalLazy.Undefined"),hX=a("Buffer.add: cannot grow buffer"),h6=a("%c"),h7=a("%s"),h8=a(f7),h9=a(fu),h_=a(gy),h$=a(gd),ia=a("%f"),ib=a("%B"),ic=a("%{"),id=a("%}"),ie=a("%("),ig=a("%)"),ih=a("%a"),ii=a("%t"),ij=a("%?"),ik=a("%r"),il=a("%_r"),im=[0,a(V),845,23],iy=[0,a(V),809,21],iq=[0,a(V),gg,21],iz=[0,a(V),813,21],ir=[0,a(V),814,21],iA=[0,a(V),817,19],is=[0,a(V),818,19],iB=[0,a(V),821,22],it=[0,a(V),822,22],iC=[0,a(V),826,30],iu=[0,a(V),827,30],iw=[0,a(V),831,26],io=[0,a(V),832,26],ix=[0,a(V),841,28],ip=[0,a(V),842,28],iv=[0,a(V),846,23],jE=a(fy),jC=[0,a(V),1520,4],jD=a("Printf: bad conversion %["),jF=[0,a(V),1588,39],jG=[0,a(V),1611,31],jH=[0,a(V),1612,31],jI=a("Printf: bad conversion %_"),jJ=a("@{"),jK=a("@["),jA=a(dT),jB=a(bO),jy=a("neg_infinity"),jz=a(gV),jt=a("%.12g"),jg=a("%nd"),jh=a("%+nd"),ji=a("% nd"),jj=a(gy),jk=a("%+ni"),jl=a("% ni"),jm=a("%nx"),jn=a("%#nx"),jo=a("%nX"),jp=a("%#nX"),jq=a("%no"),jr=a("%#no"),js=a("%nu"),i5=a("%ld"),i6=a("%+ld"),i7=a("% ld"),i8=a(fu),i9=a("%+li"),i_=a("% li"),i$=a("%lx"),ja=a("%#lx"),jb=a("%lX"),jc=a("%#lX"),jd=a("%lo"),je=a("%#lo"),jf=a("%lu"),iS=a("%Ld"),iT=a("%+Ld"),iU=a("% Ld"),iV=a(gd),iW=a("%+Li"),iX=a("% Li"),iY=a("%Lx"),iZ=a("%#Lx"),i0=a("%LX"),i1=a("%#LX"),i2=a("%Lo"),i3=a("%#Lo"),i4=a("%Lu"),iF=a(gI),iG=a("%+d"),iH=a("% d"),iI=a(f7),iJ=a("%+i"),iK=a("% i"),iL=a("%x"),iM=a("%#x"),iN=a("%X"),iO=a("%#X"),iP=a("%o"),iQ=a("%#o"),iR=a(fy),hY=a("@]"),hZ=a("@}"),h0=a("@?"),h1=a("@\n"),h2=a("@."),h3=a("@@"),h4=a("@%"),h5=a("@"),iD=a("CamlinternalFormat.Type_mismatch"),jL=a("x"),HF=a("OCAMLRUNPARAM"),HD=a("CAMLRUNPARAM"),jM=a(p),HC=a("TMPDIR"),HB=a("TEMP"),jP=a("Cygwin"),jQ=a(fr),jR=a("Win32"),jS=[0,a("filename.ml"),gQ,9],jV=a("Js.Error"),jW=a(ft),jX=a(gL),jZ=a("Unexpected number"),j0=a("Unexpected string"),j1=a("Unexpected identifier"),j2=a("Unexpected reserved word"),j3=a("Unexpected end of input"),j4=a("Unexpected variance sigil"),j5=a("Type aliases are not allowed in untyped mode"),j6=a("Type annotations are not allowed in untyped mode"),j7=a("Type declarations are not allowed in untyped mode"),j8=a("Type imports are not allowed in untyped mode"),j9=a("Type exports are not allowed in untyped mode"),j_=a("Interfaces are not allowed in untyped mode"),j$=a("Illegal newline after throw"),ka=a("Invalid regular expression"),kb=a("Invalid regular expression: missing /"),kc=a("Invalid left-hand side in assignment"),kd=a("Invalid left-hand side in exponentiation expression"),ke=a("Invalid left-hand side in for-in"),kf=a("Invalid left-hand side in for-of"),kg=a("found an expression instead"),kh=a("Expected an object pattern, array pattern, or an identifier but "),ki=a("More than one default clause in switch statement"),kj=a("Missing catch or finally after try"),kk=a("Illegal continue statement"),kl=a("Illegal break statement"),km=a("Illegal return statement"),kn=a("Illegal yield expression"),ko=a("Strict mode code may not include a with statement"),kp=a("Catch variable may not be eval or arguments in strict mode"),kq=a("Variable name may not be eval or arguments in strict mode"),kr=a("Parameter name eval or arguments is not allowed in strict mode"),ks=a("Strict mode function may not have duplicate parameter names"),kt=a("Function name may not be eval or arguments in strict mode"),ku=a("Octal literals are not allowed in strict mode."),kv=a("Delete of an unqualified identifier in strict mode."),kw=a("Duplicate data property in object literal not allowed in strict mode"),kx=a("Object literal may not have data and accessor property with the same name"),ky=a("Object literal may not have multiple get/set accessors with the same name"),kz=a("Assignment to eval or arguments is not allowed in strict mode"),kA=a("Postfix increment/decrement may not have eval or arguments operand in strict mode"),kB=a("Prefix increment/decrement may not have eval or arguments operand in strict mode"),kC=a("Use of future reserved word in strict mode"),kD=a("JSX attributes must only be assigned a non-empty expression"),kE=a("JSX value should be either an expression or a quoted JSX text"),kF=a("Const must be initialized"),kG=a("Destructuring assignment must be initialized"),kH=a("Illegal newline before arrow"),kI=a(" declared at top level or immediately within another function."),kJ=a("In strict mode code, functions can only be"),kK=a("elements must be wrapped in an enclosing parent tag"),kL=a("Unexpected token <. Remember, adjacent JSX "),kM=a("Rest parameter must be final parameter of an argument list"),kN=a("async is an implementation detail and isn't necessary for your declare function statement. It is sufficient for your declare function to just have a Promise return type."),kO=a("`declare export let` is not supported. Use `declare export var` instead."),kP=a("`declare export const` is not supported. Use `declare export var` instead."),kQ=a("`declare export type` is not supported. Use `export type` instead."),kR=a("`declare export interface` is not supported. Use `export interface` instead."),kS=a("`export * as` is an early-stage proposal and is not enabled by default. To enable support in the parser, use the `esproposal_export_star_as` option"),kT=a("When exporting a class as a named export, you must specify a class name. Did you mean `export default class ...`?"),kU=a("When exporting a function as a named export, you must specify a function name. Did you mean `export default function ...`?"),kV=a("Found a decorator in an unsupported position."),kW=a("Type parameter declaration needs a default, since a preceding type parameter declaration has a default."),kX=a("The Windows version of OCaml has a bug in how it parses hexidecimal numbers. It is fixed in OCaml 4.03.0. Until we can switch to 4.03.0, please avoid either hexidecimal notation or Windows."),kY=a("Duplicate `declare module.exports` statement!"),kZ=a("Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module xor they are a CommonJS module."),k0=a("Getter should have zero parameters"),k1=a("Setter should have exactly one parameter"),k2=a("`import type` or `import typeof`!"),k3=a("Imports within a `declare module` body must always be "),k4=a("The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements"),k5=a("Missing comma between import specifiers"),k6=a("Unexpected parser state: "),k7=a("Unexpected token "),k8=[0,[11,a("Unexpected token `"),[2,0,[11,a("`. Did you mean `"),[2,0,[11,a("`?"),0]]]]],a("Unexpected token `%s`. Did you mean `%s`?")],k9=a(fK),k_=a("Invalid flags supplied to RegExp constructor '"),k$=a(fK),la=a("Undefined label '"),lb=a("' has already been declared"),lc=a(" '"),ld=a("Expected corresponding JSX closing tag for "),le=[0,[11,a("Duplicate export for `"),[2,0,[12,96,0]]],a("Duplicate export for `%s`")],jY=a("Parse_error.Error"),lf=[0,[0]],lg=[0,a(aP),18,6],lh=[0,[0,[0,[0]]]],li=[0,a(aP),39,6],lj=[0,[0]],lk=[0,a(aP),44,6],ll=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],lm=[0,a(aP),gh,6],ln=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],lo=[0,a(aP),516,6],lp=[0,[0,[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0,[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]]]],lq=[0,a(aP),781,6],lr=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],ls=[0,a(aP),884,6],lt=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],lu=[0,a(aP),fQ,6],lv=[0,[0]],lw=[0,a(aP),gN,6],lx=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],ly=[0,a(aP),1009,6],lz=[0,[0,[0,[0]]]],lA=[0,a(aP),1032,6],lB=[0,[0]],lC=[0,[0,[0,[0]]]],lD=[0,[0]],lE=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],lF=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],lG=[0,[0,[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0,[0,[0]],[0,[0]]]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]],[0,[0]]]],lH=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],lI=[0,[0,[0,[0,[0,[0]],[0,[0]]]],[0,[0,[0,[0]]]],[0,[0]],[0,[0]]]],lJ=[0,[0]],lK=[0,[0,[0,[0]],[0,[0]],[0,[0]],[0,[0]]]],lL=[0,[0,[0,[0]]]],lY=a("comments"),lZ=a(X),l0=a("Program"),l1=a("EmptyStatement"),l2=a("DebuggerStatement"),l3=a("directive"),l4=a(bS),l5=a("ExpressionStatement"),l6=a(fS),l7=a(dP),l8=a(bN),l9=a("IfStatement"),l_=a(X),l$=a(dW),ma=a("LabeledStatement"),mb=a(dW),mc=a("BreakStatement"),md=a(dW),me=a("ContinueStatement"),mf=a(X),mg=a(dV),mh=a("WithStatement"),mi=a("cases"),mj=a("discriminant"),mk=a("SwitchStatement"),ml=a(av),mm=a("ReturnStatement"),mn=a(av),mo=a("ThrowStatement"),mp=a("finalizer"),mq=a("handler"),mr=a("block"),ms=a("TryStatement"),mt=a(X),mu=a(bN),mv=a("WhileStatement"),mw=a(bN),mx=a(X),my=a("DoWhileStatement"),mz=a(X),mA=a("update"),mB=a(bN),mC=a(cg),mD=a("ForStatement"),mE=a(gi),mF=a(X),mG=a(bh),mH=a(bu),mI=a("ForInStatement"),mJ=a("ForAwaitStatement"),mN=a("ForOfStatement"),mK=a(X),mL=a(bh),mM=a(bu),mO=a("CommonJS"),mT=a("ES"),mP=a(bT),mQ=a(X),mR=a(af),mS=a("DeclareModule"),mU=a(aZ),mV=a("DeclareModuleExports"),m1=a(bM),m2=a("DeclareExportAllDeclaration"),mW=a(bM),mX=a(dA),mY=a(dY),mZ=a(cI),m0=a("DeclareExportDeclaration"),m8=a(dF),m9=a(bM),m_=a("ExportAllDeclaration"),m3=a(dF),m4=a(bM),m5=a(dA),m6=a(dY),m7=a("ExportNamedDeclaration"),m$=a(dF),na=a(dY),nb=a("ExportDefaultDeclaration"),nc=a(bV),nh=a(bP),ni=a(Y),nd=a(f6),ne=a(bM),nf=a(dA),ng=a("ImportDeclaration"),nj=a("ThisExpression"),nk=a("Super"),nl=a(gk),nm=a("ArrayExpression"),nn=a(d1),no=a("ObjectExpression"),np=a(aK),nq=a(cJ),nr=a(bS),ns=a(cR),nt=a(dB),nu=a(cf),nv=a(X),nw=a(bW),nx=a(af),ny=a("ArrowFunctionExpression"),nz=a(fO),nA=a("SequenceExpression"),nB=a(av),nC=a("AwaitExpression"),nD=a(a6),nI=a(bt),nJ=a("!"),nK=a("~"),nL=a(bP),nM=a(dU),nN=a(fH),nO=a("matched above"),nE=a(av),nF=a(ga),nG=a(cd),nH=a("UnaryExpression"),nP=a("=="),nU=a("!="),nV=a("==="),nW=a("!=="),nX=a("<"),nY=a("<="),nZ=a(">"),n0=a(">="),n1=a("<<"),n2=a(">>"),n3=a(">>>"),n4=a(bt),n5=a(a6),n6=a("*"),n7=a("**"),n8=a(ci),n9=a("%"),n_=a("|"),n$=a("^"),oa=a(gx),ob=a(gt),oc=a(gs),nQ=a(bh),nR=a(bu),nS=a(cd),nT=a("BinaryExpression"),od=a("="),oi=a("+="),oj=a("-="),ok=a("*="),ol=a("**="),om=a("/="),on=a("%="),oo=a("<<="),op=a(">>="),oq=a(">>>="),or=a("|="),os=a("^="),ot=a("&="),oe=a(bh),of=a(bu),og=a(cd),oh=a("AssignmentExpression"),oz=a("--"),ou=a("++"),ov=a(ga),ow=a(av),ox=a(cd),oy=a("UpdateExpression"),oF=a("&&"),oA=a("||"),oB=a(bh),oC=a(bu),oD=a(cd),oE=a("LogicalExpression"),oG=a(fS),oH=a(dP),oI=a(bN),oJ=a("ConditionalExpression"),oK=a(dZ),oL=a(gf),oM=a("NewExpression"),oN=a(dZ),oO=a(gf),oP=a("CallExpression"),oQ=a(ck),oR=a(dE),oS=a(dV),oT=a("MemberExpression"),oU=a("delegate"),oV=a(av),oW=a("YieldExpression"),oX=a(gO),oY=a(fG),oZ=a("ComprehensionExpression"),o0=a(gO),o1=a(fG),o2=a("GeneratorExpression"),o3=a(aZ),o4=a(bS),o5=a("TypeCastExpression"),o6=a(dE),o7=a("meta"),o8=a("MetaProperty"),o9=a(aK),o_=a(cJ),o$=a(bS),pa=a(cR),pb=a(dB),pc=a(cf),pd=a(X),pe=a(bW),pf=a(af),pg=a("FunctionDeclaration"),ph=a(aK),pi=a(cJ),pj=a(bS),pk=a(cR),pl=a(dB),pm=a(cf),pn=a(X),po=a(bW),pp=a(af),pq=a("FunctionExpression"),pr=a(cP),ps=a(aZ),pt=a(a8),pu=a(gZ),pv=a(cP),pw=a(aZ),px=a(a8),py=a(gZ),pz=a(dP),pA=a(bN),pB=a("SwitchCase"),pC=a(X),pD=a("param"),pE=a("CatchClause"),pF=a(X),pG=a("BlockStatement"),pH=a(af),pI=a("DeclareVariable"),pJ=a(cR),pK=a(af),pL=a("DeclareFunction"),pM=a(dQ),pN=a(X),pO=a(aK),pP=a(af),pQ=a("DeclareClass"),pS=a(Y),pR=a(bV),pT=a(gM),pU=a("ExportNamespaceSpecifier"),pV=a(bh),pW=a(aK),pX=a(af),pY=a("TypeAlias"),pZ=a(d7),p0=a(cW),p1=a(gw),p2=a(aK),p3=a(gB),p4=a(X),p5=a(af),p6=a("ClassDeclaration"),p7=a(d7),p8=a(cW),p9=a(gw),p_=a(aK),p$=a(gB),qa=a(X),qb=a(af),qc=a("ClassExpression"),qd=a(aK),qe=a(af),qf=a("ClassImplements"),qg=a(X),qh=a("ClassBody"),qi=a(dO),qq=a(d6),qr=a(bv),qs=a(bR),qj=a(d7),qk=a(ck),ql=a(a_),qm=a(bT),qn=a(Y),qo=a(bL),qp=a("MethodDefinition"),qt=a(cN),qu=a(a_),qv=a(ck),qw=a(aZ),qx=a(Y),qy=a(bL),qz=a("ClassProperty"),qA=a(dQ),qB=a(X),qC=a(aK),qD=a(af),qE=a("InterfaceDeclaration"),qF=a(aK),qG=a(af),qH=a("InterfaceExtends"),qI=a(aZ),qJ=a(d1),qK=a("ObjectPattern"),qL=a(aZ),qM=a(gk),qN=a("ArrayPattern"),qO=a(bh),qP=a(bu),qQ=a("AssignmentPattern"),qR=a(av),qS=a(f9),qT=a(av),qU=a(f9),qV=a(cg),q3=a(bv),q4=a(bR),qW=a(ck),qX=a(fD),qY=a(d6),qZ=a(bT),q0=a(Y),q1=a(bL),q2=a(gT),q5=a(av),q6=a("SpreadProperty"),q7=a(ck),q8=a(fD),q9=a(d6),q_=a(cg),q$=a(bT),ra=a(Y),rb=a(bL),rc=a(gT),rd=a(av),re=a("RestProperty"),rf=a(av),rg=a("SpreadElement"),rh=a(gi),ri=a(bh),rj=a(bu),rk=a("ComprehensionBlock"),ro=a("flags"),rp=a("pattern"),rq=a("regex"),rr=a(bx),rs=a(Y),rl=a(bx),rm=a(Y),rn=a("Literal"),rt=a(fO),ru=a("quasis"),rv=a("TemplateLiteral"),rw=a("cooked"),rx=a(bx),ry=a("tail"),rz=a(Y),rA=a("TemplateElement"),rB=a("quasi"),rC=a("tag"),rD=a("TaggedTemplateExpression"),rE=a(f0),rI=a(gp),rJ=a(gA),rF=a(bT),rG=a("declarations"),rH=a("VariableDeclaration"),rK=a(cg),rL=a(af),rM=a("VariableDeclarator"),rO=a(fF),rN=a("plus"),rP=a("AnyTypeAnnotation"),rQ=a("MixedTypeAnnotation"),rR=a("EmptyTypeAnnotation"),rS=a("VoidTypeAnnotation"),rT=a("NullLiteralTypeAnnotation"),rU=a("NumberTypeAnnotation"),rV=a("StringTypeAnnotation"),rW=a("BooleanTypeAnnotation"),rX=a(aZ),rY=a("NullableTypeAnnotation"),rZ=a(aK),r0=a("rest"),r1=a(cJ),r2=a(bW),r3=a("FunctionTypeAnnotation"),r4=a(cP),r5=a(aZ),r6=a(a8),r7=a("FunctionTypeParam"),r8=[0,0,0,0],r9=a("callProperties"),r_=a("indexers"),r$=a(d1),sa=a("exact"),sb=a("ObjectTypeAnnotation"),sm=a("There should not be computed object type property keys"),sc=a(cg),sk=a(bv),sl=a(bR),sd=a(bT),se=a(cN),sf=a(a_),sg=a(cP),sh=a(Y),si=a(bL),sj=a("ObjectTypeProperty"),sn=a(av),so=a("ObjectTypeSpreadProperty"),sp=a(cN),sq=a(a_),sr=a(Y),ss=a(bL),st=a(af),su=a("ObjectTypeIndexer"),sv=a(a_),sw=a(Y),sx=a("ObjectTypeCallProperty"),sy=a("elementType"),sz=a("ArrayTypeAnnotation"),sA=a(af),sB=a("qualification"),sC=a("QualifiedTypeIdentifier"),sD=a(aK),sE=a(af),sF=a("GenericTypeAnnotation"),sG=a(dD),sH=a("UnionTypeAnnotation"),sI=a(dD),sJ=a("IntersectionTypeAnnotation"),sK=a(av),sL=a("TypeofTypeAnnotation"),sM=a(dD),sN=a("TupleTypeAnnotation"),sO=a(bx),sP=a(Y),sQ=a("StringLiteralTypeAnnotation"),sR=a(bx),sS=a(Y),sT=a("NumberLiteralTypeAnnotation"),sU=a(bx),sV=a(Y),sW=a("BooleanLiteralTypeAnnotation"),sX=a("ExistsTypeAnnotation"),sY=a(aZ),sZ=a("TypeAnnotation"),s0=a(bW),s1=a("TypeParameterDeclaration"),s2=a(cI),s3=a(cN),s4=a("bound"),s5=a(a8),s6=a("TypeParameter"),s7=a(bW),s8=a("TypeParameterInstantiation"),s9=a("children"),s_=a("closingElement"),s$=a("openingElement"),ta=a("JSXElement"),tb=a("selfClosing"),tc=a("attributes"),td=a(a8),te=a("JSXOpeningElement"),tf=a(a8),tg=a("JSXClosingElement"),th=a(Y),ti=a(a8),tj=a("JSXAttribute"),tk=a(av),tl=a("JSXSpreadAttribute"),to=a("JSXEmptyExpression"),tm=a(bS),tn=a("JSXExpressionContainer"),tp=a(bx),tq=a(Y),tr=a("JSXText"),ts=a(dE),tt=a(dV),tu=a("JSXMemberExpression"),tv=a(a8),tw=a("namespace"),tx=a("JSXNamespacedName"),ty=a(a8),tz=a("JSXIdentifier"),tA=a(gM),tB=a(cS),tC=a("ExportSpecifier"),tD=a(cS),tE=a("ImportDefaultSpecifier"),tF=a(cS),tG=a("ImportNamespaceSpecifier"),tH=a(bV),tM=a(bP),tI=a(f6),tJ=a(cS),tK=a("imported"),tL=a("ImportSpecifier"),tN=a("Block"),tP=a("Line"),tO=a(Y),tQ=a(Y),tR=a("DeclaredPredicate"),tS=a("InferredPredicate"),lW=a("message"),lX=a(gc),lT=a("range"),lU=a(gc),lV=a(bV),lP=a(gL),lQ=a("end"),lR=a("start"),lS=a(bM),lN=a("column"),lO=a("line"),v9=a(dK),v_=[0,0],v$=[0,0],wa=[0,2],wb=[0,2],wc=[0,1],wd=[0,1],we=[0,3],wf=[0,3],wg=a(dK),wh=[5,3,d3],wi=[5,3,d3],wj=a("\\"),wk=a(cG),wl=a(ge),wm=a("*/"),wn=a(ge),wo=a(p),wp=a(p),wq=a(p),wr=a(p),ws=a(cG),wt=a("iexcl"),At=a("aelig"),Cr=a("Nu"),Dr=a("Eacute"),DX=a("Atilde"),Eb=a("'int'"),Ec=a("AElig"),Ed=a("Aacute"),Ee=a("Acirc"),Ef=a("Agrave"),Eg=a("Alpha"),Eh=a("Aring"),Ei=[0,197],Ej=[0,913],Ek=[0,cM],El=[0,194],Em=[0,193],En=[0,198],Eo=[0,8747],DY=a("Auml"),DZ=a("Beta"),D0=a("Ccedil"),D1=a("Chi"),D2=a("Dagger"),D3=a("Delta"),D4=a("ETH"),D5=[0,208],D6=[0,916],D7=[0,8225],D8=[0,935],D9=[0,fo],D_=[0,914],D$=[0,196],Ea=[0,195],Ds=a("Icirc"),DI=a("Ecirc"),DJ=a("Egrave"),DK=a("Epsilon"),DL=a("Eta"),DM=a("Euml"),DN=a("Gamma"),DO=a("Iacute"),DP=[0,205],DQ=[0,915],DR=[0,203],DS=[0,919],DT=[0,917],DU=[0,200],DV=[0,202],Dt=a("Igrave"),Du=a("Iota"),Dv=a("Iuml"),Dw=a("Kappa"),Dx=a("Lambda"),Dy=a("Mu"),Dz=a("Ntilde"),DA=[0,209],DB=[0,924],DC=[0,923],DD=[0,922],DE=[0,207],DF=[0,921],DG=[0,204],DH=[0,206],DW=[0,201],Cs=a("Sigma"),CY=a("Otilde"),Dc=a("OElig"),Dd=a("Oacute"),De=a("Ocirc"),Df=a("Ograve"),Dg=a("Omega"),Dh=a("Omicron"),Di=a("Oslash"),Dj=[0,fq],Dk=[0,927],Dl=[0,937],Dm=[0,210],Dn=[0,212],Do=[0,211],Dp=[0,338],CZ=a("Ouml"),C0=a("Phi"),C1=a("Pi"),C2=a("Prime"),C3=a("Psi"),C4=a("Rho"),C5=a("Scaron"),C6=[0,352],C7=[0,929],C8=[0,936],C9=[0,8243],C_=[0,928],C$=[0,934],Da=[0,214],Db=[0,213],Ct=a("Uuml"),CJ=a("THORN"),CK=a("Tau"),CL=a("Theta"),CM=a("Uacute"),CN=a("Ucirc"),CO=a("Ugrave"),CP=a("Upsilon"),CQ=[0,933],CR=[0,217],CS=[0,219],CT=[0,gh],CU=[0,920],CV=[0,932],CW=[0,222],Cu=a("Xi"),Cv=a("Yacute"),Cw=a("Yuml"),Cx=a("Zeta"),Cy=a("aacute"),Cz=a("acirc"),CA=a("acute"),CB=[0,180],CC=[0,226],CD=[0,225],CE=[0,918],CF=[0,376],CG=[0,221],CH=[0,926],CI=[0,220],CX=[0,931],Dq=[0,925],Au=a("delta"),Bs=a("cap"),BY=a("aring"),Cc=a("agrave"),Cd=a("alefsym"),Ce=a("alpha"),Cf=a("amp"),Cg=a("and"),Ch=a("ang"),Ci=a("apos"),Cj=[0,39],Ck=[0,8736],Cl=[0,8743],Cm=[0,38],Cn=[0,945],Co=[0,8501],Cp=[0,cT],BZ=a("asymp"),B0=a("atilde"),B1=a("auml"),B2=a("bdquo"),B3=a("beta"),B4=a("brvbar"),B5=a("bull"),B6=[0,8226],B7=[0,166],B8=[0,946],B9=[0,8222],B_=[0,228],B$=[0,gG],Ca=[0,8776],Cb=[0,229],Bt=a("copy"),BJ=a("ccedil"),BK=a("cedil"),BL=a("cent"),BM=a("chi"),BN=a("circ"),BO=a("clubs"),BP=a("cong"),BQ=[0,8773],BR=[0,9827],BS=[0,710],BT=[0,967],BU=[0,162],BV=[0,184],BW=[0,231],Bu=a("crarr"),Bv=a("cup"),Bw=a("curren"),Bx=a("dArr"),By=a("dagger"),Bz=a("darr"),BA=a("deg"),BB=[0,176],BC=[0,8595],BD=[0,8224],BE=[0,8659],BF=[0,164],BG=[0,8746],BH=[0,8629],BI=[0,169],BX=[0,8745],Av=a("fnof"),AZ=a("ensp"),Bd=a("diams"),Be=a("divide"),Bf=a("eacute"),Bg=a("ecirc"),Bh=a("egrave"),Bi=a(fN),Bj=a("emsp"),Bk=[0,8195],Bl=[0,8709],Bm=[0,232],Bn=[0,234],Bo=[0,233],Bp=[0,247],Bq=[0,9830],A0=a("epsilon"),A1=a("equiv"),A2=a("eta"),A3=a("eth"),A4=a("euml"),A5=a("euro"),A6=a("exist"),A7=[0,8707],A8=[0,8364],A9=[0,235],A_=[0,cQ],A$=[0,951],Ba=[0,8801],Bb=[0,fQ],Bc=[0,8194],Aw=a("gt"),AK=a("forall"),AL=a("frac12"),AM=a("frac14"),AN=a("frac34"),AO=a("frasl"),AP=a("gamma"),AQ=a("ge"),AR=[0,8805],AS=[0,947],AT=[0,8260],AU=[0,190],AV=[0,188],AW=[0,189],AX=[0,8704],Ax=a("hArr"),Ay=a("harr"),Az=a("hearts"),AA=a("hellip"),AB=a("iacute"),AC=a("icirc"),AD=[0,238],AE=[0,237],AF=[0,8230],AG=[0,9829],AH=[0,8596],AI=[0,8660],AJ=[0,62],AY=[0,go],Br=[0,948],Cq=[0,230],wu=a("prime"),yu=a("ndash"),zu=a("le"),z0=a("kappa"),Ae=a("igrave"),Af=a("image"),Ag=a("infin"),Ah=a("iota"),Ai=a("iquest"),Aj=a("isin"),Ak=a("iuml"),Al=[0,239],Am=[0,8712],An=[0,gQ],Ao=[0,953],Ap=[0,8734],Aq=[0,8465],Ar=[0,236],z1=a("lArr"),z2=a("lambda"),z3=a("lang"),z4=a("laquo"),z5=a("larr"),z6=a("lceil"),z7=a("ldquo"),z8=[0,8220],z9=[0,8968],z_=[0,8592],z$=[0,171],Aa=[0,10216],Ab=[0,955],Ac=[0,8656],Ad=[0,954],zv=a("macr"),zL=a("lfloor"),zM=a("lowast"),zN=a("loz"),zO=a("lrm"),zP=a("lsaquo"),zQ=a("lsquo"),zR=a("lt"),zS=[0,60],zT=[0,8216],zU=[0,8249],zV=[0,8206],zW=[0,9674],zX=[0,8727],zY=[0,8970],zw=a("mdash"),zx=a("micro"),zy=a("middot"),zz=a(fF),zA=a("mu"),zB=a("nabla"),zC=a("nbsp"),zD=[0,160],zE=[0,8711],zF=[0,gN],zG=[0,8722],zH=[0,183],zI=[0,181],zJ=[0,8212],zK=[0,175],zZ=[0,8804],yv=a("or"),y1=a("oacute"),zf=a("ne"),zg=a("ni"),zh=a("not"),zi=a("notin"),zj=a("nsub"),zk=a("ntilde"),zl=a("nu"),zm=[0,957],zn=[0,241],zo=[0,8836],zp=[0,8713],zq=[0,172],zr=[0,8715],zs=[0,8800],y2=a("ocirc"),y3=a("oelig"),y4=a("ograve"),y5=a("oline"),y6=a("omega"),y7=a("omicron"),y8=a("oplus"),y9=[0,8853],y_=[0,959],y$=[0,969],za=[0,8254],zb=[0,242],zc=[0,339],zd=[0,244],ze=[0,243],yw=a("part"),yM=a("ordf"),yN=a("ordm"),yO=a("oslash"),yP=a("otilde"),yQ=a("otimes"),yR=a("ouml"),yS=a("para"),yT=[0,182],yU=[0,cV],yV=[0,8855],yW=[0,fE],yX=[0,W],yY=[0,186],yZ=[0,170],yx=a("permil"),yy=a("perp"),yz=a("phi"),yA=a("pi"),yB=a("piv"),yC=a("plusmn"),yD=a("pound"),yE=[0,163],yF=[0,177],yG=[0,982],yH=[0,960],yI=[0,966],yJ=[0,8869],yK=[0,8240],yL=[0,8706],y0=[0,8744],zt=[0,8211],wv=a("sup1"),xv=a("rlm"),x1=a("raquo"),yf=a("prod"),yg=a("prop"),yh=a("psi"),yi=a("quot"),yj=a("rArr"),yk=a("radic"),yl=a("rang"),ym=[0,10217],yn=[0,8730],yo=[0,8658],yp=[0,34],yq=[0,968],yr=[0,8733],ys=[0,8719],x2=a("rarr"),x3=a("rceil"),x4=a("rdquo"),x5=a("real"),x6=a("reg"),x7=a("rfloor"),x8=a("rho"),x9=[0,961],x_=[0,8971],x$=[0,174],ya=[0,8476],yb=[0,8221],yc=[0,8969],yd=[0,8594],ye=[0,187],xw=a("sigma"),xM=a("rsaquo"),xN=a("rsquo"),xO=a("sbquo"),xP=a("scaron"),xQ=a("sdot"),xR=a("sect"),xS=a("shy"),xT=[0,173],xU=[0,167],xV=[0,8901],xW=[0,353],xX=[0,8218],xY=[0,8217],xZ=[0,8250],xx=a("sigmaf"),xy=a("sim"),xz=a("spades"),xA=a("sub"),xB=a("sube"),xC=a("sum"),xD=a("sup"),xE=[0,8835],xF=[0,8721],xG=[0,8838],xH=[0,8834],xI=[0,9824],xJ=[0,8764],xK=[0,962],xL=[0,963],x0=[0,8207],ww=a("uarr"),w2=a("thetasym"),xg=a("sup2"),xh=a("sup3"),xi=a("supe"),xj=a("szlig"),xk=a("tau"),xl=a("there4"),xm=a("theta"),xn=[0,952],xo=[0,8756],xp=[0,964],xq=[0,223],xr=[0,8839],xs=[0,179],xt=[0,178],w3=a("thinsp"),w4=a("thorn"),w5=a("tilde"),w6=a("times"),w7=a("trade"),w8=a("uArr"),w9=a("uacute"),w_=[0,cj],w$=[0,8657],xa=[0,8482],xb=[0,215],xc=[0,732],xd=[0,d8],xe=[0,8201],xf=[0,977],wx=a("xi"),wN=a("ucirc"),wO=a("ugrave"),wP=a("uml"),wQ=a("upsih"),wR=a("upsilon"),wS=a("uuml"),wT=a("weierp"),wU=[0,8472],wV=[0,f$],wW=[0,965],wX=[0,978],wY=[0,168],wZ=[0,249],w0=[0,251],wy=a("yacute"),wz=a("yen"),wA=a("yuml"),wB=a("zeta"),wC=a("zwj"),wD=a("zwnj"),wG=[0,8204],wH=[0,8205],wI=[0,950],wJ=[0,K],wK=[0,165],wL=[0,253],wM=[0,958],w1=[0,8593],xu=[0,185],yt=[0,8242],As=[0,161],wE=a(";"),wF=a(gx),Ep=a("}"),Eq=[0,a(p),a(p),a(p)],Er=a("${"),Es=a(fp),v4=a(fZ),v3=a(p),v2=[0,a(d0),620,11],v1=[0,a(d0),614,11],vY=[0,0],v0=[0,a(d0),556,4],vW=a(p),vQ=[1,a("ILLEGAL")],vO=a(ci),vP=a(ci),tT=a("T_IDENTIFIER"),tU=a("T_LCURLY"),tV=a("T_RCURLY"),tW=a("T_LCURLYBAR"),tX=a("T_RCURLYBAR"),tY=a("T_LPAREN"),tZ=a("T_RPAREN"),t0=a("T_LBRACKET"),t1=a("T_RBRACKET"),t2=a("T_SEMICOLON"),t3=a("T_COMMA"),t4=a("T_PERIOD"),t5=a("T_ARROW"),t6=a("T_ELLIPSIS"),t7=a("T_AT"),t8=a("T_FUNCTION"),t9=a("T_IF"),t_=a("T_IN"),t$=a("T_INSTANCEOF"),ua=a("T_RETURN"),ub=a("T_SWITCH"),uc=a("T_THIS"),ud=a("T_THROW"),ue=a("T_TRY"),uf=a("T_VAR"),ug=a("T_WHILE"),uh=a("T_WITH"),ui=a("T_CONST"),uj=a("T_LET"),uk=a("T_NULL"),ul=a("T_FALSE"),um=a("T_TRUE"),un=a("T_BREAK"),uo=a("T_CASE"),up=a("T_CATCH"),uq=a("T_CONTINUE"),ur=a("T_DEFAULT"),us=a("T_DO"),ut=a("T_FINALLY"),uu=a("T_FOR"),uv=a("T_CLASS"),uw=a("T_EXTENDS"),ux=a("T_STATIC"),uy=a("T_ELSE"),uz=a("T_NEW"),uA=a("T_DELETE"),uB=a("T_TYPEOF"),uC=a("T_VOID"),uD=a("T_ENUM"),uE=a("T_EXPORT"),uF=a("T_IMPORT"),uG=a("T_SUPER"),uH=a("T_IMPLEMENTS"),uI=a("T_INTERFACE"),uJ=a("T_PACKAGE"),uK=a("T_PRIVATE"),uL=a("T_PROTECTED"),uM=a("T_PUBLIC"),uN=a("T_YIELD"),uO=a("T_DEBUGGER"),uP=a("T_DECLARE"),uQ=a("T_TYPE"),uR=a("T_OF"),uS=a("T_ASYNC"),uT=a("T_AWAIT"),uU=a("T_CHECKS"),uV=a("T_RSHIFT3_ASSIGN"),uW=a("T_RSHIFT_ASSIGN"),uX=a("T_LSHIFT_ASSIGN"),uY=a("T_BIT_XOR_ASSIGN"),uZ=a("T_BIT_OR_ASSIGN"),u0=a("T_BIT_AND_ASSIGN"),u1=a("T_MOD_ASSIGN"),u2=a("T_DIV_ASSIGN"),u3=a("T_MULT_ASSIGN"),u4=a("T_EXP_ASSIGN"),u5=a("T_MINUS_ASSIGN"),u6=a("T_PLUS_ASSIGN"),u7=a("T_ASSIGN"),u8=a("T_PLING"),u9=a("T_COLON"),u_=a("T_OR"),u$=a("T_AND"),va=a("T_BIT_OR"),vb=a("T_BIT_XOR"),vc=a("T_BIT_AND"),vd=a("T_EQUAL"),ve=a("T_NOT_EQUAL"),vf=a("T_STRICT_EQUAL"),vg=a("T_STRICT_NOT_EQUAL"),vh=a("T_LESS_THAN_EQUAL"),vi=a("T_GREATER_THAN_EQUAL"),vj=a("T_LESS_THAN"),vk=a("T_GREATER_THAN"),vl=a("T_LSHIFT"),vm=a("T_RSHIFT"),vn=a("T_RSHIFT3"),vo=a("T_PLUS"),vp=a("T_MINUS"),vq=a("T_DIV"),vr=a("T_MULT"),vs=a("T_EXP"),vt=a("T_MOD"),vu=a("T_NOT"),vv=a("T_BIT_NOT"),vw=a("T_INCR"),vx=a("T_DECR"),vy=a("T_ERROR"),vz=a("T_EOF"),vA=a("T_JSX_IDENTIFIER"),vB=a("T_ANY_TYPE"),vC=a("T_MIXED_TYPE"),vD=a("T_EMPTY_TYPE"),vE=a("T_BOOLEAN_TYPE"),vF=a("T_NUMBER_TYPE"),vG=a("T_STRING_TYPE"),vH=a("T_VOID_TYPE"),vI=a("T_NUMBER"),vJ=a("T_STRING"),vK=a("T_TEMPLATE_PART"),vL=a("T_REGEXP"),vM=a("T_JSX_TEXT"),vN=a("T_NUMBER_SINGLETON_TYPE"),vR=a("Lexer_flow.FloatOfString.No_good"),v5=ha([[0,a(dS),15],[0,a("if"),16],[0,a(gt),17],[0,a(gs),18],[0,a("return"),19],[0,a("switch"),20],[0,a("this"),21],[0,a("throw"),22],[0,a("try"),23],[0,a(f0),24],[0,a("while"),25],[0,a("with"),26],[0,a(gA),27],[0,a(gp),28],[0,a(dL),29],[0,a(dX),30],[0,a(dJ),31],[0,a("break"),32],[0,a("case"),33],[0,a("catch"),34],[0,a("continue"),35],[0,a(cI),36],[0,a("do"),37],[0,a("finally"),38],[0,a("for"),39],[0,a("class"),40],[0,a(dQ),41],[0,a(a_),42],[0,a("else"),43],[0,a(gl),44],[0,a(fH),45],[0,a(bP),46],[0,a(dU),47],[0,a(gu),48],[0,a("export"),49],[0,a("import"),50],[0,a("super"),51],[0,a(cW),52],[0,a(fw),53],[0,a(gX),54],[0,a(gU),55],[0,a(fB),56],[0,a(fx),57],[0,a(f3),58],[0,a("debugger"),59],[0,a("declare"),60],[0,a(bV),61],[0,a("of"),62],[0,a(cf),63],[0,a("await"),64]]),v6=ha([[0,a(a_),42],[0,a(bP),46],[0,a("any"),cK],[0,a("mixed"),111],[0,a(fN),gJ],[0,a("bool"),dM],[0,a("boolean"),dM],[0,a(dJ),31],[0,a(dX),30],[0,a("number"),fP],[0,a("string"),115],[0,a(dU),f8],[0,a(dL),29]]),EJ=a(fY),EI=a(fY),EG=a(dZ),EH=a("eval"),Ey=a(cW),Ez=a(fw),EA=a(gX),EB=a(gU),EC=a(fB),ED=a(fx),EE=a(a_),EF=a(f3),Ex=a(gu),Ew=[0,a("src/parser/parser_env.ml"),294,2],Ev=[0,0,0],Eu=a(gF),Et=a(gF),EK=a("Parser_env.Try.Rollback"),EO=[0,a("did not consume any tokens")],Fb=[0,1],Fc=[0,0,0],E8=[0,a(bU),496,6],Fa=a(a_),E9=a(bv),E_=a(bR),E$=a(bv),E7=[0,1],E6=[0,[0,0,0]],E5=[0,1],E4=[0,1],E3=[0,1],EW=[0,0],EX=[0,1],EY=[0,2],EZ=[0,7],E0=[0,5],E1=[0,6],E2=[0,3],EV=[0,4],EU=[0,a(bU),G,17],ET=[0,a(bU),87,17],ES=[0,a(bU),65,11],ER=[0,a(bU),69,11],EQ=[0,a(bU),47,14],Fe=[0,31],Fd=[0,31],F9=[0,1],F_=[0,29],F8=[0,a(gK),gg,13],F6=[0,a(gK),712,17],F7=[0,[0,a(p),a(p)],1],F5=a(dL),F4=a(fZ),F3=[0,31],F1=a(gl),F2=a("target"),F0=[0,1],FZ=[0,0],FY=[0,1],FX=[0,0],FP=[0,1],FQ=[0,0],FR=[0,2],FS=[0,3],FT=[0,7],FU=[0,6],FV=[0,4],FW=[0,5],Ft=[0,[0,17,[0,2]]],Fu=[0,[0,18,[0,3]]],Fv=[0,[0,19,[0,4]]],Fw=[0,[0,0,[0,5]]],Fx=[0,[0,1,[0,5]]],Fy=[0,[0,2,[0,5]]],Fz=[0,[0,3,[0,5]]],FA=[0,[0,5,[0,6]]],FB=[0,[0,7,[0,6]]],FC=[0,[0,4,[0,6]]],FD=[0,[0,6,[0,6]]],FE=[0,[0,8,[0,7]]],FF=[0,[0,9,[0,7]]],FG=[0,[0,10,[0,7]]],FH=[0,[0,11,[0,8]]],FI=[0,[0,12,[0,8]]],FJ=[0,[0,15,[0,9]]],FK=[0,[0,13,[0,9]]],FL=[0,[0,14,[1,10]]],FM=[0,[0,16,[0,9]]],FO=[0,[0,21,[0,6]]],FN=[0,[0,20,[0,6]]],Fg=[0,9],Fh=[0,8],Fi=[0,7],Fj=[0,11],Fk=[0,10],Fl=[0,12],Fm=[0,6],Fn=[0,5],Fo=[0,3],Fp=[0,4],Fq=[0,2],Fr=[0,1],Fs=[0,0],Ff=a(cf),Gc=a(dK),Gd=a(bO),Ga=a(p),Gb=[0,a(p)],Gg=a(dO),Gh=a(dO),Gi=[0,1],Gj=[0,1],Gk=[0,1],Gl=[0,1],Gm=a(bv),Gn=a(bR),Ge=a(bv),Gf=a(bR),GX=a(bV),GY=[0,0],G2=a(bP),G3=[0,1],GZ=a(aY),G0=a(aY),G1=a(aY),G5=a(ch),G4=a(aY),GW=a(ch),GT=a(aY),GU=a(aY),GS=a(ch),GV=[0,a(dN),1121,15],GL=a("other than an interface declaration!"),GM=a("Internal Flow Error! Parsed `export interface` into something "),GN=[0,1],GO=a("other than a type alias!"),GP=a("Internal Flow Error! Parsed `export type` into something "),GI=a(aY),GJ=a(aY),GR=a(cI),GK=a(ch),GQ=a("Internal Flow Error! Unexpected export statement declaration!"),GG=a(aY),GH=a(aY),GF=a(ch),GB=[0,1],GC=a(gW),GD=[0,1],GE=a(gW),GA=a("exports"),Gz=[0,1],Gy=[0,1],Gw=a(gS),Gx=a(gS),Gv=[0,1],Gu=[0,1],Gt=a("Label"),Gs=[0,27],Gr=[0,0,0],Gp=[0,a(dN),fo,20],Gq=[0,a(dN),fq,20],Go=a("Parser error: No such thing as an expression pattern!"),Hn=[0,1],Hl=a("use strict"),Hm=[0,0,0],Hj=a(fp),Hk=a("Nooo: "),G6=[0,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],G7=[0,a("src/parser/parser_flow.ml"),39,28],Ho=[0,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],HA=[0,0],Hz=a(" errors");function L(a){if(typeof a==="number")return 0;else switch(a[0]){case @@ -16697,10 +17451,10 @@ dc(c){var b=0,a=c;for(;;){if(a){var b=b+1|0,a=a[2];continue}return b}}function bl(a){return a?a[1]:ay(hr)}function -b1(d,c){var +b0(d,c){var a=d,b=c;for(;;){if(a){var e=[0,a[1],b],a=a[2],b=e;continue}return b}}function -m(a){return b1(a,0)}function +m(a){return b0(a,0)}function bm(c,a){if(a){var d=a[2],e=b(c,a[1]);return[0,e,bm(c,d)]}return 0}function M(d,c){var @@ -16754,7 +17508,7 @@ f=a+1|0;if(c!==a){var a=f;continue}break}}return 0}var dd=x;function hI(b,a){return hE(b,0,a)}var -de=Iv(0)[1],ct=It(0),df=Is(0),b2=(4*df|0)-1|0;a0(0);function +de=Iv(0)[1],ct=It(0),df=Is(0),b1=(4*df|0)-1|0;a0(0);function bB(a){if(a){var d=0,c=a,g=a[2],h=a[1];for(;;){if(c){var d=d+1|0,c=c[2];continue}var @@ -16909,7 +17663,7 @@ n=j>>1,D=eg(n,g),E=u(n,g),i=E,h=u(j-n|0,D),e=0;for(;;){if(i){if(h){var p=h[2],q=h[1],r=i[2],l=i[1],s=f(b,l,q);if(0===s){var i=r,h=p,e=[0,l,e];continue}if(0>1,D=eg(o,g),E=m(o,g),i=E,h=m(j-o|0,D),e=0;for(;;){if(i){if(h){var q=h[2],r=h[1],s=i[2],l=i[1],t=f(b,l,r);if(0===t){var i=s,h=q,e=[0,l,e];continue}if(0<=t){var h=q,e=[0,r,e];continue}var -i=s,e=[0,l,e];continue}return b1(i,e)}return b1(h,e)}},q=dc(d),s=2<=q?m(q,d):d,j=function(b,a){if(!(3>>0))switch(b){case +i=s,e=[0,l,e];continue}return b0(i,e)}return b0(h,e)}},q=dc(d),s=2<=q?m(q,d):d,j=function(b,a){if(!(3>>0))switch(b){case 0:return[0,0,a];case 1:if(a)return[0,[0,0,a[1],0,1],a[2]];break;case 2:if(a){var @@ -16939,12 +17693,12 @@ hU=[W,hT,a0(0)];function hV(a){throw hU}function hW(a){var d=a[1];a[1]=hV;try{var -c=b(d,0);a[1]=c;Im(a,ck);return c}catch(b){b=aj(b);a[1]=function(a){throw b};throw b}}function +c=b(d,0);a[1]=c;Im(a,cj);return c}catch(b){b=aj(b);a[1]=function(a){throw b};throw b}}function C(a){var -b=1<=a?a:1,c=b2>>25|0)&31)|0)&cH,g=a[2];k(a[1],g)[g+1]=f;var j=f;}else var @@ -18012,17 +18766,17 @@ var l=h;return l}return n}function eB(f,b){var g=dj(f,b),c=k(f[2],g)[g+1];if(c){var -d=c[3],j=c[2];if(0===bY(b,c[1]))return j;if(d){var -e=d[3],l=d[2];if(0===bY(b,d[1]))return l;if(e){var -m=e[3],n=e[2];if(0===bY(b,e[1]))return n;var +d=c[3],j=c[2];if(0===cn(b,c[1]))return j;if(d){var +e=d[3],l=d[2];if(0===cn(b,d[1]))return l;if(e){var +m=e[3],n=e[2];if(0===cn(b,e[1]))return n;var a=m;for(;;){if(a){var -h=a[3],i=a[2];if(0===bY(b,a[1]))return i;var +h=a[3],i=a[2];if(0===cn(b,a[1]))return i;var a=h;continue}throw ah}}throw ah}throw ah}throw ah}var aF=g1,aE=HH;function jO(b,a){var c=hf(a)===W?a:a[1];return Iq(b,c)}try{c9(HC);}catch(a){a=aj(a);if(a!==ah)throw a}try{c9(HB);}catch(a){a=aj(a);if(a!==ah)throw a}if(c(de,jP))if(c(de,jQ))if(c(de,jR))throw[0,t,jS];var eC=aQ,eD=undefined,jT=null;function -b5(a){return a!==eD?1:0}var +b4(a){return a!==eD?1:0}var jU=eC.Array,eE=[W,jV,a0(0)];jO(jW,[0,eE,{}]);(function(a){throw a});ew(function(a){return a[1]===eE?[0,bk(a[2].toString())]:0});ew(function(a){return a instanceof jU?0:[0,bk(a.toString())]});function @@ -18036,7 +18790,8 @@ a==="number")return 1;else switch(a[0]){case 0:return 2;case 3:return 4;default:return 3}}function -eI(b,a){return bY([0,b[1],b[2]],[0,a[1],a[2]])}var +eI(b,a){var +c=b[1]-a[1]|0;return 0===c?b[2]-a[2]|0:c}var eJ=[W,jY,a0(0)],eK=f(aE,lg,lf),eL=f(aE,li,lh),eM=f(aE,lk,lj),eN=f(aE,lm,ll),eO=f(aE,lo,ln),eP=f(aE,lq,lp),eQ=f(aE,ls,lr),eR=f(aE,lu,lt),eS=f(aE,lw,lv),eT=f(aE,ly,lx),eU=f(aE,lA,lz);u(aF,lB,eK,eK);u(aF,lC,eL,eL);u(aF,lD,eM,eM);u(aF,lE,eN,eN);u(aF,lF,eO,eO);u(aF,lG,eP,eP);u(aF,lH,eQ,eQ);u(aF,lI,eR,eR);u(aF,lJ,eS,eS);u(aF,lK,eT,eT);u(aF,lL,eU,eU);function lM(c){function i(d,a){var @@ -18057,7 +18812,7 @@ i=s(d[3][3]),j=[0,s(d[2][3]),i],l=[0,lT,b(c[4],j)],m=[0,lU,I(d)],e=[0,[0,lV,b(c[ f=a.length-1,h=0===f?[0]:g3(a,0,f);else var h=0===a.length-1?g3(e,0,g):HI(e,a);return b(c[3],h)}function -aa(a){return i(function(g){var +$(a){return i(function(g){var d=g[2];if(typeof d==="number"){var e=d;if(34<=e)switch(e){case @@ -18211,8 +18966,8 @@ j=w(lc,w(d[2],lb)),a=w(d[1],j);break;case a=w(ld,d[1]);break;default:var k=d[1],a=b(eu(le),k);}var l=[0,lW,b(c[1],a)],m=[0,[0,lX,I(g[1])],l];return b(c[3],m)},a)}function -ab(b){var -c=[0,lY,i(ar,b[3])],d=[0,[0,lZ,J(b[2])],c];return a(l0,b[1],d)}function +aa(b){var +c=[0,lY,i(aq,b[3])],d=[0,[0,lZ,J(b[2])],c];return a(l0,b[1],d)}function J(a){return i(l,a)}function y(e){var f=e[2];switch(f[2]){case @@ -18221,7 +18976,7 @@ d=rE;break;case 1:var d=rI;break;default:var d=rJ;}var -g=[0,rF,b(c[1],d)],h=[0,[0,rG,i(ah,f[1])],g];return a(rH,e[1],h)}function +g=[0,rF,b(c[1],d)],h=[0,[0,rG,i(ag,f[1])],g];return a(rH,e[1],h)}function V(c){var b=c[2],e=[0,qA,i(K,b[4])],f=[0,qB,F(b[3])],g=[0,qC,d(q,b[2])],j=[0,[0,qD,h(b[1])],g,f,e];return a(qE,c[1],j)}function S(c){var @@ -18326,10 +19081,10 @@ M=nc;break;case M=nh;break;default:var M=ni;}var aS=[0,nd,b(c[1],M)],aT=[0,ne,n(L[2])],aU=bB(aR);return a(ng,f,[0,[0,nf,b(c[4],aU)],aT,aS])}}function -X(g){var -e=g[2],j=[0,s9,i(ao,e[3])],k=[0,s_,d(an,e[2])],h=e[1],f=h[2],m=[0,tb,b(c[2],f[2])],n=[0,tc,i(am,f[3])],o=[0,[0,td,Y(f[1])],n,m],l=[0,[0,s$,a(te,h[1],o)],k,j];return a(ta,g[1],l)}function +W(g){var +e=g[2],j=[0,s9,i(an,e[3])],k=[0,s_,d(am,e[2])],h=e[1],f=h[2],m=[0,tb,b(c[2],f[2])],n=[0,tc,i(al,f[3])],o=[0,[0,td,X(f[1])],n,m],l=[0,[0,s$,a(te,h[1],o)],k,j];return a(ta,g[1],l)}function M(b){var -c=b[2],d=[0,rt,i(e,c[2])],f=[0,[0,ru,i(ag,c[1])],d];return a(rv,b[1],f)}function +c=b[2],d=[0,rt,i(e,c[2])],f=[0,[0,ru,i(af,c[1])],d];return a(rv,b[1],f)}function n(g){var h=g[2],i=h[2],d=h[1],j=g[1];if(typeof d==="number")var @@ -18359,10 +19114,10 @@ f==="number")return 0===f?a(nj,g,[0]):a(nk,g,[0]);else switch(f[0]){case 0:var S=f[1][1];return a(nm,g,[0,[0,nl,i(function(a){return d(E,a)},S)]]);case -1:return a(no,g,[0,[0,nn,i(ae,f[1][1])]]);case +1:return a(no,g,[0,[0,nn,i(ad,f[1][1])]]);case 2:return v([0,g,f[1]]);case 3:var -l=f[1],u=l[3],V=0===u[0]?r(u[1]):e(u[1]),W=[0,np,d(q,l[9])],Y=[0,nq,d(p,l[8])],Z=[0,nr,b(c[2],l[7])],_=[0,ns,d(A,l[6])],$=[0,nt,b(c[2],l[5])],aa=[0,nu,b(c[2],l[4])],ab=[0,nw,D(l[2])];return a(ny,g,[0,[0,nx,d(h,l[1])],ab,[0,nv,V],aa,$,_,Z,Y,W]);case +l=f[1],u=l[3],V=0===u[0]?r(u[1]):e(u[1]),X=[0,np,d(q,l[9])],Y=[0,nq,d(p,l[8])],Z=[0,nr,b(c[2],l[7])],_=[0,ns,d(A,l[6])],$=[0,nt,b(c[2],l[5])],aa=[0,nu,b(c[2],l[4])],ab=[0,nw,D(l[2])];return a(ny,g,[0,[0,nx,d(h,l[1])],ab,[0,nv,V],aa,$,_,Z,Y,X]);case 4:return a(nA,g,[0,[0,nz,i(e,f[1][1])]]);case 5:var t=f[1];if(7<=t[1])return a(nC,g,[0,[0,nB,e(t[3])]]);switch(t[1]){case @@ -18381,7 +19136,7 @@ m=nM;break;case 6:var m=nN;break;default:var m=ay(nO);}var -ac=[0,nE,e(t[3])],ad=[0,nF,b(c[2],t[2])];return a(nH,g,[0,[0,nG,b(c[1],m)],ad,ac]);case +ac=[0,nE,e(t[3])],ae=[0,nF,b(c[2],t[2])];return a(nH,g,[0,[0,nG,b(c[1],m)],ae,ac]);case 6:var w=f[1];switch(w[1]){case 0:var @@ -18479,7 +19234,7 @@ O=f[1],ax=[0,o0,d(e,O[2])];return a(o2,g,[0,[0,o1,i(L,O[1])],ax]);case 19:return M([0,g,f[1]]);case 20:var P=f[1],aH=[0,rB,M(P[2])];return a(rD,g,[0,[0,rC,e(P[1])],aH]);case -21:return X([0,g,f[1]]);case +21:return W([0,g,f[1]]);case 22:var s=f[1],aB=[0,p7,i(e,s[7])],aC=[0,p8,i(T,s[6])],aD=[0,p9,d(x,s[5])],aE=[0,p_,d(q,s[4])],aF=[0,p$,d(e,s[3])],aG=[0,qa,U(s[2])];return a(qc,g,[0,[0,qb,d(h,s[1])],aG,aF,aE,aD,aC,aB]);case 23:var @@ -18493,14 +19248,14 @@ aj(b){var c=b[2],d=[0,pC,r(c[2])],e=[0,[0,pD,o(c[1])],d];return a(pE,b[1],e)}function C(a){return 0===a?pR:pS}function R(e){if(e){var -d=e[1];if(0===d[0])return i(aq,d[1]);var +d=e[1];if(0===d[0])return i(ap,d[1]);var f=d[2];if(f){var g=[0,[0,pT,h(f[1])]],j=[0,a(pU,d[1],g)];return b(c[4],j)}return b(c[4],[0])}return b(c[4],[0])}function T(b){var c=b[2],e=[0,qd,d(x,c[2])],f=[0,[0,qe,h(c[1])],e];return a(qf,b[1],f)}function U(b){var -c=[0,[0,qg,i(ac,b[2][1])]];return a(qh,b[1],c)}function -ac(q){if(0===q[0]){var +c=[0,[0,qg,i(ab,b[2][1])]];return a(qh,b[1],c)}function +ab(q){if(0===q[0]){var r=q[1],f=r[2],j=f[2];switch(j[0]){case 0:var k=[0,n(j[1]),0];break;case @@ -18527,18 +19282,18 @@ e=c[2],b=e[1],f=0===b[0]?h(b[1]):G(b[1]),g=[0,[0,qG,f],[0,qF,d(x,e[2])]];return o(f){var b=f[2],c=f[1];switch(b[0]){case 0:var -g=b[1],k=[0,qI,d(p,g[2])];return a(qK,c,[0,[0,qJ,i(af,g[1])],k]);case +g=b[1],k=[0,qI,d(p,g[2])];return a(qK,c,[0,[0,qJ,i(ae,g[1])],k]);case 1:var -h=b[1],l=[0,qL,d(p,h[2])],m=h[1];return a(qN,c,[0,[0,qM,i(function(a){return d(ad,a)},m)],l]);case +h=b[1],l=[0,qL,d(p,h[2])],m=h[1];return a(qN,c,[0,[0,qM,i(function(a){return d(ac,a)},m)],l]);case 2:var j=b[1],n=[0,qO,e(j[2])];return a(qQ,c,[0,[0,qP,o(j[1])],n]);case 3:return B(c,b[1]);default:return e(b[1])}}function D(d){var e=d[2],f=d[1];if(e){var g=e[1],h=[0,[0,qR,o(g[2][1])]],j=a(qS,g[1],h),k=bB(m([0,j,m(bm(o,f))]));return b(c[4],k)}return i(o,f)}function -ad(b){if(0===b[0])return o(b[1]);var +ac(b){if(0===b[0])return o(b[1]);var c=b[1],d=[0,[0,qT,o(c[2][1])]];return a(qU,c[1],d)}function -ae(k){if(0===k[0]){var +ad(k){if(0===k[0]){var l=k[1],d=l[2],f=d[1];switch(f[0]){case 0:var g=[0,n(f[1]),0];break;case @@ -18553,7 +19308,7 @@ j=[0,v(i[1]),q3];break;default:var j=[0,v(i[1]),q4];}var o=[0,qW,b(c[2],g[2])],p=[0,qX,b(c[2],d[4])],q=[0,qY,b(c[2],d[3])],r=[0,qZ,b(c[1],j[2])];return a(q2,l[1],[0,[0,q1,g[1]],[0,q0,j[1]],r,q,p,o])}var m=k[1],s=[0,[0,q5,e(m[2][1])]];return a(q6,m[1],s)}function -af(g){if(0===g[0]){var +ae(g){if(0===g[0]){var j=g[1],i=j[2],d=i[1];switch(d[0]){case 0:var f=[0,n(d[1]),0];break;case @@ -18566,13 +19321,11 @@ E(b){if(0===b[0])return e(b[1]);var c=b[1],d=[0,[0,rf,e(c[2][1])]];return a(rg,c[1],d)}function L(f){var d=f[2],g=[0,rh,b(c[2],d[3])],h=[0,ri,e(d[2])],i=[0,[0,rj,o(d[1])],h,g];return a(rk,f[1],i)}function -ag(e){var +af(e){var d=e[2],f=[0,rw,b(c[1],d[1][2])],g=[0,[0,rx,b(c[1],d[1][1])],f],h=b(c[3],g),i=[0,[0,rz,h],[0,ry,b(c[2],d[2])]];return a(rA,e[1],i)}function -ah(b){var +ag(b){var c=b[2],f=[0,rK,d(e,c[2])],g=[0,[0,rL,o(c[1])],f];return a(rM,b[1],g)}function t(a){return 0===a[2]?b(c[1],rN):b(c[1],rO)}function -W(c){var -e=c[2],b=e[1],f=0===b[0]?h(b[1]):G(b[1]),g=[0,[0,sE,f],[0,sD,d(x,e[2])]];return a(sF,c[1],g)}function F(f){var g=f[2],i=g[2],e=aB(function(p,e){var i=p[3],j=p[2],l=p[1];switch(e[0]){case @@ -18591,82 +19344,83 @@ x=m[1],o=[0,z([0,x[1],x[2]]),sk];break;default:var y=m[1],o=[0,z([0,y[1],y[2]]),sl];}var B=[0,sd,b(c[1],o[2])],C=[0,se,d(t,f[6])],D=[0,sf,b(c[2],f[4])],E=[0,sg,b(c[2],f[3])];return[0,[0,a(sj,s[1],[0,[0,si,r],[0,sh,o[1]],E,D,C,B]),l],j,i];case 1:var -u=e[1],F=[0,[0,sn,W(u[2][1])]];return[0,[0,a(so,u[1],F),l],j,i];case +u=e[1],F=[0,[0,sn,k(u[2][1])]];return[0,[0,a(so,u[1],F),l],j,i];case 2:var v=e[1],g=v[2],G=[0,sp,d(t,g[5])],H=[0,sq,b(c[2],g[4])],I=[0,sr,k(g[3])],J=[0,ss,k(g[2])],K=[0,[0,st,d(h,g[1])],J,I,H,G];return[0,l,[0,a(su,v[1],K),j],i];default:var w=e[1],A=w[2],L=[0,sv,b(c[2],A[2])],M=[0,[0,sw,z(A[1])],L];return[0,l,j,[0,a(sx,w[1],M),i]]}},r8,i),j=bB(m(e[3])),l=[0,r9,b(c[4],j)],o=bB(m(e[2])),p=[0,r_,b(c[4],o)],q=bB(m(e[1])),r=[0,r$,b(c[4],q)],s=[0,[0,sa,b(c[2],g[1])],r,p,l];return a(sb,f[1],s)}function z(c){var -b=c[2],e=b[1],f=[0,rZ,d(q,b[3])],g=[0,r0,d(ak,e[2])],h=[0,r1,k(b[2])],j=[0,[0,r2,i(N,e[1])],h,g,f];return a(r3,c[1],j)}function -k(f){var -e=f[2],d=f[1];if(typeof -e==="number")switch(e){case -0:return a(rP,d,[0]);case -1:return a(rQ,d,[0]);case -2:return a(rR,d,[0]);case -3:return a(rS,d,[0]);case -4:return a(rT,d,[0]);case -5:return a(rU,d,[0]);case -6:return a(rV,d,[0]);case -7:return a(rW,d,[0]);default:return a(sX,d,[0])}else -switch(e[0]){case -0:return a(rY,d,[0,[0,rX,k(e[1])]]);case -1:return z([0,d,e[1]]);case -2:return F([0,d,e[1]]);case -3:return a(sz,d,[0,[0,sy,k(e[1])]]);case -4:return W([0,d,e[1]]);case -5:return a(sH,d,[0,[0,sG,i(k,[0,e[1],[0,e[2],e[3]]])]]);case -6:return a(sJ,d,[0,[0,sI,i(k,[0,e[1],[0,e[2],e[3]]])]]);case -7:return a(sL,d,[0,[0,sK,k(e[1])]]);case -8:return a(sN,d,[0,[0,sM,i(k,e[1])]]);case +b=c[2],e=b[1],f=[0,rZ,d(q,b[3])],g=[0,r0,d(ah,e[2])],h=[0,r1,k(b[2])],j=[0,[0,r2,i(N,e[1])],h,g,f];return a(r3,c[1],j)}function +k(j){var +f=j[2],e=j[1];if(typeof +f==="number")switch(f){case +0:return a(rP,e,[0]);case +1:return a(rQ,e,[0]);case +2:return a(rR,e,[0]);case +3:return a(rS,e,[0]);case +4:return a(rT,e,[0]);case +5:return a(rU,e,[0]);case +6:return a(rV,e,[0]);case +7:return a(rW,e,[0]);default:return a(sX,e,[0])}else +switch(f[0]){case +0:return a(rY,e,[0,[0,rX,k(f[1])]]);case +1:return z([0,e,f[1]]);case +2:return F([0,e,f[1]]);case +3:return a(sz,e,[0,[0,sy,k(f[1])]]);case +4:var +l=f[1],g=l[1],p=0===g[0]?h(g[1]):G(g[1]);return a(sF,e,[0,[0,sE,p],[0,sD,d(x,l[2])]]);case +5:return a(sH,e,[0,[0,sG,i(k,[0,f[1],[0,f[2],f[3]]])]]);case +6:return a(sJ,e,[0,[0,sI,i(k,[0,f[1],[0,f[2],f[3]]])]]);case +7:return a(sL,e,[0,[0,sK,k(f[1])]]);case +8:return a(sN,e,[0,[0,sM,i(k,f[1])]]);case 9:var -g=e[1],l=[0,sO,b(c[1],g[2])];return a(sQ,d,[0,[0,sP,b(c[1],g[1])],l]);case +m=f[1],q=[0,sO,b(c[1],m[2])];return a(sQ,e,[0,[0,sP,b(c[1],m[1])],q]);case 10:var -h=e[1],m=[0,sR,b(c[1],h[2])];return a(sT,d,[0,[0,sS,b(c[5],h[1])],m]);default:var -j=e[1],n=[0,sU,b(c[1],j[2])];return a(sW,d,[0,[0,sV,b(c[2],j[1])],n])}}function +n=f[1],r=[0,sR,b(c[1],n[2])];return a(sT,e,[0,[0,sS,b(c[5],n[1])],r]);default:var +o=f[1],s=[0,sU,b(c[1],o[2])];return a(sW,e,[0,[0,sV,b(c[2],o[1])],s])}}function N(f){var e=f[2],g=[0,r4,b(c[2],e[3])],i=[0,r5,k(e[2])],j=[0,[0,r6,d(h,e[1])],i,g];return a(r7,f[1],j)}function -ak(a){return N(a[2][1])}function +ah(a){return N(a[2][1])}function G(c){var d=c[2],b=d[1],e=0===b[0]?h(b[1]):G(b[1]),f=[0,[0,sB,e],[0,sA,h(d[2])]];return a(sC,c[1],f)}function p(b){var c=[0,[0,sY,k(b[2])]];return a(sZ,b[1],c)}function q(b){var -c=[0,[0,s0,i(al,b[2][1])]];return a(s1,b[1],c)}function -al(f){var +c=[0,[0,s0,i(ak,b[2][1])]];return a(s1,b[1],c)}function +ak(f){var e=f[2],g=[0,s2,d(k,e[4])],h=[0,s3,d(t,e[3])],i=[0,s4,d(p,e[2])],j=[0,[0,s5,b(c[1],e[1])],i,h,g];return a(s6,f[1],j)}function x(b){var c=[0,[0,s7,i(k,b[2][1])]];return a(s8,b[1],c)}function -am(b){if(0===b[0]){var -f=b[1],h=f[2],c=h[1],i=0===c[0]?j(c[1]):$(c[1]),k=[0,[0,ti,i],[0,th,d(ap,h[2])]];return a(tj,f[1],k)}var +al(b){if(0===b[0]){var +f=b[1],h=f[2],c=h[1],i=0===c[0]?j(c[1]):_(c[1]),k=[0,[0,ti,i],[0,th,d(ao,h[2])]];return a(tj,f[1],k)}var g=b[1],l=[0,[0,tk,e(g[2][1])]];return a(tl,g[1],l)}function -an(b){var -c=[0,[0,tf,Y(b[2][1])]];return a(tg,b[1],c)}function -Z(c){var +am(b){var +c=[0,[0,tf,X(b[2][1])]];return a(tg,b[1],c)}function +Y(c){var b=c[2][1],d=0===b[0]?e(b[1]):a(to,b[1],[0]);return a(tn,c[1],[0,[0,tm,d]])}function -ao(f){var +an(f){var d=f[2],e=f[1];switch(d[0]){case -0:return X([0,e,d[1]]);case -1:return Z([0,e,d[1]]);default:var +0:return W([0,e,d[1]]);case +1:return Y([0,e,d[1]]);default:var g=d[1],h=[0,tp,b(c[1],g[2])];return a(tr,e,[0,[0,tq,b(c[1],g[1])],h])}}function j(d){var e=[0,[0,ty,b(c[1],d[2][1])]];return a(tz,d[1],e)}function -$(b){var +_(b){var c=b[2],d=[0,tv,j(c[2])],e=[0,[0,tw,j(c[1])],d];return a(tx,b[1],e)}function -_(c){var -d=c[2],b=d[1],e=0===b[0]?j(b[1]):_(b[1]),f=[0,[0,tt,e],[0,ts,j(d[2])]];return a(tu,c[1],f)}function -Y(a){switch(a[0]){case +Z(c){var +d=c[2],b=d[1],e=0===b[0]?j(b[1]):Z(b[1]),f=[0,[0,tt,e],[0,ts,j(d[2])]];return a(tu,c[1],f)}function +X(a){switch(a[0]){case 0:return j(a[1]);case -1:return $(a[1]);default:return _(a[1])}}function -ap(a){return 0===a[0]?n([0,a[1],a[2]]):Z([0,a[1],a[2]])}function -aq(c){var +1:return _(a[1]);default:return Z(a[1])}}function +ao(a){return 0===a[0]?n([0,a[1],a[2]]):Y([0,a[1],a[2]])}function +ap(c){var b=c[2],d=b[2],e=d?h(d[1]):h(b[1]),f=[0,[0,tB,h(b[1])],[0,tA,e]];return a(tC,c[1],f)}function -ar(e){var +aq(e){var d=e[2],f=0===d[0]?[0,tN,d[1]]:[0,tP,d[1]],g=[0,[0,tO,b(c[1],f[2])]];return a(f[1],e[1],g)}function A(b){var c=b[2];if(c)var f=tR,d=[0,[0,tQ,e(c[1])]];else var -f=tS,d=[0];return a(f,b[1],d)}return[0,ab,e,aa]}function +f=tS,d=[0];return a(f,b[1],d)}return[0,aa,e,$]}function cy(c,a){a[6]=a[6]-c|0;var b=a[12];a[12]=[0,b[1],b[2],b[3],b[4]-c|0];return 0}function eV(b,a){return[0,a[1],b,a[3],a[4],a[5]]}function @@ -18730,7 +19484,7 @@ h=0;else var d=55,h=1;else var -h=0;if(!h){if(97<=b)if(cf>>0){if(!(cm<(a+1|0)>>>0))return 1}else{var +a=c-3|0;if(cL>>0){if(!(cl<(a+1|0)>>>0))return 1}else{var d=6!==a?1:0;if(!d)return d}}return bJ(b)}function N(b,a){var c=b?b[1]:0,d=9===e([0,c],a)?1:0,f=d?[0,h([0,c],a)]:d;return f}function aI(d,c){var -f=d?d[1]:0,a=E([0,f],c),g=e([0,f],c);if(!b$(a))if(!bq(a))if(!cB(a)){if(typeof +f=d?d[1]:0,a=E([0,f],c),g=e([0,f],c);if(!b_(a))if(!bq(a))if(!cB(a)){if(typeof g==="number"){var b=g-1|0,h=58>>0?64<=b?0:1:27===b?1:0;if(h)return 1}return 0}return 1}function cC(c,a){var @@ -19897,7 +20651,7 @@ switch(a[0]){case 0:return 0;case 1:case 4:return 1}var -b=c[2];return cB(b)?3:b$(b)?40:[1,b]}function +b=c[2];return cB(b)?3:b_(b)?40:[1,b]}function ac(a){var c=e_(0,a);b(e7(a),c);var d=E(0,a);return r(a,e$([0,e(0,a),d]))}function @@ -19909,27 +20663,27 @@ aW(b,a){var c=b[6];return c?q(b,[0,a[1],a[2]]):c}function H(a){var m=a[23][1];if(m){var -o=h(0,a),p=e(0,a),q=E(0,a),r=[0,o,p,b7(a),q];b(m[1],r);}var +o=h(0,a),p=e(0,a),q=E(0,a),r=[0,o,p,b6(a),q];b(m[1],r);}var l=a[22][1];dm(l,0);var f=k(l[1],0)[1],s=f?f[1][1]:ay(Eu);a[21][1]=s;var t=e_(0,a);b(e7(a),t);var -n=b8([0,0],a)[5];M(function(b){a[2][1]=[0,b,a[2][1]];return 0},n);var +n=b7([0,0],a)[5];M(function(b){a[2][1]=[0,b,a[2][1]];return 0},n);var u=[0,h(0,a)];a[5][1]=u;var c=a[22][1];dm(c,0);if(1>>0))return f(N,a,b(p[14],a)[1]);return f(l,a,b(j,a))}i(k,function(a){return function(o){var +c==="number")if(!(1<(c+dR|0)>>>0))return f(M,a,b(p[14],a)[1]);return f(l,a,b(j,a))}i(k,function(a){return function(o){var b=o;for(;;){var c=e(0,a);if(typeof c==="number"){var -f=c-6|0,p=7>>0?cf===f?1:0:5<(f-1|0)>>>0?1:0;if(p){var +f=c-6|0,p=7>>0?ce===f?1:0:5<(f-1|0)>>>0?1:0;if(p){var i=13===c?1:0;if(i){var l=h(0,a);d(a,13);var j=ad(a),k=[0,[0,g(l,j[1]),[0,j]]];}else @@ -20082,7 +20836,7 @@ c=b(_,g),i=1;else var i=0;else var -i=0;if(!i){if(b(M,h)){var +i=0;if(!i){if(b(L,h)){var u=e(E5,g);if(typeof u==="number")if(1<(u+dR|0)>>>0)var r=0;else @@ -20114,7 +20868,7 @@ t=n;}var s=t;}d(a,6);return s});i(_,function(a){var b=f(p[13],0,a),c=e(0,a);if(typeof c==="number")if(!(1<(c+dR|0)>>>0)){var -d=f(N,a,b);am(a,10);return[0,f(k,a,[0,d,0])]}return[1,f(A,a,f(D,a,f(J,a,f(n,a,f(ab,a,b)))))]});i($,function(a){var +d=f(M,a,b);am(a,10);return[0,f(k,a,[0,d,0])]}return[1,f(z,a,f(C,a,f(I,a,f(n,a,f(ab,a,b)))))]});i($,function(a){var d=h(0,a),c=b(Z,a);return 0===c[0]?bs(s,a,d,0,c[1]):c[1]});i(aa,function(a){var c=h(0,a),d=f(v,0,a);return bs(s,a,c,d,b(o,a))});i(s,function(a,h,f,e){d(a,12);var c=b(j,a);return[0,g(h,c[1]),[1,[0,e,c,f]]]});function @@ -20126,114 +20880,114 @@ b=S(a,g,f(v,0,a)),c=[0,b[1],[1,b[2]]];return[0,[0,c[1],[0,d,[0,c],0,e,1,0]]]}fun U(a,i,h,f,e){if(1-at(a))r(a,7);var k=am(a,79);d(a,80);var c=b(j,a);return[0,[0,g(i,c[1]),[0,e,[0,c],k,h,0,f]]]}function -C(c,a){var +B(c,a){var b=e(0,a);if(typeof b==="number")if(!(11<=b))switch(b){case 2:if(!c)return 0;break;case 4:if(c)return 0;break;case 9:case 10:return H(a)}return ac(a)}function -x(b,a){return a?q(b,[0,a[1][1],5]):a}i(O,function(N,ar,aq,a){var -n=ar?3===e(0,a)?1:0:ar,aD=h(0,a),aE=n?3:1;d(a,aE);var -k=0;for(;;){if(N)if(aq)throw[0,t,E8];var -i=h(0,a),r=N?am(a,42):N,l=b(F,a),s=e(0,a);if(typeof +w(b,a){return a?q(b,[0,a[1][1],5]):a}i(N,function(M,aq,ap,a){var +n=aq?3===e(0,a)?1:0:aq,aC=h(0,a),aD=n?3:1;d(a,aD);var +k=0;for(;;){if(M)if(ap)throw[0,t,E8];var +i=h(0,a),r=M?am(a,42):M,l=b(F,a),s=e(0,a);if(typeof s==="number"){if(92===s)var u=1;else{if(G===s)var -O=m(k),o=1;else +N=m(k),o=1;else if(14<=s)var u=0,o=0;else switch(s){case 2:if(n)var u=0,o=0;else var -O=m(k),o=1;break;case +N=m(k),o=1;break;case 4:if(n)var -O=m(k),o=1;else +N=m(k),o=1;else var u=0,o=0;break;case 7:d(a,7);var -_=80===e(E7,a)?1:0;if(_){var -az=b(p[14],a);d(a,80);var -$=[0,az[1]];}else +Z=80===e(E7,a)?1:0;if(Z){var +ay=b(p[14],a);d(a,80);var +_=[0,ay[1]];}else var -$=_;var -aA=b(j,a);d(a,8);d(a,80);var -aa=b(j,a),aB=[2,[0,g(i,aa[1]),[0,$,aA,aa,r,l]]];C(n,a);var -k=[0,aB,k];continue;case -13:if(aq){H(a);var -ap=b(z,a),aC=[1,[0,g(i,ap[1]),[0,ap]]];C(n,a);var -k=[0,aC,k];continue}var +_=Z;var +az=b(j,a);d(a,8);d(a,80);var +$=b(j,a),aA=[2,[0,g(i,$[1]),[0,_,az,$,r,l]]];B(n,a);var +k=[0,aA,k];continue;case +13:if(ap){w(a,l);H(a);var +ao=b(j,a),aB=[1,[0,g(i,ao[1]),[0,ao]]];B(n,a);var +k=[0,aB,k];continue}var u=0,o=0;break;case 5:var u=1,o=0;break;default:var u=0,o=0;}if(o){var -aF=h(0,a),aG=n?4:2;d(a,aG);return[0,g(aD,aF),[0,n,O]]}}if(u){x(a,l);var -as=f(v,0,a),Y=S(a,h(0,a),as),at=[3,[0,g(i,Y[1]),[0,Y,r]]];C(n,a);var -k=[0,at,k];continue}}if(0===r)var +aE=h(0,a),aF=n?4:2;d(a,aF);return[0,g(aC,aE),[0,n,N]]}}if(u){w(a,l);var +ar=f(v,0,a),X=S(a,h(0,a),ar),as=[3,[0,g(i,X[1]),[0,X,r]]];B(n,a);var +k=[0,as,k];continue}}if(0===r)var y=0;else if(l)var y=0;else if(typeof s==="number")if(80===s){aW(a,[0,i,40]);var -al=[1,[0,i,Fa]],M=e(0,a),an=0;if(typeof -M==="number"){if(5===M)var -Q=1;else -if(92===M)var -Q=1;else +ak=[1,[0,i,Fa]],L=e(0,a),al=0;if(typeof +L==="number"){if(5===L)var +P=1;else +if(92===L)var +P=1;else var -P=0,Q=0;if(Q){x(a,l);var -ao=T(a,i,an,al),P=1;}}else +O=0,P=0;if(P){w(a,l);var +an=T(a,i,al,ak),O=1;}}else var -P=0;if(!P)var -ao=U(a,i,an,l,al);var -ae=ao,y=1;}else +O=0;if(!O)var +an=U(a,i,al,l,ak);var +ad=an,y=1;}else var y=0;else var y=0;if(!y){var -ab=function(a){aO(a,0);var -c=b(p[21],a);a4(a);return c},w=ab(a)[2];if(1===w[0]){var -K=w[1][2];if(c(K,E9))if(c(K,E_))var -R=0,V=0;else +aa=function(a){aO(a,0);var +c=b(p[21],a);a4(a);return c},x=aa(a)[2];if(1===x[0]){var +J=x[1][2];if(c(J,E9))if(c(J,E_))var +Q=0,R=0;else var -V=1;else +R=1;else var -V=1;if(V){var -af=e(0,a);if(typeof -af==="number"){var -L=af-6|0;if(85>>0)if(87<(L+1|0)>>>0)var -D=0,E=0;else{x(a,l);var -ak=T(a,i,r,w),E=1;}else -if(1<(L-73|0)>>>0)var -D=0,E=0;else +R=1;if(R){var +ae=e(0,a);if(typeof +ae==="number"){var +K=ae-6|0;if(85>>0)if(87<(K+1|0)>>>0)var +C=0,D=0;else{w(a,l);var +aj=T(a,i,r,x),D=1;}else +if(1<(K-73|0)>>>0)var +C=0,D=0;else var -ak=U(a,i,r,l,w),E=1;if(E)var -aj=ak,D=1;}else +aj=U(a,i,r,l,x),D=1;if(D)var +ah=aj,C=1;}else var -D=0;if(!D){var -ag=ab(a),ah=ai(K,E$);x(a,l);var -A=S(a,i,0),B=A[2][1],I=ag[1];if(0===ah){var -Z=B[1];if(B[2])q(a,[0,I,63]);else{var -aH=Z?Z[2]?0:1:0;if(!aH)q(a,[0,I,63]);}}else{var -aI=B[1]?0:B[2]?0:1;if(!aI)q(a,[0,I,62]);}var -au=0,av=0,aw=0,ax=ah?[1,A]:[2,A],ay=[0,ag[2],ax,aw,r,av,au],aj=[0,[0,g(i,A[1]),ay]];}var -ad=aj,R=1;}}else +C=0;if(!C){var +af=aa(a),ag=ai(J,E$);w(a,l);var +z=S(a,i,0),A=z[2][1],E=af[1];if(0===ag){var +Y=A[1];if(A[2])q(a,[0,E,63]);else{var +aG=Y?Y[2]?0:1:0;if(!aG)q(a,[0,E,63]);}}else{var +aH=A[1]?0:A[2]?0:1;if(!aH)q(a,[0,E,62]);}var +at=0,au=0,av=0,aw=ag?[1,z]:[2,z],ax=[0,af[2],aw,av,r,au,at],ah=[0,[0,g(i,z[1]),ax]];}var +ac=ah,Q=1;}}else var -R=0;if(!R){var -J=e(0,a);if(typeof -J==="number"){if(5===J)var -X=1;else -if(92===J)var -X=1;else +Q=0;if(!Q){var +I=e(0,a);if(typeof +I==="number"){if(5===I)var +W=1;else +if(92===I)var +W=1;else var -W=0,X=0;if(X){x(a,l);var -ac=T(a,i,r,w),W=1;}}else +V=0,W=0;if(W){w(a,l);var +ab=T(a,i,r,x),V=1;}}else var -W=0;if(!W)var -ac=U(a,i,r,l,w);var -ad=ac;}var -ae=ad;}C(n,a);var -k=[0,ae,k];continue}});i(v,function(D,a){var +V=0;if(!V)var +ab=U(a,i,r,l,x);var +ac=ab;}var +ad=ac;}B(n,a);var +k=[0,ad,k];continue}});i(v,function(D,a){var E=h(0,a),z=92===e(0,a)?1:0;if(z){if(1-at(a))r(a,7);d(a,92);var c=0,t=0;for(;;){var C=b(F,a),v=u(p[15],a,0,29),w=v[2],x=v[1],y=e(0,a);if(0===D)var @@ -20260,7 +21014,7 @@ A=m(k);}var I=g(E,h(0,a));d(a,93);var B=[0,[0,I,[0,A]]];break}}else var -B=z;return B});i(P,function(a){var +B=z;return B});i(O,function(a){var q=h(0,a),l=92===e(0,a)?1:0;if(l){d(a,92);var c=0;for(;;){var f=e(0,a);if(typeof @@ -20277,14 +21031,14 @@ i=0;if(!i){var p=[0,b(j,a),c];if(93!==e(0,a))d(a,10);var c=p;continue}break}}else var -n=l;return n});i(z,function(a){return f(Q,a,f(p[13],0,a))});i(Q,function(a,m){var +n=l;return n});i(P,function(a){return f(Q,a,f(p[13],0,a))});i(Q,function(a,m){var c=[0,m[1],[0,m]];for(;;){var j=c[2],h=c[1];if(11===e(0,a)){d(a,11);var k=f(p[13],0,a),l=g(h,k[1]),c=[0,l,[1,[0,l,[0,j,k]]]];continue}var -i=b(P,a),n=i?g(h,i[1][1]):h;return[0,n,[0,j,i]]}});i(ab,function(c,b){var +i=b(O,a),n=i?g(h,i[1][1]):h;return[0,n,[0,j,i]]}});i(ab,function(c,b){var a=f(Q,c,b);return[0,a[1],[4,a[2]]]});i(R,function(a){var c=e(0,a);if(typeof -c==="number")if(80===c)return[0,b(w,a)];return 0});function +c==="number")if(80===c)return[0,b(x,a)];return 0});function V(l){var a=dp(0,l),f=e(0,a);if(typeof f==="number")if(65===f){var @@ -20307,13 +21061,13 @@ ah=b(v,1);function aj(b){return a(ah,b)}var ak=b(v,0);function al(b){return a(ak,b)}function -an(b){return a(P,b)}function -ao(c,b){return a(u(O,c,0,0),b)}function +an(b){return a(O,b)}function +ao(c,b){return a(u(N,c,0,0),b)}function ap(b){return a(o,b)}function -aq(b){return a(w,b)}function +aq(b){return a(x,b)}function ar(b){return a(R,b)}function as(b){return a(V,b)}function -av(b){return a(af,b)}return[0,ag,al,aj,an,function(b){return a(z,b)},ao,ap,aq,ar,as,av]}var +av(b){return a(af,b)}return[0,ag,al,aj,an,function(b){return a(P,b)},ao,ap,aq,ar,as,av]}var ds=cv([0,dd]);function F$(t){function u(a){aO(a,0);var @@ -20376,7 +21130,7 @@ b=0;}else var b=0;if(!b)var f=ay(EJ);a[20][1]=f;var -i=b7(a),j=b6(a[21][1],i);a[22][1]=j;return[0,g(k,m),[0,l]]}var +i=b6(a),j=b5(a[21][1],i);a[22][1]=j;return[0,g(k,m),[0,l]]}var o=function b(a){return b.fun(a)},k=function c(a,b){return c.fun(a,b)},p=function @@ -20436,7 +21190,7 @@ var a=b?1:0;if(0===a)var j=eI(d[2],c[2]),e=0===j?eI(d[3],c[3]):j;else var -e=a;return 0===e?bY(l[2],k[2]):e}]),j=f(aE,G7,G6),z=EP(j),F=function(p){function +e=a;return 0===e?cn(l[2],k[2]):e}]),j=f(aE,G7,G6),z=EP(j),F=function(p){function a(a,j){var c=j;for(;;){var b=c[2];switch(b[0]){case @@ -20453,12 +21207,12 @@ z(b,d){if(d){var c=d[1];return 0===c[0]?a(b,c[1]):a(b,c[1][2][1])}return b}function k(d,c){var a=c[2],e=c[1],b=d[1];if(bq(a))aW(b,[0,e,29]);var -f=cB(a),g=f||b$(a);if(g)aW(b,[0,e,40]);return[0,b,d[2]]}function +f=cB(a),g=f||b_(a);if(g)aW(b,[0,e,40]);return[0,b,d[2]]}function s(b,h,m,g,f){var i=h||1-m;if(i){var c=f[2],d=h?bf(1-b[6],b):b;if(g){var j=g[1],e=j[2],k=j[1];if(bq(e))aW(d,[0,k,31]);var -n=cB(e),o=n||b$(e);if(o)aW(d,[0,k,40]);}var +n=cB(e),o=n||b_(e);if(o)aW(d,[0,k,40]);}var p=aB(a,[0,d,ds[1]],f[1]),q=c?(a(p,c[1][2][1]),0):c,l=q;}else var l=i;return l}function @@ -20466,7 +21220,7 @@ t(a){d(a,5);var i=0;for(;;){var k=e(0,a);if(typeof k==="number"){var -l=k-6|0,v=7>>0?cf===l?1:0:5<(l-1|0)>>>0?1:0;if(v){var +l=k-6|0,v=7>>0?ce===l?1:0:5<(l-1|0)>>>0?1:0;if(v){var o=13===k?1:0;if(o){var t=h(0,a);d(a,13);var p=f(j[19],a,29),q=[0,[0,g(t,p[1]),[0,p]]];}else @@ -20538,8 +21292,8 @@ b=n(a),i=b[3],j=[0,b[2],c];return[0,[0,g(f,b[1]),j],i]}var D=0,E=24;function i(a){return c(E,D,a)}function o(e){var -a=c(27,2,b9(1,e)),b=a[1],d=b[2],f=d[1],g=a[2],h=m(aB(function(b,a){return a[2][2]?b:[0,[0,a[1],43],b]},g,f));return[0,[0,b[1],d],h]}function -x(a){return c(28,1,b9(1,a))}return[0,v,u,B,t,l,w,s,A,function(a){var +a=c(27,2,b8(1,e)),b=a[1],d=b[2],f=d[1],g=a[2],h=m(aB(function(b,a){return a[2][2]?b:[0,[0,a[1],43],b]},g,f));return[0,[0,b[1],d],h]}function +x(a){return c(28,1,b8(1,a))}return[0,v,u,B,t,l,w,s,A,function(a){var m=h(0,a),j=e(0,a);if(typeof j==="number"){var k=j+gv|0;if(4>>0)var @@ -20589,13 +21343,13 @@ V(a){var c=b(I,a),e=b(X,a);if(e){if(1-b(F,c))q(a,[0,c[1],15]);var d=c[2],m=typeof d==="number"?0:17===d[0]?bq(d[1][2])?(aW(a,[0,c[1],37]),1):0:0,h=f(j[20],a,c),i=b(k,a),l=g(h[1],i[1]);return[0,l,[7,[0,e[1],h,i]]]}return c}function -ah(b,a){throw cb}function +ah(b,a){throw ca}function ak(g){var a=e6(ah,g),b=V(a),d=e(0,a);if(typeof d==="number"){var -h=12===d?1:80===d?1:0;if(h)throw cb}if(aI(0,a)){var +h=12===d?1:80===d?1:0;if(h)throw ca}if(aI(0,a)){var f=b[2];if(typeof -f!=="number"&&17===f[0])if(!c(f[1][2],Ff))if(!bJ(a))throw cb;return b}return b}i(k,function(a){var +f!=="number"&&17===f[0])if(!c(f[1][2],Ff))if(!bJ(a))throw ca;return b}return b}i(k,function(a){var f=e(0,a),i=aI(0,a);if(typeof f==="number"){var d=f-6|0;if(85>>0)var @@ -20609,7 +21363,7 @@ c=0;if(!c)if(0===i)return V(a);var g=fb(a,ak);if(g)return g[1];var h=fb(a,ab);return h?h[1]:V(a)});i(W,function(a){var f=h(0,a);d(a,58);if(1-a[16])r(a,25);var -i=am(a,ae),n=9===e(0,a)?1:0,o=n||ca(a),p=1-o,j=i||p,c=j?[0,b(k,a)]:j;if(c)var +i=am(a,ae),n=9===e(0,a)?1:0,o=n||b$(a),p=1-o,j=i||p,c=j?[0,b(k,a)]:j;if(c)var l=c[1][1];else{var m=N(0,a),q=m?m[1]:f;O(a);var l=q;}return[0,g(f,l),[14,[0,c,i]]]});i(D,function(b){var @@ -20760,7 +21514,7 @@ s=0;return[0,o,[5,[0,n,1,i]]]}var j=e(0,a);if(typeof j==="number")if(cU===j)var d=FX,f=1;else -if(cm===j)var +if(cl===j)var d=FY,f=1;else var f=0;else @@ -20774,7 +21528,7 @@ c=b(K,a);if(bJ(a))return c;var i=e(0,a);if(typeof i==="number")if(cU===i)var d=FZ,f=1;else -if(cm===i)var +if(cl===i)var d=F0,f=1;else var f=0;else @@ -20868,7 +21622,7 @@ var m=0;if(!m)var v=[0,f(j[13],F3,a)];var c=v,p=b(z[2],a);}var -i=b(l[4],a),q=b(z[11],a),k=u(l[5],a,n,o),r=k[2],x=b(l[6],i);cd(l[7],a,k[3],x,c,i);var +i=b(l[4],a),q=b(z[11],a),k=u(l[5],a,n,o),r=k[2],x=b(l[6],i);cc(l[7],a,k[3],x,c,i);var y=0===r[0]?0:1,A=[2,[0,c,i,r,n,o,q[2],y,q[1],p]];return[0,g(w,k[1]),A]});i(Q,function(b,e){var f=E(0,b);if(0===e)var a=0;else @@ -20978,7 +21732,7 @@ b=a-103|0;if(!(18>>0))switch(b){case i=T(g);if(c(i,b))r(a,[3,b]);return[0,j,[18,[0,[3,[0,l,i]],k]]]}throw[0,t,F8]});function al(d,b){if(typeof b==="number"){var -a=b-29|0,c=16>>0?19===a?1:0:14<(a-1|0)>>>0?1:0;if(c)return 0}throw cb}i(ab,function(D){var +a=b-29|0,c=16>>0?19===a?1:0:14<(a-1|0)>>>0?1:0;if(c)return 0}throw ca}i(ab,function(D){var a=e6(al,D),E=h(0,a),n=12!==e(F9,a)?1:0,o=n?b(l[1],a):n,p=b(z[2],a);if(aI(0,a))if(0===p)var q=f(j[13],F_,a),s=q[1],c=[0,[0,[0,s,[3,[0,[0,s,q[2]],0,0]]],0],0],v=0,t=0,k=1;else var @@ -20993,7 +21747,7 @@ var m=0;if(!m)var i=e8(a);var w=bJ(i),F=w?12===e(0,i)?1:0:w;if(F)r(i,45);d(i,12);var -x=e8(i),G=l[8],y=br(function(a){return u(G,a,o,0)},x),A=y[2],B=A[1],H=b(l[6],c);cd(l[7],x,A[2],H,0,c);var +x=e8(i),G=l[8],y=br(function(a){return u(G,a,o,0)},x),A=y[2],B=A[1],H=b(l[6],c);cc(l[7],x,A[2],H,0,c);var I=0===B[0]?0:1;return[0,g(E,y[1]),[3,[0,0,c,B,o,0,t,I,v,p]]]});i(A,function(a,c){var h=e(0,a);if(typeof h==="number")if(10===h){d(a,10);return f(A,a,[0,b(k,a),c])}var @@ -21041,7 +21795,7 @@ i=b(F[2],a),j=p(a),e=j[1],o=h(0,a),c=b(F[4],a),f=0,r=0;if(0===n){var k=c[1];if(c[2])q(a,[0,e,63]);else{var w=k?k[2]?0:1:0;if(!w)q(a,[0,e,63]);}}else{var x=c[1]?0:c[2]?0:1;if(!x)q(a,[0,e,62]);}var -s=b(z[9],a),l=u(F[5],a,f,i),d=l[2],t=b(F[6],c);cd(F[7],a,l[3],t,0,c);var +s=b(z[9],a),l=u(F[5],a,f,i),d=l[2],t=b(F[6],c);cc(F[7],a,l[3],t,0,c);var m=0===d[0]?[0,d[1][1],0]:[0,d[1][1],1],v=g(o,m[1]);return[0,j[2],[0,v,[0,0,c,d,f,i,0,m[2],s,r]]]}function v(a,y,c,s,r){var k=e(0,a);if(typeof @@ -21062,7 +21816,7 @@ x=c[1],q=[0,x[1],[17,x]];break;default:var q=c[1];}var m=q,p=H,o=G,f=1,i=0;break;default:var f=0,i=0;}if(i){var -A=h(0,a),B=b(z[2],a),n=b(F[4],a),C=b(z[9],a),t=u(F[5],a,s,r),l=t[2],D=b(F[6],n);cd(F[7],a,t[3],D,0,n);var +A=h(0,a),B=b(z[2],a),n=b(F[4],a),C=b(z[9],a),t=u(F[5],a,s,r),l=t[2],D=b(F[6],n);cc(F[7],a,t[3],D,0,n);var v=0===l[0]?[0,l[1][1],0]:[0,l[1][1],1],E=g(A,v[1]),m=[0,E,[2,[0,0,n,l,s,r,0,v[2],C,B]]],p=0,o=1,f=1;}}else var f=0;if(!f){d(a,80);var @@ -21158,7 +21912,7 @@ k=h(0,a);d(a,1);var c=0;for(;;){var i=e(0,a);if(typeof i==="number"){var -f=i-3|0;if(cL>>0){if(!(cm<(f+1|0)>>>0)){var +f=i-3|0;if(cL>>0){if(!(cl<(f+1|0)>>>0)){var j=m(c),l=h(0,a);d(a,2);return[0,g(k,l),[0,j]]}}else if(6===f){d(a,9);continue}}var c=[0,b(y,a),c];continue}});function @@ -21179,7 +21933,7 @@ var J=G;var U=h(0,a);if(!am(a,9)){var V=7===e(0,a)?1:0,W=V||(5===e(0,a)?1:0);if(W)ac(a);}return[1,[0,g(x,U),[0,l,J,T,f,w]]]}}t(a,w);var -N=h(0,a),O=b(z[2],a),r=b(F[4],a),P=b(z[9],a),A=u(F[5],a,p,o),m=A[2],Q=b(F[6],r);cd(F[7],a,A[3],Q,0,r);var +N=h(0,a),O=b(z[2],a),r=b(F[4],a),P=b(z[9],a),A=u(F[5],a,p,o),m=A[2],Q=b(F[6],r);cc(F[7],a,A[3],Q,0,r);var B=0===m[0]?[0,m[1][1],0]:[0,m[1][1],1],C=B[1],R=g(N,C),S=[0,R,[0,0,r,m,p,o,0,B[2],P,O]];if(0===f){switch(l[0]){case 0:var s=l[1][2][1];if(typeof @@ -21229,7 +21983,7 @@ K=78<=d?81<=d?92===d?1:0:79===d?0:1:5===d?1:9===d?1:0;if(K)return w(a,l,m,q,j,n, z=s(a,0),A=z[2],J=[0,3,z[1],A,i,m];return[0,[0,g(l,A[1]),J]]}}}return w(a,l,m,G[2],j,n,i,k)});function A(q,p){var a=bf(1,q),r=h(0,a),s=cr(p,o(a));d(a,40);var -i=b9(1,a),t=a[7],u=aI(0,i);if(0===t)var +i=b8(1,a),t=a[7],u=aI(0,i);if(0===t)var e=0;else{var n=0!==u?1:0;if(n)var e=0;else @@ -21306,7 +22060,7 @@ c=a[1][1];continue;case b=h(0,a);d(a,9);return[0,b,0]});i(Q,function(a){var i=h(0,a);d(a,32);if(9===e(0,a))var c=0;else -if(ca(a))var +if(b$(a))var c=0;else{var o=f(j[13],0,a),p=o[2];if(1-f(dt[3],p,a[3]))r(a,[4,p]);var b=[0,o],c=1;}if(!c)var @@ -21317,7 +22071,7 @@ var n=m;if(n)q(a,[0,l,23]);O(a);return[0,l,[4,[0,b]]]});i(R,function(a){var i=h(0,a);d(a,35);if(9===e(0,a))var c=0;else -if(ca(a))var +if(b$(a))var c=0;else{var m=f(j[13],0,a),n=m[2];if(1-f(dt[3],n,a[3]))r(a,[4,n]);var b=[0,m],c=1;}if(!c)var @@ -21326,7 +22080,7 @@ k=N(0,a),o=k?k[1]:b?b[1][1]:i,l=g(i,o);if(1-a[8])q(a,[0,l,22]);O(a);return[0,l,[ b=h(0,a);d(a,59);var c=N(0,a),e=c?c[1]:b;O(a);return[0,g(b,e),1]});i(T,function(a){var f=h(0,a);d(a,37);var -i=b_(1,a),k=b(j[2],i);d(a,25);d(a,5);var +i=b9(1,a),k=b(j[2],i);d(a,25);d(a,5);var l=b(j[7],a),m=h(0,a);d(a,6);var c=N(0,a),n=c?c[1]:m;if(9===e(0,a))O(a);return[0,g(f,n),[13,[0,k,l]]]});function al(c,a,f){if(f){var @@ -21353,12 +22107,12 @@ var f=0;else var f=0;if(!f)var -K=b9(1,bp(1,a)),c=[0,[1,b(j[7],K)]],n=0;var +K=b8(1,bp(1,a)),c=[0,[1,b(j[7],K)]],n=0;var o=e(0,a);if(62!==o)if(!w){if(typeof o==="number")if(17===o){al(a,17,c);if(c){var r=c[1],P=0===r[0]?[0,r[1]]:[1,r[1]];d(a,17);var Q=b(j[7],a);d(a,6);var -R=b_(1,a),y=b(j[2],R);return[0,g(m,y[1]),[15,[0,P,Q,y,0]]]}throw[0,t,Gq]}M(function(b){return q(a,b)},n);d(a,9);var +R=b9(1,a),y=b(j[2],R);return[0,g(m,y[1]),[15,[0,P,Q,y,0]]]}throw[0,t,Gq]}M(function(b){return q(a,b)},n);d(a,9);var z=e(0,a);if(typeof z==="number"){var A=9!==z?1:0;if(A)var @@ -21377,16 +22131,16 @@ E=D,u=1;}else var u=0;if(!u)var E=[0,b(j[7],a)];d(a,6);var -S=b_(1,a),G=b(j[2],S);return[0,g(m,G[1]),[14,[0,c,B,E,G]]]}al(a,18,c);if(c){var +S=b9(1,a),G=b(j[2],S);return[0,g(m,G[1]),[14,[0,c,B,E,G]]]}al(a,18,c);if(c){var p=c[1],L=0===p[0]?[0,p[1]]:[1,p[1]];d(a,62);var N=b(j[9],a);d(a,6);var -O=b_(1,a),x=b(j[2],O);return[0,g(m,x[1]),[16,[0,L,N,x,w]]]}throw[0,t,Gp]});i(V,function(a){var +O=b9(1,a),x=b(j[2],O);return[0,g(m,x[1]),[16,[0,L,N,x,w]]]}throw[0,t,Gp]});i(V,function(a){var k=h(0,a);d(a,16);d(a,5);var l=b(j[7],a);d(a,6);e(0,a);var f=cC(0,a)?(au(a,46),b(F[14],a)):b(j[2],a),i=43===e(0,a)?1:0,c=i?(d(a,43),[0,b(j[2],a)]):i,m=c?c[1][1]:f[1];return[0,g(k,m),[2,[0,l,f,c]]]});i(W,function(a){if(1-a[10])r(a,24);var i=h(0,a);d(a,19);if(9===e(0,a))var f=0;else -if(ca(a))var +if(b$(a))var f=0;else var c=[0,b(j[7],a)],f=1;if(!f)var @@ -21438,11 +22192,11 @@ c=b(F[9],a),d=c[1],e=d[1],f=N(0,a),h=f?f[1]:e;O(a);var i=c[2];M(function(b){return q(a,b)},i);var j=d[2];return[0,g(e,h),j]});i($,function(a){var f=h(0,a);d(a,28);var -i=b9(1,a),c=b(F[10],i),j=[18,[0,c[2],1]],e=N(0,a),k=e?e[1]:c[1];O(a);var +i=b8(1,a),c=b(F[10],i),j=[18,[0,c[2],1]],e=N(0,a),k=e?e[1]:c[1];O(a);var l=c[3];M(function(b){return q(a,b)},l);return[0,g(f,k),j]});i(aa,function(a){var e=h(0,a);d(a,25);d(a,5);var f=b(j[7],a);d(a,6);var -i=b_(1,a),c=b(j[2],i);return[0,g(e,c[1]),[12,[0,f,c]]]});i(ab,function(a){var +i=b9(1,a),c=b(j[2],i);return[0,g(e,c[1]),[12,[0,f,c]]]});i(ab,function(a){var f=h(0,a);d(a,26);d(a,5);var i=b(j[7],a);d(a,6);var c=b(j[2],a),e=g(f,c[1]);aW(a,[0,e,26]);return[0,e,[6,[0,i,c]]]});i(ad,function(c){var @@ -21908,7 +22662,7 @@ b(a){return b.fun(a)},fg=function c(a,b){return c.fun(a,b)},dx=function c(a,b){return c.fun(a,b)},dy=function c(a,b){return c.fun(a,b)},cD=function -c(a,b){return c.fun(a,b)},cc=function +c(a,b){return c.fun(a,b)},cb=function c(a,b){return c.fun(a,b)},cE=function b(a){return b.fun(a)},fh=function b(a){return b.fun(a)},dz=function @@ -22195,17 +22949,17 @@ d==="number"){var g=d-49|0;if(!(11>>0))switch(g){case 0:return f(J[15],a,c);case 1:b(dr(a),c);return b(J[17],a);case -11:if(49===e(Hn,a)){b(dr(a),c);return f(J[12],0,a)}break}}return f(cc,[0,c],a)});i(fg,function(c,a){var +11:if(49===e(Hn,a)){b(dr(a),c);return f(J[12],0,a)}break}}return f(cb,[0,c],a)});i(fg,function(c,a){var b=u(dv,c,a,dw),d=f(dx,a,b[1]),e=b[2];return aB(function(b,a){return[0,a,b]},d,e)});i(dx,function(f,d){var a=0;for(;;){var c=e(0,d);if(typeof c==="number")if(G===c)return m(a);if(b(f,c))return m(a);var a=[0,b(dw,d),a];continue}});i(dy,function(a,d){var -b=u(dv,d,a,function(a){return f(cc,0,a)}),c=b[1],e=f(cD,a,c),g=b[2],h=aB(function(b,a){return[0,a,b]},e,g);return[0,h,c[6]]});i(cD,function(g,d){var +b=u(dv,d,a,function(a){return f(cb,0,a)}),c=b[1],e=f(cD,a,c),g=b[2],h=aB(function(b,a){return[0,a,b]},e,g);return[0,h,c[6]]});i(cD,function(g,d){var a=0;for(;;){var c=e(0,d);if(typeof c==="number")if(G===c)return m(a);if(b(g,c))return m(a);var -a=[0,f(cc,0,d),a];continue}});i(cc,function(d,a){var +a=[0,f(cb,0,d),a];continue}});i(cb,function(d,a){var g=d?d[1]:d;if(1-dq(0,a))b(dr(a),g);var c=e(0,a);if(typeof c==="number"){if(27===c)return b(J[24],a);if(28===c)return b(J[3],a)}if(cC(0,a))return b(F[14],a);if(dq(0,a))return f(fl,a,g);if(typeof @@ -22265,7 +23019,7 @@ f=1;}else var f=0;else var -f=0;if(!f)if(b$(c)){au(a,40);H(a);}else{var +f=0;if(!f)if(b_(c)){au(a,40);H(a);}else{var j=typeof b==="number"?4<(b-60|0)>>>0?0:(d(a,b),1):0;if(!j)d(a,0);}var k=g?bq(c)?(aW(a,[0,i,g[1]]),1):0:0;return[0,i,c]});i(fi,function(c,a,k){var @@ -22276,10 +23030,10 @@ b=h(0,a);d(a,1);var c=f(cD,function(a){return 2===a?1:0},a),e=h(0,a);d(a,2);return[0,g(b,e),[0,c]]});i(fk,function(a){var c=h(0,a);d(a,1);var b=f(dy,function(a){return 2===a?1:0},a),e=h(0,a);d(a,2);var -i=b[2],j=[0,b[1]];return[0,g(c,e),j,i]});u(aF,Ho,j,[0,ff,cE,cc,cD,dy,dx,fh,G9,G_,G$,Ha,Hd,dz,Hf,fi,fj,fk,Hg,Hh,Hi,Hb,fl,Hc,He]);var +i=b[2],j=[0,b[1]];return[0,g(c,e),j,i]});u(aF,Ho,j,[0,ff,cE,cb,cD,dy,dx,fh,G9,G_,G$,Ha,Hd,dz,Hf,fi,fj,fk,Hg,Hh,Hi,Hb,fl,Hc,He]);var cF=[0,0];function Hp(r,g,e,q){var -t=r?r[1]:1,M=g?g[1]:g,N=e?e[1]:e,h=[0,N],i=[0,M],u=0,L=i?i[1]:i,o=h?h[1]:h,p=[0,o],d=[0,L],F=d?d[1]:d,l=p?o:p,w=[0],x=1,y=0,z=0,A=0,B=0,C=0,D=s(q),v=ei(q),E=[0,function(a){a[9]=1;return 0},v,D,C,B,A,z,y,x,w,en,en],a=l?l[1]:dn,k=[0,u,E,0,a[5],dk],G=[0,b6(k,0)],n=[0,[0,0],[0,0],bH[1],[0,bH[1]],[0,0],a[6],0,0,0,0,0,0,0,0,0,1,0,0,0,[0,Ev],[0,k],G,[0,F],a,u],J=b(j[1],n),H=m(n[1][1]),I=[0,du[1],0],c=m(aB(function(c,a){var +t=r?r[1]:1,M=g?g[1]:g,N=e?e[1]:e,h=[0,N],i=[0,M],u=0,L=i?i[1]:i,o=h?h[1]:h,p=[0,o],d=[0,L],F=d?d[1]:d,l=p?o:p,w=[0],x=1,y=0,z=0,A=0,B=0,C=0,D=s(q),v=ei(q),E=[0,function(a){a[9]=1;return 0},v,D,C,B,A,z,y,x,w,en,en],a=l?l[1]:dn,k=[0,u,E,0,a[5],dk],G=[0,b5(k,0)],n=[0,[0,0],[0,0],bH[1],[0,bH[1]],[0,0],a[6],0,0,0,0,0,0,0,0,0,1,0,0,0,[0,Ev],[0,k],G,[0,F],a,u],J=b(j[1],n),H=m(n[1][1]),I=[0,du[1],0],c=m(aB(function(c,a){var d=c[2],b=c[1];return f(du[3],a,b)?[0,b,d]:[0,f(du[4],a,b),[0,a,d]]},I,H)[2]),K=t?0!==c?1:0:t;if(K)throw[0,eJ,c];return[0,J,c]}var Hq=Ic,Hr=Ib,Hs=Id,Ht=Ia;function Hu(a){return a}function @@ -22292,27 +23046,27 @@ Hw(b){var a=new Function(cX,"throw e;");return a.call(a,b)}function Hx(a){var -f=a.esproposal_decorators;if(b5(f)){var +f=a.esproposal_decorators;if(b4(f)){var g=dn.slice();g[3]=f|0;var b=g;}else var b=dn;var -h=a.esproposal_class_instance_fields;if(b5(h)){var +h=a.esproposal_class_instance_fields;if(b4(h)){var i=b.slice();i[1]=h|0;var c=i;}else var c=b;var -j=a.esproposal_class_static_fields;if(b5(j)){var +j=a.esproposal_class_static_fields;if(b4(j)){var k=c.slice();k[2]=j|0;var d=k;}else var d=c;var -l=a.esproposal_export_star_as;if(b5(l)){var +l=a.esproposal_export_star_as;if(b4(l)){var m=d.slice();m[4]=l|0;var e=m;}else var e=d;var -n=a.types;if(b5(n)){var +n=a.types;if(b4(n)){var o=e.slice();o[5]=n|0;return o}return e}function Hy(h,c){var i=g4(c,eD)?{}:c,j=bk(h),k=[0,Hx(i)];try{var @@ -22381,7 +23135,9 @@ nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; // offset starts at 0x10000, and each pair of numbers represents an // offset to the next range, and then a size of the range. They were // generated by `bin/generate-identifier-regex.js`. +// eslint-disable-next-line comma-spacing var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 17, 26, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 26, 45, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 785, 52, 76, 44, 33, 24, 27, 35, 42, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 54, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 86, 25, 391, 63, 32, 0, 449, 56, 264, 8, 2, 36, 18, 0, 50, 29, 881, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 881, 68, 12, 0, 67, 12, 65, 0, 32, 6124, 20, 754, 9486, 1, 3071, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 4149, 196, 60, 67, 1213, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42710, 42, 4148, 12, 221, 3, 5761, 10591, 541]; +// eslint-disable-next-line comma-spacing var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 1306, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 52, 0, 13, 2, 49, 13, 10, 2, 4, 9, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 57, 0, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 87, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 423, 9, 838, 7, 2, 7, 17, 9, 57, 21, 2, 13, 19882, 9, 135, 4, 60, 6, 26, 9, 1016, 45, 17, 3, 19723, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 2214, 6, 110, 6, 6, 9, 792487, 239]; // This has a complexity linear to the value of the code. The @@ -22428,6 +23184,9 @@ var defaultOptions = { sourceType: "script", // Source filename. sourceFilename: undefined, + // Line from which to start counting source. Useful for + // integration with other tools. + startLine: 1, // When enabled, a return at the top level is not considered an // error. allowReturnOutsideFunction: false, @@ -22439,7 +23198,16 @@ var defaultOptions = { // An array of plugins to enable plugins: [], // TODO - strictMode: null + strictMode: null, + // Nodes have their start and end characters offsets recorded in + // `start` and `end` properties (directly on the node, rather than + // the `loc` object, which holds line/column data. To also add a + // [semi-standardized][range] `range` property holding a `[start, + // end]` array with the same numbers, set the `ranges` option to + // `true`. + // + // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678 + ranges: false }; // Interpret and default an options object @@ -22676,7 +23444,7 @@ var keywords = { "class": new KeywordTokenType("class"), "extends": new KeywordTokenType("extends", { beforeExpr: beforeExpr }), "export": new KeywordTokenType("export"), - "import": new KeywordTokenType("import"), + "import": new KeywordTokenType("import", { startsExpr: startsExpr }), "yield": new KeywordTokenType("yield", { beforeExpr: beforeExpr, startsExpr: startsExpr }), "null": new KeywordTokenType("null", { startsExpr: startsExpr }), "true": new KeywordTokenType("true", { startsExpr: startsExpr }), @@ -22859,7 +23627,7 @@ var State = function () { this.commentStack = []; this.pos = this.lineStart = 0; - this.curLine = 1; + this.curLine = options.startLine; this.type = types.eof; this.value = null; @@ -22875,6 +23643,8 @@ var State = function () { this.containsEsc = this.containsOctal = false; this.octalPosition = null; + this.invalidTemplateEscapePosition = null; + this.exportedIdentifiers = []; return this; @@ -22965,8 +23735,6 @@ var State = function () { return State; }(); -/* eslint indent: 0 */ - // Object type used to represent tokens. Note that normally, tokens // simply exist as properties on the parser object. This is only // used for the onToken callback and the external tokenizer. @@ -23556,7 +24324,7 @@ var Tokenizer = function () { Tokenizer.prototype.readNumber = function readNumber(startsWithDot) { var start = this.state.pos; - var octal = this.input.charCodeAt(this.state.pos) === 48; + var firstIsZero = this.input.charCodeAt(start) === 48; // '0' var isFloat = false; if (!startsWithDot && this.readInt(10) === null) this.raise(start, "Invalid number"); @@ -23581,10 +24349,12 @@ var Tokenizer = function () { var val = void 0; if (isFloat) { val = parseFloat(str); - } else if (!octal || str.length === 1) { + } else if (!firstIsZero || str.length === 1) { val = parseInt(str, 10); - } else if (/[89]/.test(str) || this.state.strict) { + } else if (this.state.strict) { this.raise(start, "Invalid number"); + } else if (/[89]/.test(str)) { + val = parseInt(str, 10); } else { val = parseInt(str, 8); } @@ -23593,17 +24363,27 @@ var Tokenizer = function () { // Read a string value, interpreting backslash-escapes. - Tokenizer.prototype.readCodePoint = function readCodePoint() { + Tokenizer.prototype.readCodePoint = function readCodePoint(throwOnInvalid) { var ch = this.input.charCodeAt(this.state.pos); var code = void 0; if (ch === 123) { + // '{' var codePos = ++this.state.pos; - code = this.readHexChar(this.input.indexOf("}", this.state.pos) - this.state.pos); + code = this.readHexChar(this.input.indexOf("}", this.state.pos) - this.state.pos, throwOnInvalid); ++this.state.pos; - if (code > 0x10FFFF) this.raise(codePos, "Code point out of bounds"); + if (code === null) { + --this.state.invalidTemplateEscapePosition; // to point to the '\'' instead of the 'u' + } else if (code > 0x10FFFF) { + if (throwOnInvalid) { + this.raise(codePos, "Code point out of bounds"); + } else { + this.state.invalidTemplateEscapePosition = codePos - 2; + return null; + } + } } else { - code = this.readHexChar(4); + code = this.readHexChar(4, throwOnInvalid); } return code; }; @@ -23633,7 +24413,8 @@ var Tokenizer = function () { Tokenizer.prototype.readTmplToken = function readTmplToken() { var out = "", - chunkStart = this.state.pos; + chunkStart = this.state.pos, + containsInvalid = false; for (;;) { if (this.state.pos >= this.input.length) this.raise(this.state.start, "Unterminated template"); var ch = this.input.charCodeAt(this.state.pos); @@ -23649,12 +24430,17 @@ var Tokenizer = function () { } } out += this.input.slice(chunkStart, this.state.pos); - return this.finishToken(types.template, out); + return this.finishToken(types.template, containsInvalid ? null : out); } if (ch === 92) { // '\' out += this.input.slice(chunkStart, this.state.pos); - out += this.readEscapedChar(true); + var escaped = this.readEscapedChar(true); + if (escaped === null) { + containsInvalid = true; + } else { + out += escaped; + } chunkStart = this.state.pos; } else if (isNewLine(ch)) { out += this.input.slice(chunkStart, this.state.pos); @@ -23681,6 +24467,7 @@ var Tokenizer = function () { // Used to read escaped characters Tokenizer.prototype.readEscapedChar = function readEscapedChar(inTemplate) { + var throwOnInvalid = !inTemplate; var ch = this.input.charCodeAt(++this.state.pos); ++this.state.pos; switch (ch) { @@ -23689,9 +24476,17 @@ var Tokenizer = function () { case 114: return "\r"; // 'r' -> '\r' case 120: - return String.fromCharCode(this.readHexChar(2)); // 'x' + { + // 'x' + var code = this.readHexChar(2, throwOnInvalid); + return code === null ? null : String.fromCharCode(code); + } case 117: - return codePointToString(this.readCodePoint()); // 'u' + { + // 'u' + var _code = this.readCodePoint(throwOnInvalid); + return _code === null ? null : codePointToString(_code); + } case 116: return "\t"; // 't' -> '\t' case 98: @@ -23709,6 +24504,7 @@ var Tokenizer = function () { return ""; default: if (ch >= 48 && ch <= 55) { + var codePos = this.state.pos - 1; var octalStr = this.input.substr(this.state.pos - 1, 3).match(/^[0-7]+/)[0]; var octal = parseInt(octalStr, 8); if (octal > 255) { @@ -23716,12 +24512,16 @@ var Tokenizer = function () { octal = parseInt(octalStr, 8); } if (octal > 0) { - if (!this.state.containsOctal) { + if (inTemplate) { + this.state.invalidTemplateEscapePosition = codePos; + return null; + } else if (this.state.strict) { + this.raise(codePos, "Octal literal in strict mode"); + } else if (!this.state.containsOctal) { + // These properties are only used to throw an error for an octal which occurs + // in a directive which occurs prior to a "use strict" directive. this.state.containsOctal = true; - this.state.octalPosition = this.state.pos - 2; - } - if (this.state.strict || inTemplate) { - this.raise(this.state.pos - 2, "Octal literal in strict mode"); + this.state.octalPosition = codePos; } } this.state.pos += octalStr.length - 1; @@ -23731,12 +24531,19 @@ var Tokenizer = function () { } }; - // Used to read character escape sequences ('\x', '\u', '\U'). + // Used to read character escape sequences ('\x', '\u'). - Tokenizer.prototype.readHexChar = function readHexChar(len) { + Tokenizer.prototype.readHexChar = function readHexChar(len, throwOnInvalid) { var codePos = this.state.pos; var n = this.readInt(16, len); - if (n === null) this.raise(codePos, "Bad character escape sequence"); + if (n === null) { + if (throwOnInvalid) { + this.raise(codePos, "Bad character escape sequence"); + } else { + this.state.pos = codePos - 1; + this.state.invalidTemplateEscapePosition = codePos - 1; + } + } return n; }; @@ -23768,7 +24575,7 @@ var Tokenizer = function () { } ++this.state.pos; - var esc = this.readCodePoint(); + var esc = this.readCodePoint(true); if (!(first ? isIdentifierStart : isIdentifierChar)(esc, true)) { this.raise(escStart, "Invalid Unicode escape"); } @@ -23835,7 +24642,6 @@ var Tokenizer = function () { }(); var plugins = {}; -var frozenDeprecatedWildcardPluginList = ["jsx", "doExpressions", "objectRestSpread", "decorators", "classProperties", "exportExtensions", "asyncGenerators", "functionBind", "functionSent", "dynamicImport", "flow"]; var Parser = function (_Tokenizer) { inherits(Parser, _Tokenizer); @@ -23869,10 +24675,6 @@ var Parser = function (_Tokenizer) { }; Parser.prototype.hasPlugin = function hasPlugin(name) { - if (this.plugins["*"] && frozenDeprecatedWildcardPluginList.indexOf(name) > -1) { - return true; - } - return !!this.plugins[name]; }; @@ -23880,29 +24682,7 @@ var Parser = function (_Tokenizer) { this[name] = f(this[name]); }; - Parser.prototype.loadAllPlugins = function loadAllPlugins() { - var _this2 = this; - - // ensure flow plugin loads last - var pluginNames = Object.keys(plugins).filter(function (name) { - return name !== "flow"; - }); - pluginNames.push("flow"); - - pluginNames.forEach(function (name) { - var plugin = plugins[name]; - if (plugin) plugin(_this2); - }); - }; - Parser.prototype.loadPlugins = function loadPlugins(pluginList) { - // TODO: Deprecate "*" option in next major version of Babylon - if (pluginList.indexOf("*") >= 0) { - this.loadAllPlugins(); - - return { "*": true }; - } - var pluginMap = {}; if (pluginList.indexOf("flow") >= 0) { @@ -23913,6 +24693,14 @@ var Parser = function (_Tokenizer) { pluginList.push("flow"); } + if (pluginList.indexOf("estree") >= 0) { + // ensure estree plugin loads first + pluginList = pluginList.filter(function (plugin) { + return plugin !== "estree"; + }); + pluginList.unshift("estree"); + } + for (var _iterator = pluginList, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ref; @@ -24033,7 +24821,6 @@ pp.unexpected = function (pos) { this.raise(pos != null ? pos : this.state.start, messageOrType); }; -/* eslint indent: 0 */ /* eslint max-len: 0 */ var pp$1 = Parser.prototype; @@ -24113,7 +24900,6 @@ pp$1.parseStatement = function (declaration, topLevel) { case types._class: if (!declaration) this.unexpected(); - this.takeDecorators(node); return this.parseClass(node, true); case types._if: @@ -24522,7 +25308,9 @@ pp$1.parseBlock = function (allowDirectives) { return this.finishNode(node, "BlockStatement"); }; -// TODO +pp$1.isValidDirective = function (stmt) { + return stmt.type === "ExpressionStatement" && stmt.expression.type === "StringLiteral" && !stmt.expression.extra.parenthesized; +}; pp$1.parseBlockBody = function (node, allowDirectives, topLevel, end) { node.body = []; @@ -24539,7 +25327,7 @@ pp$1.parseBlockBody = function (node, allowDirectives, topLevel, end) { var stmt = this.parseStatement(true, topLevel); - if (allowDirectives && !parsedNonDirective && stmt.type === "ExpressionStatement" && stmt.expression.type === "StringLiteral" && !stmt.expression.extra.parenthesized) { + if (allowDirectives && !parsedNonDirective && this.isValidDirective(stmt)) { var directive = this.stmtToDirective(stmt); node.directives.push(directive); @@ -24584,14 +25372,13 @@ pp$1.parseFor = function (node, init) { // same from parser's perspective. pp$1.parseForIn = function (node, init, forAwait) { - var type = void 0; + var type = this.match(types._in) ? "ForInStatement" : "ForOfStatement"; if (forAwait) { this.eatContextual("of"); - type = "ForAwaitStatement"; } else { - type = this.match(types._in) ? "ForInStatement" : "ForOfStatement"; this.next(); } + node.await = !!forAwait; node.left = init; node.right = this.parseExpression(); this.expect(types.parenR); @@ -24672,6 +25459,7 @@ pp$1.parseFunctionParams = function (node) { pp$1.parseClass = function (node, isStatement, optionalId) { this.next(); + this.takeDecorators(node); this.parseClassId(node, isStatement, optionalId); this.parseClassSuper(node); this.parseClassBody(node); @@ -24679,11 +25467,17 @@ pp$1.parseClass = function (node, isStatement, optionalId) { }; pp$1.isClassProperty = function () { - return this.match(types.eq) || this.isLineTerminator(); + return this.match(types.eq) || this.match(types.semi) || this.match(types.braceR); }; -pp$1.isClassMutatorStarter = function () { - return false; +pp$1.isClassMethod = function () { + return this.match(types.parenL); +}; + +pp$1.isNonstaticConstructor = function (method) { + return !method.computed && !method.static && (method.key.name === "constructor" || // Identifier + method.key.value === "constructor" // Literal + ); }; pp$1.parseClassBody = function (node) { @@ -24691,7 +25485,6 @@ pp$1.parseClassBody = function (node) { var oldStrict = this.state.strict; this.state.strict = true; - var hadConstructorCall = false; var hadConstructor = false; var decorators = []; var classBody = this.startNode(); @@ -24702,6 +25495,9 @@ pp$1.parseClassBody = function (node) { while (!this.eat(types.braceR)) { if (this.eat(types.semi)) { + if (decorators.length > 0) { + this.raise(this.state.lastTokEnd, "Decorators must not be followed by a semicolon"); + } continue; } @@ -24718,96 +25514,91 @@ pp$1.parseClassBody = function (node) { decorators = []; } - var isConstructorCall = false; - var isMaybeStatic = this.match(types.name) && this.state.value === "static"; - var isGenerator = this.eat(types.star); - var isGetSet = false; - var isAsync = false; - - this.parsePropertyName(method); - - method.static = isMaybeStatic && !this.match(types.parenL); - if (method.static) { - isGenerator = this.eat(types.star); - this.parsePropertyName(method); - } - - if (!isGenerator) { - if (this.isClassProperty()) { + method.static = false; + if (this.match(types.name) && this.state.value === "static") { + var key = this.parseIdentifier(true); // eats 'static' + if (this.isClassMethod()) { + // a method named 'static' + method.kind = "method"; + method.computed = false; + method.key = key; + this.parseClassMethod(classBody, method, false, false); + continue; + } else if (this.isClassProperty()) { + // a property named 'static' + method.computed = false; + method.key = key; classBody.body.push(this.parseClassProperty(method)); continue; } - - if (method.key.type === "Identifier" && !method.computed && this.hasPlugin("classConstructorCall") && method.key.name === "call" && this.match(types.name) && this.state.value === "constructor") { - isConstructorCall = true; - this.parsePropertyName(method); - } + // otherwise something static + method.static = true; } - var isAsyncMethod = !this.match(types.parenL) && !method.computed && method.key.type === "Identifier" && method.key.name === "async"; - if (isAsyncMethod) { - if (this.hasPlugin("asyncGenerators") && this.eat(types.star)) isGenerator = true; - isAsync = true; + if (this.eat(types.star)) { + // a generator + method.kind = "method"; this.parsePropertyName(method); - } - - method.kind = "method"; - - if (!method.computed) { - var key = method.key; - - // handle get/set methods - // eg. class Foo { get bar() {} set bar() {} } - - if (!isAsync && !isGenerator && !this.isClassMutatorStarter() && key.type === "Identifier" && !this.match(types.parenL) && (key.name === "get" || key.name === "set")) { - isGetSet = true; - method.kind = key.name; - key = this.parsePropertyName(method); + if (this.isNonstaticConstructor(method)) { + this.raise(method.key.start, "Constructor can't be a generator"); } - - // disallow invalid constructors - var isConstructor = !isConstructorCall && !method.static && (key.type === "Identifier" && key.name === "constructor" || key.type === "StringLiteral" && key.value === "constructor"); - if (isConstructor) { - if (hadConstructor) this.raise(key.start, "Duplicate constructor in the same class"); - if (isGetSet) this.raise(key.start, "Constructor can't have get/set modifier"); - if (isGenerator) this.raise(key.start, "Constructor can't be a generator"); - if (isAsync) this.raise(key.start, "Constructor can't be an async function"); - method.kind = "constructor"; - hadConstructor = true; + if (!method.computed && method.static && (method.key.name === "prototype" || method.key.value === "prototype")) { + this.raise(method.key.start, "Classes may not have static property named prototype"); } - - // disallow static prototype method - var isStaticPrototype = method.static && (key.type === "Identifier" && key.name === "prototype" || key.type === "StringLiteral" && key.value === "prototype"); - if (isStaticPrototype) { - this.raise(key.start, "Classes may not have static property named prototype"); + this.parseClassMethod(classBody, method, true, false); + } else { + var isSimple = this.match(types.name); + var _key = this.parsePropertyName(method); + if (!method.computed && method.static && (method.key.name === "prototype" || method.key.value === "prototype")) { + this.raise(method.key.start, "Classes may not have static property named prototype"); } - } - - // convert constructor to a constructor call - if (isConstructorCall) { - if (hadConstructorCall) this.raise(method.start, "Duplicate constructor call in the same class"); - method.kind = "constructorCall"; - hadConstructorCall = true; - } - - // disallow decorators on class constructors - if ((method.kind === "constructor" || method.kind === "constructorCall") && method.decorators) { - this.raise(method.start, "You can't attach decorators to a class constructor"); - } - - this.parseClassMethod(classBody, method, isGenerator, isAsync); - - // get methods aren't allowed to have any parameters - // set methods must have exactly 1 parameter - if (isGetSet) { - var paramCount = method.kind === "get" ? 0 : 1; - if (method.params.length !== paramCount) { - var start = method.start; - if (method.kind === "get") { - this.raise(start, "getter should have no params"); + if (this.isClassMethod()) { + // a normal method + if (this.isNonstaticConstructor(method)) { + if (hadConstructor) { + this.raise(_key.start, "Duplicate constructor in the same class"); + } else if (method.decorators) { + this.raise(method.start, "You can't attach decorators to a class constructor"); + } + hadConstructor = true; + method.kind = "constructor"; } else { - this.raise(start, "setter should have exactly one param"); + method.kind = "method"; } + this.parseClassMethod(classBody, method, false, false); + } else if (this.isClassProperty()) { + // a normal property + if (this.isNonstaticConstructor(method)) { + this.raise(method.key.start, "Classes may not have a non-static field named 'constructor'"); + } + classBody.body.push(this.parseClassProperty(method)); + } else if (isSimple && _key.name === "async" && !this.isLineTerminator()) { + // an async method + var isGenerator = this.hasPlugin("asyncGenerators") && this.eat(types.star); + method.kind = "method"; + this.parsePropertyName(method); + if (this.isNonstaticConstructor(method)) { + this.raise(method.key.start, "Constructor can't be an async function"); + } + this.parseClassMethod(classBody, method, isGenerator, true); + } else if (isSimple && (_key.name === "get" || _key.name === "set") && !(this.isLineTerminator() && this.match(types.star))) { + // `get\n*` is an uninitialized property named 'get' followed by a generator. + // a getter or setter + method.kind = _key.name; + this.parsePropertyName(method); + if (this.isNonstaticConstructor(method)) { + this.raise(method.key.start, "Constructor can't have get/set modifier"); + } + this.parseClassMethod(classBody, method, false, false); + this.checkGetterSetterParamCount(method); + } else if (this.isLineTerminator()) { + // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token) + if (this.isNonstaticConstructor(method)) { + this.raise(method.key.start, "Classes may not have a non-static field named 'constructor'"); + } + classBody.body.push(this.parseClassProperty(method)); + } else { + this.unexpected(); } } } @@ -24822,8 +25613,13 @@ pp$1.parseClassBody = function (node) { }; pp$1.parseClassProperty = function (node) { + var noPluginMsg = "You can only use Class Properties when the 'classProperties' plugin is enabled."; + if (!node.typeAnnotation && !this.hasPlugin("classProperties")) { + this.raise(node.start, noPluginMsg); + } + if (this.match(types.eq)) { - if (!this.hasPlugin("classProperties")) this.unexpected(); + if (!this.hasPlugin("classProperties")) this.raise(this.state.start, noPluginMsg); this.next(); node.value = this.parseMaybeAssign(); } else { @@ -24892,6 +25688,11 @@ pp$1.parseExport = function (node) { var needsSemi = false; if (this.eat(types._function)) { expr = this.parseFunction(expr, true, false, false, true); + } else if (this.isContextual("async") && this.lookahead().type === types._function) { + // async function declaration + this.eatContextual("async"); + this.eat(types._function); + expr = this.parseFunction(expr, true, false, true, true); } else if (this.match(types._class)) { expr = this.parseClass(expr, true, true); } else { @@ -25055,7 +25856,7 @@ pp$1.checkDeclaration = function (node) { } } else if (node.type === "ObjectProperty") { this.checkDeclaration(node.value); - } else if (node.type === "RestElement" || node.type === "RestProperty") { + } else if (node.type === "RestElement") { this.checkDeclaration(node.argument); } else if (node.type === "Identifier") { this.checkDuplicateExports(node, node.name); @@ -25111,7 +25912,7 @@ pp$1.parseExportSpecifiers = function () { // Parses import declaration. pp$1.parseImport = function (node) { - this.next(); + this.eat(types._import); // import '...' if (this.match(types.string)) { @@ -25154,6 +25955,11 @@ pp$1.parseImportSpecifiers = function (node) { if (first) { first = false; } else { + // Detect an attempt to deep destructure + if (this.eat(types.colon)) { + this.unexpected(null, "ES2015 named imports do not destructure. Use another statement for destructuring after the import."); + } + this.expect(types.comma); if (this.eat(types.braceR)) break; } @@ -25165,7 +25971,12 @@ pp$1.parseImportSpecifiers = function (node) { pp$1.parseImportSpecifier = function (node) { var specifier = this.startNode(); specifier.imported = this.parseIdentifier(true); - specifier.local = this.eatContextual("as") ? this.parseIdentifier() : specifier.imported.__clone(); + if (this.eatContextual("as")) { + specifier.local = this.parseIdentifier(); + } else { + this.checkReservedWord(specifier.imported.name, specifier.start, true, true); + specifier.local = specifier.imported.__clone(); + } this.checkLVal(specifier.local, true, undefined, "import specifier"); node.specifiers.push(this.finishNode(specifier, "ImportSpecifier")); }; @@ -25177,8 +25988,6 @@ pp$1.parseImportSpecifierDefault = function (id, startPos, startLoc) { return this.finishNode(node, "ImportDefaultSpecifier"); }; -/* eslint indent: 0 */ - var pp$2 = Parser.prototype; // Convert existing expression atom to assignable pattern @@ -25225,8 +26034,8 @@ pp$2.toAssignable = function (node, isBinding, contextDescription) { this.toAssignable(node.value, isBinding, contextDescription); break; - case "SpreadProperty": - node.type = "RestProperty"; + case "SpreadElement": + node.type = "RestElement"; break; case "ArrayExpression": @@ -25276,6 +26085,7 @@ pp$2.toAssignableList = function (exprList, isBinding, contextDescription) { } for (var i = 0; i < end; i++) { var elt = exprList[i]; + if (elt && elt.type === "SpreadElement") this.raise(elt.start, "The rest element has to be the last element when destructuring"); if (elt) this.toAssignable(elt, isBinding, contextDescription); } return exprList; @@ -25299,7 +26109,7 @@ pp$2.parseSpread = function (refShorthandDefaultPos) { pp$2.parseRest = function () { var node = this.startNode(); this.next(); - node.argument = this.parseBindingIdentifier(); + node.argument = this.parseBindingAtom(); return this.finishNode(node, "RestElement"); }; @@ -25312,14 +26122,11 @@ pp$2.parseBindingIdentifier = function () { }; // Parses lvalue (assignable) atom. - pp$2.parseBindingAtom = function () { switch (this.state.type) { case types._yield: - if (this.state.strict || this.state.inGenerator) this.unexpected(); - // fall-through case types.name: - return this.parseIdentifier(true); + return this.parseBindingIdentifier(); case types.bracketL: var node = this.startNode(); @@ -25463,10 +26270,6 @@ pp$2.checkLVal = function (expr, isBinding, checkClashes, contextDescription) { this.checkLVal(expr.left, isBinding, checkClashes, "assignment pattern"); break; - case "RestProperty": - this.checkLVal(expr.argument, isBinding, checkClashes, "rest property"); - break; - case "RestElement": this.checkLVal(expr.argument, isBinding, checkClashes, "rest element"); break; @@ -25479,7 +26282,6 @@ pp$2.checkLVal = function (expr, isBinding, checkClashes, contextDescription) { } }; -/* eslint indent: 0 */ /* eslint max-len: 0 */ // A recursive descent parser operates by defining functions for all @@ -25508,31 +26310,28 @@ var pp$3 = Parser.prototype; // strict mode, init properties are also not allowed to be repeated. pp$3.checkPropClash = function (prop, propHash) { - if (prop.computed) return; + if (prop.computed || prop.kind) return; var key = prop.key; - var name = void 0; - switch (key.type) { - case "Identifier": - name = key.name; - break; + // It is either an Identifier or a String/NumericLiteral + var name = key.type === "Identifier" ? key.name : String(key.value); - case "StringLiteral": - case "NumericLiteral": - name = String(key.value); - break; - - // istanbul ignore next: non-computed property keys are always one of the above - default: - return; - } - - if (name === "__proto__" && !prop.kind) { + if (name === "__proto__") { if (propHash.proto) this.raise(key.start, "Redefinition of __proto__ property"); propHash.proto = true; } }; +// Convenience method to parse an Expression only +pp$3.getExpression = function () { + this.nextToken(); + var expr = this.parseExpression(); + if (!this.match(types.eof)) { + this.unexpected(); + } + return expr; +}; + // ### Expression parsing // These nest, from the most general expression type at the top to @@ -25542,7 +26341,7 @@ pp$3.checkPropClash = function (prop, propHash) { // the AST node that the inner parser gave them in another node. // Parse a full expression. The optional arguments are used to -// forbid the `in` operator (in for loops initalization expressions) +// forbid the `in` operator (in for loops initialization expressions) // and provide reference for storing '=' operator inside shorthand // property assignment in contexts where both object expression // and object pattern might appear (so it's possible to raise @@ -25792,7 +26591,7 @@ pp$3.parseSubscripts = function (base, startPos, startLoc, noCalls) { } else if (this.match(types.backQuote)) { var _node5 = this.startNodeAt(startPos, startLoc); _node5.tag = base; - _node5.quasi = this.parseTemplate(); + _node5.quasi = this.parseTemplate(true); base = this.finishNode(_node5, "TaggedTemplateExpression"); } else { return base; @@ -25818,7 +26617,7 @@ pp$3.parseCallExpressionArguments = function (close, possibleAsyncArrow) { innerParenStart = this.state.start; } - elts.push(this.parseExprListItem(undefined, possibleAsyncArrow ? { start: 0 } : undefined)); + elts.push(this.parseExprListItem(false, possibleAsyncArrow ? { start: 0 } : undefined, possibleAsyncArrow ? { start: 0 } : undefined)); } // we found an async arrow function so let's not allow any inner parens @@ -25867,7 +26666,7 @@ pp$3.parseExprAtom = function (refShorthandDefaultPos) { this.unexpected(); } if (this.match(types.parenL) && this.state.inMethod !== "constructor" && !this.options.allowSuperOutsideMethod) { - this.raise(node.start, "super() outside of class constructor"); + this.raise(node.start, "super() is only valid inside a class constructor. Make sure the method name is spelled exactly as 'constructor'."); } return this.finishNode(node, "Super"); @@ -25981,7 +26780,7 @@ pp$3.parseExprAtom = function (refShorthandDefaultPos) { return this.parseNew(); case types.backQuote: - return this.parseTemplate(); + return this.parseTemplate(false); case types.doubleColon: node = this.startNode(); @@ -26020,10 +26819,13 @@ pp$3.parseMetaProperty = function (node, meta, propertyName) { return this.finishNode(node, "MetaProperty"); }; -pp$3.parseLiteral = function (value, type) { - var node = this.startNode(); +pp$3.parseLiteral = function (value, type, startPos, startLoc) { + startPos = startPos || this.state.start; + startLoc = startLoc || this.state.startLoc; + + var node = this.startNodeAt(startPos, startLoc); this.addExtra(node, "rawValue", value); - this.addExtra(node, "raw", this.input.slice(this.state.start, this.state.end)); + this.addExtra(node, "raw", this.input.slice(startPos, this.state.end)); node.value = value; this.next(); return this.finishNode(node, type); @@ -26067,7 +26869,7 @@ pp$3.parseParenAndDistinguishExpression = function (startPos, startLoc, canBeArr var spreadNodeStartPos = this.state.start; var spreadNodeStartLoc = this.state.startLoc; spreadStart = this.state.start; - exprList.push(this.parseParenItem(this.parseRest(), spreadNodeStartLoc, spreadNodeStartPos)); + exprList.push(this.parseParenItem(this.parseRest(), spreadNodeStartPos, spreadNodeStartLoc)); break; } else { exprList.push(this.parseMaybeAssign(false, refShorthandDefaultPos, this.parseParenItem, refNeedsArrowPos)); @@ -26146,7 +26948,13 @@ pp$3.parseNew = function () { var meta = this.parseIdentifier(true); if (this.eat(types.dot)) { - return this.parseMetaProperty(node, meta, "target"); + var metaProp = this.parseMetaProperty(node, meta, "target"); + + if (!this.state.inFunction) { + this.raise(metaProp.property.start, "new.target can only be used in functions"); + } + + return metaProp; } node.callee = this.parseNoCallExpr(); @@ -26163,8 +26971,15 @@ pp$3.parseNew = function () { // Parse template expression. -pp$3.parseTemplateElement = function () { +pp$3.parseTemplateElement = function (isTagged) { var elem = this.startNode(); + if (this.state.value === null) { + if (!isTagged) { + this.raise(this.state.invalidTemplateEscapePosition, "Invalid escape sequence in template"); + } else { + this.state.invalidTemplateEscapePosition = null; + } + } elem.value = { raw: this.input.slice(this.state.start, this.state.end).replace(/\r\n?/g, "\n"), cooked: this.state.value @@ -26174,17 +26989,17 @@ pp$3.parseTemplateElement = function () { return this.finishNode(elem, "TemplateElement"); }; -pp$3.parseTemplate = function () { +pp$3.parseTemplate = function (isTagged) { var node = this.startNode(); this.next(); node.expressions = []; - var curElt = this.parseTemplateElement(); + var curElt = this.parseTemplateElement(isTagged); node.quasis = [curElt]; while (!curElt.tail) { this.expect(types.dollarBraceL); node.expressions.push(this.parseExpression()); this.expect(types.braceR); - node.quasis.push(curElt = this.parseTemplateElement()); + node.quasis.push(curElt = this.parseTemplateElement(isTagged)); } this.next(); return this.finishNode(node, "TemplateLiteral"); @@ -26226,8 +27041,9 @@ pp$3.parseObj = function (isPattern, refShorthandDefaultPos) { } if (this.hasPlugin("objectRestSpread") && this.match(types.ellipsis)) { - prop = this.parseSpread(); - prop.type = isPattern ? "RestProperty" : "SpreadProperty"; + prop = this.parseSpread(isPattern ? { start: 0 } : undefined); + prop.type = isPattern ? "RestElement" : "SpreadElement"; + if (isPattern) this.toAssignable(prop.argument, true, "object pattern"); node.properties.push(prop); if (isPattern) { var position = this.state.start; @@ -26236,9 +27052,7 @@ pp$3.parseObj = function (isPattern, refShorthandDefaultPos) { } else if (this.eat(types.braceR)) { break; } else if (this.match(types.comma) && this.lookahead().type === types.braceR) { - // TODO: temporary rollback - // this.unexpected(position, "A trailing comma is not permitted after the rest element"); - continue; + this.unexpected(position, "A trailing comma is not permitted after the rest element"); } else { firstRestLocation = position; continue; @@ -26266,6 +27080,7 @@ pp$3.parseObj = function (isPattern, refShorthandDefaultPos) { var asyncId = this.parseIdentifier(); if (this.match(types.colon) || this.match(types.parenL) || this.match(types.braceR) || this.match(types.eq) || this.match(types.comma)) { prop.key = asyncId; + prop.computed = false; } else { isAsync = true; if (this.hasPlugin("asyncGenerators")) isGenerator = this.eat(types.star); @@ -26296,36 +27111,56 @@ pp$3.parseObj = function (isPattern, refShorthandDefaultPos) { return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression"); }; -pp$3.parseObjPropValue = function (prop, startPos, startLoc, isGenerator, isAsync, isPattern, refShorthandDefaultPos) { +pp$3.isGetterOrSetterMethod = function (prop, isPattern) { + return !isPattern && !prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && (this.match(types.string) || // get "string"() {} + this.match(types.num) || // get 1() {} + this.match(types.bracketL) || // get ["string"]() {} + this.match(types.name) || // get foo() {} + this.state.type.keyword // get debugger() {} + ); +}; + +// get methods aren't allowed to have any parameters +// set methods must have exactly 1 parameter +pp$3.checkGetterSetterParamCount = function (method) { + var paramCount = method.kind === "get" ? 0 : 1; + if (method.params.length !== paramCount) { + var start = method.start; + if (method.kind === "get") { + this.raise(start, "getter should have no params"); + } else { + this.raise(start, "setter should have exactly one param"); + } + } +}; + +pp$3.parseObjectMethod = function (prop, isGenerator, isAsync, isPattern) { if (isAsync || isGenerator || this.match(types.parenL)) { if (isPattern) this.unexpected(); prop.kind = "method"; prop.method = true; this.parseMethod(prop, isGenerator, isAsync); + return this.finishNode(prop, "ObjectMethod"); } - if (this.eat(types.colon)) { - prop.value = isPattern ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssign(false, refShorthandDefaultPos); - return this.finishNode(prop, "ObjectProperty"); - } - - if (!isPattern && !prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && !this.match(types.comma) && !this.match(types.braceR)) { + if (this.isGetterOrSetterMethod(prop, isPattern)) { if (isGenerator || isAsync) this.unexpected(); prop.kind = prop.key.name; this.parsePropertyName(prop); - this.parseMethod(prop, false); - var paramCount = prop.kind === "get" ? 0 : 1; - if (prop.params.length !== paramCount) { - var start = prop.start; - if (prop.kind === "get") { - this.raise(start, "getter should have no params"); - } else { - this.raise(start, "setter should have exactly one param"); - } - } + this.parseMethod(prop); + this.checkGetterSetterParamCount(prop); + return this.finishNode(prop, "ObjectMethod"); } +}; + +pp$3.parseObjectProperty = function (prop, startPos, startLoc, isPattern, refShorthandDefaultPos) { + if (this.eat(types.colon)) { + prop.value = isPattern ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssign(false, refShorthandDefaultPos); + + return this.finishNode(prop, "ObjectProperty"); + } if (!prop.computed && prop.key.type === "Identifier") { if (isPattern) { @@ -26339,12 +27174,18 @@ pp$3.parseObjPropValue = function (prop, startPos, startLoc, isGenerator, isAsyn } else { prop.value = prop.key.__clone(); } - prop.shorthand = true; + return this.finishNode(prop, "ObjectProperty"); } +}; - this.unexpected(); +pp$3.parseObjPropValue = function (prop, startPos, startLoc, isGenerator, isAsync, isPattern, refShorthandDefaultPos) { + var node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern) || this.parseObjectProperty(prop, startPos, startLoc, isPattern, refShorthandDefaultPos); + + if (!node) this.unexpected(); + + return node; }; pp$3.parsePropertyName = function (prop) { @@ -26379,7 +27220,7 @@ pp$3.parseMethod = function (node, isGenerator, isAsync) { this.initFunction(node, isAsync); this.expect(types.parenL); node.params = this.parseBindingList(types.parenR); - node.generator = isGenerator; + node.generator = !!isGenerator; this.parseFunctionBody(node); this.state.inMethod = oldInMethod; return node; @@ -26394,8 +27235,32 @@ pp$3.parseArrowExpression = function (node, params, isAsync) { return this.finishNode(node, "ArrowFunctionExpression"); }; -// Parse function body and check parameters. +pp$3.isStrictBody = function (node, isExpression) { + if (!isExpression && node.body.directives.length) { + for (var _iterator2 = node.body.directives, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { + var _ref2; + if (_isArray2) { + if (_i2 >= _iterator2.length) break; + _ref2 = _iterator2[_i2++]; + } else { + _i2 = _iterator2.next(); + if (_i2.done) break; + _ref2 = _i2.value; + } + + var directive = _ref2; + + if (directive.value.value === "use strict") { + return true; + } + } + } + + return false; +}; + +// Parse function body and check parameters. pp$3.parseFunctionBody = function (node, allowExpression) { var isExpression = allowExpression && !this.match(types.braceL); @@ -26420,37 +27285,10 @@ pp$3.parseFunctionBody = function (node, allowExpression) { // If this is a strict mode function, verify that argument names // are not repeated, and it does not try to bind the words `eval` // or `arguments`. - var checkLVal = this.state.strict; - var isStrict = false; + var isStrict = this.isStrictBody(node, isExpression); + // Also check when allowExpression === true for arrow functions + var checkLVal = this.state.strict || allowExpression || isStrict; - // arrow function - if (allowExpression) checkLVal = true; - - // normal function - if (!isExpression && node.body.directives.length) { - for (var _iterator2 = node.body.directives, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var directive = _ref2; - - if (directive.value.value === "use strict") { - isStrict = true; - checkLVal = true; - break; - } - } - } - - // if (isStrict && node.id && node.id.type === "Identifier" && node.id.name === "yield") { this.raise(node.id.start, "Binding yield in strict mode"); } @@ -26508,14 +27346,14 @@ pp$3.parseExprList = function (close, allowEmpty, refShorthandDefaultPos) { return elts; }; -pp$3.parseExprListItem = function (allowEmpty, refShorthandDefaultPos) { +pp$3.parseExprListItem = function (allowEmpty, refShorthandDefaultPos, refNeedsArrowPos) { var elt = void 0; if (allowEmpty && this.match(types.comma)) { elt = null; } else if (this.match(types.ellipsis)) { elt = this.parseSpread(refShorthandDefaultPos); } else { - elt = this.parseMaybeAssign(false, refShorthandDefaultPos, this.parseParenItem); + elt = this.parseMaybeAssign(false, refShorthandDefaultPos, this.parseParenItem, refNeedsArrowPos); } return elt; }; @@ -26526,14 +27364,13 @@ pp$3.parseExprListItem = function (allowEmpty, refShorthandDefaultPos) { pp$3.parseIdentifier = function (liberal) { var node = this.startNode(); + if (!liberal) { + this.checkReservedWord(this.state.value, this.state.start, !!this.state.type.keyword, false); + } if (this.match(types.name)) { - if (!liberal) { - this.checkReservedWord(this.state.value, this.state.start, false, false); - } - node.name = this.state.value; - } else if (liberal && this.state.type.keyword) { + } else if (this.state.type.keyword) { node.name = this.state.type.keyword; } else { this.unexpected(); @@ -26594,14 +27431,15 @@ var pp$4 = Parser.prototype; var commentKeys = ["leadingComments", "trailingComments", "innerComments"]; var Node = function () { - function Node(pos, loc, filename) { + function Node(parser, pos, loc) { classCallCheck(this, Node); this.type = ""; this.start = pos; this.end = 0; this.loc = new SourceLocation(loc); - if (filename) this.loc.filename = filename; + if (parser && parser.options.ranges) this.range = [pos, 0]; + if (parser && parser.filename) this.loc.filename = parser.filename; } Node.prototype.__clone = function __clone() { @@ -26620,17 +27458,18 @@ var Node = function () { }(); pp$4.startNode = function () { - return new Node(this.state.start, this.state.startLoc, this.filename); + return new Node(this, this.state.start, this.state.startLoc); }; pp$4.startNodeAt = function (pos, loc) { - return new Node(pos, loc, this.filename); + return new Node(this, pos, loc); }; function finishNodeAt(node, type, pos, loc) { node.type = type; node.end = pos; node.loc.end = loc; + if (this.options.ranges) node.range[1] = pos; this.processComment(node); return node; } @@ -26647,6 +27486,17 @@ pp$4.finishNodeAt = function (node, type, pos, loc) { return finishNodeAt.call(this, node, type, pos, loc); }; +/** + * Reset the start location of node to the start location of locationNode + */ +pp$4.resetStartLocationFromNode = function (node, locationNode) { + node.start = locationNode.start; + node.loc.start = locationNode.loc.start; + if (this.options.ranges) node.range[0] = locationNode.range[0]; + + return node; +}; + var pp$5 = Parser.prototype; // This function is used to raise exceptions on parse errors. It @@ -26822,12 +27672,318 @@ pp$6.processComment = function (node) { stack.push(node); }; -/* eslint indent: 0 */ -/* eslint max-len: 0 */ - var pp$7 = Parser.prototype; -pp$7.flowParseTypeInitialiser = function (tok) { +pp$7.estreeParseRegExpLiteral = function (_ref) { + var pattern = _ref.pattern, + flags = _ref.flags; + + var regex = null; + try { + regex = new RegExp(pattern, flags); + } catch (e) { + // In environments that don't support these flags value will + // be null as the regex can't be represented natively. + } + var node = this.estreeParseLiteral(regex); + node.regex = { pattern: pattern, flags: flags }; + + return node; +}; + +pp$7.estreeParseLiteral = function (value) { + return this.parseLiteral(value, "Literal"); +}; + +pp$7.directiveToStmt = function (directive) { + var directiveLiteral = directive.value; + + var stmt = this.startNodeAt(directive.start, directive.loc.start); + var expression = this.startNodeAt(directiveLiteral.start, directiveLiteral.loc.start); + + expression.value = directiveLiteral.value; + expression.raw = directiveLiteral.extra.raw; + + stmt.expression = this.finishNodeAt(expression, "Literal", directiveLiteral.end, directiveLiteral.loc.end); + stmt.directive = directiveLiteral.extra.raw.slice(1, -1); + + return this.finishNodeAt(stmt, "ExpressionStatement", directive.end, directive.loc.end); +}; + +function isSimpleProperty(node) { + return node && node.type === "Property" && node.kind === "init" && node.method === false; +} + +var estreePlugin = function (instance) { + instance.extend("checkDeclaration", function (inner) { + return function (node) { + if (isSimpleProperty(node)) { + this.checkDeclaration(node.value); + } else { + inner.call(this, node); + } + }; + }); + + instance.extend("checkGetterSetterParamCount", function () { + return function (prop) { + var paramCount = prop.kind === "get" ? 0 : 1; + if (prop.value.params.length !== paramCount) { + var start = prop.start; + if (prop.kind === "get") { + this.raise(start, "getter should have no params"); + } else { + this.raise(start, "setter should have exactly one param"); + } + } + }; + }); + + instance.extend("checkLVal", function (inner) { + return function (expr, isBinding, checkClashes) { + var _this = this; + + switch (expr.type) { + case "ObjectPattern": + expr.properties.forEach(function (prop) { + _this.checkLVal(prop.type === "Property" ? prop.value : prop, isBinding, checkClashes, "object destructuring pattern"); + }); + break; + default: + for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + args[_key - 3] = arguments[_key]; + } + + inner.call.apply(inner, [this, expr, isBinding, checkClashes].concat(args)); + } + }; + }); + + instance.extend("checkPropClash", function () { + return function (prop, propHash) { + if (prop.computed || !isSimpleProperty(prop)) return; + + var key = prop.key; + // It is either an Identifier or a String/NumericLiteral + var name = key.type === "Identifier" ? key.name : String(key.value); + + if (name === "__proto__") { + if (propHash.proto) this.raise(key.start, "Redefinition of __proto__ property"); + propHash.proto = true; + } + }; + }); + + instance.extend("isStrictBody", function () { + return function (node, isExpression) { + if (!isExpression && node.body.body.length > 0) { + for (var _iterator = node.body.body, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + var _ref2; + + if (_isArray) { + if (_i >= _iterator.length) break; + _ref2 = _iterator[_i++]; + } else { + _i = _iterator.next(); + if (_i.done) break; + _ref2 = _i.value; + } + + var directive = _ref2; + + if (directive.type === "ExpressionStatement" && directive.expression.type === "Literal") { + if (directive.expression.value === "use strict") return true; + } else { + // Break for the first non literal expression + break; + } + } + } + + return false; + }; + }); + + instance.extend("isValidDirective", function () { + return function (stmt) { + return stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && typeof stmt.expression.value === "string" && (!stmt.expression.extra || !stmt.expression.extra.parenthesized); + }; + }); + + instance.extend("parseBlockBody", function (inner) { + return function (node) { + var _this2 = this; + + for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + inner.call.apply(inner, [this, node].concat(args)); + + node.directives.reverse().forEach(function (directive) { + node.body.unshift(_this2.directiveToStmt(directive)); + }); + delete node.directives; + }; + }); + + instance.extend("parseClassMethod", function (inner) { + return function (classBody) { + for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + args[_key3 - 1] = arguments[_key3]; + } + + inner.call.apply(inner, [this, classBody].concat(args)); + + var body = classBody.body; + body[body.length - 1].type = "MethodDefinition"; + }; + }); + + instance.extend("parseExprAtom", function (inner) { + return function () { + switch (this.state.type) { + case types.regexp: + return this.estreeParseRegExpLiteral(this.state.value); + + case types.num: + case types.string: + return this.estreeParseLiteral(this.state.value); + + case types._null: + return this.estreeParseLiteral(null); + + case types._true: + return this.estreeParseLiteral(true); + + case types._false: + return this.estreeParseLiteral(false); + + default: + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + return inner.call.apply(inner, [this].concat(args)); + } + }; + }); + + instance.extend("parseLiteral", function (inner) { + return function () { + for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } + + var node = inner.call.apply(inner, [this].concat(args)); + node.raw = node.extra.raw; + delete node.extra; + + return node; + }; + }); + + instance.extend("parseMethod", function (inner) { + return function (node) { + var funcNode = this.startNode(); + funcNode.kind = node.kind; // provide kind, so inner method correctly sets state + + for (var _len6 = arguments.length, args = Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { + args[_key6 - 1] = arguments[_key6]; + } + + funcNode = inner.call.apply(inner, [this, funcNode].concat(args)); + delete funcNode.kind; + node.value = this.finishNode(funcNode, "FunctionExpression"); + + return node; + }; + }); + + instance.extend("parseObjectMethod", function (inner) { + return function () { + for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + args[_key7] = arguments[_key7]; + } + + var node = inner.call.apply(inner, [this].concat(args)); + + if (node) { + if (node.kind === "method") node.kind = "init"; + node.type = "Property"; + } + + return node; + }; + }); + + instance.extend("parseObjectProperty", function (inner) { + return function () { + for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { + args[_key8] = arguments[_key8]; + } + + var node = inner.call.apply(inner, [this].concat(args)); + + if (node) { + node.kind = "init"; + node.type = "Property"; + } + + return node; + }; + }); + + instance.extend("toAssignable", function (inner) { + return function (node, isBinding) { + for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) { + args[_key9 - 2] = arguments[_key9]; + } + + if (isSimpleProperty(node)) { + this.toAssignable.apply(this, [node.value, isBinding].concat(args)); + + return node; + } else if (node.type === "ObjectExpression") { + node.type = "ObjectPattern"; + for (var _iterator2 = node.properties, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { + var _ref3; + + if (_isArray2) { + if (_i2 >= _iterator2.length) break; + _ref3 = _iterator2[_i2++]; + } else { + _i2 = _iterator2.next(); + if (_i2.done) break; + _ref3 = _i2.value; + } + + var prop = _ref3; + + if (prop.kind === "get" || prop.kind === "set") { + this.raise(prop.key.start, "Object pattern can't contain getter or setter"); + } else if (prop.method) { + this.raise(prop.key.start, "Object pattern can't contain methods"); + } else { + this.toAssignable(prop, isBinding, "object destructuring pattern"); + } + } + + return node; + } + + return inner.call.apply(inner, [this, node, isBinding].concat(args)); + }; + }); +}; + +/* eslint max-len: 0 */ + +var primitiveTypes = ["any", "mixed", "empty", "bool", "boolean", "number", "string", "void", "null"]; + +var pp$8 = Parser.prototype; + +pp$8.flowParseTypeInitialiser = function (tok) { var oldInType = this.state.inType; this.state.inType = true; this.expect(tok || types.colon); @@ -26837,13 +27993,52 @@ pp$7.flowParseTypeInitialiser = function (tok) { return type; }; -pp$7.flowParseDeclareClass = function (node) { +pp$8.flowParsePredicate = function () { + var node = this.startNode(); + var moduloLoc = this.state.startLoc; + var moduloPos = this.state.start; + this.expect(types.modulo); + var checksLoc = this.state.startLoc; + this.expectContextual("checks"); + // Force '%' and 'checks' to be adjacent + if (moduloLoc.line !== checksLoc.line || moduloLoc.column !== checksLoc.column - 1) { + this.raise(moduloPos, "Spaces between ´%´ and ´checks´ are not allowed here."); + } + if (this.eat(types.parenL)) { + node.value = this.parseExpression(); + this.expect(types.parenR); + return this.finishNode(node, "DeclaredPredicate"); + } else { + return this.finishNode(node, "InferredPredicate"); + } +}; + +pp$8.flowParseTypeAndPredicateInitialiser = function () { + var oldInType = this.state.inType; + this.state.inType = true; + this.expect(types.colon); + var type = null; + var predicate = null; + if (this.match(types.modulo)) { + this.state.inType = oldInType; + predicate = this.flowParsePredicate(); + } else { + type = this.flowParseType(); + this.state.inType = oldInType; + if (this.match(types.modulo)) { + predicate = this.flowParsePredicate(); + } + } + return [type, predicate]; +}; + +pp$8.flowParseDeclareClass = function (node) { this.next(); - this.flowParseInterfaceish(node, true); + this.flowParseInterfaceish(node); return this.finishNode(node, "DeclareClass"); }; -pp$7.flowParseDeclareFunction = function (node) { +pp$8.flowParseDeclareFunction = function (node) { this.next(); var id = node.id = this.parseIdentifier(); @@ -26862,9 +28057,14 @@ pp$7.flowParseDeclareFunction = function (node) { typeNode.params = tmp.params; typeNode.rest = tmp.rest; this.expect(types.parenR); - typeNode.returnType = this.flowParseTypeInitialiser(); + + var _flowParseTypeAndPred = this.flowParseTypeAndPredicateInitialiser(); + + typeNode.returnType = _flowParseTypeAndPred[0]; + node.predicate = _flowParseTypeAndPred[1]; typeContainer.typeAnnotation = this.finishNode(typeNode, "FunctionTypeAnnotation"); + id.typeAnnotation = this.finishNode(typeContainer, "TypeAnnotation"); this.finishNode(id, id.type); @@ -26874,7 +28074,7 @@ pp$7.flowParseDeclareFunction = function (node) { return this.finishNode(node, "DeclareFunction"); }; -pp$7.flowParseDeclare = function (node) { +pp$8.flowParseDeclare = function (node) { if (this.match(types._class)) { return this.flowParseDeclareClass(node); } else if (this.match(types._function)) { @@ -26896,14 +28096,14 @@ pp$7.flowParseDeclare = function (node) { } }; -pp$7.flowParseDeclareVariable = function (node) { +pp$8.flowParseDeclareVariable = function (node) { this.next(); node.id = this.flowParseTypeAnnotatableIdentifier(); this.semicolon(); return this.finishNode(node, "DeclareVariable"); }; -pp$7.flowParseDeclareModule = function (node) { +pp$8.flowParseDeclareModule = function (node) { this.next(); if (this.match(types.string)) { @@ -26916,11 +28116,22 @@ pp$7.flowParseDeclareModule = function (node) { var body = bodyNode.body = []; this.expect(types.braceL); while (!this.match(types.braceR)) { - var node2 = this.startNode(); + var _bodyNode = this.startNode(); - this.expectContextual("declare", "Unexpected token. Only declares are allowed inside declare module"); + if (this.match(types._import)) { + var lookahead = this.lookahead(); + if (lookahead.value !== "type" && lookahead.value !== "typeof") { + this.unexpected(null, "Imports within a `declare module` body must always be `import type` or `import typeof`"); + } - body.push(this.flowParseDeclare(node2)); + this.parseImport(_bodyNode); + } else { + this.expectContextual("declare", "Only declares and type imports are allowed inside declare module"); + + _bodyNode = this.flowParseDeclare(_bodyNode, true); + } + + body.push(_bodyNode); } this.expect(types.braceR); @@ -26928,7 +28139,7 @@ pp$7.flowParseDeclareModule = function (node) { return this.finishNode(node, "DeclareModule"); }; -pp$7.flowParseDeclareModuleExports = function (node) { +pp$8.flowParseDeclareModuleExports = function (node) { this.expectContextual("module"); this.expect(types.dot); this.expectContextual("exports"); @@ -26938,13 +28149,13 @@ pp$7.flowParseDeclareModuleExports = function (node) { return this.finishNode(node, "DeclareModuleExports"); }; -pp$7.flowParseDeclareTypeAlias = function (node) { +pp$8.flowParseDeclareTypeAlias = function (node) { this.next(); this.flowParseTypeAlias(node); return this.finishNode(node, "DeclareTypeAlias"); }; -pp$7.flowParseDeclareInterface = function (node) { +pp$8.flowParseDeclareInterface = function (node) { this.next(); this.flowParseInterfaceish(node); return this.finishNode(node, "DeclareInterface"); @@ -26952,7 +28163,7 @@ pp$7.flowParseDeclareInterface = function (node) { // Interfaces -pp$7.flowParseInterfaceish = function (node, allowStatic) { +pp$8.flowParseInterfaceish = function (node) { node.id = this.parseIdentifier(); if (this.isRelational("<")) { @@ -26977,10 +28188,10 @@ pp$7.flowParseInterfaceish = function (node, allowStatic) { } while (this.eat(types.comma)); } - node.body = this.flowParseObjectType(allowStatic); + node.body = this.flowParseObjectType(true, false, false); }; -pp$7.flowParseInterfaceExtends = function () { +pp$8.flowParseInterfaceExtends = function () { var node = this.startNode(); node.id = this.flowParseQualifiedTypeIdentifier(); @@ -26993,15 +28204,23 @@ pp$7.flowParseInterfaceExtends = function () { return this.finishNode(node, "InterfaceExtends"); }; -pp$7.flowParseInterface = function (node) { - this.flowParseInterfaceish(node, false); +pp$8.flowParseInterface = function (node) { + this.flowParseInterfaceish(node); return this.finishNode(node, "InterfaceDeclaration"); }; +pp$8.flowParseRestrictedIdentifier = function (liberal) { + if (primitiveTypes.indexOf(this.state.value) > -1) { + this.raise(this.state.start, "Cannot overwrite primitive type " + this.state.value); + } + + return this.parseIdentifier(liberal); +}; + // Type aliases -pp$7.flowParseTypeAlias = function (node) { - node.id = this.parseIdentifier(); +pp$8.flowParseTypeAlias = function (node) { + node.id = this.flowParseRestrictedIdentifier(); if (this.isRelational("<")) { node.typeParameters = this.flowParseTypeParameterDeclaration(); @@ -27017,7 +28236,7 @@ pp$7.flowParseTypeAlias = function (node) { // Type annotations -pp$7.flowParseTypeParameter = function () { +pp$8.flowParseTypeParameter = function () { var node = this.startNode(); var variance = this.flowParseVariance(); @@ -27035,7 +28254,7 @@ pp$7.flowParseTypeParameter = function () { return this.finishNode(node, "TypeParameter"); }; -pp$7.flowParseTypeParameterDeclaration = function () { +pp$8.flowParseTypeParameterDeclaration = function () { var oldInType = this.state.inType; var node = this.startNode(); node.params = []; @@ -27062,7 +28281,7 @@ pp$7.flowParseTypeParameterDeclaration = function () { return this.finishNode(node, "TypeParameterDeclaration"); }; -pp$7.flowParseTypeParameterInstantiation = function () { +pp$8.flowParseTypeParameterInstantiation = function () { var node = this.startNode(); var oldInType = this.state.inType; node.params = []; @@ -27083,11 +28302,11 @@ pp$7.flowParseTypeParameterInstantiation = function () { return this.finishNode(node, "TypeParameterInstantiation"); }; -pp$7.flowParseObjectPropertyKey = function () { +pp$8.flowParseObjectPropertyKey = function () { return this.match(types.num) || this.match(types.string) ? this.parseExprAtom() : this.parseIdentifier(true); }; -pp$7.flowParseObjectTypeIndexer = function (node, isStatic, variance) { +pp$8.flowParseObjectTypeIndexer = function (node, isStatic, variance) { node.static = isStatic; this.expect(types.bracketL); @@ -27102,11 +28321,14 @@ pp$7.flowParseObjectTypeIndexer = function (node, isStatic, variance) { node.value = this.flowParseTypeInitialiser(); node.variance = variance; + // Finish node first to not include a possible semicolon in the locations + var indexer = this.finishNode(node, "ObjectTypeIndexer"); this.flowObjectTypeSemicolon(); - return this.finishNode(node, "ObjectTypeIndexer"); + + return indexer; }; -pp$7.flowParseObjectTypeMethodish = function (node) { +pp$8.flowParseObjectTypeMethodish = function (node) { node.params = []; node.rest = null; node.typeParameters = null; @@ -27132,7 +28354,7 @@ pp$7.flowParseObjectTypeMethodish = function (node) { return this.finishNode(node, "FunctionTypeAnnotation"); }; -pp$7.flowParseObjectTypeMethod = function (startPos, startLoc, isStatic, key) { +pp$8.flowParseObjectTypeMethod = function (startPos, startLoc, isStatic, key) { var node = this.startNodeAt(startPos, startLoc); node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(startPos, startLoc)); node.static = isStatic; @@ -27142,7 +28364,7 @@ pp$7.flowParseObjectTypeMethod = function (startPos, startLoc, isStatic, key) { return this.finishNode(node, "ObjectTypeProperty"); }; -pp$7.flowParseObjectTypeCallProperty = function (node, isStatic) { +pp$8.flowParseObjectTypeCallProperty = function (node, isStatic) { var valueNode = this.startNode(); node.static = isStatic; node.value = this.flowParseObjectTypeMethodish(valueNode); @@ -27150,7 +28372,7 @@ pp$7.flowParseObjectTypeCallProperty = function (node, isStatic) { return this.finishNode(node, "ObjectTypeCallProperty"); }; -pp$7.flowParseObjectType = function (allowStatic, allowExact) { +pp$8.flowParseObjectType = function (allowStatic, allowExact, allowSpread) { var oldInType = this.state.inType; this.state.inType = true; @@ -27187,35 +28409,47 @@ pp$7.flowParseObjectType = function (allowStatic, allowExact) { isStatic = true; } - var variancePos = this.state.start; var variance = this.flowParseVariance(); if (this.match(types.bracketL)) { nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance)); } else if (this.match(types.parenL) || this.isRelational("<")) { if (variance) { - this.unexpected(variancePos); + this.unexpected(variance.start); } - nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, allowStatic)); + nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic)); } else { - propertyKey = this.flowParseObjectPropertyKey(); - if (this.isRelational("<") || this.match(types.parenL)) { - // This is a method property + if (this.match(types.ellipsis)) { + if (!allowSpread) { + this.unexpected(null, "Spread operator cannnot appear in class or interface definitions"); + } if (variance) { - this.unexpected(variancePos); + this.unexpected(variance.start, "Spread properties cannot have variance"); } - nodeStart.properties.push(this.flowParseObjectTypeMethod(startPos, startLoc, isStatic, propertyKey)); - } else { - if (this.eat(types.question)) { - optional = true; - } - node.key = propertyKey; - node.value = this.flowParseTypeInitialiser(); - node.optional = optional; - node.static = isStatic; - node.variance = variance; + this.expect(types.ellipsis); + node.argument = this.flowParseType(); this.flowObjectTypeSemicolon(); - nodeStart.properties.push(this.finishNode(node, "ObjectTypeProperty")); + nodeStart.properties.push(this.finishNode(node, "ObjectTypeSpreadProperty")); + } else { + propertyKey = this.flowParseObjectPropertyKey(); + if (this.isRelational("<") || this.match(types.parenL)) { + // This is a method property + if (variance) { + this.unexpected(variance.start); + } + nodeStart.properties.push(this.flowParseObjectTypeMethod(startPos, startLoc, isStatic, propertyKey)); + } else { + if (this.eat(types.question)) { + optional = true; + } + node.key = propertyKey; + node.value = this.flowParseTypeInitialiser(); + node.optional = optional; + node.static = isStatic; + node.variance = variance; + this.flowObjectTypeSemicolon(); + nodeStart.properties.push(this.finishNode(node, "ObjectTypeProperty")); + } } } @@ -27231,13 +28465,13 @@ pp$7.flowParseObjectType = function (allowStatic, allowExact) { return out; }; -pp$7.flowObjectTypeSemicolon = function () { +pp$8.flowObjectTypeSemicolon = function () { if (!this.eat(types.semi) && !this.eat(types.comma) && !this.match(types.braceR) && !this.match(types.braceBarR)) { this.unexpected(); } }; -pp$7.flowParseQualifiedTypeIdentifier = function (startPos, startLoc, id) { +pp$8.flowParseQualifiedTypeIdentifier = function (startPos, startLoc, id) { startPos = startPos || this.state.start; startLoc = startLoc || this.state.startLoc; var node = id || this.parseIdentifier(); @@ -27252,7 +28486,7 @@ pp$7.flowParseQualifiedTypeIdentifier = function (startPos, startLoc, id) { return node; }; -pp$7.flowParseGenericType = function (startPos, startLoc, id) { +pp$8.flowParseGenericType = function (startPos, startLoc, id) { var node = this.startNodeAt(startPos, startLoc); node.typeParameters = null; @@ -27265,14 +28499,14 @@ pp$7.flowParseGenericType = function (startPos, startLoc, id) { return this.finishNode(node, "GenericTypeAnnotation"); }; -pp$7.flowParseTypeofType = function () { +pp$8.flowParseTypeofType = function () { var node = this.startNode(); this.expect(types._typeof); node.argument = this.flowParsePrimaryType(); return this.finishNode(node, "TypeofTypeAnnotation"); }; -pp$7.flowParseTupleType = function () { +pp$8.flowParseTupleType = function () { var node = this.startNode(); node.types = []; this.expect(types.bracketL); @@ -27286,7 +28520,7 @@ pp$7.flowParseTupleType = function () { return this.finishNode(node, "TupleTypeAnnotation"); }; -pp$7.flowParseFunctionTypeParam = function () { +pp$8.flowParseFunctionTypeParam = function () { var name = null; var optional = false; var typeAnnotation = null; @@ -27307,7 +28541,7 @@ pp$7.flowParseFunctionTypeParam = function () { return this.finishNode(node, "FunctionTypeParam"); }; -pp$7.reinterpretTypeAsFunctionTypeParam = function (type) { +pp$8.reinterpretTypeAsFunctionTypeParam = function (type) { var node = this.startNodeAt(type.start, type.loc); node.name = null; node.optional = false; @@ -27315,11 +28549,11 @@ pp$7.reinterpretTypeAsFunctionTypeParam = function (type) { return this.finishNode(node, "FunctionTypeParam"); }; -pp$7.flowParseFunctionTypeParams = function () { +pp$8.flowParseFunctionTypeParams = function () { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var ret = { params: params, rest: null }; - while (this.match(types.name)) { + while (!this.match(types.parenR) && !this.match(types.ellipsis)) { ret.params.push(this.flowParseFunctionTypeParam()); if (!this.match(types.parenR)) { this.expect(types.comma); @@ -27331,7 +28565,7 @@ pp$7.flowParseFunctionTypeParams = function () { return ret; }; -pp$7.flowIdentToTypeAnnotation = function (startPos, startLoc, node, id) { +pp$8.flowIdentToTypeAnnotation = function (startPos, startLoc, node, id) { switch (id.name) { case "any": return this.finishNode(node, "AnyTypeAnnotation"); @@ -27363,7 +28597,7 @@ pp$7.flowIdentToTypeAnnotation = function (startPos, startLoc, node, id) { // The parsing of types roughly parallels the parsing of expressions, and // primary types are kind of like primary expressions...they're the // primitives with which other types are constructed. -pp$7.flowParsePrimaryType = function () { +pp$8.flowParsePrimaryType = function () { var startPos = this.state.start; var startLoc = this.state.startLoc; var node = this.startNode(); @@ -27377,10 +28611,10 @@ pp$7.flowParsePrimaryType = function () { return this.flowIdentToTypeAnnotation(startPos, startLoc, node, this.parseIdentifier()); case types.braceL: - return this.flowParseObjectType(false, false); + return this.flowParseObjectType(false, false, true); case types.braceBarL: - return this.flowParseObjectType(false, true); + return this.flowParseObjectType(false, true, true); case types.bracketL: return this.flowParseTupleType(); @@ -27450,11 +28684,7 @@ pp$7.flowParsePrimaryType = function () { return this.finishNode(node, "FunctionTypeAnnotation"); case types.string: - node.value = this.state.value; - this.addExtra(node, "rawValue", node.value); - this.addExtra(node, "raw", this.input.slice(this.state.start, this.state.end)); - this.next(); - return this.finishNode(node, "StringLiteralTypeAnnotation"); + return this.parseLiteral(this.state.value, "StringLiteralTypeAnnotation"); case types._true:case types._false: node.value = this.match(types._true); @@ -27464,21 +28694,14 @@ pp$7.flowParsePrimaryType = function () { case types.plusMin: if (this.state.value === "-") { this.next(); - if (!this.match(types.num)) this.unexpected(); + if (!this.match(types.num)) this.unexpected(null, "Unexpected token, expected number"); - node.value = -this.state.value; - this.addExtra(node, "rawValue", node.value); - this.addExtra(node, "raw", this.input.slice(this.state.start, this.state.end)); - this.next(); - return this.finishNode(node, "NumericLiteralTypeAnnotation"); + return this.parseLiteral(-this.state.value, "NumberLiteralTypeAnnotation", node.start, node.loc.start); } + this.unexpected(); case types.num: - node.value = this.state.value; - this.addExtra(node, "rawValue", node.value); - this.addExtra(node, "raw", this.input.slice(this.state.start, this.state.end)); - this.next(); - return this.finishNode(node, "NumericLiteralTypeAnnotation"); + return this.parseLiteral(this.state.value, "NumberLiteralTypeAnnotation"); case types._null: node.value = this.match(types._null); @@ -27492,7 +28715,7 @@ pp$7.flowParsePrimaryType = function () { case types.star: this.next(); - return this.finishNode(node, "ExistentialTypeParam"); + return this.finishNode(node, "ExistsTypeAnnotation"); default: if (this.state.type.keyword === "typeof") { @@ -27503,7 +28726,7 @@ pp$7.flowParsePrimaryType = function () { this.unexpected(); }; -pp$7.flowParsePostfixType = function () { +pp$8.flowParsePostfixType = function () { var startPos = this.state.start, startLoc = this.state.startLoc; var type = this.flowParsePrimaryType(); @@ -27517,7 +28740,7 @@ pp$7.flowParsePostfixType = function () { return type; }; -pp$7.flowParsePrefixType = function () { +pp$8.flowParsePrefixType = function () { var node = this.startNode(); if (this.eat(types.question)) { node.typeAnnotation = this.flowParsePrefixType(); @@ -27527,7 +28750,7 @@ pp$7.flowParsePrefixType = function () { } }; -pp$7.flowParseAnonFunctionWithoutParens = function () { +pp$8.flowParseAnonFunctionWithoutParens = function () { var param = this.flowParsePrefixType(); if (!this.state.noAnonFunctionType && this.eat(types.arrow)) { var node = this.startNodeAt(param.start, param.loc); @@ -27540,7 +28763,7 @@ pp$7.flowParseAnonFunctionWithoutParens = function () { return param; }; -pp$7.flowParseIntersectionType = function () { +pp$8.flowParseIntersectionType = function () { var node = this.startNode(); this.eat(types.bitwiseAND); var type = this.flowParseAnonFunctionWithoutParens(); @@ -27551,7 +28774,7 @@ pp$7.flowParseIntersectionType = function () { return node.types.length === 1 ? type : this.finishNode(node, "IntersectionTypeAnnotation"); }; -pp$7.flowParseUnionType = function () { +pp$8.flowParseUnionType = function () { var node = this.startNode(); this.eat(types.bitwiseOR); var type = this.flowParseIntersectionType(); @@ -27562,7 +28785,7 @@ pp$7.flowParseUnionType = function () { return node.types.length === 1 ? type : this.finishNode(node, "UnionTypeAnnotation"); }; -pp$7.flowParseType = function () { +pp$8.flowParseType = function () { var oldInType = this.state.inType; this.state.inType = true; var type = this.flowParseUnionType(); @@ -27570,14 +28793,14 @@ pp$7.flowParseType = function () { return type; }; -pp$7.flowParseTypeAnnotation = function () { +pp$8.flowParseTypeAnnotation = function () { var node = this.startNode(); node.typeAnnotation = this.flowParseTypeInitialiser(); return this.finishNode(node, "TypeAnnotation"); }; -pp$7.flowParseTypeAnnotatableIdentifier = function () { - var ident = this.parseIdentifier(); +pp$8.flowParseTypeAnnotatableIdentifier = function () { + var ident = this.flowParseRestrictedIdentifier(); if (this.match(types.colon)) { ident.typeAnnotation = this.flowParseTypeAnnotation(); this.finishNode(ident, ident.type); @@ -27585,21 +28808,23 @@ pp$7.flowParseTypeAnnotatableIdentifier = function () { return ident; }; -pp$7.typeCastToParameter = function (node) { +pp$8.typeCastToParameter = function (node) { node.expression.typeAnnotation = node.typeAnnotation; return this.finishNodeAt(node.expression, node.expression.type, node.typeAnnotation.end, node.typeAnnotation.loc.end); }; -pp$7.flowParseVariance = function () { +pp$8.flowParseVariance = function () { var variance = null; if (this.match(types.plusMin)) { + variance = this.startNode(); if (this.state.value === "+") { - variance = "plus"; - } else if (this.state.value === "-") { - variance = "minus"; + variance.kind = "plus"; + } else { + variance.kind = "minus"; } this.next(); + this.finishNode(variance, "Variance"); } return variance; }; @@ -27611,7 +28836,15 @@ var flowPlugin = function (instance) { if (this.match(types.colon) && !allowExpression) { // if allowExpression is true then we're parsing an arrow function and if // there's a return type then it's been handled elsewhere - node.returnType = this.flowParseTypeAnnotation(); + var typeNode = this.startNode(); + + var _flowParseTypeAndPred2 = this.flowParseTypeAndPredicateInitialiser(); + + typeNode.typeAnnotation = _flowParseTypeAndPred2[0]; + node.predicate = _flowParseTypeAndPred2[1]; + + + node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, "TypeAnnotation") : null; } return inner.call(this, node, allowExpression); @@ -27685,14 +28918,14 @@ var flowPlugin = function (instance) { }); instance.extend("parseParenItem", function (inner) { - return function (node, startLoc, startPos) { - node = inner.call(this, node, startLoc, startPos); + return function (node, startPos, startLoc) { + node = inner.call(this, node, startPos, startLoc); if (this.eat(types.question)) { node.optional = true; } if (this.match(types.colon)) { - var typeCastNode = this.startNodeAt(startLoc, startPos); + var typeCastNode = this.startNodeAt(startPos, startLoc); typeCastNode.expression = node; typeCastNode.typeAnnotation = this.flowParseTypeAnnotation(); @@ -27821,9 +29054,14 @@ var flowPlugin = function (instance) { // parse an item inside a expression list eg. `(NODE, NODE)` where NODE represents // the position where this function is called instance.extend("parseExprListItem", function (inner) { - return function (allowEmpty, refShorthandDefaultPos) { + return function () { var container = this.startNode(); - var node = inner.call(this, allowEmpty, refShorthandDefaultPos); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var node = inner.call.apply(inner, [this].concat(args)); if (this.match(types.colon)) { container._exprListItem = true; container.expression = node; @@ -27846,7 +29084,6 @@ var flowPlugin = function (instance) { // parse class property type annotations instance.extend("parseClassProperty", function (inner) { return function (node) { - delete node.variancePos; if (this.match(types.colon)) { node.typeAnnotation = this.flowParseTypeAnnotation(); } @@ -27854,6 +29091,13 @@ var flowPlugin = function (instance) { }; }); + // determine whether or not we're currently in the position where a class method would appear + instance.extend("isClassMethod", function (inner) { + return function () { + return this.isRelational("<") || inner.call(this); + }; + }); + // determine whether or not we're currently in the position where a class property would appear instance.extend("isClassProperty", function (inner) { return function () { @@ -27862,18 +29106,21 @@ var flowPlugin = function (instance) { }); // parse type parameters for class methods - instance.extend("parseClassMethod", function () { - return function (classBody, method, isGenerator, isAsync) { + instance.extend("parseClassMethod", function (inner) { + return function (classBody, method) { if (method.variance) { - this.unexpected(method.variancePos); + this.unexpected(method.variance.start); } delete method.variance; - delete method.variancePos; if (this.isRelational("<")) { method.typeParameters = this.flowParseTypeParameterDeclaration(); } - this.parseMethod(method, isGenerator, isAsync); - classBody.body.push(this.finishNode(method, "ClassMethod")); + + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + inner.call.apply(inner, [this, classBody, method].concat(args)); }; }); @@ -27903,11 +29150,9 @@ var flowPlugin = function (instance) { instance.extend("parsePropertyName", function (inner) { return function (node) { - var variancePos = this.state.start; var variance = this.flowParseVariance(); var key = inner.call(this, node); node.variance = variance; - node.variancePos = variancePos; return key; }; }); @@ -27916,10 +29161,9 @@ var flowPlugin = function (instance) { instance.extend("parseObjPropValue", function (inner) { return function (prop) { if (prop.variance) { - this.unexpected(prop.variancePos); + this.unexpected(prop.variance.start); } delete prop.variance; - delete prop.variancePos; var typeParameters = void 0; @@ -27953,8 +29197,8 @@ var flowPlugin = function (instance) { instance.extend("parseMaybeDefault", function (inner) { return function () { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; } var node = inner.apply(this, args); @@ -28004,9 +29248,10 @@ var flowPlugin = function (instance) { specifierTypeKind = "typeof"; } + var isBinding = false; if (this.isContextual("as")) { var as_ident = this.parseIdentifier(true); - if (specifierTypeKind !== null && !this.match(types.name)) { + if (specifierTypeKind !== null && !this.match(types.name) && !this.state.type.keyword) { // `import {type as ,` or `import {type as }` specifier.imported = as_ident; specifier.importKind = specifierTypeKind; @@ -28015,22 +29260,31 @@ var flowPlugin = function (instance) { // `import {type as foo` specifier.imported = firstIdent; specifier.importKind = null; - specifier.local = this.parseIdentifier(false); + specifier.local = this.parseIdentifier(); } - } else if (specifierTypeKind !== null && this.match(types.name)) { + } else if (specifierTypeKind !== null && (this.match(types.name) || this.state.type.keyword)) { // `import {type foo` specifier.imported = this.parseIdentifier(true); specifier.importKind = specifierTypeKind; - specifier.local = this.eatContextual("as") ? this.parseIdentifier(false) : specifier.imported.__clone(); - } else { - if (firstIdent.name === "typeof") { - this.unexpected(firstIdentLoc, "Cannot import a variable named `typeof`"); + if (this.eatContextual("as")) { + specifier.local = this.parseIdentifier(); + } else { + isBinding = true; + specifier.local = specifier.imported.__clone(); } + } else { + isBinding = true; specifier.imported = firstIdent; specifier.importKind = null; specifier.local = specifier.imported.__clone(); } + if ((node.importKind === "type" || node.importKind === "typeof") && (specifier.importKind === "type" || specifier.importKind === "typeof")) { + this.raise(firstIdentLoc, "`The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements`"); + } + + if (isBinding) this.checkReservedWord(specifier.local.name, specifier.start, true, true); + this.checkLVal(specifier.local, true, undefined, "import specifier"); node.specifiers.push(this.finishNode(specifier, "ImportSpecifier")); }; @@ -28092,8 +29346,8 @@ var flowPlugin = function (instance) { return function () { var jsxError = null; - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; } if (types.jsxTagStart && this.match(types.jsxTagStart)) { @@ -28111,10 +29365,10 @@ var flowPlugin = function (instance) { } } - // Need to push something onto the context to stop - // the JSX plugin from messing with the tokens - this.state.context.push(types$1.parenExpression); if (jsxError != null || this.isRelational("<")) { + // Need to push something onto the context to stop + // the JSX plugin from messing with the tokens + this.state.context.push(types$1.parenExpression); var arrowExpression = void 0; var typeParameters = void 0; try { @@ -28122,12 +29376,15 @@ var flowPlugin = function (instance) { arrowExpression = inner.apply(this, args); arrowExpression.typeParameters = typeParameters; - arrowExpression.start = typeParameters.start; - arrowExpression.loc.start = typeParameters.loc.start; + this.resetStartLocationFromNode(arrowExpression, typeParameters); } catch (err) { + this.state.context.pop(); + throw jsxError || err; } + this.state.context.pop(); + if (arrowExpression.type === "ArrowFunctionExpression") { return arrowExpression; } else if (jsxError != null) { @@ -28136,7 +29393,6 @@ var flowPlugin = function (instance) { this.raise(typeParameters.start, "Expected an arrow function after this type parameter declaration"); } } - this.state.context.pop(); return inner.apply(this, args); }; @@ -28150,13 +29406,22 @@ var flowPlugin = function (instance) { try { var oldNoAnonFunctionType = this.state.noAnonFunctionType; this.state.noAnonFunctionType = true; - var returnType = this.flowParseTypeAnnotation(); + + var typeNode = this.startNode(); + + var _flowParseTypeAndPred3 = this.flowParseTypeAndPredicateInitialiser(); + + typeNode.typeAnnotation = _flowParseTypeAndPred3[0]; + node.predicate = _flowParseTypeAndPred3[1]; + + this.state.noAnonFunctionType = oldNoAnonFunctionType; if (this.canInsertSemicolon()) this.unexpected(); if (!this.match(types.arrow)) this.unexpected(); + // assign after it is clear it is an arrow - node.returnType = returnType; + node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, "TypeAnnotation") : null; } catch (err) { if (err instanceof SyntaxError) { this.state = state; @@ -28176,88 +29441,8 @@ var flowPlugin = function (instance) { return this.match(types.colon) || inner.call(this); }; }); - - instance.extend("isClassMutatorStarter", function (inner) { - return function () { - if (this.isRelational("<")) { - return true; - } else { - return inner.call(this); - } - }; - }); }; -// Adapted from String.fromcodepoint to export the function without modifying String -/*! https://mths.be/fromcodepoint v0.2.1 by @mathias */ - -// The MIT License (MIT) -// Copyright (c) Mathias Bynens -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -// associated documentation files (the "Software"), to deal in the Software without restriction, -// including without limitation the rights to use, copy, modify, merge, publish, distribute, -// sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT -// NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -var fromCodePoint = String.fromCodePoint; - -if (!fromCodePoint) { - (function () { - var stringFromCharCode = String.fromCharCode; - var floor = Math.floor; - fromCodePoint = function fromCodePoint() { - var MAX_SIZE = 0x4000; - var codeUnits = []; - var highSurrogate = void 0; - var lowSurrogate = void 0; - var index = -1; - var length = arguments.length; - if (!length) { - return ""; - } - var result = ""; - while (++index < length) { - var codePoint = Number(arguments[index]); - if (!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` - codePoint < 0 || // not a valid Unicode code point - codePoint > 0x10FFFF || // not a valid Unicode code point - floor(codePoint) != codePoint // not an integer - ) { - throw RangeError("Invalid code point: " + codePoint); - } - if (codePoint <= 0xFFFF) { - // BMP code point - codeUnits.push(codePoint); - } else { - // Astral code point; split in surrogate halves - // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - codePoint -= 0x10000; - highSurrogate = (codePoint >> 10) + 0xD800; - lowSurrogate = codePoint % 0x400 + 0xDC00; - codeUnits.push(highSurrogate, lowSurrogate); - } - if (index + 1 == length || codeUnits.length > MAX_SIZE) { - result += stringFromCharCode.apply(null, codeUnits); - codeUnits.length = 0; - } - } - return result; - }; - })(); -} - -var fromCodePoint$1 = fromCodePoint; - var XHTMLEntities = { quot: "\"", amp: "&", @@ -28514,8 +29699,6 @@ var XHTMLEntities = { diams: "\u2666" }; -/* eslint indent: 0 */ - var HEX_NUMBER = /^[\da-fA-F]+$/; var DECIMAL_NUMBER = /^\d+$/; @@ -28544,11 +29727,11 @@ types.jsxTagEnd.updateContext = function (prevType) { } }; -var pp$8 = Parser.prototype; +var pp$9 = Parser.prototype; // Reads inline JSX contents token. -pp$8.jsxReadToken = function () { +pp$9.jsxReadToken = function () { var out = ""; var chunkStart = this.state.pos; for (;;) { @@ -28591,7 +29774,7 @@ pp$8.jsxReadToken = function () { } }; -pp$8.jsxReadNewLine = function (normalizeCRLF) { +pp$9.jsxReadNewLine = function (normalizeCRLF) { var ch = this.input.charCodeAt(this.state.pos); var out = void 0; ++this.state.pos; @@ -28607,7 +29790,7 @@ pp$8.jsxReadNewLine = function (normalizeCRLF) { return out; }; -pp$8.jsxReadString = function (quote) { +pp$9.jsxReadString = function (quote) { var out = ""; var chunkStart = ++this.state.pos; for (;;) { @@ -28634,7 +29817,7 @@ pp$8.jsxReadString = function (quote) { return this.finishToken(types.string, out); }; -pp$8.jsxReadEntity = function () { +pp$9.jsxReadEntity = function () { var str = ""; var count = 0; var entity = void 0; @@ -28647,10 +29830,10 @@ pp$8.jsxReadEntity = function () { if (str[0] === "#") { if (str[1] === "x") { str = str.substr(2); - if (HEX_NUMBER.test(str)) entity = fromCodePoint$1(parseInt(str, 16)); + if (HEX_NUMBER.test(str)) entity = String.fromCodePoint(parseInt(str, 16)); } else { str = str.substr(1); - if (DECIMAL_NUMBER.test(str)) entity = fromCodePoint$1(parseInt(str, 10)); + if (DECIMAL_NUMBER.test(str)) entity = String.fromCodePoint(parseInt(str, 10)); } } else { entity = XHTMLEntities[str]; @@ -28673,7 +29856,7 @@ pp$8.jsxReadEntity = function () { // Also assumes that first character was already checked // by isIdentifierStart in readToken. -pp$8.jsxReadWord = function () { +pp$9.jsxReadWord = function () { var ch = void 0; var start = this.state.pos; do { @@ -28700,7 +29883,7 @@ function getQualifiedJSXName(object) { // Parse next token as JSX identifier -pp$8.jsxParseIdentifier = function () { +pp$9.jsxParseIdentifier = function () { var node = this.startNode(); if (this.match(types.jsxName)) { node.name = this.state.value; @@ -28715,7 +29898,7 @@ pp$8.jsxParseIdentifier = function () { // Parse namespaced identifier. -pp$8.jsxParseNamespacedName = function () { +pp$9.jsxParseNamespacedName = function () { var startPos = this.state.start; var startLoc = this.state.startLoc; var name = this.jsxParseIdentifier(); @@ -28730,7 +29913,7 @@ pp$8.jsxParseNamespacedName = function () { // Parses element name in any form - namespaced, member // or single identifier. -pp$8.jsxParseElementName = function () { +pp$9.jsxParseElementName = function () { var startPos = this.state.start; var startLoc = this.state.startLoc; var node = this.jsxParseNamespacedName(); @@ -28745,7 +29928,7 @@ pp$8.jsxParseElementName = function () { // Parses any type of JSX attribute value. -pp$8.jsxParseAttributeValue = function () { +pp$9.jsxParseAttributeValue = function () { var node = void 0; switch (this.state.type) { case types.braceL: @@ -28758,9 +29941,7 @@ pp$8.jsxParseAttributeValue = function () { case types.jsxTagStart: case types.string: - node = this.parseExprAtom(); - node.extra = null; - return node; + return this.parseExprAtom(); default: this.raise(this.state.start, "JSX value should be either an expression or a quoted JSX text"); @@ -28771,14 +29952,14 @@ pp$8.jsxParseAttributeValue = function () { // and so it should start at the end of last read token (left brace) and finish // at the beginning of the next one (right brace). -pp$8.jsxParseEmptyExpression = function () { +pp$9.jsxParseEmptyExpression = function () { var node = this.startNodeAt(this.state.lastTokEnd, this.state.lastTokEndLoc); return this.finishNodeAt(node, "JSXEmptyExpression", this.state.start, this.state.startLoc); }; // Parse JSX spread child -pp$8.jsxParseSpreadChild = function () { +pp$9.jsxParseSpreadChild = function () { var node = this.startNode(); this.expect(types.braceL); this.expect(types.ellipsis); @@ -28791,7 +29972,7 @@ pp$8.jsxParseSpreadChild = function () { // Parses JSX expression enclosed into curly brackets. -pp$8.jsxParseExpressionContainer = function () { +pp$9.jsxParseExpressionContainer = function () { var node = this.startNode(); this.next(); if (this.match(types.braceR)) { @@ -28805,7 +29986,7 @@ pp$8.jsxParseExpressionContainer = function () { // Parses following JSX attribute name-value pair. -pp$8.jsxParseAttribute = function () { +pp$9.jsxParseAttribute = function () { var node = this.startNode(); if (this.eat(types.braceL)) { this.expect(types.ellipsis); @@ -28820,7 +30001,7 @@ pp$8.jsxParseAttribute = function () { // Parses JSX opening tag starting after "<". -pp$8.jsxParseOpeningElementAt = function (startPos, startLoc) { +pp$9.jsxParseOpeningElementAt = function (startPos, startLoc) { var node = this.startNodeAt(startPos, startLoc); node.attributes = []; node.name = this.jsxParseElementName(); @@ -28834,7 +30015,7 @@ pp$8.jsxParseOpeningElementAt = function (startPos, startLoc) { // Parses JSX closing tag starting after "