From cc46bb54781617d8a39bff1b0b024eeb768dbd69 Mon Sep 17 00:00:00 2001 From: inikulin Date: Sun, 21 Sep 2014 15:58:33 +0400 Subject: [PATCH 01/12] Start UAEParser implementation --- lib/tokenization/preprocessor.js | 29 +++++++++++---- lib/tree_construction/parser.js | 44 +++++++++++++---------- lib/ua_embeddable/parser_controller.js | 21 +++++++++++ lib/ua_embeddable/ua_embeddable_parser.js | 37 +++++++++++++++++++ 4 files changed, 105 insertions(+), 26 deletions(-) create mode 100644 lib/ua_embeddable/parser_controller.js create mode 100644 lib/ua_embeddable/ua_embeddable_parser.js diff --git a/lib/tokenization/preprocessor.js b/lib/tokenization/preprocessor.js index dea0d05cb..0ca40aa85 100644 --- a/lib/tokenization/preprocessor.js +++ b/lib/tokenization/preprocessor.js @@ -24,22 +24,37 @@ function getSurrogatePairCodePoint(cp1, cp2) { } //Preprocessor +//NOTE: HTML input preprocessing +//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream) var Preprocessor = module.exports = function (html) { - //NOTE: All U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters. - //Any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character - //must be ignored. - this.html = html.replace(CARRIAGE_RETURN_NEW_LINE_REGEX, '\n'); + this.write(html); //NOTE: one leading U+FEFF BYTE ORDER MARK character must be ignored if any are present in the input stream. this.pos = this.html.charCodeAt(0) === $.BOM ? 0 : -1; - this.lastCharPos = this.html.length - 1; this.gapStack = []; this.lastGapPos = -1; }; -//NOTE: HTML input preprocessing -//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream) +Preprocessor.prototype.write = function (html) { + //NOTE: All U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters. + //Any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character + //must be ignored. + html = html.replace(CARRIAGE_RETURN_NEW_LINE_REGEX, '\n'); + + if (this.html) { + this.html = this.html.substring(0, this.pos + 1) + + html + + this.html.substring(this.pos + 1, this.html.length); + + } + else + this.html = html; + + + this.lastCharPos = this.html.length - 1; +}; + Preprocessor.prototype.advanceAndPeekCodePoint = function () { this.pos++; diff --git a/lib/tree_construction/parser.js b/lib/tree_construction/parser.js index 450429caa..ea25d111d 100644 --- a/lib/tree_construction/parser.js +++ b/lib/tree_construction/parser.js @@ -360,6 +360,7 @@ Parser.prototype._reset = function (html, document, fragmentContext) { this.document = document; this.fragmentContext = fragmentContext; + this.scriptHandler = null; this.headElement = null; this.formElement = null; @@ -376,29 +377,32 @@ Parser.prototype._reset = function (html, document, fragmentContext) { }; //Parsing loop -Parser.prototype._runParsingLoop = function () { - while (!this.stopped) { - this._setupTokenizerCDATAMode(); +Parser.prototype._iterateParsingLoop = function () { + this._setupTokenizerCDATAMode(); - var token = this.tokenizer.getNextToken(); + var token = this.tokenizer.getNextToken(); - if (this.skipNextNewLine) { - this.skipNextNewLine = false; + if (this.skipNextNewLine) { + this.skipNextNewLine = false; - if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN && token.chars[0] === '\n') { - if (token.chars.length === 1) - continue; + if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN && token.chars[0] === '\n') { + if (token.chars.length === 1) + return; - token.chars = token.chars.substr(1); - } + token.chars = token.chars.substr(1); } + } - if (this._shouldProcessTokenInForeignContent(token)) - this._processTokenInForeignContent(token); + if (this._shouldProcessTokenInForeignContent(token)) + this._processTokenInForeignContent(token); - else - this._processToken(token); - } + else + this._processToken(token); +}; + +Parser.prototype._runParsingLoop = function () { + while (!this.stopped) + this._iterateParsingLoop(); }; //Text parsing @@ -1860,10 +1864,12 @@ function endTagInBody(p, token) { //12.2.5.4.8 The "text" insertion mode //------------------------------------------------------------------ function endTagInText(p, token) { - //NOTE: we are not in interactive user agent, so we don't process script here and just pop it out of the open - //element stack like any other end tag. - p.openElements.pop(); + var textParentElement = p.openElements.pop(); + p.insertionMode = p.originalInsertionMode; + + if (!p.fragmentContext && p.scriptHandler && token.tagName === $.SCRIPT) + p.scriptHandler(document, textParentElement); } function eofInText(p, token) { diff --git a/lib/ua_embeddable/parser_controller.js b/lib/ua_embeddable/parser_controller.js new file mode 100644 index 000000000..23893695b --- /dev/null +++ b/lib/ua_embeddable/parser_controller.js @@ -0,0 +1,21 @@ +var ParserController = exports.ParserController = function (parser) { + this.parser = parser; + this.suspended = false; +}; + +ParserController.prototype.suspend = function () { + this.parser.suspended = this.suspended = true; +}; + +ParserController.prototype.resume = function () { + this.parser.suspended = this.suspended = false; + this.parser._runParsingLoop(); +}; + +ParserController.prototype.documentWrite = function (html) { + this.parser.tokenizer.preprocessor.write(html); +}; + +ParserController.prototype.setScriptHandler = function (handler) { + this.parser.scriptHandler = handler; +}; \ No newline at end of file diff --git a/lib/ua_embeddable/ua_embeddable_parser.js b/lib/ua_embeddable/ua_embeddable_parser.js new file mode 100644 index 000000000..76b7ea8cc --- /dev/null +++ b/lib/ua_embeddable/ua_embeddable_parser.js @@ -0,0 +1,37 @@ +var Parser = require('../tree_construction/parser'), + ParserController = require('./parser_controller'); + +var UAEmbeddableParser = function (treeAdapter) { + this.treeAdapter = treeAdapter; +}; + +//API +UAEmbeddableParser.prototype.parseDocument = function (html, callback) { + //NOTE: this should be reentrant, so we create new parser + var parser = new Parser(this.treeAdapter), + parserController = new ParserController(parser); + + //NOTE: override parser methods + parser._runParsingLoop = function () { + while (!parserController.suspended && !this.stopped) + this._iterateParsingLoop(); + + if (this.stopped) + callback(this.document); + }; + + //NOTE: wait while parserController will be adopted by calling code, then + //start parsing + process.nextTick(function () { + parser.parse(html); + }); + + return parserController; +}; + +UAEmbeddableParser.prototype.parseInnerHtml = function (innerHtml, contextElement) { + //NOTE: this should be reentrant, so we create new parser + var parser = new Parser(this.treeAdapter); + + return parser.parseFragment(innerHtml, contextElement); +}; \ No newline at end of file From bdbf326bbd480c05b960556f81dfba6bc970fdf7 Mon Sep 17 00:00:00 2001 From: inikulin Date: Mon, 22 Sep 2014 07:43:23 +0400 Subject: [PATCH 02/12] Take script handler out of ParserController --- lib/ua_embeddable/parser_controller.js | 18 ++++--- lib/ua_embeddable/ua_embeddable_parser.js | 7 ++- test/fixtures/parser_test.js | 55 +++------------------- test/fixtures/simple_api_parser_test.js | 4 +- test/fixtures/tree_serializer_test.js | 4 +- test/fixtures/ua_embeddable_parser_test.js | 1 + test/test_utils.js | 53 +++++++++++++++++++-- 7 files changed, 81 insertions(+), 61 deletions(-) create mode 100644 test/fixtures/ua_embeddable_parser_test.js diff --git a/lib/ua_embeddable/parser_controller.js b/lib/ua_embeddable/parser_controller.js index 23893695b..2b4787dbb 100644 --- a/lib/ua_embeddable/parser_controller.js +++ b/lib/ua_embeddable/parser_controller.js @@ -3,19 +3,25 @@ var ParserController = exports.ParserController = function (parser) { this.suspended = false; }; +ParserController.prototype._setSuspended = function (suspend) { + if(this.suspended && suspend) + throw 'parse5: Parser was already suspended. Please, check your control flow logic.'; + + else if(!this.suspended && !suspend) + throw 'parse5: Parser was already resumed. Please, check your control flow logic.'; + + return suspend; +}; + ParserController.prototype.suspend = function () { - this.parser.suspended = this.suspended = true; + this._setSuspended(true); }; ParserController.prototype.resume = function () { - this.parser.suspended = this.suspended = false; + this._setSuspended(false); this.parser._runParsingLoop(); }; ParserController.prototype.documentWrite = function (html) { this.parser.tokenizer.preprocessor.write(html); }; - -ParserController.prototype.setScriptHandler = function (handler) { - this.parser.scriptHandler = handler; -}; \ No newline at end of file diff --git a/lib/ua_embeddable/ua_embeddable_parser.js b/lib/ua_embeddable/ua_embeddable_parser.js index 76b7ea8cc..7ad6a244a 100644 --- a/lib/ua_embeddable/ua_embeddable_parser.js +++ b/lib/ua_embeddable/ua_embeddable_parser.js @@ -6,11 +6,16 @@ var UAEmbeddableParser = function (treeAdapter) { }; //API -UAEmbeddableParser.prototype.parseDocument = function (html, callback) { +UAEmbeddableParser.prototype.parseDocument = function (html, scriptHandler, callback) { + //NOTE: scriptHandler is an optional arg + callback = callback || scriptHandler; + //NOTE: this should be reentrant, so we create new parser var parser = new Parser(this.treeAdapter), parserController = new ParserController(parser); + parser.scriptHandler = scriptHandler; + //NOTE: override parser methods parser._runParsingLoop = function () { while (!parserController.suspended && !this.stopped) diff --git a/test/fixtures/parser_test.js b/test/fixtures/parser_test.js index 61612d441..61616a81d 100644 --- a/test/fixtures/parser_test.js +++ b/test/fixtures/parser_test.js @@ -5,53 +5,6 @@ var fs = require('fs'), TestUtils = require('../test_utils'); TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapterName, treeAdapter) { - function loadTests() { - var dataDirPath = path.join(__dirname, '../data/tree_construction'), - testSetFileNames = fs.readdirSync(dataDirPath), - testIdx = 0, - tests = []; - - testSetFileNames.forEach(function (fileName) { - var filePath = path.join(dataDirPath, fileName), - testSet = fs.readFileSync(filePath).toString(), - setName = fileName.replace('.dat', ''), - testDescrs = [], - curDirective = '', - curDescr = null; - - testSet.split(/\r?\n/).forEach(function (line) { - if (line === '#data') { - curDescr = {}; - testDescrs.push(curDescr); - } - - if (line[0] === '#') { - curDirective = line; - curDescr[curDirective] = []; - } - - else - curDescr[curDirective].push(line); - }); - - testDescrs.forEach(function (descr) { - var fragmentContextTagName = descr['#document-fragment'] && descr['#document-fragment'].join(''); - - tests.push({ - idx: ++testIdx, - setName: setName, - input: descr['#data'].join('\r\n'), - expected: descr['#document'].join('\n'), - expectedErrors: descr['#errors'], - fragmentContext: fragmentContextTagName && - treeAdapter.createElement(fragmentContextTagName, HTML.NAMESPACES.HTML, []) - }); - }); - }); - - return tests; - } - function getFullTestName(test) { return ['Parser - ', test.idx, '.', test.setName, ' - ', test.input].join(''); } @@ -146,11 +99,15 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt return str; } + var testDataDir = path.join(__dirname, '../data/tree_construction'); + //Here we go.. - loadTests().forEach(function (test) { + TestUtils.loadTreeConstructionTestData(testDataDir, treeAdapter).forEach(function (test) { _test[getFullTestName(test)] = function (t) { var parser = new Parser(treeAdapter), - result = test.fragmentContext ? parser.parseFragment(test.input, test.fragmentContext) : parser.parse(test.input), + result = test.fragmentContext ? + parser.parseFragment(test.input, test.fragmentContext) : + parser.parse(test.input), serializedResult = serializeNodeList(treeAdapter.getChildNodes(result), 0); t.strictEqual(serializedResult, test.expected, getAssertionMessage(serializedResult, test.expected)); diff --git a/test/fixtures/simple_api_parser_test.js b/test/fixtures/simple_api_parser_test.js index 6ac7fc311..f6c6ea47e 100644 --- a/test/fixtures/simple_api_parser_test.js +++ b/test/fixtures/simple_api_parser_test.js @@ -13,7 +13,9 @@ function sanitizeForComparison(str) { .toLowerCase(); } -TestUtils.loadSerializationTestData(path.join(__dirname, '../data/simple_api_parsing')).forEach(function (test) { +var testDataDir = path.join(__dirname, '../data/simple_api_parsing'); + +TestUtils.loadSerializationTestData(testDataDir).forEach(function (test) { exports[getFullTestName(test)] = function (t) { //NOTE: the idea of the test is to serialize back given HTML using SimpleApiParser handlers var result = '', diff --git a/test/fixtures/tree_serializer_test.js b/test/fixtures/tree_serializer_test.js index d331060d4..01f020a3c 100644 --- a/test/fixtures/tree_serializer_test.js +++ b/test/fixtures/tree_serializer_test.js @@ -73,8 +73,10 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt return ['TreeSerializer - ', test.idx, '.', test.name].join(''); } + var testDataDir = path.join(__dirname, '../data/tree_serialization'); + //Here we go.. - TestUtils.loadSerializationTestData(path.join(__dirname, '../data/tree_serialization')).forEach(function (test) { + TestUtils.loadSerializationTestData(testDataDir).forEach(function (test) { _test[getFullTestName(test)] = function (t) { var parser = new Parser(treeAdapter), serializer = new Serializer(treeAdapter), diff --git a/test/fixtures/ua_embeddable_parser_test.js b/test/fixtures/ua_embeddable_parser_test.js new file mode 100644 index 000000000..ea641885d --- /dev/null +++ b/test/fixtures/ua_embeddable_parser_test.js @@ -0,0 +1 @@ +//TODO \ No newline at end of file diff --git a/test/test_utils.js b/test/test_utils.js index da1e0bc1f..ffff23a32 100644 --- a/test/test_utils.js +++ b/test/test_utils.js @@ -1,6 +1,7 @@ -var parse5 = require('../index'), - fs = require('fs'), - path = require('path'); +var fs = require('fs'), + path = require('path'), + parse5 = require('../index'), + HTML = require('../lib/common/html'); function addSlashes(str) { return str @@ -82,5 +83,51 @@ exports.loadSerializationTestData = function (dataDirPath) { testIdx++; }); + return tests; +}; + +exports.loadTreeConstructionTestData = function (dataDirPath, treeAdapter) { + var testSetFileNames = fs.readdirSync(dataDirPath), + testIdx = 0, + tests = []; + + testSetFileNames.forEach(function (fileName) { + var filePath = path.join(dataDirPath, fileName), + testSet = fs.readFileSync(filePath).toString(), + setName = fileName.replace('.dat', ''), + testDescrs = [], + curDirective = '', + curDescr = null; + + testSet.split(/\r?\n/).forEach(function (line) { + if (line === '#data') { + curDescr = {}; + testDescrs.push(curDescr); + } + + if (line[0] === '#') { + curDirective = line; + curDescr[curDirective] = []; + } + + else + curDescr[curDirective].push(line); + }); + + testDescrs.forEach(function (descr) { + var fragmentContextTagName = descr['#document-fragment'] && descr['#document-fragment'].join(''); + + tests.push({ + idx: ++testIdx, + setName: setName, + input: descr['#data'].join('\r\n'), + expected: descr['#document'].join('\n'), + expectedErrors: descr['#errors'], + fragmentContext: fragmentContextTagName && + treeAdapter.createElement(fragmentContextTagName, HTML.NAMESPACES.HTML, []) + }); + }); + }); + return tests; }; \ No newline at end of file From 63563a0c65e732f6471290159a3c1cf15ae69043 Mon Sep 17 00:00:00 2001 From: inikulin Date: Mon, 22 Sep 2014 07:45:42 +0400 Subject: [PATCH 03/12] Throw errors, not string --- lib/ua_embeddable/parser_controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ua_embeddable/parser_controller.js b/lib/ua_embeddable/parser_controller.js index 2b4787dbb..c0b18df74 100644 --- a/lib/ua_embeddable/parser_controller.js +++ b/lib/ua_embeddable/parser_controller.js @@ -5,10 +5,10 @@ var ParserController = exports.ParserController = function (parser) { ParserController.prototype._setSuspended = function (suspend) { if(this.suspended && suspend) - throw 'parse5: Parser was already suspended. Please, check your control flow logic.'; + throw new Error('parse5: Parser was already suspended. Please, check your control flow logic.'); else if(!this.suspended && !suspend) - throw 'parse5: Parser was already resumed. Please, check your control flow logic.'; + throw new Error('parse5: Parser was already resumed. Please, check your control flow logic.'); return suspend; }; From 5b3cc6c4c6f28d13dc93384fa377afe5aad0fcd4 Mon Sep 17 00:00:00 2001 From: inikulin Date: Mon, 22 Sep 2014 18:05:07 +0400 Subject: [PATCH 04/12] UAEmbeddableParser tests --- index.js | 1 + lib/tree_construction/parser.js | 12 +- lib/ua_embeddable/parser_controller.js | 19 +- lib/ua_embeddable/ua_embeddable_parser.js | 21 ++- .../document_write.dat | 39 ++++ test/fixtures/parser_test.js | 98 +--------- test/fixtures/simple_api_parser_test.js | 2 +- test/fixtures/tree_serializer_test.js | 2 +- test/fixtures/ua_embeddable_parser_test.js | 74 +++++++- test/run_tests.js | 9 +- test/test_utils.js | 168 ++++++++++++++---- 11 files changed, 288 insertions(+), 157 deletions(-) create mode 100644 test/data/scripted_tree_construction/document_write.dat diff --git a/index.js b/index.js index d0de75626..ce7d6155d 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ exports.Parser = require('./lib/tree_construction/parser'); exports.SimpleApiParser = require('./lib/simple_api/simple_api_parser'); exports.TreeSerializer = require('./lib/tree_serialization/tree_serializer'); +exports.UAEmbeddableParser = require('./lib/ua_embeddable/ua_embeddable_parser'); exports.TreeAdapters = { default: require('./lib/tree_adapters/default'), diff --git a/lib/tree_construction/parser.js b/lib/tree_construction/parser.js index ea25d111d..e4e1e483c 100644 --- a/lib/tree_construction/parser.js +++ b/lib/tree_construction/parser.js @@ -310,8 +310,9 @@ function getSearchableIndexInputAttrs(isindexStartTagToken) { } //Parser -var Parser = module.exports = function (treeAdapter) { +var Parser = module.exports = function (treeAdapter, scriptHandler) { this.treeAdapter = treeAdapter || DefaultTreeAdapter; + this.scriptHandler = scriptHandler; }; //API @@ -360,7 +361,6 @@ Parser.prototype._reset = function (html, document, fragmentContext) { this.document = document; this.fragmentContext = fragmentContext; - this.scriptHandler = null; this.headElement = null; this.formElement = null; @@ -1864,14 +1864,14 @@ function endTagInBody(p, token) { //12.2.5.4.8 The "text" insertion mode //------------------------------------------------------------------ function endTagInText(p, token) { - var textParentElement = p.openElements.pop(); + if (!p.fragmentContext && p.scriptHandler && token.tagName === $.SCRIPT) + p.scriptHandler(p.document, p.openElements.current); + p.openElements.pop(); p.insertionMode = p.originalInsertionMode; - - if (!p.fragmentContext && p.scriptHandler && token.tagName === $.SCRIPT) - p.scriptHandler(document, textParentElement); } + function eofInText(p, token) { p.openElements.pop(); p.insertionMode = p.originalInsertionMode; diff --git a/lib/ua_embeddable/parser_controller.js b/lib/ua_embeddable/parser_controller.js index c0b18df74..098a764ef 100644 --- a/lib/ua_embeddable/parser_controller.js +++ b/lib/ua_embeddable/parser_controller.js @@ -1,25 +1,30 @@ -var ParserController = exports.ParserController = function (parser) { +var ParserController = module.exports = function (parser) { this.parser = parser; this.suspended = false; + this.parsingLoopLock = false; }; -ParserController.prototype._setSuspended = function (suspend) { - if(this.suspended && suspend) +ParserController.prototype._stateGuard = function (suspend) { + if (this.suspended && suspend) throw new Error('parse5: Parser was already suspended. Please, check your control flow logic.'); - else if(!this.suspended && !suspend) + else if (!this.suspended && !suspend) throw new Error('parse5: Parser was already resumed. Please, check your control flow logic.'); return suspend; }; ParserController.prototype.suspend = function () { - this._setSuspended(true); + this.suspended = this._stateGuard(true); }; ParserController.prototype.resume = function () { - this._setSuspended(false); - this.parser._runParsingLoop(); + this.suspended = this._stateGuard(false); + + //NOTE: don't call parsing loop if it locked (still running). Without this lock _runParsingLoop() may be called + //while parsing loop is still running. E.g. when suspend() and resume() called synchronously. + if (!this.parsingLoopLock) + this.parser._runParsingLoop(); }; ParserController.prototype.documentWrite = function (html) { diff --git a/lib/ua_embeddable/ua_embeddable_parser.js b/lib/ua_embeddable/ua_embeddable_parser.js index 7ad6a244a..a8eee3942 100644 --- a/lib/ua_embeddable/ua_embeddable_parser.js +++ b/lib/ua_embeddable/ua_embeddable_parser.js @@ -1,26 +1,31 @@ var Parser = require('../tree_construction/parser'), ParserController = require('./parser_controller'); -var UAEmbeddableParser = function (treeAdapter) { +var UAEmbeddableParser = module.exports = function (treeAdapter) { this.treeAdapter = treeAdapter; }; //API UAEmbeddableParser.prototype.parseDocument = function (html, scriptHandler, callback) { //NOTE: scriptHandler is an optional arg - callback = callback || scriptHandler; + if(!callback) { + callback = scriptHandler; + scriptHandler = void 0; + } - //NOTE: this should be reentrant, so we create new parser - var parser = new Parser(this.treeAdapter), + //NOTE: this should be reentrant, so we create new parser here + var parser = new Parser(this.treeAdapter, scriptHandler), parserController = new ParserController(parser); - parser.scriptHandler = scriptHandler; - - //NOTE: override parser methods + //NOTE: override parser loop method parser._runParsingLoop = function () { + parserController.parsingLoopLock = true; + while (!parserController.suspended && !this.stopped) this._iterateParsingLoop(); + parserController.parsingLoopLock = false; + if (this.stopped) callback(this.document); }; @@ -35,7 +40,7 @@ UAEmbeddableParser.prototype.parseDocument = function (html, scriptHandler, call }; UAEmbeddableParser.prototype.parseInnerHtml = function (innerHtml, contextElement) { - //NOTE: this should be reentrant, so we create new parser + //NOTE: this should be reentrant, so we create new parser here var parser = new Parser(this.treeAdapter); return parser.parseFragment(innerHtml, contextElement); diff --git a/test/data/scripted_tree_construction/document_write.dat b/test/data/scripted_tree_construction/document_write.dat new file mode 100644 index 000000000..d1ca2fc01 --- /dev/null +++ b/test/data/scripted_tree_construction/document_write.dat @@ -0,0 +1,39 @@ +#data +13 +#errors +#document +| +| +| +| "1" +| 4 +#errors +#document +| +| +| +| "1" +| I should be commented--> +#errors +#document +| +| +| ', + parser = new UAEmbeddableParser(), + getParserController = function () { + return parser.parseDocument(docHtml, function () { + //NOTE: unreachable =) + }); + + }; + + t.throws(function () { + var parserController = getParserController(); + + parserController.suspend(); + parserController.suspend(); + }); + + t.throws(function () { + var parserController = getParserController(); + + parserController.resume(); + }); + + t.done(); +}; + +exports['Reentrancy'] = function (t) { + var parser = new UAEmbeddableParser(), + serializer = new Serializer(), + docHtml1 = '', + docHtml2 = 'Beep boop', + fragments = [ + '
Hey ya!
', + '

' + ]; + + t.expect(4); + + var parserController = parser.parseDocument(docHtml1, function () { + parserController.suspend(); + + setTimeout(function () { + fragments.forEach(function (fragment) { + var actual = serializer.serialize(parser.parseInnerHtml(fragment)); + t.ok(actual === fragment, TestUtils.getStringDiffMsg(actual, fragment)); + }); + + parser.parseDocument(docHtml2, function (document2) { + var actual = serializer.serialize(document2); + + t.ok(actual === docHtml2, TestUtils.getStringDiffMsg(actual, docHtml2)); + parserController.resume(); + }); + }); + + }, function (document1) { + var actual = serializer.serialize(document1); + + t.ok(actual === docHtml1, TestUtils.getStringDiffMsg(actual, docHtml1)); + t.done(); + }); +}; + TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapterName, treeAdapter) { function getFullTestName(test) { - return ['UAEmbeddaleParser - ', test.idx, '.', test.setName, ' - ', test.input].join(''); + return ['UAEmbeddableParser - ', test.idx, '.', test.setName, ' - ', test.input].join(''); } var testDataDir = path.join(__dirname, '../data/tree_construction'), @@ -16,6 +79,8 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt //Here we go.. TestUtils.loadTreeConstructionTestData([testDataDir, scriptedTestDataDir], treeAdapter).forEach(function (test) { + var parser = new UAEmbeddableParser(treeAdapter); + _test[getFullTestName(test)] = function (t) { function assertResult(result) { var actual = TestUtils.serializeToTestDataFormat(result, treeAdapter); @@ -23,9 +88,6 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt t.done(); } - - var parser = new UAEmbeddableParser(treeAdapter); - if (test.fragmentContext) { var result = parser.parseInnerHtml(test.input, test.fragmentContext); assertResult(result); @@ -37,7 +99,7 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt //NOTE: test parser suspension in different modes (sync and async). //If we have script then execute it and resume parser asynchronously. - //Resume synchronously otherwise + //Otherwise - resume synchronously. var scriptTextNode = treeAdapter.getChildNodes(scriptElement)[0], script = scriptTextNode && treeAdapter.getTextNodeContent(scriptTextNode); diff --git a/test/run_tests.js b/test/run_tests.js index 27a6c0b86..391ba8e10 100644 --- a/test/run_tests.js +++ b/test/run_tests.js @@ -1,6 +1,6 @@ var fs = require('fs'), path = require('path'), - reporter = require('nodeunit').reporters.minimal; + reporter = require('nodeunit').reporters.default; var dirName = path.join(__dirname, './fixtures'), testFiles = fs.readdirSync(dirName); From c7d2cb083e491f122f73b694ade0a1eea86c61d8 Mon Sep 17 00:00:00 2001 From: inikulin Date: Mon, 22 Sep 2014 22:07:33 +0400 Subject: [PATCH 07/12] Using Mocha now. Fixes #25 --- package.json | 2 +- test/fixtures/formatting_element_list_test.js | 117 ++++---- test/fixtures/open_element_stack_test.js | 275 +++++++----------- test/fixtures/parser_test.js | 26 +- test/fixtures/simple_api_parser_test.js | 8 +- test/fixtures/tokenizer_test.js | 9 +- test/fixtures/tree_serializer_test.js | 25 +- test/fixtures/ua_embeddable_parser_test.js | 126 ++++---- test/run_tests.js | 23 +- 9 files changed, 275 insertions(+), 336 deletions(-) diff --git a/package.json b/package.json index 51903d5b3..764d5802e 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "Sean Lang (http://slang.cx)" ], "devDependencies": { - "nodeunit": "0.8.0" + "mocha": "1.21.4" }, "keywords": [ "html", diff --git a/test/fixtures/formatting_element_list_test.js b/test/fixtures/formatting_element_list_test.js index 48ec5b5fb..f776c69ed 100644 --- a/test/fixtures/formatting_element_list_test.js +++ b/test/fixtures/formatting_element_list_test.js @@ -1,4 +1,5 @@ -var html = require('../../lib/common/html'), +var assert = require('assert'), + html = require('../../lib/common/html'), FormattingElementList = require('../../lib/tree_construction/formatting_element_list'), TestUtils = require('../test_utils'); @@ -7,21 +8,19 @@ var $ = html.TAG_NAMES, NS = html.NAMESPACES; TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapterName, treeAdapter) { - _test['Insert marker'] = function (t) { + _test['Insert marker'] = function () { var list = new FormattingElementList(treeAdapter); list.insertMarker(); - t.strictEqual(list.length, 1); - t.strictEqual(list.entries[0].type, FormattingElementList.MARKER_ENTRY); + assert.strictEqual(list.length, 1); + assert.strictEqual(list.entries[0].type, FormattingElementList.MARKER_ENTRY); list.insertMarker(); - t.strictEqual(list.length, 2); - t.strictEqual(list.entries[1].type, FormattingElementList.MARKER_ENTRY); - - t.done(); + assert.strictEqual(list.length, 2); + assert.strictEqual(list.entries[1].type, FormattingElementList.MARKER_ENTRY); }; - _test['Push element'] = function (t) { + _test['Push element'] = function () { var list = new FormattingElementList(treeAdapter), element1Token = 'token1', element2Token = 'token2', @@ -29,21 +28,19 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt element2 = treeAdapter.createElement($.P, NS.HTML, []); list.pushElement(element1, element1Token); - t.strictEqual(list.length, 1); - t.strictEqual(list.entries[0].type, FormattingElementList.ELEMENT_ENTRY); - t.strictEqual(list.entries[0].element, element1); - t.strictEqual(list.entries[0].token, element1Token); + assert.strictEqual(list.length, 1); + assert.strictEqual(list.entries[0].type, FormattingElementList.ELEMENT_ENTRY); + assert.strictEqual(list.entries[0].element, element1); + assert.strictEqual(list.entries[0].token, element1Token); list.pushElement(element2, element2Token); - t.strictEqual(list.length, 2); - t.strictEqual(list.entries[1].type, FormattingElementList.ELEMENT_ENTRY); - t.strictEqual(list.entries[1].element, element2); - t.strictEqual(list.entries[1].token, element2Token); - - t.done(); + assert.strictEqual(list.length, 2); + assert.strictEqual(list.entries[1].type, FormattingElementList.ELEMENT_ENTRY); + assert.strictEqual(list.entries[1].element, element2); + assert.strictEqual(list.entries[1].token, element2Token); }; - _test['Insert element after bookmark'] = function (t) { + _test['Insert element after bookmark'] = function () { var list = new FormattingElementList(treeAdapter), token = 'token1', element1 = treeAdapter.createElement($.DIV, NS.HTML, []), @@ -59,13 +56,11 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt list.insertElementAfterBookmark(element4, token); - t.strictEqual(list.length, 4); - t.strictEqual(list.entries[1].element, element4); - - t.done(); + assert.strictEqual(list.length, 4); + assert.strictEqual(list.entries[1].element, element4); }; - _test['Push element - Noah Ark condition'] = function (t) { + _test['Push element - Noah Ark condition'] = function () { var list = new FormattingElementList(treeAdapter), token1 = 'token1', token2 = 'token2', @@ -87,35 +82,33 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt list.pushElement(element2, token3); list.pushElement(element1, token4); - t.strictEqual(list.length, 4); - t.strictEqual(list.entries[0].token, token1); - t.strictEqual(list.entries[1].token, token2); - t.strictEqual(list.entries[2].token, token3); - t.strictEqual(list.entries[3].token, token4); + assert.strictEqual(list.length, 4); + assert.strictEqual(list.entries[0].token, token1); + assert.strictEqual(list.entries[1].token, token2); + assert.strictEqual(list.entries[2].token, token3); + assert.strictEqual(list.entries[3].token, token4); list.pushElement(element1, token5); - t.strictEqual(list.length, 4); - t.strictEqual(list.entries[0].token, token2); - t.strictEqual(list.entries[1].token, token3); - t.strictEqual(list.entries[2].token, token4); - t.strictEqual(list.entries[3].token, token5); + assert.strictEqual(list.length, 4); + assert.strictEqual(list.entries[0].token, token2); + assert.strictEqual(list.entries[1].token, token3); + assert.strictEqual(list.entries[2].token, token4); + assert.strictEqual(list.entries[3].token, token5); list.insertMarker(); list.pushElement(element1, token6); - t.strictEqual(list.length, 6); - t.strictEqual(list.entries[0].token, token2); - t.strictEqual(list.entries[1].token, token3); - t.strictEqual(list.entries[2].token, token4); - t.strictEqual(list.entries[3].token, token5); - t.strictEqual(list.entries[4].type, FormattingElementList.MARKER_ENTRY); - t.strictEqual(list.entries[5].token, token6); - - t.done(); + assert.strictEqual(list.length, 6); + assert.strictEqual(list.entries[0].token, token2); + assert.strictEqual(list.entries[1].token, token3); + assert.strictEqual(list.entries[2].token, token4); + assert.strictEqual(list.entries[3].token, token5); + assert.strictEqual(list.entries[4].type, FormattingElementList.MARKER_ENTRY); + assert.strictEqual(list.entries[5].token, token6); }; - _test['Clear to the last marker'] = function (t) { + _test['Clear to the last marker'] = function () { var list = new FormattingElementList(treeAdapter), token = 'token', element1 = treeAdapter.createElement($.DIV, NS.HTML, [ @@ -136,12 +129,10 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt list.clearToLastMarker(); - t.strictEqual(list.length, 2); - - t.done(); + assert.strictEqual(list.length, 2); }; - _test['Remove entry'] = function (t) { + _test['Remove entry'] = function () { var list = new FormattingElementList(treeAdapter), token = 'token', element1 = treeAdapter.createElement($.DIV, NS.HTML, [ @@ -159,35 +150,31 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt list.removeEntry(list.entries[0]); - t.strictEqual(list.length, 2); + assert.strictEqual(list.length, 2); for (var i = list.length - 1; i >= 0; i--) - t.notStrictEqual(list.entries[i].element, element1); - - t.done(); + assert.notStrictEqual(list.entries[i].element, element1); }; - _test['Get entry in scope with given tag name'] = function (t) { + _test['Get entry in scope with given tag name'] = function () { var list = new FormattingElementList(treeAdapter), token = 'token', element = treeAdapter.createElement($.DIV, NS.HTML, []); - t.ok(!list.getElementEntryInScopeWithTagName($.DIV)); + assert.ok(!list.getElementEntryInScopeWithTagName($.DIV)); list.pushElement(element, token); list.pushElement(element, token); - t.strictEqual(list.getElementEntryInScopeWithTagName($.DIV), list.entries[1]); + assert.strictEqual(list.getElementEntryInScopeWithTagName($.DIV), list.entries[1]); list.insertMarker(); - t.ok(!list.getElementEntryInScopeWithTagName($.DIV)); + assert.ok(!list.getElementEntryInScopeWithTagName($.DIV)); list.pushElement(element, token); - t.strictEqual(list.getElementEntryInScopeWithTagName($.DIV), list.entries[3]); - - t.done(); + assert.strictEqual(list.getElementEntryInScopeWithTagName($.DIV), list.entries[3]); }; - _test['Get element entry'] = function (t) { + _test['Get element entry'] = function () { var list = new FormattingElementList(treeAdapter), token = 'token', element1 = treeAdapter.createElement($.DIV, NS.HTML, []), @@ -199,10 +186,8 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt list.insertMarker(); var entry = list.getElementEntry(element1); - t.strictEqual(entry.type, FormattingElementList.ELEMENT_ENTRY); - t.strictEqual(entry.token, token); - t.strictEqual(entry.element, element1); - - t.done(); + assert.strictEqual(entry.type, FormattingElementList.ELEMENT_ENTRY); + assert.strictEqual(entry.token, token); + assert.strictEqual(entry.element, element1); }; }); \ No newline at end of file diff --git a/test/fixtures/open_element_stack_test.js b/test/fixtures/open_element_stack_test.js index 85b9d3f44..56ff4cac2 100644 --- a/test/fixtures/open_element_stack_test.js +++ b/test/fixtures/open_element_stack_test.js @@ -1,4 +1,5 @@ -var HTML = require('../../lib/common/html'), +var assert = require('assert'), + HTML = require('../../lib/common/html'), OpenElementStack = require('../../lib/tree_construction/open_element_stack'), TestUtils = require('../test_utils'); @@ -7,48 +8,44 @@ var $ = HTML.TAG_NAMES, NS = HTML.NAMESPACES; TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapterName, treeAdapter) { - _test['Push element'] = function (t) { + _test['Push element'] = function () { var document = treeAdapter.createDocument(), element1 = treeAdapter.createElement('#element1', 'namespace1', []), element2 = treeAdapter.createElement('#element2', 'namespace2', []), stack = new OpenElementStack(document, treeAdapter); - t.strictEqual(stack.current, document); - t.strictEqual(stack.stackTop, -1); + assert.strictEqual(stack.current, document); + assert.strictEqual(stack.stackTop, -1); stack.push(element1); - t.strictEqual(stack.current, element1); - t.strictEqual(stack.currentTagName, treeAdapter.getTagName(element1)); - t.strictEqual(stack.stackTop, 0); + assert.strictEqual(stack.current, element1); + assert.strictEqual(stack.currentTagName, treeAdapter.getTagName(element1)); + assert.strictEqual(stack.stackTop, 0); stack.push(element2); - t.strictEqual(stack.current, element2); - t.strictEqual(stack.currentTagName, treeAdapter.getTagName(element2)); - t.strictEqual(stack.stackTop, 1); - - t.done(); + assert.strictEqual(stack.current, element2); + assert.strictEqual(stack.currentTagName, treeAdapter.getTagName(element2)); + assert.strictEqual(stack.stackTop, 1); }; - _test['Pop element'] = function (t) { + _test['Pop element'] = function () { var element = treeAdapter.createElement('#element', 'namespace1', []), stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(element); stack.push('#element2'); stack.pop(); - t.strictEqual(stack.current, element); - t.strictEqual(stack.currentTagName, treeAdapter.getTagName(element)); - t.strictEqual(stack.stackTop, 0); + assert.strictEqual(stack.current, element); + assert.strictEqual(stack.currentTagName, treeAdapter.getTagName(element)); + assert.strictEqual(stack.stackTop, 0); stack.pop(); - t.ok(!stack.current); - t.ok(!stack.currentTagName); - t.strictEqual(stack.stackTop, -1); - - t.done(); + assert.ok(!stack.current); + assert.ok(!stack.currentTagName); + assert.strictEqual(stack.stackTop, -1); }; - _test['Replace element'] = function (t) { + _test['Replace element'] = function () { var element = treeAdapter.createElement('#element', 'namespace', []), newElement = treeAdapter.createElement('#newElement', 'newElementNamespace', []), stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); @@ -56,14 +53,12 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push('#element2'); stack.push(element); stack.replace(element, newElement); - t.strictEqual(stack.current, newElement); - t.strictEqual(stack.currentTagName, treeAdapter.getTagName(newElement)); - t.strictEqual(stack.stackTop, 1); - - t.done(); + assert.strictEqual(stack.current, newElement); + assert.strictEqual(stack.currentTagName, treeAdapter.getTagName(newElement)); + assert.strictEqual(stack.stackTop, 1); }; - _test['Insert element after element'] = function (t) { + _test['Insert element after element'] = function () { var element1 = treeAdapter.createElement('#element1', 'namespace1', []), element2 = treeAdapter.createElement('#element2', 'namespace2', []), element3 = treeAdapter.createElement('#element3', 'namespace3', []), @@ -72,18 +67,16 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push(element1); stack.push(element2); stack.insertAfter(element1, element3); - t.strictEqual(stack.stackTop, 2); - t.strictEqual(stack.items[1], element3); + assert.strictEqual(stack.stackTop, 2); + assert.strictEqual(stack.items[1], element3); stack.insertAfter(element2, element1); - t.strictEqual(stack.stackTop, 3); - t.strictEqual(stack.current, element1); - t.strictEqual(stack.currentTagName, treeAdapter.getTagName(element1)); - - t.done(); + assert.strictEqual(stack.stackTop, 3); + assert.strictEqual(stack.current, element1); + assert.strictEqual(stack.currentTagName, treeAdapter.getTagName(element1)); }; - _test['Pop elements until popped with given tagName'] = function (t) { + _test['Pop elements until popped with given tagName'] = function () { var element1 = treeAdapter.createElement('#element1', '', []), element2 = treeAdapter.createElement('#element2', '', []), stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); @@ -93,20 +86,18 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push(element2); stack.push(element2); stack.popUntilTagNamePopped(treeAdapter.getTagName(element1)); - t.ok(!stack.current); - t.strictEqual(stack.stackTop, -1); + assert.ok(!stack.current); + assert.strictEqual(stack.stackTop, -1); stack.push(element2); stack.push(element1); stack.push(element2); stack.popUntilTagNamePopped(treeAdapter.getTagName(element1)); - t.strictEqual(stack.current, element2); - t.strictEqual(stack.stackTop, 0); - - t.done(); + assert.strictEqual(stack.current, element2); + assert.strictEqual(stack.stackTop, 0); }; - _test['Pop elements until given element popped'] = function (t) { + _test['Pop elements until given element popped'] = function () { var element1 = treeAdapter.createElement('#element1', '', []), element2 = treeAdapter.createElement('#element2', '', []), stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); @@ -116,20 +107,18 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push(element2); stack.push(element2); stack.popUntilElementPopped(element1); - t.ok(!stack.current); - t.strictEqual(stack.stackTop, -1); + assert.ok(!stack.current); + assert.strictEqual(stack.stackTop, -1); stack.push(element2); stack.push(element1); stack.push(element2); stack.popUntilElementPopped(element1); - t.strictEqual(stack.current, element2); - t.strictEqual(stack.stackTop, 0); - - t.done(); + assert.strictEqual(stack.current, element2); + assert.strictEqual(stack.stackTop, 0); }; - _test['Pop elements until numbered header popped'] = function (t) { + _test['Pop elements until numbered header popped'] = function () { var element1 = treeAdapter.createElement($.H3, '', []), element2 = treeAdapter.createElement('#element2', '', []), stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); @@ -139,20 +128,18 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push(element2); stack.push(element2); stack.popUntilNumberedHeaderPopped(); - t.ok(!stack.current); - t.strictEqual(stack.stackTop, -1); + assert.ok(!stack.current); + assert.strictEqual(stack.stackTop, -1); stack.push(element2); stack.push(element1); stack.push(element2); stack.popUntilNumberedHeaderPopped(); - t.strictEqual(stack.current, element2); - t.strictEqual(stack.stackTop, 0); - - t.done(); + assert.strictEqual(stack.current, element2); + assert.strictEqual(stack.stackTop, 0); }; - _test['Pop all up to element'] = function (t) { + _test['Pop all up to element'] = function () { var htmlElement = treeAdapter.createElement($.HTML, NS.HTML, []), stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); @@ -161,12 +148,10 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push('#element2'); stack.popAllUpToHtmlElement(); - t.strictEqual(stack.current, htmlElement); - - t.done(); + assert.strictEqual(stack.current, htmlElement); }; - _test['Clear back to a table context'] = function (t) { + _test['Clear back to a table context'] = function () { var htmlElement = treeAdapter.createElement($.HTML, '', []), tableElement = treeAdapter.createElement($.TABLE, '', []), divElement = treeAdapter.createElement($.DIV, '', []), @@ -177,21 +162,19 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push(divElement); stack.push(divElement); stack.clearBackToTableContext(); - t.strictEqual(stack.current, htmlElement); - t.strictEqual(stack.stackTop, 0); + assert.strictEqual(stack.current, htmlElement); + assert.strictEqual(stack.stackTop, 0); stack.push(divElement); stack.push(tableElement); stack.push(divElement); stack.push(divElement); stack.clearBackToTableContext(); - t.strictEqual(stack.current, tableElement); - t.strictEqual(stack.stackTop, 2); - - t.done(); + assert.strictEqual(stack.current, tableElement); + assert.strictEqual(stack.stackTop, 2); }; - _test['Clear back to a table body context'] = function (t) { + _test['Clear back to a table body context'] = function () { var htmlElement = treeAdapter.createElement($.HTML, '', []), theadElement = treeAdapter.createElement($.THEAD, '', []), divElement = treeAdapter.createElement($.DIV, '', []), @@ -202,21 +185,19 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push(divElement); stack.push(divElement); stack.clearBackToTableBodyContext(); - t.strictEqual(stack.current, htmlElement); - t.strictEqual(stack.stackTop, 0); + assert.strictEqual(stack.current, htmlElement); + assert.strictEqual(stack.stackTop, 0); stack.push(divElement); stack.push(theadElement); stack.push(divElement); stack.push(divElement); stack.clearBackToTableBodyContext(); - t.strictEqual(stack.current, theadElement); - t.strictEqual(stack.stackTop, 2); - - t.done(); + assert.strictEqual(stack.current, theadElement); + assert.strictEqual(stack.stackTop, 2); }; - _test['Clear back to a table row context'] = function (t) { + _test['Clear back to a table row context'] = function () { var htmlElement = treeAdapter.createElement($.HTML, '', []), trElement = treeAdapter.createElement($.TR, '', []), divElement = treeAdapter.createElement($.DIV, '', []), @@ -227,21 +208,19 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.push(divElement); stack.push(divElement); stack.clearBackToTableRowContext(); - t.strictEqual(stack.current, htmlElement); - t.strictEqual(stack.stackTop, 0); + assert.strictEqual(stack.current, htmlElement); + assert.strictEqual(stack.stackTop, 0); stack.push(divElement); stack.push(trElement); stack.push(divElement); stack.push(divElement); stack.clearBackToTableRowContext(); - t.strictEqual(stack.current, trElement); - t.strictEqual(stack.stackTop, 2); - - t.done(); + assert.strictEqual(stack.current, trElement); + assert.strictEqual(stack.stackTop, 2); }; - _test['Remove element'] = function (t) { + _test['Remove element'] = function () { var element = treeAdapter.createElement('#element', '', []), stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); @@ -251,214 +230,190 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.remove(element); - t.strictEqual(stack.stackTop, 1); + assert.strictEqual(stack.stackTop, 1); for (var i = stack.stackTop; i >= 0; i--) - t.notStrictEqual(stack.items[i], element); - - t.done(); + assert.notStrictEqual(stack.items[i], element); }; - _test['Try peek properly nested element'] = function (t) { + _test['Try peek properly nested element'] = function () { var bodyElement = treeAdapter.createElement($.BODY, '', []), stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, '', [])); stack.push(bodyElement); stack.push(treeAdapter.createElement($.DIV, '', [])); - t.strictEqual(stack.tryPeekProperlyNestedBodyElement(), bodyElement); + assert.strictEqual(stack.tryPeekProperlyNestedBodyElement(), bodyElement); stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, '', [])); - t.ok(!stack.tryPeekProperlyNestedBodyElement()); - - t.done(); + assert.ok(!stack.tryPeekProperlyNestedBodyElement()); }; - _test['Is root element current'] = function (t) { + _test['Is root element current'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, '', [])); - t.ok(stack.isRootHtmlElementCurrent()); + assert.ok(stack.isRootHtmlElementCurrent()); stack.push(treeAdapter.createElement($.DIV, '', [])); - t.ok(!stack.isRootHtmlElementCurrent()); - - t.done(); + assert.ok(!stack.isRootHtmlElementCurrent()); }; - _test['Get common ancestor'] = function (t) { + _test['Get common ancestor'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter), element = treeAdapter.createElement('#element', '', []), ancestor = treeAdapter.createElement('#ancestor', '', []); stack.push(treeAdapter.createElement('#someElement', '', [])); - t.ok(!stack.getCommonAncestor(element)); + assert.ok(!stack.getCommonAncestor(element)); stack.pop(); - t.ok(!stack.getCommonAncestor(element)); + assert.ok(!stack.getCommonAncestor(element)); stack.push(element); - t.ok(!stack.getCommonAncestor(element)); + assert.ok(!stack.getCommonAncestor(element)); stack.push(treeAdapter.createElement('#someElement', '', [])); stack.push(ancestor); stack.push(element); - t.strictEqual(stack.getCommonAncestor(element), ancestor); - - t.done(); + assert.strictEqual(stack.getCommonAncestor(element), ancestor); }; - _test['Contains element'] = function (t) { + _test['Contains element'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter), element = treeAdapter.createElement('#element', '', []); stack.push(treeAdapter.createElement('#someElement', '', [])); - t.ok(!stack.contains(element)); + assert.ok(!stack.contains(element)); stack.push(element); - t.ok(stack.contains(element)); - - t.done(); + assert.ok(stack.contains(element)); }; - _test['Has element in scope'] = function (t) { + _test['Has element in scope'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); stack.push(treeAdapter.createElement($.DIV, NS.HTML, [])); - t.ok(!stack.hasInScope($.P)); + assert.ok(!stack.hasInScope($.P)); stack.push(treeAdapter.createElement($.P, NS.HTML, [])); stack.push(treeAdapter.createElement($.UL, NS.HTML, [])); stack.push(treeAdapter.createElement($.BUTTON, NS.HTML, [])); stack.push(treeAdapter.createElement($.OPTION, NS.HTML, [])); - t.ok(stack.hasInScope($.P)); + assert.ok(stack.hasInScope($.P)); stack.push(treeAdapter.createElement($.TITLE, NS.SVG, [])); - t.ok(!stack.hasInScope($.P)); - - t.done(); + assert.ok(!stack.hasInScope($.P)); }; - _test['Has numbered header in scope'] = function (t) { + _test['Has numbered header in scope'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); stack.push(treeAdapter.createElement($.DIV, NS.HTML, [])); - t.ok(!stack.hasNumberedHeaderInScope()); + assert.ok(!stack.hasNumberedHeaderInScope()); stack.push(treeAdapter.createElement($.P, NS.HTML, [])); stack.push(treeAdapter.createElement($.UL, NS.HTML, [])); stack.push(treeAdapter.createElement($.H3, NS.HTML, [])); stack.push(treeAdapter.createElement($.OPTION, NS.HTML, [])); - t.ok(stack.hasNumberedHeaderInScope()); + assert.ok(stack.hasNumberedHeaderInScope()); stack.push(treeAdapter.createElement($.TITLE, NS.SVG, [])); - t.ok(!stack.hasNumberedHeaderInScope()); + assert.ok(!stack.hasNumberedHeaderInScope()); stack.push(treeAdapter.createElement($.H6, NS.HTML, [])); - t.ok(stack.hasNumberedHeaderInScope()); - - t.done(); + assert.ok(stack.hasNumberedHeaderInScope()); }; - _test['Has element in list item scope'] = function (t) { + _test['Has element in list item scope'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); stack.push(treeAdapter.createElement($.DIV, NS.HTML, [])); - t.ok(!stack.hasInListItemScope($.P)); + assert.ok(!stack.hasInListItemScope($.P)); stack.push(treeAdapter.createElement($.P, NS.HTML, [])); stack.push(treeAdapter.createElement($.BUTTON, NS.HTML, [])); stack.push(treeAdapter.createElement($.OPTION, NS.HTML, [])); - t.ok(stack.hasInListItemScope($.P)); + assert.ok(stack.hasInListItemScope($.P)); stack.push(treeAdapter.createElement($.UL, NS.HTML, [])); - t.ok(!stack.hasInListItemScope($.P)); - - t.done(); + assert.ok(!stack.hasInListItemScope($.P)); }; - _test['Has element in button scope'] = function (t) { + _test['Has element in button scope'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); stack.push(treeAdapter.createElement($.DIV, NS.HTML, [])); - t.ok(!stack.hasInButtonScope($.P)); + assert.ok(!stack.hasInButtonScope($.P)); stack.push(treeAdapter.createElement($.P, NS.HTML, [])); stack.push(treeAdapter.createElement($.UL, NS.HTML, [])); stack.push(treeAdapter.createElement($.OPTION, NS.HTML, [])); - t.ok(stack.hasInButtonScope($.P)); + assert.ok(stack.hasInButtonScope($.P)); stack.push(treeAdapter.createElement($.BUTTON, NS.HTML, [])); - t.ok(!stack.hasInButtonScope($.P)); - - t.done(); + assert.ok(!stack.hasInButtonScope($.P)); }; - _test['Has element in table scope'] = function (t) { + _test['Has element in table scope'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); stack.push(treeAdapter.createElement($.DIV, NS.HTML, [])); - t.ok(!stack.hasInTableScope($.P)); + assert.ok(!stack.hasInTableScope($.P)); stack.push(treeAdapter.createElement($.P, NS.HTML, [])); stack.push(treeAdapter.createElement($.UL, NS.HTML, [])); stack.push(treeAdapter.createElement($.TD, NS.HTML, [])); stack.push(treeAdapter.createElement($.OPTION, NS.HTML, [])); - t.ok(stack.hasInTableScope($.P)); + assert.ok(stack.hasInTableScope($.P)); stack.push(treeAdapter.createElement($.TABLE, NS.HTML, [])); - t.ok(!stack.hasInTableScope($.P)); - - t.done(); + assert.ok(!stack.hasInTableScope($.P)); }; - _test['Has table body context in table scope'] = function (t) { + _test['Has table body context in table scope'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); stack.push(treeAdapter.createElement($.DIV, NS.HTML, [])); - t.ok(!stack.hasTableBodyContextInTableScope()); + assert.ok(!stack.hasTableBodyContextInTableScope()); stack.push(treeAdapter.createElement($.TABLE, NS.HTML, [])); stack.push(treeAdapter.createElement($.UL, NS.HTML, [])); stack.push(treeAdapter.createElement($.TBODY, NS.HTML, [])); stack.push(treeAdapter.createElement($.OPTION, NS.HTML, [])); - t.ok(stack.hasTableBodyContextInTableScope()); + assert.ok(stack.hasTableBodyContextInTableScope()); stack.push(treeAdapter.createElement($.TABLE, NS.HTML, [])); - t.ok(!stack.hasTableBodyContextInTableScope()); + assert.ok(!stack.hasTableBodyContextInTableScope()); stack.push(treeAdapter.createElement($.TFOOT, NS.HTML, [])); - t.ok(stack.hasTableBodyContextInTableScope()); - - t.done(); + assert.ok(stack.hasTableBodyContextInTableScope()); }; - _test['Has element in select scope'] = function (t) { + _test['Has element in select scope'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); stack.push(treeAdapter.createElement($.DIV, NS.HTML, [])); - t.ok(!stack.hasInSelectScope($.P)); + assert.ok(!stack.hasInSelectScope($.P)); stack.push(treeAdapter.createElement($.P, NS.HTML, [])); stack.push(treeAdapter.createElement($.OPTION, NS.HTML, [])); - t.ok(stack.hasInSelectScope($.P)); + assert.ok(stack.hasInSelectScope($.P)); stack.push(treeAdapter.createElement($.DIV, NS.HTML, [])); - t.ok(!stack.hasInSelectScope($.P)); - - t.done(); + assert.ok(!stack.hasInSelectScope($.P)); }; - _test['Generate implied end tags'] = function (t) { + _test['Generate implied end tags'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); @@ -470,13 +425,11 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.generateImpliedEndTags(); - t.strictEqual(stack.stackTop, 2); - t.strictEqual(stack.currentTagName, $.DIV); - - t.done(); + assert.strictEqual(stack.stackTop, 2); + assert.strictEqual(stack.currentTagName, $.DIV); }; - _test['Generate implied end tags with exclusion'] = function (t) { + _test['Generate implied end tags with exclusion'] = function () { var stack = new OpenElementStack(treeAdapter.createDocument(), treeAdapter); stack.push(treeAdapter.createElement($.HTML, NS.HTML, [])); @@ -488,9 +441,7 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt stack.generateImpliedEndTagsWithExclusion($.LI); - t.strictEqual(stack.stackTop, 3); - t.strictEqual(stack.currentTagName, $.LI); - - t.done(); + assert.strictEqual(stack.stackTop, 3); + assert.strictEqual(stack.currentTagName, $.LI); }; }); \ No newline at end of file diff --git a/test/fixtures/parser_test.js b/test/fixtures/parser_test.js index 9468c7258..f6d155e45 100644 --- a/test/fixtures/parser_test.js +++ b/test/fixtures/parser_test.js @@ -1,4 +1,4 @@ -var fs = require('fs'), +var assert = require('assert'), path = require('path'), HTML = require('../../lib/common/html'), Parser = require('../../index').Parser, @@ -12,17 +12,19 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt var testDataDir = path.join(__dirname, '../data/tree_construction'); //Here we go.. - TestUtils.loadTreeConstructionTestData([testDataDir], treeAdapter).forEach(function (test) { - _test[getFullTestName(test)] = function (t) { - var parser = new Parser(treeAdapter), - result = test.fragmentContext ? - parser.parseFragment(test.input, test.fragmentContext) : - parser.parse(test.input), - actual = TestUtils.serializeToTestDataFormat(result, treeAdapter); + TestUtils.loadTreeConstructionTestData([ + testDataDir + ], treeAdapter).forEach(function (test) { + _test[getFullTestName(test)] = function () { + var parser = new Parser(treeAdapter), + result = test.fragmentContext ? + parser.parseFragment(test.input, test.fragmentContext) : + parser.parse(test.input), + actual = TestUtils.serializeToTestDataFormat(result, treeAdapter), + msg = TestUtils.prettyPrintParserAssertionArgs(actual, test.expected); - t.strictEqual(actual, test.expected, TestUtils.prettyPrintParserAssertionArgs(actual, test.expected)); - t.done(); - }; - }); + assert.strictEqual(actual, test.expected, msg); + }; + }); }); diff --git a/test/fixtures/simple_api_parser_test.js b/test/fixtures/simple_api_parser_test.js index 4753b91ad..28f3a2b24 100644 --- a/test/fixtures/simple_api_parser_test.js +++ b/test/fixtures/simple_api_parser_test.js @@ -1,4 +1,5 @@ -var path = require('path'), +var assert = require('assert'), + path = require('path'), SimpleApiParser = require('../../index').SimpleApiParser, TestUtils = require('../test_utils'); @@ -16,7 +17,7 @@ function sanitizeForComparison(str) { var testDataDir = path.join(__dirname, '../data/simple_api_parsing'); TestUtils.loadSerializationTestData(testDataDir).forEach(function (test) { - exports[getFullTestName(test)] = function (t) { + exports[getFullTestName(test)] = function () { //NOTE: the idea of the test is to serialize back given HTML using SimpleApiParser handlers var result = '', parser = new SimpleApiParser({ @@ -66,7 +67,6 @@ TestUtils.loadSerializationTestData(testDataDir).forEach(function (test) { result = sanitizeForComparison(result); //NOTE: use ok assertion, so output will not be polluted by the whole content of the strings - t.ok(result === expected, TestUtils.getStringDiffMsg(result, expected)); - t.done(); + assert.ok(result === expected, TestUtils.getStringDiffMsg(result, expected)); } }); diff --git a/test/fixtures/tokenizer_test.js b/test/fixtures/tokenizer_test.js index 16015e3ff..d303aa6a5 100644 --- a/test/fixtures/tokenizer_test.js +++ b/test/fixtures/tokenizer_test.js @@ -1,4 +1,5 @@ -var fs = require('fs'), +var assert = require('assert'), + fs = require('fs'), path = require('path'), util = require('util'), Tokenizer = require('../../lib/tokenization/tokenizer'); @@ -168,11 +169,9 @@ function getFullTestName(test) { //Here we go.. loadTests().forEach(function (test) { - exports[getFullTestName(test)] = function (t) { + exports[getFullTestName(test)] = function () { var out = tokenize(test.input, test.initialState, test.lastStartTag); - t.deepEqual(out, test.expected); - - t.done(); + assert.deepEqual(out, test.expected); }; }); diff --git a/test/fixtures/tree_serializer_test.js b/test/fixtures/tree_serializer_test.js index 3e6d564bc..0a6582a4e 100644 --- a/test/fixtures/tree_serializer_test.js +++ b/test/fixtures/tree_serializer_test.js @@ -1,10 +1,11 @@ -var path = require('path'), +var assert = require('assert'), + path = require('path'), Parser = require('../../lib/tree_construction/parser'), Serializer = require('../../index').TreeSerializer, TestUtils = require('../test_utils'); -exports['Regression - SYSTEM-only doctype serialization'] = function (t) { +exports['Regression - SYSTEM-only doctype serialization'] = function () { var html = '' + '', parser = new Parser(), @@ -12,11 +13,10 @@ exports['Regression - SYSTEM-only doctype serialization'] = function (t) { document = parser.parse(html), serializedResult = serializer.serialize(document); - t.strictEqual(serializedResult, html); - t.done(); + assert.strictEqual(serializedResult, html); }; -exports['Regression - Escaping of doctypes with quotes in them'] = function (t) { +exports['Regression - Escaping of doctypes with quotes in them'] = function () { var htmlStrs = [ '' + @@ -37,13 +37,11 @@ exports['Regression - Escaping of doctypes with quotes in them'] = function (t) var document = parser.parse(html), serializedResult = serializer.serialize(document); - t.strictEqual(serializedResult, html); + assert.strictEqual(serializedResult, html); }); - - t.done(); }; -exports['Regression - new line in
 tag'] = function (t) {
+exports['Regression - new line in 
 tag'] = function () {
     var htmlStrs = [
             {
                 src: '
\ntest
', @@ -62,10 +60,8 @@ exports['Regression - new line in
 tag'] = function (t) {
         var document = parser.parse(htmlStr.src),
             serializedResult = serializer.serialize(document);
 
-        t.strictEqual(serializedResult, htmlStr.expected);
+        assert.strictEqual(serializedResult, htmlStr.expected);
     });
-
-    t.done();
 };
 
 TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapterName, treeAdapter) {
@@ -77,7 +73,7 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt
 
     //Here we go..
     TestUtils.loadSerializationTestData(testDataDir).forEach(function (test) {
-        _test[getFullTestName(test)] = function (t) {
+        _test[getFullTestName(test)] = function () {
             var parser = new Parser(treeAdapter),
                 serializer = new Serializer(treeAdapter),
                 document = parser.parse(test.src),
@@ -85,8 +81,7 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt
                 expected = TestUtils.removeNewLines(test.expected);
 
             //NOTE: use ok assertion, so output will not be polluted by the whole content of the strings
-            t.ok(serializedResult === expected, TestUtils.getStringDiffMsg(serializedResult, expected));
-            t.done();
+            assert.ok(serializedResult === expected, TestUtils.getStringDiffMsg(serializedResult, expected));
         };
     });
 
diff --git a/test/fixtures/ua_embeddable_parser_test.js b/test/fixtures/ua_embeddable_parser_test.js
index b33b2c0ec..b41a36eef 100644
--- a/test/fixtures/ua_embeddable_parser_test.js
+++ b/test/fixtures/ua_embeddable_parser_test.js
@@ -1,11 +1,11 @@
-var fs = require('fs'),
+var assert = require('assert'),
     path = require('path'),
     HTML = require('../../lib/common/html'),
     UAEmbeddableParser = require('../../index').UAEmbeddableParser,
     Serializer = require('../../index').TreeSerializer,
     TestUtils = require('../test_utils');
 
-exports['State guard'] = function (t) {
+exports['State guard'] = function () {
     var docHtml = '',
         parser = new UAEmbeddableParser(),
         getParserController = function () {
@@ -15,25 +15,24 @@ exports['State guard'] = function (t) {
 
         };
 
-    t.throws(function () {
+    assert.throws(function () {
         var parserController = getParserController();
 
         parserController.suspend();
         parserController.suspend();
     });
 
-    t.throws(function () {
+    assert.throws(function () {
         var parserController = getParserController();
 
         parserController.resume();
     });
-
-    t.done();
 };
 
-exports['Reentrancy'] = function (t) {
+exports['Reentrancy'] = function (done) {
     var parser = new UAEmbeddableParser(),
         serializer = new Serializer(),
+        asyncAssertionCount = 0,
         docHtml1 = '',
         docHtml2 = 'Beep boop',
         fragments = [
@@ -41,21 +40,21 @@ exports['Reentrancy'] = function (t) {
             '

' ]; - t.expect(4); - var parserController = parser.parseDocument(docHtml1, function () { parserController.suspend(); setTimeout(function () { fragments.forEach(function (fragment) { var actual = serializer.serialize(parser.parseInnerHtml(fragment)); - t.ok(actual === fragment, TestUtils.getStringDiffMsg(actual, fragment)); + assert.ok(actual === fragment, TestUtils.getStringDiffMsg(actual, fragment)); + asyncAssertionCount++; }); parser.parseDocument(docHtml2, function (document2) { var actual = serializer.serialize(document2); - t.ok(actual === docHtml2, TestUtils.getStringDiffMsg(actual, docHtml2)); + assert.ok(actual === docHtml2, TestUtils.getStringDiffMsg(actual, docHtml2)); + asyncAssertionCount++; parserController.resume(); }); }); @@ -63,8 +62,9 @@ exports['Reentrancy'] = function (t) { }, function (document1) { var actual = serializer.serialize(document1); - t.ok(actual === docHtml1, TestUtils.getStringDiffMsg(actual, docHtml1)); - t.done(); + assert.strictEqual(asyncAssertionCount, 3); + assert.ok(actual === docHtml1, TestUtils.getStringDiffMsg(actual, docHtml1)); + done(); }); }; @@ -78,58 +78,64 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt scriptedTestDataDir = path.join(__dirname, '../data/scripted_tree_construction'); //Here we go.. - TestUtils.loadTreeConstructionTestData([testDataDir, scriptedTestDataDir], treeAdapter).forEach(function (test) { - var parser = new UAEmbeddableParser(treeAdapter); - - _test[getFullTestName(test)] = function (t) { - function assertResult(result) { - var actual = TestUtils.serializeToTestDataFormat(result, treeAdapter); - t.strictEqual(actual, test.expected, TestUtils.prettyPrintParserAssertionArgs(actual, test.expected)); - t.done(); - } - - if (test.fragmentContext) { - var result = parser.parseInnerHtml(test.input, test.fragmentContext); - assertResult(result); - } - - else { - var parserController = parser.parseDocument(test.input, function (document, scriptElement) { - parserController.suspend(); - - //NOTE: test parser suspension in different modes (sync and async). - //If we have script then execute it and resume parser asynchronously. - //Otherwise - resume synchronously. - var scriptTextNode = treeAdapter.getChildNodes(scriptElement)[0], - script = scriptTextNode && treeAdapter.getTextNodeContent(scriptTextNode); - - //NOTE: don't pollute test runner output by console.log() calls from test scripts - if (script && script.trim() && script.indexOf('console.log') === -1) { - setTimeout(function () { - //NOTE: mock document for script evaluation - var document = { - write: function (html) { - parserController.documentWrite(html); + TestUtils.loadTreeConstructionTestData([ + testDataDir, + scriptedTestDataDir + ], treeAdapter).forEach(function (test) { + var parser = new UAEmbeddableParser(treeAdapter); + + _test[getFullTestName(test)] = function (done) { + function assertResult(result) { + var actual = TestUtils.serializeToTestDataFormat(result, treeAdapter), + msg = TestUtils.prettyPrintParserAssertionArgs(actual, test.expected); + + assert.strictEqual(actual, test.expected, msg); + + done(); + } + + if (test.fragmentContext) { + var result = parser.parseInnerHtml(test.input, test.fragmentContext); + assertResult(result); + } + + else { + var parserController = parser.parseDocument(test.input, function (document, scriptElement) { + parserController.suspend(); + + //NOTE: test parser suspension in different modes (sync and async). + //If we have script then execute it and resume parser asynchronously. + //Otherwise - resume synchronously. + var scriptTextNode = treeAdapter.getChildNodes(scriptElement)[0], + script = scriptTextNode && treeAdapter.getTextNodeContent(scriptTextNode); + + //NOTE: don't pollute test runner output by console.log() calls from test scripts + if (script && script.trim() && script.indexOf('console.log') === -1) { + setTimeout(function () { + //NOTE: mock document for script evaluation + var document = { + write: function (html) { + parserController.documentWrite(html); + } + }; + + try { + eval(script); + } catch (err) { + //NOTE: ignore broken scripts from test data } - }; - try { - eval(script); - } catch (err) { - //NOTE: ignore broken scripts from test data - } + parserController.resume(); + }); + } + else parserController.resume(); - }); - } - - else - parserController.resume(); - }, assertResult); - } - }; - }); + }, assertResult); + } + }; + }); }); diff --git a/test/run_tests.js b/test/run_tests.js index 391ba8e10..89fa89449 100644 --- a/test/run_tests.js +++ b/test/run_tests.js @@ -1,17 +1,18 @@ var fs = require('fs'), path = require('path'), - reporter = require('nodeunit').reporters.default; + Mocha = require('mocha'); -var dirName = path.join(__dirname, './fixtures'), - testFiles = fs.readdirSync(dirName); +var fixturesDir = path.join(__dirname, './fixtures'), + mocha = new Mocha() + .ui('exports') + .reporter('progress'); -process.chdir(dirName); - -reporter.run(testFiles, null, function (err) { - if (err) { - setTimeout(function () { - process.exit(1); - }); - } +fs.readdirSync(fixturesDir).forEach(function (file) { + mocha.addFile(path.join(fixturesDir, file)); }); +mocha.run(function (failed) { + process.on('exit', function () { + process.exit(failed); + }); +}); \ No newline at end of file From ce2c0bd69129054f328a8cc70ea159645c0e366b Mon Sep 17 00:00:00 2001 From: inikulin Date: Mon, 22 Sep 2014 23:13:15 +0400 Subject: [PATCH 08/12] Rename UAEmbeddableParser to JsDomParser --- index.js | 2 +- .../ua_embeddable_parser.js => jsdom/jsdom_parser.js} | 6 +++--- lib/{ua_embeddable => jsdom}/parser_controller.js | 0 ..._embeddable_parser_test.js => jsdom_parser_test.js} | 10 +++++----- 4 files changed, 9 insertions(+), 9 deletions(-) rename lib/{ua_embeddable/ua_embeddable_parser.js => jsdom/jsdom_parser.js} (83%) rename lib/{ua_embeddable => jsdom}/parser_controller.js (100%) rename test/fixtures/{ua_embeddable_parser_test.js => jsdom_parser_test.js} (94%) diff --git a/index.js b/index.js index ce7d6155d..568d0ea3e 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,7 @@ exports.Parser = require('./lib/tree_construction/parser'); exports.SimpleApiParser = require('./lib/simple_api/simple_api_parser'); exports.TreeSerializer = require('./lib/tree_serialization/tree_serializer'); -exports.UAEmbeddableParser = require('./lib/ua_embeddable/ua_embeddable_parser'); +exports.JsDomParser = require('./lib/jsdom/jsdom_parser'); exports.TreeAdapters = { default: require('./lib/tree_adapters/default'), diff --git a/lib/ua_embeddable/ua_embeddable_parser.js b/lib/jsdom/jsdom_parser.js similarity index 83% rename from lib/ua_embeddable/ua_embeddable_parser.js rename to lib/jsdom/jsdom_parser.js index a8eee3942..13f539834 100644 --- a/lib/ua_embeddable/ua_embeddable_parser.js +++ b/lib/jsdom/jsdom_parser.js @@ -1,12 +1,12 @@ var Parser = require('../tree_construction/parser'), ParserController = require('./parser_controller'); -var UAEmbeddableParser = module.exports = function (treeAdapter) { +var JsDomParser = module.exports = function (treeAdapter) { this.treeAdapter = treeAdapter; }; //API -UAEmbeddableParser.prototype.parseDocument = function (html, scriptHandler, callback) { +JsDomParser.prototype.parseDocument = function (html, scriptHandler, callback) { //NOTE: scriptHandler is an optional arg if(!callback) { callback = scriptHandler; @@ -39,7 +39,7 @@ UAEmbeddableParser.prototype.parseDocument = function (html, scriptHandler, call return parserController; }; -UAEmbeddableParser.prototype.parseInnerHtml = function (innerHtml, contextElement) { +JsDomParser.prototype.parseInnerHtml = function (innerHtml, contextElement) { //NOTE: this should be reentrant, so we create new parser here var parser = new Parser(this.treeAdapter); diff --git a/lib/ua_embeddable/parser_controller.js b/lib/jsdom/parser_controller.js similarity index 100% rename from lib/ua_embeddable/parser_controller.js rename to lib/jsdom/parser_controller.js diff --git a/test/fixtures/ua_embeddable_parser_test.js b/test/fixtures/jsdom_parser_test.js similarity index 94% rename from test/fixtures/ua_embeddable_parser_test.js rename to test/fixtures/jsdom_parser_test.js index b41a36eef..fc66486a4 100644 --- a/test/fixtures/ua_embeddable_parser_test.js +++ b/test/fixtures/jsdom_parser_test.js @@ -1,13 +1,13 @@ var assert = require('assert'), path = require('path'), HTML = require('../../lib/common/html'), - UAEmbeddableParser = require('../../index').UAEmbeddableParser, + JsDomParser = require('../../index').JsDomParser, Serializer = require('../../index').TreeSerializer, TestUtils = require('../test_utils'); exports['State guard'] = function () { var docHtml = '', - parser = new UAEmbeddableParser(), + parser = new JsDomParser(), getParserController = function () { return parser.parseDocument(docHtml, function () { //NOTE: unreachable =) @@ -30,7 +30,7 @@ exports['State guard'] = function () { }; exports['Reentrancy'] = function (done) { - var parser = new UAEmbeddableParser(), + var parser = new JsDomParser(), serializer = new Serializer(), asyncAssertionCount = 0, docHtml1 = '', @@ -71,7 +71,7 @@ exports['Reentrancy'] = function (done) { TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapterName, treeAdapter) { function getFullTestName(test) { - return ['UAEmbeddableParser - ', test.idx, '.', test.setName, ' - ', test.input].join(''); + return ['JsDomParser - ', test.idx, '.', test.setName, ' - ', test.input].join(''); } var testDataDir = path.join(__dirname, '../data/tree_construction'), @@ -82,7 +82,7 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt testDataDir, scriptedTestDataDir ], treeAdapter).forEach(function (test) { - var parser = new UAEmbeddableParser(treeAdapter); + var parser = new JsDomParser(treeAdapter); _test[getFullTestName(test)] = function (done) { function assertResult(result) { From 7bb552ef8c330a5533140bf0ce11e85896145d46 Mon Sep 17 00:00:00 2001 From: inikulin Date: Mon, 22 Sep 2014 23:55:18 +0400 Subject: [PATCH 09/12] Refactor API --- lib/jsdom/jsdom_parser.js | 32 ++-- .../{parser_controller.js => parsing_unit.js} | 19 +- lib/tree_construction/parser.js | 4 +- test/fixtures/jsdom_parser_test.js | 163 +++++++++--------- 4 files changed, 112 insertions(+), 106 deletions(-) rename lib/jsdom/{parser_controller.js => parsing_unit.js} (63%) diff --git a/lib/jsdom/jsdom_parser.js b/lib/jsdom/jsdom_parser.js index 13f539834..4bf0f3bc2 100644 --- a/lib/jsdom/jsdom_parser.js +++ b/lib/jsdom/jsdom_parser.js @@ -1,33 +1,23 @@ var Parser = require('../tree_construction/parser'), - ParserController = require('./parser_controller'); - -var JsDomParser = module.exports = function (treeAdapter) { - this.treeAdapter = treeAdapter; -}; + ParsingUnit = require('./parsing_unit'); //API -JsDomParser.prototype.parseDocument = function (html, scriptHandler, callback) { - //NOTE: scriptHandler is an optional arg - if(!callback) { - callback = scriptHandler; - scriptHandler = void 0; - } - +exports.parseDocument = function (html, treeAdapter) { //NOTE: this should be reentrant, so we create new parser here - var parser = new Parser(this.treeAdapter, scriptHandler), - parserController = new ParserController(parser); + var parser = new Parser(treeAdapter), + parsingUnit = new ParsingUnit(parser); //NOTE: override parser loop method parser._runParsingLoop = function () { - parserController.parsingLoopLock = true; + parsingUnit.parsingLoopLock = true; - while (!parserController.suspended && !this.stopped) + while (!parsingUnit.suspended && !this.stopped) this._iterateParsingLoop(); - parserController.parsingLoopLock = false; + parsingUnit.parsingLoopLock = false; if (this.stopped) - callback(this.document); + parsingUnit.callback(this.document); }; //NOTE: wait while parserController will be adopted by calling code, then @@ -36,12 +26,12 @@ JsDomParser.prototype.parseDocument = function (html, scriptHandler, callback) { parser.parse(html); }); - return parserController; + return parsingUnit; }; -JsDomParser.prototype.parseInnerHtml = function (innerHtml, contextElement) { +exports.parseInnerHtml = function (innerHtml, contextElement, treeAdapter) { //NOTE: this should be reentrant, so we create new parser here - var parser = new Parser(this.treeAdapter); + var parser = new Parser(treeAdapter); return parser.parseFragment(innerHtml, contextElement); }; \ No newline at end of file diff --git a/lib/jsdom/parser_controller.js b/lib/jsdom/parsing_unit.js similarity index 63% rename from lib/jsdom/parser_controller.js rename to lib/jsdom/parsing_unit.js index bec4ed4ee..66a97641e 100644 --- a/lib/jsdom/parser_controller.js +++ b/lib/jsdom/parsing_unit.js @@ -1,10 +1,11 @@ -var ParserController = module.exports = function (parser) { +var ParsingUnit = module.exports = function (parser) { this.parser = parser; this.suspended = false; this.parsingLoopLock = false; + this.callback = null; }; -ParserController.prototype._stateGuard = function (suspend) { +ParsingUnit.prototype._stateGuard = function (suspend) { if (this.suspended && suspend) throw new Error('parse5: Parser was already suspended. Please, check your control flow logic.'); @@ -14,11 +15,11 @@ ParserController.prototype._stateGuard = function (suspend) { return suspend; }; -ParserController.prototype.suspend = function () { +ParsingUnit.prototype.suspend = function () { this.suspended = this._stateGuard(true); }; -ParserController.prototype.resume = function () { +ParsingUnit.prototype.resume = function () { this.suspended = this._stateGuard(false); //NOTE: don't enter parsing loop if it is locked. Without this lock _runParsingLoop() may be called @@ -27,6 +28,14 @@ ParserController.prototype.resume = function () { this.parser._runParsingLoop(); }; -ParserController.prototype.documentWrite = function (html) { +ParsingUnit.prototype.documentWrite = function (html) { this.parser.tokenizer.preprocessor.write(html); }; + +ParsingUnit.prototype.handleScripts = function (scriptHandler) { + this.parser.scriptHandler = scriptHandler; +}; + +ParsingUnit.prototype.done = function (callback) { + this.callback = callback; +}; diff --git a/lib/tree_construction/parser.js b/lib/tree_construction/parser.js index e4e1e483c..d901d82b1 100644 --- a/lib/tree_construction/parser.js +++ b/lib/tree_construction/parser.js @@ -310,9 +310,9 @@ function getSearchableIndexInputAttrs(isindexStartTagToken) { } //Parser -var Parser = module.exports = function (treeAdapter, scriptHandler) { +var Parser = module.exports = function (treeAdapter) { this.treeAdapter = treeAdapter || DefaultTreeAdapter; - this.scriptHandler = scriptHandler; + this.scriptHandler = null; }; //API diff --git a/test/fixtures/jsdom_parser_test.js b/test/fixtures/jsdom_parser_test.js index fc66486a4..33f38c64c 100644 --- a/test/fixtures/jsdom_parser_test.js +++ b/test/fixtures/jsdom_parser_test.js @@ -7,31 +7,32 @@ var assert = require('assert'), exports['State guard'] = function () { var docHtml = '', - parser = new JsDomParser(), - getParserController = function () { - return parser.parseDocument(docHtml, function () { - //NOTE: unreachable =) + getParsingUnit = function () { + var parsing = JsDomParser.parseDocument(docHtml); + + parsing.done(function noop() { + //NOTE: do nothing =) }); + return parsing; }; assert.throws(function () { - var parserController = getParserController(); + var parsing = getParsingUnit(); - parserController.suspend(); - parserController.suspend(); + parsing.suspend(); + parsing.suspend(); }); assert.throws(function () { - var parserController = getParserController(); + var parsing = getParsingUnit(); - parserController.resume(); + parsing.resume(); }); }; exports['Reentrancy'] = function (done) { - var parser = new JsDomParser(), - serializer = new Serializer(), + var serializer = new Serializer(), asyncAssertionCount = 0, docHtml1 = '', docHtml2 = 'Beep boop', @@ -40,31 +41,36 @@ exports['Reentrancy'] = function (done) { '

' ]; - var parserController = parser.parseDocument(docHtml1, function () { - parserController.suspend(); + var parsing1 = JsDomParser.parseDocument(docHtml1); + + parsing1.done(function (document1) { + var actual = serializer.serialize(document1); + + assert.strictEqual(asyncAssertionCount, 3); + assert.ok(actual === docHtml1, TestUtils.getStringDiffMsg(actual, docHtml1)); + done(); + }); + + parsing1.handleScripts(function () { + parsing1.suspend(); setTimeout(function () { fragments.forEach(function (fragment) { - var actual = serializer.serialize(parser.parseInnerHtml(fragment)); + var actual = serializer.serialize(JsDomParser.parseInnerHtml(fragment)); assert.ok(actual === fragment, TestUtils.getStringDiffMsg(actual, fragment)); asyncAssertionCount++; }); - parser.parseDocument(docHtml2, function (document2) { + var parsing2 = JsDomParser.parseDocument(docHtml2); + + parsing2.done(function (document2) { var actual = serializer.serialize(document2); assert.ok(actual === docHtml2, TestUtils.getStringDiffMsg(actual, docHtml2)); asyncAssertionCount++; - parserController.resume(); + parsing1.resume(); }); }); - - }, function (document1) { - var actual = serializer.serialize(document1); - - assert.strictEqual(asyncAssertionCount, 3); - assert.ok(actual === docHtml1, TestUtils.getStringDiffMsg(actual, docHtml1)); - done(); }); }; @@ -77,65 +83,66 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt var testDataDir = path.join(__dirname, '../data/tree_construction'), scriptedTestDataDir = path.join(__dirname, '../data/scripted_tree_construction'); - //Here we go.. - TestUtils.loadTreeConstructionTestData([ - testDataDir, - scriptedTestDataDir - ], treeAdapter).forEach(function (test) { - var parser = new JsDomParser(treeAdapter); - - _test[getFullTestName(test)] = function (done) { - function assertResult(result) { - var actual = TestUtils.serializeToTestDataFormat(result, treeAdapter), - msg = TestUtils.prettyPrintParserAssertionArgs(actual, test.expected); - - assert.strictEqual(actual, test.expected, msg); - - done(); - } - - if (test.fragmentContext) { - var result = parser.parseInnerHtml(test.input, test.fragmentContext); - assertResult(result); - } - - else { - var parserController = parser.parseDocument(test.input, function (document, scriptElement) { - parserController.suspend(); - - //NOTE: test parser suspension in different modes (sync and async). - //If we have script then execute it and resume parser asynchronously. - //Otherwise - resume synchronously. - var scriptTextNode = treeAdapter.getChildNodes(scriptElement)[0], - script = scriptTextNode && treeAdapter.getTextNodeContent(scriptTextNode); - - //NOTE: don't pollute test runner output by console.log() calls from test scripts - if (script && script.trim() && script.indexOf('console.log') === -1) { - setTimeout(function () { - //NOTE: mock document for script evaluation - var document = { - write: function (html) { - parserController.documentWrite(html); - } - }; - - try { - eval(script); - } catch (err) { - //NOTE: ignore broken scripts from test data - } - - parserController.resume(); - }); + function parseDocument(input, callback) { + var parsing = JsDomParser.parseDocument(input, treeAdapter); + + parsing.done(callback); + + parsing.handleScripts(function (document, scriptElement) { + parsing.suspend(); + + //NOTE: test parser suspension in different modes (sync and async). + //If we have script then execute it and resume parser asynchronously. + //Otherwise - resume synchronously. + var scriptTextNode = treeAdapter.getChildNodes(scriptElement)[0], + script = scriptTextNode && treeAdapter.getTextNodeContent(scriptTextNode); + + //NOTE: don't pollute test runner output by console.log() calls from test scripts + if (script && script.trim() && script.indexOf('console.log') === -1) { + setTimeout(function () { + //NOTE: mock document for script evaluation + var document = { + write: function (html) { + parsing.documentWrite(html); } + }; + + try { + eval(script); + } catch (err) { + //NOTE: ignore broken scripts from test data + } - else - parserController.resume(); + parsing.resume(); + }); + } - }, assertResult); - } - }; + else + parsing.resume(); }); + } + + //Here we go.. + TestUtils.loadTreeConstructionTestData([testDataDir, scriptedTestDataDir], treeAdapter).forEach(function (test) { + _test[getFullTestName(test)] = function (done) { + function assertResult(result) { + var actual = TestUtils.serializeToTestDataFormat(result, treeAdapter), + msg = TestUtils.prettyPrintParserAssertionArgs(actual, test.expected); + + assert.strictEqual(actual, test.expected, msg); + + done(); + } + + if (test.fragmentContext) { + var result = JsDomParser.parseInnerHtml(test.input, test.fragmentContext, treeAdapter); + assertResult(result); + } + + else + parseDocument(test.input, assertResult); + }; + }); }); From f8e8bc6d72bcdd03499cffe27dd8790b74b1e3eb Mon Sep 17 00:00:00 2001 From: inikulin Date: Tue, 23 Sep 2014 00:08:03 +0400 Subject: [PATCH 10/12] Extend document with write in tests --- test/fixtures/jsdom_parser_test.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/fixtures/jsdom_parser_test.js b/test/fixtures/jsdom_parser_test.js index 33f38c64c..ceba2af4d 100644 --- a/test/fixtures/jsdom_parser_test.js +++ b/test/fixtures/jsdom_parser_test.js @@ -101,10 +101,8 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt if (script && script.trim() && script.indexOf('console.log') === -1) { setTimeout(function () { //NOTE: mock document for script evaluation - var document = { - write: function (html) { - parsing.documentWrite(html); - } + document.write = function (html) { + parsing.documentWrite(html); }; try { From 9891273a0fb38acbffaa1e9a12dd3edff547791a Mon Sep 17 00:00:00 2001 From: inikulin Date: Tue, 23 Sep 2014 18:12:36 +0400 Subject: [PATCH 11/12] Make parsing unit API chainable --- lib/jsdom/parsing_unit.js | 10 +++ test/fixtures/jsdom_parser_test.js | 110 ++++++++++++++--------------- 2 files changed, 65 insertions(+), 55 deletions(-) diff --git a/lib/jsdom/parsing_unit.js b/lib/jsdom/parsing_unit.js index 66a97641e..bfd5eef91 100644 --- a/lib/jsdom/parsing_unit.js +++ b/lib/jsdom/parsing_unit.js @@ -17,6 +17,8 @@ ParsingUnit.prototype._stateGuard = function (suspend) { ParsingUnit.prototype.suspend = function () { this.suspended = this._stateGuard(true); + + return this; }; ParsingUnit.prototype.resume = function () { @@ -26,16 +28,24 @@ ParsingUnit.prototype.resume = function () { //while parsing loop is still running. E.g. when suspend() and resume() called synchronously. if (!this.parsingLoopLock) this.parser._runParsingLoop(); + + return this; }; ParsingUnit.prototype.documentWrite = function (html) { this.parser.tokenizer.preprocessor.write(html); + + return this; }; ParsingUnit.prototype.handleScripts = function (scriptHandler) { this.parser.scriptHandler = scriptHandler; + + return this; }; ParsingUnit.prototype.done = function (callback) { this.callback = callback; + + return this; }; diff --git a/test/fixtures/jsdom_parser_test.js b/test/fixtures/jsdom_parser_test.js index ceba2af4d..066715002 100644 --- a/test/fixtures/jsdom_parser_test.js +++ b/test/fixtures/jsdom_parser_test.js @@ -41,37 +41,37 @@ exports['Reentrancy'] = function (done) { '

' ]; - var parsing1 = JsDomParser.parseDocument(docHtml1); + var parsing1 = JsDomParser.parseDocument(docHtml1) - parsing1.done(function (document1) { - var actual = serializer.serialize(document1); + .done(function (document1) { + var actual = serializer.serialize(document1); - assert.strictEqual(asyncAssertionCount, 3); - assert.ok(actual === docHtml1, TestUtils.getStringDiffMsg(actual, docHtml1)); - done(); - }); + assert.strictEqual(asyncAssertionCount, 3); + assert.ok(actual === docHtml1, TestUtils.getStringDiffMsg(actual, docHtml1)); + done(); + }) - parsing1.handleScripts(function () { - parsing1.suspend(); + .handleScripts(function () { + parsing1.suspend(); - setTimeout(function () { - fragments.forEach(function (fragment) { - var actual = serializer.serialize(JsDomParser.parseInnerHtml(fragment)); - assert.ok(actual === fragment, TestUtils.getStringDiffMsg(actual, fragment)); - asyncAssertionCount++; - }); + setTimeout(function () { + fragments.forEach(function (fragment) { + var actual = serializer.serialize(JsDomParser.parseInnerHtml(fragment)); + assert.ok(actual === fragment, TestUtils.getStringDiffMsg(actual, fragment)); + asyncAssertionCount++; + }); - var parsing2 = JsDomParser.parseDocument(docHtml2); + var parsing2 = JsDomParser.parseDocument(docHtml2); - parsing2.done(function (document2) { - var actual = serializer.serialize(document2); + parsing2.done(function (document2) { + var actual = serializer.serialize(document2); - assert.ok(actual === docHtml2, TestUtils.getStringDiffMsg(actual, docHtml2)); - asyncAssertionCount++; - parsing1.resume(); + assert.ok(actual === docHtml2, TestUtils.getStringDiffMsg(actual, docHtml2)); + asyncAssertionCount++; + parsing1.resume(); + }); }); }); - }); }; @@ -84,40 +84,40 @@ TestUtils.generateTestsForEachTreeAdapter(module.exports, function (_test, adapt scriptedTestDataDir = path.join(__dirname, '../data/scripted_tree_construction'); function parseDocument(input, callback) { - var parsing = JsDomParser.parseDocument(input, treeAdapter); - - parsing.done(callback); - - parsing.handleScripts(function (document, scriptElement) { - parsing.suspend(); - - //NOTE: test parser suspension in different modes (sync and async). - //If we have script then execute it and resume parser asynchronously. - //Otherwise - resume synchronously. - var scriptTextNode = treeAdapter.getChildNodes(scriptElement)[0], - script = scriptTextNode && treeAdapter.getTextNodeContent(scriptTextNode); - - //NOTE: don't pollute test runner output by console.log() calls from test scripts - if (script && script.trim() && script.indexOf('console.log') === -1) { - setTimeout(function () { - //NOTE: mock document for script evaluation - document.write = function (html) { - parsing.documentWrite(html); - }; - - try { - eval(script); - } catch (err) { - //NOTE: ignore broken scripts from test data - } - + var parsing = JsDomParser.parseDocument(input, treeAdapter) + + .done(callback) + + .handleScripts(function (document, scriptElement) { + parsing.suspend(); + + //NOTE: test parser suspension in different modes (sync and async). + //If we have script then execute it and resume parser asynchronously. + //Otherwise - resume synchronously. + var scriptTextNode = treeAdapter.getChildNodes(scriptElement)[0], + script = scriptTextNode && treeAdapter.getTextNodeContent(scriptTextNode); + + //NOTE: don't pollute test runner output by console.log() calls from test scripts + if (script && script.trim() && script.indexOf('console.log') === -1) { + setTimeout(function () { + //NOTE: mock document for script evaluation + document.write = function (html) { + parsing.documentWrite(html); + }; + + try { + eval(script); + } catch (err) { + //NOTE: ignore broken scripts from test data + } + + parsing.resume(); + }); + } + + else parsing.resume(); - }); - } - - else - parsing.resume(); - }); + }); } //Here we go.. From d34c57c94f756ade725d4b90f1ee8acfa5363fbe Mon Sep 17 00:00:00 2001 From: inikulin Date: Sat, 4 Oct 2014 22:56:58 +0400 Subject: [PATCH 12/12] Speed up a little bit via use strict --- index.js | 2 + lib/common/foreign_content.js | 6 +- lib/common/html.js | 530 +- lib/common/unicode.js | 94 +- lib/jsdom/jsdom_parser.js | 2 + lib/jsdom/parsing_unit.js | 2 + lib/simple_api/simple_api_parser.js | 138 +- lib/simple_api/tokenizer_proxy.js | 240 +- lib/tokenization/named_entity_trie.js | 114 +- lib/tokenization/preprocessor.js | 198 +- lib/tokenization/tokenizer.js | 4602 +++++++-------- lib/tree_adapters/default.js | 398 +- lib/tree_adapters/htmlparser2.js | 536 +- lib/tree_construction/doctype.js | 216 +- .../formatting_element_list.js | 332 +- lib/tree_construction/open_element_stack.js | 686 +-- lib/tree_construction/parser.js | 5172 +++++++++-------- lib/tree_serialization/tree_serializer.js | 358 +- 18 files changed, 6831 insertions(+), 6795 deletions(-) diff --git a/index.js b/index.js index 568d0ea3e..791217f6e 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,5 @@ +'use strict'; + exports.Parser = require('./lib/tree_construction/parser'); exports.SimpleApiParser = require('./lib/simple_api/simple_api_parser'); exports.TreeSerializer = require('./lib/tree_serialization/tree_serializer'); diff --git a/lib/common/foreign_content.js b/lib/common/foreign_content.js index 1f0b63cf6..a335960cc 100644 --- a/lib/common/foreign_content.js +++ b/lib/common/foreign_content.js @@ -1,3 +1,5 @@ +'use strict'; + var Tokenizer = require('../tokenization/tokenizer'), HTML = require('./html'); @@ -189,8 +191,8 @@ exports.causesExit = function (startTagToken) { var tn = startTagToken.tagName; if (tn === $.FONT && (Tokenizer.getTokenAttr(startTagToken, ATTRS.COLOR) !== null || - Tokenizer.getTokenAttr(startTagToken, ATTRS.SIZE) !== null || - Tokenizer.getTokenAttr(startTagToken, ATTRS.FACE) !== null)) { + Tokenizer.getTokenAttr(startTagToken, ATTRS.SIZE) !== null || + Tokenizer.getTokenAttr(startTagToken, ATTRS.FACE) !== null)) { return true; } diff --git a/lib/common/html.js b/lib/common/html.js index 920f572c3..e65db0540 100644 --- a/lib/common/html.js +++ b/lib/common/html.js @@ -1,264 +1,266 @@ -var NS = exports.NAMESPACES = { - HTML: 'http://www.w3.org/1999/xhtml', - MATHML: 'http://www.w3.org/1998/Math/MathML', - SVG: 'http://www.w3.org/2000/svg', - XLINK: 'http://www.w3.org/1999/xlink', - XML: 'http://www.w3.org/XML/1998/namespace', - XMLNS: 'http://www.w3.org/2000/xmlns/' -}; - -exports.ATTRS = { - TYPE: 'type', - ACTION: 'action', - ENCODING: 'encoding', - PROMPT: 'prompt', - NAME: 'name', - COLOR: 'color', - FACE: 'face', - SIZE: 'size' -}; - -var $ = exports.TAG_NAMES = { - A: 'a', - ADDRESS: 'address', - ANNOTATION_XML: 'annotation-xml', - APPLET: 'applet', - AREA: 'area', - ARTICLE: 'article', - ASIDE: 'aside', - - B: 'b', - BASE: 'base', - BASEFONT: 'basefont', - BGSOUND: 'bgsound', - BIG: 'big', - BLOCKQUOTE: 'blockquote', - BODY: 'body', - BR: 'br', - BUTTON: 'button', - - CAPTION: 'caption', - CENTER: 'center', - CODE: 'code', - COL: 'col', - COLGROUP: 'colgroup', - COMMAND: 'command', - - DD: 'dd', - DESC: 'desc', - DETAILS: 'details', - DIALOG: 'dialog', - DIR: 'dir', - DIV: 'div', - DL: 'dl', - DT: 'dt', - - EM: 'em', - EMBED: 'embed', - - FIELDSET: 'fieldset', - FIGCAPTION: 'figcaption', - FIGURE: 'figure', - FONT: 'font', - FOOTER: 'footer', - FOREIGN_OBJECT: 'foreignObject', - FORM: 'form', - FRAME: 'frame', - FRAMESET: 'frameset', - - H1: 'h1', - H2: 'h2', - H3: 'h3', - H4: 'h4', - H5: 'h5', - H6: 'h6', - HEAD: 'head', - HEADER: 'header', - HGROUP: 'hgroup', - HR: 'hr', - HTML: 'html', - - I: 'i', - IMG: 'img', - IMAGE: 'image', - INPUT: 'input', - IFRAME: 'iframe', - ISINDEX: 'isindex', - - KEYGEN: 'keygen', - - LABEL: 'label', - LI: 'li', - LINK: 'link', - LISTING: 'listing', - - MAIN: 'main', - MALIGNMARK: 'malignmark', - MARQUEE: 'marquee', - MATH: 'math', - MENU: 'menu', - MENUITEM: 'menuitem', - META: 'meta', - MGLYPH: 'mglyph', - MI: 'mi', - MO: 'mo', - MN: 'mn', - MS: 'ms', - MTEXT: 'mtext', - - NAV: 'nav', - NOBR: 'nobr', - NOFRAMES: 'noframes', - NOEMBED: 'noembed', - NOSCRIPT: 'noscript', - - OBJECT: 'object', - OL: 'ol', - OPTGROUP: 'optgroup', - OPTION: 'option', - - P: 'p', - PARAM: 'param', - PLAINTEXT: 'plaintext', - PRE: 'pre', - - RP: 'rp', - RT: 'rt', - RUBY: 'ruby', - - S: 's', - SCRIPT: 'script', - SECTION: 'section', - SELECT: 'select', - SOURCE: 'source', - SMALL: 'small', - SPAN: 'span', - STRIKE: 'strike', - STRONG: 'strong', - STYLE: 'style', - SUB: 'sub', - SUMMARY: 'summary', - SUP: 'sup', - - TABLE: 'table', - TBODY: 'tbody', - TEXTAREA: 'textarea', - TFOOT: 'tfoot', - TD: 'td', - TH: 'th', - THEAD: 'thead', - TITLE: 'title', - TR: 'tr', - TRACK: 'track', - TT: 'tt', - - U: 'u', - UL: 'ul', - - SVG: 'svg', - - VAR: 'var', - - WBR: 'wbr', - - XMP: 'xmp' -}; - -var SPECIAL_ELEMENTS = exports.SPECIAL_ELEMENTS = {}; - -SPECIAL_ELEMENTS[NS.HTML] = {}; -SPECIAL_ELEMENTS[NS.HTML][$.ADDRESS] = true; -SPECIAL_ELEMENTS[NS.HTML][$.APPLET] = true; -SPECIAL_ELEMENTS[NS.HTML][$.AREA] = true; -SPECIAL_ELEMENTS[NS.HTML][$.ARTICLE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.ASIDE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.BASE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.BASEFONT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.BGSOUND] = true; -SPECIAL_ELEMENTS[NS.HTML][$.BLOCKQUOTE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.BODY] = true; -SPECIAL_ELEMENTS[NS.HTML][$.BR] = true; -SPECIAL_ELEMENTS[NS.HTML][$.BUTTON] = true; -SPECIAL_ELEMENTS[NS.HTML][$.CAPTION] = true; -SPECIAL_ELEMENTS[NS.HTML][$.CENTER] = true; -SPECIAL_ELEMENTS[NS.HTML][$.COL] = true; -SPECIAL_ELEMENTS[NS.HTML][$.COLGROUP] = true; -SPECIAL_ELEMENTS[NS.HTML][$.DD] = true; -SPECIAL_ELEMENTS[NS.HTML][$.DETAILS] = true; -SPECIAL_ELEMENTS[NS.HTML][$.DIR] = true; -SPECIAL_ELEMENTS[NS.HTML][$.DIV] = true; -SPECIAL_ELEMENTS[NS.HTML][$.DL] = true; -SPECIAL_ELEMENTS[NS.HTML][$.DT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.EMBED] = true; -SPECIAL_ELEMENTS[NS.HTML][$.FIELDSET] = true; -SPECIAL_ELEMENTS[NS.HTML][$.FIGCAPTION] = true; -SPECIAL_ELEMENTS[NS.HTML][$.FIGURE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.FOOTER] = true; -SPECIAL_ELEMENTS[NS.HTML][$.FORM] = true; -SPECIAL_ELEMENTS[NS.HTML][$.FRAME] = true; -SPECIAL_ELEMENTS[NS.HTML][$.FRAMESET] = true; -SPECIAL_ELEMENTS[NS.HTML][$.H1] = true; -SPECIAL_ELEMENTS[NS.HTML][$.H2] = true; -SPECIAL_ELEMENTS[NS.HTML][$.H3] = true; -SPECIAL_ELEMENTS[NS.HTML][$.H4] = true; -SPECIAL_ELEMENTS[NS.HTML][$.H5] = true; -SPECIAL_ELEMENTS[NS.HTML][$.H6] = true; -SPECIAL_ELEMENTS[NS.HTML][$.HEAD] = true; -SPECIAL_ELEMENTS[NS.HTML][$.HEADER] = true; -SPECIAL_ELEMENTS[NS.HTML][$.HGROUP] = true; -SPECIAL_ELEMENTS[NS.HTML][$.HR] = true; -SPECIAL_ELEMENTS[NS.HTML][$.HTML] = true; -SPECIAL_ELEMENTS[NS.HTML][$.IFRAME] = true; -SPECIAL_ELEMENTS[NS.HTML][$.IMG] = true; -SPECIAL_ELEMENTS[NS.HTML][$.INPUT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.ISINDEX] = true; -SPECIAL_ELEMENTS[NS.HTML][$.LI] = true; -SPECIAL_ELEMENTS[NS.HTML][$.LINK] = true; -SPECIAL_ELEMENTS[NS.HTML][$.LISTING] = true; -SPECIAL_ELEMENTS[NS.HTML][$.MAIN] = true; -SPECIAL_ELEMENTS[NS.HTML][$.MARQUEE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.MENU] = true; -SPECIAL_ELEMENTS[NS.HTML][$.MENUITEM] = true; -SPECIAL_ELEMENTS[NS.HTML][$.META] = true; -SPECIAL_ELEMENTS[NS.HTML][$.NAV] = true; -SPECIAL_ELEMENTS[NS.HTML][$.NOEMBED] = true; -SPECIAL_ELEMENTS[NS.HTML][$.NOFRAMES] = true; -SPECIAL_ELEMENTS[NS.HTML][$.NOSCRIPT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.OBJECT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.OL] = true; -SPECIAL_ELEMENTS[NS.HTML][$.P] = true; -SPECIAL_ELEMENTS[NS.HTML][$.PARAM] = true; -SPECIAL_ELEMENTS[NS.HTML][$.PLAINTEXT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.PRE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.SCRIPT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.SECTION] = true; -SPECIAL_ELEMENTS[NS.HTML][$.SELECT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.SOURCE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.STYLE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.SUMMARY] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TABLE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TBODY] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TD] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TEXTAREA] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TFOOT] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TH] = true; -SPECIAL_ELEMENTS[NS.HTML][$.THEAD] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TITLE] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TR] = true; -SPECIAL_ELEMENTS[NS.HTML][$.TRACK] = true; -SPECIAL_ELEMENTS[NS.HTML][$.UL] = true; -SPECIAL_ELEMENTS[NS.HTML][$.WBR] = true; -SPECIAL_ELEMENTS[NS.HTML][$.XMP] = true; - -SPECIAL_ELEMENTS[NS.MATHML] = {}; -SPECIAL_ELEMENTS[NS.MATHML][$.MI] = true; -SPECIAL_ELEMENTS[NS.MATHML][$.MO] = true; -SPECIAL_ELEMENTS[NS.MATHML][$.MN] = true; -SPECIAL_ELEMENTS[NS.MATHML][$.MS] = true; -SPECIAL_ELEMENTS[NS.MATHML][$.MTEXT] = true; -SPECIAL_ELEMENTS[NS.MATHML][$.ANNOTATION_XML] = true; - -SPECIAL_ELEMENTS[NS.SVG] = {}; -SPECIAL_ELEMENTS[NS.SVG][$.TITLE] = true; -SPECIAL_ELEMENTS[NS.SVG][$.FOREIGN_OBJECT] = true; -SPECIAL_ELEMENTS[NS.SVG][$.DESC] = true; +'use strict'; + +var NS = exports.NAMESPACES = { + HTML: 'http://www.w3.org/1999/xhtml', + MATHML: 'http://www.w3.org/1998/Math/MathML', + SVG: 'http://www.w3.org/2000/svg', + XLINK: 'http://www.w3.org/1999/xlink', + XML: 'http://www.w3.org/XML/1998/namespace', + XMLNS: 'http://www.w3.org/2000/xmlns/' +}; + +exports.ATTRS = { + TYPE: 'type', + ACTION: 'action', + ENCODING: 'encoding', + PROMPT: 'prompt', + NAME: 'name', + COLOR: 'color', + FACE: 'face', + SIZE: 'size' +}; + +var $ = exports.TAG_NAMES = { + A: 'a', + ADDRESS: 'address', + ANNOTATION_XML: 'annotation-xml', + APPLET: 'applet', + AREA: 'area', + ARTICLE: 'article', + ASIDE: 'aside', + + B: 'b', + BASE: 'base', + BASEFONT: 'basefont', + BGSOUND: 'bgsound', + BIG: 'big', + BLOCKQUOTE: 'blockquote', + BODY: 'body', + BR: 'br', + BUTTON: 'button', + + CAPTION: 'caption', + CENTER: 'center', + CODE: 'code', + COL: 'col', + COLGROUP: 'colgroup', + COMMAND: 'command', + + DD: 'dd', + DESC: 'desc', + DETAILS: 'details', + DIALOG: 'dialog', + DIR: 'dir', + DIV: 'div', + DL: 'dl', + DT: 'dt', + + EM: 'em', + EMBED: 'embed', + + FIELDSET: 'fieldset', + FIGCAPTION: 'figcaption', + FIGURE: 'figure', + FONT: 'font', + FOOTER: 'footer', + FOREIGN_OBJECT: 'foreignObject', + FORM: 'form', + FRAME: 'frame', + FRAMESET: 'frameset', + + H1: 'h1', + H2: 'h2', + H3: 'h3', + H4: 'h4', + H5: 'h5', + H6: 'h6', + HEAD: 'head', + HEADER: 'header', + HGROUP: 'hgroup', + HR: 'hr', + HTML: 'html', + + I: 'i', + IMG: 'img', + IMAGE: 'image', + INPUT: 'input', + IFRAME: 'iframe', + ISINDEX: 'isindex', + + KEYGEN: 'keygen', + + LABEL: 'label', + LI: 'li', + LINK: 'link', + LISTING: 'listing', + + MAIN: 'main', + MALIGNMARK: 'malignmark', + MARQUEE: 'marquee', + MATH: 'math', + MENU: 'menu', + MENUITEM: 'menuitem', + META: 'meta', + MGLYPH: 'mglyph', + MI: 'mi', + MO: 'mo', + MN: 'mn', + MS: 'ms', + MTEXT: 'mtext', + + NAV: 'nav', + NOBR: 'nobr', + NOFRAMES: 'noframes', + NOEMBED: 'noembed', + NOSCRIPT: 'noscript', + + OBJECT: 'object', + OL: 'ol', + OPTGROUP: 'optgroup', + OPTION: 'option', + + P: 'p', + PARAM: 'param', + PLAINTEXT: 'plaintext', + PRE: 'pre', + + RP: 'rp', + RT: 'rt', + RUBY: 'ruby', + + S: 's', + SCRIPT: 'script', + SECTION: 'section', + SELECT: 'select', + SOURCE: 'source', + SMALL: 'small', + SPAN: 'span', + STRIKE: 'strike', + STRONG: 'strong', + STYLE: 'style', + SUB: 'sub', + SUMMARY: 'summary', + SUP: 'sup', + + TABLE: 'table', + TBODY: 'tbody', + TEXTAREA: 'textarea', + TFOOT: 'tfoot', + TD: 'td', + TH: 'th', + THEAD: 'thead', + TITLE: 'title', + TR: 'tr', + TRACK: 'track', + TT: 'tt', + + U: 'u', + UL: 'ul', + + SVG: 'svg', + + VAR: 'var', + + WBR: 'wbr', + + XMP: 'xmp' +}; + +var SPECIAL_ELEMENTS = exports.SPECIAL_ELEMENTS = {}; + +SPECIAL_ELEMENTS[NS.HTML] = {}; +SPECIAL_ELEMENTS[NS.HTML][$.ADDRESS] = true; +SPECIAL_ELEMENTS[NS.HTML][$.APPLET] = true; +SPECIAL_ELEMENTS[NS.HTML][$.AREA] = true; +SPECIAL_ELEMENTS[NS.HTML][$.ARTICLE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.ASIDE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.BASE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.BASEFONT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.BGSOUND] = true; +SPECIAL_ELEMENTS[NS.HTML][$.BLOCKQUOTE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.BODY] = true; +SPECIAL_ELEMENTS[NS.HTML][$.BR] = true; +SPECIAL_ELEMENTS[NS.HTML][$.BUTTON] = true; +SPECIAL_ELEMENTS[NS.HTML][$.CAPTION] = true; +SPECIAL_ELEMENTS[NS.HTML][$.CENTER] = true; +SPECIAL_ELEMENTS[NS.HTML][$.COL] = true; +SPECIAL_ELEMENTS[NS.HTML][$.COLGROUP] = true; +SPECIAL_ELEMENTS[NS.HTML][$.DD] = true; +SPECIAL_ELEMENTS[NS.HTML][$.DETAILS] = true; +SPECIAL_ELEMENTS[NS.HTML][$.DIR] = true; +SPECIAL_ELEMENTS[NS.HTML][$.DIV] = true; +SPECIAL_ELEMENTS[NS.HTML][$.DL] = true; +SPECIAL_ELEMENTS[NS.HTML][$.DT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.EMBED] = true; +SPECIAL_ELEMENTS[NS.HTML][$.FIELDSET] = true; +SPECIAL_ELEMENTS[NS.HTML][$.FIGCAPTION] = true; +SPECIAL_ELEMENTS[NS.HTML][$.FIGURE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.FOOTER] = true; +SPECIAL_ELEMENTS[NS.HTML][$.FORM] = true; +SPECIAL_ELEMENTS[NS.HTML][$.FRAME] = true; +SPECIAL_ELEMENTS[NS.HTML][$.FRAMESET] = true; +SPECIAL_ELEMENTS[NS.HTML][$.H1] = true; +SPECIAL_ELEMENTS[NS.HTML][$.H2] = true; +SPECIAL_ELEMENTS[NS.HTML][$.H3] = true; +SPECIAL_ELEMENTS[NS.HTML][$.H4] = true; +SPECIAL_ELEMENTS[NS.HTML][$.H5] = true; +SPECIAL_ELEMENTS[NS.HTML][$.H6] = true; +SPECIAL_ELEMENTS[NS.HTML][$.HEAD] = true; +SPECIAL_ELEMENTS[NS.HTML][$.HEADER] = true; +SPECIAL_ELEMENTS[NS.HTML][$.HGROUP] = true; +SPECIAL_ELEMENTS[NS.HTML][$.HR] = true; +SPECIAL_ELEMENTS[NS.HTML][$.HTML] = true; +SPECIAL_ELEMENTS[NS.HTML][$.IFRAME] = true; +SPECIAL_ELEMENTS[NS.HTML][$.IMG] = true; +SPECIAL_ELEMENTS[NS.HTML][$.INPUT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.ISINDEX] = true; +SPECIAL_ELEMENTS[NS.HTML][$.LI] = true; +SPECIAL_ELEMENTS[NS.HTML][$.LINK] = true; +SPECIAL_ELEMENTS[NS.HTML][$.LISTING] = true; +SPECIAL_ELEMENTS[NS.HTML][$.MAIN] = true; +SPECIAL_ELEMENTS[NS.HTML][$.MARQUEE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.MENU] = true; +SPECIAL_ELEMENTS[NS.HTML][$.MENUITEM] = true; +SPECIAL_ELEMENTS[NS.HTML][$.META] = true; +SPECIAL_ELEMENTS[NS.HTML][$.NAV] = true; +SPECIAL_ELEMENTS[NS.HTML][$.NOEMBED] = true; +SPECIAL_ELEMENTS[NS.HTML][$.NOFRAMES] = true; +SPECIAL_ELEMENTS[NS.HTML][$.NOSCRIPT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.OBJECT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.OL] = true; +SPECIAL_ELEMENTS[NS.HTML][$.P] = true; +SPECIAL_ELEMENTS[NS.HTML][$.PARAM] = true; +SPECIAL_ELEMENTS[NS.HTML][$.PLAINTEXT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.PRE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.SCRIPT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.SECTION] = true; +SPECIAL_ELEMENTS[NS.HTML][$.SELECT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.SOURCE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.STYLE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.SUMMARY] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TABLE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TBODY] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TD] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TEXTAREA] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TFOOT] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TH] = true; +SPECIAL_ELEMENTS[NS.HTML][$.THEAD] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TITLE] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TR] = true; +SPECIAL_ELEMENTS[NS.HTML][$.TRACK] = true; +SPECIAL_ELEMENTS[NS.HTML][$.UL] = true; +SPECIAL_ELEMENTS[NS.HTML][$.WBR] = true; +SPECIAL_ELEMENTS[NS.HTML][$.XMP] = true; + +SPECIAL_ELEMENTS[NS.MATHML] = {}; +SPECIAL_ELEMENTS[NS.MATHML][$.MI] = true; +SPECIAL_ELEMENTS[NS.MATHML][$.MO] = true; +SPECIAL_ELEMENTS[NS.MATHML][$.MN] = true; +SPECIAL_ELEMENTS[NS.MATHML][$.MS] = true; +SPECIAL_ELEMENTS[NS.MATHML][$.MTEXT] = true; +SPECIAL_ELEMENTS[NS.MATHML][$.ANNOTATION_XML] = true; + +SPECIAL_ELEMENTS[NS.SVG] = {}; +SPECIAL_ELEMENTS[NS.SVG][$.TITLE] = true; +SPECIAL_ELEMENTS[NS.SVG][$.FOREIGN_OBJECT] = true; +SPECIAL_ELEMENTS[NS.SVG][$.DESC] = true; diff --git a/lib/common/unicode.js b/lib/common/unicode.js index 55115bf84..a996dda88 100644 --- a/lib/common/unicode.js +++ b/lib/common/unicode.js @@ -1,46 +1,48 @@ -exports.REPLACEMENT_CHARACTER = '\uFFFD'; - -exports.CODE_POINTS = { - EOF: -1, - NULL: 0x00, - TABULATION: 0x09, - CARRIAGE_RETURN: 0x0D, - LINE_FEED: 0x0A, - FORM_FEED: 0x0C, - SPACE: 0x20, - EXCLAMATION_MARK: 0x21, - QUOTATION_MARK: 0x22, - NUMBER_SIGN: 0x23, - AMPERSAND: 0x26, - APOSTROPHE: 0x27, - HYPHEN_MINUS: 0x2D, - SOLIDUS: 0x2F, - DIGIT_0: 0x30, - DIGIT_9: 0x39, - SEMICOLON: 0x3B, - LESS_THAN_SIGN: 0x3C, - EQUALS_SIGN: 0x3D, - GREATER_THAN_SIGN: 0x3E, - QUESTION_MARK: 0x3F, - LATIN_CAPITAL_A: 0x41, - LATIN_CAPITAL_F: 0x46, - LATIN_CAPITAL_X: 0x58, - LATIN_CAPITAL_Z: 0x5A, - GRAVE_ACCENT: 0x60, - LATIN_SMALL_A: 0x61, - LATIN_SMALL_F: 0x66, - LATIN_SMALL_X: 0x78, - LATIN_SMALL_Z: 0x7A, - BOM: 0xFEFF, - REPLACEMENT_CHARACTER: 0xFFFD -}; - -exports.CODE_POINT_SEQUENCES = { - DASH_DASH_STRING: [0x2D, 0x2D], //-- - DOCTYPE_STRING: [0x44, 0x4F, 0x43, 0x54, 0x59, 0x50, 0x45], //DOCTYPE - CDATA_START_STRING: [0x5B, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5B], //[CDATA[ - CDATA_END_STRING: [0x5D, 0x5D, 0x3E], //]]> - SCRIPT_STRING: [0x73, 0x63, 0x72, 0x69, 0x70, 0x74], //script - PUBLIC_STRING: [0x50, 0x55, 0x42, 0x4C, 0x49, 0x43], //PUBLIC - SYSTEM_STRING: [0x53, 0x59, 0x53, 0x54, 0x45, 0x4D] //SYSTEM -}; +'use strict'; + +exports.REPLACEMENT_CHARACTER = '\uFFFD'; + +exports.CODE_POINTS = { + EOF: -1, + NULL: 0x00, + TABULATION: 0x09, + CARRIAGE_RETURN: 0x0D, + LINE_FEED: 0x0A, + FORM_FEED: 0x0C, + SPACE: 0x20, + EXCLAMATION_MARK: 0x21, + QUOTATION_MARK: 0x22, + NUMBER_SIGN: 0x23, + AMPERSAND: 0x26, + APOSTROPHE: 0x27, + HYPHEN_MINUS: 0x2D, + SOLIDUS: 0x2F, + DIGIT_0: 0x30, + DIGIT_9: 0x39, + SEMICOLON: 0x3B, + LESS_THAN_SIGN: 0x3C, + EQUALS_SIGN: 0x3D, + GREATER_THAN_SIGN: 0x3E, + QUESTION_MARK: 0x3F, + LATIN_CAPITAL_A: 0x41, + LATIN_CAPITAL_F: 0x46, + LATIN_CAPITAL_X: 0x58, + LATIN_CAPITAL_Z: 0x5A, + GRAVE_ACCENT: 0x60, + LATIN_SMALL_A: 0x61, + LATIN_SMALL_F: 0x66, + LATIN_SMALL_X: 0x78, + LATIN_SMALL_Z: 0x7A, + BOM: 0xFEFF, + REPLACEMENT_CHARACTER: 0xFFFD +}; + +exports.CODE_POINT_SEQUENCES = { + DASH_DASH_STRING: [0x2D, 0x2D], //-- + DOCTYPE_STRING: [0x44, 0x4F, 0x43, 0x54, 0x59, 0x50, 0x45], //DOCTYPE + CDATA_START_STRING: [0x5B, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5B], //[CDATA[ + CDATA_END_STRING: [0x5D, 0x5D, 0x3E], //]]> + SCRIPT_STRING: [0x73, 0x63, 0x72, 0x69, 0x70, 0x74], //script + PUBLIC_STRING: [0x50, 0x55, 0x42, 0x4C, 0x49, 0x43], //PUBLIC + SYSTEM_STRING: [0x53, 0x59, 0x53, 0x54, 0x45, 0x4D] //SYSTEM +}; diff --git a/lib/jsdom/jsdom_parser.js b/lib/jsdom/jsdom_parser.js index 4bf0f3bc2..96fa8d04e 100644 --- a/lib/jsdom/jsdom_parser.js +++ b/lib/jsdom/jsdom_parser.js @@ -1,3 +1,5 @@ +'use strict'; + var Parser = require('../tree_construction/parser'), ParsingUnit = require('./parsing_unit'); diff --git a/lib/jsdom/parsing_unit.js b/lib/jsdom/parsing_unit.js index bfd5eef91..2060896e7 100644 --- a/lib/jsdom/parsing_unit.js +++ b/lib/jsdom/parsing_unit.js @@ -1,3 +1,5 @@ +'use strict'; + var ParsingUnit = module.exports = function (parser) { this.parser = parser; this.suspended = false; diff --git a/lib/simple_api/simple_api_parser.js b/lib/simple_api/simple_api_parser.js index a7c634039..df7c58a58 100644 --- a/lib/simple_api/simple_api_parser.js +++ b/lib/simple_api/simple_api_parser.js @@ -1,68 +1,70 @@ -var Tokenizer = require('../tokenization/tokenizer'), - TokenizerProxy = require('./tokenizer_proxy'); - -//Skipping handler -function skip() { - //NOTE: do nothing =) -} - -//SimpleApiParser -var SimpleApiParser = module.exports = function (handlers) { - this.handlers = { - doctype: handlers.doctype || skip, - startTag: handlers.startTag || skip, - endTag: handlers.endTag || skip, - text: handlers.text || skip, - comment: handlers.comment || skip - }; -}; - -//API -SimpleApiParser.prototype.parse = function (html) { - var token = null; - - this._reset(html); - - do { - token = this.tokenizerProxy.getNextToken(); - - if (token.type === Tokenizer.CHARACTER_TOKEN || - token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN || - token.type === Tokenizer.NULL_CHARACTER_TOKEN) { - this.pendingText = (this.pendingText || '') + token.chars; - } - - else { - this._emitPendingText(); - this._handleToken(token); - } - } while (token.type !== Tokenizer.EOF_TOKEN) -}; - -//Internals -SimpleApiParser.prototype._handleToken = function (token) { - if (token.type === Tokenizer.START_TAG_TOKEN) - this.handlers.startTag(token.tagName, token.attrs, token.selfClosing); - - else if (token.type === Tokenizer.END_TAG_TOKEN) - this.handlers.endTag(token.tagName); - - else if (token.type === Tokenizer.COMMENT_TOKEN) - this.handlers.comment(token.data); - - else if (token.type === Tokenizer.DOCTYPE_TOKEN) - this.handlers.doctype(token.name, token.publicId, token.systemId); - -}; - -SimpleApiParser.prototype._reset = function (html) { - this.tokenizerProxy = new TokenizerProxy(html); - this.pendingText = null; -}; - -SimpleApiParser.prototype._emitPendingText = function () { - if (this.pendingText !== null) { - this.handlers.text(this.pendingText); - this.pendingText = null; - } -}; +'use strict'; + +var Tokenizer = require('../tokenization/tokenizer'), + TokenizerProxy = require('./tokenizer_proxy'); + +//Skipping handler +function skip() { + //NOTE: do nothing =) +} + +//SimpleApiParser +var SimpleApiParser = module.exports = function (handlers) { + this.handlers = { + doctype: handlers.doctype || skip, + startTag: handlers.startTag || skip, + endTag: handlers.endTag || skip, + text: handlers.text || skip, + comment: handlers.comment || skip + }; +}; + +//API +SimpleApiParser.prototype.parse = function (html) { + var token = null; + + this._reset(html); + + do { + token = this.tokenizerProxy.getNextToken(); + + if (token.type === Tokenizer.CHARACTER_TOKEN || + token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN || + token.type === Tokenizer.NULL_CHARACTER_TOKEN) { + this.pendingText = (this.pendingText || '') + token.chars; + } + + else { + this._emitPendingText(); + this._handleToken(token); + } + } while (token.type !== Tokenizer.EOF_TOKEN) +}; + +//Internals +SimpleApiParser.prototype._handleToken = function (token) { + if (token.type === Tokenizer.START_TAG_TOKEN) + this.handlers.startTag(token.tagName, token.attrs, token.selfClosing); + + else if (token.type === Tokenizer.END_TAG_TOKEN) + this.handlers.endTag(token.tagName); + + else if (token.type === Tokenizer.COMMENT_TOKEN) + this.handlers.comment(token.data); + + else if (token.type === Tokenizer.DOCTYPE_TOKEN) + this.handlers.doctype(token.name, token.publicId, token.systemId); + +}; + +SimpleApiParser.prototype._reset = function (html) { + this.tokenizerProxy = new TokenizerProxy(html); + this.pendingText = null; +}; + +SimpleApiParser.prototype._emitPendingText = function () { + if (this.pendingText !== null) { + this.handlers.text(this.pendingText); + this.pendingText = null; + } +}; diff --git a/lib/simple_api/tokenizer_proxy.js b/lib/simple_api/tokenizer_proxy.js index 8aa8923e4..a3add5716 100644 --- a/lib/simple_api/tokenizer_proxy.js +++ b/lib/simple_api/tokenizer_proxy.js @@ -1,119 +1,121 @@ -var Tokenizer = require('../tokenization/tokenizer'), - ForeignContent = require('../common/foreign_content'), - UNICODE = require('../common/unicode'), - HTML = require('../common/html'); - -//Aliases -var $ = HTML.TAG_NAMES, - NS = HTML.NAMESPACES; - - -//Tokenizer proxy -//NOTE: this proxy simulates adjustment of the Tokenizer which performed by standard parser during tree construction. -var TokenizerProxy = module.exports = function (html) { - this.tokenizer = new Tokenizer(html); - - this.namespaceStack = []; - this.namespaceStackTop = -1; - this.currentNamespace = null; - this.inForeignContent = false; -}; - -//API -TokenizerProxy.prototype.getNextToken = function () { - var token = this.tokenizer.getNextToken(); - - if (token.type === Tokenizer.START_TAG_TOKEN) - this._handleStartTagToken(token); - - else if (token.type === Tokenizer.END_TAG_TOKEN) - this._handleEndTagToken(token); - - else if (token.type === Tokenizer.NULL_CHARACTER_TOKEN && this.inForeignContent) { - token.type = Tokenizer.CHARACTER_TOKEN; - token.chars = UNICODE.REPLACEMENT_CHARACTER; - } - - return token; -}; - -//Namespace stack mutations -TokenizerProxy.prototype._enterNamespace = function (namespace) { - this.namespaceStackTop++; - this.namespaceStack.push(namespace); - - this.inForeignContent = namespace !== NS.HTML; - this.currentNamespace = namespace; - this.tokenizer.allowCDATA = this.inForeignContent; -}; - -TokenizerProxy.prototype._leaveCurrentNamespace = function () { - this.namespaceStackTop--; - this.namespaceStack.pop(); - - this.currentNamespace = this.namespaceStack[this.namespaceStackTop]; - this.inForeignContent = this.currentNamespace !== NS.HTML; - this.tokenizer.allowCDATA = this.inForeignContent; -}; - -//Token handlers -TokenizerProxy.prototype._ensureTokenizerState = function (tn) { - if (tn === $.TEXTAREA || tn === $.TITLE) - this.tokenizer.state = Tokenizer.RCDATA_STATE; - - else if (tn === $.PLAINTEXT) - this.tokenizer.state = Tokenizer.PLAINTEXT_STATE; - - else if (tn === $.SCRIPT) - this.tokenizer.state = Tokenizer.SCRIPT_DATA_STATE; - - else if (tn === $.STYLE || tn === $.IFRAME || tn === $.XMP || - tn === $.NOEMBED || tn === $.NOFRAMES || tn === $.NOSCRIPT) { - this.tokenizer.state = Tokenizer.RAWTEXT_STATE; - } -}; - -TokenizerProxy.prototype._handleStartTagToken = function (token) { - var tn = token.tagName; - - if (tn === $.SVG) - this._enterNamespace(NS.SVG); - - else if (tn === $.MATH) - this._enterNamespace(NS.MATHML); - - else { - if (this.inForeignContent) { - if (ForeignContent.causesExit(token)) - this._leaveCurrentNamespace(); - - else if (ForeignContent.isMathMLTextIntegrationPoint(tn, this.currentNamespace) || - ForeignContent.isHtmlIntegrationPoint(tn, this.currentNamespace, token.attrs)) { - this._enterNamespace(NS.HTML); - } - } - - else - this._ensureTokenizerState(tn); - } -}; - -TokenizerProxy.prototype._handleEndTagToken = function (token) { - var tn = token.tagName; - - if (!this.inForeignContent) { - var previousNs = this.namespaceStack[this.namespaceStackTop - 1]; - - //NOTE: check for exit from integration point - if (ForeignContent.isMathMLTextIntegrationPoint(tn, previousNs) || - ForeignContent.isHtmlIntegrationPoint(tn, previousNs, token.attrs)) { - this._leaveCurrentNamespace(); - } - - else if (tn === $.SCRIPT) - this.tokenizer.state = Tokenizer.DATA_STATE; - } - - else if ((tn === $.SVG && this.currentNamespace === NS.SVG) || (tn === $.MATH && this.currentNamespace === NS.MATHML)) - this._leaveCurrentNamespace(); -}; +'use strict'; + +var Tokenizer = require('../tokenization/tokenizer'), + ForeignContent = require('../common/foreign_content'), + UNICODE = require('../common/unicode'), + HTML = require('../common/html'); + +//Aliases +var $ = HTML.TAG_NAMES, + NS = HTML.NAMESPACES; + + +//Tokenizer proxy +//NOTE: this proxy simulates adjustment of the Tokenizer which performed by standard parser during tree construction. +var TokenizerProxy = module.exports = function (html) { + this.tokenizer = new Tokenizer(html); + + this.namespaceStack = []; + this.namespaceStackTop = -1; + this.currentNamespace = null; + this.inForeignContent = false; +}; + +//API +TokenizerProxy.prototype.getNextToken = function () { + var token = this.tokenizer.getNextToken(); + + if (token.type === Tokenizer.START_TAG_TOKEN) + this._handleStartTagToken(token); + + else if (token.type === Tokenizer.END_TAG_TOKEN) + this._handleEndTagToken(token); + + else if (token.type === Tokenizer.NULL_CHARACTER_TOKEN && this.inForeignContent) { + token.type = Tokenizer.CHARACTER_TOKEN; + token.chars = UNICODE.REPLACEMENT_CHARACTER; + } + + return token; +}; + +//Namespace stack mutations +TokenizerProxy.prototype._enterNamespace = function (namespace) { + this.namespaceStackTop++; + this.namespaceStack.push(namespace); + + this.inForeignContent = namespace !== NS.HTML; + this.currentNamespace = namespace; + this.tokenizer.allowCDATA = this.inForeignContent; +}; + +TokenizerProxy.prototype._leaveCurrentNamespace = function () { + this.namespaceStackTop--; + this.namespaceStack.pop(); + + this.currentNamespace = this.namespaceStack[this.namespaceStackTop]; + this.inForeignContent = this.currentNamespace !== NS.HTML; + this.tokenizer.allowCDATA = this.inForeignContent; +}; + +//Token handlers +TokenizerProxy.prototype._ensureTokenizerState = function (tn) { + if (tn === $.TEXTAREA || tn === $.TITLE) + this.tokenizer.state = Tokenizer.RCDATA_STATE; + + else if (tn === $.PLAINTEXT) + this.tokenizer.state = Tokenizer.PLAINTEXT_STATE; + + else if (tn === $.SCRIPT) + this.tokenizer.state = Tokenizer.SCRIPT_DATA_STATE; + + else if (tn === $.STYLE || tn === $.IFRAME || tn === $.XMP || + tn === $.NOEMBED || tn === $.NOFRAMES || tn === $.NOSCRIPT) { + this.tokenizer.state = Tokenizer.RAWTEXT_STATE; + } +}; + +TokenizerProxy.prototype._handleStartTagToken = function (token) { + var tn = token.tagName; + + if (tn === $.SVG) + this._enterNamespace(NS.SVG); + + else if (tn === $.MATH) + this._enterNamespace(NS.MATHML); + + else { + if (this.inForeignContent) { + if (ForeignContent.causesExit(token)) + this._leaveCurrentNamespace(); + + else if (ForeignContent.isMathMLTextIntegrationPoint(tn, this.currentNamespace) || + ForeignContent.isHtmlIntegrationPoint(tn, this.currentNamespace, token.attrs)) { + this._enterNamespace(NS.HTML); + } + } + + else + this._ensureTokenizerState(tn); + } +}; + +TokenizerProxy.prototype._handleEndTagToken = function (token) { + var tn = token.tagName; + + if (!this.inForeignContent) { + var previousNs = this.namespaceStack[this.namespaceStackTop - 1]; + + //NOTE: check for exit from integration point + if (ForeignContent.isMathMLTextIntegrationPoint(tn, previousNs) || + ForeignContent.isHtmlIntegrationPoint(tn, previousNs, token.attrs)) { + this._leaveCurrentNamespace(); + } + + else if (tn === $.SCRIPT) + this.tokenizer.state = Tokenizer.DATA_STATE; + } + + else if ((tn === $.SVG && this.currentNamespace === NS.SVG) || (tn === $.MATH && this.currentNamespace === NS.MATHML)) + this._leaveCurrentNamespace(); +}; diff --git a/lib/tokenization/named_entity_trie.js b/lib/tokenization/named_entity_trie.js index f638cb3e7..2966da862 100644 --- a/lib/tokenization/named_entity_trie.js +++ b/lib/tokenization/named_entity_trie.js @@ -1,57 +1,59 @@ -//NOTE: this file contains auto generated trie structure that is used for named entity references consumption -//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tokenizing-character-references and -//http://www.whatwg.org/specs/web-apps/current-work/multipage/named-character-references.html#named-character-references) -module.exports = { - 0x41: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [193]}}, c: [193]}}}}}}}}}, 0x62: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [258]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [194]}}, c: [194]}}}}}, 0x79: {l: {0x3B: {c: [1040]}}}}}, 0x45: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [198]}}, c: [198]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120068]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [192]}}, c: [192]}}}}}}}}}, 0x6C: {l: {0x70: {l: {0x68: {l: {0x61: {l: {0x3B: {c: [913]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [256]}}}}}}}}}, 0x4D: {l: {0x50: {l: {0x3B: {c: [38]}}, c: [38]}}}, 0x6E: {l: {0x64: {l: {0x3B: {c: [10835]}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [260]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120120]}}}}}}}, 0x70: {l: {0x70: {l: {0x6C: {l: {0x79: {l: {0x46: {l: {0x75: {l: {0x6E: {l: {0x63: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8289]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [197]}}, c: [197]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119964]}}}}}, 0x73: {l: {0x69: {l: {0x67: {l: {0x6E: {l: {0x3B: {c: [8788]}}}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [195]}}, c: [195]}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [196]}}, c: [196]}}}}}}}, - 0x61: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [225]}}, c: [225]}}}}}}}}}, 0x62: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [259]}}}}}}}}}}}, 0x63: {l: {0x3B: {c: [8766]}, 0x64: {l: {0x3B: {c: [8767]}}}, 0x45: {l: {0x3B: {c: [8766, 819]}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [226]}}, c: [226]}}}}}, 0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [180]}}, c: [180]}}}}}, 0x79: {l: {0x3B: {c: [1072]}}}}}, 0x65: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [230]}}, c: [230]}}}}}}}, 0x66: {l: {0x3B: {c: [8289]}, 0x72: {l: {0x3B: {c: [120094]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [224]}}, c: [224]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x73: {l: {0x79: {l: {0x6D: {l: {0x3B: {c: [8501]}}}}}}}}}, 0x70: {l: {0x68: {l: {0x3B: {c: [8501]}}}}}}}, 0x70: {l: {0x68: {l: {0x61: {l: {0x3B: {c: [945]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [257]}}}}}, 0x6C: {l: {0x67: {l: {0x3B: {c: [10815]}}}}}}}, 0x70: {l: {0x3B: {c: [38]}}, c: [38]}}}, 0x6E: {l: {0x64: {l: {0x61: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [10837]}}}}}}}, 0x3B: {c: [8743]}, 0x64: {l: {0x3B: {c: [10844]}}}, 0x73: {l: {0x6C: {l: {0x6F: {l: {0x70: {l: {0x65: {l: {0x3B: {c: [10840]}}}}}}}}}}}, 0x76: {l: {0x3B: {c: [10842]}}}}}, 0x67: {l: {0x3B: {c: [8736]}, 0x65: {l: {0x3B: {c: [10660]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [8736]}}}}}, 0x6D: {l: {0x73: {l: {0x64: {l: {0x61: {l: {0x61: {l: {0x3B: {c: [10664]}}}, 0x62: {l: {0x3B: {c: [10665]}}}, 0x63: {l: {0x3B: {c: [10666]}}}, 0x64: {l: {0x3B: {c: [10667]}}}, 0x65: {l: {0x3B: {c: [10668]}}}, 0x66: {l: {0x3B: {c: [10669]}}}, 0x67: {l: {0x3B: {c: [10670]}}}, 0x68: {l: {0x3B: {c: [10671]}}}}}, 0x3B: {c: [8737]}}}}}}}, 0x72: {l: {0x74: {l: {0x3B: {c: [8735]}, 0x76: {l: {0x62: {l: {0x3B: {c: [8894]}, 0x64: {l: {0x3B: {c: [10653]}}}}}}}}}}}, 0x73: {l: {0x70: {l: {0x68: {l: {0x3B: {c: [8738]}}}}}, 0x74: {l: {0x3B: {c: [197]}}}}}, 0x7A: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [9084]}}}}}}}}}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [261]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120146]}}}}}}}, 0x70: {l: {0x61: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10863]}}}}}}}}}, 0x3B: {c: [8776]}, 0x45: {l: {0x3B: {c: [10864]}}}, 0x65: {l: {0x3B: {c: [8778]}}}, 0x69: {l: {0x64: {l: {0x3B: {c: [8779]}}}}}, 0x6F: {l: {0x73: {l: {0x3B: {c: [39]}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [8776]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8778]}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [229]}}, c: [229]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119990]}}}}}, 0x74: {l: {0x3B: {c: [42]}}}, 0x79: {l: {0x6D: {l: {0x70: {l: {0x3B: {c: [8776]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8781]}}}}}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [227]}}, c: [227]}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [228]}}, c: [228]}}}}}, 0x77: {l: {0x63: {l: {0x6F: {l: {0x6E: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8755]}}}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10769]}}}}}}}}}}}, - 0x62: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x63: {l: {0x6F: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8780]}}}}}}}}}, 0x65: {l: {0x70: {l: {0x73: {l: {0x69: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [1014]}}}}}}}}}}}}}}}, 0x70: {l: {0x72: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8245]}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8765]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8909]}}}}}}}}}}}}}}}, 0x72: {l: {0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8893]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [8965]}, 0x67: {l: {0x65: {l: {0x3B: {c: [8965]}}}}}}}}}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [9141]}, 0x74: {l: {0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [9142]}}}}}}}}}}}}}}}, 0x63: {l: {0x6F: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8780]}}}}}}}, 0x79: {l: {0x3B: {c: [1073]}}}}}, 0x64: {l: {0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8222]}}}}}}}}}, 0x65: {l: {0x63: {l: {0x61: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8757]}, 0x65: {l: {0x3B: {c: [8757]}}}}}}}}}}}, 0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10672]}}}}}}}}}}}, 0x70: {l: {0x73: {l: {0x69: {l: {0x3B: {c: [1014]}}}}}}}, 0x72: {l: {0x6E: {l: {0x6F: {l: {0x75: {l: {0x3B: {c: [8492]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [946]}}}, 0x68: {l: {0x3B: {c: [8502]}}}, 0x77: {l: {0x65: {l: {0x65: {l: {0x6E: {l: {0x3B: {c: [8812]}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120095]}}}}}, 0x69: {l: {0x67: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8898]}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [9711]}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8899]}}}}}}}, 0x6F: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10752]}}}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10753]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10754]}}}}}}}}}}}}}, 0x73: {l: {0x71: {l: {0x63: {l: {0x75: {l: {0x70: {l: {0x3B: {c: [10758]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9733]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [9661]}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [9651]}}}}}}}}}}}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10756]}}}}}}}}}}}, 0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8897]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8896]}}}}}}}}}}}}}}}, 0x6B: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10509]}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x6C: {l: {0x6F: {l: {0x7A: {l: {0x65: {l: {0x6E: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [10731]}}}}}}}}}}}}}}}, 0x73: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9642]}}}}}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [9652]}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [9662]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [9666]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [9656]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6E: {l: {0x6B: {l: {0x3B: {c: [9251]}}}}}}}, 0x6B: {l: {0x31: {l: {0x32: {l: {0x3B: {c: [9618]}}}, 0x34: {l: {0x3B: {c: [9617]}}}}}, 0x33: {l: {0x34: {l: {0x3B: {c: [9619]}}}}}}}, 0x6F: {l: {0x63: {l: {0x6B: {l: {0x3B: {c: [9608]}}}}}}}}}, 0x6E: {l: {0x65: {l: {0x3B: {c: [61, 8421]}, 0x71: {l: {0x75: {l: {0x69: {l: {0x76: {l: {0x3B: {c: [8801, 8421]}}}}}}}}}}}, 0x6F: {l: {0x74: {l: {0x3B: {c: [8976]}}}}}}}, 0x4E: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10989]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120147]}}}}}, 0x74: {l: {0x3B: {c: [8869]}, 0x74: {l: {0x6F: {l: {0x6D: {l: {0x3B: {c: [8869]}}}}}}}}}, 0x77: {l: {0x74: {l: {0x69: {l: {0x65: {l: {0x3B: {c: [8904]}}}}}}}}}, 0x78: {l: {0x62: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10697]}}}}}}}, 0x64: {l: {0x6C: {l: {0x3B: {c: [9488]}}}, 0x4C: {l: {0x3B: {c: [9557]}}}, 0x72: {l: {0x3B: {c: [9484]}}}, 0x52: {l: {0x3B: {c: [9554]}}}}}, 0x44: {l: {0x6C: {l: {0x3B: {c: [9558]}}}, 0x4C: {l: {0x3B: {c: [9559]}}}, 0x72: {l: {0x3B: {c: [9555]}}}, 0x52: {l: {0x3B: {c: [9556]}}}}}, 0x68: {l: {0x3B: {c: [9472]}, 0x64: {l: {0x3B: {c: [9516]}}}, 0x44: {l: {0x3B: {c: [9573]}}}, 0x75: {l: {0x3B: {c: [9524]}}}, 0x55: {l: {0x3B: {c: [9576]}}}}}, 0x48: {l: {0x3B: {c: [9552]}, 0x64: {l: {0x3B: {c: [9572]}}}, 0x44: {l: {0x3B: {c: [9574]}}}, 0x75: {l: {0x3B: {c: [9575]}}}, 0x55: {l: {0x3B: {c: [9577]}}}}}, 0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8863]}}}}}}}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8862]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8864]}}}}}}}}}}}, 0x75: {l: {0x6C: {l: {0x3B: {c: [9496]}}}, 0x4C: {l: {0x3B: {c: [9563]}}}, 0x72: {l: {0x3B: {c: [9492]}}}, 0x52: {l: {0x3B: {c: [9560]}}}}}, 0x55: {l: {0x6C: {l: {0x3B: {c: [9564]}}}, 0x4C: {l: {0x3B: {c: [9565]}}}, 0x72: {l: {0x3B: {c: [9561]}}}, 0x52: {l: {0x3B: {c: [9562]}}}}}, 0x76: {l: {0x3B: {c: [9474]}, 0x68: {l: {0x3B: {c: [9532]}}}, 0x48: {l: {0x3B: {c: [9578]}}}, 0x6C: {l: {0x3B: {c: [9508]}}}, 0x4C: {l: {0x3B: {c: [9569]}}}, 0x72: {l: {0x3B: {c: [9500]}}}, 0x52: {l: {0x3B: {c: [9566]}}}}}, 0x56: {l: {0x3B: {c: [9553]}, 0x68: {l: {0x3B: {c: [9579]}}}, 0x48: {l: {0x3B: {c: [9580]}}}, 0x6C: {l: {0x3B: {c: [9570]}}}, 0x4C: {l: {0x3B: {c: [9571]}}}, 0x72: {l: {0x3B: {c: [9567]}}}, 0x52: {l: {0x3B: {c: [9568]}}}}}}}}}, 0x70: {l: {0x72: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8245]}}}}}}}}}}}, 0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [728]}}}}}}}, 0x76: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [166]}}, c: [166]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119991]}}}}}, 0x65: {l: {0x6D: {l: {0x69: {l: {0x3B: {c: [8271]}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8765]}, 0x65: {l: {0x3B: {c: [8909]}}}}}}}, 0x6F: {l: {0x6C: {l: {0x62: {l: {0x3B: {c: [10693]}}}, 0x3B: {c: [92]}, 0x68: {l: {0x73: {l: {0x75: {l: {0x62: {l: {0x3B: {c: [10184]}}}}}}}}}}}}}}}, 0x75: {l: {0x6C: {l: {0x6C: {l: {0x3B: {c: [8226]}, 0x65: {l: {0x74: {l: {0x3B: {c: [8226]}}}}}}}}}, 0x6D: {l: {0x70: {l: {0x3B: {c: [8782]}, 0x45: {l: {0x3B: {c: [10926]}}}, 0x65: {l: {0x3B: {c: [8783]}, 0x71: {l: {0x3B: {c: [8783]}}}}}}}}}}}}}, - 0x42: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x73: {l: {0x6C: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8726]}}}}}}}}}}}}}}}, 0x72: {l: {0x76: {l: {0x3B: {c: [10983]}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [8966]}}}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1041]}}}}}, 0x65: {l: {0x63: {l: {0x61: {l: {0x75: {l: {0x73: {l: {0x65: {l: {0x3B: {c: [8757]}}}}}}}}}}}, 0x72: {l: {0x6E: {l: {0x6F: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x69: {l: {0x73: {l: {0x3B: {c: [8492]}}}}}}}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [914]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120069]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120121]}}}}}}}, 0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [728]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8492]}}}}}}}, 0x75: {l: {0x6D: {l: {0x70: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8782]}}}}}}}}}}}}}, - 0x43: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [262]}}}}}}}}}, 0x70: {l: {0x3B: {c: [8914]}, 0x69: {l: {0x74: {l: {0x61: {l: {0x6C: {l: {0x44: {l: {0x69: {l: {0x66: {l: {0x66: {l: {0x65: {l: {0x72: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x44: {l: {0x3B: {c: [8517]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x79: {l: {0x6C: {l: {0x65: {l: {0x79: {l: {0x73: {l: {0x3B: {c: [8493]}}}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [268]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [199]}}, c: [199]}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [264]}}}}}}}, 0x6F: {l: {0x6E: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8752]}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [266]}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x6C: {l: {0x61: {l: {0x3B: {c: [184]}}}}}}}}}}}, 0x6E: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [183]}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8493]}}}}}, 0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1063]}}}}}}}, 0x68: {l: {0x69: {l: {0x3B: {c: [935]}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x6C: {l: {0x65: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8857]}}}}}}}, 0x4D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8854]}}}}}}}}}}}, 0x50: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8853]}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8855]}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x6F: {l: {0x63: {l: {0x6B: {l: {0x77: {l: {0x69: {l: {0x73: {l: {0x65: {l: {0x43: {l: {0x6F: {l: {0x6E: {l: {0x74: {l: {0x6F: {l: {0x75: {l: {0x72: {l: {0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8754]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x65: {l: {0x43: {l: {0x75: {l: {0x72: {l: {0x6C: {l: {0x79: {l: {0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x51: {l: {0x75: {l: {0x6F: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [8221]}}}}}}}}}}}}}}}}}}}}}}}, 0x51: {l: {0x75: {l: {0x6F: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [8217]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8759]}, 0x65: {l: {0x3B: {c: [10868]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x72: {l: {0x75: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8801]}}}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8751]}}}}}}}, 0x74: {l: {0x6F: {l: {0x75: {l: {0x72: {l: {0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8750]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [8450]}}}, 0x72: {l: {0x6F: {l: {0x64: {l: {0x75: {l: {0x63: {l: {0x74: {l: {0x3B: {c: [8720]}}}}}}}}}}}}}}}, 0x75: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x43: {l: {0x6C: {l: {0x6F: {l: {0x63: {l: {0x6B: {l: {0x77: {l: {0x69: {l: {0x73: {l: {0x65: {l: {0x43: {l: {0x6F: {l: {0x6E: {l: {0x74: {l: {0x6F: {l: {0x75: {l: {0x72: {l: {0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8755]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4F: {l: {0x50: {l: {0x59: {l: {0x3B: {c: [169]}}, c: [169]}}}}}, 0x72: {l: {0x6F: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10799]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119966]}}}}}}}, 0x75: {l: {0x70: {l: {0x43: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8781]}}}}}}}, 0x3B: {c: [8915]}}}}}}}, - 0x63: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [263]}}}}}}}}}, 0x70: {l: {0x61: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [10820]}}}}}}}, 0x62: {l: {0x72: {l: {0x63: {l: {0x75: {l: {0x70: {l: {0x3B: {c: [10825]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10827]}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [10823]}}}}}}}, 0x3B: {c: [8745]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10816]}}}}}}}, 0x73: {l: {0x3B: {c: [8745, 65024]}}}}}, 0x72: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8257]}}}}}, 0x6F: {l: {0x6E: {l: {0x3B: {c: [711]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x73: {l: {0x3B: {c: [10829]}}}}}, 0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [269]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [231]}}, c: [231]}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [265]}}}}}}}, 0x75: {l: {0x70: {l: {0x73: {l: {0x3B: {c: [10828]}, 0x73: {l: {0x6D: {l: {0x3B: {c: [10832]}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [267]}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [184]}}, c: [184]}}}}}, 0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10674]}}}}}}}}}}}, 0x6E: {l: {0x74: {l: {0x3B: {c: [162]}, 0x65: {l: {0x72: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [183]}}}}}}}}}}}}, c: [162]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120096]}}}}}, 0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1095]}}}}}, 0x65: {l: {0x63: {l: {0x6B: {l: {0x3B: {c: [10003]}, 0x6D: {l: {0x61: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10003]}}}}}}}}}}}}}}}, 0x69: {l: {0x3B: {c: [967]}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [710]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8791]}}}}}, 0x6C: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8634]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8635]}}}}}}}}}}}}}}}}}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8859]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [8858]}}}}}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8861]}}}}}}}}}, 0x52: {l: {0x3B: {c: [174]}}}, 0x53: {l: {0x3B: {c: [9416]}}}}}}}}}}}, 0x3B: {c: [9675]}, 0x45: {l: {0x3B: {c: [10691]}}}, 0x65: {l: {0x3B: {c: [8791]}}}, 0x66: {l: {0x6E: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10768]}}}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [10991]}}}}}}}, 0x73: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10690]}}}}}}}}}}}}}, 0x6C: {l: {0x75: {l: {0x62: {l: {0x73: {l: {0x3B: {c: [9827]}, 0x75: {l: {0x69: {l: {0x74: {l: {0x3B: {c: [9827]}}}}}}}}}}}}}}}, 0x6F: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [58]}, 0x65: {l: {0x3B: {c: [8788]}, 0x71: {l: {0x3B: {c: [8788]}}}}}}}}}}}, 0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [44]}, 0x74: {l: {0x3B: {c: [64]}}}}}}}, 0x70: {l: {0x3B: {c: [8705]}, 0x66: {l: {0x6E: {l: {0x3B: {c: [8728]}}}}}, 0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8705]}}}}}}}}}, 0x78: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8450]}}}}}}}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [8773]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10861]}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8750]}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120148]}}}, 0x72: {l: {0x6F: {l: {0x64: {l: {0x3B: {c: [8720]}}}}}}}, 0x79: {l: {0x3B: {c: [169]}, 0x73: {l: {0x72: {l: {0x3B: {c: [8471]}}}}}}, c: [169]}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8629]}}}}}}}, 0x6F: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10007]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119992]}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [10959]}, 0x65: {l: {0x3B: {c: [10961]}}}}}, 0x70: {l: {0x3B: {c: [10960]}, 0x65: {l: {0x3B: {c: [10962]}}}}}}}}}, 0x74: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8943]}}}}}}}}}, 0x75: {l: {0x64: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6C: {l: {0x3B: {c: [10552]}}}, 0x72: {l: {0x3B: {c: [10549]}}}}}}}}}}}, 0x65: {l: {0x70: {l: {0x72: {l: {0x3B: {c: [8926]}}}}}, 0x73: {l: {0x63: {l: {0x3B: {c: [8927]}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8630]}, 0x70: {l: {0x3B: {c: [10557]}}}}}}}}}}}, 0x70: {l: {0x62: {l: {0x72: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10824]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10822]}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [10826]}}}}}}}, 0x3B: {c: [8746]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8845]}}}}}}}, 0x6F: {l: {0x72: {l: {0x3B: {c: [10821]}}}}}, 0x73: {l: {0x3B: {c: [8746, 65024]}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8631]}, 0x6D: {l: {0x3B: {c: [10556]}}}}}}}}}, 0x6C: {l: {0x79: {l: {0x65: {l: {0x71: {l: {0x70: {l: {0x72: {l: {0x65: {l: {0x63: {l: {0x3B: {c: [8926]}}}}}}}}}, 0x73: {l: {0x75: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [8927]}}}}}}}}}}}}}, 0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8910]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8911]}}}}}}}}}}}}}}}, 0x72: {l: {0x65: {l: {0x6E: {l: {0x3B: {c: [164]}}, c: [164]}}}}}, 0x76: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8630]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8631]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8910]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [8911]}}}}}}}}}, 0x77: {l: {0x63: {l: {0x6F: {l: {0x6E: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8754]}}}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8753]}}}}}}}}}, 0x79: {l: {0x6C: {l: {0x63: {l: {0x74: {l: {0x79: {l: {0x3B: {c: [9005]}}}}}}}}}}}}}, - 0x64: {l: {0x61: {l: {0x67: {l: {0x67: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8224]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x74: {l: {0x68: {l: {0x3B: {c: [8504]}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8595]}}}}}, 0x73: {l: {0x68: {l: {0x3B: {c: [8208]}, 0x76: {l: {0x3B: {c: [8867]}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8659]}}}}}}}, 0x62: {l: {0x6B: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10511]}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [733]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [271]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1076]}}}}}, 0x64: {l: {0x61: {l: {0x67: {l: {0x67: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8225]}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8650]}}}}}}}, 0x3B: {c: [8518]}, 0x6F: {l: {0x74: {l: {0x73: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [10871]}}}}}}}}}}}}}, 0x65: {l: {0x67: {l: {0x3B: {c: [176]}}, c: [176]}, 0x6C: {l: {0x74: {l: {0x61: {l: {0x3B: {c: [948]}}}}}}}, 0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10673]}}}}}}}}}}}}}, 0x66: {l: {0x69: {l: {0x73: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [10623]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120097]}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10597]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x6C: {l: {0x3B: {c: [8643]}}}, 0x72: {l: {0x3B: {c: [8642]}}}}}}}}}, 0x69: {l: {0x61: {l: {0x6D: {l: {0x3B: {c: [8900]}, 0x6F: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [8900]}, 0x73: {l: {0x75: {l: {0x69: {l: {0x74: {l: {0x3B: {c: [9830]}}}}}}}}}}}}}}}, 0x73: {l: {0x3B: {c: [9830]}}}}}}}, 0x65: {l: {0x3B: {c: [168]}}}, 0x67: {l: {0x61: {l: {0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [989]}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6E: {l: {0x3B: {c: [8946]}}}}}}}, 0x76: {l: {0x3B: {c: [247]}, 0x69: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [247]}, 0x6F: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8903]}}}}}}}}}}}}}}}}, c: [247]}}}}}, 0x6F: {l: {0x6E: {l: {0x78: {l: {0x3B: {c: [8903]}}}}}}}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1106]}}}}}}}, 0x6C: {l: {0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [8990]}}}}}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8973]}}}}}}}}}}}, 0x6F: {l: {0x6C: {l: {0x6C: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [36]}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120149]}}}}}, 0x74: {l: {0x3B: {c: [729]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8784]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8785]}}}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8760]}}}}}}}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8724]}}}}}}}}}, 0x73: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [8865]}}}}}}}}}}}}}}}, 0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x77: {l: {0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8966]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8595]}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8650]}}}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8643]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8642]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x62: {l: {0x6B: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10512]}}}}}}}}}}}}}, 0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [8991]}}}}}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8972]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119993]}}}, 0x79: {l: {0x3B: {c: [1109]}}}}}, 0x6F: {l: {0x6C: {l: {0x3B: {c: [10742]}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [273]}}}}}}}}}}}, 0x74: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8945]}}}}}}}, 0x72: {l: {0x69: {l: {0x3B: {c: [9663]}, 0x66: {l: {0x3B: {c: [9662]}}}}}}}}}, 0x75: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8693]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10607]}}}}}}}}}, 0x77: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [10662]}}}}}}}}}}}}}, 0x7A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1119]}}}}}, 0x69: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10239]}}}}}}}}}}}}}}}}}, - 0x44: {l: {0x61: {l: {0x67: {l: {0x67: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8225]}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8609]}}}}}, 0x73: {l: {0x68: {l: {0x76: {l: {0x3B: {c: [10980]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [270]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1044]}}}}}, 0x44: {l: {0x3B: {c: [8517]}, 0x6F: {l: {0x74: {l: {0x72: {l: {0x61: {l: {0x68: {l: {0x64: {l: {0x3B: {c: [10513]}}}}}}}}}}}}}}}, 0x65: {l: {0x6C: {l: {0x3B: {c: [8711]}, 0x74: {l: {0x61: {l: {0x3B: {c: [916]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120071]}}}}}, 0x69: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x69: {l: {0x74: {l: {0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x41: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [180]}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [729]}}}, 0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x41: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [733]}}}}}}}}}}}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [96]}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [732]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6D: {l: {0x6F: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [8900]}}}}}}}}}}}, 0x66: {l: {0x66: {l: {0x65: {l: {0x72: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x44: {l: {0x3B: {c: [8518]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1026]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120123]}}}}}, 0x74: {l: {0x3B: {c: [168]}, 0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8412]}}}}}}}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8784]}}}}}}}}}}}}}, 0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x43: {l: {0x6F: {l: {0x6E: {l: {0x74: {l: {0x6F: {l: {0x75: {l: {0x72: {l: {0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8751]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [168]}}}, 0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8659]}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8656]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8660]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [10980]}}}}}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x67: {l: {0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10232]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10234]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10233]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8658]}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8872]}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8657]}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8661]}}}}}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8741]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10515]}}}}}}}, 0x3B: {c: [8595]}, 0x55: {l: {0x70: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8693]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8659]}}}}}}}}}}}, 0x42: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [785]}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10576]}}}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10590]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10582]}}}}}}}, 0x3B: {c: [8637]}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10591]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10583]}}}}}}}, 0x3B: {c: [8641]}}}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8615]}}}}}}}}}}}, 0x3B: {c: [8868]}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119967]}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [272]}}}}}}}}}}}, 0x53: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1029]}}}}}}}, 0x5A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1039]}}}}}}}}}, - 0x45: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [201]}}, c: [201]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [282]}}}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [202]}}, c: [202]}}}}}, 0x79: {l: {0x3B: {c: [1069]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [278]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120072]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [200]}}, c: [200]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8712]}}}}}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [274]}}}}}}}, 0x70: {l: {0x74: {l: {0x79: {l: {0x53: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9723]}}}}}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x79: {l: {0x53: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9643]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4E: {l: {0x47: {l: {0x3B: {c: [330]}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [280]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120124]}}}}}}}, 0x70: {l: {0x73: {l: {0x69: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [917]}}}}}}}}}}}}}, 0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10869]}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8770]}}}}}}}}}}}}}}}, 0x69: {l: {0x6C: {l: {0x69: {l: {0x62: {l: {0x72: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [8652]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8496]}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [10867]}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [919]}}}}}, 0x54: {l: {0x48: {l: {0x3B: {c: [208]}}, c: [208]}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [203]}}, c: [203]}}}}}, 0x78: {l: {0x69: {l: {0x73: {l: {0x74: {l: {0x73: {l: {0x3B: {c: [8707]}}}}}}}}}, 0x70: {l: {0x6F: {l: {0x6E: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x45: {l: {0x3B: {c: [8519]}}}}}}}}}}}}}}}}}}}}}}}}}, - 0x65: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [233]}}, c: [233]}}}}}}}, 0x73: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [10862]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [283]}}}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [234]}}, c: [234]}, 0x3B: {c: [8790]}}}}}, 0x6F: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8789]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1101]}}}}}, 0x44: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10871]}}}}}}}, 0x6F: {l: {0x74: {l: {0x3B: {c: [8785]}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [279]}}}}}}}, 0x65: {l: {0x3B: {c: [8519]}}}, 0x66: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8786]}}}}}}}, 0x72: {l: {0x3B: {c: [120098]}}}}}, 0x67: {l: {0x3B: {c: [10906]}, 0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [232]}}, c: [232]}}}}}}}, 0x73: {l: {0x3B: {c: [10902]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10904]}}}}}}}}}}}, 0x6C: {l: {0x3B: {c: [10905]}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x3B: {c: [9191]}}}}}}}}}}}}}, 0x6C: {l: {0x3B: {c: [8467]}}}, 0x73: {l: {0x3B: {c: [10901]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10903]}}}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [275]}}}}}}}, 0x70: {l: {0x74: {l: {0x79: {l: {0x3B: {c: [8709]}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8709]}}}}}}}, 0x76: {l: {0x3B: {c: [8709]}}}}}}}}}, 0x73: {l: {0x70: {l: {0x31: {l: {0x33: {l: {0x3B: {c: [8196]}}}, 0x34: {l: {0x3B: {c: [8197]}}}}}, 0x3B: {c: [8195]}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [331]}}}, 0x73: {l: {0x70: {l: {0x3B: {c: [8194]}}}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [281]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120150]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8917]}, 0x73: {l: {0x6C: {l: {0x3B: {c: [10723]}}}}}}}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10865]}}}}}}}, 0x73: {l: {0x69: {l: {0x3B: {c: [949]}, 0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [949]}}}}}}}, 0x76: {l: {0x3B: {c: [1013]}}}}}}}}}, 0x71: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [8790]}}}}}}}, 0x6F: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8789]}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8770]}}}}}, 0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x67: {l: {0x74: {l: {0x72: {l: {0x3B: {c: [10902]}}}}}}}, 0x6C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10901]}}}}}}}}}}}}}}}}}}}, 0x75: {l: {0x61: {l: {0x6C: {l: {0x73: {l: {0x3B: {c: [61]}}}}}}}, 0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8799]}}}}}}}, 0x69: {l: {0x76: {l: {0x3B: {c: [8801]}, 0x44: {l: {0x44: {l: {0x3B: {c: [10872]}}}}}}}}}}}, 0x76: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x73: {l: {0x6C: {l: {0x3B: {c: [10725]}}}}}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10609]}}}}}}}, 0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8787]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8495]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8784]}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8770]}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [951]}}}, 0x68: {l: {0x3B: {c: [240]}}, c: [240]}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [235]}}, c: [235]}}}, 0x72: {l: {0x6F: {l: {0x3B: {c: [8364]}}}}}}}, 0x78: {l: {0x63: {l: {0x6C: {l: {0x3B: {c: [33]}}}}}, 0x69: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8707]}}}}}}}, 0x70: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x61: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8496]}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [8519]}}}}}}}}}}}}}}}}}}}}}}}}}, - 0x66: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x73: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8786]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1092]}}}}}, 0x65: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [9792]}}}}}}}}}}}, 0x66: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64259]}}}}}}}}}, 0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64256]}}}}}, 0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64260]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120099]}}}}}, 0x69: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64257]}}}}}}}}}, 0x6A: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [102, 106]}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x74: {l: {0x3B: {c: [9837]}}}}}, 0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64258]}}}}}}}, 0x74: {l: {0x6E: {l: {0x73: {l: {0x3B: {c: [9649]}}}}}}}}}, 0x6E: {l: {0x6F: {l: {0x66: {l: {0x3B: {c: [402]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120151]}}}}}, 0x72: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x3B: {c: [8704]}}}}}}}, 0x6B: {l: {0x3B: {c: [8916]}, 0x76: {l: {0x3B: {c: [10969]}}}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10765]}}}}}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x31: {l: {0x32: {l: {0x3B: {c: [189]}}, c: [189]}, 0x33: {l: {0x3B: {c: [8531]}}}, 0x34: {l: {0x3B: {c: [188]}}, c: [188]}, 0x35: {l: {0x3B: {c: [8533]}}}, 0x36: {l: {0x3B: {c: [8537]}}}, 0x38: {l: {0x3B: {c: [8539]}}}}}, 0x32: {l: {0x33: {l: {0x3B: {c: [8532]}}}, 0x35: {l: {0x3B: {c: [8534]}}}}}, 0x33: {l: {0x34: {l: {0x3B: {c: [190]}}, c: [190]}, 0x35: {l: {0x3B: {c: [8535]}}}, 0x38: {l: {0x3B: {c: [8540]}}}}}, 0x34: {l: {0x35: {l: {0x3B: {c: [8536]}}}}}, 0x35: {l: {0x36: {l: {0x3B: {c: [8538]}}}, 0x38: {l: {0x3B: {c: [8541]}}}}}, 0x37: {l: {0x38: {l: {0x3B: {c: [8542]}}}}}}}, 0x73: {l: {0x6C: {l: {0x3B: {c: [8260]}}}}}}}, 0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8994]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119995]}}}}}}}}}, - 0x46: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1060]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120073]}}}}}, 0x69: {l: {0x6C: {l: {0x6C: {l: {0x65: {l: {0x64: {l: {0x53: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9724]}}}}}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x79: {l: {0x53: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9642]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120125]}}}}}, 0x72: {l: {0x41: {l: {0x6C: {l: {0x6C: {l: {0x3B: {c: [8704]}}}}}}}}}, 0x75: {l: {0x72: {l: {0x69: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8497]}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8497]}}}}}}}}}, - 0x67: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [501]}}}}}}}}}, 0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [947]}, 0x64: {l: {0x3B: {c: [989]}}}}}}}}}, 0x70: {l: {0x3B: {c: [10886]}}}}}, 0x62: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [287]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [285]}}}}}}}, 0x79: {l: {0x3B: {c: [1075]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [289]}}}}}}}, 0x65: {l: {0x3B: {c: [8805]}, 0x6C: {l: {0x3B: {c: [8923]}}}, 0x71: {l: {0x3B: {c: [8805]}, 0x71: {l: {0x3B: {c: [8807]}}}, 0x73: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10878]}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [10921]}}}}}, 0x3B: {c: [10878]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10880]}, 0x6F: {l: {0x3B: {c: [10882]}, 0x6C: {l: {0x3B: {c: [10884]}}}}}}}}}}}, 0x6C: {l: {0x3B: {c: [8923, 65024]}, 0x65: {l: {0x73: {l: {0x3B: {c: [10900]}}}}}}}}}}}, 0x45: {l: {0x3B: {c: [8807]}, 0x6C: {l: {0x3B: {c: [10892]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120100]}}}}}, 0x67: {l: {0x3B: {c: [8811]}, 0x67: {l: {0x3B: {c: [8921]}}}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8503]}}}}}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1107]}}}}}}}, 0x6C: {l: {0x61: {l: {0x3B: {c: [10917]}}}, 0x3B: {c: [8823]}, 0x45: {l: {0x3B: {c: [10898]}}}, 0x6A: {l: {0x3B: {c: [10916]}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10890]}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10890]}}}}}}}}}}}}}, 0x65: {l: {0x3B: {c: [10888]}, 0x71: {l: {0x3B: {c: [10888]}, 0x71: {l: {0x3B: {c: [8809]}}}}}}}, 0x45: {l: {0x3B: {c: [8809]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8935]}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120152]}}}}}}}, 0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [96]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8458]}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8819]}, 0x65: {l: {0x3B: {c: [10894]}}}, 0x6C: {l: {0x3B: {c: [10896]}}}}}}}}}, 0x74: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [10919]}}}, 0x69: {l: {0x72: {l: {0x3B: {c: [10874]}}}}}}}, 0x3B: {c: [62]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8919]}}}}}}}, 0x6C: {l: {0x50: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10645]}}}}}}}}}, 0x71: {l: {0x75: {l: {0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [10876]}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10886]}}}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [10616]}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8919]}}}}}}}, 0x65: {l: {0x71: {l: {0x6C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8923]}}}}}}}}}, 0x71: {l: {0x6C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10892]}}}}}}}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8823]}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8819]}}}}}}}}}}, c: [62]}, 0x76: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x6E: {l: {0x65: {l: {0x71: {l: {0x71: {l: {0x3B: {c: [8809, 65024]}}}}}}}}}}}}}}}, 0x6E: {l: {0x45: {l: {0x3B: {c: [8809, 65024]}}}}}}}}}, - 0x47: {l: {0x61: {l: {0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [915]}, 0x64: {l: {0x3B: {c: [988]}}}}}}}}}}}, 0x62: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [286]}}}}}}}}}}}, 0x63: {l: {0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [290]}}}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [284]}}}}}}}, 0x79: {l: {0x3B: {c: [1043]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [288]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120074]}}}}}, 0x67: {l: {0x3B: {c: [8921]}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1027]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120126]}}}}}}}, 0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8805]}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8923]}}}}}}}}}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8807]}}}}}}}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [10914]}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8823]}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10878]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8819]}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119970]}}}}}}}, 0x54: {l: {0x3B: {c: [62]}}, c: [62]}, 0x74: {l: {0x3B: {c: [8811]}}}}}, - 0x48: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x6B: {l: {0x3B: {c: [711]}}}}}}}, 0x74: {l: {0x3B: {c: [94]}}}}}, 0x41: {l: {0x52: {l: {0x44: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1066]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [292]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8460]}}}}}, 0x69: {l: {0x6C: {l: {0x62: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8459]}}}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [8461]}}}}}, 0x72: {l: {0x69: {l: {0x7A: {l: {0x6F: {l: {0x6E: {l: {0x74: {l: {0x61: {l: {0x6C: {l: {0x4C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [9472]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8459]}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [294]}}}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x70: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x48: {l: {0x75: {l: {0x6D: {l: {0x70: {l: {0x3B: {c: [8782]}}}}}}}}}}}}}}}}}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8783]}}}}}}}}}}}}}}}}}}}, - 0x68: {l: {0x61: {l: {0x69: {l: {0x72: {l: {0x73: {l: {0x70: {l: {0x3B: {c: [8202]}}}}}}}}}, 0x6C: {l: {0x66: {l: {0x3B: {c: [189]}}}}}, 0x6D: {l: {0x69: {l: {0x6C: {l: {0x74: {l: {0x3B: {c: [8459]}}}}}}}}}, 0x72: {l: {0x64: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1098]}}}}}}}, 0x72: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10568]}}}}}}}, 0x3B: {c: [8596]}, 0x77: {l: {0x3B: {c: [8621]}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8660]}}}}}}}, 0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8463]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [293]}}}}}}}}}, 0x65: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x73: {l: {0x3B: {c: [9829]}, 0x75: {l: {0x69: {l: {0x74: {l: {0x3B: {c: [9829]}}}}}}}}}}}}}}}, 0x6C: {l: {0x6C: {l: {0x69: {l: {0x70: {l: {0x3B: {c: [8230]}}}}}}}}}, 0x72: {l: {0x63: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8889]}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120101]}}}}}, 0x6B: {l: {0x73: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10533]}}}}}}}}}}}, 0x77: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10534]}}}}}}}}}}}}}}}, 0x6F: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8703]}}}}}}}, 0x6D: {l: {0x74: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8763]}}}}}}}}}, 0x6F: {l: {0x6B: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8617]}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8618]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120153]}}}}}, 0x72: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8213]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119997]}}}}}, 0x6C: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8463]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [295]}}}}}}}}}}}, 0x79: {l: {0x62: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x3B: {c: [8259]}}}}}}}}}, 0x70: {l: {0x68: {l: {0x65: {l: {0x6E: {l: {0x3B: {c: [8208]}}}}}}}}}}}}}, - 0x49: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [205]}}, c: [205]}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [206]}}, c: [206]}}}}}, 0x79: {l: {0x3B: {c: [1048]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [304]}}}}}}}, 0x45: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1045]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8465]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [204]}}, c: [204]}}}}}}}}}, 0x4A: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [306]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [298]}}}}}, 0x67: {l: {0x69: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x79: {l: {0x49: {l: {0x3B: {c: [8520]}}}}}}}}}}}}}}}}}, 0x3B: {c: [8465]}, 0x70: {l: {0x6C: {l: {0x69: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8658]}}}}}}}}}}}}}, 0x6E: {l: {0x74: {l: {0x3B: {c: [8748]}, 0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8747]}}}}}}}}}, 0x72: {l: {0x73: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8898]}}}}}}}}}}}}}}}}}}}}}, 0x76: {l: {0x69: {l: {0x73: {l: {0x69: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x43: {l: {0x6F: {l: {0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [8291]}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8290]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4F: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1025]}}}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [302]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120128]}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [921]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8464]}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [296]}}}}}}}}}}}, 0x75: {l: {0x6B: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1030]}}}}}}}, 0x6D: {l: {0x6C: {l: {0x3B: {c: [207]}}, c: [207]}}}}}}}, - 0x69: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [237]}}, c: [237]}}}}}}}}}, 0x63: {l: {0x3B: {c: [8291]}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [238]}}, c: [238]}}}}}, 0x79: {l: {0x3B: {c: [1080]}}}}}, 0x65: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1077]}}}}}, 0x78: {l: {0x63: {l: {0x6C: {l: {0x3B: {c: [161]}}, c: [161]}}}}}}}, 0x66: {l: {0x66: {l: {0x3B: {c: [8660]}}}, 0x72: {l: {0x3B: {c: [120102]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [236]}}, c: [236]}}}}}}}}}, 0x69: {l: {0x3B: {c: [8520]}, 0x69: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10764]}}}}}}}, 0x6E: {l: {0x74: {l: {0x3B: {c: [8749]}}}}}}}, 0x6E: {l: {0x66: {l: {0x69: {l: {0x6E: {l: {0x3B: {c: [10716]}}}}}}}}}, 0x6F: {l: {0x74: {l: {0x61: {l: {0x3B: {c: [8489]}}}}}}}}}, 0x6A: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [307]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [299]}}}}}, 0x67: {l: {0x65: {l: {0x3B: {c: [8465]}}}, 0x6C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8464]}}}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x3B: {c: [8465]}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x3B: {c: [305]}}}}}}}, 0x6F: {l: {0x66: {l: {0x3B: {c: [8887]}}}}}, 0x70: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [437]}}}}}}}}}, 0x6E: {l: {0x63: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [8453]}}}}}}}}}, 0x3B: {c: [8712]}, 0x66: {l: {0x69: {l: {0x6E: {l: {0x3B: {c: [8734]}, 0x74: {l: {0x69: {l: {0x65: {l: {0x3B: {c: [10717]}}}}}}}}}}}}}, 0x6F: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [305]}}}}}}}}}, 0x74: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8890]}}}}}}}, 0x3B: {c: [8747]}, 0x65: {l: {0x67: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x3B: {c: [8484]}}}}}}}}}, 0x72: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8890]}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10775]}}}}}}}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x64: {l: {0x3B: {c: [10812]}}}}}}}}}}}}}, 0x6F: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1105]}}}}}, 0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [303]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120154]}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [953]}}}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x64: {l: {0x3B: {c: [10812]}}}}}}}}}, 0x71: {l: {0x75: {l: {0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [191]}}, c: [191]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119998]}}}}}, 0x69: {l: {0x6E: {l: {0x3B: {c: [8712]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8949]}}}}}}}, 0x45: {l: {0x3B: {c: [8953]}}}, 0x73: {l: {0x3B: {c: [8948]}, 0x76: {l: {0x3B: {c: [8947]}}}}}, 0x76: {l: {0x3B: {c: [8712]}}}}}}}}}, 0x74: {l: {0x3B: {c: [8290]}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [297]}}}}}}}}}}}, 0x75: {l: {0x6B: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1110]}}}}}}}, 0x6D: {l: {0x6C: {l: {0x3B: {c: [239]}}, c: [239]}}}}}}}, - 0x4A: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [308]}}}}}}}, 0x79: {l: {0x3B: {c: [1049]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120077]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120129]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119973]}}}}}, 0x65: {l: {0x72: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1032]}}}}}}}}}}}, 0x75: {l: {0x6B: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1028]}}}}}}}}}}}, - 0x6A: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [309]}}}}}}}, 0x79: {l: {0x3B: {c: [1081]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120103]}}}}}, 0x6D: {l: {0x61: {l: {0x74: {l: {0x68: {l: {0x3B: {c: [567]}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120155]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119999]}}}}}, 0x65: {l: {0x72: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1112]}}}}}}}}}}}, 0x75: {l: {0x6B: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1108]}}}}}}}}}}}, - 0x4B: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x61: {l: {0x3B: {c: [922]}}}}}}}}}, 0x63: {l: {0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [310]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1050]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120078]}}}}}, 0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1061]}}}}}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1036]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120130]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119974]}}}}}}}}}, - 0x6B: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x61: {l: {0x3B: {c: [954]}, 0x76: {l: {0x3B: {c: [1008]}}}}}}}}}}}, 0x63: {l: {0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [311]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1082]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120104]}}}}}, 0x67: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x6E: {l: {0x3B: {c: [312]}}}}}}}}}}}, 0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1093]}}}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1116]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120156]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120000]}}}}}}}}}, - 0x6C: {l: {0x41: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8666]}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8656]}}}}}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [10523]}}}}}}}}}}}, 0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [314]}}}}}}}}}, 0x65: {l: {0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10676]}}}}}}}}}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x6E: {l: {0x3B: {c: [8466]}}}}}}}}}, 0x6D: {l: {0x62: {l: {0x64: {l: {0x61: {l: {0x3B: {c: [955]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [10216]}, 0x64: {l: {0x3B: {c: [10641]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [10216]}}}}}}}}}, 0x70: {l: {0x3B: {c: [10885]}}}, 0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [171]}}, c: [171]}}}}}, 0x72: {l: {0x72: {l: {0x62: {l: {0x3B: {c: [8676]}, 0x66: {l: {0x73: {l: {0x3B: {c: [10527]}}}}}}}, 0x3B: {c: [8592]}, 0x66: {l: {0x73: {l: {0x3B: {c: [10525]}}}}}, 0x68: {l: {0x6B: {l: {0x3B: {c: [8617]}}}}}, 0x6C: {l: {0x70: {l: {0x3B: {c: [8619]}}}}}, 0x70: {l: {0x6C: {l: {0x3B: {c: [10553]}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [10611]}}}}}}}, 0x74: {l: {0x6C: {l: {0x3B: {c: [8610]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [10521]}}}}}}}, 0x3B: {c: [10923]}, 0x65: {l: {0x3B: {c: [10925]}, 0x73: {l: {0x3B: {c: [10925, 65024]}}}}}}}}}, 0x62: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10508]}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10098]}}}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [123]}}}, 0x6B: {l: {0x3B: {c: [91]}}}}}}}, 0x6B: {l: {0x65: {l: {0x3B: {c: [10635]}}}, 0x73: {l: {0x6C: {l: {0x64: {l: {0x3B: {c: [10639]}}}, 0x75: {l: {0x3B: {c: [10637]}}}}}}}}}}}}}, 0x42: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10510]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [318]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [316]}}}}}}}, 0x69: {l: {0x6C: {l: {0x3B: {c: [8968]}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [123]}}}}}, 0x79: {l: {0x3B: {c: [1083]}}}}}, 0x64: {l: {0x63: {l: {0x61: {l: {0x3B: {c: [10550]}}}}}, 0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8220]}, 0x72: {l: {0x3B: {c: [8222]}}}}}}}}}, 0x72: {l: {0x64: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10599]}}}}}}}}}, 0x75: {l: {0x73: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10571]}}}}}}}}}}}}}, 0x73: {l: {0x68: {l: {0x3B: {c: [8626]}}}}}}}, 0x65: {l: {0x3B: {c: [8804]}, 0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8592]}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [8610]}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8637]}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8636]}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8647]}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8596]}, 0x73: {l: {0x3B: {c: [8646]}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x73: {l: {0x3B: {c: [8651]}}}}}}}}}}}}}}}}}, 0x73: {l: {0x71: {l: {0x75: {l: {0x69: {l: {0x67: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8621]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8907]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x67: {l: {0x3B: {c: [8922]}}}, 0x71: {l: {0x3B: {c: [8804]}, 0x71: {l: {0x3B: {c: [8806]}}}, 0x73: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10877]}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [10920]}}}}}, 0x3B: {c: [10877]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10879]}, 0x6F: {l: {0x3B: {c: [10881]}, 0x72: {l: {0x3B: {c: [10883]}}}}}}}}}}}, 0x67: {l: {0x3B: {c: [8922, 65024]}, 0x65: {l: {0x73: {l: {0x3B: {c: [10899]}}}}}}}, 0x73: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10885]}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8918]}}}}}}}, 0x65: {l: {0x71: {l: {0x67: {l: {0x74: {l: {0x72: {l: {0x3B: {c: [8922]}}}}}}}, 0x71: {l: {0x67: {l: {0x74: {l: {0x72: {l: {0x3B: {c: [10891]}}}}}}}}}}}}}, 0x67: {l: {0x74: {l: {0x72: {l: {0x3B: {c: [8822]}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8818]}}}}}}}}}}}}}, 0x45: {l: {0x3B: {c: [8806]}, 0x67: {l: {0x3B: {c: [10891]}}}}}, 0x66: {l: {0x69: {l: {0x73: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [10620]}}}}}}}}}, 0x6C: {l: {0x6F: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [8970]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120105]}}}}}, 0x67: {l: {0x3B: {c: [8822]}, 0x45: {l: {0x3B: {c: [10897]}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10594]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x64: {l: {0x3B: {c: [8637]}}}, 0x75: {l: {0x3B: {c: [8636]}, 0x6C: {l: {0x3B: {c: [10602]}}}}}}}}}, 0x62: {l: {0x6C: {l: {0x6B: {l: {0x3B: {c: [9604]}}}}}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1113]}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8647]}}}}}}}, 0x3B: {c: [8810]}, 0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8990]}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x64: {l: {0x3B: {c: [10603]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9722]}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [320]}}}}}}}}}, 0x6F: {l: {0x75: {l: {0x73: {l: {0x74: {l: {0x61: {l: {0x63: {l: {0x68: {l: {0x65: {l: {0x3B: {c: [9136]}}}}}}}}}, 0x3B: {c: [9136]}}}}}}}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10889]}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10889]}}}}}}}}}}}}}, 0x65: {l: {0x3B: {c: [10887]}, 0x71: {l: {0x3B: {c: [10887]}, 0x71: {l: {0x3B: {c: [8808]}}}}}}}, 0x45: {l: {0x3B: {c: [8808]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8934]}}}}}}}}}, 0x6F: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [10220]}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8701]}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10214]}}}}}}}, 0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10229]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10231]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x70: {l: {0x73: {l: {0x74: {l: {0x6F: {l: {0x3B: {c: [10236]}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10230]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8619]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8620]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10629]}}}}}, 0x66: {l: {0x3B: {c: [120157]}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10797]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10804]}}}}}}}}}}}, 0x77: {l: {0x61: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8727]}}}}}}}, 0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [95]}}}}}}}}}, 0x7A: {l: {0x3B: {c: [9674]}, 0x65: {l: {0x6E: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [9674]}}}}}}}}}, 0x66: {l: {0x3B: {c: [10731]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [40]}, 0x6C: {l: {0x74: {l: {0x3B: {c: [10643]}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8646]}}}}}}}, 0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8991]}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8651]}, 0x64: {l: {0x3B: {c: [10605]}}}}}}}}}, 0x6D: {l: {0x3B: {c: [8206]}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [8895]}}}}}}}}}, 0x73: {l: {0x61: {l: {0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8249]}}}}}}}}}, 0x63: {l: {0x72: {l: {0x3B: {c: [120001]}}}}}, 0x68: {l: {0x3B: {c: [8624]}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8818]}, 0x65: {l: {0x3B: {c: [10893]}}}, 0x67: {l: {0x3B: {c: [10895]}}}}}}}, 0x71: {l: {0x62: {l: {0x3B: {c: [91]}}}, 0x75: {l: {0x6F: {l: {0x3B: {c: [8216]}, 0x72: {l: {0x3B: {c: [8218]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [322]}}}}}}}}}}}, 0x74: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [10918]}}}, 0x69: {l: {0x72: {l: {0x3B: {c: [10873]}}}}}}}, 0x3B: {c: [60]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8918]}}}}}}}, 0x68: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8907]}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8905]}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10614]}}}}}}}}}, 0x71: {l: {0x75: {l: {0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [10875]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x3B: {c: [9667]}, 0x65: {l: {0x3B: {c: [8884]}}}, 0x66: {l: {0x3B: {c: [9666]}}}}}, 0x50: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10646]}}}}}}}}}}, c: [60]}, 0x75: {l: {0x72: {l: {0x64: {l: {0x73: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10570]}}}}}}}}}}}, 0x75: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10598]}}}}}}}}}}}}}, 0x76: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x6E: {l: {0x65: {l: {0x71: {l: {0x71: {l: {0x3B: {c: [8808, 65024]}}}}}}}}}}}}}}}, 0x6E: {l: {0x45: {l: {0x3B: {c: [8808, 65024]}}}}}}}}}, - 0x4C: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [313]}}}}}}}}}, 0x6D: {l: {0x62: {l: {0x64: {l: {0x61: {l: {0x3B: {c: [923]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [10218]}}}}}, 0x70: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x74: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8466]}}}}}}}}}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8606]}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [317]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [315]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1051]}}}}}, 0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x72: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [10216]}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8676]}}}}}}}, 0x3B: {c: [8592]}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8646]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8656]}}}}}}}}}}}, 0x43: {l: {0x65: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8968]}}}}}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x72: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [10214]}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x6E: {l: {0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10593]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10585]}}}}}}}, 0x3B: {c: [8643]}}}}}}}}}}}}}}}}}}}}}, 0x46: {l: {0x6C: {l: {0x6F: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [8970]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8596]}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10574]}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8660]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8612]}}}}}}}}}}}, 0x3B: {c: [8867]}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10586]}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10703]}}}}}}}, 0x3B: {c: [8882]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8884]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10577]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10592]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10584]}}}}}}}, 0x3B: {c: [8639]}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10578]}}}}}}}, 0x3B: {c: [8636]}}}}}}}}}}}}}}}}}, 0x73: {l: {0x73: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8922]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8806]}}}}}}}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8822]}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10913]}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10877]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8818]}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120079]}}}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1033]}}}}}}}, 0x6C: {l: {0x3B: {c: [8920]}, 0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8666]}}}}}}}}}}}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [319]}}}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x67: {l: {0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10229]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10231]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10232]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10234]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10230]}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10233]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120131]}}}}}, 0x77: {l: {0x65: {l: {0x72: {l: {0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8601]}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8600]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8466]}}}}}, 0x68: {l: {0x3B: {c: [8624]}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [321]}}}}}}}}}}}, 0x54: {l: {0x3B: {c: [60]}}, c: [60]}, 0x74: {l: {0x3B: {c: [8810]}}}}}, - 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [175]}}, c: [175]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [9794]}}}, 0x74: {l: {0x3B: {c: [10016]}, 0x65: {l: {0x73: {l: {0x65: {l: {0x3B: {c: [10016]}}}}}}}}}}}, 0x70: {l: {0x3B: {c: [8614]}, 0x73: {l: {0x74: {l: {0x6F: {l: {0x3B: {c: [8614]}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8615]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8612]}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8613]}}}}}}}}}}}}}, 0x72: {l: {0x6B: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [9646]}}}}}}}}}}}, 0x63: {l: {0x6F: {l: {0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [10793]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1084]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8212]}}}}}}}}}, 0x44: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8762]}}}}}}}}}, 0x65: {l: {0x61: {l: {0x73: {l: {0x75: {l: {0x72: {l: {0x65: {l: {0x64: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [8737]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120106]}}}}}, 0x68: {l: {0x6F: {l: {0x3B: {c: [8487]}}}}}, 0x69: {l: {0x63: {l: {0x72: {l: {0x6F: {l: {0x3B: {c: [181]}}, c: [181]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [42]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10992]}}}}}}}, 0x3B: {c: [8739]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [183]}}, c: [183]}}}}}}}, 0x6E: {l: {0x75: {l: {0x73: {l: {0x62: {l: {0x3B: {c: [8863]}}}, 0x3B: {c: [8722]}, 0x64: {l: {0x3B: {c: [8760]}, 0x75: {l: {0x3B: {c: [10794]}}}}}}}}}}}}}, 0x6C: {l: {0x63: {l: {0x70: {l: {0x3B: {c: [10971]}}}}}, 0x64: {l: {0x72: {l: {0x3B: {c: [8230]}}}}}}}, 0x6E: {l: {0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8723]}}}}}}}}}}}, 0x6F: {l: {0x64: {l: {0x65: {l: {0x6C: {l: {0x73: {l: {0x3B: {c: [8871]}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120158]}}}}}}}, 0x70: {l: {0x3B: {c: [8723]}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120002]}}}}}, 0x74: {l: {0x70: {l: {0x6F: {l: {0x73: {l: {0x3B: {c: [8766]}}}}}}}}}}}, 0x75: {l: {0x3B: {c: [956]}, 0x6C: {l: {0x74: {l: {0x69: {l: {0x6D: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8888]}}}}}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8888]}}}}}}}}}}}, - 0x4D: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10501]}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1052]}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8287]}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8499]}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120080]}}}}}, 0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x50: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8723]}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120132]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8499]}}}}}}}, 0x75: {l: {0x3B: {c: [924]}}}}}, - 0x6E: {l: {0x61: {l: {0x62: {l: {0x6C: {l: {0x61: {l: {0x3B: {c: [8711]}}}}}}}, 0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [324]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [8736, 8402]}}}}}, 0x70: {l: {0x3B: {c: [8777]}, 0x45: {l: {0x3B: {c: [10864, 824]}}}, 0x69: {l: {0x64: {l: {0x3B: {c: [8779, 824]}}}}}, 0x6F: {l: {0x73: {l: {0x3B: {c: [329]}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [8777]}}}}}}}}}}}, 0x74: {l: {0x75: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [9838]}, 0x73: {l: {0x3B: {c: [8469]}}}}}}}, 0x3B: {c: [9838]}}}}}}}}}, 0x62: {l: {0x73: {l: {0x70: {l: {0x3B: {c: [160]}}, c: [160]}}}, 0x75: {l: {0x6D: {l: {0x70: {l: {0x3B: {c: [8782, 824]}, 0x65: {l: {0x3B: {c: [8783, 824]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10819]}}}, 0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [328]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [326]}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8775]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10861, 824]}}}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [10818]}}}}}, 0x79: {l: {0x3B: {c: [1085]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8211]}}}}}}}}}, 0x65: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10532]}}}}}, 0x72: {l: {0x3B: {c: [8599]}, 0x6F: {l: {0x77: {l: {0x3B: {c: [8599]}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8663]}}}}}}}, 0x3B: {c: [8800]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8784, 824]}}}}}}}, 0x71: {l: {0x75: {l: {0x69: {l: {0x76: {l: {0x3B: {c: [8802]}}}}}}}}}, 0x73: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10536]}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8770, 824]}}}}}}}, 0x78: {l: {0x69: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8708]}, 0x73: {l: {0x3B: {c: [8708]}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120107]}}}}}, 0x67: {l: {0x45: {l: {0x3B: {c: [8807, 824]}}}, 0x65: {l: {0x3B: {c: [8817]}, 0x71: {l: {0x3B: {c: [8817]}, 0x71: {l: {0x3B: {c: [8807, 824]}}}, 0x73: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10878, 824]}}}}}}}}}}}}}, 0x73: {l: {0x3B: {c: [10878, 824]}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8821]}}}}}}}, 0x74: {l: {0x3B: {c: [8815]}, 0x72: {l: {0x3B: {c: [8815]}}}}}}}, 0x47: {l: {0x67: {l: {0x3B: {c: [8921, 824]}}}, 0x74: {l: {0x3B: {c: [8811, 8402]}, 0x76: {l: {0x3B: {c: [8811, 824]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8622]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8654]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10994]}}}}}}}}}, 0x69: {l: {0x3B: {c: [8715]}, 0x73: {l: {0x3B: {c: [8956]}, 0x64: {l: {0x3B: {c: [8954]}}}}}, 0x76: {l: {0x3B: {c: [8715]}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1114]}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8602]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8653]}}}}}}}, 0x64: {l: {0x72: {l: {0x3B: {c: [8229]}}}}}, 0x45: {l: {0x3B: {c: [8806, 824]}}}, 0x65: {l: {0x3B: {c: [8816]}, 0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8602]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8622]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x71: {l: {0x3B: {c: [8816]}, 0x71: {l: {0x3B: {c: [8806, 824]}}}, 0x73: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10877, 824]}}}}}}}}}}}}}, 0x73: {l: {0x3B: {c: [10877, 824]}, 0x73: {l: {0x3B: {c: [8814]}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8820]}}}}}}}, 0x74: {l: {0x3B: {c: [8814]}, 0x72: {l: {0x69: {l: {0x3B: {c: [8938]}, 0x65: {l: {0x3B: {c: [8940]}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8653]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8654]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x3B: {c: [8920, 824]}}}, 0x74: {l: {0x3B: {c: [8810, 8402]}, 0x76: {l: {0x3B: {c: [8810, 824]}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [8740]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120159]}}}}}, 0x74: {l: {0x3B: {c: [172]}, 0x69: {l: {0x6E: {l: {0x3B: {c: [8713]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8949, 824]}}}}}}}, 0x45: {l: {0x3B: {c: [8953, 824]}}}, 0x76: {l: {0x61: {l: {0x3B: {c: [8713]}}}, 0x62: {l: {0x3B: {c: [8951]}}}, 0x63: {l: {0x3B: {c: [8950]}}}}}}}}}, 0x6E: {l: {0x69: {l: {0x3B: {c: [8716]}, 0x76: {l: {0x61: {l: {0x3B: {c: [8716]}}}, 0x62: {l: {0x3B: {c: [8958]}}}, 0x63: {l: {0x3B: {c: [8957]}}}}}}}}}}, c: [172]}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8742]}}}}}}}}}}}, 0x3B: {c: [8742]}, 0x73: {l: {0x6C: {l: {0x3B: {c: [11005, 8421]}}}}}, 0x74: {l: {0x3B: {c: [8706, 824]}}}}}}}, 0x6F: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10772]}}}}}}}}}}}, 0x72: {l: {0x3B: {c: [8832]}, 0x63: {l: {0x75: {l: {0x65: {l: {0x3B: {c: [8928]}}}}}}}, 0x65: {l: {0x63: {l: {0x3B: {c: [8832]}, 0x65: {l: {0x71: {l: {0x3B: {c: [10927, 824]}}}}}}}, 0x3B: {c: [10927, 824]}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [10547, 824]}}}, 0x3B: {c: [8603]}, 0x77: {l: {0x3B: {c: [8605, 824]}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8655]}}}}}}}, 0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8603]}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [8939]}, 0x65: {l: {0x3B: {c: [8941]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8655]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x3B: {c: [8833]}, 0x63: {l: {0x75: {l: {0x65: {l: {0x3B: {c: [8929]}}}}}}}, 0x65: {l: {0x3B: {c: [10928, 824]}}}, 0x72: {l: {0x3B: {c: [120003]}}}}}, 0x68: {l: {0x6F: {l: {0x72: {l: {0x74: {l: {0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [8740]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8742]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8769]}, 0x65: {l: {0x3B: {c: [8772]}, 0x71: {l: {0x3B: {c: [8772]}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [8740]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8742]}}}}}}}, 0x71: {l: {0x73: {l: {0x75: {l: {0x62: {l: {0x65: {l: {0x3B: {c: [8930]}}}}}, 0x70: {l: {0x65: {l: {0x3B: {c: [8931]}}}}}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [8836]}, 0x45: {l: {0x3B: {c: [10949, 824]}}}, 0x65: {l: {0x3B: {c: [8840]}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8834, 8402]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8840]}, 0x71: {l: {0x3B: {c: [10949, 824]}}}}}}}}}}}}}}}, 0x63: {l: {0x63: {l: {0x3B: {c: [8833]}, 0x65: {l: {0x71: {l: {0x3B: {c: [10928, 824]}}}}}}}}}, 0x70: {l: {0x3B: {c: [8837]}, 0x45: {l: {0x3B: {c: [10950, 824]}}}, 0x65: {l: {0x3B: {c: [8841]}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8835, 8402]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8841]}, 0x71: {l: {0x3B: {c: [10950, 824]}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x67: {l: {0x6C: {l: {0x3B: {c: [8825]}}}}}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [241]}}, c: [241]}}}}}}}, 0x6C: {l: {0x67: {l: {0x3B: {c: [8824]}}}}}, 0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8938]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8940]}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8939]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8941]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x75: {l: {0x3B: {c: [957]}, 0x6D: {l: {0x3B: {c: [35]}, 0x65: {l: {0x72: {l: {0x6F: {l: {0x3B: {c: [8470]}}}}}}}, 0x73: {l: {0x70: {l: {0x3B: {c: [8199]}}}}}}}}}, 0x76: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8781, 8402]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8876]}}}}}}}}}, 0x44: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8877]}}}}}}}}}, 0x67: {l: {0x65: {l: {0x3B: {c: [8805, 8402]}}}, 0x74: {l: {0x3B: {c: [62, 8402]}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10500]}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x66: {l: {0x69: {l: {0x6E: {l: {0x3B: {c: [10718]}}}}}}}}}}}, 0x6C: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10498]}}}}}}}, 0x65: {l: {0x3B: {c: [8804, 8402]}}}, 0x74: {l: {0x3B: {c: [60, 8402]}, 0x72: {l: {0x69: {l: {0x65: {l: {0x3B: {c: [8884, 8402]}}}}}}}}}}}, 0x72: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10499]}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x65: {l: {0x3B: {c: [8885, 8402]}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8764, 8402]}}}}}}}}}, 0x56: {l: {0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8878]}}}}}}}}}, 0x44: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8879]}}}}}}}}}}}, 0x77: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10531]}}}}}, 0x72: {l: {0x3B: {c: [8598]}, 0x6F: {l: {0x77: {l: {0x3B: {c: [8598]}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8662]}}}}}}}, 0x6E: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10535]}}}}}}}}}}}}}, - 0x4E: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [323]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [327]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [325]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1053]}}}}}, 0x65: {l: {0x67: {l: {0x61: {l: {0x74: {l: {0x69: {l: {0x76: {l: {0x65: {l: {0x4D: {l: {0x65: {l: {0x64: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x68: {l: {0x69: {l: {0x63: {l: {0x6B: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}, 0x6E: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x79: {l: {0x54: {l: {0x68: {l: {0x69: {l: {0x6E: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x74: {l: {0x65: {l: {0x64: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8811]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8810]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x4C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [10]}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120081]}}}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1034]}}}}}}}, 0x6F: {l: {0x42: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x6B: {l: {0x3B: {c: [8288]}}}}}}}}}}}, 0x6E: {l: {0x42: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x6B: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [160]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [8469]}}}}}, 0x74: {l: {0x3B: {c: [10988]}, 0x43: {l: {0x6F: {l: {0x6E: {l: {0x67: {l: {0x72: {l: {0x75: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8802]}}}}}}}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x43: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8813]}}}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8742]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x45: {l: {0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8713]}}}}}}}}}}}}}, 0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8800]}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8770, 824]}}}}}}}}}}}}}}}}}}}, 0x78: {l: {0x69: {l: {0x73: {l: {0x74: {l: {0x73: {l: {0x3B: {c: [8708]}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8815]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8817]}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8807, 824]}}}}}}}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8811, 824]}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8825]}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10878, 824]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8821]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x48: {l: {0x75: {l: {0x6D: {l: {0x70: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x48: {l: {0x75: {l: {0x6D: {l: {0x70: {l: {0x3B: {c: [8782, 824]}}}}}}}}}}}}}}}}}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8783, 824]}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x54: {l: {0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10703, 824]}}}}}}}, 0x3B: {c: [8938]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8940]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x73: {l: {0x3B: {c: [8814]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8816]}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8824]}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8810, 824]}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10877, 824]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8820]}}}}}}}}}}}}}}}}}}}, 0x4E: {l: {0x65: {l: {0x73: {l: {0x74: {l: {0x65: {l: {0x64: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [10914, 824]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10913, 824]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x50: {l: {0x72: {l: {0x65: {l: {0x63: {l: {0x65: {l: {0x64: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8832]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10927, 824]}}}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8928]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x45: {l: {0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8716]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x54: {l: {0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10704, 824]}}}}}}}, 0x3B: {c: [8939]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8941]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x53: {l: {0x75: {l: {0x62: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8847, 824]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8930]}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8848, 824]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8931]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x75: {l: {0x62: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8834, 8402]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8840]}}}}}}}}}}}}}}}}}}}, 0x63: {l: {0x63: {l: {0x65: {l: {0x65: {l: {0x64: {l: {0x73: {l: {0x3B: {c: [8833]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10928, 824]}}}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8929]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8831, 824]}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8835, 8402]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8841]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8769]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8772]}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8775]}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8777]}}}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8740]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119977]}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [209]}}, c: [209]}}}}}}}}}, 0x75: {l: {0x3B: {c: [925]}}}}}, - 0x4F: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [211]}}, c: [211]}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [212]}}, c: [212]}}}}}, 0x79: {l: {0x3B: {c: [1054]}}}}}, 0x64: {l: {0x62: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [336]}}}}}}}}}}}, 0x45: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [338]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120082]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [210]}}, c: [210]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [332]}}}}}}}, 0x65: {l: {0x67: {l: {0x61: {l: {0x3B: {c: [937]}}}}}}}, 0x69: {l: {0x63: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [927]}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120134]}}}}}}}, 0x70: {l: {0x65: {l: {0x6E: {l: {0x43: {l: {0x75: {l: {0x72: {l: {0x6C: {l: {0x79: {l: {0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x51: {l: {0x75: {l: {0x6F: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [8220]}}}}}}}}}}}}}}}}}}}}}}}, 0x51: {l: {0x75: {l: {0x6F: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [8216]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x3B: {c: [10836]}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119978]}}}}}, 0x6C: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [216]}}, c: [216]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [213]}}, c: [213]}}}}}, 0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10807]}}}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [214]}}, c: [214]}}}}}, 0x76: {l: {0x65: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8254]}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [9182]}}}, 0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [9140]}}}}}}}}}}}}}}}, 0x50: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x68: {l: {0x65: {l: {0x73: {l: {0x69: {l: {0x73: {l: {0x3B: {c: [9180]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, - 0x6F: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [243]}}, c: [243]}}}}}}}, 0x73: {l: {0x74: {l: {0x3B: {c: [8859]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [244]}}, c: [244]}, 0x3B: {c: [8858]}}}}}, 0x79: {l: {0x3B: {c: [1086]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8861]}}}}}}}, 0x62: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [337]}}}}}}}}}, 0x69: {l: {0x76: {l: {0x3B: {c: [10808]}}}}}, 0x6F: {l: {0x74: {l: {0x3B: {c: [8857]}}}}}, 0x73: {l: {0x6F: {l: {0x6C: {l: {0x64: {l: {0x3B: {c: [10684]}}}}}}}}}}}, 0x65: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [339]}}}}}}}}}, 0x66: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10687]}}}}}}}, 0x72: {l: {0x3B: {c: [120108]}}}}}, 0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [731]}}}}}, 0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [242]}}, c: [242]}}}}}}}, 0x74: {l: {0x3B: {c: [10689]}}}}}, 0x68: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10677]}}}}}}}, 0x6D: {l: {0x3B: {c: [937]}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8750]}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8634]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10686]}}}}}, 0x72: {l: {0x6F: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10683]}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8254]}}}}}}}, 0x74: {l: {0x3B: {c: [10688]}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [333]}}}}}}}, 0x65: {l: {0x67: {l: {0x61: {l: {0x3B: {c: [969]}}}}}}}, 0x69: {l: {0x63: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [959]}}}}}}}}}, 0x64: {l: {0x3B: {c: [10678]}}}, 0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8854]}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120160]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10679]}}}}}, 0x65: {l: {0x72: {l: {0x70: {l: {0x3B: {c: [10681]}}}}}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8853]}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8635]}}}}}}}, 0x3B: {c: [8744]}, 0x64: {l: {0x3B: {c: [10845]}, 0x65: {l: {0x72: {l: {0x3B: {c: [8500]}, 0x6F: {l: {0x66: {l: {0x3B: {c: [8500]}}}}}}}}}, 0x66: {l: {0x3B: {c: [170]}}, c: [170]}, 0x6D: {l: {0x3B: {c: [186]}}, c: [186]}}}, 0x69: {l: {0x67: {l: {0x6F: {l: {0x66: {l: {0x3B: {c: [8886]}}}}}}}}}, 0x6F: {l: {0x72: {l: {0x3B: {c: [10838]}}}}}, 0x73: {l: {0x6C: {l: {0x6F: {l: {0x70: {l: {0x65: {l: {0x3B: {c: [10839]}}}}}}}}}}}, 0x76: {l: {0x3B: {c: [10843]}}}}}, 0x53: {l: {0x3B: {c: [9416]}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8500]}}}}}, 0x6C: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [248]}}, c: [248]}}}}}}}, 0x6F: {l: {0x6C: {l: {0x3B: {c: [8856]}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [245]}}, c: [245]}}}}}, 0x6D: {l: {0x65: {l: {0x73: {l: {0x61: {l: {0x73: {l: {0x3B: {c: [10806]}}}}}, 0x3B: {c: [8855]}}}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [246]}}, c: [246]}}}}}, 0x76: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9021]}}}}}}}}}}}, - 0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x3B: {c: [182]}, 0x6C: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8741]}}}}}}}}}}, c: [182]}, 0x3B: {c: [8741]}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [10995]}}}}}, 0x6C: {l: {0x3B: {c: [11005]}}}}}, 0x74: {l: {0x3B: {c: [8706]}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1087]}}}}}, 0x65: {l: {0x72: {l: {0x63: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [37]}}}}}}}, 0x69: {l: {0x6F: {l: {0x64: {l: {0x3B: {c: [46]}}}}}}}, 0x6D: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [8240]}}}}}}}, 0x70: {l: {0x3B: {c: [8869]}}}, 0x74: {l: {0x65: {l: {0x6E: {l: {0x6B: {l: {0x3B: {c: [8241]}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120109]}}}}}, 0x68: {l: {0x69: {l: {0x3B: {c: [966]}, 0x76: {l: {0x3B: {c: [981]}}}}}, 0x6D: {l: {0x6D: {l: {0x61: {l: {0x74: {l: {0x3B: {c: [8499]}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [9742]}}}}}}}}}, 0x69: {l: {0x3B: {c: [960]}, 0x74: {l: {0x63: {l: {0x68: {l: {0x66: {l: {0x6F: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [8916]}}}}}}}}}}}}}}}, 0x76: {l: {0x3B: {c: [982]}}}}}, 0x6C: {l: {0x61: {l: {0x6E: {l: {0x63: {l: {0x6B: {l: {0x3B: {c: [8463]}, 0x68: {l: {0x3B: {c: [8462]}}}}}}}, 0x6B: {l: {0x76: {l: {0x3B: {c: [8463]}}}}}}}}}, 0x75: {l: {0x73: {l: {0x61: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10787]}}}}}}}}}, 0x62: {l: {0x3B: {c: [8862]}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10786]}}}}}}}, 0x3B: {c: [43]}, 0x64: {l: {0x6F: {l: {0x3B: {c: [8724]}}}, 0x75: {l: {0x3B: {c: [10789]}}}}}, 0x65: {l: {0x3B: {c: [10866]}}}, 0x6D: {l: {0x6E: {l: {0x3B: {c: [177]}}, c: [177]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [10790]}}}}}}}, 0x74: {l: {0x77: {l: {0x6F: {l: {0x3B: {c: [10791]}}}}}}}}}}}}}, 0x6D: {l: {0x3B: {c: [177]}}}, 0x6F: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10773]}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120161]}}}}}, 0x75: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [163]}}, c: [163]}}}}}}}, 0x72: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10935]}}}}}, 0x3B: {c: [8826]}, 0x63: {l: {0x75: {l: {0x65: {l: {0x3B: {c: [8828]}}}}}}}, 0x65: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10935]}}}}}}}}}}}}}, 0x3B: {c: [8826]}, 0x63: {l: {0x75: {l: {0x72: {l: {0x6C: {l: {0x79: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8828]}}}}}}}}}}}}}}}, 0x65: {l: {0x71: {l: {0x3B: {c: [10927]}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10937]}}}}}}}}}}}}}, 0x65: {l: {0x71: {l: {0x71: {l: {0x3B: {c: [10933]}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8936]}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8830]}}}}}}}}}, 0x3B: {c: [10927]}}}, 0x45: {l: {0x3B: {c: [10931]}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8242]}, 0x73: {l: {0x3B: {c: [8473]}}}}}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10937]}}}}}, 0x45: {l: {0x3B: {c: [10933]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8936]}}}}}}}}}, 0x6F: {l: {0x64: {l: {0x3B: {c: [8719]}}}, 0x66: {l: {0x61: {l: {0x6C: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9006]}}}}}}}}}, 0x6C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8978]}}}}}}}}}, 0x73: {l: {0x75: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8979]}}}}}}}}}}}, 0x70: {l: {0x3B: {c: [8733]}, 0x74: {l: {0x6F: {l: {0x3B: {c: [8733]}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8830]}}}}}}}, 0x75: {l: {0x72: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8880]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120005]}}}}}, 0x69: {l: {0x3B: {c: [968]}}}}}, 0x75: {l: {0x6E: {l: {0x63: {l: {0x73: {l: {0x70: {l: {0x3B: {c: [8200]}}}}}}}}}}}}}, - 0x50: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x44: {l: {0x3B: {c: [8706]}}}}}}}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1055]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120083]}}}}}, 0x68: {l: {0x69: {l: {0x3B: {c: [934]}}}}}, 0x69: {l: {0x3B: {c: [928]}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x4D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [177]}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x69: {l: {0x6E: {l: {0x63: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x70: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8460]}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [8473]}}}}}}}, 0x72: {l: {0x3B: {c: [10939]}, 0x65: {l: {0x63: {l: {0x65: {l: {0x64: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8826]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10927]}}}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8828]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8830]}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8243]}}}}}}}, 0x6F: {l: {0x64: {l: {0x75: {l: {0x63: {l: {0x74: {l: {0x3B: {c: [8719]}}}}}}}}}, 0x70: {l: {0x6F: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8733]}}}}}, 0x3B: {c: [8759]}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119979]}}}}}, 0x69: {l: {0x3B: {c: [936]}}}}}}}, - 0x51: {l: {0x66: {l: {0x72: {l: {0x3B: {c: [120084]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [8474]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119980]}}}}}}}, 0x55: {l: {0x4F: {l: {0x54: {l: {0x3B: {c: [34]}}, c: [34]}}}}}}}, - 0x71: {l: {0x66: {l: {0x72: {l: {0x3B: {c: [120110]}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10764]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120162]}}}}}}}, 0x70: {l: {0x72: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8279]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120006]}}}}}}}, 0x75: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x6E: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x73: {l: {0x3B: {c: [8461]}}}}}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10774]}}}}}}}}}}}, 0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [63]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8799]}}}}}}}}}}}, 0x6F: {l: {0x74: {l: {0x3B: {c: [34]}}, c: [34]}}}}}}}, - 0x72: {l: {0x41: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8667]}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8658]}}}}}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [10524]}}}}}}}}}}}, 0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8765, 817]}}}, 0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [341]}}}}}}}}}, 0x64: {l: {0x69: {l: {0x63: {l: {0x3B: {c: [8730]}}}}}}}, 0x65: {l: {0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10675]}}}}}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [10217]}, 0x64: {l: {0x3B: {c: [10642]}}}, 0x65: {l: {0x3B: {c: [10661]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [10217]}}}}}}}}}, 0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [187]}}, c: [187]}}}}}, 0x72: {l: {0x72: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10613]}}}}}, 0x62: {l: {0x3B: {c: [8677]}, 0x66: {l: {0x73: {l: {0x3B: {c: [10528]}}}}}}}, 0x63: {l: {0x3B: {c: [10547]}}}, 0x3B: {c: [8594]}, 0x66: {l: {0x73: {l: {0x3B: {c: [10526]}}}}}, 0x68: {l: {0x6B: {l: {0x3B: {c: [8618]}}}}}, 0x6C: {l: {0x70: {l: {0x3B: {c: [8620]}}}}}, 0x70: {l: {0x6C: {l: {0x3B: {c: [10565]}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [10612]}}}}}}}, 0x74: {l: {0x6C: {l: {0x3B: {c: [8611]}}}}}, 0x77: {l: {0x3B: {c: [8605]}}}}}}}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [10522]}}}}}}}, 0x69: {l: {0x6F: {l: {0x3B: {c: [8758]}, 0x6E: {l: {0x61: {l: {0x6C: {l: {0x73: {l: {0x3B: {c: [8474]}}}}}}}}}}}}}}}}}, 0x62: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10509]}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10099]}}}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [125]}}}, 0x6B: {l: {0x3B: {c: [93]}}}}}}}, 0x6B: {l: {0x65: {l: {0x3B: {c: [10636]}}}, 0x73: {l: {0x6C: {l: {0x64: {l: {0x3B: {c: [10638]}}}, 0x75: {l: {0x3B: {c: [10640]}}}}}}}}}}}}}, 0x42: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10511]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [345]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [343]}}}}}}}, 0x69: {l: {0x6C: {l: {0x3B: {c: [8969]}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [125]}}}}}, 0x79: {l: {0x3B: {c: [1088]}}}}}, 0x64: {l: {0x63: {l: {0x61: {l: {0x3B: {c: [10551]}}}}}, 0x6C: {l: {0x64: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10601]}}}}}}}}}}}, 0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8221]}, 0x72: {l: {0x3B: {c: [8221]}}}}}}}}}, 0x73: {l: {0x68: {l: {0x3B: {c: [8627]}}}}}}}, 0x65: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8476]}, 0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8475]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x3B: {c: [8476]}}}}}}}}}, 0x73: {l: {0x3B: {c: [8477]}}}}}}}, 0x63: {l: {0x74: {l: {0x3B: {c: [9645]}}}}}, 0x67: {l: {0x3B: {c: [174]}}, c: [174]}}}, 0x66: {l: {0x69: {l: {0x73: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [10621]}}}}}}}}}, 0x6C: {l: {0x6F: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [8971]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120111]}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10596]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x64: {l: {0x3B: {c: [8641]}}}, 0x75: {l: {0x3B: {c: [8640]}, 0x6C: {l: {0x3B: {c: [10604]}}}}}}}}}, 0x6F: {l: {0x3B: {c: [961]}, 0x76: {l: {0x3B: {c: [1009]}}}}}}}, 0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8594]}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [8611]}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8641]}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8640]}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8644]}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x73: {l: {0x3B: {c: [8652]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8649]}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x71: {l: {0x75: {l: {0x69: {l: {0x67: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8605]}}}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8908]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [730]}}}}}, 0x73: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x73: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8787]}}}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8644]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8652]}}}}}}}, 0x6D: {l: {0x3B: {c: [8207]}}}}}, 0x6D: {l: {0x6F: {l: {0x75: {l: {0x73: {l: {0x74: {l: {0x61: {l: {0x63: {l: {0x68: {l: {0x65: {l: {0x3B: {c: [9137]}}}}}}}}}, 0x3B: {c: [9137]}}}}}}}}}}}, 0x6E: {l: {0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [10990]}}}}}}}}}, 0x6F: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [10221]}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8702]}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10215]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10630]}}}}}, 0x66: {l: {0x3B: {c: [120163]}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10798]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10805]}}}}}}}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [41]}, 0x67: {l: {0x74: {l: {0x3B: {c: [10644]}}}}}}}}}, 0x70: {l: {0x6F: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10770]}}}}}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8649]}}}}}}}}}, 0x73: {l: {0x61: {l: {0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8250]}}}}}}}}}, 0x63: {l: {0x72: {l: {0x3B: {c: [120007]}}}}}, 0x68: {l: {0x3B: {c: [8625]}}}, 0x71: {l: {0x62: {l: {0x3B: {c: [93]}}}, 0x75: {l: {0x6F: {l: {0x3B: {c: [8217]}, 0x72: {l: {0x3B: {c: [8217]}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8908]}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8906]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x3B: {c: [9657]}, 0x65: {l: {0x3B: {c: [8885]}}}, 0x66: {l: {0x3B: {c: [9656]}}}, 0x6C: {l: {0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [10702]}}}}}}}}}}}}}}}, 0x75: {l: {0x6C: {l: {0x75: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10600]}}}}}}}}}}}}}, 0x78: {l: {0x3B: {c: [8478]}}}}}, - 0x52: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [340]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [10219]}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8608]}, 0x74: {l: {0x6C: {l: {0x3B: {c: [10518]}}}}}}}}}}}, 0x42: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10512]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [344]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [342]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1056]}}}}}, 0x65: {l: {0x3B: {c: [8476]}, 0x76: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x45: {l: {0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8715]}}}}}}}}}}}}}, 0x71: {l: {0x75: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x62: {l: {0x72: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [8651]}}}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x62: {l: {0x72: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [10607]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x45: {l: {0x47: {l: {0x3B: {c: [174]}}, c: [174]}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8476]}}}}}, 0x68: {l: {0x6F: {l: {0x3B: {c: [929]}}}}}, 0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x72: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [10217]}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8677]}}}}}}}, 0x3B: {c: [8594]}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8644]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8658]}}}}}}}}}}}, 0x43: {l: {0x65: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8969]}}}}}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x72: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [10215]}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x6E: {l: {0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10589]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10581]}}}}}}}, 0x3B: {c: [8642]}}}}}}}}}}}}}}}}}}}}}, 0x46: {l: {0x6C: {l: {0x6F: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [8971]}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8614]}}}}}}}}}}}, 0x3B: {c: [8866]}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10587]}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10704]}}}}}}}, 0x3B: {c: [8883]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8885]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10575]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10588]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10580]}}}}}}}, 0x3B: {c: [8638]}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10579]}}}}}}}, 0x3B: {c: [8640]}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [8477]}}}}}, 0x75: {l: {0x6E: {l: {0x64: {l: {0x49: {l: {0x6D: {l: {0x70: {l: {0x6C: {l: {0x69: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10608]}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8667]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8475]}}}}}, 0x68: {l: {0x3B: {c: [8625]}}}}}, 0x75: {l: {0x6C: {l: {0x65: {l: {0x44: {l: {0x65: {l: {0x6C: {l: {0x61: {l: {0x79: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [10740]}}}}}}}}}}}}}}}}}}}}}}}, - 0x53: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [346]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [352]}}}}}}}}}, 0x3B: {c: [10940]}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [350]}}}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [348]}}}}}}}, 0x79: {l: {0x3B: {c: [1057]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120086]}}}}}, 0x48: {l: {0x43: {l: {0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1065]}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1064]}}}}}}}, 0x68: {l: {0x6F: {l: {0x72: {l: {0x74: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8595]}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8592]}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8594]}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8593]}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x67: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [931]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x43: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [8728]}}}}}}}}}}}}}}}}}}}}}, 0x4F: {l: {0x46: {l: {0x54: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1068]}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120138]}}}}}}}, 0x71: {l: {0x72: {l: {0x74: {l: {0x3B: {c: [8730]}}}}}, 0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9633]}, 0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8851]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x53: {l: {0x75: {l: {0x62: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8847]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8849]}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8848]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8850]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x6E: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8852]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119982]}}}}}}}, 0x74: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8902]}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [8912]}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8912]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8838]}}}}}}}}}}}}}}}}}}}, 0x63: {l: {0x63: {l: {0x65: {l: {0x65: {l: {0x64: {l: {0x73: {l: {0x3B: {c: [8827]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10928]}}}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8829]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8831]}}}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x54: {l: {0x68: {l: {0x61: {l: {0x74: {l: {0x3B: {c: [8715]}}}}}}}}}}}}}, 0x6D: {l: {0x3B: {c: [8721]}}}, 0x70: {l: {0x3B: {c: [8913]}, 0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8835]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8839]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8913]}}}}}}}}}}}}}, - 0x73: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [347]}}}}}}}}}}}, 0x62: {l: {0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8218]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10936]}}}, 0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [353]}}}}}}}}}, 0x3B: {c: [8827]}, 0x63: {l: {0x75: {l: {0x65: {l: {0x3B: {c: [8829]}}}}}}}, 0x65: {l: {0x3B: {c: [10928]}, 0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [351]}}}}}}}}}, 0x45: {l: {0x3B: {c: [10932]}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [349]}}}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10938]}}}}}, 0x45: {l: {0x3B: {c: [10934]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8937]}}}}}}}}}, 0x70: {l: {0x6F: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10771]}}}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8831]}}}}}}}, 0x79: {l: {0x3B: {c: [1089]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x62: {l: {0x3B: {c: [8865]}}}, 0x3B: {c: [8901]}, 0x65: {l: {0x3B: {c: [10854]}}}}}}}}}, 0x65: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10533]}}}}}, 0x72: {l: {0x3B: {c: [8600]}, 0x6F: {l: {0x77: {l: {0x3B: {c: [8600]}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8664]}}}}}}}, 0x63: {l: {0x74: {l: {0x3B: {c: [167]}}, c: [167]}}}, 0x6D: {l: {0x69: {l: {0x3B: {c: [59]}}}}}, 0x73: {l: {0x77: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10537]}}}}}}}}}, 0x74: {l: {0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8726]}}}}}}}}}, 0x6E: {l: {0x3B: {c: [8726]}}}}}}}, 0x78: {l: {0x74: {l: {0x3B: {c: [10038]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120112]}, 0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8994]}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x3B: {c: [9839]}}}}}}}, 0x63: {l: {0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1097]}}}}}}}, 0x79: {l: {0x3B: {c: [1096]}}}}}, 0x6F: {l: {0x72: {l: {0x74: {l: {0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [8739]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8741]}}}}}}}}}}}}}}}}}}}}}}}, 0x79: {l: {0x3B: {c: [173]}}, c: [173]}}}, 0x69: {l: {0x67: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [963]}, 0x66: {l: {0x3B: {c: [962]}}}, 0x76: {l: {0x3B: {c: [962]}}}}}}}}}, 0x6D: {l: {0x3B: {c: [8764]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10858]}}}}}}}, 0x65: {l: {0x3B: {c: [8771]}, 0x71: {l: {0x3B: {c: [8771]}}}}}, 0x67: {l: {0x3B: {c: [10910]}, 0x45: {l: {0x3B: {c: [10912]}}}}}, 0x6C: {l: {0x3B: {c: [10909]}, 0x45: {l: {0x3B: {c: [10911]}}}}}, 0x6E: {l: {0x65: {l: {0x3B: {c: [8774]}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10788]}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10610]}}}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8592]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8726]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x68: {l: {0x70: {l: {0x3B: {c: [10803]}}}}}}}}}, 0x65: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x73: {l: {0x6C: {l: {0x3B: {c: [10724]}}}}}}}}}}}}}, 0x69: {l: {0x64: {l: {0x3B: {c: [8739]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [8995]}}}}}}}, 0x74: {l: {0x3B: {c: [10922]}, 0x65: {l: {0x3B: {c: [10924]}, 0x73: {l: {0x3B: {c: [10924, 65024]}}}}}}}}}, 0x6F: {l: {0x66: {l: {0x74: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1100]}}}}}}}}}, 0x6C: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9023]}}}}}, 0x3B: {c: [10692]}}}, 0x3B: {c: [47]}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120164]}}}}}}}, 0x70: {l: {0x61: {l: {0x64: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [9824]}, 0x75: {l: {0x69: {l: {0x74: {l: {0x3B: {c: [9824]}}}}}}}}}}}}}, 0x72: {l: {0x3B: {c: [8741]}}}}}}}, 0x71: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8851]}, 0x73: {l: {0x3B: {c: [8851, 65024]}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8852]}, 0x73: {l: {0x3B: {c: [8852, 65024]}}}}}}}}}, 0x73: {l: {0x75: {l: {0x62: {l: {0x3B: {c: [8847]}, 0x65: {l: {0x3B: {c: [8849]}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8847]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8849]}}}}}}}}}}}}}, 0x70: {l: {0x3B: {c: [8848]}, 0x65: {l: {0x3B: {c: [8850]}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8848]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8850]}}}}}}}}}}}}}}}}}, 0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9633]}}}, 0x66: {l: {0x3B: {c: [9642]}}}}}}}, 0x3B: {c: [9633]}, 0x66: {l: {0x3B: {c: [9642]}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8594]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120008]}}}}}, 0x65: {l: {0x74: {l: {0x6D: {l: {0x6E: {l: {0x3B: {c: [8726]}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [8995]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8902]}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9734]}, 0x66: {l: {0x3B: {c: [9733]}}}}}}}, 0x72: {l: {0x61: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x65: {l: {0x70: {l: {0x73: {l: {0x69: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [1013]}}}}}}}}}}}}}}}, 0x70: {l: {0x68: {l: {0x69: {l: {0x3B: {c: [981]}}}}}}}}}}}}}}}}}, 0x6E: {l: {0x73: {l: {0x3B: {c: [175]}}}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [8834]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10941]}}}}}}}, 0x45: {l: {0x3B: {c: [10949]}}}, 0x65: {l: {0x3B: {c: [8838]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10947]}}}}}}}}}, 0x6D: {l: {0x75: {l: {0x6C: {l: {0x74: {l: {0x3B: {c: [10945]}}}}}}}}}, 0x6E: {l: {0x45: {l: {0x3B: {c: [10955]}}}, 0x65: {l: {0x3B: {c: [8842]}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10943]}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10617]}}}}}}}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8834]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8838]}, 0x71: {l: {0x3B: {c: [10949]}}}}}}}, 0x6E: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8842]}, 0x71: {l: {0x3B: {c: [10955]}}}}}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [10951]}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [10965]}}}, 0x70: {l: {0x3B: {c: [10963]}}}}}}}}}, 0x63: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10936]}}}}}}}}}}}}}, 0x3B: {c: [8827]}, 0x63: {l: {0x75: {l: {0x72: {l: {0x6C: {l: {0x79: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8829]}}}}}}}}}}}}}}}, 0x65: {l: {0x71: {l: {0x3B: {c: [10928]}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10938]}}}}}}}}}}}}}, 0x65: {l: {0x71: {l: {0x71: {l: {0x3B: {c: [10934]}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8937]}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8831]}}}}}}}}}}}, 0x6D: {l: {0x3B: {c: [8721]}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [9834]}}}}}, 0x70: {l: {0x31: {l: {0x3B: {c: [185]}}, c: [185]}, 0x32: {l: {0x3B: {c: [178]}}, c: [178]}, 0x33: {l: {0x3B: {c: [179]}}, c: [179]}, 0x3B: {c: [8835]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10942]}}}}}, 0x73: {l: {0x75: {l: {0x62: {l: {0x3B: {c: [10968]}}}}}}}}}, 0x45: {l: {0x3B: {c: [10950]}}}, 0x65: {l: {0x3B: {c: [8839]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10948]}}}}}}}}}, 0x68: {l: {0x73: {l: {0x6F: {l: {0x6C: {l: {0x3B: {c: [10185]}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [10967]}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10619]}}}}}}}}}, 0x6D: {l: {0x75: {l: {0x6C: {l: {0x74: {l: {0x3B: {c: [10946]}}}}}}}}}, 0x6E: {l: {0x45: {l: {0x3B: {c: [10956]}}}, 0x65: {l: {0x3B: {c: [8843]}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10944]}}}}}}}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8835]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8839]}, 0x71: {l: {0x3B: {c: [10950]}}}}}}}, 0x6E: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8843]}, 0x71: {l: {0x3B: {c: [10956]}}}}}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [10952]}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [10964]}}}, 0x70: {l: {0x3B: {c: [10966]}}}}}}}}}}}, 0x77: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10534]}}}}}, 0x72: {l: {0x3B: {c: [8601]}, 0x6F: {l: {0x77: {l: {0x3B: {c: [8601]}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8665]}}}}}}}, 0x6E: {l: {0x77: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10538]}}}}}}}}}}}, 0x7A: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [223]}}, c: [223]}}}}}}}}}, - 0x54: {l: {0x61: {l: {0x62: {l: {0x3B: {c: [9]}}}, 0x75: {l: {0x3B: {c: [932]}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [356]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [354]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1058]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120087]}}}}}, 0x68: {l: {0x65: {l: {0x72: {l: {0x65: {l: {0x66: {l: {0x6F: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [8756]}}}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [920]}}}}}}}, 0x69: {l: {0x63: {l: {0x6B: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8287, 8202]}}}}}}}}}}}}}}}, 0x6E: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8201]}}}}}}}}}}}}}}}}}, 0x48: {l: {0x4F: {l: {0x52: {l: {0x4E: {l: {0x3B: {c: [222]}}, c: [222]}}}}}}}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8764]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8771]}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8773]}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8776]}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120139]}}}}}}}, 0x52: {l: {0x41: {l: {0x44: {l: {0x45: {l: {0x3B: {c: [8482]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x70: {l: {0x6C: {l: {0x65: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8411]}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119983]}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [358]}}}}}}}}}}}, 0x53: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1062]}}}}}, 0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1035]}}}}}}}}}}}, - 0x74: {l: {0x61: {l: {0x72: {l: {0x67: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8982]}}}}}}}}}, 0x75: {l: {0x3B: {c: [964]}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [9140]}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [357]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [355]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1090]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8411]}}}}}}}, 0x65: {l: {0x6C: {l: {0x72: {l: {0x65: {l: {0x63: {l: {0x3B: {c: [8981]}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120113]}}}}}, 0x68: {l: {0x65: {l: {0x72: {l: {0x65: {l: {0x34: {l: {0x3B: {c: [8756]}}}, 0x66: {l: {0x6F: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [8756]}}}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [952]}, 0x73: {l: {0x79: {l: {0x6D: {l: {0x3B: {c: [977]}}}}}}}, 0x76: {l: {0x3B: {c: [977]}}}}}}}}}, 0x69: {l: {0x63: {l: {0x6B: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [8776]}}}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8764]}}}}}}}}}}}, 0x6E: {l: {0x73: {l: {0x70: {l: {0x3B: {c: [8201]}}}}}}}}}, 0x6B: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8776]}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8764]}}}}}}}}}, 0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [254]}}, c: [254]}}}}}}}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [732]}}}}}}}, 0x6D: {l: {0x65: {l: {0x73: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10801]}}}}}, 0x3B: {c: [8864]}}}, 0x3B: {c: [215]}, 0x64: {l: {0x3B: {c: [10800]}}}}, c: [215]}}}}}, 0x6E: {l: {0x74: {l: {0x3B: {c: [8749]}}}}}}}, 0x6F: {l: {0x65: {l: {0x61: {l: {0x3B: {c: [10536]}}}}}, 0x70: {l: {0x62: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [9014]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10993]}}}}}}}, 0x3B: {c: [8868]}, 0x66: {l: {0x3B: {c: [120165]}, 0x6F: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10970]}}}}}}}}}}}, 0x73: {l: {0x61: {l: {0x3B: {c: [10537]}}}}}}}, 0x70: {l: {0x72: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8244]}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8482]}}}}}}}, 0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [9653]}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [9663]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [9667]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8884]}}}}}}}}}}}}}, 0x71: {l: {0x3B: {c: [8796]}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [9657]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8885]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [9708]}}}}}}}, 0x65: {l: {0x3B: {c: [8796]}}}, 0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10810]}}}}}}}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10809]}}}}}}}}}, 0x73: {l: {0x62: {l: {0x3B: {c: [10701]}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [10811]}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x7A: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [9186]}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120009]}}}, 0x79: {l: {0x3B: {c: [1094]}}}}}, 0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1115]}}}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [359]}}}}}}}}}}}, 0x77: {l: {0x69: {l: {0x78: {l: {0x74: {l: {0x3B: {c: [8812]}}}}}}}, 0x6F: {l: {0x68: {l: {0x65: {l: {0x61: {l: {0x64: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8606]}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8608]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, - 0x55: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [218]}}, c: [218]}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8607]}, 0x6F: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10569]}}}}}}}}}}}}}}}, 0x62: {l: {0x72: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1038]}}}}}, 0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [364]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [219]}}, c: [219]}}}}}, 0x79: {l: {0x3B: {c: [1059]}}}}}, 0x64: {l: {0x62: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [368]}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120088]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [217]}}, c: [217]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [362]}}}}}}}}}, 0x6E: {l: {0x64: {l: {0x65: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [95]}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [9183]}}}, 0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [9141]}}}}}}}}}}}}}}}, 0x50: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x68: {l: {0x65: {l: {0x73: {l: {0x69: {l: {0x73: {l: {0x3B: {c: [9181]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8899]}, 0x50: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8846]}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [370]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120140]}}}}}}}, 0x70: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10514]}}}}}}}, 0x3B: {c: [8593]}, 0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8645]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8657]}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8597]}}}}}}}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8661]}}}}}}}}}}}}}}}}}}}, 0x45: {l: {0x71: {l: {0x75: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x62: {l: {0x72: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [10606]}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x72: {l: {0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8598]}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8599]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x3B: {c: [978]}, 0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [933]}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8613]}}}}}}}}}}}, 0x3B: {c: [8869]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [366]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119984]}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [360]}}}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [220]}}, c: [220]}}}}}}}, - 0x75: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [250]}}, c: [250]}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8593]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8657]}}}}}}}, 0x62: {l: {0x72: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1118]}}}}}, 0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [365]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [251]}}, c: [251]}}}}}, 0x79: {l: {0x3B: {c: [1091]}}}}}, 0x64: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8645]}}}}}}}, 0x62: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [369]}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10606]}}}}}}}}}, 0x66: {l: {0x69: {l: {0x73: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [10622]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120114]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [249]}}, c: [249]}}}}}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10595]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x6C: {l: {0x3B: {c: [8639]}}}, 0x72: {l: {0x3B: {c: [8638]}}}}}}}, 0x62: {l: {0x6C: {l: {0x6B: {l: {0x3B: {c: [9600]}}}}}}}}}, 0x6C: {l: {0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [8988]}, 0x65: {l: {0x72: {l: {0x3B: {c: [8988]}}}}}}}}}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8975]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9720]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [363]}}}}}}}, 0x6C: {l: {0x3B: {c: [168]}}, c: [168]}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [371]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120166]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8593]}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8597]}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8639]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8638]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8846]}}}}}}}, 0x73: {l: {0x69: {l: {0x3B: {c: [965]}, 0x68: {l: {0x3B: {c: [978]}}}, 0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [965]}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8648]}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [8989]}, 0x65: {l: {0x72: {l: {0x3B: {c: [8989]}}}}}}}}}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8974]}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [367]}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9721]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120010]}}}}}}}, 0x74: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8944]}}}}}}}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [361]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x3B: {c: [9653]}, 0x66: {l: {0x3B: {c: [9652]}}}}}}}}}, 0x75: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8648]}}}}}}}, 0x6D: {l: {0x6C: {l: {0x3B: {c: [252]}}, c: [252]}}}}}, 0x77: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [10663]}}}}}}}}}}}}}}}, - 0x76: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x72: {l: {0x74: {l: {0x3B: {c: [10652]}}}}}}}}}, 0x72: {l: {0x65: {l: {0x70: {l: {0x73: {l: {0x69: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [1013]}}}}}}}}}}}}}}}, 0x6B: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x61: {l: {0x3B: {c: [1008]}}}}}}}}}}}, 0x6E: {l: {0x6F: {l: {0x74: {l: {0x68: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8709]}}}}}}}}}}}}}}}, 0x70: {l: {0x68: {l: {0x69: {l: {0x3B: {c: [981]}}}}}, 0x69: {l: {0x3B: {c: [982]}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x74: {l: {0x6F: {l: {0x3B: {c: [8733]}}}}}}}}}}}}}, 0x72: {l: {0x3B: {c: [8597]}, 0x68: {l: {0x6F: {l: {0x3B: {c: [1009]}}}}}}}, 0x73: {l: {0x69: {l: {0x67: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [962]}}}}}}}}}, 0x75: {l: {0x62: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x6E: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8842, 65024]}, 0x71: {l: {0x3B: {c: [10955, 65024]}}}}}}}}}}}}}}}}}, 0x70: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x6E: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8843, 65024]}, 0x71: {l: {0x3B: {c: [10956, 65024]}}}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x65: {l: {0x74: {l: {0x61: {l: {0x3B: {c: [977]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8882]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8883]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8661]}}}}}}}, 0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10984]}, 0x76: {l: {0x3B: {c: [10985]}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1074]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8866]}}}}}}}}}, 0x44: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8872]}}}}}}}}}, 0x65: {l: {0x65: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8891]}}}}}}}, 0x3B: {c: [8744]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8794]}}}}}}}, 0x6C: {l: {0x6C: {l: {0x69: {l: {0x70: {l: {0x3B: {c: [8942]}}}}}}}}}, 0x72: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [124]}}}}}}}, 0x74: {l: {0x3B: {c: [124]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120115]}}}}}, 0x6C: {l: {0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [8882]}}}}}}}}}, 0x6E: {l: {0x73: {l: {0x75: {l: {0x62: {l: {0x3B: {c: [8834, 8402]}}}, 0x70: {l: {0x3B: {c: [8835, 8402]}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120167]}}}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8733]}}}}}}}}}, 0x72: {l: {0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [8883]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120011]}}}}}, 0x75: {l: {0x62: {l: {0x6E: {l: {0x45: {l: {0x3B: {c: [10955, 65024]}}}, 0x65: {l: {0x3B: {c: [8842, 65024]}}}}}}}, 0x70: {l: {0x6E: {l: {0x45: {l: {0x3B: {c: [10956, 65024]}}}, 0x65: {l: {0x3B: {c: [8843, 65024]}}}}}}}}}}}, 0x7A: {l: {0x69: {l: {0x67: {l: {0x7A: {l: {0x61: {l: {0x67: {l: {0x3B: {c: [10650]}}}}}}}}}}}}}}}, - 0x56: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10987]}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1042]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8873]}, 0x6C: {l: {0x3B: {c: [10982]}}}}}}}}}}}, 0x44: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8875]}}}}}}}}}, 0x65: {l: {0x65: {l: {0x3B: {c: [8897]}}}, 0x72: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8214]}}}}}}}, 0x74: {l: {0x3B: {c: [8214]}, 0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8739]}}}}}}}, 0x4C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [124]}}}}}}}}}, 0x53: {l: {0x65: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10072]}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8768]}}}}}}}}}}}}}}}}}}}}}, 0x79: {l: {0x54: {l: {0x68: {l: {0x69: {l: {0x6E: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8202]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120089]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120141]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119985]}}}}}}}, 0x76: {l: {0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8874]}}}}}}}}}}}}}, - 0x57: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [372]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8896]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120090]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120142]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119986]}}}}}}}}}, - 0x77: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [373]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10847]}}}}}}}, 0x67: {l: {0x65: {l: {0x3B: {c: [8743]}, 0x71: {l: {0x3B: {c: [8793]}}}}}}}}}, 0x69: {l: {0x65: {l: {0x72: {l: {0x70: {l: {0x3B: {c: [8472]}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120116]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120168]}}}}}}}, 0x70: {l: {0x3B: {c: [8472]}}}, 0x72: {l: {0x3B: {c: [8768]}, 0x65: {l: {0x61: {l: {0x74: {l: {0x68: {l: {0x3B: {c: [8768]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120012]}}}}}}}}}, - 0x78: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8898]}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [9711]}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8899]}}}}}}}, 0x64: {l: {0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9661]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120117]}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10231]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10234]}}}}}}}}}, 0x69: {l: {0x3B: {c: [958]}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10229]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10232]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10236]}}}}}}}, 0x6E: {l: {0x69: {l: {0x73: {l: {0x3B: {c: [8955]}}}}}}}, 0x6F: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10752]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120169]}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10753]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [10754]}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10230]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10233]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120013]}}}}}, 0x71: {l: {0x63: {l: {0x75: {l: {0x70: {l: {0x3B: {c: [10758]}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10756]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9651]}}}}}}}}}, 0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8897]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8896]}}}}}}}}}}}}}, - 0x58: {l: {0x66: {l: {0x72: {l: {0x3B: {c: [120091]}}}}}, 0x69: {l: {0x3B: {c: [926]}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120143]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119987]}}}}}}}}}, - 0x59: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [221]}}, c: [221]}}}}}}}}}, 0x41: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1071]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [374]}}}}}}}, 0x79: {l: {0x3B: {c: [1067]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120092]}}}}}, 0x49: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1031]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120144]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119988]}}}}}}}, 0x55: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1070]}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [376]}}}}}}}}}, - 0x79: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [253]}}, c: [253]}}}}}, 0x79: {l: {0x3B: {c: [1103]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [375]}}}}}}}, 0x79: {l: {0x3B: {c: [1099]}}}}}, 0x65: {l: {0x6E: {l: {0x3B: {c: [165]}}, c: [165]}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120118]}}}}}, 0x69: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1111]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120170]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120014]}}}}}}}, 0x75: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1102]}}}}}, 0x6D: {l: {0x6C: {l: {0x3B: {c: [255]}}, c: [255]}}}}}}}, - 0x5A: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [377]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [381]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1047]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [379]}}}}}}}, 0x65: {l: {0x72: {l: {0x6F: {l: {0x57: {l: {0x69: {l: {0x64: {l: {0x74: {l: {0x68: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [918]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8488]}}}}}, 0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1046]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [8484]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119989]}}}}}}}}}, - 0x7A: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [378]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [382]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1079]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [380]}}}}}}}, 0x65: {l: {0x65: {l: {0x74: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8488]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [950]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120119]}}}}}, 0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1078]}}}}}}}, 0x69: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8669]}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120171]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120015]}}}}}}}, 0x77: {l: {0x6A: {l: {0x3B: {c: [8205]}}}, 0x6E: {l: {0x6A: {l: {0x3B: {c: [8204]}}}}}}}}} +'use strict'; + +//NOTE: this file contains auto generated trie structure that is used for named entity references consumption +//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tokenizing-character-references and +//http://www.whatwg.org/specs/web-apps/current-work/multipage/named-character-references.html#named-character-references) +module.exports = { + 0x41: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [193]}}, c: [193]}}}}}}}}}, 0x62: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [258]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [194]}}, c: [194]}}}}}, 0x79: {l: {0x3B: {c: [1040]}}}}}, 0x45: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [198]}}, c: [198]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120068]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [192]}}, c: [192]}}}}}}}}}, 0x6C: {l: {0x70: {l: {0x68: {l: {0x61: {l: {0x3B: {c: [913]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [256]}}}}}}}}}, 0x4D: {l: {0x50: {l: {0x3B: {c: [38]}}, c: [38]}}}, 0x6E: {l: {0x64: {l: {0x3B: {c: [10835]}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [260]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120120]}}}}}}}, 0x70: {l: {0x70: {l: {0x6C: {l: {0x79: {l: {0x46: {l: {0x75: {l: {0x6E: {l: {0x63: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8289]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [197]}}, c: [197]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119964]}}}}}, 0x73: {l: {0x69: {l: {0x67: {l: {0x6E: {l: {0x3B: {c: [8788]}}}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [195]}}, c: [195]}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [196]}}, c: [196]}}}}}}}, + 0x61: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [225]}}, c: [225]}}}}}}}}}, 0x62: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [259]}}}}}}}}}}}, 0x63: {l: {0x3B: {c: [8766]}, 0x64: {l: {0x3B: {c: [8767]}}}, 0x45: {l: {0x3B: {c: [8766, 819]}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [226]}}, c: [226]}}}}}, 0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [180]}}, c: [180]}}}}}, 0x79: {l: {0x3B: {c: [1072]}}}}}, 0x65: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [230]}}, c: [230]}}}}}}}, 0x66: {l: {0x3B: {c: [8289]}, 0x72: {l: {0x3B: {c: [120094]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [224]}}, c: [224]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x73: {l: {0x79: {l: {0x6D: {l: {0x3B: {c: [8501]}}}}}}}}}, 0x70: {l: {0x68: {l: {0x3B: {c: [8501]}}}}}}}, 0x70: {l: {0x68: {l: {0x61: {l: {0x3B: {c: [945]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [257]}}}}}, 0x6C: {l: {0x67: {l: {0x3B: {c: [10815]}}}}}}}, 0x70: {l: {0x3B: {c: [38]}}, c: [38]}}}, 0x6E: {l: {0x64: {l: {0x61: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [10837]}}}}}}}, 0x3B: {c: [8743]}, 0x64: {l: {0x3B: {c: [10844]}}}, 0x73: {l: {0x6C: {l: {0x6F: {l: {0x70: {l: {0x65: {l: {0x3B: {c: [10840]}}}}}}}}}}}, 0x76: {l: {0x3B: {c: [10842]}}}}}, 0x67: {l: {0x3B: {c: [8736]}, 0x65: {l: {0x3B: {c: [10660]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [8736]}}}}}, 0x6D: {l: {0x73: {l: {0x64: {l: {0x61: {l: {0x61: {l: {0x3B: {c: [10664]}}}, 0x62: {l: {0x3B: {c: [10665]}}}, 0x63: {l: {0x3B: {c: [10666]}}}, 0x64: {l: {0x3B: {c: [10667]}}}, 0x65: {l: {0x3B: {c: [10668]}}}, 0x66: {l: {0x3B: {c: [10669]}}}, 0x67: {l: {0x3B: {c: [10670]}}}, 0x68: {l: {0x3B: {c: [10671]}}}}}, 0x3B: {c: [8737]}}}}}}}, 0x72: {l: {0x74: {l: {0x3B: {c: [8735]}, 0x76: {l: {0x62: {l: {0x3B: {c: [8894]}, 0x64: {l: {0x3B: {c: [10653]}}}}}}}}}}}, 0x73: {l: {0x70: {l: {0x68: {l: {0x3B: {c: [8738]}}}}}, 0x74: {l: {0x3B: {c: [197]}}}}}, 0x7A: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [9084]}}}}}}}}}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [261]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120146]}}}}}}}, 0x70: {l: {0x61: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10863]}}}}}}}}}, 0x3B: {c: [8776]}, 0x45: {l: {0x3B: {c: [10864]}}}, 0x65: {l: {0x3B: {c: [8778]}}}, 0x69: {l: {0x64: {l: {0x3B: {c: [8779]}}}}}, 0x6F: {l: {0x73: {l: {0x3B: {c: [39]}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [8776]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8778]}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [229]}}, c: [229]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119990]}}}}}, 0x74: {l: {0x3B: {c: [42]}}}, 0x79: {l: {0x6D: {l: {0x70: {l: {0x3B: {c: [8776]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8781]}}}}}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [227]}}, c: [227]}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [228]}}, c: [228]}}}}}, 0x77: {l: {0x63: {l: {0x6F: {l: {0x6E: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8755]}}}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10769]}}}}}}}}}}}, + 0x62: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x63: {l: {0x6F: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8780]}}}}}}}}}, 0x65: {l: {0x70: {l: {0x73: {l: {0x69: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [1014]}}}}}}}}}}}}}}}, 0x70: {l: {0x72: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8245]}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8765]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8909]}}}}}}}}}}}}}}}, 0x72: {l: {0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8893]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [8965]}, 0x67: {l: {0x65: {l: {0x3B: {c: [8965]}}}}}}}}}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [9141]}, 0x74: {l: {0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [9142]}}}}}}}}}}}}}}}, 0x63: {l: {0x6F: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8780]}}}}}}}, 0x79: {l: {0x3B: {c: [1073]}}}}}, 0x64: {l: {0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8222]}}}}}}}}}, 0x65: {l: {0x63: {l: {0x61: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8757]}, 0x65: {l: {0x3B: {c: [8757]}}}}}}}}}}}, 0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10672]}}}}}}}}}}}, 0x70: {l: {0x73: {l: {0x69: {l: {0x3B: {c: [1014]}}}}}}}, 0x72: {l: {0x6E: {l: {0x6F: {l: {0x75: {l: {0x3B: {c: [8492]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [946]}}}, 0x68: {l: {0x3B: {c: [8502]}}}, 0x77: {l: {0x65: {l: {0x65: {l: {0x6E: {l: {0x3B: {c: [8812]}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120095]}}}}}, 0x69: {l: {0x67: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8898]}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [9711]}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8899]}}}}}}}, 0x6F: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10752]}}}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10753]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10754]}}}}}}}}}}}}}, 0x73: {l: {0x71: {l: {0x63: {l: {0x75: {l: {0x70: {l: {0x3B: {c: [10758]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9733]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [9661]}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [9651]}}}}}}}}}}}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10756]}}}}}}}}}}}, 0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8897]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8896]}}}}}}}}}}}}}}}, 0x6B: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10509]}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x6C: {l: {0x6F: {l: {0x7A: {l: {0x65: {l: {0x6E: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [10731]}}}}}}}}}}}}}}}, 0x73: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9642]}}}}}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [9652]}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [9662]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [9666]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [9656]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6E: {l: {0x6B: {l: {0x3B: {c: [9251]}}}}}}}, 0x6B: {l: {0x31: {l: {0x32: {l: {0x3B: {c: [9618]}}}, 0x34: {l: {0x3B: {c: [9617]}}}}}, 0x33: {l: {0x34: {l: {0x3B: {c: [9619]}}}}}}}, 0x6F: {l: {0x63: {l: {0x6B: {l: {0x3B: {c: [9608]}}}}}}}}}, 0x6E: {l: {0x65: {l: {0x3B: {c: [61, 8421]}, 0x71: {l: {0x75: {l: {0x69: {l: {0x76: {l: {0x3B: {c: [8801, 8421]}}}}}}}}}}}, 0x6F: {l: {0x74: {l: {0x3B: {c: [8976]}}}}}}}, 0x4E: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10989]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120147]}}}}}, 0x74: {l: {0x3B: {c: [8869]}, 0x74: {l: {0x6F: {l: {0x6D: {l: {0x3B: {c: [8869]}}}}}}}}}, 0x77: {l: {0x74: {l: {0x69: {l: {0x65: {l: {0x3B: {c: [8904]}}}}}}}}}, 0x78: {l: {0x62: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10697]}}}}}}}, 0x64: {l: {0x6C: {l: {0x3B: {c: [9488]}}}, 0x4C: {l: {0x3B: {c: [9557]}}}, 0x72: {l: {0x3B: {c: [9484]}}}, 0x52: {l: {0x3B: {c: [9554]}}}}}, 0x44: {l: {0x6C: {l: {0x3B: {c: [9558]}}}, 0x4C: {l: {0x3B: {c: [9559]}}}, 0x72: {l: {0x3B: {c: [9555]}}}, 0x52: {l: {0x3B: {c: [9556]}}}}}, 0x68: {l: {0x3B: {c: [9472]}, 0x64: {l: {0x3B: {c: [9516]}}}, 0x44: {l: {0x3B: {c: [9573]}}}, 0x75: {l: {0x3B: {c: [9524]}}}, 0x55: {l: {0x3B: {c: [9576]}}}}}, 0x48: {l: {0x3B: {c: [9552]}, 0x64: {l: {0x3B: {c: [9572]}}}, 0x44: {l: {0x3B: {c: [9574]}}}, 0x75: {l: {0x3B: {c: [9575]}}}, 0x55: {l: {0x3B: {c: [9577]}}}}}, 0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8863]}}}}}}}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8862]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8864]}}}}}}}}}}}, 0x75: {l: {0x6C: {l: {0x3B: {c: [9496]}}}, 0x4C: {l: {0x3B: {c: [9563]}}}, 0x72: {l: {0x3B: {c: [9492]}}}, 0x52: {l: {0x3B: {c: [9560]}}}}}, 0x55: {l: {0x6C: {l: {0x3B: {c: [9564]}}}, 0x4C: {l: {0x3B: {c: [9565]}}}, 0x72: {l: {0x3B: {c: [9561]}}}, 0x52: {l: {0x3B: {c: [9562]}}}}}, 0x76: {l: {0x3B: {c: [9474]}, 0x68: {l: {0x3B: {c: [9532]}}}, 0x48: {l: {0x3B: {c: [9578]}}}, 0x6C: {l: {0x3B: {c: [9508]}}}, 0x4C: {l: {0x3B: {c: [9569]}}}, 0x72: {l: {0x3B: {c: [9500]}}}, 0x52: {l: {0x3B: {c: [9566]}}}}}, 0x56: {l: {0x3B: {c: [9553]}, 0x68: {l: {0x3B: {c: [9579]}}}, 0x48: {l: {0x3B: {c: [9580]}}}, 0x6C: {l: {0x3B: {c: [9570]}}}, 0x4C: {l: {0x3B: {c: [9571]}}}, 0x72: {l: {0x3B: {c: [9567]}}}, 0x52: {l: {0x3B: {c: [9568]}}}}}}}}}, 0x70: {l: {0x72: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8245]}}}}}}}}}}}, 0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [728]}}}}}}}, 0x76: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [166]}}, c: [166]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119991]}}}}}, 0x65: {l: {0x6D: {l: {0x69: {l: {0x3B: {c: [8271]}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8765]}, 0x65: {l: {0x3B: {c: [8909]}}}}}}}, 0x6F: {l: {0x6C: {l: {0x62: {l: {0x3B: {c: [10693]}}}, 0x3B: {c: [92]}, 0x68: {l: {0x73: {l: {0x75: {l: {0x62: {l: {0x3B: {c: [10184]}}}}}}}}}}}}}}}, 0x75: {l: {0x6C: {l: {0x6C: {l: {0x3B: {c: [8226]}, 0x65: {l: {0x74: {l: {0x3B: {c: [8226]}}}}}}}}}, 0x6D: {l: {0x70: {l: {0x3B: {c: [8782]}, 0x45: {l: {0x3B: {c: [10926]}}}, 0x65: {l: {0x3B: {c: [8783]}, 0x71: {l: {0x3B: {c: [8783]}}}}}}}}}}}}}, + 0x42: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x73: {l: {0x6C: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8726]}}}}}}}}}}}}}}}, 0x72: {l: {0x76: {l: {0x3B: {c: [10983]}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [8966]}}}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1041]}}}}}, 0x65: {l: {0x63: {l: {0x61: {l: {0x75: {l: {0x73: {l: {0x65: {l: {0x3B: {c: [8757]}}}}}}}}}}}, 0x72: {l: {0x6E: {l: {0x6F: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x69: {l: {0x73: {l: {0x3B: {c: [8492]}}}}}}}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [914]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120069]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120121]}}}}}}}, 0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [728]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8492]}}}}}}}, 0x75: {l: {0x6D: {l: {0x70: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8782]}}}}}}}}}}}}}, + 0x43: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [262]}}}}}}}}}, 0x70: {l: {0x3B: {c: [8914]}, 0x69: {l: {0x74: {l: {0x61: {l: {0x6C: {l: {0x44: {l: {0x69: {l: {0x66: {l: {0x66: {l: {0x65: {l: {0x72: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x44: {l: {0x3B: {c: [8517]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x79: {l: {0x6C: {l: {0x65: {l: {0x79: {l: {0x73: {l: {0x3B: {c: [8493]}}}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [268]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [199]}}, c: [199]}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [264]}}}}}}}, 0x6F: {l: {0x6E: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8752]}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [266]}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x6C: {l: {0x61: {l: {0x3B: {c: [184]}}}}}}}}}}}, 0x6E: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [183]}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8493]}}}}}, 0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1063]}}}}}}}, 0x68: {l: {0x69: {l: {0x3B: {c: [935]}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x6C: {l: {0x65: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8857]}}}}}}}, 0x4D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8854]}}}}}}}}}}}, 0x50: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8853]}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8855]}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x6F: {l: {0x63: {l: {0x6B: {l: {0x77: {l: {0x69: {l: {0x73: {l: {0x65: {l: {0x43: {l: {0x6F: {l: {0x6E: {l: {0x74: {l: {0x6F: {l: {0x75: {l: {0x72: {l: {0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8754]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x65: {l: {0x43: {l: {0x75: {l: {0x72: {l: {0x6C: {l: {0x79: {l: {0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x51: {l: {0x75: {l: {0x6F: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [8221]}}}}}}}}}}}}}}}}}}}}}}}, 0x51: {l: {0x75: {l: {0x6F: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [8217]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8759]}, 0x65: {l: {0x3B: {c: [10868]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x72: {l: {0x75: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8801]}}}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8751]}}}}}}}, 0x74: {l: {0x6F: {l: {0x75: {l: {0x72: {l: {0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8750]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [8450]}}}, 0x72: {l: {0x6F: {l: {0x64: {l: {0x75: {l: {0x63: {l: {0x74: {l: {0x3B: {c: [8720]}}}}}}}}}}}}}}}, 0x75: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x43: {l: {0x6C: {l: {0x6F: {l: {0x63: {l: {0x6B: {l: {0x77: {l: {0x69: {l: {0x73: {l: {0x65: {l: {0x43: {l: {0x6F: {l: {0x6E: {l: {0x74: {l: {0x6F: {l: {0x75: {l: {0x72: {l: {0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8755]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4F: {l: {0x50: {l: {0x59: {l: {0x3B: {c: [169]}}, c: [169]}}}}}, 0x72: {l: {0x6F: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10799]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119966]}}}}}}}, 0x75: {l: {0x70: {l: {0x43: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8781]}}}}}}}, 0x3B: {c: [8915]}}}}}}}, + 0x63: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [263]}}}}}}}}}, 0x70: {l: {0x61: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [10820]}}}}}}}, 0x62: {l: {0x72: {l: {0x63: {l: {0x75: {l: {0x70: {l: {0x3B: {c: [10825]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10827]}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [10823]}}}}}}}, 0x3B: {c: [8745]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10816]}}}}}}}, 0x73: {l: {0x3B: {c: [8745, 65024]}}}}}, 0x72: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8257]}}}}}, 0x6F: {l: {0x6E: {l: {0x3B: {c: [711]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x73: {l: {0x3B: {c: [10829]}}}}}, 0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [269]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [231]}}, c: [231]}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [265]}}}}}}}, 0x75: {l: {0x70: {l: {0x73: {l: {0x3B: {c: [10828]}, 0x73: {l: {0x6D: {l: {0x3B: {c: [10832]}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [267]}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [184]}}, c: [184]}}}}}, 0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10674]}}}}}}}}}}}, 0x6E: {l: {0x74: {l: {0x3B: {c: [162]}, 0x65: {l: {0x72: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [183]}}}}}}}}}}}}, c: [162]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120096]}}}}}, 0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1095]}}}}}, 0x65: {l: {0x63: {l: {0x6B: {l: {0x3B: {c: [10003]}, 0x6D: {l: {0x61: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10003]}}}}}}}}}}}}}}}, 0x69: {l: {0x3B: {c: [967]}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [710]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8791]}}}}}, 0x6C: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8634]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8635]}}}}}}}}}}}}}}}}}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8859]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [8858]}}}}}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8861]}}}}}}}}}, 0x52: {l: {0x3B: {c: [174]}}}, 0x53: {l: {0x3B: {c: [9416]}}}}}}}}}}}, 0x3B: {c: [9675]}, 0x45: {l: {0x3B: {c: [10691]}}}, 0x65: {l: {0x3B: {c: [8791]}}}, 0x66: {l: {0x6E: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10768]}}}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [10991]}}}}}}}, 0x73: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10690]}}}}}}}}}}}}}, 0x6C: {l: {0x75: {l: {0x62: {l: {0x73: {l: {0x3B: {c: [9827]}, 0x75: {l: {0x69: {l: {0x74: {l: {0x3B: {c: [9827]}}}}}}}}}}}}}}}, 0x6F: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [58]}, 0x65: {l: {0x3B: {c: [8788]}, 0x71: {l: {0x3B: {c: [8788]}}}}}}}}}}}, 0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [44]}, 0x74: {l: {0x3B: {c: [64]}}}}}}}, 0x70: {l: {0x3B: {c: [8705]}, 0x66: {l: {0x6E: {l: {0x3B: {c: [8728]}}}}}, 0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8705]}}}}}}}}}, 0x78: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8450]}}}}}}}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [8773]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10861]}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8750]}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120148]}}}, 0x72: {l: {0x6F: {l: {0x64: {l: {0x3B: {c: [8720]}}}}}}}, 0x79: {l: {0x3B: {c: [169]}, 0x73: {l: {0x72: {l: {0x3B: {c: [8471]}}}}}}, c: [169]}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8629]}}}}}}}, 0x6F: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10007]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119992]}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [10959]}, 0x65: {l: {0x3B: {c: [10961]}}}}}, 0x70: {l: {0x3B: {c: [10960]}, 0x65: {l: {0x3B: {c: [10962]}}}}}}}}}, 0x74: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8943]}}}}}}}}}, 0x75: {l: {0x64: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6C: {l: {0x3B: {c: [10552]}}}, 0x72: {l: {0x3B: {c: [10549]}}}}}}}}}}}, 0x65: {l: {0x70: {l: {0x72: {l: {0x3B: {c: [8926]}}}}}, 0x73: {l: {0x63: {l: {0x3B: {c: [8927]}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8630]}, 0x70: {l: {0x3B: {c: [10557]}}}}}}}}}}}, 0x70: {l: {0x62: {l: {0x72: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10824]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10822]}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [10826]}}}}}}}, 0x3B: {c: [8746]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8845]}}}}}}}, 0x6F: {l: {0x72: {l: {0x3B: {c: [10821]}}}}}, 0x73: {l: {0x3B: {c: [8746, 65024]}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8631]}, 0x6D: {l: {0x3B: {c: [10556]}}}}}}}}}, 0x6C: {l: {0x79: {l: {0x65: {l: {0x71: {l: {0x70: {l: {0x72: {l: {0x65: {l: {0x63: {l: {0x3B: {c: [8926]}}}}}}}}}, 0x73: {l: {0x75: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [8927]}}}}}}}}}}}}}, 0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8910]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8911]}}}}}}}}}}}}}}}, 0x72: {l: {0x65: {l: {0x6E: {l: {0x3B: {c: [164]}}, c: [164]}}}}}, 0x76: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8630]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8631]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8910]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [8911]}}}}}}}}}, 0x77: {l: {0x63: {l: {0x6F: {l: {0x6E: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8754]}}}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8753]}}}}}}}}}, 0x79: {l: {0x6C: {l: {0x63: {l: {0x74: {l: {0x79: {l: {0x3B: {c: [9005]}}}}}}}}}}}}}, + 0x64: {l: {0x61: {l: {0x67: {l: {0x67: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8224]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x74: {l: {0x68: {l: {0x3B: {c: [8504]}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8595]}}}}}, 0x73: {l: {0x68: {l: {0x3B: {c: [8208]}, 0x76: {l: {0x3B: {c: [8867]}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8659]}}}}}}}, 0x62: {l: {0x6B: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10511]}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [733]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [271]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1076]}}}}}, 0x64: {l: {0x61: {l: {0x67: {l: {0x67: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8225]}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8650]}}}}}}}, 0x3B: {c: [8518]}, 0x6F: {l: {0x74: {l: {0x73: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [10871]}}}}}}}}}}}}}, 0x65: {l: {0x67: {l: {0x3B: {c: [176]}}, c: [176]}, 0x6C: {l: {0x74: {l: {0x61: {l: {0x3B: {c: [948]}}}}}}}, 0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10673]}}}}}}}}}}}}}, 0x66: {l: {0x69: {l: {0x73: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [10623]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120097]}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10597]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x6C: {l: {0x3B: {c: [8643]}}}, 0x72: {l: {0x3B: {c: [8642]}}}}}}}}}, 0x69: {l: {0x61: {l: {0x6D: {l: {0x3B: {c: [8900]}, 0x6F: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [8900]}, 0x73: {l: {0x75: {l: {0x69: {l: {0x74: {l: {0x3B: {c: [9830]}}}}}}}}}}}}}}}, 0x73: {l: {0x3B: {c: [9830]}}}}}}}, 0x65: {l: {0x3B: {c: [168]}}}, 0x67: {l: {0x61: {l: {0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [989]}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6E: {l: {0x3B: {c: [8946]}}}}}}}, 0x76: {l: {0x3B: {c: [247]}, 0x69: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [247]}, 0x6F: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8903]}}}}}}}}}}}}}}}}, c: [247]}}}}}, 0x6F: {l: {0x6E: {l: {0x78: {l: {0x3B: {c: [8903]}}}}}}}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1106]}}}}}}}, 0x6C: {l: {0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [8990]}}}}}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8973]}}}}}}}}}}}, 0x6F: {l: {0x6C: {l: {0x6C: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [36]}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120149]}}}}}, 0x74: {l: {0x3B: {c: [729]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8784]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8785]}}}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8760]}}}}}}}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8724]}}}}}}}}}, 0x73: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [8865]}}}}}}}}}}}}}}}, 0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x77: {l: {0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8966]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8595]}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8650]}}}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8643]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8642]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x62: {l: {0x6B: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10512]}}}}}}}}}}}}}, 0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [8991]}}}}}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8972]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119993]}}}, 0x79: {l: {0x3B: {c: [1109]}}}}}, 0x6F: {l: {0x6C: {l: {0x3B: {c: [10742]}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [273]}}}}}}}}}}}, 0x74: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8945]}}}}}}}, 0x72: {l: {0x69: {l: {0x3B: {c: [9663]}, 0x66: {l: {0x3B: {c: [9662]}}}}}}}}}, 0x75: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8693]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10607]}}}}}}}}}, 0x77: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [10662]}}}}}}}}}}}}}, 0x7A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1119]}}}}}, 0x69: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10239]}}}}}}}}}}}}}}}}}, + 0x44: {l: {0x61: {l: {0x67: {l: {0x67: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8225]}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8609]}}}}}, 0x73: {l: {0x68: {l: {0x76: {l: {0x3B: {c: [10980]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [270]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1044]}}}}}, 0x44: {l: {0x3B: {c: [8517]}, 0x6F: {l: {0x74: {l: {0x72: {l: {0x61: {l: {0x68: {l: {0x64: {l: {0x3B: {c: [10513]}}}}}}}}}}}}}}}, 0x65: {l: {0x6C: {l: {0x3B: {c: [8711]}, 0x74: {l: {0x61: {l: {0x3B: {c: [916]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120071]}}}}}, 0x69: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x69: {l: {0x74: {l: {0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x41: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [180]}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [729]}}}, 0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x41: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [733]}}}}}}}}}}}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [96]}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [732]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6D: {l: {0x6F: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [8900]}}}}}}}}}}}, 0x66: {l: {0x66: {l: {0x65: {l: {0x72: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x44: {l: {0x3B: {c: [8518]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1026]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120123]}}}}}, 0x74: {l: {0x3B: {c: [168]}, 0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8412]}}}}}}}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8784]}}}}}}}}}}}}}, 0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x43: {l: {0x6F: {l: {0x6E: {l: {0x74: {l: {0x6F: {l: {0x75: {l: {0x72: {l: {0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8751]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [168]}}}, 0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8659]}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8656]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8660]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [10980]}}}}}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x67: {l: {0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10232]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10234]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10233]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8658]}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8872]}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8657]}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8661]}}}}}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8741]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10515]}}}}}}}, 0x3B: {c: [8595]}, 0x55: {l: {0x70: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8693]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8659]}}}}}}}}}}}, 0x42: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [785]}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10576]}}}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10590]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10582]}}}}}}}, 0x3B: {c: [8637]}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10591]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10583]}}}}}}}, 0x3B: {c: [8641]}}}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8615]}}}}}}}}}}}, 0x3B: {c: [8868]}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119967]}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [272]}}}}}}}}}}}, 0x53: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1029]}}}}}}}, 0x5A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1039]}}}}}}}}}, + 0x45: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [201]}}, c: [201]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [282]}}}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [202]}}, c: [202]}}}}}, 0x79: {l: {0x3B: {c: [1069]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [278]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120072]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [200]}}, c: [200]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8712]}}}}}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [274]}}}}}}}, 0x70: {l: {0x74: {l: {0x79: {l: {0x53: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9723]}}}}}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x79: {l: {0x53: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9643]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4E: {l: {0x47: {l: {0x3B: {c: [330]}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [280]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120124]}}}}}}}, 0x70: {l: {0x73: {l: {0x69: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [917]}}}}}}}}}}}}}, 0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10869]}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8770]}}}}}}}}}}}}}}}, 0x69: {l: {0x6C: {l: {0x69: {l: {0x62: {l: {0x72: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [8652]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8496]}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [10867]}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [919]}}}}}, 0x54: {l: {0x48: {l: {0x3B: {c: [208]}}, c: [208]}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [203]}}, c: [203]}}}}}, 0x78: {l: {0x69: {l: {0x73: {l: {0x74: {l: {0x73: {l: {0x3B: {c: [8707]}}}}}}}}}, 0x70: {l: {0x6F: {l: {0x6E: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x45: {l: {0x3B: {c: [8519]}}}}}}}}}}}}}}}}}}}}}}}}}, + 0x65: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [233]}}, c: [233]}}}}}}}, 0x73: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [10862]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [283]}}}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [234]}}, c: [234]}, 0x3B: {c: [8790]}}}}}, 0x6F: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8789]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1101]}}}}}, 0x44: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10871]}}}}}}}, 0x6F: {l: {0x74: {l: {0x3B: {c: [8785]}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [279]}}}}}}}, 0x65: {l: {0x3B: {c: [8519]}}}, 0x66: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8786]}}}}}}}, 0x72: {l: {0x3B: {c: [120098]}}}}}, 0x67: {l: {0x3B: {c: [10906]}, 0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [232]}}, c: [232]}}}}}}}, 0x73: {l: {0x3B: {c: [10902]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10904]}}}}}}}}}}}, 0x6C: {l: {0x3B: {c: [10905]}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x3B: {c: [9191]}}}}}}}}}}}}}, 0x6C: {l: {0x3B: {c: [8467]}}}, 0x73: {l: {0x3B: {c: [10901]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10903]}}}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [275]}}}}}}}, 0x70: {l: {0x74: {l: {0x79: {l: {0x3B: {c: [8709]}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8709]}}}}}}}, 0x76: {l: {0x3B: {c: [8709]}}}}}}}}}, 0x73: {l: {0x70: {l: {0x31: {l: {0x33: {l: {0x3B: {c: [8196]}}}, 0x34: {l: {0x3B: {c: [8197]}}}}}, 0x3B: {c: [8195]}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [331]}}}, 0x73: {l: {0x70: {l: {0x3B: {c: [8194]}}}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [281]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120150]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8917]}, 0x73: {l: {0x6C: {l: {0x3B: {c: [10723]}}}}}}}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10865]}}}}}}}, 0x73: {l: {0x69: {l: {0x3B: {c: [949]}, 0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [949]}}}}}}}, 0x76: {l: {0x3B: {c: [1013]}}}}}}}}}, 0x71: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [8790]}}}}}}}, 0x6F: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8789]}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8770]}}}}}, 0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x67: {l: {0x74: {l: {0x72: {l: {0x3B: {c: [10902]}}}}}}}, 0x6C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10901]}}}}}}}}}}}}}}}}}}}, 0x75: {l: {0x61: {l: {0x6C: {l: {0x73: {l: {0x3B: {c: [61]}}}}}}}, 0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8799]}}}}}}}, 0x69: {l: {0x76: {l: {0x3B: {c: [8801]}, 0x44: {l: {0x44: {l: {0x3B: {c: [10872]}}}}}}}}}}}, 0x76: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x73: {l: {0x6C: {l: {0x3B: {c: [10725]}}}}}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10609]}}}}}}}, 0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8787]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8495]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8784]}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8770]}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [951]}}}, 0x68: {l: {0x3B: {c: [240]}}, c: [240]}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [235]}}, c: [235]}}}, 0x72: {l: {0x6F: {l: {0x3B: {c: [8364]}}}}}}}, 0x78: {l: {0x63: {l: {0x6C: {l: {0x3B: {c: [33]}}}}}, 0x69: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8707]}}}}}}}, 0x70: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x61: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8496]}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [8519]}}}}}}}}}}}}}}}}}}}}}}}}}, + 0x66: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x73: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8786]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1092]}}}}}, 0x65: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [9792]}}}}}}}}}}}, 0x66: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64259]}}}}}}}}}, 0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64256]}}}}}, 0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64260]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120099]}}}}}, 0x69: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64257]}}}}}}}}}, 0x6A: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [102, 106]}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x74: {l: {0x3B: {c: [9837]}}}}}, 0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [64258]}}}}}}}, 0x74: {l: {0x6E: {l: {0x73: {l: {0x3B: {c: [9649]}}}}}}}}}, 0x6E: {l: {0x6F: {l: {0x66: {l: {0x3B: {c: [402]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120151]}}}}}, 0x72: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x3B: {c: [8704]}}}}}}}, 0x6B: {l: {0x3B: {c: [8916]}, 0x76: {l: {0x3B: {c: [10969]}}}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10765]}}}}}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x31: {l: {0x32: {l: {0x3B: {c: [189]}}, c: [189]}, 0x33: {l: {0x3B: {c: [8531]}}}, 0x34: {l: {0x3B: {c: [188]}}, c: [188]}, 0x35: {l: {0x3B: {c: [8533]}}}, 0x36: {l: {0x3B: {c: [8537]}}}, 0x38: {l: {0x3B: {c: [8539]}}}}}, 0x32: {l: {0x33: {l: {0x3B: {c: [8532]}}}, 0x35: {l: {0x3B: {c: [8534]}}}}}, 0x33: {l: {0x34: {l: {0x3B: {c: [190]}}, c: [190]}, 0x35: {l: {0x3B: {c: [8535]}}}, 0x38: {l: {0x3B: {c: [8540]}}}}}, 0x34: {l: {0x35: {l: {0x3B: {c: [8536]}}}}}, 0x35: {l: {0x36: {l: {0x3B: {c: [8538]}}}, 0x38: {l: {0x3B: {c: [8541]}}}}}, 0x37: {l: {0x38: {l: {0x3B: {c: [8542]}}}}}}}, 0x73: {l: {0x6C: {l: {0x3B: {c: [8260]}}}}}}}, 0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8994]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119995]}}}}}}}}}, + 0x46: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1060]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120073]}}}}}, 0x69: {l: {0x6C: {l: {0x6C: {l: {0x65: {l: {0x64: {l: {0x53: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9724]}}}}}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x79: {l: {0x53: {l: {0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9642]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120125]}}}}}, 0x72: {l: {0x41: {l: {0x6C: {l: {0x6C: {l: {0x3B: {c: [8704]}}}}}}}}}, 0x75: {l: {0x72: {l: {0x69: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8497]}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8497]}}}}}}}}}, + 0x67: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [501]}}}}}}}}}, 0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [947]}, 0x64: {l: {0x3B: {c: [989]}}}}}}}}}, 0x70: {l: {0x3B: {c: [10886]}}}}}, 0x62: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [287]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [285]}}}}}}}, 0x79: {l: {0x3B: {c: [1075]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [289]}}}}}}}, 0x65: {l: {0x3B: {c: [8805]}, 0x6C: {l: {0x3B: {c: [8923]}}}, 0x71: {l: {0x3B: {c: [8805]}, 0x71: {l: {0x3B: {c: [8807]}}}, 0x73: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10878]}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [10921]}}}}}, 0x3B: {c: [10878]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10880]}, 0x6F: {l: {0x3B: {c: [10882]}, 0x6C: {l: {0x3B: {c: [10884]}}}}}}}}}}}, 0x6C: {l: {0x3B: {c: [8923, 65024]}, 0x65: {l: {0x73: {l: {0x3B: {c: [10900]}}}}}}}}}}}, 0x45: {l: {0x3B: {c: [8807]}, 0x6C: {l: {0x3B: {c: [10892]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120100]}}}}}, 0x67: {l: {0x3B: {c: [8811]}, 0x67: {l: {0x3B: {c: [8921]}}}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8503]}}}}}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1107]}}}}}}}, 0x6C: {l: {0x61: {l: {0x3B: {c: [10917]}}}, 0x3B: {c: [8823]}, 0x45: {l: {0x3B: {c: [10898]}}}, 0x6A: {l: {0x3B: {c: [10916]}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10890]}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10890]}}}}}}}}}}}}}, 0x65: {l: {0x3B: {c: [10888]}, 0x71: {l: {0x3B: {c: [10888]}, 0x71: {l: {0x3B: {c: [8809]}}}}}}}, 0x45: {l: {0x3B: {c: [8809]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8935]}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120152]}}}}}}}, 0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [96]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8458]}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8819]}, 0x65: {l: {0x3B: {c: [10894]}}}, 0x6C: {l: {0x3B: {c: [10896]}}}}}}}}}, 0x74: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [10919]}}}, 0x69: {l: {0x72: {l: {0x3B: {c: [10874]}}}}}}}, 0x3B: {c: [62]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8919]}}}}}}}, 0x6C: {l: {0x50: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10645]}}}}}}}}}, 0x71: {l: {0x75: {l: {0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [10876]}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10886]}}}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [10616]}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8919]}}}}}}}, 0x65: {l: {0x71: {l: {0x6C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8923]}}}}}}}}}, 0x71: {l: {0x6C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10892]}}}}}}}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8823]}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8819]}}}}}}}}}}, c: [62]}, 0x76: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x6E: {l: {0x65: {l: {0x71: {l: {0x71: {l: {0x3B: {c: [8809, 65024]}}}}}}}}}}}}}}}, 0x6E: {l: {0x45: {l: {0x3B: {c: [8809, 65024]}}}}}}}}}, + 0x47: {l: {0x61: {l: {0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [915]}, 0x64: {l: {0x3B: {c: [988]}}}}}}}}}}}, 0x62: {l: {0x72: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [286]}}}}}}}}}}}, 0x63: {l: {0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [290]}}}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [284]}}}}}}}, 0x79: {l: {0x3B: {c: [1043]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [288]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120074]}}}}}, 0x67: {l: {0x3B: {c: [8921]}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1027]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120126]}}}}}}}, 0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8805]}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8923]}}}}}}}}}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8807]}}}}}}}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [10914]}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8823]}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10878]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8819]}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119970]}}}}}}}, 0x54: {l: {0x3B: {c: [62]}}, c: [62]}, 0x74: {l: {0x3B: {c: [8811]}}}}}, + 0x48: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x6B: {l: {0x3B: {c: [711]}}}}}}}, 0x74: {l: {0x3B: {c: [94]}}}}}, 0x41: {l: {0x52: {l: {0x44: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1066]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [292]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8460]}}}}}, 0x69: {l: {0x6C: {l: {0x62: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8459]}}}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [8461]}}}}}, 0x72: {l: {0x69: {l: {0x7A: {l: {0x6F: {l: {0x6E: {l: {0x74: {l: {0x61: {l: {0x6C: {l: {0x4C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [9472]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8459]}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [294]}}}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x70: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x48: {l: {0x75: {l: {0x6D: {l: {0x70: {l: {0x3B: {c: [8782]}}}}}}}}}}}}}}}}}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8783]}}}}}}}}}}}}}}}}}}}, + 0x68: {l: {0x61: {l: {0x69: {l: {0x72: {l: {0x73: {l: {0x70: {l: {0x3B: {c: [8202]}}}}}}}}}, 0x6C: {l: {0x66: {l: {0x3B: {c: [189]}}}}}, 0x6D: {l: {0x69: {l: {0x6C: {l: {0x74: {l: {0x3B: {c: [8459]}}}}}}}}}, 0x72: {l: {0x64: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1098]}}}}}}}, 0x72: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10568]}}}}}}}, 0x3B: {c: [8596]}, 0x77: {l: {0x3B: {c: [8621]}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8660]}}}}}}}, 0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8463]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [293]}}}}}}}}}, 0x65: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x73: {l: {0x3B: {c: [9829]}, 0x75: {l: {0x69: {l: {0x74: {l: {0x3B: {c: [9829]}}}}}}}}}}}}}}}, 0x6C: {l: {0x6C: {l: {0x69: {l: {0x70: {l: {0x3B: {c: [8230]}}}}}}}}}, 0x72: {l: {0x63: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8889]}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120101]}}}}}, 0x6B: {l: {0x73: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10533]}}}}}}}}}}}, 0x77: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10534]}}}}}}}}}}}}}}}, 0x6F: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8703]}}}}}}}, 0x6D: {l: {0x74: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8763]}}}}}}}}}, 0x6F: {l: {0x6B: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8617]}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8618]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120153]}}}}}, 0x72: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8213]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119997]}}}}}, 0x6C: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8463]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [295]}}}}}}}}}}}, 0x79: {l: {0x62: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x3B: {c: [8259]}}}}}}}}}, 0x70: {l: {0x68: {l: {0x65: {l: {0x6E: {l: {0x3B: {c: [8208]}}}}}}}}}}}}}, + 0x49: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [205]}}, c: [205]}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [206]}}, c: [206]}}}}}, 0x79: {l: {0x3B: {c: [1048]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [304]}}}}}}}, 0x45: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1045]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8465]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [204]}}, c: [204]}}}}}}}}}, 0x4A: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [306]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [298]}}}}}, 0x67: {l: {0x69: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x79: {l: {0x49: {l: {0x3B: {c: [8520]}}}}}}}}}}}}}}}}}, 0x3B: {c: [8465]}, 0x70: {l: {0x6C: {l: {0x69: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8658]}}}}}}}}}}}}}, 0x6E: {l: {0x74: {l: {0x3B: {c: [8748]}, 0x65: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8747]}}}}}}}}}, 0x72: {l: {0x73: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8898]}}}}}}}}}}}}}}}}}}}}}, 0x76: {l: {0x69: {l: {0x73: {l: {0x69: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x43: {l: {0x6F: {l: {0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [8291]}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8290]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4F: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1025]}}}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [302]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120128]}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [921]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8464]}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [296]}}}}}}}}}}}, 0x75: {l: {0x6B: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1030]}}}}}}}, 0x6D: {l: {0x6C: {l: {0x3B: {c: [207]}}, c: [207]}}}}}}}, + 0x69: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [237]}}, c: [237]}}}}}}}}}, 0x63: {l: {0x3B: {c: [8291]}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [238]}}, c: [238]}}}}}, 0x79: {l: {0x3B: {c: [1080]}}}}}, 0x65: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1077]}}}}}, 0x78: {l: {0x63: {l: {0x6C: {l: {0x3B: {c: [161]}}, c: [161]}}}}}}}, 0x66: {l: {0x66: {l: {0x3B: {c: [8660]}}}, 0x72: {l: {0x3B: {c: [120102]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [236]}}, c: [236]}}}}}}}}}, 0x69: {l: {0x3B: {c: [8520]}, 0x69: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10764]}}}}}}}, 0x6E: {l: {0x74: {l: {0x3B: {c: [8749]}}}}}}}, 0x6E: {l: {0x66: {l: {0x69: {l: {0x6E: {l: {0x3B: {c: [10716]}}}}}}}}}, 0x6F: {l: {0x74: {l: {0x61: {l: {0x3B: {c: [8489]}}}}}}}}}, 0x6A: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [307]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [299]}}}}}, 0x67: {l: {0x65: {l: {0x3B: {c: [8465]}}}, 0x6C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8464]}}}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x3B: {c: [8465]}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x3B: {c: [305]}}}}}}}, 0x6F: {l: {0x66: {l: {0x3B: {c: [8887]}}}}}, 0x70: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [437]}}}}}}}}}, 0x6E: {l: {0x63: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [8453]}}}}}}}}}, 0x3B: {c: [8712]}, 0x66: {l: {0x69: {l: {0x6E: {l: {0x3B: {c: [8734]}, 0x74: {l: {0x69: {l: {0x65: {l: {0x3B: {c: [10717]}}}}}}}}}}}}}, 0x6F: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [305]}}}}}}}}}, 0x74: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8890]}}}}}}}, 0x3B: {c: [8747]}, 0x65: {l: {0x67: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x3B: {c: [8484]}}}}}}}}}, 0x72: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8890]}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10775]}}}}}}}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x64: {l: {0x3B: {c: [10812]}}}}}}}}}}}}}, 0x6F: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1105]}}}}}, 0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [303]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120154]}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [953]}}}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x64: {l: {0x3B: {c: [10812]}}}}}}}}}, 0x71: {l: {0x75: {l: {0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [191]}}, c: [191]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119998]}}}}}, 0x69: {l: {0x6E: {l: {0x3B: {c: [8712]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8949]}}}}}}}, 0x45: {l: {0x3B: {c: [8953]}}}, 0x73: {l: {0x3B: {c: [8948]}, 0x76: {l: {0x3B: {c: [8947]}}}}}, 0x76: {l: {0x3B: {c: [8712]}}}}}}}}}, 0x74: {l: {0x3B: {c: [8290]}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [297]}}}}}}}}}}}, 0x75: {l: {0x6B: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1110]}}}}}}}, 0x6D: {l: {0x6C: {l: {0x3B: {c: [239]}}, c: [239]}}}}}}}, + 0x4A: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [308]}}}}}}}, 0x79: {l: {0x3B: {c: [1049]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120077]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120129]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119973]}}}}}, 0x65: {l: {0x72: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1032]}}}}}}}}}}}, 0x75: {l: {0x6B: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1028]}}}}}}}}}}}, + 0x6A: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [309]}}}}}}}, 0x79: {l: {0x3B: {c: [1081]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120103]}}}}}, 0x6D: {l: {0x61: {l: {0x74: {l: {0x68: {l: {0x3B: {c: [567]}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120155]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119999]}}}}}, 0x65: {l: {0x72: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1112]}}}}}}}}}}}, 0x75: {l: {0x6B: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1108]}}}}}}}}}}}, + 0x4B: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x61: {l: {0x3B: {c: [922]}}}}}}}}}, 0x63: {l: {0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [310]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1050]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120078]}}}}}, 0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1061]}}}}}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1036]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120130]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119974]}}}}}}}}}, + 0x6B: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x61: {l: {0x3B: {c: [954]}, 0x76: {l: {0x3B: {c: [1008]}}}}}}}}}}}, 0x63: {l: {0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [311]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1082]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120104]}}}}}, 0x67: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x6E: {l: {0x3B: {c: [312]}}}}}}}}}}}, 0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1093]}}}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1116]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120156]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120000]}}}}}}}}}, + 0x6C: {l: {0x41: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8666]}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8656]}}}}}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [10523]}}}}}}}}}}}, 0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [314]}}}}}}}}}, 0x65: {l: {0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10676]}}}}}}}}}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x6E: {l: {0x3B: {c: [8466]}}}}}}}}}, 0x6D: {l: {0x62: {l: {0x64: {l: {0x61: {l: {0x3B: {c: [955]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [10216]}, 0x64: {l: {0x3B: {c: [10641]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [10216]}}}}}}}}}, 0x70: {l: {0x3B: {c: [10885]}}}, 0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [171]}}, c: [171]}}}}}, 0x72: {l: {0x72: {l: {0x62: {l: {0x3B: {c: [8676]}, 0x66: {l: {0x73: {l: {0x3B: {c: [10527]}}}}}}}, 0x3B: {c: [8592]}, 0x66: {l: {0x73: {l: {0x3B: {c: [10525]}}}}}, 0x68: {l: {0x6B: {l: {0x3B: {c: [8617]}}}}}, 0x6C: {l: {0x70: {l: {0x3B: {c: [8619]}}}}}, 0x70: {l: {0x6C: {l: {0x3B: {c: [10553]}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [10611]}}}}}}}, 0x74: {l: {0x6C: {l: {0x3B: {c: [8610]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [10521]}}}}}}}, 0x3B: {c: [10923]}, 0x65: {l: {0x3B: {c: [10925]}, 0x73: {l: {0x3B: {c: [10925, 65024]}}}}}}}}}, 0x62: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10508]}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10098]}}}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [123]}}}, 0x6B: {l: {0x3B: {c: [91]}}}}}}}, 0x6B: {l: {0x65: {l: {0x3B: {c: [10635]}}}, 0x73: {l: {0x6C: {l: {0x64: {l: {0x3B: {c: [10639]}}}, 0x75: {l: {0x3B: {c: [10637]}}}}}}}}}}}}}, 0x42: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10510]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [318]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [316]}}}}}}}, 0x69: {l: {0x6C: {l: {0x3B: {c: [8968]}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [123]}}}}}, 0x79: {l: {0x3B: {c: [1083]}}}}}, 0x64: {l: {0x63: {l: {0x61: {l: {0x3B: {c: [10550]}}}}}, 0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8220]}, 0x72: {l: {0x3B: {c: [8222]}}}}}}}}}, 0x72: {l: {0x64: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10599]}}}}}}}}}, 0x75: {l: {0x73: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10571]}}}}}}}}}}}}}, 0x73: {l: {0x68: {l: {0x3B: {c: [8626]}}}}}}}, 0x65: {l: {0x3B: {c: [8804]}, 0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8592]}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [8610]}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8637]}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8636]}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8647]}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8596]}, 0x73: {l: {0x3B: {c: [8646]}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x73: {l: {0x3B: {c: [8651]}}}}}}}}}}}}}}}}}, 0x73: {l: {0x71: {l: {0x75: {l: {0x69: {l: {0x67: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8621]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8907]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x67: {l: {0x3B: {c: [8922]}}}, 0x71: {l: {0x3B: {c: [8804]}, 0x71: {l: {0x3B: {c: [8806]}}}, 0x73: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10877]}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [10920]}}}}}, 0x3B: {c: [10877]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10879]}, 0x6F: {l: {0x3B: {c: [10881]}, 0x72: {l: {0x3B: {c: [10883]}}}}}}}}}}}, 0x67: {l: {0x3B: {c: [8922, 65024]}, 0x65: {l: {0x73: {l: {0x3B: {c: [10899]}}}}}}}, 0x73: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10885]}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8918]}}}}}}}, 0x65: {l: {0x71: {l: {0x67: {l: {0x74: {l: {0x72: {l: {0x3B: {c: [8922]}}}}}}}, 0x71: {l: {0x67: {l: {0x74: {l: {0x72: {l: {0x3B: {c: [10891]}}}}}}}}}}}}}, 0x67: {l: {0x74: {l: {0x72: {l: {0x3B: {c: [8822]}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8818]}}}}}}}}}}}}}, 0x45: {l: {0x3B: {c: [8806]}, 0x67: {l: {0x3B: {c: [10891]}}}}}, 0x66: {l: {0x69: {l: {0x73: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [10620]}}}}}}}}}, 0x6C: {l: {0x6F: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [8970]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120105]}}}}}, 0x67: {l: {0x3B: {c: [8822]}, 0x45: {l: {0x3B: {c: [10897]}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10594]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x64: {l: {0x3B: {c: [8637]}}}, 0x75: {l: {0x3B: {c: [8636]}, 0x6C: {l: {0x3B: {c: [10602]}}}}}}}}}, 0x62: {l: {0x6C: {l: {0x6B: {l: {0x3B: {c: [9604]}}}}}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1113]}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8647]}}}}}}}, 0x3B: {c: [8810]}, 0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8990]}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x64: {l: {0x3B: {c: [10603]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9722]}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [320]}}}}}}}}}, 0x6F: {l: {0x75: {l: {0x73: {l: {0x74: {l: {0x61: {l: {0x63: {l: {0x68: {l: {0x65: {l: {0x3B: {c: [9136]}}}}}}}}}, 0x3B: {c: [9136]}}}}}}}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10889]}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10889]}}}}}}}}}}}}}, 0x65: {l: {0x3B: {c: [10887]}, 0x71: {l: {0x3B: {c: [10887]}, 0x71: {l: {0x3B: {c: [8808]}}}}}}}, 0x45: {l: {0x3B: {c: [8808]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8934]}}}}}}}}}, 0x6F: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [10220]}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8701]}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10214]}}}}}}}, 0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10229]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10231]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x70: {l: {0x73: {l: {0x74: {l: {0x6F: {l: {0x3B: {c: [10236]}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10230]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8619]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8620]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10629]}}}}}, 0x66: {l: {0x3B: {c: [120157]}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10797]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10804]}}}}}}}}}}}, 0x77: {l: {0x61: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8727]}}}}}}}, 0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [95]}}}}}}}}}, 0x7A: {l: {0x3B: {c: [9674]}, 0x65: {l: {0x6E: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [9674]}}}}}}}}}, 0x66: {l: {0x3B: {c: [10731]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [40]}, 0x6C: {l: {0x74: {l: {0x3B: {c: [10643]}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8646]}}}}}}}, 0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8991]}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8651]}, 0x64: {l: {0x3B: {c: [10605]}}}}}}}}}, 0x6D: {l: {0x3B: {c: [8206]}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [8895]}}}}}}}}}, 0x73: {l: {0x61: {l: {0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8249]}}}}}}}}}, 0x63: {l: {0x72: {l: {0x3B: {c: [120001]}}}}}, 0x68: {l: {0x3B: {c: [8624]}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8818]}, 0x65: {l: {0x3B: {c: [10893]}}}, 0x67: {l: {0x3B: {c: [10895]}}}}}}}, 0x71: {l: {0x62: {l: {0x3B: {c: [91]}}}, 0x75: {l: {0x6F: {l: {0x3B: {c: [8216]}, 0x72: {l: {0x3B: {c: [8218]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [322]}}}}}}}}}}}, 0x74: {l: {0x63: {l: {0x63: {l: {0x3B: {c: [10918]}}}, 0x69: {l: {0x72: {l: {0x3B: {c: [10873]}}}}}}}, 0x3B: {c: [60]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8918]}}}}}}}, 0x68: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8907]}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8905]}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10614]}}}}}}}}}, 0x71: {l: {0x75: {l: {0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [10875]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x3B: {c: [9667]}, 0x65: {l: {0x3B: {c: [8884]}}}, 0x66: {l: {0x3B: {c: [9666]}}}}}, 0x50: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10646]}}}}}}}}}}, c: [60]}, 0x75: {l: {0x72: {l: {0x64: {l: {0x73: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10570]}}}}}}}}}}}, 0x75: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10598]}}}}}}}}}}}}}, 0x76: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x6E: {l: {0x65: {l: {0x71: {l: {0x71: {l: {0x3B: {c: [8808, 65024]}}}}}}}}}}}}}}}, 0x6E: {l: {0x45: {l: {0x3B: {c: [8808, 65024]}}}}}}}}}, + 0x4C: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [313]}}}}}}}}}, 0x6D: {l: {0x62: {l: {0x64: {l: {0x61: {l: {0x3B: {c: [923]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [10218]}}}}}, 0x70: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x74: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8466]}}}}}}}}}}}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8606]}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [317]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [315]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1051]}}}}}, 0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x72: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [10216]}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8676]}}}}}}}, 0x3B: {c: [8592]}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8646]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8656]}}}}}}}}}}}, 0x43: {l: {0x65: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8968]}}}}}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x72: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [10214]}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x6E: {l: {0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10593]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10585]}}}}}}}, 0x3B: {c: [8643]}}}}}}}}}}}}}}}}}}}}}, 0x46: {l: {0x6C: {l: {0x6F: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [8970]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8596]}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10574]}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8660]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8612]}}}}}}}}}}}, 0x3B: {c: [8867]}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10586]}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10703]}}}}}}}, 0x3B: {c: [8882]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8884]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10577]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10592]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10584]}}}}}}}, 0x3B: {c: [8639]}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10578]}}}}}}}, 0x3B: {c: [8636]}}}}}}}}}}}}}}}}}, 0x73: {l: {0x73: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8922]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8806]}}}}}}}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8822]}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10913]}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10877]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8818]}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120079]}}}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1033]}}}}}}}, 0x6C: {l: {0x3B: {c: [8920]}, 0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8666]}}}}}}}}}}}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [319]}}}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x67: {l: {0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10229]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10231]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10232]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10234]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10230]}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [10233]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120131]}}}}}, 0x77: {l: {0x65: {l: {0x72: {l: {0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8601]}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8600]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8466]}}}}}, 0x68: {l: {0x3B: {c: [8624]}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [321]}}}}}}}}}}}, 0x54: {l: {0x3B: {c: [60]}}, c: [60]}, 0x74: {l: {0x3B: {c: [8810]}}}}}, + 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [175]}}, c: [175]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [9794]}}}, 0x74: {l: {0x3B: {c: [10016]}, 0x65: {l: {0x73: {l: {0x65: {l: {0x3B: {c: [10016]}}}}}}}}}}}, 0x70: {l: {0x3B: {c: [8614]}, 0x73: {l: {0x74: {l: {0x6F: {l: {0x3B: {c: [8614]}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8615]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8612]}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8613]}}}}}}}}}}}}}, 0x72: {l: {0x6B: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [9646]}}}}}}}}}}}, 0x63: {l: {0x6F: {l: {0x6D: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [10793]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1084]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8212]}}}}}}}}}, 0x44: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8762]}}}}}}}}}, 0x65: {l: {0x61: {l: {0x73: {l: {0x75: {l: {0x72: {l: {0x65: {l: {0x64: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [8737]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120106]}}}}}, 0x68: {l: {0x6F: {l: {0x3B: {c: [8487]}}}}}, 0x69: {l: {0x63: {l: {0x72: {l: {0x6F: {l: {0x3B: {c: [181]}}, c: [181]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [42]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10992]}}}}}}}, 0x3B: {c: [8739]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [183]}}, c: [183]}}}}}}}, 0x6E: {l: {0x75: {l: {0x73: {l: {0x62: {l: {0x3B: {c: [8863]}}}, 0x3B: {c: [8722]}, 0x64: {l: {0x3B: {c: [8760]}, 0x75: {l: {0x3B: {c: [10794]}}}}}}}}}}}}}, 0x6C: {l: {0x63: {l: {0x70: {l: {0x3B: {c: [10971]}}}}}, 0x64: {l: {0x72: {l: {0x3B: {c: [8230]}}}}}}}, 0x6E: {l: {0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8723]}}}}}}}}}}}, 0x6F: {l: {0x64: {l: {0x65: {l: {0x6C: {l: {0x73: {l: {0x3B: {c: [8871]}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120158]}}}}}}}, 0x70: {l: {0x3B: {c: [8723]}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120002]}}}}}, 0x74: {l: {0x70: {l: {0x6F: {l: {0x73: {l: {0x3B: {c: [8766]}}}}}}}}}}}, 0x75: {l: {0x3B: {c: [956]}, 0x6C: {l: {0x74: {l: {0x69: {l: {0x6D: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8888]}}}}}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8888]}}}}}}}}}}}, + 0x4D: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10501]}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1052]}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8287]}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8499]}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120080]}}}}}, 0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x50: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8723]}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120132]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8499]}}}}}}}, 0x75: {l: {0x3B: {c: [924]}}}}}, + 0x6E: {l: {0x61: {l: {0x62: {l: {0x6C: {l: {0x61: {l: {0x3B: {c: [8711]}}}}}}}, 0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [324]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [8736, 8402]}}}}}, 0x70: {l: {0x3B: {c: [8777]}, 0x45: {l: {0x3B: {c: [10864, 824]}}}, 0x69: {l: {0x64: {l: {0x3B: {c: [8779, 824]}}}}}, 0x6F: {l: {0x73: {l: {0x3B: {c: [329]}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [8777]}}}}}}}}}}}, 0x74: {l: {0x75: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [9838]}, 0x73: {l: {0x3B: {c: [8469]}}}}}}}, 0x3B: {c: [9838]}}}}}}}}}, 0x62: {l: {0x73: {l: {0x70: {l: {0x3B: {c: [160]}}, c: [160]}}}, 0x75: {l: {0x6D: {l: {0x70: {l: {0x3B: {c: [8782, 824]}, 0x65: {l: {0x3B: {c: [8783, 824]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10819]}}}, 0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [328]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [326]}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8775]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10861, 824]}}}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [10818]}}}}}, 0x79: {l: {0x3B: {c: [1085]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8211]}}}}}}}}}, 0x65: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10532]}}}}}, 0x72: {l: {0x3B: {c: [8599]}, 0x6F: {l: {0x77: {l: {0x3B: {c: [8599]}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8663]}}}}}}}, 0x3B: {c: [8800]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8784, 824]}}}}}}}, 0x71: {l: {0x75: {l: {0x69: {l: {0x76: {l: {0x3B: {c: [8802]}}}}}}}}}, 0x73: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10536]}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8770, 824]}}}}}}}, 0x78: {l: {0x69: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [8708]}, 0x73: {l: {0x3B: {c: [8708]}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120107]}}}}}, 0x67: {l: {0x45: {l: {0x3B: {c: [8807, 824]}}}, 0x65: {l: {0x3B: {c: [8817]}, 0x71: {l: {0x3B: {c: [8817]}, 0x71: {l: {0x3B: {c: [8807, 824]}}}, 0x73: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10878, 824]}}}}}}}}}}}}}, 0x73: {l: {0x3B: {c: [10878, 824]}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8821]}}}}}}}, 0x74: {l: {0x3B: {c: [8815]}, 0x72: {l: {0x3B: {c: [8815]}}}}}}}, 0x47: {l: {0x67: {l: {0x3B: {c: [8921, 824]}}}, 0x74: {l: {0x3B: {c: [8811, 8402]}, 0x76: {l: {0x3B: {c: [8811, 824]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8622]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8654]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10994]}}}}}}}}}, 0x69: {l: {0x3B: {c: [8715]}, 0x73: {l: {0x3B: {c: [8956]}, 0x64: {l: {0x3B: {c: [8954]}}}}}, 0x76: {l: {0x3B: {c: [8715]}}}}}, 0x6A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1114]}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8602]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8653]}}}}}}}, 0x64: {l: {0x72: {l: {0x3B: {c: [8229]}}}}}, 0x45: {l: {0x3B: {c: [8806, 824]}}}, 0x65: {l: {0x3B: {c: [8816]}, 0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8602]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8622]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x71: {l: {0x3B: {c: [8816]}, 0x71: {l: {0x3B: {c: [8806, 824]}}}, 0x73: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10877, 824]}}}}}}}}}}}}}, 0x73: {l: {0x3B: {c: [10877, 824]}, 0x73: {l: {0x3B: {c: [8814]}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8820]}}}}}}}, 0x74: {l: {0x3B: {c: [8814]}, 0x72: {l: {0x69: {l: {0x3B: {c: [8938]}, 0x65: {l: {0x3B: {c: [8940]}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8653]}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8654]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x3B: {c: [8920, 824]}}}, 0x74: {l: {0x3B: {c: [8810, 8402]}, 0x76: {l: {0x3B: {c: [8810, 824]}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [8740]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120159]}}}}}, 0x74: {l: {0x3B: {c: [172]}, 0x69: {l: {0x6E: {l: {0x3B: {c: [8713]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8949, 824]}}}}}}}, 0x45: {l: {0x3B: {c: [8953, 824]}}}, 0x76: {l: {0x61: {l: {0x3B: {c: [8713]}}}, 0x62: {l: {0x3B: {c: [8951]}}}, 0x63: {l: {0x3B: {c: [8950]}}}}}}}}}, 0x6E: {l: {0x69: {l: {0x3B: {c: [8716]}, 0x76: {l: {0x61: {l: {0x3B: {c: [8716]}}}, 0x62: {l: {0x3B: {c: [8958]}}}, 0x63: {l: {0x3B: {c: [8957]}}}}}}}}}}, c: [172]}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8742]}}}}}}}}}}}, 0x3B: {c: [8742]}, 0x73: {l: {0x6C: {l: {0x3B: {c: [11005, 8421]}}}}}, 0x74: {l: {0x3B: {c: [8706, 824]}}}}}}}, 0x6F: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10772]}}}}}}}}}}}, 0x72: {l: {0x3B: {c: [8832]}, 0x63: {l: {0x75: {l: {0x65: {l: {0x3B: {c: [8928]}}}}}}}, 0x65: {l: {0x63: {l: {0x3B: {c: [8832]}, 0x65: {l: {0x71: {l: {0x3B: {c: [10927, 824]}}}}}}}, 0x3B: {c: [10927, 824]}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [10547, 824]}}}, 0x3B: {c: [8603]}, 0x77: {l: {0x3B: {c: [8605, 824]}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8655]}}}}}}}, 0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8603]}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [8939]}, 0x65: {l: {0x3B: {c: [8941]}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8655]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x3B: {c: [8833]}, 0x63: {l: {0x75: {l: {0x65: {l: {0x3B: {c: [8929]}}}}}}}, 0x65: {l: {0x3B: {c: [10928, 824]}}}, 0x72: {l: {0x3B: {c: [120003]}}}}}, 0x68: {l: {0x6F: {l: {0x72: {l: {0x74: {l: {0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [8740]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8742]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [8769]}, 0x65: {l: {0x3B: {c: [8772]}, 0x71: {l: {0x3B: {c: [8772]}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [8740]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8742]}}}}}}}, 0x71: {l: {0x73: {l: {0x75: {l: {0x62: {l: {0x65: {l: {0x3B: {c: [8930]}}}}}, 0x70: {l: {0x65: {l: {0x3B: {c: [8931]}}}}}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [8836]}, 0x45: {l: {0x3B: {c: [10949, 824]}}}, 0x65: {l: {0x3B: {c: [8840]}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8834, 8402]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8840]}, 0x71: {l: {0x3B: {c: [10949, 824]}}}}}}}}}}}}}}}, 0x63: {l: {0x63: {l: {0x3B: {c: [8833]}, 0x65: {l: {0x71: {l: {0x3B: {c: [10928, 824]}}}}}}}}}, 0x70: {l: {0x3B: {c: [8837]}, 0x45: {l: {0x3B: {c: [10950, 824]}}}, 0x65: {l: {0x3B: {c: [8841]}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8835, 8402]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8841]}, 0x71: {l: {0x3B: {c: [10950, 824]}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x67: {l: {0x6C: {l: {0x3B: {c: [8825]}}}}}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [241]}}, c: [241]}}}}}}}, 0x6C: {l: {0x67: {l: {0x3B: {c: [8824]}}}}}, 0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8938]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8940]}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8939]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8941]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x75: {l: {0x3B: {c: [957]}, 0x6D: {l: {0x3B: {c: [35]}, 0x65: {l: {0x72: {l: {0x6F: {l: {0x3B: {c: [8470]}}}}}}}, 0x73: {l: {0x70: {l: {0x3B: {c: [8199]}}}}}}}}}, 0x76: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8781, 8402]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8876]}}}}}}}}}, 0x44: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8877]}}}}}}}}}, 0x67: {l: {0x65: {l: {0x3B: {c: [8805, 8402]}}}, 0x74: {l: {0x3B: {c: [62, 8402]}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10500]}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x66: {l: {0x69: {l: {0x6E: {l: {0x3B: {c: [10718]}}}}}}}}}}}, 0x6C: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10498]}}}}}}}, 0x65: {l: {0x3B: {c: [8804, 8402]}}}, 0x74: {l: {0x3B: {c: [60, 8402]}, 0x72: {l: {0x69: {l: {0x65: {l: {0x3B: {c: [8884, 8402]}}}}}}}}}}}, 0x72: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10499]}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x65: {l: {0x3B: {c: [8885, 8402]}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8764, 8402]}}}}}}}}}, 0x56: {l: {0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8878]}}}}}}}}}, 0x44: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8879]}}}}}}}}}}}, 0x77: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10531]}}}}}, 0x72: {l: {0x3B: {c: [8598]}, 0x6F: {l: {0x77: {l: {0x3B: {c: [8598]}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8662]}}}}}}}, 0x6E: {l: {0x65: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10535]}}}}}}}}}}}}}, + 0x4E: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [323]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [327]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [325]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1053]}}}}}, 0x65: {l: {0x67: {l: {0x61: {l: {0x74: {l: {0x69: {l: {0x76: {l: {0x65: {l: {0x4D: {l: {0x65: {l: {0x64: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x68: {l: {0x69: {l: {0x63: {l: {0x6B: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}, 0x6E: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x79: {l: {0x54: {l: {0x68: {l: {0x69: {l: {0x6E: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x74: {l: {0x65: {l: {0x64: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8811]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8810]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x4C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [10]}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120081]}}}}}, 0x4A: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1034]}}}}}}}, 0x6F: {l: {0x42: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x6B: {l: {0x3B: {c: [8288]}}}}}}}}}}}, 0x6E: {l: {0x42: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x6B: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [160]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [8469]}}}}}, 0x74: {l: {0x3B: {c: [10988]}, 0x43: {l: {0x6F: {l: {0x6E: {l: {0x67: {l: {0x72: {l: {0x75: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8802]}}}}}}}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x43: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8813]}}}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8742]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x45: {l: {0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8713]}}}}}}}}}}}}}, 0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8800]}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8770, 824]}}}}}}}}}}}}}}}}}}}, 0x78: {l: {0x69: {l: {0x73: {l: {0x74: {l: {0x73: {l: {0x3B: {c: [8708]}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8815]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8817]}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8807, 824]}}}}}}}}}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8811, 824]}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8825]}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10878, 824]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8821]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x48: {l: {0x75: {l: {0x6D: {l: {0x70: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x48: {l: {0x75: {l: {0x6D: {l: {0x70: {l: {0x3B: {c: [8782, 824]}}}}}}}}}}}}}}}}}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8783, 824]}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x54: {l: {0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10703, 824]}}}}}}}, 0x3B: {c: [8938]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8940]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x73: {l: {0x3B: {c: [8814]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8816]}}}}}}}}}}}, 0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [8824]}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [8810, 824]}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10877, 824]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8820]}}}}}}}}}}}}}}}}}}}, 0x4E: {l: {0x65: {l: {0x73: {l: {0x74: {l: {0x65: {l: {0x64: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x47: {l: {0x72: {l: {0x65: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x3B: {c: [10914, 824]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x4C: {l: {0x65: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10913, 824]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x50: {l: {0x72: {l: {0x65: {l: {0x63: {l: {0x65: {l: {0x64: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8832]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10927, 824]}}}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8928]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x65: {l: {0x76: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x45: {l: {0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8716]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x54: {l: {0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10704, 824]}}}}}}}, 0x3B: {c: [8939]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8941]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x53: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x53: {l: {0x75: {l: {0x62: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8847, 824]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8930]}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8848, 824]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8931]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x75: {l: {0x62: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8834, 8402]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8840]}}}}}}}}}}}}}}}}}}}, 0x63: {l: {0x63: {l: {0x65: {l: {0x65: {l: {0x64: {l: {0x73: {l: {0x3B: {c: [8833]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10928, 824]}}}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8929]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8831, 824]}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8835, 8402]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8841]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8769]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8772]}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8775]}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8777]}}}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8740]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119977]}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [209]}}, c: [209]}}}}}}}}}, 0x75: {l: {0x3B: {c: [925]}}}}}, + 0x4F: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [211]}}, c: [211]}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [212]}}, c: [212]}}}}}, 0x79: {l: {0x3B: {c: [1054]}}}}}, 0x64: {l: {0x62: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [336]}}}}}}}}}}}, 0x45: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [338]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120082]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [210]}}, c: [210]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [332]}}}}}}}, 0x65: {l: {0x67: {l: {0x61: {l: {0x3B: {c: [937]}}}}}}}, 0x69: {l: {0x63: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [927]}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120134]}}}}}}}, 0x70: {l: {0x65: {l: {0x6E: {l: {0x43: {l: {0x75: {l: {0x72: {l: {0x6C: {l: {0x79: {l: {0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x51: {l: {0x75: {l: {0x6F: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [8220]}}}}}}}}}}}}}}}}}}}}}}}, 0x51: {l: {0x75: {l: {0x6F: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [8216]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x3B: {c: [10836]}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119978]}}}}}, 0x6C: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [216]}}, c: [216]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [213]}}, c: [213]}}}}}, 0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10807]}}}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [214]}}, c: [214]}}}}}, 0x76: {l: {0x65: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8254]}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [9182]}}}, 0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [9140]}}}}}}}}}}}}}}}, 0x50: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x68: {l: {0x65: {l: {0x73: {l: {0x69: {l: {0x73: {l: {0x3B: {c: [9180]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, + 0x6F: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [243]}}, c: [243]}}}}}}}, 0x73: {l: {0x74: {l: {0x3B: {c: [8859]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [244]}}, c: [244]}, 0x3B: {c: [8858]}}}}}, 0x79: {l: {0x3B: {c: [1086]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8861]}}}}}}}, 0x62: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [337]}}}}}}}}}, 0x69: {l: {0x76: {l: {0x3B: {c: [10808]}}}}}, 0x6F: {l: {0x74: {l: {0x3B: {c: [8857]}}}}}, 0x73: {l: {0x6F: {l: {0x6C: {l: {0x64: {l: {0x3B: {c: [10684]}}}}}}}}}}}, 0x65: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [339]}}}}}}}}}, 0x66: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10687]}}}}}}}, 0x72: {l: {0x3B: {c: [120108]}}}}}, 0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [731]}}}}}, 0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [242]}}, c: [242]}}}}}}}, 0x74: {l: {0x3B: {c: [10689]}}}}}, 0x68: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10677]}}}}}}}, 0x6D: {l: {0x3B: {c: [937]}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8750]}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8634]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10686]}}}}}, 0x72: {l: {0x6F: {l: {0x73: {l: {0x73: {l: {0x3B: {c: [10683]}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8254]}}}}}}}, 0x74: {l: {0x3B: {c: [10688]}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [333]}}}}}}}, 0x65: {l: {0x67: {l: {0x61: {l: {0x3B: {c: [969]}}}}}}}, 0x69: {l: {0x63: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [959]}}}}}}}}}, 0x64: {l: {0x3B: {c: [10678]}}}, 0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8854]}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120160]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10679]}}}}}, 0x65: {l: {0x72: {l: {0x70: {l: {0x3B: {c: [10681]}}}}}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8853]}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8635]}}}}}}}, 0x3B: {c: [8744]}, 0x64: {l: {0x3B: {c: [10845]}, 0x65: {l: {0x72: {l: {0x3B: {c: [8500]}, 0x6F: {l: {0x66: {l: {0x3B: {c: [8500]}}}}}}}}}, 0x66: {l: {0x3B: {c: [170]}}, c: [170]}, 0x6D: {l: {0x3B: {c: [186]}}, c: [186]}}}, 0x69: {l: {0x67: {l: {0x6F: {l: {0x66: {l: {0x3B: {c: [8886]}}}}}}}}}, 0x6F: {l: {0x72: {l: {0x3B: {c: [10838]}}}}}, 0x73: {l: {0x6C: {l: {0x6F: {l: {0x70: {l: {0x65: {l: {0x3B: {c: [10839]}}}}}}}}}}}, 0x76: {l: {0x3B: {c: [10843]}}}}}, 0x53: {l: {0x3B: {c: [9416]}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8500]}}}}}, 0x6C: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [248]}}, c: [248]}}}}}}}, 0x6F: {l: {0x6C: {l: {0x3B: {c: [8856]}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [245]}}, c: [245]}}}}}, 0x6D: {l: {0x65: {l: {0x73: {l: {0x61: {l: {0x73: {l: {0x3B: {c: [10806]}}}}}, 0x3B: {c: [8855]}}}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [246]}}, c: [246]}}}}}, 0x76: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9021]}}}}}}}}}}}, + 0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x3B: {c: [182]}, 0x6C: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8741]}}}}}}}}}}, c: [182]}, 0x3B: {c: [8741]}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [10995]}}}}}, 0x6C: {l: {0x3B: {c: [11005]}}}}}, 0x74: {l: {0x3B: {c: [8706]}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1087]}}}}}, 0x65: {l: {0x72: {l: {0x63: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [37]}}}}}}}, 0x69: {l: {0x6F: {l: {0x64: {l: {0x3B: {c: [46]}}}}}}}, 0x6D: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [8240]}}}}}}}, 0x70: {l: {0x3B: {c: [8869]}}}, 0x74: {l: {0x65: {l: {0x6E: {l: {0x6B: {l: {0x3B: {c: [8241]}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120109]}}}}}, 0x68: {l: {0x69: {l: {0x3B: {c: [966]}, 0x76: {l: {0x3B: {c: [981]}}}}}, 0x6D: {l: {0x6D: {l: {0x61: {l: {0x74: {l: {0x3B: {c: [8499]}}}}}}}}}, 0x6F: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [9742]}}}}}}}}}, 0x69: {l: {0x3B: {c: [960]}, 0x74: {l: {0x63: {l: {0x68: {l: {0x66: {l: {0x6F: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [8916]}}}}}}}}}}}}}}}, 0x76: {l: {0x3B: {c: [982]}}}}}, 0x6C: {l: {0x61: {l: {0x6E: {l: {0x63: {l: {0x6B: {l: {0x3B: {c: [8463]}, 0x68: {l: {0x3B: {c: [8462]}}}}}}}, 0x6B: {l: {0x76: {l: {0x3B: {c: [8463]}}}}}}}}}, 0x75: {l: {0x73: {l: {0x61: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10787]}}}}}}}}}, 0x62: {l: {0x3B: {c: [8862]}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10786]}}}}}}}, 0x3B: {c: [43]}, 0x64: {l: {0x6F: {l: {0x3B: {c: [8724]}}}, 0x75: {l: {0x3B: {c: [10789]}}}}}, 0x65: {l: {0x3B: {c: [10866]}}}, 0x6D: {l: {0x6E: {l: {0x3B: {c: [177]}}, c: [177]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [10790]}}}}}}}, 0x74: {l: {0x77: {l: {0x6F: {l: {0x3B: {c: [10791]}}}}}}}}}}}}}, 0x6D: {l: {0x3B: {c: [177]}}}, 0x6F: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10773]}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120161]}}}}}, 0x75: {l: {0x6E: {l: {0x64: {l: {0x3B: {c: [163]}}, c: [163]}}}}}}}, 0x72: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10935]}}}}}, 0x3B: {c: [8826]}, 0x63: {l: {0x75: {l: {0x65: {l: {0x3B: {c: [8828]}}}}}}}, 0x65: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10935]}}}}}}}}}}}}}, 0x3B: {c: [8826]}, 0x63: {l: {0x75: {l: {0x72: {l: {0x6C: {l: {0x79: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8828]}}}}}}}}}}}}}}}, 0x65: {l: {0x71: {l: {0x3B: {c: [10927]}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10937]}}}}}}}}}}}}}, 0x65: {l: {0x71: {l: {0x71: {l: {0x3B: {c: [10933]}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8936]}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8830]}}}}}}}}}, 0x3B: {c: [10927]}}}, 0x45: {l: {0x3B: {c: [10931]}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8242]}, 0x73: {l: {0x3B: {c: [8473]}}}}}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10937]}}}}}, 0x45: {l: {0x3B: {c: [10933]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8936]}}}}}}}}}, 0x6F: {l: {0x64: {l: {0x3B: {c: [8719]}}}, 0x66: {l: {0x61: {l: {0x6C: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9006]}}}}}}}}}, 0x6C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8978]}}}}}}}}}, 0x73: {l: {0x75: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8979]}}}}}}}}}}}, 0x70: {l: {0x3B: {c: [8733]}, 0x74: {l: {0x6F: {l: {0x3B: {c: [8733]}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8830]}}}}}}}, 0x75: {l: {0x72: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8880]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120005]}}}}}, 0x69: {l: {0x3B: {c: [968]}}}}}, 0x75: {l: {0x6E: {l: {0x63: {l: {0x73: {l: {0x70: {l: {0x3B: {c: [8200]}}}}}}}}}}}}}, + 0x50: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x61: {l: {0x6C: {l: {0x44: {l: {0x3B: {c: [8706]}}}}}}}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1055]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120083]}}}}}, 0x68: {l: {0x69: {l: {0x3B: {c: [934]}}}}}, 0x69: {l: {0x3B: {c: [928]}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x4D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [177]}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x69: {l: {0x6E: {l: {0x63: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x70: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8460]}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [8473]}}}}}}}, 0x72: {l: {0x3B: {c: [10939]}, 0x65: {l: {0x63: {l: {0x65: {l: {0x64: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8826]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10927]}}}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8828]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8830]}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8243]}}}}}}}, 0x6F: {l: {0x64: {l: {0x75: {l: {0x63: {l: {0x74: {l: {0x3B: {c: [8719]}}}}}}}}}, 0x70: {l: {0x6F: {l: {0x72: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8733]}}}}}, 0x3B: {c: [8759]}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119979]}}}}}, 0x69: {l: {0x3B: {c: [936]}}}}}}}, + 0x51: {l: {0x66: {l: {0x72: {l: {0x3B: {c: [120084]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [8474]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119980]}}}}}}}, 0x55: {l: {0x4F: {l: {0x54: {l: {0x3B: {c: [34]}}, c: [34]}}}}}}}, + 0x71: {l: {0x66: {l: {0x72: {l: {0x3B: {c: [120110]}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10764]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120162]}}}}}}}, 0x70: {l: {0x72: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8279]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120006]}}}}}}}, 0x75: {l: {0x61: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x6E: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x73: {l: {0x3B: {c: [8461]}}}}}}}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10774]}}}}}}}}}}}, 0x65: {l: {0x73: {l: {0x74: {l: {0x3B: {c: [63]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8799]}}}}}}}}}}}, 0x6F: {l: {0x74: {l: {0x3B: {c: [34]}}, c: [34]}}}}}}}, + 0x72: {l: {0x41: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8667]}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8658]}}}}}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [10524]}}}}}}}}}}}, 0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8765, 817]}}}, 0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [341]}}}}}}}}}, 0x64: {l: {0x69: {l: {0x63: {l: {0x3B: {c: [8730]}}}}}}}, 0x65: {l: {0x6D: {l: {0x70: {l: {0x74: {l: {0x79: {l: {0x76: {l: {0x3B: {c: [10675]}}}}}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [10217]}, 0x64: {l: {0x3B: {c: [10642]}}}, 0x65: {l: {0x3B: {c: [10661]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [10217]}}}}}}}}}, 0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [187]}}, c: [187]}}}}}, 0x72: {l: {0x72: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10613]}}}}}, 0x62: {l: {0x3B: {c: [8677]}, 0x66: {l: {0x73: {l: {0x3B: {c: [10528]}}}}}}}, 0x63: {l: {0x3B: {c: [10547]}}}, 0x3B: {c: [8594]}, 0x66: {l: {0x73: {l: {0x3B: {c: [10526]}}}}}, 0x68: {l: {0x6B: {l: {0x3B: {c: [8618]}}}}}, 0x6C: {l: {0x70: {l: {0x3B: {c: [8620]}}}}}, 0x70: {l: {0x6C: {l: {0x3B: {c: [10565]}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [10612]}}}}}}}, 0x74: {l: {0x6C: {l: {0x3B: {c: [8611]}}}}}, 0x77: {l: {0x3B: {c: [8605]}}}}}}}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [10522]}}}}}}}, 0x69: {l: {0x6F: {l: {0x3B: {c: [8758]}, 0x6E: {l: {0x61: {l: {0x6C: {l: {0x73: {l: {0x3B: {c: [8474]}}}}}}}}}}}}}}}}}, 0x62: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10509]}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10099]}}}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [125]}}}, 0x6B: {l: {0x3B: {c: [93]}}}}}}}, 0x6B: {l: {0x65: {l: {0x3B: {c: [10636]}}}, 0x73: {l: {0x6C: {l: {0x64: {l: {0x3B: {c: [10638]}}}, 0x75: {l: {0x3B: {c: [10640]}}}}}}}}}}}}}, 0x42: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10511]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [345]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [343]}}}}}}}, 0x69: {l: {0x6C: {l: {0x3B: {c: [8969]}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [125]}}}}}, 0x79: {l: {0x3B: {c: [1088]}}}}}, 0x64: {l: {0x63: {l: {0x61: {l: {0x3B: {c: [10551]}}}}}, 0x6C: {l: {0x64: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10601]}}}}}}}}}}}, 0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8221]}, 0x72: {l: {0x3B: {c: [8221]}}}}}}}}}, 0x73: {l: {0x68: {l: {0x3B: {c: [8627]}}}}}}}, 0x65: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8476]}, 0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [8475]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x74: {l: {0x3B: {c: [8476]}}}}}}}}}, 0x73: {l: {0x3B: {c: [8477]}}}}}}}, 0x63: {l: {0x74: {l: {0x3B: {c: [9645]}}}}}, 0x67: {l: {0x3B: {c: [174]}}, c: [174]}}}, 0x66: {l: {0x69: {l: {0x73: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [10621]}}}}}}}}}, 0x6C: {l: {0x6F: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [8971]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120111]}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10596]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x64: {l: {0x3B: {c: [8641]}}}, 0x75: {l: {0x3B: {c: [8640]}, 0x6C: {l: {0x3B: {c: [10604]}}}}}}}}}, 0x6F: {l: {0x3B: {c: [961]}, 0x76: {l: {0x3B: {c: [1009]}}}}}}}, 0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8594]}, 0x74: {l: {0x61: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [8611]}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8641]}}}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8640]}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8644]}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x73: {l: {0x3B: {c: [8652]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8649]}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x71: {l: {0x75: {l: {0x69: {l: {0x67: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8605]}}}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8908]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [730]}}}}}, 0x73: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x73: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8787]}}}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8644]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8652]}}}}}}}, 0x6D: {l: {0x3B: {c: [8207]}}}}}, 0x6D: {l: {0x6F: {l: {0x75: {l: {0x73: {l: {0x74: {l: {0x61: {l: {0x63: {l: {0x68: {l: {0x65: {l: {0x3B: {c: [9137]}}}}}}}}}, 0x3B: {c: [9137]}}}}}}}}}}}, 0x6E: {l: {0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [10990]}}}}}}}}}, 0x6F: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [10221]}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8702]}}}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10215]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10630]}}}}}, 0x66: {l: {0x3B: {c: [120163]}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10798]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10805]}}}}}}}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [41]}, 0x67: {l: {0x74: {l: {0x3B: {c: [10644]}}}}}}}}}, 0x70: {l: {0x6F: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10770]}}}}}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8649]}}}}}}}}}, 0x73: {l: {0x61: {l: {0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8250]}}}}}}}}}, 0x63: {l: {0x72: {l: {0x3B: {c: [120007]}}}}}, 0x68: {l: {0x3B: {c: [8625]}}}, 0x71: {l: {0x62: {l: {0x3B: {c: [93]}}}, 0x75: {l: {0x6F: {l: {0x3B: {c: [8217]}, 0x72: {l: {0x3B: {c: [8217]}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x72: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8908]}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [8906]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x3B: {c: [9657]}, 0x65: {l: {0x3B: {c: [8885]}}}, 0x66: {l: {0x3B: {c: [9656]}}}, 0x6C: {l: {0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [10702]}}}}}}}}}}}}}}}, 0x75: {l: {0x6C: {l: {0x75: {l: {0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10600]}}}}}}}}}}}}}, 0x78: {l: {0x3B: {c: [8478]}}}}}, + 0x52: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [340]}}}}}}}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [10219]}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8608]}, 0x74: {l: {0x6C: {l: {0x3B: {c: [10518]}}}}}}}}}}}, 0x42: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10512]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [344]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [342]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1056]}}}}}, 0x65: {l: {0x3B: {c: [8476]}, 0x76: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x45: {l: {0x6C: {l: {0x65: {l: {0x6D: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [8715]}}}}}}}}}}}}}, 0x71: {l: {0x75: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x62: {l: {0x72: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [8651]}}}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x62: {l: {0x72: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [10607]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x45: {l: {0x47: {l: {0x3B: {c: [174]}}, c: [174]}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8476]}}}}}, 0x68: {l: {0x6F: {l: {0x3B: {c: [929]}}}}}, 0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x72: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [10217]}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8677]}}}}}}}, 0x3B: {c: [8594]}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8644]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8658]}}}}}}}}}}}, 0x43: {l: {0x65: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8969]}}}}}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x75: {l: {0x62: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x72: {l: {0x61: {l: {0x63: {l: {0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [10215]}}}}}}}}}}}}}}}}}}}}}}}, 0x77: {l: {0x6E: {l: {0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10589]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10581]}}}}}}}, 0x3B: {c: [8642]}}}}}}}}}}}}}}}}}}}}}, 0x46: {l: {0x6C: {l: {0x6F: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [8971]}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8614]}}}}}}}}}}}, 0x3B: {c: [8866]}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10587]}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10704]}}}}}}}, 0x3B: {c: [8883]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8885]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10575]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10588]}}}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10580]}}}}}}}, 0x3B: {c: [8638]}}}}}}}}}}}}}}}}}, 0x56: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10579]}}}}}}}, 0x3B: {c: [8640]}}}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [8477]}}}}}, 0x75: {l: {0x6E: {l: {0x64: {l: {0x49: {l: {0x6D: {l: {0x70: {l: {0x6C: {l: {0x69: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [10608]}}}}}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8667]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [8475]}}}}}, 0x68: {l: {0x3B: {c: [8625]}}}}}, 0x75: {l: {0x6C: {l: {0x65: {l: {0x44: {l: {0x65: {l: {0x6C: {l: {0x61: {l: {0x79: {l: {0x65: {l: {0x64: {l: {0x3B: {c: [10740]}}}}}}}}}}}}}}}}}}}}}}}, + 0x53: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [346]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [352]}}}}}}}}}, 0x3B: {c: [10940]}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [350]}}}}}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [348]}}}}}}}, 0x79: {l: {0x3B: {c: [1057]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120086]}}}}}, 0x48: {l: {0x43: {l: {0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1065]}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1064]}}}}}}}, 0x68: {l: {0x6F: {l: {0x72: {l: {0x74: {l: {0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8595]}}}}}}}}}}}}}}}}}}}, 0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8592]}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8594]}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x70: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8593]}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x67: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [931]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x43: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [8728]}}}}}}}}}}}}}}}}}}}}}, 0x4F: {l: {0x46: {l: {0x54: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1068]}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120138]}}}}}}}, 0x71: {l: {0x72: {l: {0x74: {l: {0x3B: {c: [8730]}}}}}, 0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9633]}, 0x49: {l: {0x6E: {l: {0x74: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x63: {l: {0x74: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8851]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x53: {l: {0x75: {l: {0x62: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8847]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8849]}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8848]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8850]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x55: {l: {0x6E: {l: {0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8852]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119982]}}}}}}}, 0x74: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8902]}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [8912]}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8912]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8838]}}}}}}}}}}}}}}}}}}}, 0x63: {l: {0x63: {l: {0x65: {l: {0x65: {l: {0x64: {l: {0x73: {l: {0x3B: {c: [8827]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [10928]}}}}}}}}}}}, 0x53: {l: {0x6C: {l: {0x61: {l: {0x6E: {l: {0x74: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8829]}}}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8831]}}}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x54: {l: {0x68: {l: {0x61: {l: {0x74: {l: {0x3B: {c: [8715]}}}}}}}}}}}}}, 0x6D: {l: {0x3B: {c: [8721]}}}, 0x70: {l: {0x3B: {c: [8913]}, 0x65: {l: {0x72: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8835]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8839]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8913]}}}}}}}}}}}}}, + 0x73: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [347]}}}}}}}}}}}, 0x62: {l: {0x71: {l: {0x75: {l: {0x6F: {l: {0x3B: {c: [8218]}}}}}}}}}, 0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10936]}}}, 0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [353]}}}}}}}}}, 0x3B: {c: [8827]}, 0x63: {l: {0x75: {l: {0x65: {l: {0x3B: {c: [8829]}}}}}}}, 0x65: {l: {0x3B: {c: [10928]}, 0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [351]}}}}}}}}}, 0x45: {l: {0x3B: {c: [10932]}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [349]}}}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10938]}}}}}, 0x45: {l: {0x3B: {c: [10934]}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8937]}}}}}}}}}, 0x70: {l: {0x6F: {l: {0x6C: {l: {0x69: {l: {0x6E: {l: {0x74: {l: {0x3B: {c: [10771]}}}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8831]}}}}}}}, 0x79: {l: {0x3B: {c: [1089]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x62: {l: {0x3B: {c: [8865]}}}, 0x3B: {c: [8901]}, 0x65: {l: {0x3B: {c: [10854]}}}}}}}}}, 0x65: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10533]}}}}}, 0x72: {l: {0x3B: {c: [8600]}, 0x6F: {l: {0x77: {l: {0x3B: {c: [8600]}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8664]}}}}}}}, 0x63: {l: {0x74: {l: {0x3B: {c: [167]}}, c: [167]}}}, 0x6D: {l: {0x69: {l: {0x3B: {c: [59]}}}}}, 0x73: {l: {0x77: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10537]}}}}}}}}}, 0x74: {l: {0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8726]}}}}}}}}}, 0x6E: {l: {0x3B: {c: [8726]}}}}}}}, 0x78: {l: {0x74: {l: {0x3B: {c: [10038]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120112]}, 0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [8994]}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x3B: {c: [9839]}}}}}}}, 0x63: {l: {0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1097]}}}}}}}, 0x79: {l: {0x3B: {c: [1096]}}}}}, 0x6F: {l: {0x72: {l: {0x74: {l: {0x6D: {l: {0x69: {l: {0x64: {l: {0x3B: {c: [8739]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x3B: {c: [8741]}}}}}}}}}}}}}}}}}}}}}}}, 0x79: {l: {0x3B: {c: [173]}}, c: [173]}}}, 0x69: {l: {0x67: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [963]}, 0x66: {l: {0x3B: {c: [962]}}}, 0x76: {l: {0x3B: {c: [962]}}}}}}}}}, 0x6D: {l: {0x3B: {c: [8764]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10858]}}}}}}}, 0x65: {l: {0x3B: {c: [8771]}, 0x71: {l: {0x3B: {c: [8771]}}}}}, 0x67: {l: {0x3B: {c: [10910]}, 0x45: {l: {0x3B: {c: [10912]}}}}}, 0x6C: {l: {0x3B: {c: [10909]}, 0x45: {l: {0x3B: {c: [10911]}}}}}, 0x6E: {l: {0x65: {l: {0x3B: {c: [8774]}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10788]}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10610]}}}}}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8592]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x6C: {l: {0x6C: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8726]}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x68: {l: {0x70: {l: {0x3B: {c: [10803]}}}}}}}}}, 0x65: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x73: {l: {0x6C: {l: {0x3B: {c: [10724]}}}}}}}}}}}}}, 0x69: {l: {0x64: {l: {0x3B: {c: [8739]}}}, 0x6C: {l: {0x65: {l: {0x3B: {c: [8995]}}}}}}}, 0x74: {l: {0x3B: {c: [10922]}, 0x65: {l: {0x3B: {c: [10924]}, 0x73: {l: {0x3B: {c: [10924, 65024]}}}}}}}}}, 0x6F: {l: {0x66: {l: {0x74: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1100]}}}}}}}}}, 0x6C: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9023]}}}}}, 0x3B: {c: [10692]}}}, 0x3B: {c: [47]}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120164]}}}}}}}, 0x70: {l: {0x61: {l: {0x64: {l: {0x65: {l: {0x73: {l: {0x3B: {c: [9824]}, 0x75: {l: {0x69: {l: {0x74: {l: {0x3B: {c: [9824]}}}}}}}}}}}}}, 0x72: {l: {0x3B: {c: [8741]}}}}}}}, 0x71: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8851]}, 0x73: {l: {0x3B: {c: [8851, 65024]}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8852]}, 0x73: {l: {0x3B: {c: [8852, 65024]}}}}}}}}}, 0x73: {l: {0x75: {l: {0x62: {l: {0x3B: {c: [8847]}, 0x65: {l: {0x3B: {c: [8849]}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8847]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8849]}}}}}}}}}}}}}, 0x70: {l: {0x3B: {c: [8848]}, 0x65: {l: {0x3B: {c: [8850]}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8848]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8850]}}}}}}}}}}}}}}}}}, 0x75: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [9633]}}}, 0x66: {l: {0x3B: {c: [9642]}}}}}}}, 0x3B: {c: [9633]}, 0x66: {l: {0x3B: {c: [9642]}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8594]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120008]}}}}}, 0x65: {l: {0x74: {l: {0x6D: {l: {0x6E: {l: {0x3B: {c: [8726]}}}}}}}}}, 0x6D: {l: {0x69: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [8995]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8902]}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [9734]}, 0x66: {l: {0x3B: {c: [9733]}}}}}}}, 0x72: {l: {0x61: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x65: {l: {0x70: {l: {0x73: {l: {0x69: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [1013]}}}}}}}}}}}}}}}, 0x70: {l: {0x68: {l: {0x69: {l: {0x3B: {c: [981]}}}}}}}}}}}}}}}}}, 0x6E: {l: {0x73: {l: {0x3B: {c: [175]}}}}}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [8834]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10941]}}}}}}}, 0x45: {l: {0x3B: {c: [10949]}}}, 0x65: {l: {0x3B: {c: [8838]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10947]}}}}}}}}}, 0x6D: {l: {0x75: {l: {0x6C: {l: {0x74: {l: {0x3B: {c: [10945]}}}}}}}}}, 0x6E: {l: {0x45: {l: {0x3B: {c: [10955]}}}, 0x65: {l: {0x3B: {c: [8842]}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10943]}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10617]}}}}}}}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8834]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8838]}, 0x71: {l: {0x3B: {c: [10949]}}}}}}}, 0x6E: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8842]}, 0x71: {l: {0x3B: {c: [10955]}}}}}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [10951]}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [10965]}}}, 0x70: {l: {0x3B: {c: [10963]}}}}}}}}}, 0x63: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10936]}}}}}}}}}}}}}, 0x3B: {c: [8827]}, 0x63: {l: {0x75: {l: {0x72: {l: {0x6C: {l: {0x79: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8829]}}}}}}}}}}}}}}}, 0x65: {l: {0x71: {l: {0x3B: {c: [10928]}}}}}, 0x6E: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [10938]}}}}}}}}}}}}}, 0x65: {l: {0x71: {l: {0x71: {l: {0x3B: {c: [10934]}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8937]}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8831]}}}}}}}}}}}, 0x6D: {l: {0x3B: {c: [8721]}}}, 0x6E: {l: {0x67: {l: {0x3B: {c: [9834]}}}}}, 0x70: {l: {0x31: {l: {0x3B: {c: [185]}}, c: [185]}, 0x32: {l: {0x3B: {c: [178]}}, c: [178]}, 0x33: {l: {0x3B: {c: [179]}}, c: [179]}, 0x3B: {c: [8835]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10942]}}}}}, 0x73: {l: {0x75: {l: {0x62: {l: {0x3B: {c: [10968]}}}}}}}}}, 0x45: {l: {0x3B: {c: [10950]}}}, 0x65: {l: {0x3B: {c: [8839]}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10948]}}}}}}}}}, 0x68: {l: {0x73: {l: {0x6F: {l: {0x6C: {l: {0x3B: {c: [10185]}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [10967]}}}}}}}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10619]}}}}}}}}}, 0x6D: {l: {0x75: {l: {0x6C: {l: {0x74: {l: {0x3B: {c: [10946]}}}}}}}}}, 0x6E: {l: {0x45: {l: {0x3B: {c: [10956]}}}, 0x65: {l: {0x3B: {c: [8843]}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10944]}}}}}}}}}, 0x73: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8835]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8839]}, 0x71: {l: {0x3B: {c: [10950]}}}}}}}, 0x6E: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8843]}, 0x71: {l: {0x3B: {c: [10956]}}}}}}}}}}}}}, 0x69: {l: {0x6D: {l: {0x3B: {c: [10952]}}}}}, 0x75: {l: {0x62: {l: {0x3B: {c: [10964]}}}, 0x70: {l: {0x3B: {c: [10966]}}}}}}}}}}}, 0x77: {l: {0x61: {l: {0x72: {l: {0x68: {l: {0x6B: {l: {0x3B: {c: [10534]}}}}}, 0x72: {l: {0x3B: {c: [8601]}, 0x6F: {l: {0x77: {l: {0x3B: {c: [8601]}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8665]}}}}}}}, 0x6E: {l: {0x77: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10538]}}}}}}}}}}}, 0x7A: {l: {0x6C: {l: {0x69: {l: {0x67: {l: {0x3B: {c: [223]}}, c: [223]}}}}}}}}}, + 0x54: {l: {0x61: {l: {0x62: {l: {0x3B: {c: [9]}}}, 0x75: {l: {0x3B: {c: [932]}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [356]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [354]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1058]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120087]}}}}}, 0x68: {l: {0x65: {l: {0x72: {l: {0x65: {l: {0x66: {l: {0x6F: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [8756]}}}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [920]}}}}}}}, 0x69: {l: {0x63: {l: {0x6B: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8287, 8202]}}}}}}}}}}}}}}}, 0x6E: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8201]}}}}}}}}}}}}}}}}}, 0x48: {l: {0x4F: {l: {0x52: {l: {0x4E: {l: {0x3B: {c: [222]}}, c: [222]}}}}}}}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8764]}, 0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8771]}}}}}}}}}}}, 0x46: {l: {0x75: {l: {0x6C: {l: {0x6C: {l: {0x45: {l: {0x71: {l: {0x75: {l: {0x61: {l: {0x6C: {l: {0x3B: {c: [8773]}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8776]}}}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120139]}}}}}}}, 0x52: {l: {0x41: {l: {0x44: {l: {0x45: {l: {0x3B: {c: [8482]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x70: {l: {0x6C: {l: {0x65: {l: {0x44: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8411]}}}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119983]}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [358]}}}}}}}}}}}, 0x53: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1062]}}}}}, 0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1035]}}}}}}}}}}}, + 0x74: {l: {0x61: {l: {0x72: {l: {0x67: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [8982]}}}}}}}}}, 0x75: {l: {0x3B: {c: [964]}}}}}, 0x62: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [9140]}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [357]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x69: {l: {0x6C: {l: {0x3B: {c: [355]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1090]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8411]}}}}}}}, 0x65: {l: {0x6C: {l: {0x72: {l: {0x65: {l: {0x63: {l: {0x3B: {c: [8981]}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120113]}}}}}, 0x68: {l: {0x65: {l: {0x72: {l: {0x65: {l: {0x34: {l: {0x3B: {c: [8756]}}}, 0x66: {l: {0x6F: {l: {0x72: {l: {0x65: {l: {0x3B: {c: [8756]}}}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [952]}, 0x73: {l: {0x79: {l: {0x6D: {l: {0x3B: {c: [977]}}}}}}}, 0x76: {l: {0x3B: {c: [977]}}}}}}}}}, 0x69: {l: {0x63: {l: {0x6B: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x72: {l: {0x6F: {l: {0x78: {l: {0x3B: {c: [8776]}}}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8764]}}}}}}}}}}}, 0x6E: {l: {0x73: {l: {0x70: {l: {0x3B: {c: [8201]}}}}}}}}}, 0x6B: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8776]}}}}}, 0x73: {l: {0x69: {l: {0x6D: {l: {0x3B: {c: [8764]}}}}}}}}}, 0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [254]}}, c: [254]}}}}}}}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [732]}}}}}}}, 0x6D: {l: {0x65: {l: {0x73: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10801]}}}}}, 0x3B: {c: [8864]}}}, 0x3B: {c: [215]}, 0x64: {l: {0x3B: {c: [10800]}}}}, c: [215]}}}}}, 0x6E: {l: {0x74: {l: {0x3B: {c: [8749]}}}}}}}, 0x6F: {l: {0x65: {l: {0x61: {l: {0x3B: {c: [10536]}}}}}, 0x70: {l: {0x62: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [9014]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10993]}}}}}}}, 0x3B: {c: [8868]}, 0x66: {l: {0x3B: {c: [120165]}, 0x6F: {l: {0x72: {l: {0x6B: {l: {0x3B: {c: [10970]}}}}}}}}}}}, 0x73: {l: {0x61: {l: {0x3B: {c: [10537]}}}}}}}, 0x70: {l: {0x72: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [8244]}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8482]}}}}}}}, 0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [9653]}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x3B: {c: [9663]}}}}}}}}}, 0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [9667]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8884]}}}}}}}}}}}}}, 0x71: {l: {0x3B: {c: [8796]}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [9657]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8885]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [9708]}}}}}}}, 0x65: {l: {0x3B: {c: [8796]}}}, 0x6D: {l: {0x69: {l: {0x6E: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10810]}}}}}}}}}}}, 0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10809]}}}}}}}}}, 0x73: {l: {0x62: {l: {0x3B: {c: [10701]}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [10811]}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x7A: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [9186]}}}}}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120009]}}}, 0x79: {l: {0x3B: {c: [1094]}}}}}, 0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1115]}}}}}}}, 0x74: {l: {0x72: {l: {0x6F: {l: {0x6B: {l: {0x3B: {c: [359]}}}}}}}}}}}, 0x77: {l: {0x69: {l: {0x78: {l: {0x74: {l: {0x3B: {c: [8812]}}}}}}}, 0x6F: {l: {0x68: {l: {0x65: {l: {0x61: {l: {0x64: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8606]}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8608]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, + 0x55: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [218]}}, c: [218]}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8607]}, 0x6F: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x3B: {c: [10569]}}}}}}}}}}}}}}}, 0x62: {l: {0x72: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1038]}}}}}, 0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [364]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [219]}}, c: [219]}}}}}, 0x79: {l: {0x3B: {c: [1059]}}}}}, 0x64: {l: {0x62: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [368]}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120088]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [217]}}, c: [217]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [362]}}}}}}}}}, 0x6E: {l: {0x64: {l: {0x65: {l: {0x72: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [95]}}}}}, 0x72: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [9183]}}}, 0x6B: {l: {0x65: {l: {0x74: {l: {0x3B: {c: [9141]}}}}}}}}}}}}}}}, 0x50: {l: {0x61: {l: {0x72: {l: {0x65: {l: {0x6E: {l: {0x74: {l: {0x68: {l: {0x65: {l: {0x73: {l: {0x69: {l: {0x73: {l: {0x3B: {c: [9181]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x69: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [8899]}, 0x50: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8846]}}}}}}}}}}}}}}}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [370]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120140]}}}}}}}, 0x70: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10514]}}}}}}}, 0x3B: {c: [8593]}, 0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8645]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8657]}}}}}}}}}}}, 0x44: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8597]}}}}}}}}}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8661]}}}}}}}}}}}}}}}}}}}, 0x45: {l: {0x71: {l: {0x75: {l: {0x69: {l: {0x6C: {l: {0x69: {l: {0x62: {l: {0x72: {l: {0x69: {l: {0x75: {l: {0x6D: {l: {0x3B: {c: [10606]}}}}}}}}}}}}}}}}}}}}}}}, 0x70: {l: {0x65: {l: {0x72: {l: {0x4C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8598]}}}}}}}}}}}}}}}}}}}, 0x52: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8599]}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x73: {l: {0x69: {l: {0x3B: {c: [978]}, 0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [933]}}}}}}}}}}}, 0x54: {l: {0x65: {l: {0x65: {l: {0x41: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8613]}}}}}}}}}}}, 0x3B: {c: [8869]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [366]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119984]}}}}}}}, 0x74: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [360]}}}}}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [220]}}, c: [220]}}}}}}}, + 0x75: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [250]}}, c: [250]}}}}}}}, 0x72: {l: {0x72: {l: {0x3B: {c: [8593]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8657]}}}}}}}, 0x62: {l: {0x72: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1118]}}}}}, 0x65: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [365]}}}}}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [251]}}, c: [251]}}}}}, 0x79: {l: {0x3B: {c: [1091]}}}}}, 0x64: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8645]}}}}}}}, 0x62: {l: {0x6C: {l: {0x61: {l: {0x63: {l: {0x3B: {c: [369]}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10606]}}}}}}}}}, 0x66: {l: {0x69: {l: {0x73: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [10622]}}}}}}}}}, 0x72: {l: {0x3B: {c: [120114]}}}}}, 0x67: {l: {0x72: {l: {0x61: {l: {0x76: {l: {0x65: {l: {0x3B: {c: [249]}}, c: [249]}}}}}}}}}, 0x48: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10595]}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x6C: {l: {0x3B: {c: [8639]}}}, 0x72: {l: {0x3B: {c: [8638]}}}}}}}, 0x62: {l: {0x6C: {l: {0x6B: {l: {0x3B: {c: [9600]}}}}}}}}}, 0x6C: {l: {0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [8988]}, 0x65: {l: {0x72: {l: {0x3B: {c: [8988]}}}}}}}}}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8975]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9720]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [363]}}}}}}}, 0x6C: {l: {0x3B: {c: [168]}}, c: [168]}}}, 0x6F: {l: {0x67: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [371]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120166]}}}}}}}, 0x70: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8593]}}}}}}}}}}}, 0x64: {l: {0x6F: {l: {0x77: {l: {0x6E: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x3B: {c: [8597]}}}}}}}}}}}}}}}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x70: {l: {0x6F: {l: {0x6F: {l: {0x6E: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8639]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8638]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [8846]}}}}}}}, 0x73: {l: {0x69: {l: {0x3B: {c: [965]}, 0x68: {l: {0x3B: {c: [978]}}}, 0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [965]}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x6F: {l: {0x77: {l: {0x73: {l: {0x3B: {c: [8648]}}}}}}}}}}}}}}}}}}}, 0x72: {l: {0x63: {l: {0x6F: {l: {0x72: {l: {0x6E: {l: {0x3B: {c: [8989]}, 0x65: {l: {0x72: {l: {0x3B: {c: [8989]}}}}}}}}}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8974]}}}}}}}}}, 0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [367]}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9721]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120010]}}}}}}}, 0x74: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [8944]}}}}}}}, 0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [361]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x3B: {c: [9653]}, 0x66: {l: {0x3B: {c: [9652]}}}}}}}}}, 0x75: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8648]}}}}}}}, 0x6D: {l: {0x6C: {l: {0x3B: {c: [252]}}, c: [252]}}}}}, 0x77: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x3B: {c: [10663]}}}}}}}}}}}}}}}, + 0x76: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x72: {l: {0x74: {l: {0x3B: {c: [10652]}}}}}}}}}, 0x72: {l: {0x65: {l: {0x70: {l: {0x73: {l: {0x69: {l: {0x6C: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [1013]}}}}}}}}}}}}}}}, 0x6B: {l: {0x61: {l: {0x70: {l: {0x70: {l: {0x61: {l: {0x3B: {c: [1008]}}}}}}}}}}}, 0x6E: {l: {0x6F: {l: {0x74: {l: {0x68: {l: {0x69: {l: {0x6E: {l: {0x67: {l: {0x3B: {c: [8709]}}}}}}}}}}}}}}}, 0x70: {l: {0x68: {l: {0x69: {l: {0x3B: {c: [981]}}}}}, 0x69: {l: {0x3B: {c: [982]}}}, 0x72: {l: {0x6F: {l: {0x70: {l: {0x74: {l: {0x6F: {l: {0x3B: {c: [8733]}}}}}}}}}}}}}, 0x72: {l: {0x3B: {c: [8597]}, 0x68: {l: {0x6F: {l: {0x3B: {c: [1009]}}}}}}}, 0x73: {l: {0x69: {l: {0x67: {l: {0x6D: {l: {0x61: {l: {0x3B: {c: [962]}}}}}}}}}, 0x75: {l: {0x62: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x6E: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8842, 65024]}, 0x71: {l: {0x3B: {c: [10955, 65024]}}}}}}}}}}}}}}}}}, 0x70: {l: {0x73: {l: {0x65: {l: {0x74: {l: {0x6E: {l: {0x65: {l: {0x71: {l: {0x3B: {c: [8843, 65024]}, 0x71: {l: {0x3B: {c: [10956, 65024]}}}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x68: {l: {0x65: {l: {0x74: {l: {0x61: {l: {0x3B: {c: [977]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x61: {l: {0x6E: {l: {0x67: {l: {0x6C: {l: {0x65: {l: {0x6C: {l: {0x65: {l: {0x66: {l: {0x74: {l: {0x3B: {c: [8882]}}}}}}}}}, 0x72: {l: {0x69: {l: {0x67: {l: {0x68: {l: {0x74: {l: {0x3B: {c: [8883]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8661]}}}}}}}, 0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10984]}, 0x76: {l: {0x3B: {c: [10985]}}}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1074]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8866]}}}}}}}}}, 0x44: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8872]}}}}}}}}}, 0x65: {l: {0x65: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8891]}}}}}}}, 0x3B: {c: [8744]}, 0x65: {l: {0x71: {l: {0x3B: {c: [8794]}}}}}}}, 0x6C: {l: {0x6C: {l: {0x69: {l: {0x70: {l: {0x3B: {c: [8942]}}}}}}}}}, 0x72: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [124]}}}}}}}, 0x74: {l: {0x3B: {c: [124]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120115]}}}}}, 0x6C: {l: {0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [8882]}}}}}}}}}, 0x6E: {l: {0x73: {l: {0x75: {l: {0x62: {l: {0x3B: {c: [8834, 8402]}}}, 0x70: {l: {0x3B: {c: [8835, 8402]}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120167]}}}}}}}, 0x70: {l: {0x72: {l: {0x6F: {l: {0x70: {l: {0x3B: {c: [8733]}}}}}}}}}, 0x72: {l: {0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [8883]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120011]}}}}}, 0x75: {l: {0x62: {l: {0x6E: {l: {0x45: {l: {0x3B: {c: [10955, 65024]}}}, 0x65: {l: {0x3B: {c: [8842, 65024]}}}}}}}, 0x70: {l: {0x6E: {l: {0x45: {l: {0x3B: {c: [10956, 65024]}}}, 0x65: {l: {0x3B: {c: [8843, 65024]}}}}}}}}}}}, 0x7A: {l: {0x69: {l: {0x67: {l: {0x7A: {l: {0x61: {l: {0x67: {l: {0x3B: {c: [10650]}}}}}}}}}}}}}}}, + 0x56: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10987]}}}}}}}, 0x63: {l: {0x79: {l: {0x3B: {c: [1042]}}}}}, 0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8873]}, 0x6C: {l: {0x3B: {c: [10982]}}}}}}}}}}}, 0x44: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8875]}}}}}}}}}, 0x65: {l: {0x65: {l: {0x3B: {c: [8897]}}}, 0x72: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8214]}}}}}}}, 0x74: {l: {0x3B: {c: [8214]}, 0x69: {l: {0x63: {l: {0x61: {l: {0x6C: {l: {0x42: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [8739]}}}}}}}, 0x4C: {l: {0x69: {l: {0x6E: {l: {0x65: {l: {0x3B: {c: [124]}}}}}}}}}, 0x53: {l: {0x65: {l: {0x70: {l: {0x61: {l: {0x72: {l: {0x61: {l: {0x74: {l: {0x6F: {l: {0x72: {l: {0x3B: {c: [10072]}}}}}}}}}}}}}}}}}}}, 0x54: {l: {0x69: {l: {0x6C: {l: {0x64: {l: {0x65: {l: {0x3B: {c: [8768]}}}}}}}}}}}}}}}}}}}}}, 0x79: {l: {0x54: {l: {0x68: {l: {0x69: {l: {0x6E: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8202]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120089]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120141]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119985]}}}}}}}, 0x76: {l: {0x64: {l: {0x61: {l: {0x73: {l: {0x68: {l: {0x3B: {c: [8874]}}}}}}}}}}}}}, + 0x57: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [372]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8896]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120090]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120142]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119986]}}}}}}}}}, + 0x77: {l: {0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [373]}}}}}}}}}, 0x65: {l: {0x64: {l: {0x62: {l: {0x61: {l: {0x72: {l: {0x3B: {c: [10847]}}}}}}}, 0x67: {l: {0x65: {l: {0x3B: {c: [8743]}, 0x71: {l: {0x3B: {c: [8793]}}}}}}}}}, 0x69: {l: {0x65: {l: {0x72: {l: {0x70: {l: {0x3B: {c: [8472]}}}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120116]}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120168]}}}}}}}, 0x70: {l: {0x3B: {c: [8472]}}}, 0x72: {l: {0x3B: {c: [8768]}, 0x65: {l: {0x61: {l: {0x74: {l: {0x68: {l: {0x3B: {c: [8768]}}}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120012]}}}}}}}}}, + 0x78: {l: {0x63: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [8898]}}}}}, 0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [9711]}}}}}}}, 0x75: {l: {0x70: {l: {0x3B: {c: [8899]}}}}}}}, 0x64: {l: {0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9661]}}}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120117]}}}}}, 0x68: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10231]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10234]}}}}}}}}}, 0x69: {l: {0x3B: {c: [958]}}}, 0x6C: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10229]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10232]}}}}}}}}}, 0x6D: {l: {0x61: {l: {0x70: {l: {0x3B: {c: [10236]}}}}}}}, 0x6E: {l: {0x69: {l: {0x73: {l: {0x3B: {c: [8955]}}}}}}}, 0x6F: {l: {0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [10752]}}}}}}}, 0x70: {l: {0x66: {l: {0x3B: {c: [120169]}}}, 0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10753]}}}}}}}}}, 0x74: {l: {0x69: {l: {0x6D: {l: {0x65: {l: {0x3B: {c: [10754]}}}}}}}}}}}, 0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10230]}}}}}}}, 0x41: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [10233]}}}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120013]}}}}}, 0x71: {l: {0x63: {l: {0x75: {l: {0x70: {l: {0x3B: {c: [10758]}}}}}}}}}}}, 0x75: {l: {0x70: {l: {0x6C: {l: {0x75: {l: {0x73: {l: {0x3B: {c: [10756]}}}}}}}}}, 0x74: {l: {0x72: {l: {0x69: {l: {0x3B: {c: [9651]}}}}}}}}}, 0x76: {l: {0x65: {l: {0x65: {l: {0x3B: {c: [8897]}}}}}}}, 0x77: {l: {0x65: {l: {0x64: {l: {0x67: {l: {0x65: {l: {0x3B: {c: [8896]}}}}}}}}}}}}}, + 0x58: {l: {0x66: {l: {0x72: {l: {0x3B: {c: [120091]}}}}}, 0x69: {l: {0x3B: {c: [926]}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120143]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119987]}}}}}}}}}, + 0x59: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [221]}}, c: [221]}}}}}}}}}, 0x41: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1071]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [374]}}}}}}}, 0x79: {l: {0x3B: {c: [1067]}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120092]}}}}}, 0x49: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1031]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120144]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119988]}}}}}}}, 0x55: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1070]}}}}}}}, 0x75: {l: {0x6D: {l: {0x6C: {l: {0x3B: {c: [376]}}}}}}}}}, + 0x79: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [253]}}, c: [253]}}}}}, 0x79: {l: {0x3B: {c: [1103]}}}}}}}, 0x63: {l: {0x69: {l: {0x72: {l: {0x63: {l: {0x3B: {c: [375]}}}}}}}, 0x79: {l: {0x3B: {c: [1099]}}}}}, 0x65: {l: {0x6E: {l: {0x3B: {c: [165]}}, c: [165]}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120118]}}}}}, 0x69: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1111]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120170]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120014]}}}}}}}, 0x75: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1102]}}}}}, 0x6D: {l: {0x6C: {l: {0x3B: {c: [255]}}, c: [255]}}}}}}}, + 0x5A: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [377]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [381]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1047]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [379]}}}}}}}, 0x65: {l: {0x72: {l: {0x6F: {l: {0x57: {l: {0x69: {l: {0x64: {l: {0x74: {l: {0x68: {l: {0x53: {l: {0x70: {l: {0x61: {l: {0x63: {l: {0x65: {l: {0x3B: {c: [8203]}}}}}}}}}}}}}}}}}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [918]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [8488]}}}}}, 0x48: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1046]}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [8484]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [119989]}}}}}}}}}, + 0x7A: {l: {0x61: {l: {0x63: {l: {0x75: {l: {0x74: {l: {0x65: {l: {0x3B: {c: [378]}}}}}}}}}}}, 0x63: {l: {0x61: {l: {0x72: {l: {0x6F: {l: {0x6E: {l: {0x3B: {c: [382]}}}}}}}}}, 0x79: {l: {0x3B: {c: [1079]}}}}}, 0x64: {l: {0x6F: {l: {0x74: {l: {0x3B: {c: [380]}}}}}}}, 0x65: {l: {0x65: {l: {0x74: {l: {0x72: {l: {0x66: {l: {0x3B: {c: [8488]}}}}}}}}}, 0x74: {l: {0x61: {l: {0x3B: {c: [950]}}}}}}}, 0x66: {l: {0x72: {l: {0x3B: {c: [120119]}}}}}, 0x68: {l: {0x63: {l: {0x79: {l: {0x3B: {c: [1078]}}}}}}}, 0x69: {l: {0x67: {l: {0x72: {l: {0x61: {l: {0x72: {l: {0x72: {l: {0x3B: {c: [8669]}}}}}}}}}}}}}, 0x6F: {l: {0x70: {l: {0x66: {l: {0x3B: {c: [120171]}}}}}}}, 0x73: {l: {0x63: {l: {0x72: {l: {0x3B: {c: [120015]}}}}}}}, 0x77: {l: {0x6A: {l: {0x3B: {c: [8205]}}}, 0x6E: {l: {0x6A: {l: {0x3B: {c: [8204]}}}}}}}}} }; \ No newline at end of file diff --git a/lib/tokenization/preprocessor.js b/lib/tokenization/preprocessor.js index 0ca40aa85..2e5632b98 100644 --- a/lib/tokenization/preprocessor.js +++ b/lib/tokenization/preprocessor.js @@ -1,98 +1,100 @@ -var UNICODE = require('../common/unicode'); - -//Aliases -var $ = UNICODE.CODE_POINTS; - -//Const -var CARRIAGE_RETURN_NEW_LINE_REGEX = /\r\n?/g; - -//Utils - -//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline -//this functions if they will be situated in another module due to context switch. -//Always perform inlining check before modifying this functions ('node --trace-inlining'). -function isReservedCodePoint(cp) { - return cp >= 0xD800 && cp <= 0xDFFF || cp > 0x10FFFF; -} - -function isSurrogatePair(cp1, cp2) { - return cp1 >= 0xD800 && cp1 <= 0xDBFF && cp2 >= 0xDC00 && cp2 <= 0xDFFF; -} - -function getSurrogatePairCodePoint(cp1, cp2) { - return (cp1 - 0xD800) * 0x400 + 0x2400 + cp2; -} - -//Preprocessor -//NOTE: HTML input preprocessing -//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream) -var Preprocessor = module.exports = function (html) { - this.write(html); - - //NOTE: one leading U+FEFF BYTE ORDER MARK character must be ignored if any are present in the input stream. - this.pos = this.html.charCodeAt(0) === $.BOM ? 0 : -1; - - this.gapStack = []; - this.lastGapPos = -1; -}; - -Preprocessor.prototype.write = function (html) { - //NOTE: All U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters. - //Any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character - //must be ignored. - html = html.replace(CARRIAGE_RETURN_NEW_LINE_REGEX, '\n'); - - if (this.html) { - this.html = this.html.substring(0, this.pos + 1) + - html + - this.html.substring(this.pos + 1, this.html.length); - - } - else - this.html = html; - - - this.lastCharPos = this.html.length - 1; -}; - -Preprocessor.prototype.advanceAndPeekCodePoint = function () { - this.pos++; - - if (this.pos > this.lastCharPos) - return $.EOF; - - var cp = this.html.charCodeAt(this.pos); - - //OPTIMIZATION: first perform check if the code point in the allowed range that covers most common - //HTML input (e.g. ASCII codes) to avoid performance-cost operations for high-range code points. - if (cp >= 0xD800) { - //NOTE: try to peek a surrogate pair - if (this.pos !== this.lastCharPos) { - var nextCp = this.html.charCodeAt(this.pos + 1); - - if (isSurrogatePair(cp, nextCp)) { - //NOTE: we have a surrogate pair. Peek pair character and recalculate code point. - this.pos++; - cp = getSurrogatePairCodePoint(cp, nextCp); - - //NOTE: add gap that should be avoided during retreat - this.gapStack.push(this.lastGapPos); - this.lastGapPos = this.pos; - } - } - - if (isReservedCodePoint(cp)) - cp = $.REPLACEMENT_CHARACTER; - } - - return cp; -}; - -Preprocessor.prototype.retreat = function () { - if (this.pos === this.lastGapPos) { - this.lastGapPos = this.gapStack.pop(); - this.pos--; - } - - this.pos--; -}; +'use strict'; + +var UNICODE = require('../common/unicode'); + +//Aliases +var $ = UNICODE.CODE_POINTS; + +//Const +var CARRIAGE_RETURN_NEW_LINE_REGEX = /\r\n?/g; + +//Utils + +//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline +//this functions if they will be situated in another module due to context switch. +//Always perform inlining check before modifying this functions ('node --trace-inlining'). +function isReservedCodePoint(cp) { + return cp >= 0xD800 && cp <= 0xDFFF || cp > 0x10FFFF; +} + +function isSurrogatePair(cp1, cp2) { + return cp1 >= 0xD800 && cp1 <= 0xDBFF && cp2 >= 0xDC00 && cp2 <= 0xDFFF; +} + +function getSurrogatePairCodePoint(cp1, cp2) { + return (cp1 - 0xD800) * 0x400 + 0x2400 + cp2; +} + +//Preprocessor +//NOTE: HTML input preprocessing +//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream) +var Preprocessor = module.exports = function (html) { + this.write(html); + + //NOTE: one leading U+FEFF BYTE ORDER MARK character must be ignored if any are present in the input stream. + this.pos = this.html.charCodeAt(0) === $.BOM ? 0 : -1; + + this.gapStack = []; + this.lastGapPos = -1; +}; + +Preprocessor.prototype.write = function (html) { + //NOTE: All U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters. + //Any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character + //must be ignored. + html = html.replace(CARRIAGE_RETURN_NEW_LINE_REGEX, '\n'); + + if (this.html) { + this.html = this.html.substring(0, this.pos + 1) + + html + + this.html.substring(this.pos + 1, this.html.length); + + } + else + this.html = html; + + + this.lastCharPos = this.html.length - 1; +}; + +Preprocessor.prototype.advanceAndPeekCodePoint = function () { + this.pos++; + + if (this.pos > this.lastCharPos) + return $.EOF; + + var cp = this.html.charCodeAt(this.pos); + + //OPTIMIZATION: first perform check if the code point in the allowed range that covers most common + //HTML input (e.g. ASCII codes) to avoid performance-cost operations for high-range code points. + if (cp >= 0xD800) { + //NOTE: try to peek a surrogate pair + if (this.pos !== this.lastCharPos) { + var nextCp = this.html.charCodeAt(this.pos + 1); + + if (isSurrogatePair(cp, nextCp)) { + //NOTE: we have a surrogate pair. Peek pair character and recalculate code point. + this.pos++; + cp = getSurrogatePairCodePoint(cp, nextCp); + + //NOTE: add gap that should be avoided during retreat + this.gapStack.push(this.lastGapPos); + this.lastGapPos = this.pos; + } + } + + if (isReservedCodePoint(cp)) + cp = $.REPLACEMENT_CHARACTER; + } + + return cp; +}; + +Preprocessor.prototype.retreat = function () { + if (this.pos === this.lastGapPos) { + this.lastGapPos = this.gapStack.pop(); + this.pos--; + } + + this.pos--; +}; diff --git a/lib/tokenization/tokenizer.js b/lib/tokenization/tokenizer.js index be53cdef9..ba6f981ba 100644 --- a/lib/tokenization/tokenizer.js +++ b/lib/tokenization/tokenizer.js @@ -1,2300 +1,2302 @@ -var Preprocessor = require('./preprocessor'), - UNICODE = require('../common/unicode'), - NAMED_ENTITY_TRIE = require('./named_entity_trie'); - -//Aliases -var $ = UNICODE.CODE_POINTS, - $$ = UNICODE.CODE_POINT_SEQUENCES; - -//Replacement code points for numeric entities -var NUMERIC_ENTITY_REPLACEMENTS = { - 0x00: 0xFFFD, 0x0D: 0x000D, 0x80: 0x20AC, 0x81: 0x0081, 0x82: 0x201A, 0x83: 0x0192, 0x84: 0x201E, - 0x85: 0x2026, 0x86: 0x2020, 0x87: 0x2021, 0x88: 0x02C6, 0x89: 0x2030, 0x8A: 0x0160, 0x8B: 0x2039, - 0x8C: 0x0152, 0x8D: 0x008D, 0x8E: 0x017D, 0x8F: 0x008F, 0x90: 0x0090, 0x91: 0x2018, 0x92: 0x2019, - 0x93: 0x201C, 0x94: 0x201D, 0x95: 0x2022, 0x96: 0x2013, 0x97: 0x2014, 0x98: 0x02DC, 0x99: 0x2122, - 0x9A: 0x0161, 0x9B: 0x203A, 0x9C: 0x0153, 0x9D: 0x009D, 0x9E: 0x017E, 0x9F: 0x0178 -}; - -//States -var DATA_STATE = 'DATA_STATE', - CHARACTER_REFERENCE_IN_DATA_STATE = 'CHARACTER_REFERENCE_IN_DATA_STATE', - RCDATA_STATE = 'RCDATA_STATE', - CHARACTER_REFERENCE_IN_RCDATA_STATE = 'CHARACTER_REFERENCE_IN_RCDATA_STATE', - RAWTEXT_STATE = 'RAWTEXT_STATE', - SCRIPT_DATA_STATE = 'SCRIPT_DATA_STATE', - PLAINTEXT_STATE = 'PLAINTEXT_STATE', - TAG_OPEN_STATE = 'TAG_OPEN_STATE', - END_TAG_OPEN_STATE = 'END_TAG_OPEN_STATE', - TAG_NAME_STATE = 'TAG_NAME_STATE', - RCDATA_LESS_THAN_SIGN_STATE = 'RCDATA_LESS_THAN_SIGN_STATE', - RCDATA_END_TAG_OPEN_STATE = 'RCDATA_END_TAG_OPEN_STATE', - RCDATA_END_TAG_NAME_STATE = 'RCDATA_END_TAG_NAME_STATE', - RAWTEXT_LESS_THAN_SIGN_STATE = 'RAWTEXT_LESS_THAN_SIGN_STATE', - RAWTEXT_END_TAG_OPEN_STATE = 'RAWTEXT_END_TAG_OPEN_STATE', - RAWTEXT_END_TAG_NAME_STATE = 'RAWTEXT_END_TAG_NAME_STATE', - SCRIPT_DATA_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_LESS_THAN_SIGN_STATE', - SCRIPT_DATA_END_TAG_OPEN_STATE = 'SCRIPT_DATA_END_TAG_OPEN_STATE', - SCRIPT_DATA_END_TAG_NAME_STATE = 'SCRIPT_DATA_END_TAG_NAME_STATE', - SCRIPT_DATA_ESCAPE_START_STATE = 'SCRIPT_DATA_ESCAPE_START_STATE', - SCRIPT_DATA_ESCAPE_START_DASH_STATE = 'SCRIPT_DATA_ESCAPE_START_DASH_STATE', - SCRIPT_DATA_ESCAPED_STATE = 'SCRIPT_DATA_ESCAPED_STATE', - SCRIPT_DATA_ESCAPED_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_STATE', - SCRIPT_DATA_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_DASH_STATE', - SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE', - SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE', - SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE', - SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE', - SCRIPT_DATA_DOUBLE_ESCAPED_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_STATE', - SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE', - SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE', - SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE', - SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE', - BEFORE_ATTRIBUTE_NAME_STATE = 'BEFORE_ATTRIBUTE_NAME_STATE', - ATTRIBUTE_NAME_STATE = 'ATTRIBUTE_NAME_STATE', - AFTER_ATTRIBUTE_NAME_STATE = 'AFTER_ATTRIBUTE_NAME_STATE', - BEFORE_ATTRIBUTE_VALUE_STATE = 'BEFORE_ATTRIBUTE_VALUE_STATE', - ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE', - ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE', - ATTRIBUTE_VALUE_UNQUOTED_STATE = 'ATTRIBUTE_VALUE_UNQUOTED_STATE', - CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE = 'CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE', - AFTER_ATTRIBUTE_VALUE_QUOTED_STATE = 'AFTER_ATTRIBUTE_VALUE_QUOTED_STATE', - SELF_CLOSING_START_TAG_STATE = 'SELF_CLOSING_START_TAG_STATE', - BOGUS_COMMENT_STATE = 'BOGUS_COMMENT_STATE', - MARKUP_DECLARATION_OPEN_STATE = 'MARKUP_DECLARATION_OPEN_STATE', - COMMENT_START_STATE = 'COMMENT_START_STATE', - COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE', - COMMENT_STATE = 'COMMENT_STATE', - COMMENT_END_DASH_STATE = 'COMMENT_END_DASH_STATE', - COMMENT_END_STATE = 'COMMENT_END_STATE', - COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE', - DOCTYPE_STATE = 'DOCTYPE_STATE', - BEFORE_DOCTYPE_NAME_STATE = 'BEFORE_DOCTYPE_NAME_STATE', - DOCTYPE_NAME_STATE = 'DOCTYPE_NAME_STATE', - AFTER_DOCTYPE_NAME_STATE = 'AFTER_DOCTYPE_NAME_STATE', - AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE = 'AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE', - BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE', - DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE', - DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE', - AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE', - BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE = 'BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE', - AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE = 'AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE', - BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE', - DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE', - DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE', - AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE', - BOGUS_DOCTYPE_STATE = 'BOGUS_DOCTYPE_STATE', - CDATA_SECTION_STATE = 'CDATA_SECTION_STATE'; - -//Utils - -//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline -//this functions if they will be situated in another module due to context switch. -//Always perform inlining check before modifying this functions ('node --trace-inlining'). -function isWhitespace(cp) { - return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED; -} - -function isAsciiDigit(cp) { - return cp >= $.DIGIT_0 && cp <= $.DIGIT_9; -} - -function isAsciiUpper(cp) { - return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z; -} - -function isAsciiLower(cp) { - return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z; -} - -function isAsciiAlphaNumeric(cp) { - return isAsciiDigit(cp) || isAsciiUpper(cp) || isAsciiLower(cp); -} - -function isDigit(cp, isHex) { - return isAsciiDigit(cp) || (isHex && ((cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_F) || - (cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_F))); -} - -function isReservedCodePoint(cp) { - return cp >= 0xD800 && cp <= 0xDFFF || cp > 0x10FFFF; -} - -function toAsciiLowerCodePoint(cp) { - return cp + 0x0020; -} - -//NOTE: String.fromCharCode() function can handle only characters from BMP subset. -//So, we need to workaround this manually. -//(see: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode#Getting_it_to_work_with_higher_values) -function toChar(cp) { - if (cp <= 0xFFFF) - return String.fromCharCode(cp); - - cp -= 0x10000; - return String.fromCharCode(cp >>> 10 & 0x3FF | 0xD800) + String.fromCharCode(0xDC00 | cp & 0x3FF); -} - -function toAsciiLowerChar(cp) { - return String.fromCharCode(toAsciiLowerCodePoint(cp)); -} - -//Tokenizer -var Tokenizer = module.exports = function (html) { - this.preprocessor = new Preprocessor(html); - - this.tokenQueue = []; - - this.allowCDATA = false; - - this.state = DATA_STATE; - this.returnState = ''; - - this.consumptionPos = 0; - - this.tempBuff = []; - this.additionalAllowedCp = void 0; - this.lastStartTagName = ''; - - this.currentCharacterToken = null; - this.currentToken = null; - this.currentAttr = null; -}; - -//Token types -Tokenizer.CHARACTER_TOKEN = 'CHARACTER_TOKEN'; -Tokenizer.NULL_CHARACTER_TOKEN = 'NULL_CHARACTER_TOKEN'; -Tokenizer.WHITESPACE_CHARACTER_TOKEN = 'WHITESPACE_CHARACTER_TOKEN'; -Tokenizer.START_TAG_TOKEN = 'START_TAG_TOKEN'; -Tokenizer.END_TAG_TOKEN = 'END_TAG_TOKEN'; -Tokenizer.COMMENT_TOKEN = 'COMMENT_TOKEN'; -Tokenizer.DOCTYPE_TOKEN = 'DOCTYPE_TOKEN'; -Tokenizer.EOF_TOKEN = 'EOF_TOKEN'; - -//States export -Tokenizer.DATA_STATE = DATA_STATE; -Tokenizer.RCDATA_STATE = RCDATA_STATE; -Tokenizer.RAWTEXT_STATE = RAWTEXT_STATE; -Tokenizer.SCRIPT_DATA_STATE = SCRIPT_DATA_STATE; -Tokenizer.PLAINTEXT_STATE = PLAINTEXT_STATE; - -//Static -Tokenizer.getTokenAttr = function (token, attrName) { - for (var i = token.attrs.length - 1; i >= 0; i--) { - if (token.attrs[i].name === attrName) - return token.attrs[i].value; - } - - return null; -}; - -//Get token -Tokenizer.prototype.getNextToken = function () { - while (!this.tokenQueue.length) - this[this.state](this._consume()); - - return this.tokenQueue.shift(); -}; - -//Consumption -Tokenizer.prototype._consume = function () { - this.consumptionPos++; - return this.preprocessor.advanceAndPeekCodePoint(); -}; - -Tokenizer.prototype._unconsume = function () { - this.consumptionPos--; - this.preprocessor.retreat(); -}; - -Tokenizer.prototype._unconsumeSeveral = function (count) { - while (count--) - this._unconsume(); -}; - -Tokenizer.prototype._reconsumeInState = function (state) { - this.state = state; - this._unconsume(); -}; - -Tokenizer.prototype._consumeSubsequentIfMatch = function (pattern, startCp, caseSensitive) { - var rollbackPos = this.consumptionPos, - isMatch = true, - patternLength = pattern.length, - patternPos = 0, - cp = startCp, - patternCp = void 0; - - for (; patternPos < patternLength; patternPos++) { - if (patternPos > 0) - cp = this._consume(); - - if (cp === $.EOF) { - isMatch = false; - break; - } - - patternCp = pattern[patternPos]; - - if (cp !== patternCp && (caseSensitive || cp !== toAsciiLowerCodePoint(patternCp))) { - isMatch = false; - break; - } - } - - if (!isMatch) - this._unconsumeSeveral(this.consumptionPos - rollbackPos); - - return isMatch; -}; - -//Lookahead -Tokenizer.prototype._lookahead = function () { - var cp = this.preprocessor.advanceAndPeekCodePoint(); - this.preprocessor.retreat(); - - return cp; -}; - -//Temp buffer -Tokenizer.prototype.isTempBufferEqualToScriptString = function () { - if (this.tempBuff.length !== $$.SCRIPT_STRING.length) - return false; - - for (var i = 0; i < this.tempBuff.length; i++) { - if (this.tempBuff[i] !== $$.SCRIPT_STRING[i]) - return false; - } - - return true; -}; - -//Token creation -Tokenizer.prototype.buildStartTagToken = function (tagName) { - return { - type: Tokenizer.START_TAG_TOKEN, - tagName: tagName, - selfClosing: false, - attrs: [] - }; -}; - -Tokenizer.prototype.buildEndTagToken = function (tagName) { - return { - type: Tokenizer.END_TAG_TOKEN, - tagName: tagName, - ignored: false, - attrs: [] - }; -}; - -Tokenizer.prototype._createStartTagToken = function (tagNameFirstCh) { - this.currentToken = this.buildStartTagToken(tagNameFirstCh); -}; - -Tokenizer.prototype._createEndTagToken = function (tagNameFirstCh) { - this.currentToken = this.buildEndTagToken(tagNameFirstCh); -}; - -Tokenizer.prototype._createCommentToken = function () { - this.currentToken = { - type: Tokenizer.COMMENT_TOKEN, - data: '' - }; -}; - -Tokenizer.prototype._createDoctypeToken = function (doctypeNameFirstCh) { - this.currentToken = { - type: Tokenizer.DOCTYPE_TOKEN, - name: doctypeNameFirstCh || '', - forceQuirks: false, - publicId: null, - systemId: null - }; -}; - -//Tag attributes -Tokenizer.prototype._createAttr = function (attrNameFirstCh) { - this.currentAttr = { - name: attrNameFirstCh, - value: '' - }; -}; - -Tokenizer.prototype._isDuplicateAttr = function () { - return Tokenizer.getTokenAttr(this.currentToken, this.currentAttr.name) !== null; -}; - -Tokenizer.prototype._leaveAttrName = function (toState) { - this.state = toState; - - if (!this._isDuplicateAttr()) - this.currentToken.attrs.push(this.currentAttr); -}; - -//Appropriate end tag token -//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#appropriate-end-tag-token) -Tokenizer.prototype._isAppropriateEndTagToken = function () { - return this.lastStartTagName === this.currentToken.tagName; -}; - -//Token emission -Tokenizer.prototype._emitCurrentToken = function () { - this._emitCurrentCharacterToken(); - - //NOTE: store emited start tag's tagName to determine is the following end tag token is appropriate. - if (this.currentToken.type === Tokenizer.START_TAG_TOKEN) - this.lastStartTagName = this.currentToken.tagName; - - this.tokenQueue.push(this.currentToken); - this.currentToken = null; -}; - -Tokenizer.prototype._emitCurrentCharacterToken = function () { - if (this.currentCharacterToken) { - this.tokenQueue.push(this.currentCharacterToken); - this.currentCharacterToken = null; - } -}; - -Tokenizer.prototype._emitEOFToken = function () { - this._emitCurrentCharacterToken(); - this.tokenQueue.push({type: Tokenizer.EOF_TOKEN}); -}; - -//Characters emission - -//OPTIMIZATION: specification uses only one type of character tokens (one token per character). -//This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters. -//If we have a sequence of characters that belong to the same group, parser can process it -//as a single solid character token. -//So, there are 3 types of character tokens in parse5: -//1)NULL_CHARACTER_TOKEN - \u0000-character sequences (e.g. '\u0000\u0000\u0000') -//2)WHITESPACE_CHARACTER_TOKEN - any whitespace/new-line character sequences (e.g. '\n \r\t \f') -//3)CHARACTER_TOKEN - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^') -Tokenizer.prototype._appendCharToCurrentCharacterToken = function (type, ch) { - if (this.currentCharacterToken && this.currentCharacterToken.type !== type) - this._emitCurrentCharacterToken(); - - if (this.currentCharacterToken) - this.currentCharacterToken.chars += ch; - - else { - this.currentCharacterToken = { - type: type, - chars: ch - }; - } -}; - -Tokenizer.prototype._emitCodePoint = function (cp) { - var type = Tokenizer.CHARACTER_TOKEN; - - if (isWhitespace(cp)) - type = Tokenizer.WHITESPACE_CHARACTER_TOKEN; - - else if (cp === $.NULL) - type = Tokenizer.NULL_CHARACTER_TOKEN; - - this._appendCharToCurrentCharacterToken(type, toChar(cp)); -}; - -Tokenizer.prototype._emitSeveralCodePoints = function (codePoints) { - for (var i = 0; i < codePoints.length; i++) - this._emitCodePoint(codePoints[i]); -}; - -//NOTE: used then we emit character explicitly. This is always a non-whitespace and a non-null character. -//So we can avoid additional checks here. -Tokenizer.prototype._emitChar = function (ch) { - this._appendCharToCurrentCharacterToken(Tokenizer.CHARACTER_TOKEN, ch); -}; - -//Character reference tokenization -Tokenizer.prototype._consumeNumericEntity = function (isHex) { - var digits = '', - nextCp = void 0; - - do { - digits += toChar(this._consume()); - nextCp = this._lookahead(); - } while (nextCp !== $.EOF && isDigit(nextCp, isHex)); - - if (this._lookahead() === $.SEMICOLON) - this._consume(); - - var referencedCp = parseInt(digits, isHex ? 16 : 10), - replacement = NUMERIC_ENTITY_REPLACEMENTS[referencedCp]; - - if (replacement) - return replacement; - - if (isReservedCodePoint(referencedCp)) - return $.REPLACEMENT_CHARACTER; - - return referencedCp; -}; - -Tokenizer.prototype._consumeNamedEntity = function (startCp, inAttr) { - var referencedCodePoints = null, - entityCodePointsCount = 0, - cp = startCp, - leaf = NAMED_ENTITY_TRIE[cp], - consumedCount = 1, - semicolonTerminated = false; - - for (; leaf && cp !== $.EOF; cp = this._consume(), consumedCount++, leaf = leaf.l && leaf.l[cp]) { - if (leaf.c) { - //NOTE: we have at least one named reference match. But we don't stop lookup at this point, - //because longer matches still can be found (e.g. '¬' and '∉') except the case - //then found match is terminated by semicolon. - referencedCodePoints = leaf.c; - entityCodePointsCount = consumedCount; - - if (cp === $.SEMICOLON) { - semicolonTerminated = true; - break; - } - } - } - - if (referencedCodePoints) { - if (!semicolonTerminated) { - //NOTE: unconsume excess (e.g. 'it' in '¬it') - this._unconsumeSeveral(consumedCount - entityCodePointsCount); - - //NOTE: If the character reference is being consumed as part of an attribute and the next character - //is either a U+003D EQUALS SIGN character (=) or an alphanumeric ASCII character, then, for historical - //reasons, all the characters that were matched after the U+0026 AMPERSAND character (&) must be - //unconsumed, and nothing is returned. - //However, if this next character is in fact a U+003D EQUALS SIGN character (=), then this is a - //parse error, because some legacy user agents will misinterpret the markup in those cases. - //(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tokenizing-character-references) - if (inAttr) { - var nextCp = this._lookahead(); - - if (nextCp === $.EQUALS_SIGN || isAsciiAlphaNumeric(nextCp)) { - this._unconsumeSeveral(entityCodePointsCount); - return null; - } - } - } - - return referencedCodePoints; - } - - this._unconsumeSeveral(consumedCount); - - return null; -}; - -Tokenizer.prototype._consumeCharacterReference = function (startCp, inAttr) { - if (isWhitespace(startCp) || startCp === $.GREATER_THAN_SIGN || startCp === $.AMPERSAND || - startCp === this.additionalAllowedCp || startCp === $.EOF) { - //NOTE: not a character reference. No characters are consumed, and nothing is returned. - this._unconsume(); - return null; - } - - else if (startCp === $.NUMBER_SIGN) { - //NOTE: we have a numeric entity candidate, now we should determine if it's hex or decimal - var isHex = false, - nextCp = this._lookahead(); - - if (nextCp === $.LATIN_SMALL_X || nextCp === $.LATIN_CAPITAL_X) { - this._consume(); - isHex = true; - } - - nextCp = this._lookahead(); - - //NOTE: if we have at least one digit this is a numeric entity for sure, so we consume it - if (nextCp !== $.EOF && isDigit(nextCp, isHex)) - return [this._consumeNumericEntity(isHex)]; - - else { - //NOTE: otherwise this is a bogus number entity and a parse error. Unconsume the number sign - //and the 'x'-character if appropriate. - this._unconsumeSeveral(isHex ? 2 : 1); - return null; - } - } - - else - return this._consumeNamedEntity(startCp, inAttr); -}; - -//State machine -var _ = Tokenizer.prototype; - -//12.2.4.1 Data state -//------------------------------------------------------------------ -_[DATA_STATE] = function dataState(cp) { - if (cp === $.AMPERSAND) - this.state = CHARACTER_REFERENCE_IN_DATA_STATE; - - else if (cp === $.LESS_THAN_SIGN) - this.state = TAG_OPEN_STATE; - - else if (cp === $.NULL) - this._emitCodePoint(cp); - - else if (cp === $.EOF) - this._emitEOFToken(); - - else - this._emitCodePoint(cp); -}; - - -//12.2.4.2 Character reference in data state -//------------------------------------------------------------------ -_[CHARACTER_REFERENCE_IN_DATA_STATE] = function characterReferenceInDataState(cp) { - this.state = DATA_STATE; - this.additionalAllowedCp = void 0; - - var referencedCodePoints = this._consumeCharacterReference(cp, false); - - if (referencedCodePoints) - this._emitSeveralCodePoints(referencedCodePoints); - else - this._emitChar('&'); -}; - - -//12.2.4.3 RCDATA state -//------------------------------------------------------------------ -_[RCDATA_STATE] = function rcdataState(cp) { - if (cp === $.AMPERSAND) - this.state = CHARACTER_REFERENCE_IN_RCDATA_STATE; - - else if (cp === $.LESS_THAN_SIGN) - this.state = RCDATA_LESS_THAN_SIGN_STATE; - - else if (cp === $.NULL) - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - - else if (cp === $.EOF) - this._emitEOFToken(); - - else - this._emitCodePoint(cp); -}; - - -//12.2.4.4 Character reference in RCDATA state -//------------------------------------------------------------------ -_[CHARACTER_REFERENCE_IN_RCDATA_STATE] = function characterReferenceInRcdataState(cp) { - this.state = RCDATA_STATE; - this.additionalAllowedCp = void 0; - - var referencedCodePoints = this._consumeCharacterReference(cp, false); - - if (referencedCodePoints) - this._emitSeveralCodePoints(referencedCodePoints); - else - this._emitChar('&'); -}; - - -//12.2.4.5 RAWTEXT state -//------------------------------------------------------------------ -_[RAWTEXT_STATE] = function rawtextState(cp) { - if (cp === $.LESS_THAN_SIGN) - this.state = RAWTEXT_LESS_THAN_SIGN_STATE; - - else if (cp === $.NULL) - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - - else if (cp === $.EOF) - this._emitEOFToken(); - - else - this._emitCodePoint(cp); -}; - - -//12.2.4.6 Script data state -//------------------------------------------------------------------ -_[SCRIPT_DATA_STATE] = function scriptDataState(cp) { - if (cp === $.LESS_THAN_SIGN) - this.state = SCRIPT_DATA_LESS_THAN_SIGN_STATE; - - else if (cp === $.NULL) - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - - else if (cp === $.EOF) - this._emitEOFToken(); - - else - this._emitCodePoint(cp); -}; - - -//12.2.4.7 PLAINTEXT state -//------------------------------------------------------------------ -_[PLAINTEXT_STATE] = function plaintextState(cp) { - if (cp === $.NULL) - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - - else if (cp === $.EOF) - this._emitEOFToken(); - - else - this._emitCodePoint(cp); -}; - - -//12.2.4.8 Tag open state -//------------------------------------------------------------------ -_[TAG_OPEN_STATE] = function tagOpenState(cp) { - if (cp === $.EXCLAMATION_MARK) - this.state = MARKUP_DECLARATION_OPEN_STATE; - - else if (cp === $.SOLIDUS) - this.state = END_TAG_OPEN_STATE; - - else if (isAsciiUpper(cp)) { - this._createStartTagToken(toAsciiLowerChar(cp)); - this.state = TAG_NAME_STATE; - } - - else if (isAsciiLower(cp)) { - this._createStartTagToken(toChar(cp)); - this.state = TAG_NAME_STATE; - } - - else if (cp === $.QUESTION_MARK) { - //NOTE: call bogus comment state directly with current consumed character to avoid unnecessary reconsumption. - this[BOGUS_COMMENT_STATE](cp); - } - - else { - this._emitChar('<'); - this._reconsumeInState(DATA_STATE); - } -}; - - -//12.2.4.9 End tag open state -//------------------------------------------------------------------ -_[END_TAG_OPEN_STATE] = function endTagOpenState(cp) { - if (isAsciiUpper(cp)) { - this._createEndTagToken(toAsciiLowerChar(cp)); - this.state = TAG_NAME_STATE; - } - - else if (isAsciiLower(cp)) { - this._createEndTagToken(toChar(cp)); - this.state = TAG_NAME_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) - this.state = DATA_STATE; - - else if (cp === $.EOF) { - this._reconsumeInState(DATA_STATE); - this._emitChar('<'); - this._emitChar('/'); - } - - else { - //NOTE: call bogus comment state directly with current consumed character to avoid unnecessary reconsumption. - this[BOGUS_COMMENT_STATE](cp); - } -}; - - -//12.2.4.10 Tag name state -//------------------------------------------------------------------ -_[TAG_NAME_STATE] = function tagNameState(cp) { - if (isWhitespace(cp)) - this.state = BEFORE_ATTRIBUTE_NAME_STATE; - - else if (cp === $.SOLIDUS) - this.state = SELF_CLOSING_START_TAG_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (isAsciiUpper(cp)) - this.currentToken.tagName += toAsciiLowerChar(cp); - - else if (cp === $.NULL) - this.currentToken.tagName += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this.currentToken.tagName += toChar(cp); -}; - - -//12.2.4.11 RCDATA less-than sign state -//------------------------------------------------------------------ -_[RCDATA_LESS_THAN_SIGN_STATE] = function rcdataLessThanSignState(cp) { - if (cp === $.SOLIDUS) { - this.tempBuff = []; - this.state = RCDATA_END_TAG_OPEN_STATE; - } - - else { - this._emitChar('<'); - this._reconsumeInState(RCDATA_STATE); - } -}; - - -//12.2.4.12 RCDATA end tag open state -//------------------------------------------------------------------ -_[RCDATA_END_TAG_OPEN_STATE] = function rcdataEndTagOpenState(cp) { - if (isAsciiUpper(cp)) { - this._createEndTagToken(toAsciiLowerChar(cp)); - this.tempBuff.push(cp); - this.state = RCDATA_END_TAG_NAME_STATE; - } - - else if (isAsciiLower(cp)) { - this._createEndTagToken(toChar(cp)); - this.tempBuff.push(cp); - this.state = RCDATA_END_TAG_NAME_STATE; - } - - else { - this._emitChar('<'); - this._emitChar('/'); - this._reconsumeInState(RCDATA_STATE); - } -}; - - -//12.2.4.13 RCDATA end tag name state -//------------------------------------------------------------------ -_[RCDATA_END_TAG_NAME_STATE] = function rcdataEndTagNameState(cp) { - if (isAsciiUpper(cp)) { - this.currentToken.tagName += toAsciiLowerChar(cp); - this.tempBuff.push(cp); - } - - else if (isAsciiLower(cp)) { - this.currentToken.tagName += toChar(cp); - this.tempBuff.push(cp); - } - - else { - if (this._isAppropriateEndTagToken()) { - if (isWhitespace(cp)) { - this.state = BEFORE_ATTRIBUTE_NAME_STATE; - return; - } - - if (cp === $.SOLIDUS) { - this.state = SELF_CLOSING_START_TAG_STATE; - return; - } - - if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - return; - } - } - - this._emitChar('<'); - this._emitChar('/'); - this._emitSeveralCodePoints(this.tempBuff); - this._reconsumeInState(RCDATA_STATE); - } -}; - - -//12.2.4.14 RAWTEXT less-than sign state -//------------------------------------------------------------------ -_[RAWTEXT_LESS_THAN_SIGN_STATE] = function rawtextLessThanSignState(cp) { - if (cp === $.SOLIDUS) { - this.tempBuff = []; - this.state = RAWTEXT_END_TAG_OPEN_STATE; - } - - else { - this._emitChar('<'); - this._reconsumeInState(RAWTEXT_STATE); - } -}; - - -//12.2.4.15 RAWTEXT end tag open state -//------------------------------------------------------------------ -_[RAWTEXT_END_TAG_OPEN_STATE] = function rawtextEndTagOpenState(cp) { - if (isAsciiUpper(cp)) { - this._createEndTagToken(toAsciiLowerChar(cp)); - this.tempBuff.push(cp); - this.state = RAWTEXT_END_TAG_NAME_STATE; - } - - else if (isAsciiLower(cp)) { - this._createEndTagToken(toChar(cp)); - this.tempBuff.push(cp); - this.state = RAWTEXT_END_TAG_NAME_STATE; - } - - else { - this._emitChar('<'); - this._emitChar('/'); - this._reconsumeInState(RAWTEXT_STATE); - } -}; - - -//12.2.4.16 RAWTEXT end tag name state -//------------------------------------------------------------------ -_[RAWTEXT_END_TAG_NAME_STATE] = function rawtextEndTagNameState(cp) { - if (isAsciiUpper(cp)) { - this.currentToken.tagName += toAsciiLowerChar(cp); - this.tempBuff.push(cp); - } - - else if (isAsciiLower(cp)) { - this.currentToken.tagName += toChar(cp); - this.tempBuff.push(cp); - } - - else { - if (this._isAppropriateEndTagToken()) { - if (isWhitespace(cp)) { - this.state = BEFORE_ATTRIBUTE_NAME_STATE; - return; - } - - if (cp === $.SOLIDUS) { - this.state = SELF_CLOSING_START_TAG_STATE; - return; - } - - if (cp === $.GREATER_THAN_SIGN) { - this._emitCurrentToken(); - this.state = DATA_STATE; - return; - } - } - - this._emitChar('<'); - this._emitChar('/'); - this._emitSeveralCodePoints(this.tempBuff); - this._reconsumeInState(RAWTEXT_STATE); - } -}; - - -//12.2.4.17 Script data less-than sign state -//------------------------------------------------------------------ -_[SCRIPT_DATA_LESS_THAN_SIGN_STATE] = function scriptDataLessThanSignState(cp) { - if (cp === $.SOLIDUS) { - this.tempBuff = []; - this.state = SCRIPT_DATA_END_TAG_OPEN_STATE; - } - - else if (cp === $.EXCLAMATION_MARK) { - this.state = SCRIPT_DATA_ESCAPE_START_STATE; - this._emitChar('<'); - this._emitChar('!'); - } - - else { - this._emitChar('<'); - this._reconsumeInState(SCRIPT_DATA_STATE); - } -}; - - -//12.2.4.18 Script data end tag open state -//------------------------------------------------------------------ -_[SCRIPT_DATA_END_TAG_OPEN_STATE] = function scriptDataEndTagOpenState(cp) { - if (isAsciiUpper(cp)) { - this._createEndTagToken(toAsciiLowerChar(cp)); - this.tempBuff.push(cp); - this.state = SCRIPT_DATA_END_TAG_NAME_STATE; - } - - else if (isAsciiLower(cp)) { - this._createEndTagToken(toChar(cp)); - this.tempBuff.push(cp); - this.state = SCRIPT_DATA_END_TAG_NAME_STATE; - } - - else { - this._emitChar('<'); - this._emitChar('/'); - this._reconsumeInState(SCRIPT_DATA_STATE); - } -}; - - -//12.2.4.19 Script data end tag name state -//------------------------------------------------------------------ -_[SCRIPT_DATA_END_TAG_NAME_STATE] = function scriptDataEndTagNameState(cp) { - if (isAsciiUpper(cp)) { - this.currentToken.tagName += toAsciiLowerChar(cp); - this.tempBuff.push(cp); - } - - else if (isAsciiLower(cp)) { - this.currentToken.tagName += toChar(cp); - this.tempBuff.push(cp); - } - - else { - if (this._isAppropriateEndTagToken()) { - if (isWhitespace(cp)) { - this.state = BEFORE_ATTRIBUTE_NAME_STATE; - return; - } - - else if (cp === $.SOLIDUS) { - this.state = SELF_CLOSING_START_TAG_STATE; - return; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this._emitCurrentToken(); - this.state = DATA_STATE; - return; - } - } - - this._emitChar('<'); - this._emitChar('/'); - this._emitSeveralCodePoints(this.tempBuff); - this._reconsumeInState(SCRIPT_DATA_STATE); - } -}; - - -//12.2.4.20 Script data escape start state -//------------------------------------------------------------------ -_[SCRIPT_DATA_ESCAPE_START_STATE] = function scriptDataEscapeStartState(cp) { - if (cp === $.HYPHEN_MINUS) { - this.state = SCRIPT_DATA_ESCAPE_START_DASH_STATE; - this._emitChar('-'); - } - - else - this._reconsumeInState(SCRIPT_DATA_STATE); -}; - - -//12.2.4.21 Script data escape start dash state -//------------------------------------------------------------------ -_[SCRIPT_DATA_ESCAPE_START_DASH_STATE] = function scriptDataEscapeStartDashState(cp) { - if (cp === $.HYPHEN_MINUS) { - this.state = SCRIPT_DATA_ESCAPED_DASH_DASH_STATE; - this._emitChar('-'); - } - - else - this._reconsumeInState(SCRIPT_DATA_STATE); -}; - - -//12.2.4.22 Script data escaped state -//------------------------------------------------------------------ -_[SCRIPT_DATA_ESCAPED_STATE] = function scriptDataEscapedState(cp) { - if (cp === $.HYPHEN_MINUS) { - this.state = SCRIPT_DATA_ESCAPED_DASH_STATE; - this._emitChar('-'); - } - - else if (cp === $.LESS_THAN_SIGN) - this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE; - - else if (cp === $.NULL) - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this._emitCodePoint(cp); -}; - - -//12.2.4.23 Script data escaped dash state -//------------------------------------------------------------------ -_[SCRIPT_DATA_ESCAPED_DASH_STATE] = function scriptDataEscapedDashState(cp) { - if (cp === $.HYPHEN_MINUS) { - this.state = SCRIPT_DATA_ESCAPED_DASH_DASH_STATE; - this._emitChar('-'); - } - - else if (cp === $.LESS_THAN_SIGN) - this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE; - - else if (cp === $.NULL) { - this.state = SCRIPT_DATA_ESCAPED_STATE; - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else { - this.state = SCRIPT_DATA_ESCAPED_STATE; - this._emitCodePoint(cp); - } -}; - - -//12.2.4.24 Script data escaped dash dash state -//------------------------------------------------------------------ -_[SCRIPT_DATA_ESCAPED_DASH_DASH_STATE] = function scriptDataEscapedDashDashState(cp) { - if (cp === $.HYPHEN_MINUS) - this._emitChar('-'); - - else if (cp === $.LESS_THAN_SIGN) - this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = SCRIPT_DATA_STATE; - this._emitChar('>'); - } - - else if (cp === $.NULL) { - this.state = SCRIPT_DATA_ESCAPED_STATE; - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else { - this.state = SCRIPT_DATA_ESCAPED_STATE; - this._emitCodePoint(cp); - } -}; - - -//12.2.4.25 Script data escaped less-than sign state -//------------------------------------------------------------------ -_[SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE] = function scriptDataEscapedLessThanSignState(cp) { - if (cp === $.SOLIDUS) { - this.tempBuff = []; - this.state = SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE; - } - - else if (isAsciiUpper(cp)) { - this.tempBuff = []; - this.tempBuff.push(toAsciiLowerCodePoint(cp)); - this.state = SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE; - this._emitChar('<'); - this._emitCodePoint(cp); - } - - else if (isAsciiLower(cp)) { - this.tempBuff = []; - this.tempBuff.push(cp); - this.state = SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE; - this._emitChar('<'); - this._emitCodePoint(cp); - } - - else { - this._emitChar('<'); - this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE); - } -}; - - -//12.2.4.26 Script data escaped end tag open state -//------------------------------------------------------------------ -_[SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE] = function scriptDataEscapedEndTagOpenState(cp) { - if (isAsciiUpper(cp)) { - this._createEndTagToken(toAsciiLowerChar(cp)); - this.tempBuff.push(cp); - this.state = SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE; - } - - else if (isAsciiLower(cp)) { - this._createEndTagToken(toChar(cp)); - this.tempBuff.push(cp); - this.state = SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE; - } - - else { - this._emitChar('<'); - this._emitChar('/'); - this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE); - } -}; - - -//12.2.4.27 Script data escaped end tag name state -//------------------------------------------------------------------ -_[SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE] = function scriptDataEscapedEndTagNameState(cp) { - if (isAsciiUpper(cp)) { - this.currentToken.tagName += toAsciiLowerChar(cp); - this.tempBuff.push(cp); - } - - else if (isAsciiLower(cp)) { - this.currentToken.tagName += toChar(cp); - this.tempBuff.push(cp); - } - - else { - if (this._isAppropriateEndTagToken()) { - if (isWhitespace(cp)) { - this.state = BEFORE_ATTRIBUTE_NAME_STATE; - return; - } - - if (cp === $.SOLIDUS) { - this.state = SELF_CLOSING_START_TAG_STATE; - return; - } - - if (cp === $.GREATER_THAN_SIGN) { - this._emitCurrentToken(); - this.state = DATA_STATE; - return; - } - } - - this._emitChar('<'); - this._emitChar('/'); - this._emitSeveralCodePoints(this.tempBuff); - this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE); - } -}; - - -//12.2.4.28 Script data double escape start state -//------------------------------------------------------------------ -_[SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE] = function scriptDataDoubleEscapeStartState(cp) { - if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN) { - this.state = this.isTempBufferEqualToScriptString() ? SCRIPT_DATA_DOUBLE_ESCAPED_STATE : SCRIPT_DATA_ESCAPED_STATE; - this._emitCodePoint(cp); - } - - else if (isAsciiUpper(cp)) { - this.tempBuff.push(toAsciiLowerCodePoint(cp)); - this._emitCodePoint(cp); - } - - else if (isAsciiLower(cp)) { - this.tempBuff.push(cp); - this._emitCodePoint(cp); - } - - else - this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE); -}; - - -//12.2.4.29 Script data double escaped state -//------------------------------------------------------------------ -_[SCRIPT_DATA_DOUBLE_ESCAPED_STATE] = function scriptDataDoubleEscapedState(cp) { - if (cp === $.HYPHEN_MINUS) { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE; - this._emitChar('-'); - } - - else if (cp === $.LESS_THAN_SIGN) { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE; - this._emitChar('<'); - } - - else if (cp === $.NULL) - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this._emitCodePoint(cp); -}; - - -//12.2.4.30 Script data double escaped dash state -//------------------------------------------------------------------ -_[SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE] = function scriptDataDoubleEscapedDashState(cp) { - if (cp === $.HYPHEN_MINUS) { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE; - this._emitChar('-'); - } - - else if (cp === $.LESS_THAN_SIGN) { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE; - this._emitChar('<'); - } - - else if (cp === $.NULL) { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE; - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE; - this._emitCodePoint(cp); - } -}; - - -//12.2.4.31 Script data double escaped dash dash state -//------------------------------------------------------------------ -_[SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE] = function scriptDataDoubleEscapedDashDashState(cp) { - if (cp === $.HYPHEN_MINUS) - this._emitChar('-'); - - else if (cp === $.LESS_THAN_SIGN) { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE; - this._emitChar('<'); - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = SCRIPT_DATA_STATE; - this._emitChar('>'); - } - - else if (cp === $.NULL) { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE; - this._emitChar(UNICODE.REPLACEMENT_CHARACTER); - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else { - this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE; - this._emitCodePoint(cp); - } -}; - - -//12.2.4.32 Script data double escaped less-than sign state -//------------------------------------------------------------------ -_[SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE] = function scriptDataDoubleEscapedLessThanSignState(cp) { - if (cp === $.SOLIDUS) { - this.tempBuff = []; - this.state = SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE; - this._emitChar('/'); - } - - else - this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPED_STATE); -}; - - -//12.2.4.33 Script data double escape end state -//------------------------------------------------------------------ -_[SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE] = function scriptDataDoubleEscapeEndState(cp) { - if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN) { - this.state = this.isTempBufferEqualToScriptString() ? SCRIPT_DATA_ESCAPED_STATE : SCRIPT_DATA_DOUBLE_ESCAPED_STATE; - - this._emitCodePoint(cp); - } - - else if (isAsciiUpper(cp)) { - this.tempBuff.push(toAsciiLowerCodePoint(cp)); - this._emitCodePoint(cp); - } - - else if (isAsciiLower(cp)) { - this.tempBuff.push(cp); - this._emitCodePoint(cp); - } - - else - this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPED_STATE); -}; - - -//12.2.4.34 Before attribute name state -//------------------------------------------------------------------ -_[BEFORE_ATTRIBUTE_NAME_STATE] = function beforeAttributeNameState(cp) { - if (isWhitespace(cp)) - return; - - if (cp === $.SOLIDUS) - this.state = SELF_CLOSING_START_TAG_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (isAsciiUpper(cp)) { - this._createAttr(toAsciiLowerChar(cp)); - this.state = ATTRIBUTE_NAME_STATE; - } - - else if (cp === $.NULL) { - this._createAttr(UNICODE.REPLACEMENT_CHARACTER); - this.state = ATTRIBUTE_NAME_STATE; - } - - else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN || cp === $.EQUALS_SIGN) { - this._createAttr(toChar(cp)); - this.state = ATTRIBUTE_NAME_STATE; - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else { - this._createAttr(toChar(cp)); - this.state = ATTRIBUTE_NAME_STATE; - } -}; - - -//12.2.4.35 Attribute name state -//------------------------------------------------------------------ -_[ATTRIBUTE_NAME_STATE] = function attributeNameState(cp) { - if (isWhitespace(cp)) - this._leaveAttrName(AFTER_ATTRIBUTE_NAME_STATE); - - else if (cp === $.SOLIDUS) - this._leaveAttrName(SELF_CLOSING_START_TAG_STATE); - - else if (cp === $.EQUALS_SIGN) - this._leaveAttrName(BEFORE_ATTRIBUTE_VALUE_STATE); - - else if (cp === $.GREATER_THAN_SIGN) { - this._leaveAttrName(DATA_STATE); - this._emitCurrentToken(); - } - - else if (isAsciiUpper(cp)) - this.currentAttr.name += toAsciiLowerChar(cp); - - else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN) - this.currentAttr.name += toChar(cp); - - else if (cp === $.NULL) - this.currentAttr.name += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this.currentAttr.name += toChar(cp); -}; - - -//12.2.4.36 After attribute name state -//------------------------------------------------------------------ -_[AFTER_ATTRIBUTE_NAME_STATE] = function afterAttributeNameState(cp) { - if (isWhitespace(cp)) - return; - - if (cp === $.SOLIDUS) - this.state = SELF_CLOSING_START_TAG_STATE; - - else if (cp === $.EQUALS_SIGN) - this.state = BEFORE_ATTRIBUTE_VALUE_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (isAsciiUpper(cp)) { - this._createAttr(toAsciiLowerChar(cp)); - this.state = ATTRIBUTE_NAME_STATE; - } - - else if (cp === $.NULL) { - this._createAttr(UNICODE.REPLACEMENT_CHARACTER); - this.state = ATTRIBUTE_NAME_STATE; - } - - else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN) { - this._createAttr(toChar(cp)); - this.state = ATTRIBUTE_NAME_STATE; - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else { - this._createAttr(toChar(cp)); - this.state = ATTRIBUTE_NAME_STATE; - } -}; - - -//12.2.4.37 Before attribute value state -//------------------------------------------------------------------ -_[BEFORE_ATTRIBUTE_VALUE_STATE] = function beforeAttributeValueState(cp) { - if (isWhitespace(cp)) - return; - - if (cp === $.QUOTATION_MARK) - this.state = ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE; - - else if (cp === $.AMPERSAND) - this._reconsumeInState(ATTRIBUTE_VALUE_UNQUOTED_STATE); - - else if (cp === $.APOSTROPHE) - this.state = ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE; - - else if (cp === $.NULL) { - this.currentAttr.value += UNICODE.REPLACEMENT_CHARACTER; - this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.LESS_THAN_SIGN || cp === $.EQUALS_SIGN || cp === $.GRAVE_ACCENT) { - this.currentAttr.value += toChar(cp); - this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE; - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else { - this.currentAttr.value += toChar(cp); - this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE; - } -}; - - -//12.2.4.38 Attribute value (double-quoted) state -//------------------------------------------------------------------ -_[ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE] = function attributeValueDoubleQuotedState(cp) { - if (cp === $.QUOTATION_MARK) - this.state = AFTER_ATTRIBUTE_VALUE_QUOTED_STATE; - - else if (cp === $.AMPERSAND) { - this.additionalAllowedCp = $.QUOTATION_MARK; - this.returnState = this.state; - this.state = CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE; - } - - else if (cp === $.NULL) - this.currentAttr.value += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this.currentAttr.value += toChar(cp); -}; - - -//12.2.4.39 Attribute value (single-quoted) state -//------------------------------------------------------------------ -_[ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE] = function attributeValueSingleQuotedState(cp) { - if (cp === $.APOSTROPHE) - this.state = AFTER_ATTRIBUTE_VALUE_QUOTED_STATE; - - else if (cp === $.AMPERSAND) { - this.additionalAllowedCp = $.APOSTROPHE; - this.returnState = this.state; - this.state = CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE; - } - - else if (cp === $.NULL) - this.currentAttr.value += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this.currentAttr.value += toChar(cp); -}; - - -//12.2.4.40 Attribute value (unquoted) state -//------------------------------------------------------------------ -_[ATTRIBUTE_VALUE_UNQUOTED_STATE] = function attributeValueUnquotedState(cp) { - if (isWhitespace(cp)) - this.state = BEFORE_ATTRIBUTE_NAME_STATE; - - else if (cp === $.AMPERSAND) { - this.additionalAllowedCp = $.GREATER_THAN_SIGN; - this.returnState = this.state; - this.state = CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.NULL) - this.currentAttr.value += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN || - cp === $.EQUALS_SIGN || cp === $.GRAVE_ACCENT) { - this.currentAttr.value += toChar(cp); - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this.currentAttr.value += toChar(cp); -}; - - -//12.2.4.41 Character reference in attribute value state -//------------------------------------------------------------------ -_[CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE] = function characterReferenceInAttributeValueState(cp) { - var referencedCodePoints = this._consumeCharacterReference(cp, true); - - if (referencedCodePoints) { - for (var i = 0; i < referencedCodePoints.length; i++) - this.currentAttr.value += toChar(referencedCodePoints[i]); - } else - this.currentAttr.value += '&'; - - this.state = this.returnState; -}; - - -//12.2.4.42 After attribute value (quoted) state -//------------------------------------------------------------------ -_[AFTER_ATTRIBUTE_VALUE_QUOTED_STATE] = function afterAttributeValueQuotedState(cp) { - if (isWhitespace(cp)) - this.state = BEFORE_ATTRIBUTE_NAME_STATE; - - else if (cp === $.SOLIDUS) - this.state = SELF_CLOSING_START_TAG_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this._reconsumeInState(BEFORE_ATTRIBUTE_NAME_STATE); -}; - - -//12.2.4.43 Self-closing start tag state -//------------------------------------------------------------------ -_[SELF_CLOSING_START_TAG_STATE] = function selfClosingStartTagState(cp) { - if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.selfClosing = true; - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.EOF) - this._reconsumeInState(DATA_STATE); - - else - this._reconsumeInState(BEFORE_ATTRIBUTE_NAME_STATE); -}; - - -//12.2.4.44 Bogus comment state -//------------------------------------------------------------------ -_[BOGUS_COMMENT_STATE] = function bogusCommentState(cp) { - this._createCommentToken(); - - while (true) { - if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - break; - } - - else if (cp === $.EOF) { - this._reconsumeInState(DATA_STATE); - break; - } - - else { - this.currentToken.data += cp === $.NULL ? UNICODE.REPLACEMENT_CHARACTER : toChar(cp); - cp = this._consume(); - } - } - - this._emitCurrentToken(); -}; - - -//12.2.4.45 Markup declaration open state -//------------------------------------------------------------------ -_[MARKUP_DECLARATION_OPEN_STATE] = function markupDeclarationOpenState(cp) { - if (this._consumeSubsequentIfMatch($$.DASH_DASH_STRING, cp, true)) { - this._createCommentToken(); - this.state = COMMENT_START_STATE; - } - - else if (this._consumeSubsequentIfMatch($$.DOCTYPE_STRING, cp, false)) - this.state = DOCTYPE_STATE; - - else if (this.allowCDATA && this._consumeSubsequentIfMatch($$.CDATA_START_STRING, cp, true)) - this.state = CDATA_SECTION_STATE; - - else { - //NOTE: call bogus comment state directly with current consumed character to avoid unnecessary reconsumption. - this[BOGUS_COMMENT_STATE](cp); - } -}; - - -//12.2.4.46 Comment start state -//------------------------------------------------------------------ -_[COMMENT_START_STATE] = function commentStartState(cp) { - if (cp === $.HYPHEN_MINUS) - this.state = COMMENT_START_DASH_STATE; - - else if (cp === $.NULL) { - this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; - this.state = COMMENT_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.EOF) { - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.data += toChar(cp); - this.state = COMMENT_STATE; - } -}; - - -//12.2.4.47 Comment start dash state -//------------------------------------------------------------------ -_[COMMENT_START_DASH_STATE] = function commentStartDashState(cp) { - if (cp === $.HYPHEN_MINUS) - this.state = COMMENT_END_STATE; - - else if (cp === $.NULL) { - this.currentToken.data += '-'; - this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; - this.state = COMMENT_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.EOF) { - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.data += '-'; - this.currentToken.data += toChar(cp); - this.state = COMMENT_STATE; - } -}; - - -//12.2.4.48 Comment state -//------------------------------------------------------------------ -_[COMMENT_STATE] = function commentState(cp) { - if (cp === $.HYPHEN_MINUS) - this.state = COMMENT_END_DASH_STATE; - - else if (cp === $.NULL) - this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.EOF) { - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else - this.currentToken.data += toChar(cp); -}; - - -//12.2.4.49 Comment end dash state -//------------------------------------------------------------------ -_[COMMENT_END_DASH_STATE] = function commentEndDashState(cp) { - if (cp === $.HYPHEN_MINUS) - this.state = COMMENT_END_STATE; - - else if (cp === $.NULL) { - this.currentToken.data += '-'; - this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; - this.state = COMMENT_STATE; - } - - else if (cp === $.EOF) { - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.data += '-'; - this.currentToken.data += toChar(cp); - this.state = COMMENT_STATE; - } -}; - - -//12.2.4.50 Comment end state -//------------------------------------------------------------------ -_[COMMENT_END_STATE] = function commentEndState(cp) { - if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.EXCLAMATION_MARK) - this.state = COMMENT_END_BANG_STATE; - - else if (cp === $.HYPHEN_MINUS) - this.currentToken.data += '-'; - - else if (cp === $.NULL) { - this.currentToken.data += '--'; - this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; - this.state = COMMENT_STATE; - } - - else if (cp === $.EOF) { - this._reconsumeInState(DATA_STATE); - this._emitCurrentToken(); - } - - else { - this.currentToken.data += '--'; - this.currentToken.data += toChar(cp); - this.state = COMMENT_STATE; - } -}; - - -//12.2.4.51 Comment end bang state -//------------------------------------------------------------------ -_[COMMENT_END_BANG_STATE] = function commentEndBangState(cp) { - if (cp === $.HYPHEN_MINUS) { - this.currentToken.data += '--!'; - this.state = COMMENT_END_DASH_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.NULL) { - this.currentToken.data += '--!'; - this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; - this.state = COMMENT_STATE; - } - - else if (cp === $.EOF) { - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.data += '--!'; - this.currentToken.data += toChar(cp); - this.state = COMMENT_STATE; - } -}; - - -//12.2.4.52 DOCTYPE state -//------------------------------------------------------------------ -_[DOCTYPE_STATE] = function doctypeState(cp) { - if (isWhitespace(cp)) - this.state = BEFORE_DOCTYPE_NAME_STATE; - - else if (cp === $.EOF) { - this._createDoctypeToken(); - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else - this._reconsumeInState(BEFORE_DOCTYPE_NAME_STATE); -}; - - -//12.2.4.53 Before DOCTYPE name state -//------------------------------------------------------------------ -_[BEFORE_DOCTYPE_NAME_STATE] = function beforeDoctypeNameState(cp) { - if (isWhitespace(cp)) - return; - - if (isAsciiUpper(cp)) { - this._createDoctypeToken(toAsciiLowerChar(cp)); - this.state = DOCTYPE_NAME_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this._createDoctypeToken(); - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this._createDoctypeToken(); - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else if (cp === $.NULL) { - this._createDoctypeToken(UNICODE.REPLACEMENT_CHARACTER); - this.state = DOCTYPE_NAME_STATE; - } - - else { - this._createDoctypeToken(toChar(cp)); - this.state = DOCTYPE_NAME_STATE; - } -}; - - -//12.2.4.54 DOCTYPE name state -//------------------------------------------------------------------ -_[DOCTYPE_NAME_STATE] = function doctypeNameState(cp) { - if (isWhitespace(cp)) - this.state = AFTER_DOCTYPE_NAME_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (isAsciiUpper(cp)) - this.currentToken.name += toAsciiLowerChar(cp); - - else if (cp === $.NULL) - this.currentToken.name += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else - this.currentToken.name += toChar(cp); -}; - - -//12.2.4.55 After DOCTYPE name state -//------------------------------------------------------------------ -_[AFTER_DOCTYPE_NAME_STATE] = function afterDoctypeNameState(cp) { - if (isWhitespace(cp)) - return; - - if (cp === $.GREATER_THAN_SIGN) { - this.state = DATA_STATE; - this._emitCurrentToken(); - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else if (this._consumeSubsequentIfMatch($$.PUBLIC_STRING, cp, false)) - this.state = AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE; - - else if (this._consumeSubsequentIfMatch($$.SYSTEM_STRING, cp, false)) - this.state = AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE; - - else { - this.currentToken.forceQuirks = true; - this.state = BOGUS_DOCTYPE_STATE; - } -}; - - -//12.2.4.56 After DOCTYPE public keyword state -//------------------------------------------------------------------ -_[AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE] = function afterDoctypePublicKeywordState(cp) { - if (isWhitespace(cp)) - this.state = BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE; - - else if (cp === $.QUOTATION_MARK) { - this.currentToken.publicId = ''; - this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE; - } - - else if (cp === $.APOSTROPHE) { - this.currentToken.publicId = ''; - this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.forceQuirks = true; - this.state = BOGUS_DOCTYPE_STATE; - } -}; - - -//12.2.4.57 Before DOCTYPE public identifier state -//------------------------------------------------------------------ -_[BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE] = function beforeDoctypePublicIdentifierState(cp) { - if (isWhitespace(cp)) - return; - - if (cp === $.QUOTATION_MARK) { - this.currentToken.publicId = ''; - this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE; - } - - else if (cp === $.APOSTROPHE) { - this.currentToken.publicId = ''; - this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.forceQuirks = true; - this.state = BOGUS_DOCTYPE_STATE; - } -}; - - -//12.2.4.58 DOCTYPE public identifier (double-quoted) state -//------------------------------------------------------------------ -_[DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE] = function doctypePublicIdentifierDoubleQuotedState(cp) { - if (cp === $.QUOTATION_MARK) - this.state = AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE; - - else if (cp === $.NULL) - this.currentToken.publicId += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else - this.currentToken.publicId += toChar(cp); -}; - - -//12.2.4.59 DOCTYPE public identifier (single-quoted) state -//------------------------------------------------------------------ -_[DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE] = function doctypePublicIdentifierSingleQuotedState(cp) { - if (cp === $.APOSTROPHE) - this.state = AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE; - - else if (cp === $.NULL) - this.currentToken.publicId += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else - this.currentToken.publicId += toChar(cp); -}; - - -//12.2.4.60 After DOCTYPE public identifier state -//------------------------------------------------------------------ -_[AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE] = function afterDoctypePublicIdentifierState(cp) { - if (isWhitespace(cp)) - this.state = BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.QUOTATION_MARK) { - this.currentToken.systemId = ''; - this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE; - } - - else if (cp === $.APOSTROPHE) { - this.currentToken.systemId = ''; - this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.forceQuirks = true; - this.state = BOGUS_DOCTYPE_STATE; - } -}; - - -//12.2.4.61 Between DOCTYPE public and system identifiers state -//------------------------------------------------------------------ -_[BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE] = function betweenDoctypePublicAndSystemIdentifiersState(cp) { - if (isWhitespace(cp)) - return; - - if (cp === $.GREATER_THAN_SIGN) { - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.QUOTATION_MARK) { - this.currentToken.systemId = ''; - this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE; - } - - - else if (cp === $.APOSTROPHE) { - this.currentToken.systemId = ''; - this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.forceQuirks = true; - this.state = BOGUS_DOCTYPE_STATE; - } -}; - - -//12.2.4.62 After DOCTYPE system keyword state -//------------------------------------------------------------------ -_[AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE] = function afterDoctypeSystemKeywordState(cp) { - if (isWhitespace(cp)) - this.state = BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE; - - else if (cp === $.QUOTATION_MARK) { - this.currentToken.systemId = ''; - this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE; - } - - else if (cp === $.APOSTROPHE) { - this.currentToken.systemId = ''; - this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.forceQuirks = true; - this.state = BOGUS_DOCTYPE_STATE; - } -}; - - -//12.2.4.63 Before DOCTYPE system identifier state -//------------------------------------------------------------------ -_[BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE] = function beforeDoctypeSystemIdentifierState(cp) { - if (isWhitespace(cp)) - return; - - if (cp === $.QUOTATION_MARK) { - this.currentToken.systemId = ''; - this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE; - } - - else if (cp === $.APOSTROPHE) { - this.currentToken.systemId = ''; - this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE; - } - - else if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else { - this.currentToken.forceQuirks = true; - this.state = BOGUS_DOCTYPE_STATE; - } -}; - - -//12.2.4.64 DOCTYPE system identifier (double-quoted) state -//------------------------------------------------------------------ -_[DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE] = function doctypeSystemIdentifierDoubleQuotedState(cp) { - if (cp === $.QUOTATION_MARK) - this.state = AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.NULL) - this.currentToken.systemId += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else - this.currentToken.systemId += toChar(cp); -}; - - -//12.2.4.65 DOCTYPE system identifier (single-quoted) state -//------------------------------------------------------------------ -_[DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE] = function doctypeSystemIdentifierSingleQuotedState(cp) { - if (cp === $.APOSTROPHE) - this.state = AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE; - - else if (cp === $.GREATER_THAN_SIGN) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.NULL) - this.currentToken.systemId += UNICODE.REPLACEMENT_CHARACTER; - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else - this.currentToken.systemId += toChar(cp); -}; - - -//12.2.4.66 After DOCTYPE system identifier state -//------------------------------------------------------------------ -_[AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE] = function afterDoctypeSystemIdentifierState(cp) { - if (isWhitespace(cp)) - return; - - if (cp === $.GREATER_THAN_SIGN) { - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this.currentToken.forceQuirks = true; - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } - - else - this.state = BOGUS_DOCTYPE_STATE; -}; - - -//12.2.4.67 Bogus DOCTYPE state -//------------------------------------------------------------------ -_[BOGUS_DOCTYPE_STATE] = function bogusDoctypeState(cp) { - if (cp === $.GREATER_THAN_SIGN) { - this._emitCurrentToken(); - this.state = DATA_STATE; - } - - else if (cp === $.EOF) { - this._emitCurrentToken(); - this._reconsumeInState(DATA_STATE); - } -}; - - -//12.2.4.68 CDATA section state -//------------------------------------------------------------------ -_[CDATA_SECTION_STATE] = function cdataSectionState(cp) { - while (true) { - if (cp === $.EOF) { - this._reconsumeInState(DATA_STATE); - break; - } - - else if (this._consumeSubsequentIfMatch($$.CDATA_END_STRING, cp, true)) { - this.state = DATA_STATE; - break; - } - - else { - this._emitCodePoint(cp); - cp = this._consume(); - } - } -}; +'use strict'; + +var Preprocessor = require('./preprocessor'), + UNICODE = require('../common/unicode'), + NAMED_ENTITY_TRIE = require('./named_entity_trie'); + +//Aliases +var $ = UNICODE.CODE_POINTS, + $$ = UNICODE.CODE_POINT_SEQUENCES; + +//Replacement code points for numeric entities +var NUMERIC_ENTITY_REPLACEMENTS = { + 0x00: 0xFFFD, 0x0D: 0x000D, 0x80: 0x20AC, 0x81: 0x0081, 0x82: 0x201A, 0x83: 0x0192, 0x84: 0x201E, + 0x85: 0x2026, 0x86: 0x2020, 0x87: 0x2021, 0x88: 0x02C6, 0x89: 0x2030, 0x8A: 0x0160, 0x8B: 0x2039, + 0x8C: 0x0152, 0x8D: 0x008D, 0x8E: 0x017D, 0x8F: 0x008F, 0x90: 0x0090, 0x91: 0x2018, 0x92: 0x2019, + 0x93: 0x201C, 0x94: 0x201D, 0x95: 0x2022, 0x96: 0x2013, 0x97: 0x2014, 0x98: 0x02DC, 0x99: 0x2122, + 0x9A: 0x0161, 0x9B: 0x203A, 0x9C: 0x0153, 0x9D: 0x009D, 0x9E: 0x017E, 0x9F: 0x0178 +}; + +//States +var DATA_STATE = 'DATA_STATE', + CHARACTER_REFERENCE_IN_DATA_STATE = 'CHARACTER_REFERENCE_IN_DATA_STATE', + RCDATA_STATE = 'RCDATA_STATE', + CHARACTER_REFERENCE_IN_RCDATA_STATE = 'CHARACTER_REFERENCE_IN_RCDATA_STATE', + RAWTEXT_STATE = 'RAWTEXT_STATE', + SCRIPT_DATA_STATE = 'SCRIPT_DATA_STATE', + PLAINTEXT_STATE = 'PLAINTEXT_STATE', + TAG_OPEN_STATE = 'TAG_OPEN_STATE', + END_TAG_OPEN_STATE = 'END_TAG_OPEN_STATE', + TAG_NAME_STATE = 'TAG_NAME_STATE', + RCDATA_LESS_THAN_SIGN_STATE = 'RCDATA_LESS_THAN_SIGN_STATE', + RCDATA_END_TAG_OPEN_STATE = 'RCDATA_END_TAG_OPEN_STATE', + RCDATA_END_TAG_NAME_STATE = 'RCDATA_END_TAG_NAME_STATE', + RAWTEXT_LESS_THAN_SIGN_STATE = 'RAWTEXT_LESS_THAN_SIGN_STATE', + RAWTEXT_END_TAG_OPEN_STATE = 'RAWTEXT_END_TAG_OPEN_STATE', + RAWTEXT_END_TAG_NAME_STATE = 'RAWTEXT_END_TAG_NAME_STATE', + SCRIPT_DATA_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_LESS_THAN_SIGN_STATE', + SCRIPT_DATA_END_TAG_OPEN_STATE = 'SCRIPT_DATA_END_TAG_OPEN_STATE', + SCRIPT_DATA_END_TAG_NAME_STATE = 'SCRIPT_DATA_END_TAG_NAME_STATE', + SCRIPT_DATA_ESCAPE_START_STATE = 'SCRIPT_DATA_ESCAPE_START_STATE', + SCRIPT_DATA_ESCAPE_START_DASH_STATE = 'SCRIPT_DATA_ESCAPE_START_DASH_STATE', + SCRIPT_DATA_ESCAPED_STATE = 'SCRIPT_DATA_ESCAPED_STATE', + SCRIPT_DATA_ESCAPED_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_STATE', + SCRIPT_DATA_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_DASH_STATE', + SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE', + SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE', + SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE', + SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE', + SCRIPT_DATA_DOUBLE_ESCAPED_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_STATE', + SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE', + SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE', + SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE', + SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE', + BEFORE_ATTRIBUTE_NAME_STATE = 'BEFORE_ATTRIBUTE_NAME_STATE', + ATTRIBUTE_NAME_STATE = 'ATTRIBUTE_NAME_STATE', + AFTER_ATTRIBUTE_NAME_STATE = 'AFTER_ATTRIBUTE_NAME_STATE', + BEFORE_ATTRIBUTE_VALUE_STATE = 'BEFORE_ATTRIBUTE_VALUE_STATE', + ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE', + ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE', + ATTRIBUTE_VALUE_UNQUOTED_STATE = 'ATTRIBUTE_VALUE_UNQUOTED_STATE', + CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE = 'CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE', + AFTER_ATTRIBUTE_VALUE_QUOTED_STATE = 'AFTER_ATTRIBUTE_VALUE_QUOTED_STATE', + SELF_CLOSING_START_TAG_STATE = 'SELF_CLOSING_START_TAG_STATE', + BOGUS_COMMENT_STATE = 'BOGUS_COMMENT_STATE', + MARKUP_DECLARATION_OPEN_STATE = 'MARKUP_DECLARATION_OPEN_STATE', + COMMENT_START_STATE = 'COMMENT_START_STATE', + COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE', + COMMENT_STATE = 'COMMENT_STATE', + COMMENT_END_DASH_STATE = 'COMMENT_END_DASH_STATE', + COMMENT_END_STATE = 'COMMENT_END_STATE', + COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE', + DOCTYPE_STATE = 'DOCTYPE_STATE', + BEFORE_DOCTYPE_NAME_STATE = 'BEFORE_DOCTYPE_NAME_STATE', + DOCTYPE_NAME_STATE = 'DOCTYPE_NAME_STATE', + AFTER_DOCTYPE_NAME_STATE = 'AFTER_DOCTYPE_NAME_STATE', + AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE = 'AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE', + BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE', + DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE', + DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE', + AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE', + BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE = 'BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE', + AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE = 'AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE', + BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE', + DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE', + DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE', + AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE', + BOGUS_DOCTYPE_STATE = 'BOGUS_DOCTYPE_STATE', + CDATA_SECTION_STATE = 'CDATA_SECTION_STATE'; + +//Utils + +//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline +//this functions if they will be situated in another module due to context switch. +//Always perform inlining check before modifying this functions ('node --trace-inlining'). +function isWhitespace(cp) { + return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED; +} + +function isAsciiDigit(cp) { + return cp >= $.DIGIT_0 && cp <= $.DIGIT_9; +} + +function isAsciiUpper(cp) { + return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z; +} + +function isAsciiLower(cp) { + return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z; +} + +function isAsciiAlphaNumeric(cp) { + return isAsciiDigit(cp) || isAsciiUpper(cp) || isAsciiLower(cp); +} + +function isDigit(cp, isHex) { + return isAsciiDigit(cp) || (isHex && ((cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_F) || + (cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_F))); +} + +function isReservedCodePoint(cp) { + return cp >= 0xD800 && cp <= 0xDFFF || cp > 0x10FFFF; +} + +function toAsciiLowerCodePoint(cp) { + return cp + 0x0020; +} + +//NOTE: String.fromCharCode() function can handle only characters from BMP subset. +//So, we need to workaround this manually. +//(see: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode#Getting_it_to_work_with_higher_values) +function toChar(cp) { + if (cp <= 0xFFFF) + return String.fromCharCode(cp); + + cp -= 0x10000; + return String.fromCharCode(cp >>> 10 & 0x3FF | 0xD800) + String.fromCharCode(0xDC00 | cp & 0x3FF); +} + +function toAsciiLowerChar(cp) { + return String.fromCharCode(toAsciiLowerCodePoint(cp)); +} + +//Tokenizer +var Tokenizer = module.exports = function (html) { + this.preprocessor = new Preprocessor(html); + + this.tokenQueue = []; + + this.allowCDATA = false; + + this.state = DATA_STATE; + this.returnState = ''; + + this.consumptionPos = 0; + + this.tempBuff = []; + this.additionalAllowedCp = void 0; + this.lastStartTagName = ''; + + this.currentCharacterToken = null; + this.currentToken = null; + this.currentAttr = null; +}; + +//Token types +Tokenizer.CHARACTER_TOKEN = 'CHARACTER_TOKEN'; +Tokenizer.NULL_CHARACTER_TOKEN = 'NULL_CHARACTER_TOKEN'; +Tokenizer.WHITESPACE_CHARACTER_TOKEN = 'WHITESPACE_CHARACTER_TOKEN'; +Tokenizer.START_TAG_TOKEN = 'START_TAG_TOKEN'; +Tokenizer.END_TAG_TOKEN = 'END_TAG_TOKEN'; +Tokenizer.COMMENT_TOKEN = 'COMMENT_TOKEN'; +Tokenizer.DOCTYPE_TOKEN = 'DOCTYPE_TOKEN'; +Tokenizer.EOF_TOKEN = 'EOF_TOKEN'; + +//States export +Tokenizer.DATA_STATE = DATA_STATE; +Tokenizer.RCDATA_STATE = RCDATA_STATE; +Tokenizer.RAWTEXT_STATE = RAWTEXT_STATE; +Tokenizer.SCRIPT_DATA_STATE = SCRIPT_DATA_STATE; +Tokenizer.PLAINTEXT_STATE = PLAINTEXT_STATE; + +//Static +Tokenizer.getTokenAttr = function (token, attrName) { + for (var i = token.attrs.length - 1; i >= 0; i--) { + if (token.attrs[i].name === attrName) + return token.attrs[i].value; + } + + return null; +}; + +//Get token +Tokenizer.prototype.getNextToken = function () { + while (!this.tokenQueue.length) + this[this.state](this._consume()); + + return this.tokenQueue.shift(); +}; + +//Consumption +Tokenizer.prototype._consume = function () { + this.consumptionPos++; + return this.preprocessor.advanceAndPeekCodePoint(); +}; + +Tokenizer.prototype._unconsume = function () { + this.consumptionPos--; + this.preprocessor.retreat(); +}; + +Tokenizer.prototype._unconsumeSeveral = function (count) { + while (count--) + this._unconsume(); +}; + +Tokenizer.prototype._reconsumeInState = function (state) { + this.state = state; + this._unconsume(); +}; + +Tokenizer.prototype._consumeSubsequentIfMatch = function (pattern, startCp, caseSensitive) { + var rollbackPos = this.consumptionPos, + isMatch = true, + patternLength = pattern.length, + patternPos = 0, + cp = startCp, + patternCp = void 0; + + for (; patternPos < patternLength; patternPos++) { + if (patternPos > 0) + cp = this._consume(); + + if (cp === $.EOF) { + isMatch = false; + break; + } + + patternCp = pattern[patternPos]; + + if (cp !== patternCp && (caseSensitive || cp !== toAsciiLowerCodePoint(patternCp))) { + isMatch = false; + break; + } + } + + if (!isMatch) + this._unconsumeSeveral(this.consumptionPos - rollbackPos); + + return isMatch; +}; + +//Lookahead +Tokenizer.prototype._lookahead = function () { + var cp = this.preprocessor.advanceAndPeekCodePoint(); + this.preprocessor.retreat(); + + return cp; +}; + +//Temp buffer +Tokenizer.prototype.isTempBufferEqualToScriptString = function () { + if (this.tempBuff.length !== $$.SCRIPT_STRING.length) + return false; + + for (var i = 0; i < this.tempBuff.length; i++) { + if (this.tempBuff[i] !== $$.SCRIPT_STRING[i]) + return false; + } + + return true; +}; + +//Token creation +Tokenizer.prototype.buildStartTagToken = function (tagName) { + return { + type: Tokenizer.START_TAG_TOKEN, + tagName: tagName, + selfClosing: false, + attrs: [] + }; +}; + +Tokenizer.prototype.buildEndTagToken = function (tagName) { + return { + type: Tokenizer.END_TAG_TOKEN, + tagName: tagName, + ignored: false, + attrs: [] + }; +}; + +Tokenizer.prototype._createStartTagToken = function (tagNameFirstCh) { + this.currentToken = this.buildStartTagToken(tagNameFirstCh); +}; + +Tokenizer.prototype._createEndTagToken = function (tagNameFirstCh) { + this.currentToken = this.buildEndTagToken(tagNameFirstCh); +}; + +Tokenizer.prototype._createCommentToken = function () { + this.currentToken = { + type: Tokenizer.COMMENT_TOKEN, + data: '' + }; +}; + +Tokenizer.prototype._createDoctypeToken = function (doctypeNameFirstCh) { + this.currentToken = { + type: Tokenizer.DOCTYPE_TOKEN, + name: doctypeNameFirstCh || '', + forceQuirks: false, + publicId: null, + systemId: null + }; +}; + +//Tag attributes +Tokenizer.prototype._createAttr = function (attrNameFirstCh) { + this.currentAttr = { + name: attrNameFirstCh, + value: '' + }; +}; + +Tokenizer.prototype._isDuplicateAttr = function () { + return Tokenizer.getTokenAttr(this.currentToken, this.currentAttr.name) !== null; +}; + +Tokenizer.prototype._leaveAttrName = function (toState) { + this.state = toState; + + if (!this._isDuplicateAttr()) + this.currentToken.attrs.push(this.currentAttr); +}; + +//Appropriate end tag token +//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#appropriate-end-tag-token) +Tokenizer.prototype._isAppropriateEndTagToken = function () { + return this.lastStartTagName === this.currentToken.tagName; +}; + +//Token emission +Tokenizer.prototype._emitCurrentToken = function () { + this._emitCurrentCharacterToken(); + + //NOTE: store emited start tag's tagName to determine is the following end tag token is appropriate. + if (this.currentToken.type === Tokenizer.START_TAG_TOKEN) + this.lastStartTagName = this.currentToken.tagName; + + this.tokenQueue.push(this.currentToken); + this.currentToken = null; +}; + +Tokenizer.prototype._emitCurrentCharacterToken = function () { + if (this.currentCharacterToken) { + this.tokenQueue.push(this.currentCharacterToken); + this.currentCharacterToken = null; + } +}; + +Tokenizer.prototype._emitEOFToken = function () { + this._emitCurrentCharacterToken(); + this.tokenQueue.push({type: Tokenizer.EOF_TOKEN}); +}; + +//Characters emission + +//OPTIMIZATION: specification uses only one type of character tokens (one token per character). +//This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters. +//If we have a sequence of characters that belong to the same group, parser can process it +//as a single solid character token. +//So, there are 3 types of character tokens in parse5: +//1)NULL_CHARACTER_TOKEN - \u0000-character sequences (e.g. '\u0000\u0000\u0000') +//2)WHITESPACE_CHARACTER_TOKEN - any whitespace/new-line character sequences (e.g. '\n \r\t \f') +//3)CHARACTER_TOKEN - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^') +Tokenizer.prototype._appendCharToCurrentCharacterToken = function (type, ch) { + if (this.currentCharacterToken && this.currentCharacterToken.type !== type) + this._emitCurrentCharacterToken(); + + if (this.currentCharacterToken) + this.currentCharacterToken.chars += ch; + + else { + this.currentCharacterToken = { + type: type, + chars: ch + }; + } +}; + +Tokenizer.prototype._emitCodePoint = function (cp) { + var type = Tokenizer.CHARACTER_TOKEN; + + if (isWhitespace(cp)) + type = Tokenizer.WHITESPACE_CHARACTER_TOKEN; + + else if (cp === $.NULL) + type = Tokenizer.NULL_CHARACTER_TOKEN; + + this._appendCharToCurrentCharacterToken(type, toChar(cp)); +}; + +Tokenizer.prototype._emitSeveralCodePoints = function (codePoints) { + for (var i = 0; i < codePoints.length; i++) + this._emitCodePoint(codePoints[i]); +}; + +//NOTE: used then we emit character explicitly. This is always a non-whitespace and a non-null character. +//So we can avoid additional checks here. +Tokenizer.prototype._emitChar = function (ch) { + this._appendCharToCurrentCharacterToken(Tokenizer.CHARACTER_TOKEN, ch); +}; + +//Character reference tokenization +Tokenizer.prototype._consumeNumericEntity = function (isHex) { + var digits = '', + nextCp = void 0; + + do { + digits += toChar(this._consume()); + nextCp = this._lookahead(); + } while (nextCp !== $.EOF && isDigit(nextCp, isHex)); + + if (this._lookahead() === $.SEMICOLON) + this._consume(); + + var referencedCp = parseInt(digits, isHex ? 16 : 10), + replacement = NUMERIC_ENTITY_REPLACEMENTS[referencedCp]; + + if (replacement) + return replacement; + + if (isReservedCodePoint(referencedCp)) + return $.REPLACEMENT_CHARACTER; + + return referencedCp; +}; + +Tokenizer.prototype._consumeNamedEntity = function (startCp, inAttr) { + var referencedCodePoints = null, + entityCodePointsCount = 0, + cp = startCp, + leaf = NAMED_ENTITY_TRIE[cp], + consumedCount = 1, + semicolonTerminated = false; + + for (; leaf && cp !== $.EOF; cp = this._consume(), consumedCount++, leaf = leaf.l && leaf.l[cp]) { + if (leaf.c) { + //NOTE: we have at least one named reference match. But we don't stop lookup at this point, + //because longer matches still can be found (e.g. '¬' and '∉') except the case + //then found match is terminated by semicolon. + referencedCodePoints = leaf.c; + entityCodePointsCount = consumedCount; + + if (cp === $.SEMICOLON) { + semicolonTerminated = true; + break; + } + } + } + + if (referencedCodePoints) { + if (!semicolonTerminated) { + //NOTE: unconsume excess (e.g. 'it' in '¬it') + this._unconsumeSeveral(consumedCount - entityCodePointsCount); + + //NOTE: If the character reference is being consumed as part of an attribute and the next character + //is either a U+003D EQUALS SIGN character (=) or an alphanumeric ASCII character, then, for historical + //reasons, all the characters that were matched after the U+0026 AMPERSAND character (&) must be + //unconsumed, and nothing is returned. + //However, if this next character is in fact a U+003D EQUALS SIGN character (=), then this is a + //parse error, because some legacy user agents will misinterpret the markup in those cases. + //(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tokenizing-character-references) + if (inAttr) { + var nextCp = this._lookahead(); + + if (nextCp === $.EQUALS_SIGN || isAsciiAlphaNumeric(nextCp)) { + this._unconsumeSeveral(entityCodePointsCount); + return null; + } + } + } + + return referencedCodePoints; + } + + this._unconsumeSeveral(consumedCount); + + return null; +}; + +Tokenizer.prototype._consumeCharacterReference = function (startCp, inAttr) { + if (isWhitespace(startCp) || startCp === $.GREATER_THAN_SIGN || startCp === $.AMPERSAND || + startCp === this.additionalAllowedCp || startCp === $.EOF) { + //NOTE: not a character reference. No characters are consumed, and nothing is returned. + this._unconsume(); + return null; + } + + else if (startCp === $.NUMBER_SIGN) { + //NOTE: we have a numeric entity candidate, now we should determine if it's hex or decimal + var isHex = false, + nextCp = this._lookahead(); + + if (nextCp === $.LATIN_SMALL_X || nextCp === $.LATIN_CAPITAL_X) { + this._consume(); + isHex = true; + } + + nextCp = this._lookahead(); + + //NOTE: if we have at least one digit this is a numeric entity for sure, so we consume it + if (nextCp !== $.EOF && isDigit(nextCp, isHex)) + return [this._consumeNumericEntity(isHex)]; + + else { + //NOTE: otherwise this is a bogus number entity and a parse error. Unconsume the number sign + //and the 'x'-character if appropriate. + this._unconsumeSeveral(isHex ? 2 : 1); + return null; + } + } + + else + return this._consumeNamedEntity(startCp, inAttr); +}; + +//State machine +var _ = Tokenizer.prototype; + +//12.2.4.1 Data state +//------------------------------------------------------------------ +_[DATA_STATE] = function dataState(cp) { + if (cp === $.AMPERSAND) + this.state = CHARACTER_REFERENCE_IN_DATA_STATE; + + else if (cp === $.LESS_THAN_SIGN) + this.state = TAG_OPEN_STATE; + + else if (cp === $.NULL) + this._emitCodePoint(cp); + + else if (cp === $.EOF) + this._emitEOFToken(); + + else + this._emitCodePoint(cp); +}; + + +//12.2.4.2 Character reference in data state +//------------------------------------------------------------------ +_[CHARACTER_REFERENCE_IN_DATA_STATE] = function characterReferenceInDataState(cp) { + this.state = DATA_STATE; + this.additionalAllowedCp = void 0; + + var referencedCodePoints = this._consumeCharacterReference(cp, false); + + if (referencedCodePoints) + this._emitSeveralCodePoints(referencedCodePoints); + else + this._emitChar('&'); +}; + + +//12.2.4.3 RCDATA state +//------------------------------------------------------------------ +_[RCDATA_STATE] = function rcdataState(cp) { + if (cp === $.AMPERSAND) + this.state = CHARACTER_REFERENCE_IN_RCDATA_STATE; + + else if (cp === $.LESS_THAN_SIGN) + this.state = RCDATA_LESS_THAN_SIGN_STATE; + + else if (cp === $.NULL) + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + + else if (cp === $.EOF) + this._emitEOFToken(); + + else + this._emitCodePoint(cp); +}; + + +//12.2.4.4 Character reference in RCDATA state +//------------------------------------------------------------------ +_[CHARACTER_REFERENCE_IN_RCDATA_STATE] = function characterReferenceInRcdataState(cp) { + this.state = RCDATA_STATE; + this.additionalAllowedCp = void 0; + + var referencedCodePoints = this._consumeCharacterReference(cp, false); + + if (referencedCodePoints) + this._emitSeveralCodePoints(referencedCodePoints); + else + this._emitChar('&'); +}; + + +//12.2.4.5 RAWTEXT state +//------------------------------------------------------------------ +_[RAWTEXT_STATE] = function rawtextState(cp) { + if (cp === $.LESS_THAN_SIGN) + this.state = RAWTEXT_LESS_THAN_SIGN_STATE; + + else if (cp === $.NULL) + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + + else if (cp === $.EOF) + this._emitEOFToken(); + + else + this._emitCodePoint(cp); +}; + + +//12.2.4.6 Script data state +//------------------------------------------------------------------ +_[SCRIPT_DATA_STATE] = function scriptDataState(cp) { + if (cp === $.LESS_THAN_SIGN) + this.state = SCRIPT_DATA_LESS_THAN_SIGN_STATE; + + else if (cp === $.NULL) + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + + else if (cp === $.EOF) + this._emitEOFToken(); + + else + this._emitCodePoint(cp); +}; + + +//12.2.4.7 PLAINTEXT state +//------------------------------------------------------------------ +_[PLAINTEXT_STATE] = function plaintextState(cp) { + if (cp === $.NULL) + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + + else if (cp === $.EOF) + this._emitEOFToken(); + + else + this._emitCodePoint(cp); +}; + + +//12.2.4.8 Tag open state +//------------------------------------------------------------------ +_[TAG_OPEN_STATE] = function tagOpenState(cp) { + if (cp === $.EXCLAMATION_MARK) + this.state = MARKUP_DECLARATION_OPEN_STATE; + + else if (cp === $.SOLIDUS) + this.state = END_TAG_OPEN_STATE; + + else if (isAsciiUpper(cp)) { + this._createStartTagToken(toAsciiLowerChar(cp)); + this.state = TAG_NAME_STATE; + } + + else if (isAsciiLower(cp)) { + this._createStartTagToken(toChar(cp)); + this.state = TAG_NAME_STATE; + } + + else if (cp === $.QUESTION_MARK) { + //NOTE: call bogus comment state directly with current consumed character to avoid unnecessary reconsumption. + this[BOGUS_COMMENT_STATE](cp); + } + + else { + this._emitChar('<'); + this._reconsumeInState(DATA_STATE); + } +}; + + +//12.2.4.9 End tag open state +//------------------------------------------------------------------ +_[END_TAG_OPEN_STATE] = function endTagOpenState(cp) { + if (isAsciiUpper(cp)) { + this._createEndTagToken(toAsciiLowerChar(cp)); + this.state = TAG_NAME_STATE; + } + + else if (isAsciiLower(cp)) { + this._createEndTagToken(toChar(cp)); + this.state = TAG_NAME_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) + this.state = DATA_STATE; + + else if (cp === $.EOF) { + this._reconsumeInState(DATA_STATE); + this._emitChar('<'); + this._emitChar('/'); + } + + else { + //NOTE: call bogus comment state directly with current consumed character to avoid unnecessary reconsumption. + this[BOGUS_COMMENT_STATE](cp); + } +}; + + +//12.2.4.10 Tag name state +//------------------------------------------------------------------ +_[TAG_NAME_STATE] = function tagNameState(cp) { + if (isWhitespace(cp)) + this.state = BEFORE_ATTRIBUTE_NAME_STATE; + + else if (cp === $.SOLIDUS) + this.state = SELF_CLOSING_START_TAG_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (isAsciiUpper(cp)) + this.currentToken.tagName += toAsciiLowerChar(cp); + + else if (cp === $.NULL) + this.currentToken.tagName += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this.currentToken.tagName += toChar(cp); +}; + + +//12.2.4.11 RCDATA less-than sign state +//------------------------------------------------------------------ +_[RCDATA_LESS_THAN_SIGN_STATE] = function rcdataLessThanSignState(cp) { + if (cp === $.SOLIDUS) { + this.tempBuff = []; + this.state = RCDATA_END_TAG_OPEN_STATE; + } + + else { + this._emitChar('<'); + this._reconsumeInState(RCDATA_STATE); + } +}; + + +//12.2.4.12 RCDATA end tag open state +//------------------------------------------------------------------ +_[RCDATA_END_TAG_OPEN_STATE] = function rcdataEndTagOpenState(cp) { + if (isAsciiUpper(cp)) { + this._createEndTagToken(toAsciiLowerChar(cp)); + this.tempBuff.push(cp); + this.state = RCDATA_END_TAG_NAME_STATE; + } + + else if (isAsciiLower(cp)) { + this._createEndTagToken(toChar(cp)); + this.tempBuff.push(cp); + this.state = RCDATA_END_TAG_NAME_STATE; + } + + else { + this._emitChar('<'); + this._emitChar('/'); + this._reconsumeInState(RCDATA_STATE); + } +}; + + +//12.2.4.13 RCDATA end tag name state +//------------------------------------------------------------------ +_[RCDATA_END_TAG_NAME_STATE] = function rcdataEndTagNameState(cp) { + if (isAsciiUpper(cp)) { + this.currentToken.tagName += toAsciiLowerChar(cp); + this.tempBuff.push(cp); + } + + else if (isAsciiLower(cp)) { + this.currentToken.tagName += toChar(cp); + this.tempBuff.push(cp); + } + + else { + if (this._isAppropriateEndTagToken()) { + if (isWhitespace(cp)) { + this.state = BEFORE_ATTRIBUTE_NAME_STATE; + return; + } + + if (cp === $.SOLIDUS) { + this.state = SELF_CLOSING_START_TAG_STATE; + return; + } + + if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + return; + } + } + + this._emitChar('<'); + this._emitChar('/'); + this._emitSeveralCodePoints(this.tempBuff); + this._reconsumeInState(RCDATA_STATE); + } +}; + + +//12.2.4.14 RAWTEXT less-than sign state +//------------------------------------------------------------------ +_[RAWTEXT_LESS_THAN_SIGN_STATE] = function rawtextLessThanSignState(cp) { + if (cp === $.SOLIDUS) { + this.tempBuff = []; + this.state = RAWTEXT_END_TAG_OPEN_STATE; + } + + else { + this._emitChar('<'); + this._reconsumeInState(RAWTEXT_STATE); + } +}; + + +//12.2.4.15 RAWTEXT end tag open state +//------------------------------------------------------------------ +_[RAWTEXT_END_TAG_OPEN_STATE] = function rawtextEndTagOpenState(cp) { + if (isAsciiUpper(cp)) { + this._createEndTagToken(toAsciiLowerChar(cp)); + this.tempBuff.push(cp); + this.state = RAWTEXT_END_TAG_NAME_STATE; + } + + else if (isAsciiLower(cp)) { + this._createEndTagToken(toChar(cp)); + this.tempBuff.push(cp); + this.state = RAWTEXT_END_TAG_NAME_STATE; + } + + else { + this._emitChar('<'); + this._emitChar('/'); + this._reconsumeInState(RAWTEXT_STATE); + } +}; + + +//12.2.4.16 RAWTEXT end tag name state +//------------------------------------------------------------------ +_[RAWTEXT_END_TAG_NAME_STATE] = function rawtextEndTagNameState(cp) { + if (isAsciiUpper(cp)) { + this.currentToken.tagName += toAsciiLowerChar(cp); + this.tempBuff.push(cp); + } + + else if (isAsciiLower(cp)) { + this.currentToken.tagName += toChar(cp); + this.tempBuff.push(cp); + } + + else { + if (this._isAppropriateEndTagToken()) { + if (isWhitespace(cp)) { + this.state = BEFORE_ATTRIBUTE_NAME_STATE; + return; + } + + if (cp === $.SOLIDUS) { + this.state = SELF_CLOSING_START_TAG_STATE; + return; + } + + if (cp === $.GREATER_THAN_SIGN) { + this._emitCurrentToken(); + this.state = DATA_STATE; + return; + } + } + + this._emitChar('<'); + this._emitChar('/'); + this._emitSeveralCodePoints(this.tempBuff); + this._reconsumeInState(RAWTEXT_STATE); + } +}; + + +//12.2.4.17 Script data less-than sign state +//------------------------------------------------------------------ +_[SCRIPT_DATA_LESS_THAN_SIGN_STATE] = function scriptDataLessThanSignState(cp) { + if (cp === $.SOLIDUS) { + this.tempBuff = []; + this.state = SCRIPT_DATA_END_TAG_OPEN_STATE; + } + + else if (cp === $.EXCLAMATION_MARK) { + this.state = SCRIPT_DATA_ESCAPE_START_STATE; + this._emitChar('<'); + this._emitChar('!'); + } + + else { + this._emitChar('<'); + this._reconsumeInState(SCRIPT_DATA_STATE); + } +}; + + +//12.2.4.18 Script data end tag open state +//------------------------------------------------------------------ +_[SCRIPT_DATA_END_TAG_OPEN_STATE] = function scriptDataEndTagOpenState(cp) { + if (isAsciiUpper(cp)) { + this._createEndTagToken(toAsciiLowerChar(cp)); + this.tempBuff.push(cp); + this.state = SCRIPT_DATA_END_TAG_NAME_STATE; + } + + else if (isAsciiLower(cp)) { + this._createEndTagToken(toChar(cp)); + this.tempBuff.push(cp); + this.state = SCRIPT_DATA_END_TAG_NAME_STATE; + } + + else { + this._emitChar('<'); + this._emitChar('/'); + this._reconsumeInState(SCRIPT_DATA_STATE); + } +}; + + +//12.2.4.19 Script data end tag name state +//------------------------------------------------------------------ +_[SCRIPT_DATA_END_TAG_NAME_STATE] = function scriptDataEndTagNameState(cp) { + if (isAsciiUpper(cp)) { + this.currentToken.tagName += toAsciiLowerChar(cp); + this.tempBuff.push(cp); + } + + else if (isAsciiLower(cp)) { + this.currentToken.tagName += toChar(cp); + this.tempBuff.push(cp); + } + + else { + if (this._isAppropriateEndTagToken()) { + if (isWhitespace(cp)) { + this.state = BEFORE_ATTRIBUTE_NAME_STATE; + return; + } + + else if (cp === $.SOLIDUS) { + this.state = SELF_CLOSING_START_TAG_STATE; + return; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this._emitCurrentToken(); + this.state = DATA_STATE; + return; + } + } + + this._emitChar('<'); + this._emitChar('/'); + this._emitSeveralCodePoints(this.tempBuff); + this._reconsumeInState(SCRIPT_DATA_STATE); + } +}; + + +//12.2.4.20 Script data escape start state +//------------------------------------------------------------------ +_[SCRIPT_DATA_ESCAPE_START_STATE] = function scriptDataEscapeStartState(cp) { + if (cp === $.HYPHEN_MINUS) { + this.state = SCRIPT_DATA_ESCAPE_START_DASH_STATE; + this._emitChar('-'); + } + + else + this._reconsumeInState(SCRIPT_DATA_STATE); +}; + + +//12.2.4.21 Script data escape start dash state +//------------------------------------------------------------------ +_[SCRIPT_DATA_ESCAPE_START_DASH_STATE] = function scriptDataEscapeStartDashState(cp) { + if (cp === $.HYPHEN_MINUS) { + this.state = SCRIPT_DATA_ESCAPED_DASH_DASH_STATE; + this._emitChar('-'); + } + + else + this._reconsumeInState(SCRIPT_DATA_STATE); +}; + + +//12.2.4.22 Script data escaped state +//------------------------------------------------------------------ +_[SCRIPT_DATA_ESCAPED_STATE] = function scriptDataEscapedState(cp) { + if (cp === $.HYPHEN_MINUS) { + this.state = SCRIPT_DATA_ESCAPED_DASH_STATE; + this._emitChar('-'); + } + + else if (cp === $.LESS_THAN_SIGN) + this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE; + + else if (cp === $.NULL) + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this._emitCodePoint(cp); +}; + + +//12.2.4.23 Script data escaped dash state +//------------------------------------------------------------------ +_[SCRIPT_DATA_ESCAPED_DASH_STATE] = function scriptDataEscapedDashState(cp) { + if (cp === $.HYPHEN_MINUS) { + this.state = SCRIPT_DATA_ESCAPED_DASH_DASH_STATE; + this._emitChar('-'); + } + + else if (cp === $.LESS_THAN_SIGN) + this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE; + + else if (cp === $.NULL) { + this.state = SCRIPT_DATA_ESCAPED_STATE; + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else { + this.state = SCRIPT_DATA_ESCAPED_STATE; + this._emitCodePoint(cp); + } +}; + + +//12.2.4.24 Script data escaped dash dash state +//------------------------------------------------------------------ +_[SCRIPT_DATA_ESCAPED_DASH_DASH_STATE] = function scriptDataEscapedDashDashState(cp) { + if (cp === $.HYPHEN_MINUS) + this._emitChar('-'); + + else if (cp === $.LESS_THAN_SIGN) + this.state = SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = SCRIPT_DATA_STATE; + this._emitChar('>'); + } + + else if (cp === $.NULL) { + this.state = SCRIPT_DATA_ESCAPED_STATE; + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else { + this.state = SCRIPT_DATA_ESCAPED_STATE; + this._emitCodePoint(cp); + } +}; + + +//12.2.4.25 Script data escaped less-than sign state +//------------------------------------------------------------------ +_[SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE] = function scriptDataEscapedLessThanSignState(cp) { + if (cp === $.SOLIDUS) { + this.tempBuff = []; + this.state = SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE; + } + + else if (isAsciiUpper(cp)) { + this.tempBuff = []; + this.tempBuff.push(toAsciiLowerCodePoint(cp)); + this.state = SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE; + this._emitChar('<'); + this._emitCodePoint(cp); + } + + else if (isAsciiLower(cp)) { + this.tempBuff = []; + this.tempBuff.push(cp); + this.state = SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE; + this._emitChar('<'); + this._emitCodePoint(cp); + } + + else { + this._emitChar('<'); + this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE); + } +}; + + +//12.2.4.26 Script data escaped end tag open state +//------------------------------------------------------------------ +_[SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE] = function scriptDataEscapedEndTagOpenState(cp) { + if (isAsciiUpper(cp)) { + this._createEndTagToken(toAsciiLowerChar(cp)); + this.tempBuff.push(cp); + this.state = SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE; + } + + else if (isAsciiLower(cp)) { + this._createEndTagToken(toChar(cp)); + this.tempBuff.push(cp); + this.state = SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE; + } + + else { + this._emitChar('<'); + this._emitChar('/'); + this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE); + } +}; + + +//12.2.4.27 Script data escaped end tag name state +//------------------------------------------------------------------ +_[SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE] = function scriptDataEscapedEndTagNameState(cp) { + if (isAsciiUpper(cp)) { + this.currentToken.tagName += toAsciiLowerChar(cp); + this.tempBuff.push(cp); + } + + else if (isAsciiLower(cp)) { + this.currentToken.tagName += toChar(cp); + this.tempBuff.push(cp); + } + + else { + if (this._isAppropriateEndTagToken()) { + if (isWhitespace(cp)) { + this.state = BEFORE_ATTRIBUTE_NAME_STATE; + return; + } + + if (cp === $.SOLIDUS) { + this.state = SELF_CLOSING_START_TAG_STATE; + return; + } + + if (cp === $.GREATER_THAN_SIGN) { + this._emitCurrentToken(); + this.state = DATA_STATE; + return; + } + } + + this._emitChar('<'); + this._emitChar('/'); + this._emitSeveralCodePoints(this.tempBuff); + this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE); + } +}; + + +//12.2.4.28 Script data double escape start state +//------------------------------------------------------------------ +_[SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE] = function scriptDataDoubleEscapeStartState(cp) { + if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN) { + this.state = this.isTempBufferEqualToScriptString() ? SCRIPT_DATA_DOUBLE_ESCAPED_STATE : SCRIPT_DATA_ESCAPED_STATE; + this._emitCodePoint(cp); + } + + else if (isAsciiUpper(cp)) { + this.tempBuff.push(toAsciiLowerCodePoint(cp)); + this._emitCodePoint(cp); + } + + else if (isAsciiLower(cp)) { + this.tempBuff.push(cp); + this._emitCodePoint(cp); + } + + else + this._reconsumeInState(SCRIPT_DATA_ESCAPED_STATE); +}; + + +//12.2.4.29 Script data double escaped state +//------------------------------------------------------------------ +_[SCRIPT_DATA_DOUBLE_ESCAPED_STATE] = function scriptDataDoubleEscapedState(cp) { + if (cp === $.HYPHEN_MINUS) { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE; + this._emitChar('-'); + } + + else if (cp === $.LESS_THAN_SIGN) { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE; + this._emitChar('<'); + } + + else if (cp === $.NULL) + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this._emitCodePoint(cp); +}; + + +//12.2.4.30 Script data double escaped dash state +//------------------------------------------------------------------ +_[SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE] = function scriptDataDoubleEscapedDashState(cp) { + if (cp === $.HYPHEN_MINUS) { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE; + this._emitChar('-'); + } + + else if (cp === $.LESS_THAN_SIGN) { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE; + this._emitChar('<'); + } + + else if (cp === $.NULL) { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE; + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE; + this._emitCodePoint(cp); + } +}; + + +//12.2.4.31 Script data double escaped dash dash state +//------------------------------------------------------------------ +_[SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE] = function scriptDataDoubleEscapedDashDashState(cp) { + if (cp === $.HYPHEN_MINUS) + this._emitChar('-'); + + else if (cp === $.LESS_THAN_SIGN) { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE; + this._emitChar('<'); + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = SCRIPT_DATA_STATE; + this._emitChar('>'); + } + + else if (cp === $.NULL) { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE; + this._emitChar(UNICODE.REPLACEMENT_CHARACTER); + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else { + this.state = SCRIPT_DATA_DOUBLE_ESCAPED_STATE; + this._emitCodePoint(cp); + } +}; + + +//12.2.4.32 Script data double escaped less-than sign state +//------------------------------------------------------------------ +_[SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE] = function scriptDataDoubleEscapedLessThanSignState(cp) { + if (cp === $.SOLIDUS) { + this.tempBuff = []; + this.state = SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE; + this._emitChar('/'); + } + + else + this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPED_STATE); +}; + + +//12.2.4.33 Script data double escape end state +//------------------------------------------------------------------ +_[SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE] = function scriptDataDoubleEscapeEndState(cp) { + if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN) { + this.state = this.isTempBufferEqualToScriptString() ? SCRIPT_DATA_ESCAPED_STATE : SCRIPT_DATA_DOUBLE_ESCAPED_STATE; + + this._emitCodePoint(cp); + } + + else if (isAsciiUpper(cp)) { + this.tempBuff.push(toAsciiLowerCodePoint(cp)); + this._emitCodePoint(cp); + } + + else if (isAsciiLower(cp)) { + this.tempBuff.push(cp); + this._emitCodePoint(cp); + } + + else + this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPED_STATE); +}; + + +//12.2.4.34 Before attribute name state +//------------------------------------------------------------------ +_[BEFORE_ATTRIBUTE_NAME_STATE] = function beforeAttributeNameState(cp) { + if (isWhitespace(cp)) + return; + + if (cp === $.SOLIDUS) + this.state = SELF_CLOSING_START_TAG_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (isAsciiUpper(cp)) { + this._createAttr(toAsciiLowerChar(cp)); + this.state = ATTRIBUTE_NAME_STATE; + } + + else if (cp === $.NULL) { + this._createAttr(UNICODE.REPLACEMENT_CHARACTER); + this.state = ATTRIBUTE_NAME_STATE; + } + + else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN || cp === $.EQUALS_SIGN) { + this._createAttr(toChar(cp)); + this.state = ATTRIBUTE_NAME_STATE; + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else { + this._createAttr(toChar(cp)); + this.state = ATTRIBUTE_NAME_STATE; + } +}; + + +//12.2.4.35 Attribute name state +//------------------------------------------------------------------ +_[ATTRIBUTE_NAME_STATE] = function attributeNameState(cp) { + if (isWhitespace(cp)) + this._leaveAttrName(AFTER_ATTRIBUTE_NAME_STATE); + + else if (cp === $.SOLIDUS) + this._leaveAttrName(SELF_CLOSING_START_TAG_STATE); + + else if (cp === $.EQUALS_SIGN) + this._leaveAttrName(BEFORE_ATTRIBUTE_VALUE_STATE); + + else if (cp === $.GREATER_THAN_SIGN) { + this._leaveAttrName(DATA_STATE); + this._emitCurrentToken(); + } + + else if (isAsciiUpper(cp)) + this.currentAttr.name += toAsciiLowerChar(cp); + + else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN) + this.currentAttr.name += toChar(cp); + + else if (cp === $.NULL) + this.currentAttr.name += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this.currentAttr.name += toChar(cp); +}; + + +//12.2.4.36 After attribute name state +//------------------------------------------------------------------ +_[AFTER_ATTRIBUTE_NAME_STATE] = function afterAttributeNameState(cp) { + if (isWhitespace(cp)) + return; + + if (cp === $.SOLIDUS) + this.state = SELF_CLOSING_START_TAG_STATE; + + else if (cp === $.EQUALS_SIGN) + this.state = BEFORE_ATTRIBUTE_VALUE_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (isAsciiUpper(cp)) { + this._createAttr(toAsciiLowerChar(cp)); + this.state = ATTRIBUTE_NAME_STATE; + } + + else if (cp === $.NULL) { + this._createAttr(UNICODE.REPLACEMENT_CHARACTER); + this.state = ATTRIBUTE_NAME_STATE; + } + + else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN) { + this._createAttr(toChar(cp)); + this.state = ATTRIBUTE_NAME_STATE; + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else { + this._createAttr(toChar(cp)); + this.state = ATTRIBUTE_NAME_STATE; + } +}; + + +//12.2.4.37 Before attribute value state +//------------------------------------------------------------------ +_[BEFORE_ATTRIBUTE_VALUE_STATE] = function beforeAttributeValueState(cp) { + if (isWhitespace(cp)) + return; + + if (cp === $.QUOTATION_MARK) + this.state = ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE; + + else if (cp === $.AMPERSAND) + this._reconsumeInState(ATTRIBUTE_VALUE_UNQUOTED_STATE); + + else if (cp === $.APOSTROPHE) + this.state = ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE; + + else if (cp === $.NULL) { + this.currentAttr.value += UNICODE.REPLACEMENT_CHARACTER; + this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.LESS_THAN_SIGN || cp === $.EQUALS_SIGN || cp === $.GRAVE_ACCENT) { + this.currentAttr.value += toChar(cp); + this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE; + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else { + this.currentAttr.value += toChar(cp); + this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE; + } +}; + + +//12.2.4.38 Attribute value (double-quoted) state +//------------------------------------------------------------------ +_[ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE] = function attributeValueDoubleQuotedState(cp) { + if (cp === $.QUOTATION_MARK) + this.state = AFTER_ATTRIBUTE_VALUE_QUOTED_STATE; + + else if (cp === $.AMPERSAND) { + this.additionalAllowedCp = $.QUOTATION_MARK; + this.returnState = this.state; + this.state = CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE; + } + + else if (cp === $.NULL) + this.currentAttr.value += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this.currentAttr.value += toChar(cp); +}; + + +//12.2.4.39 Attribute value (single-quoted) state +//------------------------------------------------------------------ +_[ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE] = function attributeValueSingleQuotedState(cp) { + if (cp === $.APOSTROPHE) + this.state = AFTER_ATTRIBUTE_VALUE_QUOTED_STATE; + + else if (cp === $.AMPERSAND) { + this.additionalAllowedCp = $.APOSTROPHE; + this.returnState = this.state; + this.state = CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE; + } + + else if (cp === $.NULL) + this.currentAttr.value += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this.currentAttr.value += toChar(cp); +}; + + +//12.2.4.40 Attribute value (unquoted) state +//------------------------------------------------------------------ +_[ATTRIBUTE_VALUE_UNQUOTED_STATE] = function attributeValueUnquotedState(cp) { + if (isWhitespace(cp)) + this.state = BEFORE_ATTRIBUTE_NAME_STATE; + + else if (cp === $.AMPERSAND) { + this.additionalAllowedCp = $.GREATER_THAN_SIGN; + this.returnState = this.state; + this.state = CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.NULL) + this.currentAttr.value += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN || + cp === $.EQUALS_SIGN || cp === $.GRAVE_ACCENT) { + this.currentAttr.value += toChar(cp); + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this.currentAttr.value += toChar(cp); +}; + + +//12.2.4.41 Character reference in attribute value state +//------------------------------------------------------------------ +_[CHARACTER_REFERENCE_IN_ATTRIBUTE_VALUE_STATE] = function characterReferenceInAttributeValueState(cp) { + var referencedCodePoints = this._consumeCharacterReference(cp, true); + + if (referencedCodePoints) { + for (var i = 0; i < referencedCodePoints.length; i++) + this.currentAttr.value += toChar(referencedCodePoints[i]); + } else + this.currentAttr.value += '&'; + + this.state = this.returnState; +}; + + +//12.2.4.42 After attribute value (quoted) state +//------------------------------------------------------------------ +_[AFTER_ATTRIBUTE_VALUE_QUOTED_STATE] = function afterAttributeValueQuotedState(cp) { + if (isWhitespace(cp)) + this.state = BEFORE_ATTRIBUTE_NAME_STATE; + + else if (cp === $.SOLIDUS) + this.state = SELF_CLOSING_START_TAG_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this._reconsumeInState(BEFORE_ATTRIBUTE_NAME_STATE); +}; + + +//12.2.4.43 Self-closing start tag state +//------------------------------------------------------------------ +_[SELF_CLOSING_START_TAG_STATE] = function selfClosingStartTagState(cp) { + if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.selfClosing = true; + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.EOF) + this._reconsumeInState(DATA_STATE); + + else + this._reconsumeInState(BEFORE_ATTRIBUTE_NAME_STATE); +}; + + +//12.2.4.44 Bogus comment state +//------------------------------------------------------------------ +_[BOGUS_COMMENT_STATE] = function bogusCommentState(cp) { + this._createCommentToken(); + + while (true) { + if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + break; + } + + else if (cp === $.EOF) { + this._reconsumeInState(DATA_STATE); + break; + } + + else { + this.currentToken.data += cp === $.NULL ? UNICODE.REPLACEMENT_CHARACTER : toChar(cp); + cp = this._consume(); + } + } + + this._emitCurrentToken(); +}; + + +//12.2.4.45 Markup declaration open state +//------------------------------------------------------------------ +_[MARKUP_DECLARATION_OPEN_STATE] = function markupDeclarationOpenState(cp) { + if (this._consumeSubsequentIfMatch($$.DASH_DASH_STRING, cp, true)) { + this._createCommentToken(); + this.state = COMMENT_START_STATE; + } + + else if (this._consumeSubsequentIfMatch($$.DOCTYPE_STRING, cp, false)) + this.state = DOCTYPE_STATE; + + else if (this.allowCDATA && this._consumeSubsequentIfMatch($$.CDATA_START_STRING, cp, true)) + this.state = CDATA_SECTION_STATE; + + else { + //NOTE: call bogus comment state directly with current consumed character to avoid unnecessary reconsumption. + this[BOGUS_COMMENT_STATE](cp); + } +}; + + +//12.2.4.46 Comment start state +//------------------------------------------------------------------ +_[COMMENT_START_STATE] = function commentStartState(cp) { + if (cp === $.HYPHEN_MINUS) + this.state = COMMENT_START_DASH_STATE; + + else if (cp === $.NULL) { + this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; + this.state = COMMENT_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.EOF) { + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.data += toChar(cp); + this.state = COMMENT_STATE; + } +}; + + +//12.2.4.47 Comment start dash state +//------------------------------------------------------------------ +_[COMMENT_START_DASH_STATE] = function commentStartDashState(cp) { + if (cp === $.HYPHEN_MINUS) + this.state = COMMENT_END_STATE; + + else if (cp === $.NULL) { + this.currentToken.data += '-'; + this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; + this.state = COMMENT_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.EOF) { + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.data += '-'; + this.currentToken.data += toChar(cp); + this.state = COMMENT_STATE; + } +}; + + +//12.2.4.48 Comment state +//------------------------------------------------------------------ +_[COMMENT_STATE] = function commentState(cp) { + if (cp === $.HYPHEN_MINUS) + this.state = COMMENT_END_DASH_STATE; + + else if (cp === $.NULL) + this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.EOF) { + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else + this.currentToken.data += toChar(cp); +}; + + +//12.2.4.49 Comment end dash state +//------------------------------------------------------------------ +_[COMMENT_END_DASH_STATE] = function commentEndDashState(cp) { + if (cp === $.HYPHEN_MINUS) + this.state = COMMENT_END_STATE; + + else if (cp === $.NULL) { + this.currentToken.data += '-'; + this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; + this.state = COMMENT_STATE; + } + + else if (cp === $.EOF) { + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.data += '-'; + this.currentToken.data += toChar(cp); + this.state = COMMENT_STATE; + } +}; + + +//12.2.4.50 Comment end state +//------------------------------------------------------------------ +_[COMMENT_END_STATE] = function commentEndState(cp) { + if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.EXCLAMATION_MARK) + this.state = COMMENT_END_BANG_STATE; + + else if (cp === $.HYPHEN_MINUS) + this.currentToken.data += '-'; + + else if (cp === $.NULL) { + this.currentToken.data += '--'; + this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; + this.state = COMMENT_STATE; + } + + else if (cp === $.EOF) { + this._reconsumeInState(DATA_STATE); + this._emitCurrentToken(); + } + + else { + this.currentToken.data += '--'; + this.currentToken.data += toChar(cp); + this.state = COMMENT_STATE; + } +}; + + +//12.2.4.51 Comment end bang state +//------------------------------------------------------------------ +_[COMMENT_END_BANG_STATE] = function commentEndBangState(cp) { + if (cp === $.HYPHEN_MINUS) { + this.currentToken.data += '--!'; + this.state = COMMENT_END_DASH_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.NULL) { + this.currentToken.data += '--!'; + this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER; + this.state = COMMENT_STATE; + } + + else if (cp === $.EOF) { + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.data += '--!'; + this.currentToken.data += toChar(cp); + this.state = COMMENT_STATE; + } +}; + + +//12.2.4.52 DOCTYPE state +//------------------------------------------------------------------ +_[DOCTYPE_STATE] = function doctypeState(cp) { + if (isWhitespace(cp)) + this.state = BEFORE_DOCTYPE_NAME_STATE; + + else if (cp === $.EOF) { + this._createDoctypeToken(); + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else + this._reconsumeInState(BEFORE_DOCTYPE_NAME_STATE); +}; + + +//12.2.4.53 Before DOCTYPE name state +//------------------------------------------------------------------ +_[BEFORE_DOCTYPE_NAME_STATE] = function beforeDoctypeNameState(cp) { + if (isWhitespace(cp)) + return; + + if (isAsciiUpper(cp)) { + this._createDoctypeToken(toAsciiLowerChar(cp)); + this.state = DOCTYPE_NAME_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this._createDoctypeToken(); + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this._createDoctypeToken(); + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else if (cp === $.NULL) { + this._createDoctypeToken(UNICODE.REPLACEMENT_CHARACTER); + this.state = DOCTYPE_NAME_STATE; + } + + else { + this._createDoctypeToken(toChar(cp)); + this.state = DOCTYPE_NAME_STATE; + } +}; + + +//12.2.4.54 DOCTYPE name state +//------------------------------------------------------------------ +_[DOCTYPE_NAME_STATE] = function doctypeNameState(cp) { + if (isWhitespace(cp)) + this.state = AFTER_DOCTYPE_NAME_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (isAsciiUpper(cp)) + this.currentToken.name += toAsciiLowerChar(cp); + + else if (cp === $.NULL) + this.currentToken.name += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else + this.currentToken.name += toChar(cp); +}; + + +//12.2.4.55 After DOCTYPE name state +//------------------------------------------------------------------ +_[AFTER_DOCTYPE_NAME_STATE] = function afterDoctypeNameState(cp) { + if (isWhitespace(cp)) + return; + + if (cp === $.GREATER_THAN_SIGN) { + this.state = DATA_STATE; + this._emitCurrentToken(); + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else if (this._consumeSubsequentIfMatch($$.PUBLIC_STRING, cp, false)) + this.state = AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE; + + else if (this._consumeSubsequentIfMatch($$.SYSTEM_STRING, cp, false)) + this.state = AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE; + + else { + this.currentToken.forceQuirks = true; + this.state = BOGUS_DOCTYPE_STATE; + } +}; + + +//12.2.4.56 After DOCTYPE public keyword state +//------------------------------------------------------------------ +_[AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE] = function afterDoctypePublicKeywordState(cp) { + if (isWhitespace(cp)) + this.state = BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE; + + else if (cp === $.QUOTATION_MARK) { + this.currentToken.publicId = ''; + this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE; + } + + else if (cp === $.APOSTROPHE) { + this.currentToken.publicId = ''; + this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.forceQuirks = true; + this.state = BOGUS_DOCTYPE_STATE; + } +}; + + +//12.2.4.57 Before DOCTYPE public identifier state +//------------------------------------------------------------------ +_[BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE] = function beforeDoctypePublicIdentifierState(cp) { + if (isWhitespace(cp)) + return; + + if (cp === $.QUOTATION_MARK) { + this.currentToken.publicId = ''; + this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE; + } + + else if (cp === $.APOSTROPHE) { + this.currentToken.publicId = ''; + this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.forceQuirks = true; + this.state = BOGUS_DOCTYPE_STATE; + } +}; + + +//12.2.4.58 DOCTYPE public identifier (double-quoted) state +//------------------------------------------------------------------ +_[DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE] = function doctypePublicIdentifierDoubleQuotedState(cp) { + if (cp === $.QUOTATION_MARK) + this.state = AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE; + + else if (cp === $.NULL) + this.currentToken.publicId += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else + this.currentToken.publicId += toChar(cp); +}; + + +//12.2.4.59 DOCTYPE public identifier (single-quoted) state +//------------------------------------------------------------------ +_[DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE] = function doctypePublicIdentifierSingleQuotedState(cp) { + if (cp === $.APOSTROPHE) + this.state = AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE; + + else if (cp === $.NULL) + this.currentToken.publicId += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else + this.currentToken.publicId += toChar(cp); +}; + + +//12.2.4.60 After DOCTYPE public identifier state +//------------------------------------------------------------------ +_[AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE] = function afterDoctypePublicIdentifierState(cp) { + if (isWhitespace(cp)) + this.state = BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.QUOTATION_MARK) { + this.currentToken.systemId = ''; + this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE; + } + + else if (cp === $.APOSTROPHE) { + this.currentToken.systemId = ''; + this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.forceQuirks = true; + this.state = BOGUS_DOCTYPE_STATE; + } +}; + + +//12.2.4.61 Between DOCTYPE public and system identifiers state +//------------------------------------------------------------------ +_[BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE] = function betweenDoctypePublicAndSystemIdentifiersState(cp) { + if (isWhitespace(cp)) + return; + + if (cp === $.GREATER_THAN_SIGN) { + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.QUOTATION_MARK) { + this.currentToken.systemId = ''; + this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE; + } + + + else if (cp === $.APOSTROPHE) { + this.currentToken.systemId = ''; + this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.forceQuirks = true; + this.state = BOGUS_DOCTYPE_STATE; + } +}; + + +//12.2.4.62 After DOCTYPE system keyword state +//------------------------------------------------------------------ +_[AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE] = function afterDoctypeSystemKeywordState(cp) { + if (isWhitespace(cp)) + this.state = BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE; + + else if (cp === $.QUOTATION_MARK) { + this.currentToken.systemId = ''; + this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE; + } + + else if (cp === $.APOSTROPHE) { + this.currentToken.systemId = ''; + this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.forceQuirks = true; + this.state = BOGUS_DOCTYPE_STATE; + } +}; + + +//12.2.4.63 Before DOCTYPE system identifier state +//------------------------------------------------------------------ +_[BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE] = function beforeDoctypeSystemIdentifierState(cp) { + if (isWhitespace(cp)) + return; + + if (cp === $.QUOTATION_MARK) { + this.currentToken.systemId = ''; + this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE; + } + + else if (cp === $.APOSTROPHE) { + this.currentToken.systemId = ''; + this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE; + } + + else if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else { + this.currentToken.forceQuirks = true; + this.state = BOGUS_DOCTYPE_STATE; + } +}; + + +//12.2.4.64 DOCTYPE system identifier (double-quoted) state +//------------------------------------------------------------------ +_[DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE] = function doctypeSystemIdentifierDoubleQuotedState(cp) { + if (cp === $.QUOTATION_MARK) + this.state = AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.NULL) + this.currentToken.systemId += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else + this.currentToken.systemId += toChar(cp); +}; + + +//12.2.4.65 DOCTYPE system identifier (single-quoted) state +//------------------------------------------------------------------ +_[DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE] = function doctypeSystemIdentifierSingleQuotedState(cp) { + if (cp === $.APOSTROPHE) + this.state = AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE; + + else if (cp === $.GREATER_THAN_SIGN) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.NULL) + this.currentToken.systemId += UNICODE.REPLACEMENT_CHARACTER; + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else + this.currentToken.systemId += toChar(cp); +}; + + +//12.2.4.66 After DOCTYPE system identifier state +//------------------------------------------------------------------ +_[AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE] = function afterDoctypeSystemIdentifierState(cp) { + if (isWhitespace(cp)) + return; + + if (cp === $.GREATER_THAN_SIGN) { + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this.currentToken.forceQuirks = true; + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } + + else + this.state = BOGUS_DOCTYPE_STATE; +}; + + +//12.2.4.67 Bogus DOCTYPE state +//------------------------------------------------------------------ +_[BOGUS_DOCTYPE_STATE] = function bogusDoctypeState(cp) { + if (cp === $.GREATER_THAN_SIGN) { + this._emitCurrentToken(); + this.state = DATA_STATE; + } + + else if (cp === $.EOF) { + this._emitCurrentToken(); + this._reconsumeInState(DATA_STATE); + } +}; + + +//12.2.4.68 CDATA section state +//------------------------------------------------------------------ +_[CDATA_SECTION_STATE] = function cdataSectionState(cp) { + while (true) { + if (cp === $.EOF) { + this._reconsumeInState(DATA_STATE); + break; + } + + else if (this._consumeSubsequentIfMatch($$.CDATA_END_STRING, cp, true)) { + this.state = DATA_STATE; + break; + } + + else { + this._emitCodePoint(cp); + cp = this._consume(); + } + } +}; diff --git a/lib/tree_adapters/default.js b/lib/tree_adapters/default.js index c22d45518..5303c923d 100644 --- a/lib/tree_adapters/default.js +++ b/lib/tree_adapters/default.js @@ -1,198 +1,200 @@ -//Node construction -exports.createDocument = function () { - return { - nodeName: '#document', - quirksMode: false, - childNodes: [] - }; -}; - -exports.createDocumentFragment = function () { - return { - nodeName: '#document-fragment', - quirksMode: false, - childNodes: [] - }; -}; - -exports.createElement = function (tagName, namespaceURI, attrs) { - return { - nodeName: tagName, - tagName: tagName, - attrs: attrs, - namespaceURI: namespaceURI, - childNodes: [], - parentNode: null - }; -}; - -exports.createCommentNode = function (data) { - return { - nodeName: '#comment', - data: data, - parentNode: null - }; -}; - -var createTextNode = function (value) { - return { - nodeName: '#text', - value: value, - parentNode: null - } -}; - - -//Tree mutation -exports.setDocumentType = function (document, name, publicId, systemId) { - var doctypeNode = null; - - for (var i = 0; i < document.childNodes.length; i++) { - if (document.childNodes[i].nodeName === '#documentType') { - doctypeNode = document.childNodes[i]; - break; - } - } - - if (doctypeNode) { - doctypeNode.name = name; - doctypeNode.publicId = publicId; - doctypeNode.systemId = systemId; - } - - else { - appendChild(document, { - nodeName: '#documentType', - name: name, - publicId: publicId, - systemId: systemId - }); - } -}; - -exports.setQuirksMode = function (document) { - document.quirksMode = true; -}; - -exports.isQuirksMode = function (document) { - return document.quirksMode; -}; - -var appendChild = exports.appendChild = function (parentNode, newNode) { - parentNode.childNodes.push(newNode); - newNode.parentNode = parentNode; -}; - -var insertBefore = exports.insertBefore = function (parentNode, newNode, referenceNode) { - var insertionIdx = parentNode.childNodes.indexOf(referenceNode); - - parentNode.childNodes.splice(insertionIdx, 0, newNode); - newNode.parentNode = parentNode; -}; - -exports.detachNode = function (node) { - if (node.parentNode) { - var idx = node.parentNode.childNodes.indexOf(node); - - node.parentNode.childNodes.splice(idx, 1); - node.parentNode = null; - } -}; - -exports.insertText = function (parentNode, text) { - if (parentNode.childNodes.length) { - var prevNode = parentNode.childNodes[parentNode.childNodes.length - 1]; - - if (prevNode.nodeName === '#text') { - prevNode.value += text; - return; - } - } - - appendChild(parentNode, createTextNode(text)); -}; - -exports.insertTextBefore = function (parentNode, text, referenceNode) { - var prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1]; - - if (prevNode && prevNode.nodeName === '#text') - prevNode.value += text; - else - insertBefore(parentNode, createTextNode(text), referenceNode); -}; - -exports.adoptAttributes = function (recipientNode, attrs) { - var recipientAttrsMap = []; - - for (var i = 0; i < recipientNode.attrs.length; i++) - recipientAttrsMap.push(recipientNode.attrs[i].name); - - for (var j = 0; j < attrs.length; j++) { - if (recipientAttrsMap.indexOf(attrs[j].name) === -1) - recipientNode.attrs.push(attrs[j]); - } -}; - - -//Tree traversing -exports.getFirstChild = function (node) { - return node.childNodes[0]; -}; - -exports.getChildNodes = function (node) { - return node.childNodes; -}; - -exports.getParentNode = function (node) { - return node.parentNode; -}; - -exports.getAttrList = function (node) { - return node.attrs; -}; - -//Node data -exports.getTagName = function (element) { - return element.tagName; -}; - -exports.getNamespaceURI = function (element) { - return element.namespaceURI; -}; - -exports.getTextNodeContent = function (textNode) { - return textNode.value; -}; - -exports.getCommentNodeContent = function (commentNode) { - return commentNode.data; -}; - -exports.getDocumentTypeNodeName = function (doctypeNode) { - return doctypeNode.name; -}; - -exports.getDocumentTypeNodePublicId = function (doctypeNode) { - return doctypeNode.publicId; -}; - -exports.getDocumentTypeNodeSystemId = function (doctypeNode) { - return doctypeNode.systemId; -}; - -//Node types -exports.isTextNode = function (node) { - return node.nodeName === '#text'; -}; - -exports.isCommentNode = function (node) { - return node.nodeName === '#comment'; -}; - -exports.isDocumentTypeNode = function (node) { - return node.nodeName === '#documentType'; -}; - -exports.isElementNode = function (node) { - return !!node.tagName; -}; +'use strict'; + +//Node construction +exports.createDocument = function () { + return { + nodeName: '#document', + quirksMode: false, + childNodes: [] + }; +}; + +exports.createDocumentFragment = function () { + return { + nodeName: '#document-fragment', + quirksMode: false, + childNodes: [] + }; +}; + +exports.createElement = function (tagName, namespaceURI, attrs) { + return { + nodeName: tagName, + tagName: tagName, + attrs: attrs, + namespaceURI: namespaceURI, + childNodes: [], + parentNode: null + }; +}; + +exports.createCommentNode = function (data) { + return { + nodeName: '#comment', + data: data, + parentNode: null + }; +}; + +var createTextNode = function (value) { + return { + nodeName: '#text', + value: value, + parentNode: null + } +}; + + +//Tree mutation +exports.setDocumentType = function (document, name, publicId, systemId) { + var doctypeNode = null; + + for (var i = 0; i < document.childNodes.length; i++) { + if (document.childNodes[i].nodeName === '#documentType') { + doctypeNode = document.childNodes[i]; + break; + } + } + + if (doctypeNode) { + doctypeNode.name = name; + doctypeNode.publicId = publicId; + doctypeNode.systemId = systemId; + } + + else { + appendChild(document, { + nodeName: '#documentType', + name: name, + publicId: publicId, + systemId: systemId + }); + } +}; + +exports.setQuirksMode = function (document) { + document.quirksMode = true; +}; + +exports.isQuirksMode = function (document) { + return document.quirksMode; +}; + +var appendChild = exports.appendChild = function (parentNode, newNode) { + parentNode.childNodes.push(newNode); + newNode.parentNode = parentNode; +}; + +var insertBefore = exports.insertBefore = function (parentNode, newNode, referenceNode) { + var insertionIdx = parentNode.childNodes.indexOf(referenceNode); + + parentNode.childNodes.splice(insertionIdx, 0, newNode); + newNode.parentNode = parentNode; +}; + +exports.detachNode = function (node) { + if (node.parentNode) { + var idx = node.parentNode.childNodes.indexOf(node); + + node.parentNode.childNodes.splice(idx, 1); + node.parentNode = null; + } +}; + +exports.insertText = function (parentNode, text) { + if (parentNode.childNodes.length) { + var prevNode = parentNode.childNodes[parentNode.childNodes.length - 1]; + + if (prevNode.nodeName === '#text') { + prevNode.value += text; + return; + } + } + + appendChild(parentNode, createTextNode(text)); +}; + +exports.insertTextBefore = function (parentNode, text, referenceNode) { + var prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1]; + + if (prevNode && prevNode.nodeName === '#text') + prevNode.value += text; + else + insertBefore(parentNode, createTextNode(text), referenceNode); +}; + +exports.adoptAttributes = function (recipientNode, attrs) { + var recipientAttrsMap = []; + + for (var i = 0; i < recipientNode.attrs.length; i++) + recipientAttrsMap.push(recipientNode.attrs[i].name); + + for (var j = 0; j < attrs.length; j++) { + if (recipientAttrsMap.indexOf(attrs[j].name) === -1) + recipientNode.attrs.push(attrs[j]); + } +}; + + +//Tree traversing +exports.getFirstChild = function (node) { + return node.childNodes[0]; +}; + +exports.getChildNodes = function (node) { + return node.childNodes; +}; + +exports.getParentNode = function (node) { + return node.parentNode; +}; + +exports.getAttrList = function (node) { + return node.attrs; +}; + +//Node data +exports.getTagName = function (element) { + return element.tagName; +}; + +exports.getNamespaceURI = function (element) { + return element.namespaceURI; +}; + +exports.getTextNodeContent = function (textNode) { + return textNode.value; +}; + +exports.getCommentNodeContent = function (commentNode) { + return commentNode.data; +}; + +exports.getDocumentTypeNodeName = function (doctypeNode) { + return doctypeNode.name; +}; + +exports.getDocumentTypeNodePublicId = function (doctypeNode) { + return doctypeNode.publicId; +}; + +exports.getDocumentTypeNodeSystemId = function (doctypeNode) { + return doctypeNode.systemId; +}; + +//Node types +exports.isTextNode = function (node) { + return node.nodeName === '#text'; +}; + +exports.isCommentNode = function (node) { + return node.nodeName === '#comment'; +}; + +exports.isDocumentTypeNode = function (node) { + return node.nodeName === '#documentType'; +}; + +exports.isElementNode = function (node) { + return !!node.tagName; +}; diff --git a/lib/tree_adapters/htmlparser2.js b/lib/tree_adapters/htmlparser2.js index 30bc1d096..bcf4947cd 100644 --- a/lib/tree_adapters/htmlparser2.js +++ b/lib/tree_adapters/htmlparser2.js @@ -1,267 +1,269 @@ -//Node construction -exports.createDocument = -exports.createDocumentFragment = function () { - return { - type: 'root', - name: 'root', - parent: null, - prev: null, - next: null, - children: [] - }; -}; - -exports.createElement = function (tagName, namespaceURI, attrs) { - var attribs = {}, - attribsNamespace = {}, - attribsPrefix = {}; - - for (var i = 0; i < attrs.length; i++) { - var attrName = attrs[i].name; - - attribs[attrName] = attrs[i].value; - attribsNamespace[attrName] = attrs[i].namespace; - attribsPrefix[attrName] = attrs[i].prefix; - } - - return { - type: tagName === 'script' || tagName === 'style' ? tagName : 'tag', - name: tagName, - namespace: namespaceURI, - attribs: attribs, - 'x-attribsNamespace': attribsNamespace, - 'x-attribsPrefix': attribsPrefix, - children: [], - parent: null, - prev: null, - next: null - }; -}; - -exports.createCommentNode = function (data) { - return { - type: 'comment', - data: data, - parent: null, - prev: null, - next: null - }; -}; - -var createTextNode = function (value) { - return { - type: 'text', - data: value, - parent: null, - prev: null, - next: null - } -}; - - -//Tree mutation -exports.setDocumentType = function (document, name, publicId, systemId) { - var data = '!DOCTYPE'; - - if (name) - data += ' ' + name; - - if (publicId) - data += ' PUBLIC "' + publicId + '"'; - - if (systemId) - data += ' "' + systemId + '"'; - - var doctypeNode = null; - - for (var i = 0; i < document.children.length; i++) { - if (document.children[i].type === 'directive' && document.children[i].name === '!doctype') { - doctypeNode = document.children[i]; - break; - } - } - - if (doctypeNode) { - doctypeNode.data = data; - doctypeNode['x-name'] = name; - doctypeNode['x-publicId'] = publicId; - doctypeNode['x-systemId'] = systemId; - } - - else { - appendChild(document, { - type: 'directive', - name: '!doctype', - data: data, - 'x-name': name, - 'x-publicId': publicId, - 'x-systemId': systemId - }); - } - -}; - -exports.setQuirksMode = function (document) { - document.quirksMode = true; -}; - -exports.isQuirksMode = function (document) { - return document.quirksMode; -}; - -var appendChild = exports.appendChild = function (parentNode, newNode) { - var prev = parentNode.children[parentNode.children.length - 1]; - - if (prev) { - prev.next = newNode; - newNode.prev = prev; - } - - parentNode.children.push(newNode); - newNode.parent = parentNode; -}; - -var insertBefore = exports.insertBefore = function (parentNode, newNode, referenceNode) { - var insertionIdx = parentNode.children.indexOf(referenceNode), - prev = referenceNode.prev; - - if (prev) { - prev.next = newNode; - newNode.prev = prev; - } - - referenceNode.prev = newNode; - newNode.next = referenceNode; - - parentNode.children.splice(insertionIdx, 0, newNode); - newNode.parent = parentNode; -}; - -exports.detachNode = function (node) { - if (node.parent) { - var idx = node.parent.children.indexOf(node), - prev = node.prev, - next = node.next; - - node.prev = null; - node.next = null; - - if (prev) - prev.next = next; - - if (next) - next.prev = prev; - - node.parent.children.splice(idx, 1); - node.parent = null; - } -}; - -exports.insertText = function (parentNode, text) { - var lastChild = parentNode.children[parentNode.children.length - 1]; - - if (lastChild && lastChild.type === 'text') - lastChild.data += text; - else - appendChild(parentNode, createTextNode(text)); -}; - -exports.insertTextBefore = function (parentNode, text, referenceNode) { - var prevNode = parentNode.children[parentNode.children.indexOf(referenceNode) - 1]; - - if (prevNode && prevNode.type === 'text') - prevNode.data += text; - else - insertBefore(parentNode, createTextNode(text), referenceNode); -}; - -exports.adoptAttributes = function (recipientNode, attrs) { - for (var i = 0; i < attrs.length; i++) { - var attrName = attrs[i].name; - - if (typeof recipientNode.attribs[attrName] === 'undefined') { - recipientNode.attribs[attrName] = attrs[i].value; - recipientNode['x-attribsNamespace'][attrName] = attrs[i].namespace; - recipientNode['x-attribsPrefix'][attrName] = attrs[i].prefix; - } - } -}; - - -//Tree traversing -exports.getFirstChild = function (node) { - return node.children[0]; -}; - -exports.getChildNodes = function (node) { - return node.children; -}; - -exports.getParentNode = function (node) { - return node.parent; -}; - -exports.getAttrList = function (node) { - var attrList = []; - - for (var name in node.attribs) { - if (node.attribs.hasOwnProperty(name)) { - attrList.push({ - name: name, - value: node.attribs[name], - namespace: node['x-attribsNamespace'][name], - prefix: node['x-attribsPrefix'][name] - }); - } - } - - return attrList; -}; - - -//Node data -exports.getTagName = function (element) { - return element.name; -}; - -exports.getNamespaceURI = function (element) { - return element.namespace; -}; - -exports.getTextNodeContent = function (textNode) { - return textNode.data; -}; - -exports.getCommentNodeContent = function (commentNode) { - return commentNode.data; -}; - -exports.getDocumentTypeNodeName = function (doctypeNode) { - return doctypeNode['x-name']; -}; - -exports.getDocumentTypeNodePublicId = function (doctypeNode) { - return doctypeNode['x-publicId']; -}; - -exports.getDocumentTypeNodeSystemId = function (doctypeNode) { - return doctypeNode['x-systemId']; -}; - - -//Node types -exports.isTextNode = function (node) { - return node.type === 'text'; -}; - -exports.isCommentNode = function (node) { - return node.type === 'comment'; -}; - -exports.isDocumentTypeNode = function (node) { - return node.type === 'directive' && node.name === '!doctype'; -}; - -exports.isElementNode = function (node) { - return !!node.attribs; -}; +'use strict'; + +//Node construction +exports.createDocument = +exports.createDocumentFragment = function () { + return { + type: 'root', + name: 'root', + parent: null, + prev: null, + next: null, + children: [] + }; +}; + +exports.createElement = function (tagName, namespaceURI, attrs) { + var attribs = {}, + attribsNamespace = {}, + attribsPrefix = {}; + + for (var i = 0; i < attrs.length; i++) { + var attrName = attrs[i].name; + + attribs[attrName] = attrs[i].value; + attribsNamespace[attrName] = attrs[i].namespace; + attribsPrefix[attrName] = attrs[i].prefix; + } + + return { + type: tagName === 'script' || tagName === 'style' ? tagName : 'tag', + name: tagName, + namespace: namespaceURI, + attribs: attribs, + 'x-attribsNamespace': attribsNamespace, + 'x-attribsPrefix': attribsPrefix, + children: [], + parent: null, + prev: null, + next: null + }; +}; + +exports.createCommentNode = function (data) { + return { + type: 'comment', + data: data, + parent: null, + prev: null, + next: null + }; +}; + +var createTextNode = function (value) { + return { + type: 'text', + data: value, + parent: null, + prev: null, + next: null + } +}; + + +//Tree mutation +exports.setDocumentType = function (document, name, publicId, systemId) { + var data = '!DOCTYPE'; + + if (name) + data += ' ' + name; + + if (publicId) + data += ' PUBLIC "' + publicId + '"'; + + if (systemId) + data += ' "' + systemId + '"'; + + var doctypeNode = null; + + for (var i = 0; i < document.children.length; i++) { + if (document.children[i].type === 'directive' && document.children[i].name === '!doctype') { + doctypeNode = document.children[i]; + break; + } + } + + if (doctypeNode) { + doctypeNode.data = data; + doctypeNode['x-name'] = name; + doctypeNode['x-publicId'] = publicId; + doctypeNode['x-systemId'] = systemId; + } + + else { + appendChild(document, { + type: 'directive', + name: '!doctype', + data: data, + 'x-name': name, + 'x-publicId': publicId, + 'x-systemId': systemId + }); + } + +}; + +exports.setQuirksMode = function (document) { + document.quirksMode = true; +}; + +exports.isQuirksMode = function (document) { + return document.quirksMode; +}; + +var appendChild = exports.appendChild = function (parentNode, newNode) { + var prev = parentNode.children[parentNode.children.length - 1]; + + if (prev) { + prev.next = newNode; + newNode.prev = prev; + } + + parentNode.children.push(newNode); + newNode.parent = parentNode; +}; + +var insertBefore = exports.insertBefore = function (parentNode, newNode, referenceNode) { + var insertionIdx = parentNode.children.indexOf(referenceNode), + prev = referenceNode.prev; + + if (prev) { + prev.next = newNode; + newNode.prev = prev; + } + + referenceNode.prev = newNode; + newNode.next = referenceNode; + + parentNode.children.splice(insertionIdx, 0, newNode); + newNode.parent = parentNode; +}; + +exports.detachNode = function (node) { + if (node.parent) { + var idx = node.parent.children.indexOf(node), + prev = node.prev, + next = node.next; + + node.prev = null; + node.next = null; + + if (prev) + prev.next = next; + + if (next) + next.prev = prev; + + node.parent.children.splice(idx, 1); + node.parent = null; + } +}; + +exports.insertText = function (parentNode, text) { + var lastChild = parentNode.children[parentNode.children.length - 1]; + + if (lastChild && lastChild.type === 'text') + lastChild.data += text; + else + appendChild(parentNode, createTextNode(text)); +}; + +exports.insertTextBefore = function (parentNode, text, referenceNode) { + var prevNode = parentNode.children[parentNode.children.indexOf(referenceNode) - 1]; + + if (prevNode && prevNode.type === 'text') + prevNode.data += text; + else + insertBefore(parentNode, createTextNode(text), referenceNode); +}; + +exports.adoptAttributes = function (recipientNode, attrs) { + for (var i = 0; i < attrs.length; i++) { + var attrName = attrs[i].name; + + if (typeof recipientNode.attribs[attrName] === 'undefined') { + recipientNode.attribs[attrName] = attrs[i].value; + recipientNode['x-attribsNamespace'][attrName] = attrs[i].namespace; + recipientNode['x-attribsPrefix'][attrName] = attrs[i].prefix; + } + } +}; + + +//Tree traversing +exports.getFirstChild = function (node) { + return node.children[0]; +}; + +exports.getChildNodes = function (node) { + return node.children; +}; + +exports.getParentNode = function (node) { + return node.parent; +}; + +exports.getAttrList = function (node) { + var attrList = []; + + for (var name in node.attribs) { + if (node.attribs.hasOwnProperty(name)) { + attrList.push({ + name: name, + value: node.attribs[name], + namespace: node['x-attribsNamespace'][name], + prefix: node['x-attribsPrefix'][name] + }); + } + } + + return attrList; +}; + + +//Node data +exports.getTagName = function (element) { + return element.name; +}; + +exports.getNamespaceURI = function (element) { + return element.namespace; +}; + +exports.getTextNodeContent = function (textNode) { + return textNode.data; +}; + +exports.getCommentNodeContent = function (commentNode) { + return commentNode.data; +}; + +exports.getDocumentTypeNodeName = function (doctypeNode) { + return doctypeNode['x-name']; +}; + +exports.getDocumentTypeNodePublicId = function (doctypeNode) { + return doctypeNode['x-publicId']; +}; + +exports.getDocumentTypeNodeSystemId = function (doctypeNode) { + return doctypeNode['x-systemId']; +}; + + +//Node types +exports.isTextNode = function (node) { + return node.type === 'text'; +}; + +exports.isCommentNode = function (node) { + return node.type === 'comment'; +}; + +exports.isDocumentTypeNode = function (node) { + return node.type === 'directive' && node.name === '!doctype'; +}; + +exports.isElementNode = function (node) { + return !!node.attribs; +}; diff --git a/lib/tree_construction/doctype.js b/lib/tree_construction/doctype.js index 1b3fb5fb8..413c05a6a 100644 --- a/lib/tree_construction/doctype.js +++ b/lib/tree_construction/doctype.js @@ -1,107 +1,109 @@ -//Const -var VALID_DOCTYPE_NAME = 'html', - QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd', - QUIRKS_MODE_PUBLIC_ID_PREFIXES = [ - "+//silmaril//dtd html pro v0r11 19970101//en", - "-//advasoft ltd//dtd html 3.0 aswedit + extensions//en", - "-//as//dtd html 3.0 aswedit + extensions//en", - "-//ietf//dtd html 2.0 level 1//en", - "-//ietf//dtd html 2.0 level 2//en", - "-//ietf//dtd html 2.0 strict level 1//en", - "-//ietf//dtd html 2.0 strict level 2//en", - "-//ietf//dtd html 2.0 strict//en", - "-//ietf//dtd html 2.0//en", - "-//ietf//dtd html 2.1e//en", - "-//ietf//dtd html 3.0//en", - "-//ietf//dtd html 3.0//en//", - "-//ietf//dtd html 3.2 final//en", - "-//ietf//dtd html 3.2//en", - "-//ietf//dtd html 3//en", - "-//ietf//dtd html level 0//en", - "-//ietf//dtd html level 0//en//2.0", - "-//ietf//dtd html level 1//en", - "-//ietf//dtd html level 1//en//2.0", - "-//ietf//dtd html level 2//en", - "-//ietf//dtd html level 2//en//2.0", - "-//ietf//dtd html level 3//en", - "-//ietf//dtd html level 3//en//3.0", - "-//ietf//dtd html strict level 0//en", - "-//ietf//dtd html strict level 0//en//2.0", - "-//ietf//dtd html strict level 1//en", - "-//ietf//dtd html strict level 1//en//2.0", - "-//ietf//dtd html strict level 2//en", - "-//ietf//dtd html strict level 2//en//2.0", - "-//ietf//dtd html strict level 3//en", - "-//ietf//dtd html strict level 3//en//3.0", - "-//ietf//dtd html strict//en", - "-//ietf//dtd html strict//en//2.0", - "-//ietf//dtd html strict//en//3.0", - "-//ietf//dtd html//en", - "-//ietf//dtd html//en//2.0", - "-//ietf//dtd html//en//3.0", - "-//metrius//dtd metrius presentational//en", - "-//microsoft//dtd internet explorer 2.0 html strict//en", - "-//microsoft//dtd internet explorer 2.0 html//en", - "-//microsoft//dtd internet explorer 2.0 tables//en", - "-//microsoft//dtd internet explorer 3.0 html strict//en", - "-//microsoft//dtd internet explorer 3.0 html//en", - "-//microsoft//dtd internet explorer 3.0 tables//en", - "-//netscape comm. corp.//dtd html//en", - "-//netscape comm. corp.//dtd strict html//en", - "-//o'reilly and associates//dtd html 2.0//en", - "-//o'reilly and associates//dtd html extended 1.0//en", - "-//spyglass//dtd html 2.0 extended//en", - "-//sq//dtd html 2.0 hotmetal + extensions//en", - "-//sun microsystems corp.//dtd hotjava html//en", - "-//sun microsystems corp.//dtd hotjava strict html//en", - "-//w3c//dtd html 3 1995-03-24//en", - "-//w3c//dtd html 3.2 draft//en", - "-//w3c//dtd html 3.2 final//en", - "-//w3c//dtd html 3.2//en", - "-//w3c//dtd html 3.2s draft//en", - "-//w3c//dtd html 4.0 frameset//en", - "-//w3c//dtd html 4.0 transitional//en", - "-//w3c//dtd html experimental 19960712//en", - "-//w3c//dtd html experimental 970421//en", - "-//w3c//dtd w3 html//en", - "-//w3o//dtd w3 html 3.0//en", - "-//w3o//dtd w3 html 3.0//en//", - "-//webtechs//dtd mozilla html 2.0//en", - "-//webtechs//dtd mozilla html//en" - ], - QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [ - '-//w3c//dtd html 4.01 frameset//', - '-//w3c//dtd html 4.01 transitional//' - ], - QUIRKS_MODE_PUBLIC_IDS = [ - '-//w3o//dtd w3 html strict 3.0//en//', - '-/w3c/dtd html 4.0 transitional/en', - 'html' - ]; - -exports.isQuirks = function (name, publicId, systemId) { - if (name !== VALID_DOCTYPE_NAME) - return true; - - if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) - return true; - - if (publicId !== null) { - publicId = publicId.toLowerCase(); - - if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1) - return true; - - var prefixes = QUIRKS_MODE_PUBLIC_ID_PREFIXES; - - if (systemId === null) - prefixes = prefixes.concat(QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES); - - for (var i = 0; i < prefixes.length; i++) { - if (publicId.indexOf(prefixes[i]) === 0) - return true; - } - } - - return false; -}; +'use strict'; + +//Const +var VALID_DOCTYPE_NAME = 'html', + QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd', + QUIRKS_MODE_PUBLIC_ID_PREFIXES = [ + "+//silmaril//dtd html pro v0r11 19970101//en", + "-//advasoft ltd//dtd html 3.0 aswedit + extensions//en", + "-//as//dtd html 3.0 aswedit + extensions//en", + "-//ietf//dtd html 2.0 level 1//en", + "-//ietf//dtd html 2.0 level 2//en", + "-//ietf//dtd html 2.0 strict level 1//en", + "-//ietf//dtd html 2.0 strict level 2//en", + "-//ietf//dtd html 2.0 strict//en", + "-//ietf//dtd html 2.0//en", + "-//ietf//dtd html 2.1e//en", + "-//ietf//dtd html 3.0//en", + "-//ietf//dtd html 3.0//en//", + "-//ietf//dtd html 3.2 final//en", + "-//ietf//dtd html 3.2//en", + "-//ietf//dtd html 3//en", + "-//ietf//dtd html level 0//en", + "-//ietf//dtd html level 0//en//2.0", + "-//ietf//dtd html level 1//en", + "-//ietf//dtd html level 1//en//2.0", + "-//ietf//dtd html level 2//en", + "-//ietf//dtd html level 2//en//2.0", + "-//ietf//dtd html level 3//en", + "-//ietf//dtd html level 3//en//3.0", + "-//ietf//dtd html strict level 0//en", + "-//ietf//dtd html strict level 0//en//2.0", + "-//ietf//dtd html strict level 1//en", + "-//ietf//dtd html strict level 1//en//2.0", + "-//ietf//dtd html strict level 2//en", + "-//ietf//dtd html strict level 2//en//2.0", + "-//ietf//dtd html strict level 3//en", + "-//ietf//dtd html strict level 3//en//3.0", + "-//ietf//dtd html strict//en", + "-//ietf//dtd html strict//en//2.0", + "-//ietf//dtd html strict//en//3.0", + "-//ietf//dtd html//en", + "-//ietf//dtd html//en//2.0", + "-//ietf//dtd html//en//3.0", + "-//metrius//dtd metrius presentational//en", + "-//microsoft//dtd internet explorer 2.0 html strict//en", + "-//microsoft//dtd internet explorer 2.0 html//en", + "-//microsoft//dtd internet explorer 2.0 tables//en", + "-//microsoft//dtd internet explorer 3.0 html strict//en", + "-//microsoft//dtd internet explorer 3.0 html//en", + "-//microsoft//dtd internet explorer 3.0 tables//en", + "-//netscape comm. corp.//dtd html//en", + "-//netscape comm. corp.//dtd strict html//en", + "-//o'reilly and associates//dtd html 2.0//en", + "-//o'reilly and associates//dtd html extended 1.0//en", + "-//spyglass//dtd html 2.0 extended//en", + "-//sq//dtd html 2.0 hotmetal + extensions//en", + "-//sun microsystems corp.//dtd hotjava html//en", + "-//sun microsystems corp.//dtd hotjava strict html//en", + "-//w3c//dtd html 3 1995-03-24//en", + "-//w3c//dtd html 3.2 draft//en", + "-//w3c//dtd html 3.2 final//en", + "-//w3c//dtd html 3.2//en", + "-//w3c//dtd html 3.2s draft//en", + "-//w3c//dtd html 4.0 frameset//en", + "-//w3c//dtd html 4.0 transitional//en", + "-//w3c//dtd html experimental 19960712//en", + "-//w3c//dtd html experimental 970421//en", + "-//w3c//dtd w3 html//en", + "-//w3o//dtd w3 html 3.0//en", + "-//w3o//dtd w3 html 3.0//en//", + "-//webtechs//dtd mozilla html 2.0//en", + "-//webtechs//dtd mozilla html//en" + ], + QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [ + '-//w3c//dtd html 4.01 frameset//', + '-//w3c//dtd html 4.01 transitional//' + ], + QUIRKS_MODE_PUBLIC_IDS = [ + '-//w3o//dtd w3 html strict 3.0//en//', + '-/w3c/dtd html 4.0 transitional/en', + 'html' + ]; + +exports.isQuirks = function (name, publicId, systemId) { + if (name !== VALID_DOCTYPE_NAME) + return true; + + if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) + return true; + + if (publicId !== null) { + publicId = publicId.toLowerCase(); + + if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1) + return true; + + var prefixes = QUIRKS_MODE_PUBLIC_ID_PREFIXES; + + if (systemId === null) + prefixes = prefixes.concat(QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES); + + for (var i = 0; i < prefixes.length; i++) { + if (publicId.indexOf(prefixes[i]) === 0) + return true; + } + } + + return false; +}; diff --git a/lib/tree_construction/formatting_element_list.js b/lib/tree_construction/formatting_element_list.js index c240bb8e3..6a0e0bfac 100644 --- a/lib/tree_construction/formatting_element_list.js +++ b/lib/tree_construction/formatting_element_list.js @@ -1,165 +1,167 @@ -//Const -var NOAH_ARK_CAPACITY = 3; - -//List of formatting elements -var FormattingElementList = module.exports = function (treeAdapter) { - this.length = 0; - this.entries = []; - this.treeAdapter = treeAdapter; - this.bookmark = null; -}; - -//Entry types -FormattingElementList.MARKER_ENTRY = 'MARKER_ENTRY'; -FormattingElementList.ELEMENT_ENTRY = 'ELEMENT_ENTRY'; - -//Noah Ark's condition -//OPTIMIZATION: at first we try to find possible candidates for exclusion using -//lightweight heuristics without thorough attributes check. -FormattingElementList.prototype._getNoahArkConditionCandidates = function (newElement) { - var candidates = []; - - if (this.length >= NOAH_ARK_CAPACITY) { - var neAttrsLength = this.treeAdapter.getAttrList(newElement).length, - neTagName = this.treeAdapter.getTagName(newElement), - neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement); - - for (var i = this.length - 1; i >= 0; i--) { - var entry = this.entries[i]; - - if (entry.type === FormattingElementList.MARKER_ENTRY) - break; - - var element = entry.element, - elementAttrs = this.treeAdapter.getAttrList(element); - - if (this.treeAdapter.getTagName(element) === neTagName && - this.treeAdapter.getNamespaceURI(element) === neNamespaceURI && - elementAttrs.length === neAttrsLength) { - candidates.push({idx: i, attrs: elementAttrs}); - } - } - } - - return candidates.length < NOAH_ARK_CAPACITY ? [] : candidates; -}; - -FormattingElementList.prototype._ensureNoahArkCondition = function (newElement) { - var candidates = this._getNoahArkConditionCandidates(newElement), - cLength = candidates.length; - - if (cLength) { - var neAttrs = this.treeAdapter.getAttrList(newElement), - neAttrsLength = neAttrs.length, - neAttrsMap = {}; - - //NOTE: build attrs map for the new element so we can perform fast lookups - for (var i = 0; i < neAttrsLength; i++) { - var neAttr = neAttrs[i]; - - neAttrsMap[neAttr.name] = neAttr.value; - } - - for (var i = 0; i < neAttrsLength; i++) { - for (var j = 0; j < cLength; j++) { - var cAttr = candidates[j].attrs[i]; - - if (neAttrsMap[cAttr.name] !== cAttr.value) { - candidates.splice(j, 1); - cLength--; - } - - if (candidates.length < NOAH_ARK_CAPACITY) - return; - } - } - - //NOTE: remove bottommost candidates until Noah's Ark condition will not be met - for (var i = cLength - 1; i >= NOAH_ARK_CAPACITY - 1; i--) { - this.entries.splice(candidates[i].idx, 1); - this.length--; - } - } -}; - -//Mutations -FormattingElementList.prototype.insertMarker = function () { - this.entries.push({type: FormattingElementList.MARKER_ENTRY}); - this.length++; -}; - -FormattingElementList.prototype.pushElement = function (element, token) { - this._ensureNoahArkCondition(element); - - this.entries.push({ - type: FormattingElementList.ELEMENT_ENTRY, - element: element, - token: token - }); - - this.length++; -}; - -FormattingElementList.prototype.insertElementAfterBookmark = function (element, token) { - var bookmarkIdx = this.length - 1; - - for (; bookmarkIdx >= 0; bookmarkIdx--) { - if (this.entries[bookmarkIdx] === this.bookmark) - break; - } - - this.entries.splice(bookmarkIdx + 1, 0, { - type: FormattingElementList.ELEMENT_ENTRY, - element: element, - token: token - }); - - this.length++; -}; - -FormattingElementList.prototype.removeEntry = function (entry) { - for (var i = this.length - 1; i >= 0; i--) { - if (this.entries[i] === entry) { - this.entries.splice(i, 1); - this.length--; - break; - } - } -}; - -FormattingElementList.prototype.clearToLastMarker = function () { - while (this.length) { - var entry = this.entries.pop(); - - this.length--; - - if (entry.type === FormattingElementList.MARKER_ENTRY) - break; - } -}; - -//Search -FormattingElementList.prototype.getElementEntryInScopeWithTagName = function (tagName) { - for (var i = this.length - 1; i >= 0; i--) { - var entry = this.entries[i]; - - if (entry.type === FormattingElementList.MARKER_ENTRY) - return null; - - if (this.treeAdapter.getTagName(entry.element) === tagName) - return entry; - } - - return null; -}; - -FormattingElementList.prototype.getElementEntry = function (element) { - for (var i = this.length - 1; i >= 0; i--) { - var entry = this.entries[i]; - - if (entry.type === FormattingElementList.ELEMENT_ENTRY && entry.element == element) - return entry; - } - - return null; -}; +'use strict'; + +//Const +var NOAH_ARK_CAPACITY = 3; + +//List of formatting elements +var FormattingElementList = module.exports = function (treeAdapter) { + this.length = 0; + this.entries = []; + this.treeAdapter = treeAdapter; + this.bookmark = null; +}; + +//Entry types +FormattingElementList.MARKER_ENTRY = 'MARKER_ENTRY'; +FormattingElementList.ELEMENT_ENTRY = 'ELEMENT_ENTRY'; + +//Noah Ark's condition +//OPTIMIZATION: at first we try to find possible candidates for exclusion using +//lightweight heuristics without thorough attributes check. +FormattingElementList.prototype._getNoahArkConditionCandidates = function (newElement) { + var candidates = []; + + if (this.length >= NOAH_ARK_CAPACITY) { + var neAttrsLength = this.treeAdapter.getAttrList(newElement).length, + neTagName = this.treeAdapter.getTagName(newElement), + neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement); + + for (var i = this.length - 1; i >= 0; i--) { + var entry = this.entries[i]; + + if (entry.type === FormattingElementList.MARKER_ENTRY) + break; + + var element = entry.element, + elementAttrs = this.treeAdapter.getAttrList(element); + + if (this.treeAdapter.getTagName(element) === neTagName && + this.treeAdapter.getNamespaceURI(element) === neNamespaceURI && + elementAttrs.length === neAttrsLength) { + candidates.push({idx: i, attrs: elementAttrs}); + } + } + } + + return candidates.length < NOAH_ARK_CAPACITY ? [] : candidates; +}; + +FormattingElementList.prototype._ensureNoahArkCondition = function (newElement) { + var candidates = this._getNoahArkConditionCandidates(newElement), + cLength = candidates.length; + + if (cLength) { + var neAttrs = this.treeAdapter.getAttrList(newElement), + neAttrsLength = neAttrs.length, + neAttrsMap = {}; + + //NOTE: build attrs map for the new element so we can perform fast lookups + for (var i = 0; i < neAttrsLength; i++) { + var neAttr = neAttrs[i]; + + neAttrsMap[neAttr.name] = neAttr.value; + } + + for (var i = 0; i < neAttrsLength; i++) { + for (var j = 0; j < cLength; j++) { + var cAttr = candidates[j].attrs[i]; + + if (neAttrsMap[cAttr.name] !== cAttr.value) { + candidates.splice(j, 1); + cLength--; + } + + if (candidates.length < NOAH_ARK_CAPACITY) + return; + } + } + + //NOTE: remove bottommost candidates until Noah's Ark condition will not be met + for (var i = cLength - 1; i >= NOAH_ARK_CAPACITY - 1; i--) { + this.entries.splice(candidates[i].idx, 1); + this.length--; + } + } +}; + +//Mutations +FormattingElementList.prototype.insertMarker = function () { + this.entries.push({type: FormattingElementList.MARKER_ENTRY}); + this.length++; +}; + +FormattingElementList.prototype.pushElement = function (element, token) { + this._ensureNoahArkCondition(element); + + this.entries.push({ + type: FormattingElementList.ELEMENT_ENTRY, + element: element, + token: token + }); + + this.length++; +}; + +FormattingElementList.prototype.insertElementAfterBookmark = function (element, token) { + var bookmarkIdx = this.length - 1; + + for (; bookmarkIdx >= 0; bookmarkIdx--) { + if (this.entries[bookmarkIdx] === this.bookmark) + break; + } + + this.entries.splice(bookmarkIdx + 1, 0, { + type: FormattingElementList.ELEMENT_ENTRY, + element: element, + token: token + }); + + this.length++; +}; + +FormattingElementList.prototype.removeEntry = function (entry) { + for (var i = this.length - 1; i >= 0; i--) { + if (this.entries[i] === entry) { + this.entries.splice(i, 1); + this.length--; + break; + } + } +}; + +FormattingElementList.prototype.clearToLastMarker = function () { + while (this.length) { + var entry = this.entries.pop(); + + this.length--; + + if (entry.type === FormattingElementList.MARKER_ENTRY) + break; + } +}; + +//Search +FormattingElementList.prototype.getElementEntryInScopeWithTagName = function (tagName) { + for (var i = this.length - 1; i >= 0; i--) { + var entry = this.entries[i]; + + if (entry.type === FormattingElementList.MARKER_ENTRY) + return null; + + if (this.treeAdapter.getTagName(entry.element) === tagName) + return entry; + } + + return null; +}; + +FormattingElementList.prototype.getElementEntry = function (element) { + for (var i = this.length - 1; i >= 0; i--) { + var entry = this.entries[i]; + + if (entry.type === FormattingElementList.ELEMENT_ENTRY && entry.element == element) + return entry; + } + + return null; +}; diff --git a/lib/tree_construction/open_element_stack.js b/lib/tree_construction/open_element_stack.js index 825029d34..5a7484848 100644 --- a/lib/tree_construction/open_element_stack.js +++ b/lib/tree_construction/open_element_stack.js @@ -1,342 +1,344 @@ -var HTML = require('../common/html'); - -//Aliases -var $ = HTML.TAG_NAMES, - NS = HTML.NAMESPACES; - -//Element utils - -//OPTIMIZATION: Integer comparisons are low-cost, so we can use very fast tag name length filters here. -//It's faster than using dictionary. -function isImpliedEndTagRequired(tn) { - switch (tn.length) { - case 1: - return tn === $.P; - - case 2: - return tn === $.RP || tn === $.RT || tn === $.DD || tn === $.DT || tn === $.LI; - - case 6: - return tn === $.OPTION; - - case 8: - return tn === $.OPTGROUP; - } - - return false; -} - -function isScopingElement(tn, ns) { - switch (tn.length) { - case 2: - if (tn === $.TD || tn === $.TH) - return ns === NS.HTML; - - else if (tn === $.MI || tn === $.MO || tn == $.MN || tn === $.MS) - return ns === NS.MATHML; - - break; - - case 4: - if (tn === $.HTML) - return ns === NS.HTML; - - else if (tn === $.DESC) - return ns === NS.SVG; - - break; - - case 5: - if (tn === $.TABLE) - return ns === NS.HTML; - - else if (tn === $.MTEXT) - return ns === NS.MATHML; - - else if (tn === $.TITLE) - return ns === NS.SVG; - - break; - - case 6: - return (tn === $.APPLET || tn === $.OBJECT) && ns === NS.HTML; - - case 7: - return (tn === $.CAPTION || tn === $.MARQUEE) && ns === NS.HTML; - - case 13: - return tn === $.FOREIGN_OBJECT && ns === NS.SVG; - - case 14: - return tn === $.ANNOTATION_XML && ns === NS.MATHML; - } - - return false; -} - -//Stack of open elements -var OpenElementStack = module.exports = function (document, treeAdapter) { - this.stackTop = -1; - this.items = []; - this.current = document; - this.currentTagName = null; - this.treeAdapter = treeAdapter; -}; - -//Index of element -OpenElementStack.prototype._indexOf = function (element) { - var idx = -1; - - for (var i = this.stackTop; i >= 0; i--) { - if (this.items[i] === element) { - idx = i; - break; - } - } - return idx; -}; - -//Update current element -OpenElementStack.prototype._updateCurrentElement = function () { - this.current = this.items[this.stackTop]; - this.currentTagName = this.current && this.treeAdapter.getTagName(this.current); -}; - -//Mutations -OpenElementStack.prototype.push = function (element) { - this.items[++this.stackTop] = element; - this._updateCurrentElement(); -}; - -OpenElementStack.prototype.pop = function () { - this.stackTop--; - this._updateCurrentElement(); -}; - -OpenElementStack.prototype.replace = function (oldElement, newElement) { - var idx = this._indexOf(oldElement); - this.items[idx] = newElement; - - if (idx === this.stackTop) - this._updateCurrentElement(); -}; - -OpenElementStack.prototype.insertAfter = function (referenceElement, newElement) { - var insertionIdx = this._indexOf(referenceElement) + 1; - - this.items.splice(insertionIdx, 0, newElement); - - if (insertionIdx == ++this.stackTop) - this._updateCurrentElement(); -}; - -OpenElementStack.prototype.popUntilTagNamePopped = function (tagName) { - while (this.stackTop > -1) { - var tn = this.currentTagName; - - this.pop(); - - if (tn === tagName) - break; - } -}; - -OpenElementStack.prototype.popUntilElementPopped = function (element) { - while (this.stackTop > -1) { - var poppedElement = this.current; - - this.pop(); - - if (poppedElement === element) - break; - } -}; - -OpenElementStack.prototype.popUntilNumberedHeaderPopped = function () { - while (this.stackTop > -1) { - var tn = this.currentTagName; - - this.pop(); - - if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) - break; - } -}; - -OpenElementStack.prototype.popAllUpToHtmlElement = function () { - //NOTE: here we assume that root element is always first in the open element stack, so - //we perform this fast stack clean up. - this.stackTop = 0; - this._updateCurrentElement(); -}; - -OpenElementStack.prototype.clearBackToTableContext = function () { - while (this.currentTagName !== $.TABLE && this.currentTagName !== $.HTML) - this.pop(); -}; - -OpenElementStack.prototype.clearBackToTableBodyContext = function () { - while (this.currentTagName !== $.TBODY && this.currentTagName !== $.TFOOT && - this.currentTagName !== $.THEAD && this.currentTagName !== $.HTML) { - this.pop(); - } -}; - -OpenElementStack.prototype.clearBackToTableRowContext = function () { - while (this.currentTagName !== $.TR && this.currentTagName !== $.HTML) - this.pop(); -}; - -OpenElementStack.prototype.remove = function (element) { - for (var i = this.stackTop; i >= 0; i--) { - if (this.items[i] === element) { - this.items.splice(i, 1); - this.stackTop--; - this._updateCurrentElement(); - break; - } - } -}; - -//Search -OpenElementStack.prototype.tryPeekProperlyNestedBodyElement = function () { - //Properly nested element (should be second element in stack). - var element = this.items[1]; - return element && this.treeAdapter.getTagName(element) === $.BODY ? element : null; -}; - -OpenElementStack.prototype.contains = function (element) { - return this._indexOf(element) > -1; -}; - -OpenElementStack.prototype.getCommonAncestor = function (element) { - var elementIdx = this._indexOf(element); - - return --elementIdx >= 0 ? this.items[elementIdx] : null; -}; - -OpenElementStack.prototype.isRootHtmlElementCurrent = function () { - return this.stackTop === 0 && this.currentTagName === $.HTML; -}; - -//Element in scope -OpenElementStack.prototype.hasInScope = function (tagName) { - for (var i = this.stackTop; i >= 0; i--) { - var tn = this.treeAdapter.getTagName(this.items[i]); - - if (tn === tagName) - return true; - - var ns = this.treeAdapter.getNamespaceURI(this.items[i]); - - if (isScopingElement(tn, ns)) - return false; - } - - return true; -}; - -OpenElementStack.prototype.hasNumberedHeaderInScope = function () { - for (var i = this.stackTop; i >= 0; i--) { - var tn = this.treeAdapter.getTagName(this.items[i]); - - if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) - return true; - - if (isScopingElement(tn, this.treeAdapter.getNamespaceURI(this.items[i]))) - return false; - } - - return true; -}; - -OpenElementStack.prototype.hasInListItemScope = function (tagName) { - for (var i = this.stackTop; i >= 0; i--) { - var tn = this.treeAdapter.getTagName(this.items[i]); - - if (tn === tagName) - return true; - - var ns = this.treeAdapter.getNamespaceURI(this.items[i]); - - if (((tn === $.UL || tn === $.OL) && ns === NS.HTML) || isScopingElement(tn, ns)) - return false; - } - - return true; -}; - -OpenElementStack.prototype.hasInButtonScope = function (tagName) { - for (var i = this.stackTop; i >= 0; i--) { - var tn = this.treeAdapter.getTagName(this.items[i]); - - if (tn === tagName) - return true; - - var ns = this.treeAdapter.getNamespaceURI(this.items[i]); - - if ((tn === $.BUTTON && ns === NS.HTML) || isScopingElement(tn, ns)) - return false; - } - - return true; -}; - -OpenElementStack.prototype.hasInTableScope = function (tagName) { - for (var i = this.stackTop; i >= 0; i--) { - var tn = this.treeAdapter.getTagName(this.items[i]); - - if (tn === tagName) - return true; - - var ns = this.treeAdapter.getNamespaceURI(this.items[i]); - - if ((tn === $.TABLE || tn === $.HTML) && ns === NS.HTML) - return false; - } - - return true; -}; - -OpenElementStack.prototype.hasTableBodyContextInTableScope = function () { - for (var i = this.stackTop; i >= 0; i--) { - var tn = this.treeAdapter.getTagName(this.items[i]); - - if (tn === $.TBODY || tn === $.THEAD || tn === $.TFOOT) - return true; - - var ns = this.treeAdapter.getNamespaceURI(this.items[i]); - - if ((tn === $.TABLE || tn === $.HTML) && ns === NS.HTML) - return false; - } - - return true; -}; - -OpenElementStack.prototype.hasInSelectScope = function (tagName) { - for (var i = this.stackTop; i >= 0; i--) { - var tn = this.treeAdapter.getTagName(this.items[i]); - - if (tn === tagName) - return true; - - var ns = this.treeAdapter.getNamespaceURI(this.items[i]); - - if (tn !== $.OPTION && tn !== $.OPTGROUP && ns === NS.HTML) - return false; - } - - return true; -}; - -//Implied end tags -OpenElementStack.prototype.generateImpliedEndTags = function () { - while (isImpliedEndTagRequired(this.currentTagName)) - this.pop(); -}; - -OpenElementStack.prototype.generateImpliedEndTagsWithExclusion = function (exclusionTagName) { - while (isImpliedEndTagRequired(this.currentTagName) && this.currentTagName !== exclusionTagName) - this.pop(); -}; +'use strict'; + +var HTML = require('../common/html'); + +//Aliases +var $ = HTML.TAG_NAMES, + NS = HTML.NAMESPACES; + +//Element utils + +//OPTIMIZATION: Integer comparisons are low-cost, so we can use very fast tag name length filters here. +//It's faster than using dictionary. +function isImpliedEndTagRequired(tn) { + switch (tn.length) { + case 1: + return tn === $.P; + + case 2: + return tn === $.RP || tn === $.RT || tn === $.DD || tn === $.DT || tn === $.LI; + + case 6: + return tn === $.OPTION; + + case 8: + return tn === $.OPTGROUP; + } + + return false; +} + +function isScopingElement(tn, ns) { + switch (tn.length) { + case 2: + if (tn === $.TD || tn === $.TH) + return ns === NS.HTML; + + else if (tn === $.MI || tn === $.MO || tn == $.MN || tn === $.MS) + return ns === NS.MATHML; + + break; + + case 4: + if (tn === $.HTML) + return ns === NS.HTML; + + else if (tn === $.DESC) + return ns === NS.SVG; + + break; + + case 5: + if (tn === $.TABLE) + return ns === NS.HTML; + + else if (tn === $.MTEXT) + return ns === NS.MATHML; + + else if (tn === $.TITLE) + return ns === NS.SVG; + + break; + + case 6: + return (tn === $.APPLET || tn === $.OBJECT) && ns === NS.HTML; + + case 7: + return (tn === $.CAPTION || tn === $.MARQUEE) && ns === NS.HTML; + + case 13: + return tn === $.FOREIGN_OBJECT && ns === NS.SVG; + + case 14: + return tn === $.ANNOTATION_XML && ns === NS.MATHML; + } + + return false; +} + +//Stack of open elements +var OpenElementStack = module.exports = function (document, treeAdapter) { + this.stackTop = -1; + this.items = []; + this.current = document; + this.currentTagName = null; + this.treeAdapter = treeAdapter; +}; + +//Index of element +OpenElementStack.prototype._indexOf = function (element) { + var idx = -1; + + for (var i = this.stackTop; i >= 0; i--) { + if (this.items[i] === element) { + idx = i; + break; + } + } + return idx; +}; + +//Update current element +OpenElementStack.prototype._updateCurrentElement = function () { + this.current = this.items[this.stackTop]; + this.currentTagName = this.current && this.treeAdapter.getTagName(this.current); +}; + +//Mutations +OpenElementStack.prototype.push = function (element) { + this.items[++this.stackTop] = element; + this._updateCurrentElement(); +}; + +OpenElementStack.prototype.pop = function () { + this.stackTop--; + this._updateCurrentElement(); +}; + +OpenElementStack.prototype.replace = function (oldElement, newElement) { + var idx = this._indexOf(oldElement); + this.items[idx] = newElement; + + if (idx === this.stackTop) + this._updateCurrentElement(); +}; + +OpenElementStack.prototype.insertAfter = function (referenceElement, newElement) { + var insertionIdx = this._indexOf(referenceElement) + 1; + + this.items.splice(insertionIdx, 0, newElement); + + if (insertionIdx == ++this.stackTop) + this._updateCurrentElement(); +}; + +OpenElementStack.prototype.popUntilTagNamePopped = function (tagName) { + while (this.stackTop > -1) { + var tn = this.currentTagName; + + this.pop(); + + if (tn === tagName) + break; + } +}; + +OpenElementStack.prototype.popUntilElementPopped = function (element) { + while (this.stackTop > -1) { + var poppedElement = this.current; + + this.pop(); + + if (poppedElement === element) + break; + } +}; + +OpenElementStack.prototype.popUntilNumberedHeaderPopped = function () { + while (this.stackTop > -1) { + var tn = this.currentTagName; + + this.pop(); + + if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) + break; + } +}; + +OpenElementStack.prototype.popAllUpToHtmlElement = function () { + //NOTE: here we assume that root element is always first in the open element stack, so + //we perform this fast stack clean up. + this.stackTop = 0; + this._updateCurrentElement(); +}; + +OpenElementStack.prototype.clearBackToTableContext = function () { + while (this.currentTagName !== $.TABLE && this.currentTagName !== $.HTML) + this.pop(); +}; + +OpenElementStack.prototype.clearBackToTableBodyContext = function () { + while (this.currentTagName !== $.TBODY && this.currentTagName !== $.TFOOT && + this.currentTagName !== $.THEAD && this.currentTagName !== $.HTML) { + this.pop(); + } +}; + +OpenElementStack.prototype.clearBackToTableRowContext = function () { + while (this.currentTagName !== $.TR && this.currentTagName !== $.HTML) + this.pop(); +}; + +OpenElementStack.prototype.remove = function (element) { + for (var i = this.stackTop; i >= 0; i--) { + if (this.items[i] === element) { + this.items.splice(i, 1); + this.stackTop--; + this._updateCurrentElement(); + break; + } + } +}; + +//Search +OpenElementStack.prototype.tryPeekProperlyNestedBodyElement = function () { + //Properly nested element (should be second element in stack). + var element = this.items[1]; + return element && this.treeAdapter.getTagName(element) === $.BODY ? element : null; +}; + +OpenElementStack.prototype.contains = function (element) { + return this._indexOf(element) > -1; +}; + +OpenElementStack.prototype.getCommonAncestor = function (element) { + var elementIdx = this._indexOf(element); + + return --elementIdx >= 0 ? this.items[elementIdx] : null; +}; + +OpenElementStack.prototype.isRootHtmlElementCurrent = function () { + return this.stackTop === 0 && this.currentTagName === $.HTML; +}; + +//Element in scope +OpenElementStack.prototype.hasInScope = function (tagName) { + for (var i = this.stackTop; i >= 0; i--) { + var tn = this.treeAdapter.getTagName(this.items[i]); + + if (tn === tagName) + return true; + + var ns = this.treeAdapter.getNamespaceURI(this.items[i]); + + if (isScopingElement(tn, ns)) + return false; + } + + return true; +}; + +OpenElementStack.prototype.hasNumberedHeaderInScope = function () { + for (var i = this.stackTop; i >= 0; i--) { + var tn = this.treeAdapter.getTagName(this.items[i]); + + if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) + return true; + + if (isScopingElement(tn, this.treeAdapter.getNamespaceURI(this.items[i]))) + return false; + } + + return true; +}; + +OpenElementStack.prototype.hasInListItemScope = function (tagName) { + for (var i = this.stackTop; i >= 0; i--) { + var tn = this.treeAdapter.getTagName(this.items[i]); + + if (tn === tagName) + return true; + + var ns = this.treeAdapter.getNamespaceURI(this.items[i]); + + if (((tn === $.UL || tn === $.OL) && ns === NS.HTML) || isScopingElement(tn, ns)) + return false; + } + + return true; +}; + +OpenElementStack.prototype.hasInButtonScope = function (tagName) { + for (var i = this.stackTop; i >= 0; i--) { + var tn = this.treeAdapter.getTagName(this.items[i]); + + if (tn === tagName) + return true; + + var ns = this.treeAdapter.getNamespaceURI(this.items[i]); + + if ((tn === $.BUTTON && ns === NS.HTML) || isScopingElement(tn, ns)) + return false; + } + + return true; +}; + +OpenElementStack.prototype.hasInTableScope = function (tagName) { + for (var i = this.stackTop; i >= 0; i--) { + var tn = this.treeAdapter.getTagName(this.items[i]); + + if (tn === tagName) + return true; + + var ns = this.treeAdapter.getNamespaceURI(this.items[i]); + + if ((tn === $.TABLE || tn === $.HTML) && ns === NS.HTML) + return false; + } + + return true; +}; + +OpenElementStack.prototype.hasTableBodyContextInTableScope = function () { + for (var i = this.stackTop; i >= 0; i--) { + var tn = this.treeAdapter.getTagName(this.items[i]); + + if (tn === $.TBODY || tn === $.THEAD || tn === $.TFOOT) + return true; + + var ns = this.treeAdapter.getNamespaceURI(this.items[i]); + + if ((tn === $.TABLE || tn === $.HTML) && ns === NS.HTML) + return false; + } + + return true; +}; + +OpenElementStack.prototype.hasInSelectScope = function (tagName) { + for (var i = this.stackTop; i >= 0; i--) { + var tn = this.treeAdapter.getTagName(this.items[i]); + + if (tn === tagName) + return true; + + var ns = this.treeAdapter.getNamespaceURI(this.items[i]); + + if (tn !== $.OPTION && tn !== $.OPTGROUP && ns === NS.HTML) + return false; + } + + return true; +}; + +//Implied end tags +OpenElementStack.prototype.generateImpliedEndTags = function () { + while (isImpliedEndTagRequired(this.currentTagName)) + this.pop(); +}; + +OpenElementStack.prototype.generateImpliedEndTagsWithExclusion = function (exclusionTagName) { + while (isImpliedEndTagRequired(this.currentTagName) && this.currentTagName !== exclusionTagName) + this.pop(); +}; diff --git a/lib/tree_construction/parser.js b/lib/tree_construction/parser.js index d901d82b1..0caef6a07 100644 --- a/lib/tree_construction/parser.js +++ b/lib/tree_construction/parser.js @@ -1,2585 +1,2587 @@ -var Tokenizer = require('../tokenization/tokenizer'), - OpenElementStack = require('./open_element_stack'), - FormattingElementList = require('./formatting_element_list'), - Doctype = require('./doctype'), - DefaultTreeAdapter = require('../tree_adapters/default'), - ForeignContent = require('../common/foreign_content'), - UNICODE = require('../common/unicode'), - HTML = require('../common/html'); - -//Aliases -var $ = HTML.TAG_NAMES, - NS = HTML.NAMESPACES, - ATTRS = HTML.ATTRS; - -//Misc constants -var SEARCHABLE_INDEX_DEFAULT_PROMPT = 'This is a searchable index. Enter search keywords: ', - SEARCHABLE_INDEX_INPUT_NAME = 'isindex', - HIDDEN_INPUT_TYPE = 'hidden'; - -//Insertion modes -var INITIAL_MODE = 'INITIAL_MODE', - BEFORE_HTML_MODE = 'BEFORE_HTML_MODE', - BEFORE_HEAD_MODE = 'BEFORE_HEAD_MODE', - IN_HEAD_MODE = 'IN_HEAD_MODE', - AFTER_HEAD_MODE = 'AFTER_HEAD_MODE', - IN_BODY_MODE = 'IN_BODY_MODE', - TEXT_MODE = 'TEXT_MODE', - IN_TABLE_MODE = 'IN_TABLE_MODE', - IN_TABLE_TEXT_MODE = 'IN_TABLE_TEXT_MODE', - IN_CAPTION_MODE = 'IN_CAPTION_MODE', - IN_COLUMN_GROUP_MODE = 'IN_COLUMN_GROUP_MODE', - IN_TABLE_BODY_MODE = 'IN_TABLE_BODY_MODE', - IN_ROW_MODE = 'IN_ROW_MODE', - IN_CELL_MODE = 'IN_CELL_MODE', - IN_SELECT_MODE = 'IN_SELECT_MODE', - IN_SELECT_IN_TABLE_MODE = 'IN_SELECT_IN_TABLE_MODE', - AFTER_BODY_MODE = 'AFTER_BODY_MODE', - IN_FRAMESET_MODE = 'IN_FRAMESET_MODE', - AFTER_FRAMESET_MODE = 'AFTER_FRAMESET_MODE', - AFTER_AFTER_BODY_MODE = 'AFTER_AFTER_BODY_MODE', - AFTER_AFTER_FRAMESET_MODE = 'AFTER_AFTER_FRAMESET_MODE'; - -//Insertion mode reset map -var INSERTION_MODE_RESET_MAP = {}; - -INSERTION_MODE_RESET_MAP[$.SELECT] = IN_SELECT_MODE; -INSERTION_MODE_RESET_MAP[$.TR] = IN_ROW_MODE; -INSERTION_MODE_RESET_MAP[$.TBODY] = -INSERTION_MODE_RESET_MAP[$.THEAD] = -INSERTION_MODE_RESET_MAP[$.TFOOT] = IN_TABLE_BODY_MODE; -INSERTION_MODE_RESET_MAP[$.CAPTION] = IN_CAPTION_MODE; -INSERTION_MODE_RESET_MAP[$.COLGROUP] = IN_COLUMN_GROUP_MODE; -INSERTION_MODE_RESET_MAP[$.TABLE] = IN_TABLE_MODE; -INSERTION_MODE_RESET_MAP[$.HEAD] = -INSERTION_MODE_RESET_MAP[$.BODY] = IN_BODY_MODE; -INSERTION_MODE_RESET_MAP[$.FRAMESET] = IN_FRAMESET_MODE; -INSERTION_MODE_RESET_MAP[$.HTML] = BEFORE_HEAD_MODE; - -//Token handlers map for insertion modes -var _ = {}; - -_[INITIAL_MODE] = {}; -_[INITIAL_MODE][Tokenizer.CHARACTER_TOKEN] = -_[INITIAL_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = tokenInInitialMode; -_[INITIAL_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = ignoreToken; -_[INITIAL_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[INITIAL_MODE][Tokenizer.DOCTYPE_TOKEN] = doctypeInInitialMode; -_[INITIAL_MODE][Tokenizer.START_TAG_TOKEN] = -_[INITIAL_MODE][Tokenizer.END_TAG_TOKEN] = -_[INITIAL_MODE][Tokenizer.EOF_TOKEN] = tokenInInitialMode; - -_[BEFORE_HTML_MODE] = {}; -_[BEFORE_HTML_MODE][Tokenizer.CHARACTER_TOKEN] = -_[BEFORE_HTML_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = tokenBeforeHtml; -_[BEFORE_HTML_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = ignoreToken; -_[BEFORE_HTML_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[BEFORE_HTML_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[BEFORE_HTML_MODE][Tokenizer.START_TAG_TOKEN] = startTagBeforeHtml; -_[BEFORE_HTML_MODE][Tokenizer.END_TAG_TOKEN] = endTagBeforeHtml; -_[BEFORE_HTML_MODE][Tokenizer.EOF_TOKEN] = tokenBeforeHtml; - -_[BEFORE_HEAD_MODE] = {}; -_[BEFORE_HEAD_MODE][Tokenizer.CHARACTER_TOKEN] = -_[BEFORE_HEAD_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = tokenBeforeHead; -_[BEFORE_HEAD_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = ignoreToken; -_[BEFORE_HEAD_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[BEFORE_HEAD_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[BEFORE_HEAD_MODE][Tokenizer.START_TAG_TOKEN] = startTagBeforeHead; -_[BEFORE_HEAD_MODE][Tokenizer.END_TAG_TOKEN] = endTagBeforeHead; -_[BEFORE_HEAD_MODE][Tokenizer.EOF_TOKEN] = tokenBeforeHead; - -_[IN_HEAD_MODE] = {}; -_[IN_HEAD_MODE][Tokenizer.CHARACTER_TOKEN] = -_[IN_HEAD_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = tokenInHead; -_[IN_HEAD_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = insertCharacters; -_[IN_HEAD_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_HEAD_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_HEAD_MODE][Tokenizer.START_TAG_TOKEN] = startTagInHead; -_[IN_HEAD_MODE][Tokenizer.END_TAG_TOKEN] = endTagInHead; -_[IN_HEAD_MODE][Tokenizer.EOF_TOKEN] = tokenInHead; - -_[AFTER_HEAD_MODE] = {}; -_[AFTER_HEAD_MODE][Tokenizer.CHARACTER_TOKEN] = -_[AFTER_HEAD_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = tokenAfterHead; -_[AFTER_HEAD_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = insertCharacters; -_[AFTER_HEAD_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[AFTER_HEAD_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[AFTER_HEAD_MODE][Tokenizer.START_TAG_TOKEN] = startTagAfterHead; -_[AFTER_HEAD_MODE][Tokenizer.END_TAG_TOKEN] = endTagAfterHead; -_[AFTER_HEAD_MODE][Tokenizer.EOF_TOKEN] = tokenAfterHead; - -_[IN_BODY_MODE] = {}; -_[IN_BODY_MODE][Tokenizer.CHARACTER_TOKEN] = characterInBody; -_[IN_BODY_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[IN_BODY_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = whitespaceCharacterInBody; -_[IN_BODY_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_BODY_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_BODY_MODE][Tokenizer.START_TAG_TOKEN] = startTagInBody; -_[IN_BODY_MODE][Tokenizer.END_TAG_TOKEN] = endTagInBody; -_[IN_BODY_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[TEXT_MODE] = {}; -_[TEXT_MODE][Tokenizer.CHARACTER_TOKEN] = -_[TEXT_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = -_[TEXT_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = insertCharacters; -_[TEXT_MODE][Tokenizer.COMMENT_TOKEN] = -_[TEXT_MODE][Tokenizer.DOCTYPE_TOKEN] = -_[TEXT_MODE][Tokenizer.START_TAG_TOKEN] = ignoreToken; -_[TEXT_MODE][Tokenizer.END_TAG_TOKEN] = endTagInText; -_[TEXT_MODE][Tokenizer.EOF_TOKEN] = eofInText; - -_[IN_TABLE_MODE] = {}; -_[IN_TABLE_MODE][Tokenizer.CHARACTER_TOKEN] = -_[IN_TABLE_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = -_[IN_TABLE_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = characterInTable; -_[IN_TABLE_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_TABLE_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_TABLE_MODE][Tokenizer.START_TAG_TOKEN] = startTagInTable; -_[IN_TABLE_MODE][Tokenizer.END_TAG_TOKEN] = endTagInTable; -_[IN_TABLE_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[IN_TABLE_TEXT_MODE] = {}; -_[IN_TABLE_TEXT_MODE][Tokenizer.CHARACTER_TOKEN] = characterInTableText; -_[IN_TABLE_TEXT_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[IN_TABLE_TEXT_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = whitespaceCharacterInTableText; -_[IN_TABLE_TEXT_MODE][Tokenizer.COMMENT_TOKEN] = -_[IN_TABLE_TEXT_MODE][Tokenizer.DOCTYPE_TOKEN] = -_[IN_TABLE_TEXT_MODE][Tokenizer.START_TAG_TOKEN] = -_[IN_TABLE_TEXT_MODE][Tokenizer.END_TAG_TOKEN] = -_[IN_TABLE_TEXT_MODE][Tokenizer.EOF_TOKEN] = tokenInTableText; - -_[IN_CAPTION_MODE] = {}; -_[IN_CAPTION_MODE][Tokenizer.CHARACTER_TOKEN] = characterInBody; -_[IN_CAPTION_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[IN_CAPTION_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = whitespaceCharacterInBody; -_[IN_CAPTION_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_CAPTION_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_CAPTION_MODE][Tokenizer.START_TAG_TOKEN] = startTagInCaption; -_[IN_CAPTION_MODE][Tokenizer.END_TAG_TOKEN] = endTagInCaption; -_[IN_CAPTION_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[IN_COLUMN_GROUP_MODE] = {}; -_[IN_COLUMN_GROUP_MODE][Tokenizer.CHARACTER_TOKEN] = -_[IN_COLUMN_GROUP_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = tokenInColumnGroup; -_[IN_COLUMN_GROUP_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = insertCharacters; -_[IN_COLUMN_GROUP_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_COLUMN_GROUP_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_COLUMN_GROUP_MODE][Tokenizer.START_TAG_TOKEN] = startTagInColumnGroup; -_[IN_COLUMN_GROUP_MODE][Tokenizer.END_TAG_TOKEN] = endTagInColumnGroup; -_[IN_COLUMN_GROUP_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[IN_TABLE_BODY_MODE] = {}; -_[IN_TABLE_BODY_MODE][Tokenizer.CHARACTER_TOKEN] = -_[IN_TABLE_BODY_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = -_[IN_TABLE_BODY_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = characterInTable; -_[IN_TABLE_BODY_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_TABLE_BODY_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_TABLE_BODY_MODE][Tokenizer.START_TAG_TOKEN] = startTagInTableBody; -_[IN_TABLE_BODY_MODE][Tokenizer.END_TAG_TOKEN] = endTagInTableBody; -_[IN_TABLE_BODY_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[IN_ROW_MODE] = {}; -_[IN_ROW_MODE][Tokenizer.CHARACTER_TOKEN] = -_[IN_ROW_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = -_[IN_ROW_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = characterInTable; -_[IN_ROW_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_ROW_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_ROW_MODE][Tokenizer.START_TAG_TOKEN] = startTagInRow; -_[IN_ROW_MODE][Tokenizer.END_TAG_TOKEN] = endTagInRow; -_[IN_ROW_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[IN_CELL_MODE] = {}; -_[IN_CELL_MODE][Tokenizer.CHARACTER_TOKEN] = characterInBody; -_[IN_CELL_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[IN_CELL_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = whitespaceCharacterInBody; -_[IN_CELL_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_CELL_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_CELL_MODE][Tokenizer.START_TAG_TOKEN] = startTagInCell; -_[IN_CELL_MODE][Tokenizer.END_TAG_TOKEN] = endTagInCell; -_[IN_CELL_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[IN_SELECT_MODE] = {}; -_[IN_SELECT_MODE][Tokenizer.CHARACTER_TOKEN] = insertCharacters; -_[IN_SELECT_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[IN_SELECT_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = insertCharacters; -_[IN_SELECT_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_SELECT_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_SELECT_MODE][Tokenizer.START_TAG_TOKEN] = startTagInSelect; -_[IN_SELECT_MODE][Tokenizer.END_TAG_TOKEN] = endTagInSelect; -_[IN_SELECT_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[IN_SELECT_IN_TABLE_MODE] = {}; -_[IN_SELECT_IN_TABLE_MODE][Tokenizer.CHARACTER_TOKEN] = insertCharacters; -_[IN_SELECT_IN_TABLE_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[IN_SELECT_IN_TABLE_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = insertCharacters; -_[IN_SELECT_IN_TABLE_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_SELECT_IN_TABLE_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_SELECT_IN_TABLE_MODE][Tokenizer.START_TAG_TOKEN] = startTagInSelectInTable; -_[IN_SELECT_IN_TABLE_MODE][Tokenizer.END_TAG_TOKEN] = endTagInSelectInTable; -_[IN_SELECT_IN_TABLE_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[AFTER_BODY_MODE] = {}; -_[AFTER_BODY_MODE][Tokenizer.CHARACTER_TOKEN] = -_[AFTER_BODY_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = tokenAfterBody; -_[AFTER_BODY_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = whitespaceCharacterInBody; -_[AFTER_BODY_MODE][Tokenizer.COMMENT_TOKEN] = appendCommentToRootHtmlElement; -_[AFTER_BODY_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[AFTER_BODY_MODE][Tokenizer.START_TAG_TOKEN] = startTagAfterBody; -_[AFTER_BODY_MODE][Tokenizer.END_TAG_TOKEN] = endTagAfterBody; -_[AFTER_BODY_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[IN_FRAMESET_MODE] = {}; -_[IN_FRAMESET_MODE][Tokenizer.CHARACTER_TOKEN] = -_[IN_FRAMESET_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[IN_FRAMESET_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = insertCharacters; -_[IN_FRAMESET_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[IN_FRAMESET_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[IN_FRAMESET_MODE][Tokenizer.START_TAG_TOKEN] = startTagInFrameset; -_[IN_FRAMESET_MODE][Tokenizer.END_TAG_TOKEN] = endTagInFrameset; -_[IN_FRAMESET_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[AFTER_FRAMESET_MODE] = {}; -_[AFTER_FRAMESET_MODE][Tokenizer.CHARACTER_TOKEN] = -_[AFTER_FRAMESET_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[AFTER_FRAMESET_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = insertCharacters; -_[AFTER_FRAMESET_MODE][Tokenizer.COMMENT_TOKEN] = appendComment; -_[AFTER_FRAMESET_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[AFTER_FRAMESET_MODE][Tokenizer.START_TAG_TOKEN] = startTagAfterFrameset; -_[AFTER_FRAMESET_MODE][Tokenizer.END_TAG_TOKEN] = endTagAfterFrameset; -_[AFTER_FRAMESET_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[AFTER_AFTER_BODY_MODE] = {}; -_[AFTER_AFTER_BODY_MODE][Tokenizer.CHARACTER_TOKEN] = tokenAfterAfterBody; -_[AFTER_AFTER_BODY_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = tokenAfterAfterBody; -_[AFTER_AFTER_BODY_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = whitespaceCharacterInBody; -_[AFTER_AFTER_BODY_MODE][Tokenizer.COMMENT_TOKEN] = appendCommentToDocument; -_[AFTER_AFTER_BODY_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[AFTER_AFTER_BODY_MODE][Tokenizer.START_TAG_TOKEN] = startTagAfterAfterBody; -_[AFTER_AFTER_BODY_MODE][Tokenizer.END_TAG_TOKEN] = tokenAfterAfterBody; -_[AFTER_AFTER_BODY_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -_[AFTER_AFTER_FRAMESET_MODE] = {}; -_[AFTER_AFTER_FRAMESET_MODE][Tokenizer.CHARACTER_TOKEN] = -_[AFTER_AFTER_FRAMESET_MODE][Tokenizer.NULL_CHARACTER_TOKEN] = ignoreToken; -_[AFTER_AFTER_FRAMESET_MODE][Tokenizer.WHITESPACE_CHARACTER_TOKEN] = whitespaceCharacterInBody; -_[AFTER_AFTER_FRAMESET_MODE][Tokenizer.COMMENT_TOKEN] = appendCommentToDocument; -_[AFTER_AFTER_FRAMESET_MODE][Tokenizer.DOCTYPE_TOKEN] = ignoreToken; -_[AFTER_AFTER_FRAMESET_MODE][Tokenizer.START_TAG_TOKEN] = startTagAfterAfterFrameset; -_[AFTER_AFTER_FRAMESET_MODE][Tokenizer.END_TAG_TOKEN] = ignoreToken; -_[AFTER_AFTER_FRAMESET_MODE][Tokenizer.EOF_TOKEN] = stopParsing; - -//Searchable index building utils ( tag) -function getSearchableIndexFormAttrs(isindexStartTagToken) { - var indexAction = Tokenizer.getTokenAttr(isindexStartTagToken, ATTRS.ACTION), - attrs = []; - - if (indexAction !== null) { - attrs.push({ - name: ATTRS.ACTION, - value: indexAction - }); - } - - return attrs; -} - -function getSearchableIndexLabelText(isindexStartTagToken) { - var indexPrompt = Tokenizer.getTokenAttr(isindexStartTagToken, ATTRS.PROMPT); - - return indexPrompt === null ? SEARCHABLE_INDEX_DEFAULT_PROMPT : indexPrompt; -} - -function getSearchableIndexInputAttrs(isindexStartTagToken) { - var isindexAttrs = isindexStartTagToken.attrs, - inputAttrs = []; - - for (var i = 0; i < isindexAttrs.length; i++) { - var name = isindexAttrs[i].name; - - if (name !== ATTRS.NAME && name !== ATTRS.ACTION && name !== ATTRS.PROMPT) - inputAttrs.push(isindexAttrs[i]); - } - - inputAttrs.push({ - name: ATTRS.NAME, - value: SEARCHABLE_INDEX_INPUT_NAME - }); - - return inputAttrs; -} - -//Parser -var Parser = module.exports = function (treeAdapter) { - this.treeAdapter = treeAdapter || DefaultTreeAdapter; - this.scriptHandler = null; -}; - -//API -Parser.prototype.parse = function (html) { - var document = this.treeAdapter.createDocument(); - - this._reset(html, document, null); - this._runParsingLoop(); - - return document; -}; - -Parser.prototype.parseFragment = function (html, fragmentContext) { - //NOTE: use
element as a fragment context if context element was not provided - if (!fragmentContext) - fragmentContext = this.treeAdapter.createElement($.DIV, NS.HTML, []); - - //NOTE: create fake element which will be used as 'document' for fragment parsing. - //This is important for jsdom there 'document' can't be recreated, therefore - //fragment parsing causes messing of the main `document`. - var documentMock = this.treeAdapter.createElement('documentmock', NS.HTML, []); - - this._reset(html, documentMock, fragmentContext); - this._initTokenizerForFragmentParsing(); - this._insertFakeRootElement(); - this._resetInsertionModeAppropriately(); - this._findFormInFragmentContext(); - this._runParsingLoop(); - - var rootElement = this.treeAdapter.getFirstChild(documentMock), - fragment = this.treeAdapter.createDocumentFragment(); - - this._adoptNodes(rootElement, fragment); - - return fragment; -}; - -//Reset state -Parser.prototype._reset = function (html, document, fragmentContext) { - this.tokenizer = new Tokenizer(html); - - this.stopped = false; - - this.insertionMode = INITIAL_MODE; - this.originalInsertionMode = ''; - - this.document = document; - this.fragmentContext = fragmentContext; - - this.headElement = null; - this.formElement = null; - - this.openElements = new OpenElementStack(this.document, this.treeAdapter); - this.activeFormattingElements = new FormattingElementList(this.treeAdapter); - - this.pendingCharacterTokens = []; - this.hasNonWhitespacePendingCharacterToken = false; - - this.framesetOk = true; - this.skipNextNewLine = false; - this.fosterParentingEnabled = false; -}; - -//Parsing loop -Parser.prototype._iterateParsingLoop = function () { - this._setupTokenizerCDATAMode(); - - var token = this.tokenizer.getNextToken(); - - if (this.skipNextNewLine) { - this.skipNextNewLine = false; - - if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN && token.chars[0] === '\n') { - if (token.chars.length === 1) - return; - - token.chars = token.chars.substr(1); - } - } - - if (this._shouldProcessTokenInForeignContent(token)) - this._processTokenInForeignContent(token); - - else - this._processToken(token); -}; - -Parser.prototype._runParsingLoop = function () { - while (!this.stopped) - this._iterateParsingLoop(); -}; - -//Text parsing -Parser.prototype._setupTokenizerCDATAMode = function () { - var current = this._getAdjustedCurrentElement(); - - this.tokenizer.allowCDATA = current && current !== this.document && - this.treeAdapter.getNamespaceURI(current) !== NS.HTML && - (!this._isHtmlIntegrationPoint(current)) && - (!this._isMathMLTextIntegrationPoint(current)); -}; - -Parser.prototype._switchToTextParsing = function (currentToken, nextTokenizerState) { - this._insertElement(currentToken, NS.HTML); - this.tokenizer.state = nextTokenizerState; - this.originalInsertionMode = this.insertionMode; - this.insertionMode = TEXT_MODE; -}; - -//Fragment parsing -Parser.prototype._getAdjustedCurrentElement = function () { - return this.openElements.stackTop === 0 && this.fragmentContext ? this.fragmentContext : this.openElements.current; -}; - -Parser.prototype._findFormInFragmentContext = function () { - var node = this.fragmentContext; - - do { - if (this.treeAdapter.getTagName(node) === $.FORM) { - this.formElement = node; - break; - } - - node = this.treeAdapter.getParentNode(node); - } while (node); -}; - -Parser.prototype._initTokenizerForFragmentParsing = function () { - var tn = this.treeAdapter.getTagName(this.fragmentContext); - - if (tn === $.TITLE || tn === $.TEXTAREA) - this.tokenizer.state = Tokenizer.RCDATA_STATE; - - else if (tn === $.STYLE || tn === $.XMP || tn === $.IFRAME || - tn === $.NOEMBED || tn === $.NOFRAMES || tn === $.NOSCRIPT) { - this.tokenizer.state = Tokenizer.RAWTEXT_STATE; - } - - else if (tn === $.SCRIPT) - this.tokenizer.state = Tokenizer.SCRIPT_DATA_STATE; - - else if (tn === $.PLAINTEXT) - this.tokenizer.state = Tokenizer.PLAINTEXT_STATE; -}; - -//Tree mutation -Parser.prototype._setDocumentType = function (token) { - this.treeAdapter.setDocumentType(this.document, token.name, token.publicId, token.systemId); -}; - -Parser.prototype._attachElementToTree = function (element) { - if (this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.current)) - this._fosterParentElement(element); - else - this.treeAdapter.appendChild(this.openElements.current, element); -}; - -Parser.prototype._appendElement = function (token, namespaceURI) { - var element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs); - - this._attachElementToTree(element); -}; - -Parser.prototype._insertElement = function (token, namespaceURI) { - var element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs); - - this._attachElementToTree(element); - this.openElements.push(element); -}; - -Parser.prototype._insertFakeRootElement = function () { - var element = this.treeAdapter.createElement($.HTML, NS.HTML, []); - - this.treeAdapter.appendChild(this.openElements.current, element); - this.openElements.push(element); -}; - -Parser.prototype._appendCommentNode = function (token, parent) { - var commentNode = this.treeAdapter.createCommentNode(token.data); - - this.treeAdapter.appendChild(parent, commentNode); -}; - -Parser.prototype._insertCharacters = function (token) { - if (this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.current)) { - var location = this._findFosterParentingLocation(); - - if (location.beforeElement) - this.treeAdapter.insertTextBefore(location.parent, token.chars, location.beforeElement); - else - this.treeAdapter.insertText(location.parent, token.chars); - } - else - this.treeAdapter.insertText(this.openElements.current, token.chars); -}; - -Parser.prototype._adoptNodes = function (donor, recipient) { - while (true) { - var child = this.treeAdapter.getFirstChild(donor); - - if (!child) - break; - - this.treeAdapter.detachNode(child); - this.treeAdapter.appendChild(recipient, child); - } -}; - -//Token processing -Parser.prototype._shouldProcessTokenInForeignContent = function (token) { - var current = this._getAdjustedCurrentElement(); - - if (!current || current === this.document) - return false; - - var ns = this.treeAdapter.getNamespaceURI(current); - - if (ns === NS.HTML) - return false; - - if (this.treeAdapter.getTagName(current) === $.ANNOTATION_XML && ns === NS.MATHML && - token.type === Tokenizer.START_TAG_TOKEN && token.tagName === $.SVG) { - return false; - } - - var isCharacterToken = token.type === Tokenizer.CHARACTER_TOKEN || - token.type === Tokenizer.NULL_CHARACTER_TOKEN || - token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN, - isMathMLTextStartTag = token.type === Tokenizer.START_TAG_TOKEN && - token.tagName !== $.MGLYPH && - token.tagName !== $.MALIGNMARK; - - if ((isMathMLTextStartTag || isCharacterToken) && this._isMathMLTextIntegrationPoint(current)) - return false; - - if ((token.type === Tokenizer.START_TAG_TOKEN || isCharacterToken) && this._isHtmlIntegrationPoint(current)) - return false; - - return token.type !== Tokenizer.EOF_TOKEN; -}; - -Parser.prototype._processToken = function (token) { - _[this.insertionMode][token.type](this, token); -}; - -Parser.prototype._processTokenInBodyMode = function (token) { - _[IN_BODY_MODE][token.type](this, token); -}; - -Parser.prototype._processTokenInForeignContent = function (token) { - if (token.type === Tokenizer.CHARACTER_TOKEN) - characterInForeignContent(this, token); - - else if (token.type === Tokenizer.NULL_CHARACTER_TOKEN) - nullCharacterInForeignContent(this, token); - - else if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN) - insertCharacters(this, token); - - else if (token.type === Tokenizer.COMMENT_TOKEN) - appendComment(this, token); - - else if (token.type === Tokenizer.START_TAG_TOKEN) - startTagInForeignContent(this, token); - - else if (token.type === Tokenizer.END_TAG_TOKEN) - endTagInForeignContent(this, token); -}; - -Parser.prototype._processFakeStartTagWithAttrs = function (tagName, attrs) { - var fakeToken = this.tokenizer.buildStartTagToken(tagName); - - fakeToken.attrs = attrs; - this._processToken(fakeToken); -}; - -Parser.prototype._processFakeStartTag = function (tagName) { - var fakeToken = this.tokenizer.buildStartTagToken(tagName); - - this._processToken(fakeToken); - return fakeToken; -}; - -Parser.prototype._processFakeEndTag = function (tagName) { - var fakeToken = this.tokenizer.buildEndTagToken(tagName); - - this._processToken(fakeToken); - return fakeToken; -}; - -//Integration points -Parser.prototype._isMathMLTextIntegrationPoint = function (element) { - var tn = this.treeAdapter.getTagName(element), - ns = this.treeAdapter.getNamespaceURI(element); - - return ForeignContent.isMathMLTextIntegrationPoint(tn, ns); -}; - -Parser.prototype._isHtmlIntegrationPoint = function (element) { - var tn = this.treeAdapter.getTagName(element), - ns = this.treeAdapter.getNamespaceURI(element), - attrs = this.treeAdapter.getAttrList(element); - - return ForeignContent.isHtmlIntegrationPoint(tn, ns, attrs); -}; - -//Active formatting elements reconstruction -Parser.prototype._reconstructActiveFormattingElements = function () { - var listLength = this.activeFormattingElements.length; - - if (listLength) { - var unopenIdx = listLength, - entry = null; - - do { - unopenIdx--; - entry = this.activeFormattingElements.entries[unopenIdx]; - - if (entry.type === FormattingElementList.MARKER_ENTRY || this.openElements.contains(entry.element)) { - unopenIdx++; - break; - } - } while (unopenIdx > 0); - - for (var i = unopenIdx; i < listLength; i++) { - entry = this.activeFormattingElements.entries[i]; - this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element)); - entry.element = this.openElements.current; - } - } -}; - -//Close elements -Parser.prototype._closeTableCell = function () { - if (this.openElements.hasInTableScope($.TD)) - this._processFakeEndTag($.TD); - - else - this._processFakeEndTag($.TH); -}; - -Parser.prototype._closePElement = function () { - this.openElements.generateImpliedEndTagsWithExclusion($.P); - this.openElements.popUntilTagNamePopped($.P); -}; - -//Insertion mode -Parser.prototype._resetInsertionModeAppropriately = function () { - for (var i = this.openElements.stackTop, last = false; i >= 0; i--) { - var element = this.openElements.items[i]; - - if (this.openElements.items[0] === element) { - last = true; - element = this.fragmentContext; - } - - var tn = this.treeAdapter.getTagName(element), - resetInsertionMode = INSERTION_MODE_RESET_MAP[tn]; - - if (resetInsertionMode) { - this.insertionMode = resetInsertionMode; - break; - } - - else if (!last && (tn === $.TD || tn === $.TH)) { - this.insertionMode = IN_CELL_MODE; - break; - } - - else if (last) { - this.insertionMode = IN_BODY_MODE; - break; - } - } -}; - -//Adoption agency alogrithm -//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency) -Parser.prototype._obtainFormattingElementEntryForAdoptionAgency = function (token) { - //NOTE: step 4 of the algorithm - var tn = token.tagName, - formattingElementEntry = this.activeFormattingElements.getElementEntryInScopeWithTagName(tn); - - if (formattingElementEntry) { - if (!this.openElements.contains(formattingElementEntry.element)) { - this.activeFormattingElements.removeEntry(formattingElementEntry); - formattingElementEntry = null; - } - - else if (!this.openElements.hasInScope(tn)) - formattingElementEntry = null; - } - - else - genericEndTagInBody(this, token); - - return formattingElementEntry; -}; - -Parser.prototype._obtainFurthestBlockForAdoptionAgency = function (formattingElementEntry) { - //NOTE: steps 5 and 6 of the algorithm - var furthestBlock = null; - - for (var i = this.openElements.stackTop; i >= 0; i--) { - var element = this.openElements.items[i]; - - if (element === formattingElementEntry.element) - break; - - if (this._isSpecialElement(element)) - furthestBlock = element; - } - - if (!furthestBlock) { - this.openElements.popUntilElementPopped(formattingElementEntry.element); - this.activeFormattingElements.removeEntry(formattingElementEntry); - } - - return furthestBlock; -}; - -Parser.prototype._recreateElementForAdoptionAgency = function (elementEntry) { - //NOTE: step 9.7 of the algorithm - var ns = this.treeAdapter.getNamespaceURI(elementEntry.element), - newElement = this.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs); - - this.openElements.replace(elementEntry.element, newElement); - elementEntry.element = newElement; - - return newElement; -}; - -Parser.prototype._adoptionAgencyInnerLoop = function (furthestBlock, formattingElement) { - var element = null, - lastElement = furthestBlock, - nextElement = this.openElements.getCommonAncestor(furthestBlock); - - for (var i = 0; i < 3; i++) { - element = nextElement; - - //NOTE: store next element for the next loop iteration (it may be deleted from the stack by step 9.5) - nextElement = this.openElements.getCommonAncestor(element); - - var elementEntry = this.activeFormattingElements.getElementEntry(element); - - if (!elementEntry) { - this.openElements.remove(element); - continue; - } - - if (element === formattingElement) - break; - - element = this._recreateElementForAdoptionAgency(elementEntry); - - if (lastElement === furthestBlock) - this.activeFormattingElements.bookmark = elementEntry; - - this.treeAdapter.detachNode(lastElement); - this.treeAdapter.appendChild(element, lastElement); - lastElement = element; - } - - return lastElement; -}; - -Parser.prototype._replaceFormattingElementForAdoptionAgency = function (furthestBlock, formattingElementEntry) { - //NOTE: steps 11-15 of the algorithm - var ns = this.treeAdapter.getNamespaceURI(formattingElementEntry.element), - token = formattingElementEntry.token, - newElement = this.treeAdapter.createElement(token.tagName, ns, token.attrs); - - this._adoptNodes(furthestBlock, newElement); - this.treeAdapter.appendChild(furthestBlock, newElement); - - this.activeFormattingElements.insertElementAfterBookmark(newElement, formattingElementEntry.token); - this.activeFormattingElements.removeEntry(formattingElementEntry); - - this.openElements.remove(formattingElementEntry.element); - this.openElements.insertAfter(furthestBlock, newElement); -}; - -Parser.prototype._callAdoptionAgency = function (token) { - for (var i = 0; i < 8; i++) { - var formattingElementEntry = this._obtainFormattingElementEntryForAdoptionAgency(token); - - if (!formattingElementEntry) - break; - - var furthestBlock = this._obtainFurthestBlockForAdoptionAgency(formattingElementEntry); - - if (!furthestBlock) - break; - - this.activeFormattingElements.bookmark = formattingElementEntry; - - var lastElement = this._adoptionAgencyInnerLoop(furthestBlock, formattingElementEntry.element), - commonAncestor = this.openElements.getCommonAncestor(formattingElementEntry.element); - - this.treeAdapter.detachNode(lastElement); - - if (this._isElementCausesFosterParenting(commonAncestor)) - this._fosterParentElement(lastElement); - - else - this.treeAdapter.appendChild(commonAncestor, lastElement); - - this._replaceFormattingElementForAdoptionAgency(furthestBlock, formattingElementEntry); - } -}; - -//Foster parenting -Parser.prototype._isElementCausesFosterParenting = function (element) { - var tn = this.treeAdapter.getTagName(element); - - return tn === $.TABLE || tn === $.TBODY || tn === $.TFOOT || tn == $.THEAD || tn === $.TR; -}; - -Parser.prototype._findFosterParentingLocation = function () { - var location = { - parent: null, - beforeElement: null - }; - - for (var i = this.openElements.stackTop; i >= 0; i--) { - var openElement = this.openElements.items[i]; - - if (this.treeAdapter.getTagName(openElement) === $.TABLE) { - location.parent = this.treeAdapter.getParentNode(openElement); - - if (location.parent) - location.beforeElement = openElement; - else - location.parent = this.openElements.items[i - 1]; - - break; - } - } - - if (!location.parent) - location.parent = this.openElements.items[0]; - - return location; -}; - -Parser.prototype._fosterParentElement = function (element) { - var location = this._findFosterParentingLocation(); - - if (location.beforeElement) - this.treeAdapter.insertBefore(location.parent, element, location.beforeElement); - else - this.treeAdapter.appendChild(location.parent, element); -}; - -//Special elements -Parser.prototype._isSpecialElement = function (element) { - var tn = this.treeAdapter.getTagName(element), - ns = this.treeAdapter.getNamespaceURI(element); - - return HTML.SPECIAL_ELEMENTS[ns][tn]; -}; - - -//Generic token handlers -//------------------------------------------------------------------ -function ignoreToken(p, token) { - //NOTE: do nothing =) -} - -function appendComment(p, token) { - p._appendCommentNode(token, p.openElements.current) -} - -function appendCommentToRootHtmlElement(p, token) { - p._appendCommentNode(token, p.openElements.items[0]); -} - -function appendCommentToDocument(p, token) { - p._appendCommentNode(token, p.document); -} - -function insertCharacters(p, token) { - p._insertCharacters(token); -} - -function stopParsing(p, token) { - p.stopped = true; -} - -//12.2.5.4.1 The "initial" insertion mode -//------------------------------------------------------------------ -function doctypeInInitialMode(p, token) { - p._setDocumentType(token); - - if (token.forceQuirks || Doctype.isQuirks(token.name, token.publicId, token.systemId)) - p.treeAdapter.setQuirksMode(p.document); - - p.insertionMode = BEFORE_HTML_MODE; -} - -function tokenInInitialMode(p, token) { - p.treeAdapter.setQuirksMode(p.document); - p.insertionMode = BEFORE_HTML_MODE; - p._processToken(token); -} - - -//12.2.5.4.2 The "before html" insertion mode -//------------------------------------------------------------------ -function startTagBeforeHtml(p, token) { - if (token.tagName === $.HTML) { - p._insertElement(token, NS.HTML); - p.insertionMode = BEFORE_HEAD_MODE; - } - - else - tokenBeforeHtml(p, token); -} - -function endTagBeforeHtml(p, token) { - var tn = token.tagName; - - if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) - tokenBeforeHtml(p, token); -} - -function tokenBeforeHtml(p, token) { - p._insertFakeRootElement(); - p.insertionMode = BEFORE_HEAD_MODE; - p._processToken(token); -} - - -//12.2.5.4.3 The "before head" insertion mode -//------------------------------------------------------------------ -function startTagBeforeHead(p, token) { - var tn = token.tagName; - - if (tn === $.HTML) - startTagInBody(p, token); - - else if (tn === $.HEAD) { - p._insertElement(token, NS.HTML); - p.headElement = p.openElements.current; - p.insertionMode = IN_HEAD_MODE; - } - - else - tokenBeforeHead(p, token); -} - -function endTagBeforeHead(p, token) { - var tn = token.tagName; - - if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) - tokenBeforeHead(p, token); -} - -function tokenBeforeHead(p, token) { - p._processFakeStartTag($.HEAD); - p._processToken(token); -} - - -//12.2.5.4.4 The "in head" insertion mode -//------------------------------------------------------------------ -function startTagInHead(p, token) { - var tn = token.tagName; - - if (tn === $.HTML) - startTagInBody(p, token); - - else if (tn === $.BASE || tn === $.BASEFONT || tn === $.BGSOUND || - tn === $.COMMAND || tn === $.LINK || tn === $.META) { - p._appendElement(token, NS.HTML); - } - - else if (tn === $.TITLE) - p._switchToTextParsing(token, Tokenizer.RCDATA_STATE); - - //NOTE: here we assume that we always act as an interactive user agent with enabled scripting, so we parse - //