All Downloads are FREE. Search and download functionalities are using the official Maven repository.

docsys-guidebook._nuxt.ab270bb.js Maven / Gradle / Ivy

There is a newer version: 4.15.102
Show newest version
(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[10],{

/***/ 269:
/***/ (function(module, exports) {

eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nfunction arrayToString(a) {\n    return \"[\" + a.join(\", \") + \"]\";\n}\n\nString.prototype.seed = String.prototype.seed || Math.round(Math.random() * Math.pow(2, 32));\n\nString.prototype.hashCode = function () {\n    var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i,\n        key = this.toString();\n\n    remainder = key.length & 3; // key.length % 4\n    bytes = key.length - remainder;\n    h1 = String.prototype.seed;\n    c1 = 0xcc9e2d51;\n    c2 = 0x1b873593;\n    i = 0;\n\n    while (i < bytes) {\n        k1 =\n            ((key.charCodeAt(i) & 0xff)) |\n            ((key.charCodeAt(++i) & 0xff) << 8) |\n            ((key.charCodeAt(++i) & 0xff) << 16) |\n            ((key.charCodeAt(++i) & 0xff) << 24);\n        ++i;\n\n        k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n        k1 = (k1 << 15) | (k1 >>> 17);\n        k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n        h1 ^= k1;\n        h1 = (h1 << 13) | (h1 >>> 19);\n        h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n        h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n    }\n\n    k1 = 0;\n\n    switch (remainder) {\n        case 3:\n            k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n        case 2:\n            k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n        case 1:\n            k1 ^= (key.charCodeAt(i) & 0xff);\n\n            k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n            k1 = (k1 << 15) | (k1 >>> 17);\n            k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n            h1 ^= k1;\n    }\n\n    h1 ^= key.length;\n\n    h1 ^= h1 >>> 16;\n    h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n    h1 ^= h1 >>> 13;\n    h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n    h1 ^= h1 >>> 16;\n\n    return h1 >>> 0;\n};\n\nfunction standardEqualsFunction(a, b) {\n    return a.equals(b);\n}\n\nfunction standardHashCodeFunction(a) {\n    return a.hashCode();\n}\n\nfunction Set(hashFunction, equalsFunction) {\n    this.data = {};\n    this.hashFunction = hashFunction || standardHashCodeFunction;\n    this.equalsFunction = equalsFunction || standardEqualsFunction;\n    return this;\n}\n\nObject.defineProperty(Set.prototype, \"length\", {\n    get: function () {\n        var l = 0;\n        for (var key in this.data) {\n            if (key.indexOf(\"hash_\") === 0) {\n                l = l + this.data[key].length;\n            }\n        }\n        return l;\n    }\n});\n\nSet.prototype.add = function (value) {\n    var hash = this.hashFunction(value);\n    var key = \"hash_\" + hash;\n    if (key in this.data) {\n        var values = this.data[key];\n        for (var i = 0; i < values.length; i++) {\n            if (this.equalsFunction(value, values[i])) {\n                return values[i];\n            }\n        }\n        values.push(value);\n        return value;\n    } else {\n        this.data[key] = [value];\n        return value;\n    }\n};\n\nSet.prototype.contains = function (value) {\n    return this.get(value) != null;\n};\n\nSet.prototype.get = function (value) {\n    var hash = this.hashFunction(value);\n    var key = \"hash_\" + hash;\n    if (key in this.data) {\n        var values = this.data[key];\n        for (var i = 0; i < values.length; i++) {\n            if (this.equalsFunction(value, values[i])) {\n                return values[i];\n            }\n        }\n    }\n    return null;\n};\n\nSet.prototype.values = function () {\n    var l = [];\n    for (var key in this.data) {\n        if (key.indexOf(\"hash_\") === 0) {\n            l = l.concat(this.data[key]);\n        }\n    }\n    return l;\n};\n\nSet.prototype.toString = function () {\n    return arrayToString(this.values());\n};\n\nfunction BitSet() {\n    this.data = [];\n    return this;\n}\n\nBitSet.prototype.add = function (value) {\n    this.data[value] = true;\n};\n\nBitSet.prototype.or = function (set) {\n    var bits = this;\n    Object.keys(set.data).map(function (alt) {\n        bits.add(alt);\n    });\n};\n\nBitSet.prototype.remove = function (value) {\n    delete this.data[value];\n};\n\nBitSet.prototype.contains = function (value) {\n    return this.data[value] === true;\n};\n\nBitSet.prototype.values = function () {\n    return Object.keys(this.data);\n};\n\nBitSet.prototype.minValue = function () {\n    return Math.min.apply(null, this.values());\n};\n\nBitSet.prototype.hashCode = function () {\n    var hash = new Hash();\n    hash.update(this.values());\n    return hash.finish();\n};\n\nBitSet.prototype.equals = function (other) {\n    if (!(other instanceof BitSet)) {\n        return false;\n    }\n    return this.hashCode() === other.hashCode();\n};\n\nObject.defineProperty(BitSet.prototype, \"length\", {\n    get: function () {\n        return this.values().length;\n    }\n});\n\nBitSet.prototype.toString = function () {\n    return \"{\" + this.values().join(\", \") + \"}\";\n};\n\nfunction Map(hashFunction, equalsFunction) {\n    this.data = {};\n    this.hashFunction = hashFunction || standardHashCodeFunction;\n    this.equalsFunction = equalsFunction || standardEqualsFunction;\n    return this;\n}\n\nObject.defineProperty(Map.prototype, \"length\", {\n    get: function () {\n        var l = 0;\n        for (var hashKey in this.data) {\n            if (hashKey.indexOf(\"hash_\") === 0) {\n                l = l + this.data[hashKey].length;\n            }\n        }\n        return l;\n    }\n});\n\nMap.prototype.put = function (key, value) {\n    var hashKey = \"hash_\" + this.hashFunction(key);\n    if (hashKey in this.data) {\n        var entries = this.data[hashKey];\n        for (var i = 0; i < entries.length; i++) {\n            var entry = entries[i];\n            if (this.equalsFunction(key, entry.key)) {\n                var oldValue = entry.value;\n                entry.value = value;\n                return oldValue;\n            }\n        }\n        entries.push({key:key, value:value});\n        return value;\n    } else {\n        this.data[hashKey] = [{key:key, value:value}];\n        return value;\n    }\n};\n\nMap.prototype.containsKey = function (key) {\n    var hashKey = \"hash_\" + this.hashFunction(key);\n    if(hashKey in this.data) {\n        var entries = this.data[hashKey];\n        for (var i = 0; i < entries.length; i++) {\n            var entry = entries[i];\n            if (this.equalsFunction(key, entry.key))\n                return true;\n        }\n    }\n    return false;\n};\n\nMap.prototype.get = function (key) {\n    var hashKey = \"hash_\" + this.hashFunction(key);\n    if(hashKey in this.data) {\n        var entries = this.data[hashKey];\n        for (var i = 0; i < entries.length; i++) {\n            var entry = entries[i];\n            if (this.equalsFunction(key, entry.key))\n                return entry.value;\n        }\n    }\n    return null;\n};\n\nMap.prototype.entries = function () {\n    var l = [];\n    for (var key in this.data) {\n        if (key.indexOf(\"hash_\") === 0) {\n            l = l.concat(this.data[key]);\n        }\n    }\n    return l;\n};\n\n\nMap.prototype.getKeys = function () {\n    return this.entries().map(function(e) {\n        return e.key;\n    });\n};\n\n\nMap.prototype.getValues = function () {\n    return this.entries().map(function(e) {\n            return e.value;\n    });\n};\n\n\nMap.prototype.toString = function () {\n    var ss = this.entries().map(function(entry) {\n        return '{' + entry.key + ':' + entry.value + '}';\n    });\n    return '[' + ss.join(\", \") + ']';\n};\n\n\nfunction AltDict() {\n    this.data = {};\n    return this;\n}\n\n\nAltDict.prototype.get = function (key) {\n    key = \"k-\" + key;\n    if (key in this.data) {\n        return this.data[key];\n    } else {\n        return null;\n    }\n};\n\nAltDict.prototype.put = function (key, value) {\n    key = \"k-\" + key;\n    this.data[key] = value;\n};\n\nAltDict.prototype.values = function () {\n    var data = this.data;\n    var keys = Object.keys(this.data);\n    return keys.map(function (key) {\n        return data[key];\n    });\n};\n\nfunction DoubleDict(defaultMapCtor) {\n    this.defaultMapCtor = defaultMapCtor || Map;\n    this.cacheMap = new this.defaultMapCtor();\n    return this;\n}\n\nfunction Hash() {\n    this.count = 0;\n    this.hash = 0;\n    return this;\n}\n\nHash.prototype.update = function () {\n    for(var i=0;i>> (32 - 15));\n            k = k * 0x1B873593;\n            this.count = this.count + 1;\n            var hash = this.hash ^ k;\n            hash = (hash << 13) | (hash >>> (32 - 13));\n            hash = hash * 5 + 0xE6546B64;\n            this.hash = hash;\n        }\n    }\n};\n\nHash.prototype.finish = function () {\n    var hash = this.hash ^ (this.count * 4);\n    hash = hash ^ (hash >>> 16);\n    hash = hash * 0x85EBCA6B;\n    hash = hash ^ (hash >>> 13);\n    hash = hash * 0xC2B2AE35;\n    hash = hash ^ (hash >>> 16);\n    return hash;\n};\n\nfunction hashStuff() {\n    var hash = new Hash();\n    hash.update.apply(hash, arguments);\n    return hash.finish();\n}\n\nDoubleDict.prototype.get = function (a, b) {\n    var d = this.cacheMap.get(a) || null;\n    return d === null ? null : (d.get(b) || null);\n};\n\nDoubleDict.prototype.set = function (a, b, o) {\n    var d = this.cacheMap.get(a) || null;\n    if (d === null) {\n        d = new this.defaultMapCtor();\n        this.cacheMap.put(a, d);\n    }\n    d.put(b, o);\n};\n\n\nfunction escapeWhitespace(s, escapeSpaces) {\n    s = s.replace(/\\t/g, \"\\\\t\")\n         .replace(/\\n/g, \"\\\\n\")\n         .replace(/\\r/g, \"\\\\r\");\n    if (escapeSpaces) {\n        s = s.replace(/ /g, \"\\u00B7\");\n    }\n    return s;\n}\n\nfunction titleCase(str) {\n    return str.replace(/\\w\\S*/g, function (txt) {\n        return txt.charAt(0).toUpperCase() + txt.substr(1);\n    });\n};\n\nfunction equalArrays(a, b)\n{\n    if (!Array.isArray(a) || !Array.isArray(b))\n        return false;\n    if (a == b)\n        return true;\n    if (a.length != b.length)\n        return false;\n    for (var i = 0; i < a.length; i++) {\n        if (a[i] == b[i])\n            continue;\n        if (!a[i].equals(b[i]))\n            return false;\n    }\n    return true;\n};\n\nexports.Hash = Hash;\nexports.Set = Set;\nexports.Map = Map;\nexports.BitSet = BitSet;\nexports.AltDict = AltDict;\nexports.DoubleDict = DoubleDict;\nexports.hashStuff = hashStuff;\nexports.escapeWhitespace = escapeWhitespace;\nexports.arrayToString = arrayToString;\nexports.titleCase = titleCase;\nexports.equalArrays = equalArrays;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L1V0aWxzLmpzP2U0ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFtQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0EsYUFBYSxpQ0FBaUM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IscUJBQXFCO0FBQzNDO0FBQ0EsS0FBSztBQUNMLCtCQUErQixxQkFBcUI7QUFDcEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBLGlCQUFpQixzQ0FBc0M7QUFDdkQsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuZnVuY3Rpb24gYXJyYXlUb1N0cmluZyhhKSB7XG4gICAgcmV0dXJuIFwiW1wiICsgYS5qb2luKFwiLCBcIikgKyBcIl1cIjtcbn1cblxuU3RyaW5nLnByb3RvdHlwZS5zZWVkID0gU3RyaW5nLnByb3RvdHlwZS5zZWVkIHx8IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDIsIDMyKSk7XG5cblN0cmluZy5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlbWFpbmRlciwgYnl0ZXMsIGgxLCBoMWIsIGMxLCBjMWIsIGMyLCBjMmIsIGsxLCBpLFxuICAgICAgICBrZXkgPSB0aGlzLnRvU3RyaW5nKCk7XG5cbiAgICByZW1haW5kZXIgPSBrZXkubGVuZ3RoICYgMzsgLy8ga2V5Lmxlbmd0aCAlIDRcbiAgICBieXRlcyA9IGtleS5sZW5ndGggLSByZW1haW5kZXI7XG4gICAgaDEgPSBTdHJpbmcucHJvdG90eXBlLnNlZWQ7XG4gICAgYzEgPSAweGNjOWUyZDUxO1xuICAgIGMyID0gMHgxYjg3MzU5MztcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgYnl0ZXMpIHtcbiAgICAgICAgazEgPVxuICAgICAgICAgICAgKChrZXkuY2hhckNvZGVBdChpKSAmIDB4ZmYpKSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4KSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNikgfFxuICAgICAgICAgICAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQpO1xuICAgICAgICArK2k7XG5cbiAgICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgazEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG4gICAgICAgIGsxID0gKCgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cbiAgICAgICAgaDEgXj0gazE7XG4gICAgICAgIGgxID0gKGgxIDw8IDEzKSB8IChoMSA+Pj4gMTkpO1xuICAgICAgICBoMWIgPSAoKCgoaDEgJiAweGZmZmYpICogNSkgKyAoKCgoaDEgPj4+IDE2KSAqIDUpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG4gICAgICAgIGgxID0gKCgoaDFiICYgMHhmZmZmKSArIDB4NmI2NCkgKyAoKCgoaDFiID4+PiAxNikgKyAweGU2NTQpICYgMHhmZmZmKSA8PCAxNikpO1xuICAgIH1cblxuICAgIGsxID0gMDtcblxuICAgIHN3aXRjaCAocmVtYWluZGVyKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGsxIF49IChrZXkuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGsxIF49IChrZXkuY2hhckNvZGVBdChpKSAmIDB4ZmYpO1xuXG4gICAgICAgICAgICBrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMxKSArICgoKChrMSA+Pj4gMTYpICogYzEpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgICAgIGsxID0gKGsxIDw8IDE1KSB8IChrMSA+Pj4gMTcpO1xuICAgICAgICAgICAgazEgPSAoKChrMSAmIDB4ZmZmZikgKiBjMikgKyAoKCgoazEgPj4+IDE2KSAqIGMyKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG4gICAgICAgICAgICBoMSBePSBrMTtcbiAgICB9XG5cbiAgICBoMSBePSBrZXkubGVuZ3RoO1xuXG4gICAgaDEgXj0gaDEgPj4+IDE2O1xuICAgIGgxID0gKCgoaDEgJiAweGZmZmYpICogMHg4NWViY2E2YikgKyAoKCgoaDEgPj4+IDE2KSAqIDB4ODVlYmNhNmIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICBoMSBePSBoMSA+Pj4gMTM7XG4gICAgaDEgPSAoKCgoaDEgJiAweGZmZmYpICogMHhjMmIyYWUzNSkgKyAoKCgoaDEgPj4+IDE2KSAqIDB4YzJiMmFlMzUpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG4gICAgaDEgXj0gaDEgPj4+IDE2O1xuXG4gICAgcmV0dXJuIGgxID4+PiAwO1xufTtcblxuZnVuY3Rpb24gc3RhbmRhcmRFcXVhbHNGdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEuZXF1YWxzKGIpO1xufVxuXG5mdW5jdGlvbiBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBhLmhhc2hDb2RlKCk7XG59XG5cbmZ1bmN0aW9uIFNldChoYXNoRnVuY3Rpb24sIGVxdWFsc0Z1bmN0aW9uKSB7XG4gICAgdGhpcy5kYXRhID0ge307XG4gICAgdGhpcy5oYXNoRnVuY3Rpb24gPSBoYXNoRnVuY3Rpb24gfHwgc3RhbmRhcmRIYXNoQ29kZUZ1bmN0aW9uO1xuICAgIHRoaXMuZXF1YWxzRnVuY3Rpb24gPSBlcXVhbHNGdW5jdGlvbiB8fCBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU2V0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbCA9IDA7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihcImhhc2hfXCIpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbCA9IGwgKyB0aGlzLmRhdGFba2V5XS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgfVxufSk7XG5cblNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2hGdW5jdGlvbih2YWx1ZSk7XG4gICAgdmFyIGtleSA9IFwiaGFzaF9cIiArIGhhc2g7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24odmFsdWUsIHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtrZXldID0gW3ZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn07XG5cblNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQodmFsdWUpICE9IG51bGw7XG59O1xuXG5TZXQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBoYXNoID0gdGhpcy5oYXNoRnVuY3Rpb24odmFsdWUpO1xuICAgIHZhciBrZXkgPSBcImhhc2hfXCIgKyBoYXNoO1xuICAgIGlmIChrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLmRhdGFba2V5XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWFsc0Z1bmN0aW9uKHZhbHVlLCB2YWx1ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cblNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgbCA9IGwuY29uY2F0KHRoaXMuZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbDtcbn07XG5cblNldC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFycmF5VG9TdHJpbmcodGhpcy52YWx1ZXMoKSk7XG59O1xuXG5mdW5jdGlvbiBCaXRTZXQoKSB7XG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkJpdFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdGhpcy5kYXRhW3ZhbHVlXSA9IHRydWU7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHNldCkge1xuICAgIHZhciBiaXRzID0gdGhpcztcbiAgICBPYmplY3Qua2V5cyhzZXQuZGF0YSkubWFwKGZ1bmN0aW9uIChhbHQpIHtcbiAgICAgICAgYml0cy5hZGQoYWx0KTtcbiAgICB9KTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZGVsZXRlIHRoaXMuZGF0YVt2YWx1ZV07XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVt2YWx1ZV0gPT09IHRydWU7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUubWluVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsIHRoaXMudmFsdWVzKCkpO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgaGFzaC51cGRhdGUodGhpcy52YWx1ZXMoKSk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgQml0U2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhc2hDb2RlKCkgPT09IG90aGVyLmhhc2hDb2RlKCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQml0U2V0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMoKS5sZW5ndGg7XG4gICAgfVxufSk7XG5cbkJpdFNldC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwie1wiICsgdGhpcy52YWx1ZXMoKS5qb2luKFwiLCBcIikgKyBcIn1cIjtcbn07XG5cbmZ1bmN0aW9uIE1hcChoYXNoRnVuY3Rpb24sIGVxdWFsc0Z1bmN0aW9uKSB7XG4gICAgdGhpcy5kYXRhID0ge307XG4gICAgdGhpcy5oYXNoRnVuY3Rpb24gPSBoYXNoRnVuY3Rpb24gfHwgc3RhbmRhcmRIYXNoQ29kZUZ1bmN0aW9uO1xuICAgIHRoaXMuZXF1YWxzRnVuY3Rpb24gPSBlcXVhbHNGdW5jdGlvbiB8fCBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWFwLnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbCA9IDA7XG4gICAgICAgIGZvciAodmFyIGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBpZiAoaGFzaEtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsID0gbCArIHRoaXMuZGF0YVtoYXNoS2V5XS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgfVxufSk7XG5cbk1hcC5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgaGFzaEtleSA9IFwiaGFzaF9cIiArIHRoaXMuaGFzaEZ1bmN0aW9uKGtleSk7XG4gICAgaWYgKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBlbnRyeS52YWx1ZTtcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBvbGRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnB1c2goe2tleTprZXksIHZhbHVlOnZhbHVlfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFbaGFzaEtleV0gPSBbe2tleTprZXksIHZhbHVlOnZhbHVlfV07XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59O1xuXG5NYXAucHJvdG90eXBlLmNvbnRhaW5zS2V5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZihoYXNoS2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuZGF0YVtoYXNoS2V5XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24oa2V5LCBlbnRyeS5rZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbk1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZihoYXNoS2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuZGF0YVtoYXNoS2V5XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24oa2V5LCBlbnRyeS5rZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbk1hcC5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbCA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgIGwgPSBsLmNvbmNhdCh0aGlzLmRhdGFba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGw7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUuZ2V0S2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIGUua2V5O1xuICAgIH0pO1xufTtcblxuXG5NYXAucHJvdG90eXBlLmdldFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlO1xuICAgIH0pO1xufTtcblxuXG5NYXAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzcyA9IHRoaXMuZW50cmllcygpLm1hcChmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICByZXR1cm4gJ3snICsgZW50cnkua2V5ICsgJzonICsgZW50cnkudmFsdWUgKyAnfSc7XG4gICAgfSk7XG4gICAgcmV0dXJuICdbJyArIHNzLmpvaW4oXCIsIFwiKSArICddJztcbn07XG5cblxuZnVuY3Rpb24gQWx0RGljdCgpIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuXG5BbHREaWN0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5ID0gXCJrLVwiICsga2V5O1xuICAgIGlmIChrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5BbHREaWN0LnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGtleSA9IFwiay1cIiArIGtleTtcbiAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xufTtcblxuQWx0RGljdC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5kYXRhKTtcbiAgICByZXR1cm4ga2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gZGF0YVtrZXldO1xuICAgIH0pO1xufTtcblxuZnVuY3Rpb24gRG91YmxlRGljdChkZWZhdWx0TWFwQ3Rvcikge1xuICAgIHRoaXMuZGVmYXVsdE1hcEN0b3IgPSBkZWZhdWx0TWFwQ3RvciB8fCBNYXA7XG4gICAgdGhpcy5jYWNoZU1hcCA9IG5ldyB0aGlzLmRlZmF1bHRNYXBDdG9yKCk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIEhhc2goKSB7XG4gICAgdGhpcy5jb3VudCA9IDA7XG4gICAgdGhpcy5oYXNoID0gMDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIGZvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMudXBkYXRlLmFwcGx5KHRoaXMsIHZhbHVlKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgayA9IDA7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgICAgICAgayA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICBrID0gdmFsdWUuaGFzaENvZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUudXBkYXRlSGFzaENvZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS51cGRhdGVIYXNoQ29kZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJObyB1cGRhdGVIYXNoQ29kZSBmb3IgXCIgKyB2YWx1ZS50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsgPSBrICogMHhDQzlFMkQ1MTtcbiAgICAgICAgICAgIGsgPSAoayA8PCAxNSkgfCAoayA+Pj4gKDMyIC0gMTUpKTtcbiAgICAgICAgICAgIGsgPSBrICogMHgxQjg3MzU5MztcbiAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50ICsgMTtcbiAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5oYXNoIF4gaztcbiAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCAxMykgfCAoaGFzaCA+Pj4gKDMyIC0gMTMpKTtcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoICogNSArIDB4RTY1NDZCNjQ7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSBoYXNoO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuSGFzaC5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNoID0gdGhpcy5oYXNoIF4gKHRoaXMuY291bnQgKiA0KTtcbiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+PiAxNik7XG4gICAgaGFzaCA9IGhhc2ggKiAweDg1RUJDQTZCO1xuICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4+IDEzKTtcbiAgICBoYXNoID0gaGFzaCAqIDB4QzJCMkFFMzU7XG4gICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+Pj4gMTYpO1xuICAgIHJldHVybiBoYXNoO1xufTtcblxuZnVuY3Rpb24gaGFzaFN0dWZmKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICBoYXNoLnVwZGF0ZS5hcHBseShoYXNoLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpO1xufVxuXG5Eb3VibGVEaWN0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBkID0gdGhpcy5jYWNoZU1hcC5nZXQoYSkgfHwgbnVsbDtcbiAgICByZXR1cm4gZCA9PT0gbnVsbCA/IG51bGwgOiAoZC5nZXQoYikgfHwgbnVsbCk7XG59O1xuXG5Eb3VibGVEaWN0LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgbykge1xuICAgIHZhciBkID0gdGhpcy5jYWNoZU1hcC5nZXQoYSkgfHwgbnVsbDtcbiAgICBpZiAoZCA9PT0gbnVsbCkge1xuICAgICAgICBkID0gbmV3IHRoaXMuZGVmYXVsdE1hcEN0b3IoKTtcbiAgICAgICAgdGhpcy5jYWNoZU1hcC5wdXQoYSwgZCk7XG4gICAgfVxuICAgIGQucHV0KGIsIG8pO1xufTtcblxuXG5mdW5jdGlvbiBlc2NhcGVXaGl0ZXNwYWNlKHMsIGVzY2FwZVNwYWNlcykge1xuICAgIHMgPSBzLnJlcGxhY2UoL1xcdC9nLCBcIlxcXFx0XCIpXG4gICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgIC5yZXBsYWNlKC9cXHIvZywgXCJcXFxcclwiKTtcbiAgICBpZiAoZXNjYXBlU3BhY2VzKSB7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoLyAvZywgXCJcXHUwMEI3XCIpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gdGl0bGVDYXNlKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFx3XFxTKi9nLCBmdW5jdGlvbiAodHh0KSB7XG4gICAgICAgIHJldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpO1xuICAgIH0pO1xufTtcblxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYSwgYilcbntcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYSkgfHwgIUFycmF5LmlzQXJyYXkoYikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYSA9PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFbaV0gPT0gYltpXSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWFbaV0uZXF1YWxzKGJbaV0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydHMuSGFzaCA9IEhhc2g7XG5leHBvcnRzLlNldCA9IFNldDtcbmV4cG9ydHMuTWFwID0gTWFwO1xuZXhwb3J0cy5CaXRTZXQgPSBCaXRTZXQ7XG5leHBvcnRzLkFsdERpY3QgPSBBbHREaWN0O1xuZXhwb3J0cy5Eb3VibGVEaWN0ID0gRG91YmxlRGljdDtcbmV4cG9ydHMuaGFzaFN0dWZmID0gaGFzaFN0dWZmO1xuZXhwb3J0cy5lc2NhcGVXaGl0ZXNwYWNlID0gZXNjYXBlV2hpdGVzcGFjZTtcbmV4cG9ydHMuYXJyYXlUb1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5leHBvcnRzLnRpdGxlQ2FzZSA9IHRpdGxlQ2FzZTtcbmV4cG9ydHMuZXF1YWxBcnJheXMgPSBlcXVhbEFycmF5cztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n");

/***/ }),

/***/ 270:
/***/ (function(module, exports) {

eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n// A token has properties: text, type, line, character position in the line\n// (so we can ignore tabs), token channel, index, and source from which\n// we obtained this token.\n\nfunction Token() {\n\tthis.source = null;\n\tthis.type = null; // token type of the token\n\tthis.channel = null; // The parser ignores everything not on DEFAULT_CHANNEL\n\tthis.start = null; // optional; return -1 if not implemented.\n\tthis.stop = null; // optional; return -1 if not implemented.\n\tthis.tokenIndex = null; // from 0..n-1 of the token object in the input stream\n\tthis.line = null; // line=1..n of the 1st character\n\tthis.column = null; // beginning of the line at which it occurs, 0..n-1\n\tthis._text = null; // text of the token.\n\treturn this;\n}\n\nToken.INVALID_TYPE = 0;\n\n// During lookahead operations, this \"token\" signifies we hit rule end ATN state\n// and did not follow it despite needing to.\nToken.EPSILON = -2;\n\nToken.MIN_USER_TOKEN_TYPE = 1;\n\nToken.EOF = -1;\n\n// All tokens go to the parser (unless skip() is called in that rule)\n// on a particular \"channel\". The parser tunes to a particular channel\n// so that whitespace etc... can go to the parser on a \"hidden\" channel.\n\nToken.DEFAULT_CHANNEL = 0;\n\n// Anything on different channel than DEFAULT_CHANNEL is not parsed\n// by parser.\n\nToken.HIDDEN_CHANNEL = 1;\n\n// Explicitly set the text for this token. If {code text} is not\n// {@code null}, then {@link //getText} will return this value rather than\n// extracting the text from the input.\n//\n// @param text The explicit text of the token, or {@code null} if the text\n// should be obtained from the input along with the start and stop indexes\n// of the token.\n\nObject.defineProperty(Token.prototype, \"text\", {\n\tget : function() {\n\t\treturn this._text;\n\t},\n\tset : function(text) {\n\t\tthis._text = text;\n\t}\n});\n\nToken.prototype.getTokenSource = function() {\n\treturn this.source[0];\n};\n\nToken.prototype.getInputStream = function() {\n\treturn this.source[1];\n};\n\nfunction CommonToken(source, type, channel, start, stop) {\n\tToken.call(this);\n\tthis.source = source !== undefined ? source : CommonToken.EMPTY_SOURCE;\n\tthis.type = type !== undefined ? type : null;\n\tthis.channel = channel !== undefined ? channel : Token.DEFAULT_CHANNEL;\n\tthis.start = start !== undefined ? start : -1;\n\tthis.stop = stop !== undefined ? stop : -1;\n\tthis.tokenIndex = -1;\n\tif (this.source[0] !== null) {\n\t\tthis.line = source[0].line;\n\t\tthis.column = source[0].column;\n\t} else {\n\t\tthis.column = -1;\n\t}\n\treturn this;\n}\n\nCommonToken.prototype = Object.create(Token.prototype);\nCommonToken.prototype.constructor = CommonToken;\n\n// An empty {@link Pair} which is used as the default value of\n// {@link //source} for tokens that do not have a source.\nCommonToken.EMPTY_SOURCE = [ null, null ];\n\n// Constructs a new {@link CommonToken} as a copy of another {@link Token}.\n//\n// 

\n// If {@code oldToken} is also a {@link CommonToken} instance, the newly\n// constructed token will share a reference to the {@link //text} field and\n// the {@link Pair} stored in {@link //source}. Otherwise, {@link //text} will\n// be assigned the result of calling {@link //getText}, and {@link //source}\n// will be constructed from the result of {@link Token//getTokenSource} and\n// {@link Token//getInputStream}.

\n//\n// @param oldToken The token to copy.\n//\nCommonToken.prototype.clone = function() {\n\tvar t = new CommonToken(this.source, this.type, this.channel, this.start,\n\t\t\tthis.stop);\n\tt.tokenIndex = this.tokenIndex;\n\tt.line = this.line;\n\tt.column = this.column;\n\tt.text = this.text;\n\treturn t;\n};\n\nObject.defineProperty(CommonToken.prototype, \"text\", {\n\tget : function() {\n\t\tif (this._text !== null) {\n\t\t\treturn this._text;\n\t\t}\n\t\tvar input = this.getInputStream();\n\t\tif (input === null) {\n\t\t\treturn null;\n\t\t}\n\t\tvar n = input.size;\n\t\tif (this.start < n && this.stop < n) {\n\t\t\treturn input.getText(this.start, this.stop);\n\t\t} else {\n\t\t\treturn \"\";\n\t\t}\n\t},\n\tset : function(text) {\n\t\tthis._text = text;\n\t}\n});\n\nCommonToken.prototype.toString = function() {\n\tvar txt = this.text;\n\tif (txt !== null) {\n\t\ttxt = txt.replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/\\t/g, \"\\\\t\");\n\t} else {\n\t\ttxt = \"\";\n\t}\n\treturn \"[@\" + this.tokenIndex + \",\" + this.start + \":\" + this.stop + \"='\" +\n\t\t\ttxt + \"',<\" + this.type + \">\" +\n\t\t\t(this.channel > 0 ? \",channel=\" + this.channel : \"\") + \",\" +\n\t\t\tthis.line + \":\" + this.column + \"]\";\n};\n\nexports.Token = Token;\nexports.CommonToken = CommonToken;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L1Rva2VuLmpzPzc3MTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixxQkFBcUI7QUFDckIsbUJBQW1CLGFBQWE7QUFDaEMsa0JBQWtCLGFBQWE7QUFDL0Isd0JBQXdCO0FBQ3hCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLCtDQUErQyxVQUFVO0FBQ3pELElBQUksV0FBVyxRQUFRLGdCQUFnQjtBQUN2QztBQUNBO0FBQ0EsbURBQW1ELFdBQVc7QUFDOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLFdBQVc7QUFDeEIsSUFBSSxlQUFlO0FBQ25COztBQUVBLHFCQUFxQixrQkFBa0IsdUJBQXVCLFlBQVk7QUFDMUU7QUFDQTtBQUNBLE9BQU8sZUFBZSxZQUFZLGtCQUFrQjtBQUNwRCxvREFBb0QsYUFBYTtBQUNqRSxRQUFRLFdBQVcsWUFBWSxlQUFlLGNBQWMsYUFBYTtBQUN6RSxzQ0FBc0MsZ0JBQWdCLE9BQU87QUFDN0QsMkNBQTJDLDRCQUE0QjtBQUN2RSxJQUFJLDRCQUE0QjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vIEEgdG9rZW4gaGFzIHByb3BlcnRpZXM6IHRleHQsIHR5cGUsIGxpbmUsIGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgbGluZVxuLy8gKHNvIHdlIGNhbiBpZ25vcmUgdGFicyksIHRva2VuIGNoYW5uZWwsIGluZGV4LCBhbmQgc291cmNlIGZyb20gd2hpY2hcbi8vIHdlIG9idGFpbmVkIHRoaXMgdG9rZW4uXG5cbmZ1bmN0aW9uIFRva2VuKCkge1xuXHR0aGlzLnNvdXJjZSA9IG51bGw7XG5cdHRoaXMudHlwZSA9IG51bGw7IC8vIHRva2VuIHR5cGUgb2YgdGhlIHRva2VuXG5cdHRoaXMuY2hhbm5lbCA9IG51bGw7IC8vIFRoZSBwYXJzZXIgaWdub3JlcyBldmVyeXRoaW5nIG5vdCBvbiBERUZBVUxUX0NIQU5ORUxcblx0dGhpcy5zdGFydCA9IG51bGw7IC8vIG9wdGlvbmFsOyByZXR1cm4gLTEgaWYgbm90IGltcGxlbWVudGVkLlxuXHR0aGlzLnN0b3AgPSBudWxsOyAvLyBvcHRpb25hbDsgcmV0dXJuIC0xIGlmIG5vdCBpbXBsZW1lbnRlZC5cblx0dGhpcy50b2tlbkluZGV4ID0gbnVsbDsgLy8gZnJvbSAwLi5uLTEgb2YgdGhlIHRva2VuIG9iamVjdCBpbiB0aGUgaW5wdXQgc3RyZWFtXG5cdHRoaXMubGluZSA9IG51bGw7IC8vIGxpbmU9MS4ubiBvZiB0aGUgMXN0IGNoYXJhY3RlclxuXHR0aGlzLmNvbHVtbiA9IG51bGw7IC8vIGJlZ2lubmluZyBvZiB0aGUgbGluZSBhdCB3aGljaCBpdCBvY2N1cnMsIDAuLm4tMVxuXHR0aGlzLl90ZXh0ID0gbnVsbDsgLy8gdGV4dCBvZiB0aGUgdG9rZW4uXG5cdHJldHVybiB0aGlzO1xufVxuXG5Ub2tlbi5JTlZBTElEX1RZUEUgPSAwO1xuXG4vLyBEdXJpbmcgbG9va2FoZWFkIG9wZXJhdGlvbnMsIHRoaXMgXCJ0b2tlblwiIHNpZ25pZmllcyB3ZSBoaXQgcnVsZSBlbmQgQVROIHN0YXRlXG4vLyBhbmQgZGlkIG5vdCBmb2xsb3cgaXQgZGVzcGl0ZSBuZWVkaW5nIHRvLlxuVG9rZW4uRVBTSUxPTiA9IC0yO1xuXG5Ub2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFID0gMTtcblxuVG9rZW4uRU9GID0gLTE7XG5cbi8vIEFsbCB0b2tlbnMgZ28gdG8gdGhlIHBhcnNlciAodW5sZXNzIHNraXAoKSBpcyBjYWxsZWQgaW4gdGhhdCBydWxlKVxuLy8gb24gYSBwYXJ0aWN1bGFyIFwiY2hhbm5lbFwiLiBUaGUgcGFyc2VyIHR1bmVzIHRvIGEgcGFydGljdWxhciBjaGFubmVsXG4vLyBzbyB0aGF0IHdoaXRlc3BhY2UgZXRjLi4uIGNhbiBnbyB0byB0aGUgcGFyc2VyIG9uIGEgXCJoaWRkZW5cIiBjaGFubmVsLlxuXG5Ub2tlbi5ERUZBVUxUX0NIQU5ORUwgPSAwO1xuXG4vLyBBbnl0aGluZyBvbiBkaWZmZXJlbnQgY2hhbm5lbCB0aGFuIERFRkFVTFRfQ0hBTk5FTCBpcyBub3QgcGFyc2VkXG4vLyBieSBwYXJzZXIuXG5cblRva2VuLkhJRERFTl9DSEFOTkVMID0gMTtcblxuLy8gRXhwbGljaXRseSBzZXQgdGhlIHRleHQgZm9yIHRoaXMgdG9rZW4uIElmIHtjb2RlIHRleHR9IGlzIG5vdFxuLy8ge0Bjb2RlIG51bGx9LCB0aGVuIHtAbGluayAvL2dldFRleHR9IHdpbGwgcmV0dXJuIHRoaXMgdmFsdWUgcmF0aGVyIHRoYW5cbi8vIGV4dHJhY3RpbmcgdGhlIHRleHQgZnJvbSB0aGUgaW5wdXQuXG4vL1xuLy8gQHBhcmFtIHRleHQgVGhlIGV4cGxpY2l0IHRleHQgb2YgdGhlIHRva2VuLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRleHRcbi8vIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBpbnB1dCBhbG9uZyB3aXRoIHRoZSBzdGFydCBhbmQgc3RvcCBpbmRleGVzXG4vLyBvZiB0aGUgdG9rZW4uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb2tlbi5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0dGhpcy5fdGV4dCA9IHRleHQ7XG5cdH1cbn0pO1xuXG5Ub2tlbi5wcm90b3R5cGUuZ2V0VG9rZW5Tb3VyY2UgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc291cmNlWzBdO1xufTtcblxuVG9rZW4ucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnNvdXJjZVsxXTtcbn07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApIHtcblx0VG9rZW4uY2FsbCh0aGlzKTtcblx0dGhpcy5zb3VyY2UgPSBzb3VyY2UgIT09IHVuZGVmaW5lZCA/IHNvdXJjZSA6IENvbW1vblRva2VuLkVNUFRZX1NPVVJDRTtcblx0dGhpcy50eXBlID0gdHlwZSAhPT0gdW5kZWZpbmVkID8gdHlwZSA6IG51bGw7XG5cdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWwgIT09IHVuZGVmaW5lZCA/IGNoYW5uZWwgOiBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cdHRoaXMuc3RhcnQgPSBzdGFydCAhPT0gdW5kZWZpbmVkID8gc3RhcnQgOiAtMTtcblx0dGhpcy5zdG9wID0gc3RvcCAhPT0gdW5kZWZpbmVkID8gc3RvcCA6IC0xO1xuXHR0aGlzLnRva2VuSW5kZXggPSAtMTtcblx0aWYgKHRoaXMuc291cmNlWzBdICE9PSBudWxsKSB7XG5cdFx0dGhpcy5saW5lID0gc291cmNlWzBdLmxpbmU7XG5cdFx0dGhpcy5jb2x1bW4gPSBzb3VyY2VbMF0uY29sdW1uO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY29sdW1uID0gLTE7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVG9rZW4ucHJvdG90eXBlKTtcbkNvbW1vblRva2VuLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuO1xuXG4vLyBBbiBlbXB0eSB7QGxpbmsgUGFpcn0gd2hpY2ggaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZlxuLy8ge0BsaW5rIC8vc291cmNlfSBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgYSBzb3VyY2UuXG5Db21tb25Ub2tlbi5FTVBUWV9TT1VSQ0UgPSBbIG51bGwsIG51bGwgXTtcblxuLy8gQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgQ29tbW9uVG9rZW59IGFzIGEgY29weSBvZiBhbm90aGVyIHtAbGluayBUb2tlbn0uXG4vL1xuLy8gPHA+XG4vLyBJZiB7QGNvZGUgb2xkVG9rZW59IGlzIGFsc28gYSB7QGxpbmsgQ29tbW9uVG9rZW59IGluc3RhbmNlLCB0aGUgbmV3bHlcbi8vIGNvbnN0cnVjdGVkIHRva2VuIHdpbGwgc2hhcmUgYSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayAvL3RleHR9IGZpZWxkIGFuZFxuLy8gdGhlIHtAbGluayBQYWlyfSBzdG9yZWQgaW4ge0BsaW5rIC8vc291cmNlfS4gT3RoZXJ3aXNlLCB7QGxpbmsgLy90ZXh0fSB3aWxsXG4vLyBiZSBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vZ2V0VGV4dH0sIGFuZCB7QGxpbmsgLy9zb3VyY2V9XG4vLyB3aWxsIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJlc3VsdCBvZiB7QGxpbmsgVG9rZW4vL2dldFRva2VuU291cmNlfSBhbmRcbi8vIHtAbGluayBUb2tlbi8vZ2V0SW5wdXRTdHJlYW19LjwvcD5cbi8vXG4vLyBAcGFyYW0gb2xkVG9rZW4gVGhlIHRva2VuIHRvIGNvcHkuXG4vL1xuQ29tbW9uVG9rZW4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gbmV3IENvbW1vblRva2VuKHRoaXMuc291cmNlLCB0aGlzLnR5cGUsIHRoaXMuY2hhbm5lbCwgdGhpcy5zdGFydCxcblx0XHRcdHRoaXMuc3RvcCk7XG5cdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5JbmRleDtcblx0dC5saW5lID0gdGhpcy5saW5lO1xuXHR0LmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR0LnRleHQgPSB0aGlzLnRleHQ7XG5cdHJldHVybiB0O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1vblRva2VuLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH1cblx0XHR2YXIgaW5wdXQgPSB0aGlzLmdldElucHV0U3RyZWFtKCk7XG5cdFx0aWYgKGlucHV0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dmFyIG4gPSBpbnB1dC5zaXplO1xuXHRcdGlmICh0aGlzLnN0YXJ0IDwgbiAmJiB0aGlzLnN0b3AgPCBuKSB7XG5cdFx0XHRyZXR1cm4gaW5wdXQuZ2V0VGV4dCh0aGlzLnN0YXJ0LCB0aGlzLnN0b3ApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCI8RU9GPlwiO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcblxuQ29tbW9uVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0eHQgPSB0aGlzLnRleHQ7XG5cdGlmICh0eHQgIT09IG51bGwpIHtcblx0XHR0eHQgPSB0eHQucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIikucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIik7XG5cdH0gZWxzZSB7XG5cdFx0dHh0ID0gXCI8bm8gdGV4dD5cIjtcblx0fVxuXHRyZXR1cm4gXCJbQFwiICsgdGhpcy50b2tlbkluZGV4ICsgXCIsXCIgKyB0aGlzLnN0YXJ0ICsgXCI6XCIgKyB0aGlzLnN0b3AgKyBcIj0nXCIgK1xuXHRcdFx0dHh0ICsgXCInLDxcIiArIHRoaXMudHlwZSArIFwiPlwiICtcblx0XHRcdCh0aGlzLmNoYW5uZWwgPiAwID8gXCIsY2hhbm5lbD1cIiArIHRoaXMuY2hhbm5lbCA6IFwiXCIpICsgXCIsXCIgK1xuXHRcdFx0dGhpcy5saW5lICsgXCI6XCIgKyB0aGlzLmNvbHVtbiArIFwiXVwiO1xufTtcblxuZXhwb3J0cy5Ub2tlbiA9IFRva2VuO1xuZXhwb3J0cy5Db21tb25Ub2tlbiA9IENvbW1vblRva2VuO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///270\n"); /***/ }), /***/ 273: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./components/WorkspaceSelector.vue?vue&type=template&id=da62f962&\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[(_vm.mode==='adding')?_c('v-text-field',{ref:\"new_workspace_input\",attrs:{\"dense\":\"\",\"full-width\":\"\",\"label\":\"Name of new workspace\",\"hint\":\"workspace name\"},on:{\"blur\":function($event){return _vm.commitWorkspace(_vm.new_workspace)},\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.commitWorkspace(_vm.new_workspace)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancelWorkspace()}]},model:{value:(_vm.new_workspace),callback:function ($$v) {_vm.new_workspace=$$v},expression:\"new_workspace\"}}):_vm._e(),_vm._v(\" \"),(_vm.mode==='showing')?_c('v-select',{attrs:{\"dense\":\"\",\"outlined\":\"\",\"full-width\":\"\",\"hide-details\":\"true\",\"hint\":\"current workspace\",\"items\":_vm.workspaces,\"item-text\":\"name\",\"item-value\":\"name\",\"prepend-inner-icon\":\"mdi-folder\",\"title\":\"active workspace\"},scopedSlots:_vm._u([{key:\"append-item\",fn:function(){return [_c('v-list-item',[_c('v-btn',{attrs:{\"link\":\"\"},on:{\"click\":function($event){return _vm.addWorkspace()}}},[_vm._v(\"+ Add Workspace\")]),_vm._v(\" \"),_c('v-spacer'),_vm._v(\" \"),_c('v-btn',{attrs:{\"to\":\"/ui/workspaces\"}},[_vm._v(\"Manage\")])],1)]},proxy:true}],null,false,784791648),model:{value:(_vm.workspace),callback:function ($$v) {_vm.workspace=$$v},expression:\"workspace\"}}):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./components/WorkspaceSelector.vue?vue&type=template&id=da62f962&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib??vue-loader-options!./components/WorkspaceSelector.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ var WorkspaceSelectorvue_type_script_lang_js_ = ({\n name: 'workspace-selector',\n data: function data() {\n var mode = \"showing\";\n var new_workspace = \"\";\n return {\n mode: mode,\n new_workspace: new_workspace\n };\n },\n computed: {\n workspace: {\n get: function get() {\n return this.$store.getters[\"workspaces/getWorkspace\"];\n },\n set: function set(val) {\n this.$store.dispatch(\"workspaces/setWorkspace\", val);\n }\n },\n workspaces: {\n get: function get() {\n return this.$store.getters[\"workspaces/getWorkspaces\"];\n },\n set: function set(val) {\n this.$store.dispatch(\"workspaces/setWorkspaces\", val);\n }\n }\n },\n methods: {\n cancelWorkspace: function cancelWorkspace() {\n this.mode = \"showing\";\n this.new_workspace = \"\";\n },\n addWorkspace: function addWorkspace() {\n var _this = this;\n\n this.mode = \"adding\"; // this.$refs.new_workspace_input.focus();\n\n this.$nextTick(function () {\n _this.$refs.new_workspace_input.focus();\n });\n },\n commitWorkspace: function commitWorkspace(_ref) {\n var $store = _ref.$store;\n // console.log(\"commit:\" + JSON.stringify(this.new_workspace));\n this.$store.dispatch(\"workspaces/activateWorkspace\", this.new_workspace);\n this.new_workspace = \"\";\n this.mode = \"showing\";\n }\n },\n created: function created() {\n // console.log(\"created component...\");\n this.$store.dispatch('workspaces/initWorkspaces', \"selector load\");\n }\n});\n// CONCATENATED MODULE: ./components/WorkspaceSelector.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_WorkspaceSelectorvue_type_script_lang_js_ = (WorkspaceSelectorvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(56);\n\n// EXTERNAL MODULE: ./node_modules/vuetify-loader/lib/runtime/installComponents.js\nvar installComponents = __webpack_require__(121);\nvar installComponents_default = /*#__PURE__*/__webpack_require__.n(installComponents);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VBtn/VBtn.js\nvar VBtn = __webpack_require__(407);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VGrid/VCol.js\nvar VCol = __webpack_require__(582);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VList/VListItem.js\nvar VListItem = __webpack_require__(333);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VGrid/VRow.js\nvar VRow = __webpack_require__(583);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VSelect/VSelect.js + 16 modules\nvar VSelect = __webpack_require__(588);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VGrid/VSpacer.js\nvar VSpacer = __webpack_require__(584);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VTextField/VTextField.js + 3 modules\nvar VTextField = __webpack_require__(402);\n\n// CONCATENATED MODULE: ./components/WorkspaceSelector.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n components_WorkspaceSelectorvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var WorkspaceSelector = __webpack_exports__[\"a\"] = (component.exports);\n\n/* vuetify-loader */\n\n\n\n\n\n\n\n\ninstallComponents_default()(component, {VBtn: VBtn[\"a\" /* default */],VCol: VCol[\"a\" /* default */],VListItem: VListItem[\"a\" /* default */],VRow: VRow[\"a\" /* default */],VSelect: VSelect[\"a\" /* default */],VSpacer: VSpacer[\"a\" /* default */],VTextField: VTextField[\"a\" /* default */]})\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL1dvcmtzcGFjZVNlbGVjdG9yLnZ1ZT84MTkzIiwid2VicGFjazovLy9jb21wb25lbnRzL1dvcmtzcGFjZVNlbGVjdG9yLnZ1ZT8yOTU3Iiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvV29ya3NwYWNlU2VsZWN0b3IudnVlPzEyNTQiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9Xb3Jrc3BhY2VTZWxlY3Rvci52dWU/ZjUzZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUEwQixhQUFhLDBCQUEwQix3QkFBd0IsK0JBQStCLE9BQU8sYUFBYSwyQ0FBMkMsaUNBQWlDLG1GQUFtRixLQUFLLHdCQUF3Qiw4Q0FBOEMsNkJBQTZCLHNGQUFzRixhQUFhLEVBQUUsOENBQThDLGtCQUFrQiw2RkFBNkYsYUFBYSxFQUFFLDZCQUE2QixFQUFFLFFBQVEsbURBQW1ELHNCQUFzQiw2QkFBNkIsNkRBQTZELE9BQU8scU5BQXFOLHNCQUFzQixnQ0FBZ0Msc0NBQXNDLE9BQU8sVUFBVSxLQUFLLHlCQUF5Qiw0QkFBNEIsaUZBQWlGLE9BQU8sdUJBQXVCLDBCQUEwQixZQUFZLCtCQUErQiwrQ0FBK0Msa0JBQWtCLHlCQUF5QjtBQUMvL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN5Q0E7QUFDQSw0QkFEQTtBQUVBLE1BRkEsa0JBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQSxHQU5BO0FBT0E7QUFDQTtBQUNBLFNBREEsaUJBQ0E7QUFDQTtBQUNBLE9BSEE7QUFJQSxTQUpBLGVBSUEsR0FKQSxFQUlBO0FBQ0E7QUFDQTtBQU5BLEtBREE7QUFTQTtBQUNBLFNBREEsaUJBQ0E7QUFDQTtBQUNBLE9BSEE7QUFJQSxTQUpBLGVBSUEsR0FKQSxFQUlBO0FBQ0E7QUFDQTtBQU5BO0FBVEEsR0FQQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBSkE7QUFLQTtBQUFBOztBQUNBLDJCQURBLENBRUE7O0FBQ0E7QUFDQTtBQUNBLE9BRkE7QUFHQSxLQVhBO0FBWUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkEsR0F6QkE7QUE0Q0EsU0E1Q0EscUJBNENBO0FBQ0E7QUFDQTtBQUNBO0FBL0NBLEc7O0FDMUNxTCxDQUFnQixrSUFBRyxFQUFDLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0F6RztBQUMzQjtBQUNMOzs7QUFHaEU7QUFDdUY7QUFDdkYsZ0JBQWdCLDhDQUFVO0FBQzFCLEVBQUUsb0RBQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRWUsa0dBQWlCOztBQUVoQztBQUNnRztBQUM3QztBQUNDO0FBQ0s7QUFDTDtBQUNLO0FBQ0Y7QUFDUTtBQUMvRCwyQkFBaUIsYUFBYSw2QkFBSSxDQUFDLDZCQUFJLENBQUMsdUNBQVMsQ0FBQyw2QkFBSSxDQUFDLG1DQUFPLENBQUMsbUNBQU8sQ0FBQyx5Q0FBVSxDQUFDIiwiZmlsZSI6IjI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCd2LXJvdycsW19jKCd2LWNvbCcse2F0dHJzOntcImNvbHNcIjpcIjEyXCJ9fSxbKF92bS5tb2RlPT09J2FkZGluZycpP19jKCd2LXRleHQtZmllbGQnLHtyZWY6XCJuZXdfd29ya3NwYWNlX2lucHV0XCIsYXR0cnM6e1wiZGVuc2VcIjpcIlwiLFwiZnVsbC13aWR0aFwiOlwiXCIsXCJsYWJlbFwiOlwiTmFtZSBvZiBuZXcgd29ya3NwYWNlXCIsXCJoaW50XCI6XCJ3b3Jrc3BhY2UgbmFtZVwifSxvbjp7XCJibHVyXCI6ZnVuY3Rpb24oJGV2ZW50KXtyZXR1cm4gX3ZtLmNvbW1pdFdvcmtzcGFjZShfdm0ubmV3X3dvcmtzcGFjZSl9LFwia2V5ZG93blwiOltmdW5jdGlvbigkZXZlbnQpe2lmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmX3ZtLl9rKCRldmVudC5rZXlDb2RlLFwiZW50ZXJcIiwxMywkZXZlbnQua2V5LFwiRW50ZXJcIikpeyByZXR1cm4gbnVsbDsgfXJldHVybiBfdm0uY29tbWl0V29ya3NwYWNlKF92bS5uZXdfd29ya3NwYWNlKX0sZnVuY3Rpb24oJGV2ZW50KXtpZighJGV2ZW50LnR5cGUuaW5kZXhPZigna2V5JykmJl92bS5faygkZXZlbnQua2V5Q29kZSxcImVzY1wiLDI3LCRldmVudC5rZXksW1wiRXNjXCIsXCJFc2NhcGVcIl0pKXsgcmV0dXJuIG51bGw7IH1yZXR1cm4gX3ZtLmNhbmNlbFdvcmtzcGFjZSgpfV19LG1vZGVsOnt2YWx1ZTooX3ZtLm5ld193b3Jrc3BhY2UpLGNhbGxiYWNrOmZ1bmN0aW9uICgkJHYpIHtfdm0ubmV3X3dvcmtzcGFjZT0kJHZ9LGV4cHJlc3Npb246XCJuZXdfd29ya3NwYWNlXCJ9fSk6X3ZtLl9lKCksX3ZtLl92KFwiIFwiKSwoX3ZtLm1vZGU9PT0nc2hvd2luZycpP19jKCd2LXNlbGVjdCcse2F0dHJzOntcImRlbnNlXCI6XCJcIixcIm91dGxpbmVkXCI6XCJcIixcImZ1bGwtd2lkdGhcIjpcIlwiLFwiaGlkZS1kZXRhaWxzXCI6XCJ0cnVlXCIsXCJoaW50XCI6XCJjdXJyZW50IHdvcmtzcGFjZVwiLFwiaXRlbXNcIjpfdm0ud29ya3NwYWNlcyxcIml0ZW0tdGV4dFwiOlwibmFtZVwiLFwiaXRlbS12YWx1ZVwiOlwibmFtZVwiLFwicHJlcGVuZC1pbm5lci1pY29uXCI6XCJtZGktZm9sZGVyXCIsXCJ0aXRsZVwiOlwiYWN0aXZlIHdvcmtzcGFjZVwifSxzY29wZWRTbG90czpfdm0uX3UoW3trZXk6XCJhcHBlbmQtaXRlbVwiLGZuOmZ1bmN0aW9uKCl7cmV0dXJuIFtfYygndi1saXN0LWl0ZW0nLFtfYygndi1idG4nLHthdHRyczp7XCJsaW5rXCI6XCJcIn0sb246e1wiY2xpY2tcIjpmdW5jdGlvbigkZXZlbnQpe3JldHVybiBfdm0uYWRkV29ya3NwYWNlKCl9fX0sW192bS5fdihcIisgQWRkIFdvcmtzcGFjZVwiKV0pLF92bS5fdihcIiBcIiksX2MoJ3Ytc3BhY2VyJyksX3ZtLl92KFwiIFwiKSxfYygndi1idG4nLHthdHRyczp7XCJ0b1wiOlwiL3VpL3dvcmtzcGFjZXNcIn19LFtfdm0uX3YoXCJNYW5hZ2VcIildKV0sMSldfSxwcm94eTp0cnVlfV0sbnVsbCxmYWxzZSw3ODQ3OTE2NDgpLG1vZGVsOnt2YWx1ZTooX3ZtLndvcmtzcGFjZSksY2FsbGJhY2s6ZnVuY3Rpb24gKCQkdikge192bS53b3Jrc3BhY2U9JCR2fSxleHByZXNzaW9uOlwid29ya3NwYWNlXCJ9fSk6X3ZtLl9lKCldLDEpXSwxKX1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxuPCEtLSAgPHYtY29udGFpbmVyIGZsdWlkIGNsYXNzPVwiZC1mbGV4IHBhLTNcIj4tLT5cbiAgICA8di1yb3c+XG4gICAgICA8di1jb2wgY29scz1cIjEyXCI+XG4gICAgICAgIDx2LXRleHQtZmllbGQgZGVuc2VcbiAgICAgICAgICAgICAgICAgICAgICBmdWxsLXdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJOYW1lIG9mIG5ldyB3b3Jrc3BhY2VcIlxuICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJtb2RlPT09J2FkZGluZydcIlxuICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJuZXdfd29ya3NwYWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICByZWY9XCJuZXdfd29ya3NwYWNlX2lucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICBoaW50PVwid29ya3NwYWNlIG5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIEBibHVyPVwiY29tbWl0V29ya3NwYWNlKG5ld193b3Jrc3BhY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICBAa2V5ZG93bi5lbnRlcj1cImNvbW1pdFdvcmtzcGFjZShuZXdfd29ya3NwYWNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgQGtleWRvd24uZXNjPVwiY2FuY2VsV29ya3NwYWNlKClcIlxuICAgICAgICA+PC92LXRleHQtZmllbGQ+XG4gICAgICAgIDwhLS0gICAgbGFiZWw9XCJ3b3Jrc3BhY2VcIi0tPlxuICAgICAgICA8di1zZWxlY3QgZGVuc2Ugb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIGZ1bGwtd2lkdGhcbiAgICAgICAgICAgICAgICAgIGhpZGUtZGV0YWlscz1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgaGludD1cImN1cnJlbnQgd29ya3NwYWNlXCJcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJtb2RlPT09J3Nob3dpbmcnXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ3b3Jrc3BhY2VcIlxuICAgICAgICAgICAgICAgICAgOml0ZW1zPVwid29ya3NwYWNlc1wiXG4gICAgICAgICAgICAgICAgICBpdGVtLXRleHQ9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGl0ZW0tdmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIHByZXBlbmQtaW5uZXItaWNvbj1cIm1kaS1mb2xkZXJcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJhY3RpdmUgd29ya3NwYWNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6YXBwZW5kLWl0ZW0+XG4gICAgICAgICAgICA8di1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgIDx2LWJ0biBsaW5rIEBjbGljaz1cImFkZFdvcmtzcGFjZSgpXCI+KyBBZGQgV29ya3NwYWNlPC92LWJ0bj5cbiAgICAgICAgICAgICAgPHYtc3BhY2VyPjwvdi1zcGFjZXI+XG4gICAgICAgICAgICAgIDx2LWJ0biB0bz1cIi91aS93b3Jrc3BhY2VzXCI+TWFuYWdlPC92LWJ0bj5cbiAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC92LXNlbGVjdD5cbiAgICAgIDwvdi1jb2w+XG4gICAgPC92LXJvdz5cbjwhLS0gIDwvdi1jb250YWluZXI+LS0+XG48L3RlbXBsYXRlPlxuPHNjcmlwdD5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnd29ya3NwYWNlLXNlbGVjdG9yJyxcbiAgZGF0YSgpIHtcbiAgICBsZXQgbW9kZSA9IFwic2hvd2luZ1wiO1xuICAgIGxldCBuZXdfd29ya3NwYWNlID0gXCJcIjtcbiAgICByZXR1cm4ge21vZGUsIG5ld193b3Jrc3BhY2V9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgd29ya3NwYWNlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzW1wid29ya3NwYWNlcy9nZXRXb3Jrc3BhY2VcIl1cbiAgICAgIH0sXG4gICAgICBzZXQodmFsKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKFwid29ya3NwYWNlcy9zZXRXb3Jrc3BhY2VcIiwgdmFsKVxuICAgICAgfVxuICAgIH0sXG4gICAgd29ya3NwYWNlczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVyc1tcIndvcmtzcGFjZXMvZ2V0V29ya3NwYWNlc1wiXVxuICAgICAgfSxcbiAgICAgIHNldCh2YWwpIHtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goXCJ3b3Jrc3BhY2VzL3NldFdvcmtzcGFjZXNcIiwgdmFsKVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGNhbmNlbFdvcmtzcGFjZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5tb2RlID0gXCJzaG93aW5nXCI7XG4gICAgICB0aGlzLm5ld193b3Jrc3BhY2UgPSBcIlwiO1xuICAgIH0sXG4gICAgYWRkV29ya3NwYWNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLm1vZGUgPSBcImFkZGluZ1wiO1xuICAgICAgLy8gdGhpcy4kcmVmcy5uZXdfd29ya3NwYWNlX2lucHV0LmZvY3VzKCk7XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuJHJlZnMubmV3X3dvcmtzcGFjZV9pbnB1dC5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjb21taXRXb3Jrc3BhY2U6IGZ1bmN0aW9uICh7JHN0b3JlfSkge1xuICAgICAgLy8gY29uc29sZS5sb2coXCJjb21taXQ6XCIgKyBKU09OLnN0cmluZ2lmeSh0aGlzLm5ld193b3Jrc3BhY2UpKTtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKFwid29ya3NwYWNlcy9hY3RpdmF0ZVdvcmtzcGFjZVwiLCB0aGlzLm5ld193b3Jrc3BhY2UpO1xuICAgICAgdGhpcy5uZXdfd29ya3NwYWNlID0gXCJcIjtcbiAgICAgIHRoaXMubW9kZSA9IFwic2hvd2luZ1wiO1xuICAgIH1cbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImNyZWF0ZWQgY29tcG9uZW50Li4uXCIpO1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd3b3Jrc3BhY2VzL2luaXRXb3Jrc3BhY2VzJywgXCJzZWxlY3RvciBsb2FkXCIpO1xuICB9XG59XG48L3NjcmlwdD5cbjxzdHlsZT5cbjwvc3R5bGU+XG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTItMCEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1dvcmtzcGFjZVNlbGVjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0yLTAhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Xb3Jrc3BhY2VTZWxlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL1dvcmtzcGFjZVNlbGVjdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kYTYyZjk2MiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Xb3Jrc3BhY2VTZWxlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL1dvcmtzcGFjZVNlbGVjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzXG5cbi8qIHZ1ZXRpZnktbG9hZGVyICovXG5pbXBvcnQgaW5zdGFsbENvbXBvbmVudHMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL3J1bnRpbWUvaW5zdGFsbENvbXBvbmVudHMuanNcIlxuaW1wb3J0IHsgVkJ0biB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVkJ0bic7XG5pbXBvcnQgeyBWQ29sIH0gZnJvbSAndnVldGlmeS9saWIvY29tcG9uZW50cy9WR3JpZCc7XG5pbXBvcnQgeyBWTGlzdEl0ZW0gfSBmcm9tICd2dWV0aWZ5L2xpYi9jb21wb25lbnRzL1ZMaXN0JztcbmltcG9ydCB7IFZSb3cgfSBmcm9tICd2dWV0aWZ5L2xpYi9jb21wb25lbnRzL1ZHcmlkJztcbmltcG9ydCB7IFZTZWxlY3QgfSBmcm9tICd2dWV0aWZ5L2xpYi9jb21wb25lbnRzL1ZTZWxlY3QnO1xuaW1wb3J0IHsgVlNwYWNlciB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVkdyaWQnO1xuaW1wb3J0IHsgVlRleHRGaWVsZCB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVlRleHRGaWVsZCc7XG5pbnN0YWxsQ29tcG9uZW50cyhjb21wb25lbnQsIHtWQnRuLFZDb2wsVkxpc3RJdGVtLFZSb3csVlNlbGVjdCxWU3BhY2VyLFZUZXh0RmllbGR9KVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///273\n"); /***/ }), /***/ 274: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./components/AppSelector.vue?vue&type=template&id=e4e23d40&\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex align-center ma-2 pa-1 text-center\"},[_c('v-btn',{attrs:{\"to\":\"/ui/build/\",\"title\":\"Build a workload from a schema\"}},[_vm._v(\"Build\")]),_vm._v(\" \"),_c('v-btn',{attrs:{\"to\":\"/ui/run/\",\"title\":\"Run a workload\"}},[_vm._v(\"Run\")]),_vm._v(\" \"),_c('v-btn',{attrs:{\"to\":\"/ui/watch/\",\"title\":\"Watch workload status\"}},[_vm._v(\"Watch\")]),_vm._v(\" \"),_c('v-btn',{attrs:{\"to\":\"/docs/\",\"title\":\"Documentation\"}},[_vm._v(\"Docs\")]),_vm._v(\" \"),_c('v-btn',{attrs:{\"title\":\"Give us your feedback!\",\"href\":\"https://github.com/nosqlbench/nosqlbench/wiki/Submitting-Feedback\"}},[_c('v-icon',[_vm._v(\"mdi-lightbulb-on-outline\")])],1)],1)}\nvar staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./components/AppSelector.vue?vue&type=template&id=e4e23d40&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib??vue-loader-options!./components/AppSelector.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ var AppSelectorvue_type_script_lang_js_ = ({\n name: 'app-selector',\n data: function data() {\n var data = {\n empty: [],\n apps: ['build', 'run', 'status', 'workspaces'],\n thisapp: 'build'\n };\n return data;\n }\n});\n// CONCATENATED MODULE: ./components/AppSelector.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_AppSelectorvue_type_script_lang_js_ = (AppSelectorvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(56);\n\n// EXTERNAL MODULE: ./node_modules/vuetify-loader/lib/runtime/installComponents.js\nvar installComponents = __webpack_require__(121);\nvar installComponents_default = /*#__PURE__*/__webpack_require__.n(installComponents);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VBtn/VBtn.js\nvar VBtn = __webpack_require__(407);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VIcon/VIcon.js\nvar VIcon = __webpack_require__(354);\n\n// CONCATENATED MODULE: ./components/AppSelector.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n components_AppSelectorvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* harmony default export */ var AppSelector = __webpack_exports__[\"a\"] = (component.exports);\n\n/* vuetify-loader */\n\n\n\ninstallComponents_default()(component, {VBtn: VBtn[\"a\" /* default */],VIcon: VIcon[\"a\" /* default */]})\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL0FwcFNlbGVjdG9yLnZ1ZT8wNjY4Iiwid2VicGFjazovLy9jb21wb25lbnRzL0FwcFNlbGVjdG9yLnZ1ZT9hMzQ0Iiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvQXBwU2VsZWN0b3IudnVlP2Y5ZmIiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9BcHBTZWxlY3Rvci52dWU/YWM4OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUEwQixhQUFhLDBCQUEwQix3QkFBd0IsaUJBQWlCLHdEQUF3RCxjQUFjLE9BQU8sNERBQTRELDRDQUE0QyxPQUFPLDBDQUEwQywwQ0FBMEMsT0FBTyxtREFBbUQsNENBQTRDLE9BQU8sdUNBQXVDLDJDQUEyQyxPQUFPLDZHQUE2RztBQUM3cUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNnQkE7QUFDQSxzQkFEQTtBQUVBLE1BRkEsa0JBRUE7QUFDQTtBQUNBLGVBREE7QUFFQSxvREFGQTtBQUdBO0FBSEE7QUFLQTtBQUNBO0FBVEEsRzs7QUNqQitLLENBQWdCLHNIQUFHLEVBQUMsQzs7Ozs7Ozs7Ozs7Ozs7O0FDQXpHO0FBQzNCO0FBQ0w7OztBQUcxRDtBQUN1RjtBQUN2RixnQkFBZ0IsOENBQVU7QUFDMUIsRUFBRSw4Q0FBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFZSw0RkFBaUI7O0FBRWhDO0FBQ2dHO0FBQzdDO0FBQ0U7QUFDckQsMkJBQWlCLGFBQWEsNkJBQUksQ0FBQywrQkFBSyxDQUFDIiwiZmlsZSI6IjI3NC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7cmV0dXJuIF9jKCdkaXYnLHtzdGF0aWNDbGFzczpcImQtZmxleCBhbGlnbi1jZW50ZXIgbWEtMiBwYS0xIHRleHQtY2VudGVyXCJ9LFtfYygndi1idG4nLHthdHRyczp7XCJ0b1wiOlwiL3VpL2J1aWxkL1wiLFwidGl0bGVcIjpcIkJ1aWxkIGEgd29ya2xvYWQgZnJvbSBhIHNjaGVtYVwifX0sW192bS5fdihcIkJ1aWxkXCIpXSksX3ZtLl92KFwiIFwiKSxfYygndi1idG4nLHthdHRyczp7XCJ0b1wiOlwiL3VpL3J1bi9cIixcInRpdGxlXCI6XCJSdW4gYSB3b3JrbG9hZFwifX0sW192bS5fdihcIlJ1blwiKV0pLF92bS5fdihcIiBcIiksX2MoJ3YtYnRuJyx7YXR0cnM6e1widG9cIjpcIi91aS93YXRjaC9cIixcInRpdGxlXCI6XCJXYXRjaCB3b3JrbG9hZCBzdGF0dXNcIn19LFtfdm0uX3YoXCJXYXRjaFwiKV0pLF92bS5fdihcIiBcIiksX2MoJ3YtYnRuJyx7YXR0cnM6e1widG9cIjpcIi9kb2NzL1wiLFwidGl0bGVcIjpcIkRvY3VtZW50YXRpb25cIn19LFtfdm0uX3YoXCJEb2NzXCIpXSksX3ZtLl92KFwiIFwiKSxfYygndi1idG4nLHthdHRyczp7XCJ0aXRsZVwiOlwiR2l2ZSB1cyB5b3VyIGZlZWRiYWNrIVwiLFwiaHJlZlwiOlwiaHR0cHM6Ly9naXRodWIuY29tL25vc3FsYmVuY2gvbm9zcWxiZW5jaC93aWtpL1N1Ym1pdHRpbmctRmVlZGJhY2tcIn19LFtfYygndi1pY29uJyxbX3ZtLl92KFwibWRpLWxpZ2h0YnVsYi1vbi1vdXRsaW5lXCIpXSldLDEpXSwxKX1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWNlbnRlciBtYS0yIHBhLTEgdGV4dC1jZW50ZXJcIj5cblxuICAgIDx2LWJ0biB0bz1cIi91aS9idWlsZC9cIiB0aXRsZT1cIkJ1aWxkIGEgd29ya2xvYWQgZnJvbSBhIHNjaGVtYVwiPkJ1aWxkPC92LWJ0bj5cbiAgICA8di1idG4gdG89XCIvdWkvcnVuL1wiIHRpdGxlPVwiUnVuIGEgd29ya2xvYWRcIj5SdW48L3YtYnRuPlxuICAgIDx2LWJ0biB0bz1cIi91aS93YXRjaC9cIiB0aXRsZT1cIldhdGNoIHdvcmtsb2FkIHN0YXR1c1wiPldhdGNoPC92LWJ0bj5cbiAgICA8di1idG4gdG89XCIvZG9jcy9cIiB0aXRsZT1cIkRvY3VtZW50YXRpb25cIj5Eb2NzPC92LWJ0bj5cbiAgICA8di1idG5cbiAgICAgICAgdGl0bGU9XCJHaXZlIHVzIHlvdXIgZmVlZGJhY2shXCJcbiAgICAgICAgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9ub3NxbGJlbmNoL25vc3FsYmVuY2gvd2lraS9TdWJtaXR0aW5nLUZlZWRiYWNrXCI+XG4gICAgICA8di1pY29uPm1kaS1saWdodGJ1bGItb24tb3V0bGluZTwvdi1pY29uPlxuICAgIDwvdi1idG4+XG5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwLXNlbGVjdG9yJyxcbiAgZGF0YSgpIHtcbiAgICBsZXQgZGF0YSA9IHtcbiAgICAgIGVtcHR5OiBbXSxcbiAgICAgIGFwcHM6IFsnYnVpbGQnLCAncnVuJywgJ3N0YXR1cycsICd3b3Jrc3BhY2VzJ10sXG4gICAgICB0aGlzYXBwOiAnYnVpbGQnXG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbjwvc3R5bGU+XG4iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTItMCEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcFNlbGVjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0yLTAhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BcHBTZWxlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0FwcFNlbGVjdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lNGUyM2Q0MCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BcHBTZWxlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FwcFNlbGVjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzXG5cbi8qIHZ1ZXRpZnktbG9hZGVyICovXG5pbXBvcnQgaW5zdGFsbENvbXBvbmVudHMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvdnVldGlmeS1sb2FkZXIvbGliL3J1bnRpbWUvaW5zdGFsbENvbXBvbmVudHMuanNcIlxuaW1wb3J0IHsgVkJ0biB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVkJ0bic7XG5pbXBvcnQgeyBWSWNvbiB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVkljb24nO1xuaW5zdGFsbENvbXBvbmVudHMoY29tcG9uZW50LCB7VkJ0bixWSWNvbn0pXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///274\n"); /***/ }), /***/ 276: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n/*jslint smarttabs:true */\n\nvar Token = __webpack_require__(270).Token;\n\n/* stop is not included! */\nfunction Interval(start, stop) {\n\tthis.start = start;\n\tthis.stop = stop;\n\treturn this;\n}\n\nInterval.prototype.contains = function(item) {\n\treturn item >= this.start && item < this.stop;\n};\n\nInterval.prototype.toString = function() {\n\tif(this.start===this.stop-1) {\n\t\treturn this.start.toString();\n\t} else {\n\t\treturn this.start.toString() + \"..\" + (this.stop-1).toString();\n\t}\n};\n\n\nObject.defineProperty(Interval.prototype, \"length\", {\n\tget : function() {\n\t\treturn this.stop - this.start;\n\t}\n});\n\nfunction IntervalSet() {\n\tthis.intervals = null;\n\tthis.readOnly = false;\n}\n\nIntervalSet.prototype.first = function(v) {\n\tif (this.intervals === null || this.intervals.length===0) {\n\t\treturn Token.INVALID_TYPE;\n\t} else {\n\t\treturn this.intervals[0].start;\n\t}\n};\n\nIntervalSet.prototype.addOne = function(v) {\n\tthis.addInterval(new Interval(v, v + 1));\n};\n\nIntervalSet.prototype.addRange = function(l, h) {\n\tthis.addInterval(new Interval(l, h + 1));\n};\n\nIntervalSet.prototype.addInterval = function(v) {\n\tif (this.intervals === null) {\n\t\tthis.intervals = [];\n\t\tthis.intervals.push(v);\n\t} else {\n\t\t// find insert pos\n\t\tfor (var k = 0; k < this.intervals.length; k++) {\n\t\t\tvar i = this.intervals[k];\n\t\t\t// distinct range -> insert\n\t\t\tif (v.stop < i.start) {\n\t\t\t\tthis.intervals.splice(k, 0, v);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// contiguous range -> adjust\n\t\t\telse if (v.stop === i.start) {\n\t\t\t\tthis.intervals[k].start = v.start;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// overlapping range -> adjust and reduce\n\t\t\telse if (v.start <= i.stop) {\n\t\t\t\tthis.intervals[k] = new Interval(Math.min(i.start, v.start), Math.max(i.stop, v.stop));\n\t\t\t\tthis.reduce(k);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// greater than any existing\n\t\tthis.intervals.push(v);\n\t}\n};\n\nIntervalSet.prototype.addSet = function(other) {\n\tif (other.intervals !== null) {\n\t\tfor (var k = 0; k < other.intervals.length; k++) {\n\t\t\tvar i = other.intervals[k];\n\t\t\tthis.addInterval(new Interval(i.start, i.stop));\n\t\t}\n\t}\n\treturn this;\n};\n\nIntervalSet.prototype.reduce = function(k) {\n\t// only need to reduce if k is not the last\n\tif (k < this.intervalslength - 1) {\n\t\tvar l = this.intervals[k];\n\t\tvar r = this.intervals[k + 1];\n\t\t// if r contained in l\n\t\tif (l.stop >= r.stop) {\n\t\t\tthis.intervals.pop(k + 1);\n\t\t\tthis.reduce(k);\n\t\t} else if (l.stop >= r.start) {\n\t\t\tthis.intervals[k] = new Interval(l.start, r.stop);\n\t\t\tthis.intervals.pop(k + 1);\n\t\t}\n\t}\n};\n\nIntervalSet.prototype.complement = function(start, stop) {\n var result = new IntervalSet();\n result.addInterval(new Interval(start,stop+1));\n for(var i=0; ii.start && v.stop=i.stop) {\n this.intervals.splice(k, 1);\n k = k - 1; // need another pass\n }\n // check for lower boundary\n else if(v.start\");\n\t\t\t} else {\n\t\t\t\tnames.push(\"'\" + String.fromCharCode(v.start) + \"'\");\n\t\t\t}\n\t\t} else {\n\t\t\tnames.push(\"'\" + String.fromCharCode(v.start) + \"'..'\" + String.fromCharCode(v.stop-1) + \"'\");\n\t\t}\n\t}\n\tif (names.length > 1) {\n\t\treturn \"{\" + names.join(\", \") + \"}\";\n\t} else {\n\t\treturn names[0];\n\t}\n};\n\n\nIntervalSet.prototype.toIndexString = function() {\n\tvar names = [];\n\tfor (var i = 0; i < this.intervals.length; i++) {\n\t\tvar v = this.intervals[i];\n\t\tif(v.stop===v.start+1) {\n\t\t\tif ( v.start===Token.EOF ) {\n\t\t\t\tnames.push(\"\");\n\t\t\t} else {\n\t\t\t\tnames.push(v.start.toString());\n\t\t\t}\n\t\t} else {\n\t\t\tnames.push(v.start.toString() + \"..\" + (v.stop-1).toString());\n\t\t}\n\t}\n\tif (names.length > 1) {\n\t\treturn \"{\" + names.join(\", \") + \"}\";\n\t} else {\n\t\treturn names[0];\n\t}\n};\n\n\nIntervalSet.prototype.toTokenString = function(literalNames, symbolicNames) {\n\tvar names = [];\n\tfor (var i = 0; i < this.intervals.length; i++) {\n\t\tvar v = this.intervals[i];\n\t\tfor (var j = v.start; j < v.stop; j++) {\n\t\t\tnames.push(this.elementName(literalNames, symbolicNames, j));\n\t\t}\n\t}\n\tif (names.length > 1) {\n\t\treturn \"{\" + names.join(\", \") + \"}\";\n\t} else {\n\t\treturn names[0];\n\t}\n};\n\nIntervalSet.prototype.elementName = function(literalNames, symbolicNames, a) {\n\tif (a === Token.EOF) {\n\t\treturn \"\";\n\t} else if (a === Token.EPSILON) {\n\t\treturn \"\";\n\t} else {\n\t\treturn literalNames[a] || symbolicNames[a];\n\t}\n};\n\nexports.Interval = Interval;\nexports.IntervalSet = IntervalSet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L0ludGVydmFsU2V0LmpzP2M0YTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLEdBQVM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQiw0QkFBNEI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGlCQUFpQjtBQUNuRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxvQkFBb0IseUJBQXlCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLDJCQUEyQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWixFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlCQUF5QjtBQUNwQyxFQUFFO0FBQ0Y7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEMsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQSx1QkFBdUIsWUFBWTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjI3Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLypqc2xpbnQgc21hcnR0YWJzOnRydWUgKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuXG4vKiBzdG9wIGlzIG5vdCBpbmNsdWRlZCEgKi9cbmZ1bmN0aW9uIEludGVydmFsKHN0YXJ0LCBzdG9wKSB7XG5cdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0dGhpcy5zdG9wID0gc3RvcDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkludGVydmFsLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0cmV0dXJuIGl0ZW0gPj0gdGhpcy5zdGFydCAmJiBpdGVtIDwgdGhpcy5zdG9wO1xufTtcblxuSW50ZXJ2YWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdGlmKHRoaXMuc3RhcnQ9PT10aGlzLnN0b3AtMSkge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnQudG9TdHJpbmcoKSArIFwiLi5cIiArICh0aGlzLnN0b3AtMSkudG9TdHJpbmcoKTtcblx0fVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWwucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3AgLSB0aGlzLnN0YXJ0O1xuXHR9XG59KTtcblxuZnVuY3Rpb24gSW50ZXJ2YWxTZXQoKSB7XG5cdHRoaXMuaW50ZXJ2YWxzID0gbnVsbDtcblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xufVxuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCB8fCB0aGlzLmludGVydmFscy5sZW5ndGg9PT0wKSB7XG5cdFx0cmV0dXJuIFRva2VuLklOVkFMSURfVFlQRTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcnZhbHNbMF0uc3RhcnQ7XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5hZGRPbmUgPSBmdW5jdGlvbih2KSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHYsIHYgKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkUmFuZ2UgPSBmdW5jdGlvbihsLCBoKSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGwsIGggKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkSW50ZXJ2YWwgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHRoaXMuaW50ZXJ2YWxzID0gW107XG5cdFx0dGhpcy5pbnRlcnZhbHMucHVzaCh2KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmaW5kIGluc2VydCBwb3Ncblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdFx0Ly8gZGlzdGluY3QgcmFuZ2UgLT4gaW5zZXJ0XG5cdFx0XHRpZiAodi5zdG9wIDwgaS5zdGFydCkge1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgdik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnRpZ3VvdXMgcmFuZ2UgLT4gYWRqdXN0XG5cdFx0XHRlbHNlIGlmICh2LnN0b3AgPT09IGkuc3RhcnQpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10uc3RhcnQgPSB2LnN0YXJ0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBvdmVybGFwcGluZyByYW5nZSAtPiBhZGp1c3QgYW5kIHJlZHVjZVxuXHRcdFx0ZWxzZSBpZiAodi5zdGFydCA8PSBpLnN0b3ApIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoTWF0aC5taW4oaS5zdGFydCwgdi5zdGFydCksIE1hdGgubWF4KGkuc3RvcCwgdi5zdG9wKSk7XG5cdFx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGdyZWF0ZXIgdGhhbiBhbnkgZXhpc3Rpbmdcblx0XHR0aGlzLmludGVydmFscy5wdXNoKHYpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKG90aGVyLmludGVydmFscyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGsgPSAwOyBrIDwgb3RoZXIuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IG90aGVyLmludGVydmFsc1trXTtcblx0XHRcdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGkuc3RhcnQsIGkuc3RvcCkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbihrKSB7XG5cdC8vIG9ubHkgbmVlZCB0byByZWR1Y2UgaWYgayBpcyBub3QgdGhlIGxhc3Rcblx0aWYgKGsgPCB0aGlzLmludGVydmFsc2xlbmd0aCAtIDEpIHtcblx0XHR2YXIgbCA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdHZhciByID0gdGhpcy5pbnRlcnZhbHNbayArIDFdO1xuXHRcdC8vIGlmIHIgY29udGFpbmVkIGluIGxcblx0XHRpZiAobC5zdG9wID49IHIuc3RvcCkge1xuXHRcdFx0dGhpcy5pbnRlcnZhbHMucG9wKGsgKyAxKTtcblx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdH0gZWxzZSBpZiAobC5zdG9wID49IHIuc3RhcnQpIHtcblx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGwuc3RhcnQsIHIuc3RvcCk7XG5cdFx0XHR0aGlzLmludGVydmFscy5wb3AoayArIDEpO1xuXHRcdH1cblx0fVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmNvbXBsZW1lbnQgPSBmdW5jdGlvbihzdGFydCwgc3RvcCkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICByZXN1bHQuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHN0YXJ0LHN0b3ArMSkpO1xuICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5yZW1vdmVSYW5nZSh0aGlzLmludGVydmFsc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRpZih0aGlzLmludGVydmFsc1trXS5jb250YWlucyhpdGVtKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsZW4gPSAwO1xuXHRcdHRoaXMuaW50ZXJ2YWxzLm1hcChmdW5jdGlvbihpKSB7bGVuICs9IGkubGVuZ3RoO30pO1xuXHRcdHJldHVybiBsZW47XG5cdH1cbn0pO1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbih2KSB7XG4gICAgaWYodi5zdGFydD09PXYuc3RvcC0xKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlT25lKHYuc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbHMhPT1udWxsKSB7XG4gICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgZm9yKHZhciBuPTA7IG48dGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5pbnRlcnZhbHNba107XG4gICAgICAgICAgICAvLyBpbnRlcnZhbHMgYXJlIG9yZGVyZWRcbiAgICAgICAgICAgIGlmICh2LnN0b3A8PWkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgaW5jbHVkaW5nIHJhbmdlLCBzcGxpdCBpdFxuICAgICAgICAgICAgZWxzZSBpZih2LnN0YXJ0Pmkuc3RhcnQgJiYgdi5zdG9wPGkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQsIHYuc3RhcnQpO1xuICAgICAgICAgICAgICAgIHZhciB4ID0gbmV3IEludGVydmFsKHYuc3RvcCwgaS5zdG9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGluY2x1ZGVkIHJhbmdlLCByZW1vdmUgaXRcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDw9aS5zdGFydCAmJiB2LnN0b3A+PWkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgICAgICBrID0gayAtIDE7IC8vIG5lZWQgYW5vdGhlciBwYXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgbG93ZXIgYm91bmRhcnlcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDxpLnN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2LnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciB1cHBlciBib3VuZGFyeVxuICAgICAgICAgICAgZWxzZSBpZih2LnN0b3A8aS5zdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwodi5zdG9wLCBpLnN0b3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgayArPSAxO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnJlbW92ZU9uZSA9IGZ1bmN0aW9uKHYpIHtcblx0aWYgKHRoaXMuaW50ZXJ2YWxzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0dmFyIGkgPSB0aGlzLmludGVydmFsc1trXTtcblx0XHRcdC8vIGludGVydmFscyBpcyBvcmRlcmVkXG5cdFx0XHRpZiAodiA8IGkuc3RhcnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIHNpbmdsZSB2YWx1ZSByYW5nZVxuXHRcdFx0ZWxzZSBpZiAodiA9PT0gaS5zdGFydCAmJiB2ID09PSBpLnN0b3AgLSAxKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIGxvd2VyIGJvdW5kYXJ5XG5cdFx0XHRlbHNlIGlmICh2ID09PSBpLnN0YXJ0KSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQgKyAxLCBpLnN0b3ApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBjaGVjayBmb3IgdXBwZXIgYm91bmRhcnlcblx0XHRcdGVsc2UgaWYgKHYgPT09IGkuc3RvcCAtIDEpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoaS5zdGFydCwgaS5zdG9wIC0gMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIHNwbGl0IGV4aXN0aW5nIHJhbmdlXG5cdFx0XHRlbHNlIGlmICh2IDwgaS5zdG9wIC0gMSkge1xuXHRcdFx0XHR2YXIgeCA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2KTtcblx0XHRcdFx0aS5zdGFydCA9IHYgKyAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgZWxlbXNBcmVDaGFyKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRlbGVtc0FyZUNoYXIgPSBlbGVtc0FyZUNoYXIgfHwgZmFsc2U7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcInt9XCI7XG5cdH0gZWxzZSBpZihsaXRlcmFsTmFtZXMhPT1udWxsIHx8IHN5bWJvbGljTmFtZXMhPT1udWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9Ub2tlblN0cmluZyhsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpO1xuXHR9IGVsc2UgaWYoZWxlbXNBcmVDaGFyKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9DaGFyU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMudG9JbmRleFN0cmluZygpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUudG9DaGFyU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuYW1lcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHYgPSB0aGlzLmludGVydmFsc1tpXTtcblx0XHRpZih2LnN0b3A9PT12LnN0YXJ0KzEpIHtcblx0XHRcdGlmICggdi5zdGFydD09PVRva2VuLkVPRiApIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIjxFT0Y+XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodi5zdGFydCkgKyBcIidcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2goXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RhcnQpICsgXCInLi4nXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RvcC0xKSArIFwiJ1wiKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvSW5kZXhTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGlmKHYuc3RvcD09PXYuc3RhcnQrMSkge1xuXHRcdFx0aWYgKCB2LnN0YXJ0PT09VG9rZW4uRU9GICkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKFwiPEVPRj5cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuYW1lcy5wdXNoKHYuc3RhcnQudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2godi5zdGFydC50b1N0cmluZygpICsgXCIuLlwiICsgKHYuc3RvcC0xKS50b1N0cmluZygpKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvVG9rZW5TdHJpbmcgPSBmdW5jdGlvbihsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGZvciAodmFyIGogPSB2LnN0YXJ0OyBqIDwgdi5zdG9wOyBqKyspIHtcblx0XHRcdG5hbWVzLnB1c2godGhpcy5lbGVtZW50TmFtZShsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMsIGopKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5lbGVtZW50TmFtZSA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgYSkge1xuXHRpZiAoYSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIGlmIChhID09PSBUb2tlbi5FUFNJTE9OKSB7XG5cdFx0cmV0dXJuIFwiPEVQU0lMT04+XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGxpdGVyYWxOYW1lc1thXSB8fCBzeW1ib2xpY05hbWVzW2FdO1xuXHR9XG59O1xuXG5leHBvcnRzLkludGVydmFsID0gSW50ZXJ2YWw7XG5leHBvcnRzLkludGVydmFsU2V0ID0gSW50ZXJ2YWxTZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///276\n"); /***/ }), /***/ 280: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./components/MainAppBar.vue?vue&type=template&id=7214890c&scoped=true&\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app-bar',{attrs:{\"app\":\"\",\"fluid\":\"\"}},[_c('v-toolbar-title',[_vm._t(\"default\")],2),_vm._v(\" \"),_c('v-spacer'),_vm._v(\" \"),_c('v-toolbar-items',[_c('app-selector'),_vm._v(\" \"),_c('workspace-selector')],1)],1)}\nvar staticRenderFns = []\n\n\n// CONCATENATED MODULE: ./components/MainAppBar.vue?vue&type=template&id=7214890c&scoped=true&\n\n// EXTERNAL MODULE: ./components/AppSelector.vue + 4 modules\nvar AppSelector = __webpack_require__(274);\n\n// EXTERNAL MODULE: ./components/WorkspaceSelector.vue + 4 modules\nvar WorkspaceSelector = __webpack_require__(273);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib??vue-loader-options!./components/MainAppBar.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var MainAppBarvue_type_script_lang_js_ = ({\n name: \"MainAppBar\",\n components: {\n WorkspaceSelector: WorkspaceSelector[\"a\" /* default */],\n AppSelector: AppSelector[\"a\" /* default */]\n }\n});\n// CONCATENATED MODULE: ./components/MainAppBar.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_MainAppBarvue_type_script_lang_js_ = (MainAppBarvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(56);\n\n// EXTERNAL MODULE: ./node_modules/vuetify-loader/lib/runtime/installComponents.js\nvar installComponents = __webpack_require__(121);\nvar installComponents_default = /*#__PURE__*/__webpack_require__.n(installComponents);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VAppBar/VAppBar.js + 2 modules\nvar VAppBar = __webpack_require__(600);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VGrid/VSpacer.js\nvar VSpacer = __webpack_require__(584);\n\n// EXTERNAL MODULE: ./node_modules/vuetify/lib/components/VToolbar/index.js\nvar VToolbar = __webpack_require__(278);\n\n// CONCATENATED MODULE: ./components/MainAppBar.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n components_MainAppBarvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n \"7214890c\",\n null\n \n)\n\n/* harmony default export */ var MainAppBar = __webpack_exports__[\"a\"] = (component.exports);\n\n/* vuetify-loader */\n\n\n\n\n\ninstallComponents_default()(component, {VAppBar: VAppBar[\"a\" /* default */],VSpacer: VSpacer[\"a\" /* default */],VToolbarItems: VToolbar[\"a\" /* VToolbarItems */],VToolbarTitle: VToolbar[\"b\" /* VToolbarTitle */]})\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL01haW5BcHBCYXIudnVlPzUyNmEiLCJ3ZWJwYWNrOi8vL2NvbXBvbmVudHMvTWFpbkFwcEJhci52dWU/NDM0OCIsIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL01haW5BcHBCYXIudnVlPzdhOGQiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9NYWluQXBwQmFyLnZ1ZT9hNzI3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQTBCLGFBQWEsMEJBQTBCLHdCQUF3Qix1QkFBdUIsT0FBTyxxQkFBcUI7QUFDNUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNhQTtBQUNBO0FBRUE7QUFDQSxvQkFEQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRkEsRzs7QUNqQjhLLENBQWdCLG9IQUFHLEVBQUMsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQTdGO0FBQ3ZDO0FBQ0w7OztBQUd6RDtBQUN1RjtBQUN2RixnQkFBZ0IsOENBQVU7QUFDMUIsRUFBRSw2Q0FBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFZSwyRkFBaUI7O0FBRWhDO0FBQ2dHO0FBQ3ZDO0FBQ0Y7QUFDUztBQUNBO0FBQ2hFLDJCQUFpQixhQUFhLG1DQUFPLENBQUMsbUNBQU8sQ0FBQyxnREFBYSxDQUFDLGdEQUFhLENBQUMiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtyZXR1cm4gX2MoJ3YtYXBwLWJhcicse2F0dHJzOntcImFwcFwiOlwiXCIsXCJmbHVpZFwiOlwiXCJ9fSxbX2MoJ3YtdG9vbGJhci10aXRsZScsW192bS5fdChcImRlZmF1bHRcIildLDIpLF92bS5fdihcIiBcIiksX2MoJ3Ytc3BhY2VyJyksX3ZtLl92KFwiIFwiKSxfYygndi10b29sYmFyLWl0ZW1zJyxbX2MoJ2FwcC1zZWxlY3RvcicpLF92bS5fdihcIiBcIiksX2MoJ3dvcmtzcGFjZS1zZWxlY3RvcicpXSwxKV0sMSl9XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIjx0ZW1wbGF0ZT5cbiAgPHYtYXBwLWJhciBhcHAgZmx1aWQ+XG4gICAgPCEtLSAgICA8di1hcHAtYmFyIGFwcCBkYXJrIGZsdWlkIGRlbnNlIGZsYXQ+LS0+XG4gICAgPHYtdG9vbGJhci10aXRsZT48c2xvdD48L3Nsb3Q+PC92LXRvb2xiYXItdGl0bGU+XG4gICAgPHYtc3BhY2VyPjwvdi1zcGFjZXI+XG4gICAgPHYtdG9vbGJhci1pdGVtcz5cbiAgICAgIDxhcHAtc2VsZWN0b3I+PC9hcHAtc2VsZWN0b3I+XG4gICAgICA8d29ya3NwYWNlLXNlbGVjdG9yPjwvd29ya3NwYWNlLXNlbGVjdG9yPlxuICAgIDwvdi10b29sYmFyLWl0ZW1zPlxuICA8L3YtYXBwLWJhcj5cblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBBcHBTZWxlY3RvciBmcm9tIFwiQC9jb21wb25lbnRzL0FwcFNlbGVjdG9yXCI7XG5pbXBvcnQgV29ya3NwYWNlU2VsZWN0b3IgZnJvbSBcIkAvY29tcG9uZW50cy9Xb3Jrc3BhY2VTZWxlY3RvclwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6IFwiTWFpbkFwcEJhclwiLFxuICBjb21wb25lbnRzOiB7V29ya3NwYWNlU2VsZWN0b3IsIEFwcFNlbGVjdG9yfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG48L3N0eWxlPlxuIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0yLTAhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9NYWluQXBwQmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0yLTAhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9NYWluQXBwQmFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vTWFpbkFwcEJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzIxNDg5MGMmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTWFpbkFwcEJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL01haW5BcHBCYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI3MjE0ODkwY1wiLFxuICBudWxsXG4gIFxuKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0c1xuXG4vKiB2dWV0aWZ5LWxvYWRlciAqL1xuaW1wb3J0IGluc3RhbGxDb21wb25lbnRzIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZXRpZnktbG9hZGVyL2xpYi9ydW50aW1lL2luc3RhbGxDb21wb25lbnRzLmpzXCJcbmltcG9ydCB7IFZBcHBCYXIgfSBmcm9tICd2dWV0aWZ5L2xpYi9jb21wb25lbnRzL1ZBcHBCYXInO1xuaW1wb3J0IHsgVlNwYWNlciB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVkdyaWQnO1xuaW1wb3J0IHsgVlRvb2xiYXJJdGVtcyB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVlRvb2xiYXInO1xuaW1wb3J0IHsgVlRvb2xiYXJUaXRsZSB9IGZyb20gJ3Z1ZXRpZnkvbGliL2NvbXBvbmVudHMvVlRvb2xiYXInO1xuaW5zdGFsbENvbXBvbmVudHMoY29tcG9uZW50LCB7VkFwcEJhcixWU3BhY2VyLFZUb29sYmFySXRlbXMsVlRvb2xiYXJUaXRsZX0pXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n"); /***/ }), /***/ 282: /***/ (function(module, exports) { eval("//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n// The following images show the relation of states and\n// {@link ATNState//transitions} for various grammar constructs.\n//\n//
    \n//\n//
  • Solid edges marked with an &//0949; indicate a required\n// {@link EpsilonTransition}.
  • \n//\n//
  • Dashed edges indicate locations where any transition derived from\n// {@link Transition} might appear.
  • \n//\n//
  • Dashed nodes are place holders for either a sequence of linked\n// {@link BasicState} states or the inclusion of a block representing a nested\n// construct in one of the forms below.
  • \n//\n//
  • Nodes showing multiple outgoing alternatives with a {@code ...} support\n// any number of alternatives (one or more). Nodes without the {@code ...} only\n// support the exact number of alternatives shown in the diagram.
  • \n//\n//
\n//\n//

Basic Blocks

\n//\n//

Rule

\n//\n// \n//\n//

Block of 1 or more alternatives

\n//\n// \n//\n//

Greedy Loops

\n//\n//

Greedy Closure: {@code (...)*}

\n//\n// \n//\n//

Greedy Positive Closure: {@code (...)+}

\n//\n// \n//\n//

Greedy Optional: {@code (...)?}

\n//\n// \n//\n//

Non-Greedy Loops

\n//\n//

Non-Greedy Closure: {@code (...)*?}

\n//\n// \n//\n//

Non-Greedy Positive Closure: {@code (...)+?}

\n//\n// \n//\n//

Non-Greedy Optional: {@code (...)??}

\n//\n// \n//\n\nvar INITIAL_NUM_TRANSITIONS = 4;\n\nfunction ATNState() {\n // Which ATN are we in?\n this.atn = null;\n this.stateNumber = ATNState.INVALID_STATE_NUMBER;\n this.stateType = null;\n this.ruleIndex = 0; // at runtime, we don't have Rule objects\n this.epsilonOnlyTransitions = false;\n // Track the transitions emanating from this ATN state.\n this.transitions = [];\n // Used to cache lookahead during parsing, not used during construction\n this.nextTokenWithinRule = null;\n return this;\n}\n\n// constants for serialization\nATNState.INVALID_TYPE = 0;\nATNState.BASIC = 1;\nATNState.RULE_START = 2;\nATNState.BLOCK_START = 3;\nATNState.PLUS_BLOCK_START = 4;\nATNState.STAR_BLOCK_START = 5;\nATNState.TOKEN_START = 6;\nATNState.RULE_STOP = 7;\nATNState.BLOCK_END = 8;\nATNState.STAR_LOOP_BACK = 9;\nATNState.STAR_LOOP_ENTRY = 10;\nATNState.PLUS_LOOP_BACK = 11;\nATNState.LOOP_END = 12;\n\nATNState.serializationNames = [\n \"INVALID\",\n \"BASIC\",\n \"RULE_START\",\n \"BLOCK_START\",\n \"PLUS_BLOCK_START\",\n \"STAR_BLOCK_START\",\n \"TOKEN_START\",\n \"RULE_STOP\",\n \"BLOCK_END\",\n \"STAR_LOOP_BACK\",\n \"STAR_LOOP_ENTRY\",\n \"PLUS_LOOP_BACK\",\n \"LOOP_END\" ];\n\nATNState.INVALID_STATE_NUMBER = -1;\n\nATNState.prototype.toString = function() {\n\treturn this.stateNumber;\n};\n\nATNState.prototype.equals = function(other) {\n if (other instanceof ATNState) {\n return this.stateNumber===other.stateNumber;\n } else {\n return false;\n }\n};\n\nATNState.prototype.isNonGreedyExitState = function() {\n return false;\n};\n\n\nATNState.prototype.addTransition = function(trans, index) {\n\tif(index===undefined) {\n\t\tindex = -1;\n\t}\n if (this.transitions.length===0) {\n this.epsilonOnlyTransitions = trans.isEpsilon;\n } else if(this.epsilonOnlyTransitions !== trans.isEpsilon) {\n this.epsilonOnlyTransitions = false;\n }\n if (index===-1) {\n this.transitions.push(trans);\n } else {\n this.transitions.splice(index, 1, trans);\n }\n};\n\nfunction BasicState() {\n\tATNState.call(this);\n this.stateType = ATNState.BASIC;\n return this;\n}\n\nBasicState.prototype = Object.create(ATNState.prototype);\nBasicState.prototype.constructor = BasicState;\n\n\nfunction DecisionState() {\n\tATNState.call(this);\n this.decision = -1;\n this.nonGreedy = false;\n return this;\n}\n\nDecisionState.prototype = Object.create(ATNState.prototype);\nDecisionState.prototype.constructor = DecisionState;\n\n\n// The start of a regular {@code (...)} block.\nfunction BlockStartState() {\n\tDecisionState.call(this);\n\tthis.endState = null;\n\treturn this;\n}\n\nBlockStartState.prototype = Object.create(DecisionState.prototype);\nBlockStartState.prototype.constructor = BlockStartState;\n\n\nfunction BasicBlockStartState() {\n\tBlockStartState.call(this);\n\tthis.stateType = ATNState.BLOCK_START;\n\treturn this;\n}\n\nBasicBlockStartState.prototype = Object.create(BlockStartState.prototype);\nBasicBlockStartState.prototype.constructor = BasicBlockStartState;\n\n\n// Terminal node of a simple {@code (a|b|c)} block.\nfunction BlockEndState() {\n\tATNState.call(this);\n\tthis.stateType = ATNState.BLOCK_END;\n this.startState = null;\n return this;\n}\n\nBlockEndState.prototype = Object.create(ATNState.prototype);\nBlockEndState.prototype.constructor = BlockEndState;\n\n\n// The last node in the ATN for a rule, unless that rule is the start symbol.\n// In that case, there is one transition to EOF. Later, we might encode\n// references to all calls to this rule to compute FOLLOW sets for\n// error handling.\n//\nfunction RuleStopState() {\n\tATNState.call(this);\n this.stateType = ATNState.RULE_STOP;\n return this;\n}\n\nRuleStopState.prototype = Object.create(ATNState.prototype);\nRuleStopState.prototype.constructor = RuleStopState;\n\nfunction RuleStartState() {\n\tATNState.call(this);\n\tthis.stateType = ATNState.RULE_START;\n\tthis.stopState = null;\n\tthis.isPrecedenceRule = false;\n\treturn this;\n}\n\nRuleStartState.prototype = Object.create(ATNState.prototype);\nRuleStartState.prototype.constructor = RuleStartState;\n\n// Decision state for {@code A+} and {@code (A|B)+}. It has two transitions:\n// one to the loop back to start of the block and one to exit.\n//\nfunction PlusLoopbackState() {\n\tDecisionState.call(this);\n\tthis.stateType = ATNState.PLUS_LOOP_BACK;\n\treturn this;\n}\n\nPlusLoopbackState.prototype = Object.create(DecisionState.prototype);\nPlusLoopbackState.prototype.constructor = PlusLoopbackState;\n\n\n// Start of {@code (A|B|...)+} loop. Technically a decision state, but\n// we don't use for code generation; somebody might need it, so I'm defining\n// it for completeness. In reality, the {@link PlusLoopbackState} node is the\n// real decision-making note for {@code A+}.\n//\nfunction PlusBlockStartState() {\n\tBlockStartState.call(this);\n\tthis.stateType = ATNState.PLUS_BLOCK_START;\n this.loopBackState = null;\n return this;\n}\n\nPlusBlockStartState.prototype = Object.create(BlockStartState.prototype);\nPlusBlockStartState.prototype.constructor = PlusBlockStartState;\n\n// The block that begins a closure loop.\nfunction StarBlockStartState() {\n\tBlockStartState.call(this);\n\tthis.stateType = ATNState.STAR_BLOCK_START;\n\treturn this;\n}\n\nStarBlockStartState.prototype = Object.create(BlockStartState.prototype);\nStarBlockStartState.prototype.constructor = StarBlockStartState;\n\n\nfunction StarLoopbackState() {\n\tATNState.call(this);\n\tthis.stateType = ATNState.STAR_LOOP_BACK;\n\treturn this;\n}\n\nStarLoopbackState.prototype = Object.create(ATNState.prototype);\nStarLoopbackState.prototype.constructor = StarLoopbackState;\n\n\nfunction StarLoopEntryState() {\n\tDecisionState.call(this);\n\tthis.stateType = ATNState.STAR_LOOP_ENTRY;\n this.loopBackState = null;\n // Indicates whether this state can benefit from a precedence DFA during SLL decision making.\n this.isPrecedenceDecision = null;\n return this;\n}\n\nStarLoopEntryState.prototype = Object.create(DecisionState.prototype);\nStarLoopEntryState.prototype.constructor = StarLoopEntryState;\n\n\n// Mark the end of a * or + loop.\nfunction LoopEndState() {\n\tATNState.call(this);\n\tthis.stateType = ATNState.LOOP_END;\n\tthis.loopBackState = null;\n\treturn this;\n}\n\nLoopEndState.prototype = Object.create(ATNState.prototype);\nLoopEndState.prototype.constructor = LoopEndState;\n\n\n// The Tokens rule start state linking to each lexer rule start state */\nfunction TokensStartState() {\n\tDecisionState.call(this);\n\tthis.stateType = ATNState.TOKEN_START;\n\treturn this;\n}\n\nTokensStartState.prototype = Object.create(DecisionState.prototype);\nTokensStartState.prototype.constructor = TokensStartState;\n\nexports.ATNState = ATNState;\nexports.BasicState = BasicState;\nexports.DecisionState = DecisionState;\nexports.BlockStartState = BlockStartState;\nexports.BlockEndState = BlockEndState;\nexports.LoopEndState = LoopEndState;\nexports.RuleStartState = RuleStartState;\nexports.RuleStopState = RuleStopState;\nexports.TokensStartState = TokensStartState;\nexports.PlusLoopbackState = PlusLoopbackState;\nexports.StarLoopbackState = StarLoopbackState;\nexports.StarLoopEntryState = StarLoopEntryState;\nexports.PlusBlockStartState = PlusBlockStartState;\nexports.StarBlockStartState = StarBlockStartState;\nexports.BasicBlockStartState = BasicBlockStartState;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2F0bi9BVE5TdGF0ZS5qcz8zMzI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksNEJBQTRCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxJQUFJLHdCQUF3QjtBQUM1QjtBQUNBO0FBQ0EsSUFBSSxpQkFBaUI7QUFDckI7QUFDQTtBQUNBLElBQUksaUJBQWlCO0FBQ3JCO0FBQ0E7QUFDQSw0REFBNEQsVUFBVTtBQUN0RSxnRUFBZ0UsVUFBVTtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixhQUFhO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxhQUFhO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixhQUFhO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsY0FBYztBQUMxQztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsY0FBYztBQUNuRDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsY0FBYztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBLDRCQUE0QixZQUFZO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQSw4QkFBOEIsY0FBYztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QixTQUFTLE1BQU0sYUFBYTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQSxhQUFhLGlCQUFpQjtBQUM5QixxQ0FBcUM7QUFDckMsMENBQTBDLHdCQUF3QjtBQUNsRSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyBUaGUgZm9sbG93aW5nIGltYWdlcyBzaG93IHRoZSByZWxhdGlvbiBvZiBzdGF0ZXMgYW5kXG4vLyB7QGxpbmsgQVROU3RhdGUvL3RyYW5zaXRpb25zfSBmb3IgdmFyaW91cyBncmFtbWFyIGNvbnN0cnVjdHMuXG4vL1xuLy8gPHVsPlxuLy9cbi8vIDxsaT5Tb2xpZCBlZGdlcyBtYXJrZWQgd2l0aCBhbiAmLy8wOTQ5OyBpbmRpY2F0ZSBhIHJlcXVpcmVkXG4vLyB7QGxpbmsgRXBzaWxvblRyYW5zaXRpb259LjwvbGk+XG4vL1xuLy8gPGxpPkRhc2hlZCBlZGdlcyBpbmRpY2F0ZSBsb2NhdGlvbnMgd2hlcmUgYW55IHRyYW5zaXRpb24gZGVyaXZlZCBmcm9tXG4vLyB7QGxpbmsgVHJhbnNpdGlvbn0gbWlnaHQgYXBwZWFyLjwvbGk+XG4vL1xuLy8gPGxpPkRhc2hlZCBub2RlcyBhcmUgcGxhY2UgaG9sZGVycyBmb3IgZWl0aGVyIGEgc2VxdWVuY2Ugb2YgbGlua2VkXG4vLyB7QGxpbmsgQmFzaWNTdGF0ZX0gc3RhdGVzIG9yIHRoZSBpbmNsdXNpb24gb2YgYSBibG9jayByZXByZXNlbnRpbmcgYSBuZXN0ZWRcbi8vIGNvbnN0cnVjdCBpbiBvbmUgb2YgdGhlIGZvcm1zIGJlbG93LjwvbGk+XG4vL1xuLy8gPGxpPk5vZGVzIHNob3dpbmcgbXVsdGlwbGUgb3V0Z29pbmcgYWx0ZXJuYXRpdmVzIHdpdGggYSB7QGNvZGUgLi4ufSBzdXBwb3J0XG4vLyBhbnkgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyAob25lIG9yIG1vcmUpLiBOb2RlcyB3aXRob3V0IHRoZSB7QGNvZGUgLi4ufSBvbmx5XG4vLyBzdXBwb3J0IHRoZSBleGFjdCBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIHNob3duIGluIHRoZSBkaWFncmFtLjwvbGk+XG4vL1xuLy8gPC91bD5cbi8vXG4vLyA8aDI+QmFzaWMgQmxvY2tzPC9oMj5cbi8vXG4vLyA8aDM+UnVsZTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9SdWxlLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5CbG9jayBvZiAxIG9yIG1vcmUgYWx0ZXJuYXRpdmVzPC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Jsb2NrLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMj5HcmVlZHkgTG9vcHM8L2gyPlxuLy9cbi8vIDxoMz5HcmVlZHkgQ2xvc3VyZToge0Bjb2RlICguLi4pKn08L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQ2xvc3VyZUdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+R3JlZWR5IFBvc2l0aXZlIENsb3N1cmU6IHtAY29kZSAoLi4uKSt9PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL1Bvc2l0aXZlQ2xvc3VyZUdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+R3JlZWR5IE9wdGlvbmFsOiB7QGNvZGUgKC4uLik/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9PcHRpb25hbEdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDI+Tm9uLUdyZWVkeSBMb29wczwvaDI+XG4vL1xuLy8gPGgzPk5vbi1HcmVlZHkgQ2xvc3VyZToge0Bjb2RlICguLi4pKj99PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Nsb3N1cmVOb25HcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPk5vbi1HcmVlZHkgUG9zaXRpdmUgQ2xvc3VyZToge0Bjb2RlICguLi4pKz99PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL1Bvc2l0aXZlQ2xvc3VyZU5vbkdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+Tm9uLUdyZWVkeSBPcHRpb25hbDoge0Bjb2RlICguLi4pPz99PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL09wdGlvbmFsTm9uR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cblxudmFyIElOSVRJQUxfTlVNX1RSQU5TSVRJT05TID0gNDtcblxuZnVuY3Rpb24gQVROU3RhdGUoKSB7XG4gICAgLy8gV2hpY2ggQVROIGFyZSB3ZSBpbj9cbiAgICB0aGlzLmF0biA9IG51bGw7XG4gICAgdGhpcy5zdGF0ZU51bWJlciA9IEFUTlN0YXRlLklOVkFMSURfU1RBVEVfTlVNQkVSO1xuICAgIHRoaXMuc3RhdGVUeXBlID0gbnVsbDtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IDA7IC8vIGF0IHJ1bnRpbWUsIHdlIGRvbid0IGhhdmUgUnVsZSBvYmplY3RzXG4gICAgdGhpcy5lcHNpbG9uT25seVRyYW5zaXRpb25zID0gZmFsc2U7XG4gICAgLy8gVHJhY2sgdGhlIHRyYW5zaXRpb25zIGVtYW5hdGluZyBmcm9tIHRoaXMgQVROIHN0YXRlLlxuICAgIHRoaXMudHJhbnNpdGlvbnMgPSBbXTtcbiAgICAvLyBVc2VkIHRvIGNhY2hlIGxvb2thaGVhZCBkdXJpbmcgcGFyc2luZywgbm90IHVzZWQgZHVyaW5nIGNvbnN0cnVjdGlvblxuICAgIHRoaXMubmV4dFRva2VuV2l0aGluUnVsZSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIGNvbnN0YW50cyBmb3Igc2VyaWFsaXphdGlvblxuQVROU3RhdGUuSU5WQUxJRF9UWVBFID0gMDtcbkFUTlN0YXRlLkJBU0lDID0gMTtcbkFUTlN0YXRlLlJVTEVfU1RBUlQgPSAyO1xuQVROU3RhdGUuQkxPQ0tfU1RBUlQgPSAzO1xuQVROU3RhdGUuUExVU19CTE9DS19TVEFSVCA9IDQ7XG5BVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUID0gNTtcbkFUTlN0YXRlLlRPS0VOX1NUQVJUID0gNjtcbkFUTlN0YXRlLlJVTEVfU1RPUCA9IDc7XG5BVE5TdGF0ZS5CTE9DS19FTkQgPSA4O1xuQVROU3RhdGUuU1RBUl9MT09QX0JBQ0sgPSA5O1xuQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZID0gMTA7XG5BVE5TdGF0ZS5QTFVTX0xPT1BfQkFDSyA9IDExO1xuQVROU3RhdGUuTE9PUF9FTkQgPSAxMjtcblxuQVROU3RhdGUuc2VyaWFsaXphdGlvbk5hbWVzID0gW1xuICAgICAgICAgICAgXCJJTlZBTElEXCIsXG4gICAgICAgICAgICBcIkJBU0lDXCIsXG4gICAgICAgICAgICBcIlJVTEVfU1RBUlRcIixcbiAgICAgICAgICAgIFwiQkxPQ0tfU1RBUlRcIixcbiAgICAgICAgICAgIFwiUExVU19CTE9DS19TVEFSVFwiLFxuICAgICAgICAgICAgXCJTVEFSX0JMT0NLX1NUQVJUXCIsXG4gICAgICAgICAgICBcIlRPS0VOX1NUQVJUXCIsXG4gICAgICAgICAgICBcIlJVTEVfU1RPUFwiLFxuICAgICAgICAgICAgXCJCTE9DS19FTkRcIixcbiAgICAgICAgICAgIFwiU1RBUl9MT09QX0JBQ0tcIixcbiAgICAgICAgICAgIFwiU1RBUl9MT09QX0VOVFJZXCIsXG4gICAgICAgICAgICBcIlBMVVNfTE9PUF9CQUNLXCIsXG4gICAgICAgICAgICBcIkxPT1BfRU5EXCIgXTtcblxuQVROU3RhdGUuSU5WQUxJRF9TVEFURV9OVU1CRVIgPSAtMTtcblxuQVROU3RhdGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN0YXRlTnVtYmVyO1xufTtcblxuQVROU3RhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKG90aGVyIGluc3RhbmNlb2YgQVROU3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVOdW1iZXI9PT1vdGhlci5zdGF0ZU51bWJlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcblxuQVROU3RhdGUucHJvdG90eXBlLmlzTm9uR3JlZWR5RXhpdFN0YXRlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuXG5BVE5TdGF0ZS5wcm90b3R5cGUuYWRkVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHRyYW5zLCBpbmRleCkge1xuXHRpZihpbmRleD09PXVuZGVmaW5lZCkge1xuXHRcdGluZGV4ID0gLTE7XG5cdH1cbiAgICBpZiAodGhpcy50cmFuc2l0aW9ucy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IHRyYW5zLmlzRXBzaWxvbjtcbiAgICB9IGVsc2UgaWYodGhpcy5lcHNpbG9uT25seVRyYW5zaXRpb25zICE9PSB0cmFucy5pc0Vwc2lsb24pIHtcbiAgICAgICAgdGhpcy5lcHNpbG9uT25seVRyYW5zaXRpb25zID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleD09PS0xKSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvbnMucHVzaCh0cmFucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9ucy5zcGxpY2UoaW5kZXgsIDEsIHRyYW5zKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBCYXNpY1N0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuQkFTSUM7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkJhc2ljU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuQmFzaWNTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNpY1N0YXRlO1xuXG5cbmZ1bmN0aW9uIERlY2lzaW9uU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG4gICAgdGhpcy5kZWNpc2lvbiA9IC0xO1xuICAgIHRoaXMubm9uR3JlZWR5ID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkRlY2lzaW9uU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEZWNpc2lvblN0YXRlO1xuXG5cbi8vICBUaGUgc3RhcnQgb2YgYSByZWd1bGFyIHtAY29kZSAoLi4uKX0gYmxvY2suXG5mdW5jdGlvbiBCbG9ja1N0YXJ0U3RhdGUoKSB7XG5cdERlY2lzaW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5lbmRTdGF0ZSA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNpc2lvblN0YXRlLnByb3RvdHlwZSk7XG5CbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvY2tTdGFydFN0YXRlO1xuXG5cbmZ1bmN0aW9uIEJhc2ljQmxvY2tTdGFydFN0YXRlKCkge1xuXHRCbG9ja1N0YXJ0U3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5CTE9DS19TVEFSVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkJhc2ljQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSk7XG5CYXNpY0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYXNpY0Jsb2NrU3RhcnRTdGF0ZTtcblxuXG4vLyBUZXJtaW5hbCBub2RlIG9mIGEgc2ltcGxlIHtAY29kZSAoYXxifGMpfSBibG9jay5cbmZ1bmN0aW9uIEJsb2NrRW5kU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuQkxPQ0tfRU5EO1xuICAgIHRoaXMuc3RhcnRTdGF0ZSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkJsb2NrRW5kU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuQmxvY2tFbmRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9ja0VuZFN0YXRlO1xuXG5cbi8vIFRoZSBsYXN0IG5vZGUgaW4gdGhlIEFUTiBmb3IgYSBydWxlLCB1bmxlc3MgdGhhdCBydWxlIGlzIHRoZSBzdGFydCBzeW1ib2wuXG4vLyAgSW4gdGhhdCBjYXNlLCB0aGVyZSBpcyBvbmUgdHJhbnNpdGlvbiB0byBFT0YuIExhdGVyLCB3ZSBtaWdodCBlbmNvZGVcbi8vICByZWZlcmVuY2VzIHRvIGFsbCBjYWxscyB0byB0aGlzIHJ1bGUgdG8gY29tcHV0ZSBGT0xMT1cgc2V0cyBmb3Jcbi8vICBlcnJvciBoYW5kbGluZy5cbi8vXG5mdW5jdGlvbiBSdWxlU3RvcFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuUlVMRV9TVE9QO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SdWxlU3RvcFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcblJ1bGVTdG9wU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUnVsZVN0b3BTdGF0ZTtcblxuZnVuY3Rpb24gUnVsZVN0YXJ0U3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuUlVMRV9TVEFSVDtcblx0dGhpcy5zdG9wU3RhdGUgPSBudWxsO1xuXHR0aGlzLmlzUHJlY2VkZW5jZVJ1bGUgPSBmYWxzZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblJ1bGVTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcblJ1bGVTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVTdGFydFN0YXRlO1xuXG4vLyBEZWNpc2lvbiBzdGF0ZSBmb3Ige0Bjb2RlIEErfSBhbmQge0Bjb2RlIChBfEIpK30uICBJdCBoYXMgdHdvIHRyYW5zaXRpb25zOlxuLy8gIG9uZSB0byB0aGUgbG9vcCBiYWNrIHRvIHN0YXJ0IG9mIHRoZSBibG9jayBhbmQgb25lIHRvIGV4aXQuXG4vL1xuZnVuY3Rpb24gUGx1c0xvb3BiYWNrU3RhdGUoKSB7XG5cdERlY2lzaW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5QTFVTX0xPT1BfQkFDSztcblx0cmV0dXJuIHRoaXM7XG59XG5cblBsdXNMb29wYmFja1N0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUpO1xuUGx1c0xvb3BiYWNrU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGx1c0xvb3BiYWNrU3RhdGU7XG5cblxuLy8gU3RhcnQgb2Yge0Bjb2RlIChBfEJ8Li4uKSt9IGxvb3AuIFRlY2huaWNhbGx5IGEgZGVjaXNpb24gc3RhdGUsIGJ1dFxuLy8gIHdlIGRvbid0IHVzZSBmb3IgY29kZSBnZW5lcmF0aW9uOyBzb21lYm9keSBtaWdodCBuZWVkIGl0LCBzbyBJJ20gZGVmaW5pbmdcbi8vICBpdCBmb3IgY29tcGxldGVuZXNzLiBJbiByZWFsaXR5LCB0aGUge0BsaW5rIFBsdXNMb29wYmFja1N0YXRlfSBub2RlIGlzIHRoZVxuLy8gIHJlYWwgZGVjaXNpb24tbWFraW5nIG5vdGUgZm9yIHtAY29kZSBBK30uXG4vL1xuZnVuY3Rpb24gUGx1c0Jsb2NrU3RhcnRTdGF0ZSgpIHtcblx0QmxvY2tTdGFydFN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuUExVU19CTE9DS19TVEFSVDtcbiAgICB0aGlzLmxvb3BCYWNrU3RhdGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QbHVzQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSk7XG5QbHVzQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsdXNCbG9ja1N0YXJ0U3RhdGU7XG5cbi8vIFRoZSBibG9jayB0aGF0IGJlZ2lucyBhIGNsb3N1cmUgbG9vcC5cbmZ1bmN0aW9uIFN0YXJCbG9ja1N0YXJ0U3RhdGUoKSB7XG5cdEJsb2NrU3RhcnRTdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlNUQVJfQkxPQ0tfU1RBUlQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5TdGFyQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSk7XG5TdGFyQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0YXJCbG9ja1N0YXJ0U3RhdGU7XG5cblxuZnVuY3Rpb24gU3Rhckxvb3BiYWNrU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuU1RBUl9MT09QX0JBQ0s7XG5cdHJldHVybiB0aGlzO1xufVxuXG5TdGFyTG9vcGJhY2tTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5TdGFyTG9vcGJhY2tTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyTG9vcGJhY2tTdGF0ZTtcblxuXG5mdW5jdGlvbiBTdGFyTG9vcEVudHJ5U3RhdGUoKSB7XG5cdERlY2lzaW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlk7XG4gICAgdGhpcy5sb29wQmFja1N0YXRlID0gbnVsbDtcbiAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHN0YXRlIGNhbiBiZW5lZml0IGZyb20gYSBwcmVjZWRlbmNlIERGQSBkdXJpbmcgU0xMIGRlY2lzaW9uIG1ha2luZy5cbiAgICB0aGlzLmlzUHJlY2VkZW5jZURlY2lzaW9uID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuU3Rhckxvb3BFbnRyeVN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUpO1xuU3Rhckxvb3BFbnRyeVN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0YXJMb29wRW50cnlTdGF0ZTtcblxuXG4vLyBNYXJrIHRoZSBlbmQgb2YgYSAqIG9yICsgbG9vcC5cbmZ1bmN0aW9uIExvb3BFbmRTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5MT09QX0VORDtcblx0dGhpcy5sb29wQmFja1N0YXRlID0gbnVsbDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxvb3BFbmRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5Mb29wRW5kU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9vcEVuZFN0YXRlO1xuXG5cbi8vIFRoZSBUb2tlbnMgcnVsZSBzdGFydCBzdGF0ZSBsaW5raW5nIHRvIGVhY2ggbGV4ZXIgcnVsZSBzdGFydCBzdGF0ZSAqL1xuZnVuY3Rpb24gVG9rZW5zU3RhcnRTdGF0ZSgpIHtcblx0RGVjaXNpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlRPS0VOX1NUQVJUO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuVG9rZW5zU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblRva2Vuc1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVG9rZW5zU3RhcnRTdGF0ZTtcblxuZXhwb3J0cy5BVE5TdGF0ZSA9IEFUTlN0YXRlO1xuZXhwb3J0cy5CYXNpY1N0YXRlID0gQmFzaWNTdGF0ZTtcbmV4cG9ydHMuRGVjaXNpb25TdGF0ZSA9IERlY2lzaW9uU3RhdGU7XG5leHBvcnRzLkJsb2NrU3RhcnRTdGF0ZSA9IEJsb2NrU3RhcnRTdGF0ZTtcbmV4cG9ydHMuQmxvY2tFbmRTdGF0ZSA9IEJsb2NrRW5kU3RhdGU7XG5leHBvcnRzLkxvb3BFbmRTdGF0ZSA9IExvb3BFbmRTdGF0ZTtcbmV4cG9ydHMuUnVsZVN0YXJ0U3RhdGUgPSBSdWxlU3RhcnRTdGF0ZTtcbmV4cG9ydHMuUnVsZVN0b3BTdGF0ZSA9IFJ1bGVTdG9wU3RhdGU7XG5leHBvcnRzLlRva2Vuc1N0YXJ0U3RhdGUgPSBUb2tlbnNTdGFydFN0YXRlO1xuZXhwb3J0cy5QbHVzTG9vcGJhY2tTdGF0ZSA9IFBsdXNMb29wYmFja1N0YXRlO1xuZXhwb3J0cy5TdGFyTG9vcGJhY2tTdGF0ZSA9IFN0YXJMb29wYmFja1N0YXRlO1xuZXhwb3J0cy5TdGFyTG9vcEVudHJ5U3RhdGUgPSBTdGFyTG9vcEVudHJ5U3RhdGU7XG5leHBvcnRzLlBsdXNCbG9ja1N0YXJ0U3RhdGUgPSBQbHVzQmxvY2tTdGFydFN0YXRlO1xuZXhwb3J0cy5TdGFyQmxvY2tTdGFydFN0YXRlID0gU3RhckJsb2NrU3RhcnRTdGF0ZTtcbmV4cG9ydHMuQmFzaWNCbG9ja1N0YXJ0U3RhdGUgPSBCYXNpY0Jsb2NrU3RhcnRTdGF0ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///282\n"); /***/ }), /***/ 283: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// The basic notion of a tree has a parent, a payload, and a list of children.\n// It is the most abstract interface for all the trees used by ANTLR.\n///\n\nvar Token = __webpack_require__(270).Token;\nvar Interval = __webpack_require__(276).Interval;\nvar INVALID_INTERVAL = new Interval(-1, -2);\nvar Utils = __webpack_require__(269);\n\n\nfunction Tree() {\n\treturn this;\n}\n\nfunction SyntaxTree() {\n\tTree.call(this);\n\treturn this;\n}\n\nSyntaxTree.prototype = Object.create(Tree.prototype);\nSyntaxTree.prototype.constructor = SyntaxTree;\n\nfunction ParseTree() {\n\tSyntaxTree.call(this);\n\treturn this;\n}\n\nParseTree.prototype = Object.create(SyntaxTree.prototype);\nParseTree.prototype.constructor = ParseTree;\n\nfunction RuleNode() {\n\tParseTree.call(this);\n\treturn this;\n}\n\nRuleNode.prototype = Object.create(ParseTree.prototype);\nRuleNode.prototype.constructor = RuleNode;\n\nfunction TerminalNode() {\n\tParseTree.call(this);\n\treturn this;\n}\n\nTerminalNode.prototype = Object.create(ParseTree.prototype);\nTerminalNode.prototype.constructor = TerminalNode;\n\nfunction ErrorNode() {\n\tTerminalNode.call(this);\n\treturn this;\n}\n\nErrorNode.prototype = Object.create(TerminalNode.prototype);\nErrorNode.prototype.constructor = ErrorNode;\n\nfunction ParseTreeVisitor() {\n\treturn this;\n}\n\nParseTreeVisitor.prototype.visit = function(ctx) {\n \tif (Array.isArray(ctx)) {\n\t\treturn ctx.map(function(child) {\n return child.accept(this);\n }, this);\n\t} else {\n\t\treturn ctx.accept(this);\n\t}\n};\n\nParseTreeVisitor.prototype.visitChildren = function(ctx) {\n\tif (ctx.children) {\n\t\treturn this.visit(ctx.children);\n\t} else {\n\t\treturn null;\n\t}\n}\n\nParseTreeVisitor.prototype.visitTerminal = function(node) {\n};\n\nParseTreeVisitor.prototype.visitErrorNode = function(node) {\n};\n\n\nfunction ParseTreeListener() {\n\treturn this;\n}\n\nParseTreeListener.prototype.visitTerminal = function(node) {\n};\n\nParseTreeListener.prototype.visitErrorNode = function(node) {\n};\n\nParseTreeListener.prototype.enterEveryRule = function(node) {\n};\n\nParseTreeListener.prototype.exitEveryRule = function(node) {\n};\n\nfunction TerminalNodeImpl(symbol) {\n\tTerminalNode.call(this);\n\tthis.parentCtx = null;\n\tthis.symbol = symbol;\n\treturn this;\n}\n\nTerminalNodeImpl.prototype = Object.create(TerminalNode.prototype);\nTerminalNodeImpl.prototype.constructor = TerminalNodeImpl;\n\nTerminalNodeImpl.prototype.getChild = function(i) {\n\treturn null;\n};\n\nTerminalNodeImpl.prototype.getSymbol = function() {\n\treturn this.symbol;\n};\n\nTerminalNodeImpl.prototype.getParent = function() {\n\treturn this.parentCtx;\n};\n\nTerminalNodeImpl.prototype.getPayload = function() {\n\treturn this.symbol;\n};\n\nTerminalNodeImpl.prototype.getSourceInterval = function() {\n\tif (this.symbol === null) {\n\t\treturn INVALID_INTERVAL;\n\t}\n\tvar tokenIndex = this.symbol.tokenIndex;\n\treturn new Interval(tokenIndex, tokenIndex);\n};\n\nTerminalNodeImpl.prototype.getChildCount = function() {\n\treturn 0;\n};\n\nTerminalNodeImpl.prototype.accept = function(visitor) {\n\treturn visitor.visitTerminal(this);\n};\n\nTerminalNodeImpl.prototype.getText = function() {\n\treturn this.symbol.text;\n};\n\nTerminalNodeImpl.prototype.toString = function() {\n\tif (this.symbol.type === Token.EOF) {\n\t\treturn \"\";\n\t} else {\n\t\treturn this.symbol.text;\n\t}\n};\n\n// Represents a token that was consumed during resynchronization\n// rather than during a valid match operation. For example,\n// we will create this kind of a node during single token insertion\n// and deletion as well as during \"consume until error recovery set\"\n// upon no viable alternative exceptions.\n\nfunction ErrorNodeImpl(token) {\n\tTerminalNodeImpl.call(this, token);\n\treturn this;\n}\n\nErrorNodeImpl.prototype = Object.create(TerminalNodeImpl.prototype);\nErrorNodeImpl.prototype.constructor = ErrorNodeImpl;\n\nErrorNodeImpl.prototype.isErrorNode = function() {\n\treturn true;\n};\n\nErrorNodeImpl.prototype.accept = function(visitor) {\n\treturn visitor.visitErrorNode(this);\n};\n\nfunction ParseTreeWalker() {\n\treturn this;\n}\n\nParseTreeWalker.prototype.walk = function(listener, t) {\n\tvar errorNode = t instanceof ErrorNode ||\n\t\t\t(t.isErrorNode !== undefined && t.isErrorNode());\n\tif (errorNode) {\n\t\tlistener.visitErrorNode(t);\n\t} else if (t instanceof TerminalNode) {\n\t\tlistener.visitTerminal(t);\n\t} else {\n\t\tthis.enterRule(listener, t);\n\t\tfor (var i = 0; i < t.getChildCount(); i++) {\n\t\t\tvar child = t.getChild(i);\n\t\t\tthis.walk(listener, child);\n\t\t}\n\t\tthis.exitRule(listener, t);\n\t}\n};\n//\n// The discovery of a rule node, involves sending two events: the generic\n// {@link ParseTreeListener//enterEveryRule} and a\n// {@link RuleContext}-specific event. First we trigger the generic and then\n// the rule specific. We to them in reverse order upon finishing the node.\n//\nParseTreeWalker.prototype.enterRule = function(listener, r) {\n\tvar ctx = r.getRuleContext();\n\tlistener.enterEveryRule(ctx);\n\tctx.enterRule(listener);\n};\n\nParseTreeWalker.prototype.exitRule = function(listener, r) {\n\tvar ctx = r.getRuleContext();\n\tctx.exitRule(listener);\n\tlistener.exitEveryRule(ctx);\n};\n\nParseTreeWalker.DEFAULT = new ParseTreeWalker();\n\nexports.RuleNode = RuleNode;\nexports.ErrorNode = ErrorNode;\nexports.TerminalNode = TerminalNode;\nexports.ErrorNodeImpl = ErrorNodeImpl;\nexports.TerminalNodeImpl = TerminalNodeImpl;\nexports.ParseTreeListener = ParseTreeListener;\nexports.ParseTreeVisitor = ParseTreeVisitor;\nexports.ParseTreeWalker = ParseTreeWalker;\nexports.INVALID_INTERVAL = INVALID_INTERVAL;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvVHJlZS5qcz81NjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxHQUFZO0FBQ2hDLGVBQWUsbUJBQU8sQ0FBQyxHQUFrQjtBQUN6QztBQUNBLFlBQVksbUJBQU8sQ0FBQyxHQUFhOzs7QUFHakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxpQkFBaUIsdUJBQXVCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdDQUF3QztBQUM1QyxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gVGhlIGJhc2ljIG5vdGlvbiBvZiBhIHRyZWUgaGFzIGEgcGFyZW50LCBhIHBheWxvYWQsIGFuZCBhIGxpc3Qgb2YgY2hpbGRyZW4uXG4vLyAgSXQgaXMgdGhlIG1vc3QgYWJzdHJhY3QgaW50ZXJmYWNlIGZvciBhbGwgdGhlIHRyZWVzIHVzZWQgYnkgQU5UTFIuXG4vLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIElOVkFMSURfSU5URVJWQUwgPSBuZXcgSW50ZXJ2YWwoLTEsIC0yKTtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uL1V0aWxzLmpzJyk7XG5cblxuZnVuY3Rpb24gVHJlZSgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIFN5bnRheFRyZWUoKSB7XG5cdFRyZWUuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblN5bnRheFRyZWUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmVlLnByb3RvdHlwZSk7XG5TeW50YXhUcmVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN5bnRheFRyZWU7XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZSgpIHtcblx0U3ludGF4VHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ludGF4VHJlZS5wcm90b3R5cGUpO1xuUGFyc2VUcmVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNlVHJlZTtcblxuZnVuY3Rpb24gUnVsZU5vZGUoKSB7XG5cdFBhcnNlVHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUnVsZU5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWUucHJvdG90eXBlKTtcblJ1bGVOb2RlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVOb2RlO1xuXG5mdW5jdGlvbiBUZXJtaW5hbE5vZGUoKSB7XG5cdFBhcnNlVHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuVGVybWluYWxOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2VUcmVlLnByb3RvdHlwZSk7XG5UZXJtaW5hbE5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGVybWluYWxOb2RlO1xuXG5mdW5jdGlvbiBFcnJvck5vZGUoKSB7XG5cdFRlcm1pbmFsTm9kZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuRXJyb3JOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGVybWluYWxOb2RlLnByb3RvdHlwZSk7XG5FcnJvck5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3JOb2RlO1xuXG5mdW5jdGlvbiBQYXJzZVRyZWVWaXNpdG9yKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbihjdHgpIHtcbiBcdGlmIChBcnJheS5pc0FycmF5KGN0eCkpIHtcblx0XHRyZXR1cm4gY3R4Lm1hcChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmFjY2VwdCh0aGlzKTtcbiAgICAgICAgfSwgdGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGN0eC5hY2NlcHQodGhpcyk7XG5cdH1cbn07XG5cblBhcnNlVHJlZVZpc2l0b3IucHJvdG90eXBlLnZpc2l0Q2hpbGRyZW4gPSBmdW5jdGlvbihjdHgpIHtcblx0aWYgKGN0eC5jaGlsZHJlbikge1xuXHRcdHJldHVybiB0aGlzLnZpc2l0KGN0eC5jaGlsZHJlbik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRUZXJtaW5hbCA9IGZ1bmN0aW9uKG5vZGUpIHtcbn07XG5cblBhcnNlVHJlZVZpc2l0b3IucHJvdG90eXBlLnZpc2l0RXJyb3JOb2RlID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuXG5mdW5jdGlvbiBQYXJzZVRyZWVMaXN0ZW5lcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlVHJlZUxpc3RlbmVyLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLnZpc2l0RXJyb3JOb2RlID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRXZlcnlSdWxlID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFdmVyeVJ1bGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5mdW5jdGlvbiBUZXJtaW5hbE5vZGVJbXBsKHN5bWJvbCkge1xuXHRUZXJtaW5hbE5vZGUuY2FsbCh0aGlzKTtcblx0dGhpcy5wYXJlbnRDdHggPSBudWxsO1xuXHR0aGlzLnN5bWJvbCA9IHN5bWJvbDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGUucHJvdG90eXBlKTtcblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGVybWluYWxOb2RlSW1wbDtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0Q2hpbGQgPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBudWxsO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0U3ltYm9sID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN5bWJvbDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5wYXJlbnRDdHg7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRQYXlsb2FkID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN5bWJvbDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFNvdXJjZUludGVydmFsID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLnN5bWJvbCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBJTlZBTElEX0lOVEVSVkFMO1xuXHR9XG5cdHZhciB0b2tlbkluZGV4ID0gdGhpcy5zeW1ib2wudG9rZW5JbmRleDtcblx0cmV0dXJuIG5ldyBJbnRlcnZhbCh0b2tlbkluZGV4LCB0b2tlbkluZGV4KTtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldENoaWxkQ291bnQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG5cdHJldHVybiB2aXNpdG9yLnZpc2l0VGVybWluYWwodGhpcyk7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN5bWJvbC50ZXh0O1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ltYm9sLnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuc3ltYm9sLnRleHQ7XG5cdH1cbn07XG5cbi8vIFJlcHJlc2VudHMgYSB0b2tlbiB0aGF0IHdhcyBjb25zdW1lZCBkdXJpbmcgcmVzeW5jaHJvbml6YXRpb25cbi8vIHJhdGhlciB0aGFuIGR1cmluZyBhIHZhbGlkIG1hdGNoIG9wZXJhdGlvbi4gRm9yIGV4YW1wbGUsXG4vLyB3ZSB3aWxsIGNyZWF0ZSB0aGlzIGtpbmQgb2YgYSBub2RlIGR1cmluZyBzaW5nbGUgdG9rZW4gaW5zZXJ0aW9uXG4vLyBhbmQgZGVsZXRpb24gYXMgd2VsbCBhcyBkdXJpbmcgXCJjb25zdW1lIHVudGlsIGVycm9yIHJlY292ZXJ5IHNldFwiXG4vLyB1cG9uIG5vIHZpYWJsZSBhbHRlcm5hdGl2ZSBleGNlcHRpb25zLlxuXG5mdW5jdGlvbiBFcnJvck5vZGVJbXBsKHRva2VuKSB7XG5cdFRlcm1pbmFsTm9kZUltcGwuY2FsbCh0aGlzLCB0b2tlbik7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUpO1xuRXJyb3JOb2RlSW1wbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvck5vZGVJbXBsO1xuXG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZS5pc0Vycm9yTm9kZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHZpc2l0b3IpIHtcblx0cmV0dXJuIHZpc2l0b3IudmlzaXRFcnJvck5vZGUodGhpcyk7XG59O1xuXG5mdW5jdGlvbiBQYXJzZVRyZWVXYWxrZXIoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbihsaXN0ZW5lciwgdCkge1xuXHR2YXIgZXJyb3JOb2RlID0gdCBpbnN0YW5jZW9mIEVycm9yTm9kZSB8fFxuXHRcdFx0KHQuaXNFcnJvck5vZGUgIT09IHVuZGVmaW5lZCAmJiB0LmlzRXJyb3JOb2RlKCkpO1xuXHRpZiAoZXJyb3JOb2RlKSB7XG5cdFx0bGlzdGVuZXIudmlzaXRFcnJvck5vZGUodCk7XG5cdH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkge1xuXHRcdGxpc3RlbmVyLnZpc2l0VGVybWluYWwodCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5lbnRlclJ1bGUobGlzdGVuZXIsIHQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdC5nZXRDaGlsZENvdW50KCk7IGkrKykge1xuXHRcdFx0dmFyIGNoaWxkID0gdC5nZXRDaGlsZChpKTtcblx0XHRcdHRoaXMud2FsayhsaXN0ZW5lciwgY2hpbGQpO1xuXHRcdH1cblx0XHR0aGlzLmV4aXRSdWxlKGxpc3RlbmVyLCB0KTtcblx0fVxufTtcbi8vXG4vLyBUaGUgZGlzY292ZXJ5IG9mIGEgcnVsZSBub2RlLCBpbnZvbHZlcyBzZW5kaW5nIHR3byBldmVudHM6IHRoZSBnZW5lcmljXG4vLyB7QGxpbmsgUGFyc2VUcmVlTGlzdGVuZXIvL2VudGVyRXZlcnlSdWxlfSBhbmQgYVxuLy8ge0BsaW5rIFJ1bGVDb250ZXh0fS1zcGVjaWZpYyBldmVudC4gRmlyc3Qgd2UgdHJpZ2dlciB0aGUgZ2VuZXJpYyBhbmQgdGhlblxuLy8gdGhlIHJ1bGUgc3BlY2lmaWMuIFdlIHRvIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciB1cG9uIGZpbmlzaGluZyB0aGUgbm9kZS5cbi8vXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyLCByKSB7XG5cdHZhciBjdHggPSByLmdldFJ1bGVDb250ZXh0KCk7XG5cdGxpc3RlbmVyLmVudGVyRXZlcnlSdWxlKGN0eCk7XG5cdGN0eC5lbnRlclJ1bGUobGlzdGVuZXIpO1xufTtcblxuUGFyc2VUcmVlV2Fsa2VyLnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyLCByKSB7XG5cdHZhciBjdHggPSByLmdldFJ1bGVDb250ZXh0KCk7XG5cdGN0eC5leGl0UnVsZShsaXN0ZW5lcik7XG5cdGxpc3RlbmVyLmV4aXRFdmVyeVJ1bGUoY3R4KTtcbn07XG5cblBhcnNlVHJlZVdhbGtlci5ERUZBVUxUID0gbmV3IFBhcnNlVHJlZVdhbGtlcigpO1xuXG5leHBvcnRzLlJ1bGVOb2RlID0gUnVsZU5vZGU7XG5leHBvcnRzLkVycm9yTm9kZSA9IEVycm9yTm9kZTtcbmV4cG9ydHMuVGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlO1xuZXhwb3J0cy5FcnJvck5vZGVJbXBsID0gRXJyb3JOb2RlSW1wbDtcbmV4cG9ydHMuVGVybWluYWxOb2RlSW1wbCA9IFRlcm1pbmFsTm9kZUltcGw7XG5leHBvcnRzLlBhcnNlVHJlZUxpc3RlbmVyID0gUGFyc2VUcmVlTGlzdGVuZXI7XG5leHBvcnRzLlBhcnNlVHJlZVZpc2l0b3IgPSBQYXJzZVRyZWVWaXNpdG9yO1xuZXhwb3J0cy5QYXJzZVRyZWVXYWxrZXIgPSBQYXJzZVRyZWVXYWxrZXI7XG5leHBvcnRzLklOVkFMSURfSU5URVJWQUwgPSBJTlZBTElEX0lOVEVSVkFMO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n"); /***/ }), /***/ 284: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n// The root of the ANTLR exception hierarchy. In general, ANTLR tracks just\n// 3 kinds of errors: prediction errors, failed predicate errors, and\n// mismatched input errors. In each case, the parser knows where it is\n// in the input, where it is in the ATN, the rule invocation stack,\n// and what kind of problem occurred.\n\nvar PredicateTransition = __webpack_require__(291).PredicateTransition;\n\nfunction RecognitionException(params) {\n\tError.call(this);\n\tif (!!Error.captureStackTrace) {\n Error.captureStackTrace(this, RecognitionException);\n\t} else {\n\t\tvar stack = new Error().stack;\n\t}\n\tthis.message = params.message;\n this.recognizer = params.recognizer;\n this.input = params.input;\n this.ctx = params.ctx;\n // The current {@link Token} when an error occurred. Since not all streams\n // support accessing symbols by index, we have to track the {@link Token}\n // instance itself.\n this.offendingToken = null;\n // Get the ATN state number the parser was in at the time the error\n // occurred. For {@link NoViableAltException} and\n // {@link LexerNoViableAltException} exceptions, this is the\n // {@link DecisionState} number. For others, it is the state whose outgoing\n // edge we couldn't match.\n this.offendingState = -1;\n if (this.recognizer!==null) {\n this.offendingState = this.recognizer.state;\n }\n return this;\n}\n\nRecognitionException.prototype = Object.create(Error.prototype);\nRecognitionException.prototype.constructor = RecognitionException;\n\n//

If the state number is not known, this method returns -1.

\n\n//\n// Gets the set of input symbols which could potentially follow the\n// previously matched symbol at the time this exception was thrown.\n//\n//

If the set of expected tokens is not known and could not be computed,\n// this method returns {@code null}.

\n//\n// @return The set of token types that could potentially follow the current\n// state in the ATN, or {@code null} if the information is not available.\n// /\nRecognitionException.prototype.getExpectedTokens = function() {\n if (this.recognizer!==null) {\n return this.recognizer.atn.getExpectedTokens(this.offendingState, this.ctx);\n } else {\n return null;\n }\n};\n\nRecognitionException.prototype.toString = function() {\n return this.message;\n};\n\nfunction LexerNoViableAltException(lexer, input, startIndex, deadEndConfigs) {\n\tRecognitionException.call(this, {message:\"\", recognizer:lexer, input:input, ctx:null});\n this.startIndex = startIndex;\n this.deadEndConfigs = deadEndConfigs;\n return this;\n}\n\nLexerNoViableAltException.prototype = Object.create(RecognitionException.prototype);\nLexerNoViableAltException.prototype.constructor = LexerNoViableAltException;\n\nLexerNoViableAltException.prototype.toString = function() {\n var symbol = \"\";\n if (this.startIndex >= 0 && this.startIndex < this.input.size) {\n symbol = this.input.getText((this.startIndex,this.startIndex));\n }\n return \"LexerNoViableAltException\" + symbol;\n};\n\n// Indicates that the parser could not decide which of two or more paths\n// to take based upon the remaining input. It tracks the starting token\n// of the offending input and also knows where the parser was\n// in the various paths when the error. Reported by reportNoViableAlternative()\n//\nfunction NoViableAltException(recognizer, input, startToken, offendingToken, deadEndConfigs, ctx) {\n\tctx = ctx || recognizer._ctx;\n\toffendingToken = offendingToken || recognizer.getCurrentToken();\n\tstartToken = startToken || recognizer.getCurrentToken();\n\tinput = input || recognizer.getInputStream();\n\tRecognitionException.call(this, {message:\"\", recognizer:recognizer, input:input, ctx:ctx});\n // Which configurations did we try at input.index() that couldn't match\n\t// input.LT(1)?//\n this.deadEndConfigs = deadEndConfigs;\n // The token object at the start index; the input stream might\n // not be buffering tokens so get a reference to it. (At the\n // time the error occurred, of course the stream needs to keep a\n // buffer all of the tokens but later we might not have access to those.)\n this.startToken = startToken;\n this.offendingToken = offendingToken;\n}\n\nNoViableAltException.prototype = Object.create(RecognitionException.prototype);\nNoViableAltException.prototype.constructor = NoViableAltException;\n\n// This signifies any kind of mismatched input exceptions such as\n// when the current input does not match the expected token.\n//\nfunction InputMismatchException(recognizer) {\n\tRecognitionException.call(this, {message:\"\", recognizer:recognizer, input:recognizer.getInputStream(), ctx:recognizer._ctx});\n this.offendingToken = recognizer.getCurrentToken();\n}\n\nInputMismatchException.prototype = Object.create(RecognitionException.prototype);\nInputMismatchException.prototype.constructor = InputMismatchException;\n\n// A semantic predicate failed during validation. Validation of predicates\n// occurs when normally parsing the alternative just like matching a token.\n// Disambiguating predicate evaluation occurs when we test a predicate during\n// prediction.\n\nfunction FailedPredicateException(recognizer, predicate, message) {\n\tRecognitionException.call(this, {message:this.formatMessage(predicate,message || null), recognizer:recognizer,\n input:recognizer.getInputStream(), ctx:recognizer._ctx});\n var s = recognizer._interp.atn.states[recognizer.state];\n var trans = s.transitions[0];\n if (trans instanceof PredicateTransition) {\n this.ruleIndex = trans.ruleIndex;\n this.predicateIndex = trans.predIndex;\n } else {\n this.ruleIndex = 0;\n this.predicateIndex = 0;\n }\n this.predicate = predicate;\n this.offendingToken = recognizer.getCurrentToken();\n return this;\n}\n\nFailedPredicateException.prototype = Object.create(RecognitionException.prototype);\nFailedPredicateException.prototype.constructor = FailedPredicateException;\n\nFailedPredicateException.prototype.formatMessage = function(predicate, message) {\n if (message !==null) {\n return message;\n } else {\n return \"failed predicate: {\" + predicate + \"}?\";\n }\n};\n\nfunction ParseCancellationException() {\n\tError.call(this);\n\tError.captureStackTrace(this, ParseCancellationException);\n\treturn this;\n}\n\nParseCancellationException.prototype = Object.create(Error.prototype);\nParseCancellationException.prototype.constructor = ParseCancellationException;\n\nexports.RecognitionException = RecognitionException;\nexports.NoViableAltException = NoViableAltException;\nexports.LexerNoViableAltException = LexerNoViableAltException;\nexports.InputMismatchException = InputMismatchException;\nexports.FailedPredicateException = FailedPredicateException;\nexports.ParseCancellationException = ParseCancellationException;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9ycy5qcz8yODE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLG1CQUFPLENBQUMsR0FBcUI7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLGlFQUFpRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCO0FBQ2pELFFBQVEsZ0NBQWdDO0FBQ3hDLFFBQVEsb0JBQW9CO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQSx5QkFBeUIsV0FBVztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLG9EQUFvRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHdEQUF3RDtBQUMxRjtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsMEZBQTBGO0FBQzVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQyxnRkFBZ0Y7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxtQ0FBbUMsa0JBQWtCO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vIFRoZSByb290IG9mIHRoZSBBTlRMUiBleGNlcHRpb24gaGllcmFyY2h5LiBJbiBnZW5lcmFsLCBBTlRMUiB0cmFja3MganVzdFxuLy8gIDMga2luZHMgb2YgZXJyb3JzOiBwcmVkaWN0aW9uIGVycm9ycywgZmFpbGVkIHByZWRpY2F0ZSBlcnJvcnMsIGFuZFxuLy8gIG1pc21hdGNoZWQgaW5wdXQgZXJyb3JzLiBJbiBlYWNoIGNhc2UsIHRoZSBwYXJzZXIga25vd3Mgd2hlcmUgaXQgaXNcbi8vICBpbiB0aGUgaW5wdXQsIHdoZXJlIGl0IGlzIGluIHRoZSBBVE4sIHRoZSBydWxlIGludm9jYXRpb24gc3RhY2ssXG4vLyAgYW5kIHdoYXQga2luZCBvZiBwcm9ibGVtIG9jY3VycmVkLlxuXG52YXIgUHJlZGljYXRlVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vLi4vYXRuL1RyYW5zaXRpb24nKS5QcmVkaWNhdGVUcmFuc2l0aW9uO1xuXG5mdW5jdGlvbiBSZWNvZ25pdGlvbkV4Y2VwdGlvbihwYXJhbXMpIHtcblx0RXJyb3IuY2FsbCh0aGlzKTtcblx0aWYgKCEhRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVjb2duaXRpb25FeGNlcHRpb24pO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuXHR9XG5cdHRoaXMubWVzc2FnZSA9IHBhcmFtcy5tZXNzYWdlO1xuICAgIHRoaXMucmVjb2duaXplciA9IHBhcmFtcy5yZWNvZ25pemVyO1xuICAgIHRoaXMuaW5wdXQgPSBwYXJhbXMuaW5wdXQ7XG4gICAgdGhpcy5jdHggPSBwYXJhbXMuY3R4O1xuICAgIC8vIFRoZSBjdXJyZW50IHtAbGluayBUb2tlbn0gd2hlbiBhbiBlcnJvciBvY2N1cnJlZC4gU2luY2Ugbm90IGFsbCBzdHJlYW1zXG4gICAgLy8gc3VwcG9ydCBhY2Nlc3Npbmcgc3ltYm9scyBieSBpbmRleCwgd2UgaGF2ZSB0byB0cmFjayB0aGUge0BsaW5rIFRva2VufVxuICAgIC8vIGluc3RhbmNlIGl0c2VsZi5cbiAgICB0aGlzLm9mZmVuZGluZ1Rva2VuID0gbnVsbDtcbiAgICAvLyBHZXQgdGhlIEFUTiBzdGF0ZSBudW1iZXIgdGhlIHBhcnNlciB3YXMgaW4gYXQgdGhlIHRpbWUgdGhlIGVycm9yXG4gICAgLy8gb2NjdXJyZWQuIEZvciB7QGxpbmsgTm9WaWFibGVBbHRFeGNlcHRpb259IGFuZFxuICAgIC8vIHtAbGluayBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9ufSBleGNlcHRpb25zLCB0aGlzIGlzIHRoZVxuICAgIC8vIHtAbGluayBEZWNpc2lvblN0YXRlfSBudW1iZXIuIEZvciBvdGhlcnMsIGl0IGlzIHRoZSBzdGF0ZSB3aG9zZSBvdXRnb2luZ1xuICAgIC8vIGVkZ2Ugd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgdGhpcy5vZmZlbmRpbmdTdGF0ZSA9IC0xO1xuICAgIGlmICh0aGlzLnJlY29nbml6ZXIhPT1udWxsKSB7XG4gICAgICAgIHRoaXMub2ZmZW5kaW5nU3RhdGUgPSB0aGlzLnJlY29nbml6ZXIuc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufVxuXG5SZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5SZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWNvZ25pdGlvbkV4Y2VwdGlvbjtcblxuLy8gPHA+SWYgdGhlIHN0YXRlIG51bWJlciBpcyBub3Qga25vd24sIHRoaXMgbWV0aG9kIHJldHVybnMgLTEuPC9wPlxuXG4vL1xuLy8gR2V0cyB0aGUgc2V0IG9mIGlucHV0IHN5bWJvbHMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgZm9sbG93IHRoZVxuLy8gcHJldmlvdXNseSBtYXRjaGVkIHN5bWJvbCBhdCB0aGUgdGltZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuLy9cbi8vIDxwPklmIHRoZSBzZXQgb2YgZXhwZWN0ZWQgdG9rZW5zIGlzIG5vdCBrbm93biBhbmQgY291bGQgbm90IGJlIGNvbXB1dGVkLFxuLy8gdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uPC9wPlxuLy9cbi8vIEByZXR1cm4gVGhlIHNldCBvZiB0b2tlbiB0eXBlcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGZvbGxvdyB0aGUgY3VycmVudFxuLy8gc3RhdGUgaW4gdGhlIEFUTiwgb3Ige0Bjb2RlIG51bGx9IGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLlxuLy8gL1xuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlLmdldEV4cGVjdGVkVG9rZW5zID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMucmVjb2duaXplciE9PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjb2duaXplci5hdG4uZ2V0RXhwZWN0ZWRUb2tlbnModGhpcy5vZmZlbmRpbmdTdGF0ZSwgdGhpcy5jdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG59O1xuXG5mdW5jdGlvbiBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uKGxleGVyLCBpbnB1dCwgc3RhcnRJbmRleCwgZGVhZEVuZENvbmZpZ3MpIHtcblx0UmVjb2duaXRpb25FeGNlcHRpb24uY2FsbCh0aGlzLCB7bWVzc2FnZTpcIlwiLCByZWNvZ25pemVyOmxleGVyLCBpbnB1dDppbnB1dCwgY3R4Om51bGx9KTtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuZGVhZEVuZENvbmZpZ3MgPSBkZWFkRW5kQ29uZmlncztcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSk7XG5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN5bWJvbCA9IFwiXCI7XG4gICAgaWYgKHRoaXMuc3RhcnRJbmRleCA+PSAwICYmIHRoaXMuc3RhcnRJbmRleCA8IHRoaXMuaW5wdXQuc2l6ZSkge1xuICAgICAgICBzeW1ib2wgPSB0aGlzLmlucHV0LmdldFRleHQoKHRoaXMuc3RhcnRJbmRleCx0aGlzLnN0YXJ0SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvblwiICsgc3ltYm9sO1xufTtcblxuLy8gSW5kaWNhdGVzIHRoYXQgdGhlIHBhcnNlciBjb3VsZCBub3QgZGVjaWRlIHdoaWNoIG9mIHR3byBvciBtb3JlIHBhdGhzXG4vLyB0byB0YWtlIGJhc2VkIHVwb24gdGhlIHJlbWFpbmluZyBpbnB1dC4gSXQgdHJhY2tzIHRoZSBzdGFydGluZyB0b2tlblxuLy8gb2YgdGhlIG9mZmVuZGluZyBpbnB1dCBhbmQgYWxzbyBrbm93cyB3aGVyZSB0aGUgcGFyc2VyIHdhc1xuLy8gaW4gdGhlIHZhcmlvdXMgcGF0aHMgd2hlbiB0aGUgZXJyb3IuIFJlcG9ydGVkIGJ5IHJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUoKVxuLy9cbmZ1bmN0aW9uIE5vVmlhYmxlQWx0RXhjZXB0aW9uKHJlY29nbml6ZXIsIGlucHV0LCBzdGFydFRva2VuLCBvZmZlbmRpbmdUb2tlbiwgZGVhZEVuZENvbmZpZ3MsIGN0eCkge1xuXHRjdHggPSBjdHggfHwgcmVjb2duaXplci5fY3R4O1xuXHRvZmZlbmRpbmdUb2tlbiA9IG9mZmVuZGluZ1Rva2VuIHx8IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG5cdHN0YXJ0VG9rZW4gPSBzdGFydFRva2VuIHx8IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlucHV0ID0gaW5wdXQgfHwgcmVjb2duaXplci5nZXRJbnB1dFN0cmVhbSgpO1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOlwiXCIsIHJlY29nbml6ZXI6cmVjb2duaXplciwgaW5wdXQ6aW5wdXQsIGN0eDpjdHh9KTtcbiAgICAvLyBXaGljaCBjb25maWd1cmF0aW9ucyBkaWQgd2UgdHJ5IGF0IGlucHV0LmluZGV4KCkgdGhhdCBjb3VsZG4ndCBtYXRjaFxuXHQvLyBpbnB1dC5MVCgxKT8vL1xuICAgIHRoaXMuZGVhZEVuZENvbmZpZ3MgPSBkZWFkRW5kQ29uZmlncztcbiAgICAvLyBUaGUgdG9rZW4gb2JqZWN0IGF0IHRoZSBzdGFydCBpbmRleDsgdGhlIGlucHV0IHN0cmVhbSBtaWdodFxuICAgIC8vIG5vdCBiZSBidWZmZXJpbmcgdG9rZW5zIHNvIGdldCBhIHJlZmVyZW5jZSB0byBpdC4gKEF0IHRoZVxuICAgIC8vIHRpbWUgdGhlIGVycm9yIG9jY3VycmVkLCBvZiBjb3Vyc2UgdGhlIHN0cmVhbSBuZWVkcyB0byBrZWVwIGFcbiAgICAvLyBidWZmZXIgYWxsIG9mIHRoZSB0b2tlbnMgYnV0IGxhdGVyIHdlIG1pZ2h0IG5vdCBoYXZlIGFjY2VzcyB0byB0aG9zZS4pXG4gICAgdGhpcy5zdGFydFRva2VuID0gc3RhcnRUb2tlbjtcbiAgICB0aGlzLm9mZmVuZGluZ1Rva2VuID0gb2ZmZW5kaW5nVG9rZW47XG59XG5cbk5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlKTtcbk5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuXG4vLyBUaGlzIHNpZ25pZmllcyBhbnkga2luZCBvZiBtaXNtYXRjaGVkIGlucHV0IGV4Y2VwdGlvbnMgc3VjaCBhc1xuLy8gd2hlbiB0aGUgY3VycmVudCBpbnB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgdG9rZW4uXG4vL1xuZnVuY3Rpb24gSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbihyZWNvZ25pemVyKSB7XG5cdFJlY29nbml0aW9uRXhjZXB0aW9uLmNhbGwodGhpcywge21lc3NhZ2U6XCJcIiwgcmVjb2duaXplcjpyZWNvZ25pemVyLCBpbnB1dDpyZWNvZ25pemVyLmdldElucHV0U3RyZWFtKCksIGN0eDpyZWNvZ25pemVyLl9jdHh9KTtcbiAgICB0aGlzLm9mZmVuZGluZ1Rva2VuID0gcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcbn1cblxuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSk7XG5JbnB1dE1pc21hdGNoRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IElucHV0TWlzbWF0Y2hFeGNlcHRpb247XG5cbi8vIEEgc2VtYW50aWMgcHJlZGljYXRlIGZhaWxlZCBkdXJpbmcgdmFsaWRhdGlvbi4gVmFsaWRhdGlvbiBvZiBwcmVkaWNhdGVzXG4vLyBvY2N1cnMgd2hlbiBub3JtYWxseSBwYXJzaW5nIHRoZSBhbHRlcm5hdGl2ZSBqdXN0IGxpa2UgbWF0Y2hpbmcgYSB0b2tlbi5cbi8vIERpc2FtYmlndWF0aW5nIHByZWRpY2F0ZSBldmFsdWF0aW9uIG9jY3VycyB3aGVuIHdlIHRlc3QgYSBwcmVkaWNhdGUgZHVyaW5nXG4vLyBwcmVkaWN0aW9uLlxuXG5mdW5jdGlvbiBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24ocmVjb2duaXplciwgcHJlZGljYXRlLCBtZXNzYWdlKSB7XG5cdFJlY29nbml0aW9uRXhjZXB0aW9uLmNhbGwodGhpcywge21lc3NhZ2U6dGhpcy5mb3JtYXRNZXNzYWdlKHByZWRpY2F0ZSxtZXNzYWdlIHx8IG51bGwpLCByZWNvZ25pemVyOnJlY29nbml6ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6cmVjb2duaXplci5nZXRJbnB1dFN0cmVhbSgpLCBjdHg6cmVjb2duaXplci5fY3R4fSk7XG4gICAgdmFyIHMgPSByZWNvZ25pemVyLl9pbnRlcnAuYXRuLnN0YXRlc1tyZWNvZ25pemVyLnN0YXRlXTtcbiAgICB2YXIgdHJhbnMgPSBzLnRyYW5zaXRpb25zWzBdO1xuICAgIGlmICh0cmFucyBpbnN0YW5jZW9mIFByZWRpY2F0ZVRyYW5zaXRpb24pIHtcbiAgICAgICAgdGhpcy5ydWxlSW5kZXggPSB0cmFucy5ydWxlSW5kZXg7XG4gICAgICAgIHRoaXMucHJlZGljYXRlSW5kZXggPSB0cmFucy5wcmVkSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydWxlSW5kZXggPSAwO1xuICAgICAgICB0aGlzLnByZWRpY2F0ZUluZGV4ID0gMDtcbiAgICB9XG4gICAgdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSk7XG5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uO1xuXG5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24ucHJvdG90eXBlLmZvcm1hdE1lc3NhZ2UgPSBmdW5jdGlvbihwcmVkaWNhdGUsIG1lc3NhZ2UpIHtcbiAgICBpZiAobWVzc2FnZSAhPT1udWxsKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcImZhaWxlZCBwcmVkaWNhdGU6IHtcIiArIHByZWRpY2F0ZSArIFwifT9cIjtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbigpIHtcblx0RXJyb3IuY2FsbCh0aGlzKTtcblx0RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24pO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb247XG5cbmV4cG9ydHMuUmVjb2duaXRpb25FeGNlcHRpb24gPSBSZWNvZ25pdGlvbkV4Y2VwdGlvbjtcbmV4cG9ydHMuTm9WaWFibGVBbHRFeGNlcHRpb24gPSBOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbmV4cG9ydHMuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IExleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5leHBvcnRzLklucHV0TWlzbWF0Y2hFeGNlcHRpb24gPSBJbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuZXhwb3J0cy5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24gPSBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb247XG5leHBvcnRzLlBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uID0gUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb247XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///284\n"); /***/ }), /***/ 287: /***/ (function(module, exports, __webpack_require__) { eval("//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\nvar RuleContext = __webpack_require__(318).RuleContext;\nvar Hash = __webpack_require__(269).Hash;\nvar Map = __webpack_require__(269).Map;\n\nfunction PredictionContext(cachedHashCode) {\n\tthis.cachedHashCode = cachedHashCode;\n}\n\n// Represents {@code $} in local context prediction, which means wildcard.\n// {@code//+x =//}.\n// /\nPredictionContext.EMPTY = null;\n\n// Represents {@code $} in an array in full context mode, when {@code $}\n// doesn't mean wildcard: {@code $ + x = [$,x]}. Here,\n// {@code $} = {@link //EMPTY_RETURN_STATE}.\n// /\nPredictionContext.EMPTY_RETURN_STATE = 0x7FFFFFFF;\n\nPredictionContext.globalNodeCount = 1;\nPredictionContext.id = PredictionContext.globalNodeCount;\n\n// Stores the computed hash code of this {@link PredictionContext}. The hash\n// code is computed in parts to match the following reference algorithm.\n//\n//
\n// private int referenceHashCode() {\n// int hash = {@link MurmurHash//initialize MurmurHash.initialize}({@link\n// //INITIAL_HASH});\n//\n// for (int i = 0; i < {@link //size()}; i++) {\n// hash = {@link MurmurHash//update MurmurHash.update}(hash, {@link //getParent\n// getParent}(i));\n// }\n//\n// for (int i = 0; i < {@link //size()}; i++) {\n// hash = {@link MurmurHash//update MurmurHash.update}(hash, {@link\n// //getReturnState getReturnState}(i));\n// }\n//\n// hash = {@link MurmurHash//finish MurmurHash.finish}(hash, 2// {@link\n// //size()});\n// return hash;\n// }\n// 
\n// /\n\n// This means only the {@link //EMPTY} context is in set.\nPredictionContext.prototype.isEmpty = function() {\n\treturn this === PredictionContext.EMPTY;\n};\n\nPredictionContext.prototype.hasEmptyPath = function() {\n\treturn this.getReturnState(this.length - 1) === PredictionContext.EMPTY_RETURN_STATE;\n};\n\nPredictionContext.prototype.hashCode = function() {\n\treturn this.cachedHashCode;\n};\n\n\nPredictionContext.prototype.updateHashCode = function(hash) {\n hash.update(this.cachedHashCode);\n};\n/*\nfunction calculateHashString(parent, returnState) {\n\treturn \"\" + parent + returnState;\n}\n*/\n\n// Used to cache {@link PredictionContext} objects. Its used for the shared\n// context cash associated with contexts in DFA states. This cache\n// can be used for both lexers and parsers.\n\nfunction PredictionContextCache() {\n\tthis.cache = new Map();\n\treturn this;\n}\n\n// Add a context to the cache and return it. If the context already exists,\n// return that one instead and do not add a new context to the cache.\n// Protect shared cache from unsafe thread access.\n//\nPredictionContextCache.prototype.add = function(ctx) {\n\tif (ctx === PredictionContext.EMPTY) {\n\t\treturn PredictionContext.EMPTY;\n\t}\n\tvar existing = this.cache.get(ctx) || null;\n\tif (existing !== null) {\n\t\treturn existing;\n\t}\n\tthis.cache.put(ctx, ctx);\n\treturn ctx;\n};\n\nPredictionContextCache.prototype.get = function(ctx) {\n\treturn this.cache.get(ctx) || null;\n};\n\nObject.defineProperty(PredictionContextCache.prototype, \"length\", {\n\tget : function() {\n\t\treturn this.cache.length;\n\t}\n});\n\nfunction SingletonPredictionContext(parent, returnState) {\n\tvar hashCode = 0;\n\tvar hash = new Hash();\n\tif(parent !== null) {\n\t\thash.update(parent, returnState);\n\t} else {\n\t\thash.update(1);\n\t}\n\thashCode = hash.finish();\n\tPredictionContext.call(this, hashCode);\n\tthis.parentCtx = parent;\n\tthis.returnState = returnState;\n}\n\nSingletonPredictionContext.prototype = Object.create(PredictionContext.prototype);\nSingletonPredictionContext.prototype.contructor = SingletonPredictionContext;\n\nSingletonPredictionContext.create = function(parent, returnState) {\n\tif (returnState === PredictionContext.EMPTY_RETURN_STATE && parent === null) {\n\t\t// someone can pass in the bits of an array ctx that mean $\n\t\treturn PredictionContext.EMPTY;\n\t} else {\n\t\treturn new SingletonPredictionContext(parent, returnState);\n\t}\n};\n\nObject.defineProperty(SingletonPredictionContext.prototype, \"length\", {\n\tget : function() {\n\t\treturn 1;\n\t}\n});\n\nSingletonPredictionContext.prototype.getParent = function(index) {\n\treturn this.parentCtx;\n};\n\nSingletonPredictionContext.prototype.getReturnState = function(index) {\n\treturn this.returnState;\n};\n\nSingletonPredictionContext.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof SingletonPredictionContext)) {\n\t\treturn false;\n\t} else if (this.hashCode() !== other.hashCode()) {\n\t\treturn false; // can't be same if hash is different\n\t} else {\n\t\tif(this.returnState !== other.returnState)\n return false;\n else if(this.parentCtx==null)\n return other.parentCtx==null\n\t\telse\n return this.parentCtx.equals(other.parentCtx);\n\t}\n};\n\nSingletonPredictionContext.prototype.toString = function() {\n\tvar up = this.parentCtx === null ? \"\" : this.parentCtx.toString();\n\tif (up.length === 0) {\n\t\tif (this.returnState === PredictionContext.EMPTY_RETURN_STATE) {\n\t\t\treturn \"$\";\n\t\t} else {\n\t\t\treturn \"\" + this.returnState;\n\t\t}\n\t} else {\n\t\treturn \"\" + this.returnState + \" \" + up;\n\t}\n};\n\nfunction EmptyPredictionContext() {\n\tSingletonPredictionContext.call(this, null, PredictionContext.EMPTY_RETURN_STATE);\n\treturn this;\n}\n\nEmptyPredictionContext.prototype = Object.create(SingletonPredictionContext.prototype);\nEmptyPredictionContext.prototype.constructor = EmptyPredictionContext;\n\nEmptyPredictionContext.prototype.isEmpty = function() {\n\treturn true;\n};\n\nEmptyPredictionContext.prototype.getParent = function(index) {\n\treturn null;\n};\n\nEmptyPredictionContext.prototype.getReturnState = function(index) {\n\treturn this.returnState;\n};\n\nEmptyPredictionContext.prototype.equals = function(other) {\n\treturn this === other;\n};\n\nEmptyPredictionContext.prototype.toString = function() {\n\treturn \"$\";\n};\n\nPredictionContext.EMPTY = new EmptyPredictionContext();\n\nfunction ArrayPredictionContext(parents, returnStates) {\n\t// Parent can be null only if full ctx mode and we make an array\n\t// from {@link //EMPTY} and non-empty. We merge {@link //EMPTY} by using\n\t// null parent and\n\t// returnState == {@link //EMPTY_RETURN_STATE}.\n\tvar h = new Hash();\n\th.update(parents, returnStates);\n\tvar hashCode = h.finish();\n\tPredictionContext.call(this, hashCode);\n\tthis.parents = parents;\n\tthis.returnStates = returnStates;\n\treturn this;\n}\n\nArrayPredictionContext.prototype = Object.create(PredictionContext.prototype);\nArrayPredictionContext.prototype.constructor = ArrayPredictionContext;\n\nArrayPredictionContext.prototype.isEmpty = function() {\n\t// since EMPTY_RETURN_STATE can only appear in the last position, we\n\t// don't need to verify that size==1\n\treturn this.returnStates[0] === PredictionContext.EMPTY_RETURN_STATE;\n};\n\nObject.defineProperty(ArrayPredictionContext.prototype, \"length\", {\n\tget : function() {\n\t\treturn this.returnStates.length;\n\t}\n});\n\nArrayPredictionContext.prototype.getParent = function(index) {\n\treturn this.parents[index];\n};\n\nArrayPredictionContext.prototype.getReturnState = function(index) {\n\treturn this.returnStates[index];\n};\n\nArrayPredictionContext.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof ArrayPredictionContext)) {\n\t\treturn false;\n\t} else if (this.hashCode() !== other.hashCode()) {\n\t\treturn false; // can't be same if hash is different\n\t} else {\n\t\treturn this.returnStates === other.returnStates &&\n\t\t\t\tthis.parents === other.parents;\n\t}\n};\n\nArrayPredictionContext.prototype.toString = function() {\n\tif (this.isEmpty()) {\n\t\treturn \"[]\";\n\t} else {\n\t\tvar s = \"[\";\n\t\tfor (var i = 0; i < this.returnStates.length; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\ts = s + \", \";\n\t\t\t}\n\t\t\tif (this.returnStates[i] === PredictionContext.EMPTY_RETURN_STATE) {\n\t\t\t\ts = s + \"$\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ts = s + this.returnStates[i];\n\t\t\tif (this.parents[i] !== null) {\n\t\t\t\ts = s + \" \" + this.parents[i];\n\t\t\t} else {\n\t\t\t\ts = s + \"null\";\n\t\t\t}\n\t\t}\n\t\treturn s + \"]\";\n\t}\n};\n\n// Convert a {@link RuleContext} tree to a {@link PredictionContext} graph.\n// Return {@link //EMPTY} if {@code outerContext} is empty or null.\n// /\nfunction predictionContextFromRuleContext(atn, outerContext) {\n\tif (outerContext === undefined || outerContext === null) {\n\t\touterContext = RuleContext.EMPTY;\n\t}\n\t// if we are in RuleContext of start rule, s, then PredictionContext\n\t// is EMPTY. Nobody called us. (if we are empty, return empty)\n\tif (outerContext.parentCtx === null || outerContext === RuleContext.EMPTY) {\n\t\treturn PredictionContext.EMPTY;\n\t}\n\t// If we have a parent, convert it to a PredictionContext graph\n\tvar parent = predictionContextFromRuleContext(atn, outerContext.parentCtx);\n\tvar state = atn.states[outerContext.invokingState];\n\tvar transition = state.transitions[0];\n\treturn SingletonPredictionContext.create(parent, transition.followState.stateNumber);\n}\n/*\nfunction calculateListsHashString(parents, returnStates) {\n\tvar s = \"\";\n\tparents.map(function(p) {\n\t\ts = s + p;\n\t});\n\treturnStates.map(function(r) {\n\t\ts = s + r;\n\t});\n\treturn s;\n}\n*/\nfunction merge(a, b, rootIsWildcard, mergeCache) {\n\t// share same graph if both same\n\tif (a === b) {\n\t\treturn a;\n\t}\n\tif (a instanceof SingletonPredictionContext && b instanceof SingletonPredictionContext) {\n\t\treturn mergeSingletons(a, b, rootIsWildcard, mergeCache);\n\t}\n\t// At least one of a or b is array\n\t// If one is $ and rootIsWildcard, return $ as// wildcard\n\tif (rootIsWildcard) {\n\t\tif (a instanceof EmptyPredictionContext) {\n\t\t\treturn a;\n\t\t}\n\t\tif (b instanceof EmptyPredictionContext) {\n\t\t\treturn b;\n\t\t}\n\t}\n\t// convert singleton so both are arrays to normalize\n\tif (a instanceof SingletonPredictionContext) {\n\t\ta = new ArrayPredictionContext([a.getParent()], [a.returnState]);\n\t}\n\tif (b instanceof SingletonPredictionContext) {\n\t\tb = new ArrayPredictionContext([b.getParent()], [b.returnState]);\n\t}\n\treturn mergeArrays(a, b, rootIsWildcard, mergeCache);\n}\n\n//\n// Merge two {@link SingletonPredictionContext} instances.\n//\n//

Stack tops equal, parents merge is same; return left graph.
\n//

\n//\n//

Same stack top, parents differ; merge parents giving array node, then\n// remainders of those graphs. A new root node is created to point to the\n// merged parents.
\n//

\n//\n//

Different stack tops pointing to same parent. Make array node for the\n// root where both element in the root point to the same (original)\n// parent.
\n//

\n//\n//

Different stack tops pointing to different parents. Make array node for\n// the root where each element points to the corresponding original\n// parent.
\n//

\n//\n// @param a the first {@link SingletonPredictionContext}\n// @param b the second {@link SingletonPredictionContext}\n// @param rootIsWildcard {@code true} if this is a local-context merge,\n// otherwise false to indicate a full-context merge\n// @param mergeCache\n// /\nfunction mergeSingletons(a, b, rootIsWildcard, mergeCache) {\n\tif (mergeCache !== null) {\n\t\tvar previous = mergeCache.get(a, b);\n\t\tif (previous !== null) {\n\t\t\treturn previous;\n\t\t}\n\t\tprevious = mergeCache.get(b, a);\n\t\tif (previous !== null) {\n\t\t\treturn previous;\n\t\t}\n\t}\n\n\tvar rootMerge = mergeRoot(a, b, rootIsWildcard);\n\tif (rootMerge !== null) {\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, rootMerge);\n\t\t}\n\t\treturn rootMerge;\n\t}\n\tif (a.returnState === b.returnState) {\n\t\tvar parent = merge(a.parentCtx, b.parentCtx, rootIsWildcard, mergeCache);\n\t\t// if parent is same as existing a or b parent or reduced to a parent,\n\t\t// return it\n\t\tif (parent === a.parentCtx) {\n\t\t\treturn a; // ax + bx = ax, if a=b\n\t\t}\n\t\tif (parent === b.parentCtx) {\n\t\t\treturn b; // ax + bx = bx, if a=b\n\t\t}\n\t\t// else: ax + ay = a'[x,y]\n\t\t// merge parents x and y, giving array node with x,y then remainders\n\t\t// of those graphs. dup a, a' points at merged array\n\t\t// new joined parent so create new singleton pointing to it, a'\n\t\tvar spc = SingletonPredictionContext.create(parent, a.returnState);\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, spc);\n\t\t}\n\t\treturn spc;\n\t} else { // a != b payloads differ\n\t\t// see if we can collapse parents due to $+x parents if local ctx\n\t\tvar singleParent = null;\n\t\tif (a === b || (a.parentCtx !== null && a.parentCtx === b.parentCtx)) { // ax +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// bx =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// [a,b]x\n\t\t\tsingleParent = a.parentCtx;\n\t\t}\n\t\tif (singleParent !== null) { // parents are same\n\t\t\t// sort payloads and use same parent\n\t\t\tvar payloads = [ a.returnState, b.returnState ];\n\t\t\tif (a.returnState > b.returnState) {\n\t\t\t\tpayloads[0] = b.returnState;\n\t\t\t\tpayloads[1] = a.returnState;\n\t\t\t}\n\t\t\tvar parents = [ singleParent, singleParent ];\n\t\t\tvar apc = new ArrayPredictionContext(parents, payloads);\n\t\t\tif (mergeCache !== null) {\n\t\t\t\tmergeCache.set(a, b, apc);\n\t\t\t}\n\t\t\treturn apc;\n\t\t}\n\t\t// parents differ and can't merge them. Just pack together\n\t\t// into array; can't merge.\n\t\t// ax + by = [ax,by]\n\t\tvar payloads = [ a.returnState, b.returnState ];\n\t\tvar parents = [ a.parentCtx, b.parentCtx ];\n\t\tif (a.returnState > b.returnState) { // sort by payload\n\t\t\tpayloads[0] = b.returnState;\n\t\t\tpayloads[1] = a.returnState;\n\t\t\tparents = [ b.parentCtx, a.parentCtx ];\n\t\t}\n\t\tvar a_ = new ArrayPredictionContext(parents, payloads);\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, a_);\n\t\t}\n\t\treturn a_;\n\t}\n}\n\n//\n// Handle case where at least one of {@code a} or {@code b} is\n// {@link //EMPTY}. In the following diagrams, the symbol {@code $} is used\n// to represent {@link //EMPTY}.\n//\n//

Local-Context Merges

\n//\n//

These local-context merge operations are used when {@code rootIsWildcard}\n// is true.

\n//\n//

{@link //EMPTY} is superset of any graph; return {@link //EMPTY}.
\n//

\n//\n//

{@link //EMPTY} and anything is {@code //EMPTY}, so merged parent is\n// {@code //EMPTY}; return left graph.
\n//

\n//\n//

Special case of last merge if local context.
\n//

\n//\n//

Full-Context Merges

\n//\n//

These full-context merge operations are used when {@code rootIsWildcard}\n// is false.

\n//\n//

\n//\n//

Must keep all contexts; {@link //EMPTY} in array is a special value (and\n// null parent).
\n//

\n//\n//

\n//\n// @param a the first {@link SingletonPredictionContext}\n// @param b the second {@link SingletonPredictionContext}\n// @param rootIsWildcard {@code true} if this is a local-context merge,\n// otherwise false to indicate a full-context merge\n// /\nfunction mergeRoot(a, b, rootIsWildcard) {\n\tif (rootIsWildcard) {\n\t\tif (a === PredictionContext.EMPTY) {\n\t\t\treturn PredictionContext.EMPTY; // // + b =//\n\t\t}\n\t\tif (b === PredictionContext.EMPTY) {\n\t\t\treturn PredictionContext.EMPTY; // a +// =//\n\t\t}\n\t} else {\n\t\tif (a === PredictionContext.EMPTY && b === PredictionContext.EMPTY) {\n\t\t\treturn PredictionContext.EMPTY; // $ + $ = $\n\t\t} else if (a === PredictionContext.EMPTY) { // $ + x = [$,x]\n\t\t\tvar payloads = [ b.returnState,\n\t\t\t\t\tPredictionContext.EMPTY_RETURN_STATE ];\n\t\t\tvar parents = [ b.parentCtx, null ];\n\t\t\treturn new ArrayPredictionContext(parents, payloads);\n\t\t} else if (b === PredictionContext.EMPTY) { // x + $ = [$,x] ($ is always first if present)\n\t\t\tvar payloads = [ a.returnState, PredictionContext.EMPTY_RETURN_STATE ];\n\t\t\tvar parents = [ a.parentCtx, null ];\n\t\t\treturn new ArrayPredictionContext(parents, payloads);\n\t\t}\n\t}\n\treturn null;\n}\n\n//\n// Merge two {@link ArrayPredictionContext} instances.\n//\n//

Different tops, different parents.
\n//

\n//\n//

Shared top, same parents.
\n//

\n//\n//

Shared top, different parents.
\n//

\n//\n//

Shared top, all shared parents.
\n//

\n//\n//

Equal tops, merge parents and reduce top to\n// {@link SingletonPredictionContext}.
\n//

\n// /\nfunction mergeArrays(a, b, rootIsWildcard, mergeCache) {\n\tif (mergeCache !== null) {\n\t\tvar previous = mergeCache.get(a, b);\n\t\tif (previous !== null) {\n\t\t\treturn previous;\n\t\t}\n\t\tprevious = mergeCache.get(b, a);\n\t\tif (previous !== null) {\n\t\t\treturn previous;\n\t\t}\n\t}\n\t// merge sorted payloads a + b => M\n\tvar i = 0; // walks a\n\tvar j = 0; // walks b\n\tvar k = 0; // walks target M array\n\n\tvar mergedReturnStates = [];\n\tvar mergedParents = [];\n\t// walk and merge to yield mergedParents, mergedReturnStates\n\twhile (i < a.returnStates.length && j < b.returnStates.length) {\n\t\tvar a_parent = a.parents[i];\n\t\tvar b_parent = b.parents[j];\n\t\tif (a.returnStates[i] === b.returnStates[j]) {\n\t\t\t// same payload (stack tops are equal), must yield merged singleton\n\t\t\tvar payload = a.returnStates[i];\n\t\t\t// $+$ = $\n\t\t\tvar bothDollars = payload === PredictionContext.EMPTY_RETURN_STATE &&\n\t\t\t\t\ta_parent === null && b_parent === null;\n\t\t\tvar ax_ax = (a_parent !== null && b_parent !== null && a_parent === b_parent); // ax+ax\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// ->\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// ax\n\t\t\tif (bothDollars || ax_ax) {\n\t\t\t\tmergedParents[k] = a_parent; // choose left\n\t\t\t\tmergedReturnStates[k] = payload;\n\t\t\t} else { // ax+ay -> a'[x,y]\n\t\t\t\tvar mergedParent = merge(a_parent, b_parent, rootIsWildcard, mergeCache);\n\t\t\t\tmergedParents[k] = mergedParent;\n\t\t\t\tmergedReturnStates[k] = payload;\n\t\t\t}\n\t\t\ti += 1; // hop over left one as usual\n\t\t\tj += 1; // but also skip one in right side since we merge\n\t\t} else if (a.returnStates[i] < b.returnStates[j]) { // copy a[i] to M\n\t\t\tmergedParents[k] = a_parent;\n\t\t\tmergedReturnStates[k] = a.returnStates[i];\n\t\t\ti += 1;\n\t\t} else { // b > a, copy b[j] to M\n\t\t\tmergedParents[k] = b_parent;\n\t\t\tmergedReturnStates[k] = b.returnStates[j];\n\t\t\tj += 1;\n\t\t}\n\t\tk += 1;\n\t}\n\t// copy over any payloads remaining in either array\n\tif (i < a.returnStates.length) {\n\t\tfor (var p = i; p < a.returnStates.length; p++) {\n\t\t\tmergedParents[k] = a.parents[p];\n\t\t\tmergedReturnStates[k] = a.returnStates[p];\n\t\t\tk += 1;\n\t\t}\n\t} else {\n\t\tfor (var p = j; p < b.returnStates.length; p++) {\n\t\t\tmergedParents[k] = b.parents[p];\n\t\t\tmergedReturnStates[k] = b.returnStates[p];\n\t\t\tk += 1;\n\t\t}\n\t}\n\t// trim merged if we combined a few that had same stack tops\n\tif (k < mergedParents.length) { // write index < last position; trim\n\t\tif (k === 1) { // for just one merged element, return singleton top\n\t\t\tvar a_ = SingletonPredictionContext.create(mergedParents[0],\n\t\t\t\t\tmergedReturnStates[0]);\n\t\t\tif (mergeCache !== null) {\n\t\t\t\tmergeCache.set(a, b, a_);\n\t\t\t}\n\t\t\treturn a_;\n\t\t}\n\t\tmergedParents = mergedParents.slice(0, k);\n\t\tmergedReturnStates = mergedReturnStates.slice(0, k);\n\t}\n\n\tvar M = new ArrayPredictionContext(mergedParents, mergedReturnStates);\n\n\t// if we created same array as a or b, return that instead\n\t// TODO: track whether this is possible above during merge sort for speed\n\tif (M === a) {\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, a);\n\t\t}\n\t\treturn a;\n\t}\n\tif (M === b) {\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, b);\n\t\t}\n\t\treturn b;\n\t}\n\tcombineCommonParents(mergedParents);\n\n\tif (mergeCache !== null) {\n\t\tmergeCache.set(a, b, M);\n\t}\n\treturn M;\n}\n\n//\n// Make pass over all M {@code parents}; merge any {@code equals()}\n// ones.\n// /\nfunction combineCommonParents(parents) {\n\tvar uniqueParents = new Map();\n\n\tfor (var p = 0; p < parents.length; p++) {\n\t\tvar parent = parents[p];\n\t\tif (!(uniqueParents.containsKey(parent))) {\n\t\t\tuniqueParents.put(parent, parent);\n\t\t}\n\t}\n\tfor (var q = 0; q < parents.length; q++) {\n\t\tparents[q] = uniqueParents.get(parents[q]);\n\t}\n}\n\nfunction getCachedPredictionContext(context, contextCache, visited) {\n\tif (context.isEmpty()) {\n\t\treturn context;\n\t}\n\tvar existing = visited.get(context) || null;\n\tif (existing !== null) {\n\t\treturn existing;\n\t}\n\texisting = contextCache.get(context);\n\tif (existing !== null) {\n\t\tvisited.put(context, existing);\n\t\treturn existing;\n\t}\n\tvar changed = false;\n\tvar parents = [];\n\tfor (var i = 0; i < parents.length; i++) {\n\t\tvar parent = getCachedPredictionContext(context.getParent(i), contextCache, visited);\n\t\tif (changed || parent !== context.getParent(i)) {\n\t\t\tif (!changed) {\n\t\t\t\tparents = [];\n\t\t\t\tfor (var j = 0; j < context.length; j++) {\n\t\t\t\t\tparents[j] = context.getParent(j);\n\t\t\t\t}\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\tparents[i] = parent;\n\t\t}\n\t}\n\tif (!changed) {\n\t\tcontextCache.add(context);\n\t\tvisited.put(context, context);\n\t\treturn context;\n\t}\n\tvar updated = null;\n\tif (parents.length === 0) {\n\t\tupdated = PredictionContext.EMPTY;\n\t} else if (parents.length === 1) {\n\t\tupdated = SingletonPredictionContext.create(parents[0], context\n\t\t\t\t.getReturnState(0));\n\t} else {\n\t\tupdated = new ArrayPredictionContext(parents, context.returnStates);\n\t}\n\tcontextCache.add(updated);\n\tvisited.put(updated, updated);\n\tvisited.put(context, updated);\n\n\treturn updated;\n}\n\n// ter's recursive version of Sam's getAllNodes()\nfunction getAllContextNodes(context, nodes, visited) {\n\tif (nodes === null) {\n\t\tnodes = [];\n\t\treturn getAllContextNodes(context, nodes, visited);\n\t} else if (visited === null) {\n\t\tvisited = new Map();\n\t\treturn getAllContextNodes(context, nodes, visited);\n\t} else {\n\t\tif (context === null || visited.containsKey(context)) {\n\t\t\treturn nodes;\n\t\t}\n\t\tvisited.put(context, context);\n\t\tnodes.push(context);\n\t\tfor (var i = 0; i < context.length; i++) {\n\t\t\tgetAllContextNodes(context.getParent(i), nodes, visited);\n\t\t}\n\t\treturn nodes;\n\t}\n}\n\nexports.merge = merge;\nexports.PredictionContext = PredictionContext;\nexports.PredictionContextCache = PredictionContextCache;\nexports.SingletonPredictionContext = SingletonPredictionContext;\nexports.predictionContextFromRuleContext = predictionContextFromRuleContext;\nexports.getCachedPredictionContext = getCachedPredictionContext;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L1ByZWRpY3Rpb25Db250ZXh0LmpzPzBkZTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLEdBQWU7QUFDekMsV0FBVyxtQkFBTyxDQUFDLEdBQVM7QUFDNUIsVUFBVSxtQkFBTyxDQUFDLEdBQVM7O0FBRTNCO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLFFBQVE7QUFDdkIsSUFBSSxjQUFjO0FBQ2xCO0FBQ0E7O0FBRUEsZUFBZSxRQUFRLHlDQUF5QztBQUNoRSwyQkFBMkIsb0JBQW9CO0FBQy9DLElBQUksUUFBUSxJQUFJLDJCQUEyQjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMENBQTBDLHdCQUF3QjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbURBQW1ELEVBQUU7QUFDcEUsa0JBQWtCO0FBQ2xCO0FBQ0Esa0JBQWtCLE9BQU8sRUFBRSxnQkFBZ0I7QUFDM0MsV0FBVywyQ0FBMkMsUUFBUTtBQUM5RCxhQUFhO0FBQ2I7QUFDQTtBQUNBLGtCQUFrQixPQUFPLEVBQUUsZ0JBQWdCO0FBQzNDLFdBQVcsMkNBQTJDLFFBQVE7QUFDOUQsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQSxXQUFXLDJDQUEyQyxZQUFZO0FBQ2xFLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsY0FBYztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isd0JBQXdCO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0YsZUFBZTtBQUNmLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLGNBQWMsMEJBQTBCLGNBQWM7QUFDaEU7QUFDQSxvQkFBb0IsMkJBQTJCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRixlQUFlO0FBQ2YsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLGlCQUFpQiw4QkFBOEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsa0JBQWtCLFlBQVksd0JBQXdCO0FBQ3BFLFdBQVcsY0FBYyxLQUFLLG1CQUFtQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGlDQUFpQztBQUMvQztBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2Qix3QkFBd0I7QUFDeEIsMEJBQTBCLFdBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTztBQUNUO0FBQ0E7QUFDQSx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQyxRQUFRLEtBQUssUUFBUTtBQUMzRCxJQUFJLGNBQWMseUNBQXlDLFFBQVE7QUFDbkUsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQSxPQUFPLGNBQWMsMEJBQTBCLFNBQVMsY0FBYztBQUN0RTtBQUNBO0FBQ0EsT0FBTyxjQUFjLGtCQUFrQixjQUFjO0FBQ3JELElBQUksZUFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixFQUFFLGNBQWM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2Qix3QkFBd0I7QUFDeEIsMEJBQTBCLFdBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0EsRUFBRTtBQUNGO0FBQ0Esa0NBQWtDO0FBQ2xDLEdBQUcsMENBQTBDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRywwQ0FBMEM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLDZCQUE2QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGlDQUFpQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFdBQVc7QUFDWCxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRjtBQUNqRjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxJQUFJLE9BQU87QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixVQUFVO0FBQ1YsR0FBRyxrREFBa0Q7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsR0FBRyxPQUFPO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsaUJBQWlCLDJCQUEyQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsZ0NBQWdDO0FBQ2hFLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxlQUFlLFlBQVk7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyODcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUnVsZUNvbnRleHQnKS5SdWxlQ29udGV4dDtcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9VdGlscycpLkhhc2g7XG52YXIgTWFwID0gcmVxdWlyZSgnLi9VdGlscycpLk1hcDtcblxuZnVuY3Rpb24gUHJlZGljdGlvbkNvbnRleHQoY2FjaGVkSGFzaENvZGUpIHtcblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IGNhY2hlZEhhc2hDb2RlO1xufVxuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBsb2NhbCBjb250ZXh0IHByZWRpY3Rpb24sIHdoaWNoIG1lYW5zIHdpbGRjYXJkLlxuLy8ge0Bjb2RlLy8reCA9Ly99LlxuLy8gL1xuUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgPSBudWxsO1xuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBhbiBhcnJheSBpbiBmdWxsIGNvbnRleHQgbW9kZSwgd2hlbiB7QGNvZGUgJH1cbi8vIGRvZXNuJ3QgbWVhbiB3aWxkY2FyZDoge0Bjb2RlICQgKyB4ID0gWyQseF19LiBIZXJlLFxuLy8ge0Bjb2RlICR9ID0ge0BsaW5rIC8vRU1QVFlfUkVUVVJOX1NUQVRFfS5cbi8vIC9cblByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSA9IDB4N0ZGRkZGRkY7XG5cblByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudCA9IDE7XG5QcmVkaWN0aW9uQ29udGV4dC5pZCA9IFByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudDtcblxuLy8gU3RvcmVzIHRoZSBjb21wdXRlZCBoYXNoIGNvZGUgb2YgdGhpcyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9LiBUaGUgaGFzaFxuLy8gY29kZSBpcyBjb21wdXRlZCBpbiBwYXJ0cyB0byBtYXRjaCB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZSBhbGdvcml0aG0uXG4vL1xuLy8gPHByZT5cbi8vIHByaXZhdGUgaW50IHJlZmVyZW5jZUhhc2hDb2RlKCkge1xuLy8gaW50IGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vaW5pdGlhbGl6ZSBNdXJtdXJIYXNoLmluaXRpYWxpemV9KHtAbGlua1xuLy8gLy9JTklUSUFMX0hBU0h9KTtcbi8vXG4vLyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IHtAbGluayAvL3NpemUoKX07IGkrKykge1xuLy8gaGFzaCA9IHtAbGluayBNdXJtdXJIYXNoLy91cGRhdGUgTXVybXVySGFzaC51cGRhdGV9KGhhc2gsIHtAbGluayAvL2dldFBhcmVudFxuLy8gZ2V0UGFyZW50fShpKSk7XG4vLyB9XG4vL1xuLy8gZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB7QGxpbmsgLy9zaXplKCl9OyBpKyspIHtcbi8vIGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vdXBkYXRlIE11cm11ckhhc2gudXBkYXRlfShoYXNoLCB7QGxpbmtcbi8vIC8vZ2V0UmV0dXJuU3RhdGUgZ2V0UmV0dXJuU3RhdGV9KGkpKTtcbi8vIH1cbi8vXG4vLyBoYXNoID0ge0BsaW5rIE11cm11ckhhc2gvL2ZpbmlzaCBNdXJtdXJIYXNoLmZpbmlzaH0oaGFzaCwgMi8vIHtAbGlua1xuLy8gLy9zaXplKCl9KTtcbi8vIHJldHVybiBoYXNoO1xuLy8gfVxuLy8gPC9wcmU+XG4vLyAvXG5cbi8vIFRoaXMgbWVhbnMgb25seSB0aGUge0BsaW5rIC8vRU1QVFl9IGNvbnRleHQgaXMgaW4gc2V0LlxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmhhc0VtcHR5UGF0aCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5nZXRSZXR1cm5TdGF0ZSh0aGlzLmxlbmd0aCAtIDEpID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEU7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVkSGFzaENvZGU7XG59O1xuXG5cblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmNhY2hlZEhhc2hDb2RlKTtcbn07XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlSGFzaFN0cmluZyhwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdHJldHVybiBcIlwiICsgcGFyZW50ICsgcmV0dXJuU3RhdGU7XG59XG4qL1xuXG4vLyBVc2VkIHRvIGNhY2hlIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cy4gSXRzIHVzZWQgZm9yIHRoZSBzaGFyZWRcbi8vIGNvbnRleHQgY2FzaCBhc3NvY2lhdGVkIHdpdGggY29udGV4dHMgaW4gREZBIHN0YXRlcy4gVGhpcyBjYWNoZVxuLy8gY2FuIGJlIHVzZWQgZm9yIGJvdGggbGV4ZXJzIGFuZCBwYXJzZXJzLlxuXG5mdW5jdGlvbiBQcmVkaWN0aW9uQ29udGV4dENhY2hlKCkge1xuXHR0aGlzLmNhY2hlID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIGEgY29udGV4dCB0byB0aGUgY2FjaGUgYW5kIHJldHVybiBpdC4gSWYgdGhlIGNvbnRleHQgYWxyZWFkeSBleGlzdHMsXG4vLyByZXR1cm4gdGhhdCBvbmUgaW5zdGVhZCBhbmQgZG8gbm90IGFkZCBhIG5ldyBjb250ZXh0IHRvIHRoZSBjYWNoZS5cbi8vIFByb3RlY3Qgc2hhcmVkIGNhY2hlIGZyb20gdW5zYWZlIHRocmVhZCBhY2Nlc3MuXG4vL1xuUHJlZGljdGlvbkNvbnRleHRDYWNoZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oY3R4KSB7XG5cdGlmIChjdHggPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG5cdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9XG5cdHZhciBleGlzdGluZyA9IHRoaXMuY2FjaGUuZ2V0KGN0eCkgfHwgbnVsbDtcblx0aWYgKGV4aXN0aW5nICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHRoaXMuY2FjaGUucHV0KGN0eCwgY3R4KTtcblx0cmV0dXJuIGN0eDtcbn07XG5cblByZWRpY3Rpb25Db250ZXh0Q2FjaGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGN0eCkge1xuXHRyZXR1cm4gdGhpcy5jYWNoZS5nZXQoY3R4KSB8fCBudWxsO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByZWRpY3Rpb25Db250ZXh0Q2FjaGUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLmxlbmd0aDtcblx0fVxufSk7XG5cbmZ1bmN0aW9uIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0dmFyIGhhc2hDb2RlID0gMDtcblx0dmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRpZihwYXJlbnQgIT09IG51bGwpIHtcblx0XHRoYXNoLnVwZGF0ZShwYXJlbnQsIHJldHVyblN0YXRlKTtcblx0fSBlbHNlIHtcblx0XHRoYXNoLnVwZGF0ZSgxKTtcblx0fVxuXHRoYXNoQ29kZSA9IGhhc2guZmluaXNoKCk7XG5cdFByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgaGFzaENvZGUpO1xuXHR0aGlzLnBhcmVudEN0eCA9IHBhcmVudDtcblx0dGhpcy5yZXR1cm5TdGF0ZSA9IHJldHVyblN0YXRlO1xufVxuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSk7XG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29udHJ1Y3RvciA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUgPSBmdW5jdGlvbihwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdGlmIChyZXR1cm5TdGF0ZSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFICYmIHBhcmVudCA9PT0gbnVsbCkge1xuXHRcdC8vIHNvbWVvbmUgY2FuIHBhc3MgaW4gdGhlIGJpdHMgb2YgYW4gYXJyYXkgY3R4IHRoYXQgbWVhbiAkXG5cdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQocGFyZW50LCByZXR1cm5TdGF0ZSk7XG5cdH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cbn0pO1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucGFyZW50Q3R4O1xufTtcblxuU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFJldHVyblN0YXRlID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGU7XG59O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0aGlzLmhhc2hDb2RlKCkgIT09IG90aGVyLmhhc2hDb2RlKCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7IC8vIGNhbid0IGJlIHNhbWUgaWYgaGFzaCBpcyBkaWZmZXJlbnRcblx0fSBlbHNlIHtcblx0XHRpZih0aGlzLnJldHVyblN0YXRlICE9PSBvdGhlci5yZXR1cm5TdGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhcmVudEN0eD09bnVsbClcbiAgICAgICAgICAgIHJldHVybiBvdGhlci5wYXJlbnRDdHg9PW51bGxcblx0XHRlbHNlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRDdHguZXF1YWxzKG90aGVyLnBhcmVudEN0eCk7XG5cdH1cbn07XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdXAgPSB0aGlzLnBhcmVudEN0eCA9PT0gbnVsbCA/IFwiXCIgOiB0aGlzLnBhcmVudEN0eC50b1N0cmluZygpO1xuXHRpZiAodXAubGVuZ3RoID09PSAwKSB7XG5cdFx0aWYgKHRoaXMucmV0dXJuU3RhdGUgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSkge1xuXHRcdFx0cmV0dXJuIFwiJFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIiArIHRoaXMucmV0dXJuU3RhdGU7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiICsgdGhpcy5yZXR1cm5TdGF0ZSArIFwiIFwiICsgdXA7XG5cdH1cbn07XG5cbmZ1bmN0aW9uIEVtcHR5UHJlZGljdGlvbkNvbnRleHQoKSB7XG5cdFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgbnVsbCwgUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUpO1xuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbXB0eVByZWRpY3Rpb25Db250ZXh0O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0cnVlO1xufTtcblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRSZXR1cm5TdGF0ZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnJldHVyblN0YXRlO1xufTtcblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0cmV0dXJuIHRoaXMgPT09IG90aGVyO1xufTtcblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiJFwiO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgPSBuZXcgRW1wdHlQcmVkaWN0aW9uQ29udGV4dCgpO1xuXG5mdW5jdGlvbiBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHJldHVyblN0YXRlcykge1xuXHQvLyBQYXJlbnQgY2FuIGJlIG51bGwgb25seSBpZiBmdWxsIGN0eCBtb2RlIGFuZCB3ZSBtYWtlIGFuIGFycmF5XG5cdC8vIGZyb20ge0BsaW5rIC8vRU1QVFl9IGFuZCBub24tZW1wdHkuIFdlIG1lcmdlIHtAbGluayAvL0VNUFRZfSBieSB1c2luZ1xuXHQvLyBudWxsIHBhcmVudCBhbmRcblx0Ly8gcmV0dXJuU3RhdGUgPT0ge0BsaW5rIC8vRU1QVFlfUkVUVVJOX1NUQVRFfS5cblx0dmFyIGggPSBuZXcgSGFzaCgpO1xuXHRoLnVwZGF0ZShwYXJlbnRzLCByZXR1cm5TdGF0ZXMpO1xuXHR2YXIgaGFzaENvZGUgPSBoLmZpbmlzaCgpO1xuXHRQcmVkaWN0aW9uQ29udGV4dC5jYWxsKHRoaXMsIGhhc2hDb2RlKTtcblx0dGhpcy5wYXJlbnRzID0gcGFyZW50cztcblx0dGhpcy5yZXR1cm5TdGF0ZXMgPSByZXR1cm5TdGF0ZXM7XG5cdHJldHVybiB0aGlzO1xufVxuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlKTtcbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXJyYXlQcmVkaWN0aW9uQ29udGV4dDtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkge1xuXHQvLyBzaW5jZSBFTVBUWV9SRVRVUk5fU1RBVEUgY2FuIG9ubHkgYXBwZWFyIGluIHRoZSBsYXN0IHBvc2l0aW9uLCB3ZVxuXHQvLyBkb24ndCBuZWVkIHRvIHZlcmlmeSB0aGF0IHNpemU9PTFcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzWzBdID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEU7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzLmxlbmd0aDtcblx0fVxufSk7XG5cbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnBhcmVudHNbaW5kZXhdO1xufTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UmV0dXJuU3RhdGUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXNbaW5kZXhdO1xufTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFycmF5UHJlZGljdGlvbkNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMuaGFzaENvZGUoKSAhPT0gb3RoZXIuaGFzaENvZGUoKSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gY2FuJ3QgYmUgc2FtZSBpZiBoYXNoIGlzIGRpZmZlcmVudFxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0aGlzLnJldHVyblN0YXRlcyA9PT0gb3RoZXIucmV0dXJuU3RhdGVzICYmXG5cdFx0XHRcdHRoaXMucGFyZW50cyA9PT0gb3RoZXIucGFyZW50cztcblx0fVxufTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0cmV0dXJuIFwiW11cIjtcblx0fSBlbHNlIHtcblx0XHR2YXIgcyA9IFwiW1wiO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yZXR1cm5TdGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRzID0gcyArIFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnJldHVyblN0YXRlc1tpXSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG5cdFx0XHRcdHMgPSBzICsgXCIkXCI7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0cyA9IHMgKyB0aGlzLnJldHVyblN0YXRlc1tpXTtcblx0XHRcdGlmICh0aGlzLnBhcmVudHNbaV0gIT09IG51bGwpIHtcblx0XHRcdFx0cyA9IHMgKyBcIiBcIiArIHRoaXMucGFyZW50c1tpXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHMgPSBzICsgXCJudWxsXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzICsgXCJdXCI7XG5cdH1cbn07XG5cbi8vIENvbnZlcnQgYSB7QGxpbmsgUnVsZUNvbnRleHR9IHRyZWUgdG8gYSB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IGdyYXBoLlxuLy8gUmV0dXJuIHtAbGluayAvL0VNUFRZfSBpZiB7QGNvZGUgb3V0ZXJDb250ZXh0fSBpcyBlbXB0eSBvciBudWxsLlxuLy8gL1xuZnVuY3Rpb24gcHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQoYXRuLCBvdXRlckNvbnRleHQpIHtcblx0aWYgKG91dGVyQ29udGV4dCA9PT0gdW5kZWZpbmVkIHx8IG91dGVyQ29udGV4dCA9PT0gbnVsbCkge1xuXHRcdG91dGVyQ29udGV4dCA9IFJ1bGVDb250ZXh0LkVNUFRZO1xuXHR9XG5cdC8vIGlmIHdlIGFyZSBpbiBSdWxlQ29udGV4dCBvZiBzdGFydCBydWxlLCBzLCB0aGVuIFByZWRpY3Rpb25Db250ZXh0XG5cdC8vIGlzIEVNUFRZLiBOb2JvZHkgY2FsbGVkIHVzLiAoaWYgd2UgYXJlIGVtcHR5LCByZXR1cm4gZW1wdHkpXG5cdGlmIChvdXRlckNvbnRleHQucGFyZW50Q3R4ID09PSBudWxsIHx8IG91dGVyQ29udGV4dCA9PT0gUnVsZUNvbnRleHQuRU1QVFkpIHtcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH1cblx0Ly8gSWYgd2UgaGF2ZSBhIHBhcmVudCwgY29udmVydCBpdCB0byBhIFByZWRpY3Rpb25Db250ZXh0IGdyYXBoXG5cdHZhciBwYXJlbnQgPSBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChhdG4sIG91dGVyQ29udGV4dC5wYXJlbnRDdHgpO1xuXHR2YXIgc3RhdGUgPSBhdG4uc3RhdGVzW291dGVyQ29udGV4dC5pbnZva2luZ1N0YXRlXTtcblx0dmFyIHRyYW5zaXRpb24gPSBzdGF0ZS50cmFuc2l0aW9uc1swXTtcblx0cmV0dXJuIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShwYXJlbnQsIHRyYW5zaXRpb24uZm9sbG93U3RhdGUuc3RhdGVOdW1iZXIpO1xufVxuLypcbmZ1bmN0aW9uIGNhbGN1bGF0ZUxpc3RzSGFzaFN0cmluZyhwYXJlbnRzLCByZXR1cm5TdGF0ZXMpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHRwYXJlbnRzLm1hcChmdW5jdGlvbihwKSB7XG5cdFx0cyA9IHMgKyBwO1xuXHR9KTtcblx0cmV0dXJuU3RhdGVzLm1hcChmdW5jdGlvbihyKSB7XG5cdFx0cyA9IHMgKyByO1xuXHR9KTtcblx0cmV0dXJuIHM7XG59XG4qL1xuZnVuY3Rpb24gbWVyZ2UoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpIHtcblx0Ly8gc2hhcmUgc2FtZSBncmFwaCBpZiBib3RoIHNhbWVcblx0aWYgKGEgPT09IGIpIHtcblx0XHRyZXR1cm4gYTtcblx0fVxuXHRpZiAoYSBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ICYmIGIgaW5zdGFuY2VvZiBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdHJldHVybiBtZXJnZVNpbmdsZXRvbnMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHR9XG5cdC8vIEF0IGxlYXN0IG9uZSBvZiBhIG9yIGIgaXMgYXJyYXlcblx0Ly8gSWYgb25lIGlzICQgYW5kIHJvb3RJc1dpbGRjYXJkLCByZXR1cm4gJCBhcy8vIHdpbGRjYXJkXG5cdGlmIChyb290SXNXaWxkY2FyZCkge1xuXHRcdGlmIChhIGluc3RhbmNlb2YgRW1wdHlQcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIGE7XG5cdFx0fVxuXHRcdGlmIChiIGluc3RhbmNlb2YgRW1wdHlQcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIGI7XG5cdFx0fVxuXHR9XG5cdC8vIGNvbnZlcnQgc2luZ2xldG9uIHNvIGJvdGggYXJlIGFycmF5cyB0byBub3JtYWxpemVcblx0aWYgKGEgaW5zdGFuY2VvZiBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdGEgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChbYS5nZXRQYXJlbnQoKV0sIFthLnJldHVyblN0YXRlXSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdGIgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChbYi5nZXRQYXJlbnQoKV0sIFtiLnJldHVyblN0YXRlXSk7XG5cdH1cblx0cmV0dXJuIG1lcmdlQXJyYXlzKGEsIGIsIHJvb3RJc1dpbGRjYXJkLCBtZXJnZUNhY2hlKTtcbn1cblxuLy9cbi8vIE1lcmdlIHR3byB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9IGluc3RhbmNlcy5cbi8vXG4vLyA8cD5TdGFjayB0b3BzIGVxdWFsLCBwYXJlbnRzIG1lcmdlIGlzIHNhbWU7IHJldHVybiBsZWZ0IGdyYXBoLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfU2FtZVJvb3RTYW1lUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+U2FtZSBzdGFjayB0b3AsIHBhcmVudHMgZGlmZmVyOyBtZXJnZSBwYXJlbnRzIGdpdmluZyBhcnJheSBub2RlLCB0aGVuXG4vLyByZW1haW5kZXJzIG9mIHRob3NlIGdyYXBocy4gQSBuZXcgcm9vdCBub2RlIGlzIGNyZWF0ZWQgdG8gcG9pbnQgdG8gdGhlXG4vLyBtZXJnZWQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL1NpbmdsZXRvbk1lcmdlX1NhbWVSb290RGlmZlBhci5zdmdcIlxuLy8gdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPkRpZmZlcmVudCBzdGFjayB0b3BzIHBvaW50aW5nIHRvIHNhbWUgcGFyZW50LiBNYWtlIGFycmF5IG5vZGUgZm9yIHRoZVxuLy8gcm9vdCB3aGVyZSBib3RoIGVsZW1lbnQgaW4gdGhlIHJvb3QgcG9pbnQgdG8gdGhlIHNhbWUgKG9yaWdpbmFsKVxuLy8gcGFyZW50Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfRGlmZlJvb3RTYW1lUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RGlmZmVyZW50IHN0YWNrIHRvcHMgcG9pbnRpbmcgdG8gZGlmZmVyZW50IHBhcmVudHMuIE1ha2UgYXJyYXkgbm9kZSBmb3Jcbi8vIHRoZSByb290IHdoZXJlIGVhY2ggZWxlbWVudCBwb2ludHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JpZ2luYWxcbi8vIHBhcmVudC48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL1NpbmdsZXRvbk1lcmdlX0RpZmZSb290RGlmZlBhci5zdmdcIlxuLy8gdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIEBwYXJhbSBhIHRoZSBmaXJzdCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gYiB0aGUgc2Vjb25kIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSByb290SXNXaWxkY2FyZCB7QGNvZGUgdHJ1ZX0gaWYgdGhpcyBpcyBhIGxvY2FsLWNvbnRleHQgbWVyZ2UsXG4vLyBvdGhlcndpc2UgZmFsc2UgdG8gaW5kaWNhdGUgYSBmdWxsLWNvbnRleHQgbWVyZ2Vcbi8vIEBwYXJhbSBtZXJnZUNhY2hlXG4vLyAvXG5mdW5jdGlvbiBtZXJnZVNpbmdsZXRvbnMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpIHtcblx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHR2YXIgcHJldmlvdXMgPSBtZXJnZUNhY2hlLmdldChhLCBiKTtcblx0XHRpZiAocHJldmlvdXMgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHR9XG5cdFx0cHJldmlvdXMgPSBtZXJnZUNhY2hlLmdldChiLCBhKTtcblx0XHRpZiAocHJldmlvdXMgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHR9XG5cdH1cblxuXHR2YXIgcm9vdE1lcmdlID0gbWVyZ2VSb290KGEsIGIsIHJvb3RJc1dpbGRjYXJkKTtcblx0aWYgKHJvb3RNZXJnZSAhPT0gbnVsbCkge1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCByb290TWVyZ2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gcm9vdE1lcmdlO1xuXHR9XG5cdGlmIChhLnJldHVyblN0YXRlID09PSBiLnJldHVyblN0YXRlKSB7XG5cdFx0dmFyIHBhcmVudCA9IG1lcmdlKGEucGFyZW50Q3R4LCBiLnBhcmVudEN0eCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHRcdC8vIGlmIHBhcmVudCBpcyBzYW1lIGFzIGV4aXN0aW5nIGEgb3IgYiBwYXJlbnQgb3IgcmVkdWNlZCB0byBhIHBhcmVudCxcblx0XHQvLyByZXR1cm4gaXRcblx0XHRpZiAocGFyZW50ID09PSBhLnBhcmVudEN0eCkge1xuXHRcdFx0cmV0dXJuIGE7IC8vIGF4ICsgYnggPSBheCwgaWYgYT1iXG5cdFx0fVxuXHRcdGlmIChwYXJlbnQgPT09IGIucGFyZW50Q3R4KSB7XG5cdFx0XHRyZXR1cm4gYjsgLy8gYXggKyBieCA9IGJ4LCBpZiBhPWJcblx0XHR9XG5cdFx0Ly8gZWxzZTogYXggKyBheSA9IGEnW3gseV1cblx0XHQvLyBtZXJnZSBwYXJlbnRzIHggYW5kIHksIGdpdmluZyBhcnJheSBub2RlIHdpdGggeCx5IHRoZW4gcmVtYWluZGVyc1xuXHRcdC8vIG9mIHRob3NlIGdyYXBocy4gZHVwIGEsIGEnIHBvaW50cyBhdCBtZXJnZWQgYXJyYXlcblx0XHQvLyBuZXcgam9pbmVkIHBhcmVudCBzbyBjcmVhdGUgbmV3IHNpbmdsZXRvbiBwb2ludGluZyB0byBpdCwgYSdcblx0XHR2YXIgc3BjID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKHBhcmVudCwgYS5yZXR1cm5TdGF0ZSk7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIHNwYyk7XG5cdFx0fVxuXHRcdHJldHVybiBzcGM7XG5cdH0gZWxzZSB7IC8vIGEgIT0gYiBwYXlsb2FkcyBkaWZmZXJcblx0XHQvLyBzZWUgaWYgd2UgY2FuIGNvbGxhcHNlIHBhcmVudHMgZHVlIHRvICQreCBwYXJlbnRzIGlmIGxvY2FsIGN0eFxuXHRcdHZhciBzaW5nbGVQYXJlbnQgPSBudWxsO1xuXHRcdGlmIChhID09PSBiIHx8IChhLnBhcmVudEN0eCAhPT0gbnVsbCAmJiBhLnBhcmVudEN0eCA9PT0gYi5wYXJlbnRDdHgpKSB7IC8vIGF4ICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBieCA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gW2EsYl14XG5cdFx0XHRzaW5nbGVQYXJlbnQgPSBhLnBhcmVudEN0eDtcblx0XHR9XG5cdFx0aWYgKHNpbmdsZVBhcmVudCAhPT0gbnVsbCkgeyAvLyBwYXJlbnRzIGFyZSBzYW1lXG5cdFx0XHQvLyBzb3J0IHBheWxvYWRzIGFuZCB1c2Ugc2FtZSBwYXJlbnRcblx0XHRcdHZhciBwYXlsb2FkcyA9IFsgYS5yZXR1cm5TdGF0ZSwgYi5yZXR1cm5TdGF0ZSBdO1xuXHRcdFx0aWYgKGEucmV0dXJuU3RhdGUgPiBiLnJldHVyblN0YXRlKSB7XG5cdFx0XHRcdHBheWxvYWRzWzBdID0gYi5yZXR1cm5TdGF0ZTtcblx0XHRcdFx0cGF5bG9hZHNbMV0gPSBhLnJldHVyblN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHBhcmVudHMgPSBbIHNpbmdsZVBhcmVudCwgc2luZ2xlUGFyZW50IF07XG5cdFx0XHR2YXIgYXBjID0gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYXBjKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcGM7XG5cdFx0fVxuXHRcdC8vIHBhcmVudHMgZGlmZmVyIGFuZCBjYW4ndCBtZXJnZSB0aGVtLiBKdXN0IHBhY2sgdG9nZXRoZXJcblx0XHQvLyBpbnRvIGFycmF5OyBjYW4ndCBtZXJnZS5cblx0XHQvLyBheCArIGJ5ID0gW2F4LGJ5XVxuXHRcdHZhciBwYXlsb2FkcyA9IFsgYS5yZXR1cm5TdGF0ZSwgYi5yZXR1cm5TdGF0ZSBdO1xuXHRcdHZhciBwYXJlbnRzID0gWyBhLnBhcmVudEN0eCwgYi5wYXJlbnRDdHggXTtcblx0XHRpZiAoYS5yZXR1cm5TdGF0ZSA+IGIucmV0dXJuU3RhdGUpIHsgLy8gc29ydCBieSBwYXlsb2FkXG5cdFx0XHRwYXlsb2Fkc1swXSA9IGIucmV0dXJuU3RhdGU7XG5cdFx0XHRwYXlsb2Fkc1sxXSA9IGEucmV0dXJuU3RhdGU7XG5cdFx0XHRwYXJlbnRzID0gWyBiLnBhcmVudEN0eCwgYS5wYXJlbnRDdHggXTtcblx0XHR9XG5cdFx0dmFyIGFfID0gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhXyk7XG5cdFx0fVxuXHRcdHJldHVybiBhXztcblx0fVxufVxuXG4vL1xuLy8gSGFuZGxlIGNhc2Ugd2hlcmUgYXQgbGVhc3Qgb25lIG9mIHtAY29kZSBhfSBvciB7QGNvZGUgYn0gaXNcbi8vIHtAbGluayAvL0VNUFRZfS4gSW4gdGhlIGZvbGxvd2luZyBkaWFncmFtcywgdGhlIHN5bWJvbCB7QGNvZGUgJH0gaXMgdXNlZFxuLy8gdG8gcmVwcmVzZW50IHtAbGluayAvL0VNUFRZfS5cbi8vXG4vLyA8aDI+TG9jYWwtQ29udGV4dCBNZXJnZXM8L2gyPlxuLy9cbi8vIDxwPlRoZXNlIGxvY2FsLWNvbnRleHQgbWVyZ2Ugb3BlcmF0aW9ucyBhcmUgdXNlZCB3aGVuIHtAY29kZSByb290SXNXaWxkY2FyZH1cbi8vIGlzIHRydWUuPC9wPlxuLy9cbi8vIDxwPntAbGluayAvL0VNUFRZfSBpcyBzdXBlcnNldCBvZiBhbnkgZ3JhcGg7IHJldHVybiB7QGxpbmsgLy9FTVBUWX0uPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0VtcHR5Um9vdC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+e0BsaW5rIC8vRU1QVFl9IGFuZCBhbnl0aGluZyBpcyB7QGNvZGUgLy9FTVBUWX0sIHNvIG1lcmdlZCBwYXJlbnQgaXNcbi8vIHtAY29kZSAvL0VNUFRZfTsgcmV0dXJuIGxlZnQgZ3JhcGguPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0VtcHR5UGFyZW50LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TcGVjaWFsIGNhc2Ugb2YgbGFzdCBtZXJnZSBpZiBsb2NhbCBjb250ZXh0Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvTG9jYWxNZXJnZV9EaWZmUm9vdHMuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxoMj5GdWxsLUNvbnRleHQgTWVyZ2VzPC9oMj5cbi8vXG4vLyA8cD5UaGVzZSBmdWxsLWNvbnRleHQgbWVyZ2Ugb3BlcmF0aW9ucyBhcmUgdXNlZCB3aGVuIHtAY29kZSByb290SXNXaWxkY2FyZH1cbi8vIGlzIGZhbHNlLjwvcD5cbi8vXG4vLyA8cD48ZW1iZWQgc3JjPVwiaW1hZ2VzL0Z1bGxNZXJnZV9FbXB0eVJvb3RzLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5NdXN0IGtlZXAgYWxsIGNvbnRleHRzOyB7QGxpbmsgLy9FTVBUWX0gaW4gYXJyYXkgaXMgYSBzcGVjaWFsIHZhbHVlIChhbmRcbi8vIG51bGwgcGFyZW50KS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Z1bGxNZXJnZV9FbXB0eVJvb3Quc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPjxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX1NhbWVSb290LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyBAcGFyYW0gYSB0aGUgZmlyc3Qge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fVxuLy8gQHBhcmFtIGIgdGhlIHNlY29uZCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gcm9vdElzV2lsZGNhcmQge0Bjb2RlIHRydWV9IGlmIHRoaXMgaXMgYSBsb2NhbC1jb250ZXh0IG1lcmdlLFxuLy8gb3RoZXJ3aXNlIGZhbHNlIHRvIGluZGljYXRlIGEgZnVsbC1jb250ZXh0IG1lcmdlXG4vLyAvXG5mdW5jdGlvbiBtZXJnZVJvb3QoYSwgYiwgcm9vdElzV2lsZGNhcmQpIHtcblx0aWYgKHJvb3RJc1dpbGRjYXJkKSB7XG5cdFx0aWYgKGEgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG5cdFx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7IC8vIC8vICsgYiA9Ly9cblx0XHR9XG5cdFx0aWYgKGIgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG5cdFx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7IC8vIGEgKy8vID0vL1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoYSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgJiYgYiA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gJCArICQgPSAkXG5cdFx0fSBlbHNlIGlmIChhID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkgeyAvLyAkICsgeCA9IFskLHhdXG5cdFx0XHR2YXIgcGF5bG9hZHMgPSBbIGIucmV0dXJuU3RhdGUsXG5cdFx0XHRcdFx0UHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFIF07XG5cdFx0XHR2YXIgcGFyZW50cyA9IFsgYi5wYXJlbnRDdHgsIG51bGwgXTtcblx0XHRcdHJldHVybiBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0fSBlbHNlIGlmIChiID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkgeyAvLyB4ICsgJCA9IFskLHhdICgkIGlzIGFsd2F5cyBmaXJzdCBpZiBwcmVzZW50KVxuXHRcdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgXTtcblx0XHRcdHZhciBwYXJlbnRzID0gWyBhLnBhcmVudEN0eCwgbnVsbCBdO1xuXHRcdFx0cmV0dXJuIG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHBheWxvYWRzKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbi8vXG4vLyBNZXJnZSB0d28ge0BsaW5rIEFycmF5UHJlZGljdGlvbkNvbnRleHR9IGluc3RhbmNlcy5cbi8vXG4vLyA8cD5EaWZmZXJlbnQgdG9wcywgZGlmZmVyZW50IHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX0RpZmZUb3BEaWZmUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBzYW1lIHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wU2FtZVBhci5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+U2hhcmVkIHRvcCwgZGlmZmVyZW50IHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wRGlmZlBhci5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+U2hhcmVkIHRvcCwgYWxsIHNoYXJlZCBwYXJlbnRzLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQXJyYXlNZXJnZV9TaGFyZVRvcFNoYXJlUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RXF1YWwgdG9wcywgbWVyZ2UgcGFyZW50cyBhbmQgcmVkdWNlIHRvcCB0b1xuLy8ge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfRXF1YWxUb3Auc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy8gL1xuZnVuY3Rpb24gbWVyZ2VBcnJheXMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpIHtcblx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHR2YXIgcHJldmlvdXMgPSBtZXJnZUNhY2hlLmdldChhLCBiKTtcblx0XHRpZiAocHJldmlvdXMgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHR9XG5cdFx0cHJldmlvdXMgPSBtZXJnZUNhY2hlLmdldChiLCBhKTtcblx0XHRpZiAocHJldmlvdXMgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHR9XG5cdH1cblx0Ly8gbWVyZ2Ugc29ydGVkIHBheWxvYWRzIGEgKyBiID0+IE1cblx0dmFyIGkgPSAwOyAvLyB3YWxrcyBhXG5cdHZhciBqID0gMDsgLy8gd2Fsa3MgYlxuXHR2YXIgayA9IDA7IC8vIHdhbGtzIHRhcmdldCBNIGFycmF5XG5cblx0dmFyIG1lcmdlZFJldHVyblN0YXRlcyA9IFtdO1xuXHR2YXIgbWVyZ2VkUGFyZW50cyA9IFtdO1xuXHQvLyB3YWxrIGFuZCBtZXJnZSB0byB5aWVsZCBtZXJnZWRQYXJlbnRzLCBtZXJnZWRSZXR1cm5TdGF0ZXNcblx0d2hpbGUgKGkgPCBhLnJldHVyblN0YXRlcy5sZW5ndGggJiYgaiA8IGIucmV0dXJuU3RhdGVzLmxlbmd0aCkge1xuXHRcdHZhciBhX3BhcmVudCA9IGEucGFyZW50c1tpXTtcblx0XHR2YXIgYl9wYXJlbnQgPSBiLnBhcmVudHNbal07XG5cdFx0aWYgKGEucmV0dXJuU3RhdGVzW2ldID09PSBiLnJldHVyblN0YXRlc1tqXSkge1xuXHRcdFx0Ly8gc2FtZSBwYXlsb2FkIChzdGFjayB0b3BzIGFyZSBlcXVhbCksIG11c3QgeWllbGQgbWVyZ2VkIHNpbmdsZXRvblxuXHRcdFx0dmFyIHBheWxvYWQgPSBhLnJldHVyblN0YXRlc1tpXTtcblx0XHRcdC8vICQrJCA9ICRcblx0XHRcdHZhciBib3RoRG9sbGFycyA9IHBheWxvYWQgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSAmJlxuXHRcdFx0XHRcdGFfcGFyZW50ID09PSBudWxsICYmIGJfcGFyZW50ID09PSBudWxsO1xuXHRcdFx0dmFyIGF4X2F4ID0gKGFfcGFyZW50ICE9PSBudWxsICYmIGJfcGFyZW50ICE9PSBudWxsICYmIGFfcGFyZW50ID09PSBiX3BhcmVudCk7IC8vIGF4K2F4XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBheFxuXHRcdFx0aWYgKGJvdGhEb2xsYXJzIHx8IGF4X2F4KSB7XG5cdFx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBhX3BhcmVudDsgLy8gY2hvb3NlIGxlZnRcblx0XHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gcGF5bG9hZDtcblx0XHRcdH0gZWxzZSB7IC8vIGF4K2F5IC0+IGEnW3gseV1cblx0XHRcdFx0dmFyIG1lcmdlZFBhcmVudCA9IG1lcmdlKGFfcGFyZW50LCBiX3BhcmVudCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHRcdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gbWVyZ2VkUGFyZW50O1xuXHRcdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBwYXlsb2FkO1xuXHRcdFx0fVxuXHRcdFx0aSArPSAxOyAvLyBob3Agb3ZlciBsZWZ0IG9uZSBhcyB1c3VhbFxuXHRcdFx0aiArPSAxOyAvLyBidXQgYWxzbyBza2lwIG9uZSBpbiByaWdodCBzaWRlIHNpbmNlIHdlIG1lcmdlXG5cdFx0fSBlbHNlIGlmIChhLnJldHVyblN0YXRlc1tpXSA8IGIucmV0dXJuU3RhdGVzW2pdKSB7IC8vIGNvcHkgYVtpXSB0byBNXG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYV9wYXJlbnQ7XG5cdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBhLnJldHVyblN0YXRlc1tpXTtcblx0XHRcdGkgKz0gMTtcblx0XHR9IGVsc2UgeyAvLyBiID4gYSwgY29weSBiW2pdIHRvIE1cblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBiX3BhcmVudDtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGIucmV0dXJuU3RhdGVzW2pdO1xuXHRcdFx0aiArPSAxO1xuXHRcdH1cblx0XHRrICs9IDE7XG5cdH1cblx0Ly8gY29weSBvdmVyIGFueSBwYXlsb2FkcyByZW1haW5pbmcgaW4gZWl0aGVyIGFycmF5XG5cdGlmIChpIDwgYS5yZXR1cm5TdGF0ZXMubGVuZ3RoKSB7XG5cdFx0Zm9yICh2YXIgcCA9IGk7IHAgPCBhLnJldHVyblN0YXRlcy5sZW5ndGg7IHArKykge1xuXHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGEucGFyZW50c1twXTtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGEucmV0dXJuU3RhdGVzW3BdO1xuXHRcdFx0ayArPSAxO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBwID0gajsgcCA8IGIucmV0dXJuU3RhdGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYi5wYXJlbnRzW3BdO1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYi5yZXR1cm5TdGF0ZXNbcF07XG5cdFx0XHRrICs9IDE7XG5cdFx0fVxuXHR9XG5cdC8vIHRyaW0gbWVyZ2VkIGlmIHdlIGNvbWJpbmVkIGEgZmV3IHRoYXQgaGFkIHNhbWUgc3RhY2sgdG9wc1xuXHRpZiAoayA8IG1lcmdlZFBhcmVudHMubGVuZ3RoKSB7IC8vIHdyaXRlIGluZGV4IDwgbGFzdCBwb3NpdGlvbjsgdHJpbVxuXHRcdGlmIChrID09PSAxKSB7IC8vIGZvciBqdXN0IG9uZSBtZXJnZWQgZWxlbWVudCwgcmV0dXJuIHNpbmdsZXRvbiB0b3Bcblx0XHRcdHZhciBhXyA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShtZXJnZWRQYXJlbnRzWzBdLFxuXHRcdFx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1swXSk7XG5cdFx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhXyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYV87XG5cdFx0fVxuXHRcdG1lcmdlZFBhcmVudHMgPSBtZXJnZWRQYXJlbnRzLnNsaWNlKDAsIGspO1xuXHRcdG1lcmdlZFJldHVyblN0YXRlcyA9IG1lcmdlZFJldHVyblN0YXRlcy5zbGljZSgwLCBrKTtcblx0fVxuXG5cdHZhciBNID0gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQobWVyZ2VkUGFyZW50cywgbWVyZ2VkUmV0dXJuU3RhdGVzKTtcblxuXHQvLyBpZiB3ZSBjcmVhdGVkIHNhbWUgYXJyYXkgYXMgYSBvciBiLCByZXR1cm4gdGhhdCBpbnN0ZWFkXG5cdC8vIFRPRE86IHRyYWNrIHdoZXRoZXIgdGhpcyBpcyBwb3NzaWJsZSBhYm92ZSBkdXJpbmcgbWVyZ2Ugc29ydCBmb3Igc3BlZWRcblx0aWYgKE0gPT09IGEpIHtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYSk7XG5cdFx0fVxuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChNID09PSBiKSB7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYjtcblx0fVxuXHRjb21iaW5lQ29tbW9uUGFyZW50cyhtZXJnZWRQYXJlbnRzKTtcblxuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIE0pO1xuXHR9XG5cdHJldHVybiBNO1xufVxuXG4vL1xuLy8gTWFrZSBwYXNzIG92ZXIgYWxsIDxlbT5NPC9lbT4ge0Bjb2RlIHBhcmVudHN9OyBtZXJnZSBhbnkge0Bjb2RlIGVxdWFscygpfVxuLy8gb25lcy5cbi8vIC9cbmZ1bmN0aW9uIGNvbWJpbmVDb21tb25QYXJlbnRzKHBhcmVudHMpIHtcblx0dmFyIHVuaXF1ZVBhcmVudHMgPSBuZXcgTWFwKCk7XG5cblx0Zm9yICh2YXIgcCA9IDA7IHAgPCBwYXJlbnRzLmxlbmd0aDsgcCsrKSB7XG5cdFx0dmFyIHBhcmVudCA9IHBhcmVudHNbcF07XG5cdFx0aWYgKCEodW5pcXVlUGFyZW50cy5jb250YWluc0tleShwYXJlbnQpKSkge1xuXHRcdFx0dW5pcXVlUGFyZW50cy5wdXQocGFyZW50LCBwYXJlbnQpO1xuXHRcdH1cblx0fVxuXHRmb3IgKHZhciBxID0gMDsgcSA8IHBhcmVudHMubGVuZ3RoOyBxKyspIHtcblx0XHRwYXJlbnRzW3FdID0gdW5pcXVlUGFyZW50cy5nZXQocGFyZW50c1txXSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQoY29udGV4dCwgY29udGV4dENhY2hlLCB2aXNpdGVkKSB7XG5cdGlmIChjb250ZXh0LmlzRW1wdHkoKSkge1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cdHZhciBleGlzdGluZyA9IHZpc2l0ZWQuZ2V0KGNvbnRleHQpIHx8IG51bGw7XG5cdGlmIChleGlzdGluZyAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBleGlzdGluZztcblx0fVxuXHRleGlzdGluZyA9IGNvbnRleHRDYWNoZS5nZXQoY29udGV4dCk7XG5cdGlmIChleGlzdGluZyAhPT0gbnVsbCkge1xuXHRcdHZpc2l0ZWQucHV0KGNvbnRleHQsIGV4aXN0aW5nKTtcblx0XHRyZXR1cm4gZXhpc3Rpbmc7XG5cdH1cblx0dmFyIGNoYW5nZWQgPSBmYWxzZTtcblx0dmFyIHBhcmVudHMgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHBhcmVudCA9IGdldENhY2hlZFByZWRpY3Rpb25Db250ZXh0KGNvbnRleHQuZ2V0UGFyZW50KGkpLCBjb250ZXh0Q2FjaGUsIHZpc2l0ZWQpO1xuXHRcdGlmIChjaGFuZ2VkIHx8IHBhcmVudCAhPT0gY29udGV4dC5nZXRQYXJlbnQoaSkpIHtcblx0XHRcdGlmICghY2hhbmdlZCkge1xuXHRcdFx0XHRwYXJlbnRzID0gW107XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgY29udGV4dC5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdHBhcmVudHNbal0gPSBjb250ZXh0LmdldFBhcmVudChqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhcmVudHNbaV0gPSBwYXJlbnQ7XG5cdFx0fVxuXHR9XG5cdGlmICghY2hhbmdlZCkge1xuXHRcdGNvbnRleHRDYWNoZS5hZGQoY29udGV4dCk7XG5cdFx0dmlzaXRlZC5wdXQoY29udGV4dCwgY29udGV4dCk7XG5cdFx0cmV0dXJuIGNvbnRleHQ7XG5cdH1cblx0dmFyIHVwZGF0ZWQgPSBudWxsO1xuXHRpZiAocGFyZW50cy5sZW5ndGggPT09IDApIHtcblx0XHR1cGRhdGVkID0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH0gZWxzZSBpZiAocGFyZW50cy5sZW5ndGggPT09IDEpIHtcblx0XHR1cGRhdGVkID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKHBhcmVudHNbMF0sIGNvbnRleHRcblx0XHRcdFx0LmdldFJldHVyblN0YXRlKDApKTtcblx0fSBlbHNlIHtcblx0XHR1cGRhdGVkID0gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgY29udGV4dC5yZXR1cm5TdGF0ZXMpO1xuXHR9XG5cdGNvbnRleHRDYWNoZS5hZGQodXBkYXRlZCk7XG5cdHZpc2l0ZWQucHV0KHVwZGF0ZWQsIHVwZGF0ZWQpO1xuXHR2aXNpdGVkLnB1dChjb250ZXh0LCB1cGRhdGVkKTtcblxuXHRyZXR1cm4gdXBkYXRlZDtcbn1cblxuLy8gdGVyJ3MgcmVjdXJzaXZlIHZlcnNpb24gb2YgU2FtJ3MgZ2V0QWxsTm9kZXMoKVxuZnVuY3Rpb24gZ2V0QWxsQ29udGV4dE5vZGVzKGNvbnRleHQsIG5vZGVzLCB2aXNpdGVkKSB7XG5cdGlmIChub2RlcyA9PT0gbnVsbCkge1xuXHRcdG5vZGVzID0gW107XG5cdFx0cmV0dXJuIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCk7XG5cdH0gZWxzZSBpZiAodmlzaXRlZCA9PT0gbnVsbCkge1xuXHRcdHZpc2l0ZWQgPSBuZXcgTWFwKCk7XG5cdFx0cmV0dXJuIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGNvbnRleHQgPT09IG51bGwgfHwgdmlzaXRlZC5jb250YWluc0tleShjb250ZXh0KSkge1xuXHRcdFx0cmV0dXJuIG5vZGVzO1xuXHRcdH1cblx0XHR2aXNpdGVkLnB1dChjb250ZXh0LCBjb250ZXh0KTtcblx0XHRub2Rlcy5wdXNoKGNvbnRleHQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0Z2V0QWxsQ29udGV4dE5vZGVzKGNvbnRleHQuZ2V0UGFyZW50KGkpLCBub2RlcywgdmlzaXRlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBub2Rlcztcblx0fVxufVxuXG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0ID0gUHJlZGljdGlvbkNvbnRleHQ7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0Q2FjaGUgPSBQcmVkaWN0aW9uQ29udGV4dENhY2hlO1xuZXhwb3J0cy5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuZXhwb3J0cy5wcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuZXhwb3J0cy5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IGdldENhY2hlZFByZWRpY3Rpb25Db250ZXh0O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///287\n"); /***/ }), /***/ 290: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nvar LL1Analyzer = __webpack_require__(470).LL1Analyzer;\nvar IntervalSet = __webpack_require__(276).IntervalSet;\n\nfunction ATN(grammarType , maxTokenType) {\n\n // Used for runtime deserialization of ATNs from strings///\n // The type of the ATN.\n this.grammarType = grammarType;\n // The maximum value for any symbol recognized by a transition in the ATN.\n this.maxTokenType = maxTokenType;\n this.states = [];\n // Each subrule/rule is a decision point and we must track them so we\n // can go back later and build DFA predictors for them. This includes\n // all the rules, subrules, optional blocks, ()+, ()* etc...\n this.decisionToState = [];\n // Maps from rule index to starting state number.\n this.ruleToStartState = [];\n // Maps from rule index to stop state number.\n this.ruleToStopState = null;\n this.modeNameToStartState = {};\n // For lexer ATNs, this maps the rule index to the resulting token type.\n // For parser ATNs, this maps the rule index to the generated bypass token\n // type if the\n // {@link ATNDeserializationOptions//isGenerateRuleBypassTransitions}\n // deserialization option was specified; otherwise, this is {@code null}.\n this.ruleToTokenType = null;\n // For lexer ATNs, this is an array of {@link LexerAction} objects which may\n // be referenced by action transitions in the ATN.\n this.lexerActions = null;\n this.modeToStartState = [];\n\n return this;\n}\n\n// Compute the set of valid tokens that can occur starting in state {@code s}.\n// If {@code ctx} is null, the set of tokens will not include what can follow\n// the rule surrounding {@code s}. In other words, the set will be\n// restricted to tokens reachable staying within {@code s}'s rule.\nATN.prototype.nextTokensInContext = function(s, ctx) {\n var anal = new LL1Analyzer(this);\n return anal.LOOK(s, null, ctx);\n};\n\n// Compute the set of valid tokens that can occur starting in {@code s} and\n// staying in same rule. {@link Token//EPSILON} is in set if we reach end of\n// rule.\nATN.prototype.nextTokensNoContext = function(s) {\n if (s.nextTokenWithinRule !== null ) {\n return s.nextTokenWithinRule;\n }\n s.nextTokenWithinRule = this.nextTokensInContext(s, null);\n s.nextTokenWithinRule.readOnly = true;\n return s.nextTokenWithinRule;\n};\n\nATN.prototype.nextTokens = function(s, ctx) {\n if ( ctx===undefined ) {\n return this.nextTokensNoContext(s);\n } else {\n return this.nextTokensInContext(s, ctx);\n }\n};\n\nATN.prototype.addState = function( state) {\n if ( state !== null ) {\n state.atn = this;\n state.stateNumber = this.states.length;\n }\n this.states.push(state);\n};\n\nATN.prototype.removeState = function( state) {\n this.states[state.stateNumber] = null; // just free mem, don't shift states in list\n};\n\nATN.prototype.defineDecisionState = function( s) {\n this.decisionToState.push(s);\n s.decision = this.decisionToState.length-1;\n return s.decision;\n};\n\nATN.prototype.getDecisionState = function( decision) {\n if (this.decisionToState.length===0) {\n return null;\n } else {\n return this.decisionToState[decision];\n }\n};\n\n// Computes the set of input symbols which could follow ATN state number\n// {@code stateNumber} in the specified full {@code context}. This method\n// considers the complete parser context, but does not evaluate semantic\n// predicates (i.e. all predicates encountered during the calculation are\n// assumed true). If a path in the ATN exists from the starting state to the\n// {@link RuleStopState} of the outermost context without matching any\n// symbols, {@link Token//EOF} is added to the returned set.\n//\n//

If {@code context} is {@code null}, it is treated as\n// {@link ParserRuleContext//EMPTY}.

\n//\n// @param stateNumber the ATN state number\n// @param context the full parse context\n// @return The set of potentially valid input symbols which could follow the\n// specified state in the specified context.\n// @throws IllegalArgumentException if the ATN does not contain a state with\n// number {@code stateNumber}\nvar Token = __webpack_require__(270).Token;\n\nATN.prototype.getExpectedTokens = function( stateNumber, ctx ) {\n if ( stateNumber < 0 || stateNumber >= this.states.length ) {\n throw(\"Invalid state number.\");\n }\n var s = this.states[stateNumber];\n var following = this.nextTokens(s);\n if (!following.contains(Token.EPSILON)) {\n return following;\n }\n var expected = new IntervalSet();\n expected.addSet(following);\n expected.removeOne(Token.EPSILON);\n while (ctx !== null && ctx.invokingState >= 0 && following.contains(Token.EPSILON)) {\n var invokingState = this.states[ctx.invokingState];\n var rt = invokingState.transitions[0];\n following = this.nextTokens(rt.followState);\n expected.addSet(following);\n expected.removeOne(Token.EPSILON);\n ctx = ctx.parentCtx;\n }\n if (following.contains(Token.EPSILON)) {\n expected.addOne(Token.EOF);\n }\n return expected;\n};\n\nATN.INVALID_ALT_NUMBER = 0;\n\nexports.ATN = ATN;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2F0bi9BVE4uanM/ZjYyNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFrQjtBQUM1QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFrQjs7QUFFNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLDRDQUE0QyxxQkFBcUIsV0FBVztBQUM1RTtBQUNBLDRDQUE0QyxrQkFBa0I7QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscUVBQXFFLFFBQVE7QUFDN0UsUUFBUSxVQUFVO0FBQ2xCLDBCQUEwQixRQUFRO0FBQ2xDLG1EQUFtRCxRQUFRO0FBQzNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtEQUErRCxRQUFRO0FBQ3ZFLDBCQUEwQixxQkFBcUI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxrQkFBa0Isd0JBQXdCLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQSxVQUFVLGNBQWMsS0FBSyxXQUFXO0FBQ3hDLElBQUksK0JBQStCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxZQUFZLG1CQUFPLENBQUMsR0FBWTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiMjkwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgTEwxQW5hbHl6ZXIgPSByZXF1aXJlKCcuLy4uL0xMMUFuYWx5emVyJykuTEwxQW5hbHl6ZXI7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEFUTihncmFtbWFyVHlwZSAsIG1heFRva2VuVHlwZSkge1xuXG4gICAgLy8gVXNlZCBmb3IgcnVudGltZSBkZXNlcmlhbGl6YXRpb24gb2YgQVROcyBmcm9tIHN0cmluZ3MvLy9cbiAgICAvLyBUaGUgdHlwZSBvZiB0aGUgQVROLlxuICAgIHRoaXMuZ3JhbW1hclR5cGUgPSBncmFtbWFyVHlwZTtcbiAgICAvLyBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYW55IHN5bWJvbCByZWNvZ25pemVkIGJ5IGEgdHJhbnNpdGlvbiBpbiB0aGUgQVROLlxuICAgIHRoaXMubWF4VG9rZW5UeXBlID0gbWF4VG9rZW5UeXBlO1xuICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgLy8gRWFjaCBzdWJydWxlL3J1bGUgaXMgYSBkZWNpc2lvbiBwb2ludCBhbmQgd2UgbXVzdCB0cmFjayB0aGVtIHNvIHdlXG4gICAgLy8gIGNhbiBnbyBiYWNrIGxhdGVyIGFuZCBidWlsZCBERkEgcHJlZGljdG9ycyBmb3IgdGhlbS4gIFRoaXMgaW5jbHVkZXNcbiAgICAvLyAgYWxsIHRoZSBydWxlcywgc3VicnVsZXMsIG9wdGlvbmFsIGJsb2NrcywgKCkrLCAoKSogZXRjLi4uXG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUgPSBbXTtcbiAgICAvLyBNYXBzIGZyb20gcnVsZSBpbmRleCB0byBzdGFydGluZyBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdGFydFN0YXRlID0gW107XG4gICAgLy8gTWFwcyBmcm9tIHJ1bGUgaW5kZXggdG8gc3RvcCBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdG9wU3RhdGUgPSBudWxsO1xuICAgIHRoaXMubW9kZU5hbWVUb1N0YXJ0U3RhdGUgPSB7fTtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBtYXBzIHRoZSBydWxlIGluZGV4IHRvIHRoZSByZXN1bHRpbmcgdG9rZW4gdHlwZS5cbiAgICAvLyBGb3IgcGFyc2VyIEFUTnMsIHRoaXMgbWFwcyB0aGUgcnVsZSBpbmRleCB0byB0aGUgZ2VuZXJhdGVkIGJ5cGFzcyB0b2tlblxuICAgIC8vIHR5cGUgaWYgdGhlXG4gICAgLy8ge0BsaW5rIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMvL2lzR2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnN9XG4gICAgLy8gZGVzZXJpYWxpemF0aW9uIG9wdGlvbiB3YXMgc3BlY2lmaWVkOyBvdGhlcndpc2UsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMucnVsZVRvVG9rZW5UeXBlID0gbnVsbDtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBpcyBhbiBhcnJheSBvZiB7QGxpbmsgTGV4ZXJBY3Rpb259IG9iamVjdHMgd2hpY2ggbWF5XG4gICAgLy8gYmUgcmVmZXJlbmNlZCBieSBhY3Rpb24gdHJhbnNpdGlvbnMgaW4gdGhlIEFUTi5cbiAgICB0aGlzLmxleGVyQWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5tb2RlVG9TdGFydFN0YXRlID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIHZhbGlkIHRva2VucyB0aGF0IGNhbiBvY2N1ciBzdGFydGluZyBpbiBzdGF0ZSB7QGNvZGUgc30uXG4vLyAgSWYge0Bjb2RlIGN0eH0gaXMgbnVsbCwgdGhlIHNldCBvZiB0b2tlbnMgd2lsbCBub3QgaW5jbHVkZSB3aGF0IGNhbiBmb2xsb3dcbi8vICB0aGUgcnVsZSBzdXJyb3VuZGluZyB7QGNvZGUgc30uIEluIG90aGVyIHdvcmRzLCB0aGUgc2V0IHdpbGwgYmVcbi8vICByZXN0cmljdGVkIHRvIHRva2VucyByZWFjaGFibGUgc3RheWluZyB3aXRoaW4ge0Bjb2RlIHN9J3MgcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc0luQ29udGV4dCA9IGZ1bmN0aW9uKHMsIGN0eCkge1xuICAgIHZhciBhbmFsID0gbmV3IExMMUFuYWx5emVyKHRoaXMpO1xuICAgIHJldHVybiBhbmFsLkxPT0socywgbnVsbCwgY3R4KTtcbn07XG5cbi8vIENvbXB1dGUgdGhlIHNldCBvZiB2YWxpZCB0b2tlbnMgdGhhdCBjYW4gb2NjdXIgc3RhcnRpbmcgaW4ge0Bjb2RlIHN9IGFuZFxuLy8gc3RheWluZyBpbiBzYW1lIHJ1bGUuIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgaW4gc2V0IGlmIHdlIHJlYWNoIGVuZCBvZlxuLy8gcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc05vQ29udGV4dCA9IGZ1bmN0aW9uKHMpIHtcbiAgICBpZiAocy5uZXh0VG9rZW5XaXRoaW5SdWxlICE9PSBudWxsICkge1xuICAgICAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xuICAgIH1cbiAgICBzLm5leHRUb2tlbldpdGhpblJ1bGUgPSB0aGlzLm5leHRUb2tlbnNJbkNvbnRleHQocywgbnVsbCk7XG4gICAgcy5uZXh0VG9rZW5XaXRoaW5SdWxlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xufTtcblxuQVROLnByb3RvdHlwZS5uZXh0VG9rZW5zID0gZnVuY3Rpb24ocywgY3R4KSB7XG4gICAgaWYgKCBjdHg9PT11bmRlZmluZWQgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbnNOb0NvbnRleHQocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2Vuc0luQ29udGV4dChzLCBjdHgpO1xuICAgIH1cbn07XG5cbkFUTi5wcm90b3R5cGUuYWRkU3RhdGUgPSBmdW5jdGlvbiggc3RhdGUpIHtcbiAgICBpZiAoIHN0YXRlICE9PSBudWxsICkge1xuICAgICAgICBzdGF0ZS5hdG4gPSB0aGlzO1xuICAgICAgICBzdGF0ZS5zdGF0ZU51bWJlciA9IHRoaXMuc3RhdGVzLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZSk7XG59O1xuXG5BVE4ucHJvdG90eXBlLnJlbW92ZVN0YXRlID0gZnVuY3Rpb24oIHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZXNbc3RhdGUuc3RhdGVOdW1iZXJdID0gbnVsbDsgLy8ganVzdCBmcmVlIG1lbSwgZG9uJ3Qgc2hpZnQgc3RhdGVzIGluIGxpc3Rcbn07XG5cbkFUTi5wcm90b3R5cGUuZGVmaW5lRGVjaXNpb25TdGF0ZSA9IGZ1bmN0aW9uKCBzKSB7XG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUucHVzaChzKTtcbiAgICBzLmRlY2lzaW9uID0gdGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoLTE7XG4gICAgcmV0dXJuIHMuZGVjaXNpb247XG59O1xuXG5BVE4ucHJvdG90eXBlLmdldERlY2lzaW9uU3RhdGUgPSBmdW5jdGlvbiggZGVjaXNpb24pIHtcbiAgICBpZiAodGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoPT09MCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNpc2lvblRvU3RhdGVbZGVjaXNpb25dO1xuICAgIH1cbn07XG5cbi8vIENvbXB1dGVzIHRoZSBzZXQgb2YgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgQVROIHN0YXRlIG51bWJlclxuLy8ge0Bjb2RlIHN0YXRlTnVtYmVyfSBpbiB0aGUgc3BlY2lmaWVkIGZ1bGwge0Bjb2RlIGNvbnRleHR9LiBUaGlzIG1ldGhvZFxuLy8gY29uc2lkZXJzIHRoZSBjb21wbGV0ZSBwYXJzZXIgY29udGV4dCwgYnV0IGRvZXMgbm90IGV2YWx1YXRlIHNlbWFudGljXG4vLyBwcmVkaWNhdGVzIChpLmUuIGFsbCBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgY2FsY3VsYXRpb24gYXJlXG4vLyBhc3N1bWVkIHRydWUpLiBJZiBhIHBhdGggaW4gdGhlIEFUTiBleGlzdHMgZnJvbSB0aGUgc3RhcnRpbmcgc3RhdGUgdG8gdGhlXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0gb2YgdGhlIG91dGVybW9zdCBjb250ZXh0IHdpdGhvdXQgbWF0Y2hpbmcgYW55XG4vLyBzeW1ib2xzLCB7QGxpbmsgVG9rZW4vL0VPRn0gaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIHNldC5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY29udGV4dH0gaXMge0Bjb2RlIG51bGx9LCBpdCBpcyB0cmVhdGVkIGFzXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL0VNUFRZfS48L3A+XG4vL1xuLy8gQHBhcmFtIHN0YXRlTnVtYmVyIHRoZSBBVE4gc3RhdGUgbnVtYmVyXG4vLyBAcGFyYW0gY29udGV4dCB0aGUgZnVsbCBwYXJzZSBjb250ZXh0XG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgcG90ZW50aWFsbHkgdmFsaWQgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgdGhlXG4vLyBzcGVjaWZpZWQgc3RhdGUgaW4gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxuLy8gQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEFUTiBkb2VzIG5vdCBjb250YWluIGEgc3RhdGUgd2l0aFxuLy8gbnVtYmVyIHtAY29kZSBzdGF0ZU51bWJlcn1cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcblxuQVROLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCBzdGF0ZU51bWJlciwgY3R4ICkge1xuICAgIGlmICggc3RhdGVOdW1iZXIgPCAwIHx8IHN0YXRlTnVtYmVyID49IHRoaXMuc3RhdGVzLmxlbmd0aCApIHtcbiAgICAgICAgdGhyb3coXCJJbnZhbGlkIHN0YXRlIG51bWJlci5cIik7XG4gICAgfVxuICAgIHZhciBzID0gdGhpcy5zdGF0ZXNbc3RhdGVOdW1iZXJdO1xuICAgIHZhciBmb2xsb3dpbmcgPSB0aGlzLm5leHRUb2tlbnMocyk7XG4gICAgaWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgcmV0dXJuIGZvbGxvd2luZztcbiAgICB9XG4gICAgdmFyIGV4cGVjdGVkID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgZXhwZWN0ZWQuYWRkU2V0KGZvbGxvd2luZyk7XG4gICAgZXhwZWN0ZWQucmVtb3ZlT25lKFRva2VuLkVQU0lMT04pO1xuICAgIHdoaWxlIChjdHggIT09IG51bGwgJiYgY3R4Lmludm9raW5nU3RhdGUgPj0gMCAmJiBmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgdmFyIGludm9raW5nU3RhdGUgPSB0aGlzLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG4gICAgICAgIHZhciBydCA9IGludm9raW5nU3RhdGUudHJhbnNpdGlvbnNbMF07XG4gICAgICAgIGZvbGxvd2luZyA9IHRoaXMubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG4gICAgICAgIGV4cGVjdGVkLmFkZFNldChmb2xsb3dpbmcpO1xuICAgICAgICBleHBlY3RlZC5yZW1vdmVPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgIGN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgfVxuICAgIGlmIChmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgZXhwZWN0ZWQuYWRkT25lKFRva2VuLkVPRik7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RlZDtcbn07XG5cbkFUTi5JTlZBTElEX0FMVF9OVU1CRVIgPSAwO1xuXG5leHBvcnRzLkFUTiA9IEFUTjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n"); /***/ }), /***/ 291: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n// An ATN transition between any two ATN states. Subclasses define\n// atom, set, epsilon, action, predicate, rule transitions.\n//\n//

This is a one way link. It emanates from a state (usually via a list of\n// transitions) and has a target state.

\n//\n//

Since we never have to change the ATN transitions once we construct it,\n// we can fix these transitions as specific classes. The DFA transitions\n// on the other hand need to update the labels as it adds transitions to\n// the states. We'll use the term Edge for the DFA to distinguish them from\n// ATN transitions.

\n\nvar Token = __webpack_require__(270).Token;\nvar Interval = __webpack_require__(276).Interval;\nvar IntervalSet = __webpack_require__(276).IntervalSet;\nvar Predicate = __webpack_require__(302).Predicate;\nvar PrecedencePredicate = __webpack_require__(302).PrecedencePredicate;\n\nfunction Transition (target) {\n // The target of this transition.\n if (target===undefined || target===null) {\n throw \"target cannot be null.\";\n }\n this.target = target;\n // Are we epsilon, action, sempred?\n this.isEpsilon = false;\n this.label = null;\n return this;\n}\n // constants for serialization\nTransition.EPSILON = 1;\nTransition.RANGE = 2;\nTransition.RULE = 3;\nTransition.PREDICATE = 4; // e.g., {isType(input.LT(1))}?\nTransition.ATOM = 5;\nTransition.ACTION = 6;\nTransition.SET = 7; // ~(A|B) or ~atom, wildcard, which convert to next 2\nTransition.NOT_SET = 8;\nTransition.WILDCARD = 9;\nTransition.PRECEDENCE = 10;\n\nTransition.serializationNames = [\n \"INVALID\",\n \"EPSILON\",\n \"RANGE\",\n \"RULE\",\n \"PREDICATE\",\n \"ATOM\",\n \"ACTION\",\n \"SET\",\n \"NOT_SET\",\n \"WILDCARD\",\n \"PRECEDENCE\"\n ];\n\nTransition.serializationTypes = {\n EpsilonTransition: Transition.EPSILON,\n RangeTransition: Transition.RANGE,\n RuleTransition: Transition.RULE,\n PredicateTransition: Transition.PREDICATE,\n AtomTransition: Transition.ATOM,\n ActionTransition: Transition.ACTION,\n SetTransition: Transition.SET,\n NotSetTransition: Transition.NOT_SET,\n WildcardTransition: Transition.WILDCARD,\n PrecedencePredicateTransition: Transition.PRECEDENCE\n };\n\n\n// TODO: make all transitions sets? no, should remove set edges\nfunction AtomTransition(target, label) {\n\tTransition.call(this, target);\n\tthis.label_ = label; // The token type or character value; or, signifies special label.\n this.label = this.makeLabel();\n this.serializationType = Transition.ATOM;\n return this;\n}\n\nAtomTransition.prototype = Object.create(Transition.prototype);\nAtomTransition.prototype.constructor = AtomTransition;\n\nAtomTransition.prototype.makeLabel = function() {\n\tvar s = new IntervalSet();\n s.addOne(this.label_);\n return s;\n};\n\nAtomTransition.prototype.matches = function( symbol, minVocabSymbol, maxVocabSymbol) {\n return this.label_ === symbol;\n};\n\nAtomTransition.prototype.toString = function() {\n\treturn this.label_;\n};\n\nfunction RuleTransition(ruleStart, ruleIndex, precedence, followState) {\n\tTransition.call(this, ruleStart);\n this.ruleIndex = ruleIndex; // ptr to the rule definition object for this rule ref\n this.precedence = precedence;\n this.followState = followState; // what node to begin computations following ref to rule\n this.serializationType = Transition.RULE;\n this.isEpsilon = true;\n return this;\n}\n\nRuleTransition.prototype = Object.create(Transition.prototype);\nRuleTransition.prototype.constructor = RuleTransition;\n\nRuleTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\n\nfunction EpsilonTransition(target, outermostPrecedenceReturn) {\n\tTransition.call(this, target);\n this.serializationType = Transition.EPSILON;\n this.isEpsilon = true;\n this.outermostPrecedenceReturn = outermostPrecedenceReturn;\n return this;\n}\n\nEpsilonTransition.prototype = Object.create(Transition.prototype);\nEpsilonTransition.prototype.constructor = EpsilonTransition;\n\nEpsilonTransition.prototype.matches = function( symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\nEpsilonTransition.prototype.toString = function() {\n\treturn \"epsilon\";\n};\n\nfunction RangeTransition(target, start, stop) {\n\tTransition.call(this, target);\n\tthis.serializationType = Transition.RANGE;\n this.start = start;\n this.stop = stop;\n this.label = this.makeLabel();\n return this;\n}\n\nRangeTransition.prototype = Object.create(Transition.prototype);\nRangeTransition.prototype.constructor = RangeTransition;\n\nRangeTransition.prototype.makeLabel = function() {\n var s = new IntervalSet();\n s.addRange(this.start, this.stop);\n return s;\n};\n\nRangeTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn symbol >= this.start && symbol <= this.stop;\n};\n\nRangeTransition.prototype.toString = function() {\n\treturn \"'\" + String.fromCharCode(this.start) + \"'..'\" + String.fromCharCode(this.stop) + \"'\";\n};\n\nfunction AbstractPredicateTransition(target) {\n\tTransition.call(this, target);\n\treturn this;\n}\n\nAbstractPredicateTransition.prototype = Object.create(Transition.prototype);\nAbstractPredicateTransition.prototype.constructor = AbstractPredicateTransition;\n\nfunction PredicateTransition(target, ruleIndex, predIndex, isCtxDependent) {\n\tAbstractPredicateTransition.call(this, target);\n this.serializationType = Transition.PREDICATE;\n this.ruleIndex = ruleIndex;\n this.predIndex = predIndex;\n this.isCtxDependent = isCtxDependent; // e.g., $i ref in pred\n this.isEpsilon = true;\n return this;\n}\n\nPredicateTransition.prototype = Object.create(AbstractPredicateTransition.prototype);\nPredicateTransition.prototype.constructor = PredicateTransition;\n\nPredicateTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\nPredicateTransition.prototype.getPredicate = function() {\n\treturn new Predicate(this.ruleIndex, this.predIndex, this.isCtxDependent);\n};\n\nPredicateTransition.prototype.toString = function() {\n\treturn \"pred_\" + this.ruleIndex + \":\" + this.predIndex;\n};\n\nfunction ActionTransition(target, ruleIndex, actionIndex, isCtxDependent) {\n\tTransition.call(this, target);\n this.serializationType = Transition.ACTION;\n this.ruleIndex = ruleIndex;\n this.actionIndex = actionIndex===undefined ? -1 : actionIndex;\n this.isCtxDependent = isCtxDependent===undefined ? false : isCtxDependent; // e.g., $i ref in pred\n this.isEpsilon = true;\n return this;\n}\n\nActionTransition.prototype = Object.create(Transition.prototype);\nActionTransition.prototype.constructor = ActionTransition;\n\n\nActionTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\nActionTransition.prototype.toString = function() {\n\treturn \"action_\" + this.ruleIndex + \":\" + this.actionIndex;\n};\n\n\n// A transition containing a set of values.\nfunction SetTransition(target, set) {\n\tTransition.call(this, target);\n\tthis.serializationType = Transition.SET;\n if (set !==undefined && set !==null) {\n this.label = set;\n } else {\n this.label = new IntervalSet();\n this.label.addOne(Token.INVALID_TYPE);\n }\n return this;\n}\n\nSetTransition.prototype = Object.create(Transition.prototype);\nSetTransition.prototype.constructor = SetTransition;\n\nSetTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn this.label.contains(symbol);\n};\n\n\nSetTransition.prototype.toString = function() {\n\treturn this.label.toString();\n};\n\nfunction NotSetTransition(target, set) {\n\tSetTransition.call(this, target, set);\n\tthis.serializationType = Transition.NOT_SET;\n\treturn this;\n}\n\nNotSetTransition.prototype = Object.create(SetTransition.prototype);\nNotSetTransition.prototype.constructor = NotSetTransition;\n\nNotSetTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn symbol >= minVocabSymbol && symbol <= maxVocabSymbol &&\n\t\t\t!SetTransition.prototype.matches.call(this, symbol, minVocabSymbol, maxVocabSymbol);\n};\n\nNotSetTransition.prototype.toString = function() {\n\treturn '~' + SetTransition.prototype.toString.call(this);\n};\n\nfunction WildcardTransition(target) {\n\tTransition.call(this, target);\n\tthis.serializationType = Transition.WILDCARD;\n\treturn this;\n}\n\nWildcardTransition.prototype = Object.create(Transition.prototype);\nWildcardTransition.prototype.constructor = WildcardTransition;\n\n\nWildcardTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn symbol >= minVocabSymbol && symbol <= maxVocabSymbol;\n};\n\nWildcardTransition.prototype.toString = function() {\n\treturn \".\";\n};\n\nfunction PrecedencePredicateTransition(target, precedence) {\n\tAbstractPredicateTransition.call(this, target);\n this.serializationType = Transition.PRECEDENCE;\n this.precedence = precedence;\n this.isEpsilon = true;\n return this;\n}\n\nPrecedencePredicateTransition.prototype = Object.create(AbstractPredicateTransition.prototype);\nPrecedencePredicateTransition.prototype.constructor = PrecedencePredicateTransition;\n\nPrecedencePredicateTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\nPrecedencePredicateTransition.prototype.getPredicate = function() {\n\treturn new PrecedencePredicate(this.precedence);\n};\n\nPrecedencePredicateTransition.prototype.toString = function() {\n\treturn this.precedence + \" >= _p\";\n};\n\nexports.Transition = Transition;\nexports.AtomTransition = AtomTransition;\nexports.SetTransition = SetTransition;\nexports.NotSetTransition = NotSetTransition;\nexports.RuleTransition = RuleTransition;\nexports.ActionTransition = ActionTransition;\nexports.EpsilonTransition = EpsilonTransition;\nexports.RangeTransition = RangeTransition;\nexports.WildcardTransition = WildcardTransition;\nexports.PredicateTransition = PredicateTransition;\nexports.PrecedencePredicateTransition = PrecedencePredicateTransition;\nexports.AbstractPredicateTransition = AbstractPredicateTransition;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2F0bi9UcmFuc2l0aW9uLmpzP2QwOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxHQUFZO0FBQ2hDLGVBQWUsbUJBQU8sQ0FBQyxHQUFrQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFrQjtBQUM1QyxnQkFBZ0IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQywwQkFBMEIsbUJBQU8sQ0FBQyxHQUFtQjs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFdBQVcsb0JBQW9CO0FBQ3hEO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHNDQUFzQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RTtBQUM5RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyOTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyAgQW4gQVROIHRyYW5zaXRpb24gYmV0d2VlbiBhbnkgdHdvIEFUTiBzdGF0ZXMuICBTdWJjbGFzc2VzIGRlZmluZVxuLy8gIGF0b20sIHNldCwgZXBzaWxvbiwgYWN0aW9uLCBwcmVkaWNhdGUsIHJ1bGUgdHJhbnNpdGlvbnMuXG4vL1xuLy8gIDxwPlRoaXMgaXMgYSBvbmUgd2F5IGxpbmsuICBJdCBlbWFuYXRlcyBmcm9tIGEgc3RhdGUgKHVzdWFsbHkgdmlhIGEgbGlzdCBvZlxuLy8gIHRyYW5zaXRpb25zKSBhbmQgaGFzIGEgdGFyZ2V0IHN0YXRlLjwvcD5cbi8vXG4vLyAgPHA+U2luY2Ugd2UgbmV2ZXIgaGF2ZSB0byBjaGFuZ2UgdGhlIEFUTiB0cmFuc2l0aW9ucyBvbmNlIHdlIGNvbnN0cnVjdCBpdCxcbi8vICB3ZSBjYW4gZml4IHRoZXNlIHRyYW5zaXRpb25zIGFzIHNwZWNpZmljIGNsYXNzZXMuIFRoZSBERkEgdHJhbnNpdGlvbnNcbi8vICBvbiB0aGUgb3RoZXIgaGFuZCBuZWVkIHRvIHVwZGF0ZSB0aGUgbGFiZWxzIGFzIGl0IGFkZHMgdHJhbnNpdGlvbnMgdG9cbi8vICB0aGUgc3RhdGVzLiBXZSdsbCB1c2UgdGhlIHRlcm0gRWRnZSBmb3IgdGhlIERGQSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb21cbi8vICBBVE4gdHJhbnNpdGlvbnMuPC9wPlxuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgUHJlZGljYXRlID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5QcmVkaWNhdGU7XG52YXIgUHJlY2VkZW5jZVByZWRpY2F0ZSA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuUHJlY2VkZW5jZVByZWRpY2F0ZTtcblxuZnVuY3Rpb24gVHJhbnNpdGlvbiAodGFyZ2V0KSB7XG4gICAgLy8gVGhlIHRhcmdldCBvZiB0aGlzIHRyYW5zaXRpb24uXG4gICAgaWYgKHRhcmdldD09PXVuZGVmaW5lZCB8fCB0YXJnZXQ9PT1udWxsKSB7XG4gICAgICAgIHRocm93IFwidGFyZ2V0IGNhbm5vdCBiZSBudWxsLlwiO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAvLyBBcmUgd2UgZXBzaWxvbiwgYWN0aW9uLCBzZW1wcmVkP1xuICAgIHRoaXMuaXNFcHNpbG9uID0gZmFsc2U7XG4gICAgdGhpcy5sYWJlbCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG4gICAgLy8gY29uc3RhbnRzIGZvciBzZXJpYWxpemF0aW9uXG5UcmFuc2l0aW9uLkVQU0lMT04gPSAxO1xuVHJhbnNpdGlvbi5SQU5HRSA9IDI7XG5UcmFuc2l0aW9uLlJVTEUgPSAzO1xuVHJhbnNpdGlvbi5QUkVESUNBVEUgPSA0OyAvLyBlLmcuLCB7aXNUeXBlKGlucHV0LkxUKDEpKX0/XG5UcmFuc2l0aW9uLkFUT00gPSA1O1xuVHJhbnNpdGlvbi5BQ1RJT04gPSA2O1xuVHJhbnNpdGlvbi5TRVQgPSA3OyAvLyB+KEF8Qikgb3IgfmF0b20sIHdpbGRjYXJkLCB3aGljaCBjb252ZXJ0IHRvIG5leHQgMlxuVHJhbnNpdGlvbi5OT1RfU0VUID0gODtcblRyYW5zaXRpb24uV0lMRENBUkQgPSA5O1xuVHJhbnNpdGlvbi5QUkVDRURFTkNFID0gMTA7XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvbk5hbWVzID0gW1xuICAgICAgICAgICAgXCJJTlZBTElEXCIsXG4gICAgICAgICAgICBcIkVQU0lMT05cIixcbiAgICAgICAgICAgIFwiUkFOR0VcIixcbiAgICAgICAgICAgIFwiUlVMRVwiLFxuICAgICAgICAgICAgXCJQUkVESUNBVEVcIixcbiAgICAgICAgICAgIFwiQVRPTVwiLFxuICAgICAgICAgICAgXCJBQ1RJT05cIixcbiAgICAgICAgICAgIFwiU0VUXCIsXG4gICAgICAgICAgICBcIk5PVF9TRVRcIixcbiAgICAgICAgICAgIFwiV0lMRENBUkRcIixcbiAgICAgICAgICAgIFwiUFJFQ0VERU5DRVwiXG4gICAgICAgIF07XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvblR5cGVzID0ge1xuICAgICAgICBFcHNpbG9uVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5FUFNJTE9OLFxuICAgICAgICBSYW5nZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUkFOR0UsXG4gICAgICAgIFJ1bGVUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLlJVTEUsXG4gICAgICAgIFByZWRpY2F0ZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUFJFRElDQVRFLFxuICAgICAgICBBdG9tVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5BVE9NLFxuICAgICAgICBBY3Rpb25UcmFuc2l0aW9uOiBUcmFuc2l0aW9uLkFDVElPTixcbiAgICAgICAgU2V0VHJhbnNpdGlvbjogVHJhbnNpdGlvbi5TRVQsXG4gICAgICAgIE5vdFNldFRyYW5zaXRpb246IFRyYW5zaXRpb24uTk9UX1NFVCxcbiAgICAgICAgV2lsZGNhcmRUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLldJTERDQVJELFxuICAgICAgICBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5QUkVDRURFTkNFXG4gICAgfTtcblxuXG4vLyBUT0RPOiBtYWtlIGFsbCB0cmFuc2l0aW9ucyBzZXRzPyBubywgc2hvdWxkIHJlbW92ZSBzZXQgZWRnZXNcbmZ1bmN0aW9uIEF0b21UcmFuc2l0aW9uKHRhcmdldCwgbGFiZWwpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMubGFiZWxfID0gbGFiZWw7IC8vIFRoZSB0b2tlbiB0eXBlIG9yIGNoYXJhY3RlciB2YWx1ZTsgb3IsIHNpZ25pZmllcyBzcGVjaWFsIGxhYmVsLlxuICAgIHRoaXMubGFiZWwgPSB0aGlzLm1ha2VMYWJlbCgpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFUT007XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQXRvbVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbVRyYW5zaXRpb247XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICBzLmFkZE9uZSh0aGlzLmxhYmVsXyk7XG4gICAgcmV0dXJuIHM7XG59O1xuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbF8gPT09IHN5bWJvbDtcbn07XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5sYWJlbF87XG59O1xuXG5mdW5jdGlvbiBSdWxlVHJhbnNpdGlvbihydWxlU3RhcnQsIHJ1bGVJbmRleCwgcHJlY2VkZW5jZSwgZm9sbG93U3RhdGUpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHJ1bGVTdGFydCk7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7IC8vIHB0ciB0byB0aGUgcnVsZSBkZWZpbml0aW9uIG9iamVjdCBmb3IgdGhpcyBydWxlIHJlZlxuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5mb2xsb3dTdGF0ZSA9IGZvbGxvd1N0YXRlOyAvLyB3aGF0IG5vZGUgdG8gYmVnaW4gY29tcHV0YXRpb25zIGZvbGxvd2luZyByZWYgdG8gcnVsZVxuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlJVTEU7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcblJ1bGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVUcmFuc2l0aW9uO1xuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5cbmZ1bmN0aW9uIEVwc2lsb25UcmFuc2l0aW9uKHRhcmdldCwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybikge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5FUFNJTE9OO1xuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICB0aGlzLm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSBvdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkVwc2lsb25UcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVwc2lsb25UcmFuc2l0aW9uO1xuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuRXBzaWxvblRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcImVwc2lsb25cIjtcbn07XG5cbmZ1bmN0aW9uIFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIHN0YXJ0LCBzdG9wKSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5SQU5HRTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5zdG9wID0gc3RvcDtcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5tYWtlTGFiZWwoKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmdlVHJhbnNpdGlvbjtcblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHMuYWRkUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5zdG9wKTtcbiAgICByZXR1cm4gcztcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gc3ltYm9sID49IHRoaXMuc3RhcnQgJiYgc3ltYm9sIDw9IHRoaXMuc3RvcDtcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0YXJ0KSArIFwiJy4uJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0b3ApICsgXCInXCI7XG59O1xuXG5mdW5jdGlvbiBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlBSRURJQ0FURTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleDtcbiAgICB0aGlzLmlzQ3R4RGVwZW5kZW50ID0gaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuZ2V0UHJlZGljYXRlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBuZXcgUHJlZGljYXRlKHRoaXMucnVsZUluZGV4LCB0aGlzLnByZWRJbmRleCwgdGhpcy5pc0N0eERlcGVuZGVudCk7XG59O1xuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwcmVkX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMucHJlZEluZGV4O1xufTtcblxuZnVuY3Rpb24gQWN0aW9uVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgsIGlzQ3R4RGVwZW5kZW50KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFDVElPTjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg9PT11bmRlZmluZWQgPyAtMSA6IGFjdGlvbkluZGV4O1xuICAgIHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudD09PXVuZGVmaW5lZCA/IGZhbHNlIDogaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BY3Rpb25UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY3Rpb25UcmFuc2l0aW9uO1xuXG5cbkFjdGlvblRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiYWN0aW9uX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMuYWN0aW9uSW5kZXg7XG59O1xuXG5cbi8vIEEgdHJhbnNpdGlvbiBjb250YWluaW5nIGEgc2V0IG9mIHZhbHVlcy5cbmZ1bmN0aW9uIFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlNFVDtcbiAgICBpZiAoc2V0ICE9PXVuZGVmaW5lZCAmJiBzZXQgIT09bnVsbCkge1xuICAgICAgICB0aGlzLmxhYmVsID0gc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFiZWwgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgdGhpcy5sYWJlbC5hZGRPbmUoVG9rZW4uSU5WQUxJRF9UWVBFKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5TZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNldFRyYW5zaXRpb247XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwuY29udGFpbnMoc3ltYm9sKTtcbn07XG5cblxuU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwudG9TdHJpbmcoKTtcbn07XG5cbmZ1bmN0aW9uIE5vdFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0U2V0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCwgc2V0KTtcblx0dGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uTk9UX1NFVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZXRUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5Ob3RTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vdFNldFRyYW5zaXRpb247XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHN5bWJvbCA+PSBtaW5Wb2NhYlN5bWJvbCAmJiBzeW1ib2wgPD0gbWF4Vm9jYWJTeW1ib2wgJiZcblx0XHRcdCFTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzLmNhbGwodGhpcywgc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgbWF4Vm9jYWJTeW1ib2wpO1xufTtcblxuTm90U2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICd+JyArIFNldFRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG59O1xuXG5mdW5jdGlvbiBXaWxkY2FyZFRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5XSUxEQ0FSRDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXaWxkY2FyZFRyYW5zaXRpb247XG5cblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBzeW1ib2wgPj0gbWluVm9jYWJTeW1ib2wgJiYgc3ltYm9sIDw9IG1heFZvY2FiU3ltYm9sO1xufTtcblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIuXCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHByZWNlZGVuY2UpIHtcblx0QWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5QUkVDRURFTkNFO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5nZXRQcmVkaWNhdGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlKHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHJlY2VkZW5jZSArIFwiID49IF9wXCI7XG59O1xuXG5leHBvcnRzLlRyYW5zaXRpb24gPSBUcmFuc2l0aW9uO1xuZXhwb3J0cy5BdG9tVHJhbnNpdGlvbiA9IEF0b21UcmFuc2l0aW9uO1xuZXhwb3J0cy5TZXRUcmFuc2l0aW9uID0gU2V0VHJhbnNpdGlvbjtcbmV4cG9ydHMuTm90U2V0VHJhbnNpdGlvbiA9IE5vdFNldFRyYW5zaXRpb247XG5leHBvcnRzLlJ1bGVUcmFuc2l0aW9uID0gUnVsZVRyYW5zaXRpb247XG5leHBvcnRzLkFjdGlvblRyYW5zaXRpb24gPSBBY3Rpb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5FcHNpbG9uVHJhbnNpdGlvbiA9IEVwc2lsb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5SYW5nZVRyYW5zaXRpb24gPSBSYW5nZVRyYW5zaXRpb247XG5leHBvcnRzLldpbGRjYXJkVHJhbnNpdGlvbiA9IFdpbGRjYXJkVHJhbnNpdGlvbjtcbmV4cG9ydHMuUHJlZGljYXRlVHJhbnNpdGlvbiA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n"); /***/ }), /***/ 297: /***/ (function(module, exports, __webpack_require__) { eval("//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n//\n// Specialized {@link Set}{@code <}{@link ATNConfig}{@code >} that can track\n// info about the set, with support for combining similar configurations using a\n// graph-structured stack.\n///\n\nvar ATN = __webpack_require__(290).ATN;\nvar Utils = __webpack_require__(269);\nvar Hash = Utils.Hash;\nvar Set = Utils.Set;\nvar SemanticContext = __webpack_require__(302).SemanticContext;\nvar merge = __webpack_require__(287).merge;\n\nfunction hashATNConfig(c) {\n\treturn c.hashCodeForConfigSet();\n}\n\nfunction equalATNConfigs(a, b) {\n\tif ( a===b ) {\n\t\treturn true;\n\t} else if ( a===null || b===null ) {\n\t\treturn false;\n\t} else\n return a.equalsForConfigSet(b);\n }\n\n\nfunction ATNConfigSet(fullCtx) {\n\t//\n\t// The reason that we need this is because we don't want the hash map to use\n\t// the standard hash code and equals. We need all configurations with the\n\t// same\n\t// {@code (s,i,_,semctx)} to be equal. Unfortunately, this key effectively\n\t// doubles\n\t// the number of objects associated with ATNConfigs. The other solution is\n\t// to\n\t// use a hash table that lets us specify the equals/hashcode operation.\n\t// All configs but hashed by (s, i, _, pi) not including context. Wiped out\n\t// when we go readonly as this set becomes a DFA state.\n\tthis.configLookup = new Set(hashATNConfig, equalATNConfigs);\n\t// Indicates that this configuration set is part of a full context\n\t// LL prediction. It will be used to determine how to merge $. With SLL\n\t// it's a wildcard whereas it is not for LL context merge.\n\tthis.fullCtx = fullCtx === undefined ? true : fullCtx;\n\t// Indicates that the set of configurations is read-only. Do not\n\t// allow any code to manipulate the set; DFA states will point at\n\t// the sets and they must not change. This does not protect the other\n\t// fields; in particular, conflictingAlts is set after\n\t// we've made this readonly.\n\tthis.readOnly = false;\n\t// Track the elements as they are added to the set; supports get(i)///\n\tthis.configs = [];\n\n\t// TODO: these fields make me pretty uncomfortable but nice to pack up info\n\t// together, saves recomputation\n\t// TODO: can we track conflicts as they are added to save scanning configs\n\t// later?\n\tthis.uniqueAlt = 0;\n\tthis.conflictingAlts = null;\n\n\t// Used in parser and lexer. In lexer, it indicates we hit a pred\n\t// while computing a closure operation. Don't make a DFA state from this.\n\tthis.hasSemanticContext = false;\n\tthis.dipsIntoOuterContext = false;\n\n\tthis.cachedHashCode = -1;\n\n\treturn this;\n}\n\n// Adding a new config means merging contexts with existing configs for\n// {@code (s, i, pi, _)}, where {@code s} is the\n// {@link ATNConfig//state}, {@code i} is the {@link ATNConfig//alt}, and\n// {@code pi} is the {@link ATNConfig//semanticContext}. We use\n// {@code (s,i,pi)} as key.\n//\n//

This method updates {@link //dipsIntoOuterContext} and\n// {@link //hasSemanticContext} when necessary.

\n// /\nATNConfigSet.prototype.add = function(config, mergeCache) {\n\tif (mergeCache === undefined) {\n\t\tmergeCache = null;\n\t}\n\tif (this.readOnly) {\n\t\tthrow \"This set is readonly\";\n\t}\n\tif (config.semanticContext !== SemanticContext.NONE) {\n\t\tthis.hasSemanticContext = true;\n\t}\n\tif (config.reachesIntoOuterContext > 0) {\n\t\tthis.dipsIntoOuterContext = true;\n\t}\n\tvar existing = this.configLookup.add(config);\n\tif (existing === config) {\n\t\tthis.cachedHashCode = -1;\n\t\tthis.configs.push(config); // track order here\n\t\treturn true;\n\t}\n\t// a previous (s,i,pi,_), merge with it and save result\n\tvar rootIsWildcard = !this.fullCtx;\n\tvar merged = merge(existing.context, config.context, rootIsWildcard, mergeCache);\n\t// no need to check for existing.context, config.context in cache\n\t// since only way to create new graphs is \"call rule\" and here. We\n\t// cache at both places.\n\texisting.reachesIntoOuterContext = Math.max( existing.reachesIntoOuterContext, config.reachesIntoOuterContext);\n\t// make sure to preserve the precedence filter suppression during the merge\n\tif (config.precedenceFilterSuppressed) {\n\t\texisting.precedenceFilterSuppressed = true;\n\t}\n\texisting.context = merged; // replace context; no need to alt mapping\n\treturn true;\n};\n\nATNConfigSet.prototype.getStates = function() {\n\tvar states = new Set();\n\tfor (var i = 0; i < this.configs.length; i++) {\n\t\tstates.add(this.configs[i].state);\n\t}\n\treturn states;\n};\n\nATNConfigSet.prototype.getPredicates = function() {\n\tvar preds = [];\n\tfor (var i = 0; i < this.configs.length; i++) {\n\t\tvar c = this.configs[i].semanticContext;\n\t\tif (c !== SemanticContext.NONE) {\n\t\t\tpreds.push(c.semanticContext);\n\t\t}\n\t}\n\treturn preds;\n};\n\nObject.defineProperty(ATNConfigSet.prototype, \"items\", {\n\tget : function() {\n\t\treturn this.configs;\n\t}\n});\n\nATNConfigSet.prototype.optimizeConfigs = function(interpreter) {\n\tif (this.readOnly) {\n\t\tthrow \"This set is readonly\";\n\t}\n\tif (this.configLookup.length === 0) {\n\t\treturn;\n\t}\n\tfor (var i = 0; i < this.configs.length; i++) {\n\t\tvar config = this.configs[i];\n\t\tconfig.context = interpreter.getCachedContext(config.context);\n\t}\n};\n\nATNConfigSet.prototype.addAll = function(coll) {\n\tfor (var i = 0; i < coll.length; i++) {\n\t\tthis.add(coll[i]);\n\t}\n\treturn false;\n};\n\nATNConfigSet.prototype.equals = function(other) {\n\treturn this === other ||\n\t\t(other instanceof ATNConfigSet &&\n\t\tUtils.equalArrays(this.configs, other.configs) &&\n\t\tthis.fullCtx === other.fullCtx &&\n\t\tthis.uniqueAlt === other.uniqueAlt &&\n\t\tthis.conflictingAlts === other.conflictingAlts &&\n\t\tthis.hasSemanticContext === other.hasSemanticContext &&\n\t\tthis.dipsIntoOuterContext === other.dipsIntoOuterContext);\n};\n\nATNConfigSet.prototype.hashCode = function() {\n var hash = new Hash();\n\thash.update(this.configs);\n return hash.finish();\n};\n\n\nATNConfigSet.prototype.updateHashCode = function(hash) {\n\tif (this.readOnly) {\n\t\tif (this.cachedHashCode === -1) {\n this.cachedHashCode = this.hashCode();\n\t\t}\n hash.update(this.cachedHashCode);\n\t} else {\n hash.update(this.hashCode());\n\t}\n};\n\n\nObject.defineProperty(ATNConfigSet.prototype, \"length\", {\n\tget : function() {\n\t\treturn this.configs.length;\n\t}\n});\n\nATNConfigSet.prototype.isEmpty = function() {\n\treturn this.configs.length === 0;\n};\n\nATNConfigSet.prototype.contains = function(item) {\n\tif (this.configLookup === null) {\n\t\tthrow \"This method is not implemented for readonly sets.\";\n\t}\n\treturn this.configLookup.contains(item);\n};\n\nATNConfigSet.prototype.containsFast = function(item) {\n\tif (this.configLookup === null) {\n\t\tthrow \"This method is not implemented for readonly sets.\";\n\t}\n\treturn this.configLookup.containsFast(item);\n};\n\nATNConfigSet.prototype.clear = function() {\n\tif (this.readOnly) {\n\t\tthrow \"This set is readonly\";\n\t}\n\tthis.configs = [];\n\tthis.cachedHashCode = -1;\n\tthis.configLookup = new Set();\n};\n\nATNConfigSet.prototype.setReadonly = function(readOnly) {\n\tthis.readOnly = readOnly;\n\tif (readOnly) {\n\t\tthis.configLookup = null; // can't mod, no need for lookup cache\n\t}\n};\n\nATNConfigSet.prototype.toString = function() {\n\treturn Utils.arrayToString(this.configs) +\n\t\t(this.hasSemanticContext ? \",hasSemanticContext=\" + this.hasSemanticContext : \"\") +\n\t\t(this.uniqueAlt !== ATN.INVALID_ALT_NUMBER ? \",uniqueAlt=\" + this.uniqueAlt : \"\") +\n\t\t(this.conflictingAlts !== null ? \",conflictingAlts=\" + this.conflictingAlts : \"\") +\n\t\t(this.dipsIntoOuterContext ? \",dipsIntoOuterContext\" : \"\");\n};\n\nfunction OrderedATNConfigSet() {\n\tATNConfigSet.call(this);\n\tthis.configLookup = new Set();\n\treturn this;\n}\n\nOrderedATNConfigSet.prototype = Object.create(ATNConfigSet.prototype);\nOrderedATNConfigSet.prototype.constructor = OrderedATNConfigSet;\n\nexports.ATNConfigSet = ATNConfigSet;\nexports.OrderedATNConfigSet = OrderedATNConfigSet;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2F0bi9BVE5Db25maWdTZXQuanM/Njk5YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLFdBQVcsU0FBUyxpQkFBaUIsUUFBUTtBQUM3RDtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxtQkFBTyxDQUFDLEdBQU87QUFDekIsWUFBWSxtQkFBTyxDQUFDLEdBQVk7QUFDaEM7QUFDQTtBQUNBLHNCQUFzQixtQkFBTyxDQUFDLEdBQW1CO0FBQ2pELFlBQVksbUJBQU8sQ0FBQyxHQUF3Qjs7QUFFNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxxQkFBcUI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLG9CQUFvQixTQUFTLFFBQVE7QUFDekMsSUFBSSx1QkFBdUIsR0FBRyxRQUFRLFNBQVMscUJBQXFCO0FBQ3BFLElBQUksU0FBUyxTQUFTLGlDQUFpQztBQUN2RCxJQUFJLGVBQWU7QUFDbkI7QUFDQSwyQkFBMkIsNkJBQTZCO0FBQ3hELElBQUksMkJBQTJCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiMjk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLy9cbi8vIFNwZWNpYWxpemVkIHtAbGluayBTZXR9e0Bjb2RlIDx9e0BsaW5rIEFUTkNvbmZpZ317QGNvZGUgPn0gdGhhdCBjYW4gdHJhY2tcbi8vIGluZm8gYWJvdXQgdGhlIHNldCwgd2l0aCBzdXBwb3J0IGZvciBjb21iaW5pbmcgc2ltaWxhciBjb25maWd1cmF0aW9ucyB1c2luZyBhXG4vLyBncmFwaC1zdHJ1Y3R1cmVkIHN0YWNrLlxuLy8vXG5cbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBIYXNoID0gVXRpbHMuSGFzaDtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgbWVyZ2UgPSByZXF1aXJlKCcuLy4uL1ByZWRpY3Rpb25Db250ZXh0JykubWVyZ2U7XG5cbmZ1bmN0aW9uIGhhc2hBVE5Db25maWcoYykge1xuXHRyZXR1cm4gYy5oYXNoQ29kZUZvckNvbmZpZ1NldCgpO1xufVxuXG5mdW5jdGlvbiBlcXVhbEFUTkNvbmZpZ3MoYSwgYikge1xuXHRpZiAoIGE9PT1iICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCBhPT09bnVsbCB8fCBiPT09bnVsbCApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZVxuICAgICAgIHJldHVybiBhLmVxdWFsc0ZvckNvbmZpZ1NldChiKTtcbiB9XG5cblxuZnVuY3Rpb24gQVROQ29uZmlnU2V0KGZ1bGxDdHgpIHtcblx0Ly9cblx0Ly8gVGhlIHJlYXNvbiB0aGF0IHdlIG5lZWQgdGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGhhc2ggbWFwIHRvIHVzZVxuXHQvLyB0aGUgc3RhbmRhcmQgaGFzaCBjb2RlIGFuZCBlcXVhbHMuIFdlIG5lZWQgYWxsIGNvbmZpZ3VyYXRpb25zIHdpdGggdGhlXG5cdC8vIHNhbWVcblx0Ly8ge0Bjb2RlIChzLGksXyxzZW1jdHgpfSB0byBiZSBlcXVhbC4gVW5mb3J0dW5hdGVseSwgdGhpcyBrZXkgZWZmZWN0aXZlbHlcblx0Ly8gZG91Ymxlc1xuXHQvLyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIEFUTkNvbmZpZ3MuIFRoZSBvdGhlciBzb2x1dGlvbiBpc1xuXHQvLyB0b1xuXHQvLyB1c2UgYSBoYXNoIHRhYmxlIHRoYXQgbGV0cyB1cyBzcGVjaWZ5IHRoZSBlcXVhbHMvaGFzaGNvZGUgb3BlcmF0aW9uLlxuXHQvLyBBbGwgY29uZmlncyBidXQgaGFzaGVkIGJ5IChzLCBpLCBfLCBwaSkgbm90IGluY2x1ZGluZyBjb250ZXh0LiBXaXBlZCBvdXRcblx0Ly8gd2hlbiB3ZSBnbyByZWFkb25seSBhcyB0aGlzIHNldCBiZWNvbWVzIGEgREZBIHN0YXRlLlxuXHR0aGlzLmNvbmZpZ0xvb2t1cCA9IG5ldyBTZXQoaGFzaEFUTkNvbmZpZywgZXF1YWxBVE5Db25maWdzKTtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIHNldCBpcyBwYXJ0IG9mIGEgZnVsbCBjb250ZXh0XG5cdC8vIExMIHByZWRpY3Rpb24uIEl0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgaG93IHRvIG1lcmdlICQuIFdpdGggU0xMXG5cdC8vIGl0J3MgYSB3aWxkY2FyZCB3aGVyZWFzIGl0IGlzIG5vdCBmb3IgTEwgY29udGV4dCBtZXJnZS5cblx0dGhpcy5mdWxsQ3R4ID0gZnVsbEN0eCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZ1bGxDdHg7XG5cdC8vIEluZGljYXRlcyB0aGF0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMgaXMgcmVhZC1vbmx5LiBEbyBub3Rcblx0Ly8gYWxsb3cgYW55IGNvZGUgdG8gbWFuaXB1bGF0ZSB0aGUgc2V0OyBERkEgc3RhdGVzIHdpbGwgcG9pbnQgYXRcblx0Ly8gdGhlIHNldHMgYW5kIHRoZXkgbXVzdCBub3QgY2hhbmdlLiBUaGlzIGRvZXMgbm90IHByb3RlY3QgdGhlIG90aGVyXG5cdC8vIGZpZWxkczsgaW4gcGFydGljdWxhciwgY29uZmxpY3RpbmdBbHRzIGlzIHNldCBhZnRlclxuXHQvLyB3ZSd2ZSBtYWRlIHRoaXMgcmVhZG9ubHkuXG5cdHRoaXMucmVhZE9ubHkgPSBmYWxzZTtcblx0Ly8gVHJhY2sgdGhlIGVsZW1lbnRzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBzZXQ7IHN1cHBvcnRzIGdldChpKS8vL1xuXHR0aGlzLmNvbmZpZ3MgPSBbXTtcblxuXHQvLyBUT0RPOiB0aGVzZSBmaWVsZHMgbWFrZSBtZSBwcmV0dHkgdW5jb21mb3J0YWJsZSBidXQgbmljZSB0byBwYWNrIHVwIGluZm9cblx0Ly8gdG9nZXRoZXIsIHNhdmVzIHJlY29tcHV0YXRpb25cblx0Ly8gVE9ETzogY2FuIHdlIHRyYWNrIGNvbmZsaWN0cyBhcyB0aGV5IGFyZSBhZGRlZCB0byBzYXZlIHNjYW5uaW5nIGNvbmZpZ3Ncblx0Ly8gbGF0ZXI/XG5cdHRoaXMudW5pcXVlQWx0ID0gMDtcblx0dGhpcy5jb25mbGljdGluZ0FsdHMgPSBudWxsO1xuXG5cdC8vIFVzZWQgaW4gcGFyc2VyIGFuZCBsZXhlci4gSW4gbGV4ZXIsIGl0IGluZGljYXRlcyB3ZSBoaXQgYSBwcmVkXG5cdC8vIHdoaWxlIGNvbXB1dGluZyBhIGNsb3N1cmUgb3BlcmF0aW9uLiBEb24ndCBtYWtlIGEgREZBIHN0YXRlIGZyb20gdGhpcy5cblx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPSBmYWxzZTtcblx0dGhpcy5kaXBzSW50b091dGVyQ29udGV4dCA9IGZhbHNlO1xuXG5cdHRoaXMuY2FjaGVkSGFzaENvZGUgPSAtMTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkaW5nIGEgbmV3IGNvbmZpZyBtZWFucyBtZXJnaW5nIGNvbnRleHRzIHdpdGggZXhpc3RpbmcgY29uZmlncyBmb3Jcbi8vIHtAY29kZSAocywgaSwgcGksIF8pfSwgd2hlcmUge0Bjb2RlIHN9IGlzIHRoZVxuLy8ge0BsaW5rIEFUTkNvbmZpZy8vc3RhdGV9LCB7QGNvZGUgaX0gaXMgdGhlIHtAbGluayBBVE5Db25maWcvL2FsdH0sIGFuZFxuLy8ge0Bjb2RlIHBpfSBpcyB0aGUge0BsaW5rIEFUTkNvbmZpZy8vc2VtYW50aWNDb250ZXh0fS4gV2UgdXNlXG4vLyB7QGNvZGUgKHMsaSxwaSl9IGFzIGtleS5cbi8vXG4vLyA8cD5UaGlzIG1ldGhvZCB1cGRhdGVzIHtAbGluayAvL2RpcHNJbnRvT3V0ZXJDb250ZXh0fSBhbmRcbi8vIHtAbGluayAvL2hhc1NlbWFudGljQ29udGV4dH0gd2hlbiBuZWNlc3NhcnkuPC9wPlxuLy8gL1xuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihjb25maWcsIG1lcmdlQ2FjaGUpIHtcblx0aWYgKG1lcmdlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG1lcmdlQ2FjaGUgPSBudWxsO1xuXHR9XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdGlmIChjb25maWcuc2VtYW50aWNDb250ZXh0ICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHRoaXMuaGFzU2VtYW50aWNDb250ZXh0ID0gdHJ1ZTtcblx0fVxuXHRpZiAoY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID4gMCkge1xuXHRcdHRoaXMuZGlwc0ludG9PdXRlckNvbnRleHQgPSB0cnVlO1xuXHR9XG5cdHZhciBleGlzdGluZyA9IHRoaXMuY29uZmlnTG9va3VwLmFkZChjb25maWcpO1xuXHRpZiAoZXhpc3RpbmcgPT09IGNvbmZpZykge1xuXHRcdHRoaXMuY2FjaGVkSGFzaENvZGUgPSAtMTtcblx0XHR0aGlzLmNvbmZpZ3MucHVzaChjb25maWcpOyAvLyB0cmFjayBvcmRlciBoZXJlXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gYSBwcmV2aW91cyAocyxpLHBpLF8pLCBtZXJnZSB3aXRoIGl0IGFuZCBzYXZlIHJlc3VsdFxuXHR2YXIgcm9vdElzV2lsZGNhcmQgPSAhdGhpcy5mdWxsQ3R4O1xuXHR2YXIgbWVyZ2VkID0gbWVyZ2UoZXhpc3RpbmcuY29udGV4dCwgY29uZmlnLmNvbnRleHQsIHJvb3RJc1dpbGRjYXJkLCBtZXJnZUNhY2hlKTtcblx0Ly8gbm8gbmVlZCB0byBjaGVjayBmb3IgZXhpc3RpbmcuY29udGV4dCwgY29uZmlnLmNvbnRleHQgaW4gY2FjaGVcblx0Ly8gc2luY2Ugb25seSB3YXkgdG8gY3JlYXRlIG5ldyBncmFwaHMgaXMgXCJjYWxsIHJ1bGVcIiBhbmQgaGVyZS4gV2Vcblx0Ly8gY2FjaGUgYXQgYm90aCBwbGFjZXMuXG5cdGV4aXN0aW5nLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gTWF0aC5tYXgoIGV4aXN0aW5nLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0LCBjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQpO1xuXHQvLyBtYWtlIHN1cmUgdG8gcHJlc2VydmUgdGhlIHByZWNlZGVuY2UgZmlsdGVyIHN1cHByZXNzaW9uIGR1cmluZyB0aGUgbWVyZ2Vcblx0aWYgKGNvbmZpZy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCkge1xuXHRcdGV4aXN0aW5nLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkID0gdHJ1ZTtcblx0fVxuXHRleGlzdGluZy5jb250ZXh0ID0gbWVyZ2VkOyAvLyByZXBsYWNlIGNvbnRleHQ7IG5vIG5lZWQgdG8gYWx0IG1hcHBpbmdcblx0cmV0dXJuIHRydWU7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmdldFN0YXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc3RhdGVzID0gbmV3IFNldCgpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHN0YXRlcy5hZGQodGhpcy5jb25maWdzW2ldLnN0YXRlKTtcblx0fVxuXHRyZXR1cm4gc3RhdGVzO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBwcmVkcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjID0gdGhpcy5jb25maWdzW2ldLnNlbWFudGljQ29udGV4dDtcblx0XHRpZiAoYyAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRcdHByZWRzLnB1c2goYy5zZW1hbnRpY0NvbnRleHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJlZHM7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQVROQ29uZmlnU2V0LnByb3RvdHlwZSwgXCJpdGVtc1wiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ3M7XG5cdH1cbn0pO1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLm9wdGltaXplQ29uZmlncyA9IGZ1bmN0aW9uKGludGVycHJldGVyKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cC5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ3MubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29uZmlnID0gdGhpcy5jb25maWdzW2ldO1xuXHRcdGNvbmZpZy5jb250ZXh0ID0gaW50ZXJwcmV0ZXIuZ2V0Q2FjaGVkQ29udGV4dChjb25maWcuY29udGV4dCk7XG5cdH1cbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuYWRkQWxsID0gZnVuY3Rpb24oY29sbCkge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNvbGwubGVuZ3RoOyBpKyspIHtcblx0XHR0aGlzLmFkZChjb2xsW2ldKTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuXHRcdChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZ1NldCAmJlxuXHRcdFV0aWxzLmVxdWFsQXJyYXlzKHRoaXMuY29uZmlncywgb3RoZXIuY29uZmlncykgJiZcblx0XHR0aGlzLmZ1bGxDdHggPT09IG90aGVyLmZ1bGxDdHggJiZcblx0XHR0aGlzLnVuaXF1ZUFsdCA9PT0gb3RoZXIudW5pcXVlQWx0ICYmXG5cdFx0dGhpcy5jb25mbGljdGluZ0FsdHMgPT09IG90aGVyLmNvbmZsaWN0aW5nQWx0cyAmJlxuXHRcdHRoaXMuaGFzU2VtYW50aWNDb250ZXh0ID09PSBvdGhlci5oYXNTZW1hbnRpY0NvbnRleHQgJiZcblx0XHR0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID09PSBvdGhlci5kaXBzSW50b091dGVyQ29udGV4dCk7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpO1xufTtcblxuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuXHRpZiAodGhpcy5yZWFkT25seSkge1xuXHRcdGlmICh0aGlzLmNhY2hlZEhhc2hDb2RlID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRIYXNoQ29kZSA9IHRoaXMuaGFzaENvZGUoKTtcblx0XHR9XG4gICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY2FjaGVkSGFzaENvZGUpO1xuXHR9IGVsc2Uge1xuICAgICAgICBoYXNoLnVwZGF0ZSh0aGlzLmhhc2hDb2RlKCkpO1xuXHR9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoO1xuXHR9XG59KTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoID09PSAwO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0aWYgKHRoaXMuY29uZmlnTG9va3VwID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWRvbmx5IHNldHMuXCI7XG5cdH1cblx0cmV0dXJuIHRoaXMuY29uZmlnTG9va3VwLmNvbnRhaW5zKGl0ZW0pO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWluc0Zhc3QgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cCA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkb25seSBzZXRzLlwiO1xuXHR9XG5cdHJldHVybiB0aGlzLmNvbmZpZ0xvb2t1cC5jb250YWluc0Zhc3QoaXRlbSk7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gLTE7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5zZXRSZWFkb25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG5cdHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcblx0aWYgKHJlYWRPbmx5KSB7XG5cdFx0dGhpcy5jb25maWdMb29rdXAgPSBudWxsOyAvLyBjYW4ndCBtb2QsIG5vIG5lZWQgZm9yIGxvb2t1cCBjYWNoZVxuXHR9XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMuY29uZmlncykgK1xuXHRcdCh0aGlzLmhhc1NlbWFudGljQ29udGV4dCA/IFwiLGhhc1NlbWFudGljQ29udGV4dD1cIiArIHRoaXMuaGFzU2VtYW50aWNDb250ZXh0IDogXCJcIikgK1xuXHRcdCh0aGlzLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiA/IFwiLHVuaXF1ZUFsdD1cIiArIHRoaXMudW5pcXVlQWx0IDogXCJcIikgK1xuXHRcdCh0aGlzLmNvbmZsaWN0aW5nQWx0cyAhPT0gbnVsbCA/IFwiLGNvbmZsaWN0aW5nQWx0cz1cIiArIHRoaXMuY29uZmxpY3RpbmdBbHRzIDogXCJcIikgK1xuXHRcdCh0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID8gXCIsZGlwc0ludG9PdXRlckNvbnRleHRcIiA6IFwiXCIpO1xufTtcblxuZnVuY3Rpb24gT3JkZXJlZEFUTkNvbmZpZ1NldCgpIHtcblx0QVROQ29uZmlnU2V0LmNhbGwodGhpcyk7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTkNvbmZpZ1NldC5wcm90b3R5cGUpO1xuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPcmRlcmVkQVROQ29uZmlnU2V0O1xuXG5leHBvcnRzLkFUTkNvbmZpZ1NldCA9IEFUTkNvbmZpZ1NldDtcbmV4cG9ydHMuT3JkZXJlZEFUTkNvbmZpZ1NldCA9IE9yZGVyZWRBVE5Db25maWdTZXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///297\n"); /***/ }), /***/ 302: /***/ (function(module, exports, __webpack_require__) { eval("//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n// A tree structure used to record the semantic context in which\n// an ATN configuration is valid. It's either a single predicate,\n// a conjunction {@code p1&&p2}, or a sum of products {@code p1||p2}.\n//\n//

I have scoped the {@link AND}, {@link OR}, and {@link Predicate} subclasses of\n// {@link SemanticContext} within the scope of this outer class.

\n//\n\nvar Set = __webpack_require__(269).Set;\nvar Hash = __webpack_require__(269).Hash;\n\nfunction SemanticContext() {\n\treturn this;\n}\n\nSemanticContext.prototype.hashCode = function() {\n var hash = new Hash();\n this.updateHashCode(hash);\n return hash.finish();\n};\n\n// For context independent predicates, we evaluate them without a local\n// context (i.e., null context). That way, we can evaluate them without\n// having to create proper rule-specific context during prediction (as\n// opposed to the parser, which creates them naturally). In a practical\n// sense, this avoids a cast exception from RuleContext to myruleContext.\n//\n//

For context dependent predicates, we must pass in a local context so that\n// references such as $arg evaluate properly as _localctx.arg. We only\n// capture context dependent predicates in the context in which we begin\n// prediction, so we passed in the outer context here in case of context\n// dependent predicate evaluation.

\n//\nSemanticContext.prototype.evaluate = function(parser, outerContext) {\n};\n\n//\n// Evaluate the precedence predicates for the context and reduce the result.\n//\n// @param parser The parser instance.\n// @param outerContext The current parser context object.\n// @return The simplified semantic context after precedence predicates are\n// evaluated, which will be one of the following values.\n//
    \n//
  • {@link //NONE}: if the predicate simplifies to {@code true} after\n// precedence predicates are evaluated.
  • \n//
  • {@code null}: if the predicate simplifies to {@code false} after\n// precedence predicates are evaluated.
  • \n//
  • {@code this}: if the semantic context is not changed as a result of\n// precedence predicate evaluation.
  • \n//
  • A non-{@code null} {@link SemanticContext}: the new simplified\n// semantic context after precedence predicates are evaluated.
  • \n//
\n//\nSemanticContext.prototype.evalPrecedence = function(parser, outerContext) {\n\treturn this;\n};\n\nSemanticContext.andContext = function(a, b) {\n\tif (a === null || a === SemanticContext.NONE) {\n\t\treturn b;\n\t}\n\tif (b === null || b === SemanticContext.NONE) {\n\t\treturn a;\n\t}\n\tvar result = new AND(a, b);\n\tif (result.opnds.length === 1) {\n\t\treturn result.opnds[0];\n\t} else {\n\t\treturn result;\n\t}\n};\n\nSemanticContext.orContext = function(a, b) {\n\tif (a === null) {\n\t\treturn b;\n\t}\n\tif (b === null) {\n\t\treturn a;\n\t}\n\tif (a === SemanticContext.NONE || b === SemanticContext.NONE) {\n\t\treturn SemanticContext.NONE;\n\t}\n\tvar result = new OR(a, b);\n\tif (result.opnds.length === 1) {\n\t\treturn result.opnds[0];\n\t} else {\n\t\treturn result;\n\t}\n};\n\nfunction Predicate(ruleIndex, predIndex, isCtxDependent) {\n\tSemanticContext.call(this);\n\tthis.ruleIndex = ruleIndex === undefined ? -1 : ruleIndex;\n\tthis.predIndex = predIndex === undefined ? -1 : predIndex;\n\tthis.isCtxDependent = isCtxDependent === undefined ? false : isCtxDependent; // e.g., $i ref in pred\n\treturn this;\n}\n\nPredicate.prototype = Object.create(SemanticContext.prototype);\nPredicate.prototype.constructor = Predicate;\n\n//The default {@link SemanticContext}, which is semantically equivalent to\n//a predicate of the form {@code {true}?}.\n//\nSemanticContext.NONE = new Predicate();\n\n\nPredicate.prototype.evaluate = function(parser, outerContext) {\n\tvar localctx = this.isCtxDependent ? outerContext : null;\n\treturn parser.sempred(localctx, this.ruleIndex, this.predIndex);\n};\n\nPredicate.prototype.updateHashCode = function(hash) {\n\thash.update(this.ruleIndex, this.predIndex, this.isCtxDependent);\n};\n\nPredicate.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof Predicate)) {\n\t\treturn false;\n\t} else {\n\t\treturn this.ruleIndex === other.ruleIndex &&\n\t\t\t\tthis.predIndex === other.predIndex &&\n\t\t\t\tthis.isCtxDependent === other.isCtxDependent;\n\t}\n};\n\nPredicate.prototype.toString = function() {\n\treturn \"{\" + this.ruleIndex + \":\" + this.predIndex + \"}?\";\n};\n\nfunction PrecedencePredicate(precedence) {\n\tSemanticContext.call(this);\n\tthis.precedence = precedence === undefined ? 0 : precedence;\n}\n\nPrecedencePredicate.prototype = Object.create(SemanticContext.prototype);\nPrecedencePredicate.prototype.constructor = PrecedencePredicate;\n\nPrecedencePredicate.prototype.evaluate = function(parser, outerContext) {\n\treturn parser.precpred(outerContext, this.precedence);\n};\n\nPrecedencePredicate.prototype.evalPrecedence = function(parser, outerContext) {\n\tif (parser.precpred(outerContext, this.precedence)) {\n\t\treturn SemanticContext.NONE;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nPrecedencePredicate.prototype.compareTo = function(other) {\n\treturn this.precedence - other.precedence;\n};\n\nPrecedencePredicate.prototype.updateHashCode = function(hash) {\n hash.update(31);\n};\n\nPrecedencePredicate.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof PrecedencePredicate)) {\n\t\treturn false;\n\t} else {\n\t\treturn this.precedence === other.precedence;\n\t}\n};\n\nPrecedencePredicate.prototype.toString = function() {\n\treturn \"{\"+this.precedence+\">=prec}?\";\n};\n\n\n\nPrecedencePredicate.filterPrecedencePredicates = function(set) {\n\tvar result = [];\n\tset.values().map( function(context) {\n\t\tif (context instanceof PrecedencePredicate) {\n\t\t\tresult.push(context);\n\t\t}\n\t});\n\treturn result;\n};\n\n\n// A semantic context which is true whenever none of the contained contexts\n// is false.\n//\nfunction AND(a, b) {\n\tSemanticContext.call(this);\n\tvar operands = new Set();\n\tif (a instanceof AND) {\n\t\ta.opnds.map(function(o) {\n\t\t\toperands.add(o);\n\t\t});\n\t} else {\n\t\toperands.add(a);\n\t}\n\tif (b instanceof AND) {\n\t\tb.opnds.map(function(o) {\n\t\t\toperands.add(o);\n\t\t});\n\t} else {\n\t\toperands.add(b);\n\t}\n\tvar precedencePredicates = PrecedencePredicate.filterPrecedencePredicates(operands);\n\tif (precedencePredicates.length > 0) {\n\t\t// interested in the transition with the lowest precedence\n\t\tvar reduced = null;\n\t\tprecedencePredicates.map( function(p) {\n\t\t\tif(reduced===null || p.precedence\n// The evaluation of predicates by this context is short-circuiting, but\n// unordered.

\n//\nAND.prototype.evaluate = function(parser, outerContext) {\n\tfor (var i = 0; i < this.opnds.length; i++) {\n\t\tif (!this.opnds[i].evaluate(parser, outerContext)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\nAND.prototype.evalPrecedence = function(parser, outerContext) {\n\tvar differs = false;\n\tvar operands = [];\n\tfor (var i = 0; i < this.opnds.length; i++) {\n\t\tvar context = this.opnds[i];\n\t\tvar evaluated = context.evalPrecedence(parser, outerContext);\n\t\tdiffers |= (evaluated !== context);\n\t\tif (evaluated === null) {\n\t\t\t// The AND context is false if any element is false\n\t\t\treturn null;\n\t\t} else if (evaluated !== SemanticContext.NONE) {\n\t\t\t// Reduce the result by skipping true elements\n\t\t\toperands.push(evaluated);\n\t\t}\n\t}\n\tif (!differs) {\n\t\treturn this;\n\t}\n\tif (operands.length === 0) {\n\t\t// all elements were true, so the AND context is true\n\t\treturn SemanticContext.NONE;\n\t}\n\tvar result = null;\n\toperands.map(function(o) {\n\t\tresult = result === null ? o : SemanticContext.andContext(result, o);\n\t});\n\treturn result;\n};\n\nAND.prototype.toString = function() {\n\tvar s = \"\";\n\tthis.opnds.map(function(o) {\n\t\ts += \"&& \" + o.toString();\n\t});\n\treturn s.length > 3 ? s.slice(3) : s;\n};\n\n//\n// A semantic context which is true whenever at least one of the contained\n// contexts is true.\n//\nfunction OR(a, b) {\n\tSemanticContext.call(this);\n\tvar operands = new Set();\n\tif (a instanceof OR) {\n\t\ta.opnds.map(function(o) {\n\t\t\toperands.add(o);\n\t\t});\n\t} else {\n\t\toperands.add(a);\n\t}\n\tif (b instanceof OR) {\n\t\tb.opnds.map(function(o) {\n\t\t\toperands.add(o);\n\t\t});\n\t} else {\n\t\toperands.add(b);\n\t}\n\n\tvar precedencePredicates = PrecedencePredicate.filterPrecedencePredicates(operands);\n\tif (precedencePredicates.length > 0) {\n\t\t// interested in the transition with the highest precedence\n\t\tvar s = precedencePredicates.sort(function(a, b) {\n\t\t\treturn a.compareTo(b);\n\t\t});\n\t\tvar reduced = s[s.length-1];\n\t\toperands.add(reduced);\n\t}\n\tthis.opnds = operands.values();\n\treturn this;\n}\n\nOR.prototype = Object.create(SemanticContext.prototype);\nOR.prototype.constructor = OR;\n\nOR.prototype.constructor = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof OR)) {\n\t\treturn false;\n\t} else {\n\t\treturn this.opnds === other.opnds;\n\t}\n};\n\nOR.prototype.updateHashCode = function(hash) {\n hash.update(this.opnds, \"OR\");\n};\n\n//

\n// The evaluation of predicates by this context is short-circuiting, but\n// unordered.

\n//\nOR.prototype.evaluate = function(parser, outerContext) {\n\tfor (var i = 0; i < this.opnds.length; i++) {\n\t\tif (this.opnds[i].evaluate(parser, outerContext)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nOR.prototype.evalPrecedence = function(parser, outerContext) {\n\tvar differs = false;\n\tvar operands = [];\n\tfor (var i = 0; i < this.opnds.length; i++) {\n\t\tvar context = this.opnds[i];\n\t\tvar evaluated = context.evalPrecedence(parser, outerContext);\n\t\tdiffers |= (evaluated !== context);\n\t\tif (evaluated === SemanticContext.NONE) {\n\t\t\t// The OR context is true if any element is true\n\t\t\treturn SemanticContext.NONE;\n\t\t} else if (evaluated !== null) {\n\t\t\t// Reduce the result by skipping false elements\n\t\t\toperands.push(evaluated);\n\t\t}\n\t}\n\tif (!differs) {\n\t\treturn this;\n\t}\n\tif (operands.length === 0) {\n\t\t// all elements were false, so the OR context is false\n\t\treturn null;\n\t}\n\tvar result = null;\n\toperands.map(function(o) {\n\t\treturn result === null ? o : SemanticContext.orContext(result, o);\n\t});\n\treturn result;\n};\n\nOR.prototype.toString = function() {\n\tvar s = \"\";\n\tthis.opnds.map(function(o) {\n\t\ts += \"|| \" + o.toString();\n\t});\n\treturn s.length > 3 ? s.slice(3) : s;\n};\n\nexports.SemanticContext = SemanticContext;\nexports.PrecedencePredicate = PrecedencePredicate;\nexports.Predicate = Predicate;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2F0bi9TZW1hbnRpY0NvbnRleHQuanM/YWQyMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixhQUFhLHdCQUF3QixhQUFhO0FBQ3JFO0FBQ0EsMEJBQTBCLFVBQVUsR0FBRyxTQUFTLE9BQU8sZ0JBQWdCO0FBQ3ZFLEtBQUssc0JBQXNCO0FBQzNCOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxHQUFZO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFZOztBQUUvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGFBQWEsa0NBQWtDLFdBQVc7QUFDbEU7QUFDQSxRQUFRLFdBQVcsa0NBQWtDLFlBQVk7QUFDakU7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQSxjQUFjLFdBQVcsRUFBRSxzQkFBc0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsc0JBQXNCO0FBQ3JDLDJCQUEyQixPQUFPLEtBQUssRUFBRTtBQUN6QztBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLDhDQUE4QztBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVUsMEJBQTBCO0FBQ3BDOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVCQUF1QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwiZmlsZSI6IjMwMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyBBIHRyZWUgc3RydWN0dXJlIHVzZWQgdG8gcmVjb3JkIHRoZSBzZW1hbnRpYyBjb250ZXh0IGluIHdoaWNoXG4vLyAgYW4gQVROIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQuICBJdCdzIGVpdGhlciBhIHNpbmdsZSBwcmVkaWNhdGUsXG4vLyAgYSBjb25qdW5jdGlvbiB7QGNvZGUgcDEmJnAyfSwgb3IgYSBzdW0gb2YgcHJvZHVjdHMge0Bjb2RlIHAxfHxwMn0uXG4vL1xuLy8gIDxwPkkgaGF2ZSBzY29wZWQgdGhlIHtAbGluayBBTkR9LCB7QGxpbmsgT1J9LCBhbmQge0BsaW5rIFByZWRpY2F0ZX0gc3ViY2xhc3NlcyBvZlxuLy8gIHtAbGluayBTZW1hbnRpY0NvbnRleHR9IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBvdXRlciBjbGFzcy48L3A+XG4vL1xuXG52YXIgU2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLlNldDtcbnZhciBIYXNoID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkhhc2g7XG5cbmZ1bmN0aW9uIFNlbWFudGljQ29udGV4dCgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNlbWFudGljQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbi8vIEZvciBjb250ZXh0IGluZGVwZW5kZW50IHByZWRpY2F0ZXMsIHdlIGV2YWx1YXRlIHRoZW0gd2l0aG91dCBhIGxvY2FsXG4vLyBjb250ZXh0IChpLmUuLCBudWxsIGNvbnRleHQpLiBUaGF0IHdheSwgd2UgY2FuIGV2YWx1YXRlIHRoZW0gd2l0aG91dFxuLy8gaGF2aW5nIHRvIGNyZWF0ZSBwcm9wZXIgcnVsZS1zcGVjaWZpYyBjb250ZXh0IGR1cmluZyBwcmVkaWN0aW9uIChhc1xuLy8gb3Bwb3NlZCB0byB0aGUgcGFyc2VyLCB3aGljaCBjcmVhdGVzIHRoZW0gbmF0dXJhbGx5KS4gSW4gYSBwcmFjdGljYWxcbi8vIHNlbnNlLCB0aGlzIGF2b2lkcyBhIGNhc3QgZXhjZXB0aW9uIGZyb20gUnVsZUNvbnRleHQgdG8gbXlydWxlQ29udGV4dC5cbi8vXG4vLyA8cD5Gb3IgY29udGV4dCBkZXBlbmRlbnQgcHJlZGljYXRlcywgd2UgbXVzdCBwYXNzIGluIGEgbG9jYWwgY29udGV4dCBzbyB0aGF0XG4vLyByZWZlcmVuY2VzIHN1Y2ggYXMgJGFyZyBldmFsdWF0ZSBwcm9wZXJseSBhcyBfbG9jYWxjdHguYXJnLiBXZSBvbmx5XG4vLyBjYXB0dXJlIGNvbnRleHQgZGVwZW5kZW50IHByZWRpY2F0ZXMgaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggd2UgYmVnaW5cbi8vIHByZWRpY3Rpb24sIHNvIHdlIHBhc3NlZCBpbiB0aGUgb3V0ZXIgY29udGV4dCBoZXJlIGluIGNhc2Ugb2YgY29udGV4dFxuLy8gZGVwZW5kZW50IHByZWRpY2F0ZSBldmFsdWF0aW9uLjwvcD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcbn07XG5cbi8vXG4vLyBFdmFsdWF0ZSB0aGUgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGZvciB0aGUgY29udGV4dCBhbmQgcmVkdWNlIHRoZSByZXN1bHQuXG4vL1xuLy8gQHBhcmFtIHBhcnNlciBUaGUgcGFyc2VyIGluc3RhbmNlLlxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgY3VycmVudCBwYXJzZXIgY29udGV4dCBvYmplY3QuXG4vLyBAcmV0dXJuIFRoZSBzaW1wbGlmaWVkIHNlbWFudGljIGNvbnRleHQgYWZ0ZXIgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZVxuLy8gZXZhbHVhdGVkLCB3aGljaCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy5cbi8vIDx1bD5cbi8vIDxsaT57QGxpbmsgLy9OT05FfTogaWYgdGhlIHByZWRpY2F0ZSBzaW1wbGlmaWVzIHRvIHtAY29kZSB0cnVlfSBhZnRlclxuLy8gcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQuPC9saT5cbi8vIDxsaT57QGNvZGUgbnVsbH06IGlmIHRoZSBwcmVkaWNhdGUgc2ltcGxpZmllcyB0byB7QGNvZGUgZmFsc2V9IGFmdGVyXG4vLyBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPGxpPntAY29kZSB0aGlzfTogaWYgdGhlIHNlbWFudGljIGNvbnRleHQgaXMgbm90IGNoYW5nZWQgYXMgYSByZXN1bHQgb2Zcbi8vIHByZWNlZGVuY2UgcHJlZGljYXRlIGV2YWx1YXRpb24uPC9saT5cbi8vIDxsaT5BIG5vbi17QGNvZGUgbnVsbH0ge0BsaW5rIFNlbWFudGljQ29udGV4dH06IHRoZSBuZXcgc2ltcGxpZmllZFxuLy8gc2VtYW50aWMgY29udGV4dCBhZnRlciBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPC91bD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwgfHwgYSA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQU5EKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuU2VtYW50aWNDb250ZXh0Lm9yQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBTZW1hbnRpY0NvbnRleHQuTk9ORTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbmV3IE9SKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuZnVuY3Rpb24gUHJlZGljYXRlKHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXggPT09IHVuZGVmaW5lZCA/IC0xIDogcnVsZUluZGV4O1xuXHR0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleCA9PT0gdW5kZWZpbmVkID8gLTEgOiBwcmVkSW5kZXg7XG5cdHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpc0N0eERlcGVuZGVudDsgLy8gZS5nLiwgJGkgcmVmIGluIHByZWRcblx0cmV0dXJuIHRoaXM7XG59XG5cblByZWRpY2F0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNlbWFudGljQ29udGV4dC5wcm90b3R5cGUpO1xuUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZTtcblxuLy9UaGUgZGVmYXVsdCB7QGxpbmsgU2VtYW50aWNDb250ZXh0fSwgd2hpY2ggaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG9cbi8vYSBwcmVkaWNhdGUgb2YgdGhlIGZvcm0ge0Bjb2RlIHt0cnVlfT99LlxuLy9cblNlbWFudGljQ29udGV4dC5OT05FID0gbmV3IFByZWRpY2F0ZSgpO1xuXG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbihwYXJzZXIsIG91dGVyQ29udGV4dCkge1xuXHR2YXIgbG9jYWxjdHggPSB0aGlzLmlzQ3R4RGVwZW5kZW50ID8gb3V0ZXJDb250ZXh0IDogbnVsbDtcblx0cmV0dXJuIHBhcnNlci5zZW1wcmVkKGxvY2FsY3R4LCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5wcmVkSW5kZXgpO1xufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aGFzaC51cGRhdGUodGhpcy5ydWxlSW5kZXgsIHRoaXMucHJlZEluZGV4LCB0aGlzLmlzQ3R4RGVwZW5kZW50KTtcbn07XG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFByZWRpY2F0ZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiZcblx0XHRcdFx0dGhpcy5wcmVkSW5kZXggPT09IG90aGVyLnByZWRJbmRleCAmJlxuXHRcdFx0XHR0aGlzLmlzQ3R4RGVwZW5kZW50ID09PSBvdGhlci5pc0N0eERlcGVuZGVudDtcblx0fVxufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGVJbmRleCArIFwiOlwiICsgdGhpcy5wcmVkSW5kZXggKyBcIn0/XCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlKHByZWNlZGVuY2UpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCA/IDAgOiBwcmVjZWRlbmNlO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWNlZGVuY2VQcmVkaWNhdGU7XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHBhcnNlci5wcmVjcHJlZChvdXRlckNvbnRleHQsIHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGlmIChwYXJzZXIucHJlY3ByZWQob3V0ZXJDb250ZXh0LCB0aGlzLnByZWNlZGVuY2UpKSB7XG5cdFx0cmV0dXJuIFNlbWFudGljQ29udGV4dC5OT05FO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb21wYXJlVG8gPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlIC0gb3RoZXIucHJlY2VkZW5jZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKDMxKTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQcmVjZWRlbmNlUHJlZGljYXRlKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlID09PSBvdGhlci5wcmVjZWRlbmNlO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIrdGhpcy5wcmVjZWRlbmNlK1wiPj1wcmVjfT9cIjtcbn07XG5cblxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLmZpbHRlclByZWNlZGVuY2VQcmVkaWNhdGVzID0gZnVuY3Rpb24oc2V0KSB7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0c2V0LnZhbHVlcygpLm1hcCggZnVuY3Rpb24oY29udGV4dCkge1xuXHRcdGlmIChjb250ZXh0IGluc3RhbmNlb2YgUHJlY2VkZW5jZVByZWRpY2F0ZSkge1xuXHRcdFx0cmVzdWx0LnB1c2goY29udGV4dCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgbm9uZSBvZiB0aGUgY29udGFpbmVkIGNvbnRleHRzXG4vLyBpcyBmYWxzZS5cbi8vXG5mdW5jdGlvbiBBTkQoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIEFORCkge1xuXHRcdGEub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRcdG9wZXJhbmRzLmFkZChvKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvcGVyYW5kcy5hZGQoYSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBBTkQpIHtcblx0XHRiLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0XHRvcGVyYW5kcy5hZGQobyk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3BlcmFuZHMuYWRkKGIpO1xuXHR9XG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgbG93ZXN0IHByZWNlZGVuY2Vcblx0XHR2YXIgcmVkdWNlZCA9IG51bGw7XG5cdFx0cHJlY2VkZW5jZVByZWRpY2F0ZXMubWFwKCBmdW5jdGlvbihwKSB7XG5cdFx0XHRpZihyZWR1Y2VkPT09bnVsbCB8fCBwLnByZWNlZGVuY2U8cmVkdWNlZC5wcmVjZWRlbmNlKSB7XG5cdFx0XHRcdHJlZHVjZWQgPSBwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9wZXJhbmRzLmFkZChyZWR1Y2VkKTtcblx0fVxuXHR0aGlzLm9wbmRzID0gb3BlcmFuZHMudmFsdWVzKCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5BTkQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZW1hbnRpY0NvbnRleHQucHJvdG90eXBlKTtcbkFORC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBTkQ7XG5cbkFORC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFORCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMub3BuZHMgPT09IG90aGVyLm9wbmRzO1xuXHR9XG59O1xuXG5BTkQucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMub3BuZHMsIFwiQU5EXCIpO1xufTtcbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuQU5ELnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICghdGhpcy5vcG5kc1tpXS5ldmFsdWF0ZShwYXJzZXIsIG91dGVyQ29udGV4dCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG5BTkQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBudWxsKSB7XG5cdFx0XHQvLyBUaGUgQU5EIGNvbnRleHQgaXMgZmFsc2UgaWYgYW55IGVsZW1lbnQgaXMgZmFsc2Vcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gZWxzZSBpZiAoZXZhbHVhdGVkICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gUmVkdWNlIHRoZSByZXN1bHQgYnkgc2tpcHBpbmcgdHJ1ZSBlbGVtZW50c1xuXHRcdFx0b3BlcmFuZHMucHVzaChldmFsdWF0ZWQpO1xuXHRcdH1cblx0fVxuXHRpZiAoIWRpZmZlcnMpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRpZiAob3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gYWxsIGVsZW1lbnRzIHdlcmUgdHJ1ZSwgc28gdGhlIEFORCBjb250ZXh0IGlzIHRydWVcblx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdH1cblx0dmFyIHJlc3VsdCA9IG51bGw7XG5cdG9wZXJhbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KHJlc3VsdCwgbyk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuQU5ELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHRoaXMub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRzICs9IFwiJiYgXCIgKyBvLnRvU3RyaW5nKCk7XG5cdH0pO1xuXHRyZXR1cm4gcy5sZW5ndGggPiAzID8gcy5zbGljZSgzKSA6IHM7XG59O1xuXG4vL1xuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIG9mIHRoZSBjb250YWluZWRcbi8vIGNvbnRleHRzIGlzIHRydWUuXG4vL1xuZnVuY3Rpb24gT1IoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0YS5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChhKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0Yi5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChiKTtcblx0fVxuXG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgaGlnaGVzdCBwcmVjZWRlbmNlXG5cdFx0dmFyIHMgPSBwcmVjZWRlbmNlUHJlZGljYXRlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHJldHVybiBhLmNvbXBhcmVUbyhiKTtcblx0XHR9KTtcblx0XHR2YXIgcmVkdWNlZCA9IHNbcy5sZW5ndGgtMV07XG5cdFx0b3BlcmFuZHMuYWRkKHJlZHVjZWQpO1xuXHR9XG5cdHRoaXMub3BuZHMgPSBvcGVyYW5kcy52YWx1ZXMoKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9SLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5PUi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPUjtcblxuT1IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIE9SKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5vcG5kcyA9PT0gb3RoZXIub3BuZHM7XG5cdH1cbn07XG5cbk9SLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLm9wbmRzLCBcIk9SXCIpO1xufTtcblxuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuT1IucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wbmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHRoaXMub3BuZHNbaV0uZXZhbHVhdGUocGFyc2VyLCBvdXRlckNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuT1IucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gVGhlIE9SIGNvbnRleHQgaXMgdHJ1ZSBpZiBhbnkgZWxlbWVudCBpcyB0cnVlXG5cdFx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdFx0fSBlbHNlIGlmIChldmFsdWF0ZWQgIT09IG51bGwpIHtcblx0XHRcdC8vIFJlZHVjZSB0aGUgcmVzdWx0IGJ5IHNraXBwaW5nIGZhbHNlIGVsZW1lbnRzXG5cdFx0XHRvcGVyYW5kcy5wdXNoKGV2YWx1YXRlZCk7XG5cdFx0fVxuXHR9XG5cdGlmICghZGlmZmVycykge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGlmIChvcGVyYW5kcy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBhbGwgZWxlbWVudHMgd2VyZSBmYWxzZSwgc28gdGhlIE9SIGNvbnRleHQgaXMgZmFsc2Vcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbnVsbDtcblx0b3BlcmFuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQocmVzdWx0LCBvKTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5PUi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHR0aGlzLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cyArPSBcInx8IFwiICsgby50b1N0cmluZygpO1xuXHR9KTtcblx0cmV0dXJuIHMubGVuZ3RoID4gMyA/IHMuc2xpY2UoMykgOiBzO1xufTtcblxuZXhwb3J0cy5TZW1hbnRpY0NvbnRleHQgPSBTZW1hbnRpY0NvbnRleHQ7XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGUgPSBQcmVjZWRlbmNlUHJlZGljYXRlO1xuZXhwb3J0cy5QcmVkaWNhdGUgPSBQcmVkaWNhdGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///302\n"); /***/ }), /***/ 303: /***/ (function(module, exports, __webpack_require__) { eval("//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\nvar ATNConfigSet = __webpack_require__(297).ATNConfigSet;\nvar Utils = __webpack_require__(269);\nvar Hash = Utils.Hash;\nvar Set = Utils.Set;\n\n// Map a predicate to a predicted alternative.///\n\nfunction PredPrediction(pred, alt) {\n\tthis.alt = alt;\n\tthis.pred = pred;\n\treturn this;\n}\n\nPredPrediction.prototype.toString = function() {\n\treturn \"(\" + this.pred + \", \" + this.alt + \")\";\n};\n\n// A DFA state represents a set of possible ATN configurations.\n// As Aho, Sethi, Ullman p. 117 says \"The DFA uses its state\n// to keep track of all possible states the ATN can be in after\n// reading each input symbol. That is to say, after reading\n// input a1a2..an, the DFA is in a state that represents the\n// subset T of the states of the ATN that are reachable from the\n// ATN's start state along some path labeled a1a2..an.\"\n// In conventional NFA→DFA conversion, therefore, the subset T\n// would be a bitset representing the set of states the\n// ATN could be in. We need to track the alt predicted by each\n// state as well, however. More importantly, we need to maintain\n// a stack of states, tracking the closure operations as they\n// jump from rule to rule, emulating rule invocations (method calls).\n// I have to add a stack to simulate the proper lookahead sequences for\n// the underlying LL grammar from which the ATN was derived.\n//\n//

I use a set of ATNConfig objects not simple states. An ATNConfig\n// is both a state (ala normal conversion) and a RuleContext describing\n// the chain of rules (if any) followed to arrive at that state.

\n//\n//

A DFA state may have multiple references to a particular state,\n// but with different ATN contexts (with same or different alts)\n// meaning that state was reached via a different set of rule invocations.

\n// /\n\nfunction DFAState(stateNumber, configs) {\n\tif (stateNumber === null) {\n\t\tstateNumber = -1;\n\t}\n\tif (configs === null) {\n\t\tconfigs = new ATNConfigSet();\n\t}\n\tthis.stateNumber = stateNumber;\n\tthis.configs = configs;\n\t// {@code edges[symbol]} points to target of symbol. Shift up by 1 so (-1)\n\t// {@link Token//EOF} maps to {@code edges[0]}.\n\tthis.edges = null;\n\tthis.isAcceptState = false;\n\t// if accept state, what ttype do we match or alt do we predict?\n\t// This is set to {@link ATN//INVALID_ALT_NUMBER} when {@link\n\t// //predicates}{@code !=null} or\n\t// {@link //requiresFullContext}.\n\tthis.prediction = 0;\n\tthis.lexerActionExecutor = null;\n\t// Indicates that this state was created during SLL prediction that\n\t// discovered a conflict between the configurations in the state. Future\n\t// {@link ParserATNSimulator//execATN} invocations immediately jumped doing\n\t// full context prediction if this field is true.\n\tthis.requiresFullContext = false;\n\t// During SLL parsing, this is a list of predicates associated with the\n\t// ATN configurations of the DFA state. When we have predicates,\n\t// {@link //requiresFullContext} is {@code false} since full context\n\t// prediction evaluates predicates\n\t// on-the-fly. If this is not null, then {@link //prediction} is\n\t// {@link ATN//INVALID_ALT_NUMBER}.\n\t//\n\t//

We only use these for non-{@link //requiresFullContext} but\n\t// conflicting states. That\n\t// means we know from the context (it's $ or we don't dip into outer\n\t// context) that it's an ambiguity not a conflict.

\n\t//\n\t//

This list is computed by {@link\n\t// ParserATNSimulator//predicateDFAState}.

\n\tthis.predicates = null;\n\treturn this;\n}\n\n// Get the set of all alts mentioned by all ATN configurations in this\n// DFA state.\nDFAState.prototype.getAltSet = function() {\n\tvar alts = new Set();\n\tif (this.configs !== null) {\n\t\tfor (var i = 0; i < this.configs.length; i++) {\n\t\t\tvar c = this.configs[i];\n\t\t\talts.add(c.alt);\n\t\t}\n\t}\n\tif (alts.length === 0) {\n\t\treturn null;\n\t} else {\n\t\treturn alts;\n\t}\n};\n\n// Two {@link DFAState} instances are equal if their ATN configuration sets\n// are the same. This method is used to see if a state already exists.\n//\n//

Because the number of alternatives and number of ATN configurations are\n// finite, there is a finite number of DFA states that can be processed.\n// This is necessary to show that the algorithm terminates.

\n//\n//

Cannot test the DFA state numbers here because in\n// {@link ParserATNSimulator//addDFAState} we need to know if any other state\n// exists that has this exact set of ATN configurations. The\n// {@link //stateNumber} is irrelevant.

\nDFAState.prototype.equals = function(other) {\n\t// compare set of ATN configurations in this set with other\n\treturn this === other ||\n\t\t\t(other instanceof DFAState &&\n\t\t\t\tthis.configs.equals(other.configs));\n};\n\nDFAState.prototype.toString = function() {\n\tvar s = \"\" + this.stateNumber + \":\" + this.configs;\n\tif(this.isAcceptState) {\n s = s + \"=>\";\n if (this.predicates !== null)\n s = s + this.predicates;\n else\n s = s + this.prediction;\n }\n\treturn s;\n};\n\nDFAState.prototype.hashCode = function() {\n\tvar hash = new Hash();\n\thash.update(this.configs);\n return hash.finish();\n};\n\nexports.DFAState = DFAState;\nexports.PredPrediction = PredPrediction;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkFTdGF0ZS5qcz80NjNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUNsRCxZQUFZLG1CQUFPLENBQUMsR0FBWTtBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssb0JBQW9CO0FBQ3pCLEtBQUssaUJBQWlCLFVBQVUsZUFBZTtBQUMvQztBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsOEJBQThCLE9BQU87QUFDekQsa0JBQWtCLGFBQWE7QUFDL0IsS0FBSyw0QkFBNEI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLGtDQUFrQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssNEJBQTRCLEtBQUssWUFBWTtBQUNsRDtBQUNBLDJDQUEyQyxtQkFBbUI7QUFDOUQsS0FBSyw4QkFBOEI7QUFDbkM7QUFDQSxrQ0FBa0MsNEJBQTRCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix5QkFBeUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLGVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHNDQUFzQztBQUMxQztBQUNBLElBQUksb0JBQW9CO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIzMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuLy4uL2F0bi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJyk7XG52YXIgSGFzaCA9IFV0aWxzLkhhc2g7XG52YXIgU2V0ID0gVXRpbHMuU2V0O1xuXG4vLyBNYXAgYSBwcmVkaWNhdGUgdG8gYSBwcmVkaWN0ZWQgYWx0ZXJuYXRpdmUuLy8vXG5cbmZ1bmN0aW9uIFByZWRQcmVkaWN0aW9uKHByZWQsIGFsdCkge1xuXHR0aGlzLmFsdCA9IGFsdDtcblx0dGhpcy5wcmVkID0gcHJlZDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblByZWRQcmVkaWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIoXCIgKyB0aGlzLnByZWQgKyBcIiwgXCIgKyB0aGlzLmFsdCArIFwiKVwiO1xufTtcblxuLy8gQSBERkEgc3RhdGUgcmVwcmVzZW50cyBhIHNldCBvZiBwb3NzaWJsZSBBVE4gY29uZmlndXJhdGlvbnMuXG4vLyBBcyBBaG8sIFNldGhpLCBVbGxtYW4gcC4gMTE3IHNheXMgXCJUaGUgREZBIHVzZXMgaXRzIHN0YXRlXG4vLyB0byBrZWVwIHRyYWNrIG9mIGFsbCBwb3NzaWJsZSBzdGF0ZXMgdGhlIEFUTiBjYW4gYmUgaW4gYWZ0ZXJcbi8vIHJlYWRpbmcgZWFjaCBpbnB1dCBzeW1ib2wuIFRoYXQgaXMgdG8gc2F5LCBhZnRlciByZWFkaW5nXG4vLyBpbnB1dCBhMWEyLi5hbiwgdGhlIERGQSBpcyBpbiBhIHN0YXRlIHRoYXQgcmVwcmVzZW50cyB0aGVcbi8vIHN1YnNldCBUIG9mIHRoZSBzdGF0ZXMgb2YgdGhlIEFUTiB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB0aGVcbi8vIEFUTidzIHN0YXJ0IHN0YXRlIGFsb25nIHNvbWUgcGF0aCBsYWJlbGVkIGExYTIuLmFuLlwiXG4vLyBJbiBjb252ZW50aW9uYWwgTkZBJnJhcnI7REZBIGNvbnZlcnNpb24sIHRoZXJlZm9yZSwgdGhlIHN1YnNldCBUXG4vLyB3b3VsZCBiZSBhIGJpdHNldCByZXByZXNlbnRpbmcgdGhlIHNldCBvZiBzdGF0ZXMgdGhlXG4vLyBBVE4gY291bGQgYmUgaW4uIFdlIG5lZWQgdG8gdHJhY2sgdGhlIGFsdCBwcmVkaWN0ZWQgYnkgZWFjaFxuLy8gc3RhdGUgYXMgd2VsbCwgaG93ZXZlci4gTW9yZSBpbXBvcnRhbnRseSwgd2UgbmVlZCB0byBtYWludGFpblxuLy8gYSBzdGFjayBvZiBzdGF0ZXMsIHRyYWNraW5nIHRoZSBjbG9zdXJlIG9wZXJhdGlvbnMgYXMgdGhleVxuLy8ganVtcCBmcm9tIHJ1bGUgdG8gcnVsZSwgZW11bGF0aW5nIHJ1bGUgaW52b2NhdGlvbnMgKG1ldGhvZCBjYWxscykuXG4vLyBJIGhhdmUgdG8gYWRkIGEgc3RhY2sgdG8gc2ltdWxhdGUgdGhlIHByb3BlciBsb29rYWhlYWQgc2VxdWVuY2VzIGZvclxuLy8gdGhlIHVuZGVybHlpbmcgTEwgZ3JhbW1hciBmcm9tIHdoaWNoIHRoZSBBVE4gd2FzIGRlcml2ZWQuXG4vL1xuLy8gPHA+SSB1c2UgYSBzZXQgb2YgQVROQ29uZmlnIG9iamVjdHMgbm90IHNpbXBsZSBzdGF0ZXMuIEFuIEFUTkNvbmZpZ1xuLy8gaXMgYm90aCBhIHN0YXRlIChhbGEgbm9ybWFsIGNvbnZlcnNpb24pIGFuZCBhIFJ1bGVDb250ZXh0IGRlc2NyaWJpbmdcbi8vIHRoZSBjaGFpbiBvZiBydWxlcyAoaWYgYW55KSBmb2xsb3dlZCB0byBhcnJpdmUgYXQgdGhhdCBzdGF0ZS48L3A+XG4vL1xuLy8gPHA+QSBERkEgc3RhdGUgbWF5IGhhdmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byBhIHBhcnRpY3VsYXIgc3RhdGUsXG4vLyBidXQgd2l0aCBkaWZmZXJlbnQgQVROIGNvbnRleHRzICh3aXRoIHNhbWUgb3IgZGlmZmVyZW50IGFsdHMpXG4vLyBtZWFuaW5nIHRoYXQgc3RhdGUgd2FzIHJlYWNoZWQgdmlhIGEgZGlmZmVyZW50IHNldCBvZiBydWxlIGludm9jYXRpb25zLjwvcD5cbi8vIC9cblxuZnVuY3Rpb24gREZBU3RhdGUoc3RhdGVOdW1iZXIsIGNvbmZpZ3MpIHtcblx0aWYgKHN0YXRlTnVtYmVyID09PSBudWxsKSB7XG5cdFx0c3RhdGVOdW1iZXIgPSAtMTtcblx0fVxuXHRpZiAoY29uZmlncyA9PT0gbnVsbCkge1xuXHRcdGNvbmZpZ3MgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG5cdH1cblx0dGhpcy5zdGF0ZU51bWJlciA9IHN0YXRlTnVtYmVyO1xuXHR0aGlzLmNvbmZpZ3MgPSBjb25maWdzO1xuXHQvLyB7QGNvZGUgZWRnZXNbc3ltYm9sXX0gcG9pbnRzIHRvIHRhcmdldCBvZiBzeW1ib2wuIFNoaWZ0IHVwIGJ5IDEgc28gKC0xKVxuXHQvLyB7QGxpbmsgVG9rZW4vL0VPRn0gbWFwcyB0byB7QGNvZGUgZWRnZXNbMF19LlxuXHR0aGlzLmVkZ2VzID0gbnVsbDtcblx0dGhpcy5pc0FjY2VwdFN0YXRlID0gZmFsc2U7XG5cdC8vIGlmIGFjY2VwdCBzdGF0ZSwgd2hhdCB0dHlwZSBkbyB3ZSBtYXRjaCBvciBhbHQgZG8gd2UgcHJlZGljdD9cblx0Ly8gVGhpcyBpcyBzZXQgdG8ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfSB3aGVuIHtAbGlua1xuXHQvLyAvL3ByZWRpY2F0ZXN9e0Bjb2RlICE9bnVsbH0gb3Jcblx0Ly8ge0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0uXG5cdHRoaXMucHJlZGljdGlvbiA9IDA7XG5cdHRoaXMubGV4ZXJBY3Rpb25FeGVjdXRvciA9IG51bGw7XG5cdC8vIEluZGljYXRlcyB0aGF0IHRoaXMgc3RhdGUgd2FzIGNyZWF0ZWQgZHVyaW5nIFNMTCBwcmVkaWN0aW9uIHRoYXRcblx0Ly8gZGlzY292ZXJlZCBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBzdGF0ZS4gRnV0dXJlXG5cdC8vIHtAbGluayBQYXJzZXJBVE5TaW11bGF0b3IvL2V4ZWNBVE59IGludm9jYXRpb25zIGltbWVkaWF0ZWx5IGp1bXBlZCBkb2luZ1xuXHQvLyBmdWxsIGNvbnRleHQgcHJlZGljdGlvbiBpZiB0aGlzIGZpZWxkIGlzIHRydWUuXG5cdHRoaXMucmVxdWlyZXNGdWxsQ29udGV4dCA9IGZhbHNlO1xuXHQvLyBEdXJpbmcgU0xMIHBhcnNpbmcsIHRoaXMgaXMgYSBsaXN0IG9mIHByZWRpY2F0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuXHQvLyBBVE4gY29uZmlndXJhdGlvbnMgb2YgdGhlIERGQSBzdGF0ZS4gV2hlbiB3ZSBoYXZlIHByZWRpY2F0ZXMsXG5cdC8vIHtAbGluayAvL3JlcXVpcmVzRnVsbENvbnRleHR9IGlzIHtAY29kZSBmYWxzZX0gc2luY2UgZnVsbCBjb250ZXh0XG5cdC8vIHByZWRpY3Rpb24gZXZhbHVhdGVzIHByZWRpY2F0ZXNcblx0Ly8gb24tdGhlLWZseS4gSWYgdGhpcyBpcyBub3QgbnVsbCwgdGhlbiB7QGxpbmsgLy9wcmVkaWN0aW9ufSBpc1xuXHQvLyB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LlxuXHQvL1xuXHQvLyA8cD5XZSBvbmx5IHVzZSB0aGVzZSBmb3Igbm9uLXtAbGluayAvL3JlcXVpcmVzRnVsbENvbnRleHR9IGJ1dFxuXHQvLyBjb25mbGljdGluZyBzdGF0ZXMuIFRoYXRcblx0Ly8gbWVhbnMgd2Uga25vdyBmcm9tIHRoZSBjb250ZXh0IChpdCdzICQgb3Igd2UgZG9uJ3QgZGlwIGludG8gb3V0ZXJcblx0Ly8gY29udGV4dCkgdGhhdCBpdCdzIGFuIGFtYmlndWl0eSBub3QgYSBjb25mbGljdC48L3A+XG5cdC8vXG5cdC8vIDxwPlRoaXMgbGlzdCBpcyBjb21wdXRlZCBieSB7QGxpbmtcblx0Ly8gUGFyc2VyQVROU2ltdWxhdG9yLy9wcmVkaWNhdGVERkFTdGF0ZX0uPC9wPlxuXHR0aGlzLnByZWRpY2F0ZXMgPSBudWxsO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy8gR2V0IHRoZSBzZXQgb2YgYWxsIGFsdHMgbWVudGlvbmVkIGJ5IGFsbCBBVE4gY29uZmlndXJhdGlvbnMgaW4gdGhpc1xuLy8gREZBIHN0YXRlLlxuREZBU3RhdGUucHJvdG90eXBlLmdldEFsdFNldCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYWx0cyA9IG5ldyBTZXQoKTtcblx0aWYgKHRoaXMuY29uZmlncyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYyA9IHRoaXMuY29uZmlnc1tpXTtcblx0XHRcdGFsdHMuYWRkKGMuYWx0KTtcblx0XHR9XG5cdH1cblx0aWYgKGFsdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFsdHM7XG5cdH1cbn07XG5cbi8vIFR3byB7QGxpbmsgREZBU3RhdGV9IGluc3RhbmNlcyBhcmUgZXF1YWwgaWYgdGhlaXIgQVROIGNvbmZpZ3VyYXRpb24gc2V0c1xuLy8gYXJlIHRoZSBzYW1lLiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNlZSBpZiBhIHN0YXRlIGFscmVhZHkgZXhpc3RzLlxuLy9cbi8vIDxwPkJlY2F1c2UgdGhlIG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgYW5kIG51bWJlciBvZiBBVE4gY29uZmlndXJhdGlvbnMgYXJlXG4vLyBmaW5pdGUsIHRoZXJlIGlzIGEgZmluaXRlIG51bWJlciBvZiBERkEgc3RhdGVzIHRoYXQgY2FuIGJlIHByb2Nlc3NlZC5cbi8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHNob3cgdGhhdCB0aGUgYWxnb3JpdGhtIHRlcm1pbmF0ZXMuPC9wPlxuLy9cbi8vIDxwPkNhbm5vdCB0ZXN0IHRoZSBERkEgc3RhdGUgbnVtYmVycyBoZXJlIGJlY2F1c2UgaW5cbi8vIHtAbGluayBQYXJzZXJBVE5TaW11bGF0b3IvL2FkZERGQVN0YXRlfSB3ZSBuZWVkIHRvIGtub3cgaWYgYW55IG90aGVyIHN0YXRlXG4vLyBleGlzdHMgdGhhdCBoYXMgdGhpcyBleGFjdCBzZXQgb2YgQVROIGNvbmZpZ3VyYXRpb25zLiBUaGVcbi8vIHtAbGluayAvL3N0YXRlTnVtYmVyfSBpcyBpcnJlbGV2YW50LjwvcD5cbkRGQVN0YXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHQvLyBjb21wYXJlIHNldCBvZiBBVE4gY29uZmlndXJhdGlvbnMgaW4gdGhpcyBzZXQgd2l0aCBvdGhlclxuXHRyZXR1cm4gdGhpcyA9PT0gb3RoZXIgfHxcblx0XHRcdChvdGhlciBpbnN0YW5jZW9mIERGQVN0YXRlICYmXG5cdFx0XHRcdHRoaXMuY29uZmlncy5lcXVhbHMob3RoZXIuY29uZmlncykpO1xufTtcblxuREZBU3RhdGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzID0gXCJcIiArIHRoaXMuc3RhdGVOdW1iZXIgKyBcIjpcIiArIHRoaXMuY29uZmlncztcblx0aWYodGhpcy5pc0FjY2VwdFN0YXRlKSB7XG4gICAgICAgIHMgPSBzICsgXCI9PlwiO1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGVzICE9PSBudWxsKVxuICAgICAgICAgICAgcyA9IHMgKyB0aGlzLnByZWRpY2F0ZXM7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMgPSBzICsgdGhpcy5wcmVkaWN0aW9uO1xuICAgIH1cblx0cmV0dXJuIHM7XG59O1xuXG5ERkFTdGF0ZS5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcblx0dmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpO1xufTtcblxuZXhwb3J0cy5ERkFTdGF0ZSA9IERGQVN0YXRlO1xuZXhwb3J0cy5QcmVkUHJlZGljdGlvbiA9IFByZWRQcmVkaWN0aW9uO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///303\n"); /***/ }), /***/ 305: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\nexports.atn = __webpack_require__(469);\nexports.codepointat = __webpack_require__(378);\nexports.dfa = __webpack_require__(476);\nexports.fromcodepoint = __webpack_require__(379);\nexports.tree = __webpack_require__(478);\nexports.error = __webpack_require__(479);\nexports.Token = __webpack_require__(270).Token;\nexports.CharStreams = __webpack_require__(481).CharStreams;\nexports.CommonToken = __webpack_require__(270).CommonToken;\nexports.InputStream = __webpack_require__(340).InputStream;\nexports.FileStream = __webpack_require__(482).FileStream;\nexports.CommonTokenStream = __webpack_require__(483).CommonTokenStream;\nexports.Lexer = __webpack_require__(319).Lexer;\nexports.Parser = __webpack_require__(485).Parser;\nvar pc = __webpack_require__(287);\nexports.PredictionContextCache = pc.PredictionContextCache;\nexports.ParserRuleContext = __webpack_require__(339).ParserRuleContext;\nexports.Interval = __webpack_require__(276).Interval;\nexports.Utils = __webpack_require__(269);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2luZGV4LmpzP2ViYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFPLENBQUMsR0FBYTtBQUNuQyxzQkFBc0IsbUJBQU8sQ0FBQyxHQUF5QjtBQUN2RCxjQUFjLG1CQUFPLENBQUMsR0FBYTtBQUNuQyx3QkFBd0IsbUJBQU8sQ0FBQyxHQUEyQjtBQUMzRCxlQUFlLG1CQUFPLENBQUMsR0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxHQUFlO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQVM7QUFDakMsc0JBQXNCLG1CQUFPLENBQUMsR0FBZTtBQUM3QyxzQkFBc0IsbUJBQU8sQ0FBQyxHQUFTO0FBQ3ZDLHNCQUFzQixtQkFBTyxDQUFDLEdBQWU7QUFDN0MscUJBQXFCLG1CQUFPLENBQUMsR0FBYztBQUMzQyw0QkFBNEIsbUJBQU8sQ0FBQyxHQUFxQjtBQUN6RCxnQkFBZ0IsbUJBQU8sQ0FBQyxHQUFTO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEdBQVU7QUFDbkMsU0FBUyxtQkFBTyxDQUFDLEdBQXFCO0FBQ3RDO0FBQ0EsNEJBQTRCLG1CQUFPLENBQUMsR0FBcUI7QUFDekQsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyxHQUFTIiwiZmlsZSI6IjMwNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbmV4cG9ydHMuYXRuID0gcmVxdWlyZSgnLi9hdG4vaW5kZXgnKTtcbmV4cG9ydHMuY29kZXBvaW50YXQgPSByZXF1aXJlKCcuL3BvbHlmaWxscy9jb2RlcG9pbnRhdCcpO1xuZXhwb3J0cy5kZmEgPSByZXF1aXJlKCcuL2RmYS9pbmRleCcpO1xuZXhwb3J0cy5mcm9tY29kZXBvaW50ID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMvZnJvbWNvZGVwb2ludCcpO1xuZXhwb3J0cy50cmVlID0gcmVxdWlyZSgnLi90cmVlL2luZGV4Jyk7XG5leHBvcnRzLmVycm9yID0gcmVxdWlyZSgnLi9lcnJvci9pbmRleCcpO1xuZXhwb3J0cy5Ub2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbmV4cG9ydHMuQ2hhclN0cmVhbXMgPSByZXF1aXJlKCcuL0NoYXJTdHJlYW1zJykuQ2hhclN0cmVhbXM7XG5leHBvcnRzLkNvbW1vblRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLkNvbW1vblRva2VuO1xuZXhwb3J0cy5JbnB1dFN0cmVhbSA9IHJlcXVpcmUoJy4vSW5wdXRTdHJlYW0nKS5JbnB1dFN0cmVhbTtcbmV4cG9ydHMuRmlsZVN0cmVhbSA9IHJlcXVpcmUoJy4vRmlsZVN0cmVhbScpLkZpbGVTdHJlYW07XG5leHBvcnRzLkNvbW1vblRva2VuU3RyZWFtID0gcmVxdWlyZSgnLi9Db21tb25Ub2tlblN0cmVhbScpLkNvbW1vblRva2VuU3RyZWFtO1xuZXhwb3J0cy5MZXhlciA9IHJlcXVpcmUoJy4vTGV4ZXInKS5MZXhlcjtcbmV4cG9ydHMuUGFyc2VyID0gcmVxdWlyZSgnLi9QYXJzZXInKS5QYXJzZXI7XG52YXIgcGMgPSByZXF1aXJlKCcuL1ByZWRpY3Rpb25Db250ZXh0Jyk7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0Q2FjaGUgPSBwYy5QcmVkaWN0aW9uQ29udGV4dENhY2hlO1xuZXhwb3J0cy5QYXJzZXJSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUGFyc2VyUnVsZUNvbnRleHQnKS5QYXJzZXJSdWxlQ29udGV4dDtcbmV4cG9ydHMuSW50ZXJ2YWwgPSByZXF1aXJlKCcuL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG5leHBvcnRzLlV0aWxzID0gcmVxdWlyZSgnLi9VdGlscycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///305\n"); /***/ }), /***/ 306: /***/ (function(module, exports) { eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n"); /***/ }), /***/ 317: /***/ (function(module, exports, __webpack_require__) { eval("//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// A tuple: (ATN state, predicted alt, syntactic, semantic context).\n// The syntactic context is a graph-structured stack node whose\n// path(s) to the root is the rule invocation(s)\n// chain used to arrive at the state. The semantic context is\n// the tree of semantic predicates encountered before reaching\n// an ATN state.\n///\n\nvar DecisionState = __webpack_require__(282).DecisionState;\nvar SemanticContext = __webpack_require__(302).SemanticContext;\nvar Hash = __webpack_require__(269).Hash;\n\n\nfunction checkParams(params, isCfg) {\n\tif(params===null) {\n\t\tvar result = { state:null, alt:null, context:null, semanticContext:null };\n\t\tif(isCfg) {\n\t\t\tresult.reachesIntoOuterContext = 0;\n\t\t}\n\t\treturn result;\n\t} else {\n\t\tvar props = {};\n\t\tprops.state = params.state || null;\n\t\tprops.alt = (params.alt === undefined) ? null : params.alt;\n\t\tprops.context = params.context || null;\n\t\tprops.semanticContext = params.semanticContext || null;\n\t\tif(isCfg) {\n\t\t\tprops.reachesIntoOuterContext = params.reachesIntoOuterContext || 0;\n\t\t\tprops.precedenceFilterSuppressed = params.precedenceFilterSuppressed || false;\n\t\t}\n\t\treturn props;\n\t}\n}\n\nfunction ATNConfig(params, config) {\n\tthis.checkContext(params, config);\n\tparams = checkParams(params);\n\tconfig = checkParams(config, true);\n // The ATN state associated with this configuration///\n this.state = params.state!==null ? params.state : config.state;\n // What alt (or lexer rule) is predicted by this configuration///\n this.alt = params.alt!==null ? params.alt : config.alt;\n // The stack of invoking states leading to the rule/states associated\n // with this config. We track only those contexts pushed during\n // execution of the ATN simulator.\n this.context = params.context!==null ? params.context : config.context;\n this.semanticContext = params.semanticContext!==null ? params.semanticContext :\n (config.semanticContext!==null ? config.semanticContext : SemanticContext.NONE);\n // We cannot execute predicates dependent upon local context unless\n // we know for sure we are in the correct context. Because there is\n // no way to do this efficiently, we simply cannot evaluate\n // dependent predicates unless we are in the rule that initially\n // invokes the ATN simulator.\n //\n // closure() tracks the depth of how far we dip into the\n // outer context: depth > 0. Note that it may not be totally\n // accurate depth since I don't ever decrement. TODO: make it a boolean then\n this.reachesIntoOuterContext = config.reachesIntoOuterContext;\n this.precedenceFilterSuppressed = config.precedenceFilterSuppressed;\n return this;\n}\n\nATNConfig.prototype.checkContext = function(params, config) {\n\tif((params.context===null || params.context===undefined) &&\n\t\t\t(config===null || config.context===null || config.context===undefined)) {\n\t\tthis.context = null;\n\t}\n};\n\n\nATNConfig.prototype.hashCode = function() {\n var hash = new Hash();\n this.updateHashCode(hash);\n return hash.finish();\n};\n\n\nATNConfig.prototype.updateHashCode = function(hash) {\n hash.update(this.state.stateNumber, this.alt, this.context, this.semanticContext);\n};\n\n// An ATN configuration is equal to another if both have\n// the same state, they predict the same alternative, and\n// syntactic/semantic contexts are the same.\n\nATNConfig.prototype.equals = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof ATNConfig)) {\n return false;\n } else {\n return this.state.stateNumber===other.state.stateNumber &&\n this.alt===other.alt &&\n (this.context===null ? other.context===null : this.context.equals(other.context)) &&\n this.semanticContext.equals(other.semanticContext) &&\n this.precedenceFilterSuppressed===other.precedenceFilterSuppressed;\n }\n};\n\n\nATNConfig.prototype.hashCodeForConfigSet = function() {\n var hash = new Hash();\n hash.update(this.state.stateNumber, this.alt, this.semanticContext);\n return hash.finish();\n};\n\n\nATNConfig.prototype.equalsForConfigSet = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof ATNConfig)) {\n return false;\n } else {\n return this.state.stateNumber===other.state.stateNumber &&\n this.alt===other.alt &&\n this.semanticContext.equals(other.semanticContext);\n }\n};\n\n\nATNConfig.prototype.toString = function() {\n return \"(\" + this.state + \",\" + this.alt +\n (this.context!==null ? \",[\" + this.context.toString() + \"]\" : \"\") +\n (this.semanticContext !== SemanticContext.NONE ?\n (\",\" + this.semanticContext.toString())\n : \"\") +\n (this.reachesIntoOuterContext>0 ?\n (\",up=\" + this.reachesIntoOuterContext)\n : \"\") + \")\";\n};\n\n\nfunction LexerATNConfig(params, config) {\n\tATNConfig.call(this, params, config);\n\n // This is the backing field for {@link //getLexerActionExecutor}.\n\tvar lexerActionExecutor = params.lexerActionExecutor || null;\n this.lexerActionExecutor = lexerActionExecutor || (config!==null ? config.lexerActionExecutor : null);\n this.passedThroughNonGreedyDecision = config!==null ? this.checkNonGreedyDecision(config, this.state) : false;\n return this;\n}\n\nLexerATNConfig.prototype = Object.create(ATNConfig.prototype);\nLexerATNConfig.prototype.constructor = LexerATNConfig;\n\nLexerATNConfig.prototype.updateHashCode = function(hash) {\n hash.update(this.state.stateNumber, this.alt, this.context, this.semanticContext, this.passedThroughNonGreedyDecision, this.lexerActionExecutor);\n};\n\nLexerATNConfig.prototype.equals = function(other) {\n return this === other ||\n (other instanceof LexerATNConfig &&\n this.passedThroughNonGreedyDecision == other.passedThroughNonGreedyDecision &&\n (this.lexerActionExecutor ? this.lexerActionExecutor.equals(other.lexerActionExecutor) : !other.lexerActionExecutor) &&\n ATNConfig.prototype.equals.call(this, other));\n};\n\nLexerATNConfig.prototype.hashCodeForConfigSet = LexerATNConfig.prototype.hashCode;\n\nLexerATNConfig.prototype.equalsForConfigSet = LexerATNConfig.prototype.equals;\n\n\nLexerATNConfig.prototype.checkNonGreedyDecision = function(source, target) {\n return source.passedThroughNonGreedyDecision ||\n (target instanceof DecisionState) && target.nonGreedy;\n};\n\nexports.ATNConfig = ATNConfig;\nexports.LexerATNConfig = LexerATNConfig;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2F0bi9BVE5Db25maWcuanM/ZGNlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLG1CQUFPLENBQUMsR0FBWTtBQUN4QyxzQkFBc0IsbUJBQU8sQ0FBQyxHQUFtQjtBQUNqRCxXQUFXLG1CQUFPLENBQUMsR0FBVTs7O0FBRzdCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxzQ0FBc0MsK0JBQStCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiMzE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyBBIHR1cGxlOiAoQVROIHN0YXRlLCBwcmVkaWN0ZWQgYWx0LCBzeW50YWN0aWMsIHNlbWFudGljIGNvbnRleHQpLlxuLy8gIFRoZSBzeW50YWN0aWMgY29udGV4dCBpcyBhIGdyYXBoLXN0cnVjdHVyZWQgc3RhY2sgbm9kZSB3aG9zZVxuLy8gIHBhdGgocykgdG8gdGhlIHJvb3QgaXMgdGhlIHJ1bGUgaW52b2NhdGlvbihzKVxuLy8gIGNoYWluIHVzZWQgdG8gYXJyaXZlIGF0IHRoZSBzdGF0ZS4gIFRoZSBzZW1hbnRpYyBjb250ZXh0IGlzXG4vLyAgdGhlIHRyZWUgb2Ygc2VtYW50aWMgcHJlZGljYXRlcyBlbmNvdW50ZXJlZCBiZWZvcmUgcmVhY2hpbmdcbi8vICBhbiBBVE4gc3RhdGUuXG4vLy9cblxudmFyIERlY2lzaW9uU3RhdGUgPSByZXF1aXJlKCcuL0FUTlN0YXRlJykuRGVjaXNpb25TdGF0ZTtcbnZhciBTZW1hbnRpY0NvbnRleHQgPSByZXF1aXJlKCcuL1NlbWFudGljQ29udGV4dCcpLlNlbWFudGljQ29udGV4dDtcbnZhciBIYXNoID0gcmVxdWlyZShcIi4uL1V0aWxzXCIpLkhhc2g7XG5cblxuZnVuY3Rpb24gY2hlY2tQYXJhbXMocGFyYW1zLCBpc0NmZykge1xuXHRpZihwYXJhbXM9PT1udWxsKSB7XG5cdFx0dmFyIHJlc3VsdCA9IHsgc3RhdGU6bnVsbCwgYWx0Om51bGwsIGNvbnRleHQ6bnVsbCwgc2VtYW50aWNDb250ZXh0Om51bGwgfTtcblx0XHRpZihpc0NmZykge1xuXHRcdFx0cmVzdWx0LnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gMDtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBlbHNlIHtcblx0XHR2YXIgcHJvcHMgPSB7fTtcblx0XHRwcm9wcy5zdGF0ZSA9IHBhcmFtcy5zdGF0ZSB8fCBudWxsO1xuXHRcdHByb3BzLmFsdCA9IChwYXJhbXMuYWx0ID09PSB1bmRlZmluZWQpID8gbnVsbCA6IHBhcmFtcy5hbHQ7XG5cdFx0cHJvcHMuY29udGV4dCA9IHBhcmFtcy5jb250ZXh0IHx8IG51bGw7XG5cdFx0cHJvcHMuc2VtYW50aWNDb250ZXh0ID0gcGFyYW1zLnNlbWFudGljQ29udGV4dCB8fCBudWxsO1xuXHRcdGlmKGlzQ2ZnKSB7XG5cdFx0XHRwcm9wcy5yZWFjaGVzSW50b091dGVyQ29udGV4dCA9IHBhcmFtcy5yZWFjaGVzSW50b091dGVyQ29udGV4dCB8fCAwO1xuXHRcdFx0cHJvcHMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSBwYXJhbXMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgfHwgZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wcztcblx0fVxufVxuXG5mdW5jdGlvbiBBVE5Db25maWcocGFyYW1zLCBjb25maWcpIHtcblx0dGhpcy5jaGVja0NvbnRleHQocGFyYW1zLCBjb25maWcpO1xuXHRwYXJhbXMgPSBjaGVja1BhcmFtcyhwYXJhbXMpO1xuXHRjb25maWcgPSBjaGVja1BhcmFtcyhjb25maWcsIHRydWUpO1xuICAgIC8vIFRoZSBBVE4gc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi8vL1xuICAgIHRoaXMuc3RhdGUgPSBwYXJhbXMuc3RhdGUhPT1udWxsID8gcGFyYW1zLnN0YXRlIDogY29uZmlnLnN0YXRlO1xuICAgIC8vIFdoYXQgYWx0IChvciBsZXhlciBydWxlKSBpcyBwcmVkaWN0ZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uLy8vXG4gICAgdGhpcy5hbHQgPSBwYXJhbXMuYWx0IT09bnVsbCA/IHBhcmFtcy5hbHQgOiBjb25maWcuYWx0O1xuICAgIC8vIFRoZSBzdGFjayBvZiBpbnZva2luZyBzdGF0ZXMgbGVhZGluZyB0byB0aGUgcnVsZS9zdGF0ZXMgYXNzb2NpYXRlZFxuICAgIC8vICB3aXRoIHRoaXMgY29uZmlnLiAgV2UgdHJhY2sgb25seSB0aG9zZSBjb250ZXh0cyBwdXNoZWQgZHVyaW5nXG4gICAgLy8gIGV4ZWN1dGlvbiBvZiB0aGUgQVROIHNpbXVsYXRvci5cbiAgICB0aGlzLmNvbnRleHQgPSBwYXJhbXMuY29udGV4dCE9PW51bGwgPyBwYXJhbXMuY29udGV4dCA6IGNvbmZpZy5jb250ZXh0O1xuICAgIHRoaXMuc2VtYW50aWNDb250ZXh0ID0gcGFyYW1zLnNlbWFudGljQ29udGV4dCE9PW51bGwgPyBwYXJhbXMuc2VtYW50aWNDb250ZXh0IDpcbiAgICAgICAgKGNvbmZpZy5zZW1hbnRpY0NvbnRleHQhPT1udWxsID8gY29uZmlnLnNlbWFudGljQ29udGV4dCA6IFNlbWFudGljQ29udGV4dC5OT05FKTtcbiAgICAvLyBXZSBjYW5ub3QgZXhlY3V0ZSBwcmVkaWNhdGVzIGRlcGVuZGVudCB1cG9uIGxvY2FsIGNvbnRleHQgdW5sZXNzXG4gICAgLy8gd2Uga25vdyBmb3Igc3VyZSB3ZSBhcmUgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4gQmVjYXVzZSB0aGVyZSBpc1xuICAgIC8vIG5vIHdheSB0byBkbyB0aGlzIGVmZmljaWVudGx5LCB3ZSBzaW1wbHkgY2Fubm90IGV2YWx1YXRlXG4gICAgLy8gZGVwZW5kZW50IHByZWRpY2F0ZXMgdW5sZXNzIHdlIGFyZSBpbiB0aGUgcnVsZSB0aGF0IGluaXRpYWxseVxuICAgIC8vIGludm9rZXMgdGhlIEFUTiBzaW11bGF0b3IuXG4gICAgLy9cbiAgICAvLyBjbG9zdXJlKCkgdHJhY2tzIHRoZSBkZXB0aCBvZiBob3cgZmFyIHdlIGRpcCBpbnRvIHRoZVxuICAgIC8vIG91dGVyIGNvbnRleHQ6IGRlcHRoICZndDsgMC4gIE5vdGUgdGhhdCBpdCBtYXkgbm90IGJlIHRvdGFsbHlcbiAgICAvLyBhY2N1cmF0ZSBkZXB0aCBzaW5jZSBJIGRvbid0IGV2ZXIgZGVjcmVtZW50LiBUT0RPOiBtYWtlIGl0IGEgYm9vbGVhbiB0aGVuXG4gICAgdGhpcy5yZWFjaGVzSW50b091dGVyQ29udGV4dCA9IGNvbmZpZy5yZWFjaGVzSW50b091dGVyQ29udGV4dDtcbiAgICB0aGlzLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkID0gY29uZmlnLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BVE5Db25maWcucHJvdG90eXBlLmNoZWNrQ29udGV4dCA9IGZ1bmN0aW9uKHBhcmFtcywgY29uZmlnKSB7XG5cdGlmKChwYXJhbXMuY29udGV4dD09PW51bGwgfHwgcGFyYW1zLmNvbnRleHQ9PT11bmRlZmluZWQpICYmXG5cdFx0XHQoY29uZmlnPT09bnVsbCB8fCBjb25maWcuY29udGV4dD09PW51bGwgfHwgY29uZmlnLmNvbnRleHQ9PT11bmRlZmluZWQpKSB7XG5cdFx0dGhpcy5jb250ZXh0ID0gbnVsbDtcblx0fVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIHRoaXMudXBkYXRlSGFzaENvZGUoaGFzaCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5zdGF0ZS5zdGF0ZU51bWJlciwgdGhpcy5hbHQsIHRoaXMuY29udGV4dCwgdGhpcy5zZW1hbnRpY0NvbnRleHQpO1xufTtcblxuLy8gQW4gQVROIGNvbmZpZ3VyYXRpb24gaXMgZXF1YWwgdG8gYW5vdGhlciBpZiBib3RoIGhhdmVcbi8vICB0aGUgc2FtZSBzdGF0ZSwgdGhleSBwcmVkaWN0IHRoZSBzYW1lIGFsdGVybmF0aXZlLCBhbmRcbi8vICBzeW50YWN0aWMvc2VtYW50aWMgY29udGV4dHMgYXJlIHRoZSBzYW1lLlxuXG5BVE5Db25maWcucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBBVE5Db25maWcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGF0ZU51bWJlcj09PW90aGVyLnN0YXRlLnN0YXRlTnVtYmVyICYmXG4gICAgICAgICAgICB0aGlzLmFsdD09PW90aGVyLmFsdCAmJlxuICAgICAgICAgICAgKHRoaXMuY29udGV4dD09PW51bGwgPyBvdGhlci5jb250ZXh0PT09bnVsbCA6IHRoaXMuY29udGV4dC5lcXVhbHMob3RoZXIuY29udGV4dCkpICYmXG4gICAgICAgICAgICB0aGlzLnNlbWFudGljQ29udGV4dC5lcXVhbHMob3RoZXIuc2VtYW50aWNDb250ZXh0KSAmJlxuICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZD09PW90aGVyLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkO1xuICAgIH1cbn07XG5cblxuQVROQ29uZmlnLnByb3RvdHlwZS5oYXNoQ29kZUZvckNvbmZpZ1NldCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnN0YXRlLnN0YXRlTnVtYmVyLCB0aGlzLmFsdCwgdGhpcy5zZW1hbnRpY0NvbnRleHQpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpO1xufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmVxdWFsc0ZvckNvbmZpZ1NldCA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBBVE5Db25maWcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGF0ZU51bWJlcj09PW90aGVyLnN0YXRlLnN0YXRlTnVtYmVyICYmXG4gICAgICAgICAgICB0aGlzLmFsdD09PW90aGVyLmFsdCAmJlxuICAgICAgICAgICAgdGhpcy5zZW1hbnRpY0NvbnRleHQuZXF1YWxzKG90aGVyLnNlbWFudGljQ29udGV4dCk7XG4gICAgfVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiKFwiICsgdGhpcy5zdGF0ZSArIFwiLFwiICsgdGhpcy5hbHQgK1xuICAgICAgICAodGhpcy5jb250ZXh0IT09bnVsbCA/IFwiLFtcIiArIHRoaXMuY29udGV4dC50b1N0cmluZygpICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICh0aGlzLnNlbWFudGljQ29udGV4dCAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUgP1xuICAgICAgICAgICAgICAgIChcIixcIiArIHRoaXMuc2VtYW50aWNDb250ZXh0LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICh0aGlzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0PjAgP1xuICAgICAgICAgICAgICAgIChcIix1cD1cIiArIHRoaXMucmVhY2hlc0ludG9PdXRlckNvbnRleHQpXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArIFwiKVwiO1xufTtcblxuXG5mdW5jdGlvbiBMZXhlckFUTkNvbmZpZyhwYXJhbXMsIGNvbmZpZykge1xuXHRBVE5Db25maWcuY2FsbCh0aGlzLCBwYXJhbXMsIGNvbmZpZyk7XG5cbiAgICAvLyBUaGlzIGlzIHRoZSBiYWNraW5nIGZpZWxkIGZvciB7QGxpbmsgLy9nZXRMZXhlckFjdGlvbkV4ZWN1dG9yfS5cblx0dmFyIGxleGVyQWN0aW9uRXhlY3V0b3IgPSBwYXJhbXMubGV4ZXJBY3Rpb25FeGVjdXRvciB8fCBudWxsO1xuICAgIHRoaXMubGV4ZXJBY3Rpb25FeGVjdXRvciA9IGxleGVyQWN0aW9uRXhlY3V0b3IgfHwgKGNvbmZpZyE9PW51bGwgPyBjb25maWcubGV4ZXJBY3Rpb25FeGVjdXRvciA6IG51bGwpO1xuICAgIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uID0gY29uZmlnIT09bnVsbCA/IHRoaXMuY2hlY2tOb25HcmVlZHlEZWNpc2lvbihjb25maWcsIHRoaXMuc3RhdGUpIDogZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROQ29uZmlnLnByb3RvdHlwZSk7XG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckFUTkNvbmZpZztcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuc3RhdGUuc3RhdGVOdW1iZXIsIHRoaXMuYWx0LCB0aGlzLmNvbnRleHQsIHRoaXMuc2VtYW50aWNDb250ZXh0LCB0aGlzLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbiwgdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yKTtcbn07XG5cbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuICAgICAgICAgICAgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJBVE5Db25maWcgJiZcbiAgICAgICAgICAgIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uID09IG90aGVyLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbiAmJlxuICAgICAgICAgICAgKHRoaXMubGV4ZXJBY3Rpb25FeGVjdXRvciA/IHRoaXMubGV4ZXJBY3Rpb25FeGVjdXRvci5lcXVhbHMob3RoZXIubGV4ZXJBY3Rpb25FeGVjdXRvcikgOiAhb3RoZXIubGV4ZXJBY3Rpb25FeGVjdXRvcikgJiZcbiAgICAgICAgICAgIEFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzLmNhbGwodGhpcywgb3RoZXIpKTtcbn07XG5cbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5oYXNoQ29kZUZvckNvbmZpZ1NldCA9IExleGVyQVROQ29uZmlnLnByb3RvdHlwZS5oYXNoQ29kZTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFsc0ZvckNvbmZpZ1NldCA9IExleGVyQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHM7XG5cblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmNoZWNrTm9uR3JlZWR5RGVjaXNpb24gPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCkge1xuICAgIHJldHVybiBzb3VyY2UucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uIHx8XG4gICAgICAgICh0YXJnZXQgaW5zdGFuY2VvZiBEZWNpc2lvblN0YXRlKSAmJiB0YXJnZXQubm9uR3JlZWR5O1xufTtcblxuZXhwb3J0cy5BVE5Db25maWcgPSBBVE5Db25maWc7XG5leHBvcnRzLkxleGVyQVROQ29uZmlnID0gTGV4ZXJBVE5Db25maWc7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///317\n"); /***/ }), /***/ 318: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// A rule context is a record of a single rule invocation. It knows\n// which context invoked it, if any. If there is no parent context, then\n// naturally the invoking state is not valid. The parent link\n// provides a chain upwards from the current rule invocation to the root\n// of the invocation tree, forming a stack. We actually carry no\n// information about the rule associated with this context (except\n// when parsing). We keep only the state number of the invoking state from\n// the ATN submachine that invoked this. Contrast this with the s\n// pointer inside ParserRuleContext that tracks the current state\n// being \"executed\" for the current rule.\n//\n// The parent contexts are useful for computing lookahead sets and\n// getting error information.\n//\n// These objects are used during parsing and prediction.\n// For the special case of parsers, we use the subclass\n// ParserRuleContext.\n//\n// @see ParserRuleContext\n///\n\nvar RuleNode = __webpack_require__(283).RuleNode;\nvar INVALID_INTERVAL = __webpack_require__(283).INVALID_INTERVAL;\nvar INVALID_ALT_NUMBER = __webpack_require__(290).INVALID_ALT_NUMBER;\n\nfunction RuleContext(parent, invokingState) {\n\tRuleNode.call(this);\n\t// What context invoked this rule?\n\tthis.parentCtx = parent || null;\n\t// What state invoked the rule associated with this context?\n\t// The \"return address\" is the followState of invokingState\n\t// If parent is null, this should be -1.\n\tthis.invokingState = invokingState || -1;\n\treturn this;\n}\n\nRuleContext.prototype = Object.create(RuleNode.prototype);\nRuleContext.prototype.constructor = RuleContext;\n\nRuleContext.prototype.depth = function() {\n\tvar n = 0;\n\tvar p = this;\n\twhile (p !== null) {\n\t\tp = p.parentCtx;\n\t\tn += 1;\n\t}\n\treturn n;\n};\n\n// A context is empty if there is no invoking state; meaning nobody call\n// current context.\nRuleContext.prototype.isEmpty = function() {\n\treturn this.invokingState === -1;\n};\n\n// satisfy the ParseTree / SyntaxTree interface\n\nRuleContext.prototype.getSourceInterval = function() {\n\treturn INVALID_INTERVAL;\n};\n\nRuleContext.prototype.getRuleContext = function() {\n\treturn this;\n};\n\nRuleContext.prototype.getPayload = function() {\n\treturn this;\n};\n\n// Return the combined text of all child nodes. This method only considers\n// tokens which have been added to the parse tree.\n//

\n// Since tokens on hidden channels (e.g. whitespace or comments) are not\n// added to the parse trees, they will not appear in the output of this\n// method.\n// /\nRuleContext.prototype.getText = function() {\n\tif (this.getChildCount() === 0) {\n\t\treturn \"\";\n\t} else {\n\t\treturn this.children.map(function(child) {\n\t\t\treturn child.getText();\n\t\t}).join(\"\");\n\t}\n};\n\n// For rule associated with this parse tree internal node, return\n// the outer alternative number used to match the input. Default\n// implementation does not compute nor store this alt num. Create\n// a subclass of ParserRuleContext with backing field and set\n// option contextSuperClass.\n// to set it.\nRuleContext.prototype.getAltNumber = function() { return INVALID_ALT_NUMBER; }\n\n// Set the outer alternative number for this context node. Default\n// implementation does nothing to avoid backing field overhead for\n// trees that don't need it. Create\n// a subclass of ParserRuleContext with backing field and set\n// option contextSuperClass.\nRuleContext.prototype.setAltNumber = function(altNumber) { }\n\nRuleContext.prototype.getChild = function(i) {\n\treturn null;\n};\n\nRuleContext.prototype.getChildCount = function() {\n\treturn 0;\n};\n\nRuleContext.prototype.accept = function(visitor) {\n\treturn visitor.visitChildren(this);\n};\n\n//need to manage circular dependencies, so export now\nexports.RuleContext = RuleContext;\nvar Trees = __webpack_require__(371).Trees;\n\n\n// Print out a whole tree, not just a node, in LISP format\n// (root child1 .. childN). Print just a node if this is a leaf.\n//\n\nRuleContext.prototype.toStringTree = function(ruleNames, recog) {\n\treturn Trees.toStringTree(this, ruleNames, recog);\n};\n\nRuleContext.prototype.toString = function(ruleNames, stop) {\n\truleNames = ruleNames || null;\n\tstop = stop || null;\n\tvar p = this;\n\tvar s = \"[\";\n\twhile (p !== null && p !== stop) {\n\t\tif (ruleNames === null) {\n\t\t\tif (!p.isEmpty()) {\n\t\t\t\ts += p.invokingState;\n\t\t\t}\n\t\t} else {\n\t\t\tvar ri = p.ruleIndex;\n\t\t\tvar ruleName = (ri >= 0 && ri < ruleNames.length) ? ruleNames[ri]\n\t\t\t\t\t: \"\" + ri;\n\t\t\ts += ruleName;\n\t\t}\n\t\tif (p.parentCtx !== null && (ruleNames !== null || !p.parentCtx.isEmpty())) {\n\t\t\ts += \" \";\n\t\t}\n\t\tp = p.parentCtx;\n\t}\n\ts += \"]\";\n\treturn s;\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L1J1bGVDb250ZXh0LmpzPzA1YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxHQUFhO0FBQ3BDLHVCQUF1QixtQkFBTyxDQUFDLEdBQWE7QUFDNUMseUJBQXlCLG1CQUFPLENBQUMsR0FBVzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsMkJBQTJCOztBQUU1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWSxtQkFBTyxDQUFDLEdBQWM7OztBQUdsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyAgQSBydWxlIGNvbnRleHQgaXMgYSByZWNvcmQgb2YgYSBzaW5nbGUgcnVsZSBpbnZvY2F0aW9uLiBJdCBrbm93c1xuLy8gIHdoaWNoIGNvbnRleHQgaW52b2tlZCBpdCwgaWYgYW55LiBJZiB0aGVyZSBpcyBubyBwYXJlbnQgY29udGV4dCwgdGhlblxuLy8gIG5hdHVyYWxseSB0aGUgaW52b2tpbmcgc3RhdGUgaXMgbm90IHZhbGlkLiAgVGhlIHBhcmVudCBsaW5rXG4vLyAgcHJvdmlkZXMgYSBjaGFpbiB1cHdhcmRzIGZyb20gdGhlIGN1cnJlbnQgcnVsZSBpbnZvY2F0aW9uIHRvIHRoZSByb290XG4vLyAgb2YgdGhlIGludm9jYXRpb24gdHJlZSwgZm9ybWluZyBhIHN0YWNrLiBXZSBhY3R1YWxseSBjYXJyeSBub1xuLy8gIGluZm9ybWF0aW9uIGFib3V0IHRoZSBydWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnRleHQgKGV4Y2VwdFxuLy8gIHdoZW4gcGFyc2luZykuIFdlIGtlZXAgb25seSB0aGUgc3RhdGUgbnVtYmVyIG9mIHRoZSBpbnZva2luZyBzdGF0ZSBmcm9tXG4vLyAgdGhlIEFUTiBzdWJtYWNoaW5lIHRoYXQgaW52b2tlZCB0aGlzLiBDb250cmFzdCB0aGlzIHdpdGggdGhlIHNcbi8vICBwb2ludGVyIGluc2lkZSBQYXJzZXJSdWxlQ29udGV4dCB0aGF0IHRyYWNrcyB0aGUgY3VycmVudCBzdGF0ZVxuLy8gIGJlaW5nIFwiZXhlY3V0ZWRcIiBmb3IgdGhlIGN1cnJlbnQgcnVsZS5cbi8vXG4vLyAgVGhlIHBhcmVudCBjb250ZXh0cyBhcmUgdXNlZnVsIGZvciBjb21wdXRpbmcgbG9va2FoZWFkIHNldHMgYW5kXG4vLyAgZ2V0dGluZyBlcnJvciBpbmZvcm1hdGlvbi5cbi8vXG4vLyAgVGhlc2Ugb2JqZWN0cyBhcmUgdXNlZCBkdXJpbmcgcGFyc2luZyBhbmQgcHJlZGljdGlvbi5cbi8vICBGb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiBwYXJzZXJzLCB3ZSB1c2UgdGhlIHN1YmNsYXNzXG4vLyAgUGFyc2VyUnVsZUNvbnRleHQuXG4vL1xuLy8gIEBzZWUgUGFyc2VyUnVsZUNvbnRleHRcbi8vL1xuXG52YXIgUnVsZU5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlJ1bGVOb2RlO1xudmFyIElOVkFMSURfSU5URVJWQUwgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLklOVkFMSURfSU5URVJWQUw7XG52YXIgSU5WQUxJRF9BTFRfTlVNQkVSID0gcmVxdWlyZSgnLi9hdG4vQVROJykuSU5WQUxJRF9BTFRfTlVNQkVSO1xuXG5mdW5jdGlvbiBSdWxlQ29udGV4dChwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0UnVsZU5vZGUuY2FsbCh0aGlzKTtcblx0Ly8gV2hhdCBjb250ZXh0IGludm9rZWQgdGhpcyBydWxlP1xuXHR0aGlzLnBhcmVudEN0eCA9IHBhcmVudCB8fCBudWxsO1xuXHQvLyBXaGF0IHN0YXRlIGludm9rZWQgdGhlIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dD9cblx0Ly8gVGhlIFwicmV0dXJuIGFkZHJlc3NcIiBpcyB0aGUgZm9sbG93U3RhdGUgb2YgaW52b2tpbmdTdGF0ZVxuXHQvLyBJZiBwYXJlbnQgaXMgbnVsbCwgdGhpcyBzaG91bGQgYmUgLTEuXG5cdHRoaXMuaW52b2tpbmdTdGF0ZSA9IGludm9raW5nU3RhdGUgfHwgLTE7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJ1bGVOb2RlLnByb3RvdHlwZSk7XG5SdWxlQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlQ29udGV4dDtcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmRlcHRoID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuID0gMDtcblx0dmFyIHAgPSB0aGlzO1xuXHR3aGlsZSAocCAhPT0gbnVsbCkge1xuXHRcdHAgPSBwLnBhcmVudEN0eDtcblx0XHRuICs9IDE7XG5cdH1cblx0cmV0dXJuIG47XG59O1xuXG4vLyBBIGNvbnRleHQgaXMgZW1wdHkgaWYgdGhlcmUgaXMgbm8gaW52b2tpbmcgc3RhdGU7IG1lYW5pbmcgbm9ib2R5IGNhbGxcbi8vIGN1cnJlbnQgY29udGV4dC5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmludm9raW5nU3RhdGUgPT09IC0xO1xufTtcblxuLy8gc2F0aXNmeSB0aGUgUGFyc2VUcmVlIC8gU3ludGF4VHJlZSBpbnRlcmZhY2VcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFNvdXJjZUludGVydmFsID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBJTlZBTElEX0lOVEVSVkFMO1xufTtcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFJ1bGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufTtcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFBheWxvYWQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG4vLyBSZXR1cm4gdGhlIGNvbWJpbmVkIHRleHQgb2YgYWxsIGNoaWxkIG5vZGVzLiBUaGlzIG1ldGhvZCBvbmx5IGNvbnNpZGVyc1xuLy8gdG9rZW5zIHdoaWNoIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgcGFyc2UgdHJlZS5cbi8vIDxwPlxuLy8gU2luY2UgdG9rZW5zIG9uIGhpZGRlbiBjaGFubmVscyAoZS5nLiB3aGl0ZXNwYWNlIG9yIGNvbW1lbnRzKSBhcmUgbm90XG4vLyBhZGRlZCB0byB0aGUgcGFyc2UgdHJlZXMsIHRoZXkgd2lsbCBub3QgYXBwZWFyIGluIHRoZSBvdXRwdXQgb2YgdGhpc1xuLy8gbWV0aG9kLlxuLy8gL1xuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuZ2V0Q2hpbGRDb3VudCgpID09PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG5cdFx0XHRyZXR1cm4gY2hpbGQuZ2V0VGV4dCgpO1xuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH1cbn07XG5cbi8vIEZvciBydWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhcnNlIHRyZWUgaW50ZXJuYWwgbm9kZSwgcmV0dXJuXG4vLyB0aGUgb3V0ZXIgYWx0ZXJuYXRpdmUgbnVtYmVyIHVzZWQgdG8gbWF0Y2ggdGhlIGlucHV0LiBEZWZhdWx0XG4vLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBjb21wdXRlIG5vciBzdG9yZSB0aGlzIGFsdCBudW0uIENyZWF0ZVxuLy8gYSBzdWJjbGFzcyBvZiBQYXJzZXJSdWxlQ29udGV4dCB3aXRoIGJhY2tpbmcgZmllbGQgYW5kIHNldFxuLy8gb3B0aW9uIGNvbnRleHRTdXBlckNsYXNzLlxuLy8gdG8gc2V0IGl0LlxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldEFsdE51bWJlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gSU5WQUxJRF9BTFRfTlVNQkVSOyB9XG5cbi8vIFNldCB0aGUgb3V0ZXIgYWx0ZXJuYXRpdmUgbnVtYmVyIGZvciB0aGlzIGNvbnRleHQgbm9kZS4gRGVmYXVsdFxuLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nIHRvIGF2b2lkIGJhY2tpbmcgZmllbGQgb3ZlcmhlYWQgZm9yXG4vLyB0cmVlcyB0aGF0IGRvbid0IG5lZWQgaXQuICBDcmVhdGVcbi8vIGEgc3ViY2xhc3Mgb2YgUGFyc2VyUnVsZUNvbnRleHQgd2l0aCBiYWNraW5nIGZpZWxkIGFuZCBzZXRcbi8vIG9wdGlvbiBjb250ZXh0U3VwZXJDbGFzcy5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5zZXRBbHROdW1iZXIgPSBmdW5jdGlvbihhbHROdW1iZXIpIHsgfVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGQgPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBudWxsO1xufTtcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldENoaWxkQ291bnQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odmlzaXRvcikge1xuXHRyZXR1cm4gdmlzaXRvci52aXNpdENoaWxkcmVuKHRoaXMpO1xufTtcblxuLy9uZWVkIHRvIG1hbmFnZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIHNvIGV4cG9ydCBub3dcbmV4cG9ydHMuUnVsZUNvbnRleHQgPSBSdWxlQ29udGV4dDtcbnZhciBUcmVlcyA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlcycpLlRyZWVzO1xuXG5cbi8vIFByaW50IG91dCBhIHdob2xlIHRyZWUsIG5vdCBqdXN0IGEgbm9kZSwgaW4gTElTUCBmb3JtYXRcbi8vIChyb290IGNoaWxkMSAuLiBjaGlsZE4pLiBQcmludCBqdXN0IGEgbm9kZSBpZiB0aGlzIGlzIGEgbGVhZi5cbi8vXG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS50b1N0cmluZ1RyZWUgPSBmdW5jdGlvbihydWxlTmFtZXMsIHJlY29nKSB7XG5cdHJldHVybiBUcmVlcy50b1N0cmluZ1RyZWUodGhpcywgcnVsZU5hbWVzLCByZWNvZyk7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihydWxlTmFtZXMsIHN0b3ApIHtcblx0cnVsZU5hbWVzID0gcnVsZU5hbWVzIHx8IG51bGw7XG5cdHN0b3AgPSBzdG9wIHx8IG51bGw7XG5cdHZhciBwID0gdGhpcztcblx0dmFyIHMgPSBcIltcIjtcblx0d2hpbGUgKHAgIT09IG51bGwgJiYgcCAhPT0gc3RvcCkge1xuXHRcdGlmIChydWxlTmFtZXMgPT09IG51bGwpIHtcblx0XHRcdGlmICghcC5pc0VtcHR5KCkpIHtcblx0XHRcdFx0cyArPSBwLmludm9raW5nU3RhdGU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciByaSA9IHAucnVsZUluZGV4O1xuXHRcdFx0dmFyIHJ1bGVOYW1lID0gKHJpID49IDAgJiYgcmkgPCBydWxlTmFtZXMubGVuZ3RoKSA/IHJ1bGVOYW1lc1tyaV1cblx0XHRcdFx0XHQ6IFwiXCIgKyByaTtcblx0XHRcdHMgKz0gcnVsZU5hbWU7XG5cdFx0fVxuXHRcdGlmIChwLnBhcmVudEN0eCAhPT0gbnVsbCAmJiAocnVsZU5hbWVzICE9PSBudWxsIHx8ICFwLnBhcmVudEN0eC5pc0VtcHR5KCkpKSB7XG5cdFx0XHRzICs9IFwiIFwiO1xuXHRcdH1cblx0XHRwID0gcC5wYXJlbnRDdHg7XG5cdH1cblx0cyArPSBcIl1cIjtcblx0cmV0dXJuIHM7XG59O1xuXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n"); /***/ }), /***/ 319: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// A lexer is recognizer that draws input symbols from a character stream.\n// lexer grammars result in a subclass of this object. A Lexer object\n// uses simplified match() and error recovery mechanisms in the interest of speed.\n\nvar Token = __webpack_require__(270).Token;\nvar Recognizer = __webpack_require__(375).Recognizer;\nvar CommonTokenFactory = __webpack_require__(473).CommonTokenFactory;\nvar RecognitionException = __webpack_require__(284).RecognitionException;\nvar LexerNoViableAltException = __webpack_require__(284).LexerNoViableAltException;\n\nfunction TokenSource() {\n\treturn this;\n}\n\nfunction Lexer(input) {\n\tRecognizer.call(this);\n\tthis._input = input;\n\tthis._factory = CommonTokenFactory.DEFAULT;\n\tthis._tokenFactorySourcePair = [ this, input ];\n\n\tthis._interp = null; // child classes must populate this\n\n\t// The goal of all lexer rules/methods is to create a token object.\n\t// this is an instance variable as multiple rules may collaborate to\n\t// create a single token. nextToken will return this object after\n\t// matching lexer rule(s). If you subclass to allow multiple token\n\t// emissions, then set this to the last token to be matched or\n\t// something nonnull so that the auto token emit mechanism will not\n\t// emit another token.\n\tthis._token = null;\n\n\t// What character index in the stream did the current token start at?\n\t// Needed, for example, to get the text for current token. Set at\n\t// the start of nextToken.\n\tthis._tokenStartCharIndex = -1;\n\n\t// The line on which the first character of the token resides///\n\tthis._tokenStartLine = -1;\n\n\t// The character position of first character within the line///\n\tthis._tokenStartColumn = -1;\n\n\t// Once we see EOF on char stream, next token will be EOF.\n\t// If you have DONE : EOF ; then you see DONE EOF.\n\tthis._hitEOF = false;\n\n\t// The channel number for the current token///\n\tthis._channel = Token.DEFAULT_CHANNEL;\n\n\t// The token type for the current token///\n\tthis._type = Token.INVALID_TYPE;\n\n\tthis._modeStack = [];\n\tthis._mode = Lexer.DEFAULT_MODE;\n\n\t// You can set the text for the current token to override what is in\n\t// the input char buffer. Use setText() or can set this instance var.\n\t// /\n\tthis._text = null;\n\n\treturn this;\n}\n\nLexer.prototype = Object.create(Recognizer.prototype);\nLexer.prototype.constructor = Lexer;\n\nLexer.DEFAULT_MODE = 0;\nLexer.MORE = -2;\nLexer.SKIP = -3;\n\nLexer.DEFAULT_TOKEN_CHANNEL = Token.DEFAULT_CHANNEL;\nLexer.HIDDEN = Token.HIDDEN_CHANNEL;\nLexer.MIN_CHAR_VALUE = 0x0000;\nLexer.MAX_CHAR_VALUE = 0x10FFFF;\n\nLexer.prototype.reset = function() {\n\t// wack Lexer state variables\n\tif (this._input !== null) {\n\t\tthis._input.seek(0); // rewind the input\n\t}\n\tthis._token = null;\n\tthis._type = Token.INVALID_TYPE;\n\tthis._channel = Token.DEFAULT_CHANNEL;\n\tthis._tokenStartCharIndex = -1;\n\tthis._tokenStartColumn = -1;\n\tthis._tokenStartLine = -1;\n\tthis._text = null;\n\n\tthis._hitEOF = false;\n\tthis._mode = Lexer.DEFAULT_MODE;\n\tthis._modeStack = [];\n\n\tthis._interp.reset();\n};\n\n// Return a token from this source; i.e., match a token on the char stream.\nLexer.prototype.nextToken = function() {\n\tif (this._input === null) {\n\t\tthrow \"nextToken requires a non-null input stream.\";\n\t}\n\n\t// Mark start location in char stream so unbuffered streams are\n\t// guaranteed at least have text of current token\n\tvar tokenStartMarker = this._input.mark();\n\ttry {\n\t\twhile (true) {\n\t\t\tif (this._hitEOF) {\n\t\t\t\tthis.emitEOF();\n\t\t\t\treturn this._token;\n\t\t\t}\n\t\t\tthis._token = null;\n\t\t\tthis._channel = Token.DEFAULT_CHANNEL;\n\t\t\tthis._tokenStartCharIndex = this._input.index;\n\t\t\tthis._tokenStartColumn = this._interp.column;\n\t\t\tthis._tokenStartLine = this._interp.line;\n\t\t\tthis._text = null;\n\t\t\tvar continueOuter = false;\n\t\t\twhile (true) {\n\t\t\t\tthis._type = Token.INVALID_TYPE;\n\t\t\t\tvar ttype = Lexer.SKIP;\n\t\t\t\ttry {\n\t\t\t\t\tttype = this._interp.match(this._input, this._mode);\n\t\t\t\t} catch (e) {\n\t\t\t\t if(e instanceof RecognitionException) {\n this.notifyListeners(e); // report error\n this.recover(e);\n } else {\n console.log(e.stack);\n throw e;\n }\n\t\t\t\t}\n\t\t\t\tif (this._input.LA(1) === Token.EOF) {\n\t\t\t\t\tthis._hitEOF = true;\n\t\t\t\t}\n\t\t\t\tif (this._type === Token.INVALID_TYPE) {\n\t\t\t\t\tthis._type = ttype;\n\t\t\t\t}\n\t\t\t\tif (this._type === Lexer.SKIP) {\n\t\t\t\t\tcontinueOuter = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this._type !== Lexer.MORE) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (continueOuter) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this._token === null) {\n\t\t\t\tthis.emit();\n\t\t\t}\n\t\t\treturn this._token;\n\t\t}\n\t} finally {\n\t\t// make sure we release marker after match or\n\t\t// unbuffered char stream will keep buffering\n\t\tthis._input.release(tokenStartMarker);\n\t}\n};\n\n// Instruct the lexer to skip creating a token for current lexer rule\n// and look for another token. nextToken() knows to keep looking when\n// a lexer rule finishes with token set to SKIP_TOKEN. Recall that\n// if token==null at end of any token rule, it creates one for you\n// and emits it.\n// /\nLexer.prototype.skip = function() {\n\tthis._type = Lexer.SKIP;\n};\n\nLexer.prototype.more = function() {\n\tthis._type = Lexer.MORE;\n};\n\nLexer.prototype.mode = function(m) {\n\tthis._mode = m;\n};\n\nLexer.prototype.pushMode = function(m) {\n\tif (this._interp.debug) {\n\t\tconsole.log(\"pushMode \" + m);\n\t}\n\tthis._modeStack.push(this._mode);\n\tthis.mode(m);\n};\n\nLexer.prototype.popMode = function() {\n\tif (this._modeStack.length === 0) {\n\t\tthrow \"Empty Stack\";\n\t}\n\tif (this._interp.debug) {\n\t\tconsole.log(\"popMode back to \" + this._modeStack.slice(0, -1));\n\t}\n\tthis.mode(this._modeStack.pop());\n\treturn this._mode;\n};\n\n// Set the char stream and reset the lexer\nObject.defineProperty(Lexer.prototype, \"inputStream\", {\n\tget : function() {\n\t\treturn this._input;\n\t},\n\tset : function(input) {\n\t\tthis._input = null;\n\t\tthis._tokenFactorySourcePair = [ this, this._input ];\n\t\tthis.reset();\n\t\tthis._input = input;\n\t\tthis._tokenFactorySourcePair = [ this, this._input ];\n\t}\n});\n\nObject.defineProperty(Lexer.prototype, \"sourceName\", {\n\tget : function sourceName() {\n\t\treturn this._input.sourceName;\n\t}\n});\n\n// By default does not support multiple emits per nextToken invocation\n// for efficiency reasons. Subclass and override this method, nextToken,\n// and getToken (to push tokens into a list and pull from that list\n// rather than a single variable as this implementation does).\n// /\nLexer.prototype.emitToken = function(token) {\n\tthis._token = token;\n};\n\n// The standard method called to automatically emit a token at the\n// outermost lexical rule. The token object should point into the\n// char buffer start..stop. If there is a text override in 'text',\n// use that to set the token's text. Override this method to emit\n// custom Token objects or provide a new factory.\n// /\nLexer.prototype.emit = function() {\n\tvar t = this._factory.create(this._tokenFactorySourcePair, this._type,\n\t\t\tthis._text, this._channel, this._tokenStartCharIndex, this\n\t\t\t\t\t.getCharIndex() - 1, this._tokenStartLine,\n\t\t\tthis._tokenStartColumn);\n\tthis.emitToken(t);\n\treturn t;\n};\n\nLexer.prototype.emitEOF = function() {\n\tvar cpos = this.column;\n\tvar lpos = this.line;\n\tvar eof = this._factory.create(this._tokenFactorySourcePair, Token.EOF,\n\t\t\tnull, Token.DEFAULT_CHANNEL, this._input.index,\n\t\t\tthis._input.index - 1, lpos, cpos);\n\tthis.emitToken(eof);\n\treturn eof;\n};\n\nObject.defineProperty(Lexer.prototype, \"type\", {\n\tget : function() {\n\t\treturn this.type;\n\t},\n\tset : function(type) {\n\t\tthis._type = type;\n\t}\n});\n\nObject.defineProperty(Lexer.prototype, \"line\", {\n\tget : function() {\n\t\treturn this._interp.line;\n\t},\n\tset : function(line) {\n\t\tthis._interp.line = line;\n\t}\n});\n\nObject.defineProperty(Lexer.prototype, \"column\", {\n\tget : function() {\n\t\treturn this._interp.column;\n\t},\n\tset : function(column) {\n\t\tthis._interp.column = column;\n\t}\n});\n\n\n// What is the index of the current character of lookahead?///\nLexer.prototype.getCharIndex = function() {\n\treturn this._input.index;\n};\n\n// Return the text matched so far for the current token or any text override.\n//Set the complete text of this token; it wipes any previous changes to the text.\nObject.defineProperty(Lexer.prototype, \"text\", {\n\tget : function() {\n\t\tif (this._text !== null) {\n\t\t\treturn this._text;\n\t\t} else {\n\t\t\treturn this._interp.getText(this._input);\n\t\t}\n\t},\n\tset : function(text) {\n\t\tthis._text = text;\n\t}\n});\n// Return a list of all Token objects in input char stream.\n// Forces load of all tokens. Does not include EOF token.\n// /\nLexer.prototype.getAllTokens = function() {\n\tvar tokens = [];\n\tvar t = this.nextToken();\n\twhile (t.type !== Token.EOF) {\n\t\ttokens.push(t);\n\t\tt = this.nextToken();\n\t}\n\treturn tokens;\n};\n\nLexer.prototype.notifyListeners = function(e) {\n\tvar start = this._tokenStartCharIndex;\n\tvar stop = this._input.index;\n\tvar text = this._input.getText(start, stop);\n\tvar msg = \"token recognition error at: '\" + this.getErrorDisplay(text) + \"'\";\n\tvar listener = this.getErrorListenerDispatch();\n\tlistener.syntaxError(this, null, this._tokenStartLine,\n\t\t\tthis._tokenStartColumn, msg, e);\n};\n\nLexer.prototype.getErrorDisplay = function(s) {\n\tvar d = [];\n\tfor (var i = 0; i < s.length; i++) {\n\t\td.push(s[i]);\n\t}\n\treturn d.join('');\n};\n\nLexer.prototype.getErrorDisplayForChar = function(c) {\n\tif (c.charCodeAt(0) === Token.EOF) {\n\t\treturn \"\";\n\t} else if (c === '\\n') {\n\t\treturn \"\\\\n\";\n\t} else if (c === '\\t') {\n\t\treturn \"\\\\t\";\n\t} else if (c === '\\r') {\n\t\treturn \"\\\\r\";\n\t} else {\n\t\treturn c;\n\t}\n};\n\nLexer.prototype.getCharErrorDisplay = function(c) {\n\treturn \"'\" + this.getErrorDisplayForChar(c) + \"'\";\n};\n\n// Lexers can normally match any char in it's vocabulary after matching\n// a token, so do the easy thing and just kill a character and hope\n// it all works out. You can instead use the rule invocation stack\n// to do sophisticated error recovery if you are in a fragment rule.\n// /\nLexer.prototype.recover = function(re) {\n\tif (this._input.LA(1) !== Token.EOF) {\n\t\tif (re instanceof LexerNoViableAltException) {\n\t\t\t// skip a char and try again\n\t\t\tthis._interp.consume(this._input);\n\t\t} else {\n\t\t\t// TODO: Do we lose character or line position information?\n\t\t\tthis._input.consume();\n\t\t}\n\t}\n};\n\nexports.Lexer = Lexer;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L0xleGVyLmpzPzJmOWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLEdBQVM7QUFDN0IsaUJBQWlCLG1CQUFPLENBQUMsR0FBYztBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxHQUFzQjtBQUN2RCw0QkFBNEIsbUJBQU8sQ0FBQyxHQUFnQjtBQUNwRCxnQ0FBZ0MsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gQSBsZXhlciBpcyByZWNvZ25pemVyIHRoYXQgZHJhd3MgaW5wdXQgc3ltYm9scyBmcm9tIGEgY2hhcmFjdGVyIHN0cmVhbS5cbi8vICBsZXhlciBncmFtbWFycyByZXN1bHQgaW4gYSBzdWJjbGFzcyBvZiB0aGlzIG9iamVjdC4gQSBMZXhlciBvYmplY3Rcbi8vICB1c2VzIHNpbXBsaWZpZWQgbWF0Y2goKSBhbmQgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbiB0aGUgaW50ZXJlc3Qgb2Ygc3BlZWQuXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSZWNvZ25pemVyID0gcmVxdWlyZSgnLi9SZWNvZ25pemVyJykuUmVjb2duaXplcjtcbnZhciBDb21tb25Ub2tlbkZhY3RvcnkgPSByZXF1aXJlKCcuL0NvbW1vblRva2VuRmFjdG9yeScpLkNvbW1vblRva2VuRmFjdG9yeTtcbnZhciBSZWNvZ25pdGlvbkV4Y2VwdGlvbiAgPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLlJlY29nbml0aW9uRXhjZXB0aW9uO1xudmFyIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbmZ1bmN0aW9uIFRva2VuU291cmNlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gTGV4ZXIoaW5wdXQpIHtcblx0UmVjb2duaXplci5jYWxsKHRoaXMpO1xuXHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHR0aGlzLl9mYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5LkRFRkFVTFQ7XG5cdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIGlucHV0IF07XG5cblx0dGhpcy5faW50ZXJwID0gbnVsbDsgLy8gY2hpbGQgY2xhc3NlcyBtdXN0IHBvcHVsYXRlIHRoaXNcblxuXHQvLyBUaGUgZ29hbCBvZiBhbGwgbGV4ZXIgcnVsZXMvbWV0aG9kcyBpcyB0byBjcmVhdGUgYSB0b2tlbiBvYmplY3QuXG5cdC8vIHRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgYXMgbXVsdGlwbGUgcnVsZXMgbWF5IGNvbGxhYm9yYXRlIHRvXG5cdC8vIGNyZWF0ZSBhIHNpbmdsZSB0b2tlbi4gbmV4dFRva2VuIHdpbGwgcmV0dXJuIHRoaXMgb2JqZWN0IGFmdGVyXG5cdC8vIG1hdGNoaW5nIGxleGVyIHJ1bGUocykuIElmIHlvdSBzdWJjbGFzcyB0byBhbGxvdyBtdWx0aXBsZSB0b2tlblxuXHQvLyBlbWlzc2lvbnMsIHRoZW4gc2V0IHRoaXMgdG8gdGhlIGxhc3QgdG9rZW4gdG8gYmUgbWF0Y2hlZCBvclxuXHQvLyBzb21ldGhpbmcgbm9ubnVsbCBzbyB0aGF0IHRoZSBhdXRvIHRva2VuIGVtaXQgbWVjaGFuaXNtIHdpbGwgbm90XG5cdC8vIGVtaXQgYW5vdGhlciB0b2tlbi5cblx0dGhpcy5fdG9rZW4gPSBudWxsO1xuXG5cdC8vIFdoYXQgY2hhcmFjdGVyIGluZGV4IGluIHRoZSBzdHJlYW0gZGlkIHRoZSBjdXJyZW50IHRva2VuIHN0YXJ0IGF0P1xuXHQvLyBOZWVkZWQsIGZvciBleGFtcGxlLCB0byBnZXQgdGhlIHRleHQgZm9yIGN1cnJlbnQgdG9rZW4uIFNldCBhdFxuXHQvLyB0aGUgc3RhcnQgb2YgbmV4dFRva2VuLlxuXHR0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4ID0gLTE7XG5cblx0Ly8gVGhlIGxpbmUgb24gd2hpY2ggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdG9rZW4gcmVzaWRlcy8vL1xuXHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IC0xO1xuXG5cdC8vIFRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgZmlyc3QgY2hhcmFjdGVyIHdpdGhpbiB0aGUgbGluZS8vL1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cblx0Ly8gT25jZSB3ZSBzZWUgRU9GIG9uIGNoYXIgc3RyZWFtLCBuZXh0IHRva2VuIHdpbGwgYmUgRU9GLlxuXHQvLyBJZiB5b3UgaGF2ZSBET05FIDogRU9GIDsgdGhlbiB5b3Ugc2VlIERPTkUgRU9GLlxuXHR0aGlzLl9oaXRFT0YgPSBmYWxzZTtcblxuXHQvLyBUaGUgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX2NoYW5uZWwgPSBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cblx0Ly8gVGhlIHRva2VuIHR5cGUgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX3R5cGUgPSBUb2tlbi5JTlZBTElEX1RZUEU7XG5cblx0dGhpcy5fbW9kZVN0YWNrID0gW107XG5cdHRoaXMuX21vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cblx0Ly8gWW91IGNhbiBzZXQgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHRva2VuIHRvIG92ZXJyaWRlIHdoYXQgaXMgaW5cblx0Ly8gdGhlIGlucHV0IGNoYXIgYnVmZmVyLiBVc2Ugc2V0VGV4dCgpIG9yIGNhbiBzZXQgdGhpcyBpbnN0YW5jZSB2YXIuXG5cdC8vIC9cblx0dGhpcy5fdGV4dCA9IG51bGw7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXplci5wcm90b3R5cGUpO1xuTGV4ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXI7XG5cbkxleGVyLkRFRkFVTFRfTU9ERSA9IDA7XG5MZXhlci5NT1JFID0gLTI7XG5MZXhlci5TS0lQID0gLTM7XG5cbkxleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcbkxleGVyLkhJRERFTiA9IFRva2VuLkhJRERFTl9DSEFOTkVMO1xuTGV4ZXIuTUlOX0NIQVJfVkFMVUUgPSAweDAwMDA7XG5MZXhlci5NQVhfQ0hBUl9WQUxVRSA9IDB4MTBGRkZGO1xuXG5MZXhlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0Ly8gd2FjayBMZXhlciBzdGF0ZSB2YXJpYWJsZXNcblx0aWYgKHRoaXMuX2lucHV0ICE9PSBudWxsKSB7XG5cdFx0dGhpcy5faW5wdXQuc2VlaygwKTsgLy8gcmV3aW5kIHRoZSBpbnB1dFxuXHR9XG5cdHRoaXMuX3Rva2VuID0gbnVsbDtcblx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0dGhpcy5fY2hhbm5lbCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcblx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IC0xO1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cdHRoaXMuX3Rva2VuU3RhcnRMaW5lID0gLTE7XG5cdHRoaXMuX3RleHQgPSBudWxsO1xuXG5cdHRoaXMuX2hpdEVPRiA9IGZhbHNlO1xuXHR0aGlzLl9tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xuXHR0aGlzLl9tb2RlU3RhY2sgPSBbXTtcblxuXHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcbn07XG5cbi8vIFJldHVybiBhIHRva2VuIGZyb20gdGhpcyBzb3VyY2U7IGkuZS4sIG1hdGNoIGEgdG9rZW4gb24gdGhlIGNoYXIgc3RyZWFtLlxuTGV4ZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcIm5leHRUb2tlbiByZXF1aXJlcyBhIG5vbi1udWxsIGlucHV0IHN0cmVhbS5cIjtcblx0fVxuXG5cdC8vIE1hcmsgc3RhcnQgbG9jYXRpb24gaW4gY2hhciBzdHJlYW0gc28gdW5idWZmZXJlZCBzdHJlYW1zIGFyZVxuXHQvLyBndWFyYW50ZWVkIGF0IGxlYXN0IGhhdmUgdGV4dCBvZiBjdXJyZW50IHRva2VuXG5cdHZhciB0b2tlblN0YXJ0TWFya2VyID0gdGhpcy5faW5wdXQubWFyaygpO1xuXHR0cnkge1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5faGl0RU9GKSB7XG5cdFx0XHRcdHRoaXMuZW1pdEVPRigpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fdG9rZW47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl90b2tlbiA9IG51bGw7XG5cdFx0XHR0aGlzLl9jaGFubmVsID0gVG9rZW4uREVGQVVMVF9DSEFOTkVMO1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiA9IHRoaXMuX2ludGVycC5jb2x1bW47XG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IHRoaXMuX2ludGVycC5saW5lO1xuXHRcdFx0dGhpcy5fdGV4dCA9IG51bGw7XG5cdFx0XHR2YXIgY29udGludWVPdXRlciA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0XHRcdFx0dmFyIHR0eXBlID0gTGV4ZXIuU0tJUDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0dHlwZSA9IHRoaXMuX2ludGVycC5tYXRjaCh0aGlzLl9pbnB1dCwgdGhpcy5fbW9kZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ICAgIGlmKGUgaW5zdGFuY2VvZiBSZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoZSk7IC8vIHJlcG9ydCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvdmVyKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX2lucHV0LkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0XHR0aGlzLl9oaXRFT0YgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl90eXBlID09PSBUb2tlbi5JTlZBTElEX1RZUEUpIHtcblx0XHRcdFx0XHR0aGlzLl90eXBlID0gdHR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3R5cGUgPT09IExleGVyLlNLSVApIHtcblx0XHRcdFx0XHRjb250aW51ZU91dGVyID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fdHlwZSAhPT0gTGV4ZXIuTU9SRSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udGludWVPdXRlcikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLl90b2tlbiA9PT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLmVtaXQoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLl90b2tlbjtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gbWFrZSBzdXJlIHdlIHJlbGVhc2UgbWFya2VyIGFmdGVyIG1hdGNoIG9yXG5cdFx0Ly8gdW5idWZmZXJlZCBjaGFyIHN0cmVhbSB3aWxsIGtlZXAgYnVmZmVyaW5nXG5cdFx0dGhpcy5faW5wdXQucmVsZWFzZSh0b2tlblN0YXJ0TWFya2VyKTtcblx0fVxufTtcblxuLy8gSW5zdHJ1Y3QgdGhlIGxleGVyIHRvIHNraXAgY3JlYXRpbmcgYSB0b2tlbiBmb3IgY3VycmVudCBsZXhlciBydWxlXG4vLyBhbmQgbG9vayBmb3IgYW5vdGhlciB0b2tlbi4gbmV4dFRva2VuKCkga25vd3MgdG8ga2VlcCBsb29raW5nIHdoZW5cbi8vIGEgbGV4ZXIgcnVsZSBmaW5pc2hlcyB3aXRoIHRva2VuIHNldCB0byBTS0lQX1RPS0VOLiBSZWNhbGwgdGhhdFxuLy8gaWYgdG9rZW49PW51bGwgYXQgZW5kIG9mIGFueSB0b2tlbiBydWxlLCBpdCBjcmVhdGVzIG9uZSBmb3IgeW91XG4vLyBhbmQgZW1pdHMgaXQuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl90eXBlID0gTGV4ZXIuU0tJUDtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5tb3JlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX3R5cGUgPSBMZXhlci5NT1JFO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLm1vZGUgPSBmdW5jdGlvbihtKSB7XG5cdHRoaXMuX21vZGUgPSBtO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLnB1c2hNb2RlID0gZnVuY3Rpb24obSkge1xuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwdXNoTW9kZSBcIiArIG0pO1xuXHR9XG5cdHRoaXMuX21vZGVTdGFjay5wdXNoKHRoaXMuX21vZGUpO1xuXHR0aGlzLm1vZGUobSk7XG59O1xuXG5MZXhlci5wcm90b3R5cGUucG9wTW9kZSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fbW9kZVN0YWNrLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IFwiRW1wdHkgU3RhY2tcIjtcblx0fVxuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwb3BNb2RlIGJhY2sgdG8gXCIgKyB0aGlzLl9tb2RlU3RhY2suc2xpY2UoMCwgLTEpKTtcblx0fVxuXHR0aGlzLm1vZGUodGhpcy5fbW9kZVN0YWNrLnBvcCgpKTtcblx0cmV0dXJuIHRoaXMuX21vZGU7XG59O1xuXG4vLyBTZXQgdGhlIGNoYXIgc3RyZWFtIGFuZCByZXNldCB0aGUgbGV4ZXJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwiaW5wdXRTdHJlYW1cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5wdXQ7XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHRcdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIHRoaXMuX2lucHV0IF07XG5cdFx0dGhpcy5yZXNldCgpO1xuXHRcdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cdFx0dGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciA9IFsgdGhpcywgdGhpcy5faW5wdXQgXTtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwic291cmNlTmFtZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uIHNvdXJjZU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG5cdH1cbn0pO1xuXG4vLyBCeSBkZWZhdWx0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZW1pdHMgcGVyIG5leHRUb2tlbiBpbnZvY2F0aW9uXG4vLyBmb3IgZWZmaWNpZW5jeSByZWFzb25zLiBTdWJjbGFzcyBhbmQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIG5leHRUb2tlbixcbi8vIGFuZCBnZXRUb2tlbiAodG8gcHVzaCB0b2tlbnMgaW50byBhIGxpc3QgYW5kIHB1bGwgZnJvbSB0aGF0IGxpc3Rcbi8vIHJhdGhlciB0aGFuIGEgc2luZ2xlIHZhcmlhYmxlIGFzIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcykuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuZW1pdFRva2VuID0gZnVuY3Rpb24odG9rZW4pIHtcblx0dGhpcy5fdG9rZW4gPSB0b2tlbjtcbn07XG5cbi8vIFRoZSBzdGFuZGFyZCBtZXRob2QgY2FsbGVkIHRvIGF1dG9tYXRpY2FsbHkgZW1pdCBhIHRva2VuIGF0IHRoZVxuLy8gb3V0ZXJtb3N0IGxleGljYWwgcnVsZS4gVGhlIHRva2VuIG9iamVjdCBzaG91bGQgcG9pbnQgaW50byB0aGVcbi8vIGNoYXIgYnVmZmVyIHN0YXJ0Li5zdG9wLiBJZiB0aGVyZSBpcyBhIHRleHQgb3ZlcnJpZGUgaW4gJ3RleHQnLFxuLy8gdXNlIHRoYXQgdG8gc2V0IHRoZSB0b2tlbidzIHRleHQuIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGVtaXRcbi8vIGN1c3RvbSBUb2tlbiBvYmplY3RzIG9yIHByb3ZpZGUgYSBuZXcgZmFjdG9yeS5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gdGhpcy5fZmFjdG9yeS5jcmVhdGUodGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciwgdGhpcy5fdHlwZSxcblx0XHRcdHRoaXMuX3RleHQsIHRoaXMuX2NoYW5uZWwsIHRoaXMuX3Rva2VuU3RhcnRDaGFySW5kZXgsIHRoaXNcblx0XHRcdFx0XHQuZ2V0Q2hhckluZGV4KCkgLSAxLCB0aGlzLl90b2tlblN0YXJ0TGluZSxcblx0XHRcdHRoaXMuX3Rva2VuU3RhcnRDb2x1bW4pO1xuXHR0aGlzLmVtaXRUb2tlbih0KTtcblx0cmV0dXJuIHQ7XG59O1xuXG5MZXhlci5wcm90b3R5cGUuZW1pdEVPRiA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgY3BvcyA9IHRoaXMuY29sdW1uO1xuXHR2YXIgbHBvcyA9IHRoaXMubGluZTtcblx0dmFyIGVvZiA9IHRoaXMuX2ZhY3RvcnkuY3JlYXRlKHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIsIFRva2VuLkVPRixcblx0XHRcdG51bGwsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCwgdGhpcy5faW5wdXQuaW5kZXgsXG5cdFx0XHR0aGlzLl9pbnB1dC5pbmRleCAtIDEsIGxwb3MsIGNwb3MpO1xuXHR0aGlzLmVtaXRUb2tlbihlb2YpO1xuXHRyZXR1cm4gZW9mO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZTtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24odHlwZSkge1xuXHRcdHRoaXMuX3R5cGUgPSB0eXBlO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJsaW5lXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludGVycC5saW5lO1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbihsaW5lKSB7XG5cdFx0dGhpcy5faW50ZXJwLmxpbmUgPSBsaW5lO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJjb2x1bW5cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmNvbHVtbjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oY29sdW1uKSB7XG5cdFx0dGhpcy5faW50ZXJwLmNvbHVtbiA9IGNvbHVtbjtcblx0fVxufSk7XG5cblxuLy8gV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIG9mIGxvb2thaGVhZD8vLy9cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFySW5kZXggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LmluZGV4O1xufTtcblxuLy8gUmV0dXJuIHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbiBvciBhbnkgdGV4dCBvdmVycmlkZS5cbi8vU2V0IHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoaXMgdG9rZW47IGl0IHdpcGVzIGFueSBwcmV2aW91cyBjaGFuZ2VzIHRvIHRoZSB0ZXh0LlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmdldFRleHQodGhpcy5faW5wdXQpO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIFRva2VuIG9iamVjdHMgaW4gaW5wdXQgY2hhciBzdHJlYW0uXG4vLyBGb3JjZXMgbG9hZCBvZiBhbGwgdG9rZW5zLiBEb2VzIG5vdCBpbmNsdWRlIEVPRiB0b2tlbi5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5nZXRBbGxUb2tlbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRva2VucyA9IFtdO1xuXHR2YXIgdCA9IHRoaXMubmV4dFRva2VuKCk7XG5cdHdoaWxlICh0LnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRva2Vucy5wdXNoKHQpO1xuXHRcdHQgPSB0aGlzLm5leHRUb2tlbigpO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xuXG5MZXhlci5wcm90b3R5cGUubm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24oZSkge1xuXHR2YXIgc3RhcnQgPSB0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4O1xuXHR2YXIgc3RvcCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHR2YXIgdGV4dCA9IHRoaXMuX2lucHV0LmdldFRleHQoc3RhcnQsIHN0b3ApO1xuXHR2YXIgbXNnID0gXCJ0b2tlbiByZWNvZ25pdGlvbiBlcnJvciBhdDogJ1wiICsgdGhpcy5nZXRFcnJvckRpc3BsYXkodGV4dCkgKyBcIidcIjtcblx0dmFyIGxpc3RlbmVyID0gdGhpcy5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKTtcblx0bGlzdGVuZXIuc3ludGF4RXJyb3IodGhpcywgbnVsbCwgdGhpcy5fdG9rZW5TdGFydExpbmUsXG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uLCBtc2csIGUpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHMpIHtcblx0dmFyIGQgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZC5wdXNoKHNbaV0pO1xuXHR9XG5cdHJldHVybiBkLmpvaW4oJycpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheUZvckNoYXIgPSBmdW5jdGlvbihjKSB7XG5cdGlmIChjLmNoYXJDb2RlQXQoMCkgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSBpZiAoYyA9PT0gJ1xcbicpIHtcblx0XHRyZXR1cm4gXCJcXFxcblwiO1xuXHR9IGVsc2UgaWYgKGMgPT09ICdcXHQnKSB7XG5cdFx0cmV0dXJuIFwiXFxcXHRcIjtcblx0fSBlbHNlIGlmIChjID09PSAnXFxyJykge1xuXHRcdHJldHVybiBcIlxcXFxyXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGM7XG5cdH1cbn07XG5cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFyRXJyb3JEaXNwbGF5ID0gZnVuY3Rpb24oYykge1xuXHRyZXR1cm4gXCInXCIgKyB0aGlzLmdldEVycm9yRGlzcGxheUZvckNoYXIoYykgKyBcIidcIjtcbn07XG5cbi8vIExleGVycyBjYW4gbm9ybWFsbHkgbWF0Y2ggYW55IGNoYXIgaW4gaXQncyB2b2NhYnVsYXJ5IGFmdGVyIG1hdGNoaW5nXG4vLyBhIHRva2VuLCBzbyBkbyB0aGUgZWFzeSB0aGluZyBhbmQganVzdCBraWxsIGEgY2hhcmFjdGVyIGFuZCBob3BlXG4vLyBpdCBhbGwgd29ya3Mgb3V0LiBZb3UgY2FuIGluc3RlYWQgdXNlIHRoZSBydWxlIGludm9jYXRpb24gc3RhY2tcbi8vIHRvIGRvIHNvcGhpc3RpY2F0ZWQgZXJyb3IgcmVjb3ZlcnkgaWYgeW91IGFyZSBpbiBhIGZyYWdtZW50IHJ1bGUuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlKSB7XG5cdGlmICh0aGlzLl9pbnB1dC5MQSgxKSAhPT0gVG9rZW4uRU9GKSB7XG5cdFx0aWYgKHJlIGluc3RhbmNlb2YgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbikge1xuXHRcdFx0Ly8gc2tpcCBhIGNoYXIgYW5kIHRyeSBhZ2FpblxuXHRcdFx0dGhpcy5faW50ZXJwLmNvbnN1bWUodGhpcy5faW5wdXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUT0RPOiBEbyB3ZSBsb3NlIGNoYXJhY3RlciBvciBsaW5lIHBvc2l0aW9uIGluZm9ybWF0aW9uP1xuXHRcdFx0dGhpcy5faW5wdXQuY29uc3VtZSgpO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0cy5MZXhlciA9IExleGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///319\n"); /***/ }), /***/ 320: /***/ (function(module, exports) { eval("//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n// Provides an empty default implementation of {@link ANTLRErrorListener}. The\n// default implementation of each method does nothing, but can be overridden as\n// necessary.\n\nfunction ErrorListener() {\n\treturn this;\n}\n\nErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {\n};\n\nErrorListener.prototype.reportAmbiguity = function(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) {\n};\n\nErrorListener.prototype.reportAttemptingFullContext = function(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) {\n};\n\nErrorListener.prototype.reportContextSensitivity = function(recognizer, dfa, startIndex, stopIndex, prediction, configs) {\n};\n\nfunction ConsoleErrorListener() {\n\tErrorListener.call(this);\n\treturn this;\n}\n\nConsoleErrorListener.prototype = Object.create(ErrorListener.prototype);\nConsoleErrorListener.prototype.constructor = ConsoleErrorListener;\n\n//\n// Provides a default instance of {@link ConsoleErrorListener}.\n//\nConsoleErrorListener.INSTANCE = new ConsoleErrorListener();\n\n//\n// {@inheritDoc}\n//\n//

\n// This implementation prints messages to {@link System//err} containing the\n// values of {@code line}, {@code charPositionInLine}, and {@code msg} using\n// the following format.

\n//\n//
\n// line line:charPositionInLine msg\n// 
\n//\nConsoleErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {\n console.error(\"line \" + line + \":\" + column + \" \" + msg);\n};\n\nfunction ProxyErrorListener(delegates) {\n\tErrorListener.call(this);\n if (delegates===null) {\n throw \"delegates\";\n }\n this.delegates = delegates;\n\treturn this;\n}\n\nProxyErrorListener.prototype = Object.create(ErrorListener.prototype);\nProxyErrorListener.prototype.constructor = ProxyErrorListener;\n\nProxyErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {\n this.delegates.map(function(d) { d.syntaxError(recognizer, offendingSymbol, line, column, msg, e); });\n};\n\nProxyErrorListener.prototype.reportAmbiguity = function(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) {\n this.delegates.map(function(d) { d.reportAmbiguity(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs); });\n};\n\nProxyErrorListener.prototype.reportAttemptingFullContext = function(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) {\n\tthis.delegates.map(function(d) { d.reportAttemptingFullContext(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs); });\n};\n\nProxyErrorListener.prototype.reportContextSensitivity = function(recognizer, dfa, startIndex, stopIndex, prediction, configs) {\n\tthis.delegates.map(function(d) { d.reportContextSensitivity(recognizer, dfa, startIndex, stopIndex, prediction, configs); });\n};\n\nexports.ErrorListener = ErrorListener;\nexports.ConsoleErrorListener = ConsoleErrorListener;\nexports.ProxyErrorListener = ProxyErrorListener;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yTGlzdGVuZXIuanM/MDQ3MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdEQUFnRCx5QkFBeUI7QUFDekU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLDJCQUEyQjtBQUM5RDtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSwyQ0FBMkMsa0JBQWtCO0FBQzdELGNBQWMsV0FBVyxHQUFHLHlCQUF5QixPQUFPLFVBQVU7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxrRUFBa0UsRUFBRTtBQUN4Rzs7QUFFQTtBQUNBLG9DQUFvQyxzRkFBc0YsRUFBRTtBQUM1SDs7QUFFQTtBQUNBLGlDQUFpQyxpR0FBaUcsRUFBRTtBQUNwSTs7QUFFQTtBQUNBLGlDQUFpQyx5RkFBeUYsRUFBRTtBQUM1SDs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLy8gUHJvdmlkZXMgYW4gZW1wdHkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvckxpc3RlbmVyfS4gVGhlXG4vLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGVhY2ggbWV0aG9kIGRvZXMgbm90aGluZywgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGFzXG4vLyBuZWNlc3NhcnkuXG5cbmZ1bmN0aW9uIEVycm9yTGlzdGVuZXIoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvckxpc3RlbmVyLnByb3RvdHlwZS5zeW50YXhFcnJvciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIG9mZmVuZGluZ1N5bWJvbCwgbGluZSwgY29sdW1uLCBtc2csIGUpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEFtYmlndWl0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG59O1xuXG5FcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKSB7XG59O1xuXG5FcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xufTtcblxuZnVuY3Rpb24gQ29uc29sZUVycm9yTGlzdGVuZXIoKSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbnNvbGVFcnJvckxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc29sZUVycm9yTGlzdGVuZXI7XG5cbi8vXG4vLyBQcm92aWRlcyBhIGRlZmF1bHQgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbnNvbGVFcnJvckxpc3RlbmVyfS5cbi8vXG5Db25zb2xlRXJyb3JMaXN0ZW5lci5JTlNUQU5DRSA9IG5ldyBDb25zb2xlRXJyb3JMaXN0ZW5lcigpO1xuXG4vL1xuLy8ge0Bpbmhlcml0RG9jfVxuLy9cbi8vIDxwPlxuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBwcmludHMgbWVzc2FnZXMgdG8ge0BsaW5rIFN5c3RlbS8vZXJyfSBjb250YWluaW5nIHRoZVxuLy8gdmFsdWVzIG9mIHtAY29kZSBsaW5lfSwge0Bjb2RlIGNoYXJQb3NpdGlvbkluTGluZX0sIGFuZCB7QGNvZGUgbXNnfSB1c2luZ1xuLy8gdGhlIGZvbGxvd2luZyBmb3JtYXQuPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBsaW5lIDxlbT5saW5lPC9lbT46PGVtPmNoYXJQb3NpdGlvbkluTGluZTwvZW0+IDxlbT5tc2c8L2VtPlxuLy8gPC9wcmU+XG4vL1xuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJsaW5lIFwiICsgbGluZSArIFwiOlwiICsgY29sdW1uICsgXCIgXCIgKyBtc2cpO1xufTtcblxuZnVuY3Rpb24gUHJveHlFcnJvckxpc3RlbmVyKGRlbGVnYXRlcykge1xuXHRFcnJvckxpc3RlbmVyLmNhbGwodGhpcyk7XG4gICAgaWYgKGRlbGVnYXRlcz09PW51bGwpIHtcbiAgICAgICAgdGhyb3cgXCJkZWxlZ2F0ZXNcIjtcbiAgICB9XG4gICAgdGhpcy5kZWxlZ2F0ZXMgPSBkZWxlZ2F0ZXM7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvckxpc3RlbmVyLnByb3RvdHlwZSk7XG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJveHlFcnJvckxpc3RlbmVyO1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xuICAgIHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQuc3ludGF4RXJyb3IocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSk7IH0pO1xufTtcblxuUHJveHlFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgZXhhY3QsIGFtYmlnQWx0cywgY29uZmlncykge1xuICAgIHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQucmVwb3J0QW1iaWd1aXR5KHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpIHtcblx0dGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGNvbmZsaWN0aW5nQWx0cywgY29uZmlncyk7IH0pO1xufTtcblxuUHJveHlFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xuXHR0aGlzLmRlbGVnYXRlcy5tYXAoZnVuY3Rpb24oZCkgeyBkLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eShyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncyk7IH0pO1xufTtcblxuZXhwb3J0cy5FcnJvckxpc3RlbmVyID0gRXJyb3JMaXN0ZW5lcjtcbmV4cG9ydHMuQ29uc29sZUVycm9yTGlzdGVuZXIgPSBDb25zb2xlRXJyb3JMaXN0ZW5lcjtcbmV4cG9ydHMuUHJveHlFcnJvckxpc3RlbmVyID0gUHJveHlFcnJvckxpc3RlbmVyO1xuXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n"); /***/ }), /***/ 321: /***/ (function(module, exports) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n// A DFA walker that knows how to dump them to serialized strings.#/\n\n\nfunction DFASerializer(dfa, literalNames, symbolicNames) {\n\tthis.dfa = dfa;\n\tthis.literalNames = literalNames || [];\n\tthis.symbolicNames = symbolicNames || [];\n\treturn this;\n}\n\nDFASerializer.prototype.toString = function() {\n if(this.dfa.s0 === null) {\n return null;\n }\n var buf = \"\";\n var states = this.dfa.sortedStates();\n for(var i=0;i\");\n buf = buf.concat(this.getStateString(t));\n buf = buf.concat('\\n');\n }\n }\n }\n }\n return buf.length===0 ? null : buf;\n};\n\nDFASerializer.prototype.getEdgeLabel = function(i) {\n if (i===0) {\n return \"EOF\";\n } else if(this.literalNames !==null || this.symbolicNames!==null) {\n return this.literalNames[i-1] || this.symbolicNames[i-1];\n } else {\n return String.fromCharCode(i-1);\n }\n};\n\nDFASerializer.prototype.getStateString = function(s) {\n var baseStateStr = ( s.isAcceptState ? \":\" : \"\") + \"s\" + s.stateNumber + ( s.requiresFullContext ? \"^\" : \"\");\n if(s.isAcceptState) {\n if (s.predicates !== null) {\n return baseStateStr + \"=>\" + s.predicates.toString();\n } else {\n return baseStateStr + \"=>\" + s.prediction.toString();\n }\n } else {\n return baseStateStr;\n }\n};\n\nfunction LexerDFASerializer(dfa) {\n\tDFASerializer.call(this, dfa, null);\n\treturn this;\n}\n\nLexerDFASerializer.prototype = Object.create(DFASerializer.prototype);\nLexerDFASerializer.prototype.constructor = LexerDFASerializer;\n\nLexerDFASerializer.prototype.getEdgeLabel = function(i) {\n\treturn \"'\" + String.fromCharCode(i) + \"'\";\n};\n\nexports.DFASerializer = DFASerializer;\nexports.LexerDFASerializer = LexerDFASerializer;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkFTZXJpYWxpemVyLmpzP2VlZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsSUFBSTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjMyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLy8gQSBERkEgd2Fsa2VyIHRoYXQga25vd3MgaG93IHRvIGR1bXAgdGhlbSB0byBzZXJpYWxpemVkIHN0cmluZ3MuIy9cblxuXG5mdW5jdGlvbiBERkFTZXJpYWxpemVyKGRmYSwgbGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSB7XG5cdHRoaXMuZGZhID0gZGZhO1xuXHR0aGlzLmxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBbXTtcblx0dGhpcy5zeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBbXTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICBpZih0aGlzLmRmYS5zMCA9PT0gbnVsbCkge1xuICAgICAgIHJldHVybiBudWxsO1xuICAgfVxuICAgdmFyIGJ1ZiA9IFwiXCI7XG4gICB2YXIgc3RhdGVzID0gdGhpcy5kZmEuc29ydGVkU3RhdGVzKCk7XG4gICBmb3IodmFyIGk9MDtpPHN0YXRlcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgdmFyIHMgPSBzdGF0ZXNbaV07XG4gICAgICAgaWYocy5lZGdlcyE9PW51bGwpIHtcbiAgICAgICAgICAgIHZhciBuID0gcy5lZGdlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IodmFyIGo9MDtqPG47aisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSBzLmVkZ2VzW2pdIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgaWYodCE9PW51bGwgJiYgdC5zdGF0ZU51bWJlciAhPT0gMHg3RkZGRkZGRikge1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0U3RhdGVTdHJpbmcocykpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KFwiLVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdCh0aGlzLmdldEVkZ2VMYWJlbChqKSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQoXCItPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdCh0aGlzLmdldFN0YXRlU3RyaW5nKHQpKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgIH1cbiAgIH1cbiAgIHJldHVybiBidWYubGVuZ3RoPT09MCA/IG51bGwgOiBidWY7XG59O1xuXG5ERkFTZXJpYWxpemVyLnByb3RvdHlwZS5nZXRFZGdlTGFiZWwgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYgKGk9PT0wKSB7XG4gICAgICAgIHJldHVybiBcIkVPRlwiO1xuICAgIH0gZWxzZSBpZih0aGlzLmxpdGVyYWxOYW1lcyAhPT1udWxsIHx8IHRoaXMuc3ltYm9saWNOYW1lcyE9PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGl0ZXJhbE5hbWVzW2ktMV0gfHwgdGhpcy5zeW1ib2xpY05hbWVzW2ktMV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaS0xKTtcbiAgICB9XG59O1xuXG5ERkFTZXJpYWxpemVyLnByb3RvdHlwZS5nZXRTdGF0ZVN0cmluZyA9IGZ1bmN0aW9uKHMpIHtcbiAgICB2YXIgYmFzZVN0YXRlU3RyID0gKCBzLmlzQWNjZXB0U3RhdGUgPyBcIjpcIiA6IFwiXCIpICsgXCJzXCIgKyBzLnN0YXRlTnVtYmVyICsgKCBzLnJlcXVpcmVzRnVsbENvbnRleHQgPyBcIl5cIiA6IFwiXCIpO1xuICAgIGlmKHMuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICBpZiAocy5wcmVkaWNhdGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZVN0YXRlU3RyICsgXCI9PlwiICsgcy5wcmVkaWNhdGVzLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZVN0YXRlU3RyICsgXCI9PlwiICsgcy5wcmVkaWN0aW9uLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYmFzZVN0YXRlU3RyO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIExleGVyREZBU2VyaWFsaXplcihkZmEpIHtcblx0REZBU2VyaWFsaXplci5jYWxsKHRoaXMsIGRmYSwgbnVsbCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlckRGQVNlcmlhbGl6ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShERkFTZXJpYWxpemVyLnByb3RvdHlwZSk7XG5MZXhlckRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJERkFTZXJpYWxpemVyO1xuXG5MZXhlckRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldEVkZ2VMYWJlbCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKSArIFwiJ1wiO1xufTtcblxuZXhwb3J0cy5ERkFTZXJpYWxpemVyID0gREZBU2VyaWFsaXplcjtcbmV4cG9ydHMuTGV4ZXJERkFTZXJpYWxpemVyID0gTGV4ZXJERkFTZXJpYWxpemVyO1xuXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n"); /***/ }), /***/ 339: /***/ (function(module, exports, __webpack_require__) { eval("/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n//* A rule invocation record for parsing.\n//\n// Contains all of the information about the current rule not stored in the\n// RuleContext. It handles parse tree children list, Any ATN state\n// tracing, and the default values available for rule indications:\n// start, stop, rule index, current alt number, current\n// ATN state.\n//\n// Subclasses made for each rule and grammar track the parameters,\n// return values, locals, and labels specific to that rule. These\n// are the objects that are returned from rules.\n//\n// Note text is not an actual field of a rule return value; it is computed\n// from start and stop using the input stream's toString() method. I\n// could add a ctor to this so that we can pass in and store the input\n// stream, but I'm not sure we want to do that. It would seem to be undefined\n// to get the .text property anyway if the rule matches tokens from multiple\n// input streams.\n//\n// I do not use getters for fields of objects that are used simply to\n// group values such as this aggregate. The getters/setters are there to\n// satisfy the superclass interface.\n\nvar RuleContext = __webpack_require__(318).RuleContext;\nvar Tree = __webpack_require__(283);\nvar INVALID_INTERVAL = Tree.INVALID_INTERVAL;\nvar TerminalNode = Tree.TerminalNode;\nvar TerminalNodeImpl = Tree.TerminalNodeImpl;\nvar ErrorNodeImpl = Tree.ErrorNodeImpl;\nvar Interval = __webpack_require__(276).Interval;\n\nfunction ParserRuleContext(parent, invokingStateNumber) {\n\tparent = parent || null;\n\tinvokingStateNumber = invokingStateNumber || null;\n\tRuleContext.call(this, parent, invokingStateNumber);\n\tthis.ruleIndex = -1;\n // * If we are debugging or building a parse tree for a visitor,\n // we need to track all of the tokens and rule invocations associated\n // with this rule's context. This is empty for parsing w/o tree constr.\n // operation because we don't the need to track the details about\n // how we parse this rule.\n // /\n this.children = null;\n this.start = null;\n this.stop = null;\n // The exception that forced this rule to return. If the rule successfully\n // completed, this is {@code null}.\n this.exception = null;\n}\n\nParserRuleContext.prototype = Object.create(RuleContext.prototype);\nParserRuleContext.prototype.constructor = ParserRuleContext;\n\n// * COPY a ctx (I'm deliberately not using copy constructor)///\nParserRuleContext.prototype.copyFrom = function(ctx) {\n // from RuleContext\n this.parentCtx = ctx.parentCtx;\n this.invokingState = ctx.invokingState;\n this.children = null;\n this.start = ctx.start;\n this.stop = ctx.stop;\n // copy any error nodes to alt label node\n if(ctx.children) {\n this.children = [];\n // reset parent pointer for any error nodes\n \tctx.children.map(function(child) {\n \t\tif (child instanceof ErrorNodeImpl) {\n this.children.push(child);\n child.parentCtx = this;\n }\n\t\t}, this);\n\t}\n};\n\n// Double dispatch methods for listeners\nParserRuleContext.prototype.enterRule = function(listener) {\n};\n\nParserRuleContext.prototype.exitRule = function(listener) {\n};\n\n// * Does not set parent link; other add methods do that///\nParserRuleContext.prototype.addChild = function(child) {\n if (this.children === null) {\n this.children = [];\n }\n this.children.push(child);\n return child;\n};\n\n// * Used by enterOuterAlt to toss out a RuleContext previously added as\n// we entered a rule. If we have // label, we will need to remove\n// generic ruleContext object.\n// /\nParserRuleContext.prototype.removeLastChild = function() {\n if (this.children !== null) {\n this.children.pop();\n }\n};\n\nParserRuleContext.prototype.addTokenNode = function(token) {\n var node = new TerminalNodeImpl(token);\n this.addChild(node);\n node.parentCtx = this;\n return node;\n};\n\nParserRuleContext.prototype.addErrorNode = function(badToken) {\n var node = new ErrorNodeImpl(badToken);\n this.addChild(node);\n node.parentCtx = this;\n return node;\n};\n\nParserRuleContext.prototype.getChild = function(i, type) {\n\ttype = type || null;\n\tif (this.children === null || i < 0 || i >= this.children.length) {\n\t\treturn null;\n\t}\n\tif (type === null) {\n\t\treturn this.children[i];\n\t} else {\n\t\tfor(var j=0; j= this.children.length) {\n\t\treturn null;\n\t}\n\tfor(var j=0; j\";\n\tthis.strdata = data;\n\tthis.decodeToUnicodeCodePoints = decodeToUnicodeCodePoints || false;\n\t_loadString(this);\n\treturn this;\n}\n\nObject.defineProperty(InputStream.prototype, \"index\", {\n\tget : function() {\n\t\treturn this._index;\n\t}\n});\n\nObject.defineProperty(InputStream.prototype, \"size\", {\n\tget : function() {\n\t\treturn this._size;\n\t}\n});\n\n// Reset the stream so that it's in the same state it was\n// when the object was created *except* the data array is not\n// touched.\n//\nInputStream.prototype.reset = function() {\n\tthis._index = 0;\n};\n\nInputStream.prototype.consume = function() {\n\tif (this._index >= this._size) {\n\t\t// assert this.LA(1) == Token.EOF\n\t\tthrow (\"cannot consume EOF\");\n\t}\n\tthis._index += 1;\n};\n\nInputStream.prototype.LA = function(offset) {\n\tif (offset === 0) {\n\t\treturn 0; // undefined\n\t}\n\tif (offset < 0) {\n\t\toffset += 1; // e.g., translate LA(-1) to use offset=0\n\t}\n\tvar pos = this._index + offset - 1;\n\tif (pos < 0 || pos >= this._size) { // invalid\n\t\treturn Token.EOF;\n\t}\n\treturn this.data[pos];\n};\n\nInputStream.prototype.LT = function(offset) {\n\treturn this.LA(offset);\n};\n\n// mark/release do nothing; we have entire buffer\nInputStream.prototype.mark = function() {\n\treturn -1;\n};\n\nInputStream.prototype.release = function(marker) {\n};\n\n// consume() ahead until p==_index; can't just set p=_index as we must\n// update line and column. If we seek backwards, just set p\n//\nInputStream.prototype.seek = function(_index) {\n\tif (_index <= this._index) {\n\t\tthis._index = _index; // just jump; don't update stream state (line,\n\t\t\t\t\t\t\t\t// ...)\n\t\treturn;\n\t}\n\t// seek forward\n\tthis._index = Math.min(_index, this._size);\n};\n\nInputStream.prototype.getText = function(start, stop) {\n\tif (stop >= this._size) {\n\t\tstop = this._size - 1;\n\t}\n\tif (start >= this._size) {\n\t\treturn \"\";\n\t} else {\n\t\tif (this.decodeToUnicodeCodePoints) {\n\t\t\tvar result = \"\";\n\t\t\tfor (var i = start; i <= stop; i++) {\n\t\t\t\tresult += String.fromCodePoint(this.data[i]);\n\t\t\t}\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn this.strdata.slice(start, stop + 1);\n\t\t}\n\t}\n};\n\nInputStream.prototype.toString = function() {\n\treturn this.strdata;\n};\n\nexports.InputStream = InputStream;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW50bHI0L0lucHV0U3RyZWFtLmpzPzdmZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxHQUFTO0FBQzdCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsMkJBQTJCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGNBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0Esc0JBQXNCLFdBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIzNDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xucmVxdWlyZSgnLi9wb2x5ZmlsbHMvY29kZXBvaW50YXQnKTtcbnJlcXVpcmUoJy4vcG9seWZpbGxzL2Zyb21jb2RlcG9pbnQnKTtcblxuLy8gVmFjdXVtIGFsbCBpbnB1dCBmcm9tIGEgc3RyaW5nIGFuZCB0aGVuIHRyZWF0IGl0IGxpa2UgYSBidWZmZXIuXG5cbmZ1bmN0aW9uIF9sb2FkU3RyaW5nKHN0cmVhbSkge1xuXHRzdHJlYW0uX2luZGV4ID0gMDtcblx0c3RyZWFtLmRhdGEgPSBbXTtcblx0aWYgKHN0cmVhbS5kZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHJlYW0uc3RyZGF0YS5sZW5ndGg7ICkge1xuXHRcdFx0dmFyIGNvZGVQb2ludCA9IHN0cmVhbS5zdHJkYXRhLmNvZGVQb2ludEF0KGkpO1xuXHRcdFx0c3RyZWFtLmRhdGEucHVzaChjb2RlUG9pbnQpO1xuXHRcdFx0aSArPSBjb2RlUG9pbnQgPD0gMHhGRkZGID8gMSA6IDI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RyZWFtLnN0cmRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjb2RlVW5pdCA9IHN0cmVhbS5zdHJkYXRhLmNoYXJDb2RlQXQoaSk7XG5cdFx0XHRzdHJlYW0uZGF0YS5wdXNoKGNvZGVVbml0KTtcblx0XHR9XG5cdH1cblx0c3RyZWFtLl9zaXplID0gc3RyZWFtLmRhdGEubGVuZ3RoO1xufVxuXG4vLyBJZiBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzIGlzIHRydWUsIHRoZSBpbnB1dCBpcyB0cmVhdGVkXG4vLyBhcyBhIHNlcmllcyBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLlxuLy9cbi8vIE90aGVyd2lzZSwgdGhlIGlucHV0IGlzIHRyZWF0ZWQgYXMgYSBzZXJpZXMgb2YgMTYtYml0IFVURi0xNiBjb2RlXG4vLyB1bml0cy5cbmZ1bmN0aW9uIElucHV0U3RyZWFtKGRhdGEsIGRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMpIHtcblx0dGhpcy5uYW1lID0gXCI8ZW1wdHk+XCI7XG5cdHRoaXMuc3RyZGF0YSA9IGRhdGE7XG5cdHRoaXMuZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyA9IGRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMgfHwgZmFsc2U7XG5cdF9sb2FkU3RyaW5nKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KElucHV0U3RyZWFtLnByb3RvdHlwZSwgXCJpbmRleFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmRleDtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dFN0cmVhbS5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zaXplO1xuXHR9XG59KTtcblxuLy8gUmVzZXQgdGhlIHN0cmVhbSBzbyB0aGF0IGl0J3MgaW4gdGhlIHNhbWUgc3RhdGUgaXQgd2FzXG4vLyB3aGVuIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQgKmV4Y2VwdCogdGhlIGRhdGEgYXJyYXkgaXMgbm90XG4vLyB0b3VjaGVkLlxuLy9cbklucHV0U3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl9pbmRleCA9IDA7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5kZXggPj0gdGhpcy5fc2l6ZSkge1xuXHRcdC8vIGFzc2VydCB0aGlzLkxBKDEpID09IFRva2VuLkVPRlxuXHRcdHRocm93IChcImNhbm5vdCBjb25zdW1lIEVPRlwiKTtcblx0fVxuXHR0aGlzLl9pbmRleCArPSAxO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLkxBID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdGlmIChvZmZzZXQgPT09IDApIHtcblx0XHRyZXR1cm4gMDsgLy8gdW5kZWZpbmVkXG5cdH1cblx0aWYgKG9mZnNldCA8IDApIHtcblx0XHRvZmZzZXQgKz0gMTsgLy8gZS5nLiwgdHJhbnNsYXRlIExBKC0xKSB0byB1c2Ugb2Zmc2V0PTBcblx0fVxuXHR2YXIgcG9zID0gdGhpcy5faW5kZXggKyBvZmZzZXQgLSAxO1xuXHRpZiAocG9zIDwgMCB8fCBwb3MgPj0gdGhpcy5fc2l6ZSkgeyAvLyBpbnZhbGlkXG5cdFx0cmV0dXJuIFRva2VuLkVPRjtcblx0fVxuXHRyZXR1cm4gdGhpcy5kYXRhW3Bvc107XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuTFQgPSBmdW5jdGlvbihvZmZzZXQpIHtcblx0cmV0dXJuIHRoaXMuTEEob2Zmc2V0KTtcbn07XG5cbi8vIG1hcmsvcmVsZWFzZSBkbyBub3RoaW5nOyB3ZSBoYXZlIGVudGlyZSBidWZmZXJcbklucHV0U3RyZWFtLnByb3RvdHlwZS5tYXJrID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiAtMTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24obWFya2VyKSB7XG59O1xuXG4vLyBjb25zdW1lKCkgYWhlYWQgdW50aWwgcD09X2luZGV4OyBjYW4ndCBqdXN0IHNldCBwPV9pbmRleCBhcyB3ZSBtdXN0XG4vLyB1cGRhdGUgbGluZSBhbmQgY29sdW1uLiBJZiB3ZSBzZWVrIGJhY2t3YXJkcywganVzdCBzZXQgcFxuLy9cbklucHV0U3RyZWFtLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24oX2luZGV4KSB7XG5cdGlmIChfaW5kZXggPD0gdGhpcy5faW5kZXgpIHtcblx0XHR0aGlzLl9pbmRleCA9IF9pbmRleDsgLy8ganVzdCBqdW1wOyBkb24ndCB1cGRhdGUgc3RyZWFtIHN0YXRlIChsaW5lLFxuXHRcdFx0XHRcdFx0XHRcdC8vIC4uLilcblx0XHRyZXR1cm47XG5cdH1cblx0Ly8gc2VlayBmb3J3YXJkXG5cdHRoaXMuX2luZGV4ID0gTWF0aC5taW4oX2luZGV4LCB0aGlzLl9zaXplKTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oc3RhcnQsIHN0b3ApIHtcblx0aWYgKHN0b3AgPj0gdGhpcy5fc2l6ZSkge1xuXHRcdHN0b3AgPSB0aGlzLl9zaXplIC0gMTtcblx0fVxuXHRpZiAoc3RhcnQgPj0gdGhpcy5fc2l6ZSkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2Uge1xuXHRcdGlmICh0aGlzLmRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMpIHtcblx0XHRcdHZhciByZXN1bHQgPSBcIlwiO1xuXHRcdFx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IHN0b3A7IGkrKykge1xuXHRcdFx0XHRyZXN1bHQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQodGhpcy5kYXRhW2ldKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLnN0cmRhdGEuc2xpY2Uoc3RhcnQsIHN0b3AgKyAxKTtcblx0XHR9XG5cdH1cbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5zdHJkYXRhO1xufTtcblxuZXhwb3J0cy5JbnB1dFN0cmVhbSA9IElucHV0U3RyZWFtO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///340\n"); /***/ }), /***/ 341: /***/ (function(module, exports, __webpack_require__) { eval("// style-loader: Adds some css to the DOM by adding a