Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/cartforge.co/pub/static/adminhtml/Magento/backend/en_US/js/bundle/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/cartforge.co/pub/static/adminhtml/Magento/backend/en_US/js/bundle/bundle8.js
require.config({"config": {
        "jsbuild":{"Magento_PageBuilder/js/resource/csso/csso.js":"(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n        typeof define === 'function' && define.amd ? define(['exports'], factory) :\n            (global = global || self, factory(global.csso = {}));\n}(this, (function (exports) { 'use strict';\n\n    //\n    //                              list\n    //                            \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    //             \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500head \u2502\n    //             \u2502              \u2502 tail\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    //             \u2502              \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518              \u2502\n    //             \u25bc                                    \u25bc\n    //            item        item        item        item\n    //          \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    //  null \u25c0\u2500\u2500\u253c\u2500prev \u2502\u25c0\u2500\u2500\u2500\u253c\u2500prev \u2502\u25c0\u2500\u2500\u2500\u253c\u2500prev \u2502\u25c0\u2500\u2500\u2500\u253c\u2500prev \u2502\n    //          \u2502 next\u2500\u253c\u2500\u2500\u2500\u25b6\u2502 next\u2500\u253c\u2500\u2500\u2500\u25b6\u2502 next\u2500\u253c\u2500\u2500\u2500\u25b6\u2502 next\u2500\u253c\u2500\u2500\u25b6 null\n    //          \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n    //          \u2502 data \u2502    \u2502 data \u2502    \u2502 data \u2502    \u2502 data \u2502\n    //          \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n    //\n\n    function createItem(data) {\n        return {\n            prev: null,\n            next: null,\n            data: data\n        };\n    }\n\n    function allocateCursor(node, prev, next) {\n        var cursor;\n\n        if (cursors !== null) {\n            cursor = cursors;\n            cursors = cursors.cursor;\n            cursor.prev = prev;\n            cursor.next = next;\n            cursor.cursor = node.cursor;\n        } else {\n            cursor = {\n                prev: prev,\n                next: next,\n                cursor: node.cursor\n            };\n        }\n\n        node.cursor = cursor;\n\n        return cursor;\n    }\n\n    function releaseCursor(node) {\n        var cursor = node.cursor;\n\n        node.cursor = cursor.cursor;\n        cursor.prev = null;\n        cursor.next = null;\n        cursor.cursor = cursors;\n        cursors = cursor;\n    }\n\n    var cursors = null;\n    var List = function() {\n        this.cursor = null;\n        this.head = null;\n        this.tail = null;\n    };\n\n    List.createItem = createItem;\n    List.prototype.createItem = createItem;\n\n    List.prototype.updateCursors = function(prevOld, prevNew, nextOld, nextNew) {\n        var cursor = this.cursor;\n\n        while (cursor !== null) {\n            if (cursor.prev === prevOld) {\n                cursor.prev = prevNew;\n            }\n\n            if (cursor.next === nextOld) {\n                cursor.next = nextNew;\n            }\n\n            cursor = cursor.cursor;\n        }\n    };\n\n    List.prototype.getSize = function() {\n        var size = 0;\n        var cursor = this.head;\n\n        while (cursor) {\n            size++;\n            cursor = cursor.next;\n        }\n\n        return size;\n    };\n\n    List.prototype.fromArray = function(array) {\n        var cursor = null;\n\n        this.head = null;\n\n        for (var i = 0; i < array.length; i++) {\n            var item = createItem(array[i]);\n\n            if (cursor !== null) {\n                cursor.next = item;\n            } else {\n                this.head = item;\n            }\n\n            item.prev = cursor;\n            cursor = item;\n        }\n\n        this.tail = cursor;\n\n        return this;\n    };\n\n    List.prototype.toArray = function() {\n        var cursor = this.head;\n        var result = [];\n\n        while (cursor) {\n            result.push(cursor.data);\n            cursor = cursor.next;\n        }\n\n        return result;\n    };\n\n    List.prototype.toJSON = List.prototype.toArray;\n\n    List.prototype.isEmpty = function() {\n        return this.head === null;\n    };\n\n    List.prototype.first = function() {\n        return this.head && this.head.data;\n    };\n\n    List.prototype.last = function() {\n        return this.tail && this.tail.data;\n    };\n\n    List.prototype.each = function(fn, context) {\n        var item;\n\n        if (context === undefined) {\n            context = this;\n        }\n\n        // push cursor\n        var cursor = allocateCursor(this, null, this.head);\n\n        while (cursor.next !== null) {\n            item = cursor.next;\n            cursor.next = item.next;\n\n            fn.call(context, item.data, item, this);\n        }\n\n        // pop cursor\n        releaseCursor(this);\n    };\n\n    List.prototype.forEach = List.prototype.each;\n\n    List.prototype.eachRight = function(fn, context) {\n        var item;\n\n        if (context === undefined) {\n            context = this;\n        }\n\n        // push cursor\n        var cursor = allocateCursor(this, this.tail, null);\n\n        while (cursor.prev !== null) {\n            item = cursor.prev;\n            cursor.prev = item.prev;\n\n            fn.call(context, item.data, item, this);\n        }\n\n        // pop cursor\n        releaseCursor(this);\n    };\n\n    List.prototype.forEachRight = List.prototype.eachRight;\n\n    List.prototype.nextUntil = function(start, fn, context) {\n        if (start === null) {\n            return;\n        }\n\n        var item;\n\n        if (context === undefined) {\n            context = this;\n        }\n\n        // push cursor\n        var cursor = allocateCursor(this, null, start);\n\n        while (cursor.next !== null) {\n            item = cursor.next;\n            cursor.next = item.next;\n\n            if (fn.call(context, item.data, item, this)) {\n                break;\n            }\n        }\n\n        // pop cursor\n        releaseCursor(this);\n    };\n\n    List.prototype.prevUntil = function(start, fn, context) {\n        if (start === null) {\n            return;\n        }\n\n        var item;\n\n        if (context === undefined) {\n            context = this;\n        }\n\n        // push cursor\n        var cursor = allocateCursor(this, start, null);\n\n        while (cursor.prev !== null) {\n            item = cursor.prev;\n            cursor.prev = item.prev;\n\n            if (fn.call(context, item.data, item, this)) {\n                break;\n            }\n        }\n\n        // pop cursor\n        releaseCursor(this);\n    };\n\n    List.prototype.some = function(fn, context) {\n        var cursor = this.head;\n\n        if (context === undefined) {\n            context = this;\n        }\n\n        while (cursor !== null) {\n            if (fn.call(context, cursor.data, cursor, this)) {\n                return true;\n            }\n\n            cursor = cursor.next;\n        }\n\n        return false;\n    };\n\n    List.prototype.map = function(fn, context) {\n        var result = new List();\n        var cursor = this.head;\n\n        if (context === undefined) {\n            context = this;\n        }\n\n        while (cursor !== null) {\n            result.appendData(fn.call(context, cursor.data, cursor, this));\n            cursor = cursor.next;\n        }\n\n        return result;\n    };\n\n    List.prototype.filter = function(fn, context) {\n        var result = new List();\n        var cursor = this.head;\n\n        if (context === undefined) {\n            context = this;\n        }\n\n        while (cursor !== null) {\n            if (fn.call(context, cursor.data, cursor, this)) {\n                result.appendData(cursor.data);\n            }\n            cursor = cursor.next;\n        }\n\n        return result;\n    };\n\n    List.prototype.clear = function() {\n        this.head = null;\n        this.tail = null;\n    };\n\n    List.prototype.copy = function() {\n        var result = new List();\n        var cursor = this.head;\n\n        while (cursor !== null) {\n            result.insert(createItem(cursor.data));\n            cursor = cursor.next;\n        }\n\n        return result;\n    };\n\n    List.prototype.prepend = function(item) {\n        //      head\n        //    ^\n        // item\n        this.updateCursors(null, item, this.head, item);\n\n        // insert to the beginning of the list\n        if (this.head !== null) {\n            // new item <- first item\n            this.head.prev = item;\n\n            // new item -> first item\n            item.next = this.head;\n        } else {\n            // if list has no head, then it also has no tail\n            // in this case tail points to the new item\n            this.tail = item;\n        }\n\n        // head always points to new item\n        this.head = item;\n\n        return this;\n    };\n\n    List.prototype.prependData = function(data) {\n        return this.prepend(createItem(data));\n    };\n\n    List.prototype.append = function(item) {\n        return this.insert(item);\n    };\n\n    List.prototype.appendData = function(data) {\n        return this.insert(createItem(data));\n    };\n\n    List.prototype.insert = function(item, before) {\n        if (before !== undefined && before !== null) {\n            // prev   before\n            //      ^\n            //     item\n            this.updateCursors(before.prev, item, before, item);\n\n            if (before.prev === null) {\n                // insert to the beginning of list\n                if (this.head !== before) {\n                    throw new Error('before doesn\\'t belong to list');\n                }\n\n                // since head points to before therefore list doesn't empty\n                // no need to check tail\n                this.head = item;\n                before.prev = item;\n                item.next = before;\n\n                this.updateCursors(null, item);\n            } else {\n\n                // insert between two items\n                before.prev.next = item;\n                item.prev = before.prev;\n\n                before.prev = item;\n                item.next = before;\n            }\n        } else {\n            // tail\n            //      ^\n            //      item\n            this.updateCursors(this.tail, item, null, item);\n\n            // insert to the ending of the list\n            if (this.tail !== null) {\n                // last item -> new item\n                this.tail.next = item;\n\n                // last item <- new item\n                item.prev = this.tail;\n            } else {\n                // if list has no tail, then it also has no head\n                // in this case head points to new item\n                this.head = item;\n            }\n\n            // tail always points to new item\n            this.tail = item;\n        }\n\n        return this;\n    };\n\n    List.prototype.insertData = function(data, before) {\n        return this.insert(createItem(data), before);\n    };\n\n    List.prototype.remove = function(item) {\n        //      item\n        //       ^\n        // prev     next\n        this.updateCursors(item, item.prev, item, item.next);\n\n        if (item.prev !== null) {\n            item.prev.next = item.next;\n        } else {\n            if (this.head !== item) {\n                throw new Error('item doesn\\'t belong to list');\n            }\n\n            this.head = item.next;\n        }\n\n        if (item.next !== null) {\n            item.next.prev = item.prev;\n        } else {\n            if (this.tail !== item) {\n                throw new Error('item doesn\\'t belong to list');\n            }\n\n            this.tail = item.prev;\n        }\n\n        item.prev = null;\n        item.next = null;\n\n        return item;\n    };\n\n    List.prototype.push = function(data) {\n        this.insert(createItem(data));\n    };\n\n    List.prototype.pop = function() {\n        if (this.tail !== null) {\n            return this.remove(this.tail);\n        }\n    };\n\n    List.prototype.unshift = function(data) {\n        this.prepend(createItem(data));\n    };\n\n    List.prototype.shift = function() {\n        if (this.head !== null) {\n            return this.remove(this.head);\n        }\n    };\n\n    List.prototype.prependList = function(list) {\n        return this.insertList(list, this.head);\n    };\n\n    List.prototype.appendList = function(list) {\n        return this.insertList(list);\n    };\n\n    List.prototype.insertList = function(list, before) {\n        // ignore empty lists\n        if (list.head === null) {\n            return this;\n        }\n\n        if (before !== undefined && before !== null) {\n            this.updateCursors(before.prev, list.tail, before, list.head);\n\n            // insert in the middle of dist list\n            if (before.prev !== null) {\n                // before.prev <-> list.head\n                before.prev.next = list.head;\n                list.head.prev = before.prev;\n            } else {\n                this.head = list.head;\n            }\n\n            before.prev = list.tail;\n            list.tail.next = before;\n        } else {\n            this.updateCursors(this.tail, list.tail, null, list.head);\n\n            // insert to end of the list\n            if (this.tail !== null) {\n                // if destination list has a tail, then it also has a head,\n                // but head doesn't change\n\n                // dest tail -> source head\n                this.tail.next = list.head;\n\n                // dest tail <- source head\n                list.head.prev = this.tail;\n            } else {\n                // if list has no a tail, then it also has no a head\n                // in this case points head to new item\n                this.head = list.head;\n            }\n\n            // tail always start point to new item\n            this.tail = list.tail;\n        }\n\n        list.head = null;\n        list.tail = null;\n\n        return this;\n    };\n\n    List.prototype.replace = function(oldItem, newItemOrList) {\n        if ('head' in newItemOrList) {\n            this.insertList(newItemOrList, oldItem);\n        } else {\n            this.insert(newItemOrList, oldItem);\n        }\n\n        this.remove(oldItem);\n    };\n\n    var List_1 = List;\n\n    var createCustomError = function createCustomError(name, message) {\n        // use Object.create(), because some VMs prevent setting line/column otherwise\n        // (iOS Safari 10 even throws an exception)\n        var error = Object.create(SyntaxError.prototype);\n        var errorStack = new Error();\n\n        error.name = name;\n        error.message = message;\n\n        Object.defineProperty(error, 'stack', {\n            get: function() {\n                return (errorStack.stack || '').replace(/^(.+\\n){1,3}/, name + ': ' + message + '\\n');\n            }\n        });\n\n        return error;\n    };\n\n    var MAX_LINE_LENGTH = 100;\n    var OFFSET_CORRECTION = 60;\n    var TAB_REPLACEMENT = '    ';\n\n    function sourceFragment(error, extraLines) {\n        function processLines(start, end) {\n            return lines.slice(start, end).map(function(line, idx) {\n                var num = String(start + idx + 1);\n\n                while (num.length < maxNumLength) {\n                    num = ' ' + num;\n                }\n\n                return num + ' |' + line;\n            }).join('\\n');\n        }\n\n        var lines = error.source.split(/\\r\\n?|\\n|\\f/);\n        var line = error.line;\n        var column = error.column;\n        var startLine = Math.max(1, line - extraLines) - 1;\n        var endLine = Math.min(line + extraLines, lines.length + 1);\n        var maxNumLength = Math.max(4, String(endLine).length) + 1;\n        var cutLeft = 0;\n\n        // column correction according to replaced tab before column\n        column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\\t/g) || []).length;\n\n        if (column > MAX_LINE_LENGTH) {\n            cutLeft = column - OFFSET_CORRECTION + 3;\n            column = OFFSET_CORRECTION - 2;\n        }\n\n        for (var i = startLine; i <= endLine; i++) {\n            if (i >= 0 && i < lines.length) {\n                lines[i] = lines[i].replace(/\\t/g, TAB_REPLACEMENT);\n                lines[i] =\n                    (cutLeft > 0 && lines[i].length > cutLeft ? '\\u2026' : '') +\n                    lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) +\n                    (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\\u2026' : '');\n            }\n        }\n\n        return [\n            processLines(startLine, line),\n            new Array(column + maxNumLength + 2).join('-') + '^',\n            processLines(line, endLine)\n        ].filter(Boolean).join('\\n');\n    }\n\n    var SyntaxError$1 = function(message, source, offset, line, column) {\n        var error = createCustomError('SyntaxError', message);\n\n        error.source = source;\n        error.offset = offset;\n        error.line = line;\n        error.column = column;\n\n        error.sourceFragment = function(extraLines) {\n            return sourceFragment(error, isNaN(extraLines) ? 0 : extraLines);\n        };\n        Object.defineProperty(error, 'formattedMessage', {\n            get: function() {\n                return (\n                    'Parse error: ' + error.message + '\\n' +\n                    sourceFragment(error, 2)\n                );\n            }\n        });\n\n        // for backward capability\n        error.parseError = {\n            offset: offset,\n            line: line,\n            column: column\n        };\n\n        return error;\n    };\n\n    var _SyntaxError = SyntaxError$1;\n\n    // CSS Syntax Module Level 3\n    // https://www.w3.org/TR/css-syntax-3/\n    var TYPE = {\n        EOF: 0,                 // <EOF-token>\n        Ident: 1,               // <ident-token>\n        Function: 2,            // <function-token>\n        AtKeyword: 3,           // <at-keyword-token>\n        Hash: 4,                // <hash-token>\n        String: 5,              // <string-token>\n        BadString: 6,           // <bad-string-token>\n        Url: 7,                 // <url-token>\n        BadUrl: 8,              // <bad-url-token>\n        Delim: 9,               // <delim-token>\n        Number: 10,             // <number-token>\n        Percentage: 11,         // <percentage-token>\n        Dimension: 12,          // <dimension-token>\n        WhiteSpace: 13,         // <whitespace-token>\n        CDO: 14,                // <CDO-token>\n        CDC: 15,                // <CDC-token>\n        Colon: 16,              // <colon-token>     :\n        Semicolon: 17,          // <semicolon-token> ;\n        Comma: 18,              // <comma-token>     ,\n        LeftSquareBracket: 19,  // <[-token>\n        RightSquareBracket: 20, // <]-token>\n        LeftParenthesis: 21,    // <(-token>\n        RightParenthesis: 22,   // <)-token>\n        LeftCurlyBracket: 23,   // <{-token>\n        RightCurlyBracket: 24,  // <}-token>\n        Comment: 25\n    };\n\n    var NAME = Object.keys(TYPE).reduce(function(result, key) {\n        result[TYPE[key]] = key;\n        return result;\n    }, {});\n\n    var _const = {\n        TYPE: TYPE,\n        NAME: NAME\n    };\n\n    var EOF = 0;\n\n    // https://drafts.csswg.org/css-syntax-3/\n    // \u00a7 4.2. Definitions\n\n    // digit\n    // A code point between U+0030 DIGIT ZERO (0) and U+0039 DIGIT NINE (9).\n    function isDigit(code) {\n        return code >= 0x0030 && code <= 0x0039;\n    }\n\n    // hex digit\n    // A digit, or a code point between U+0041 LATIN CAPITAL LETTER A (A) and U+0046 LATIN CAPITAL LETTER F (F),\n    // or a code point between U+0061 LATIN SMALL LETTER A (a) and U+0066 LATIN SMALL LETTER F (f).\n    function isHexDigit(code) {\n        return (\n            isDigit(code) || // 0 .. 9\n            (code >= 0x0041 && code <= 0x0046) || // A .. F\n            (code >= 0x0061 && code <= 0x0066)    // a .. f\n        );\n    }\n\n    // uppercase letter\n    // A code point between U+0041 LATIN CAPITAL LETTER A (A) and U+005A LATIN CAPITAL LETTER Z (Z).\n    function isUppercaseLetter(code) {\n        return code >= 0x0041 && code <= 0x005A;\n    }\n\n    // lowercase letter\n    // A code point between U+0061 LATIN SMALL LETTER A (a) and U+007A LATIN SMALL LETTER Z (z).\n    function isLowercaseLetter(code) {\n        return code >= 0x0061 && code <= 0x007A;\n    }\n\n    // letter\n    // An uppercase letter or a lowercase letter.\n    function isLetter(code) {\n        return isUppercaseLetter(code) || isLowercaseLetter(code);\n    }\n\n    // non-ASCII code point\n    // A code point with a value equal to or greater than U+0080 <control>.\n    function isNonAscii(code) {\n        return code >= 0x0080;\n    }\n\n    // name-start code point\n    // A letter, a non-ASCII code point, or U+005F LOW LINE (_).\n    function isNameStart(code) {\n        return isLetter(code) || isNonAscii(code) || code === 0x005F;\n    }\n\n    // name code point\n    // A name-start code point, a digit, or U+002D HYPHEN-MINUS (-).\n    function isName(code) {\n        return isNameStart(code) || isDigit(code) || code === 0x002D;\n    }\n\n    // non-printable code point\n    // A code point between U+0000 NULL and U+0008 BACKSPACE, or U+000B LINE TABULATION,\n    // or a code point between U+000E SHIFT OUT and U+001F INFORMATION SEPARATOR ONE, or U+007F DELETE.\n    function isNonPrintable(code) {\n        return (\n            (code >= 0x0000 && code <= 0x0008) ||\n            (code === 0x000B) ||\n            (code >= 0x000E && code <= 0x001F) ||\n            (code === 0x007F)\n        );\n    }\n\n    // newline\n    // U+000A LINE FEED. Note that U+000D CARRIAGE RETURN and U+000C FORM FEED are not included in this definition,\n    // as they are converted to U+000A LINE FEED during preprocessing.\n    // TODO: we doesn't do a preprocessing, so check a code point for U+000D CARRIAGE RETURN and U+000C FORM FEED\n    function isNewline(code) {\n        return code === 0x000A || code === 0x000D || code === 0x000C;\n    }\n\n    // whitespace\n    // A newline, U+0009 CHARACTER TABULATION, or U+0020 SPACE.\n    function isWhiteSpace(code) {\n        return isNewline(code) || code === 0x0020 || code === 0x0009;\n    }\n\n    // \u00a7 4.3.8. Check if two code points are a valid escape\n    function isValidEscape(first, second) {\n        // If the first code point is not U+005C REVERSE SOLIDUS (\\), return false.\n        if (first !== 0x005C) {\n            return false;\n        }\n\n        // Otherwise, if the second code point is a newline or EOF, return false.\n        if (isNewline(second) || second === EOF) {\n            return false;\n        }\n\n        // Otherwise, return true.\n        return true;\n    }\n\n    // \u00a7 4.3.9. Check if three code points would start an identifier\n    function isIdentifierStart(first, second, third) {\n        // Look at the first code point:\n\n        // U+002D HYPHEN-MINUS\n        if (first === 0x002D) {\n            // If the second code point is a name-start code point or a U+002D HYPHEN-MINUS,\n            // or the second and third code points are a valid escape, return true. Otherwise, return false.\n            return (\n                isNameStart(second) ||\n                second === 0x002D ||\n                isValidEscape(second, third)\n            );\n        }\n\n        // name-start code point\n        if (isNameStart(first)) {\n            // Return true.\n            return true;\n        }\n\n        // U+005C REVERSE SOLIDUS (\\)\n        if (first === 0x005C) {\n            // If the first and second code points are a valid escape, return true. Otherwise, return false.\n            return isValidEscape(first, second);\n        }\n\n        // anything else\n        // Return false.\n        return false;\n    }\n\n    // \u00a7 4.3.10. Check if three code points would start a number\n    function isNumberStart(first, second, third) {\n        // Look at the first code point:\n\n        // U+002B PLUS SIGN (+)\n        // U+002D HYPHEN-MINUS (-)\n        if (first === 0x002B || first === 0x002D) {\n            // If the second code point is a digit, return true.\n            if (isDigit(second)) {\n                return 2;\n            }\n\n            // Otherwise, if the second code point is a U+002E FULL STOP (.)\n            // and the third code point is a digit, return true.\n            // Otherwise, return false.\n            return second === 0x002E && isDigit(third) ? 3 : 0;\n        }\n\n        // U+002E FULL STOP (.)\n        if (first === 0x002E) {\n            // If the second code point is a digit, return true. Otherwise, return false.\n            return isDigit(second) ? 2 : 0;\n        }\n\n        // digit\n        if (isDigit(first)) {\n            // Return true.\n            return 1;\n        }\n\n        // anything else\n        // Return false.\n        return 0;\n    }\n\n    //\n    // Misc\n    //\n\n    // detect BOM (https://en.wikipedia.org/wiki/Byte_order_mark)\n    function isBOM(code) {\n        // UTF-16BE\n        if (code === 0xFEFF) {\n            return 1;\n        }\n\n        // UTF-16LE\n        if (code === 0xFFFE) {\n            return 1;\n        }\n\n        return 0;\n    }\n\n    // Fast code category\n    //\n    // https://drafts.csswg.org/css-syntax/#tokenizer-definitions\n    // > non-ASCII code point\n    // >   A code point with a value equal to or greater than U+0080 <control>\n    // > name-start code point\n    // >   A letter, a non-ASCII code point, or U+005F LOW LINE (_).\n    // > name code point\n    // >   A name-start code point, a digit, or U+002D HYPHEN-MINUS (-)\n    // That means only ASCII code points has a special meaning and we define a maps for 0..127 codes only\n    var CATEGORY = new Array(0x80);\n    charCodeCategory.Eof = 0x80;\n    charCodeCategory.WhiteSpace = 0x82;\n    charCodeCategory.Digit = 0x83;\n    charCodeCategory.NameStart = 0x84;\n    charCodeCategory.NonPrintable = 0x85;\n\n    for (var i = 0; i < CATEGORY.length; i++) {\n        switch (true) {\n            case isWhiteSpace(i):\n                CATEGORY[i] = charCodeCategory.WhiteSpace;\n                break;\n\n            case isDigit(i):\n                CATEGORY[i] = charCodeCategory.Digit;\n                break;\n\n            case isNameStart(i):\n                CATEGORY[i] = charCodeCategory.NameStart;\n                break;\n\n            case isNonPrintable(i):\n                CATEGORY[i] = charCodeCategory.NonPrintable;\n                break;\n\n            default:\n                CATEGORY[i] = i || charCodeCategory.Eof;\n        }\n    }\n\n    function charCodeCategory(code) {\n        return code < 0x80 ? CATEGORY[code] : charCodeCategory.NameStart;\n    }\n    var charCodeDefinitions = {\n        isDigit: isDigit,\n        isHexDigit: isHexDigit,\n        isUppercaseLetter: isUppercaseLetter,\n        isLowercaseLetter: isLowercaseLetter,\n        isLetter: isLetter,\n        isNonAscii: isNonAscii,\n        isNameStart: isNameStart,\n        isName: isName,\n        isNonPrintable: isNonPrintable,\n        isNewline: isNewline,\n        isWhiteSpace: isWhiteSpace,\n        isValidEscape: isValidEscape,\n        isIdentifierStart: isIdentifierStart,\n        isNumberStart: isNumberStart,\n\n        isBOM: isBOM,\n        charCodeCategory: charCodeCategory\n    };\n\n    var isDigit$1 = charCodeDefinitions.isDigit;\n    var isHexDigit$1 = charCodeDefinitions.isHexDigit;\n    var isUppercaseLetter$1 = charCodeDefinitions.isUppercaseLetter;\n    var isName$1 = charCodeDefinitions.isName;\n    var isWhiteSpace$1 = charCodeDefinitions.isWhiteSpace;\n    var isValidEscape$1 = charCodeDefinitions.isValidEscape;\n\n    function getCharCode(source, offset) {\n        return offset < source.length ? source.charCodeAt(offset) : 0;\n    }\n\n    function getNewlineLength(source, offset, code) {\n        if (code === 13 /* \\r */ && getCharCode(source, offset + 1) === 10 /* \\n */) {\n            return 2;\n        }\n\n        return 1;\n    }\n\n    function cmpChar(testStr, offset, referenceCode) {\n        var code = testStr.charCodeAt(offset);\n\n        // code.toLowerCase() for A..Z\n        if (isUppercaseLetter$1(code)) {\n            code = code | 32;\n        }\n\n        return code === referenceCode;\n    }\n\n    function cmpStr(testStr, start, end, referenceStr) {\n        if (end - start !== referenceStr.length) {\n            return false;\n        }\n\n        if (start < 0 || end > testStr.length) {\n            return false;\n        }\n\n        for (var i = start; i < end; i++) {\n            var testCode = testStr.charCodeAt(i);\n            var referenceCode = referenceStr.charCodeAt(i - start);\n\n            // testCode.toLowerCase() for A..Z\n            if (isUppercaseLetter$1(testCode)) {\n                testCode = testCode | 32;\n            }\n\n            if (testCode !== referenceCode) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    function findWhiteSpaceStart(source, offset) {\n        for (; offset >= 0; offset--) {\n            if (!isWhiteSpace$1(source.charCodeAt(offset))) {\n                break;\n            }\n        }\n\n        return offset + 1;\n    }\n\n    function findWhiteSpaceEnd(source, offset) {\n        for (; offset < source.length; offset++) {\n            if (!isWhiteSpace$1(source.charCodeAt(offset))) {\n                break;\n            }\n        }\n\n        return offset;\n    }\n\n    function findDecimalNumberEnd(source, offset) {\n        for (; offset < source.length; offset++) {\n            if (!isDigit$1(source.charCodeAt(offset))) {\n                break;\n            }\n        }\n\n        return offset;\n    }\n\n    // \u00a7 4.3.7. Consume an escaped code point\n    function consumeEscaped(source, offset) {\n        // It assumes that the U+005C REVERSE SOLIDUS (\\) has already been consumed and\n        // that the next input code point has already been verified to be part of a valid escape.\n        offset += 2;\n\n        // hex digit\n        if (isHexDigit$1(getCharCode(source, offset - 1))) {\n            // Consume as many hex digits as possible, but no more than 5.\n            // Note that this means 1-6 hex digits have been consumed in total.\n            for (var maxOffset = Math.min(source.length, offset + 5); offset < maxOffset; offset++) {\n                if (!isHexDigit$1(getCharCode(source, offset))) {\n                    break;\n                }\n            }\n\n            // If the next input code point is whitespace, consume it as well.\n            var code = getCharCode(source, offset);\n            if (isWhiteSpace$1(code)) {\n                offset += getNewlineLength(source, offset, code);\n            }\n        }\n\n        return offset;\n    }\n\n    // \u00a74.3.11. Consume a name\n    // Note: This algorithm does not do the verification of the first few code points that are necessary\n    // to ensure the returned code points would constitute an <ident-token>. If that is the intended use,\n    // ensure that the stream starts with an identifier before calling this algorithm.\n    function consumeName(source, offset) {\n        // Let result initially be an empty string.\n        // Repeatedly consume the next input code point from the stream:\n        for (; offset < source.length; offset++) {\n            var code = source.charCodeAt(offset);\n\n            // name code point\n            if (isName$1(code)) {\n                // Append the code point to result.\n                continue;\n            }\n\n            // the stream starts with a valid escape\n            if (isValidEscape$1(code, getCharCode(source, offset + 1))) {\n                // Consume an escaped code point. Append the returned code point to result.\n                offset = consumeEscaped(source, offset) - 1;\n                continue;\n            }\n\n            // anything else\n            // Reconsume the current input code point. Return result.\n            break;\n        }\n\n        return offset;\n    }\n\n    // \u00a74.3.12. Consume a number\n    function consumeNumber(source, offset) {\n        var code = source.charCodeAt(offset);\n\n        // 2. If the next input code point is U+002B PLUS SIGN (+) or U+002D HYPHEN-MINUS (-),\n        // consume it and append it to repr.\n        if (code === 0x002B || code === 0x002D) {\n            code = source.charCodeAt(offset += 1);\n        }\n\n        // 3. While the next input code point is a digit, consume it and append it to repr.\n        if (isDigit$1(code)) {\n            offset = findDecimalNumberEnd(source, offset + 1);\n            code = source.charCodeAt(offset);\n        }\n\n        // 4. If the next 2 input code points are U+002E FULL STOP (.) followed by a digit, then:\n        if (code === 0x002E && isDigit$1(source.charCodeAt(offset + 1))) {\n            // 4.1 Consume them.\n            // 4.2 Append them to repr.\n            code = source.charCodeAt(offset += 2);\n\n            // 4.3 Set type to \"number\".\n            // TODO\n\n            // 4.4 While the next input code point is a digit, consume it and append it to repr.\n\n            offset = findDecimalNumberEnd(source, offset);\n        }\n\n        // 5. If the next 2 or 3 input code points are U+0045 LATIN CAPITAL LETTER E (E)\n        // or U+0065 LATIN SMALL LETTER E (e), ... , followed by a digit, then:\n        if (cmpChar(source, offset, 101 /* e */)) {\n            var sign = 0;\n            code = source.charCodeAt(offset + 1);\n\n            // ... optionally followed by U+002D HYPHEN-MINUS (-) or U+002B PLUS SIGN (+) ...\n            if (code === 0x002D || code === 0x002B) {\n                sign = 1;\n                code = source.charCodeAt(offset + 2);\n            }\n\n            // ... followed by a digit\n            if (isDigit$1(code)) {\n                // 5.1 Consume them.\n                // 5.2 Append them to repr.\n\n                // 5.3 Set type to \"number\".\n                // TODO\n\n                // 5.4 While the next input code point is a digit, consume it and append it to repr.\n                offset = findDecimalNumberEnd(source, offset + 1 + sign + 1);\n            }\n        }\n\n        return offset;\n    }\n\n    // \u00a7 4.3.14. Consume the remnants of a bad url\n    // ... its sole use is to consume enough of the input stream to reach a recovery point\n    // where normal tokenizing can resume.\n    function consumeBadUrlRemnants(source, offset) {\n        // Repeatedly consume the next input code point from the stream:\n        for (; offset < source.length; offset++) {\n            var code = source.charCodeAt(offset);\n\n            // U+0029 RIGHT PARENTHESIS ())\n            // EOF\n            if (code === 0x0029) {\n                // Return.\n                offset++;\n                break;\n            }\n\n            if (isValidEscape$1(code, getCharCode(source, offset + 1))) {\n                // Consume an escaped code point.\n                // Note: This allows an escaped right parenthesis (\"\\)\") to be encountered\n                // without ending the <bad-url-token>. This is otherwise identical to\n                // the \"anything else\" clause.\n                offset = consumeEscaped(source, offset);\n            }\n        }\n\n        return offset;\n    }\n\n    var utils = {\n        consumeEscaped: consumeEscaped,\n        consumeName: consumeName,\n        consumeNumber: consumeNumber,\n        consumeBadUrlRemnants: consumeBadUrlRemnants,\n\n        cmpChar: cmpChar,\n        cmpStr: cmpStr,\n\n        getNewlineLength: getNewlineLength,\n        findWhiteSpaceStart: findWhiteSpaceStart,\n        findWhiteSpaceEnd: findWhiteSpaceEnd\n    };\n\n    var TYPE$1 = _const.TYPE;\n    var NAME$1 = _const.NAME;\n\n\n    var cmpStr$1 = utils.cmpStr;\n\n    var EOF$1 = TYPE$1.EOF;\n    var WHITESPACE = TYPE$1.WhiteSpace;\n    var COMMENT = TYPE$1.Comment;\n\n    var OFFSET_MASK = 0x00FFFFFF;\n    var TYPE_SHIFT = 24;\n\n    var TokenStream = function() {\n        this.offsetAndType = null;\n        this.balance = null;\n\n        this.reset();\n    };\n\n    TokenStream.prototype = {\n        reset: function() {\n            this.eof = false;\n            this.tokenIndex = -1;\n            this.tokenType = 0;\n            this.tokenStart = this.firstCharOffset;\n            this.tokenEnd = this.firstCharOffset;\n        },\n\n        lookupType: function(offset) {\n            offset += this.tokenIndex;\n\n            if (offset < this.tokenCount) {\n                return this.offsetAndType[offset] >> TYPE_SHIFT;\n            }\n\n            return EOF$1;\n        },\n        lookupOffset: function(offset) {\n            offset += this.tokenIndex;\n\n            if (offset < this.tokenCount) {\n                return this.offsetAndType[offset - 1] & OFFSET_MASK;\n            }\n\n            return this.source.length;\n        },\n        lookupValue: function(offset, referenceStr) {\n            offset += this.tokenIndex;\n\n            if (offset < this.tokenCount) {\n                return cmpStr$1(\n                    this.source,\n                    this.offsetAndType[offset - 1] & OFFSET_MASK,\n                    this.offsetAndType[offset] & OFFSET_MASK,\n                    referenceStr\n                );\n            }\n\n            return false;\n        },\n        getTokenStart: function(tokenIndex) {\n            if (tokenIndex === this.tokenIndex) {\n                return this.tokenStart;\n            }\n\n            if (tokenIndex > 0) {\n                return tokenIndex < this.tokenCount\n                    ? this.offsetAndType[tokenIndex - 1] & OFFSET_MASK\n                    : this.offsetAndType[this.tokenCount] & OFFSET_MASK;\n            }\n\n            return this.firstCharOffset;\n        },\n\n        // TODO: -> skipUntilBalanced\n        getRawLength: function(startToken, mode) {\n            var cursor = startToken;\n            var balanceEnd;\n            var offset = this.offsetAndType[Math.max(cursor - 1, 0)] & OFFSET_MASK;\n            var type;\n\n            loop:\n                for (; cursor < this.tokenCount; cursor++) {\n                    balanceEnd = this.balance[cursor];\n\n                    // stop scanning on balance edge that points to offset before start token\n                    if (balanceEnd < startToken) {\n                        break loop;\n                    }\n\n                    type = this.offsetAndType[cursor] >> TYPE_SHIFT;\n\n                    // check token is stop type\n                    switch (mode(type, this.source, offset)) {\n                        case 1:\n                            break loop;\n\n                        case 2:\n                            cursor++;\n                            break loop;\n\n                        default:\n                            offset = this.offsetAndType[cursor] & OFFSET_MASK;\n\n                            // fast forward to the end of balanced block\n                            if (this.balance[balanceEnd] === cursor) {\n                                cursor = balanceEnd;\n                            }\n                    }\n                }\n\n            return cursor - this.tokenIndex;\n        },\n        isBalanceEdge: function(pos) {\n            return this.balance[this.tokenIndex] < pos;\n        },\n        isDelim: function(code, offset) {\n            if (offset) {\n                return (\n                    this.lookupType(offset) === TYPE$1.Delim &&\n                    this.source.charCodeAt(this.lookupOffset(offset)) === code\n                );\n            }\n\n            return (\n                this.tokenType === TYPE$1.Delim &&\n                this.source.charCodeAt(this.tokenStart) === code\n            );\n        },\n\n        getTokenValue: function() {\n            return this.source.substring(this.tokenStart, this.tokenEnd);\n        },\n        getTokenLength: function() {\n            return this.tokenEnd - this.tokenStart;\n        },\n        substrToCursor: function(start) {\n            return this.source.substring(start, this.tokenStart);\n        },\n\n        skipWS: function() {\n            for (var i = this.tokenIndex, skipTokenCount = 0; i < this.tokenCount; i++, skipTokenCount++) {\n                if ((this.offsetAndType[i] >> TYPE_SHIFT) !== WHITESPACE) {\n                    break;\n                }\n            }\n\n            if (skipTokenCount > 0) {\n                this.skip(skipTokenCount);\n            }\n        },\n        skipSC: function() {\n            while (this.tokenType === WHITESPACE || this.tokenType === COMMENT) {\n                this.next();\n            }\n        },\n        skip: function(tokenCount) {\n            var next = this.tokenIndex + tokenCount;\n\n            if (next < this.tokenCount) {\n                this.tokenIndex = next;\n                this.tokenStart = this.offsetAndType[next - 1] & OFFSET_MASK;\n                next = this.offsetAndType[next];\n                this.tokenType = next >> TYPE_SHIFT;\n                this.tokenEnd = next & OFFSET_MASK;\n            } else {\n                this.tokenIndex = this.tokenCount;\n                this.next();\n            }\n        },\n        next: function() {\n            var next = this.tokenIndex + 1;\n\n            if (next < this.tokenCount) {\n                this.tokenIndex = next;\n                this.tokenStart = this.tokenEnd;\n                next = this.offsetAndType[next];\n                this.tokenType = next >> TYPE_SHIFT;\n                this.tokenEnd = next & OFFSET_MASK;\n            } else {\n                this.tokenIndex = this.tokenCount;\n                this.eof = true;\n                this.tokenType = EOF$1;\n                this.tokenStart = this.tokenEnd = this.source.length;\n            }\n        },\n\n        dump: function() {\n            var offset = this.firstCharOffset;\n\n            return Array.prototype.slice.call(this.offsetAndType, 0, this.tokenCount).map(function(item, idx) {\n                var start = offset;\n                var end = item & OFFSET_MASK;\n\n                offset = end;\n\n                return {\n                    idx: idx,\n                    type: NAME$1[item >> TYPE_SHIFT],\n                    chunk: this.source.substring(start, end),\n                    balance: this.balance[idx]\n                };\n            }, this);\n        }\n    };\n\n    var TokenStream_1 = TokenStream;\n\n    function noop(value) {\n        return value;\n    }\n\n    function generateMultiplier(multiplier) {\n        if (multiplier.min === 0 && multiplier.max === 0) {\n            return '*';\n        }\n\n        if (multiplier.min === 0 && multiplier.max === 1) {\n            return '?';\n        }\n\n        if (multiplier.min === 1 && multiplier.max === 0) {\n            return multiplier.comma ? '#' : '+';\n        }\n\n        if (multiplier.min === 1 && multiplier.max === 1) {\n            return '';\n        }\n\n        return (\n            (multiplier.comma ? '#' : '') +\n            (multiplier.min === multiplier.max\n                    ? '{' + multiplier.min + '}'\n                    : '{' + multiplier.min + ',' + (multiplier.max !== 0 ? multiplier.max : '') + '}'\n            )\n        );\n    }\n\n    function generateTypeOpts(node) {\n        switch (node.type) {\n            case 'Range':\n                return (\n                    ' [' +\n                    (node.min === null ? '-\u221e' : node.min) +\n                    ',' +\n                    (node.max === null ? '\u221e' : node.max) +\n                    ']'\n                );\n\n            default:\n                throw new Error('Unknown node type `' + node.type + '`');\n        }\n    }\n\n    function generateSequence(node, decorate, forceBraces, compact) {\n        var combinator = node.combinator === ' ' || compact ? node.combinator : ' ' + node.combinator + ' ';\n        var result = node.terms.map(function(term) {\n            return generate(term, decorate, forceBraces, compact);\n        }).join(combinator);\n\n        if (node.explicit || forceBraces) {\n            result = (compact || result[0] === ',' ? '[' : '[ ') + result + (compact ? ']' : ' ]');\n        }\n\n        return result;\n    }\n\n    function generate(node, decorate, forceBraces, compact) {\n        var result;\n\n        switch (node.type) {\n            case 'Group':\n                result =\n                    generateSequence(node, decorate, forceBraces, compact) +\n                    (node.disallowEmpty ? '!' : '');\n                break;\n\n            case 'Multiplier':\n                // return since node is a composition\n                return (\n                    generate(node.term, decorate, forceBraces, compact) +\n                    decorate(generateMultiplier(node), node)\n                );\n\n            case 'Type':\n                result = '<' + node.name + (node.opts ? decorate(generateTypeOpts(node.opts), node.opts) : '') + '>';\n                break;\n\n            case 'Property':\n                result = '<\\'' + node.name + '\\'>';\n                break;\n\n            case 'Keyword':\n                result = node.name;\n                break;\n\n            case 'AtKeyword':\n                result = '@' + node.name;\n                break;\n\n            case 'Function':\n                result = node.name + '(';\n                break;\n\n            case 'String':\n            case 'Token':\n                result = node.value;\n                break;\n\n            case 'Comma':\n                result = ',';\n                break;\n\n            default:\n                throw new Error('Unknown node type `' + node.type + '`');\n        }\n\n        return decorate(result, node);\n    }\n\n    var generate_1 = function(node, options) {\n        var decorate = noop;\n        var forceBraces = false;\n        var compact = false;\n\n        if (typeof options === 'function') {\n            decorate = options;\n        } else if (options) {\n            forceBraces = Boolean(options.forceBraces);\n            compact = Boolean(options.compact);\n            if (typeof options.decorate === 'function') {\n                decorate = options.decorate;\n            }\n        }\n\n        return generate(node, decorate, forceBraces, compact);\n    };\n\n    function fromMatchResult(matchResult) {\n        var tokens = matchResult.tokens;\n        var longestMatch = matchResult.longestMatch;\n        var node = longestMatch < tokens.length ? tokens[longestMatch].node : null;\n        var mismatchOffset = -1;\n        var entries = 0;\n        var css = '';\n\n        for (var i = 0; i < tokens.length; i++) {\n            if (i === longestMatch) {\n                mismatchOffset = css.length;\n            }\n\n            if (node !== null && tokens[i].node === node) {\n                if (i <= longestMatch) {\n                    entries++;\n                } else {\n                    entries = 0;\n                }\n            }\n\n            css += tokens[i].value;\n        }\n\n        return {\n            node: node,\n            css: css,\n            mismatchOffset: mismatchOffset === -1 ? css.length : mismatchOffset,\n            last: node === null || entries > 1\n        };\n    }\n\n    function getLocation(node, point) {\n        var loc = node && node.loc && node.loc[point];\n\n        if (loc) {\n            return {\n                offset: loc.offset,\n                line: loc.line,\n                column: loc.column\n            };\n        }\n\n        return null;\n    }\n\n    var SyntaxReferenceError = function(type, referenceName) {\n        var error = createCustomError(\n            'SyntaxReferenceError',\n            type + (referenceName ? ' `' + referenceName + '`' : '')\n        );\n\n        error.reference = referenceName;\n\n        return error;\n    };\n\n    var MatchError = function(message, syntax, node, matchResult) {\n        var error = createCustomError('SyntaxMatchError', message);\n        var details = fromMatchResult(matchResult);\n        var mismatchOffset = details.mismatchOffset || 0;\n        var badNode = details.node || node;\n        var end = getLocation(badNode, 'end');\n        var start = details.last ? end : getLocation(badNode, 'start');\n        var css = details.css;\n\n        error.rawMessage = message;\n        error.syntax = syntax ? generate_1(syntax) : '<generic>';\n        error.css = css;\n        error.mismatchOffset = mismatchOffset;\n        error.loc = {\n            source: (badNode && badNode.loc && badNode.loc.source) || '<unknown>',\n            start: start,\n            end: end\n        };\n        error.line = start ? start.line : undefined;\n        error.column = start ? start.column : undefined;\n        error.offset = start ? start.offset : undefined;\n        error.message = message + '\\n' +\n            '  syntax: ' + error.syntax + '\\n' +\n            '   value: ' + (error.css || '<empty string>') + '\\n' +\n            '  --------' + new Array(error.mismatchOffset + 1).join('-') + '^';\n\n        return error;\n    };\n\n    var error = {\n        SyntaxReferenceError: SyntaxReferenceError,\n        MatchError: MatchError\n    };\n\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\n    var keywords = Object.create(null);\n    var properties = Object.create(null);\n    var HYPHENMINUS = 45; // '-'.charCodeAt()\n\n    function isCustomProperty(str, offset) {\n        offset = offset || 0;\n\n        return str.length - offset >= 2 &&\n            str.charCodeAt(offset) === HYPHENMINUS &&\n            str.charCodeAt(offset + 1) === HYPHENMINUS;\n    }\n\n    function getVendorPrefix(str, offset) {\n        offset = offset || 0;\n\n        // verdor prefix should be at least 3 chars length\n        if (str.length - offset >= 3) {\n            // vendor prefix starts with hyper minus following non-hyper minus\n            if (str.charCodeAt(offset) === HYPHENMINUS &&\n                str.charCodeAt(offset + 1) !== HYPHENMINUS) {\n                // vendor prefix should contain a hyper minus at the ending\n                var secondDashIndex = str.indexOf('-', offset + 2);\n\n                if (secondDashIndex !== -1) {\n                    return str.substring(offset, secondDashIndex + 1);\n                }\n            }\n        }\n\n        return '';\n    }\n\n    function getKeywordDescriptor(keyword) {\n        if (hasOwnProperty.call(keywords, keyword)) {\n            return keywords[keyword];\n        }\n\n        var name = keyword.toLowerCase();\n\n        if (hasOwnProperty.call(keywords, name)) {\n            return keywords[keyword] = keywords[name];\n        }\n\n        var custom = isCustomProperty(name, 0);\n        var vendor = !custom ? getVendorPrefix(name, 0) : '';\n\n        return keywords[keyword] = Object.freeze({\n            basename: name.substr(vendor.length),\n            name: name,\n            vendor: vendor,\n            prefix: vendor,\n            custom: custom\n        });\n    }\n\n    function getPropertyDescriptor(property) {\n        if (hasOwnProperty.call(properties, property)) {\n            return properties[property];\n        }\n\n        var name = property;\n        var hack = property[0];\n\n        if (hack === '/') {\n            hack = property[1] === '/' ? '//' : '/';\n        } else if (hack !== '_' &&\n            hack !== '*' &&\n            hack !== '$' &&\n            hack !== '#' &&\n            hack !== '+' &&\n            hack !== '&') {\n            hack = '';\n        }\n\n        var custom = isCustomProperty(name, hack.length);\n\n        // re-use result when possible (the same as for lower case)\n        if (!custom) {\n            name = name.toLowerCase();\n            if (hasOwnProperty.call(properties, name)) {\n                return properties[property] = properties[name];\n            }\n        }\n\n        var vendor = !custom ? getVendorPrefix(name, hack.length) : '';\n        var prefix = name.substr(0, hack.length + vendor.length);\n\n        return properties[property] = Object.freeze({\n            basename: name.substr(prefix.length),\n            name: name.substr(hack.length),\n            hack: hack,\n            vendor: vendor,\n            prefix: prefix,\n            custom: custom\n        });\n    }\n\n    var names = {\n        keyword: getKeywordDescriptor,\n        property: getPropertyDescriptor,\n        isCustomProperty: isCustomProperty,\n        vendorPrefix: getVendorPrefix\n    };\n\n    var MIN_SIZE = 16 * 1024;\n    var SafeUint32Array = typeof Uint32Array !== 'undefined' ? Uint32Array : Array; // fallback on Array when TypedArray is not supported\n\n    var adoptBuffer = function adoptBuffer(buffer, size) {\n        if (buffer === null || buffer.length < size) {\n            return new SafeUint32Array(Math.max(size + 1024, MIN_SIZE));\n        }\n\n        return buffer;\n    };\n\n    var TYPE$2 = _const.TYPE;\n\n\n    var isNewline$1 = charCodeDefinitions.isNewline;\n    var isName$2 = charCodeDefinitions.isName;\n    var isValidEscape$2 = charCodeDefinitions.isValidEscape;\n    var isNumberStart$1 = charCodeDefinitions.isNumberStart;\n    var isIdentifierStart$1 = charCodeDefinitions.isIdentifierStart;\n    var charCodeCategory$1 = charCodeDefinitions.charCodeCategory;\n    var isBOM$1 = charCodeDefinitions.isBOM;\n\n\n    var cmpStr$2 = utils.cmpStr;\n    var getNewlineLength$1 = utils.getNewlineLength;\n    var findWhiteSpaceEnd$1 = utils.findWhiteSpaceEnd;\n    var consumeEscaped$1 = utils.consumeEscaped;\n    var consumeName$1 = utils.consumeName;\n    var consumeNumber$1 = utils.consumeNumber;\n    var consumeBadUrlRemnants$1 = utils.consumeBadUrlRemnants;\n\n    var OFFSET_MASK$1 = 0x00FFFFFF;\n    var TYPE_SHIFT$1 = 24;\n\n    function tokenize(source, stream) {\n        function getCharCode(offset) {\n            return offset < sourceLength ? source.charCodeAt(offset) : 0;\n        }\n\n        // \u00a7 4.3.3. Consume a numeric token\n        function consumeNumericToken() {\n            // Consume a number and let number be the result.\n            offset = consumeNumber$1(source, offset);\n\n            // If the next 3 input code points would start an identifier, then:\n            if (isIdentifierStart$1(getCharCode(offset), getCharCode(offset + 1), getCharCode(offset + 2))) {\n                // Create a <dimension-token> with the same value and type flag as number, and a unit set initially to the empty string.\n                // Consume a name. Set the <dimension-token>\u2019s unit to the returned value.\n                // Return the <dimension-token>.\n                type = TYPE$2.Dimension;\n                offset = consumeName$1(source, offset);\n                return;\n            }\n\n            // Otherwise, if the next input code point is U+0025 PERCENTAGE SIGN (%), consume it.\n            if (getCharCode(offset) === 0x0025) {\n                // Create a <percentage-token> with the same value as number, and return it.\n                type = TYPE$2.Percentage;\n                offset++;\n                return;\n            }\n\n            // Otherwise, create a <number-token> with the same value and type flag as number, and return it.\n            type = TYPE$2.Number;\n        }\n\n        // \u00a7 4.3.4. Consume an ident-like token\n        function consumeIdentLikeToken() {\n            const nameStartOffset = offset;\n\n            // Consume a name, and let string be the result.\n            offset = consumeName$1(source, offset);\n\n            // If string\u2019s value is an ASCII case-insensitive match for \"url\",\n            // and the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.\n            if (cmpStr$2(source, nameStartOffset, offset, 'url') && getCharCode(offset) === 0x0028) {\n                // While the next two input code points are whitespace, consume the next input code point.\n                offset = findWhiteSpaceEnd$1(source, offset + 1);\n\n                // If the next one or two input code points are U+0022 QUOTATION MARK (\"), U+0027 APOSTROPHE ('),\n                // or whitespace followed by U+0022 QUOTATION MARK (\") or U+0027 APOSTROPHE ('),\n                // then create a <function-token> with its value set to string and return it.\n                if (getCharCode(offset) === 0x0022 ||\n                    getCharCode(offset) === 0x0027) {\n                    type = TYPE$2.Function;\n                    offset = nameStartOffset + 4;\n                    return;\n                }\n\n                // Otherwise, consume a url token, and return it.\n                consumeUrlToken();\n                return;\n            }\n\n            // Otherwise, if the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.\n            // Create a <function-token> with its value set to string and return it.\n            if (getCharCode(offset) === 0x0028) {\n                type = TYPE$2.Function;\n                offset++;\n                return;\n            }\n\n            // Otherwise, create an <ident-token> with its value set to string and return it.\n            type = TYPE$2.Ident;\n        }\n\n        // \u00a7 4.3.5. Consume a string token\n        function consumeStringToken(endingCodePoint) {\n            // This algorithm may be called with an ending code point, which denotes the code point\n            // that ends the string. If an ending code point is not specified,\n            // the current input code point is used.\n            if (!endingCodePoint) {\n                endingCodePoint = getCharCode(offset++);\n            }\n\n            // Initially create a <string-token> with its value set to the empty string.\n            type = TYPE$2.String;\n\n            // Repeatedly consume the next input code point from the stream:\n            for (; offset < source.length; offset++) {\n                var code = source.charCodeAt(offset);\n\n                switch (charCodeCategory$1(code)) {\n                    // ending code point\n                    case endingCodePoint:\n                        // Return the <string-token>.\n                        offset++;\n                        return;\n\n                    // EOF\n                    case charCodeCategory$1.Eof:\n                        // This is a parse error. Return the <string-token>.\n                        return;\n\n                    // newline\n                    case charCodeCategory$1.WhiteSpace:\n                        if (isNewline$1(code)) {\n                            // This is a parse error. Reconsume the current input code point,\n                            // create a <bad-string-token>, and return it.\n                            offset += getNewlineLength$1(source, offset, code);\n                            type = TYPE$2.BadString;\n                            return;\n                        }\n                        break;\n\n                    // U+005C REVERSE SOLIDUS (\\)\n                    case 0x005C:\n                        // If the next input code point is EOF, do nothing.\n                        if (offset === source.length - 1) {\n                            break;\n                        }\n\n                        var nextCode = getCharCode(offset + 1);\n\n                        // Otherwise, if the next input code point is a newline, consume it.\n                        if (isNewline$1(nextCode)) {\n                            offset += getNewlineLength$1(source, offset + 1, nextCode);\n                        } else if (isValidEscape$2(code, nextCode)) {\n                            // Otherwise, (the stream starts with a valid escape) consume\n                            // an escaped code point and append the returned code point to\n                            // the <string-token>\u2019s value.\n                            offset = consumeEscaped$1(source, offset) - 1;\n                        }\n                        break;\n\n                    // anything else\n                    // Append the current input code point to the <string-token>\u2019s value.\n                }\n            }\n        }\n\n        // \u00a7 4.3.6. Consume a url token\n        // Note: This algorithm assumes that the initial \"url(\" has already been consumed.\n        // This algorithm also assumes that it\u2019s being called to consume an \"unquoted\" value, like url(foo).\n        // A quoted value, like url(\"foo\"), is parsed as a <function-token>. Consume an ident-like token\n        // automatically handles this distinction; this algorithm shouldn\u2019t be called directly otherwise.\n        function consumeUrlToken() {\n            // Initially create a <url-token> with its value set to the empty string.\n            type = TYPE$2.Url;\n\n            // Consume as much whitespace as possible.\n            offset = findWhiteSpaceEnd$1(source, offset);\n\n            // Repeatedly consume the next input code point from the stream:\n            for (; offset < source.length; offset++) {\n                var code = source.charCodeAt(offset);\n\n                switch (charCodeCategory$1(code)) {\n                    // U+0029 RIGHT PARENTHESIS ())\n                    case 0x0029:\n                        // Return the <url-token>.\n                        offset++;\n                        return;\n\n                    // EOF\n                    case charCodeCategory$1.Eof:\n                        // This is a parse error. Return the <url-token>.\n                        return;\n\n                    // whitespace\n                    case charCodeCategory$1.WhiteSpace:\n                        // Consume as much whitespace as possible.\n                        offset = findWhiteSpaceEnd$1(source, offset);\n\n                        // If the next input code point is U+0029 RIGHT PARENTHESIS ()) or EOF,\n                        // consume it and return the <url-token>\n                        // (if EOF was encountered, this is a parse error);\n                        if (getCharCode(offset) === 0x0029 || offset >= source.length) {\n                            if (offset < source.length) {\n                                offset++;\n                            }\n                            return;\n                        }\n\n                        // otherwise, consume the remnants of a bad url, create a <bad-url-token>,\n                        // and return it.\n                        offset = consumeBadUrlRemnants$1(source, offset);\n                        type = TYPE$2.BadUrl;\n                        return;\n\n                    // U+0022 QUOTATION MARK (\")\n                    // U+0027 APOSTROPHE (')\n                    // U+0028 LEFT PARENTHESIS (()\n                    // non-printable code point\n                    case 0x0022:\n                    case 0x0027:\n                    case 0x0028:\n                    case charCodeCategory$1.NonPrintable:\n                        // This is a parse error. Consume the remnants of a bad url,\n                        // create a <bad-url-token>, and return it.\n                        offset = consumeBadUrlRemnants$1(source, offset);\n                        type = TYPE$2.BadUrl;\n                        return;\n\n                    // U+005C REVERSE SOLIDUS (\\)\n                    case 0x005C:\n                        // If the stream starts with a valid escape, consume an escaped code point and\n                        // append the returned code point to the <url-token>\u2019s value.\n                        if (isValidEscape$2(code, getCharCode(offset + 1))) {\n                            offset = consumeEscaped$1(source, offset) - 1;\n                            break;\n                        }\n\n                        // Otherwise, this is a parse error. Consume the remnants of a bad url,\n                        // create a <bad-url-token>, and return it.\n                        offset = consumeBadUrlRemnants$1(source, offset);\n                        type = TYPE$2.BadUrl;\n                        return;\n\n                    // anything else\n                    // Append the current input code point to the <url-token>\u2019s value.\n                }\n            }\n        }\n\n        if (!stream) {\n            stream = new TokenStream_1();\n        }\n\n        // ensure source is a string\n        source = String(source || '');\n\n        var sourceLength = source.length;\n        var offsetAndType = adoptBuffer(stream.offsetAndType, sourceLength + 1); // +1 because of eof-token\n        var balance = adoptBuffer(stream.balance, sourceLength + 1);\n        var tokenCount = 0;\n        var start = isBOM$1(getCharCode(0));\n        var offset = start;\n        var balanceCloseType = 0;\n        var balanceStart = 0;\n        var balancePrev = 0;\n\n        // https://drafts.csswg.org/css-syntax-3/#consume-token\n        // \u00a7 4.3.1. Consume a token\n        while (offset < sourceLength) {\n            var code = source.charCodeAt(offset);\n            var type = 0;\n\n            balance[tokenCount] = sourceLength;\n\n            switch (charCodeCategory$1(code)) {\n                // whitespace\n                case charCodeCategory$1.WhiteSpace:\n                    // Consume as much whitespace as possible. Return a <whitespace-token>.\n                    type = TYPE$2.WhiteSpace;\n                    offset = findWhiteSpaceEnd$1(source, offset + 1);\n                    break;\n\n                // U+0022 QUOTATION MARK (\")\n                case 0x0022:\n                    // Consume a string token and return it.\n                    consumeStringToken();\n                    break;\n\n                // U+0023 NUMBER SIGN (#)\n                case 0x0023:\n                    // If the next input code point is a name code point or the next two input code points are a valid escape, then:\n                    if (isName$2(getCharCode(offset + 1)) || isValidEscape$2(getCharCode(offset + 1), getCharCode(offset + 2))) {\n                        // Create a <hash-token>.\n                        type = TYPE$2.Hash;\n\n                        // If the next 3 input code points would start an identifier, set the <hash-token>\u2019s type flag to \"id\".\n                        // if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {\n                        //     // TODO: set id flag\n                        // }\n\n                        // Consume a name, and set the <hash-token>\u2019s value to the returned string.\n                        offset = consumeName$1(source, offset + 1);\n\n                        // Return the <hash-token>.\n                    } else {\n                        // Otherwise, return a <delim-token> with its value set to the current input code point.\n                        type = TYPE$2.Delim;\n                        offset++;\n                    }\n\n                    break;\n\n                // U+0027 APOSTROPHE (')\n                case 0x0027:\n                    // Consume a string token and return it.\n                    consumeStringToken();\n                    break;\n\n                // U+0028 LEFT PARENTHESIS (()\n                case 0x0028:\n                    // Return a <(-token>.\n                    type = TYPE$2.LeftParenthesis;\n                    offset++;\n                    break;\n\n                // U+0029 RIGHT PARENTHESIS ())\n                case 0x0029:\n                    // Return a <)-token>.\n                    type = TYPE$2.RightParenthesis;\n                    offset++;\n                    break;\n\n                // U+002B PLUS SIGN (+)\n                case 0x002B:\n                    // If the input stream starts with a number, ...\n                    if (isNumberStart$1(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n                        // ... reconsume the current input code point, consume a numeric token, and return it.\n                        consumeNumericToken();\n                    } else {\n                        // Otherwise, return a <delim-token> with its value set to the current input code point.\n                        type = TYPE$2.Delim;\n                        offset++;\n                    }\n                    break;\n\n                // U+002C COMMA (,)\n                case 0x002C:\n                    // Return a <comma-token>.\n                    type = TYPE$2.Comma;\n                    offset++;\n                    break;\n\n                // U+002D HYPHEN-MINUS (-)\n                case 0x002D:\n                    // If the input stream starts with a number, reconsume the current input code point, consume a numeric token, and return it.\n                    if (isNumberStart$1(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n                        consumeNumericToken();\n                    } else {\n                        // Otherwise, if the next 2 input code points are U+002D HYPHEN-MINUS U+003E GREATER-THAN SIGN (->), consume them and return a <CDC-token>.\n                        if (getCharCode(offset + 1) === 0x002D &&\n                            getCharCode(offset + 2) === 0x003E) {\n                            type = TYPE$2.CDC;\n                            offset = offset + 3;\n                        } else {\n                            // Otherwise, if the input stream starts with an identifier, ...\n                            if (isIdentifierStart$1(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n                                // ... reconsume the current input code point, consume an ident-like token, and return it.\n                                consumeIdentLikeToken();\n                            } else {\n                                // Otherwise, return a <delim-token> with its value set to the current input code point.\n                                type = TYPE$2.Delim;\n                                offset++;\n                            }\n                        }\n                    }\n                    break;\n\n                // U+002E FULL STOP (.)\n                case 0x002E:\n                    // If the input stream starts with a number, ...\n                    if (isNumberStart$1(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n                        // ... reconsume the current input code point, consume a numeric token, and return it.\n                        consumeNumericToken();\n                    } else {\n                        // Otherwise, return a <delim-token> with its value set to the current input code point.\n                        type = TYPE$2.Delim;\n                        offset++;\n                    }\n\n                    break;\n\n                // U+002F SOLIDUS (/)\n                case 0x002F:\n                    // If the next two input code point are U+002F SOLIDUS (/) followed by a U+002A ASTERISK (*),\n                    if (getCharCode(offset + 1) === 0x002A) {\n                        // ... consume them and all following code points up to and including the first U+002A ASTERISK (*)\n                        // followed by a U+002F SOLIDUS (/), or up to an EOF code point.\n                        type = TYPE$2.Comment;\n                        offset = source.indexOf('*/', offset + 2) + 2;\n                        if (offset === 1) {\n                            offset = source.length;\n                        }\n                    } else {\n                        type = TYPE$2.Delim;\n                        offset++;\n                    }\n                    break;\n\n                // U+003A COLON (:)\n                case 0x003A:\n                    // Return a <colon-token>.\n                    type = TYPE$2.Colon;\n                    offset++;\n                    break;\n\n                // U+003B SEMICOLON (;)\n                case 0x003B:\n                    // Return a <semicolon-token>.\n                    type = TYPE$2.Semicolon;\n                    offset++;\n                    break;\n\n                // U+003C LESS-THAN SIGN (<)\n                case 0x003C:\n                    // If the next 3 input code points are U+0021 EXCLAMATION MARK U+002D HYPHEN-MINUS U+002D HYPHEN-MINUS (!--), ...\n                    if (getCharCode(offset + 1) === 0x0021 &&\n                        getCharCode(offset + 2) === 0x002D &&\n                        getCharCode(offset + 3) === 0x002D) {\n                        // ... consume them and return a <CDO-token>.\n                        type = TYPE$2.CDO;\n                        offset = offset + 4;\n                    } else {\n                        // Otherwise, return a <delim-token> with its value set to the current input code point.\n                        type = TYPE$2.Delim;\n                        offset++;\n                    }\n\n                    break;\n\n                // U+0040 COMMERCIAL AT (@)\n                case 0x0040:\n                    // If the next 3 input code points would start an identifier, ...\n                    if (isIdentifierStart$1(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {\n                        // ... consume a name, create an <at-keyword-token> with its value set to the returned value, and return it.\n                        type = TYPE$2.AtKeyword;\n                        offset = consumeName$1(source, offset + 1);\n                    } else {\n                        // Otherwise, return a <delim-token> with its value set to the current input code point.\n                        type = TYPE$2.Delim;\n                        offset++;\n                    }\n\n                    break;\n\n                // U+005B LEFT SQUARE BRACKET ([)\n                case 0x005B:\n                    // Return a <[-token>.\n                    type = TYPE$2.LeftSquareBracket;\n                    offset++;\n                    break;\n\n                // U+005C REVERSE SOLIDUS (\\)\n                case 0x005C:\n                    // If the input stream starts with a valid escape, ...\n                    if (isValidEscape$2(code, getCharCode(offset + 1))) {\n                        // ... reconsume the current input code point, consume an ident-like token, and return it.\n                        consumeIdentLikeToken();\n                    } else {\n                        // Otherwise, this is a parse error. Return a <delim-token> with its value set to the current input code point.\n                        type = TYPE$2.Delim;\n                        offset++;\n                    }\n                    break;\n\n                // U+005D RIGHT SQUARE BRACKET (])\n                case 0x005D:\n                    // Return a <]-token>.\n                    type = TYPE$2.RightSquareBracket;\n                    offset++;\n                    break;\n\n                // U+007B LEFT CURLY BRACKET ({)\n                case 0x007B:\n                    // Return a <{-token>.\n                    type = TYPE$2.LeftCurlyBracket;\n                    offset++;\n                    break;\n\n                // U+007D RIGHT CURLY BRACKET (})\n                case 0x007D:\n                    // Return a <}-token>.\n                    type = TYPE$2.RightCurlyBracket;\n                    offset++;\n                    break;\n\n                // digit\n                case charCodeCategory$1.Digit:\n                    // Reconsume the current input code point, consume a numeric token, and return it.\n                    consumeNumericToken();\n                    break;\n\n                // name-start code point\n                case charCodeCategory$1.NameStart:\n                    // Reconsume the current input code point, consume an ident-like token, and return it.\n                    consumeIdentLikeToken();\n                    break;\n\n                // EOF\n                case charCodeCategory$1.Eof:\n                    // Return an <EOF-token>.\n                    break;\n\n                // anything else\n                default:\n                    // Return a <delim-token> with its value set to the current input code point.\n                    type = TYPE$2.Delim;\n                    offset++;\n            }\n\n            switch (type) {\n                case balanceCloseType:\n                    balancePrev = balanceStart & OFFSET_MASK$1;\n                    balanceStart = balance[balancePrev];\n                    balanceCloseType = balanceStart >> TYPE_SHIFT$1;\n                    balance[tokenCount] = balancePrev;\n                    balance[balancePrev++] = tokenCount;\n                    for (; balancePrev < tokenCount; balancePrev++) {\n                        if (balance[balancePrev] === sourceLength) {\n                            balance[balancePrev] = tokenCount;\n                        }\n                    }\n                    break;\n\n                case TYPE$2.LeftParenthesis:\n                case TYPE$2.Function:\n                    balance[tokenCount] = balanceStart;\n                    balanceCloseType = TYPE$2.RightParenthesis;\n                    balanceStart = (balanceCloseType << TYPE_SHIFT$1) | tokenCount;\n                    break;\n\n                case TYPE$2.LeftSquareBracket:\n                    balance[tokenCount] = balanceStart;\n                    balanceCloseType = TYPE$2.RightSquareBracket;\n                    balanceStart = (balanceCloseType << TYPE_SHIFT$1) | tokenCount;\n                    break;\n\n                case TYPE$2.LeftCurlyBracket:\n                    balance[tokenCount] = balanceStart;\n                    balanceCloseType = TYPE$2.RightCurlyBracket;\n                    balanceStart = (balanceCloseType << TYPE_SHIFT$1) | tokenCount;\n                    break;\n            }\n\n            offsetAndType[tokenCount++] = (type << TYPE_SHIFT$1) | offset;\n        }\n\n        // finalize buffers\n        offsetAndType[tokenCount] = (TYPE$2.EOF << TYPE_SHIFT$1) | offset; // <EOF-token>\n        balance[tokenCount] = sourceLength;\n        balance[sourceLength] = sourceLength; // prevents false positive balance match with any token\n        while (balanceStart !== 0) {\n            balancePrev = balanceStart & OFFSET_MASK$1;\n            balanceStart = balance[balancePrev];\n            balance[balancePrev] = sourceLength;\n        }\n\n        // update stream\n        stream.source = source;\n        stream.firstCharOffset = start;\n        stream.offsetAndType = offsetAndType;\n        stream.tokenCount = tokenCount;\n        stream.balance = balance;\n        stream.reset();\n        stream.next();\n\n        return stream;\n    }\n\n    // extend tokenizer with constants\n    Object.keys(_const).forEach(function(key) {\n        tokenize[key] = _const[key];\n    });\n\n    // extend tokenizer with static methods from utils\n    Object.keys(charCodeDefinitions).forEach(function(key) {\n        tokenize[key] = charCodeDefinitions[key];\n    });\n    Object.keys(utils).forEach(function(key) {\n        tokenize[key] = utils[key];\n    });\n\n    var tokenizer = tokenize;\n\n    var isDigit$2 = tokenizer.isDigit;\n    var cmpChar$1 = tokenizer.cmpChar;\n    var TYPE$3 = tokenizer.TYPE;\n\n    var DELIM = TYPE$3.Delim;\n    var WHITESPACE$1 = TYPE$3.WhiteSpace;\n    var COMMENT$1 = TYPE$3.Comment;\n    var IDENT = TYPE$3.Ident;\n    var NUMBER = TYPE$3.Number;\n    var DIMENSION = TYPE$3.Dimension;\n    var PLUSSIGN = 0x002B;    // U+002B PLUS SIGN (+)\n    var HYPHENMINUS$1 = 0x002D; // U+002D HYPHEN-MINUS (-)\n    var N = 0x006E;           // U+006E LATIN SMALL LETTER N (n)\n    var DISALLOW_SIGN = true;\n    var ALLOW_SIGN = false;\n\n    function isDelim(token, code) {\n        return token !== null && token.type === DELIM && token.value.charCodeAt(0) === code;\n    }\n\n    function skipSC(token, offset, getNextToken) {\n        while (token !== null && (token.type === WHITESPACE$1 || token.type === COMMENT$1)) {\n            token = getNextToken(++offset);\n        }\n\n        return offset;\n    }\n\n    function checkInteger(token, valueOffset, disallowSign, offset) {\n        if (!token) {\n            return 0;\n        }\n\n        var code = token.value.charCodeAt(valueOffset);\n\n        if (code === PLUSSIGN || code === HYPHENMINUS$1) {\n            if (disallowSign) {\n                // Number sign is not allowed\n                return 0;\n            }\n            valueOffset++;\n        }\n\n        for (; valueOffset < token.value.length; valueOffset++) {\n            if (!isDigit$2(token.value.charCodeAt(valueOffset))) {\n                // Integer is expected\n                return 0;\n            }\n        }\n\n        return offset + 1;\n    }\n\n    // ... <signed-integer>\n    // ... ['+' | '-'] <signless-integer>\n    function consumeB(token, offset_, getNextToken) {\n        var sign = false;\n        var offset = skipSC(token, offset_, getNextToken);\n\n        token = getNextToken(offset);\n\n        if (token === null) {\n            return offset_;\n        }\n\n        if (token.type !== NUMBER) {\n            if (isDelim(token, PLUSSIGN) || isDelim(token, HYPHENMINUS$1)) {\n                sign = true;\n                offset = skipSC(getNextToken(++offset), offset, getNextToken);\n                token = getNextToken(offset);\n\n                if (token === null && token.type !== NUMBER) {\n                    return 0;\n                }\n            } else {\n                return offset_;\n            }\n        }\n\n        if (!sign) {\n            var code = token.value.charCodeAt(0);\n            if (code !== PLUSSIGN && code !== HYPHENMINUS$1) {\n                // Number sign is expected\n                return 0;\n            }\n        }\n\n        return checkInteger(token, sign ? 0 : 1, sign, offset);\n    }\n\n    // An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb\n    var genericAnPlusB = function anPlusB(token, getNextToken) {\n        /* eslint-disable brace-style*/\n        var offset = 0;\n\n        if (!token) {\n            return 0;\n        }\n\n        // <integer>\n        if (token.type === NUMBER) {\n            return checkInteger(token, 0, ALLOW_SIGN, offset); // b\n        }\n\n            // -n\n            // -n <signed-integer>\n            // -n ['+' | '-'] <signless-integer>\n            // -n- <signless-integer>\n        // <dashndashdigit-ident>\n        else if (token.type === IDENT && token.value.charCodeAt(0) === HYPHENMINUS$1) {\n            // expect 1st char is N\n            if (!cmpChar$1(token.value, 1, N)) {\n                return 0;\n            }\n\n            switch (token.value.length) {\n                // -n\n                // -n <signed-integer>\n                // -n ['+' | '-'] <signless-integer>\n                case 2:\n                    return consumeB(getNextToken(++offset), offset, getNextToken);\n\n                // -n- <signless-integer>\n                case 3:\n                    if (token.value.charCodeAt(2) !== HYPHENMINUS$1) {\n                        return 0;\n                    }\n\n                    offset = skipSC(getNextToken(++offset), offset, getNextToken);\n                    token = getNextToken(offset);\n\n                    return checkInteger(token, 0, DISALLOW_SIGN, offset);\n\n                // <dashndashdigit-ident>\n                default:\n                    if (token.value.charCodeAt(2) !== HYPHENMINUS$1) {\n                        return 0;\n                    }\n\n                    return checkInteger(token, 3, DISALLOW_SIGN, offset);\n            }\n        }\n\n            // '+'? n\n            // '+'? n <signed-integer>\n            // '+'? n ['+' | '-'] <signless-integer>\n            // '+'? n- <signless-integer>\n        // '+'? <ndashdigit-ident>\n        else if (token.type === IDENT || (isDelim(token, PLUSSIGN) && getNextToken(offset + 1).type === IDENT)) {\n            // just ignore a plus\n            if (token.type !== IDENT) {\n                token = getNextToken(++offset);\n            }\n\n            if (token === null || !cmpChar$1(token.value, 0, N)) {\n                return 0;\n            }\n\n            switch (token.value.length) {\n                // '+'? n\n                // '+'? n <signed-integer>\n                // '+'? n ['+' | '-'] <signless-integer>\n                case 1:\n                    return consumeB(getNextToken(++offset), offset, getNextToken);\n\n                // '+'? n- <signless-integer>\n                case 2:\n                    if (token.value.charCodeAt(1) !== HYPHENMINUS$1) {\n                        return 0;\n                    }\n\n                    offset = skipSC(getNextToken(++offset), offset, getNextToken);\n                    token = getNextToken(offset);\n\n                    return checkInteger(token, 0, DISALLOW_SIGN, offset);\n\n                // '+'? <ndashdigit-ident>\n                default:\n                    if (token.value.charCodeAt(1) !== HYPHENMINUS$1) {\n                        return 0;\n                    }\n\n                    return checkInteger(token, 2, DISALLOW_SIGN, offset);\n            }\n        }\n\n            // <ndashdigit-dimension>\n            // <ndash-dimension> <signless-integer>\n            // <n-dimension>\n            // <n-dimension> <signed-integer>\n        // <n-dimension> ['+' | '-'] <signless-integer>\n        else if (token.type === DIMENSION) {\n            var code = token.value.charCodeAt(0);\n            var sign = code === PLUSSIGN || code === HYPHENMINUS$1 ? 1 : 0;\n\n            for (var i = sign; i < token.value.length; i++) {\n                if (!isDigit$2(token.value.charCodeAt(i))) {\n                    break;\n                }\n            }\n\n            if (i === sign) {\n                // Integer is expected\n                return 0;\n            }\n\n            if (!cmpChar$1(token.value, i, N)) {\n                return 0;\n            }\n\n            // <n-dimension>\n            // <n-dimension> <signed-integer>\n            // <n-dimension> ['+' | '-'] <signless-integer>\n            if (i + 1 === token.value.length) {\n                return consumeB(getNextToken(++offset), offset, getNextToken);\n            } else {\n                if (token.value.charCodeAt(i + 1) !== HYPHENMINUS$1) {\n                    return 0;\n                }\n\n                // <ndash-dimension> <signless-integer>\n                if (i + 2 === token.value.length) {\n                    offset = skipSC(getNextToken(++offset), offset, getNextToken);\n                    token = getNextToken(offset);\n\n                    return checkInteger(token, 0, DISALLOW_SIGN, offset);\n                }\n                // <ndashdigit-dimension>\n                else {\n                    return checkInteger(token, i + 2, DISALLOW_SIGN, offset);\n                }\n            }\n        }\n\n        return 0;\n    };\n\n    var isHexDigit$2 = tokenizer.isHexDigit;\n    var cmpChar$2 = tokenizer.cmpChar;\n    var TYPE$4 = tokenizer.TYPE;\n\n    var IDENT$1 = TYPE$4.Ident;\n    var DELIM$1 = TYPE$4.Delim;\n    var NUMBER$1 = TYPE$4.Number;\n    var DIMENSION$1 = TYPE$4.Dimension;\n    var PLUSSIGN$1 = 0x002B;     // U+002B PLUS SIGN (+)\n    var HYPHENMINUS$2 = 0x002D;  // U+002D HYPHEN-MINUS (-)\n    var QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?)\n    var U = 0x0075;            // U+0075 LATIN SMALL LETTER U (u)\n\n    function isDelim$1(token, code) {\n        return token !== null && token.type === DELIM$1 && token.value.charCodeAt(0) === code;\n    }\n\n    function startsWith(token, code) {\n        return token.value.charCodeAt(0) === code;\n    }\n\n    function hexSequence(token, offset, allowDash) {\n        for (var pos = offset, hexlen = 0; pos < token.value.length; pos++) {\n            var code = token.value.charCodeAt(pos);\n\n            if (code === HYPHENMINUS$2 && allowDash && hexlen !== 0) {\n                if (hexSequence(token, offset + hexlen + 1, false) > 0) {\n                    return 6; // dissallow following question marks\n                }\n\n                return 0; // dash at the ending of a hex sequence is not allowed\n            }\n\n            if (!isHexDigit$2(code)) {\n                return 0; // not a hex digit\n            }\n\n            if (++hexlen > 6) {\n                return 0; // too many hex digits\n            }    }\n\n        return hexlen;\n    }\n\n    function withQuestionMarkSequence(consumed, length, getNextToken) {\n        if (!consumed) {\n            return 0; // nothing consumed\n        }\n\n        while (isDelim$1(getNextToken(length), QUESTIONMARK)) {\n            if (++consumed > 6) {\n                return 0; // too many question marks\n            }\n\n            length++;\n        }\n\n        return length;\n    }\n\n    // https://drafts.csswg.org/css-syntax/#urange\n    // Informally, the <urange> production has three forms:\n    // U+0001\n    //      Defines a range consisting of a single code point, in this case the code point \"1\".\n    // U+0001-00ff\n    //      Defines a range of codepoints between the first and the second value, in this case\n    //      the range between \"1\" and \"ff\" (255 in decimal) inclusive.\n    // U+00??\n    //      Defines a range of codepoints where the \"?\" characters range over all hex digits,\n    //      in this case defining the same as the value U+0000-00ff.\n    // In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat \"?\" as a hexadecimal digit).\n    //\n    // <urange> =\n    //   u '+' <ident-token> '?'* |\n    //   u <dimension-token> '?'* |\n    //   u <number-token> '?'* |\n    //   u <number-token> <dimension-token> |\n    //   u <number-token> <number-token> |\n    //   u '+' '?'+\n    var genericUrange = function urange(token, getNextToken) {\n        var length = 0;\n\n        // should start with `u` or `U`\n        if (token === null || token.type !== IDENT$1 || !cmpChar$2(token.value, 0, U)) {\n            return 0;\n        }\n\n        token = getNextToken(++length);\n        if (token === null) {\n            return 0;\n        }\n\n        // u '+' <ident-token> '?'*\n        // u '+' '?'+\n        if (isDelim$1(token, PLUSSIGN$1)) {\n            token = getNextToken(++length);\n            if (token === null) {\n                return 0;\n            }\n\n            if (token.type === IDENT$1) {\n                // u '+' <ident-token> '?'*\n                return withQuestionMarkSequence(hexSequence(token, 0, true), ++length, getNextToken);\n            }\n\n            if (isDelim$1(token, QUESTIONMARK)) {\n                // u '+' '?'+\n                return withQuestionMarkSequence(1, ++length, getNextToken);\n            }\n\n            // Hex digit or question mark is expected\n            return 0;\n        }\n\n        // u <number-token> '?'*\n        // u <number-token> <dimension-token>\n        // u <number-token> <number-token>\n        if (token.type === NUMBER$1) {\n            if (!startsWith(token, PLUSSIGN$1)) {\n                return 0;\n            }\n\n            var consumedHexLength = hexSequence(token, 1, true);\n            if (consumedHexLength === 0) {\n                return 0;\n            }\n\n            token = getNextToken(++length);\n            if (token === null) {\n                // u <number-token> <eof>\n                return length;\n            }\n\n            if (token.type === DIMENSION$1 || token.type === NUMBER$1) {\n                // u <number-token> <dimension-token>\n                // u <number-token> <number-token>\n                if (!startsWith(token, HYPHENMINUS$2) || !hexSequence(token, 1, false)) {\n                    return 0;\n                }\n\n                return length + 1;\n            }\n\n            // u <number-token> '?'*\n            return withQuestionMarkSequence(consumedHexLength, length, getNextToken);\n        }\n\n        // u <dimension-token> '?'*\n        if (token.type === DIMENSION$1) {\n            if (!startsWith(token, PLUSSIGN$1)) {\n                return 0;\n            }\n\n            return withQuestionMarkSequence(hexSequence(token, 1, true), ++length, getNextToken);\n        }\n\n        return 0;\n    };\n\n    var isIdentifierStart$2 = tokenizer.isIdentifierStart;\n    var isHexDigit$3 = tokenizer.isHexDigit;\n    var isDigit$3 = tokenizer.isDigit;\n    var cmpStr$3 = tokenizer.cmpStr;\n    var consumeNumber$2 = tokenizer.consumeNumber;\n    var TYPE$5 = tokenizer.TYPE;\n\n\n\n    var cssWideKeywords = ['unset', 'initial', 'inherit'];\n    var calcFunctionNames = ['calc(', '-moz-calc(', '-webkit-calc('];\n\n    // https://www.w3.org/TR/css-values-3/#lengths\n    var LENGTH = {\n        // absolute length units\n        'px': true,\n        'mm': true,\n        'cm': true,\n        'in': true,\n        'pt': true,\n        'pc': true,\n        'q': true,\n\n        // relative length units\n        'em': true,\n        'ex': true,\n        'ch': true,\n        'rem': true,\n\n        // viewport-percentage lengths\n        'vh': true,\n        'vw': true,\n        'vmin': true,\n        'vmax': true,\n        'vm': true\n    };\n\n    var ANGLE = {\n        'deg': true,\n        'grad': true,\n        'rad': true,\n        'turn': true\n    };\n\n    var TIME = {\n        's': true,\n        'ms': true\n    };\n\n    var FREQUENCY = {\n        'hz': true,\n        'khz': true\n    };\n\n    // https://www.w3.org/TR/css-values-3/#resolution (https://drafts.csswg.org/css-values/#resolution)\n    var RESOLUTION = {\n        'dpi': true,\n        'dpcm': true,\n        'dppx': true,\n        'x': true      // https://github.com/w3c/csswg-drafts/issues/461\n    };\n\n    // https://drafts.csswg.org/css-grid/#fr-unit\n    var FLEX = {\n        'fr': true\n    };\n\n    // https://www.w3.org/TR/css3-speech/#mixing-props-voice-volume\n    var DECIBEL = {\n        'db': true\n    };\n\n    // https://www.w3.org/TR/css3-speech/#voice-props-voice-pitch\n    var SEMITONES = {\n        'st': true\n    };\n\n    // safe char code getter\n    function charCode(str, index) {\n        return index < str.length ? str.charCodeAt(index) : 0;\n    }\n\n    function eqStr(actual, expected) {\n        return cmpStr$3(actual, 0, actual.length, expected);\n    }\n\n    function eqStrAny(actual, expected) {\n        for (var i = 0; i < expected.length; i++) {\n            if (eqStr(actual, expected[i])) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    // IE postfix hack, i.e. 123\\0 or 123px\\9\n    function isPostfixIeHack(str, offset) {\n        if (offset !== str.length - 2) {\n            return false;\n        }\n\n        return (\n            str.charCodeAt(offset) === 0x005C &&  // U+005C REVERSE SOLIDUS (\\)\n            isDigit$3(str.charCodeAt(offset + 1))\n        );\n    }\n\n    function outOfRange(opts, value, numEnd) {\n        if (opts && opts.type === 'Range') {\n            var num = Number(\n                numEnd !== undefined && numEnd !== value.length\n                    ? value.substr(0, numEnd)\n                    : value\n            );\n\n            if (isNaN(num)) {\n                return true;\n            }\n\n            if (opts.min !== null && num < opts.min) {\n                return true;\n            }\n\n            if (opts.max !== null && num > opts.max) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    function consumeFunction(token, getNextToken) {\n        var startIdx = token.index;\n        var length = 0;\n\n        // balanced token consuming\n        do {\n            length++;\n\n            if (token.balance <= startIdx) {\n                break;\n            }\n        } while (token = getNextToken(length));\n\n        return length;\n    }\n\n    // TODO: implement\n    // can be used wherever <length>, <frequency>, <angle>, <time>, <percentage>, <number>, or <integer> values are allowed\n    // https://drafts.csswg.org/css-values/#calc-notation\n    function calc(next) {\n        return function(token, getNextToken, opts) {\n            if (token === null) {\n                return 0;\n            }\n\n            if (token.type === TYPE$5.Function && eqStrAny(token.value, calcFunctionNames)) {\n                return consumeFunction(token, getNextToken);\n            }\n\n            return next(token, getNextToken, opts);\n        };\n    }\n\n    function tokenType(expectedTokenType) {\n        return function(token) {\n            if (token === null || token.type !== expectedTokenType) {\n                return 0;\n            }\n\n            return 1;\n        };\n    }\n\n    function func(name) {\n        name = name + '(';\n\n        return function(token, getNextToken) {\n            if (token !== null && eqStr(token.value, name)) {\n                return consumeFunction(token, getNextToken);\n            }\n\n            return 0;\n        };\n    }\n\n    // =========================\n    // Complex types\n    //\n\n    // https://drafts.csswg.org/css-values-4/#custom-idents\n    // 4.2. Author-defined Identifiers: the <custom-ident> type\n    // Some properties accept arbitrary author-defined identifiers as a component value.\n    // This generic data type is denoted by <custom-ident>, and represents any valid CSS identifier\n    // that would not be misinterpreted as a pre-defined keyword in that property\u2019s value definition.\n    //\n    // See also: https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident\n    function customIdent(token) {\n        if (token === null || token.type !== TYPE$5.Ident) {\n            return 0;\n        }\n\n        var name = token.value.toLowerCase();\n\n        // The CSS-wide keywords are not valid <custom-ident>s\n        if (eqStrAny(name, cssWideKeywords)) {\n            return 0;\n        }\n\n        // The default keyword is reserved and is also not a valid <custom-ident>\n        if (eqStr(name, 'default')) {\n            return 0;\n        }\n\n        // TODO: ignore property specific keywords (as described https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident)\n        // Specifications using <custom-ident> must specify clearly what other keywords\n        // are excluded from <custom-ident>, if any\u2014for example by saying that any pre-defined keywords\n        // in that property\u2019s value definition are excluded. Excluded keywords are excluded\n        // in all ASCII case permutations.\n\n        return 1;\n    }\n\n    // https://drafts.csswg.org/css-variables/#typedef-custom-property-name\n    // A custom property is any property whose name starts with two dashes (U+002D HYPHEN-MINUS), like --foo.\n    // The <custom-property-name> production corresponds to this: it\u2019s defined as any valid identifier\n    // that starts with two dashes, except -- itself, which is reserved for future use by CSS.\n    // NOTE: Current implementation treat `--` as a valid name since most (all?) major browsers treat it as valid.\n    function customPropertyName(token) {\n        // ... defined as any valid identifier\n        if (token === null || token.type !== TYPE$5.Ident) {\n            return 0;\n        }\n\n        // ... that starts with two dashes (U+002D HYPHEN-MINUS)\n        if (charCode(token.value, 0) !== 0x002D || charCode(token.value, 1) !== 0x002D) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n    // https://drafts.csswg.org/css-color-4/#hex-notation\n    // The syntax of a <hex-color> is a <hash-token> token whose value consists of 3, 4, 6, or 8 hexadecimal digits.\n    // In other words, a hex color is written as a hash character, \"#\", followed by some number of digits 0-9 or\n    // letters a-f (the case of the letters doesn\u2019t matter - #00ff00 is identical to #00FF00).\n    function hexColor(token) {\n        if (token === null || token.type !== TYPE$5.Hash) {\n            return 0;\n        }\n\n        var length = token.value.length;\n\n        // valid values (length): #rgb (4), #rgba (5), #rrggbb (7), #rrggbbaa (9)\n        if (length !== 4 && length !== 5 && length !== 7 && length !== 9) {\n            return 0;\n        }\n\n        for (var i = 1; i < length; i++) {\n            if (!isHexDigit$3(token.value.charCodeAt(i))) {\n                return 0;\n            }\n        }\n\n        return 1;\n    }\n\n    function idSelector(token) {\n        if (token === null || token.type !== TYPE$5.Hash) {\n            return 0;\n        }\n\n        if (!isIdentifierStart$2(charCode(token.value, 1), charCode(token.value, 2), charCode(token.value, 3))) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n    // https://drafts.csswg.org/css-syntax/#any-value\n    // It represents the entirety of what a valid declaration can have as its value.\n    function declarationValue(token, getNextToken) {\n        if (!token) {\n            return 0;\n        }\n\n        var length = 0;\n        var level = 0;\n        var startIdx = token.index;\n\n        // The <declaration-value> production matches any sequence of one or more tokens,\n        // so long as the sequence ...\n        scan:\n            do {\n                switch (token.type) {\n                    // ... does not contain <bad-string-token>, <bad-url-token>,\n                    case TYPE$5.BadString:\n                    case TYPE$5.BadUrl:\n                        break scan;\n\n                    // ... unmatched <)-token>, <]-token>, or <}-token>,\n                    case TYPE$5.RightCurlyBracket:\n                    case TYPE$5.RightParenthesis:\n                    case TYPE$5.RightSquareBracket:\n                        if (token.balance > token.index || token.balance < startIdx) {\n                            break scan;\n                        }\n\n                        level--;\n                        break;\n\n                    // ... or top-level <semicolon-token> tokens\n                    case TYPE$5.Semicolon:\n                        if (level === 0) {\n                            break scan;\n                        }\n\n                        break;\n\n                    // ... or <delim-token> tokens with a value of \"!\"\n                    case TYPE$5.Delim:\n                        if (token.value === '!' && level === 0) {\n                            break scan;\n                        }\n\n                        break;\n\n                    case TYPE$5.Function:\n                    case TYPE$5.LeftParenthesis:\n                    case TYPE$5.LeftSquareBracket:\n                    case TYPE$5.LeftCurlyBracket:\n                        level++;\n                        break;\n                }\n\n                length++;\n\n                // until balance closing\n                if (token.balance <= startIdx) {\n                    break;\n                }\n            } while (token = getNextToken(length));\n\n        return length;\n    }\n\n    // https://drafts.csswg.org/css-syntax/#any-value\n    // The <any-value> production is identical to <declaration-value>, but also\n    // allows top-level <semicolon-token> tokens and <delim-token> tokens\n    // with a value of \"!\". It represents the entirety of what valid CSS can be in any context.\n    function anyValue(token, getNextToken) {\n        if (!token) {\n            return 0;\n        }\n\n        var startIdx = token.index;\n        var length = 0;\n\n        // The <any-value> production matches any sequence of one or more tokens,\n        // so long as the sequence ...\n        scan:\n            do {\n                switch (token.type) {\n                    // ... does not contain <bad-string-token>, <bad-url-token>,\n                    case TYPE$5.BadString:\n                    case TYPE$5.BadUrl:\n                        break scan;\n\n                    // ... unmatched <)-token>, <]-token>, or <}-token>,\n                    case TYPE$5.RightCurlyBracket:\n                    case TYPE$5.RightParenthesis:\n                    case TYPE$5.RightSquareBracket:\n                        if (token.balance > token.index || token.balance < startIdx) {\n                            break scan;\n                        }\n\n                        break;\n                }\n\n                length++;\n\n                // until balance closing\n                if (token.balance <= startIdx) {\n                    break;\n                }\n            } while (token = getNextToken(length));\n\n        return length;\n    }\n\n    // =========================\n    // Dimensions\n    //\n\n    function dimension(type) {\n        return function(token, getNextToken, opts) {\n            if (token === null || token.type !== TYPE$5.Dimension) {\n                return 0;\n            }\n\n            var numberEnd = consumeNumber$2(token.value, 0);\n\n            // check unit\n            if (type !== null) {\n                // check for IE postfix hack, i.e. 123px\\0 or 123px\\9\n                var reverseSolidusOffset = token.value.indexOf('\\\\', numberEnd);\n                var unit = reverseSolidusOffset === -1 || !isPostfixIeHack(token.value, reverseSolidusOffset)\n                    ? token.value.substr(numberEnd)\n                    : token.value.substring(numberEnd, reverseSolidusOffset);\n\n                if (type.hasOwnProperty(unit.toLowerCase()) === false) {\n                    return 0;\n                }\n            }\n\n            // check range if specified\n            if (outOfRange(opts, token.value, numberEnd)) {\n                return 0;\n            }\n\n            return 1;\n        };\n    }\n\n    // =========================\n    // Percentage\n    //\n\n    // \u00a75.5. Percentages: the <percentage> type\n    // https://drafts.csswg.org/css-values-4/#percentages\n    function percentage(token, getNextToken, opts) {\n        // ... corresponds to the <percentage-token> production\n        if (token === null || token.type !== TYPE$5.Percentage) {\n            return 0;\n        }\n\n        // check range if specified\n        if (outOfRange(opts, token.value, token.value.length - 1)) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n    // =========================\n    // Numeric\n    //\n\n    // https://drafts.csswg.org/css-values-4/#numbers\n    // The value <zero> represents a literal number with the value 0. Expressions that merely\n    // evaluate to a <number> with the value 0 (for example, calc(0)) do not match <zero>;\n    // only literal <number-token>s do.\n    function zero(next) {\n        if (typeof next !== 'function') {\n            next = function() {\n                return 0;\n            };\n        }\n\n        return function(token, getNextToken, opts) {\n            if (token !== null && token.type === TYPE$5.Number) {\n                if (Number(token.value) === 0) {\n                    return 1;\n                }\n            }\n\n            return next(token, getNextToken, opts);\n        };\n    }\n\n    // \u00a7 5.3. Real Numbers: the <number> type\n    // https://drafts.csswg.org/css-values-4/#numbers\n    // Number values are denoted by <number>, and represent real numbers, possibly with a fractional component.\n    // ... It corresponds to the <number-token> production\n    function number(token, getNextToken, opts) {\n        if (token === null) {\n            return 0;\n        }\n\n        var numberEnd = consumeNumber$2(token.value, 0);\n        var isNumber = numberEnd === token.value.length;\n        if (!isNumber && !isPostfixIeHack(token.value, numberEnd)) {\n            return 0;\n        }\n\n        // check range if specified\n        if (outOfRange(opts, token.value, numberEnd)) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n    // \u00a75.2. Integers: the <integer> type\n    // https://drafts.csswg.org/css-values-4/#integers\n    function integer(token, getNextToken, opts) {\n        // ... corresponds to a subset of the <number-token> production\n        if (token === null || token.type !== TYPE$5.Number) {\n            return 0;\n        }\n\n        // The first digit of an integer may be immediately preceded by `-` or `+` to indicate the integer\u2019s sign.\n        var i = token.value.charCodeAt(0) === 0x002B ||       // U+002B PLUS SIGN (+)\n        token.value.charCodeAt(0) === 0x002D ? 1 : 0; // U+002D HYPHEN-MINUS (-)\n\n        // When written literally, an integer is one or more decimal digits 0 through 9 ...\n        for (; i < token.value.length; i++) {\n            if (!isDigit$3(token.value.charCodeAt(i))) {\n                return 0;\n            }\n        }\n\n        // check range if specified\n        if (outOfRange(opts, token.value, i)) {\n            return 0;\n        }\n\n        return 1;\n    }\n\n    var generic = {\n        // token types\n        'ident-token': tokenType(TYPE$5.Ident),\n        'function-token': tokenType(TYPE$5.Function),\n        'at-keyword-token': tokenType(TYPE$5.AtKeyword),\n        'hash-token': tokenType(TYPE$5.Hash),\n        'string-token': tokenType(TYPE$5.String),\n        'bad-string-token': tokenType(TYPE$5.BadString),\n        'url-token': tokenType(TYPE$5.Url),\n        'bad-url-token': tokenType(TYPE$5.BadUrl),\n        'delim-token': tokenType(TYPE$5.Delim),\n        'number-token': tokenType(TYPE$5.Number),\n        'percentage-token': tokenType(TYPE$5.Percentage),\n        'dimension-token': tokenType(TYPE$5.Dimension),\n        'whitespace-token': tokenType(TYPE$5.WhiteSpace),\n        'CDO-token': tokenType(TYPE$5.CDO),\n        'CDC-token': tokenType(TYPE$5.CDC),\n        'colon-token': tokenType(TYPE$5.Colon),\n        'semicolon-token': tokenType(TYPE$5.Semicolon),\n        'comma-token': tokenType(TYPE$5.Comma),\n        '[-token': tokenType(TYPE$5.LeftSquareBracket),\n        ']-token': tokenType(TYPE$5.RightSquareBracket),\n        '(-token': tokenType(TYPE$5.LeftParenthesis),\n        ')-token': tokenType(TYPE$5.RightParenthesis),\n        '{-token': tokenType(TYPE$5.LeftCurlyBracket),\n        '}-token': tokenType(TYPE$5.RightCurlyBracket),\n\n        // token type aliases\n        'string': tokenType(TYPE$5.String),\n        'ident': tokenType(TYPE$5.Ident),\n\n        // complex types\n        'custom-ident': customIdent,\n        'custom-property-name': customPropertyName,\n        'hex-color': hexColor,\n        'id-selector': idSelector, // element( <id-selector> )\n        'an-plus-b': genericAnPlusB,\n        'urange': genericUrange,\n        'declaration-value': declarationValue,\n        'any-value': anyValue,\n\n        // dimensions\n        'dimension': calc(dimension(null)),\n        'angle': calc(dimension(ANGLE)),\n        'decibel': calc(dimension(DECIBEL)),\n        'frequency': calc(dimension(FREQUENCY)),\n        'flex': calc(dimension(FLEX)),\n        'length': calc(zero(dimension(LENGTH))),\n        'resolution': calc(dimension(RESOLUTION)),\n        'semitones': calc(dimension(SEMITONES)),\n        'time': calc(dimension(TIME)),\n\n        // percentage\n        'percentage': calc(percentage),\n\n        // numeric\n        'zero': zero(),\n        'number': calc(number),\n        'integer': calc(integer),\n\n        // old IE stuff\n        '-ms-legacy-expression': func('expression')\n    };\n\n    var _SyntaxError$1 = function SyntaxError(message, input, offset) {\n        var error = createCustomError('SyntaxError', message);\n\n        error.input = input;\n        error.offset = offset;\n        error.rawMessage = message;\n        error.message = error.rawMessage + '\\n' +\n            '  ' + error.input + '\\n' +\n            '--' + new Array((error.offset || error.input.length) + 1).join('-') + '^';\n\n        return error;\n    };\n\n    var TAB = 9;\n    var N$1 = 10;\n    var F = 12;\n    var R = 13;\n    var SPACE = 32;\n\n    var Tokenizer = function(str) {\n        this.str = str;\n        this.pos = 0;\n    };\n\n    Tokenizer.prototype = {\n        charCodeAt: function(pos) {\n            return pos < this.str.length ? this.str.charCodeAt(pos) : 0;\n        },\n        charCode: function() {\n            return this.charCodeAt(this.pos);\n        },\n        nextCharCode: function() {\n            return this.charCodeAt(this.pos + 1);\n        },\n        nextNonWsCode: function(pos) {\n            return this.charCodeAt(this.findWsEnd(pos));\n        },\n        findWsEnd: function(pos) {\n            for (; pos < this.str.length; pos++) {\n                var code = this.str.charCodeAt(pos);\n                if (code !== R && code !== N$1 && code !== F && code !== SPACE && code !== TAB) {\n                    break;\n                }\n            }\n\n            return pos;\n        },\n        substringToPos: function(end) {\n            return this.str.substring(this.pos, this.pos = end);\n        },\n        eat: function(code) {\n            if (this.charCode() !== code) {\n                this.error('Expect `' + String.fromCharCode(code) + '`');\n            }\n\n            this.pos++;\n        },\n        peek: function() {\n            return this.pos < this.str.length ? this.str.charAt(this.pos++) : '';\n        },\n        error: function(message) {\n            throw new _SyntaxError$1(message, this.str, this.pos);\n        }\n    };\n\n    var tokenizer$1 = Tokenizer;\n\n    var TAB$1 = 9;\n    var N$2 = 10;\n    var F$1 = 12;\n    var R$1 = 13;\n    var SPACE$1 = 32;\n    var EXCLAMATIONMARK = 33;    // !\n    var NUMBERSIGN = 35;         // #\n    var AMPERSAND = 38;          // &\n    var APOSTROPHE = 39;         // '\n    var LEFTPARENTHESIS = 40;    // (\n    var RIGHTPARENTHESIS = 41;   // )\n    var ASTERISK = 42;           // *\n    var PLUSSIGN$2 = 43;           // +\n    var COMMA = 44;              // ,\n    var HYPERMINUS = 45;         // -\n    var LESSTHANSIGN = 60;       // <\n    var GREATERTHANSIGN = 62;    // >\n    var QUESTIONMARK$1 = 63;       // ?\n    var COMMERCIALAT = 64;       // @\n    var LEFTSQUAREBRACKET = 91;  // [\n    var RIGHTSQUAREBRACKET = 93; // ]\n    var LEFTCURLYBRACKET = 123;  // {\n    var VERTICALLINE = 124;      // |\n    var RIGHTCURLYBRACKET = 125; // }\n    var INFINITY = 8734;         // \u221e\n    var NAME_CHAR = createCharMap(function(ch) {\n        return /[a-zA-Z0-9\\-]/.test(ch);\n    });\n    var COMBINATOR_PRECEDENCE = {\n        ' ': 1,\n        '&&': 2,\n        '||': 3,\n        '|': 4\n    };\n\n    function createCharMap(fn) {\n        var array = typeof Uint32Array === 'function' ? new Uint32Array(128) : new Array(128);\n        for (var i = 0; i < 128; i++) {\n            array[i] = fn(String.fromCharCode(i)) ? 1 : 0;\n        }\n        return array;\n    }\n\n    function scanSpaces(tokenizer) {\n        return tokenizer.substringToPos(\n            tokenizer.findWsEnd(tokenizer.pos)\n        );\n    }\n\n    function scanWord(tokenizer) {\n        var end = tokenizer.pos;\n\n        for (; end < tokenizer.str.length; end++) {\n            var code = tokenizer.str.charCodeAt(end);\n            if (code >= 128 || NAME_CHAR[code] === 0) {\n                break;\n            }\n        }\n\n        if (tokenizer.pos === end) {\n            tokenizer.error('Expect a keyword');\n        }\n\n        return tokenizer.substringToPos(end);\n    }\n\n    function scanNumber(tokenizer) {\n        var end = tokenizer.pos;\n\n        for (; end < tokenizer.str.length; end++) {\n            var code = tokenizer.str.charCodeAt(end);\n            if (code < 48 || code > 57) {\n                break;\n            }\n        }\n\n        if (tokenizer.pos === end) {\n            tokenizer.error('Expect a number');\n        }\n\n        return tokenizer.substringToPos(end);\n    }\n\n    function scanString(tokenizer) {\n        var end = tokenizer.str.indexOf('\\'', tokenizer.pos + 1);\n\n        if (end === -1) {\n            tokenizer.pos = tokenizer.str.length;\n            tokenizer.error('Expect an apostrophe');\n        }\n\n        return tokenizer.substringToPos(end + 1);\n    }\n\n    function readMultiplierRange(tokenizer) {\n        var min = null;\n        var max = null;\n\n        tokenizer.eat(LEFTCURLYBRACKET);\n\n        min = scanNumber(tokenizer);\n\n        if (tokenizer.charCode() === COMMA) {\n            tokenizer.pos++;\n            if (tokenizer.charCode() !== RIGHTCURLYBRACKET) {\n                max = scanNumber(tokenizer);\n            }\n        } else {\n            max = min;\n        }\n\n        tokenizer.eat(RIGHTCURLYBRACKET);\n\n        return {\n            min: Number(min),\n            max: max ? Number(max) : 0\n        };\n    }\n\n    function readMultiplier(tokenizer) {\n        var range = null;\n        var comma = false;\n\n        switch (tokenizer.charCode()) {\n            case ASTERISK:\n                tokenizer.pos++;\n\n                range = {\n                    min: 0,\n                    max: 0\n                };\n\n                break;\n\n            case PLUSSIGN$2:\n                tokenizer.pos++;\n\n                range = {\n                    min: 1,\n                    max: 0\n                };\n\n                break;\n\n            case QUESTIONMARK$1:\n                tokenizer.pos++;\n\n                range = {\n                    min: 0,\n                    max: 1\n                };\n\n                break;\n\n            case NUMBERSIGN:\n                tokenizer.pos++;\n\n                comma = true;\n\n                if (tokenizer.charCode() === LEFTCURLYBRACKET) {\n                    range = readMultiplierRange(tokenizer);\n                } else {\n                    range = {\n                        min: 1,\n                        max: 0\n                    };\n                }\n\n                break;\n\n            case LEFTCURLYBRACKET:\n                range = readMultiplierRange(tokenizer);\n                break;\n\n            default:\n                return null;\n        }\n\n        return {\n            type: 'Multiplier',\n            comma: comma,\n            min: range.min,\n            max: range.max,\n            term: null\n        };\n    }\n\n    function maybeMultiplied(tokenizer, node) {\n        var multiplier = readMultiplier(tokenizer);\n\n        if (multiplier !== null) {\n            multiplier.term = node;\n            return multiplier;\n        }\n\n        return node;\n    }\n\n    function maybeToken(tokenizer) {\n        var ch = tokenizer.peek();\n\n        if (ch === '') {\n            return null;\n        }\n\n        return {\n            type: 'Token',\n            value: ch\n        };\n    }\n\n    function readProperty(tokenizer) {\n        var name;\n\n        tokenizer.eat(LESSTHANSIGN);\n        tokenizer.eat(APOSTROPHE);\n\n        name = scanWord(tokenizer);\n\n        tokenizer.eat(APOSTROPHE);\n        tokenizer.eat(GREATERTHANSIGN);\n\n        return maybeMultiplied(tokenizer, {\n            type: 'Property',\n            name: name\n        });\n    }\n\n    // https://drafts.csswg.org/css-values-3/#numeric-ranges\n    // 4.1. Range Restrictions and Range Definition Notation\n    //\n    // Range restrictions can be annotated in the numeric type notation using CSS bracketed\n    // range notation\u2014[min,max]\u2014within the angle brackets, after the identifying keyword,\n    // indicating a closed range between (and including) min and max.\n    // For example, <integer [0, 10]> indicates an integer between 0 and 10, inclusive.\n    function readTypeRange(tokenizer) {\n        // use null for Infinity to make AST format JSON serializable/deserializable\n        var min = null; // -Infinity\n        var max = null; // Infinity\n        var sign = 1;\n\n        tokenizer.eat(LEFTSQUAREBRACKET);\n\n        if (tokenizer.charCode() === HYPERMINUS) {\n            tokenizer.peek();\n            sign = -1;\n        }\n\n        if (sign == -1 && tokenizer.charCode() === INFINITY) {\n            tokenizer.peek();\n        } else {\n            min = sign * Number(scanNumber(tokenizer));\n        }\n\n        scanSpaces(tokenizer);\n        tokenizer.eat(COMMA);\n        scanSpaces(tokenizer);\n\n        if (tokenizer.charCode() === INFINITY) {\n            tokenizer.peek();\n        } else {\n            sign = 1;\n\n            if (tokenizer.charCode() === HYPERMINUS) {\n                tokenizer.peek();\n                sign = -1;\n            }\n\n            max = sign * Number(scanNumber(tokenizer));\n        }\n\n        tokenizer.eat(RIGHTSQUAREBRACKET);\n\n        // If no range is indicated, either by using the bracketed range notation\n        // or in the property description, then [\u2212\u221e,\u221e] is assumed.\n        if (min === null && max === null) {\n            return null;\n        }\n\n        return {\n            type: 'Range',\n            min: min,\n            max: max\n        };\n    }\n\n    function readType(tokenizer) {\n        var name;\n        var opts = null;\n\n        tokenizer.eat(LESSTHANSIGN);\n        name = scanWord(tokenizer);\n\n        if (tokenizer.charCode() === LEFTPARENTHESIS &&\n            tokenizer.nextCharCode() === RIGHTPARENTHESIS) {\n            tokenizer.pos += 2;\n            name += '()';\n        }\n\n        if (tokenizer.charCodeAt(tokenizer.findWsEnd(tokenizer.pos)) === LEFTSQUAREBRACKET) {\n            scanSpaces(tokenizer);\n            opts = readTypeRange(tokenizer);\n        }\n\n        tokenizer.eat(GREATERTHANSIGN);\n\n        return maybeMultiplied(tokenizer, {\n            type: 'Type',\n            name: name,\n            opts: opts\n        });\n    }\n\n    function readKeywordOrFunction(tokenizer) {\n        var name;\n\n        name = scanWord(tokenizer);\n\n        if (tokenizer.charCode() === LEFTPARENTHESIS) {\n            tokenizer.pos++;\n\n            return {\n                type: 'Function',\n                name: name\n            };\n        }\n\n        return maybeMultiplied(tokenizer, {\n            type: 'Keyword',\n            name: name\n        });\n    }\n\n    function regroupTerms(terms, combinators) {\n        function createGroup(terms, combinator) {\n            return {\n                type: 'Group',\n                terms: terms,\n                combinator: combinator,\n                disallowEmpty: false,\n                explicit: false\n            };\n        }\n\n        combinators = Object.keys(combinators).sort(function(a, b) {\n            return COMBINATOR_PRECEDENCE[a] - COMBINATOR_PRECEDENCE[b];\n        });\n\n        while (combinators.length > 0) {\n            var combinator = combinators.shift();\n            for (var i = 0, subgroupStart = 0; i < terms.length; i++) {\n                var term = terms[i];\n                if (term.type === 'Combinator') {\n                    if (term.value === combinator) {\n                        if (subgroupStart === -1) {\n                            subgroupStart = i - 1;\n                        }\n                        terms.splice(i, 1);\n                        i--;\n                    } else {\n                        if (subgroupStart !== -1 && i - subgroupStart > 1) {\n                            terms.splice(\n                                subgroupStart,\n                                i - subgroupStart,\n                                createGroup(terms.slice(subgroupStart, i), combinator)\n                            );\n                            i = subgroupStart + 1;\n                        }\n                        subgroupStart = -1;\n                    }\n                }\n            }\n\n            if (subgroupStart !== -1 && combinators.length) {\n                terms.splice(\n                    subgroupStart,\n                    i - subgroupStart,\n                    createGroup(terms.slice(subgroupStart, i), combinator)\n                );\n            }\n        }\n\n        return combinator;\n    }\n\n    function readImplicitGroup(tokenizer) {\n        var terms = [];\n        var combinators = {};\n        var token;\n        var prevToken = null;\n        var prevTokenPos = tokenizer.pos;\n\n        while (token = peek(tokenizer)) {\n            if (token.type !== 'Spaces') {\n                if (token.type === 'Combinator') {\n                    // check for combinator in group beginning and double combinator sequence\n                    if (prevToken === null || prevToken.type === 'Combinator') {\n                        tokenizer.pos = prevTokenPos;\n                        tokenizer.error('Unexpected combinator');\n                    }\n\n                    combinators[token.value] = true;\n                } else if (prevToken !== null && prevToken.type !== 'Combinator') {\n                    combinators[' '] = true;  // a b\n                    terms.push({\n                        type: 'Combinator',\n                        value: ' '\n                    });\n                }\n\n                terms.push(token);\n                prevToken = token;\n                prevTokenPos = tokenizer.pos;\n            }\n        }\n\n        // check for combinator in group ending\n        if (prevToken !== null && prevToken.type === 'Combinator') {\n            tokenizer.pos -= prevTokenPos;\n            tokenizer.error('Unexpected combinator');\n        }\n\n        return {\n            type: 'Group',\n            terms: terms,\n            combinator: regroupTerms(terms, combinators) || ' ',\n            disallowEmpty: false,\n            explicit: false\n        };\n    }\n\n    function readGroup(tokenizer) {\n        var result;\n\n        tokenizer.eat(LEFTSQUAREBRACKET);\n        result = readImplicitGroup(tokenizer);\n        tokenizer.eat(RIGHTSQUAREBRACKET);\n\n        result.explicit = true;\n\n        if (tokenizer.charCode() === EXCLAMATIONMARK) {\n            tokenizer.pos++;\n            result.disallowEmpty = true;\n        }\n\n        return result;\n    }\n\n    function peek(tokenizer) {\n        var code = tokenizer.charCode();\n\n        if (code < 128 && NAME_CHAR[code] === 1) {\n            return readKeywordOrFunction(tokenizer);\n        }\n\n        switch (code) {\n            case RIGHTSQUAREBRACKET:\n                // don't eat, stop scan a group\n                break;\n\n            case LEFTSQUAREBRACKET:\n                return maybeMultiplied(tokenizer, readGroup(tokenizer));\n\n            case LESSTHANSIGN:\n                return tokenizer.nextCharCode() === APOSTROPHE\n                    ? readProperty(tokenizer)\n                    : readType(tokenizer);\n\n            case VERTICALLINE:\n                return {\n                    type: 'Combinator',\n                    value: tokenizer.substringToPos(\n                        tokenizer.nextCharCode() === VERTICALLINE\n                            ? tokenizer.pos + 2\n                            : tokenizer.pos + 1\n                    )\n                };\n\n            case AMPERSAND:\n                tokenizer.pos++;\n                tokenizer.eat(AMPERSAND);\n\n                return {\n                    type: 'Combinator',\n                    value: '&&'\n                };\n\n            case COMMA:\n                tokenizer.pos++;\n                return {\n                    type: 'Comma'\n                };\n\n            case APOSTROPHE:\n                return maybeMultiplied(tokenizer, {\n                    type: 'String',\n                    value: scanString(tokenizer)\n                });\n\n            case SPACE$1:\n            case TAB$1:\n            case N$2:\n            case R$1:\n            case F$1:\n                return {\n                    type: 'Spaces',\n                    value: scanSpaces(tokenizer)\n                };\n\n            case COMMERCIALAT:\n                code = tokenizer.nextCharCode();\n\n                if (code < 128 && NAME_CHAR[code] === 1) {\n                    tokenizer.pos++;\n                    return {\n                        type: 'AtKeyword',\n                        name: scanWord(tokenizer)\n                    };\n                }\n\n                return maybeToken(tokenizer);\n\n            case ASTERISK:\n            case PLUSSIGN$2:\n            case QUESTIONMARK$1:\n            case NUMBERSIGN:\n            case EXCLAMATIONMARK:\n                // prohibited tokens (used as a multiplier start)\n                break;\n\n            case LEFTCURLYBRACKET:\n                // LEFTCURLYBRACKET is allowed since mdn/data uses it w/o quoting\n                // check next char isn't a number, because it's likely a disjoined multiplier\n                code = tokenizer.nextCharCode();\n\n                if (code < 48 || code > 57) {\n                    return maybeToken(tokenizer);\n                }\n\n                break;\n\n            default:\n                return maybeToken(tokenizer);\n        }\n    }\n\n    function parse(source) {\n        var tokenizer = new tokenizer$1(source);\n        var result = readImplicitGroup(tokenizer);\n\n        if (tokenizer.pos !== source.length) {\n            tokenizer.error('Unexpected input');\n        }\n\n        // reduce redundant groups with single group term\n        if (result.terms.length === 1 && result.terms[0].type === 'Group') {\n            result = result.terms[0];\n        }\n\n        return result;\n    }\n\n    // warm up parse to elimitate code branches that never execute\n    // fix soft deoptimizations (insufficient type feedback)\n    parse('[a&&<b>#|<\\'c\\'>*||e() f{2} /,(% g#{1,2} h{2,})]!');\n\n    var parse_1 = parse;\n\n    var noop$1 = function() {};\n\n    function ensureFunction(value) {\n        return typeof value === 'function' ? value : noop$1;\n    }\n\n    var walk = function(node, options, context) {\n        function walk(node) {\n            enter.call(context, node);\n\n            switch (node.type) {\n                case 'Group':\n                    node.terms.forEach(walk);\n                    break;\n\n                case 'Multiplier':\n                    walk(node.term);\n                    break;\n\n                case 'Type':\n                case 'Property':\n                case 'Keyword':\n                case 'AtKeyword':\n                case 'Function':\n                case 'String':\n                case 'Token':\n                case 'Comma':\n                    break;\n\n                default:\n                    throw new Error('Unknown type: ' + node.type);\n            }\n\n            leave.call(context, node);\n        }\n\n        var enter = noop$1;\n        var leave = noop$1;\n\n        if (typeof options === 'function') {\n            enter = options;\n        } else if (options) {\n            enter = ensureFunction(options.enter);\n            leave = ensureFunction(options.leave);\n        }\n\n        if (enter === noop$1 && leave === noop$1) {\n            throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\\'t a function');\n        }\n\n        walk(node);\n    };\n\n    var tokenStream = new TokenStream_1();\n    var astToTokens = {\n        decorator: function(handlers) {\n            var curNode = null;\n            var prev = { len: 0, node: null };\n            var nodes = [prev];\n            var buffer = '';\n\n            return {\n                children: handlers.children,\n                node: function(node) {\n                    var tmp = curNode;\n                    curNode = node;\n                    handlers.node.call(this, node);\n                    curNode = tmp;\n                },\n                chunk: function(chunk) {\n                    buffer += chunk;\n                    if (prev.node !== curNode) {\n                        nodes.push({\n                            len: chunk.length,\n                            node: curNode\n                        });\n                    } else {\n                        prev.len += chunk.length;\n                    }\n                },\n                result: function() {\n                    return prepareTokens(buffer, nodes);\n                }\n            };\n        }\n    };\n\n    function prepareTokens(str, nodes) {\n        var tokens = [];\n        var nodesOffset = 0;\n        var nodesIndex = 0;\n        var currentNode = nodes ? nodes[nodesIndex].node : null;\n\n        tokenizer(str, tokenStream);\n\n        while (!tokenStream.eof) {\n            if (nodes) {\n                while (nodesIndex < nodes.length && nodesOffset + nodes[nodesIndex].len <= tokenStream.tokenStart) {\n                    nodesOffset += nodes[nodesIndex++].len;\n                    currentNode = nodes[nodesIndex].node;\n                }\n            }\n\n            tokens.push({\n                type: tokenStream.tokenType,\n                value: tokenStream.getTokenValue(),\n                index: tokenStream.tokenIndex, // TODO: remove it, temporary solution\n                balance: tokenStream.balance[tokenStream.tokenIndex], // TODO: remove it, temporary solution\n                node: currentNode\n            });\n            tokenStream.next();\n            // console.log({ ...tokens[tokens.length - 1], node: undefined });\n        }\n\n        return tokens;\n    }\n\n    var prepareTokens_1 = function(value, syntax) {\n        if (typeof value === 'string') {\n            return prepareTokens(value, null);\n        }\n\n        return syntax.generate(value, astToTokens);\n    };\n\n    var MATCH = { type: 'Match' };\n    var MISMATCH = { type: 'Mismatch' };\n    var DISALLOW_EMPTY = { type: 'DisallowEmpty' };\n    var LEFTPARENTHESIS$1 = 40;  // (\n    var RIGHTPARENTHESIS$1 = 41; // )\n\n    function createCondition(match, thenBranch, elseBranch) {\n        // reduce node count\n        if (thenBranch === MATCH && elseBranch === MISMATCH) {\n            return match;\n        }\n\n        if (match === MATCH && thenBranch === MATCH && elseBranch === MATCH) {\n            return match;\n        }\n\n        if (match.type === 'If' && match.else === MISMATCH && thenBranch === MATCH) {\n            thenBranch = match.then;\n            match = match.match;\n        }\n\n        return {\n            type: 'If',\n            match: match,\n            then: thenBranch,\n            else: elseBranch\n        };\n    }\n\n    function isFunctionType(name) {\n        return (\n            name.length > 2 &&\n            name.charCodeAt(name.length - 2) === LEFTPARENTHESIS$1 &&\n            name.charCodeAt(name.length - 1) === RIGHTPARENTHESIS$1\n        );\n    }\n\n    function isEnumCapatible(term) {\n        return (\n            term.type === 'Keyword' ||\n            term.type === 'AtKeyword' ||\n            term.type === 'Function' ||\n            term.type === 'Type' && isFunctionType(term.name)\n        );\n    }\n\n    function buildGroupMatchGraph(combinator, terms, atLeastOneTermMatched) {\n        switch (combinator) {\n            case ' ':\n                // Juxtaposing components means that all of them must occur, in the given order.\n                //\n                // a b c\n                // =\n                // match a\n                //   then match b\n                //     then match c\n                //       then MATCH\n                //       else MISMATCH\n                //     else MISMATCH\n                //   else MISMATCH\n                var result = MATCH;\n\n                for (var i = terms.length - 1; i >= 0; i--) {\n                    var term = terms[i];\n\n                    result = createCondition(\n                        term,\n                        result,\n                        MISMATCH\n                    );\n                }\n                return result;\n\n            case '|':\n                // A bar (|) separates two or more alternatives: exactly one of them must occur.\n                //\n                // a | b | c\n                // =\n                // match a\n                //   then MATCH\n                //   else match b\n                //     then MATCH\n                //     else match c\n                //       then MATCH\n                //       else MISMATCH\n\n                var result = MISMATCH;\n                var map = null;\n\n                for (var i = terms.length - 1; i >= 0; i--) {\n                    var term = terms[i];\n\n                    // reduce sequence of keywords into a Enum\n                    if (isEnumCapatible(term)) {\n                        if (map === null && i > 0 && isEnumCapatible(terms[i - 1])) {\n                            map = Object.create(null);\n                            result = createCondition(\n                                {\n                                    type: 'Enum',\n                                    map: map\n                                },\n                                MATCH,\n                                result\n                            );\n                        }\n\n                        if (map !== null) {\n                            var key = (isFunctionType(term.name) ? term.name.slice(0, -1) : term.name).toLowerCase();\n                            if (key in map === false) {\n                                map[key] = term;\n                                continue;\n                            }\n                        }\n                    }\n\n                    map = null;\n\n                    // create a new conditonal node\n                    result = createCondition(\n                        term,\n                        MATCH,\n                        result\n                    );\n                }\n                return result;\n\n            case '&&':\n                // A double ampersand (&&) separates two or more components,\n                // all of which must occur, in any order.\n\n                // Use MatchOnce for groups with a large number of terms,\n                // since &&-groups produces at least N!-node trees\n                if (terms.length > 5) {\n                    return {\n                        type: 'MatchOnce',\n                        terms: terms,\n                        all: true\n                    };\n                }\n\n                // Use a combination tree for groups with small number of terms\n                //\n                // a && b && c\n                // =\n                // match a\n                //   then [b && c]\n                //   else match b\n                //     then [a && c]\n                //     else match c\n                //       then [a && b]\n                //       else MISMATCH\n                //\n                // a && b\n                // =\n                // match a\n                //   then match b\n                //     then MATCH\n                //     else MISMATCH\n                //   else match b\n                //     then match a\n                //       then MATCH\n                //       else MISMATCH\n                //     else MISMATCH\n                var result = MISMATCH;\n\n                for (var i = terms.length - 1; i >= 0; i--) {\n                    var term = terms[i];\n                    var thenClause;\n\n                    if (terms.length > 1) {\n                        thenClause = buildGroupMatchGraph(\n                            combinator,\n                            terms.filter(function(newGroupTerm) {\n                                return newGroupTerm !== term;\n                            }),\n                            false\n                        );\n                    } else {\n                        thenClause = MATCH;\n                    }\n\n                    result = createCondition(\n                        term,\n                        thenClause,\n                        result\n                    );\n                }\n                return result;\n\n            case '||':\n                // A double bar (||) separates two or more options:\n                // one or more of them must occur, in any order.\n\n                // Use MatchOnce for groups with a large number of terms,\n                // since ||-groups produces at least N!-node trees\n                if (terms.length > 5) {\n                    return {\n                        type: 'MatchOnce',\n                        terms: terms,\n                        all: false\n                    };\n                }\n\n                // Use a combination tree for groups with small number of terms\n                //\n                // a || b || c\n                // =\n                // match a\n                //   then [b || c]\n                //   else match b\n                //     then [a || c]\n                //     else match c\n                //       then [a || b]\n                //       else MISMATCH\n                //\n                // a || b\n                // =\n                // match a\n                //   then match b\n                //     then MATCH\n                //     else MATCH\n                //   else match b\n                //     then match a\n                //       then MATCH\n                //       else MATCH\n                //     else MISMATCH\n                var result = atLeastOneTermMatched ? MATCH : MISMATCH;\n\n                for (var i = terms.length - 1; i >= 0; i--) {\n                    var term = terms[i];\n                    var thenClause;\n\n                    if (terms.length > 1) {\n                        thenClause = buildGroupMatchGraph(\n                            combinator,\n                            terms.filter(function(newGroupTerm) {\n                                return newGroupTerm !== term;\n                            }),\n                            true\n                        );\n                    } else {\n                        thenClause = MATCH;\n                    }\n\n                    result = createCondition(\n                        term,\n                        thenClause,\n                        result\n                    );\n                }\n                return result;\n        }\n    }\n\n    function buildMultiplierMatchGraph(node) {\n        var result = MATCH;\n        var matchTerm = buildMatchGraph(node.term);\n\n        if (node.max === 0) {\n            // disable repeating of empty match to prevent infinite loop\n            matchTerm = createCondition(\n                matchTerm,\n                DISALLOW_EMPTY,\n                MISMATCH\n            );\n\n            // an occurrence count is not limited, make a cycle;\n            // to collect more terms on each following matching mismatch\n            result = createCondition(\n                matchTerm,\n                null, // will be a loop\n                MISMATCH\n            );\n\n            result.then = createCondition(\n                MATCH,\n                MATCH,\n                result // make a loop\n            );\n\n            if (node.comma) {\n                result.then.else = createCondition(\n                    { type: 'Comma', syntax: node },\n                    result,\n                    MISMATCH\n                );\n            }\n        } else {\n            // create a match node chain for [min .. max] interval with optional matches\n            for (var i = node.min || 1; i <= node.max; i++) {\n                if (node.comma && result !== MATCH) {\n                    result = createCondition(\n                        { type: 'Comma', syntax: node },\n                        result,\n                        MISMATCH\n                    );\n                }\n\n                result = createCondition(\n                    matchTerm,\n                    createCondition(\n                        MATCH,\n                        MATCH,\n                        result\n                    ),\n                    MISMATCH\n                );\n            }\n        }\n\n        if (node.min === 0) {\n            // allow zero match\n            result = createCondition(\n                MATCH,\n                MATCH,\n                result\n            );\n        } else {\n            // create a match node chain to collect [0 ... min - 1] required matches\n            for (var i = 0; i < node.min - 1; i++) {\n                if (node.comma && result !== MATCH) {\n                    result = createCondition(\n                        { type: 'Comma', syntax: node },\n                        result,\n                        MISMATCH\n                    );\n                }\n\n                result = createCondition(\n                    matchTerm,\n                    result,\n                    MISMATCH\n                );\n            }\n        }\n\n        return result;\n    }\n\n    function buildMatchGraph(node) {\n        if (typeof node === 'function') {\n            return {\n                type: 'Generic',\n                fn: node\n            };\n        }\n\n        switch (node.type) {\n            case 'Group':\n                var result = buildGroupMatchGraph(\n                    node.combinator,\n                    node.terms.map(buildMatchGraph),\n                    false\n                );\n\n                if (node.disallowEmpty) {\n                    result = createCondition(\n                        result,\n                        DISALLOW_EMPTY,\n                        MISMATCH\n                    );\n                }\n\n                return result;\n\n            case 'Multiplier':\n                return buildMultiplierMatchGraph(node);\n\n            case 'Type':\n            case 'Property':\n                return {\n                    type: node.type,\n                    name: node.name,\n                    syntax: node\n                };\n\n            case 'Keyword':\n                return {\n                    type: node.type,\n                    name: node.name.toLowerCase(),\n                    syntax: node\n                };\n\n            case 'AtKeyword':\n                return {\n                    type: node.type,\n                    name: '@' + node.name.toLowerCase(),\n                    syntax: node\n                };\n\n            case 'Function':\n                return {\n                    type: node.type,\n                    name: node.name.toLowerCase() + '(',\n                    syntax: node\n                };\n\n            case 'String':\n                // convert a one char length String to a Token\n                if (node.value.length === 3) {\n                    return {\n                        type: 'Token',\n                        value: node.value.charAt(1),\n                        syntax: node\n                    };\n                }\n\n                // otherwise use it as is\n                return {\n                    type: node.type,\n                    value: node.value.substr(1, node.value.length - 2).replace(/\\\\'/g, '\\''),\n                    syntax: node\n                };\n\n            case 'Token':\n                return {\n                    type: node.type,\n                    value: node.value,\n                    syntax: node\n                };\n\n            case 'Comma':\n                return {\n                    type: node.type,\n                    syntax: node\n                };\n\n            default:\n                throw new Error('Unknown node type:', node.type);\n        }\n    }\n\n    var matchGraph = {\n        MATCH: MATCH,\n        MISMATCH: MISMATCH,\n        DISALLOW_EMPTY: DISALLOW_EMPTY,\n        buildMatchGraph: function(syntaxTree, ref) {\n            if (typeof syntaxTree === 'string') {\n                syntaxTree = parse_1(syntaxTree);\n            }\n\n            return {\n                type: 'MatchGraph',\n                match: buildMatchGraph(syntaxTree),\n                syntax: ref || null,\n                source: syntaxTree\n            };\n        }\n    };\n\n    var hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\n    var MATCH$1 = matchGraph.MATCH;\n    var MISMATCH$1 = matchGraph.MISMATCH;\n    var DISALLOW_EMPTY$1 = matchGraph.DISALLOW_EMPTY;\n    var TYPE$6 = _const.TYPE;\n\n    var STUB = 0;\n    var TOKEN = 1;\n    var OPEN_SYNTAX = 2;\n    var CLOSE_SYNTAX = 3;\n\n    var EXIT_REASON_MATCH = 'Match';\n    var EXIT_REASON_MISMATCH = 'Mismatch';\n    var EXIT_REASON_ITERATION_LIMIT = 'Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)';\n\n    var ITERATION_LIMIT = 15000;\n    var totalIterationCount = 0;\n\n    function reverseList(list) {\n        var prev = null;\n        var next = null;\n        var item = list;\n\n        while (item !== null) {\n            next = item.prev;\n            item.prev = prev;\n            prev = item;\n            item = next;\n        }\n\n        return prev;\n    }\n\n    function areStringsEqualCaseInsensitive(testStr, referenceStr) {\n        if (testStr.length !== referenceStr.length) {\n            return false;\n        }\n\n        for (var i = 0; i < testStr.length; i++) {\n            var testCode = testStr.charCodeAt(i);\n            var referenceCode = referenceStr.charCodeAt(i);\n\n            // testCode.toLowerCase() for U+0041 LATIN CAPITAL LETTER A (A) .. U+005A LATIN CAPITAL LETTER Z (Z).\n            if (testCode >= 0x0041 && testCode <= 0x005A) {\n                testCode = testCode | 32;\n            }\n\n            if (testCode !== referenceCode) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    function isCommaContextStart(token) {\n        if (token === null) {\n            return true;\n        }\n\n        return (\n            token.type === TYPE$6.Comma ||\n            token.type === TYPE$6.Function ||\n            token.type === TYPE$6.LeftParenthesis ||\n            token.type === TYPE$6.LeftSquareBracket ||\n            token.type === TYPE$6.LeftCurlyBracket ||\n            token.type === TYPE$6.Delim\n        );\n    }\n\n    function isCommaContextEnd(token) {\n        if (token === null) {\n            return true;\n        }\n\n        return (\n            token.type === TYPE$6.RightParenthesis ||\n            token.type === TYPE$6.RightSquareBracket ||\n            token.type === TYPE$6.RightCurlyBracket ||\n            token.type === TYPE$6.Delim\n        );\n    }\n\n    function internalMatch(tokens, state, syntaxes) {\n        function moveToNextToken() {\n            do {\n                tokenIndex++;\n                token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;\n            } while (token !== null && (token.type === TYPE$6.WhiteSpace || token.type === TYPE$6.Comment));\n        }\n\n        function getNextToken(offset) {\n            var nextIndex = tokenIndex + offset;\n\n            return nextIndex < tokens.length ? tokens[nextIndex] : null;\n        }\n\n        function stateSnapshotFromSyntax(nextState, prev) {\n            return {\n                nextState: nextState,\n                matchStack: matchStack,\n                syntaxStack: syntaxStack,\n                thenStack: thenStack,\n                tokenIndex: tokenIndex,\n                prev: prev\n            };\n        }\n\n        function pushThenStack(nextState) {\n            thenStack = {\n                nextState: nextState,\n                matchStack: matchStack,\n                syntaxStack: syntaxStack,\n                prev: thenStack\n            };\n        }\n\n        function pushElseStack(nextState) {\n            elseStack = stateSnapshotFromSyntax(nextState, elseStack);\n        }\n\n        function addTokenToMatch() {\n            matchStack = {\n                type: TOKEN,\n                syntax: state.syntax,\n                token: token,\n                prev: matchStack\n            };\n\n            moveToNextToken();\n            syntaxStash = null;\n\n            if (tokenIndex > longestMatch) {\n                longestMatch = tokenIndex;\n            }\n        }\n\n        function openSyntax() {\n            syntaxStack = {\n                syntax: state.syntax,\n                opts: state.syntax.opts || (syntaxStack !== null && syntaxStack.opts) || null,\n                prev: syntaxStack\n            };\n\n            matchStack = {\n                type: OPEN_SYNTAX,\n                syntax: state.syntax,\n                token: matchStack.token,\n                prev: matchStack\n            };\n        }\n\n        function closeSyntax() {\n            if (matchStack.type === OPEN_SYNTAX) {\n                matchStack = matchStack.prev;\n            } else {\n                matchStack = {\n                    type: CLOSE_SYNTAX,\n                    syntax: syntaxStack.syntax,\n                    token: matchStack.token,\n                    prev: matchStack\n                };\n            }\n\n            syntaxStack = syntaxStack.prev;\n        }\n\n        var syntaxStack = null;\n        var thenStack = null;\n        var elseStack = null;\n\n        // null \u2013 stashing allowed, nothing stashed\n        // false \u2013 stashing disabled, nothing stashed\n        // anithing else \u2013 fail stashable syntaxes, some syntax stashed\n        var syntaxStash = null;\n\n        var iterationCount = 0; // count iterations and prevent infinite loop\n        var exitReason = null;\n\n        var token = null;\n        var tokenIndex = -1;\n        var longestMatch = 0;\n        var matchStack = {\n            type: STUB,\n            syntax: null,\n            token: null,\n            prev: null\n        };\n\n        moveToNextToken();\n\n        while (exitReason === null && ++iterationCount < ITERATION_LIMIT) {\n            // function mapList(list, fn) {\n            //     var result = [];\n            //     while (list) {\n            //         result.unshift(fn(list));\n            //         list = list.prev;\n            //     }\n            //     return result;\n            // }\n            // console.log('--\\n',\n            //     '#' + iterationCount,\n            //     require('util').inspect({\n            //         match: mapList(matchStack, x => x.type === TOKEN ? x.token && x.token.value : x.syntax ? ({ [OPEN_SYNTAX]: '<', [CLOSE_SYNTAX]: '</' }[x.type] || x.type) + '!' + x.syntax.name : null),\n            //         token: token && token.value,\n            //         tokenIndex,\n            //         syntax: syntax.type + (syntax.id ? ' #' + syntax.id : '')\n            //     }, { depth: null })\n            // );\n            switch (state.type) {\n                case 'Match':\n                    if (thenStack === null) {\n                        // turn to MISMATCH when some tokens left unmatched\n                        if (token !== null) {\n                            // doesn't mismatch if just one token left and it's an IE hack\n                            if (tokenIndex !== tokens.length - 1 || (token.value !== '\\\\0' && token.value !== '\\\\9')) {\n                                state = MISMATCH$1;\n                                break;\n                            }\n                        }\n\n                        // break the main loop, return a result - MATCH\n                        exitReason = EXIT_REASON_MATCH;\n                        break;\n                    }\n\n                    // go to next syntax (`then` branch)\n                    state = thenStack.nextState;\n\n                    // check match is not empty\n                    if (state === DISALLOW_EMPTY$1) {\n                        if (thenStack.matchStack === matchStack) {\n                            state = MISMATCH$1;\n                            break;\n                        } else {\n                            state = MATCH$1;\n                        }\n                    }\n\n                    // close syntax if needed\n                    while (thenStack.syntaxStack !== syntaxStack) {\n                        closeSyntax();\n                    }\n\n                    // pop stack\n                    thenStack = thenStack.prev;\n                    break;\n\n                case 'Mismatch':\n                    // when some syntax is stashed\n                    if (syntaxStash !== null && syntaxStash !== false) {\n                        // there is no else branches or a branch reduce match stack\n                        if (elseStack === null || tokenIndex > elseStack.tokenIndex) {\n                            // restore state from the stash\n                            elseStack = syntaxStash;\n                            syntaxStash = false; // disable stashing\n                        }\n                    } else if (elseStack === null) {\n                        // no else branches -> break the main loop\n                        // return a result - MISMATCH\n                        exitReason = EXIT_REASON_MISMATCH;\n                        break;\n                    }\n\n                    // go to next syntax (`else` branch)\n                    state = elseStack.nextState;\n\n                    // restore all the rest stack states\n                    thenStack = elseStack.thenStack;\n                    syntaxStack = elseStack.syntaxStack;\n                    matchStack = elseStack.matchStack;\n                    tokenIndex = elseStack.tokenIndex;\n                    token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;\n\n                    // pop stack\n                    elseStack = elseStack.prev;\n                    break;\n\n                case 'MatchGraph':\n                    state = state.match;\n                    break;\n\n                case 'If':\n                    // IMPORTANT: else stack push must go first,\n                    // since it stores the state of thenStack before changes\n                    if (state.else !== MISMATCH$1) {\n                        pushElseStack(state.else);\n                    }\n\n                    if (state.then !== MATCH$1) {\n                        pushThenStack(state.then);\n                    }\n\n                    state = state.match;\n                    break;\n\n                case 'MatchOnce':\n                    state = {\n                        type: 'MatchOnceBuffer',\n                        syntax: state,\n                        index: 0,\n                        mask: 0\n                    };\n                    break;\n\n                case 'MatchOnceBuffer':\n                    var terms = state.syntax.terms;\n\n                    if (state.index === terms.length) {\n                        // no matches at all or it's required all terms to be matched\n                        if (state.mask === 0 || state.syntax.all) {\n                            state = MISMATCH$1;\n                            break;\n                        }\n\n                        // a partial match is ok\n                        state = MATCH$1;\n                        break;\n                    }\n\n                    // all terms are matched\n                    if (state.mask === (1 << terms.length) - 1) {\n                        state = MATCH$1;\n                        break;\n                    }\n\n                    for (; state.index < terms.length; state.index++) {\n                        var matchFlag = 1 << state.index;\n\n                        if ((state.mask & matchFlag) === 0) {\n                            // IMPORTANT: else stack push must go first,\n                            // since it stores the state of thenStack before changes\n                            pushElseStack(state);\n                            pushThenStack({\n                                type: 'AddMatchOnce',\n                                syntax: state.syntax,\n                                mask: state.mask | matchFlag\n                            });\n\n                            // match\n                            state = terms[state.index++];\n                            break;\n                        }\n                    }\n                    break;\n\n                case 'AddMatchOnce':\n                    state = {\n                        type: 'MatchOnceBuffer',\n                        syntax: state.syntax,\n                        index: 0,\n                        mask: state.mask\n                    };\n                    break;\n\n                case 'Enum':\n                    if (token !== null) {\n                        var name = token.value.toLowerCase();\n\n                        // drop \\0 and \\9 hack from keyword name\n                        if (name.indexOf('\\\\') !== -1) {\n                            name = name.replace(/\\\\[09].*$/, '');\n                        }\n\n                        if (hasOwnProperty$1.call(state.map, name)) {\n                            state = state.map[name];\n                            break;\n                        }\n                    }\n\n                    state = MISMATCH$1;\n                    break;\n\n                case 'Generic':\n                    var opts = syntaxStack !== null ? syntaxStack.opts : null;\n                    var lastTokenIndex = tokenIndex + Math.floor(state.fn(token, getNextToken, opts));\n\n                    if (!isNaN(lastTokenIndex) && lastTokenIndex > tokenIndex) {\n                        while (tokenIndex < lastTokenIndex) {\n                            addTokenToMatch();\n                        }\n\n                        state = MATCH$1;\n                    } else {\n                        state = MISMATCH$1;\n                    }\n\n                    break;\n\n                case 'Type':\n                case 'Property':\n                    var syntaxDict = state.type === 'Type' ? 'types' : 'properties';\n                    var dictSyntax = hasOwnProperty$1.call(syntaxes, syntaxDict) ? syntaxes[syntaxDict][state.name] : null;\n\n                    if (!dictSyntax || !dictSyntax.match) {\n                        throw new Error(\n                            'Bad syntax reference: ' +\n                            (state.type === 'Type'\n                                ? '<' + state.name + '>'\n                                : '<\\'' + state.name + '\\'>')\n                        );\n                    }\n\n                    // stash a syntax for types with low priority\n                    if (syntaxStash !== false && token !== null && state.type === 'Type') {\n                        var lowPriorityMatching =\n                            // https://drafts.csswg.org/css-values-4/#custom-idents\n                            // When parsing positionally-ambiguous keywords in a property value, a <custom-ident> production\n                            // can only claim the keyword if no other unfulfilled production can claim it.\n                            (state.name === 'custom-ident' && token.type === TYPE$6.Ident) ||\n\n                            // https://drafts.csswg.org/css-values-4/#lengths\n                            // ... if a `0` could be parsed as either a <number> or a <length> in a property (such as line-height),\n                            // it must parse as a <number>\n                            (state.name === 'length' && token.value === '0');\n\n                        if (lowPriorityMatching) {\n                            if (syntaxStash === null) {\n                                syntaxStash = stateSnapshotFromSyntax(state, elseStack);\n                            }\n\n                            state = MISMATCH$1;\n                            break;\n                        }\n                    }\n\n                    openSyntax();\n                    state = dictSyntax.match;\n                    break;\n\n                case 'Keyword':\n                    var name = state.name;\n\n                    if (token !== null) {\n                        var keywordName = token.value;\n\n                        // drop \\0 and \\9 hack from keyword name\n                        if (keywordName.indexOf('\\\\') !== -1) {\n                            keywordName = keywordName.replace(/\\\\[09].*$/, '');\n                        }\n\n                        if (areStringsEqualCaseInsensitive(keywordName, name)) {\n                            addTokenToMatch();\n                            state = MATCH$1;\n                            break;\n                        }\n                    }\n\n                    state = MISMATCH$1;\n                    break;\n\n                case 'AtKeyword':\n                case 'Function':\n                    if (token !== null && areStringsEqualCaseInsensitive(token.value, state.name)) {\n                        addTokenToMatch();\n                        state = MATCH$1;\n                        break;\n                    }\n\n                    state = MISMATCH$1;\n                    break;\n\n                case 'Token':\n                    if (token !== null && token.value === state.value) {\n                        addTokenToMatch();\n                        state = MATCH$1;\n                        break;\n                    }\n\n                    state = MISMATCH$1;\n                    break;\n\n                case 'Comma':\n                    if (token !== null && token.type === TYPE$6.Comma) {\n                        if (isCommaContextStart(matchStack.token)) {\n                            state = MISMATCH$1;\n                        } else {\n                            addTokenToMatch();\n                            state = isCommaContextEnd(token) ? MISMATCH$1 : MATCH$1;\n                        }\n                    } else {\n                        state = isCommaContextStart(matchStack.token) || isCommaContextEnd(token) ? MATCH$1 : MISMATCH$1;\n                    }\n\n                    break;\n\n                case 'String':\n                    var string = '';\n\n                    for (var lastTokenIndex = tokenIndex; lastTokenIndex < tokens.length && string.length < state.value.length; lastTokenIndex++) {\n                        string += tokens[lastTokenIndex].value;\n                    }\n\n                    if (areStringsEqualCaseInsensitive(string, state.value)) {\n                        while (tokenIndex < lastTokenIndex) {\n                            addTokenToMatch();\n                        }\n\n                        state = MATCH$1;\n                    } else {\n                        state = MISMATCH$1;\n                    }\n\n                    break;\n\n                default:\n                    throw new Error('Unknown node type: ' + state.type);\n            }\n        }\n\n        totalIterationCount += iterationCount;\n\n        switch (exitReason) {\n            case null:\n                console.warn('[csstree-match] BREAK after ' + ITERATION_LIMIT + ' iterations');\n                exitReason = EXIT_REASON_ITERATION_LIMIT;\n                matchStack = null;\n                break;\n\n            case EXIT_REASON_MATCH:\n                while (syntaxStack !== null) {\n                    closeSyntax();\n                }\n                break;\n\n            default:\n                matchStack = null;\n        }\n\n        return {\n            tokens: tokens,\n            reason: exitReason,\n            iterations: iterationCount,\n            match: matchStack,\n            longestMatch: longestMatch\n        };\n    }\n\n    function matchAsList(tokens, matchGraph, syntaxes) {\n        var matchResult = internalMatch(tokens, matchGraph, syntaxes || {});\n\n        if (matchResult.match !== null) {\n            var item = reverseList(matchResult.match).prev;\n\n            matchResult.match = [];\n\n            while (item !== null) {\n                switch (item.type) {\n                    case STUB:\n                        break;\n\n                    case OPEN_SYNTAX:\n                    case CLOSE_SYNTAX:\n                        matchResult.match.push({\n                            type: item.type,\n                            syntax: item.syntax\n                        });\n                        break;\n\n                    default:\n                        matchResult.match.push({\n                            token: item.token.value,\n                            node: item.token.node\n                        });\n                        break;\n                }\n\n                item = item.prev;\n            }\n        }\n\n        return matchResult;\n    }\n\n    function matchAsTree(tokens, matchGraph, syntaxes) {\n        var matchResult = internalMatch(tokens, matchGraph, syntaxes || {});\n\n        if (matchResult.match === null) {\n            return matchResult;\n        }\n\n        var item = matchResult.match;\n        var host = matchResult.match = {\n            syntax: matchGraph.syntax || null,\n            match: []\n        };\n        var hostStack = [host];\n\n        // revert a list and start with 2nd item since 1st is a stub item\n        item = reverseList(item).prev;\n\n        // build a tree\n        while (item !== null) {\n            switch (item.type) {\n                case OPEN_SYNTAX:\n                    host.match.push(host = {\n                        syntax: item.syntax,\n                        match: []\n                    });\n                    hostStack.push(host);\n                    break;\n\n                case CLOSE_SYNTAX:\n                    hostStack.pop();\n                    host = hostStack[hostStack.length - 1];\n                    break;\n\n                default:\n                    host.match.push({\n                        syntax: item.syntax || null,\n                        token: item.token.value,\n                        node: item.token.node\n                    });\n            }\n\n            item = item.prev;\n        }\n\n        return matchResult;\n    }\n\n    var match = {\n        matchAsList: matchAsList,\n        matchAsTree: matchAsTree,\n        getTotalIterationCount: function() {\n            return totalIterationCount;\n        }\n    };\n\n    function getTrace(node) {\n        function shouldPutToTrace(syntax) {\n            if (syntax === null) {\n                return false;\n            }\n\n            return (\n                syntax.type === 'Type' ||\n                syntax.type === 'Property' ||\n                syntax.type === 'Keyword'\n            );\n        }\n\n        function hasMatch(matchNode) {\n            if (Array.isArray(matchNode.match)) {\n                // use for-loop for better perfomance\n                for (var i = 0; i < matchNode.match.length; i++) {\n                    if (hasMatch(matchNode.match[i])) {\n                        if (shouldPutToTrace(matchNode.syntax)) {\n                            result.unshift(matchNode.syntax);\n                        }\n\n                        return true;\n                    }\n                }\n            } else if (matchNode.node === node) {\n                result = shouldPutToTrace(matchNode.syntax)\n                    ? [matchNode.syntax]\n                    : [];\n\n                return true;\n            }\n\n            return false;\n        }\n\n        var result = null;\n\n        if (this.matched !== null) {\n            hasMatch(this.matched);\n        }\n\n        return result;\n    }\n\n    function testNode(match, node, fn) {\n        var trace = getTrace.call(match, node);\n\n        if (trace === null) {\n            return false;\n        }\n\n        return trace.some(fn);\n    }\n\n    function isType(node, type) {\n        return testNode(this, node, function(matchNode) {\n            return matchNode.type === 'Type' && matchNode.name === type;\n        });\n    }\n\n    function isProperty(node, property) {\n        return testNode(this, node, function(matchNode) {\n            return matchNode.type === 'Property' && matchNode.name === property;\n        });\n    }\n\n    function isKeyword(node) {\n        return testNode(this, node, function(matchNode) {\n            return matchNode.type === 'Keyword';\n        });\n    }\n\n    var trace = {\n        getTrace: getTrace,\n        isType: isType,\n        isProperty: isProperty,\n        isKeyword: isKeyword\n    };\n\n    function getFirstMatchNode(matchNode) {\n        if ('node' in matchNode) {\n            return matchNode.node;\n        }\n\n        return getFirstMatchNode(matchNode.match[0]);\n    }\n\n    function getLastMatchNode(matchNode) {\n        if ('node' in matchNode) {\n            return matchNode.node;\n        }\n\n        return getLastMatchNode(matchNode.match[matchNode.match.length - 1]);\n    }\n\n    function matchFragments(lexer, ast, match, type, name) {\n        function findFragments(matchNode) {\n            if (matchNode.syntax !== null &&\n                matchNode.syntax.type === type &&\n                matchNode.syntax.name === name) {\n                var start = getFirstMatchNode(matchNode);\n                var end = getLastMatchNode(matchNode);\n\n                lexer.syntax.walk(ast, function(node, item, list) {\n                    if (node === start) {\n                        var nodes = new List_1();\n\n                        do {\n                            nodes.appendData(item.data);\n\n                            if (item.data === end) {\n                                break;\n                            }\n\n                            item = item.next;\n                        } while (item !== null);\n\n                        fragments.push({\n                            parent: list,\n                            nodes: nodes\n                        });\n                    }\n                });\n            }\n\n            if (Array.isArray(matchNode.match)) {\n                matchNode.match.forEach(findFragments);\n            }\n        }\n\n        var fragments = [];\n\n        if (match.matched !== null) {\n            findFragments(match.matched);\n        }\n\n        return fragments;\n    }\n\n    var search = {\n        matchFragments: matchFragments\n    };\n\n    var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\n    function isValidNumber(value) {\n        // Number.isInteger(value) && value >= 0\n        return (\n            typeof value === 'number' &&\n            isFinite(value) &&\n            Math.floor(value) === value &&\n            value >= 0\n        );\n    }\n\n    function isValidLocation(loc) {\n        return (\n            Boolean(loc) &&\n            isValidNumber(loc.offset) &&\n            isValidNumber(loc.line) &&\n            isValidNumber(loc.column)\n        );\n    }\n\n    function createNodeStructureChecker(type, fields) {\n        return function checkNode(node, warn) {\n            if (!node || node.constructor !== Object) {\n                return warn(node, 'Type of node should be an Object');\n            }\n\n            for (var key in node) {\n                var valid = true;\n\n                if (hasOwnProperty$2.call(node, key) === false) {\n                    continue;\n                }\n\n                if (key === 'type') {\n                    if (node.type !== type) {\n                        warn(node, 'Wrong node type `' + node.type + '`, expected `' + type + '`');\n                    }\n                } else if (key === 'loc') {\n                    if (node.loc === null) {\n                        continue;\n                    } else if (node.loc && node.loc.constructor === Object) {\n                        if (typeof node.loc.source !== 'string') {\n                            key += '.source';\n                        } else if (!isValidLocation(node.loc.start)) {\n                            key += '.start';\n                        } else if (!isValidLocation(node.loc.end)) {\n                            key += '.end';\n                        } else {\n                            continue;\n                        }\n                    }\n\n                    valid = false;\n                } else if (fields.hasOwnProperty(key)) {\n                    for (var i = 0, valid = false; !valid && i < fields[key].length; i++) {\n                        var fieldType = fields[key][i];\n\n                        switch (fieldType) {\n                            case String:\n                                valid = typeof node[key] === 'string';\n                                break;\n\n                            case Boolean:\n                                valid = typeof node[key] === 'boolean';\n                                break;\n\n                            case null:\n                                valid = node[key] === null;\n                                break;\n\n                            default:\n                                if (typeof fieldType === 'string') {\n                                    valid = node[key] && node[key].type === fieldType;\n                                } else if (Array.isArray(fieldType)) {\n                                    valid = node[key] instanceof List_1;\n                                }\n                        }\n                    }\n                } else {\n                    warn(node, 'Unknown field `' + key + '` for ' + type + ' node type');\n                }\n\n                if (!valid) {\n                    warn(node, 'Bad value for `' + type + '.' + key + '`');\n                }\n            }\n\n            for (var key in fields) {\n                if (hasOwnProperty$2.call(fields, key) &&\n                    hasOwnProperty$2.call(node, key) === false) {\n                    warn(node, 'Field `' + type + '.' + key + '` is missed');\n                }\n            }\n        };\n    }\n\n    function processStructure(name, nodeType) {\n        var structure = nodeType.structure;\n        var fields = {\n            type: String,\n            loc: true\n        };\n        var docs = {\n            type: '\"' + name + '\"'\n        };\n\n        for (var key in structure) {\n            if (hasOwnProperty$2.call(structure, key) === false) {\n                continue;\n            }\n\n            var docsTypes = [];\n            var fieldTypes = fields[key] = Array.isArray(structure[key])\n                ? structure[key].slice()\n                : [structure[key]];\n\n            for (var i = 0; i < fieldTypes.length; i++) {\n                var fieldType = fieldTypes[i];\n                if (fieldType === String || fieldType === Boolean) {\n                    docsTypes.push(fieldType.name);\n                } else if (fieldType === null) {\n                    docsTypes.push('null');\n                } else if (typeof fieldType === 'string') {\n                    docsTypes.push('<' + fieldType + '>');\n                } else if (Array.isArray(fieldType)) {\n                    docsTypes.push('List'); // TODO: use type enum\n                } else {\n                    throw new Error('Wrong value `' + fieldType + '` in `' + name + '.' + key + '` structure definition');\n                }\n            }\n\n            docs[key] = docsTypes.join(' | ');\n        }\n\n        return {\n            docs: docs,\n            check: createNodeStructureChecker(name, fields)\n        };\n    }\n\n    var structure = {\n        getStructureFromConfig: function(config) {\n            var structure = {};\n\n            if (config.node) {\n                for (var name in config.node) {\n                    if (hasOwnProperty$2.call(config.node, name)) {\n                        var nodeType = config.node[name];\n\n                        if (nodeType.structure) {\n                            structure[name] = processStructure(name, nodeType);\n                        } else {\n                            throw new Error('Missed `structure` field in `' + name + '` node type definition');\n                        }\n                    }\n                }\n            }\n\n            return structure;\n        }\n    };\n\n    var SyntaxReferenceError$1 = error.SyntaxReferenceError;\n    var MatchError$1 = error.MatchError;\n\n\n\n\n\n\n    var buildMatchGraph$1 = matchGraph.buildMatchGraph;\n    var matchAsTree$1 = match.matchAsTree;\n\n\n    var getStructureFromConfig = structure.getStructureFromConfig;\n    var cssWideKeywords$1 = buildMatchGraph$1('inherit | initial | unset');\n    var cssWideKeywordsWithExpression = buildMatchGraph$1('inherit | initial | unset | <-ms-legacy-expression>');\n\n    function dumpMapSyntax(map, compact, syntaxAsAst) {\n        var result = {};\n\n        for (var name in map) {\n            if (map[name].syntax) {\n                result[name] = syntaxAsAst\n                    ? map[name].syntax\n                    : generate_1(map[name].syntax, { compact: compact });\n            }\n        }\n\n        return result;\n    }\n\n    function valueHasVar(tokens) {\n        for (var i = 0; i < tokens.length; i++) {\n            if (tokens[i].value.toLowerCase() === 'var(') {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    function buildMatchResult(match, error, iterations) {\n        return {\n            matched: match,\n            iterations: iterations,\n            error: error,\n            getTrace: trace.getTrace,\n            isType: trace.isType,\n            isProperty: trace.isProperty,\n            isKeyword: trace.isKeyword\n        };\n    }\n\n    function matchSyntax(lexer, syntax, value, useCommon) {\n        var tokens = prepareTokens_1(value, lexer.syntax);\n        var result;\n\n        if (valueHasVar(tokens)) {\n            return buildMatchResult(null, new Error('Matching for a tree with var() is not supported'));\n        }\n\n        if (useCommon) {\n            result = matchAsTree$1(tokens, lexer.valueCommonSyntax, lexer);\n        }\n\n        if (!useCommon || !result.match) {\n            result = matchAsTree$1(tokens, syntax.match, lexer);\n            if (!result.match) {\n                return buildMatchResult(\n                    null,\n                    new MatchError$1(result.reason, syntax.syntax, value, result),\n                    result.iterations\n                );\n            }\n        }\n\n        return buildMatchResult(result.match, null, result.iterations);\n    }\n\n    var Lexer = function(config, syntax, structure) {\n        this.valueCommonSyntax = cssWideKeywords$1;\n        this.syntax = syntax;\n        this.generic = false;\n        this.atrules = {};\n        this.properties = {};\n        this.types = {};\n        this.structure = structure || getStructureFromConfig(config);\n\n        if (config) {\n            if (config.types) {\n                for (var name in config.types) {\n                    this.addType_(name, config.types[name]);\n                }\n            }\n\n            if (config.generic) {\n                this.generic = true;\n                for (var name in generic) {\n                    this.addType_(name, generic[name]);\n                }\n            }\n\n            if (config.atrules) {\n                for (var name in config.atrules) {\n                    this.addAtrule_(name, config.atrules[name]);\n                }\n            }\n\n            if (config.properties) {\n                for (var name in config.properties) {\n                    this.addProperty_(name, config.properties[name]);\n                }\n            }\n        }\n    };\n\n    Lexer.prototype = {\n        structure: {},\n        checkStructure: function(ast) {\n            function collectWarning(node, message) {\n                warns.push({\n                    node: node,\n                    message: message\n                });\n            }\n\n            var structure = this.structure;\n            var warns = [];\n\n            this.syntax.walk(ast, function(node) {\n                if (structure.hasOwnProperty(node.type)) {\n                    structure[node.type].check(node, collectWarning);\n                } else {\n                    collectWarning(node, 'Unknown node type `' + node.type + '`');\n                }\n            });\n\n            return warns.length ? warns : false;\n        },\n\n        createDescriptor: function(syntax, type, name) {\n            var ref = {\n                type: type,\n                name: name\n            };\n            var descriptor = {\n                type: type,\n                name: name,\n                syntax: null,\n                match: null\n            };\n\n            if (typeof syntax === 'function') {\n                descriptor.match = buildMatchGraph$1(syntax, ref);\n            } else {\n                if (typeof syntax === 'string') {\n                    // lazy parsing on first access\n                    Object.defineProperty(descriptor, 'syntax', {\n                        get: function() {\n                            Object.defineProperty(descriptor, 'syntax', {\n                                value: parse_1(syntax)\n                            });\n\n                            return descriptor.syntax;\n                        }\n                    });\n                } else {\n                    descriptor.syntax = syntax;\n                }\n\n                // lazy graph build on first access\n                Object.defineProperty(descriptor, 'match', {\n                    get: function() {\n                        Object.defineProperty(descriptor, 'match', {\n                            value: buildMatchGraph$1(descriptor.syntax, ref)\n                        });\n\n                        return descriptor.match;\n                    }\n                });\n            }\n\n            return descriptor;\n        },\n        addAtrule_: function(name, syntax) {\n            this.atrules[name] = {\n                prelude: syntax.prelude ? this.createDescriptor(syntax.prelude, 'AtrulePrelude', name) : null,\n                descriptors: syntax.descriptors\n                    ? Object.keys(syntax.descriptors).reduce((res, name) => {\n                        res[name] = this.createDescriptor(syntax.descriptors[name], 'AtruleDescriptor', name);\n                        return res;\n                    }, {})\n                    : null\n            };\n        },\n        addProperty_: function(name, syntax) {\n            this.properties[name] = this.createDescriptor(syntax, 'Property', name);\n        },\n        addType_: function(name, syntax) {\n            this.types[name] = this.createDescriptor(syntax, 'Type', name);\n\n            if (syntax === generic['-ms-legacy-expression']) {\n                this.valueCommonSyntax = cssWideKeywordsWithExpression;\n            }\n        },\n\n        matchAtrulePrelude: function(atruleName, prelude) {\n            var atrule = names.keyword(atruleName);\n\n            var atrulePreludeSyntax = atrule.vendor\n                ? this.getAtrulePrelude(atrule.name) || this.getAtrulePrelude(atrule.basename)\n                : this.getAtrulePrelude(atrule.name);\n\n            if (!atrulePreludeSyntax) {\n                if (atrule.basename in this.atrules) {\n                    return buildMatchResult(null, new Error('At-rule `' + atruleName + '` should not contain a prelude'));\n                }\n\n                return buildMatchResult(null, new SyntaxReferenceError$1('Unknown at-rule', atruleName));\n            }\n\n            return matchSyntax(this, atrulePreludeSyntax, prelude, true);\n        },\n        matchAtruleDescriptor: function(atruleName, descriptorName, value) {\n            var atrule = names.keyword(atruleName);\n            var descriptor = names.keyword(descriptorName);\n\n            var atruleEntry = atrule.vendor\n                ? this.atrules[atrule.name] || this.atrules[atrule.basename]\n                : this.atrules[atrule.name];\n\n            if (!atruleEntry) {\n                return buildMatchResult(null, new SyntaxReferenceError$1('Unknown at-rule', atruleName));\n            }\n\n            if (!atruleEntry.descriptors) {\n                return buildMatchResult(null, new Error('At-rule `' + atruleName + '` has no known descriptors'));\n            }\n\n            var atruleDescriptorSyntax = descriptor.vendor\n                ? atruleEntry.descriptors[descriptor.name] || atruleEntry.descriptors[descriptor.basename]\n                : atruleEntry.descriptors[descriptor.name];\n\n            if (!atruleDescriptorSyntax) {\n                return buildMatchResult(null, new SyntaxReferenceError$1('Unknown at-rule descriptor', descriptorName));\n            }\n\n            return matchSyntax(this, atruleDescriptorSyntax, value, true);\n        },\n        matchDeclaration: function(node) {\n            if (node.type !== 'Declaration') {\n                return buildMatchResult(null, new Error('Not a Declaration node'));\n            }\n\n            return this.matchProperty(node.property, node.value);\n        },\n        matchProperty: function(propertyName, value) {\n            var property = names.property(propertyName);\n\n            // don't match syntax for a custom property\n            if (property.custom) {\n                return buildMatchResult(null, new Error('Lexer matching doesn\\'t applicable for custom properties'));\n            }\n\n            var propertySyntax = property.vendor\n                ? this.getProperty(property.name) || this.getProperty(property.basename)\n                : this.getProperty(property.name);\n\n            if (!propertySyntax) {\n                return buildMatchResult(null, new SyntaxReferenceError$1('Unknown property', propertyName));\n            }\n\n            return matchSyntax(this, propertySyntax, value, true);\n        },\n        matchType: function(typeName, value) {\n            var typeSyntax = this.getType(typeName);\n\n            if (!typeSyntax) {\n                return buildMatchResult(null, new SyntaxReferenceError$1('Unknown type', typeName));\n            }\n\n            return matchSyntax(this, typeSyntax, value, false);\n        },\n        match: function(syntax, value) {\n            if (typeof syntax !== 'string' && (!syntax || !syntax.type)) {\n                return buildMatchResult(null, new SyntaxReferenceError$1('Bad syntax'));\n            }\n\n            if (typeof syntax === 'string' || !syntax.match) {\n                syntax = this.createDescriptor(syntax, 'Type', 'anonymous');\n            }\n\n            return matchSyntax(this, syntax, value, false);\n        },\n\n        findValueFragments: function(propertyName, value, type, name) {\n            return search.matchFragments(this, value, this.matchProperty(propertyName, value), type, name);\n        },\n        findDeclarationValueFragments: function(declaration, type, name) {\n            return search.matchFragments(this, declaration.value, this.matchDeclaration(declaration), type, name);\n        },\n        findAllFragments: function(ast, type, name) {\n            var result = [];\n\n            this.syntax.walk(ast, {\n                visit: 'Declaration',\n                enter: function(declaration) {\n                    result.push.apply(result, this.findDeclarationValueFragments(declaration, type, name));\n                }.bind(this)\n            });\n\n            return result;\n        },\n\n        getAtrulePrelude: function(atruleName) {\n            return this.atrules.hasOwnProperty(atruleName) ? this.atrules[atruleName].prelude : null;\n        },\n        getAtruleDescriptor: function(atruleName, name) {\n            return this.atrules.hasOwnProperty(atruleName) && this.atrules.declarators\n                ? this.atrules[atruleName].declarators[name] || null\n                : null;\n        },\n        getProperty: function(name) {\n            return this.properties.hasOwnProperty(name) ? this.properties[name] : null;\n        },\n        getType: function(name) {\n            return this.types.hasOwnProperty(name) ? this.types[name] : null;\n        },\n\n        validate: function() {\n            function validate(syntax, name, broken, descriptor) {\n                if (broken.hasOwnProperty(name)) {\n                    return broken[name];\n                }\n\n                broken[name] = false;\n                if (descriptor.syntax !== null) {\n                    walk(descriptor.syntax, function(node) {\n                        if (node.type !== 'Type' && node.type !== 'Property') {\n                            return;\n                        }\n\n                        var map = node.type === 'Type' ? syntax.types : syntax.properties;\n                        var brokenMap = node.type === 'Type' ? brokenTypes : brokenProperties;\n\n                        if (!map.hasOwnProperty(node.name) || validate(syntax, node.name, brokenMap, map[node.name])) {\n                            broken[name] = true;\n                        }\n                    }, this);\n                }\n            }\n\n            var brokenTypes = {};\n            var brokenProperties = {};\n\n            for (var key in this.types) {\n                validate(this, key, brokenTypes, this.types[key]);\n            }\n\n            for (var key in this.properties) {\n                validate(this, key, brokenProperties, this.properties[key]);\n            }\n\n            brokenTypes = Object.keys(brokenTypes).filter(function(name) {\n                return brokenTypes[name];\n            });\n            brokenProperties = Object.keys(brokenProperties).filter(function(name) {\n                return brokenProperties[name];\n            });\n\n            if (brokenTypes.length || brokenProperties.length) {\n                return {\n                    types: brokenTypes,\n                    properties: brokenProperties\n                };\n            }\n\n            return null;\n        },\n        dump: function(syntaxAsAst, pretty) {\n            return {\n                generic: this.generic,\n                types: dumpMapSyntax(this.types, !pretty, syntaxAsAst),\n                properties: dumpMapSyntax(this.properties, !pretty, syntaxAsAst)\n            };\n        },\n        toString: function() {\n            return JSON.stringify(this.dump());\n        }\n    };\n\n    var Lexer_1 = Lexer;\n\n    var definitionSyntax = {\n        SyntaxError: _SyntaxError$1,\n        parse: parse_1,\n        generate: generate_1,\n        walk: walk\n    };\n\n    var isBOM$2 = tokenizer.isBOM;\n\n    var N$3 = 10;\n    var F$2 = 12;\n    var R$2 = 13;\n\n    function computeLinesAndColumns(host, source) {\n        var sourceLength = source.length;\n        var lines = adoptBuffer(host.lines, sourceLength); // +1\n        var line = host.startLine;\n        var columns = adoptBuffer(host.columns, sourceLength);\n        var column = host.startColumn;\n        var startOffset = source.length > 0 ? isBOM$2(source.charCodeAt(0)) : 0;\n\n        for (var i = startOffset; i < sourceLength; i++) { // -1\n            var code = source.charCodeAt(i);\n\n            lines[i] = line;\n            columns[i] = column++;\n\n            if (code === N$3 || code === R$2 || code === F$2) {\n                if (code === R$2 && i + 1 < sourceLength && source.charCodeAt(i + 1) === N$3) {\n                    i++;\n                    lines[i] = line;\n                    columns[i] = column;\n                }\n\n                line++;\n                column = 1;\n            }\n        }\n\n        lines[i] = line;\n        columns[i] = column;\n\n        host.lines = lines;\n        host.columns = columns;\n    }\n\n    var OffsetToLocation = function() {\n        this.lines = null;\n        this.columns = null;\n        this.linesAndColumnsComputed = false;\n    };\n\n    OffsetToLocation.prototype = {\n        setSource: function(source, startOffset, startLine, startColumn) {\n            this.source = source;\n            this.startOffset = typeof startOffset === 'undefined' ? 0 : startOffset;\n            this.startLine = typeof startLine === 'undefined' ? 1 : startLine;\n            this.startColumn = typeof startColumn === 'undefined' ? 1 : startColumn;\n            this.linesAndColumnsComputed = false;\n        },\n\n        ensureLinesAndColumnsComputed: function() {\n            if (!this.linesAndColumnsComputed) {\n                computeLinesAndColumns(this, this.source);\n                this.linesAndColumnsComputed = true;\n            }\n        },\n        getLocation: function(offset, filename) {\n            this.ensureLinesAndColumnsComputed();\n\n            return {\n                source: filename,\n                offset: this.startOffset + offset,\n                line: this.lines[offset],\n                column: this.columns[offset]\n            };\n        },\n        getLocationRange: function(start, end, filename) {\n            this.ensureLinesAndColumnsComputed();\n\n            return {\n                source: filename,\n                start: {\n                    offset: this.startOffset + start,\n                    line: this.lines[start],\n                    column: this.columns[start]\n                },\n                end: {\n                    offset: this.startOffset + end,\n                    line: this.lines[end],\n                    column: this.columns[end]\n                }\n            };\n        }\n    };\n\n    var OffsetToLocation_1 = OffsetToLocation;\n\n    var TYPE$7 = tokenizer.TYPE;\n    var WHITESPACE$2 = TYPE$7.WhiteSpace;\n    var COMMENT$2 = TYPE$7.Comment;\n\n    var sequence = function readSequence(recognizer) {\n        var children = this.createList();\n        var child = null;\n        var context = {\n            recognizer: recognizer,\n            space: null,\n            ignoreWS: false,\n            ignoreWSAfter: false\n        };\n\n        this.scanner.skipSC();\n\n        while (!this.scanner.eof) {\n            switch (this.scanner.tokenType) {\n                case COMMENT$2:\n                    this.scanner.next();\n                    continue;\n\n                case WHITESPACE$2:\n                    if (context.ignoreWS) {\n                        this.scanner.next();\n                    } else {\n                        context.space = this.WhiteSpace();\n                    }\n                    continue;\n            }\n\n            child = recognizer.getNode.call(this, context);\n\n            if (child === undefined) {\n                break;\n            }\n\n            if (context.space !== null) {\n                children.push(context.space);\n                context.space = null;\n            }\n\n            children.push(child);\n\n            if (context.ignoreWSAfter) {\n                context.ignoreWSAfter = false;\n                context.ignoreWS = true;\n            } else {\n                context.ignoreWS = false;\n            }\n        }\n\n        return children;\n    };\n\n    var findWhiteSpaceStart$1 = utils.findWhiteSpaceStart;\n\n    var noop$2 = function() {};\n\n    var TYPE$8 = _const.TYPE;\n    var NAME$2 = _const.NAME;\n    var WHITESPACE$3 = TYPE$8.WhiteSpace;\n    var IDENT$2 = TYPE$8.Ident;\n    var FUNCTION = TYPE$8.Function;\n    var URL = TYPE$8.Url;\n    var HASH = TYPE$8.Hash;\n    var PERCENTAGE = TYPE$8.Percentage;\n    var NUMBER$2 = TYPE$8.Number;\n    var NUMBERSIGN$1 = 0x0023; // U+0023 NUMBER SIGN (#)\n    var NULL = 0;\n\n    function createParseContext(name) {\n        return function() {\n            return this[name]();\n        };\n    }\n\n    function processConfig(config) {\n        var parserConfig = {\n            context: {},\n            scope: {},\n            atrule: {},\n            pseudo: {}\n        };\n\n        if (config.parseContext) {\n            for (var name in config.parseContext) {\n                switch (typeof config.parseContext[name]) {\n                    case 'function':\n                        parserConfig.context[name] = config.parseContext[name];\n                        break;\n\n                    case 'string':\n                        parserConfig.context[name] = createParseContext(config.parseContext[name]);\n                        break;\n                }\n            }\n        }\n\n        if (config.scope) {\n            for (var name in config.scope) {\n                parserConfig.scope[name] = config.scope[name];\n            }\n        }\n\n        if (config.atrule) {\n            for (var name in config.atrule) {\n                var atrule = config.atrule[name];\n\n                if (atrule.parse) {\n                    parserConfig.atrule[name] = atrule.parse;\n                }\n            }\n        }\n\n        if (config.pseudo) {\n            for (var name in config.pseudo) {\n                var pseudo = config.pseudo[name];\n\n                if (pseudo.parse) {\n                    parserConfig.pseudo[name] = pseudo.parse;\n                }\n            }\n        }\n\n        if (config.node) {\n            for (var name in config.node) {\n                parserConfig[name] = config.node[name].parse;\n            }\n        }\n\n        return parserConfig;\n    }\n\n    var create = function createParser(config) {\n        var parser = {\n            scanner: new TokenStream_1(),\n            locationMap: new OffsetToLocation_1(),\n\n            filename: '<unknown>',\n            needPositions: false,\n            onParseError: noop$2,\n            onParseErrorThrow: false,\n            parseAtrulePrelude: true,\n            parseRulePrelude: true,\n            parseValue: true,\n            parseCustomProperty: false,\n\n            readSequence: sequence,\n\n            createList: function() {\n                return new List_1();\n            },\n            createSingleNodeList: function(node) {\n                return new List_1().appendData(node);\n            },\n            getFirstListNode: function(list) {\n                return list && list.first();\n            },\n            getLastListNode: function(list) {\n                return list.last();\n            },\n\n            parseWithFallback: function(consumer, fallback) {\n                var startToken = this.scanner.tokenIndex;\n\n                try {\n                    return consumer.call(this);\n                } catch (e) {\n                    if (this.onParseErrorThrow) {\n                        throw e;\n                    }\n\n                    var fallbackNode = fallback.call(this, startToken);\n\n                    this.onParseErrorThrow = true;\n                    this.onParseError(e, fallbackNode);\n                    this.onParseErrorThrow = false;\n\n                    return fallbackNode;\n                }\n            },\n\n            lookupNonWSType: function(offset) {\n                do {\n                    var type = this.scanner.lookupType(offset++);\n                    if (type !== WHITESPACE$3) {\n                        return type;\n                    }\n                } while (type !== NULL);\n\n                return NULL;\n            },\n\n            eat: function(tokenType) {\n                if (this.scanner.tokenType !== tokenType) {\n                    var offset = this.scanner.tokenStart;\n                    var message = NAME$2[tokenType] + ' is expected';\n\n                    // tweak message and offset\n                    switch (tokenType) {\n                        case IDENT$2:\n                            // when identifier is expected but there is a function or url\n                            if (this.scanner.tokenType === FUNCTION || this.scanner.tokenType === URL) {\n                                offset = this.scanner.tokenEnd - 1;\n                                message = 'Identifier is expected but function found';\n                            } else {\n                                message = 'Identifier is expected';\n                            }\n                            break;\n\n                        case HASH:\n                            if (this.scanner.isDelim(NUMBERSIGN$1)) {\n                                this.scanner.next();\n                                offset++;\n                                message = 'Name is expected';\n                            }\n                            break;\n\n                        case PERCENTAGE:\n                            if (this.scanner.tokenType === NUMBER$2) {\n                                offset = this.scanner.tokenEnd;\n                                message = 'Percent sign is expected';\n                            }\n                            break;\n\n                        default:\n                            // when test type is part of another token show error for current position + 1\n                            // e.g. eat(HYPHENMINUS) will fail on \"-foo\", but pointing on \"-\" is odd\n                            if (this.scanner.source.charCodeAt(this.scanner.tokenStart) === tokenType) {\n                                offset = offset + 1;\n                            }\n                    }\n\n                    this.error(message, offset);\n                }\n\n                this.scanner.next();\n            },\n\n            consume: function(tokenType) {\n                var value = this.scanner.getTokenValue();\n\n                this.eat(tokenType);\n\n                return value;\n            },\n            consumeFunctionName: function() {\n                var name = this.scanner.source.substring(this.scanner.tokenStart, this.scanner.tokenEnd - 1);\n\n                this.eat(FUNCTION);\n\n                return name;\n            },\n\n            getLocation: function(start, end) {\n                if (this.needPositions) {\n                    return this.locationMap.getLocationRange(\n                        start,\n                        end,\n                        this.filename\n                    );\n                }\n\n                return null;\n            },\n            getLocationFromList: function(list) {\n                if (this.needPositions) {\n                    var head = this.getFirstListNode(list);\n                    var tail = this.getLastListNode(list);\n                    return this.locationMap.getLocationRange(\n                        head !== null ? head.loc.start.offset - this.locationMap.startOffset : this.scanner.tokenStart,\n                        tail !== null ? tail.loc.end.offset - this.locationMap.startOffset : this.scanner.tokenStart,\n                        this.filename\n                    );\n                }\n\n                return null;\n            },\n\n            error: function(message, offset) {\n                var location = typeof offset !== 'undefined' && offset < this.scanner.source.length\n                    ? this.locationMap.getLocation(offset)\n                    : this.scanner.eof\n                        ? this.locationMap.getLocation(findWhiteSpaceStart$1(this.scanner.source, this.scanner.source.length - 1))\n                        : this.locationMap.getLocation(this.scanner.tokenStart);\n\n                throw new _SyntaxError(\n                    message || 'Unexpected input',\n                    this.scanner.source,\n                    location.offset,\n                    location.line,\n                    location.column\n                );\n            }\n        };\n\n        config = processConfig(config || {});\n        for (var key in config) {\n            parser[key] = config[key];\n        }\n\n        return function(source, options) {\n            options = options || {};\n\n            var context = options.context || 'default';\n            var ast;\n\n            tokenizer(source, parser.scanner);\n            parser.locationMap.setSource(\n                source,\n                options.offset,\n                options.line,\n                options.column\n            );\n\n            parser.filename = options.filename || '<unknown>';\n            parser.needPositions = Boolean(options.positions);\n            parser.onParseError = typeof options.onParseError === 'function' ? options.onParseError : noop$2;\n            parser.onParseErrorThrow = false;\n            parser.parseAtrulePrelude = 'parseAtrulePrelude' in options ? Boolean(options.parseAtrulePrelude) : true;\n            parser.parseRulePrelude = 'parseRulePrelude' in options ? Boolean(options.parseRulePrelude) : true;\n            parser.parseValue = 'parseValue' in options ? Boolean(options.parseValue) : true;\n            parser.parseCustomProperty = 'parseCustomProperty' in options ? Boolean(options.parseCustomProperty) : false;\n\n            if (!parser.context.hasOwnProperty(context)) {\n                throw new Error('Unknown context `' + context + '`');\n            }\n\n            ast = parser.context[context].call(parser, options);\n\n            if (!parser.scanner.eof) {\n                parser.error();\n            }\n\n            return ast;\n        };\n    };\n\n    /* -*- Mode: js; js-indent-level: 2; -*- */\n    /*\n     * Copyright 2011 Mozilla Foundation and contributors\n     * Licensed under the New BSD license. See LICENSE or:\n     * http://opensource.org/licenses/BSD-3-Clause\n     */\n\n    var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n    /**\n     * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n     */\n    var encode = function (number) {\n        if (0 <= number && number < intToCharMap.length) {\n            return intToCharMap[number];\n        }\n        throw new TypeError(\"Must be between 0 and 63: \" + number);\n    };\n\n    /**\n     * Decode a single base 64 character code digit to an integer. Returns -1 on\n     * failure.\n     */\n    var decode = function (charCode) {\n        var bigA = 65;     // 'A'\n        var bigZ = 90;     // 'Z'\n\n        var littleA = 97;  // 'a'\n        var littleZ = 122; // 'z'\n\n        var zero = 48;     // '0'\n        var nine = 57;     // '9'\n\n        var plus = 43;     // '+'\n        var slash = 47;    // '/'\n\n        var littleOffset = 26;\n        var numberOffset = 52;\n\n        // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n        if (bigA <= charCode && charCode <= bigZ) {\n            return (charCode - bigA);\n        }\n\n        // 26 - 51: abcdefghijklmnopqrstuvwxyz\n        if (littleA <= charCode && charCode <= littleZ) {\n            return (charCode - littleA + littleOffset);\n        }\n\n        // 52 - 61: 0123456789\n        if (zero <= charCode && charCode <= nine) {\n            return (charCode - zero + numberOffset);\n        }\n\n        // 62: +\n        if (charCode == plus) {\n            return 62;\n        }\n\n        // 63: /\n        if (charCode == slash) {\n            return 63;\n        }\n\n        // Invalid base64 digit.\n        return -1;\n    };\n\n    var base64 = {\n        encode: encode,\n        decode: decode\n    };\n\n    /* -*- Mode: js; js-indent-level: 2; -*- */\n    /*\n     * Copyright 2011 Mozilla Foundation and contributors\n     * Licensed under the New BSD license. See LICENSE or:\n     * http://opensource.org/licenses/BSD-3-Clause\n     *\n     * Based on the Base 64 VLQ implementation in Closure Compiler:\n     * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n     *\n     * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n     * Redistribution and use in source and binary forms, with or without\n     * modification, are permitted provided that the following conditions are\n     * met:\n     *\n     *  * Redistributions of source code must retain the above copyright\n     *    notice, this list of conditions and the following disclaimer.\n     *  * Redistributions in binary form must reproduce the above\n     *    copyright notice, this list of conditions and the following\n     *    disclaimer in the documentation and/or other materials provided\n     *    with the distribution.\n     *  * Neither the name of Google Inc. nor the names of its\n     *    contributors may be used to endorse or promote products derived\n     *    from this software without specific prior written permission.\n     *\n     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n     * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n     * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n     * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n     * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n     * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n     */\n\n\n\n    // A single base 64 digit can contain 6 bits of data. For the base 64 variable\n    // length quantities we use in the source map spec, the first bit is the sign,\n    // the next four bits are the actual value, and the 6th bit is the\n    // continuation bit. The continuation bit tells us whether there are more\n    // digits in this value following this digit.\n    //\n    //   Continuation\n    //   |    Sign\n    //   |    |\n    //   V    V\n    //   101011\n\n    var VLQ_BASE_SHIFT = 5;\n\n    // binary: 100000\n    var VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n    // binary: 011111\n    var VLQ_BASE_MASK = VLQ_BASE - 1;\n\n    // binary: 100000\n    var VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n    /**\n     * Converts from a two-complement value to a value where the sign bit is\n     * placed in the least significant bit.  For example, as decimals:\n     *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n     *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n     */\n    function toVLQSigned(aValue) {\n        return aValue < 0\n            ? ((-aValue) << 1) + 1\n            : (aValue << 1) + 0;\n    }\n\n    /**\n     * Converts to a two-complement value from a value where the sign bit is\n     * placed in the least significant bit.  For example, as decimals:\n     *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n     *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n     */\n    function fromVLQSigned(aValue) {\n        var isNegative = (aValue & 1) === 1;\n        var shifted = aValue >> 1;\n        return isNegative\n            ? -shifted\n            : shifted;\n    }\n\n    /**\n     * Returns the base 64 VLQ encoded value.\n     */\n    var encode$1 = function base64VLQ_encode(aValue) {\n        var encoded = \"\";\n        var digit;\n\n        var vlq = toVLQSigned(aValue);\n\n        do {\n            digit = vlq & VLQ_BASE_MASK;\n            vlq >>>= VLQ_BASE_SHIFT;\n            if (vlq > 0) {\n                // There are still more digits in this value, so we must make sure the\n                // continuation bit is marked.\n                digit |= VLQ_CONTINUATION_BIT;\n            }\n            encoded += base64.encode(digit);\n        } while (vlq > 0);\n\n        return encoded;\n    };\n\n    /**\n     * Decodes the next base 64 VLQ value from the given string and returns the\n     * value and the rest of the string via the out parameter.\n     */\n    var decode$1 = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n        var strLen = aStr.length;\n        var result = 0;\n        var shift = 0;\n        var continuation, digit;\n\n        do {\n            if (aIndex >= strLen) {\n                throw new Error(\"Expected more digits in base 64 VLQ value.\");\n            }\n\n            digit = base64.decode(aStr.charCodeAt(aIndex++));\n            if (digit === -1) {\n                throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n            }\n\n            continuation = !!(digit & VLQ_CONTINUATION_BIT);\n            digit &= VLQ_BASE_MASK;\n            result = result + (digit << shift);\n            shift += VLQ_BASE_SHIFT;\n        } while (continuation);\n\n        aOutParam.value = fromVLQSigned(result);\n        aOutParam.rest = aIndex;\n    };\n\n    var base64Vlq = {\n        encode: encode$1,\n        decode: decode$1\n    };\n\n    function createCommonjsModule(fn, module) {\n        return module = { exports: {} }, fn(module, module.exports), module.exports;\n    }\n\n    function getCjsExportFromNamespace (n) {\n        return n && n['default'] || n;\n    }\n\n    var util = createCommonjsModule(function (module, exports) {\n        /* -*- Mode: js; js-indent-level: 2; -*- */\n        /*\n         * Copyright 2011 Mozilla Foundation and contributors\n         * Licensed under the New BSD license. See LICENSE or:\n         * http://opensource.org/licenses/BSD-3-Clause\n         */\n\n        /**\n         * This is a helper function for getting values from parameter/options\n         * objects.\n         *\n         * @param args The object we are extracting values from\n         * @param name The name of the property we are getting.\n         * @param defaultValue An optional value to return if the property is missing\n         * from the object. If this is not specified and the property is missing, an\n         * error will be thrown.\n         */\n        function getArg(aArgs, aName, aDefaultValue) {\n            if (aName in aArgs) {\n                return aArgs[aName];\n            } else if (arguments.length === 3) {\n                return aDefaultValue;\n            } else {\n                throw new Error('\"' + aName + '\" is a required argument.');\n            }\n        }\n        exports.getArg = getArg;\n\n        var urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\n        var dataUrlRegexp = /^data:.+\\,.+$/;\n\n        function urlParse(aUrl) {\n            var match = aUrl.match(urlRegexp);\n            if (!match) {\n                return null;\n            }\n            return {\n                scheme: match[1],\n                auth: match[2],\n                host: match[3],\n                port: match[4],\n                path: match[5]\n            };\n        }\n        exports.urlParse = urlParse;\n\n        function urlGenerate(aParsedUrl) {\n            var url = '';\n            if (aParsedUrl.scheme) {\n                url += aParsedUrl.scheme + ':';\n            }\n            url += '//';\n            if (aParsedUrl.auth) {\n                url += aParsedUrl.auth + '@';\n            }\n            if (aParsedUrl.host) {\n                url += aParsedUrl.host;\n            }\n            if (aParsedUrl.port) {\n                url += \":\" + aParsedUrl.port;\n            }\n            if (aParsedUrl.path) {\n                url += aParsedUrl.path;\n            }\n            return url;\n        }\n        exports.urlGenerate = urlGenerate;\n\n        /**\n         * Normalizes a path, or the path portion of a URL:\n         *\n         * - Replaces consecutive slashes with one slash.\n         * - Removes unnecessary '.' parts.\n         * - Removes unnecessary '<dir>/..' parts.\n         *\n         * Based on code in the Node.js 'path' core module.\n         *\n         * @param aPath The path or url to normalize.\n         */\n        function normalize(aPath) {\n            var path = aPath;\n            var url = urlParse(aPath);\n            if (url) {\n                if (!url.path) {\n                    return aPath;\n                }\n                path = url.path;\n            }\n            var isAbsolute = exports.isAbsolute(path);\n\n            var parts = path.split(/\\/+/);\n            for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n                part = parts[i];\n                if (part === '.') {\n                    parts.splice(i, 1);\n                } else if (part === '..') {\n                    up++;\n                } else if (up > 0) {\n                    if (part === '') {\n                        // The first part is blank if the path is absolute. Trying to go\n                        // above the root is a no-op. Therefore we can remove all '..' parts\n                        // directly after the root.\n                        parts.splice(i + 1, up);\n                        up = 0;\n                    } else {\n                        parts.splice(i, 2);\n                        up--;\n                    }\n                }\n            }\n            path = parts.join('/');\n\n            if (path === '') {\n                path = isAbsolute ? '/' : '.';\n            }\n\n            if (url) {\n                url.path = path;\n                return urlGenerate(url);\n            }\n            return path;\n        }\n        exports.normalize = normalize;\n\n        /**\n         * Joins two paths/URLs.\n         *\n         * @param aRoot The root path or URL.\n         * @param aPath The path or URL to be joined with the root.\n         *\n         * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n         *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n         *   first.\n         * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n         *   is updated with the result and aRoot is returned. Otherwise the result\n         *   is returned.\n         *   - If aPath is absolute, the result is aPath.\n         *   - Otherwise the two paths are joined with a slash.\n         * - Joining for example 'http://' and 'www.example.com' is also supported.\n         */\n        function join(aRoot, aPath) {\n            if (aRoot === \"\") {\n                aRoot = \".\";\n            }\n            if (aPath === \"\") {\n                aPath = \".\";\n            }\n            var aPathUrl = urlParse(aPath);\n            var aRootUrl = urlParse(aRoot);\n            if (aRootUrl) {\n                aRoot = aRootUrl.path || '/';\n            }\n\n            // `join(foo, '//www.example.org')`\n            if (aPathUrl && !aPathUrl.scheme) {\n                if (aRootUrl) {\n                    aPathUrl.scheme = aRootUrl.scheme;\n                }\n                return urlGenerate(aPathUrl);\n            }\n\n            if (aPathUrl || aPath.match(dataUrlRegexp)) {\n                return aPath;\n            }\n\n            // `join('http://', 'www.example.com')`\n            if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n                aRootUrl.host = aPath;\n                return urlGenerate(aRootUrl);\n            }\n\n            var joined = aPath.charAt(0) === '/'\n                ? aPath\n                : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n            if (aRootUrl) {\n                aRootUrl.path = joined;\n                return urlGenerate(aRootUrl);\n            }\n            return joined;\n        }\n        exports.join = join;\n\n        exports.isAbsolute = function (aPath) {\n            return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n        };\n\n        /**\n         * Make a path relative to a URL or another path.\n         *\n         * @param aRoot The root path or URL.\n         * @param aPath The path or URL to be made relative to aRoot.\n         */\n        function relative(aRoot, aPath) {\n            if (aRoot === \"\") {\n                aRoot = \".\";\n            }\n\n            aRoot = aRoot.replace(/\\/$/, '');\n\n            // It is possible for the path to be above the root. In this case, simply\n            // checking whether the root is a prefix of the path won't work. Instead, we\n            // need to remove components from the root one by one, until either we find\n            // a prefix that fits, or we run out of components to remove.\n            var level = 0;\n            while (aPath.indexOf(aRoot + '/') !== 0) {\n                var index = aRoot.lastIndexOf(\"/\");\n                if (index < 0) {\n                    return aPath;\n                }\n\n                // If the only part of the root that is left is the scheme (i.e. http://,\n                // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n                // have exhausted all components, so the path is not relative to the root.\n                aRoot = aRoot.slice(0, index);\n                if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n                    return aPath;\n                }\n\n                ++level;\n            }\n\n            // Make sure we add a \"../\" for each component we removed from the root.\n            return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n        }\n        exports.relative = relative;\n\n        var supportsNullProto = (function () {\n            var obj = Object.create(null);\n            return !('__proto__' in obj);\n        }());\n\n        function identity (s) {\n            return s;\n        }\n\n        /**\n         * Because behavior goes wacky when you set `__proto__` on objects, we\n         * have to prefix all the strings in our set with an arbitrary character.\n         *\n         * See https://github.com/mozilla/source-map/pull/31 and\n         * https://github.com/mozilla/source-map/issues/30\n         *\n         * @param String aStr\n         */\n        function toSetString(aStr) {\n            if (isProtoString(aStr)) {\n                return '$' + aStr;\n            }\n\n            return aStr;\n        }\n        exports.toSetString = supportsNullProto ? identity : toSetString;\n\n        function fromSetString(aStr) {\n            if (isProtoString(aStr)) {\n                return aStr.slice(1);\n            }\n\n            return aStr;\n        }\n        exports.fromSetString = supportsNullProto ? identity : fromSetString;\n\n        function isProtoString(s) {\n            if (!s) {\n                return false;\n            }\n\n            var length = s.length;\n\n            if (length < 9 /* \"__proto__\".length */) {\n                return false;\n            }\n\n            if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n                s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n                s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n                s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n                s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n                s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n                s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n                s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n                s.charCodeAt(length - 9) !== 95  /* '_' */) {\n                return false;\n            }\n\n            for (var i = length - 10; i >= 0; i--) {\n                if (s.charCodeAt(i) !== 36 /* '$' */) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        /**\n         * Comparator between two mappings where the original positions are compared.\n         *\n         * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n         * mappings with the same original source/line/column, but different generated\n         * line and column the same. Useful when searching for a mapping with a\n         * stubbed out mapping.\n         */\n        function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n            var cmp = strcmp(mappingA.source, mappingB.source);\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.originalLine - mappingB.originalLine;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.originalColumn - mappingB.originalColumn;\n            if (cmp !== 0 || onlyCompareOriginal) {\n                return cmp;\n            }\n\n            cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.generatedLine - mappingB.generatedLine;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            return strcmp(mappingA.name, mappingB.name);\n        }\n        exports.compareByOriginalPositions = compareByOriginalPositions;\n\n        /**\n         * Comparator between two mappings with deflated source and name indices where\n         * the generated positions are compared.\n         *\n         * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n         * mappings with the same generated line and column, but different\n         * source/name/original line and column the same. Useful when searching for a\n         * mapping with a stubbed out mapping.\n         */\n        function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n            var cmp = mappingA.generatedLine - mappingB.generatedLine;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n            if (cmp !== 0 || onlyCompareGenerated) {\n                return cmp;\n            }\n\n            cmp = strcmp(mappingA.source, mappingB.source);\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.originalLine - mappingB.originalLine;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.originalColumn - mappingB.originalColumn;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            return strcmp(mappingA.name, mappingB.name);\n        }\n        exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\n        function strcmp(aStr1, aStr2) {\n            if (aStr1 === aStr2) {\n                return 0;\n            }\n\n            if (aStr1 === null) {\n                return 1; // aStr2 !== null\n            }\n\n            if (aStr2 === null) {\n                return -1; // aStr1 !== null\n            }\n\n            if (aStr1 > aStr2) {\n                return 1;\n            }\n\n            return -1;\n        }\n\n        /**\n         * Comparator between two mappings with inflated source and name strings where\n         * the generated positions are compared.\n         */\n        function compareByGeneratedPositionsInflated(mappingA, mappingB) {\n            var cmp = mappingA.generatedLine - mappingB.generatedLine;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = strcmp(mappingA.source, mappingB.source);\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.originalLine - mappingB.originalLine;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            cmp = mappingA.originalColumn - mappingB.originalColumn;\n            if (cmp !== 0) {\n                return cmp;\n            }\n\n            return strcmp(mappingA.name, mappingB.name);\n        }\n        exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n        /**\n         * Strip any JSON XSSI avoidance prefix from the string (as documented\n         * in the source maps specification), and then parse the string as\n         * JSON.\n         */\n        function parseSourceMapInput(str) {\n            return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n        }\n        exports.parseSourceMapInput = parseSourceMapInput;\n\n        /**\n         * Compute the URL of a source given the the source root, the source's\n         * URL, and the source map's URL.\n         */\n        function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n            sourceURL = sourceURL || '';\n\n            if (sourceRoot) {\n                // This follows what Chrome does.\n                if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n                    sourceRoot += '/';\n                }\n                // The spec says:\n                //   Line 4: An optional source root, useful for relocating source\n                //   files on a server or removing repeated values in the\n                //   \u201csources\u201d entry.  This value is prepended to the individual\n                //   entries in the \u201csource\u201d field.\n                sourceURL = sourceRoot + sourceURL;\n            }\n\n            // Historically, SourceMapConsumer did not take the sourceMapURL as\n            // a parameter.  This mode is still somewhat supported, which is why\n            // this code block is conditional.  However, it's preferable to pass\n            // the source map URL to SourceMapConsumer, so that this function\n            // can implement the source URL resolution algorithm as outlined in\n            // the spec.  This block is basically the equivalent of:\n            //    new URL(sourceURL, sourceMapURL).toString()\n            // ... except it avoids using URL, which wasn't available in the\n            // older releases of node still supported by this library.\n            //\n            // The spec says:\n            //   If the sources are not absolute URLs after prepending of the\n            //   \u201csourceRoot\u201d, the sources are resolved relative to the\n            //   SourceMap (like resolving script src in a html document).\n            if (sourceMapURL) {\n                var parsed = urlParse(sourceMapURL);\n                if (!parsed) {\n                    throw new Error(\"sourceMapURL could not be parsed\");\n                }\n                if (parsed.path) {\n                    // Strip the last path component, but keep the \"/\".\n                    var index = parsed.path.lastIndexOf('/');\n                    if (index >= 0) {\n                        parsed.path = parsed.path.substring(0, index + 1);\n                    }\n                }\n                sourceURL = join(urlGenerate(parsed), sourceURL);\n            }\n\n            return normalize(sourceURL);\n        }\n        exports.computeSourceURL = computeSourceURL;\n    });\n    var util_1 = util.getArg;\n    var util_2 = util.urlParse;\n    var util_3 = util.urlGenerate;\n    var util_4 = util.normalize;\n    var util_5 = util.join;\n    var util_6 = util.isAbsolute;\n    var util_7 = util.relative;\n    var util_8 = util.toSetString;\n    var util_9 = util.fromSetString;\n    var util_10 = util.compareByOriginalPositions;\n    var util_11 = util.compareByGeneratedPositionsDeflated;\n    var util_12 = util.compareByGeneratedPositionsInflated;\n    var util_13 = util.parseSourceMapInput;\n    var util_14 = util.computeSourceURL;\n\n    /* -*- Mode: js; js-indent-level: 2; -*- */\n    /*\n     * Copyright 2011 Mozilla Foundation and contributors\n     * Licensed under the New BSD license. See LICENSE or:\n     * http://opensource.org/licenses/BSD-3-Clause\n     */\n\n\n    var has = Object.prototype.hasOwnProperty;\n    var hasNativeMap = typeof Map !== \"undefined\";\n\n    /**\n     * A data structure which is a combination of an array and a set. Adding a new\n     * member is O(1), testing for membership is O(1), and finding the index of an\n     * element is O(1). Removing elements from the set is not supported. Only\n     * strings are supported for membership.\n     */\n    function ArraySet() {\n        this._array = [];\n        this._set = hasNativeMap ? new Map() : Object.create(null);\n    }\n\n    /**\n     * Static method for creating ArraySet instances from an existing array.\n     */\n    ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n        var set = new ArraySet();\n        for (var i = 0, len = aArray.length; i < len; i++) {\n            set.add(aArray[i], aAllowDuplicates);\n        }\n        return set;\n    };\n\n    /**\n     * Return how many unique items are in this ArraySet. If duplicates have been\n     * added, than those do not count towards the size.\n     *\n     * @returns Number\n     */\n    ArraySet.prototype.size = function ArraySet_size() {\n        return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n    };\n\n    /**\n     * Add the given string to this set.\n     *\n     * @param String aStr\n     */\n    ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n        var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n        var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n        var idx = this._array.length;\n        if (!isDuplicate || aAllowDuplicates) {\n            this._array.push(aStr);\n        }\n        if (!isDuplicate) {\n            if (hasNativeMap) {\n                this._set.set(aStr, idx);\n            } else {\n                this._set[sStr] = idx;\n            }\n        }\n    };\n\n    /**\n     * Is the given string a member of this set?\n     *\n     * @param String aStr\n     */\n    ArraySet.prototype.has = function ArraySet_has(aStr) {\n        if (hasNativeMap) {\n            return this._set.has(aStr);\n        } else {\n            var sStr = util.toSetString(aStr);\n            return has.call(this._set, sStr);\n        }\n    };\n\n    /**\n     * What is the index of the given string in the array?\n     *\n     * @param String aStr\n     */\n    ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n        if (hasNativeMap) {\n            var idx = this._set.get(aStr);\n            if (idx >= 0) {\n                return idx;\n            }\n        } else {\n            var sStr = util.toSetString(aStr);\n            if (has.call(this._set, sStr)) {\n                return this._set[sStr];\n            }\n        }\n\n        throw new Error('\"' + aStr + '\" is not in the set.');\n    };\n\n    /**\n     * What is the element at the given index?\n     *\n     * @param Number aIdx\n     */\n    ArraySet.prototype.at = function ArraySet_at(aIdx) {\n        if (aIdx >= 0 && aIdx < this._array.length) {\n            return this._array[aIdx];\n        }\n        throw new Error('No element indexed by ' + aIdx);\n    };\n\n    /**\n     * Returns the array representation of this set (which has the proper indices\n     * indicated by indexOf). Note that this is a copy of the internal array used\n     * for storing the members so that no one can mess with internal state.\n     */\n    ArraySet.prototype.toArray = function ArraySet_toArray() {\n        return this._array.slice();\n    };\n\n    var ArraySet_1 = ArraySet;\n\n    var arraySet = {\n        ArraySet: ArraySet_1\n    };\n\n    /* -*- Mode: js; js-indent-level: 2; -*- */\n    /*\n     * Copyright 2014 Mozilla Foundation and contributors\n     * Licensed under the New BSD license. See LICENSE or:\n     * http://opensource.org/licenses/BSD-3-Clause\n     */\n\n\n\n    /**\n     * Determine whether mappingB is after mappingA with respect to generated\n     * position.\n     */\n    function generatedPositionAfter(mappingA, mappingB) {\n        // Optimized for most common case\n        var lineA = mappingA.generatedLine;\n        var lineB = mappingB.generatedLine;\n        var columnA = mappingA.generatedColumn;\n        var columnB = mappingB.generatedColumn;\n        return lineB > lineA || lineB == lineA && columnB >= columnA ||\n            util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n    }\n\n    /**\n     * A data structure to provide a sorted view of accumulated mappings in a\n     * performance conscious manner. It trades a neglibable overhead in general\n     * case for a large speedup in case of mappings being added in order.\n     */\n    function MappingList() {\n        this._array = [];\n        this._sorted = true;\n        // Serves as infimum\n        this._last = {generatedLine: -1, generatedColumn: 0};\n    }\n\n    /**\n     * Iterate through internal items. This method takes the same arguments that\n     * `Array.prototype.forEach` takes.\n     *\n     * NOTE: The order of the mappings is NOT guaranteed.\n     */\n    MappingList.prototype.unsortedForEach =\n        function MappingList_forEach(aCallback, aThisArg) {\n            this._array.forEach(aCallback, aThisArg);\n        };\n\n    /**\n     * Add the given source mapping.\n     *\n     * @param Object aMapping\n     */\n    MappingList.prototype.add = function MappingList_add(aMapping) {\n        if (generatedPositionAfter(this._last, aMapping)) {\n            this._last = aMapping;\n            this._array.push(aMapping);\n        } else {\n            this._sorted = false;\n            this._array.push(aMapping);\n        }\n    };\n\n    /**\n     * Returns the flat, sorted array of mappings. The mappings are sorted by\n     * generated position.\n     *\n     * WARNING: This method returns internal data without copying, for\n     * performance. The return value must NOT be mutated, and should be treated as\n     * an immutable borrow. If you want to take ownership, you must make your own\n     * copy.\n     */\n    MappingList.prototype.toArray = function MappingList_toArray() {\n        if (!this._sorted) {\n            this._array.sort(util.compareByGeneratedPositionsInflated);\n            this._sorted = true;\n        }\n        return this._array;\n    };\n\n    var MappingList_1 = MappingList;\n\n    var mappingList = {\n        MappingList: MappingList_1\n    };\n\n    /* -*- Mode: js; js-indent-level: 2; -*- */\n    /*\n     * Copyright 2011 Mozilla Foundation and contributors\n     * Licensed under the New BSD license. See LICENSE or:\n     * http://opensource.org/licenses/BSD-3-Clause\n     */\n\n\n\n    var ArraySet$1 = arraySet.ArraySet;\n    var MappingList$1 = mappingList.MappingList;\n\n    /**\n     * An instance of the SourceMapGenerator represents a source map which is\n     * being built incrementally. You may pass an object with the following\n     * properties:\n     *\n     *   - file: The filename of the generated source.\n     *   - sourceRoot: A root for all relative URLs in this source map.\n     */\n    function SourceMapGenerator(aArgs) {\n        if (!aArgs) {\n            aArgs = {};\n        }\n        this._file = util.getArg(aArgs, 'file', null);\n        this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n        this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n        this._sources = new ArraySet$1();\n        this._names = new ArraySet$1();\n        this._mappings = new MappingList$1();\n        this._sourcesContents = null;\n    }\n\n    SourceMapGenerator.prototype._version = 3;\n\n    /**\n     * Creates a new SourceMapGenerator based on a SourceMapConsumer\n     *\n     * @param aSourceMapConsumer The SourceMap.\n     */\n    SourceMapGenerator.fromSourceMap =\n        function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n            var sourceRoot = aSourceMapConsumer.sourceRoot;\n            var generator = new SourceMapGenerator({\n                file: aSourceMapConsumer.file,\n                sourceRoot: sourceRoot\n            });\n            aSourceMapConsumer.eachMapping(function (mapping) {\n                var newMapping = {\n                    generated: {\n                        line: mapping.generatedLine,\n                        column: mapping.generatedColumn\n                    }\n                };\n\n                if (mapping.source != null) {\n                    newMapping.source = mapping.source;\n                    if (sourceRoot != null) {\n                        newMapping.source = util.relative(sourceRoot, newMapping.source);\n                    }\n\n                    newMapping.original = {\n                        line: mapping.originalLine,\n                        column: mapping.originalColumn\n                    };\n\n                    if (mapping.name != null) {\n                        newMapping.name = mapping.name;\n                    }\n                }\n\n                generator.addMapping(newMapping);\n            });\n            aSourceMapConsumer.sources.forEach(function (sourceFile) {\n                var sourceRelative = sourceFile;\n                if (sourceRoot !== null) {\n                    sourceRelative = util.relative(sourceRoot, sourceFile);\n                }\n\n                if (!generator._sources.has(sourceRelative)) {\n                    generator._sources.add(sourceRelative);\n                }\n\n                var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n                if (content != null) {\n                    generator.setSourceContent(sourceFile, content);\n                }\n            });\n            return generator;\n        };\n\n    /**\n     * Add a single mapping from original source line and column to the generated\n     * source's line and column for this source map being created. The mapping\n     * object should have the following properties:\n     *\n     *   - generated: An object with the generated line and column positions.\n     *   - original: An object with the original line and column positions.\n     *   - source: The original source file (relative to the sourceRoot).\n     *   - name: An optional original token name for this mapping.\n     */\n    SourceMapGenerator.prototype.addMapping =\n        function SourceMapGenerator_addMapping(aArgs) {\n            var generated = util.getArg(aArgs, 'generated');\n            var original = util.getArg(aArgs, 'original', null);\n            var source = util.getArg(aArgs, 'source', null);\n            var name = util.getArg(aArgs, 'name', null);\n\n            if (!this._skipValidation) {\n                this._validateMapping(generated, original, source, name);\n            }\n\n            if (source != null) {\n                source = String(source);\n                if (!this._sources.has(source)) {\n                    this._sources.add(source);\n                }\n            }\n\n            if (name != null) {\n                name = String(name);\n                if (!this._names.has(name)) {\n                    this._names.add(name);\n                }\n            }\n\n            this._mappings.add({\n                generatedLine: generated.line,\n                generatedColumn: generated.column,\n                originalLine: original != null && original.line,\n                originalColumn: original != null && original.column,\n                source: source,\n                name: name\n            });\n        };\n\n    /**\n     * Set the source content for a source file.\n     */\n    SourceMapGenerator.prototype.setSourceContent =\n        function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n            var source = aSourceFile;\n            if (this._sourceRoot != null) {\n                source = util.relative(this._sourceRoot, source);\n            }\n\n            if (aSourceContent != null) {\n                // Add the source content to the _sourcesContents map.\n                // Create a new _sourcesContents map if the property is null.\n                if (!this._sourcesContents) {\n                    this._sourcesContents = Object.create(null);\n                }\n                this._sourcesContents[util.toSetString(source)] = aSourceContent;\n            } else if (this._sourcesContents) {\n                // Remove the source file from the _sourcesContents map.\n                // If the _sourcesContents map is empty, set the property to null.\n                delete this._sourcesContents[util.toSetString(source)];\n                if (Object.keys(this._sourcesContents).length === 0) {\n                    this._sourcesContents = null;\n                }\n            }\n        };\n\n    /**\n     * Applies the mappings of a sub-source-map for a specific source file to the\n     * source map being generated. Each mapping to the supplied source file is\n     * rewritten using the supplied source map. Note: The resolution for the\n     * resulting mappings is the minimium of this map and the supplied map.\n     *\n     * @param aSourceMapConsumer The source map to be applied.\n     * @param aSourceFile Optional. The filename of the source file.\n     *        If omitted, SourceMapConsumer's file property will be used.\n     * @param aSourceMapPath Optional. The dirname of the path to the source map\n     *        to be applied. If relative, it is relative to the SourceMapConsumer.\n     *        This parameter is needed when the two source maps aren't in the same\n     *        directory, and the source map to be applied contains relative source\n     *        paths. If so, those relative source paths need to be rewritten\n     *        relative to the SourceMapGenerator.\n     */\n    SourceMapGenerator.prototype.applySourceMap =\n        function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n            var sourceFile = aSourceFile;\n            // If aSourceFile is omitted, we will use the file property of the SourceMap\n            if (aSourceFile == null) {\n                if (aSourceMapConsumer.file == null) {\n                    throw new Error(\n                        'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n                        'or the source map\\'s \"file\" property. Both were omitted.'\n                    );\n                }\n                sourceFile = aSourceMapConsumer.file;\n            }\n            var sourceRoot = this._sourceRoot;\n            // Make \"sourceFile\" relative if an absolute Url is passed.\n            if (sourceRoot != null) {\n                sourceFile = util.relative(sourceRoot, sourceFile);\n            }\n            // Applying the SourceMap can add and remove items from the sources and\n            // the names array.\n            var newSources = new ArraySet$1();\n            var newNames = new ArraySet$1();\n\n            // Find mappings for the \"sourceFile\"\n            this._mappings.unsortedForEach(function (mapping) {\n                if (mapping.source === sourceFile && mapping.originalLine != null) {\n                    // Check if it can be mapped by the source map, then update the mapping.\n                    var original = aSourceMapConsumer.originalPositionFor({\n                        line: mapping.originalLine,\n                        column: mapping.originalColumn\n                    });\n                    if (original.source != null) {\n                        // Copy mapping\n                        mapping.source = original.source;\n                        if (aSourceMapPath != null) {\n                            mapping.source = util.join(aSourceMapPath, mapping.source);\n                        }\n                        if (sourceRoot != null) {\n                            mapping.source = util.relative(sourceRoot, mapping.source);\n                        }\n                        mapping.originalLine = original.line;\n                        mapping.originalColumn = original.column;\n                        if (original.name != null) {\n                            mapping.name = original.name;\n                        }\n                    }\n                }\n\n                var source = mapping.source;\n                if (source != null && !newSources.has(source)) {\n                    newSources.add(source);\n                }\n\n                var name = mapping.name;\n                if (name != null && !newNames.has(name)) {\n                    newNames.add(name);\n                }\n\n            }, this);\n            this._sources = newSources;\n            this._names = newNames;\n\n            // Copy sourcesContents of applied map.\n            aSourceMapConsumer.sources.forEach(function (sourceFile) {\n                var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n                if (content != null) {\n                    if (aSourceMapPath != null) {\n                        sourceFile = util.join(aSourceMapPath, sourceFile);\n                    }\n                    if (sourceRoot != null) {\n                        sourceFile = util.relative(sourceRoot, sourceFile);\n                    }\n                    this.setSourceContent(sourceFile, content);\n                }\n            }, this);\n        };\n\n    /**\n     * A mapping can have one of the three levels of data:\n     *\n     *   1. Just the generated position.\n     *   2. The Generated position, original position, and original source.\n     *   3. Generated and original position, original source, as well as a name\n     *      token.\n     *\n     * To maintain consistency, we validate that any new mapping being added falls\n     * in to one of these categories.\n     */\n    SourceMapGenerator.prototype._validateMapping =\n        function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                                    aName) {\n            // When aOriginal is truthy but has empty values for .line and .column,\n            // it is most likely a programmer error. In this case we throw a very\n            // specific error message to try to guide them the right way.\n            // For example: https://github.com/Polymer/polymer-bundler/pull/519\n            if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n                throw new Error(\n                    'original.line and original.column are not numbers -- you probably meant to omit ' +\n                    'the original mapping entirely and only map the generated position. If so, pass ' +\n                    'null for the original mapping instead of an object with empty or null values.'\n                );\n            }\n\n            if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n                && aGenerated.line > 0 && aGenerated.column >= 0\n                && !aOriginal && !aSource && !aName) {\n                // Case 1.\n                return;\n            }\n            else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n                && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n                && aGenerated.line > 0 && aGenerated.column >= 0\n                && aOriginal.line > 0 && aOriginal.column >= 0\n                && aSource) {\n                // Cases 2 and 3.\n                return;\n            }\n            else {\n                throw new Error('Invalid mapping: ' + JSON.stringify({\n                    generated: aGenerated,\n                    source: aSource,\n                    original: aOriginal,\n                    name: aName\n                }));\n            }\n        };\n\n    /**\n     * Serialize the accumulated mappings in to the stream of base 64 VLQs\n     * specified by the source map format.\n     */\n    SourceMapGenerator.prototype._serializeMappings =\n        function SourceMapGenerator_serializeMappings() {\n            var previousGeneratedColumn = 0;\n            var previousGeneratedLine = 1;\n            var previousOriginalColumn = 0;\n            var previousOriginalLine = 0;\n            var previousName = 0;\n            var previousSource = 0;\n            var result = '';\n            var next;\n            var mapping;\n            var nameIdx;\n            var sourceIdx;\n\n            var mappings = this._mappings.toArray();\n            for (var i = 0, len = mappings.length; i < len; i++) {\n                mapping = mappings[i];\n                next = '';\n\n                if (mapping.generatedLine !== previousGeneratedLine) {\n                    previousGeneratedColumn = 0;\n                    while (mapping.generatedLine !== previousGeneratedLine) {\n                        next += ';';\n                        previousGeneratedLine++;\n                    }\n                }\n                else {\n                    if (i > 0) {\n                        if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n                            continue;\n                        }\n                        next += ',';\n                    }\n                }\n\n                next += base64Vlq.encode(mapping.generatedColumn\n                    - previousGeneratedColumn);\n                previousGeneratedColumn = mapping.generatedColumn;\n\n                if (mapping.source != null) {\n                    sourceIdx = this._sources.indexOf(mapping.source);\n                    next += base64Vlq.encode(sourceIdx - previousSource);\n                    previousSource = sourceIdx;\n\n                    // lines are stored 0-based in SourceMap spec version 3\n                    next += base64Vlq.encode(mapping.originalLine - 1\n                        - previousOriginalLine);\n                    previousOriginalLine = mapping.originalLine - 1;\n\n                    next += base64Vlq.encode(mapping.originalColumn\n                        - previousOriginalColumn);\n                    previousOriginalColumn = mapping.originalColumn;\n\n                    if (mapping.name != null) {\n                        nameIdx = this._names.indexOf(mapping.name);\n                        next += base64Vlq.encode(nameIdx - previousName);\n                        previousName = nameIdx;\n                    }\n                }\n\n                result += next;\n            }\n\n            return result;\n        };\n\n    SourceMapGenerator.prototype._generateSourcesContent =\n        function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n            return aSources.map(function (source) {\n                if (!this._sourcesContents) {\n                    return null;\n                }\n                if (aSourceRoot != null) {\n                    source = util.relative(aSourceRoot, source);\n                }\n                var key = util.toSetString(source);\n                return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n                    ? this._sourcesContents[key]\n                    : null;\n            }, this);\n        };\n\n    /**\n     * Externalize the source map.\n     */\n    SourceMapGenerator.prototype.toJSON =\n        function SourceMapGenerator_toJSON() {\n            var map = {\n                version: this._version,\n                sources: this._sources.toArray(),\n                names: this._names.toArray(),\n                mappings: this._serializeMappings()\n            };\n            if (this._file != null) {\n                map.file = this._file;\n            }\n            if (this._sourceRoot != null) {\n                map.sourceRoot = this._sourceRoot;\n            }\n            if (this._sourcesContents) {\n                map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n            }\n\n            return map;\n        };\n\n    /**\n     * Render the source map being generated to a string.\n     */\n    SourceMapGenerator.prototype.toString =\n        function SourceMapGenerator_toString() {\n            return JSON.stringify(this.toJSON());\n        };\n\n    var SourceMapGenerator_1 = SourceMapGenerator;\n\n    var sourceMapGenerator = {\n        SourceMapGenerator: SourceMapGenerator_1\n    };\n\n    var SourceMapGenerator$1 = sourceMapGenerator.SourceMapGenerator;\n    var trackNodes = {\n        Atrule: true,\n        Selector: true,\n        Declaration: true\n    };\n\n    var sourceMap = function generateSourceMap(handlers) {\n        var map = new SourceMapGenerator$1();\n        var line = 1;\n        var column = 0;\n        var generated = {\n            line: 1,\n            column: 0\n        };\n        var original = {\n            line: 0, // should be zero to add first mapping\n            column: 0\n        };\n        var sourceMappingActive = false;\n        var activatedGenerated = {\n            line: 1,\n            column: 0\n        };\n        var activatedMapping = {\n            generated: activatedGenerated\n        };\n\n        var handlersNode = handlers.node;\n        handlers.node = function(node) {\n            if (node.loc && node.loc.start && trackNodes.hasOwnProperty(node.type)) {\n                var nodeLine = node.loc.start.line;\n                var nodeColumn = node.loc.start.column - 1;\n\n                if (original.line !== nodeLine ||\n                    original.column !== nodeColumn) {\n                    original.line = nodeLine;\n                    original.column = nodeColumn;\n\n                    generated.line = line;\n                    generated.column = column;\n\n                    if (sourceMappingActive) {\n                        sourceMappingActive = false;\n                        if (generated.line !== activatedGenerated.line ||\n                            generated.column !== activatedGenerated.column) {\n                            map.addMapping(activatedMapping);\n                        }\n                    }\n\n                    sourceMappingActive = true;\n                    map.addMapping({\n                        source: node.loc.source,\n                        original: original,\n                        generated: generated\n                    });\n                }\n            }\n\n            handlersNode.call(this, node);\n\n            if (sourceMappingActive && trackNodes.hasOwnProperty(node.type)) {\n                activatedGenerated.line = line;\n                activatedGenerated.column = column;\n            }\n        };\n\n        var handlersChunk = handlers.chunk;\n        handlers.chunk = function(chunk) {\n            for (var i = 0; i < chunk.length; i++) {\n                if (chunk.charCodeAt(i) === 10) { // \\n\n                    line++;\n                    column = 0;\n                } else {\n                    column++;\n                }\n            }\n\n            handlersChunk(chunk);\n        };\n\n        var handlersResult = handlers.result;\n        handlers.result = function() {\n            if (sourceMappingActive) {\n                map.addMapping(activatedMapping);\n            }\n\n            return {\n                css: handlersResult(),\n                map: map\n            };\n        };\n\n        return handlers;\n    };\n\n    var hasOwnProperty$3 = Object.prototype.hasOwnProperty;\n\n    function processChildren(node, delimeter) {\n        var list = node.children;\n        var prev = null;\n\n        if (typeof delimeter !== 'function') {\n            list.forEach(this.node, this);\n        } else {\n            list.forEach(function(node) {\n                if (prev !== null) {\n                    delimeter.call(this, prev);\n                }\n\n                this.node(node);\n                prev = node;\n            }, this);\n        }\n    }\n\n    var create$1 = function createGenerator(config) {\n        function processNode(node) {\n            if (hasOwnProperty$3.call(types, node.type)) {\n                types[node.type].call(this, node);\n            } else {\n                throw new Error('Unknown node type: ' + node.type);\n            }\n        }\n\n        var types = {};\n\n        if (config.node) {\n            for (var name in config.node) {\n                types[name] = config.node[name].generate;\n            }\n        }\n\n        return function(node, options) {\n            var buffer = '';\n            var handlers = {\n                children: processChildren,\n                node: processNode,\n                chunk: function(chunk) {\n                    buffer += chunk;\n                },\n                result: function() {\n                    return buffer;\n                }\n            };\n\n            if (options) {\n                if (typeof options.decorator === 'function') {\n                    handlers = options.decorator(handlers);\n                }\n\n                if (options.sourceMap) {\n                    handlers = sourceMap(handlers);\n                }\n            }\n\n            handlers.node(node);\n\n            return handlers.result();\n        };\n    };\n\n    var create$2 = function createConvertors(walk) {\n        return {\n            fromPlainObject: function(ast) {\n                walk(ast, {\n                    enter: function(node) {\n                        if (node.children && node.children instanceof List_1 === false) {\n                            node.children = new List_1().fromArray(node.children);\n                        }\n                    }\n                });\n\n                return ast;\n            },\n            toPlainObject: function(ast) {\n                walk(ast, {\n                    leave: function(node) {\n                        if (node.children && node.children instanceof List_1) {\n                            node.children = node.children.toArray();\n                        }\n                    }\n                });\n\n                return ast;\n            }\n        };\n    };\n\n    var hasOwnProperty$4 = Object.prototype.hasOwnProperty;\n    var noop$3 = function() {};\n\n    function ensureFunction$1(value) {\n        return typeof value === 'function' ? value : noop$3;\n    }\n\n    function invokeForType(fn, type) {\n        return function(node, item, list) {\n            if (node.type === type) {\n                fn.call(this, node, item, list);\n            }\n        };\n    }\n\n    function getWalkersFromStructure(name, nodeType) {\n        var structure = nodeType.structure;\n        var walkers = [];\n\n        for (var key in structure) {\n            if (hasOwnProperty$4.call(structure, key) === false) {\n                continue;\n            }\n\n            var fieldTypes = structure[key];\n            var walker = {\n                name: key,\n                type: false,\n                nullable: false\n            };\n\n            if (!Array.isArray(structure[key])) {\n                fieldTypes = [structure[key]];\n            }\n\n            for (var i = 0; i < fieldTypes.length; i++) {\n                var fieldType = fieldTypes[i];\n                if (fieldType === null) {\n                    walker.nullable = true;\n                } else if (typeof fieldType === 'string') {\n                    walker.type = 'node';\n                } else if (Array.isArray(fieldType)) {\n                    walker.type = 'list';\n                }\n            }\n\n            if (walker.type) {\n                walkers.push(walker);\n            }\n        }\n\n        if (walkers.length) {\n            return {\n                context: nodeType.walkContext,\n                fields: walkers\n            };\n        }\n\n        return null;\n    }\n\n    function getTypesFromConfig(config) {\n        var types = {};\n\n        for (var name in config.node) {\n            if (hasOwnProperty$4.call(config.node, name)) {\n                var nodeType = config.node[name];\n\n                if (!nodeType.structure) {\n                    throw new Error('Missed `structure` field in `' + name + '` node type definition');\n                }\n\n                types[name] = getWalkersFromStructure(name, nodeType);\n            }\n        }\n\n        return types;\n    }\n\n    function createTypeIterator(config, reverse) {\n        var fields = config.fields.slice();\n        var contextName = config.context;\n        var useContext = typeof contextName === 'string';\n\n        if (reverse) {\n            fields.reverse();\n        }\n\n        return function(node, context, walk) {\n            var prevContextValue;\n\n            if (useContext) {\n                prevContextValue = context[contextName];\n                context[contextName] = node;\n            }\n\n            for (var i = 0; i < fields.length; i++) {\n                var field = fields[i];\n                var ref = node[field.name];\n\n                if (!field.nullable || ref) {\n                    if (field.type === 'list') {\n                        if (reverse) {\n                            ref.forEachRight(walk);\n                        } else {\n                            ref.forEach(walk);\n                        }\n                    } else {\n                        walk(ref);\n                    }\n                }\n            }\n\n            if (useContext) {\n                context[contextName] = prevContextValue;\n            }\n        };\n    }\n\n    function createFastTraveralMap(iterators) {\n        return {\n            Atrule: {\n                StyleSheet: iterators.StyleSheet,\n                Atrule: iterators.Atrule,\n                Rule: iterators.Rule,\n                Block: iterators.Block\n            },\n            Rule: {\n                StyleSheet: iterators.StyleSheet,\n                Atrule: iterators.Atrule,\n                Rule: iterators.Rule,\n                Block: iterators.Block\n            },\n            Declaration: {\n                StyleSheet: iterators.StyleSheet,\n                Atrule: iterators.Atrule,\n                Rule: iterators.Rule,\n                Block: iterators.Block,\n                DeclarationList: iterators.DeclarationList\n            }\n        };\n    }\n\n    var create$3 = function createWalker(config) {\n        var types = getTypesFromConfig(config);\n        var iteratorsNatural = {};\n        var iteratorsReverse = {};\n\n        for (var name in types) {\n            if (hasOwnProperty$4.call(types, name) && types[name] !== null) {\n                iteratorsNatural[name] = createTypeIterator(types[name], false);\n                iteratorsReverse[name] = createTypeIterator(types[name], true);\n            }\n        }\n\n        var fastTraversalIteratorsNatural = createFastTraveralMap(iteratorsNatural);\n        var fastTraversalIteratorsReverse = createFastTraveralMap(iteratorsReverse);\n\n        var walk = function(root, options) {\n            function walkNode(node, item, list) {\n                enter.call(context, node, item, list);\n\n                if (iterators.hasOwnProperty(node.type)) {\n                    iterators[node.type](node, context, walkNode);\n                }\n\n                leave.call(context, node, item, list);\n            }\n\n            var enter = noop$3;\n            var leave = noop$3;\n            var iterators = iteratorsNatural;\n            var context = {\n                root: root,\n                stylesheet: null,\n                atrule: null,\n                atrulePrelude: null,\n                rule: null,\n                selector: null,\n                block: null,\n                declaration: null,\n                function: null\n            };\n\n            if (typeof options === 'function') {\n                enter = options;\n            } else if (options) {\n                enter = ensureFunction$1(options.enter);\n                leave = ensureFunction$1(options.leave);\n\n                if (options.reverse) {\n                    iterators = iteratorsReverse;\n                }\n\n                if (options.visit) {\n                    if (fastTraversalIteratorsNatural.hasOwnProperty(options.visit)) {\n                        iterators = options.reverse\n                            ? fastTraversalIteratorsReverse[options.visit]\n                            : fastTraversalIteratorsNatural[options.visit];\n                    } else if (!types.hasOwnProperty(options.visit)) {\n                        throw new Error('Bad value `' + options.visit + '` for `visit` option (should be: ' + Object.keys(types).join(', ') + ')');\n                    }\n\n                    enter = invokeForType(enter, options.visit);\n                    leave = invokeForType(leave, options.visit);\n                }\n            }\n\n            if (enter === noop$3 && leave === noop$3) {\n                throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\\'t a function');\n            }\n\n            // swap handlers in reverse mode to invert visit order\n            if (options.reverse) {\n                var tmp = enter;\n                enter = leave;\n                leave = tmp;\n            }\n\n            walkNode(root);\n        };\n\n        walk.find = function(ast, fn) {\n            var found = null;\n\n            walk(ast, function(node, item, list) {\n                if (found === null && fn.call(this, node, item, list)) {\n                    found = node;\n                }\n            });\n\n            return found;\n        };\n\n        walk.findLast = function(ast, fn) {\n            var found = null;\n\n            walk(ast, {\n                reverse: true,\n                enter: function(node, item, list) {\n                    if (found === null && fn.call(this, node, item, list)) {\n                        found = node;\n                    }\n                }\n            });\n\n            return found;\n        };\n\n        walk.findAll = function(ast, fn) {\n            var found = [];\n\n            walk(ast, function(node, item, list) {\n                if (fn.call(this, node, item, list)) {\n                    found.push(node);\n                }\n            });\n\n            return found;\n        };\n\n        return walk;\n    };\n\n    var clone = function clone(node) {\n        var result = {};\n\n        for (var key in node) {\n            var value = node[key];\n\n            if (value) {\n                if (Array.isArray(value) || value instanceof List_1) {\n                    value = value.map(clone);\n                } else if (value.constructor === Object) {\n                    value = clone(value);\n                }\n            }\n\n            result[key] = value;\n        }\n\n        return result;\n    };\n\n    var hasOwnProperty$5 = Object.prototype.hasOwnProperty;\n    var shape = {\n        generic: true,\n        types: {},\n        atrules: {},\n        properties: {},\n        parseContext: {},\n        scope: {},\n        atrule: ['parse'],\n        pseudo: ['parse'],\n        node: ['name', 'structure', 'parse', 'generate', 'walkContext']\n    };\n\n    function isObject(value) {\n        return value && value.constructor === Object;\n    }\n\n    function copy(value) {\n        if (isObject(value)) {\n            return Object.assign({}, value);\n        } else {\n            return value;\n        }\n    }\n    function extend(dest, src) {\n        for (var key in src) {\n            if (hasOwnProperty$5.call(src, key)) {\n                if (isObject(dest[key])) {\n                    extend(dest[key], copy(src[key]));\n                } else {\n                    dest[key] = copy(src[key]);\n                }\n            }\n        }\n    }\n\n    function mix(dest, src, shape) {\n        for (var key in shape) {\n            if (hasOwnProperty$5.call(shape, key) === false) {\n                continue;\n            }\n\n            if (shape[key] === true) {\n                if (key in src) {\n                    if (hasOwnProperty$5.call(src, key)) {\n                        dest[key] = copy(src[key]);\n                    }\n                }\n            } else if (shape[key]) {\n                if (isObject(shape[key])) {\n                    var res = {};\n                    extend(res, dest[key]);\n                    extend(res, src[key]);\n                    dest[key] = res;\n                } else if (Array.isArray(shape[key])) {\n                    var res = {};\n                    var innerShape = shape[key].reduce(function(s, k) {\n                        s[k] = true;\n                        return s;\n                    }, {});\n                    for (var name in dest[key]) {\n                        if (hasOwnProperty$5.call(dest[key], name)) {\n                            res[name] = {};\n                            if (dest[key] && dest[key][name]) {\n                                mix(res[name], dest[key][name], innerShape);\n                            }\n                        }\n                    }\n                    for (var name in src[key]) {\n                        if (hasOwnProperty$5.call(src[key], name)) {\n                            if (!res[name]) {\n                                res[name] = {};\n                            }\n                            if (src[key] && src[key][name]) {\n                                mix(res[name], src[key][name], innerShape);\n                            }\n                        }\n                    }\n                    dest[key] = res;\n                }\n            }\n        }\n        return dest;\n    }\n\n    var mix_1 = function(dest, src) {\n        return mix(dest, src, shape);\n    };\n\n    function createSyntax(config) {\n        var parse = create(config);\n        var walk = create$3(config);\n        var generate = create$1(config);\n        var convert = create$2(walk);\n\n        var syntax = {\n            List: List_1,\n            SyntaxError: _SyntaxError,\n            TokenStream: TokenStream_1,\n            Lexer: Lexer_1,\n\n            vendorPrefix: names.vendorPrefix,\n            keyword: names.keyword,\n            property: names.property,\n            isCustomProperty: names.isCustomProperty,\n\n            definitionSyntax: definitionSyntax,\n            lexer: null,\n            createLexer: function(config) {\n                return new Lexer_1(config, syntax, syntax.lexer.structure);\n            },\n\n            tokenize: tokenizer,\n            parse: parse,\n            walk: walk,\n            generate: generate,\n\n            find: walk.find,\n            findLast: walk.findLast,\n            findAll: walk.findAll,\n\n            clone: clone,\n            fromPlainObject: convert.fromPlainObject,\n            toPlainObject: convert.toPlainObject,\n\n            createSyntax: function(config) {\n                return createSyntax(mix_1({}, config));\n            },\n            fork: function(extension) {\n                var base = mix_1({}, config); // copy of config\n                return createSyntax(\n                    typeof extension === 'function'\n                        ? extension(base, Object.assign)\n                        : mix_1(base, extension)\n                );\n            }\n        };\n\n        syntax.lexer = new Lexer_1({\n            generic: true,\n            types: config.types,\n            atrules: config.atrules,\n            properties: config.properties,\n            node: config.node\n        }, syntax);\n\n        return syntax;\n    }\n    var create_1 = function(config) {\n        return createSyntax(mix_1({}, config));\n    };\n\n    var create$4 = {\n        create: create_1\n    };\n\n    var generic$1 = true;\n    var types = {\n        \"absolute-size\": \"xx-small|x-small|small|medium|large|x-large|xx-large\",\n        \"alpha-value\": \"<number>|<percentage>\",\n        \"angle-percentage\": \"<angle>|<percentage>\",\n        \"angular-color-hint\": \"<angle-percentage>\",\n        \"angular-color-stop\": \"<color>&&<color-stop-angle>?\",\n        \"angular-color-stop-list\": \"[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>\",\n        \"animateable-feature\": \"scroll-position|contents|<custom-ident>\",\n        attachment: \"scroll|fixed|local\",\n        \"attr()\": \"attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )\",\n        \"attr-matcher\": \"['~'|'|'|'^'|'$'|'*']? '='\",\n        \"attr-modifier\": \"i|s\",\n        \"attribute-selector\": \"'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'\",\n        \"auto-repeat\": \"repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )\",\n        \"auto-track-list\": \"[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?\",\n        \"baseline-position\": \"[first|last]? baseline\",\n        \"basic-shape\": \"<inset()>|<circle()>|<ellipse()>|<polygon()>\",\n        \"bg-image\": \"none|<image>\",\n        \"bg-layer\": \"<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>\",\n        \"bg-position\": \"[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]\",\n        \"bg-size\": \"[<length-percentage>|auto]{1,2}|cover|contain\",\n        \"blur()\": \"blur( <length> )\",\n        \"blend-mode\": \"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity\",\n        box: \"border-box|padding-box|content-box\",\n        \"brightness()\": \"brightness( <number-percentage> )\",\n        \"calc()\": \"calc( <calc-sum> )\",\n        \"calc-sum\": \"<calc-product> [['+'|'-'] <calc-product>]*\",\n        \"calc-product\": \"<calc-value> ['*' <calc-value>|'/' <number>]*\",\n        \"calc-value\": \"<number>|<dimension>|<percentage>|( <calc-sum> )\",\n        \"cf-final-image\": \"<image>|<color>\",\n        \"cf-mixing-image\": \"<percentage>?&&<image>\",\n        \"circle()\": \"circle( [<shape-radius>]? [at <position>]? )\",\n        \"clamp()\": \"clamp( <calc-sum>#{3} )\",\n        \"class-selector\": \"'.' <ident-token>\",\n        \"clip-source\": \"<url>\",\n        color: \"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>\",\n        \"color-stop\": \"<color-stop-length>|<color-stop-angle>\",\n        \"color-stop-angle\": \"<angle-percentage>{1,2}\",\n        \"color-stop-length\": \"<length-percentage>{1,2}\",\n        \"color-stop-list\": \"[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>\",\n        combinator: \"'>'|'+'|'~'|['||']\",\n        \"common-lig-values\": \"[common-ligatures|no-common-ligatures]\",\n        compat: \"searchfield|textarea|push-button|button-bevel|slider-horizontal|checkbox|radio|square-button|menulist|menulist-button|listbox|meter|progress-bar\",\n        \"composite-style\": \"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor\",\n        \"compositing-operator\": \"add|subtract|intersect|exclude\",\n        \"compound-selector\": \"[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!\",\n        \"compound-selector-list\": \"<compound-selector>#\",\n        \"complex-selector\": \"<compound-selector> [<combinator>? <compound-selector>]*\",\n        \"complex-selector-list\": \"<complex-selector>#\",\n        \"conic-gradient()\": \"conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )\",\n        \"contextual-alt-values\": \"[contextual|no-contextual]\",\n        \"content-distribution\": \"space-between|space-around|space-evenly|stretch\",\n        \"content-list\": \"[<string>|contents|<url>|<quote>|<attr()>|counter( <ident> , <'list-style-type'>? )]+\",\n        \"content-position\": \"center|start|end|flex-start|flex-end\",\n        \"content-replacement\": \"<image>\",\n        \"contrast()\": \"contrast( [<number-percentage>] )\",\n        \"counter()\": \"counter( <custom-ident> , [<counter-style>|none]? )\",\n        \"counter-style\": \"<counter-style-name>|symbols( )\",\n        \"counter-style-name\": \"<custom-ident>\",\n        \"counters()\": \"counters( <custom-ident> , <string> , [<counter-style>|none]? )\",\n        \"cross-fade()\": \"cross-fade( <cf-mixing-image> , <cf-final-image>? )\",\n        \"cubic-bezier-timing-function\": \"ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number> , <number> , <number> , <number> )\",\n        \"deprecated-system-color\": \"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText\",\n        \"discretionary-lig-values\": \"[discretionary-ligatures|no-discretionary-ligatures]\",\n        \"display-box\": \"contents|none\",\n        \"display-inside\": \"flow|flow-root|table|flex|grid|ruby\",\n        \"display-internal\": \"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container\",\n        \"display-legacy\": \"inline-block|inline-list-item|inline-table|inline-flex|inline-grid\",\n        \"display-listitem\": \"<display-outside>?&&[flow|flow-root]?&&list-item\",\n        \"display-outside\": \"block|inline|run-in\",\n        \"drop-shadow()\": \"drop-shadow( <length>{2,3} <color>? )\",\n        \"east-asian-variant-values\": \"[jis78|jis83|jis90|jis04|simplified|traditional]\",\n        \"east-asian-width-values\": \"[full-width|proportional-width]\",\n        \"element()\": \"element( <id-selector> )\",\n        \"ellipse()\": \"ellipse( [<shape-radius>{2}]? [at <position>]? )\",\n        \"ending-shape\": \"circle|ellipse\",\n        \"env()\": \"env( <custom-ident> , <declaration-value>? )\",\n        \"explicit-track-list\": \"[<line-names>? <track-size>]+ <line-names>?\",\n        \"family-name\": \"<string>|<custom-ident>+\",\n        \"feature-tag-value\": \"<string> [<integer>|on|off]?\",\n        \"feature-type\": \"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation\",\n        \"feature-value-block\": \"<feature-type> '{' <feature-value-declaration-list> '}'\",\n        \"feature-value-block-list\": \"<feature-value-block>+\",\n        \"feature-value-declaration\": \"<custom-ident> : <integer>+ ;\",\n        \"feature-value-declaration-list\": \"<feature-value-declaration>\",\n        \"feature-value-name\": \"<custom-ident>\",\n        \"fill-rule\": \"nonzero|evenodd\",\n        \"filter-function\": \"<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>\",\n        \"filter-function-list\": \"[<filter-function>|<url>]+\",\n        \"final-bg-layer\": \"<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>\",\n        \"fit-content()\": \"fit-content( [<length>|<percentage>] )\",\n        \"fixed-breadth\": \"<length-percentage>\",\n        \"fixed-repeat\": \"repeat( [<positive-integer>] , [<line-names>? <fixed-size>]+ <line-names>? )\",\n        \"fixed-size\": \"<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )\",\n        \"font-stretch-absolute\": \"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>\",\n        \"font-variant-css21\": \"[normal|small-caps]\",\n        \"font-weight-absolute\": \"normal|bold|<number>\",\n        \"frequency-percentage\": \"<frequency>|<percentage>\",\n        \"general-enclosed\": \"[<function-token> <any-value> )]|( <ident> <any-value> )\",\n        \"generic-family\": \"serif|sans-serif|cursive|fantasy|monospace|-apple-system\",\n        \"generic-name\": \"serif|sans-serif|cursive|fantasy|monospace\",\n        \"geometry-box\": \"<shape-box>|fill-box|stroke-box|view-box\",\n        gradient: \"<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<-legacy-gradient>\",\n        \"grayscale()\": \"grayscale( <number-percentage> )\",\n        \"grid-line\": \"auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]\",\n        \"historical-lig-values\": \"[historical-ligatures|no-historical-ligatures]\",\n        \"hsl()\": \"hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\n        \"hsla()\": \"hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\n        hue: \"<number>|<angle>\",\n        \"hue-rotate()\": \"hue-rotate( <angle> )\",\n        image: \"<url>|<image()>|<image-set()>|<element()>|<cross-fade()>|<gradient>\",\n        \"image()\": \"image( <image-tags>? [<image-src>? , <color>?]! )\",\n        \"image-set()\": \"image-set( <image-set-option># )\",\n        \"image-set-option\": \"[<image>|<string>] <resolution>\",\n        \"image-src\": \"<url>|<string>\",\n        \"image-tags\": \"ltr|rtl\",\n        \"inflexible-breadth\": \"<length>|<percentage>|min-content|max-content|auto\",\n        \"inset()\": \"inset( <length-percentage>{1,4} [round <'border-radius'>]? )\",\n        \"invert()\": \"invert( <number-percentage> )\",\n        \"keyframes-name\": \"<custom-ident>|<string>\",\n        \"keyframe-block\": \"<keyframe-selector># { <declaration-list> }\",\n        \"keyframe-block-list\": \"<keyframe-block>+\",\n        \"keyframe-selector\": \"from|to|<percentage>\",\n        \"leader()\": \"leader( <leader-type> )\",\n        \"leader-type\": \"dotted|solid|space|<string>\",\n        \"length-percentage\": \"<length>|<percentage>\",\n        \"line-names\": \"'[' <custom-ident>* ']'\",\n        \"line-name-list\": \"[<line-names>|<name-repeat>]+\",\n        \"line-style\": \"none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset\",\n        \"line-width\": \"<length>|thin|medium|thick\",\n        \"linear-color-hint\": \"<length-percentage>\",\n        \"linear-color-stop\": \"<color> <color-stop-length>?\",\n        \"linear-gradient()\": \"linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )\",\n        \"mask-layer\": \"<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>\",\n        \"mask-position\": \"[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?\",\n        \"mask-reference\": \"none|<image>|<mask-source>\",\n        \"mask-source\": \"<url>\",\n        \"masking-mode\": \"alpha|luminance|match-source\",\n        \"matrix()\": \"matrix( <number>#{6} )\",\n        \"matrix3d()\": \"matrix3d( <number>#{16} )\",\n        \"max()\": \"max( <calc-sum># )\",\n        \"media-and\": \"<media-in-parens> [and <media-in-parens>]+\",\n        \"media-condition\": \"<media-not>|<media-and>|<media-or>|<media-in-parens>\",\n        \"media-condition-without-or\": \"<media-not>|<media-and>|<media-in-parens>\",\n        \"media-feature\": \"( [<mf-plain>|<mf-boolean>|<mf-range>] )\",\n        \"media-in-parens\": \"( <media-condition> )|<media-feature>|<general-enclosed>\",\n        \"media-not\": \"not <media-in-parens>\",\n        \"media-or\": \"<media-in-parens> [or <media-in-parens>]+\",\n        \"media-query\": \"<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?\",\n        \"media-query-list\": \"<media-query>#\",\n        \"media-type\": \"<ident>\",\n        \"mf-boolean\": \"<mf-name>\",\n        \"mf-name\": \"<ident>\",\n        \"mf-plain\": \"<mf-name> : <mf-value>\",\n        \"mf-range\": \"<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>\",\n        \"mf-value\": \"<number>|<dimension>|<ident>|<ratio>\",\n        \"min()\": \"min( <calc-sum># )\",\n        \"minmax()\": \"minmax( [<length>|<percentage>|<flex>|min-content|max-content|auto] , [<length>|<percentage>|<flex>|min-content|max-content|auto] )\",\n        \"named-color\": \"transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>\",\n        \"namespace-prefix\": \"<ident>\",\n        \"ns-prefix\": \"[<ident-token>|'*']? '|'\",\n        \"number-percentage\": \"<number>|<percentage>\",\n        \"numeric-figure-values\": \"[lining-nums|oldstyle-nums]\",\n        \"numeric-fraction-values\": \"[diagonal-fractions|stacked-fractions]\",\n        \"numeric-spacing-values\": \"[proportional-nums|tabular-nums]\",\n        nth: \"<an-plus-b>|even|odd\",\n        \"opacity()\": \"opacity( [<number-percentage>] )\",\n        \"overflow-position\": \"unsafe|safe\",\n        \"outline-radius\": \"<length>|<percentage>\",\n        \"page-body\": \"<declaration>? [; <page-body>]?|<page-margin-box> <page-body>\",\n        \"page-margin-box\": \"<page-margin-box-type> '{' <declaration-list> '}'\",\n        \"page-margin-box-type\": \"@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom\",\n        \"page-selector-list\": \"[<page-selector>#]?\",\n        \"page-selector\": \"<pseudo-page>+|<ident> <pseudo-page>*\",\n        \"perspective()\": \"perspective( <length> )\",\n        \"polygon()\": \"polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )\",\n        position: \"[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]\",\n        \"pseudo-class-selector\": \"':' <ident-token>|':' <function-token> <any-value> ')'\",\n        \"pseudo-element-selector\": \"':' <pseudo-class-selector>\",\n        \"pseudo-page\": \": [left|right|first|blank]\",\n        quote: \"open-quote|close-quote|no-open-quote|no-close-quote\",\n        \"radial-gradient()\": \"radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )\",\n        \"relative-selector\": \"<combinator>? <complex-selector>\",\n        \"relative-selector-list\": \"<relative-selector>#\",\n        \"relative-size\": \"larger|smaller\",\n        \"repeat-style\": \"repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}\",\n        \"repeating-linear-gradient()\": \"repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )\",\n        \"repeating-radial-gradient()\": \"repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )\",\n        \"rgb()\": \"rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )\",\n        \"rgba()\": \"rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )\",\n        \"rotate()\": \"rotate( [<angle>|<zero>] )\",\n        \"rotate3d()\": \"rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )\",\n        \"rotateX()\": \"rotateX( [<angle>|<zero>] )\",\n        \"rotateY()\": \"rotateY( [<angle>|<zero>] )\",\n        \"rotateZ()\": \"rotateZ( [<angle>|<zero>] )\",\n        \"saturate()\": \"saturate( <number-percentage> )\",\n        \"scale()\": \"scale( <number> , <number>? )\",\n        \"scale3d()\": \"scale3d( <number> , <number> , <number> )\",\n        \"scaleX()\": \"scaleX( <number> )\",\n        \"scaleY()\": \"scaleY( <number> )\",\n        \"scaleZ()\": \"scaleZ( <number> )\",\n        \"self-position\": \"center|start|end|self-start|self-end|flex-start|flex-end\",\n        \"shape-radius\": \"<length-percentage>|closest-side|farthest-side\",\n        \"skew()\": \"skew( [<angle>|<zero>] , [<angle>|<zero>]? )\",\n        \"skewX()\": \"skewX( [<angle>|<zero>] )\",\n        \"skewY()\": \"skewY( [<angle>|<zero>] )\",\n        \"sepia()\": \"sepia( <number-percentage> )\",\n        shadow: \"inset?&&<length>{2,4}&&<color>?\",\n        \"shadow-t\": \"[<length>{2,3}&&<color>?]\",\n        shape: \"rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )\",\n        \"shape-box\": \"<box>|margin-box\",\n        \"side-or-corner\": \"[left|right]||[top|bottom]\",\n        \"single-animation\": \"<time>||<timing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]\",\n        \"single-animation-direction\": \"normal|reverse|alternate|alternate-reverse\",\n        \"single-animation-fill-mode\": \"none|forwards|backwards|both\",\n        \"single-animation-iteration-count\": \"infinite|<number>\",\n        \"single-animation-play-state\": \"running|paused\",\n        \"single-transition\": \"[none|<single-transition-property>]||<time>||<timing-function>||<time>\",\n        \"single-transition-property\": \"all|<custom-ident>\",\n        size: \"closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}\",\n        \"step-position\": \"jump-start|jump-end|jump-none|jump-both|start|end\",\n        \"step-timing-function\": \"step-start|step-end|steps( <integer> [, <step-position>]? )\",\n        \"subclass-selector\": \"<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>\",\n        \"supports-condition\": \"not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*\",\n        \"supports-in-parens\": \"( <supports-condition> )|<supports-feature>|<general-enclosed>\",\n        \"supports-feature\": \"<supports-decl>|<supports-selector-fn>\",\n        \"supports-decl\": \"( <declaration> )\",\n        \"supports-selector-fn\": \"selector( <complex-selector> )\",\n        symbol: \"<string>|<image>|<custom-ident>\",\n        target: \"<target-counter()>|<target-counters()>|<target-text()>\",\n        \"target-counter()\": \"target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )\",\n        \"target-counters()\": \"target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )\",\n        \"target-text()\": \"target-text( [<string>|<url>] , [content|before|after|first-letter]? )\",\n        \"time-percentage\": \"<time>|<percentage>\",\n        \"timing-function\": \"linear|<cubic-bezier-timing-function>|<step-timing-function>\",\n        \"track-breadth\": \"<length-percentage>|<flex>|min-content|max-content|auto\",\n        \"track-list\": \"[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?\",\n        \"track-repeat\": \"repeat( [<positive-integer>] , [<line-names>? <track-size>]+ <line-names>? )\",\n        \"track-size\": \"<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( [<length>|<percentage>] )\",\n        \"transform-function\": \"<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>\",\n        \"transform-list\": \"<transform-function>+\",\n        \"translate()\": \"translate( <length-percentage> , <length-percentage>? )\",\n        \"translate3d()\": \"translate3d( <length-percentage> , <length-percentage> , <length> )\",\n        \"translateX()\": \"translateX( <length-percentage> )\",\n        \"translateY()\": \"translateY( <length-percentage> )\",\n        \"translateZ()\": \"translateZ( <length> )\",\n        \"type-or-unit\": \"string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%\",\n        \"type-selector\": \"<wq-name>|<ns-prefix>? '*'\",\n        \"var()\": \"var( <custom-property-name> , <declaration-value>? )\",\n        \"viewport-length\": \"auto|<length-percentage>\",\n        \"wq-name\": \"<ns-prefix>? <ident-token>\",\n        \"-legacy-gradient\": \"<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>\",\n        \"-legacy-linear-gradient\": \"-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )\",\n        \"-legacy-repeating-linear-gradient\": \"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )\",\n        \"-legacy-linear-gradient-arguments\": \"[<angle>|<side-or-corner>]? , <color-stop-list>\",\n        \"-legacy-radial-gradient\": \"-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )\",\n        \"-legacy-repeating-radial-gradient\": \"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )\",\n        \"-legacy-radial-gradient-arguments\": \"[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>\",\n        \"-legacy-radial-gradient-size\": \"closest-side|closest-corner|farthest-side|farthest-corner|contain|cover\",\n        \"-legacy-radial-gradient-shape\": \"circle|ellipse\",\n        \"-non-standard-font\": \"-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body\",\n        \"-non-standard-color\": \"-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text\",\n        \"-non-standard-image-rendering\": \"optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast\",\n        \"-non-standard-overflow\": \"-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable\",\n        \"-non-standard-width\": \"min-intrinsic|intrinsic|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content\",\n        \"-webkit-gradient()\": \"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )\",\n        \"-webkit-gradient-color-stop\": \"from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )\",\n        \"-webkit-gradient-point\": \"[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]\",\n        \"-webkit-gradient-radius\": \"<length>|<percentage>\",\n        \"-webkit-gradient-type\": \"linear|radial\",\n        \"-webkit-mask-box-repeat\": \"repeat|stretch|round\",\n        \"-webkit-mask-clip-style\": \"border|border-box|padding|padding-box|content|content-box|text\",\n        \"-ms-filter-function-list\": \"<-ms-filter-function>+\",\n        \"-ms-filter-function\": \"<-ms-filter-function-progid>|<-ms-filter-function-legacy>\",\n        \"-ms-filter-function-progid\": \"'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]\",\n        \"-ms-filter-function-legacy\": \"<ident-token>|<function-token> <any-value>? )\",\n        \"-ms-filter\": \"<string>\",\n        age: \"child|young|old\",\n        \"attr-name\": \"<wq-name>\",\n        \"attr-fallback\": \"<any-value>\",\n        \"border-radius\": \"<length-percentage>{1,2}\",\n        bottom: \"<length>|auto\",\n        \"generic-voice\": \"[<age>? <gender> <integer>?]\",\n        gender: \"male|female|neutral\",\n        left: \"<length>|auto\",\n        \"mask-image\": \"<mask-reference>#\",\n        \"name-repeat\": \"repeat( [<positive-integer>|auto-fill] , <line-names>+ )\",\n        paint: \"none|<color>|<url> [none|<color>]?|context-fill|context-stroke\",\n        \"path()\": \"path( <string> )\",\n        ratio: \"<integer> / <integer>\",\n        right: \"<length>|auto\",\n        \"svg-length\": \"<percentage>|<length>|<number>\",\n        \"svg-writing-mode\": \"lr-tb|rl-tb|tb-rl|lr|rl|tb\",\n        top: \"<length>|auto\",\n        \"track-group\": \"'(' [<string>* <track-minmax> <string>*]+ ')' ['[' <positive-integer> ']']?|<track-minmax>\",\n        \"track-list-v0\": \"[<string>* <track-group> <string>*]+|none\",\n        \"track-minmax\": \"minmax( <track-breadth> , <track-breadth> )|auto|<track-breadth>|fit-content\",\n        x: \"<number>\",\n        y: \"<number>\",\n        declaration: \"<ident-token> : <declaration-value>? ['!' important]?\",\n        \"declaration-list\": \"[<declaration>? ';']* <declaration>?\",\n        url: \"url( <string> <url-modifier>* )|<url-token>\",\n        \"url-modifier\": \"<ident>|<function-token> <any-value> )\",\n        \"number-zero-one\": \"<number [0,1]>\",\n        \"number-one-or-greater\": \"<number [1,\u221e]>\",\n        \"positive-integer\": \"<integer [0,\u221e]>\"\n    };\n    var properties$1 = {\n        \"--*\": \"<declaration-value>\",\n        \"-ms-accelerator\": \"false|true\",\n        \"-ms-block-progression\": \"tb|rl|bt|lr\",\n        \"-ms-content-zoom-chaining\": \"none|chained\",\n        \"-ms-content-zooming\": \"none|zoom\",\n        \"-ms-content-zoom-limit\": \"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>\",\n        \"-ms-content-zoom-limit-max\": \"<percentage>\",\n        \"-ms-content-zoom-limit-min\": \"<percentage>\",\n        \"-ms-content-zoom-snap\": \"<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>\",\n        \"-ms-content-zoom-snap-points\": \"snapInterval( <percentage> , <percentage> )|snapList( <percentage># )\",\n        \"-ms-content-zoom-snap-type\": \"none|proximity|mandatory\",\n        \"-ms-filter\": \"<string>\",\n        \"-ms-flow-from\": \"[none|<custom-ident>]#\",\n        \"-ms-flow-into\": \"[none|<custom-ident>]#\",\n        \"-ms-high-contrast-adjust\": \"auto|none\",\n        \"-ms-hyphenate-limit-chars\": \"auto|<integer>{1,3}\",\n        \"-ms-hyphenate-limit-lines\": \"no-limit|<integer>\",\n        \"-ms-hyphenate-limit-zone\": \"<percentage>|<length>\",\n        \"-ms-ime-align\": \"auto|after\",\n        \"-ms-overflow-style\": \"auto|none|scrollbar|-ms-autohiding-scrollbar\",\n        \"-ms-scrollbar-3dlight-color\": \"<color>\",\n        \"-ms-scrollbar-arrow-color\": \"<color>\",\n        \"-ms-scrollbar-base-color\": \"<color>\",\n        \"-ms-scrollbar-darkshadow-color\": \"<color>\",\n        \"-ms-scrollbar-face-color\": \"<color>\",\n        \"-ms-scrollbar-highlight-color\": \"<color>\",\n        \"-ms-scrollbar-shadow-color\": \"<color>\",\n        \"-ms-scrollbar-track-color\": \"<color>\",\n        \"-ms-scroll-chaining\": \"chained|none\",\n        \"-ms-scroll-limit\": \"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>\",\n        \"-ms-scroll-limit-x-max\": \"auto|<length>\",\n        \"-ms-scroll-limit-x-min\": \"<length>\",\n        \"-ms-scroll-limit-y-max\": \"auto|<length>\",\n        \"-ms-scroll-limit-y-min\": \"<length>\",\n        \"-ms-scroll-rails\": \"none|railed\",\n        \"-ms-scroll-snap-points-x\": \"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )\",\n        \"-ms-scroll-snap-points-y\": \"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )\",\n        \"-ms-scroll-snap-type\": \"none|proximity|mandatory\",\n        \"-ms-scroll-snap-x\": \"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>\",\n        \"-ms-scroll-snap-y\": \"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>\",\n        \"-ms-scroll-translation\": \"none|vertical-to-horizontal\",\n        \"-ms-text-autospace\": \"none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space\",\n        \"-ms-touch-select\": \"grippers|none\",\n        \"-ms-user-select\": \"none|element|text\",\n        \"-ms-wrap-flow\": \"auto|both|start|end|maximum|clear\",\n        \"-ms-wrap-margin\": \"<length>\",\n        \"-ms-wrap-through\": \"wrap|none\",\n        \"-moz-appearance\": \"none|button|button-arrow-down|button-arrow-next|button-arrow-previous|button-arrow-up|button-bevel|button-focus|caret|checkbox|checkbox-container|checkbox-label|checkmenuitem|dualbutton|groupbox|listbox|listitem|menuarrow|menubar|menucheckbox|menuimage|menuitem|menuitemtext|menulist|menulist-button|menulist-text|menulist-textfield|menupopup|menuradio|menuseparator|meterbar|meterchunk|progressbar|progressbar-vertical|progresschunk|progresschunk-vertical|radio|radio-container|radio-label|radiomenuitem|range|range-thumb|resizer|resizerpanel|scale-horizontal|scalethumbend|scalethumb-horizontal|scalethumbstart|scalethumbtick|scalethumb-vertical|scale-vertical|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|separator|sheet|spinner|spinner-downbutton|spinner-textfield|spinner-upbutton|splitter|statusbar|statusbarpanel|tab|tabpanel|tabpanels|tab-scroll-arrow-back|tab-scroll-arrow-forward|textfield|textfield-multiline|toolbar|toolbarbutton|toolbarbutton-dropdown|toolbargripper|toolbox|tooltip|treeheader|treeheadercell|treeheadersortarrow|treeitem|treeline|treetwisty|treetwistyopen|treeview|-moz-mac-unified-toolbar|-moz-win-borderless-glass|-moz-win-browsertabbar-toolbox|-moz-win-communicationstext|-moz-win-communications-toolbox|-moz-win-exclude-glass|-moz-win-glass|-moz-win-mediatext|-moz-win-media-toolbox|-moz-window-button-box|-moz-window-button-box-maximized|-moz-window-button-close|-moz-window-button-maximize|-moz-window-button-minimize|-moz-window-button-restore|-moz-window-frame-bottom|-moz-window-frame-left|-moz-window-frame-right|-moz-window-titlebar|-moz-window-titlebar-maximized\",\n        \"-moz-binding\": \"<url>|none\",\n        \"-moz-border-bottom-colors\": \"<color>+|none\",\n        \"-moz-border-left-colors\": \"<color>+|none\",\n        \"-moz-border-right-colors\": \"<color>+|none\",\n        \"-moz-border-top-colors\": \"<color>+|none\",\n        \"-moz-context-properties\": \"none|[fill|fill-opacity|stroke|stroke-opacity]#\",\n        \"-moz-float-edge\": \"border-box|content-box|margin-box|padding-box\",\n        \"-moz-force-broken-image-icon\": \"<integer>\",\n        \"-moz-image-region\": \"<shape>|auto\",\n        \"-moz-orient\": \"inline|block|horizontal|vertical\",\n        \"-moz-outline-radius\": \"<outline-radius>{1,4} [/ <outline-radius>{1,4}]?\",\n        \"-moz-outline-radius-bottomleft\": \"<outline-radius>\",\n        \"-moz-outline-radius-bottomright\": \"<outline-radius>\",\n        \"-moz-outline-radius-topleft\": \"<outline-radius>\",\n        \"-moz-outline-radius-topright\": \"<outline-radius>\",\n        \"-moz-stack-sizing\": \"ignore|stretch-to-fit\",\n        \"-moz-text-blink\": \"none|blink\",\n        \"-moz-user-focus\": \"ignore|normal|select-after|select-before|select-menu|select-same|select-all|none\",\n        \"-moz-user-input\": \"auto|none|enabled|disabled\",\n        \"-moz-user-modify\": \"read-only|read-write|write-only\",\n        \"-moz-window-dragging\": \"drag|no-drag\",\n        \"-moz-window-shadow\": \"default|menu|tooltip|sheet|none\",\n        \"-webkit-appearance\": \"none|button|button-bevel|caps-lock-indicator|caret|checkbox|default-button|listbox|listitem|media-fullscreen-button|media-mute-button|media-play-button|media-seek-back-button|media-seek-forward-button|media-slider|media-sliderthumb|menulist|menulist-button|menulist-text|menulist-textfield|push-button|radio|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|searchfield-cancel-button|searchfield-decoration|searchfield-results-button|searchfield-results-decoration|slider-horizontal|slider-vertical|sliderthumb-horizontal|sliderthumb-vertical|square-button|textarea|textfield\",\n        \"-webkit-border-before\": \"<'border-width'>||<'border-style'>||<'color'>\",\n        \"-webkit-border-before-color\": \"<'color'>\",\n        \"-webkit-border-before-style\": \"<'border-style'>\",\n        \"-webkit-border-before-width\": \"<'border-width'>\",\n        \"-webkit-box-reflect\": \"[above|below|right|left]? <length>? <image>?\",\n        \"-webkit-line-clamp\": \"none|<integer>\",\n        \"-webkit-mask\": \"[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#\",\n        \"-webkit-mask-attachment\": \"<attachment>#\",\n        \"-webkit-mask-clip\": \"[<box>|border|padding|content|text]#\",\n        \"-webkit-mask-composite\": \"<composite-style>#\",\n        \"-webkit-mask-image\": \"<mask-reference>#\",\n        \"-webkit-mask-origin\": \"[<box>|border|padding|content]#\",\n        \"-webkit-mask-position\": \"<position>#\",\n        \"-webkit-mask-position-x\": \"[<length-percentage>|left|center|right]#\",\n        \"-webkit-mask-position-y\": \"[<length-percentage>|top|center|bottom]#\",\n        \"-webkit-mask-repeat\": \"<repeat-style>#\",\n        \"-webkit-mask-repeat-x\": \"repeat|no-repeat|space|round\",\n        \"-webkit-mask-repeat-y\": \"repeat|no-repeat|space|round\",\n        \"-webkit-mask-size\": \"<bg-size>#\",\n        \"-webkit-overflow-scrolling\": \"auto|touch\",\n        \"-webkit-tap-highlight-color\": \"<color>\",\n        \"-webkit-text-fill-color\": \"<color>\",\n        \"-webkit-text-stroke\": \"<length>||<color>\",\n        \"-webkit-text-stroke-color\": \"<color>\",\n        \"-webkit-text-stroke-width\": \"<length>\",\n        \"-webkit-touch-callout\": \"default|none\",\n        \"-webkit-user-modify\": \"read-only|read-write|read-write-plaintext-only\",\n        \"align-content\": \"normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>\",\n        \"align-items\": \"normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]\",\n        \"align-self\": \"auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>\",\n        all: \"initial|inherit|unset|revert\",\n        animation: \"<single-animation>#\",\n        \"animation-delay\": \"<time>#\",\n        \"animation-direction\": \"<single-animation-direction>#\",\n        \"animation-duration\": \"<time>#\",\n        \"animation-fill-mode\": \"<single-animation-fill-mode>#\",\n        \"animation-iteration-count\": \"<single-animation-iteration-count>#\",\n        \"animation-name\": \"[none|<keyframes-name>]#\",\n        \"animation-play-state\": \"<single-animation-play-state>#\",\n        \"animation-timing-function\": \"<timing-function>#\",\n        appearance: \"none|auto|button|textfield|<compat>\",\n        azimuth: \"<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards\",\n        \"backdrop-filter\": \"none|<filter-function-list>\",\n        \"backface-visibility\": \"visible|hidden\",\n        background: \"[<bg-layer> ,]* <final-bg-layer>\",\n        \"background-attachment\": \"<attachment>#\",\n        \"background-blend-mode\": \"<blend-mode>#\",\n        \"background-clip\": \"<box>#\",\n        \"background-color\": \"<color>\",\n        \"background-image\": \"<bg-image>#\",\n        \"background-origin\": \"<box>#\",\n        \"background-position\": \"<bg-position>#\",\n        \"background-position-x\": \"[center|[left|right|x-start|x-end]? <length-percentage>?]#\",\n        \"background-position-y\": \"[center|[top|bottom|y-start|y-end]? <length-percentage>?]#\",\n        \"background-repeat\": \"<repeat-style>#\",\n        \"background-size\": \"<bg-size>#\",\n        \"block-overflow\": \"clip|ellipsis|<string>\",\n        \"block-size\": \"<'width'>\",\n        border: \"<line-width>||<line-style>||<color>\",\n        \"border-block\": \"<'border-top-width'>||<'border-top-style'>||<'color'>\",\n        \"border-block-color\": \"<'border-top-color'>{1,2}\",\n        \"border-block-style\": \"<'border-top-style'>\",\n        \"border-block-width\": \"<'border-top-width'>\",\n        \"border-block-end\": \"<'border-top-width'>||<'border-top-style'>||<'color'>\",\n        \"border-block-end-color\": \"<'border-top-color'>\",\n        \"border-block-end-style\": \"<'border-top-style'>\",\n        \"border-block-end-width\": \"<'border-top-width'>\",\n        \"border-block-start\": \"<'border-top-width'>||<'border-top-style'>||<'color'>\",\n        \"border-block-start-color\": \"<'border-top-color'>\",\n        \"border-block-start-style\": \"<'border-top-style'>\",\n        \"border-block-start-width\": \"<'border-top-width'>\",\n        \"border-bottom\": \"<line-width>||<line-style>||<color>\",\n        \"border-bottom-color\": \"<'border-top-color'>\",\n        \"border-bottom-left-radius\": \"<length-percentage>{1,2}\",\n        \"border-bottom-right-radius\": \"<length-percentage>{1,2}\",\n        \"border-bottom-style\": \"<line-style>\",\n        \"border-bottom-width\": \"<line-width>\",\n        \"border-collapse\": \"collapse|separate\",\n        \"border-color\": \"<color>{1,4}\",\n        \"border-end-end-radius\": \"<length-percentage>{1,2}\",\n        \"border-end-start-radius\": \"<length-percentage>{1,2}\",\n        \"border-image\": \"<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>\",\n        \"border-image-outset\": \"[<length>|<number>]{1,4}\",\n        \"border-image-repeat\": \"[stretch|repeat|round|space]{1,2}\",\n        \"border-image-slice\": \"<number-percentage>{1,4}&&fill?\",\n        \"border-image-source\": \"none|<image>\",\n        \"border-image-width\": \"[<length-percentage>|<number>|auto]{1,4}\",\n        \"border-inline\": \"<'border-top-width'>||<'border-top-style'>||<'color'>\",\n        \"border-inline-end\": \"<'border-top-width'>||<'border-top-style'>||<'color'>\",\n        \"border-inline-color\": \"<'border-top-color'>{1,2}\",\n        \"border-inline-style\": \"<'border-top-style'>\",\n        \"border-inline-width\": \"<'border-top-width'>\",\n        \"border-inline-end-color\": \"<'border-top-color'>\",\n        \"border-inline-end-style\": \"<'border-top-style'>\",\n        \"border-inline-end-width\": \"<'border-top-width'>\",\n        \"border-inline-start\": \"<'border-top-width'>||<'border-top-style'>||<'color'>\",\n        \"border-inline-start-color\": \"<'border-top-color'>\",\n        \"border-inline-start-style\": \"<'border-top-style'>\",\n        \"border-inline-start-width\": \"<'border-top-width'>\",\n        \"border-left\": \"<line-width>||<line-style>||<color>\",\n        \"border-left-color\": \"<color>\",\n        \"border-left-style\": \"<line-style>\",\n        \"border-left-width\": \"<line-width>\",\n        \"border-radius\": \"<length-percentage>{1,4} [/ <length-percentage>{1,4}]?\",\n        \"border-right\": \"<line-width>||<line-style>||<color>\",\n        \"border-right-color\": \"<color>\",\n        \"border-right-style\": \"<line-style>\",\n        \"border-right-width\": \"<line-width>\",\n        \"border-spacing\": \"<length> <length>?\",\n        \"border-start-end-radius\": \"<length-percentage>{1,2}\",\n        \"border-start-start-radius\": \"<length-percentage>{1,2}\",\n        \"border-style\": \"<line-style>{1,4}\",\n        \"border-top\": \"<line-width>||<line-style>||<color>\",\n        \"border-top-color\": \"<color>\",\n        \"border-top-left-radius\": \"<length-percentage>{1,2}\",\n        \"border-top-right-radius\": \"<length-percentage>{1,2}\",\n        \"border-top-style\": \"<line-style>\",\n        \"border-top-width\": \"<line-width>\",\n        \"border-width\": \"<line-width>{1,4}\",\n        bottom: \"<length>|<percentage>|auto\",\n        \"box-align\": \"start|center|end|baseline|stretch\",\n        \"box-decoration-break\": \"slice|clone\",\n        \"box-direction\": \"normal|reverse|inherit\",\n        \"box-flex\": \"<number>\",\n        \"box-flex-group\": \"<integer>\",\n        \"box-lines\": \"single|multiple\",\n        \"box-ordinal-group\": \"<integer>\",\n        \"box-orient\": \"horizontal|vertical|inline-axis|block-axis|inherit\",\n        \"box-pack\": \"start|center|end|justify\",\n        \"box-shadow\": \"none|<shadow>#\",\n        \"box-sizing\": \"content-box|border-box\",\n        \"break-after\": \"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region\",\n        \"break-before\": \"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region\",\n        \"break-inside\": \"auto|avoid|avoid-page|avoid-column|avoid-region\",\n        \"caption-side\": \"top|bottom|block-start|block-end|inline-start|inline-end\",\n        \"caret-color\": \"auto|<color>\",\n        clear: \"none|left|right|both|inline-start|inline-end\",\n        clip: \"<shape>|auto\",\n        \"clip-path\": \"<clip-source>|[<basic-shape>||<geometry-box>]|none\",\n        color: \"<color>\",\n        \"color-adjust\": \"economy|exact\",\n        \"column-count\": \"<integer>|auto\",\n        \"column-fill\": \"auto|balance|balance-all\",\n        \"column-gap\": \"normal|<length-percentage>\",\n        \"column-rule\": \"<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>\",\n        \"column-rule-color\": \"<color>\",\n        \"column-rule-style\": \"<'border-style'>\",\n        \"column-rule-width\": \"<'border-width'>\",\n        \"column-span\": \"none|all\",\n        \"column-width\": \"<length>|auto\",\n        columns: \"<'column-width'>||<'column-count'>\",\n        contain: \"none|strict|content|[size||layout||style||paint]\",\n        content: \"normal|none|[<content-replacement>|<content-list>] [/ <string>]?\",\n        \"counter-increment\": \"[<custom-ident> <integer>?]+|none\",\n        \"counter-reset\": \"[<custom-ident> <integer>?]+|none\",\n        \"counter-set\": \"[<custom-ident> <integer>?]+|none\",\n        cursor: \"[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]\",\n        direction: \"ltr|rtl\",\n        display: \"block|contents|flex|flow|flow-root|grid|inline|inline-block|inline-flex|inline-grid|inline-list-item|inline-table|list-item|none|ruby|ruby-base|ruby-base-container|ruby-text|ruby-text-container|run-in|table|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row|table-row-group|-ms-flexbox|-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box\",\n        \"empty-cells\": \"show|hide\",\n        filter: \"none|<filter-function-list>|<-ms-filter-function-list>\",\n        flex: \"none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]\",\n        \"flex-basis\": \"content|<'width'>\",\n        \"flex-direction\": \"row|row-reverse|column|column-reverse\",\n        \"flex-flow\": \"<'flex-direction'>||<'flex-wrap'>\",\n        \"flex-grow\": \"<number>\",\n        \"flex-shrink\": \"<number>\",\n        \"flex-wrap\": \"nowrap|wrap|wrap-reverse\",\n        float: \"left|right|none|inline-start|inline-end\",\n        font: \"[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar\",\n        \"font-family\": \"[<family-name>|<generic-family>]#\",\n        \"font-feature-settings\": \"normal|<feature-tag-value>#\",\n        \"font-kerning\": \"auto|normal|none\",\n        \"font-language-override\": \"normal|<string>\",\n        \"font-optical-sizing\": \"auto|none\",\n        \"font-variation-settings\": \"normal|[<string> <number>]#\",\n        \"font-size\": \"<absolute-size>|<relative-size>|<length-percentage>\",\n        \"font-size-adjust\": \"none|<number>\",\n        \"font-stretch\": \"<font-stretch-absolute>\",\n        \"font-style\": \"normal|italic|oblique <angle>?\",\n        \"font-synthesis\": \"none|[weight||style]\",\n        \"font-variant\": \"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\n        \"font-variant-alternates\": \"normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]\",\n        \"font-variant-caps\": \"normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps\",\n        \"font-variant-east-asian\": \"normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\n        \"font-variant-ligatures\": \"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]\",\n        \"font-variant-numeric\": \"normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]\",\n        \"font-variant-position\": \"normal|sub|super\",\n        \"font-weight\": \"<font-weight-absolute>|bolder|lighter\",\n        gap: \"<'row-gap'> <'column-gap'>?\",\n        grid: \"<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>\",\n        \"grid-area\": \"<grid-line> [/ <grid-line>]{0,3}\",\n        \"grid-auto-columns\": \"<track-size>+\",\n        \"grid-auto-flow\": \"[row|column]||dense\",\n        \"grid-auto-rows\": \"<track-size>+\",\n        \"grid-column\": \"<grid-line> [/ <grid-line>]?\",\n        \"grid-column-end\": \"<grid-line>\",\n        \"grid-column-gap\": \"<length-percentage>\",\n        \"grid-column-start\": \"<grid-line>\",\n        \"grid-gap\": \"<'grid-row-gap'> <'grid-column-gap'>?\",\n        \"grid-row\": \"<grid-line> [/ <grid-line>]?\",\n        \"grid-row-end\": \"<grid-line>\",\n        \"grid-row-gap\": \"<length-percentage>\",\n        \"grid-row-start\": \"<grid-line>\",\n        \"grid-template\": \"none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?\",\n        \"grid-template-areas\": \"none|<string>+\",\n        \"grid-template-columns\": \"none|<track-list>|<auto-track-list>\",\n        \"grid-template-rows\": \"none|<track-list>|<auto-track-list>\",\n        \"hanging-punctuation\": \"none|[first||[force-end|allow-end]||last]\",\n        height: \"[<length>|<percentage>]&&[border-box|content-box]?|available|min-content|max-content|fit-content|auto\",\n        hyphens: \"none|manual|auto\",\n        \"image-orientation\": \"from-image|<angle>|[<angle>? flip]\",\n        \"image-rendering\": \"auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>\",\n        \"image-resolution\": \"[from-image||<resolution>]&&snap?\",\n        \"ime-mode\": \"auto|normal|active|inactive|disabled\",\n        \"initial-letter\": \"normal|[<number> <integer>?]\",\n        \"initial-letter-align\": \"[auto|alphabetic|hanging|ideographic]\",\n        \"inline-size\": \"<'width'>\",\n        inset: \"<'top'>{1,4}\",\n        \"inset-block\": \"<'top'>{1,2}\",\n        \"inset-block-end\": \"<'top'>\",\n        \"inset-block-start\": \"<'top'>\",\n        \"inset-inline\": \"<'top'>{1,2}\",\n        \"inset-inline-end\": \"<'top'>\",\n        \"inset-inline-start\": \"<'top'>\",\n        isolation: \"auto|isolate\",\n        \"justify-content\": \"normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]\",\n        \"justify-items\": \"normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]\",\n        \"justify-self\": \"auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]\",\n        left: \"<length>|<percentage>|auto\",\n        \"letter-spacing\": \"normal|<length-percentage>\",\n        \"line-break\": \"auto|loose|normal|strict\",\n        \"line-clamp\": \"none|<integer>\",\n        \"line-height\": \"normal|<number>|<length>|<percentage>\",\n        \"line-height-step\": \"<length>\",\n        \"list-style\": \"<'list-style-type'>||<'list-style-position'>||<'list-style-image'>\",\n        \"list-style-image\": \"<url>|none\",\n        \"list-style-position\": \"inside|outside\",\n        \"list-style-type\": \"<counter-style>|<string>|none\",\n        margin: \"[<length>|<percentage>|auto]{1,4}\",\n        \"margin-block\": \"<'margin-left'>{1,2}\",\n        \"margin-block-end\": \"<'margin-left'>\",\n        \"margin-block-start\": \"<'margin-left'>\",\n        \"margin-bottom\": \"<length>|<percentage>|auto\",\n        \"margin-inline\": \"<'margin-left'>{1,2}\",\n        \"margin-inline-end\": \"<'margin-left'>\",\n        \"margin-inline-start\": \"<'margin-left'>\",\n        \"margin-left\": \"<length>|<percentage>|auto\",\n        \"margin-right\": \"<length>|<percentage>|auto\",\n        \"margin-top\": \"<length>|<percentage>|auto\",\n        mask: \"<mask-layer>#\",\n        \"mask-border\": \"<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>\",\n        \"mask-border-mode\": \"luminance|alpha\",\n        \"mask-border-outset\": \"[<length>|<number>]{1,4}\",\n        \"mask-border-repeat\": \"[stretch|repeat|round|space]{1,2}\",\n        \"mask-border-slice\": \"<number-percentage>{1,4} fill?\",\n        \"mask-border-source\": \"none|<image>\",\n        \"mask-border-width\": \"[<length-percentage>|<number>|auto]{1,4}\",\n        \"mask-clip\": \"[<geometry-box>|no-clip]#\",\n        \"mask-composite\": \"<compositing-operator>#\",\n        \"mask-image\": \"<mask-reference>#\",\n        \"mask-mode\": \"<masking-mode>#\",\n        \"mask-origin\": \"<geometry-box>#\",\n        \"mask-position\": \"<position>#\",\n        \"mask-repeat\": \"<repeat-style>#\",\n        \"mask-size\": \"<bg-size>#\",\n        \"mask-type\": \"luminance|alpha\",\n        \"max-block-size\": \"<'max-width'>\",\n        \"max-height\": \"<length>|<percentage>|none|max-content|min-content|fit-content|fill-available\",\n        \"max-inline-size\": \"<'max-width'>\",\n        \"max-lines\": \"none|<integer>\",\n        \"max-width\": \"<length>|<percentage>|none|max-content|min-content|fit-content|fill-available|<-non-standard-width>\",\n        \"min-block-size\": \"<'min-width'>\",\n        \"min-height\": \"<length>|<percentage>|auto|max-content|min-content|fit-content|fill-available\",\n        \"min-inline-size\": \"<'min-width'>\",\n        \"min-width\": \"<length>|<percentage>|auto|max-content|min-content|fit-content|fill-available|<-non-standard-width>\",\n        \"mix-blend-mode\": \"<blend-mode>\",\n        \"object-fit\": \"fill|contain|cover|none|scale-down\",\n        \"object-position\": \"<position>\",\n        offset: \"[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?\",\n        \"offset-anchor\": \"auto|<position>\",\n        \"offset-distance\": \"<length-percentage>\",\n        \"offset-path\": \"none|ray( [<angle>&&<size>?&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]\",\n        \"offset-position\": \"auto|<position>\",\n        \"offset-rotate\": \"[auto|reverse]||<angle>\",\n        opacity: \"<number-zero-one>\",\n        order: \"<integer>\",\n        orphans: \"<integer>\",\n        outline: \"[<'outline-color'>||<'outline-style'>||<'outline-width'>]\",\n        \"outline-color\": \"<color>|invert\",\n        \"outline-offset\": \"<length>\",\n        \"outline-style\": \"auto|<'border-style'>\",\n        \"outline-width\": \"<line-width>\",\n        overflow: \"[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>\",\n        \"overflow-anchor\": \"auto|none\",\n        \"overflow-block\": \"visible|hidden|clip|scroll|auto\",\n        \"overflow-clip-box\": \"padding-box|content-box\",\n        \"overflow-inline\": \"visible|hidden|clip|scroll|auto\",\n        \"overflow-wrap\": \"normal|break-word|anywhere\",\n        \"overflow-x\": \"visible|hidden|clip|scroll|auto\",\n        \"overflow-y\": \"visible|hidden|clip|scroll|auto\",\n        \"overscroll-behavior\": \"[contain|none|auto]{1,2}\",\n        \"overscroll-behavior-x\": \"contain|none|auto\",\n        \"overscroll-behavior-y\": \"contain|none|auto\",\n        padding: \"[<length>|<percentage>]{1,4}\",\n        \"padding-block\": \"<'padding-left'>{1,2}\",\n        \"padding-block-end\": \"<'padding-left'>\",\n        \"padding-block-start\": \"<'padding-left'>\",\n        \"padding-bottom\": \"<length>|<percentage>\",\n        \"padding-inline\": \"<'padding-left'>{1,2}\",\n        \"padding-inline-end\": \"<'padding-left'>\",\n        \"padding-inline-start\": \"<'padding-left'>\",\n        \"padding-left\": \"<length>|<percentage>\",\n        \"padding-right\": \"<length>|<percentage>\",\n        \"padding-top\": \"<length>|<percentage>\",\n        \"page-break-after\": \"auto|always|avoid|left|right|recto|verso\",\n        \"page-break-before\": \"auto|always|avoid|left|right|recto|verso\",\n        \"page-break-inside\": \"auto|avoid\",\n        \"paint-order\": \"normal|[fill||stroke||markers]\",\n        perspective: \"none|<length>\",\n        \"perspective-origin\": \"<position>\",\n        \"place-content\": \"<'align-content'> <'justify-content'>?\",\n        \"place-items\": \"<'align-items'> <'justify-items'>?\",\n        \"place-self\": \"<'align-self'> <'justify-self'>?\",\n        \"pointer-events\": \"auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit\",\n        position: \"static|relative|absolute|sticky|fixed|-webkit-sticky\",\n        quotes: \"none|[<string> <string>]+\",\n        resize: \"none|both|horizontal|vertical|block|inline\",\n        right: \"<length>|<percentage>|auto\",\n        rotate: \"none|<angle>|[x|y|z|<number>{3}]&&<angle>\",\n        \"row-gap\": \"normal|<length-percentage>\",\n        \"ruby-align\": \"start|center|space-between|space-around\",\n        \"ruby-merge\": \"separate|collapse|auto\",\n        \"ruby-position\": \"over|under|inter-character\",\n        scale: \"none|<number>{1,3}\",\n        \"scrollbar-color\": \"auto|dark|light|<color>{2}\",\n        \"scrollbar-width\": \"auto|thin|none\",\n        \"scroll-behavior\": \"auto|smooth\",\n        \"scroll-margin\": \"<length>{1,4}\",\n        \"scroll-margin-block\": \"<length>{1,2}\",\n        \"scroll-margin-block-start\": \"<length>\",\n        \"scroll-margin-block-end\": \"<length>\",\n        \"scroll-margin-bottom\": \"<length>\",\n        \"scroll-margin-inline\": \"<length>{1,2}\",\n        \"scroll-margin-inline-start\": \"<length>\",\n        \"scroll-margin-inline-end\": \"<length>\",\n        \"scroll-margin-left\": \"<length>\",\n        \"scroll-margin-right\": \"<length>\",\n        \"scroll-margin-top\": \"<length>\",\n        \"scroll-padding\": \"[auto|<length-percentage>]{1,4}\",\n        \"scroll-padding-block\": \"[auto|<length-percentage>]{1,2}\",\n        \"scroll-padding-block-start\": \"auto|<length-percentage>\",\n        \"scroll-padding-block-end\": \"auto|<length-percentage>\",\n        \"scroll-padding-bottom\": \"auto|<length-percentage>\",\n        \"scroll-padding-inline\": \"[auto|<length-percentage>]{1,2}\",\n        \"scroll-padding-inline-start\": \"auto|<length-percentage>\",\n        \"scroll-padding-inline-end\": \"auto|<length-percentage>\",\n        \"scroll-padding-left\": \"auto|<length-percentage>\",\n        \"scroll-padding-right\": \"auto|<length-percentage>\",\n        \"scroll-padding-top\": \"auto|<length-percentage>\",\n        \"scroll-snap-align\": \"[none|start|end|center]{1,2}\",\n        \"scroll-snap-coordinate\": \"none|<position>#\",\n        \"scroll-snap-destination\": \"<position>\",\n        \"scroll-snap-points-x\": \"none|repeat( <length-percentage> )\",\n        \"scroll-snap-points-y\": \"none|repeat( <length-percentage> )\",\n        \"scroll-snap-stop\": \"normal|always\",\n        \"scroll-snap-type\": \"none|[x|y|block|inline|both] [mandatory|proximity]?\",\n        \"scroll-snap-type-x\": \"none|mandatory|proximity\",\n        \"scroll-snap-type-y\": \"none|mandatory|proximity\",\n        \"shape-image-threshold\": \"<number>\",\n        \"shape-margin\": \"<length-percentage>\",\n        \"shape-outside\": \"none|<shape-box>||<basic-shape>|<image>\",\n        \"tab-size\": \"<integer>|<length>\",\n        \"table-layout\": \"auto|fixed\",\n        \"text-align\": \"start|end|left|right|center|justify|match-parent\",\n        \"text-align-last\": \"auto|start|end|left|right|center|justify\",\n        \"text-combine-upright\": \"none|all|[digits <integer>?]\",\n        \"text-decoration\": \"<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>\",\n        \"text-decoration-color\": \"<color>\",\n        \"text-decoration-line\": \"none|[underline||overline||line-through||blink]\",\n        \"text-decoration-skip\": \"none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]\",\n        \"text-decoration-skip-ink\": \"auto|none\",\n        \"text-decoration-style\": \"solid|double|dotted|dashed|wavy\",\n        \"text-emphasis\": \"<'text-emphasis-style'>||<'text-emphasis-color'>\",\n        \"text-emphasis-color\": \"<color>\",\n        \"text-emphasis-position\": \"[over|under]&&[right|left]\",\n        \"text-emphasis-style\": \"none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>\",\n        \"text-indent\": \"<length-percentage>&&hanging?&&each-line?\",\n        \"text-justify\": \"auto|inter-character|inter-word|none\",\n        \"text-orientation\": \"mixed|upright|sideways\",\n        \"text-overflow\": \"[clip|ellipsis|<string>]{1,2}\",\n        \"text-rendering\": \"auto|optimizeSpeed|optimizeLegibility|geometricPrecision\",\n        \"text-shadow\": \"none|<shadow-t>#\",\n        \"text-size-adjust\": \"none|auto|<percentage>\",\n        \"text-transform\": \"none|capitalize|uppercase|lowercase|full-width|full-size-kana\",\n        \"text-underline-position\": \"auto|[under||[left|right]]\",\n        top: \"<length>|<percentage>|auto\",\n        \"touch-action\": \"auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation\",\n        transform: \"none|<transform-list>\",\n        \"transform-box\": \"border-box|fill-box|view-box\",\n        \"transform-origin\": \"[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?\",\n        \"transform-style\": \"flat|preserve-3d\",\n        transition: \"<single-transition>#\",\n        \"transition-delay\": \"<time>#\",\n        \"transition-duration\": \"<time>#\",\n        \"transition-property\": \"none|<single-transition-property>#\",\n        \"transition-timing-function\": \"<timing-function>#\",\n        translate: \"none|<length-percentage> [<length-percentage> <length>?]?\",\n        \"unicode-bidi\": \"normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate\",\n        \"user-select\": \"auto|text|none|contain|all\",\n        \"vertical-align\": \"baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>\",\n        visibility: \"visible|hidden|collapse\",\n        \"white-space\": \"normal|pre|nowrap|pre-wrap|pre-line\",\n        widows: \"<integer>\",\n        width: \"[<length>|<percentage>]&&[border-box|content-box]?|available|min-content|max-content|fit-content|auto\",\n        \"will-change\": \"auto|<animateable-feature>#\",\n        \"word-break\": \"normal|break-all|keep-all|break-word\",\n        \"word-spacing\": \"normal|<length-percentage>\",\n        \"word-wrap\": \"normal|break-word\",\n        \"writing-mode\": \"horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>\",\n        \"z-index\": \"auto|<integer>\",\n        zoom: \"normal|reset|<number>|<percentage>\",\n        \"-moz-background-clip\": \"padding|border\",\n        \"-moz-border-radius-bottomleft\": \"<'border-bottom-left-radius'>\",\n        \"-moz-border-radius-bottomright\": \"<'border-bottom-right-radius'>\",\n        \"-moz-border-radius-topleft\": \"<'border-top-left-radius'>\",\n        \"-moz-border-radius-topright\": \"<'border-bottom-right-radius'>\",\n        \"-moz-control-character-visibility\": \"visible|hidden\",\n        \"-moz-osx-font-smoothing\": \"auto|grayscale\",\n        \"-moz-user-select\": \"none|text|all|-moz-none\",\n        \"-ms-flex-align\": \"start|end|center|baseline|stretch\",\n        \"-ms-flex-item-align\": \"auto|start|end|center|baseline|stretch\",\n        \"-ms-flex-line-pack\": \"start|end|center|justify|distribute|stretch\",\n        \"-ms-flex-negative\": \"<'flex-shrink'>\",\n        \"-ms-flex-pack\": \"start|end|center|justify|distribute\",\n        \"-ms-flex-order\": \"<integer>\",\n        \"-ms-flex-positive\": \"<'flex-grow'>\",\n        \"-ms-flex-preferred-size\": \"<'flex-basis'>\",\n        \"-ms-interpolation-mode\": \"nearest-neighbor|bicubic\",\n        \"-ms-grid-column-align\": \"start|end|center|stretch\",\n        \"-ms-grid-columns\": \"<track-list-v0>\",\n        \"-ms-grid-row-align\": \"start|end|center|stretch\",\n        \"-ms-grid-rows\": \"<track-list-v0>\",\n        \"-ms-hyphenate-limit-last\": \"none|always|column|page|spread\",\n        \"-webkit-background-clip\": \"[<box>|border|padding|content|text]#\",\n        \"-webkit-column-break-after\": \"always|auto|avoid\",\n        \"-webkit-column-break-before\": \"always|auto|avoid\",\n        \"-webkit-column-break-inside\": \"always|auto|avoid\",\n        \"-webkit-font-smoothing\": \"auto|none|antialiased|subpixel-antialiased\",\n        \"-webkit-mask-box-image\": \"[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?\",\n        \"-webkit-print-color-adjust\": \"economy|exact\",\n        \"-webkit-text-security\": \"none|circle|disc|square\",\n        \"-webkit-user-drag\": \"none|element|auto\",\n        \"-webkit-user-select\": \"auto|none|text|all\",\n        \"alignment-baseline\": \"auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical\",\n        \"baseline-shift\": \"baseline|sub|super|<svg-length>\",\n        behavior: \"<url>+\",\n        \"clip-rule\": \"nonzero|evenodd\",\n        cue: \"<'cue-before'> <'cue-after'>?\",\n        \"cue-after\": \"<url> <decibel>?|none\",\n        \"cue-before\": \"<url> <decibel>?|none\",\n        \"dominant-baseline\": \"auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge\",\n        fill: \"<paint>\",\n        \"fill-opacity\": \"<number-zero-one>\",\n        \"fill-rule\": \"nonzero|evenodd\",\n        \"glyph-orientation-horizontal\": \"<angle>\",\n        \"glyph-orientation-vertical\": \"<angle>\",\n        kerning: \"auto|<svg-length>\",\n        marker: \"none|<url>\",\n        \"marker-end\": \"none|<url>\",\n        \"marker-mid\": \"none|<url>\",\n        \"marker-start\": \"none|<url>\",\n        pause: \"<'pause-before'> <'pause-after'>?\",\n        \"pause-after\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n        \"pause-before\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n        rest: \"<'rest-before'> <'rest-after'>?\",\n        \"rest-after\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n        \"rest-before\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n        \"shape-rendering\": \"auto|optimizeSpeed|crispEdges|geometricPrecision\",\n        src: \"[<url> [format( <string># )]?|local( <family-name> )]#\",\n        speak: \"auto|none|normal\",\n        \"speak-as\": \"normal|spell-out||digits||[literal-punctuation|no-punctuation]\",\n        stroke: \"<paint>\",\n        \"stroke-dasharray\": \"none|[<svg-length>+]#\",\n        \"stroke-dashoffset\": \"<svg-length>\",\n        \"stroke-linecap\": \"butt|round|square\",\n        \"stroke-linejoin\": \"miter|round|bevel\",\n        \"stroke-miterlimit\": \"<number-one-or-greater>\",\n        \"stroke-opacity\": \"<number-zero-one>\",\n        \"stroke-width\": \"<svg-length>\",\n        \"text-anchor\": \"start|middle|end\",\n        \"unicode-range\": \"<urange>#\",\n        \"voice-balance\": \"<number>|left|center|right|leftwards|rightwards\",\n        \"voice-duration\": \"auto|<time>\",\n        \"voice-family\": \"[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve\",\n        \"voice-pitch\": \"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]\",\n        \"voice-range\": \"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]\",\n        \"voice-rate\": \"[normal|x-slow|slow|medium|fast|x-fast]||<percentage>\",\n        \"voice-stress\": \"normal|strong|moderate|none|reduced\",\n        \"voice-volume\": \"silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]\"\n    };\n    var defaultSyntax = {\n        generic: generic$1,\n        types: types,\n        properties: properties$1\n    };\n\n    var defaultSyntax$1 = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        generic: generic$1,\n        types: types,\n        properties: properties$1,\n        'default': defaultSyntax\n    });\n\n    var cmpChar$3 = tokenizer.cmpChar;\n    var isDigit$4 = tokenizer.isDigit;\n    var TYPE$9 = tokenizer.TYPE;\n\n    var WHITESPACE$4 = TYPE$9.WhiteSpace;\n    var COMMENT$3 = TYPE$9.Comment;\n    var IDENT$3 = TYPE$9.Ident;\n    var NUMBER$3 = TYPE$9.Number;\n    var DIMENSION$2 = TYPE$9.Dimension;\n    var PLUSSIGN$3 = 0x002B;    // U+002B PLUS SIGN (+)\n    var HYPHENMINUS$3 = 0x002D; // U+002D HYPHEN-MINUS (-)\n    var N$4 = 0x006E;           // U+006E LATIN SMALL LETTER N (n)\n    var DISALLOW_SIGN$1 = true;\n    var ALLOW_SIGN$1 = false;\n\n    function checkInteger$1(offset, disallowSign) {\n        var pos = this.scanner.tokenStart + offset;\n        var code = this.scanner.source.charCodeAt(pos);\n\n        if (code === PLUSSIGN$3 || code === HYPHENMINUS$3) {\n            if (disallowSign) {\n                this.error('Number sign is not allowed');\n            }\n            pos++;\n        }\n\n        for (; pos < this.scanner.tokenEnd; pos++) {\n            if (!isDigit$4(this.scanner.source.charCodeAt(pos))) {\n                this.error('Integer is expected', pos);\n            }\n        }\n    }\n\n    function checkTokenIsInteger(disallowSign) {\n        return checkInteger$1.call(this, 0, disallowSign);\n    }\n\n    function expectCharCode(offset, code) {\n        if (!cmpChar$3(this.scanner.source, this.scanner.tokenStart + offset, code)) {\n            var msg = '';\n\n            switch (code) {\n                case N$4:\n                    msg = 'N is expected';\n                    break;\n                case HYPHENMINUS$3:\n                    msg = 'HyphenMinus is expected';\n                    break;\n            }\n\n            this.error(msg, this.scanner.tokenStart + offset);\n        }\n    }\n\n    // ... <signed-integer>\n    // ... ['+' | '-'] <signless-integer>\n    function consumeB$1() {\n        var offset = 0;\n        var sign = 0;\n        var type = this.scanner.tokenType;\n\n        while (type === WHITESPACE$4 || type === COMMENT$3) {\n            type = this.scanner.lookupType(++offset);\n        }\n\n        if (type !== NUMBER$3) {\n            if (this.scanner.isDelim(PLUSSIGN$3, offset) ||\n                this.scanner.isDelim(HYPHENMINUS$3, offset)) {\n                sign = this.scanner.isDelim(PLUSSIGN$3, offset) ? PLUSSIGN$3 : HYPHENMINUS$3;\n\n                do {\n                    type = this.scanner.lookupType(++offset);\n                } while (type === WHITESPACE$4 || type === COMMENT$3);\n\n                if (type !== NUMBER$3) {\n                    this.scanner.skip(offset);\n                    checkTokenIsInteger.call(this, DISALLOW_SIGN$1);\n                }\n            } else {\n                return null;\n            }\n        }\n\n        if (offset > 0) {\n            this.scanner.skip(offset);\n        }\n\n        if (sign === 0) {\n            type = this.scanner.source.charCodeAt(this.scanner.tokenStart);\n            if (type !== PLUSSIGN$3 && type !== HYPHENMINUS$3) {\n                this.error('Number sign is expected');\n            }\n        }\n\n        checkTokenIsInteger.call(this, sign !== 0);\n        return sign === HYPHENMINUS$3 ? '-' + this.consume(NUMBER$3) : this.consume(NUMBER$3);\n    }\n\n    // An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb\n    var AnPlusB = {\n        name: 'AnPlusB',\n        structure: {\n            a: [String, null],\n            b: [String, null]\n        },\n        parse: function() {\n            /* eslint-disable brace-style*/\n            var start = this.scanner.tokenStart;\n            var a = null;\n            var b = null;\n\n            // <integer>\n            if (this.scanner.tokenType === NUMBER$3) {\n                checkTokenIsInteger.call(this, ALLOW_SIGN$1);\n                b = this.consume(NUMBER$3);\n            }\n\n                // -n\n                // -n <signed-integer>\n                // -n ['+' | '-'] <signless-integer>\n                // -n- <signless-integer>\n            // <dashndashdigit-ident>\n            else if (this.scanner.tokenType === IDENT$3 && cmpChar$3(this.scanner.source, this.scanner.tokenStart, HYPHENMINUS$3)) {\n                a = '-1';\n\n                expectCharCode.call(this, 1, N$4);\n\n                switch (this.scanner.getTokenLength()) {\n                    // -n\n                    // -n <signed-integer>\n                    // -n ['+' | '-'] <signless-integer>\n                    case 2:\n                        this.scanner.next();\n                        b = consumeB$1.call(this);\n                        break;\n\n                    // -n- <signless-integer>\n                    case 3:\n                        expectCharCode.call(this, 2, HYPHENMINUS$3);\n\n                        this.scanner.next();\n                        this.scanner.skipSC();\n\n                        checkTokenIsInteger.call(this, DISALLOW_SIGN$1);\n\n                        b = '-' + this.consume(NUMBER$3);\n                        break;\n\n                    // <dashndashdigit-ident>\n                    default:\n                        expectCharCode.call(this, 2, HYPHENMINUS$3);\n                        checkInteger$1.call(this, 3, DISALLOW_SIGN$1);\n                        this.scanner.next();\n\n                        b = this.scanner.substrToCursor(start + 2);\n                }\n            }\n\n                // '+'? n\n                // '+'? n <signed-integer>\n                // '+'? n ['+' | '-'] <signless-integer>\n                // '+'? n- <signless-integer>\n            // '+'? <ndashdigit-ident>\n            else if (this.scanner.tokenType === IDENT$3 || (this.scanner.isDelim(PLUSSIGN$3) && this.scanner.lookupType(1) === IDENT$3)) {\n                var sign = 0;\n                a = '1';\n\n                // just ignore a plus\n                if (this.scanner.isDelim(PLUSSIGN$3)) {\n                    sign = 1;\n                    this.scanner.next();\n                }\n\n                expectCharCode.call(this, 0, N$4);\n\n                switch (this.scanner.getTokenLength()) {\n                    // '+'? n\n                    // '+'? n <signed-integer>\n                    // '+'? n ['+' | '-'] <signless-integer>\n                    case 1:\n                        this.scanner.next();\n                        b = consumeB$1.call(this);\n                        break;\n\n                    // '+'? n- <signless-integer>\n                    case 2:\n                        expectCharCode.call(this, 1, HYPHENMINUS$3);\n\n                        this.scanner.next();\n                        this.scanner.skipSC();\n\n                        checkTokenIsInteger.call(this, DISALLOW_SIGN$1);\n\n                        b = '-' + this.consume(NUMBER$3);\n                        break;\n\n                    // '+'? <ndashdigit-ident>\n                    default:\n                        expectCharCode.call(this, 1, HYPHENMINUS$3);\n                        checkInteger$1.call(this, 2, DISALLOW_SIGN$1);\n                        this.scanner.next();\n\n                        b = this.scanner.substrToCursor(start + sign + 1);\n                }\n            }\n\n                // <ndashdigit-dimension>\n                // <ndash-dimension> <signless-integer>\n                // <n-dimension>\n                // <n-dimension> <signed-integer>\n            // <n-dimension> ['+' | '-'] <signless-integer>\n            else if (this.scanner.tokenType === DIMENSION$2) {\n                var code = this.scanner.source.charCodeAt(this.scanner.tokenStart);\n                var sign = code === PLUSSIGN$3 || code === HYPHENMINUS$3;\n\n                for (var i = this.scanner.tokenStart + sign; i < this.scanner.tokenEnd; i++) {\n                    if (!isDigit$4(this.scanner.source.charCodeAt(i))) {\n                        break;\n                    }\n                }\n\n                if (i === this.scanner.tokenStart + sign) {\n                    this.error('Integer is expected', this.scanner.tokenStart + sign);\n                }\n\n                expectCharCode.call(this, i - this.scanner.tokenStart, N$4);\n                a = this.scanner.source.substring(start, i);\n\n                // <n-dimension>\n                // <n-dimension> <signed-integer>\n                // <n-dimension> ['+' | '-'] <signless-integer>\n                if (i + 1 === this.scanner.tokenEnd) {\n                    this.scanner.next();\n                    b = consumeB$1.call(this);\n                } else {\n                    expectCharCode.call(this, i - this.scanner.tokenStart + 1, HYPHENMINUS$3);\n\n                    // <ndash-dimension> <signless-integer>\n                    if (i + 2 === this.scanner.tokenEnd) {\n                        this.scanner.next();\n                        this.scanner.skipSC();\n                        checkTokenIsInteger.call(this, DISALLOW_SIGN$1);\n                        b = '-' + this.consume(NUMBER$3);\n                    }\n                    // <ndashdigit-dimension>\n                    else {\n                        checkInteger$1.call(this, i - this.scanner.tokenStart + 2, DISALLOW_SIGN$1);\n                        this.scanner.next();\n                        b = this.scanner.substrToCursor(i + 1);\n                    }\n                }\n            } else {\n                this.error();\n            }\n\n            if (a !== null && a.charCodeAt(0) === PLUSSIGN$3) {\n                a = a.substr(1);\n            }\n\n            if (b !== null && b.charCodeAt(0) === PLUSSIGN$3) {\n                b = b.substr(1);\n            }\n\n            return {\n                type: 'AnPlusB',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                a: a,\n                b: b\n            };\n        },\n        generate: function(node) {\n            var a = node.a !== null && node.a !== undefined;\n            var b = node.b !== null && node.b !== undefined;\n\n            if (a) {\n                this.chunk(\n                    node.a === '+1' ? '+n' : // eslint-disable-line operator-linebreak, indent\n                        node.a ===  '1' ?  'n' : // eslint-disable-line operator-linebreak, indent\n                            node.a === '-1' ? '-n' : // eslint-disable-line operator-linebreak, indent\n                                node.a + 'n'             // eslint-disable-line operator-linebreak, indent\n                );\n\n                if (b) {\n                    b = String(node.b);\n                    if (b.charAt(0) === '-' || b.charAt(0) === '+') {\n                        this.chunk(b.charAt(0));\n                        this.chunk(b.substr(1));\n                    } else {\n                        this.chunk('+');\n                        this.chunk(b);\n                    }\n                }\n            } else {\n                this.chunk(String(node.b));\n            }\n        }\n    };\n\n    var TYPE$a = tokenizer.TYPE;\n\n    var WhiteSpace = TYPE$a.WhiteSpace;\n    var Semicolon = TYPE$a.Semicolon;\n    var LeftCurlyBracket = TYPE$a.LeftCurlyBracket;\n    var Delim = TYPE$a.Delim;\n    var EXCLAMATIONMARK$1 = 0x0021; // U+0021 EXCLAMATION MARK (!)\n\n    function getOffsetExcludeWS() {\n        if (this.scanner.tokenIndex > 0) {\n            if (this.scanner.lookupType(-1) === WhiteSpace) {\n                return this.scanner.tokenIndex > 1\n                    ? this.scanner.getTokenStart(this.scanner.tokenIndex - 1)\n                    : this.scanner.firstCharOffset;\n            }\n        }\n\n        return this.scanner.tokenStart;\n    }\n\n    // 0, 0, false\n    function balanceEnd() {\n        return 0;\n    }\n\n    // LEFTCURLYBRACKET, 0, false\n    function leftCurlyBracket(tokenType) {\n        return tokenType === LeftCurlyBracket ? 1 : 0;\n    }\n\n    // LEFTCURLYBRACKET, SEMICOLON, false\n    function leftCurlyBracketOrSemicolon(tokenType) {\n        return tokenType === LeftCurlyBracket || tokenType === Semicolon ? 1 : 0;\n    }\n\n    // EXCLAMATIONMARK, SEMICOLON, false\n    function exclamationMarkOrSemicolon(tokenType, source, offset) {\n        if (tokenType === Delim && source.charCodeAt(offset) === EXCLAMATIONMARK$1) {\n            return 1;\n        }\n\n        return tokenType === Semicolon ? 1 : 0;\n    }\n\n    // 0, SEMICOLON, true\n    function semicolonIncluded(tokenType) {\n        return tokenType === Semicolon ? 2 : 0;\n    }\n\n    var Raw = {\n        name: 'Raw',\n        structure: {\n            value: String\n        },\n        parse: function(startToken, mode, excludeWhiteSpace) {\n            var startOffset = this.scanner.getTokenStart(startToken);\n            var endOffset;\n\n            this.scanner.skip(\n                this.scanner.getRawLength(startToken, mode || balanceEnd)\n            );\n\n            if (excludeWhiteSpace && this.scanner.tokenStart > startOffset) {\n                endOffset = getOffsetExcludeWS.call(this);\n            } else {\n                endOffset = this.scanner.tokenStart;\n            }\n\n            return {\n                type: 'Raw',\n                loc: this.getLocation(startOffset, endOffset),\n                value: this.scanner.source.substring(startOffset, endOffset)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.value);\n        },\n\n        mode: {\n            default: balanceEnd,\n            leftCurlyBracket: leftCurlyBracket,\n            leftCurlyBracketOrSemicolon: leftCurlyBracketOrSemicolon,\n            exclamationMarkOrSemicolon: exclamationMarkOrSemicolon,\n            semicolonIncluded: semicolonIncluded\n        }\n    };\n\n    var TYPE$b = tokenizer.TYPE;\n    var rawMode = Raw.mode;\n\n    var ATKEYWORD = TYPE$b.AtKeyword;\n    var SEMICOLON = TYPE$b.Semicolon;\n    var LEFTCURLYBRACKET$1 = TYPE$b.LeftCurlyBracket;\n    var RIGHTCURLYBRACKET$1 = TYPE$b.RightCurlyBracket;\n\n    function consumeRaw(startToken) {\n        return this.Raw(startToken, rawMode.leftCurlyBracketOrSemicolon, true);\n    }\n\n    function isDeclarationBlockAtrule() {\n        for (var offset = 1, type; type = this.scanner.lookupType(offset); offset++) {\n            if (type === RIGHTCURLYBRACKET$1) {\n                return true;\n            }\n\n            if (type === LEFTCURLYBRACKET$1 ||\n                type === ATKEYWORD) {\n                return false;\n            }\n        }\n\n        return false;\n    }\n\n    var Atrule = {\n        name: 'Atrule',\n        structure: {\n            name: String,\n            prelude: ['AtrulePrelude', 'Raw', null],\n            block: ['Block', null]\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var name;\n            var nameLowerCase;\n            var prelude = null;\n            var block = null;\n\n            this.eat(ATKEYWORD);\n\n            name = this.scanner.substrToCursor(start + 1);\n            nameLowerCase = name.toLowerCase();\n            this.scanner.skipSC();\n\n            // parse prelude\n            if (this.scanner.eof === false &&\n                this.scanner.tokenType !== LEFTCURLYBRACKET$1 &&\n                this.scanner.tokenType !== SEMICOLON) {\n                if (this.parseAtrulePrelude) {\n                    prelude = this.parseWithFallback(this.AtrulePrelude.bind(this, name), consumeRaw);\n\n                    // turn empty AtrulePrelude into null\n                    if (prelude.type === 'AtrulePrelude' && prelude.children.head === null) {\n                        prelude = null;\n                    }\n                } else {\n                    prelude = consumeRaw.call(this, this.scanner.tokenIndex);\n                }\n\n                this.scanner.skipSC();\n            }\n\n            switch (this.scanner.tokenType) {\n                case SEMICOLON:\n                    this.scanner.next();\n                    break;\n\n                case LEFTCURLYBRACKET$1:\n                    if (this.atrule.hasOwnProperty(nameLowerCase) &&\n                        typeof this.atrule[nameLowerCase].block === 'function') {\n                        block = this.atrule[nameLowerCase].block.call(this);\n                    } else {\n                        // TODO: should consume block content as Raw?\n                        block = this.Block(isDeclarationBlockAtrule.call(this));\n                    }\n\n                    break;\n            }\n\n            return {\n                type: 'Atrule',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: name,\n                prelude: prelude,\n                block: block\n            };\n        },\n        generate: function(node) {\n            this.chunk('@');\n            this.chunk(node.name);\n\n            if (node.prelude !== null) {\n                this.chunk(' ');\n                this.node(node.prelude);\n            }\n\n            if (node.block) {\n                this.node(node.block);\n            } else {\n                this.chunk(';');\n            }\n        },\n        walkContext: 'atrule'\n    };\n\n    var TYPE$c = tokenizer.TYPE;\n\n    var SEMICOLON$1 = TYPE$c.Semicolon;\n    var LEFTCURLYBRACKET$2 = TYPE$c.LeftCurlyBracket;\n\n    var AtrulePrelude = {\n        name: 'AtrulePrelude',\n        structure: {\n            children: [[]]\n        },\n        parse: function(name) {\n            var children = null;\n\n            if (name !== null) {\n                name = name.toLowerCase();\n            }\n\n            this.scanner.skipSC();\n\n            if (this.atrule.hasOwnProperty(name) &&\n                typeof this.atrule[name].prelude === 'function') {\n                // custom consumer\n                children = this.atrule[name].prelude.call(this);\n            } else {\n                // default consumer\n                children = this.readSequence(this.scope.AtrulePrelude);\n            }\n\n            this.scanner.skipSC();\n\n            if (this.scanner.eof !== true &&\n                this.scanner.tokenType !== LEFTCURLYBRACKET$2 &&\n                this.scanner.tokenType !== SEMICOLON$1) {\n                this.error('Semicolon or block is expected');\n            }\n\n            if (children === null) {\n                children = this.createList();\n            }\n\n            return {\n                type: 'AtrulePrelude',\n                loc: this.getLocationFromList(children),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.children(node);\n        },\n        walkContext: 'atrulePrelude'\n    };\n\n    var TYPE$d = tokenizer.TYPE;\n\n    var IDENT$4 = TYPE$d.Ident;\n    var STRING = TYPE$d.String;\n    var COLON = TYPE$d.Colon;\n    var LEFTSQUAREBRACKET$1 = TYPE$d.LeftSquareBracket;\n    var RIGHTSQUAREBRACKET$1 = TYPE$d.RightSquareBracket;\n    var DOLLARSIGN = 0x0024;       // U+0024 DOLLAR SIGN ($)\n    var ASTERISK$1 = 0x002A;         // U+002A ASTERISK (*)\n    var EQUALSSIGN = 0x003D;       // U+003D EQUALS SIGN (=)\n    var CIRCUMFLEXACCENT = 0x005E; // U+005E (^)\n    var VERTICALLINE$1 = 0x007C;     // U+007C VERTICAL LINE (|)\n    var TILDE = 0x007E;            // U+007E TILDE (~)\n\n    function getAttributeName() {\n        if (this.scanner.eof) {\n            this.error('Unexpected end of input');\n        }\n\n        var start = this.scanner.tokenStart;\n        var expectIdent = false;\n        var checkColon = true;\n\n        if (this.scanner.isDelim(ASTERISK$1)) {\n            expectIdent = true;\n            checkColon = false;\n            this.scanner.next();\n        } else if (!this.scanner.isDelim(VERTICALLINE$1)) {\n            this.eat(IDENT$4);\n        }\n\n        if (this.scanner.isDelim(VERTICALLINE$1)) {\n            if (this.scanner.source.charCodeAt(this.scanner.tokenStart + 1) !== EQUALSSIGN) {\n                this.scanner.next();\n                this.eat(IDENT$4);\n            } else if (expectIdent) {\n                this.error('Identifier is expected', this.scanner.tokenEnd);\n            }\n        } else if (expectIdent) {\n            this.error('Vertical line is expected');\n        }\n\n        if (checkColon && this.scanner.tokenType === COLON) {\n            this.scanner.next();\n            this.eat(IDENT$4);\n        }\n\n        return {\n            type: 'Identifier',\n            loc: this.getLocation(start, this.scanner.tokenStart),\n            name: this.scanner.substrToCursor(start)\n        };\n    }\n\n    function getOperator() {\n        var start = this.scanner.tokenStart;\n        var code = this.scanner.source.charCodeAt(start);\n\n        if (code !== EQUALSSIGN &&        // =\n            code !== TILDE &&             // ~=\n            code !== CIRCUMFLEXACCENT &&  // ^=\n            code !== DOLLARSIGN &&        // $=\n            code !== ASTERISK$1 &&          // *=\n            code !== VERTICALLINE$1         // |=\n        ) {\n            this.error('Attribute selector (=, ~=, ^=, $=, *=, |=) is expected');\n        }\n\n        this.scanner.next();\n\n        if (code !== EQUALSSIGN) {\n            if (!this.scanner.isDelim(EQUALSSIGN)) {\n                this.error('Equal sign is expected');\n            }\n\n            this.scanner.next();\n        }\n\n        return this.scanner.substrToCursor(start);\n    }\n\n    // '[' <wq-name> ']'\n    // '[' <wq-name> <attr-matcher> [ <string-token> | <ident-token> ] <attr-modifier>? ']'\n    var AttributeSelector = {\n        name: 'AttributeSelector',\n        structure: {\n            name: 'Identifier',\n            matcher: [String, null],\n            value: ['String', 'Identifier', null],\n            flags: [String, null]\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var name;\n            var matcher = null;\n            var value = null;\n            var flags = null;\n\n            this.eat(LEFTSQUAREBRACKET$1);\n            this.scanner.skipSC();\n\n            name = getAttributeName.call(this);\n            this.scanner.skipSC();\n\n            if (this.scanner.tokenType !== RIGHTSQUAREBRACKET$1) {\n                // avoid case `[name i]`\n                if (this.scanner.tokenType !== IDENT$4) {\n                    matcher = getOperator.call(this);\n\n                    this.scanner.skipSC();\n\n                    value = this.scanner.tokenType === STRING\n                        ? this.String()\n                        : this.Identifier();\n\n                    this.scanner.skipSC();\n                }\n\n                // attribute flags\n                if (this.scanner.tokenType === IDENT$4) {\n                    flags = this.scanner.getTokenValue();\n                    this.scanner.next();\n\n                    this.scanner.skipSC();\n                }\n            }\n\n            this.eat(RIGHTSQUAREBRACKET$1);\n\n            return {\n                type: 'AttributeSelector',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: name,\n                matcher: matcher,\n                value: value,\n                flags: flags\n            };\n        },\n        generate: function(node) {\n            var flagsPrefix = ' ';\n\n            this.chunk('[');\n            this.node(node.name);\n\n            if (node.matcher !== null) {\n                this.chunk(node.matcher);\n\n                if (node.value !== null) {\n                    this.node(node.value);\n\n                    // space between string and flags is not required\n                    if (node.value.type === 'String') {\n                        flagsPrefix = '';\n                    }\n                }\n            }\n\n            if (node.flags !== null) {\n                this.chunk(flagsPrefix);\n                this.chunk(node.flags);\n            }\n\n            this.chunk(']');\n        }\n    };\n\n    var TYPE$e = tokenizer.TYPE;\n    var rawMode$1 = Raw.mode;\n\n    var WHITESPACE$5 = TYPE$e.WhiteSpace;\n    var COMMENT$4 = TYPE$e.Comment;\n    var SEMICOLON$2 = TYPE$e.Semicolon;\n    var ATKEYWORD$1 = TYPE$e.AtKeyword;\n    var LEFTCURLYBRACKET$3 = TYPE$e.LeftCurlyBracket;\n    var RIGHTCURLYBRACKET$2 = TYPE$e.RightCurlyBracket;\n\n    function consumeRaw$1(startToken) {\n        return this.Raw(startToken, null, true);\n    }\n    function consumeRule() {\n        return this.parseWithFallback(this.Rule, consumeRaw$1);\n    }\n    function consumeRawDeclaration(startToken) {\n        return this.Raw(startToken, rawMode$1.semicolonIncluded, true);\n    }\n    function consumeDeclaration() {\n        if (this.scanner.tokenType === SEMICOLON$2) {\n            return consumeRawDeclaration.call(this, this.scanner.tokenIndex);\n        }\n\n        var node = this.parseWithFallback(this.Declaration, consumeRawDeclaration);\n\n        if (this.scanner.tokenType === SEMICOLON$2) {\n            this.scanner.next();\n        }\n\n        return node;\n    }\n\n    var Block = {\n        name: 'Block',\n        structure: {\n            children: [[\n                'Atrule',\n                'Rule',\n                'Declaration'\n            ]]\n        },\n        parse: function(isDeclaration) {\n            var consumer = isDeclaration ? consumeDeclaration : consumeRule;\n\n            var start = this.scanner.tokenStart;\n            var children = this.createList();\n\n            this.eat(LEFTCURLYBRACKET$3);\n\n            scan:\n                while (!this.scanner.eof) {\n                    switch (this.scanner.tokenType) {\n                        case RIGHTCURLYBRACKET$2:\n                            break scan;\n\n                        case WHITESPACE$5:\n                        case COMMENT$4:\n                            this.scanner.next();\n                            break;\n\n                        case ATKEYWORD$1:\n                            children.push(this.parseWithFallback(this.Atrule, consumeRaw$1));\n                            break;\n\n                        default:\n                            children.push(consumer.call(this));\n                    }\n                }\n\n            if (!this.scanner.eof) {\n                this.eat(RIGHTCURLYBRACKET$2);\n            }\n\n            return {\n                type: 'Block',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.chunk('{');\n            this.children(node, function(prev) {\n                if (prev.type === 'Declaration') {\n                    this.chunk(';');\n                }\n            });\n            this.chunk('}');\n        },\n        walkContext: 'block'\n    };\n\n    var TYPE$f = tokenizer.TYPE;\n\n    var LEFTSQUAREBRACKET$2 = TYPE$f.LeftSquareBracket;\n    var RIGHTSQUAREBRACKET$2 = TYPE$f.RightSquareBracket;\n\n    var Brackets = {\n        name: 'Brackets',\n        structure: {\n            children: [[]]\n        },\n        parse: function(readSequence, recognizer) {\n            var start = this.scanner.tokenStart;\n            var children = null;\n\n            this.eat(LEFTSQUAREBRACKET$2);\n\n            children = readSequence.call(this, recognizer);\n\n            if (!this.scanner.eof) {\n                this.eat(RIGHTSQUAREBRACKET$2);\n            }\n\n            return {\n                type: 'Brackets',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.chunk('[');\n            this.children(node);\n            this.chunk(']');\n        }\n    };\n\n    var CDC = tokenizer.TYPE.CDC;\n\n    var CDC_1 = {\n        name: 'CDC',\n        structure: [],\n        parse: function() {\n            var start = this.scanner.tokenStart;\n\n            this.eat(CDC); // -->\n\n            return {\n                type: 'CDC',\n                loc: this.getLocation(start, this.scanner.tokenStart)\n            };\n        },\n        generate: function() {\n            this.chunk('-->');\n        }\n    };\n\n    var CDO = tokenizer.TYPE.CDO;\n\n    var CDO_1 = {\n        name: 'CDO',\n        structure: [],\n        parse: function() {\n            var start = this.scanner.tokenStart;\n\n            this.eat(CDO); // <!--\n\n            return {\n                type: 'CDO',\n                loc: this.getLocation(start, this.scanner.tokenStart)\n            };\n        },\n        generate: function() {\n            this.chunk('<!--');\n        }\n    };\n\n    var TYPE$g = tokenizer.TYPE;\n\n    var IDENT$5 = TYPE$g.Ident;\n    var FULLSTOP = 0x002E; // U+002E FULL STOP (.)\n\n    // '.' ident\n    var ClassSelector = {\n        name: 'ClassSelector',\n        structure: {\n            name: String\n        },\n        parse: function() {\n            if (!this.scanner.isDelim(FULLSTOP)) {\n                this.error('Full stop is expected');\n            }\n\n            this.scanner.next();\n\n            return {\n                type: 'ClassSelector',\n                loc: this.getLocation(this.scanner.tokenStart - 1, this.scanner.tokenEnd),\n                name: this.consume(IDENT$5)\n            };\n        },\n        generate: function(node) {\n            this.chunk('.');\n            this.chunk(node.name);\n        }\n    };\n\n    var TYPE$h = tokenizer.TYPE;\n\n    var IDENT$6 = TYPE$h.Ident;\n    var PLUSSIGN$4 = 0x002B;        // U+002B PLUS SIGN (+)\n    var SOLIDUS = 0x002F;         // U+002F SOLIDUS (/)\n    var GREATERTHANSIGN$1 = 0x003E; // U+003E GREATER-THAN SIGN (>)\n    var TILDE$1 = 0x007E;           // U+007E TILDE (~)\n\n    // + | > | ~ | /deep/\n    var Combinator = {\n        name: 'Combinator',\n        structure: {\n            name: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var code = this.scanner.source.charCodeAt(this.scanner.tokenStart);\n\n            switch (code) {\n                case GREATERTHANSIGN$1:\n                case PLUSSIGN$4:\n                case TILDE$1:\n                    this.scanner.next();\n                    break;\n\n                case SOLIDUS:\n                    this.scanner.next();\n\n                    if (this.scanner.tokenType !== IDENT$6 || this.scanner.lookupValue(0, 'deep') === false) {\n                        this.error('Identifier `deep` is expected');\n                    }\n\n                    this.scanner.next();\n\n                    if (!this.scanner.isDelim(SOLIDUS)) {\n                        this.error('Solidus is expected');\n                    }\n\n                    this.scanner.next();\n                    break;\n\n                default:\n                    this.error('Combinator is expected');\n            }\n\n            return {\n                type: 'Combinator',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: this.scanner.substrToCursor(start)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.name);\n        }\n    };\n\n    var TYPE$i = tokenizer.TYPE;\n\n    var COMMENT$5 = TYPE$i.Comment;\n    var ASTERISK$2 = 0x002A;        // U+002A ASTERISK (*)\n    var SOLIDUS$1 = 0x002F;         // U+002F SOLIDUS (/)\n\n    // '/*' .* '*/'\n    var Comment = {\n        name: 'Comment',\n        structure: {\n            value: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var end = this.scanner.tokenEnd;\n\n            this.eat(COMMENT$5);\n\n            if ((end - start + 2) >= 2 &&\n                this.scanner.source.charCodeAt(end - 2) === ASTERISK$2 &&\n                this.scanner.source.charCodeAt(end - 1) === SOLIDUS$1) {\n                end -= 2;\n            }\n\n            return {\n                type: 'Comment',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                value: this.scanner.source.substring(start + 2, end)\n            };\n        },\n        generate: function(node) {\n            this.chunk('/*');\n            this.chunk(node.value);\n            this.chunk('*/');\n        }\n    };\n\n    var isCustomProperty$1 = names.isCustomProperty;\n    var TYPE$j = tokenizer.TYPE;\n    var rawMode$2 = Raw.mode;\n\n    var IDENT$7 = TYPE$j.Ident;\n    var HASH$1 = TYPE$j.Hash;\n    var COLON$1 = TYPE$j.Colon;\n    var SEMICOLON$3 = TYPE$j.Semicolon;\n    var DELIM$2 = TYPE$j.Delim;\n    var EXCLAMATIONMARK$2 = 0x0021; // U+0021 EXCLAMATION MARK (!)\n    var NUMBERSIGN$2 = 0x0023;      // U+0023 NUMBER SIGN (#)\n    var DOLLARSIGN$1 = 0x0024;      // U+0024 DOLLAR SIGN ($)\n    var AMPERSAND$1 = 0x0026;       // U+0026 ANPERSAND (&)\n    var ASTERISK$3 = 0x002A;        // U+002A ASTERISK (*)\n    var PLUSSIGN$5 = 0x002B;        // U+002B PLUS SIGN (+)\n    var SOLIDUS$2 = 0x002F;         // U+002F SOLIDUS (/)\n\n    function consumeValueRaw(startToken) {\n        return this.Raw(startToken, rawMode$2.exclamationMarkOrSemicolon, true);\n    }\n\n    function consumeCustomPropertyRaw(startToken) {\n        return this.Raw(startToken, rawMode$2.exclamationMarkOrSemicolon, false);\n    }\n\n    function consumeValue() {\n        var startValueToken = this.scanner.tokenIndex;\n        var value = this.Value();\n\n        if (value.type !== 'Raw' &&\n            this.scanner.eof === false &&\n            this.scanner.tokenType !== SEMICOLON$3 &&\n            this.scanner.isDelim(EXCLAMATIONMARK$2) === false &&\n            this.scanner.isBalanceEdge(startValueToken) === false) {\n            this.error();\n        }\n\n        return value;\n    }\n\n    var Declaration = {\n        name: 'Declaration',\n        structure: {\n            important: [Boolean, String],\n            property: String,\n            value: ['Value', 'Raw']\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var startToken = this.scanner.tokenIndex;\n            var property = readProperty$1.call(this);\n            var customProperty = isCustomProperty$1(property);\n            var parseValue = customProperty ? this.parseCustomProperty : this.parseValue;\n            var consumeRaw = customProperty ? consumeCustomPropertyRaw : consumeValueRaw;\n            var important = false;\n            var value;\n\n            this.scanner.skipSC();\n            this.eat(COLON$1);\n\n            if (!customProperty) {\n                this.scanner.skipSC();\n            }\n\n            if (parseValue) {\n                value = this.parseWithFallback(consumeValue, consumeRaw);\n            } else {\n                value = consumeRaw.call(this, this.scanner.tokenIndex);\n            }\n\n            if (this.scanner.isDelim(EXCLAMATIONMARK$2)) {\n                important = getImportant.call(this);\n                this.scanner.skipSC();\n            }\n\n            // Do not include semicolon to range per spec\n            // https://drafts.csswg.org/css-syntax/#declaration-diagram\n\n            if (this.scanner.eof === false &&\n                this.scanner.tokenType !== SEMICOLON$3 &&\n                this.scanner.isBalanceEdge(startToken) === false) {\n                this.error();\n            }\n\n            return {\n                type: 'Declaration',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                important: important,\n                property: property,\n                value: value\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.property);\n            this.chunk(':');\n            this.node(node.value);\n\n            if (node.important) {\n                this.chunk(node.important === true ? '!important' : '!' + node.important);\n            }\n        },\n        walkContext: 'declaration'\n    };\n\n    function readProperty$1() {\n        var start = this.scanner.tokenStart;\n\n        // hacks\n        if (this.scanner.tokenType === DELIM$2) {\n            switch (this.scanner.source.charCodeAt(this.scanner.tokenStart)) {\n                case ASTERISK$3:\n                case DOLLARSIGN$1:\n                case PLUSSIGN$5:\n                case NUMBERSIGN$2:\n                case AMPERSAND$1:\n                    this.scanner.next();\n                    break;\n\n                // TODO: not sure we should support this hack\n                case SOLIDUS$2:\n                    this.scanner.next();\n                    if (this.scanner.isDelim(SOLIDUS$2)) {\n                        this.scanner.next();\n                    }\n                    break;\n            }\n        }\n\n        if (this.scanner.tokenType === HASH$1) {\n            this.eat(HASH$1);\n        } else {\n            this.eat(IDENT$7);\n        }\n\n        return this.scanner.substrToCursor(start);\n    }\n\n    // ! ws* important\n    function getImportant() {\n        this.eat(DELIM$2);\n        this.scanner.skipSC();\n\n        var important = this.consume(IDENT$7);\n\n        // store original value in case it differ from `important`\n        // for better original source restoring and hacks like `!ie` support\n        return important === 'important' ? true : important;\n    }\n\n    var TYPE$k = tokenizer.TYPE;\n    var rawMode$3 = Raw.mode;\n\n    var WHITESPACE$6 = TYPE$k.WhiteSpace;\n    var COMMENT$6 = TYPE$k.Comment;\n    var SEMICOLON$4 = TYPE$k.Semicolon;\n\n    function consumeRaw$2(startToken) {\n        return this.Raw(startToken, rawMode$3.semicolonIncluded, true);\n    }\n\n    var DeclarationList = {\n        name: 'DeclarationList',\n        structure: {\n            children: [[\n                'Declaration'\n            ]]\n        },\n        parse: function() {\n            var children = this.createList();\n\n\n            while (!this.scanner.eof) {\n                switch (this.scanner.tokenType) {\n                    case WHITESPACE$6:\n                    case COMMENT$6:\n                    case SEMICOLON$4:\n                        this.scanner.next();\n                        break;\n\n                    default:\n                        children.push(this.parseWithFallback(this.Declaration, consumeRaw$2));\n                }\n            }\n\n            return {\n                type: 'DeclarationList',\n                loc: this.getLocationFromList(children),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.children(node, function(prev) {\n                if (prev.type === 'Declaration') {\n                    this.chunk(';');\n                }\n            });\n        }\n    };\n\n    var consumeNumber$3 = utils.consumeNumber;\n    var TYPE$l = tokenizer.TYPE;\n\n    var DIMENSION$3 = TYPE$l.Dimension;\n\n    var Dimension = {\n        name: 'Dimension',\n        structure: {\n            value: String,\n            unit: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var numberEnd = consumeNumber$3(this.scanner.source, start);\n\n            this.eat(DIMENSION$3);\n\n            return {\n                type: 'Dimension',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                value: this.scanner.source.substring(start, numberEnd),\n                unit: this.scanner.source.substring(numberEnd, this.scanner.tokenStart)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.value);\n            this.chunk(node.unit);\n        }\n    };\n\n    var TYPE$m = tokenizer.TYPE;\n\n    var RIGHTPARENTHESIS$2 = TYPE$m.RightParenthesis;\n\n    // <function-token> <sequence> )\n    var _Function = {\n        name: 'Function',\n        structure: {\n            name: String,\n            children: [[]]\n        },\n        parse: function(readSequence, recognizer) {\n            var start = this.scanner.tokenStart;\n            var name = this.consumeFunctionName();\n            var nameLowerCase = name.toLowerCase();\n            var children;\n\n            children = recognizer.hasOwnProperty(nameLowerCase)\n                ? recognizer[nameLowerCase].call(this, recognizer)\n                : readSequence.call(this, recognizer);\n\n            if (!this.scanner.eof) {\n                this.eat(RIGHTPARENTHESIS$2);\n            }\n\n            return {\n                type: 'Function',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: name,\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.name);\n            this.chunk('(');\n            this.children(node);\n            this.chunk(')');\n        },\n        walkContext: 'function'\n    };\n\n    var TYPE$n = tokenizer.TYPE;\n\n    var HASH$2 = TYPE$n.Hash;\n\n    // '#' ident\n    var HexColor = {\n        name: 'HexColor',\n        structure: {\n            value: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n\n            this.eat(HASH$2);\n\n            return {\n                type: 'HexColor',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                value: this.scanner.substrToCursor(start + 1)\n            };\n        },\n        generate: function(node) {\n            this.chunk('#');\n            this.chunk(node.value);\n        }\n    };\n\n    var TYPE$o = tokenizer.TYPE;\n\n    var IDENT$8 = TYPE$o.Ident;\n\n    var Identifier = {\n        name: 'Identifier',\n        structure: {\n            name: String\n        },\n        parse: function() {\n            return {\n                type: 'Identifier',\n                loc: this.getLocation(this.scanner.tokenStart, this.scanner.tokenEnd),\n                name: this.consume(IDENT$8)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.name);\n        }\n    };\n\n    var TYPE$p = tokenizer.TYPE;\n\n    var HASH$3 = TYPE$p.Hash;\n\n    // <hash-token>\n    var IdSelector = {\n        name: 'IdSelector',\n        structure: {\n            name: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n\n            // TODO: check value is an ident\n            this.eat(HASH$3);\n\n            return {\n                type: 'IdSelector',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: this.scanner.substrToCursor(start + 1)\n            };\n        },\n        generate: function(node) {\n            this.chunk('#');\n            this.chunk(node.name);\n        }\n    };\n\n    var TYPE$q = tokenizer.TYPE;\n\n    var IDENT$9 = TYPE$q.Ident;\n    var NUMBER$4 = TYPE$q.Number;\n    var DIMENSION$4 = TYPE$q.Dimension;\n    var LEFTPARENTHESIS$2 = TYPE$q.LeftParenthesis;\n    var RIGHTPARENTHESIS$3 = TYPE$q.RightParenthesis;\n    var COLON$2 = TYPE$q.Colon;\n    var DELIM$3 = TYPE$q.Delim;\n\n    var MediaFeature = {\n        name: 'MediaFeature',\n        structure: {\n            name: String,\n            value: ['Identifier', 'Number', 'Dimension', 'Ratio', null]\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var name;\n            var value = null;\n\n            this.eat(LEFTPARENTHESIS$2);\n            this.scanner.skipSC();\n\n            name = this.consume(IDENT$9);\n            this.scanner.skipSC();\n\n            if (this.scanner.tokenType !== RIGHTPARENTHESIS$3) {\n                this.eat(COLON$2);\n                this.scanner.skipSC();\n\n                switch (this.scanner.tokenType) {\n                    case NUMBER$4:\n                        if (this.lookupNonWSType(1) === DELIM$3) {\n                            value = this.Ratio();\n                        } else {\n                            value = this.Number();\n                        }\n\n                        break;\n\n                    case DIMENSION$4:\n                        value = this.Dimension();\n                        break;\n\n                    case IDENT$9:\n                        value = this.Identifier();\n\n                        break;\n\n                    default:\n                        this.error('Number, dimension, ratio or identifier is expected');\n                }\n\n                this.scanner.skipSC();\n            }\n\n            this.eat(RIGHTPARENTHESIS$3);\n\n            return {\n                type: 'MediaFeature',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: name,\n                value: value\n            };\n        },\n        generate: function(node) {\n            this.chunk('(');\n            this.chunk(node.name);\n            if (node.value !== null) {\n                this.chunk(':');\n                this.node(node.value);\n            }\n            this.chunk(')');\n        }\n    };\n\n    var TYPE$r = tokenizer.TYPE;\n\n    var WHITESPACE$7 = TYPE$r.WhiteSpace;\n    var COMMENT$7 = TYPE$r.Comment;\n    var IDENT$a = TYPE$r.Ident;\n    var LEFTPARENTHESIS$3 = TYPE$r.LeftParenthesis;\n\n    var MediaQuery = {\n        name: 'MediaQuery',\n        structure: {\n            children: [[\n                'Identifier',\n                'MediaFeature',\n                'WhiteSpace'\n            ]]\n        },\n        parse: function() {\n            this.scanner.skipSC();\n\n            var children = this.createList();\n            var child = null;\n            var space = null;\n\n            scan:\n                while (!this.scanner.eof) {\n                    switch (this.scanner.tokenType) {\n                        case COMMENT$7:\n                            this.scanner.next();\n                            continue;\n\n                        case WHITESPACE$7:\n                            space = this.WhiteSpace();\n                            continue;\n\n                        case IDENT$a:\n                            child = this.Identifier();\n                            break;\n\n                        case LEFTPARENTHESIS$3:\n                            child = this.MediaFeature();\n                            break;\n\n                        default:\n                            break scan;\n                    }\n\n                    if (space !== null) {\n                        children.push(space);\n                        space = null;\n                    }\n\n                    children.push(child);\n                }\n\n            if (child === null) {\n                this.error('Identifier or parenthesis is expected');\n            }\n\n            return {\n                type: 'MediaQuery',\n                loc: this.getLocationFromList(children),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.children(node);\n        }\n    };\n\n    var COMMA$1 = tokenizer.TYPE.Comma;\n\n    var MediaQueryList = {\n        name: 'MediaQueryList',\n        structure: {\n            children: [[\n                'MediaQuery'\n            ]]\n        },\n        parse: function(relative) {\n            var children = this.createList();\n\n            this.scanner.skipSC();\n\n            while (!this.scanner.eof) {\n                children.push(this.MediaQuery(relative));\n\n                if (this.scanner.tokenType !== COMMA$1) {\n                    break;\n                }\n\n                this.scanner.next();\n            }\n\n            return {\n                type: 'MediaQueryList',\n                loc: this.getLocationFromList(children),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.children(node, function() {\n                this.chunk(',');\n            });\n        }\n    };\n\n    var Nth = {\n        name: 'Nth',\n        structure: {\n            nth: ['AnPlusB', 'Identifier'],\n            selector: ['SelectorList', null]\n        },\n        parse: function(allowOfClause) {\n            this.scanner.skipSC();\n\n            var start = this.scanner.tokenStart;\n            var end = start;\n            var selector = null;\n            var query;\n\n            if (this.scanner.lookupValue(0, 'odd') || this.scanner.lookupValue(0, 'even')) {\n                query = this.Identifier();\n            } else {\n                query = this.AnPlusB();\n            }\n\n            this.scanner.skipSC();\n\n            if (allowOfClause && this.scanner.lookupValue(0, 'of')) {\n                this.scanner.next();\n\n                selector = this.SelectorList();\n\n                if (this.needPositions) {\n                    end = this.getLastListNode(selector.children).loc.end.offset;\n                }\n            } else {\n                if (this.needPositions) {\n                    end = query.loc.end.offset;\n                }\n            }\n\n            return {\n                type: 'Nth',\n                loc: this.getLocation(start, end),\n                nth: query,\n                selector: selector\n            };\n        },\n        generate: function(node) {\n            this.node(node.nth);\n            if (node.selector !== null) {\n                this.chunk(' of ');\n                this.node(node.selector);\n            }\n        }\n    };\n\n    var NUMBER$5 = tokenizer.TYPE.Number;\n\n    var _Number = {\n        name: 'Number',\n        structure: {\n            value: String\n        },\n        parse: function() {\n            return {\n                type: 'Number',\n                loc: this.getLocation(this.scanner.tokenStart, this.scanner.tokenEnd),\n                value: this.consume(NUMBER$5)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.value);\n        }\n    };\n\n    // '/' | '*' | ',' | ':' | '+' | '-'\n    var Operator = {\n        name: 'Operator',\n        structure: {\n            value: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n\n            this.scanner.next();\n\n            return {\n                type: 'Operator',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                value: this.scanner.substrToCursor(start)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.value);\n        }\n    };\n\n    var TYPE$s = tokenizer.TYPE;\n\n    var LEFTPARENTHESIS$4 = TYPE$s.LeftParenthesis;\n    var RIGHTPARENTHESIS$4 = TYPE$s.RightParenthesis;\n\n    var Parentheses = {\n        name: 'Parentheses',\n        structure: {\n            children: [[]]\n        },\n        parse: function(readSequence, recognizer) {\n            var start = this.scanner.tokenStart;\n            var children = null;\n\n            this.eat(LEFTPARENTHESIS$4);\n\n            children = readSequence.call(this, recognizer);\n\n            if (!this.scanner.eof) {\n                this.eat(RIGHTPARENTHESIS$4);\n            }\n\n            return {\n                type: 'Parentheses',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.chunk('(');\n            this.children(node);\n            this.chunk(')');\n        }\n    };\n\n    var consumeNumber$4 = utils.consumeNumber;\n    var TYPE$t = tokenizer.TYPE;\n\n    var PERCENTAGE$1 = TYPE$t.Percentage;\n\n    var Percentage = {\n        name: 'Percentage',\n        structure: {\n            value: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var numberEnd = consumeNumber$4(this.scanner.source, start);\n\n            this.eat(PERCENTAGE$1);\n\n            return {\n                type: 'Percentage',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                value: this.scanner.source.substring(start, numberEnd)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.value);\n            this.chunk('%');\n        }\n    };\n\n    var TYPE$u = tokenizer.TYPE;\n\n    var IDENT$b = TYPE$u.Ident;\n    var FUNCTION$1 = TYPE$u.Function;\n    var COLON$3 = TYPE$u.Colon;\n    var RIGHTPARENTHESIS$5 = TYPE$u.RightParenthesis;\n\n    // : [ <ident> | <function-token> <any-value>? ) ]\n    var PseudoClassSelector = {\n        name: 'PseudoClassSelector',\n        structure: {\n            name: String,\n            children: [['Raw'], null]\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var children = null;\n            var name;\n            var nameLowerCase;\n\n            this.eat(COLON$3);\n\n            if (this.scanner.tokenType === FUNCTION$1) {\n                name = this.consumeFunctionName();\n                nameLowerCase = name.toLowerCase();\n\n                if (this.pseudo.hasOwnProperty(nameLowerCase)) {\n                    this.scanner.skipSC();\n                    children = this.pseudo[nameLowerCase].call(this);\n                    this.scanner.skipSC();\n                } else {\n                    children = this.createList();\n                    children.push(\n                        this.Raw(this.scanner.tokenIndex, null, false)\n                    );\n                }\n\n                this.eat(RIGHTPARENTHESIS$5);\n            } else {\n                name = this.consume(IDENT$b);\n            }\n\n            return {\n                type: 'PseudoClassSelector',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: name,\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.chunk(':');\n            this.chunk(node.name);\n\n            if (node.children !== null) {\n                this.chunk('(');\n                this.children(node);\n                this.chunk(')');\n            }\n        },\n        walkContext: 'function'\n    };\n\n    var TYPE$v = tokenizer.TYPE;\n\n    var IDENT$c = TYPE$v.Ident;\n    var FUNCTION$2 = TYPE$v.Function;\n    var COLON$4 = TYPE$v.Colon;\n    var RIGHTPARENTHESIS$6 = TYPE$v.RightParenthesis;\n\n    // :: [ <ident> | <function-token> <any-value>? ) ]\n    var PseudoElementSelector = {\n        name: 'PseudoElementSelector',\n        structure: {\n            name: String,\n            children: [['Raw'], null]\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var children = null;\n            var name;\n            var nameLowerCase;\n\n            this.eat(COLON$4);\n            this.eat(COLON$4);\n\n            if (this.scanner.tokenType === FUNCTION$2) {\n                name = this.consumeFunctionName();\n                nameLowerCase = name.toLowerCase();\n\n                if (this.pseudo.hasOwnProperty(nameLowerCase)) {\n                    this.scanner.skipSC();\n                    children = this.pseudo[nameLowerCase].call(this);\n                    this.scanner.skipSC();\n                } else {\n                    children = this.createList();\n                    children.push(\n                        this.Raw(this.scanner.tokenIndex, null, false)\n                    );\n                }\n\n                this.eat(RIGHTPARENTHESIS$6);\n            } else {\n                name = this.consume(IDENT$c);\n            }\n\n            return {\n                type: 'PseudoElementSelector',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: name,\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.chunk('::');\n            this.chunk(node.name);\n\n            if (node.children !== null) {\n                this.chunk('(');\n                this.children(node);\n                this.chunk(')');\n            }\n        },\n        walkContext: 'function'\n    };\n\n    var isDigit$5 = tokenizer.isDigit;\n    var TYPE$w = tokenizer.TYPE;\n\n    var NUMBER$6 = TYPE$w.Number;\n    var DELIM$4 = TYPE$w.Delim;\n    var SOLIDUS$3 = 0x002F;  // U+002F SOLIDUS (/)\n    var FULLSTOP$1 = 0x002E; // U+002E FULL STOP (.)\n\n    // Terms of <ratio> should be a positive numbers (not zero or negative)\n    // (see https://drafts.csswg.org/mediaqueries-3/#values)\n    // However, -o-min-device-pixel-ratio takes fractional values as a ratio's term\n    // and this is using by various sites. Therefore we relax checking on parse\n    // to test a term is unsigned number without an exponent part.\n    // Additional checking may be applied on lexer validation.\n    function consumeNumber$5() {\n        this.scanner.skipWS();\n\n        var value = this.consume(NUMBER$6);\n\n        for (var i = 0; i < value.length; i++) {\n            var code = value.charCodeAt(i);\n            if (!isDigit$5(code) && code !== FULLSTOP$1) {\n                this.error('Unsigned number is expected', this.scanner.tokenStart - value.length + i);\n            }\n        }\n\n        if (Number(value) === 0) {\n            this.error('Zero number is not allowed', this.scanner.tokenStart - value.length);\n        }\n\n        return value;\n    }\n\n    // <positive-integer> S* '/' S* <positive-integer>\n    var Ratio = {\n        name: 'Ratio',\n        structure: {\n            left: String,\n            right: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var left = consumeNumber$5.call(this);\n            var right;\n\n            this.scanner.skipWS();\n\n            if (!this.scanner.isDelim(SOLIDUS$3)) {\n                this.error('Solidus is expected');\n            }\n            this.eat(DELIM$4);\n            right = consumeNumber$5.call(this);\n\n            return {\n                type: 'Ratio',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                left: left,\n                right: right\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.left);\n            this.chunk('/');\n            this.chunk(node.right);\n        }\n    };\n\n    var TYPE$x = tokenizer.TYPE;\n    var rawMode$4 = Raw.mode;\n\n    var LEFTCURLYBRACKET$4 = TYPE$x.LeftCurlyBracket;\n\n    function consumeRaw$3(startToken) {\n        return this.Raw(startToken, rawMode$4.leftCurlyBracket, true);\n    }\n\n    function consumePrelude() {\n        var prelude = this.SelectorList();\n\n        if (prelude.type !== 'Raw' &&\n            this.scanner.eof === false &&\n            this.scanner.tokenType !== LEFTCURLYBRACKET$4) {\n            this.error();\n        }\n\n        return prelude;\n    }\n\n    var Rule = {\n        name: 'Rule',\n        structure: {\n            prelude: ['SelectorList', 'Raw'],\n            block: ['Block']\n        },\n        parse: function() {\n            var startToken = this.scanner.tokenIndex;\n            var startOffset = this.scanner.tokenStart;\n            var prelude;\n            var block;\n\n            if (this.parseRulePrelude) {\n                prelude = this.parseWithFallback(consumePrelude, consumeRaw$3);\n            } else {\n                prelude = consumeRaw$3.call(this, startToken);\n            }\n\n            block = this.Block(true);\n\n            return {\n                type: 'Rule',\n                loc: this.getLocation(startOffset, this.scanner.tokenStart),\n                prelude: prelude,\n                block: block\n            };\n        },\n        generate: function(node) {\n            this.node(node.prelude);\n            this.node(node.block);\n        },\n        walkContext: 'rule'\n    };\n\n    var Selector = {\n        name: 'Selector',\n        structure: {\n            children: [[\n                'TypeSelector',\n                'IdSelector',\n                'ClassSelector',\n                'AttributeSelector',\n                'PseudoClassSelector',\n                'PseudoElementSelector',\n                'Combinator',\n                'WhiteSpace'\n            ]]\n        },\n        parse: function() {\n            var children = this.readSequence(this.scope.Selector);\n\n            // nothing were consumed\n            if (this.getFirstListNode(children) === null) {\n                this.error('Selector is expected');\n            }\n\n            return {\n                type: 'Selector',\n                loc: this.getLocationFromList(children),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.children(node);\n        }\n    };\n\n    var TYPE$y = tokenizer.TYPE;\n\n    var COMMA$2 = TYPE$y.Comma;\n\n    var SelectorList = {\n        name: 'SelectorList',\n        structure: {\n            children: [[\n                'Selector',\n                'Raw'\n            ]]\n        },\n        parse: function() {\n            var children = this.createList();\n\n            while (!this.scanner.eof) {\n                children.push(this.Selector());\n\n                if (this.scanner.tokenType === COMMA$2) {\n                    this.scanner.next();\n                    continue;\n                }\n\n                break;\n            }\n\n            return {\n                type: 'SelectorList',\n                loc: this.getLocationFromList(children),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.children(node, function() {\n                this.chunk(',');\n            });\n        },\n        walkContext: 'selector'\n    };\n\n    var STRING$1 = tokenizer.TYPE.String;\n\n    var _String = {\n        name: 'String',\n        structure: {\n            value: String\n        },\n        parse: function() {\n            return {\n                type: 'String',\n                loc: this.getLocation(this.scanner.tokenStart, this.scanner.tokenEnd),\n                value: this.consume(STRING$1)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.value);\n        }\n    };\n\n    var TYPE$z = tokenizer.TYPE;\n\n    var WHITESPACE$8 = TYPE$z.WhiteSpace;\n    var COMMENT$8 = TYPE$z.Comment;\n    var ATKEYWORD$2 = TYPE$z.AtKeyword;\n    var CDO$1 = TYPE$z.CDO;\n    var CDC$1 = TYPE$z.CDC;\n    var EXCLAMATIONMARK$3 = 0x0021; // U+0021 EXCLAMATION MARK (!)\n\n    function consumeRaw$4(startToken) {\n        return this.Raw(startToken, null, false);\n    }\n\n    var StyleSheet = {\n        name: 'StyleSheet',\n        structure: {\n            children: [[\n                'Comment',\n                'CDO',\n                'CDC',\n                'Atrule',\n                'Rule',\n                'Raw'\n            ]]\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var children = this.createList();\n            var child;\n\n\n            while (!this.scanner.eof) {\n                switch (this.scanner.tokenType) {\n                    case WHITESPACE$8:\n                        this.scanner.next();\n                        continue;\n\n                    case COMMENT$8:\n                        // ignore comments except exclamation comments (i.e. /*! .. */) on top level\n                        if (this.scanner.source.charCodeAt(this.scanner.tokenStart + 2) !== EXCLAMATIONMARK$3) {\n                            this.scanner.next();\n                            continue;\n                        }\n\n                        child = this.Comment();\n                        break;\n\n                    case CDO$1: // <!--\n                        child = this.CDO();\n                        break;\n\n                    case CDC$1: // -->\n                        child = this.CDC();\n                        break;\n\n                    // CSS Syntax Module Level 3\n                    // \u00a72.2 Error handling\n                    // At the \"top level\" of a stylesheet, an <at-keyword-token> starts an at-rule.\n                    case ATKEYWORD$2:\n                        child = this.parseWithFallback(this.Atrule, consumeRaw$4);\n                        break;\n\n                    // Anything else starts a qualified rule ...\n                    default:\n                        child = this.parseWithFallback(this.Rule, consumeRaw$4);\n                }\n\n                children.push(child);\n            }\n\n            return {\n                type: 'StyleSheet',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.children(node);\n        },\n        walkContext: 'stylesheet'\n    };\n\n    var TYPE$A = tokenizer.TYPE;\n\n    var IDENT$d = TYPE$A.Ident;\n    var ASTERISK$4 = 0x002A;     // U+002A ASTERISK (*)\n    var VERTICALLINE$2 = 0x007C; // U+007C VERTICAL LINE (|)\n\n    function eatIdentifierOrAsterisk() {\n        if (this.scanner.tokenType !== IDENT$d &&\n            this.scanner.isDelim(ASTERISK$4) === false) {\n            this.error('Identifier or asterisk is expected');\n        }\n\n        this.scanner.next();\n    }\n\n    // ident\n    // ident|ident\n    // ident|*\n    // *\n    // *|ident\n    // *|*\n    // |ident\n    // |*\n    var TypeSelector = {\n        name: 'TypeSelector',\n        structure: {\n            name: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n\n            if (this.scanner.isDelim(VERTICALLINE$2)) {\n                this.scanner.next();\n                eatIdentifierOrAsterisk.call(this);\n            } else {\n                eatIdentifierOrAsterisk.call(this);\n\n                if (this.scanner.isDelim(VERTICALLINE$2)) {\n                    this.scanner.next();\n                    eatIdentifierOrAsterisk.call(this);\n                }\n            }\n\n            return {\n                type: 'TypeSelector',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                name: this.scanner.substrToCursor(start)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.name);\n        }\n    };\n\n    var isHexDigit$4 = tokenizer.isHexDigit;\n    var cmpChar$4 = tokenizer.cmpChar;\n    var TYPE$B = tokenizer.TYPE;\n    var NAME$3 = tokenizer.NAME;\n\n    var IDENT$e = TYPE$B.Ident;\n    var NUMBER$7 = TYPE$B.Number;\n    var DIMENSION$5 = TYPE$B.Dimension;\n    var PLUSSIGN$6 = 0x002B;     // U+002B PLUS SIGN (+)\n    var HYPHENMINUS$4 = 0x002D;  // U+002D HYPHEN-MINUS (-)\n    var QUESTIONMARK$2 = 0x003F; // U+003F QUESTION MARK (?)\n    var U$1 = 0x0075;            // U+0075 LATIN SMALL LETTER U (u)\n\n    function eatHexSequence(offset, allowDash) {\n        for (var pos = this.scanner.tokenStart + offset, len = 0; pos < this.scanner.tokenEnd; pos++) {\n            var code = this.scanner.source.charCodeAt(pos);\n\n            if (code === HYPHENMINUS$4 && allowDash && len !== 0) {\n                if (eatHexSequence.call(this, offset + len + 1, false) === 0) {\n                    this.error();\n                }\n\n                return -1;\n            }\n\n            if (!isHexDigit$4(code)) {\n                this.error(\n                    allowDash && len !== 0\n                        ? 'HyphenMinus' + (len < 6 ? ' or hex digit' : '') + ' is expected'\n                        : (len < 6 ? 'Hex digit is expected' : 'Unexpected input'),\n                    pos\n                );\n            }\n\n            if (++len > 6) {\n                this.error('Too many hex digits', pos);\n            }    }\n\n        this.scanner.next();\n        return len;\n    }\n\n    function eatQuestionMarkSequence(max) {\n        var count = 0;\n\n        while (this.scanner.isDelim(QUESTIONMARK$2)) {\n            if (++count > max) {\n                this.error('Too many question marks');\n            }\n\n            this.scanner.next();\n        }\n    }\n\n    function startsWith$1(code) {\n        if (this.scanner.source.charCodeAt(this.scanner.tokenStart) !== code) {\n            this.error(NAME$3[code] + ' is expected');\n        }\n    }\n\n    // https://drafts.csswg.org/css-syntax/#urange\n    // Informally, the <urange> production has three forms:\n    // U+0001\n    //      Defines a range consisting of a single code point, in this case the code point \"1\".\n    // U+0001-00ff\n    //      Defines a range of codepoints between the first and the second value, in this case\n    //      the range between \"1\" and \"ff\" (255 in decimal) inclusive.\n    // U+00??\n    //      Defines a range of codepoints where the \"?\" characters range over all hex digits,\n    //      in this case defining the same as the value U+0000-00ff.\n    // In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat \"?\" as a hexadecimal digit).\n    //\n    // <urange> =\n    //   u '+' <ident-token> '?'* |\n    //   u <dimension-token> '?'* |\n    //   u <number-token> '?'* |\n    //   u <number-token> <dimension-token> |\n    //   u <number-token> <number-token> |\n    //   u '+' '?'+\n    function scanUnicodeRange() {\n        var hexLength = 0;\n\n        // u '+' <ident-token> '?'*\n        // u '+' '?'+\n        if (this.scanner.isDelim(PLUSSIGN$6)) {\n            this.scanner.next();\n\n            if (this.scanner.tokenType === IDENT$e) {\n                hexLength = eatHexSequence.call(this, 0, true);\n                if (hexLength > 0) {\n                    eatQuestionMarkSequence.call(this, 6 - hexLength);\n                }\n                return;\n            }\n\n            if (this.scanner.isDelim(QUESTIONMARK$2)) {\n                this.scanner.next();\n                eatQuestionMarkSequence.call(this, 5);\n                return;\n            }\n\n            this.error('Hex digit or question mark is expected');\n            return;\n        }\n\n        // u <number-token> '?'*\n        // u <number-token> <dimension-token>\n        // u <number-token> <number-token>\n        if (this.scanner.tokenType === NUMBER$7) {\n            startsWith$1.call(this, PLUSSIGN$6);\n            hexLength = eatHexSequence.call(this, 1, true);\n\n            if (this.scanner.isDelim(QUESTIONMARK$2)) {\n                eatQuestionMarkSequence.call(this, 6 - hexLength);\n                return;\n            }\n\n            if (this.scanner.tokenType === DIMENSION$5 ||\n                this.scanner.tokenType === NUMBER$7) {\n                startsWith$1.call(this, HYPHENMINUS$4);\n                eatHexSequence.call(this, 1, false);\n                return;\n            }\n\n            return;\n        }\n\n        // u <dimension-token> '?'*\n        if (this.scanner.tokenType === DIMENSION$5) {\n            startsWith$1.call(this, PLUSSIGN$6);\n            hexLength = eatHexSequence.call(this, 1, true);\n\n            if (hexLength > 0) {\n                eatQuestionMarkSequence.call(this, 6 - hexLength);\n            }\n\n            return;\n        }\n\n        this.error();\n    }\n\n    var UnicodeRange = {\n        name: 'UnicodeRange',\n        structure: {\n            value: String\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n\n            // U or u\n            if (!cmpChar$4(this.scanner.source, start, U$1)) {\n                this.error('U is expected');\n            }\n\n            if (!cmpChar$4(this.scanner.source, start + 1, PLUSSIGN$6)) {\n                this.error('Plus sign is expected');\n            }\n\n            this.scanner.next();\n            scanUnicodeRange.call(this);\n\n            return {\n                type: 'UnicodeRange',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                value: this.scanner.substrToCursor(start)\n            };\n        },\n        generate: function(node) {\n            this.chunk(node.value);\n        }\n    };\n\n    var isWhiteSpace$2 = tokenizer.isWhiteSpace;\n    var cmpStr$4 = tokenizer.cmpStr;\n    var TYPE$C = tokenizer.TYPE;\n\n    var FUNCTION$3 = TYPE$C.Function;\n    var URL$1 = TYPE$C.Url;\n    var RIGHTPARENTHESIS$7 = TYPE$C.RightParenthesis;\n\n    // <url-token> | <function-token> <string> )\n    var Url = {\n        name: 'Url',\n        structure: {\n            value: ['String', 'Raw']\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var value;\n\n            switch (this.scanner.tokenType) {\n                case URL$1:\n                    var rawStart = start + 4;\n                    var rawEnd = this.scanner.tokenEnd - 1;\n\n                    while (rawStart < rawEnd && isWhiteSpace$2(this.scanner.source.charCodeAt(rawStart))) {\n                        rawStart++;\n                    }\n\n                    while (rawStart < rawEnd && isWhiteSpace$2(this.scanner.source.charCodeAt(rawEnd - 1))) {\n                        rawEnd--;\n                    }\n\n                    value = {\n                        type: 'Raw',\n                        loc: this.getLocation(rawStart, rawEnd),\n                        value: this.scanner.source.substring(rawStart, rawEnd)\n                    };\n\n                    this.eat(URL$1);\n                    break;\n\n                case FUNCTION$3:\n                    if (!cmpStr$4(this.scanner.source, this.scanner.tokenStart, this.scanner.tokenEnd, 'url(')) {\n                        this.error('Function name must be `url`');\n                    }\n\n                    this.eat(FUNCTION$3);\n                    this.scanner.skipSC();\n                    value = this.String();\n                    this.scanner.skipSC();\n                    this.eat(RIGHTPARENTHESIS$7);\n                    break;\n\n                default:\n                    this.error('Url or Function is expected');\n            }\n\n            return {\n                type: 'Url',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                value: value\n            };\n        },\n        generate: function(node) {\n            this.chunk('url');\n            this.chunk('(');\n            this.node(node.value);\n            this.chunk(')');\n        }\n    };\n\n    var Value = {\n        name: 'Value',\n        structure: {\n            children: [[]]\n        },\n        parse: function() {\n            var start = this.scanner.tokenStart;\n            var children = this.readSequence(this.scope.Value);\n\n            return {\n                type: 'Value',\n                loc: this.getLocation(start, this.scanner.tokenStart),\n                children: children\n            };\n        },\n        generate: function(node) {\n            this.children(node);\n        }\n    };\n\n    var WHITESPACE$9 = tokenizer.TYPE.WhiteSpace;\n    var SPACE$2 = Object.freeze({\n        type: 'WhiteSpace',\n        loc: null,\n        value: ' '\n    });\n\n    var WhiteSpace$1 = {\n        name: 'WhiteSpace',\n        structure: {\n            value: String\n        },\n        parse: function() {\n            this.eat(WHITESPACE$9);\n            return SPACE$2;\n\n            // return {\n            //     type: 'WhiteSpace',\n            //     loc: this.getLocation(this.scanner.tokenStart, this.scanner.tokenEnd),\n            //     value: this.consume(WHITESPACE)\n            // };\n        },\n        generate: function(node) {\n            this.chunk(node.value);\n        }\n    };\n\n    var node = {\n        AnPlusB: AnPlusB,\n        Atrule: Atrule,\n        AtrulePrelude: AtrulePrelude,\n        AttributeSelector: AttributeSelector,\n        Block: Block,\n        Brackets: Brackets,\n        CDC: CDC_1,\n        CDO: CDO_1,\n        ClassSelector: ClassSelector,\n        Combinator: Combinator,\n        Comment: Comment,\n        Declaration: Declaration,\n        DeclarationList: DeclarationList,\n        Dimension: Dimension,\n        Function: _Function,\n        HexColor: HexColor,\n        Identifier: Identifier,\n        IdSelector: IdSelector,\n        MediaFeature: MediaFeature,\n        MediaQuery: MediaQuery,\n        MediaQueryList: MediaQueryList,\n        Nth: Nth,\n        Number: _Number,\n        Operator: Operator,\n        Parentheses: Parentheses,\n        Percentage: Percentage,\n        PseudoClassSelector: PseudoClassSelector,\n        PseudoElementSelector: PseudoElementSelector,\n        Ratio: Ratio,\n        Raw: Raw,\n        Rule: Rule,\n        Selector: Selector,\n        SelectorList: SelectorList,\n        String: _String,\n        StyleSheet: StyleSheet,\n        TypeSelector: TypeSelector,\n        UnicodeRange: UnicodeRange,\n        Url: Url,\n        Value: Value,\n        WhiteSpace: WhiteSpace$1\n    };\n\n    var data = getCjsExportFromNamespace(defaultSyntax$1);\n\n    var lexer = {\n        generic: true,\n        types: data.types,\n        atrules: data.atrules,\n        properties: data.properties,\n        node: node\n    };\n\n    var cmpChar$5 = tokenizer.cmpChar;\n    var cmpStr$5 = tokenizer.cmpStr;\n    var TYPE$D = tokenizer.TYPE;\n\n    var IDENT$f = TYPE$D.Ident;\n    var STRING$2 = TYPE$D.String;\n    var NUMBER$8 = TYPE$D.Number;\n    var FUNCTION$4 = TYPE$D.Function;\n    var URL$2 = TYPE$D.Url;\n    var HASH$4 = TYPE$D.Hash;\n    var DIMENSION$6 = TYPE$D.Dimension;\n    var PERCENTAGE$2 = TYPE$D.Percentage;\n    var LEFTPARENTHESIS$5 = TYPE$D.LeftParenthesis;\n    var LEFTSQUAREBRACKET$3 = TYPE$D.LeftSquareBracket;\n    var COMMA$3 = TYPE$D.Comma;\n    var DELIM$5 = TYPE$D.Delim;\n    var NUMBERSIGN$3 = 0x0023;  // U+0023 NUMBER SIGN (#)\n    var ASTERISK$5 = 0x002A;    // U+002A ASTERISK (*)\n    var PLUSSIGN$7 = 0x002B;    // U+002B PLUS SIGN (+)\n    var HYPHENMINUS$5 = 0x002D; // U+002D HYPHEN-MINUS (-)\n    var SOLIDUS$4 = 0x002F;     // U+002F SOLIDUS (/)\n    var U$2 = 0x0075;           // U+0075 LATIN SMALL LETTER U (u)\n\n    var _default = function defaultRecognizer(context) {\n        switch (this.scanner.tokenType) {\n            case HASH$4:\n                return this.HexColor();\n\n            case COMMA$3:\n                context.space = null;\n                context.ignoreWSAfter = true;\n                return this.Operator();\n\n            case LEFTPARENTHESIS$5:\n                return this.Parentheses(this.readSequence, context.recognizer);\n\n            case LEFTSQUAREBRACKET$3:\n                return this.Brackets(this.readSequence, context.recognizer);\n\n            case STRING$2:\n                return this.String();\n\n            case DIMENSION$6:\n                return this.Dimension();\n\n            case PERCENTAGE$2:\n                return this.Percentage();\n\n            case NUMBER$8:\n                return this.Number();\n\n            case FUNCTION$4:\n                return cmpStr$5(this.scanner.source, this.scanner.tokenStart, this.scanner.tokenEnd, 'url(')\n                    ? this.Url()\n                    : this.Function(this.readSequence, context.recognizer);\n\n            case URL$2:\n                return this.Url();\n\n            case IDENT$f:\n                // check for unicode range, it should start with u+ or U+\n                if (cmpChar$5(this.scanner.source, this.scanner.tokenStart, U$2) &&\n                    cmpChar$5(this.scanner.source, this.scanner.tokenStart + 1, PLUSSIGN$7)) {\n                    return this.UnicodeRange();\n                } else {\n                    return this.Identifier();\n                }\n\n            case DELIM$5:\n                var code = this.scanner.source.charCodeAt(this.scanner.tokenStart);\n\n                if (code === SOLIDUS$4 ||\n                    code === ASTERISK$5 ||\n                    code === PLUSSIGN$7 ||\n                    code === HYPHENMINUS$5) {\n                    return this.Operator(); // TODO: replace with Delim\n                }\n\n                // TODO: produce a node with Delim node type\n\n                if (code === NUMBERSIGN$3) {\n                    this.error('Hex or identifier is expected', this.scanner.tokenStart + 1);\n                }\n\n                break;\n        }\n    };\n\n    var atrulePrelude = {\n        getNode: _default\n    };\n\n    var TYPE$E = tokenizer.TYPE;\n\n    var DELIM$6 = TYPE$E.Delim;\n    var IDENT$g = TYPE$E.Ident;\n    var DIMENSION$7 = TYPE$E.Dimension;\n    var PERCENTAGE$3 = TYPE$E.Percentage;\n    var NUMBER$9 = TYPE$E.Number;\n    var HASH$5 = TYPE$E.Hash;\n    var COLON$5 = TYPE$E.Colon;\n    var LEFTSQUAREBRACKET$4 = TYPE$E.LeftSquareBracket;\n    var NUMBERSIGN$4 = 0x0023;      // U+0023 NUMBER SIGN (#)\n    var ASTERISK$6 = 0x002A;        // U+002A ASTERISK (*)\n    var PLUSSIGN$8 = 0x002B;        // U+002B PLUS SIGN (+)\n    var SOLIDUS$5 = 0x002F;         // U+002F SOLIDUS (/)\n    var FULLSTOP$2 = 0x002E;        // U+002E FULL STOP (.)\n    var GREATERTHANSIGN$2 = 0x003E; // U+003E GREATER-THAN SIGN (>)\n    var VERTICALLINE$3 = 0x007C;    // U+007C VERTICAL LINE (|)\n    var TILDE$2 = 0x007E;           // U+007E TILDE (~)\n\n    function getNode(context) {\n        switch (this.scanner.tokenType) {\n            case LEFTSQUAREBRACKET$4:\n                return this.AttributeSelector();\n\n            case HASH$5:\n                return this.IdSelector();\n\n            case COLON$5:\n                if (this.scanner.lookupType(1) === COLON$5) {\n                    return this.PseudoElementSelector();\n                } else {\n                    return this.PseudoClassSelector();\n                }\n\n            case IDENT$g:\n                return this.TypeSelector();\n\n            case NUMBER$9:\n            case PERCENTAGE$3:\n                return this.Percentage();\n\n            case DIMENSION$7:\n                // throws when .123ident\n                if (this.scanner.source.charCodeAt(this.scanner.tokenStart) === FULLSTOP$2) {\n                    this.error('Identifier is expected', this.scanner.tokenStart + 1);\n                }\n                break;\n\n            case DELIM$6:\n                var code = this.scanner.source.charCodeAt(this.scanner.tokenStart);\n\n                switch (code) {\n                    case PLUSSIGN$8:\n                    case GREATERTHANSIGN$2:\n                    case TILDE$2:\n                        context.space = null;\n                        context.ignoreWSAfter = true;\n                        return this.Combinator();\n\n                    case SOLIDUS$5:  // /deep/\n                        return this.Combinator();\n\n                    case FULLSTOP$2:\n                        return this.ClassSelector();\n\n                    case ASTERISK$6:\n                    case VERTICALLINE$3:\n                        return this.TypeSelector();\n\n                    case NUMBERSIGN$4:\n                        return this.IdSelector();\n                }\n\n                break;\n        }\n    }\n    var selector = {\n        getNode: getNode\n    };\n\n    // https://drafts.csswg.org/css-images-4/#element-notation\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/element\n    var element = function() {\n        this.scanner.skipSC();\n\n        var children = this.createSingleNodeList(\n            this.IdSelector()\n        );\n\n        this.scanner.skipSC();\n\n        return children;\n    };\n\n    // legacy IE function\n    // expression( <any-value> )\n    var expression = function() {\n        return this.createSingleNodeList(\n            this.Raw(this.scanner.tokenIndex, null, false)\n        );\n    };\n\n    var TYPE$F = tokenizer.TYPE;\n    var rawMode$5 = Raw.mode;\n\n    var COMMA$4 = TYPE$F.Comma;\n\n    // var( <ident> , <value>? )\n    var _var = function() {\n        var children = this.createList();\n\n        this.scanner.skipSC();\n\n        // NOTE: Don't check more than a first argument is an ident, rest checks are for lexer\n        children.push(this.Identifier());\n\n        this.scanner.skipSC();\n\n        if (this.scanner.tokenType === COMMA$4) {\n            children.push(this.Operator());\n            children.push(this.parseCustomProperty\n                ? this.Value(null)\n                : this.Raw(this.scanner.tokenIndex, rawMode$5.exclamationMarkOrSemicolon, false)\n            );\n        }\n\n        return children;\n    };\n\n    var value = {\n        getNode: _default,\n        '-moz-element': element,\n        'element': element,\n        'expression': expression,\n        'var': _var\n    };\n\n    var scope = {\n        AtrulePrelude: atrulePrelude,\n        Selector: selector,\n        Value: value\n    };\n\n    var fontFace = {\n        parse: {\n            prelude: null,\n            block: function() {\n                return this.Block(true);\n            }\n        }\n    };\n\n    var TYPE$G = tokenizer.TYPE;\n\n    var STRING$3 = TYPE$G.String;\n    var IDENT$h = TYPE$G.Ident;\n    var URL$3 = TYPE$G.Url;\n    var FUNCTION$5 = TYPE$G.Function;\n    var LEFTPARENTHESIS$6 = TYPE$G.LeftParenthesis;\n\n    var _import = {\n        parse: {\n            prelude: function() {\n                var children = this.createList();\n\n                this.scanner.skipSC();\n\n                switch (this.scanner.tokenType) {\n                    case STRING$3:\n                        children.push(this.String());\n                        break;\n\n                    case URL$3:\n                    case FUNCTION$5:\n                        children.push(this.Url());\n                        break;\n\n                    default:\n                        this.error('String or url() is expected');\n                }\n\n                if (this.lookupNonWSType(0) === IDENT$h ||\n                    this.lookupNonWSType(0) === LEFTPARENTHESIS$6) {\n                    children.push(this.WhiteSpace());\n                    children.push(this.MediaQueryList());\n                }\n\n                return children;\n            },\n            block: null\n        }\n    };\n\n    var media = {\n        parse: {\n            prelude: function() {\n                return this.createSingleNodeList(\n                    this.MediaQueryList()\n                );\n            },\n            block: function() {\n                return this.Block(false);\n            }\n        }\n    };\n\n    var page = {\n        parse: {\n            prelude: function() {\n                return this.createSingleNodeList(\n                    this.SelectorList()\n                );\n            },\n            block: function() {\n                return this.Block(true);\n            }\n        }\n    };\n\n    var TYPE$H = tokenizer.TYPE;\n\n    var WHITESPACE$a = TYPE$H.WhiteSpace;\n    var COMMENT$9 = TYPE$H.Comment;\n    var IDENT$i = TYPE$H.Ident;\n    var FUNCTION$6 = TYPE$H.Function;\n    var COLON$6 = TYPE$H.Colon;\n    var LEFTPARENTHESIS$7 = TYPE$H.LeftParenthesis;\n\n    function consumeRaw$5() {\n        return this.createSingleNodeList(\n            this.Raw(this.scanner.tokenIndex, null, false)\n        );\n    }\n\n    function parentheses() {\n        this.scanner.skipSC();\n\n        if (this.scanner.tokenType === IDENT$i &&\n            this.lookupNonWSType(1) === COLON$6) {\n            return this.createSingleNodeList(\n                this.Declaration()\n            );\n        }\n\n        return readSequence.call(this);\n    }\n\n    function readSequence() {\n        var children = this.createList();\n        var space = null;\n        var child;\n\n        this.scanner.skipSC();\n\n        scan:\n            while (!this.scanner.eof) {\n                switch (this.scanner.tokenType) {\n                    case WHITESPACE$a:\n                        space = this.WhiteSpace();\n                        continue;\n\n                    case COMMENT$9:\n                        this.scanner.next();\n                        continue;\n\n                    case FUNCTION$6:\n                        child = this.Function(consumeRaw$5, this.scope.AtrulePrelude);\n                        break;\n\n                    case IDENT$i:\n                        child = this.Identifier();\n                        break;\n\n                    case LEFTPARENTHESIS$7:\n                        child = this.Parentheses(parentheses, this.scope.AtrulePrelude);\n                        break;\n\n                    default:\n                        break scan;\n                }\n\n                if (space !== null) {\n                    children.push(space);\n                    space = null;\n                }\n\n                children.push(child);\n            }\n\n        return children;\n    }\n\n    var supports = {\n        parse: {\n            prelude: function() {\n                var children = readSequence.call(this);\n\n                if (this.getFirstListNode(children) === null) {\n                    this.error('Condition is expected');\n                }\n\n                return children;\n            },\n            block: function() {\n                return this.Block(false);\n            }\n        }\n    };\n\n    var atrule = {\n        'font-face': fontFace,\n        'import': _import,\n        'media': media,\n        'page': page,\n        'supports': supports\n    };\n\n    var dir = {\n        parse: function() {\n            return this.createSingleNodeList(\n                this.Identifier()\n            );\n        }\n    };\n\n    var has$1 = {\n        parse: function() {\n            return this.createSingleNodeList(\n                this.SelectorList()\n            );\n        }\n    };\n\n    var lang = {\n        parse: function() {\n            return this.createSingleNodeList(\n                this.Identifier()\n            );\n        }\n    };\n\n    var selectorList = {\n        parse: function selectorList() {\n            return this.createSingleNodeList(\n                this.SelectorList()\n            );\n        }\n    };\n\n    var matches = selectorList;\n\n    var not = selectorList;\n\n    var ALLOW_OF_CLAUSE = true;\n\n    var nthWithOfClause = {\n        parse: function nthWithOfClause() {\n            return this.createSingleNodeList(\n                this.Nth(ALLOW_OF_CLAUSE)\n            );\n        }\n    };\n\n    var nthChild = nthWithOfClause;\n\n    var nthLastChild = nthWithOfClause;\n\n    var DISALLOW_OF_CLAUSE = false;\n\n    var nth = {\n        parse: function nth() {\n            return this.createSingleNodeList(\n                this.Nth(DISALLOW_OF_CLAUSE)\n            );\n        }\n    };\n\n    var nthLastOfType = nth;\n\n    var nthOfType = nth;\n\n    var slotted = {\n        parse: function compoundSelector() {\n            return this.createSingleNodeList(\n                this.Selector()\n            );\n        }\n    };\n\n    var pseudo = {\n        'dir': dir,\n        'has': has$1,\n        'lang': lang,\n        'matches': matches,\n        'not': not,\n        'nth-child': nthChild,\n        'nth-last-child': nthLastChild,\n        'nth-last-of-type': nthLastOfType,\n        'nth-of-type': nthOfType,\n        'slotted': slotted\n    };\n\n    var parser = {\n        parseContext: {\n            default: 'StyleSheet',\n            stylesheet: 'StyleSheet',\n            atrule: 'Atrule',\n            atrulePrelude: function(options) {\n                return this.AtrulePrelude(options.atrule ? String(options.atrule) : null);\n            },\n            mediaQueryList: 'MediaQueryList',\n            mediaQuery: 'MediaQuery',\n            rule: 'Rule',\n            selectorList: 'SelectorList',\n            selector: 'Selector',\n            block: function() {\n                return this.Block(true);\n            },\n            declarationList: 'DeclarationList',\n            declaration: 'Declaration',\n            value: 'Value'\n        },\n        scope: scope,\n        atrule: atrule,\n        pseudo: pseudo,\n        node: node\n    };\n\n    var walker = {\n        node: node\n    };\n\n    function merge() {\n        var dest = {};\n\n        for (var i = 0; i < arguments.length; i++) {\n            var src = arguments[i];\n            for (var key in src) {\n                dest[key] = src[key];\n            }\n        }\n\n        return dest;\n    }\n\n    var syntax = create$4.create(\n        merge(\n            lexer,\n            parser,\n            walker\n        )\n    );\n\n    var lib = syntax;\n\n    var hasOwnProperty$6 = Object.prototype.hasOwnProperty;\n\n    function buildMap(list, caseInsensitive) {\n        var map = Object.create(null);\n\n        if (!Array.isArray(list)) {\n            return null;\n        }\n\n        for (var i = 0; i < list.length; i++) {\n            var name = list[i];\n\n            if (caseInsensitive) {\n                name = name.toLowerCase();\n            }\n\n            map[name] = true;\n        }\n\n        return map;\n    }\n\n    function buildList(data) {\n        if (!data) {\n            return null;\n        }\n\n        var tags = buildMap(data.tags, true);\n        var ids = buildMap(data.ids);\n        var classes = buildMap(data.classes);\n\n        if (tags === null &&\n            ids === null &&\n            classes === null) {\n            return null;\n        }\n\n        return {\n            tags: tags,\n            ids: ids,\n            classes: classes\n        };\n    }\n\n    function buildIndex(data) {\n        var scopes = false;\n\n        if (data.scopes && Array.isArray(data.scopes)) {\n            scopes = Object.create(null);\n\n            for (var i = 0; i < data.scopes.length; i++) {\n                var list = data.scopes[i];\n\n                if (!list || !Array.isArray(list)) {\n                    throw new Error('Wrong usage format');\n                }\n\n                for (var j = 0; j < list.length; j++) {\n                    var name = list[j];\n\n                    if (hasOwnProperty$6.call(scopes, name)) {\n                        throw new Error('Class can\\'t be used for several scopes: ' + name);\n                    }\n\n                    scopes[name] = i + 1;\n                }\n            }\n        }\n\n        return {\n            whitelist: buildList(data),\n            blacklist: buildList(data.blacklist),\n            scopes: scopes\n        };\n    }\n\n    var usage = {\n        buildIndex: buildIndex\n    };\n\n    var utils$1 = {\n        hasNoChildren: function(node) {\n            return !node || !node.children || node.children.isEmpty();\n        },\n        isNodeChildrenList: function(node, list) {\n            return node !== null && node.children === list;\n        }\n    };\n\n    var resolveKeyword = lib.keyword;\n    var { hasNoChildren } = utils$1;\n\n    var Atrule$1 = function cleanAtrule(node, item, list) {\n        if (node.block) {\n            // otherwise removed at-rule don't prevent @import for removal\n            if (this.stylesheet !== null) {\n                this.stylesheet.firstAtrulesAllowed = false;\n            }\n\n            if (hasNoChildren(node.block)) {\n                list.remove(item);\n                return;\n            }\n        }\n\n        switch (node.name) {\n            case 'charset':\n                if (hasNoChildren(node.prelude)) {\n                    list.remove(item);\n                    return;\n                }\n\n                // if there is any rule before @charset -> remove it\n                if (item.prev) {\n                    list.remove(item);\n                    return;\n                }\n\n                break;\n\n            case 'import':\n                if (this.stylesheet === null || !this.stylesheet.firstAtrulesAllowed) {\n                    list.remove(item);\n                    return;\n                }\n\n                // if there are some rules that not an @import or @charset before @import\n                // remove it\n                list.prevUntil(item.prev, function(rule) {\n                    if (rule.type === 'Atrule') {\n                        if (rule.name === 'import' || rule.name === 'charset') {\n                            return;\n                        }\n                    }\n\n                    this.root.firstAtrulesAllowed = false;\n                    list.remove(item);\n                    return true;\n                }, this);\n\n                break;\n\n            default:\n                var name = resolveKeyword(node.name).basename;\n                if (name === 'keyframes' ||\n                    name === 'media' ||\n                    name === 'supports') {\n\n                    // drop at-rule with no prelude\n                    if (hasNoChildren(node.prelude) || hasNoChildren(node.block)) {\n                        list.remove(item);\n                    }\n                }\n        }\n    };\n\n    var Comment$1 = function cleanComment(data, item, list) {\n        list.remove(item);\n    };\n\n    var Declaration$1 = function cleanDeclartion(node, item, list) {\n        if (node.value.children && node.value.children.isEmpty()) {\n            list.remove(item);\n        }\n    };\n\n    var { isNodeChildrenList } = utils$1;\n\n    var Raw$1 = function cleanRaw(node, item, list) {\n        // raw in stylesheet or block children\n        if (isNodeChildrenList(this.stylesheet, list) ||\n            isNodeChildrenList(this.block, list)) {\n            list.remove(item);\n        }\n    };\n\n    var hasOwnProperty$7 = Object.prototype.hasOwnProperty;\n    var walk$1 = lib.walk;\n    var { hasNoChildren: hasNoChildren$1 } = utils$1;\n\n    function cleanUnused(selectorList, usageData) {\n        selectorList.children.each(function(selector, item, list) {\n            var shouldRemove = false;\n\n            walk$1(selector, function(node) {\n                // ignore nodes in nested selectors\n                if (this.selector === null || this.selector === selectorList) {\n                    switch (node.type) {\n                        case 'SelectorList':\n                            // TODO: remove toLowerCase when pseudo selectors will be normalized\n                            // ignore selectors inside :not()\n                            if (this.function === null || this.function.name.toLowerCase() !== 'not') {\n                                if (cleanUnused(node, usageData)) {\n                                    shouldRemove = true;\n                                }\n                            }\n                            break;\n\n                        case 'ClassSelector':\n                            if (usageData.whitelist !== null &&\n                                usageData.whitelist.classes !== null &&\n                                !hasOwnProperty$7.call(usageData.whitelist.classes, node.name)) {\n                                shouldRemove = true;\n                            }\n                            if (usageData.blacklist !== null &&\n                                usageData.blacklist.classes !== null &&\n                                hasOwnProperty$7.call(usageData.blacklist.classes, node.name)) {\n                                shouldRemove = true;\n                            }\n                            break;\n\n                        case 'IdSelector':\n                            if (usageData.whitelist !== null &&\n                                usageData.whitelist.ids !== null &&\n                                !hasOwnProperty$7.call(usageData.whitelist.ids, node.name)) {\n                                shouldRemove = true;\n                            }\n                            if (usageData.blacklist !== null &&\n                                usageData.blacklist.ids !== null &&\n                                hasOwnProperty$7.call(usageData.blacklist.ids, node.name)) {\n                                shouldRemove = true;\n                            }\n                            break;\n\n                        case 'TypeSelector':\n                            // TODO: remove toLowerCase when type selectors will be normalized\n                            // ignore universal selectors\n                            if (node.name.charAt(node.name.length - 1) !== '*') {\n                                if (usageData.whitelist !== null &&\n                                    usageData.whitelist.tags !== null &&\n                                    !hasOwnProperty$7.call(usageData.whitelist.tags, node.name.toLowerCase())) {\n                                    shouldRemove = true;\n                                }\n                                if (usageData.blacklist !== null &&\n                                    usageData.blacklist.tags !== null &&\n                                    hasOwnProperty$7.call(usageData.blacklist.tags, node.name.toLowerCase())) {\n                                    shouldRemove = true;\n                                }\n                            }\n                            break;\n                    }\n                }\n            });\n\n            if (shouldRemove) {\n                list.remove(item);\n            }\n        });\n\n        return selectorList.children.isEmpty();\n    }\n\n    var Rule$1 = function cleanRule(node, item, list, options) {\n        if (hasNoChildren$1(node.prelude) || hasNoChildren$1(node.block)) {\n            list.remove(item);\n            return;\n        }\n\n        var usageData = options.usage;\n\n        if (usageData && (usageData.whitelist !== null || usageData.blacklist !== null)) {\n            cleanUnused(node.prelude, usageData);\n\n            if (hasNoChildren$1(node.prelude)) {\n                list.remove(item);\n                return;\n            }\n        }\n    };\n\n    // remove useless universal selector\n    var TypeSelector$1 = function cleanTypeSelector(node, item, list) {\n        var name = item.data.name;\n\n        // check it's a non-namespaced universal selector\n        if (name !== '*') {\n            return;\n        }\n\n        // remove when universal selector before other selectors\n        var nextType = item.next && item.next.data.type;\n        if (nextType === 'IdSelector' ||\n            nextType === 'ClassSelector' ||\n            nextType === 'AttributeSelector' ||\n            nextType === 'PseudoClassSelector' ||\n            nextType === 'PseudoElementSelector') {\n            list.remove(item);\n        }\n    };\n\n    var { isNodeChildrenList: isNodeChildrenList$1 } = utils$1;\n\n    function isSafeOperator(node) {\n        return node.type === 'Operator' && node.value !== '+' && node.value !== '-';\n    }\n\n    var WhiteSpace$2 = function cleanWhitespace(node, item, list) {\n        // remove when first or last item in sequence\n        if (item.next === null || item.prev === null) {\n            list.remove(item);\n            return;\n        }\n\n        // white space in stylesheet or block children\n        if (isNodeChildrenList$1(this.stylesheet, list) ||\n            isNodeChildrenList$1(this.block, list)) {\n            list.remove(item);\n            return;\n        }\n\n        if (item.next.data.type === 'WhiteSpace') {\n            list.remove(item);\n            return;\n        }\n\n        if (isSafeOperator(item.prev.data) || isSafeOperator(item.next.data)) {\n            list.remove(item);\n            return;\n        }\n    };\n\n    var walk$2 = lib.walk;\n    var handlers = {\n        Atrule: Atrule$1,\n        Comment: Comment$1,\n        Declaration: Declaration$1,\n        Raw: Raw$1,\n        Rule: Rule$1,\n        TypeSelector: TypeSelector$1,\n        WhiteSpace: WhiteSpace$2\n    };\n\n    var clean = function(ast, options) {\n        walk$2(ast, {\n            leave: function(node, item, list) {\n                if (handlers.hasOwnProperty(node.type)) {\n                    handlers[node.type].call(this, node, item, list, options);\n                }\n            }\n        });\n    };\n\n    var keyframes = function(node) {\n        node.block.children.each(function(rule) {\n            rule.prelude.children.each(function(simpleselector) {\n                simpleselector.children.each(function(data, item) {\n                    if (data.type === 'Percentage' && data.value === '100') {\n                        item.data = {\n                            type: 'TypeSelector',\n                            loc: data.loc,\n                            name: 'to'\n                        };\n                    } else if (data.type === 'TypeSelector' && data.name === 'from') {\n                        item.data = {\n                            type: 'Percentage',\n                            loc: data.loc,\n                            value: '0'\n                        };\n                    }\n                });\n            });\n        });\n    };\n\n    var resolveKeyword$1 = lib.keyword;\n\n\n    var Atrule$2 = function(node) {\n        // compress @keyframe selectors\n        if (resolveKeyword$1(node.name).basename === 'keyframes') {\n            keyframes(node);\n        }\n    };\n\n    // Can unquote attribute detection\n    // Adopted implementation of Mathias Bynens\n    // https://github.com/mathiasbynens/mothereff.in/blob/master/unquoted-attributes/eff.js\n    var escapesRx = /\\\\([0-9A-Fa-f]{1,6})(\\r\\n|[ \\t\\n\\f\\r])?|\\\\./g;\n    var blockUnquoteRx = /^(-?\\d|--)|[\\u0000-\\u002c\\u002e\\u002f\\u003A-\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u009f]/;\n\n    function canUnquote(value) {\n        if (value === '' || value === '-') {\n            return;\n        }\n\n        // Escapes are valid, so replace them with a valid non-empty string\n        value = value.replace(escapesRx, 'a');\n\n        return !blockUnquoteRx.test(value);\n    }\n\n    var AttributeSelector$1 = function(node) {\n        var attrValue = node.value;\n\n        if (!attrValue || attrValue.type !== 'String') {\n            return;\n        }\n\n        var unquotedValue = attrValue.value.replace(/^(.)(.*)\\1$/, '$2');\n        if (canUnquote(unquotedValue)) {\n            node.value = {\n                type: 'Identifier',\n                loc: attrValue.loc,\n                name: unquotedValue\n            };\n        }\n    };\n\n    var font = function compressFont(node) {\n        var list = node.children;\n\n        list.eachRight(function(node, item) {\n            if (node.type === 'Identifier') {\n                if (node.name === 'bold') {\n                    item.data = {\n                        type: 'Number',\n                        loc: node.loc,\n                        value: '700'\n                    };\n                } else if (node.name === 'normal') {\n                    var prev = item.prev;\n\n                    if (prev && prev.data.type === 'Operator' && prev.data.value === '/') {\n                        this.remove(prev);\n                    }\n\n                    this.remove(item);\n                } else if (node.name === 'medium') {\n                    var next = item.next;\n\n                    if (!next || next.data.type !== 'Operator') {\n                        this.remove(item);\n                    }\n                }\n            }\n        });\n\n        // remove redundant spaces\n        list.each(function(node, item) {\n            if (node.type === 'WhiteSpace') {\n                if (!item.prev || !item.next || item.next.data.type === 'WhiteSpace') {\n                    this.remove(item);\n                }\n            }\n        });\n\n        if (list.isEmpty()) {\n            list.insert(list.createItem({\n                type: 'Identifier',\n                name: 'normal'\n            }));\n        }\n    };\n\n    var fontWeight = function compressFontWeight(node) {\n        var value = node.children.head.data;\n\n        if (value.type === 'Identifier') {\n            switch (value.name) {\n                case 'normal':\n                    node.children.head.data = {\n                        type: 'Number',\n                        loc: value.loc,\n                        value: '400'\n                    };\n                    break;\n                case 'bold':\n                    node.children.head.data = {\n                        type: 'Number',\n                        loc: value.loc,\n                        value: '700'\n                    };\n                    break;\n            }\n        }\n    };\n\n    var List$1 = lib.List;\n\n    var background = function compressBackground(node) {\n        function lastType() {\n            if (buffer.length) {\n                return buffer[buffer.length - 1].type;\n            }\n        }\n\n        function flush() {\n            if (lastType() === 'WhiteSpace') {\n                buffer.pop();\n            }\n\n            if (!buffer.length) {\n                buffer.unshift(\n                    {\n                        type: 'Number',\n                        loc: null,\n                        value: '0'\n                    },\n                    {\n                        type: 'WhiteSpace',\n                        value: ' '\n                    },\n                    {\n                        type: 'Number',\n                        loc: null,\n                        value: '0'\n                    }\n                );\n            }\n\n            newValue.push.apply(newValue, buffer);\n\n            buffer = [];\n        }\n\n        var newValue = [];\n        var buffer = [];\n\n        node.children.each(function(node) {\n            if (node.type === 'Operator' && node.value === ',') {\n                flush();\n                newValue.push(node);\n                return;\n            }\n\n            // remove defaults\n            if (node.type === 'Identifier') {\n                if (node.name === 'transparent' ||\n                    node.name === 'none' ||\n                    node.name === 'repeat' ||\n                    node.name === 'scroll') {\n                    return;\n                }\n            }\n\n            // don't add redundant spaces\n            if (node.type === 'WhiteSpace' && (!buffer.length || lastType() === 'WhiteSpace')) {\n                return;\n            }\n\n            buffer.push(node);\n        });\n\n        flush();\n        node.children = new List$1().fromArray(newValue);\n    };\n\n    function removeItemAndRedundantWhiteSpace(list, item) {\n        var prev = item.prev;\n        var next = item.next;\n\n        if (next !== null) {\n            if (next.data.type === 'WhiteSpace' && (prev === null || prev.data.type === 'WhiteSpace')) {\n                list.remove(next);\n            }\n        } else if (prev !== null && prev.data.type === 'WhiteSpace') {\n            list.remove(prev);\n        }\n\n        list.remove(item);\n    }\n\n    var border = function compressBorder(node) {\n        node.children.each(function(node, item, list) {\n            if (node.type === 'Identifier' && node.name.toLowerCase() === 'none') {\n                if (list.head === list.tail) {\n                    // replace `none` for zero when `none` is a single term\n                    item.data = {\n                        type: 'Number',\n                        loc: node.loc,\n                        value: '0'\n                    };\n                } else {\n                    removeItemAndRedundantWhiteSpace(list, item);\n                }\n            }\n        });\n    };\n\n    var resolveName = lib.property;\n    var handlers$1 = {\n        'font': font,\n        'font-weight': fontWeight,\n        'background': background,\n        'border': border,\n        'outline': border\n    };\n\n    var Value$1 = function compressValue(node) {\n        if (!this.declaration) {\n            return;\n        }\n\n        var property = resolveName(this.declaration.property);\n\n        if (handlers$1.hasOwnProperty(property.basename)) {\n            handlers$1[property.basename](node);\n        }\n    };\n\n    var OMIT_PLUSSIGN = /^(?:\\+|(-))?0*(\\d*)(?:\\.0*|(\\.\\d*?)0*)?$/;\n    var KEEP_PLUSSIGN = /^([\\+\\-])?0*(\\d*)(?:\\.0*|(\\.\\d*?)0*)?$/;\n    var unsafeToRemovePlusSignAfter = {\n        Dimension: true,\n        HexColor: true,\n        Identifier: true,\n        Number: true,\n        Raw: true,\n        UnicodeRange: true\n    };\n\n    function packNumber(value, item) {\n        // omit plus sign only if no prev or prev is safe type\n        var regexp = item && item.prev !== null && unsafeToRemovePlusSignAfter.hasOwnProperty(item.prev.data.type)\n            ? KEEP_PLUSSIGN\n            : OMIT_PLUSSIGN;\n\n        // 100 -> '100'\n        // 00100 -> '100'\n        // +100 -> '100' (only when safe, e.g. omitting plus sign for 1px+1px leads to single dimension instead of two)\n        // -100 -> '-100'\n        // 0.123 -> '.123'\n        // 0.12300 -> '.123'\n        // 0.0 -> ''\n        // 0 -> ''\n        // -0 -> '-'\n        value = String(value).replace(regexp, '$1$2$3');\n\n        if (value === '' || value === '-') {\n            value = '0';\n        }\n\n        return value;\n    }\n\n    var _Number$1 = function(node, item) {\n        node.value = packNumber(node.value, item);\n    };\n    var pack = packNumber;\n    _Number$1.pack = pack;\n\n    var packNumber$1 = _Number$1.pack;\n    var LENGTH_UNIT = {\n        // absolute length units\n        'px': true,\n        'mm': true,\n        'cm': true,\n        'in': true,\n        'pt': true,\n        'pc': true,\n\n        // relative length units\n        'em': true,\n        'ex': true,\n        'ch': true,\n        'rem': true,\n\n        // viewport-percentage lengths\n        'vh': true,\n        'vw': true,\n        'vmin': true,\n        'vmax': true,\n        'vm': true\n    };\n\n    var Dimension$1 = function compressDimension(node, item) {\n        var value = packNumber$1(node.value, item);\n\n        node.value = value;\n\n        if (value === '0' && this.declaration !== null && this.atrulePrelude === null) {\n            var unit = node.unit.toLowerCase();\n\n            // only length values can be compressed\n            if (!LENGTH_UNIT.hasOwnProperty(unit)) {\n                return;\n            }\n\n            // issue #362: shouldn't remove unit in -ms-flex since it breaks flex in IE10/11\n            // issue #200: shouldn't remove unit in flex since it breaks flex in IE10/11\n            if (this.declaration.property === '-ms-flex' ||\n                this.declaration.property === 'flex') {\n                return;\n            }\n\n            // issue #222: don't remove units inside calc\n            if (this.function && this.function.name === 'calc') {\n                return;\n            }\n\n            item.data = {\n                type: 'Number',\n                loc: node.loc,\n                value: value\n            };\n        }\n    };\n\n    var lexer$1 = lib.lexer;\n    var packNumber$2 = _Number$1.pack;\n    var blacklist = new Set([\n        // see https://github.com/jakubpawlowicz/clean-css/issues/957\n        'width',\n        'min-width',\n        'max-width',\n        'height',\n        'min-height',\n        'max-height',\n\n        // issue #410: Don\u2019t remove units in flex-basis value for (-ms-)flex shorthand\n        // issue #362: shouldn't remove unit in -ms-flex since it breaks flex in IE10/11\n        // issue #200: shouldn't remove unit in flex since it breaks flex in IE10/11\n        'flex',\n        '-ms-flex'\n    ]);\n\n    var Percentage$1 = function compressPercentage(node, item) {\n        node.value = packNumber$2(node.value, item);\n\n        if (node.value === '0' && this.declaration && !blacklist.has(this.declaration.property)) {\n            // try to convert a number\n            item.data = {\n                type: 'Number',\n                loc: node.loc,\n                value: node.value\n            };\n\n            // that's ok only when new value matches on length\n            if (!lexer$1.matchDeclaration(this.declaration).isType(item.data, 'length')) {\n                // otherwise rollback changes\n                item.data = node;\n            }\n        }\n    };\n\n    var _String$1 = function(node) {\n        var value = node.value;\n\n        // remove escaped newlines, i.e.\n        // .a { content: \"foo\\\n        // bar\"}\n        // ->\n        // .a { content: \"foobar\" }\n        value = value.replace(/\\\\(\\r\\n|\\r|\\n|\\f)/g, '');\n\n        node.value = value;\n    };\n\n    var UNICODE = '\\\\\\\\[0-9a-f]{1,6}(\\\\r\\\\n|[ \\\\n\\\\r\\\\t\\\\f])?';\n    var ESCAPE = '(' + UNICODE + '|\\\\\\\\[^\\\\n\\\\r\\\\f0-9a-fA-F])';\n    var NONPRINTABLE = '\\u0000\\u0008\\u000b\\u000e-\\u001f\\u007f';\n    var SAFE_URL = new RegExp('^(' + ESCAPE + '|[^\\\"\\'\\\\(\\\\)\\\\\\\\\\\\s' + NONPRINTABLE + '])*$', 'i');\n\n    var Url$1 = function(node) {\n        var value = node.value;\n\n        if (value.type !== 'String') {\n            return;\n        }\n\n        var quote = value.value[0];\n        var url = value.value.substr(1, value.value.length - 2);\n\n        // convert `\\\\` to `/`\n        url = url.replace(/\\\\\\\\/g, '/');\n\n        // remove quotes when safe\n        // https://www.w3.org/TR/css-syntax-3/#url-unquoted-diagram\n        if (SAFE_URL.test(url)) {\n            node.value = {\n                type: 'Raw',\n                loc: node.value.loc,\n                value: url\n            };\n        } else {\n            // use double quotes if string has no double quotes\n            // otherwise use original quotes\n            // TODO: make better quote type selection\n            node.value.value = url.indexOf('\"') === -1 ? '\"' + url + '\"' : quote + url + quote;\n        }\n    };\n\n    var lexer$2 = lib.lexer;\n    var packNumber$3 = _Number$1.pack;\n\n    // http://www.w3.org/TR/css3-color/#svg-color\n    var NAME_TO_HEX = {\n        'aliceblue': 'f0f8ff',\n        'antiquewhite': 'faebd7',\n        'aqua': '0ff',\n        'aquamarine': '7fffd4',\n        'azure': 'f0ffff',\n        'beige': 'f5f5dc',\n        'bisque': 'ffe4c4',\n        'black': '000',\n        'blanchedalmond': 'ffebcd',\n        'blue': '00f',\n        'blueviolet': '8a2be2',\n        'brown': 'a52a2a',\n        'burlywood': 'deb887',\n        'cadetblue': '5f9ea0',\n        'chartreuse': '7fff00',\n        'chocolate': 'd2691e',\n        'coral': 'ff7f50',\n        'cornflowerblue': '6495ed',\n        'cornsilk': 'fff8dc',\n        'crimson': 'dc143c',\n        'cyan': '0ff',\n        'darkblue': '00008b',\n        'darkcyan': '008b8b',\n        'darkgoldenrod': 'b8860b',\n        'darkgray': 'a9a9a9',\n        'darkgrey': 'a9a9a9',\n        'darkgreen': '006400',\n        'darkkhaki': 'bdb76b',\n        'darkmagenta': '8b008b',\n        'darkolivegreen': '556b2f',\n        'darkorange': 'ff8c00',\n        'darkorchid': '9932cc',\n        'darkred': '8b0000',\n        'darksalmon': 'e9967a',\n        'darkseagreen': '8fbc8f',\n        'darkslateblue': '483d8b',\n        'darkslategray': '2f4f4f',\n        'darkslategrey': '2f4f4f',\n        'darkturquoise': '00ced1',\n        'darkviolet': '9400d3',\n        'deeppink': 'ff1493',\n        'deepskyblue': '00bfff',\n        'dimgray': '696969',\n        'dimgrey': '696969',\n        'dodgerblue': '1e90ff',\n        'firebrick': 'b22222',\n        'floralwhite': 'fffaf0',\n        'forestgreen': '228b22',\n        'fuchsia': 'f0f',\n        'gainsboro': 'dcdcdc',\n        'ghostwhite': 'f8f8ff',\n        'gold': 'ffd700',\n        'goldenrod': 'daa520',\n        'gray': '808080',\n        'grey': '808080',\n        'green': '008000',\n        'greenyellow': 'adff2f',\n        'honeydew': 'f0fff0',\n        'hotpink': 'ff69b4',\n        'indianred': 'cd5c5c',\n        'indigo': '4b0082',\n        'ivory': 'fffff0',\n        'khaki': 'f0e68c',\n        'lavender': 'e6e6fa',\n        'lavenderblush': 'fff0f5',\n        'lawngreen': '7cfc00',\n        'lemonchiffon': 'fffacd',\n        'lightblue': 'add8e6',\n        'lightcoral': 'f08080',\n        'lightcyan': 'e0ffff',\n        'lightgoldenrodyellow': 'fafad2',\n        'lightgray': 'd3d3d3',\n        'lightgrey': 'd3d3d3',\n        'lightgreen': '90ee90',\n        'lightpink': 'ffb6c1',\n        'lightsalmon': 'ffa07a',\n        'lightseagreen': '20b2aa',\n        'lightskyblue': '87cefa',\n        'lightslategray': '789',\n        'lightslategrey': '789',\n        'lightsteelblue': 'b0c4de',\n        'lightyellow': 'ffffe0',\n        'lime': '0f0',\n        'limegreen': '32cd32',\n        'linen': 'faf0e6',\n        'magenta': 'f0f',\n        'maroon': '800000',\n        'mediumaquamarine': '66cdaa',\n        'mediumblue': '0000cd',\n        'mediumorchid': 'ba55d3',\n        'mediumpurple': '9370db',\n        'mediumseagreen': '3cb371',\n        'mediumslateblue': '7b68ee',\n        'mediumspringgreen': '00fa9a',\n        'mediumturquoise': '48d1cc',\n        'mediumvioletred': 'c71585',\n        'midnightblue': '191970',\n        'mintcream': 'f5fffa',\n        'mistyrose': 'ffe4e1',\n        'moccasin': 'ffe4b5',\n        'navajowhite': 'ffdead',\n        'navy': '000080',\n        'oldlace': 'fdf5e6',\n        'olive': '808000',\n        'olivedrab': '6b8e23',\n        'orange': 'ffa500',\n        'orangered': 'ff4500',\n        'orchid': 'da70d6',\n        'palegoldenrod': 'eee8aa',\n        'palegreen': '98fb98',\n        'paleturquoise': 'afeeee',\n        'palevioletred': 'db7093',\n        'papayawhip': 'ffefd5',\n        'peachpuff': 'ffdab9',\n        'peru': 'cd853f',\n        'pink': 'ffc0cb',\n        'plum': 'dda0dd',\n        'powderblue': 'b0e0e6',\n        'purple': '800080',\n        'rebeccapurple': '639',\n        'red': 'f00',\n        'rosybrown': 'bc8f8f',\n        'royalblue': '4169e1',\n        'saddlebrown': '8b4513',\n        'salmon': 'fa8072',\n        'sandybrown': 'f4a460',\n        'seagreen': '2e8b57',\n        'seashell': 'fff5ee',\n        'sienna': 'a0522d',\n        'silver': 'c0c0c0',\n        'skyblue': '87ceeb',\n        'slateblue': '6a5acd',\n        'slategray': '708090',\n        'slategrey': '708090',\n        'snow': 'fffafa',\n        'springgreen': '00ff7f',\n        'steelblue': '4682b4',\n        'tan': 'd2b48c',\n        'teal': '008080',\n        'thistle': 'd8bfd8',\n        'tomato': 'ff6347',\n        'turquoise': '40e0d0',\n        'violet': 'ee82ee',\n        'wheat': 'f5deb3',\n        'white': 'fff',\n        'whitesmoke': 'f5f5f5',\n        'yellow': 'ff0',\n        'yellowgreen': '9acd32'\n    };\n\n    var HEX_TO_NAME = {\n        '800000': 'maroon',\n        '800080': 'purple',\n        '808000': 'olive',\n        '808080': 'gray',\n        '00ffff': 'cyan',\n        'f0ffff': 'azure',\n        'f5f5dc': 'beige',\n        'ffe4c4': 'bisque',\n        '000000': 'black',\n        '0000ff': 'blue',\n        'a52a2a': 'brown',\n        'ff7f50': 'coral',\n        'ffd700': 'gold',\n        '008000': 'green',\n        '4b0082': 'indigo',\n        'fffff0': 'ivory',\n        'f0e68c': 'khaki',\n        '00ff00': 'lime',\n        'faf0e6': 'linen',\n        '000080': 'navy',\n        'ffa500': 'orange',\n        'da70d6': 'orchid',\n        'cd853f': 'peru',\n        'ffc0cb': 'pink',\n        'dda0dd': 'plum',\n        'f00': 'red',\n        'ff0000': 'red',\n        'fa8072': 'salmon',\n        'a0522d': 'sienna',\n        'c0c0c0': 'silver',\n        'fffafa': 'snow',\n        'd2b48c': 'tan',\n        '008080': 'teal',\n        'ff6347': 'tomato',\n        'ee82ee': 'violet',\n        'f5deb3': 'wheat',\n        'ffffff': 'white',\n        'ffff00': 'yellow'\n    };\n\n    function hueToRgb(p, q, t) {\n        if (t < 0) {\n            t += 1;\n        }\n        if (t > 1) {\n            t -= 1;\n        }\n        if (t < 1 / 6) {\n            return p + (q - p) * 6 * t;\n        }\n        if (t < 1 / 2) {\n            return q;\n        }\n        if (t < 2 / 3) {\n            return p + (q - p) * (2 / 3 - t) * 6;\n        }\n        return p;\n    }\n\n    function hslToRgb(h, s, l, a) {\n        var r;\n        var g;\n        var b;\n\n        if (s === 0) {\n            r = g = b = l; // achromatic\n        } else {\n            var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n            var p = 2 * l - q;\n\n            r = hueToRgb(p, q, h + 1 / 3);\n            g = hueToRgb(p, q, h);\n            b = hueToRgb(p, q, h - 1 / 3);\n        }\n\n        return [\n            Math.round(r * 255),\n            Math.round(g * 255),\n            Math.round(b * 255),\n            a\n        ];\n    }\n\n    function toHex(value) {\n        value = value.toString(16);\n        return value.length === 1 ? '0' + value : value;\n    }\n\n    function parseFunctionArgs(functionArgs, count, rgb) {\n        var cursor = functionArgs.head;\n        var args = [];\n        var wasValue = false;\n\n        while (cursor !== null) {\n            var node = cursor.data;\n            var type = node.type;\n\n            switch (type) {\n                case 'Number':\n                case 'Percentage':\n                    if (wasValue) {\n                        return;\n                    }\n\n                    wasValue = true;\n                    args.push({\n                        type: type,\n                        value: Number(node.value)\n                    });\n                    break;\n\n                case 'Operator':\n                    if (node.value === ',') {\n                        if (!wasValue) {\n                            return;\n                        }\n                        wasValue = false;\n                    } else if (wasValue || node.value !== '+') {\n                        return;\n                    }\n                    break;\n\n                default:\n                    // something we couldn't understand\n                    return;\n            }\n\n            cursor = cursor.next;\n        }\n\n        if (args.length !== count) {\n            // invalid arguments count\n            // TODO: remove those tokens\n            return;\n        }\n\n        if (args.length === 4) {\n            if (args[3].type !== 'Number') {\n                // 4th argument should be a number\n                // TODO: remove those tokens\n                return;\n            }\n\n            args[3].type = 'Alpha';\n        }\n\n        if (rgb) {\n            if (args[0].type !== args[1].type || args[0].type !== args[2].type) {\n                // invalid color, numbers and percentage shouldn't be mixed\n                // TODO: remove those tokens\n                return;\n            }\n        } else {\n            if (args[0].type !== 'Number' ||\n                args[1].type !== 'Percentage' ||\n                args[2].type !== 'Percentage') {\n                // invalid color, for hsl values should be: number, percentage, percentage\n                // TODO: remove those tokens\n                return;\n            }\n\n            args[0].type = 'Angle';\n        }\n\n        return args.map(function(arg) {\n            var value = Math.max(0, arg.value);\n\n            switch (arg.type) {\n                case 'Number':\n                    // fit value to [0..255] range\n                    value = Math.min(value, 255);\n                    break;\n\n                case 'Percentage':\n                    // convert 0..100% to value in [0..255] range\n                    value = Math.min(value, 100) / 100;\n\n                    if (!rgb) {\n                        return value;\n                    }\n\n                    value = 255 * value;\n                    break;\n\n                case 'Angle':\n                    // fit value to (-360..360) range\n                    return (((value % 360) + 360) % 360) / 360;\n\n                case 'Alpha':\n                    // fit value to [0..1] range\n                    return Math.min(value, 1);\n            }\n\n            return Math.round(value);\n        });\n    }\n\n    function compressFunction(node, item, list) {\n        var functionName = node.name;\n        var args;\n\n        if (functionName === 'rgba' || functionName === 'hsla') {\n            args = parseFunctionArgs(node.children, 4, functionName === 'rgba');\n\n            if (!args) {\n                // something went wrong\n                return;\n            }\n\n            if (functionName === 'hsla') {\n                args = hslToRgb.apply(null, args);\n                node.name = 'rgba';\n            }\n\n            if (args[3] === 0) {\n                // try to replace `rgba(x, x, x, 0)` to `transparent`\n                // always replace `rgba(0, 0, 0, 0)` to `transparent`\n                // otherwise avoid replacement in gradients since it may break color transition\n                // http://stackoverflow.com/questions/11829410/css3-gradient-rendering-issues-from-transparent-to-white\n                var scopeFunctionName = this.function && this.function.name;\n                if ((args[0] === 0 && args[1] === 0 && args[2] === 0) ||\n                    !/^(?:to|from|color-stop)$|gradient$/i.test(scopeFunctionName)) {\n\n                    item.data = {\n                        type: 'Identifier',\n                        loc: node.loc,\n                        name: 'transparent'\n                    };\n\n                    return;\n                }\n            }\n\n            if (args[3] !== 1) {\n                // replace argument values for normalized/interpolated\n                node.children.each(function(node, item, list) {\n                    if (node.type === 'Operator') {\n                        if (node.value !== ',') {\n                            list.remove(item);\n                        }\n                        return;\n                    }\n\n                    item.data = {\n                        type: 'Number',\n                        loc: node.loc,\n                        value: packNumber$3(args.shift(), null)\n                    };\n                });\n\n                return;\n            }\n\n            // otherwise convert to rgb, i.e. rgba(255, 0, 0, 1) -> rgb(255, 0, 0)\n            functionName = 'rgb';\n        }\n\n        if (functionName === 'hsl') {\n            args = args || parseFunctionArgs(node.children, 3, false);\n\n            if (!args) {\n                // something went wrong\n                return;\n            }\n\n            // convert to rgb\n            args = hslToRgb.apply(null, args);\n            functionName = 'rgb';\n        }\n\n        if (functionName === 'rgb') {\n            args = args || parseFunctionArgs(node.children, 3, true);\n\n            if (!args) {\n                // something went wrong\n                return;\n            }\n\n            // check if color is not at the end and not followed by space\n            var next = item.next;\n            if (next && next.data.type !== 'WhiteSpace') {\n                list.insert(list.createItem({\n                    type: 'WhiteSpace',\n                    value: ' '\n                }), next);\n            }\n\n            item.data = {\n                type: 'HexColor',\n                loc: node.loc,\n                value: toHex(args[0]) + toHex(args[1]) + toHex(args[2])\n            };\n\n            compressHex(item.data, item);\n        }\n    }\n\n    function compressIdent(node, item) {\n        if (this.declaration === null) {\n            return;\n        }\n\n        var color = node.name.toLowerCase();\n\n        if (NAME_TO_HEX.hasOwnProperty(color) &&\n            lexer$2.matchDeclaration(this.declaration).isType(node, 'color')) {\n            var hex = NAME_TO_HEX[color];\n\n            if (hex.length + 1 <= color.length) {\n                // replace for shorter hex value\n                item.data = {\n                    type: 'HexColor',\n                    loc: node.loc,\n                    value: hex\n                };\n            } else {\n                // special case for consistent colors\n                if (color === 'grey') {\n                    color = 'gray';\n                }\n\n                // just replace value for lower cased name\n                node.name = color;\n            }\n        }\n    }\n\n    function compressHex(node, item) {\n        var color = node.value.toLowerCase();\n\n        // #112233 -> #123\n        if (color.length === 6 &&\n            color[0] === color[1] &&\n            color[2] === color[3] &&\n            color[4] === color[5]) {\n            color = color[0] + color[2] + color[4];\n        }\n\n        if (HEX_TO_NAME[color]) {\n            item.data = {\n                type: 'Identifier',\n                loc: node.loc,\n                name: HEX_TO_NAME[color]\n            };\n        } else {\n            node.value = color;\n        }\n    }\n\n    var color = {\n        compressFunction: compressFunction,\n        compressIdent: compressIdent,\n        compressHex: compressHex\n    };\n\n    var walk$3 = lib.walk;\n    var handlers$2 = {\n        Atrule: Atrule$2,\n        AttributeSelector: AttributeSelector$1,\n        Value: Value$1,\n        Dimension: Dimension$1,\n        Percentage: Percentage$1,\n        Number: _Number$1,\n        String: _String$1,\n        Url: Url$1,\n        HexColor: color.compressHex,\n        Identifier: color.compressIdent,\n        Function: color.compressFunction\n    };\n\n    var replace = function(ast) {\n        walk$3(ast, {\n            leave: function(node, item, list) {\n                if (handlers$2.hasOwnProperty(node.type)) {\n                    handlers$2[node.type].call(this, node, item, list);\n                }\n            }\n        });\n    };\n\n    var generate$1 = lib.generate;\n\n    function Index() {\n        this.seed = 0;\n        this.map = Object.create(null);\n    }\n\n    Index.prototype.resolve = function(str) {\n        var index = this.map[str];\n\n        if (!index) {\n            index = ++this.seed;\n            this.map[str] = index;\n        }\n\n        return index;\n    };\n\n    var createDeclarationIndexer = function createDeclarationIndexer() {\n        var ids = new Index();\n\n        return function markDeclaration(node) {\n            var id = generate$1(node);\n\n            node.id = ids.resolve(id);\n            node.length = id.length;\n            node.fingerprint = null;\n\n            return node;\n        };\n    };\n\n    var specificity = function specificity(simpleSelector) {\n        var A = 0;\n        var B = 0;\n        var C = 0;\n\n        simpleSelector.children.each(function walk(node) {\n            switch (node.type) {\n                case 'SelectorList':\n                case 'Selector':\n                    node.children.each(walk);\n                    break;\n\n                case 'IdSelector':\n                    A++;\n                    break;\n\n                case 'ClassSelector':\n                case 'AttributeSelector':\n                    B++;\n                    break;\n\n                case 'PseudoClassSelector':\n                    switch (node.name.toLowerCase()) {\n                        case 'not':\n                            node.children.each(walk);\n                            break;\n\n                        case 'before':\n                        case 'after':\n                        case 'first-line':\n                        case 'first-letter':\n                            C++;\n                            break;\n\n                        // TODO: support for :nth-*(.. of <SelectorList>), :matches(), :has()\n                        default:\n                            B++;\n                    }\n                    break;\n\n                case 'PseudoElementSelector':\n                    C++;\n                    break;\n\n                case 'TypeSelector':\n                    // ignore universal selector\n                    if (node.name.charAt(node.name.length - 1) !== '*') {\n                        C++;\n                    }\n                    break;\n\n            }\n        });\n\n        return [A, B, C];\n    };\n\n    var generate$2 = lib.generate;\n\n\n    var nonFreezePseudoElements = {\n        'first-letter': true,\n        'first-line': true,\n        'after': true,\n        'before': true\n    };\n    var nonFreezePseudoClasses = {\n        'link': true,\n        'visited': true,\n        'hover': true,\n        'active': true,\n        'first-letter': true,\n        'first-line': true,\n        'after': true,\n        'before': true\n    };\n\n    var processSelector = function freeze(node, usageData) {\n        var pseudos = Object.create(null);\n        var hasPseudo = false;\n\n        node.prelude.children.each(function(simpleSelector) {\n            var tagName = '*';\n            var scope = 0;\n\n            simpleSelector.children.each(function(node) {\n                switch (node.type) {\n                    case 'ClassSelector':\n                        if (usageData && usageData.scopes) {\n                            var classScope = usageData.scopes[node.name] || 0;\n\n                            if (scope !== 0 && classScope !== scope) {\n                                throw new Error('Selector can\\'t has classes from different scopes: ' + generate$2(simpleSelector));\n                            }\n\n                            scope = classScope;\n                        }\n                        break;\n\n                    case 'PseudoClassSelector':\n                        var name = node.name.toLowerCase();\n\n                        if (!nonFreezePseudoClasses.hasOwnProperty(name)) {\n                            pseudos[name] = true;\n                            hasPseudo = true;\n                        }\n                        break;\n\n                    case 'PseudoElementSelector':\n                        var name = node.name.toLowerCase();\n\n                        if (!nonFreezePseudoElements.hasOwnProperty(name)) {\n                            pseudos[name] = true;\n                            hasPseudo = true;\n                        }\n                        break;\n\n                    case 'TypeSelector':\n                        tagName = node.name.toLowerCase();\n                        break;\n\n                    case 'AttributeSelector':\n                        if (node.flags) {\n                            pseudos['[' + node.flags.toLowerCase() + ']'] = true;\n                            hasPseudo = true;\n                        }\n                        break;\n\n                    case 'WhiteSpace':\n                    case 'Combinator':\n                        tagName = '*';\n                        break;\n                }\n            });\n\n            simpleSelector.compareMarker = specificity(simpleSelector).toString();\n            simpleSelector.id = null; // pre-init property to avoid multiple hidden class\n            simpleSelector.id = generate$2(simpleSelector);\n\n            if (scope) {\n                simpleSelector.compareMarker += ':' + scope;\n            }\n\n            if (tagName !== '*') {\n                simpleSelector.compareMarker += ',' + tagName;\n            }\n        });\n\n        // add property to all rule nodes to avoid multiple hidden class\n        node.pseudoSignature = hasPseudo && Object.keys(pseudos).sort().join(',');\n    };\n\n    var resolveKeyword$2 = lib.keyword;\n    var walk$4 = lib.walk;\n    var generate$3 = lib.generate;\n\n\n\n    var prepare = function prepare(ast, options) {\n        var markDeclaration = createDeclarationIndexer();\n\n        walk$4(ast, {\n            visit: 'Rule',\n            enter: function processRule(node) {\n                node.block.children.each(markDeclaration);\n                processSelector(node, options.usage);\n            }\n        });\n\n        walk$4(ast, {\n            visit: 'Atrule',\n            enter: function(node) {\n                if (node.prelude) {\n                    node.prelude.id = null; // pre-init property to avoid multiple hidden class for generate\n                    node.prelude.id = generate$3(node.prelude);\n                }\n\n                // compare keyframe selectors by its values\n                // NOTE: still no clarification about problems with keyframes selector grouping (issue #197)\n                if (resolveKeyword$2(node.name).basename === 'keyframes') {\n                    node.block.avoidRulesMerge = true;  /* probably we don't need to prevent those merges for @keyframes\n                                                           TODO: need to be checked */\n                    node.block.children.each(function(rule) {\n                        rule.prelude.children.each(function(simpleselector) {\n                            simpleselector.compareMarker = simpleselector.id;\n                        });\n                    });\n                }\n            }\n        });\n\n        return {\n            declaration: markDeclaration\n        };\n    };\n\n    var List$2 = lib.List;\n    var resolveKeyword$3 = lib.keyword;\n    var hasOwnProperty$8 = Object.prototype.hasOwnProperty;\n    var walk$5 = lib.walk;\n\n    function addRuleToMap(map, item, list, single) {\n        var node = item.data;\n        var name = resolveKeyword$3(node.name).basename;\n        var id = node.name.toLowerCase() + '/' + (node.prelude ? node.prelude.id : null);\n\n        if (!hasOwnProperty$8.call(map, name)) {\n            map[name] = Object.create(null);\n        }\n\n        if (single) {\n            delete map[name][id];\n        }\n\n        if (!hasOwnProperty$8.call(map[name], id)) {\n            map[name][id] = new List$2();\n        }\n\n        map[name][id].append(list.remove(item));\n    }\n\n    function relocateAtrules(ast, options) {\n        var collected = Object.create(null);\n        var topInjectPoint = null;\n\n        ast.children.each(function(node, item, list) {\n            if (node.type === 'Atrule') {\n                var name = resolveKeyword$3(node.name).basename;\n\n                switch (name) {\n                    case 'keyframes':\n                        addRuleToMap(collected, item, list, true);\n                        return;\n\n                    case 'media':\n                        if (options.forceMediaMerge) {\n                            addRuleToMap(collected, item, list, false);\n                            return;\n                        }\n                        break;\n                }\n\n                if (topInjectPoint === null &&\n                    name !== 'charset' &&\n                    name !== 'import') {\n                    topInjectPoint = item;\n                }\n            } else {\n                if (topInjectPoint === null) {\n                    topInjectPoint = item;\n                }\n            }\n        });\n\n        for (var atrule in collected) {\n            for (var id in collected[atrule]) {\n                ast.children.insertList(\n                    collected[atrule][id],\n                    atrule === 'media' ? null : topInjectPoint\n                );\n            }\n        }\n    }\n    function isMediaRule(node) {\n        return node.type === 'Atrule' && node.name === 'media';\n    }\n\n    function processAtrule(node, item, list) {\n        if (!isMediaRule(node)) {\n            return;\n        }\n\n        var prev = item.prev && item.prev.data;\n\n        if (!prev || !isMediaRule(prev)) {\n            return;\n        }\n\n        // merge @media with same query\n        if (node.prelude &&\n            prev.prelude &&\n            node.prelude.id === prev.prelude.id) {\n            prev.block.children.appendList(node.block.children);\n            list.remove(item);\n\n            // TODO: use it when we can refer to several points in source\n            // prev.loc = {\n            //     primary: prev.loc,\n            //     merged: node.loc\n            // };\n        }\n    }\n\n    var _1MergeAtrule = function rejoinAtrule(ast, options) {\n        relocateAtrules(ast, options);\n\n        walk$5(ast, {\n            visit: 'Atrule',\n            reverse: true,\n            enter: processAtrule\n        });\n    };\n\n    var hasOwnProperty$9 = Object.prototype.hasOwnProperty;\n\n    function isEqualSelectors(a, b) {\n        var cursor1 = a.head;\n        var cursor2 = b.head;\n\n        while (cursor1 !== null && cursor2 !== null && cursor1.data.id === cursor2.data.id) {\n            cursor1 = cursor1.next;\n            cursor2 = cursor2.next;\n        }\n\n        return cursor1 === null && cursor2 === null;\n    }\n\n    function isEqualDeclarations(a, b) {\n        var cursor1 = a.head;\n        var cursor2 = b.head;\n\n        while (cursor1 !== null && cursor2 !== null && cursor1.data.id === cursor2.data.id) {\n            cursor1 = cursor1.next;\n            cursor2 = cursor2.next;\n        }\n\n        return cursor1 === null && cursor2 === null;\n    }\n\n    function compareDeclarations(declarations1, declarations2) {\n        var result = {\n            eq: [],\n            ne1: [],\n            ne2: [],\n            ne2overrided: []\n        };\n\n        var fingerprints = Object.create(null);\n        var declarations2hash = Object.create(null);\n\n        for (var cursor = declarations2.head; cursor; cursor = cursor.next)  {\n            declarations2hash[cursor.data.id] = true;\n        }\n\n        for (var cursor = declarations1.head; cursor; cursor = cursor.next)  {\n            var data = cursor.data;\n\n            if (data.fingerprint) {\n                fingerprints[data.fingerprint] = data.important;\n            }\n\n            if (declarations2hash[data.id]) {\n                declarations2hash[data.id] = false;\n                result.eq.push(data);\n            } else {\n                result.ne1.push(data);\n            }\n        }\n\n        for (var cursor = declarations2.head; cursor; cursor = cursor.next)  {\n            var data = cursor.data;\n\n            if (declarations2hash[data.id]) {\n                // when declarations1 has an overriding declaration, this is not a difference\n                // unless no !important is used on prev and !important is used on the following\n                if (!hasOwnProperty$9.call(fingerprints, data.fingerprint) ||\n                    (!fingerprints[data.fingerprint] && data.important)) {\n                    result.ne2.push(data);\n                }\n\n                result.ne2overrided.push(data);\n            }\n        }\n\n        return result;\n    }\n\n    function addSelectors(dest, source) {\n        source.each(function(sourceData) {\n            var newStr = sourceData.id;\n            var cursor = dest.head;\n\n            while (cursor) {\n                var nextStr = cursor.data.id;\n\n                if (nextStr === newStr) {\n                    return;\n                }\n\n                if (nextStr > newStr) {\n                    break;\n                }\n\n                cursor = cursor.next;\n            }\n\n            dest.insert(dest.createItem(sourceData), cursor);\n        });\n\n        return dest;\n    }\n\n    // check if simpleselectors has no equal specificity and element selector\n    function hasSimilarSelectors(selectors1, selectors2) {\n        var cursor1 = selectors1.head;\n\n        while (cursor1 !== null) {\n            var cursor2 = selectors2.head;\n\n            while (cursor2 !== null) {\n                if (cursor1.data.compareMarker === cursor2.data.compareMarker) {\n                    return true;\n                }\n\n                cursor2 = cursor2.next;\n            }\n\n            cursor1 = cursor1.next;\n        }\n\n        return false;\n    }\n\n    // test node can't to be skipped\n    function unsafeToSkipNode(node) {\n        switch (node.type) {\n            case 'Rule':\n                // unsafe skip ruleset with selector similarities\n                return hasSimilarSelectors(node.prelude.children, this);\n\n            case 'Atrule':\n                // can skip at-rules with blocks\n                if (node.block) {\n                    // unsafe skip at-rule if block contains something unsafe to skip\n                    return node.block.children.some(unsafeToSkipNode, this);\n                }\n                break;\n\n            case 'Declaration':\n                return false;\n        }\n\n        // unsafe by default\n        return true;\n    }\n\n    var utils$2 = {\n        isEqualSelectors: isEqualSelectors,\n        isEqualDeclarations: isEqualDeclarations,\n        compareDeclarations: compareDeclarations,\n        addSelectors: addSelectors,\n        hasSimilarSelectors: hasSimilarSelectors,\n        unsafeToSkipNode: unsafeToSkipNode\n    };\n\n    var walk$6 = lib.walk;\n\n\n    function processRule(node, item, list) {\n        var selectors = node.prelude.children;\n        var declarations = node.block.children;\n\n        list.prevUntil(item.prev, function(prev) {\n            // skip non-ruleset node if safe\n            if (prev.type !== 'Rule') {\n                return utils$2.unsafeToSkipNode.call(selectors, prev);\n            }\n\n            var prevSelectors = prev.prelude.children;\n            var prevDeclarations = prev.block.children;\n\n            // try to join rulesets with equal pseudo signature\n            if (node.pseudoSignature === prev.pseudoSignature) {\n                // try to join by selectors\n                if (utils$2.isEqualSelectors(prevSelectors, selectors)) {\n                    prevDeclarations.appendList(declarations);\n                    list.remove(item);\n                    return true;\n                }\n\n                // try to join by declarations\n                if (utils$2.isEqualDeclarations(declarations, prevDeclarations)) {\n                    utils$2.addSelectors(prevSelectors, selectors);\n                    list.remove(item);\n                    return true;\n                }\n            }\n\n            // go to prev ruleset if has no selector similarities\n            return utils$2.hasSimilarSelectors(selectors, prevSelectors);\n        });\n    }\n\n    // NOTE: direction should be left to right, since rulesets merge to left\n    // ruleset. When direction right to left unmerged rulesets may prevent lookup\n    // TODO: remove initial merge\n    var _2InitialMergeRuleset = function initialMergeRule(ast) {\n        walk$6(ast, {\n            visit: 'Rule',\n            enter: processRule\n        });\n    };\n\n    var List$3 = lib.List;\n    var walk$7 = lib.walk;\n\n    function processRule$1(node, item, list) {\n        var selectors = node.prelude.children;\n\n        // generate new rule sets:\n        // .a, .b { color: red; }\n        // ->\n        // .a { color: red; }\n        // .b { color: red; }\n\n        // while there are more than 1 simple selector split for rulesets\n        while (selectors.head !== selectors.tail) {\n            var newSelectors = new List$3();\n            newSelectors.insert(selectors.remove(selectors.head));\n\n            list.insert(list.createItem({\n                type: 'Rule',\n                loc: node.loc,\n                prelude: {\n                    type: 'SelectorList',\n                    loc: node.prelude.loc,\n                    children: newSelectors\n                },\n                block: {\n                    type: 'Block',\n                    loc: node.block.loc,\n                    children: node.block.children.copy()\n                },\n                pseudoSignature: node.pseudoSignature\n            }), item);\n        }\n    }\n\n    var _3DisjoinRuleset = function disjoinRule(ast) {\n        walk$7(ast, {\n            visit: 'Rule',\n            reverse: true,\n            enter: processRule$1\n        });\n    };\n\n    var List$4 = lib.List;\n    var generate$4 = lib.generate;\n    var walk$8 = lib.walk;\n\n    var REPLACE = 1;\n    var REMOVE = 2;\n    var TOP = 0;\n    var RIGHT = 1;\n    var BOTTOM = 2;\n    var LEFT = 3;\n    var SIDES = ['top', 'right', 'bottom', 'left'];\n    var SIDE = {\n        'margin-top': 'top',\n        'margin-right': 'right',\n        'margin-bottom': 'bottom',\n        'margin-left': 'left',\n\n        'padding-top': 'top',\n        'padding-right': 'right',\n        'padding-bottom': 'bottom',\n        'padding-left': 'left',\n\n        'border-top-color': 'top',\n        'border-right-color': 'right',\n        'border-bottom-color': 'bottom',\n        'border-left-color': 'left',\n        'border-top-width': 'top',\n        'border-right-width': 'right',\n        'border-bottom-width': 'bottom',\n        'border-left-width': 'left',\n        'border-top-style': 'top',\n        'border-right-style': 'right',\n        'border-bottom-style': 'bottom',\n        'border-left-style': 'left'\n    };\n    var MAIN_PROPERTY = {\n        'margin': 'margin',\n        'margin-top': 'margin',\n        'margin-right': 'margin',\n        'margin-bottom': 'margin',\n        'margin-left': 'margin',\n\n        'padding': 'padding',\n        'padding-top': 'padding',\n        'padding-right': 'padding',\n        'padding-bottom': 'padding',\n        'padding-left': 'padding',\n\n        'border-color': 'border-color',\n        'border-top-color': 'border-color',\n        'border-right-color': 'border-color',\n        'border-bottom-color': 'border-color',\n        'border-left-color': 'border-color',\n        'border-width': 'border-width',\n        'border-top-width': 'border-width',\n        'border-right-width': 'border-width',\n        'border-bottom-width': 'border-width',\n        'border-left-width': 'border-width',\n        'border-style': 'border-style',\n        'border-top-style': 'border-style',\n        'border-right-style': 'border-style',\n        'border-bottom-style': 'border-style',\n        'border-left-style': 'border-style'\n    };\n\n    function TRBL(name) {\n        this.name = name;\n        this.loc = null;\n        this.iehack = undefined;\n        this.sides = {\n            'top': null,\n            'right': null,\n            'bottom': null,\n            'left': null\n        };\n    }\n\n    TRBL.prototype.getValueSequence = function(declaration, count) {\n        var values = [];\n        var iehack = '';\n        var hasBadValues = declaration.value.children.some(function(child) {\n            var special = false;\n\n            switch (child.type) {\n                case 'Identifier':\n                    switch (child.name) {\n                        case '\\\\0':\n                        case '\\\\9':\n                            iehack = child.name;\n                            return;\n\n                        case 'inherit':\n                        case 'initial':\n                        case 'unset':\n                        case 'revert':\n                            special = child.name;\n                            break;\n                    }\n                    break;\n\n                case 'Dimension':\n                    switch (child.unit) {\n                        // is not supported until IE11\n                        case 'rem':\n\n                        // v* units is too buggy across browsers and better\n                        // don't merge values with those units\n                        case 'vw':\n                        case 'vh':\n                        case 'vmin':\n                        case 'vmax':\n                        case 'vm': // IE9 supporting \"vm\" instead of \"vmin\".\n                            special = child.unit;\n                            break;\n                    }\n                    break;\n\n                case 'HexColor': // color\n                case 'Number':\n                case 'Percentage':\n                    break;\n\n                case 'Function':\n                    special = child.name;\n                    break;\n\n                case 'WhiteSpace':\n                    return false; // ignore space\n\n                default:\n                    return true;  // bad value\n            }\n\n            values.push({\n                node: child,\n                special: special,\n                important: declaration.important\n            });\n        });\n\n        if (hasBadValues || values.length > count) {\n            return false;\n        }\n\n        if (typeof this.iehack === 'string' && this.iehack !== iehack) {\n            return false;\n        }\n\n        this.iehack = iehack; // move outside\n\n        return values;\n    };\n\n    TRBL.prototype.canOverride = function(side, value) {\n        var currentValue = this.sides[side];\n\n        return !currentValue || (value.important && !currentValue.important);\n    };\n\n    TRBL.prototype.add = function(name, declaration) {\n        function attemptToAdd() {\n            var sides = this.sides;\n            var side = SIDE[name];\n\n            if (side) {\n                if (side in sides === false) {\n                    return false;\n                }\n\n                var values = this.getValueSequence(declaration, 1);\n\n                if (!values || !values.length) {\n                    return false;\n                }\n\n                // can mix only if specials are equal\n                for (var key in sides) {\n                    if (sides[key] !== null && sides[key].special !== values[0].special) {\n                        return false;\n                    }\n                }\n\n                if (!this.canOverride(side, values[0])) {\n                    return true;\n                }\n\n                sides[side] = values[0];\n                return true;\n            } else if (name === this.name) {\n                var values = this.getValueSequence(declaration, 4);\n\n                if (!values || !values.length) {\n                    return false;\n                }\n\n                switch (values.length) {\n                    case 1:\n                        values[RIGHT] = values[TOP];\n                        values[BOTTOM] = values[TOP];\n                        values[LEFT] = values[TOP];\n                        break;\n\n                    case 2:\n                        values[BOTTOM] = values[TOP];\n                        values[LEFT] = values[RIGHT];\n                        break;\n\n                    case 3:\n                        values[LEFT] = values[RIGHT];\n                        break;\n                }\n\n                // can mix only if specials are equal\n                for (var i = 0; i < 4; i++) {\n                    for (var key in sides) {\n                        if (sides[key] !== null && sides[key].special !== values[i].special) {\n                            return false;\n                        }\n                    }\n                }\n\n                for (var i = 0; i < 4; i++) {\n                    if (this.canOverride(SIDES[i], values[i])) {\n                        sides[SIDES[i]] = values[i];\n                    }\n                }\n\n                return true;\n            }\n        }\n\n        if (!attemptToAdd.call(this)) {\n            return false;\n        }\n\n        // TODO: use it when we can refer to several points in source\n        // if (this.loc) {\n        //     this.loc = {\n        //         primary: this.loc,\n        //         merged: declaration.loc\n        //     };\n        // } else {\n        //     this.loc = declaration.loc;\n        // }\n        if (!this.loc) {\n            this.loc = declaration.loc;\n        }\n\n        return true;\n    };\n\n    TRBL.prototype.isOkToMinimize = function() {\n        var top = this.sides.top;\n        var right = this.sides.right;\n        var bottom = this.sides.bottom;\n        var left = this.sides.left;\n\n        if (top && right && bottom && left) {\n            var important =\n                top.important +\n                right.important +\n                bottom.important +\n                left.important;\n\n            return important === 0 || important === 4;\n        }\n\n        return false;\n    };\n\n    TRBL.prototype.getValue = function() {\n        var result = new List$4();\n        var sides = this.sides;\n        var values = [\n            sides.top,\n            sides.right,\n            sides.bottom,\n            sides.left\n        ];\n        var stringValues = [\n            generate$4(sides.top.node),\n            generate$4(sides.right.node),\n            generate$4(sides.bottom.node),\n            generate$4(sides.left.node)\n        ];\n\n        if (stringValues[LEFT] === stringValues[RIGHT]) {\n            values.pop();\n            if (stringValues[BOTTOM] === stringValues[TOP]) {\n                values.pop();\n                if (stringValues[RIGHT] === stringValues[TOP]) {\n                    values.pop();\n                }\n            }\n        }\n\n        for (var i = 0; i < values.length; i++) {\n            if (i) {\n                result.appendData({ type: 'WhiteSpace', value: ' ' });\n            }\n\n            result.appendData(values[i].node);\n        }\n\n        if (this.iehack) {\n            result.appendData({ type: 'WhiteSpace', value: ' ' });\n            result.appendData({\n                type: 'Identifier',\n                loc: null,\n                name: this.iehack\n            });\n        }\n\n        return {\n            type: 'Value',\n            loc: null,\n            children: result\n        };\n    };\n\n    TRBL.prototype.getDeclaration = function() {\n        return {\n            type: 'Declaration',\n            loc: this.loc,\n            important: this.sides.top.important,\n            property: this.name,\n            value: this.getValue()\n        };\n    };\n\n    function processRule$2(rule, shorts, shortDeclarations, lastShortSelector) {\n        var declarations = rule.block.children;\n        var selector = rule.prelude.children.first().id;\n\n        rule.block.children.eachRight(function(declaration, item) {\n            var property = declaration.property;\n\n            if (!MAIN_PROPERTY.hasOwnProperty(property)) {\n                return;\n            }\n\n            var key = MAIN_PROPERTY[property];\n            var shorthand;\n            var operation;\n\n            if (!lastShortSelector || selector === lastShortSelector) {\n                if (key in shorts) {\n                    operation = REMOVE;\n                    shorthand = shorts[key];\n                }\n            }\n\n            if (!shorthand || !shorthand.add(property, declaration)) {\n                operation = REPLACE;\n                shorthand = new TRBL(key);\n\n                // if can't parse value ignore it and break shorthand children\n                if (!shorthand.add(property, declaration)) {\n                    lastShortSelector = null;\n                    return;\n                }\n            }\n\n            shorts[key] = shorthand;\n            shortDeclarations.push({\n                operation: operation,\n                block: declarations,\n                item: item,\n                shorthand: shorthand\n            });\n\n            lastShortSelector = selector;\n        });\n\n        return lastShortSelector;\n    }\n\n    function processShorthands(shortDeclarations, markDeclaration) {\n        shortDeclarations.forEach(function(item) {\n            var shorthand = item.shorthand;\n\n            if (!shorthand.isOkToMinimize()) {\n                return;\n            }\n\n            if (item.operation === REPLACE) {\n                item.item.data = markDeclaration(shorthand.getDeclaration());\n            } else {\n                item.block.remove(item.item);\n            }\n        });\n    }\n\n    var _4RestructShorthand = function restructBlock(ast, indexer) {\n        var stylesheetMap = {};\n        var shortDeclarations = [];\n\n        walk$8(ast, {\n            visit: 'Rule',\n            reverse: true,\n            enter: function(node) {\n                var stylesheet = this.block || this.stylesheet;\n                var ruleId = (node.pseudoSignature || '') + '|' + node.prelude.children.first().id;\n                var ruleMap;\n                var shorts;\n\n                if (!stylesheetMap.hasOwnProperty(stylesheet.id)) {\n                    ruleMap = {\n                        lastShortSelector: null\n                    };\n                    stylesheetMap[stylesheet.id] = ruleMap;\n                } else {\n                    ruleMap = stylesheetMap[stylesheet.id];\n                }\n\n                if (ruleMap.hasOwnProperty(ruleId)) {\n                    shorts = ruleMap[ruleId];\n                } else {\n                    shorts = {};\n                    ruleMap[ruleId] = shorts;\n                }\n\n                ruleMap.lastShortSelector = processRule$2.call(this, node, shorts, shortDeclarations, ruleMap.lastShortSelector);\n            }\n        });\n\n        processShorthands(shortDeclarations, indexer.declaration);\n    };\n\n    var resolveProperty = lib.property;\n    var resolveKeyword$4 = lib.keyword;\n    var walk$9 = lib.walk;\n    var generate$5 = lib.generate;\n    var fingerprintId = 1;\n    var dontRestructure = {\n        'src': 1 // https://github.com/afelix/csso/issues/50\n    };\n\n    var DONT_MIX_VALUE = {\n        // https://developer.mozilla.org/en-US/docs/Web/CSS/display#Browser_compatibility\n        'display': /table|ruby|flex|-(flex)?box$|grid|contents|run-in/i,\n        // https://developer.mozilla.org/en/docs/Web/CSS/text-align\n        'text-align': /^(start|end|match-parent|justify-all)$/i\n    };\n\n    var CURSOR_SAFE_VALUE = [\n        'auto', 'crosshair', 'default', 'move', 'text', 'wait', 'help',\n        'n-resize', 'e-resize', 's-resize', 'w-resize',\n        'ne-resize', 'nw-resize', 'se-resize', 'sw-resize',\n        'pointer', 'progress', 'not-allowed', 'no-drop', 'vertical-text', 'all-scroll',\n        'col-resize', 'row-resize'\n    ];\n\n    var POSITION_SAFE_VALUE = [\n        'static', 'relative', 'absolute', 'fixed'\n    ];\n\n    var NEEDLESS_TABLE = {\n        'border-width': ['border'],\n        'border-style': ['border'],\n        'border-color': ['border'],\n        'border-top': ['border'],\n        'border-right': ['border'],\n        'border-bottom': ['border'],\n        'border-left': ['border'],\n        'border-top-width': ['border-top', 'border-width', 'border'],\n        'border-right-width': ['border-right', 'border-width', 'border'],\n        'border-bottom-width': ['border-bottom', 'border-width', 'border'],\n        'border-left-width': ['border-left', 'border-width', 'border'],\n        'border-top-style': ['border-top', 'border-style', 'border'],\n        'border-right-style': ['border-right', 'border-style', 'border'],\n        'border-bottom-style': ['border-bottom', 'border-style', 'border'],\n        'border-left-style': ['border-left', 'border-style', 'border'],\n        'border-top-color': ['border-top', 'border-color', 'border'],\n        'border-right-color': ['border-right', 'border-color', 'border'],\n        'border-bottom-color': ['border-bottom', 'border-color', 'border'],\n        'border-left-color': ['border-left', 'border-color', 'border'],\n        'margin-top': ['margin'],\n        'margin-right': ['margin'],\n        'margin-bottom': ['margin'],\n        'margin-left': ['margin'],\n        'padding-top': ['padding'],\n        'padding-right': ['padding'],\n        'padding-bottom': ['padding'],\n        'padding-left': ['padding'],\n        'font-style': ['font'],\n        'font-variant': ['font'],\n        'font-weight': ['font'],\n        'font-size': ['font'],\n        'font-family': ['font'],\n        'list-style-type': ['list-style'],\n        'list-style-position': ['list-style'],\n        'list-style-image': ['list-style']\n    };\n\n    function getPropertyFingerprint(propertyName, declaration, fingerprints) {\n        var realName = resolveProperty(propertyName).basename;\n\n        if (realName === 'background') {\n            return propertyName + ':' + generate$5(declaration.value);\n        }\n\n        var declarationId = declaration.id;\n        var fingerprint = fingerprints[declarationId];\n\n        if (!fingerprint) {\n            switch (declaration.value.type) {\n                case 'Value':\n                    var vendorId = '';\n                    var iehack = '';\n                    var special = {};\n                    var raw = false;\n\n                    declaration.value.children.each(function walk(node) {\n                        switch (node.type) {\n                            case 'Value':\n                            case 'Brackets':\n                            case 'Parentheses':\n                                node.children.each(walk);\n                                break;\n\n                            case 'Raw':\n                                raw = true;\n                                break;\n\n                            case 'Identifier':\n                                var name = node.name;\n\n                                if (!vendorId) {\n                                    vendorId = resolveKeyword$4(name).vendor;\n                                }\n\n                                if (/\\\\[09]/.test(name)) {\n                                    iehack = RegExp.lastMatch;\n                                }\n\n                                if (realName === 'cursor') {\n                                    if (CURSOR_SAFE_VALUE.indexOf(name) === -1) {\n                                        special[name] = true;\n                                    }\n                                } else if (realName === 'position') {\n                                    if (POSITION_SAFE_VALUE.indexOf(name) === -1) {\n                                        special[name] = true;\n                                    }\n                                } else if (DONT_MIX_VALUE.hasOwnProperty(realName)) {\n                                    if (DONT_MIX_VALUE[realName].test(name)) {\n                                        special[name] = true;\n                                    }\n                                }\n\n                                break;\n\n                            case 'Function':\n                                var name = node.name;\n\n                                if (!vendorId) {\n                                    vendorId = resolveKeyword$4(name).vendor;\n                                }\n\n                                if (name === 'rect') {\n                                    // there are 2 forms of rect:\n                                    //   rect(<top>, <right>, <bottom>, <left>) - standart\n                                    //   rect(<top> <right> <bottom> <left>) \u2013 backwards compatible syntax\n                                    // only the same form values can be merged\n                                    var hasComma = node.children.some(function(node) {\n                                        return node.type === 'Operator' && node.value === ',';\n                                    });\n                                    if (!hasComma) {\n                                        name = 'rect-backward';\n                                    }\n                                }\n\n                                special[name + '()'] = true;\n\n                                // check nested tokens too\n                                node.children.each(walk);\n\n                                break;\n\n                            case 'Dimension':\n                                var unit = node.unit;\n\n                                if (/\\\\[09]/.test(unit)) {\n                                    iehack = RegExp.lastMatch;\n                                }\n\n                                switch (unit) {\n                                    // is not supported until IE11\n                                    case 'rem':\n\n                                    // v* units is too buggy across browsers and better\n                                    // don't merge values with those units\n                                    case 'vw':\n                                    case 'vh':\n                                    case 'vmin':\n                                    case 'vmax':\n                                    case 'vm': // IE9 supporting \"vm\" instead of \"vmin\".\n                                        special[unit] = true;\n                                        break;\n                                }\n                                break;\n                        }\n                    });\n\n                    fingerprint = raw\n                        ? '!' + fingerprintId++\n                        : '!' + Object.keys(special).sort() + '|' + iehack + vendorId;\n                    break;\n\n                case 'Raw':\n                    fingerprint = '!' + declaration.value.value;\n                    break;\n\n                default:\n                    fingerprint = generate$5(declaration.value);\n            }\n\n            fingerprints[declarationId] = fingerprint;\n        }\n\n        return propertyName + fingerprint;\n    }\n\n    function needless(props, declaration, fingerprints) {\n        var property = resolveProperty(declaration.property);\n\n        if (NEEDLESS_TABLE.hasOwnProperty(property.basename)) {\n            var table = NEEDLESS_TABLE[property.basename];\n\n            for (var i = 0; i < table.length; i++) {\n                var ppre = getPropertyFingerprint(property.prefix + table[i], declaration, fingerprints);\n                var prev = props.hasOwnProperty(ppre) ? props[ppre] : null;\n\n                if (prev && (!declaration.important || prev.item.data.important)) {\n                    return prev;\n                }\n            }\n        }\n    }\n\n    function processRule$3(rule, item, list, props, fingerprints) {\n        var declarations = rule.block.children;\n\n        declarations.eachRight(function(declaration, declarationItem) {\n            var property = declaration.property;\n            var fingerprint = getPropertyFingerprint(property, declaration, fingerprints);\n            var prev = props[fingerprint];\n\n            if (prev && !dontRestructure.hasOwnProperty(property)) {\n                if (declaration.important && !prev.item.data.important) {\n                    props[fingerprint] = {\n                        block: declarations,\n                        item: declarationItem\n                    };\n\n                    prev.block.remove(prev.item);\n\n                    // TODO: use it when we can refer to several points in source\n                    // declaration.loc = {\n                    //     primary: declaration.loc,\n                    //     merged: prev.item.data.loc\n                    // };\n                } else {\n                    declarations.remove(declarationItem);\n\n                    // TODO: use it when we can refer to several points in source\n                    // prev.item.data.loc = {\n                    //     primary: prev.item.data.loc,\n                    //     merged: declaration.loc\n                    // };\n                }\n            } else {\n                var prev = needless(props, declaration, fingerprints);\n\n                if (prev) {\n                    declarations.remove(declarationItem);\n\n                    // TODO: use it when we can refer to several points in source\n                    // prev.item.data.loc = {\n                    //     primary: prev.item.data.loc,\n                    //     merged: declaration.loc\n                    // };\n                } else {\n                    declaration.fingerprint = fingerprint;\n\n                    props[fingerprint] = {\n                        block: declarations,\n                        item: declarationItem\n                    };\n                }\n            }\n        });\n\n        if (declarations.isEmpty()) {\n            list.remove(item);\n        }\n    }\n\n    var _6RestructBlock = function restructBlock(ast) {\n        var stylesheetMap = {};\n        var fingerprints = Object.create(null);\n\n        walk$9(ast, {\n            visit: 'Rule',\n            reverse: true,\n            enter: function(node, item, list) {\n                var stylesheet = this.block || this.stylesheet;\n                var ruleId = (node.pseudoSignature || '') + '|' + node.prelude.children.first().id;\n                var ruleMap;\n                var props;\n\n                if (!stylesheetMap.hasOwnProperty(stylesheet.id)) {\n                    ruleMap = {};\n                    stylesheetMap[stylesheet.id] = ruleMap;\n                } else {\n                    ruleMap = stylesheetMap[stylesheet.id];\n                }\n\n                if (ruleMap.hasOwnProperty(ruleId)) {\n                    props = ruleMap[ruleId];\n                } else {\n                    props = {};\n                    ruleMap[ruleId] = props;\n                }\n\n                processRule$3.call(this, node, item, list, props, fingerprints);\n            }\n        });\n    };\n\n    var walk$a = lib.walk;\n\n\n    /*\n        At this step all rules has single simple selector. We try to join by equal\n        declaration blocks to first rule, e.g.\n\n        .a { color: red }\n        b { ... }\n        .b { color: red }\n        ->\n        .a, .b { color: red }\n        b { ... }\n    */\n\n    function processRule$4(node, item, list) {\n        var selectors = node.prelude.children;\n        var declarations = node.block.children;\n        var nodeCompareMarker = selectors.first().compareMarker;\n        var skippedCompareMarkers = {};\n\n        list.nextUntil(item.next, function(next, nextItem) {\n            // skip non-ruleset node if safe\n            if (next.type !== 'Rule') {\n                return utils$2.unsafeToSkipNode.call(selectors, next);\n            }\n\n            if (node.pseudoSignature !== next.pseudoSignature) {\n                return true;\n            }\n\n            var nextFirstSelector = next.prelude.children.head;\n            var nextDeclarations = next.block.children;\n            var nextCompareMarker = nextFirstSelector.data.compareMarker;\n\n            // if next ruleset has same marked as one of skipped then stop joining\n            if (nextCompareMarker in skippedCompareMarkers) {\n                return true;\n            }\n\n            // try to join by selectors\n            if (selectors.head === selectors.tail) {\n                if (selectors.first().id === nextFirstSelector.data.id) {\n                    declarations.appendList(nextDeclarations);\n                    list.remove(nextItem);\n                    return;\n                }\n            }\n\n            // try to join by properties\n            if (utils$2.isEqualDeclarations(declarations, nextDeclarations)) {\n                var nextStr = nextFirstSelector.data.id;\n\n                selectors.some(function(data, item) {\n                    var curStr = data.id;\n\n                    if (nextStr < curStr) {\n                        selectors.insert(nextFirstSelector, item);\n                        return true;\n                    }\n\n                    if (!item.next) {\n                        selectors.insert(nextFirstSelector);\n                        return true;\n                    }\n                });\n\n                list.remove(nextItem);\n                return;\n            }\n\n            // go to next ruleset if current one can be skipped (has no equal specificity nor element selector)\n            if (nextCompareMarker === nodeCompareMarker) {\n                return true;\n            }\n\n            skippedCompareMarkers[nextCompareMarker] = true;\n        });\n    }\n\n    var _7MergeRuleset = function mergeRule(ast) {\n        walk$a(ast, {\n            visit: 'Rule',\n            enter: processRule$4\n        });\n    };\n\n    var List$5 = lib.List;\n    var walk$b = lib.walk;\n\n\n    function calcSelectorLength(list) {\n        var length = 0;\n\n        list.each(function(data) {\n            length += data.id.length + 1;\n        });\n\n        return length - 1;\n    }\n\n    function calcDeclarationsLength(tokens) {\n        var length = 0;\n\n        for (var i = 0; i < tokens.length; i++) {\n            length += tokens[i].length;\n        }\n\n        return (\n            length +          // declarations\n            tokens.length - 1 // delimeters\n        );\n    }\n\n    function processRule$5(node, item, list) {\n        var avoidRulesMerge = this.block !== null ? this.block.avoidRulesMerge : false;\n        var selectors = node.prelude.children;\n        var block = node.block;\n        var disallowDownMarkers = Object.create(null);\n        var allowMergeUp = true;\n        var allowMergeDown = true;\n\n        list.prevUntil(item.prev, function(prev, prevItem) {\n            var prevBlock = prev.block;\n            var prevType = prev.type;\n\n            if (prevType !== 'Rule') {\n                var unsafe = utils$2.unsafeToSkipNode.call(selectors, prev);\n\n                if (!unsafe && prevType === 'Atrule' && prevBlock) {\n                    walk$b(prevBlock, {\n                        visit: 'Rule',\n                        enter: function(node) {\n                            node.prelude.children.each(function(data) {\n                                disallowDownMarkers[data.compareMarker] = true;\n                            });\n                        }\n                    });\n                }\n\n                return unsafe;\n            }\n\n            var prevSelectors = prev.prelude.children;\n\n            if (node.pseudoSignature !== prev.pseudoSignature) {\n                return true;\n            }\n\n            allowMergeDown = !prevSelectors.some(function(selector) {\n                return selector.compareMarker in disallowDownMarkers;\n            });\n\n            // try prev ruleset if simpleselectors has no equal specifity and element selector\n            if (!allowMergeDown && !allowMergeUp) {\n                return true;\n            }\n\n            // try to join by selectors\n            if (allowMergeUp && utils$2.isEqualSelectors(prevSelectors, selectors)) {\n                prevBlock.children.appendList(block.children);\n                list.remove(item);\n                return true;\n            }\n\n            // try to join by properties\n            var diff = utils$2.compareDeclarations(block.children, prevBlock.children);\n\n            // console.log(diff.eq, diff.ne1, diff.ne2);\n\n            if (diff.eq.length) {\n                if (!diff.ne1.length && !diff.ne2.length) {\n                    // equal blocks\n                    if (allowMergeDown) {\n                        utils$2.addSelectors(selectors, prevSelectors);\n                        list.remove(prevItem);\n                    }\n\n                    return true;\n                } else if (!avoidRulesMerge) { /* probably we don't need to prevent those merges for @keyframes\n                                                  TODO: need to be checked */\n\n                    if (diff.ne1.length && !diff.ne2.length) {\n                        // prevBlock is subset block\n                        var selectorLength = calcSelectorLength(selectors);\n                        var blockLength = calcDeclarationsLength(diff.eq); // declarations length\n\n                        if (allowMergeUp && selectorLength < blockLength) {\n                            utils$2.addSelectors(prevSelectors, selectors);\n                            block.children = new List$5().fromArray(diff.ne1);\n                        }\n                    } else if (!diff.ne1.length && diff.ne2.length) {\n                        // node is subset of prevBlock\n                        var selectorLength = calcSelectorLength(prevSelectors);\n                        var blockLength = calcDeclarationsLength(diff.eq); // declarations length\n\n                        if (allowMergeDown && selectorLength < blockLength) {\n                            utils$2.addSelectors(selectors, prevSelectors);\n                            prevBlock.children = new List$5().fromArray(diff.ne2);\n                        }\n                    } else {\n                        // diff.ne1.length && diff.ne2.length\n                        // extract equal block\n                        var newSelector = {\n                            type: 'SelectorList',\n                            loc: null,\n                            children: utils$2.addSelectors(prevSelectors.copy(), selectors)\n                        };\n                        var newBlockLength = calcSelectorLength(newSelector.children) + 2; // selectors length + curly braces length\n                        var blockLength = calcDeclarationsLength(diff.eq); // declarations length\n\n                        // create new ruleset if declarations length greater than\n                        // ruleset description overhead\n                        if (blockLength >= newBlockLength) {\n                            var newItem = list.createItem({\n                                type: 'Rule',\n                                loc: null,\n                                prelude: newSelector,\n                                block: {\n                                    type: 'Block',\n                                    loc: null,\n                                    children: new List$5().fromArray(diff.eq)\n                                },\n                                pseudoSignature: node.pseudoSignature\n                            });\n\n                            block.children = new List$5().fromArray(diff.ne1);\n                            prevBlock.children = new List$5().fromArray(diff.ne2overrided);\n\n                            if (allowMergeUp) {\n                                list.insert(newItem, prevItem);\n                            } else {\n                                list.insert(newItem, item);\n                            }\n\n                            return true;\n                        }\n                    }\n                }\n            }\n\n            if (allowMergeUp) {\n                // TODO: disallow up merge only if any property interception only (i.e. diff.ne2overrided.length > 0);\n                // await property families to find property interception correctly\n                allowMergeUp = !prevSelectors.some(function(prevSelector) {\n                    return selectors.some(function(selector) {\n                        return selector.compareMarker === prevSelector.compareMarker;\n                    });\n                });\n            }\n\n            prevSelectors.each(function(data) {\n                disallowDownMarkers[data.compareMarker] = true;\n            });\n        });\n    }\n\n    var _8RestructRuleset = function restructRule(ast) {\n        walk$b(ast, {\n            visit: 'Rule',\n            reverse: true,\n            enter: processRule$5\n        });\n    };\n\n    var restructure = function(ast, options) {\n        // prepare ast for restructing\n        var indexer = prepare(ast, options);\n        options.logger('prepare', ast);\n\n        _1MergeAtrule(ast, options);\n        options.logger('mergeAtrule', ast);\n\n        _2InitialMergeRuleset(ast);\n        options.logger('initialMergeRuleset', ast);\n\n        _3DisjoinRuleset(ast);\n        options.logger('disjoinRuleset', ast);\n\n        _4RestructShorthand(ast, indexer);\n        options.logger('restructShorthand', ast);\n\n        _6RestructBlock(ast);\n        options.logger('restructBlock', ast);\n\n        _7MergeRuleset(ast);\n        options.logger('mergeRuleset', ast);\n\n        _8RestructRuleset(ast);\n        options.logger('restructRuleset', ast);\n    };\n\n    var List$6 = lib.List;\n    var clone$1 = lib.clone;\n\n\n\n\n    var walk$c = lib.walk;\n\n    function readChunk(children, specialComments) {\n        var buffer = new List$6();\n        var nonSpaceTokenInBuffer = false;\n        var protectedComment;\n\n        children.nextUntil(children.head, function(node, item, list) {\n            if (node.type === 'Comment') {\n                if (!specialComments || node.value.charAt(0) !== '!') {\n                    list.remove(item);\n                    return;\n                }\n\n                if (nonSpaceTokenInBuffer || protectedComment) {\n                    return true;\n                }\n\n                list.remove(item);\n                protectedComment = node;\n                return;\n            }\n\n            if (node.type !== 'WhiteSpace') {\n                nonSpaceTokenInBuffer = true;\n            }\n\n            buffer.insert(list.remove(item));\n        });\n\n        return {\n            comment: protectedComment,\n            stylesheet: {\n                type: 'StyleSheet',\n                loc: null,\n                children: buffer\n            }\n        };\n    }\n\n    function compressChunk(ast, firstAtrulesAllowed, num, options) {\n        options.logger('Compress block #' + num, null, true);\n\n        var seed = 1;\n\n        if (ast.type === 'StyleSheet') {\n            ast.firstAtrulesAllowed = firstAtrulesAllowed;\n            ast.id = seed++;\n        }\n\n        walk$c(ast, {\n            visit: 'Atrule',\n            enter: function markScopes(node) {\n                if (node.block !== null) {\n                    node.block.id = seed++;\n                }\n            }\n        });\n        options.logger('init', ast);\n\n        // remove redundant\n        clean(ast, options);\n        options.logger('clean', ast);\n\n        // replace nodes for shortened forms\n        replace(ast);\n        options.logger('replace', ast);\n\n        // structure optimisations\n        if (options.restructuring) {\n            restructure(ast, options);\n        }\n\n        return ast;\n    }\n\n    function getCommentsOption(options) {\n        var comments = 'comments' in options ? options.comments : 'exclamation';\n\n        if (typeof comments === 'boolean') {\n            comments = comments ? 'exclamation' : false;\n        } else if (comments !== 'exclamation' && comments !== 'first-exclamation') {\n            comments = false;\n        }\n\n        return comments;\n    }\n\n    function getRestructureOption(options) {\n        if ('restructure' in options) {\n            return options.restructure;\n        }\n\n        return 'restructuring' in options ? options.restructuring : true;\n    }\n\n    function wrapBlock(block) {\n        return new List$6().appendData({\n            type: 'Rule',\n            loc: null,\n            prelude: {\n                type: 'SelectorList',\n                loc: null,\n                children: new List$6().appendData({\n                    type: 'Selector',\n                    loc: null,\n                    children: new List$6().appendData({\n                        type: 'TypeSelector',\n                        loc: null,\n                        name: 'x'\n                    })\n                })\n            },\n            block: block\n        });\n    }\n\n    var compress = function compress(ast, options) {\n        ast = ast || { type: 'StyleSheet', loc: null, children: new List$6() };\n        options = options || {};\n\n        var compressOptions = {\n            logger: typeof options.logger === 'function' ? options.logger : function() {},\n            restructuring: getRestructureOption(options),\n            forceMediaMerge: Boolean(options.forceMediaMerge),\n            usage: options.usage ? usage.buildIndex(options.usage) : false\n        };\n        var specialComments = getCommentsOption(options);\n        var firstAtrulesAllowed = true;\n        var input;\n        var output = new List$6();\n        var chunk;\n        var chunkNum = 1;\n        var chunkChildren;\n\n        if (options.clone) {\n            ast = clone$1(ast);\n        }\n\n        if (ast.type === 'StyleSheet') {\n            input = ast.children;\n            ast.children = output;\n        } else {\n            input = wrapBlock(ast);\n        }\n\n        do {\n            chunk = readChunk(input, Boolean(specialComments));\n            compressChunk(chunk.stylesheet, firstAtrulesAllowed, chunkNum++, compressOptions);\n            chunkChildren = chunk.stylesheet.children;\n\n            if (chunk.comment) {\n                // add \\n before comment if there is another content in output\n                if (!output.isEmpty()) {\n                    output.insert(List$6.createItem({\n                        type: 'Raw',\n                        value: '\\n'\n                    }));\n                }\n\n                output.insert(List$6.createItem(chunk.comment));\n\n                // add \\n after comment if chunk is not empty\n                if (!chunkChildren.isEmpty()) {\n                    output.insert(List$6.createItem({\n                        type: 'Raw',\n                        value: '\\n'\n                    }));\n                }\n            }\n\n            if (firstAtrulesAllowed && !chunkChildren.isEmpty()) {\n                var lastRule = chunkChildren.last();\n\n                if (lastRule.type !== 'Atrule' ||\n                    (lastRule.name !== 'import' && lastRule.name !== 'charset')) {\n                    firstAtrulesAllowed = false;\n                }\n            }\n\n            if (specialComments !== 'exclamation') {\n                specialComments = false;\n            }\n\n            output.appendList(chunkChildren);\n        } while (!input.isEmpty());\n\n        return {\n            ast: ast\n        };\n    };\n\n    var version = \"4.0.3\";\n    var _package = {\n        version: version\n    };\n\n    var _package$1 = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        version: version,\n        'default': _package\n    });\n\n    var require$$0 = getCjsExportFromNamespace(_package$1);\n\n    var parse$1 = lib.parse;\n\n    var generate$6 = lib.generate;\n\n    function debugOutput(name, options, startTime, data) {\n        if (options.debug) {\n            console.error('## ' + name + ' done in %d ms\\n', Date.now() - startTime);\n        }\n\n        return data;\n    }\n\n    function createDefaultLogger(level) {\n        var lastDebug;\n\n        return function logger(title, ast) {\n            var line = title;\n\n            if (ast) {\n                line = '[' + ((Date.now() - lastDebug) / 1000).toFixed(3) + 's] ' + line;\n            }\n\n            if (level > 1 && ast) {\n                var css = generate$6(ast);\n\n                // when level 2, limit css to 256 symbols\n                if (level === 2 && css.length > 256) {\n                    css = css.substr(0, 256) + '...';\n                }\n\n                line += '\\n  ' + css + '\\n';\n            }\n\n            console.error(line);\n            lastDebug = Date.now();\n        };\n    }\n\n    function copy$1(obj) {\n        var result = {};\n\n        for (var key in obj) {\n            result[key] = obj[key];\n        }\n\n        return result;\n    }\n\n    function buildCompressOptions(options) {\n        options = copy$1(options);\n\n        if (typeof options.logger !== 'function' && options.debug) {\n            options.logger = createDefaultLogger(options.debug);\n        }\n\n        return options;\n    }\n\n    function runHandler(ast, options, handlers) {\n        if (!Array.isArray(handlers)) {\n            handlers = [handlers];\n        }\n\n        handlers.forEach(function(fn) {\n            fn(ast, options);\n        });\n    }\n\n    function minify(context, source, options) {\n        options = options || {};\n\n        var filename = options.filename || '<unknown>';\n        var result;\n\n        // parse\n        var ast = debugOutput('parsing', options, Date.now(),\n            parse$1(source, {\n                context: context,\n                filename: filename,\n                positions: Boolean(options.sourceMap)\n            })\n        );\n\n        // before compress handlers\n        if (options.beforeCompress) {\n            debugOutput('beforeCompress', options, Date.now(),\n                runHandler(ast, options, options.beforeCompress)\n            );\n        }\n\n        // compress\n        var compressResult = debugOutput('compress', options, Date.now(),\n            compress(ast, buildCompressOptions(options))\n        );\n\n        // after compress handlers\n        if (options.afterCompress) {\n            debugOutput('afterCompress', options, Date.now(),\n                runHandler(compressResult, options, options.afterCompress)\n            );\n        }\n\n        // generate\n        if (options.sourceMap) {\n            result = debugOutput('generate(sourceMap: true)', options, Date.now(), (function() {\n                var tmp = generate$6(compressResult.ast, { sourceMap: true });\n                tmp.map._file = filename; // since other tools can relay on file in source map transform chain\n                tmp.map.setSourceContent(filename, source);\n                return tmp;\n            }()));\n        } else {\n            result = debugOutput('generate', options, Date.now(), {\n                css: generate$6(compressResult.ast),\n                map: null\n            });\n        }\n\n        return result;\n    }\n\n    function minifyStylesheet(source, options) {\n        return minify('stylesheet', source, options);\n    }\n\n    function minifyBlock(source, options) {\n        return minify('declarationList', source, options);\n    }\n\n    var lib$1 = {\n        version: require$$0.version,\n\n        // main methods\n        minify: minifyStylesheet,\n        minifyBlock: minifyBlock,\n\n        // css syntax parser/walkers/generator/etc\n        syntax: Object.assign({\n            compress: compress\n        }, lib)\n    };\n    var lib_1 = lib$1.version;\n    var lib_2 = lib$1.minify;\n    var lib_3 = lib$1.minifyBlock;\n    var lib_4 = lib$1.syntax;\n\n    exports.default = lib$1;\n    exports.minify = lib_2;\n    exports.minifyBlock = lib_3;\n    exports.syntax = lib_4;\n    exports.version = lib_1;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","Magento_PageBuilder/js/resource/csso/csso.min.js":"!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=e||self).csso={})}(this,(function(e){\"use strict\";function t(e){return{prev:null,next:null,data:e}}function n(e,t,n){var r;return null!==a?(r=a,a=a.cursor,r.prev=t,r.next=n,r.cursor=e.cursor):r={prev:t,next:n,cursor:e.cursor},e.cursor=r,r}function r(e){var t=e.cursor;e.cursor=t.cursor,t.prev=null,t.next=null,t.cursor=a,a=t}var a=null,i=function(){this.cursor=null,this.head=null,this.tail=null};i.createItem=t,i.prototype.createItem=t,i.prototype.updateCursors=function(e,t,n,r){for(var a=this.cursor;null!==a;)a.prev===e&&(a.prev=t),a.next===n&&(a.next=r),a=a.cursor},i.prototype.getSize=function(){for(var e=0,t=this.head;t;)e++,t=t.next;return e},i.prototype.fromArray=function(e){var n=null;this.head=null;for(var r=0;r<e.length;r++){var a=t(e[r]);null!==n?n.next=a:this.head=a,a.prev=n,n=a}return this.tail=n,this},i.prototype.toArray=function(){for(var e=this.head,t=[];e;)t.push(e.data),e=e.next;return t},i.prototype.toJSON=i.prototype.toArray,i.prototype.isEmpty=function(){return null===this.head},i.prototype.first=function(){return this.head&&this.head.data},i.prototype.last=function(){return this.tail&&this.tail.data},i.prototype.each=function(e,t){var a;void 0===t&&(t=this);for(var i=n(this,null,this.head);null!==i.next;)a=i.next,i.next=a.next,e.call(t,a.data,a,this);r(this)},i.prototype.forEach=i.prototype.each,i.prototype.eachRight=function(e,t){var a;void 0===t&&(t=this);for(var i=n(this,this.tail,null);null!==i.prev;)a=i.prev,i.prev=a.prev,e.call(t,a.data,a,this);r(this)},i.prototype.forEachRight=i.prototype.eachRight,i.prototype.nextUntil=function(e,t,a){if(null!==e){var i;void 0===a&&(a=this);for(var o=n(this,null,e);null!==o.next&&(i=o.next,o.next=i.next,!t.call(a,i.data,i,this)););r(this)}},i.prototype.prevUntil=function(e,t,a){if(null!==e){var i;void 0===a&&(a=this);for(var o=n(this,e,null);null!==o.prev&&(i=o.prev,o.prev=i.prev,!t.call(a,i.data,i,this)););r(this)}},i.prototype.some=function(e,t){var n=this.head;for(void 0===t&&(t=this);null!==n;){if(e.call(t,n.data,n,this))return!0;n=n.next}return!1},i.prototype.map=function(e,t){var n=new i,r=this.head;for(void 0===t&&(t=this);null!==r;)n.appendData(e.call(t,r.data,r,this)),r=r.next;return n},i.prototype.filter=function(e,t){var n=new i,r=this.head;for(void 0===t&&(t=this);null!==r;)e.call(t,r.data,r,this)&&n.appendData(r.data),r=r.next;return n},i.prototype.clear=function(){this.head=null,this.tail=null},i.prototype.copy=function(){for(var e=new i,n=this.head;null!==n;)e.insert(t(n.data)),n=n.next;return e},i.prototype.prepend=function(e){return this.updateCursors(null,e,this.head,e),null!==this.head?(this.head.prev=e,e.next=this.head):this.tail=e,this.head=e,this},i.prototype.prependData=function(e){return this.prepend(t(e))},i.prototype.append=function(e){return this.insert(e)},i.prototype.appendData=function(e){return this.insert(t(e))},i.prototype.insert=function(e,t){if(null!=t)if(this.updateCursors(t.prev,e,t,e),null===t.prev){if(this.head!==t)throw new Error(\"before doesn't belong to list\");this.head=e,t.prev=e,e.next=t,this.updateCursors(null,e)}else t.prev.next=e,e.prev=t.prev,t.prev=e,e.next=t;else this.updateCursors(this.tail,e,null,e),null!==this.tail?(this.tail.next=e,e.prev=this.tail):this.head=e,this.tail=e;return this},i.prototype.insertData=function(e,n){return this.insert(t(e),n)},i.prototype.remove=function(e){if(this.updateCursors(e,e.prev,e,e.next),null!==e.prev)e.prev.next=e.next;else{if(this.head!==e)throw new Error(\"item doesn't belong to list\");this.head=e.next}if(null!==e.next)e.next.prev=e.prev;else{if(this.tail!==e)throw new Error(\"item doesn't belong to list\");this.tail=e.prev}return e.prev=null,e.next=null,e},i.prototype.push=function(e){this.insert(t(e))},i.prototype.pop=function(){if(null!==this.tail)return this.remove(this.tail)},i.prototype.unshift=function(e){this.prepend(t(e))},i.prototype.shift=function(){if(null!==this.head)return this.remove(this.head)},i.prototype.prependList=function(e){return this.insertList(e,this.head)},i.prototype.appendList=function(e){return this.insertList(e)},i.prototype.insertList=function(e,t){return null===e.head||(null!=t?(this.updateCursors(t.prev,e.tail,t,e.head),null!==t.prev?(t.prev.next=e.head,e.head.prev=t.prev):this.head=e.head,t.prev=e.tail,e.tail.next=t):(this.updateCursors(this.tail,e.tail,null,e.head),null!==this.tail?(this.tail.next=e.head,e.head.prev=this.tail):this.head=e.head,this.tail=e.tail),e.head=null,e.tail=null),this},i.prototype.replace=function(e,t){\"head\"in t?this.insertList(t,e):this.insert(t,e),this.remove(e)};var o=i,s=function(e,t){var n=Object.create(SyntaxError.prototype),r=new Error;return n.name=e,n.message=t,Object.defineProperty(n,\"stack\",{get:function(){return(r.stack||\"\").replace(/^(.+\\n){1,3}/,e+\": \"+t+\"\\n\")}}),n};function l(e,t){function n(e,t){return r.slice(e,t).map((function(t,n){for(var r=String(e+n+1);r.length<l;)r=\" \"+r;return r+\" |\"+t})).join(\"\\n\")}var r=e.source.split(/\\r\\n?|\\n|\\f/),a=e.line,i=e.column,o=Math.max(1,a-t)-1,s=Math.min(a+t,r.length+1),l=Math.max(4,String(s).length)+1,c=0;(i+=(\"    \".length-1)*(r[a-1].substr(0,i-1).match(/\\t/g)||[]).length)>100&&(c=i-60+3,i=58);for(var u=o;u<=s;u++)u>=0&&u<r.length&&(r[u]=r[u].replace(/\\t/g,\"    \"),r[u]=(c>0&&r[u].length>c?\"\u2026\":\"\")+r[u].substr(c,98)+(r[u].length>c+100-1?\"\u2026\":\"\"));return[n(o,a),new Array(i+l+2).join(\"-\")+\"^\",n(a,s)].filter(Boolean).join(\"\\n\")}var c=function(e,t,n,r,a){var i=s(\"SyntaxError\",e);return i.source=t,i.offset=n,i.line=r,i.column=a,i.sourceFragment=function(e){return l(i,isNaN(e)?0:e)},Object.defineProperty(i,\"formattedMessage\",{get:function(){return\"Parse error: \"+i.message+\"\\n\"+l(i,2)}}),i.parseError={offset:n,line:r,column:a},i},u={EOF:0,Ident:1,Function:2,AtKeyword:3,Hash:4,String:5,BadString:6,Url:7,BadUrl:8,Delim:9,Number:10,Percentage:11,Dimension:12,WhiteSpace:13,CDO:14,CDC:15,Colon:16,Semicolon:17,Comma:18,LeftSquareBracket:19,RightSquareBracket:20,LeftParenthesis:21,RightParenthesis:22,LeftCurlyBracket:23,RightCurlyBracket:24,Comment:25},h=Object.keys(u).reduce((function(e,t){return e[u[t]]=t,e}),{}),d={TYPE:u,NAME:h};function p(e){return e>=48&&e<=57}function f(e){return e>=65&&e<=90}function m(e){return e>=97&&e<=122}function g(e){return f(e)||m(e)}function b(e){return e>=128}function y(e){return g(e)||b(e)||95===e}function k(e){return e>=0&&e<=8||11===e||e>=14&&e<=31||127===e}function v(e){return 10===e||13===e||12===e}function w(e){return v(e)||32===e||9===e}function x(e,t){return 92===e&&(!v(t)&&0!==t)}var S=new Array(128);A.Eof=128,A.WhiteSpace=130,A.Digit=131,A.NameStart=132,A.NonPrintable=133;for(var C=0;C<S.length;C++)switch(!0){case w(C):S[C]=A.WhiteSpace;break;case p(C):S[C]=A.Digit;break;case y(C):S[C]=A.NameStart;break;case k(C):S[C]=A.NonPrintable;break;default:S[C]=C||A.Eof}function A(e){return e<128?S[e]:A.NameStart}var z={isDigit:p,isHexDigit:function(e){return p(e)||e>=65&&e<=70||e>=97&&e<=102},isUppercaseLetter:f,isLowercaseLetter:m,isLetter:g,isNonAscii:b,isNameStart:y,isName:function(e){return y(e)||p(e)||45===e},isNonPrintable:k,isNewline:v,isWhiteSpace:w,isValidEscape:x,isIdentifierStart:function(e,t,n){return 45===e?y(t)||45===t||x(t,n):!!y(e)||92===e&&x(e,t)},isNumberStart:function(e,t,n){return 43===e||45===e?p(t)?2:46===t&&p(n)?3:0:46===e?p(t)?2:0:p(e)?1:0},isBOM:function(e){return 65279===e||65534===e?1:0},charCodeCategory:A},P=z.isDigit,L=z.isHexDigit,T=z.isUppercaseLetter,E=z.isName,O=z.isWhiteSpace,D=z.isValidEscape;function R(e,t){return t<e.length?e.charCodeAt(t):0}function I(e,t,n){return 13===n&&10===R(e,t+1)?2:1}function M(e,t,n){var r=e.charCodeAt(t);return T(r)&&(r|=32),r===n}function N(e,t){for(;t<e.length&&P(e.charCodeAt(t));t++);return t}function B(e,t){if(L(R(e,(t+=2)-1))){for(var n=Math.min(e.length,t+5);t<n&&L(R(e,t));t++);var r=R(e,t);O(r)&&(t+=I(e,t,r))}return t}var j={consumeEscaped:B,consumeName:function(e,t){for(;t<e.length;t++){var n=e.charCodeAt(t);if(!E(n)){if(!D(n,R(e,t+1)))break;t=B(e,t)-1}}return t},consumeNumber:function(e,t){var n=e.charCodeAt(t);if(43!==n&&45!==n||(n=e.charCodeAt(t+=1)),P(n)&&(t=N(e,t+1),n=e.charCodeAt(t)),46===n&&P(e.charCodeAt(t+1))&&(n=e.charCodeAt(t+=2),t=N(e,t)),M(e,t,101)){var r=0;45!==(n=e.charCodeAt(t+1))&&43!==n||(r=1,n=e.charCodeAt(t+2)),P(n)&&(t=N(e,t+1+r+1))}return t},consumeBadUrlRemnants:function(e,t){for(;t<e.length;t++){var n=e.charCodeAt(t);if(41===n){t++;break}D(n,R(e,t+1))&&(t=B(e,t))}return t},cmpChar:M,cmpStr:function(e,t,n,r){if(n-t!==r.length)return!1;if(t<0||n>e.length)return!1;for(var a=t;a<n;a++){var i=e.charCodeAt(a),o=r.charCodeAt(a-t);if(T(i)&&(i|=32),i!==o)return!1}return!0},getNewlineLength:I,findWhiteSpaceStart:function(e,t){for(;t>=0&&O(e.charCodeAt(t));t--);return t+1},findWhiteSpaceEnd:function(e,t){for(;t<e.length&&O(e.charCodeAt(t));t++);return t}},_=d.TYPE,q=d.NAME,W=j.cmpStr,F=_.EOF,U=_.WhiteSpace,Y=_.Comment,H=function(){this.offsetAndType=null,this.balance=null,this.reset()};H.prototype={reset:function(){this.eof=!1,this.tokenIndex=-1,this.tokenType=0,this.tokenStart=this.firstCharOffset,this.tokenEnd=this.firstCharOffset},lookupType:function(e){return(e+=this.tokenIndex)<this.tokenCount?this.offsetAndType[e]>>24:F},lookupOffset:function(e){return(e+=this.tokenIndex)<this.tokenCount?16777215&this.offsetAndType[e-1]:this.source.length},lookupValue:function(e,t){return(e+=this.tokenIndex)<this.tokenCount&&W(this.source,16777215&this.offsetAndType[e-1],16777215&this.offsetAndType[e],t)},getTokenStart:function(e){return e===this.tokenIndex?this.tokenStart:e>0?e<this.tokenCount?16777215&this.offsetAndType[e-1]:16777215&this.offsetAndType[this.tokenCount]:this.firstCharOffset},getRawLength:function(e,t){var n,r=e,a=16777215&this.offsetAndType[Math.max(r-1,0)];e:for(;r<this.tokenCount&&!((n=this.balance[r])<e);r++)switch(t(this.offsetAndType[r]>>24,this.source,a)){case 1:break e;case 2:r++;break e;default:a=16777215&this.offsetAndType[r],this.balance[n]===r&&(r=n)}return r-this.tokenIndex},isBalanceEdge:function(e){return this.balance[this.tokenIndex]<e},isDelim:function(e,t){return t?this.lookupType(t)===_.Delim&&this.source.charCodeAt(this.lookupOffset(t))===e:this.tokenType===_.Delim&&this.source.charCodeAt(this.tokenStart)===e},getTokenValue:function(){return this.source.substring(this.tokenStart,this.tokenEnd)},getTokenLength:function(){return this.tokenEnd-this.tokenStart},substrToCursor:function(e){return this.source.substring(e,this.tokenStart)},skipWS:function(){for(var e=this.tokenIndex,t=0;e<this.tokenCount&&this.offsetAndType[e]>>24===U;e++,t++);t>0&&this.skip(t)},skipSC:function(){for(;this.tokenType===U||this.tokenType===Y;)this.next()},skip:function(e){var t=this.tokenIndex+e;t<this.tokenCount?(this.tokenIndex=t,this.tokenStart=16777215&this.offsetAndType[t-1],t=this.offsetAndType[t],this.tokenType=t>>24,this.tokenEnd=16777215&t):(this.tokenIndex=this.tokenCount,this.next())},next:function(){var e=this.tokenIndex+1;e<this.tokenCount?(this.tokenIndex=e,this.tokenStart=this.tokenEnd,e=this.offsetAndType[e],this.tokenType=e>>24,this.tokenEnd=16777215&e):(this.tokenIndex=this.tokenCount,this.eof=!0,this.tokenType=F,this.tokenStart=this.tokenEnd=this.source.length)},dump:function(){var e=this.firstCharOffset;return Array.prototype.slice.call(this.offsetAndType,0,this.tokenCount).map((function(t,n){var r=e,a=16777215&t;return e=a,{idx:n,type:q[t>>24],chunk:this.source.substring(r,a),balance:this.balance[n]}}),this)}};var V=H;function K(e){return e}function G(e,t,n,r){var a,i;switch(e.type){case\"Group\":a=function(e,t,n,r){var a=\" \"===e.combinator||r?e.combinator:\" \"+e.combinator+\" \",i=e.terms.map((function(e){return G(e,t,n,r)})).join(a);return(e.explicit||n)&&(i=(r||\",\"===i[0]?\"[\":\"[ \")+i+(r?\"]\":\" ]\")),i}(e,t,n,r)+(e.disallowEmpty?\"!\":\"\");break;case\"Multiplier\":return G(e.term,t,n,r)+t(0===(i=e).min&&0===i.max?\"*\":0===i.min&&1===i.max?\"?\":1===i.min&&0===i.max?i.comma?\"#\":\"+\":1===i.min&&1===i.max?\"\":(i.comma?\"#\":\"\")+(i.min===i.max?\"{\"+i.min+\"}\":\"{\"+i.min+\",\"+(0!==i.max?i.max:\"\")+\"}\"),e);case\"Type\":a=\"<\"+e.name+(e.opts?t(function(e){switch(e.type){case\"Range\":return\" [\"+(null===e.min?\"-\u221e\":e.min)+\",\"+(null===e.max?\"\u221e\":e.max)+\"]\";default:throw new Error(\"Unknown node type `\"+e.type+\"`\")}}(e.opts),e.opts):\"\")+\">\";break;case\"Property\":a=\"<'\"+e.name+\"'>\";break;case\"Keyword\":a=e.name;break;case\"AtKeyword\":a=\"@\"+e.name;break;case\"Function\":a=e.name+\"(\";break;case\"String\":case\"Token\":a=e.value;break;case\"Comma\":a=\",\";break;default:throw new Error(\"Unknown node type `\"+e.type+\"`\")}return t(a,e)}var $=function(e,t){var n=K,r=!1,a=!1;return\"function\"==typeof t?n=t:t&&(r=Boolean(t.forceBraces),a=Boolean(t.compact),\"function\"==typeof t.decorate&&(n=t.decorate)),G(e,n,r,a)};function Q(e,t){var n=e&&e.loc&&e.loc[t];return n?{offset:n.offset,line:n.line,column:n.column}:null}var X=function(e,t){var n=s(\"SyntaxReferenceError\",e+(t?\" `\"+t+\"`\":\"\"));return n.reference=t,n},Z=function(e,t,n,r){var a=s(\"SyntaxMatchError\",e),i=function(e){for(var t=e.tokens,n=e.longestMatch,r=n<t.length?t[n].node:null,a=-1,i=0,o=\"\",s=0;s<t.length;s++)s===n&&(a=o.length),null!==r&&t[s].node===r&&(s<=n?i++:i=0),o+=t[s].value;return{node:r,css:o,mismatchOffset:-1===a?o.length:a,last:null===r||i>1}}(r),o=i.mismatchOffset||0,l=i.node||n,c=Q(l,\"end\"),u=i.last?c:Q(l,\"start\"),h=i.css;return a.rawMessage=e,a.syntax=t?$(t):\"<generic>\",a.css=h,a.mismatchOffset=o,a.loc={source:l&&l.loc&&l.loc.source||\"<unknown>\",start:u,end:c},a.line=u?u.line:void 0,a.column=u?u.column:void 0,a.offset=u?u.offset:void 0,a.message=e+\"\\n  syntax: \"+a.syntax+\"\\n   value: \"+(a.css||\"<empty string>\")+\"\\n  --------\"+new Array(a.mismatchOffset+1).join(\"-\")+\"^\",a},J=Object.prototype.hasOwnProperty,ee=Object.create(null),te=Object.create(null);function ne(e,t){return t=t||0,e.length-t>=2&&45===e.charCodeAt(t)&&45===e.charCodeAt(t+1)}function re(e,t){if(t=t||0,e.length-t>=3&&45===e.charCodeAt(t)&&45!==e.charCodeAt(t+1)){var n=e.indexOf(\"-\",t+2);if(-1!==n)return e.substring(t,n+1)}return\"\"}var ae={keyword:function(e){if(J.call(ee,e))return ee[e];var t=e.toLowerCase();if(J.call(ee,t))return ee[e]=ee[t];var n=ne(t,0),r=n?\"\":re(t,0);return ee[e]=Object.freeze({basename:t.substr(r.length),name:t,vendor:r,prefix:r,custom:n})},property:function(e){if(J.call(te,e))return te[e];var t=e,n=e[0];\"/\"===n?n=\"/\"===e[1]?\"//\":\"/\":\"_\"!==n&&\"*\"!==n&&\"$\"!==n&&\"#\"!==n&&\"+\"!==n&&\"&\"!==n&&(n=\"\");var r=ne(t,n.length);if(!r&&(t=t.toLowerCase(),J.call(te,t)))return te[e]=te[t];var a=r?\"\":re(t,n.length),i=t.substr(0,n.length+a.length);return te[e]=Object.freeze({basename:t.substr(i.length),name:t.substr(n.length),hack:n,vendor:a,prefix:i,custom:r})},isCustomProperty:ne,vendorPrefix:re},ie=\"undefined\"!=typeof Uint32Array?Uint32Array:Array,oe=function(e,t){return null===e||e.length<t?new ie(Math.max(t+1024,16384)):e},se=d.TYPE,le=z.isNewline,ce=z.isName,ue=z.isValidEscape,he=z.isNumberStart,de=z.isIdentifierStart,pe=z.charCodeCategory,fe=z.isBOM,me=j.cmpStr,ge=j.getNewlineLength,be=j.findWhiteSpaceEnd,ye=j.consumeEscaped,ke=j.consumeName,ve=j.consumeNumber,we=j.consumeBadUrlRemnants;function xe(e,t){function n(t){return t<o?e.charCodeAt(t):0}function r(){return h=ve(e,h),de(n(h),n(h+1),n(h+2))?(g=se.Dimension,void(h=ke(e,h))):37===n(h)?(g=se.Percentage,void h++):void(g=se.Number)}function a(){const t=h;return h=ke(e,h),me(e,t,h,\"url\")&&40===n(h)?34===n(h=be(e,h+1))||39===n(h)?(g=se.Function,void(h=t+4)):void function(){for(g=se.Url,h=be(e,h);h<e.length;h++){var t=e.charCodeAt(h);switch(pe(t)){case 41:return void h++;case pe.Eof:return;case pe.WhiteSpace:return 41===n(h=be(e,h))||h>=e.length?void(h<e.length&&h++):(h=we(e,h),void(g=se.BadUrl));case 34:case 39:case 40:case pe.NonPrintable:return h=we(e,h),void(g=se.BadUrl);case 92:if(ue(t,n(h+1))){h=ye(e,h)-1;break}return h=we(e,h),void(g=se.BadUrl)}}}():40===n(h)?(g=se.Function,void h++):void(g=se.Ident)}function i(t){for(t||(t=n(h++)),g=se.String;h<e.length;h++){var r=e.charCodeAt(h);switch(pe(r)){case t:return void h++;case pe.Eof:return;case pe.WhiteSpace:if(le(r))return h+=ge(e,h,r),void(g=se.BadString);break;case 92:if(h===e.length-1)break;var a=n(h+1);le(a)?h+=ge(e,h+1,a):ue(r,a)&&(h=ye(e,h)-1)}}}t||(t=new V);for(var o=(e=String(e||\"\")).length,s=oe(t.offsetAndType,o+1),l=oe(t.balance,o+1),c=0,u=fe(n(0)),h=u,d=0,p=0,f=0;h<o;){var m=e.charCodeAt(h),g=0;switch(l[c]=o,pe(m)){case pe.WhiteSpace:g=se.WhiteSpace,h=be(e,h+1);break;case 34:i();break;case 35:ce(n(h+1))||ue(n(h+1),n(h+2))?(g=se.Hash,h=ke(e,h+1)):(g=se.Delim,h++);break;case 39:i();break;case 40:g=se.LeftParenthesis,h++;break;case 41:g=se.RightParenthesis,h++;break;case 43:he(m,n(h+1),n(h+2))?r():(g=se.Delim,h++);break;case 44:g=se.Comma,h++;break;case 45:he(m,n(h+1),n(h+2))?r():45===n(h+1)&&62===n(h+2)?(g=se.CDC,h+=3):de(m,n(h+1),n(h+2))?a():(g=se.Delim,h++);break;case 46:he(m,n(h+1),n(h+2))?r():(g=se.Delim,h++);break;case 47:42===n(h+1)?(g=se.Comment,1===(h=e.indexOf(\"*/\",h+2)+2)&&(h=e.length)):(g=se.Delim,h++);break;case 58:g=se.Colon,h++;break;case 59:g=se.Semicolon,h++;break;case 60:33===n(h+1)&&45===n(h+2)&&45===n(h+3)?(g=se.CDO,h+=4):(g=se.Delim,h++);break;case 64:de(n(h+1),n(h+2),n(h+3))?(g=se.AtKeyword,h=ke(e,h+1)):(g=se.Delim,h++);break;case 91:g=se.LeftSquareBracket,h++;break;case 92:ue(m,n(h+1))?a():(g=se.Delim,h++);break;case 93:g=se.RightSquareBracket,h++;break;case 123:g=se.LeftCurlyBracket,h++;break;case 125:g=se.RightCurlyBracket,h++;break;case pe.Digit:r();break;case pe.NameStart:a();break;case pe.Eof:break;default:g=se.Delim,h++}switch(g){case d:for(d=(p=l[f=16777215&p])>>24,l[c]=f,l[f++]=c;f<c;f++)l[f]===o&&(l[f]=c);break;case se.LeftParenthesis:case se.Function:l[c]=p,p=(d=se.RightParenthesis)<<24|c;break;case se.LeftSquareBracket:l[c]=p,p=(d=se.RightSquareBracket)<<24|c;break;case se.LeftCurlyBracket:l[c]=p,p=(d=se.RightCurlyBracket)<<24|c}s[c++]=g<<24|h}for(s[c]=se.EOF<<24|h,l[c]=o,l[o]=o;0!==p;)p=l[f=16777215&p],l[f]=o;return t.source=e,t.firstCharOffset=u,t.offsetAndType=s,t.tokenCount=c,t.balance=l,t.reset(),t.next(),t}Object.keys(d).forEach((function(e){xe[e]=d[e]})),Object.keys(z).forEach((function(e){xe[e]=z[e]})),Object.keys(j).forEach((function(e){xe[e]=j[e]}));var Se=xe,Ce=Se.isDigit,Ae=Se.cmpChar,ze=Se.TYPE,Pe=ze.Delim,Le=ze.WhiteSpace,Te=ze.Comment,Ee=ze.Ident,Oe=ze.Number,De=ze.Dimension;function Re(e,t){return null!==e&&e.type===Pe&&e.value.charCodeAt(0)===t}function Ie(e,t,n){for(;null!==e&&(e.type===Le||e.type===Te);)e=n(++t);return t}function Me(e,t,n,r){if(!e)return 0;var a=e.value.charCodeAt(t);if(43===a||45===a){if(n)return 0;t++}for(;t<e.value.length;t++)if(!Ce(e.value.charCodeAt(t)))return 0;return r+1}function Ne(e,t,n){var r=!1,a=Ie(e,t,n);if(null===(e=n(a)))return t;if(e.type!==Oe){if(!Re(e,43)&&!Re(e,45))return t;if(r=!0,a=Ie(n(++a),a,n),null===(e=n(a))&&e.type!==Oe)return 0}if(!r){var i=e.value.charCodeAt(0);if(43!==i&&45!==i)return 0}return Me(e,r?0:1,r,a)}var Be=Se.isHexDigit,je=Se.cmpChar,_e=Se.TYPE,qe=_e.Ident,We=_e.Delim,Fe=_e.Number,Ue=_e.Dimension;function Ye(e,t){return null!==e&&e.type===We&&e.value.charCodeAt(0)===t}function He(e,t){return e.value.charCodeAt(0)===t}function Ve(e,t,n){for(var r=t,a=0;r<e.value.length;r++){var i=e.value.charCodeAt(r);if(45===i&&n&&0!==a)return Ve(e,t+a+1,!1)>0?6:0;if(!Be(i))return 0;if(++a>6)return 0}return a}function Ke(e,t,n){if(!e)return 0;for(;Ye(n(t),63);){if(++e>6)return 0;t++}return t}var Ge=Se.isIdentifierStart,$e=Se.isHexDigit,Qe=Se.isDigit,Xe=Se.cmpStr,Ze=Se.consumeNumber,Je=Se.TYPE,et=[\"unset\",\"initial\",\"inherit\"],tt=[\"calc(\",\"-moz-calc(\",\"-webkit-calc(\"];function nt(e,t){return t<e.length?e.charCodeAt(t):0}function rt(e,t){return Xe(e,0,e.length,t)}function at(e,t){for(var n=0;n<t.length;n++)if(rt(e,t[n]))return!0;return!1}function it(e,t){return t===e.length-2&&(92===e.charCodeAt(t)&&Qe(e.charCodeAt(t+1)))}function ot(e,t,n){if(e&&\"Range\"===e.type){var r=Number(void 0!==n&&n!==t.length?t.substr(0,n):t);if(isNaN(r))return!0;if(null!==e.min&&r<e.min)return!0;if(null!==e.max&&r>e.max)return!0}return!1}function st(e,t){var n=e.index,r=0;do{if(r++,e.balance<=n)break}while(e=t(r));return r}function lt(e){return function(t,n,r){return null===t?0:t.type===Je.Function&&at(t.value,tt)?st(t,n):e(t,n,r)}}function ct(e){return function(t){return null===t||t.type!==e?0:1}}function ut(e){return function(t,n,r){if(null===t||t.type!==Je.Dimension)return 0;var a=Ze(t.value,0);if(null!==e){var i=t.value.indexOf(\"\\\\\",a),o=-1!==i&&it(t.value,i)?t.value.substring(a,i):t.value.substr(a);if(!1===e.hasOwnProperty(o.toLowerCase()))return 0}return ot(r,t.value,a)?0:1}}function ht(e){return\"function\"!=typeof e&&(e=function(){return 0}),function(t,n,r){return null!==t&&t.type===Je.Number&&0===Number(t.value)?1:e(t,n,r)}}var dt,pt={\"ident-token\":ct(Je.Ident),\"function-token\":ct(Je.Function),\"at-keyword-token\":ct(Je.AtKeyword),\"hash-token\":ct(Je.Hash),\"string-token\":ct(Je.String),\"bad-string-token\":ct(Je.BadString),\"url-token\":ct(Je.Url),\"bad-url-token\":ct(Je.BadUrl),\"delim-token\":ct(Je.Delim),\"number-token\":ct(Je.Number),\"percentage-token\":ct(Je.Percentage),\"dimension-token\":ct(Je.Dimension),\"whitespace-token\":ct(Je.WhiteSpace),\"CDO-token\":ct(Je.CDO),\"CDC-token\":ct(Je.CDC),\"colon-token\":ct(Je.Colon),\"semicolon-token\":ct(Je.Semicolon),\"comma-token\":ct(Je.Comma),\"[-token\":ct(Je.LeftSquareBracket),\"]-token\":ct(Je.RightSquareBracket),\"(-token\":ct(Je.LeftParenthesis),\")-token\":ct(Je.RightParenthesis),\"{-token\":ct(Je.LeftCurlyBracket),\"}-token\":ct(Je.RightCurlyBracket),string:ct(Je.String),ident:ct(Je.Ident),\"custom-ident\":function(e){if(null===e||e.type!==Je.Ident)return 0;var t=e.value.toLowerCase();return at(t,et)||rt(t,\"default\")?0:1},\"custom-property-name\":function(e){return null===e||e.type!==Je.Ident||45!==nt(e.value,0)||45!==nt(e.value,1)?0:1},\"hex-color\":function(e){if(null===e||e.type!==Je.Hash)return 0;var t=e.value.length;if(4!==t&&5!==t&&7!==t&&9!==t)return 0;for(var n=1;n<t;n++)if(!$e(e.value.charCodeAt(n)))return 0;return 1},\"id-selector\":function(e){return null===e||e.type!==Je.Hash?0:Ge(nt(e.value,1),nt(e.value,2),nt(e.value,3))?1:0},\"an-plus-b\":function(e,t){var n=0;if(!e)return 0;if(e.type===Oe)return Me(e,0,!1,n);if(e.type===Ee&&45===e.value.charCodeAt(0)){if(!Ae(e.value,1,110))return 0;switch(e.value.length){case 2:return Ne(t(++n),n,t);case 3:return 45!==e.value.charCodeAt(2)?0:(n=Ie(t(++n),n,t),Me(e=t(n),0,!0,n));default:return 45!==e.value.charCodeAt(2)?0:Me(e,3,!0,n)}}else if(e.type===Ee||Re(e,43)&&t(n+1).type===Ee){if(e.type!==Ee&&(e=t(++n)),null===e||!Ae(e.value,0,110))return 0;switch(e.value.length){case 1:return Ne(t(++n),n,t);case 2:return 45!==e.value.charCodeAt(1)?0:(n=Ie(t(++n),n,t),Me(e=t(n),0,!0,n));default:return 45!==e.value.charCodeAt(1)?0:Me(e,2,!0,n)}}else if(e.type===De){for(var r=e.value.charCodeAt(0),a=43===r||45===r?1:0,i=a;i<e.value.length&&Ce(e.value.charCodeAt(i));i++);return i===a?0:Ae(e.value,i,110)?i+1===e.value.length?Ne(t(++n),n,t):45!==e.value.charCodeAt(i+1)?0:i+2===e.value.length?(n=Ie(t(++n),n,t),Me(e=t(n),0,!0,n)):Me(e,i+2,!0,n):0}return 0},urange:function(e,t){var n=0;if(null===e||e.type!==qe||!je(e.value,0,117))return 0;if(null===(e=t(++n)))return 0;if(Ye(e,43))return null===(e=t(++n))?0:e.type===qe?Ke(Ve(e,0,!0),++n,t):Ye(e,63)?Ke(1,++n,t):0;if(e.type===Fe){if(!He(e,43))return 0;var r=Ve(e,1,!0);return 0===r?0:null===(e=t(++n))?n:e.type===Ue||e.type===Fe?He(e,45)&&Ve(e,1,!1)?n+1:0:Ke(r,n,t)}return e.type===Ue&&He(e,43)?Ke(Ve(e,1,!0),++n,t):0},\"declaration-value\":function(e,t){if(!e)return 0;var n=0,r=0,a=e.index;e:do{switch(e.type){case Je.BadString:case Je.BadUrl:break e;case Je.RightCurlyBracket:case Je.RightParenthesis:case Je.RightSquareBracket:if(e.balance>e.index||e.balance<a)break e;r--;break;case Je.Semicolon:if(0===r)break e;break;case Je.Delim:if(\"!\"===e.value&&0===r)break e;break;case Je.Function:case Je.LeftParenthesis:case Je.LeftSquareBracket:case Je.LeftCurlyBracket:r++}if(n++,e.balance<=a)break}while(e=t(n));return n},\"any-value\":function(e,t){if(!e)return 0;var n=e.index,r=0;e:do{switch(e.type){case Je.BadString:case Je.BadUrl:break e;case Je.RightCurlyBracket:case Je.RightParenthesis:case Je.RightSquareBracket:if(e.balance>e.index||e.balance<n)break e}if(r++,e.balance<=n)break}while(e=t(r));return r},dimension:lt(ut(null)),angle:lt(ut({deg:!0,grad:!0,rad:!0,turn:!0})),decibel:lt(ut({db:!0})),frequency:lt(ut({hz:!0,khz:!0})),flex:lt(ut({fr:!0})),length:lt(ht(ut({px:!0,mm:!0,cm:!0,in:!0,pt:!0,pc:!0,q:!0,em:!0,ex:!0,ch:!0,rem:!0,vh:!0,vw:!0,vmin:!0,vmax:!0,vm:!0}))),resolution:lt(ut({dpi:!0,dpcm:!0,dppx:!0,x:!0})),semitones:lt(ut({st:!0})),time:lt(ut({s:!0,ms:!0})),percentage:lt((function(e,t,n){return null===e||e.type!==Je.Percentage||ot(n,e.value,e.value.length-1)?0:1})),zero:ht(),number:lt((function(e,t,n){if(null===e)return 0;var r=Ze(e.value,0);return r===e.value.length||it(e.value,r)?ot(n,e.value,r)?0:1:0})),integer:lt((function(e,t,n){if(null===e||e.type!==Je.Number)return 0;for(var r=43===e.value.charCodeAt(0)||45===e.value.charCodeAt(0)?1:0;r<e.value.length;r++)if(!Qe(e.value.charCodeAt(r)))return 0;return ot(n,e.value,r)?0:1})),\"-ms-legacy-expression\":(dt=\"expression\",dt+=\"(\",function(e,t){return null!==e&&rt(e.value,dt)?st(e,t):0})},ft=function(e,t,n){var r=s(\"SyntaxError\",e);return r.input=t,r.offset=n,r.rawMessage=e,r.message=r.rawMessage+\"\\n  \"+r.input+\"\\n--\"+new Array((r.offset||r.input.length)+1).join(\"-\")+\"^\",r},mt=function(e){this.str=e,this.pos=0};mt.prototype={charCodeAt:function(e){return e<this.str.length?this.str.charCodeAt(e):0},charCode:function(){return this.charCodeAt(this.pos)},nextCharCode:function(){return this.charCodeAt(this.pos+1)},nextNonWsCode:function(e){return this.charCodeAt(this.findWsEnd(e))},findWsEnd:function(e){for(;e<this.str.length;e++){var t=this.str.charCodeAt(e);if(13!==t&&10!==t&&12!==t&&32!==t&&9!==t)break}return e},substringToPos:function(e){return this.str.substring(this.pos,this.pos=e)},eat:function(e){this.charCode()!==e&&this.error(\"Expect `\"+String.fromCharCode(e)+\"`\"),this.pos++},peek:function(){return this.pos<this.str.length?this.str.charAt(this.pos++):\"\"},error:function(e){throw new ft(e,this.str,this.pos)}};var gt=mt,bt=function(e){for(var t=\"function\"==typeof Uint32Array?new Uint32Array(128):new Array(128),n=0;n<128;n++)t[n]=e(String.fromCharCode(n))?1:0;return t}((function(e){return/[a-zA-Z0-9\\-]/.test(e)})),yt={\" \":1,\"&&\":2,\"||\":3,\"|\":4};function kt(e){return e.substringToPos(e.findWsEnd(e.pos))}function vt(e){for(var t=e.pos;t<e.str.length;t++){var n=e.str.charCodeAt(t);if(n>=128||0===bt[n])break}return e.pos===t&&e.error(\"Expect a keyword\"),e.substringToPos(t)}function wt(e){for(var t=e.pos;t<e.str.length;t++){var n=e.str.charCodeAt(t);if(n<48||n>57)break}return e.pos===t&&e.error(\"Expect a number\"),e.substringToPos(t)}function xt(e){var t=e.str.indexOf(\"'\",e.pos+1);return-1===t&&(e.pos=e.str.length,e.error(\"Expect an apostrophe\")),e.substringToPos(t+1)}function St(e){var t,n=null;return e.eat(123),t=wt(e),44===e.charCode()?(e.pos++,125!==e.charCode()&&(n=wt(e))):n=t,e.eat(125),{min:Number(t),max:n?Number(n):0}}function Ct(e,t){var n=function(e){var t=null,n=!1;switch(e.charCode()){case 42:e.pos++,t={min:0,max:0};break;case 43:e.pos++,t={min:1,max:0};break;case 63:e.pos++,t={min:0,max:1};break;case 35:e.pos++,n=!0,t=123===e.charCode()?St(e):{min:1,max:0};break;case 123:t=St(e);break;default:return null}return{type:\"Multiplier\",comma:n,min:t.min,max:t.max,term:null}}(e);return null!==n?(n.term=t,n):t}function At(e){var t=e.peek();return\"\"===t?null:{type:\"Token\",value:t}}function zt(e){var t,n=null;return e.eat(60),t=vt(e),40===e.charCode()&&41===e.nextCharCode()&&(e.pos+=2,t+=\"()\"),91===e.charCodeAt(e.findWsEnd(e.pos))&&(kt(e),n=function(e){var t=null,n=null,r=1;return e.eat(91),45===e.charCode()&&(e.peek(),r=-1),-1==r&&8734===e.charCode()?e.peek():t=r*Number(wt(e)),kt(e),e.eat(44),kt(e),8734===e.charCode()?e.peek():(r=1,45===e.charCode()&&(e.peek(),r=-1),n=r*Number(wt(e))),e.eat(93),null===t&&null===n?null:{type:\"Range\",min:t,max:n}}(e)),e.eat(62),Ct(e,{type:\"Type\",name:t,opts:n})}function Pt(e,t){function n(e,t){return{type:\"Group\",terms:e,combinator:t,disallowEmpty:!1,explicit:!1}}for(t=Object.keys(t).sort((function(e,t){return yt[e]-yt[t]}));t.length>0;){for(var r=t.shift(),a=0,i=0;a<e.length;a++){var o=e[a];\"Combinator\"===o.type&&(o.value===r?(-1===i&&(i=a-1),e.splice(a,1),a--):(-1!==i&&a-i>1&&(e.splice(i,a-i,n(e.slice(i,a),r)),a=i+1),i=-1))}-1!==i&&t.length&&e.splice(i,a-i,n(e.slice(i,a),r))}return r}function Lt(e){for(var t,n=[],r={},a=null,i=e.pos;t=Tt(e);)\"Spaces\"!==t.type&&(\"Combinator\"===t.type?(null!==a&&\"Combinator\"!==a.type||(e.pos=i,e.error(\"Unexpected combinator\")),r[t.value]=!0):null!==a&&\"Combinator\"!==a.type&&(r[\" \"]=!0,n.push({type:\"Combinator\",value:\" \"})),n.push(t),a=t,i=e.pos);return null!==a&&\"Combinator\"===a.type&&(e.pos-=i,e.error(\"Unexpected combinator\")),{type:\"Group\",terms:n,combinator:Pt(n,r)||\" \",disallowEmpty:!1,explicit:!1}}function Tt(e){var t=e.charCode();if(t<128&&1===bt[t])return function(e){var t;return t=vt(e),40===e.charCode()?(e.pos++,{type:\"Function\",name:t}):Ct(e,{type:\"Keyword\",name:t})}(e);switch(t){case 93:break;case 91:return Ct(e,function(e){var t;return e.eat(91),t=Lt(e),e.eat(93),t.explicit=!0,33===e.charCode()&&(e.pos++,t.disallowEmpty=!0),t}(e));case 60:return 39===e.nextCharCode()?function(e){var t;return e.eat(60),e.eat(39),t=vt(e),e.eat(39),e.eat(62),Ct(e,{type:\"Property\",name:t})}(e):zt(e);case 124:return{type:\"Combinator\",value:e.substringToPos(124===e.nextCharCode()?e.pos+2:e.pos+1)};case 38:return e.pos++,e.eat(38),{type:\"Combinator\",value:\"&&\"};case 44:return e.pos++,{type:\"Comma\"};case 39:return Ct(e,{type:\"String\",value:xt(e)});case 32:case 9:case 10:case 13:case 12:return{type:\"Spaces\",value:kt(e)};case 64:return(t=e.nextCharCode())<128&&1===bt[t]?(e.pos++,{type:\"AtKeyword\",name:vt(e)}):At(e);case 42:case 43:case 63:case 35:case 33:break;case 123:if((t=e.nextCharCode())<48||t>57)return At(e);break;default:return At(e)}}function Et(e){var t=new gt(e),n=Lt(t);return t.pos!==e.length&&t.error(\"Unexpected input\"),1===n.terms.length&&\"Group\"===n.terms[0].type&&(n=n.terms[0]),n}Et(\"[a&&<b>#|<'c'>*||e() f{2} /,(% g#{1,2} h{2,})]!\");var Ot=Et,Dt=function(){};function Rt(e){return\"function\"==typeof e?e:Dt}var It=function(e,t,n){var r=Dt,a=Dt;if(\"function\"==typeof t?r=t:t&&(r=Rt(t.enter),a=Rt(t.leave)),r===Dt&&a===Dt)throw new Error(\"Neither `enter` nor `leave` walker handler is set or both aren't a function\");!function e(t){switch(r.call(n,t),t.type){case\"Group\":t.terms.forEach(e);break;case\"Multiplier\":e(t.term);break;case\"Type\":case\"Property\":case\"Keyword\":case\"AtKeyword\":case\"Function\":case\"String\":case\"Token\":case\"Comma\":break;default:throw new Error(\"Unknown type: \"+t.type)}a.call(n,t)}(e)},Mt=new V,Nt={decorator:function(e){var t=null,n={len:0,node:null},r=[n],a=\"\";return{children:e.children,node:function(n){var r=t;t=n,e.node.call(this,n),t=r},chunk:function(e){a+=e,n.node!==t?r.push({len:e.length,node:t}):n.len+=e.length},result:function(){return Bt(a,r)}}}};function Bt(e,t){var n=[],r=0,a=0,i=t?t[a].node:null;for(Se(e,Mt);!Mt.eof;){if(t)for(;a<t.length&&r+t[a].len<=Mt.tokenStart;)r+=t[a++].len,i=t[a].node;n.push({type:Mt.tokenType,value:Mt.getTokenValue(),index:Mt.tokenIndex,balance:Mt.balance[Mt.tokenIndex],node:i}),Mt.next()}return n}var jt={type:\"Match\"},_t={type:\"Mismatch\"},qt={type:\"DisallowEmpty\"};function Wt(e,t,n){return t===jt&&n===_t||e===jt&&t===jt&&n===jt?e:(\"If\"===e.type&&e.else===_t&&t===jt&&(t=e.then,e=e.match),{type:\"If\",match:e,then:t,else:n})}function Ft(e){return e.length>2&&40===e.charCodeAt(e.length-2)&&41===e.charCodeAt(e.length-1)}function Ut(e){return\"Keyword\"===e.type||\"AtKeyword\"===e.type||\"Function\"===e.type||\"Type\"===e.type&&Ft(e.name)}function Yt(e){if(\"function\"==typeof e)return{type:\"Generic\",fn:e};switch(e.type){case\"Group\":var t=function e(t,n,r){switch(t){case\" \":for(var a=jt,i=n.length-1;i>=0;i--){a=Wt(l=n[i],a,_t)}return a;case\"|\":a=_t;var o=null;for(i=n.length-1;i>=0;i--){if(Ut(l=n[i])&&(null===o&&i>0&&Ut(n[i-1])&&(a=Wt({type:\"Enum\",map:o=Object.create(null)},jt,a)),null!==o)){var s=(Ft(l.name)?l.name.slice(0,-1):l.name).toLowerCase();if(s in o==!1){o[s]=l;continue}}o=null,a=Wt(l,jt,a)}return a;case\"&&\":if(n.length>5)return{type:\"MatchOnce\",terms:n,all:!0};for(a=_t,i=n.length-1;i>=0;i--){var l=n[i];c=n.length>1?e(t,n.filter((function(e){return e!==l})),!1):jt,a=Wt(l,c,a)}return a;case\"||\":if(n.length>5)return{type:\"MatchOnce\",terms:n,all:!1};for(a=r?jt:_t,i=n.length-1;i>=0;i--){var c;l=n[i];c=n.length>1?e(t,n.filter((function(e){return e!==l})),!0):jt,a=Wt(l,c,a)}return a}}(e.combinator,e.terms.map(Yt),!1);return e.disallowEmpty&&(t=Wt(t,qt,_t)),t;case\"Multiplier\":return function(e){var t=jt,n=Yt(e.term);if(0===e.max)n=Wt(n,qt,_t),(t=Wt(n,null,_t)).then=Wt(jt,jt,t),e.comma&&(t.then.else=Wt({type:\"Comma\",syntax:e},t,_t));else for(var r=e.min||1;r<=e.max;r++)e.comma&&t!==jt&&(t=Wt({type:\"Comma\",syntax:e},t,_t)),t=Wt(n,Wt(jt,jt,t),_t);if(0===e.min)t=Wt(jt,jt,t);else for(r=0;r<e.min-1;r++)e.comma&&t!==jt&&(t=Wt({type:\"Comma\",syntax:e},t,_t)),t=Wt(n,t,_t);return t}(e);case\"Type\":case\"Property\":return{type:e.type,name:e.name,syntax:e};case\"Keyword\":return{type:e.type,name:e.name.toLowerCase(),syntax:e};case\"AtKeyword\":return{type:e.type,name:\"@\"+e.name.toLowerCase(),syntax:e};case\"Function\":return{type:e.type,name:e.name.toLowerCase()+\"(\",syntax:e};case\"String\":return 3===e.value.length?{type:\"Token\",value:e.value.charAt(1),syntax:e}:{type:e.type,value:e.value.substr(1,e.value.length-2).replace(/\\\\'/g,\"'\"),syntax:e};case\"Token\":return{type:e.type,value:e.value,syntax:e};case\"Comma\":return{type:e.type,syntax:e};default:throw new Error(\"Unknown node type:\",e.type)}}var Ht=jt,Vt=_t,Kt=qt,Gt=function(e,t){return\"string\"==typeof e&&(e=Ot(e)),{type:\"MatchGraph\",match:Yt(e),syntax:t||null,source:e}},$t=Object.prototype.hasOwnProperty,Qt=Ht,Xt=Vt,Zt=Kt,Jt=d.TYPE;function en(e){for(var t=null,n=null,r=e;null!==r;)n=r.prev,r.prev=t,t=r,r=n;return t}function tn(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r>=65&&r<=90&&(r|=32),r!==t.charCodeAt(n))return!1}return!0}function nn(e){return null===e||(e.type===Jt.Comma||e.type===Jt.Function||e.type===Jt.LeftParenthesis||e.type===Jt.LeftSquareBracket||e.type===Jt.LeftCurlyBracket||e.type===Jt.Delim)}function rn(e){return null===e||(e.type===Jt.RightParenthesis||e.type===Jt.RightSquareBracket||e.type===Jt.RightCurlyBracket||e.type===Jt.Delim)}function an(e,t,n){function r(){do{b++,g=b<e.length?e[b]:null}while(null!==g&&(g.type===Jt.WhiteSpace||g.type===Jt.Comment))}function a(t){var n=b+t;return n<e.length?e[n]:null}function i(e,t){return{nextState:e,matchStack:k,syntaxStack:u,thenStack:h,tokenIndex:b,prev:t}}function o(e){h={nextState:e,matchStack:k,syntaxStack:u,prev:h}}function s(e){d=i(e,d)}function l(){k={type:1,syntax:t.syntax,token:g,prev:k},r(),p=null,b>y&&(y=b)}function c(){k=2===k.type?k.prev:{type:3,syntax:u.syntax,token:k.token,prev:k},u=u.prev}var u=null,h=null,d=null,p=null,f=0,m=null,g=null,b=-1,y=0,k={type:0,syntax:null,token:null,prev:null};for(r();null===m&&++f<15e3;)switch(t.type){case\"Match\":if(null===h){if(null!==g&&(b!==e.length-1||\"\\\\0\"!==g.value&&\"\\\\9\"!==g.value)){t=Xt;break}m=\"Match\";break}if((t=h.nextState)===Zt){if(h.matchStack===k){t=Xt;break}t=Qt}for(;h.syntaxStack!==u;)c();h=h.prev;break;case\"Mismatch\":if(null!==p&&!1!==p)(null===d||b>d.tokenIndex)&&(d=p,p=!1);else if(null===d){m=\"Mismatch\";break}t=d.nextState,h=d.thenStack,u=d.syntaxStack,k=d.matchStack,b=d.tokenIndex,g=b<e.length?e[b]:null,d=d.prev;break;case\"MatchGraph\":t=t.match;break;case\"If\":t.else!==Xt&&s(t.else),t.then!==Qt&&o(t.then),t=t.match;break;case\"MatchOnce\":t={type:\"MatchOnceBuffer\",syntax:t,index:0,mask:0};break;case\"MatchOnceBuffer\":var v=t.syntax.terms;if(t.index===v.length){if(0===t.mask||t.syntax.all){t=Xt;break}t=Qt;break}if(t.mask===(1<<v.length)-1){t=Qt;break}for(;t.index<v.length;t.index++){var w=1<<t.index;if(0==(t.mask&w)){s(t),o({type:\"AddMatchOnce\",syntax:t.syntax,mask:t.mask|w}),t=v[t.index++];break}}break;case\"AddMatchOnce\":t={type:\"MatchOnceBuffer\",syntax:t.syntax,index:0,mask:t.mask};break;case\"Enum\":if(null!==g)if(-1!==(z=g.value.toLowerCase()).indexOf(\"\\\\\")&&(z=z.replace(/\\\\[09].*$/,\"\")),$t.call(t.map,z)){t=t.map[z];break}t=Xt;break;case\"Generic\":var x=null!==u?u.opts:null,S=b+Math.floor(t.fn(g,a,x));if(!isNaN(S)&&S>b){for(;b<S;)l();t=Qt}else t=Xt;break;case\"Type\":case\"Property\":var C=\"Type\"===t.type?\"types\":\"properties\",A=$t.call(n,C)?n[C][t.name]:null;if(!A||!A.match)throw new Error(\"Bad syntax reference: \"+(\"Type\"===t.type?\"<\"+t.name+\">\":\"<'\"+t.name+\"'>\"));if(!1!==p&&null!==g&&\"Type\"===t.type)if(\"custom-ident\"===t.name&&g.type===Jt.Ident||\"length\"===t.name&&\"0\"===g.value){null===p&&(p=i(t,d)),t=Xt;break}u={syntax:t.syntax,opts:t.syntax.opts||null!==u&&u.opts||null,prev:u},k={type:2,syntax:t.syntax,token:k.token,prev:k},t=A.match;break;case\"Keyword\":var z=t.name;if(null!==g){var P=g.value;if(-1!==P.indexOf(\"\\\\\")&&(P=P.replace(/\\\\[09].*$/,\"\")),tn(P,z)){l(),t=Qt;break}}t=Xt;break;case\"AtKeyword\":case\"Function\":if(null!==g&&tn(g.value,t.name)){l(),t=Qt;break}t=Xt;break;case\"Token\":if(null!==g&&g.value===t.value){l(),t=Qt;break}t=Xt;break;case\"Comma\":null!==g&&g.type===Jt.Comma?nn(k.token)?t=Xt:(l(),t=rn(g)?Xt:Qt):t=nn(k.token)||rn(g)?Qt:Xt;break;case\"String\":var L=\"\";for(S=b;S<e.length&&L.length<t.value.length;S++)L+=e[S].value;if(tn(L,t.value)){for(;b<S;)l();t=Qt}else t=Xt;break;default:throw new Error(\"Unknown node type: \"+t.type)}switch(f,m){case null:console.warn(\"[csstree-match] BREAK after 15000 iterations\"),m=\"Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)\",k=null;break;case\"Match\":for(;null!==u;)c();break;default:k=null}return{tokens:e,reason:m,iterations:f,match:k,longestMatch:y}}var on=function(e,t,n){var r=an(e,t,n||{});if(null===r.match)return r;var a=r.match,i=r.match={syntax:t.syntax||null,match:[]},o=[i];for(a=en(a).prev;null!==a;){switch(a.type){case 2:i.match.push(i={syntax:a.syntax,match:[]}),o.push(i);break;case 3:o.pop(),i=o[o.length-1];break;default:i.match.push({syntax:a.syntax||null,token:a.token.value,node:a.token.node})}a=a.prev}return r};function sn(e){function t(e){return null!==e&&(\"Type\"===e.type||\"Property\"===e.type||\"Keyword\"===e.type)}var n=null;return null!==this.matched&&function r(a){if(Array.isArray(a.match)){for(var i=0;i<a.match.length;i++)if(r(a.match[i]))return t(a.syntax)&&n.unshift(a.syntax),!0}else if(a.node===e)return n=t(a.syntax)?[a.syntax]:[],!0;return!1}(this.matched),n}function ln(e,t,n){var r=sn.call(e,t);return null!==r&&r.some(n)}var cn={getTrace:sn,isType:function(e,t){return ln(this,e,(function(e){return\"Type\"===e.type&&e.name===t}))},isProperty:function(e,t){return ln(this,e,(function(e){return\"Property\"===e.type&&e.name===t}))},isKeyword:function(e){return ln(this,e,(function(e){return\"Keyword\"===e.type}))}};var un={matchFragments:function(e,t,n,r,a){var i=[];return null!==n.matched&&function n(s){if(null!==s.syntax&&s.syntax.type===r&&s.syntax.name===a){var l=function e(t){return\"node\"in t?t.node:e(t.match[0])}(s),c=function e(t){return\"node\"in t?t.node:e(t.match[t.match.length-1])}(s);e.syntax.walk(t,(function(e,t,n){if(e===l){var r=new o;do{if(r.appendData(t.data),t.data===c)break;t=t.next}while(null!==t);i.push({parent:n,nodes:r})}}))}Array.isArray(s.match)&&s.match.forEach(n)}(n.matched),i}},hn=Object.prototype.hasOwnProperty;function dn(e){return\"number\"==typeof e&&isFinite(e)&&Math.floor(e)===e&&e>=0}function pn(e){return Boolean(e)&&dn(e.offset)&&dn(e.line)&&dn(e.column)}function fn(e,t){return function(n,r){if(!n||n.constructor!==Object)return r(n,\"Type of node should be an Object\");for(var a in n){var i=!0;if(!1!==hn.call(n,a)){if(\"type\"===a)n.type!==e&&r(n,\"Wrong node type `\"+n.type+\"`, expected `\"+e+\"`\");else if(\"loc\"===a){if(null===n.loc)continue;if(n.loc&&n.loc.constructor===Object)if(\"string\"!=typeof n.loc.source)a+=\".source\";else if(pn(n.loc.start)){if(pn(n.loc.end))continue;a+=\".end\"}else a+=\".start\";i=!1}else if(t.hasOwnProperty(a)){var s=0;for(i=!1;!i&&s<t[a].length;s++){var l=t[a][s];switch(l){case String:i=\"string\"==typeof n[a];break;case Boolean:i=\"boolean\"==typeof n[a];break;case null:i=null===n[a];break;default:\"string\"==typeof l?i=n[a]&&n[a].type===l:Array.isArray(l)&&(i=n[a]instanceof o)}}}else r(n,\"Unknown field `\"+a+\"` for \"+e+\" node type\");i||r(n,\"Bad value for `\"+e+\".\"+a+\"`\")}}for(var a in t)hn.call(t,a)&&!1===hn.call(n,a)&&r(n,\"Field `\"+e+\".\"+a+\"` is missed\")}}function mn(e,t){var n=t.structure,r={type:String,loc:!0},a={type:'\"'+e+'\"'};for(var i in n)if(!1!==hn.call(n,i)){for(var o=[],s=r[i]=Array.isArray(n[i])?n[i].slice():[n[i]],l=0;l<s.length;l++){var c=s[l];if(c===String||c===Boolean)o.push(c.name);else if(null===c)o.push(\"null\");else if(\"string\"==typeof c)o.push(\"<\"+c+\">\");else{if(!Array.isArray(c))throw new Error(\"Wrong value `\"+c+\"` in `\"+e+\".\"+i+\"` structure definition\");o.push(\"List\")}}a[i]=o.join(\" | \")}return{docs:a,check:fn(e,r)}}var gn=X,bn=Z,yn=Gt,kn=on,vn=function(e){var t={};if(e.node)for(var n in e.node)if(hn.call(e.node,n)){var r=e.node[n];if(!r.structure)throw new Error(\"Missed `structure` field in `\"+n+\"` node type definition\");t[n]=mn(n,r)}return t},wn=yn(\"inherit | initial | unset\"),xn=yn(\"inherit | initial | unset | <-ms-legacy-expression>\");function Sn(e,t,n){var r={};for(var a in e)e[a].syntax&&(r[a]=n?e[a].syntax:$(e[a].syntax,{compact:t}));return r}function Cn(e,t,n){return{matched:e,iterations:n,error:t,getTrace:cn.getTrace,isType:cn.isType,isProperty:cn.isProperty,isKeyword:cn.isKeyword}}function An(e,t,n,r){var a,i=function(e,t){return\"string\"==typeof e?Bt(e,null):t.generate(e,Nt)}(n,e.syntax);return function(e){for(var t=0;t<e.length;t++)if(\"var(\"===e[t].value.toLowerCase())return!0;return!1}(i)?Cn(null,new Error(\"Matching for a tree with var() is not supported\")):(r&&(a=kn(i,e.valueCommonSyntax,e)),r&&a.match||(a=kn(i,t.match,e)).match?Cn(a.match,null,a.iterations):Cn(null,new bn(a.reason,t.syntax,n,a),a.iterations))}var zn=function(e,t,n){if(this.valueCommonSyntax=wn,this.syntax=t,this.generic=!1,this.atrules={},this.properties={},this.types={},this.structure=n||vn(e),e){if(e.types)for(var r in e.types)this.addType_(r,e.types[r]);if(e.generic)for(var r in this.generic=!0,pt)this.addType_(r,pt[r]);if(e.atrules)for(var r in e.atrules)this.addAtrule_(r,e.atrules[r]);if(e.properties)for(var r in e.properties)this.addProperty_(r,e.properties[r])}};zn.prototype={structure:{},checkStructure:function(e){function t(e,t){r.push({node:e,message:t})}var n=this.structure,r=[];return this.syntax.walk(e,(function(e){n.hasOwnProperty(e.type)?n[e.type].check(e,t):t(e,\"Unknown node type `\"+e.type+\"`\")})),!!r.length&&r},createDescriptor:function(e,t,n){var r={type:t,name:n},a={type:t,name:n,syntax:null,match:null};return\"function\"==typeof e?a.match=yn(e,r):(\"string\"==typeof e?Object.defineProperty(a,\"syntax\",{get:function(){return Object.defineProperty(a,\"syntax\",{value:Ot(e)}),a.syntax}}):a.syntax=e,Object.defineProperty(a,\"match\",{get:function(){return Object.defineProperty(a,\"match\",{value:yn(a.syntax,r)}),a.match}})),a},addAtrule_:function(e,t){this.atrules[e]={prelude:t.prelude?this.createDescriptor(t.prelude,\"AtrulePrelude\",e):null,descriptors:t.descriptors?Object.keys(t.descriptors).reduce((e,n)=>(e[n]=this.createDescriptor(t.descriptors[n],\"AtruleDescriptor\",n),e),{}):null}},addProperty_:function(e,t){this.properties[e]=this.createDescriptor(t,\"Property\",e)},addType_:function(e,t){this.types[e]=this.createDescriptor(t,\"Type\",e),t===pt[\"-ms-legacy-expression\"]&&(this.valueCommonSyntax=xn)},matchAtrulePrelude:function(e,t){var n=ae.keyword(e),r=n.vendor?this.getAtrulePrelude(n.name)||this.getAtrulePrelude(n.basename):this.getAtrulePrelude(n.name);return r?An(this,r,t,!0):n.basename in this.atrules?Cn(null,new Error(\"At-rule `\"+e+\"` should not contain a prelude\")):Cn(null,new gn(\"Unknown at-rule\",e))},matchAtruleDescriptor:function(e,t,n){var r=ae.keyword(e),a=ae.keyword(t),i=r.vendor?this.atrules[r.name]||this.atrules[r.basename]:this.atrules[r.name];if(!i)return Cn(null,new gn(\"Unknown at-rule\",e));if(!i.descriptors)return Cn(null,new Error(\"At-rule `\"+e+\"` has no known descriptors\"));var o=a.vendor?i.descriptors[a.name]||i.descriptors[a.basename]:i.descriptors[a.name];return o?An(this,o,n,!0):Cn(null,new gn(\"Unknown at-rule descriptor\",t))},matchDeclaration:function(e){return\"Declaration\"!==e.type?Cn(null,new Error(\"Not a Declaration node\")):this.matchProperty(e.property,e.value)},matchProperty:function(e,t){var n=ae.property(e);if(n.custom)return Cn(null,new Error(\"Lexer matching doesn't applicable for custom properties\"));var r=n.vendor?this.getProperty(n.name)||this.getProperty(n.basename):this.getProperty(n.name);return r?An(this,r,t,!0):Cn(null,new gn(\"Unknown property\",e))},matchType:function(e,t){var n=this.getType(e);return n?An(this,n,t,!1):Cn(null,new gn(\"Unknown type\",e))},match:function(e,t){return\"string\"==typeof e||e&&e.type?(\"string\"!=typeof e&&e.match||(e=this.createDescriptor(e,\"Type\",\"anonymous\")),An(this,e,t,!1)):Cn(null,new gn(\"Bad syntax\"))},findValueFragments:function(e,t,n,r){return un.matchFragments(this,t,this.matchProperty(e,t),n,r)},findDeclarationValueFragments:function(e,t,n){return un.matchFragments(this,e.value,this.matchDeclaration(e),t,n)},findAllFragments:function(e,t,n){var r=[];return this.syntax.walk(e,{visit:\"Declaration\",enter:function(e){r.push.apply(r,this.findDeclarationValueFragments(e,t,n))}.bind(this)}),r},getAtrulePrelude:function(e){return this.atrules.hasOwnProperty(e)?this.atrules[e].prelude:null},getAtruleDescriptor:function(e,t){return this.atrules.hasOwnProperty(e)&&this.atrules.declarators&&this.atrules[e].declarators[t]||null},getProperty:function(e){return this.properties.hasOwnProperty(e)?this.properties[e]:null},getType:function(e){return this.types.hasOwnProperty(e)?this.types[e]:null},validate:function(){function e(r,a,i,o){if(i.hasOwnProperty(a))return i[a];i[a]=!1,null!==o.syntax&&It(o.syntax,(function(o){if(\"Type\"===o.type||\"Property\"===o.type){var s=\"Type\"===o.type?r.types:r.properties,l=\"Type\"===o.type?t:n;s.hasOwnProperty(o.name)&&!e(r,o.name,l,s[o.name])||(i[a]=!0)}}),this)}var t={},n={};for(var r in this.types)e(this,r,t,this.types[r]);for(var r in this.properties)e(this,r,n,this.properties[r]);return t=Object.keys(t).filter((function(e){return t[e]})),n=Object.keys(n).filter((function(e){return n[e]})),t.length||n.length?{types:t,properties:n}:null},dump:function(e,t){return{generic:this.generic,types:Sn(this.types,!t,e),properties:Sn(this.properties,!t,e)}},toString:function(){return JSON.stringify(this.dump())}};var Pn=zn,Ln={SyntaxError:ft,parse:Ot,generate:$,walk:It},Tn=Se.isBOM;var En=function(){this.lines=null,this.columns=null,this.linesAndColumnsComputed=!1};En.prototype={setSource:function(e,t,n,r){this.source=e,this.startOffset=void 0===t?0:t,this.startLine=void 0===n?1:n,this.startColumn=void 0===r?1:r,this.linesAndColumnsComputed=!1},ensureLinesAndColumnsComputed:function(){this.linesAndColumnsComputed||(!function(e,t){for(var n=t.length,r=oe(e.lines,n),a=e.startLine,i=oe(e.columns,n),o=e.startColumn,s=t.length>0?Tn(t.charCodeAt(0)):0;s<n;s++){var l=t.charCodeAt(s);r[s]=a,i[s]=o++,10!==l&&13!==l&&12!==l||(13===l&&s+1<n&&10===t.charCodeAt(s+1)&&(r[++s]=a,i[s]=o),a++,o=1)}r[s]=a,i[s]=o,e.lines=r,e.columns=i}(this,this.source),this.linesAndColumnsComputed=!0)},getLocation:function(e,t){return this.ensureLinesAndColumnsComputed(),{source:t,offset:this.startOffset+e,line:this.lines[e],column:this.columns[e]}},getLocationRange:function(e,t,n){return this.ensureLinesAndColumnsComputed(),{source:n,start:{offset:this.startOffset+e,line:this.lines[e],column:this.columns[e]},end:{offset:this.startOffset+t,line:this.lines[t],column:this.columns[t]}}}};var On=En,Dn=Se.TYPE,Rn=Dn.WhiteSpace,In=Dn.Comment,Mn=function(e){var t=this.createList(),n=null,r={recognizer:e,space:null,ignoreWS:!1,ignoreWSAfter:!1};for(this.scanner.skipSC();!this.scanner.eof;){switch(this.scanner.tokenType){case In:this.scanner.next();continue;case Rn:r.ignoreWS?this.scanner.next():r.space=this.WhiteSpace();continue}if(void 0===(n=e.getNode.call(this,r)))break;null!==r.space&&(t.push(r.space),r.space=null),t.push(n),r.ignoreWSAfter?(r.ignoreWSAfter=!1,r.ignoreWS=!0):r.ignoreWS=!1}return t},Nn=j.findWhiteSpaceStart,Bn=function(){},jn=d.TYPE,_n=d.NAME,qn=jn.WhiteSpace,Wn=jn.Ident,Fn=jn.Function,Un=jn.Url,Yn=jn.Hash,Hn=jn.Percentage,Vn=jn.Number;function Kn(e){return function(){return this[e]()}}var Gn=function(e){var t={scanner:new V,locationMap:new On,filename:\"<unknown>\",needPositions:!1,onParseError:Bn,onParseErrorThrow:!1,parseAtrulePrelude:!0,parseRulePrelude:!0,parseValue:!0,parseCustomProperty:!1,readSequence:Mn,createList:function(){return new o},createSingleNodeList:function(e){return(new o).appendData(e)},getFirstListNode:function(e){return e&&e.first()},getLastListNode:function(e){return e.last()},parseWithFallback:function(e,t){var n=this.scanner.tokenIndex;try{return e.call(this)}catch(e){if(this.onParseErrorThrow)throw e;var r=t.call(this,n);return this.onParseErrorThrow=!0,this.onParseError(e,r),this.onParseErrorThrow=!1,r}},lookupNonWSType:function(e){do{var t=this.scanner.lookupType(e++);if(t!==qn)return t}while(0!==t);return 0},eat:function(e){if(this.scanner.tokenType!==e){var t=this.scanner.tokenStart,n=_n[e]+\" is expected\";switch(e){case Wn:this.scanner.tokenType===Fn||this.scanner.tokenType===Un?(t=this.scanner.tokenEnd-1,n=\"Identifier is expected but function found\"):n=\"Identifier is expected\";break;case Yn:this.scanner.isDelim(35)&&(this.scanner.next(),t++,n=\"Name is expected\");break;case Hn:this.scanner.tokenType===Vn&&(t=this.scanner.tokenEnd,n=\"Percent sign is expected\");break;default:this.scanner.source.charCodeAt(this.scanner.tokenStart)===e&&(t+=1)}this.error(n,t)}this.scanner.next()},consume:function(e){var t=this.scanner.getTokenValue();return this.eat(e),t},consumeFunctionName:function(){var e=this.scanner.source.substring(this.scanner.tokenStart,this.scanner.tokenEnd-1);return this.eat(Fn),e},getLocation:function(e,t){return this.needPositions?this.locationMap.getLocationRange(e,t,this.filename):null},getLocationFromList:function(e){if(this.needPositions){var t=this.getFirstListNode(e),n=this.getLastListNode(e);return this.locationMap.getLocationRange(null!==t?t.loc.start.offset-this.locationMap.startOffset:this.scanner.tokenStart,null!==n?n.loc.end.offset-this.locationMap.startOffset:this.scanner.tokenStart,this.filename)}return null},error:function(e,t){var n=void 0!==t&&t<this.scanner.source.length?this.locationMap.getLocation(t):this.scanner.eof?this.locationMap.getLocation(Nn(this.scanner.source,this.scanner.source.length-1)):this.locationMap.getLocation(this.scanner.tokenStart);throw new c(e||\"Unexpected input\",this.scanner.source,n.offset,n.line,n.column)}};for(var n in e=function(e){var t={context:{},scope:{},atrule:{},pseudo:{}};if(e.parseContext)for(var n in e.parseContext)switch(typeof e.parseContext[n]){case\"function\":t.context[n]=e.parseContext[n];break;case\"string\":t.context[n]=Kn(e.parseContext[n])}if(e.scope)for(var n in e.scope)t.scope[n]=e.scope[n];if(e.atrule)for(var n in e.atrule){var r=e.atrule[n];r.parse&&(t.atrule[n]=r.parse)}if(e.pseudo)for(var n in e.pseudo){var a=e.pseudo[n];a.parse&&(t.pseudo[n]=a.parse)}if(e.node)for(var n in e.node)t[n]=e.node[n].parse;return t}(e||{}))t[n]=e[n];return function(e,n){var r,a=(n=n||{}).context||\"default\";if(Se(e,t.scanner),t.locationMap.setSource(e,n.offset,n.line,n.column),t.filename=n.filename||\"<unknown>\",t.needPositions=Boolean(n.positions),t.onParseError=\"function\"==typeof n.onParseError?n.onParseError:Bn,t.onParseErrorThrow=!1,t.parseAtrulePrelude=!(\"parseAtrulePrelude\"in n)||Boolean(n.parseAtrulePrelude),t.parseRulePrelude=!(\"parseRulePrelude\"in n)||Boolean(n.parseRulePrelude),t.parseValue=!(\"parseValue\"in n)||Boolean(n.parseValue),t.parseCustomProperty=\"parseCustomProperty\"in n&&Boolean(n.parseCustomProperty),!t.context.hasOwnProperty(a))throw new Error(\"Unknown context `\"+a+\"`\");return r=t.context[a].call(t,n),t.scanner.eof||t.error(),r}},$n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\"),Qn=function(e){if(0<=e&&e<$n.length)return $n[e];throw new TypeError(\"Must be between 0 and 63: \"+e)};var Xn=function(e){var t,n=\"\",r=function(e){return e<0?1+(-e<<1):0+(e<<1)}(e);do{t=31&r,(r>>>=5)>0&&(t|=32),n+=Qn(t)}while(r>0);return n};function Zn(e){return e&&e.default||e}var Jn=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){t.getArg=function(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('\"'+t+'\" is a required argument.')};var n=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/,r=/^data:.+\\,.+$/;function a(e){var t=e.match(n);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function i(e){var t=\"\";return e.scheme&&(t+=e.scheme+\":\"),t+=\"//\",e.auth&&(t+=e.auth+\"@\"),e.host&&(t+=e.host),e.port&&(t+=\":\"+e.port),e.path&&(t+=e.path),t}function o(e){var n=e,r=a(e);if(r){if(!r.path)return e;n=r.path}for(var o,s=t.isAbsolute(n),l=n.split(/\\/+/),c=0,u=l.length-1;u>=0;u--)\".\"===(o=l[u])?l.splice(u,1):\"..\"===o?c++:c>0&&(\"\"===o?(l.splice(u+1,c),c=0):(l.splice(u,2),c--));return\"\"===(n=l.join(\"/\"))&&(n=s?\"/\":\".\"),r?(r.path=n,i(r)):n}function s(e,t){\"\"===e&&(e=\".\"),\"\"===t&&(t=\".\");var n=a(t),s=a(e);if(s&&(e=s.path||\"/\"),n&&!n.scheme)return s&&(n.scheme=s.scheme),i(n);if(n||t.match(r))return t;if(s&&!s.host&&!s.path)return s.host=t,i(s);var l=\"/\"===t.charAt(0)?t:o(e.replace(/\\/+$/,\"\")+\"/\"+t);return s?(s.path=l,i(s)):l}t.urlParse=a,t.urlGenerate=i,t.normalize=o,t.join=s,t.isAbsolute=function(e){return\"/\"===e.charAt(0)||n.test(e)},t.relative=function(e,t){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var n=0;0!==t.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(r<0)return t;if((e=e.slice(0,r)).match(/^([^\\/]+:\\/)?\\/*$/))return t;++n}return Array(n+1).join(\"../\")+t.substr(e.length+1)};var l=!(\"__proto__\"in Object.create(null));function c(e){return e}function u(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t){return e===t?0:null===e?1:null===t?-1:e>t?1:-1}t.toSetString=l?c:function(e){return u(e)?\"$\"+e:e},t.fromSetString=l?c:function(e){return u(e)?e.slice(1):e},t.compareByOriginalPositions=function(e,t,n){var r=h(e.source,t.source);return 0!==r||0!==(r=e.originalLine-t.originalLine)||0!==(r=e.originalColumn-t.originalColumn)||n||0!==(r=e.generatedColumn-t.generatedColumn)||0!==(r=e.generatedLine-t.generatedLine)?r:h(e.name,t.name)},t.compareByGeneratedPositionsDeflated=function(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r||0!==(r=e.generatedColumn-t.generatedColumn)||n||0!==(r=h(e.source,t.source))||0!==(r=e.originalLine-t.originalLine)||0!==(r=e.originalColumn-t.originalColumn)?r:h(e.name,t.name)},t.compareByGeneratedPositionsInflated=function(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n||0!==(n=e.generatedColumn-t.generatedColumn)||0!==(n=h(e.source,t.source))||0!==(n=e.originalLine-t.originalLine)||0!==(n=e.originalColumn-t.originalColumn)?n:h(e.name,t.name)},t.parseSourceMapInput=function(e){return JSON.parse(e.replace(/^\\)]}'[^\\n]*\\n/,\"\"))},t.computeSourceURL=function(e,t,n){if(t=t||\"\",e&&(\"/\"!==e[e.length-1]&&\"/\"!==t[0]&&(e+=\"/\"),t=e+t),n){var r=a(n);if(!r)throw new Error(\"sourceMapURL could not be parsed\");if(r.path){var l=r.path.lastIndexOf(\"/\");l>=0&&(r.path=r.path.substring(0,l+1))}t=s(i(r),t)}return o(t)}})),er=(Jn.getArg,Jn.urlParse,Jn.urlGenerate,Jn.normalize,Jn.join,Jn.isAbsolute,Jn.relative,Jn.toSetString,Jn.fromSetString,Jn.compareByOriginalPositions,Jn.compareByGeneratedPositionsDeflated,Jn.compareByGeneratedPositionsInflated,Jn.parseSourceMapInput,Jn.computeSourceURL,Object.prototype.hasOwnProperty),tr=\"undefined\"!=typeof Map;function nr(){this._array=[],this._set=tr?new Map:Object.create(null)}nr.fromArray=function(e,t){for(var n=new nr,r=0,a=e.length;r<a;r++)n.add(e[r],t);return n},nr.prototype.size=function(){return tr?this._set.size:Object.getOwnPropertyNames(this._set).length},nr.prototype.add=function(e,t){var n=tr?e:Jn.toSetString(e),r=tr?this.has(e):er.call(this._set,n),a=this._array.length;r&&!t||this._array.push(e),r||(tr?this._set.set(e,a):this._set[n]=a)},nr.prototype.has=function(e){if(tr)return this._set.has(e);var t=Jn.toSetString(e);return er.call(this._set,t)},nr.prototype.indexOf=function(e){if(tr){var t=this._set.get(e);if(t>=0)return t}else{var n=Jn.toSetString(e);if(er.call(this._set,n))return this._set[n]}throw new Error('\"'+e+'\" is not in the set.')},nr.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error(\"No element indexed by \"+e)},nr.prototype.toArray=function(){return this._array.slice()};var rr={ArraySet:nr};function ar(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}ar.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t)},ar.prototype.add=function(e){var t,n,r,a,i,o;t=this._last,n=e,r=t.generatedLine,a=n.generatedLine,i=t.generatedColumn,o=n.generatedColumn,a>r||a==r&&o>=i||Jn.compareByGeneratedPositionsInflated(t,n)<=0?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},ar.prototype.toArray=function(){return this._sorted||(this._array.sort(Jn.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};var ir=rr.ArraySet,or={MappingList:ar}.MappingList;function sr(e){e||(e={}),this._file=Jn.getArg(e,\"file\",null),this._sourceRoot=Jn.getArg(e,\"sourceRoot\",null),this._skipValidation=Jn.getArg(e,\"skipValidation\",!1),this._sources=new ir,this._names=new ir,this._mappings=new or,this._sourcesContents=null}sr.prototype._version=3,sr.fromSourceMap=function(e){var t=e.sourceRoot,n=new sr({file:e.file,sourceRoot:t});return e.eachMapping((function(e){var r={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(r.source=e.source,null!=t&&(r.source=Jn.relative(t,r.source)),r.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(r.name=e.name)),n.addMapping(r)})),e.sources.forEach((function(r){var a=r;null!==t&&(a=Jn.relative(t,r)),n._sources.has(a)||n._sources.add(a);var i=e.sourceContentFor(r);null!=i&&n.setSourceContent(r,i)})),n},sr.prototype.addMapping=function(e){var t=Jn.getArg(e,\"generated\"),n=Jn.getArg(e,\"original\",null),r=Jn.getArg(e,\"source\",null),a=Jn.getArg(e,\"name\",null);this._skipValidation||this._validateMapping(t,n,r,a),null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r)),null!=a&&(a=String(a),this._names.has(a)||this._names.add(a)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:null!=n&&n.line,originalColumn:null!=n&&n.column,source:r,name:a})},sr.prototype.setSourceContent=function(e,t){var n=e;null!=this._sourceRoot&&(n=Jn.relative(this._sourceRoot,n)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[Jn.toSetString(n)]=t):this._sourcesContents&&(delete this._sourcesContents[Jn.toSetString(n)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},sr.prototype.applySourceMap=function(e,t,n){var r=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\\'s \"file\" property. Both were omitted.');r=e.file}var a=this._sourceRoot;null!=a&&(r=Jn.relative(a,r));var i=new ir,o=new ir;this._mappings.unsortedForEach((function(t){if(t.source===r&&null!=t.originalLine){var s=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=s.source&&(t.source=s.source,null!=n&&(t.source=Jn.join(n,t.source)),null!=a&&(t.source=Jn.relative(a,t.source)),t.originalLine=s.line,t.originalColumn=s.column,null!=s.name&&(t.name=s.name))}var l=t.source;null==l||i.has(l)||i.add(l);var c=t.name;null==c||o.has(c)||o.add(c)}),this),this._sources=i,this._names=o,e.sources.forEach((function(t){var r=e.sourceContentFor(t);null!=r&&(null!=n&&(t=Jn.join(n,t)),null!=a&&(t=Jn.relative(a,t)),this.setSourceContent(t,r))}),this)},sr.prototype._validateMapping=function(e,t,n,r){if(t&&\"number\"!=typeof t.line&&\"number\"!=typeof t.column)throw new Error(\"original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.\");if((!(e&&\"line\"in e&&\"column\"in e&&e.line>0&&e.column>=0)||t||n||r)&&!(e&&\"line\"in e&&\"column\"in e&&t&&\"line\"in t&&\"column\"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n))throw new Error(\"Invalid mapping: \"+JSON.stringify({generated:e,source:n,original:t,name:r}))},sr.prototype._serializeMappings=function(){for(var e,t,n,r,a=0,i=1,o=0,s=0,l=0,c=0,u=\"\",h=this._mappings.toArray(),d=0,p=h.length;d<p;d++){if(e=\"\",(t=h[d]).generatedLine!==i)for(a=0;t.generatedLine!==i;)e+=\";\",i++;else if(d>0){if(!Jn.compareByGeneratedPositionsInflated(t,h[d-1]))continue;e+=\",\"}e+=Xn(t.generatedColumn-a),a=t.generatedColumn,null!=t.source&&(r=this._sources.indexOf(t.source),e+=Xn(r-c),c=r,e+=Xn(t.originalLine-1-s),s=t.originalLine-1,e+=Xn(t.originalColumn-o),o=t.originalColumn,null!=t.name&&(n=this._names.indexOf(t.name),e+=Xn(n-l),l=n)),u+=e}return u},sr.prototype._generateSourcesContent=function(e,t){return e.map((function(e){if(!this._sourcesContents)return null;null!=t&&(e=Jn.relative(t,e));var n=Jn.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)},sr.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},sr.prototype.toString=function(){return JSON.stringify(this.toJSON())};var lr={SourceMapGenerator:sr}.SourceMapGenerator,cr={Atrule:!0,Selector:!0,Declaration:!0},ur=Object.prototype.hasOwnProperty;function hr(e,t){var n=e.children,r=null;\"function\"!=typeof t?n.forEach(this.node,this):n.forEach((function(e){null!==r&&t.call(this,r),this.node(e),r=e}),this)}var dr=function(e){function t(e){if(!ur.call(n,e.type))throw new Error(\"Unknown node type: \"+e.type);n[e.type].call(this,e)}var n={};if(e.node)for(var r in e.node)n[r]=e.node[r].generate;return function(e,n){var r=\"\",a={children:hr,node:t,chunk:function(e){r+=e},result:function(){return r}};return n&&(\"function\"==typeof n.decorator&&(a=n.decorator(a)),n.sourceMap&&(a=function(e){var t=new lr,n=1,r=0,a={line:1,column:0},i={line:0,column:0},o=!1,s={line:1,column:0},l={generated:s},c=e.node;e.node=function(e){if(e.loc&&e.loc.start&&cr.hasOwnProperty(e.type)){var u=e.loc.start.line,h=e.loc.start.column-1;i.line===u&&i.column===h||(i.line=u,i.column=h,a.line=n,a.column=r,o&&(o=!1,a.line===s.line&&a.column===s.column||t.addMapping(l)),o=!0,t.addMapping({source:e.loc.source,original:i,generated:a}))}c.call(this,e),o&&cr.hasOwnProperty(e.type)&&(s.line=n,s.column=r)};var u=e.chunk;e.chunk=function(e){for(var t=0;t<e.length;t++)10===e.charCodeAt(t)?(n++,r=0):r++;u(e)};var h=e.result;return e.result=function(){return o&&t.addMapping(l),{css:h(),map:t}},e}(a))),a.node(e),a.result()}},pr=Object.prototype.hasOwnProperty,fr=function(){};function mr(e){return\"function\"==typeof e?e:fr}function gr(e,t){return function(n,r,a){n.type===t&&e.call(this,n,r,a)}}function br(e,t){var n=t.structure,r=[];for(var a in n)if(!1!==pr.call(n,a)){var i=n[a],o={name:a,type:!1,nullable:!1};Array.isArray(n[a])||(i=[n[a]]);for(var s=0;s<i.length;s++){var l=i[s];null===l?o.nullable=!0:\"string\"==typeof l?o.type=\"node\":Array.isArray(l)&&(o.type=\"list\")}o.type&&r.push(o)}return r.length?{context:t.walkContext,fields:r}:null}function yr(e,t){var n=e.fields.slice(),r=e.context,a=\"string\"==typeof r;return t&&n.reverse(),function(e,i,o){var s;a&&(s=i[r],i[r]=e);for(var l=0;l<n.length;l++){var c=n[l],u=e[c.name];c.nullable&&!u||(\"list\"===c.type?t?u.forEachRight(o):u.forEach(o):o(u))}a&&(i[r]=s)}}function kr(e){return{Atrule:{StyleSheet:e.StyleSheet,Atrule:e.Atrule,Rule:e.Rule,Block:e.Block},Rule:{StyleSheet:e.StyleSheet,Atrule:e.Atrule,Rule:e.Rule,Block:e.Block},Declaration:{StyleSheet:e.StyleSheet,Atrule:e.Atrule,Rule:e.Rule,Block:e.Block,DeclarationList:e.DeclarationList}}}var vr=function(e){var t=function(e){var t={};for(var n in e.node)if(pr.call(e.node,n)){var r=e.node[n];if(!r.structure)throw new Error(\"Missed `structure` field in `\"+n+\"` node type definition\");t[n]=br(0,r)}return t}(e),n={},r={};for(var a in t)pr.call(t,a)&&null!==t[a]&&(n[a]=yr(t[a],!1),r[a]=yr(t[a],!0));var i=kr(n),o=kr(r),s=function(e,a){var s=fr,l=fr,c=n,u={root:e,stylesheet:null,atrule:null,atrulePrelude:null,rule:null,selector:null,block:null,declaration:null,function:null};if(\"function\"==typeof a)s=a;else if(a&&(s=mr(a.enter),l=mr(a.leave),a.reverse&&(c=r),a.visit)){if(i.hasOwnProperty(a.visit))c=a.reverse?o[a.visit]:i[a.visit];else if(!t.hasOwnProperty(a.visit))throw new Error(\"Bad value `\"+a.visit+\"` for `visit` option (should be: \"+Object.keys(t).join(\", \")+\")\");s=gr(s,a.visit),l=gr(l,a.visit)}if(s===fr&&l===fr)throw new Error(\"Neither `enter` nor `leave` walker handler is set or both aren't a function\");if(a.reverse){var h=s;s=l,l=h}!function e(t,n,r){s.call(u,t,n,r),c.hasOwnProperty(t.type)&&c[t.type](t,u,e),l.call(u,t,n,r)}(e)};return s.find=function(e,t){var n=null;return s(e,(function(e,r,a){null===n&&t.call(this,e,r,a)&&(n=e)})),n},s.findLast=function(e,t){var n=null;return s(e,{reverse:!0,enter:function(e,r,a){null===n&&t.call(this,e,r,a)&&(n=e)}}),n},s.findAll=function(e,t){var n=[];return s(e,(function(e,r,a){t.call(this,e,r,a)&&n.push(e)})),n},s},wr=function e(t){var n={};for(var r in t){var a=t[r];a&&(Array.isArray(a)||a instanceof o?a=a.map(e):a.constructor===Object&&(a=e(a))),n[r]=a}return n},xr=Object.prototype.hasOwnProperty,Sr={generic:!0,types:{},atrules:{},properties:{},parseContext:{},scope:{},atrule:[\"parse\"],pseudo:[\"parse\"],node:[\"name\",\"structure\",\"parse\",\"generate\",\"walkContext\"]};function Cr(e){return e&&e.constructor===Object}function Ar(e){return Cr(e)?Object.assign({},e):e}function zr(e,t){for(var n in t)xr.call(t,n)&&(Cr(e[n])?zr(e[n],Ar(t[n])):e[n]=Ar(t[n]))}var Pr=function(e,t){return function e(t,n,r){for(var a in r)if(!1!==xr.call(r,a))if(!0===r[a])a in n&&xr.call(n,a)&&(t[a]=Ar(n[a]));else if(r[a]){if(Cr(r[a]))zr(i={},t[a]),zr(i,n[a]),t[a]=i;else if(Array.isArray(r[a])){var i={},o=r[a].reduce((function(e,t){return e[t]=!0,e}),{});for(var s in t[a])xr.call(t[a],s)&&(i[s]={},t[a]&&t[a][s]&&e(i[s],t[a][s],o));for(var s in n[a])xr.call(n[a],s)&&(i[s]||(i[s]={}),n[a]&&n[a][s]&&e(i[s],n[a][s],o));t[a]=i}}return t}(e,t,Sr)};function Lr(e){var t=Gn(e),n=vr(e),r=dr(e),a=function(e){return{fromPlainObject:function(t){return e(t,{enter:function(e){e.children&&e.children instanceof o==!1&&(e.children=(new o).fromArray(e.children))}}),t},toPlainObject:function(t){return e(t,{leave:function(e){e.children&&e.children instanceof o&&(e.children=e.children.toArray())}}),t}}}(n),i={List:o,SyntaxError:c,TokenStream:V,Lexer:Pn,vendorPrefix:ae.vendorPrefix,keyword:ae.keyword,property:ae.property,isCustomProperty:ae.isCustomProperty,definitionSyntax:Ln,lexer:null,createLexer:function(e){return new Pn(e,i,i.lexer.structure)},tokenize:Se,parse:t,walk:n,generate:r,find:n.find,findLast:n.findLast,findAll:n.findAll,clone:wr,fromPlainObject:a.fromPlainObject,toPlainObject:a.toPlainObject,createSyntax:function(e){return Lr(Pr({},e))},fork:function(t){var n=Pr({},e);return Lr(\"function\"==typeof t?t(n,Object.assign):Pr(n,t))}};return i.lexer=new Pn({generic:!0,types:e.types,atrules:e.atrules,properties:e.properties,node:e.node},i),i}var Tr=function(e){return Lr(Pr({},e))},Er={\"absolute-size\":\"xx-small|x-small|small|medium|large|x-large|xx-large\",\"alpha-value\":\"<number>|<percentage>\",\"angle-percentage\":\"<angle>|<percentage>\",\"angular-color-hint\":\"<angle-percentage>\",\"angular-color-stop\":\"<color>&&<color-stop-angle>?\",\"angular-color-stop-list\":\"[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>\",\"animateable-feature\":\"scroll-position|contents|<custom-ident>\",attachment:\"scroll|fixed|local\",\"attr()\":\"attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )\",\"attr-matcher\":\"['~'|'|'|'^'|'$'|'*']? '='\",\"attr-modifier\":\"i|s\",\"attribute-selector\":\"'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'\",\"auto-repeat\":\"repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )\",\"auto-track-list\":\"[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?\",\"baseline-position\":\"[first|last]? baseline\",\"basic-shape\":\"<inset()>|<circle()>|<ellipse()>|<polygon()>\",\"bg-image\":\"none|<image>\",\"bg-layer\":\"<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>\",\"bg-position\":\"[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]\",\"bg-size\":\"[<length-percentage>|auto]{1,2}|cover|contain\",\"blur()\":\"blur( <length> )\",\"blend-mode\":\"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity\",box:\"border-box|padding-box|content-box\",\"brightness()\":\"brightness( <number-percentage> )\",\"calc()\":\"calc( <calc-sum> )\",\"calc-sum\":\"<calc-product> [['+'|'-'] <calc-product>]*\",\"calc-product\":\"<calc-value> ['*' <calc-value>|'/' <number>]*\",\"calc-value\":\"<number>|<dimension>|<percentage>|( <calc-sum> )\",\"cf-final-image\":\"<image>|<color>\",\"cf-mixing-image\":\"<percentage>?&&<image>\",\"circle()\":\"circle( [<shape-radius>]? [at <position>]? )\",\"clamp()\":\"clamp( <calc-sum>#{3} )\",\"class-selector\":\"'.' <ident-token>\",\"clip-source\":\"<url>\",color:\"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>\",\"color-stop\":\"<color-stop-length>|<color-stop-angle>\",\"color-stop-angle\":\"<angle-percentage>{1,2}\",\"color-stop-length\":\"<length-percentage>{1,2}\",\"color-stop-list\":\"[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>\",combinator:\"'>'|'+'|'~'|['||']\",\"common-lig-values\":\"[common-ligatures|no-common-ligatures]\",compat:\"searchfield|textarea|push-button|button-bevel|slider-horizontal|checkbox|radio|square-button|menulist|menulist-button|listbox|meter|progress-bar\",\"composite-style\":\"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor\",\"compositing-operator\":\"add|subtract|intersect|exclude\",\"compound-selector\":\"[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!\",\"compound-selector-list\":\"<compound-selector>#\",\"complex-selector\":\"<compound-selector> [<combinator>? <compound-selector>]*\",\"complex-selector-list\":\"<complex-selector>#\",\"conic-gradient()\":\"conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )\",\"contextual-alt-values\":\"[contextual|no-contextual]\",\"content-distribution\":\"space-between|space-around|space-evenly|stretch\",\"content-list\":\"[<string>|contents|<url>|<quote>|<attr()>|counter( <ident> , <'list-style-type'>? )]+\",\"content-position\":\"center|start|end|flex-start|flex-end\",\"content-replacement\":\"<image>\",\"contrast()\":\"contrast( [<number-percentage>] )\",\"counter()\":\"counter( <custom-ident> , [<counter-style>|none]? )\",\"counter-style\":\"<counter-style-name>|symbols( )\",\"counter-style-name\":\"<custom-ident>\",\"counters()\":\"counters( <custom-ident> , <string> , [<counter-style>|none]? )\",\"cross-fade()\":\"cross-fade( <cf-mixing-image> , <cf-final-image>? )\",\"cubic-bezier-timing-function\":\"ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number> , <number> , <number> , <number> )\",\"deprecated-system-color\":\"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText\",\"discretionary-lig-values\":\"[discretionary-ligatures|no-discretionary-ligatures]\",\"display-box\":\"contents|none\",\"display-inside\":\"flow|flow-root|table|flex|grid|ruby\",\"display-internal\":\"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container\",\"display-legacy\":\"inline-block|inline-list-item|inline-table|inline-flex|inline-grid\",\"display-listitem\":\"<display-outside>?&&[flow|flow-root]?&&list-item\",\"display-outside\":\"block|inline|run-in\",\"drop-shadow()\":\"drop-shadow( <length>{2,3} <color>? )\",\"east-asian-variant-values\":\"[jis78|jis83|jis90|jis04|simplified|traditional]\",\"east-asian-width-values\":\"[full-width|proportional-width]\",\"element()\":\"element( <id-selector> )\",\"ellipse()\":\"ellipse( [<shape-radius>{2}]? [at <position>]? )\",\"ending-shape\":\"circle|ellipse\",\"env()\":\"env( <custom-ident> , <declaration-value>? )\",\"explicit-track-list\":\"[<line-names>? <track-size>]+ <line-names>?\",\"family-name\":\"<string>|<custom-ident>+\",\"feature-tag-value\":\"<string> [<integer>|on|off]?\",\"feature-type\":\"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation\",\"feature-value-block\":\"<feature-type> '{' <feature-value-declaration-list> '}'\",\"feature-value-block-list\":\"<feature-value-block>+\",\"feature-value-declaration\":\"<custom-ident> : <integer>+ ;\",\"feature-value-declaration-list\":\"<feature-value-declaration>\",\"feature-value-name\":\"<custom-ident>\",\"fill-rule\":\"nonzero|evenodd\",\"filter-function\":\"<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>\",\"filter-function-list\":\"[<filter-function>|<url>]+\",\"final-bg-layer\":\"<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>\",\"fit-content()\":\"fit-content( [<length>|<percentage>] )\",\"fixed-breadth\":\"<length-percentage>\",\"fixed-repeat\":\"repeat( [<positive-integer>] , [<line-names>? <fixed-size>]+ <line-names>? )\",\"fixed-size\":\"<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )\",\"font-stretch-absolute\":\"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>\",\"font-variant-css21\":\"[normal|small-caps]\",\"font-weight-absolute\":\"normal|bold|<number>\",\"frequency-percentage\":\"<frequency>|<percentage>\",\"general-enclosed\":\"[<function-token> <any-value> )]|( <ident> <any-value> )\",\"generic-family\":\"serif|sans-serif|cursive|fantasy|monospace|-apple-system\",\"generic-name\":\"serif|sans-serif|cursive|fantasy|monospace\",\"geometry-box\":\"<shape-box>|fill-box|stroke-box|view-box\",gradient:\"<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<-legacy-gradient>\",\"grayscale()\":\"grayscale( <number-percentage> )\",\"grid-line\":\"auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]\",\"historical-lig-values\":\"[historical-ligatures|no-historical-ligatures]\",\"hsl()\":\"hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\"hsla()\":\"hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )\",hue:\"<number>|<angle>\",\"hue-rotate()\":\"hue-rotate( <angle> )\",image:\"<url>|<image()>|<image-set()>|<element()>|<cross-fade()>|<gradient>\",\"image()\":\"image( <image-tags>? [<image-src>? , <color>?]! )\",\"image-set()\":\"image-set( <image-set-option># )\",\"image-set-option\":\"[<image>|<string>] <resolution>\",\"image-src\":\"<url>|<string>\",\"image-tags\":\"ltr|rtl\",\"inflexible-breadth\":\"<length>|<percentage>|min-content|max-content|auto\",\"inset()\":\"inset( <length-percentage>{1,4} [round <'border-radius'>]? )\",\"invert()\":\"invert( <number-percentage> )\",\"keyframes-name\":\"<custom-ident>|<string>\",\"keyframe-block\":\"<keyframe-selector># { <declaration-list> }\",\"keyframe-block-list\":\"<keyframe-block>+\",\"keyframe-selector\":\"from|to|<percentage>\",\"leader()\":\"leader( <leader-type> )\",\"leader-type\":\"dotted|solid|space|<string>\",\"length-percentage\":\"<length>|<percentage>\",\"line-names\":\"'[' <custom-ident>* ']'\",\"line-name-list\":\"[<line-names>|<name-repeat>]+\",\"line-style\":\"none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset\",\"line-width\":\"<length>|thin|medium|thick\",\"linear-color-hint\":\"<length-percentage>\",\"linear-color-stop\":\"<color> <color-stop-length>?\",\"linear-gradient()\":\"linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )\",\"mask-layer\":\"<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>\",\"mask-position\":\"[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?\",\"mask-reference\":\"none|<image>|<mask-source>\",\"mask-source\":\"<url>\",\"masking-mode\":\"alpha|luminance|match-source\",\"matrix()\":\"matrix( <number>#{6} )\",\"matrix3d()\":\"matrix3d( <number>#{16} )\",\"max()\":\"max( <calc-sum># )\",\"media-and\":\"<media-in-parens> [and <media-in-parens>]+\",\"media-condition\":\"<media-not>|<media-and>|<media-or>|<media-in-parens>\",\"media-condition-without-or\":\"<media-not>|<media-and>|<media-in-parens>\",\"media-feature\":\"( [<mf-plain>|<mf-boolean>|<mf-range>] )\",\"media-in-parens\":\"( <media-condition> )|<media-feature>|<general-enclosed>\",\"media-not\":\"not <media-in-parens>\",\"media-or\":\"<media-in-parens> [or <media-in-parens>]+\",\"media-query\":\"<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?\",\"media-query-list\":\"<media-query>#\",\"media-type\":\"<ident>\",\"mf-boolean\":\"<mf-name>\",\"mf-name\":\"<ident>\",\"mf-plain\":\"<mf-name> : <mf-value>\",\"mf-range\":\"<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>\",\"mf-value\":\"<number>|<dimension>|<ident>|<ratio>\",\"min()\":\"min( <calc-sum># )\",\"minmax()\":\"minmax( [<length>|<percentage>|<flex>|min-content|max-content|auto] , [<length>|<percentage>|<flex>|min-content|max-content|auto] )\",\"named-color\":\"transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>\",\"namespace-prefix\":\"<ident>\",\"ns-prefix\":\"[<ident-token>|'*']? '|'\",\"number-percentage\":\"<number>|<percentage>\",\"numeric-figure-values\":\"[lining-nums|oldstyle-nums]\",\"numeric-fraction-values\":\"[diagonal-fractions|stacked-fractions]\",\"numeric-spacing-values\":\"[proportional-nums|tabular-nums]\",nth:\"<an-plus-b>|even|odd\",\"opacity()\":\"opacity( [<number-percentage>] )\",\"overflow-position\":\"unsafe|safe\",\"outline-radius\":\"<length>|<percentage>\",\"page-body\":\"<declaration>? [; <page-body>]?|<page-margin-box> <page-body>\",\"page-margin-box\":\"<page-margin-box-type> '{' <declaration-list> '}'\",\"page-margin-box-type\":\"@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom\",\"page-selector-list\":\"[<page-selector>#]?\",\"page-selector\":\"<pseudo-page>+|<ident> <pseudo-page>*\",\"perspective()\":\"perspective( <length> )\",\"polygon()\":\"polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )\",position:\"[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]\",\"pseudo-class-selector\":\"':' <ident-token>|':' <function-token> <any-value> ')'\",\"pseudo-element-selector\":\"':' <pseudo-class-selector>\",\"pseudo-page\":\": [left|right|first|blank]\",quote:\"open-quote|close-quote|no-open-quote|no-close-quote\",\"radial-gradient()\":\"radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )\",\"relative-selector\":\"<combinator>? <complex-selector>\",\"relative-selector-list\":\"<relative-selector>#\",\"relative-size\":\"larger|smaller\",\"repeat-style\":\"repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}\",\"repeating-linear-gradient()\":\"repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )\",\"repeating-radial-gradient()\":\"repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )\",\"rgb()\":\"rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )\",\"rgba()\":\"rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )\",\"rotate()\":\"rotate( [<angle>|<zero>] )\",\"rotate3d()\":\"rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )\",\"rotateX()\":\"rotateX( [<angle>|<zero>] )\",\"rotateY()\":\"rotateY( [<angle>|<zero>] )\",\"rotateZ()\":\"rotateZ( [<angle>|<zero>] )\",\"saturate()\":\"saturate( <number-percentage> )\",\"scale()\":\"scale( <number> , <number>? )\",\"scale3d()\":\"scale3d( <number> , <number> , <number> )\",\"scaleX()\":\"scaleX( <number> )\",\"scaleY()\":\"scaleY( <number> )\",\"scaleZ()\":\"scaleZ( <number> )\",\"self-position\":\"center|start|end|self-start|self-end|flex-start|flex-end\",\"shape-radius\":\"<length-percentage>|closest-side|farthest-side\",\"skew()\":\"skew( [<angle>|<zero>] , [<angle>|<zero>]? )\",\"skewX()\":\"skewX( [<angle>|<zero>] )\",\"skewY()\":\"skewY( [<angle>|<zero>] )\",\"sepia()\":\"sepia( <number-percentage> )\",shadow:\"inset?&&<length>{2,4}&&<color>?\",\"shadow-t\":\"[<length>{2,3}&&<color>?]\",shape:\"rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )\",\"shape-box\":\"<box>|margin-box\",\"side-or-corner\":\"[left|right]||[top|bottom]\",\"single-animation\":\"<time>||<timing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]\",\"single-animation-direction\":\"normal|reverse|alternate|alternate-reverse\",\"single-animation-fill-mode\":\"none|forwards|backwards|both\",\"single-animation-iteration-count\":\"infinite|<number>\",\"single-animation-play-state\":\"running|paused\",\"single-transition\":\"[none|<single-transition-property>]||<time>||<timing-function>||<time>\",\"single-transition-property\":\"all|<custom-ident>\",size:\"closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}\",\"step-position\":\"jump-start|jump-end|jump-none|jump-both|start|end\",\"step-timing-function\":\"step-start|step-end|steps( <integer> [, <step-position>]? )\",\"subclass-selector\":\"<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>\",\"supports-condition\":\"not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*\",\"supports-in-parens\":\"( <supports-condition> )|<supports-feature>|<general-enclosed>\",\"supports-feature\":\"<supports-decl>|<supports-selector-fn>\",\"supports-decl\":\"( <declaration> )\",\"supports-selector-fn\":\"selector( <complex-selector> )\",symbol:\"<string>|<image>|<custom-ident>\",target:\"<target-counter()>|<target-counters()>|<target-text()>\",\"target-counter()\":\"target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )\",\"target-counters()\":\"target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )\",\"target-text()\":\"target-text( [<string>|<url>] , [content|before|after|first-letter]? )\",\"time-percentage\":\"<time>|<percentage>\",\"timing-function\":\"linear|<cubic-bezier-timing-function>|<step-timing-function>\",\"track-breadth\":\"<length-percentage>|<flex>|min-content|max-content|auto\",\"track-list\":\"[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?\",\"track-repeat\":\"repeat( [<positive-integer>] , [<line-names>? <track-size>]+ <line-names>? )\",\"track-size\":\"<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( [<length>|<percentage>] )\",\"transform-function\":\"<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>\",\"transform-list\":\"<transform-function>+\",\"translate()\":\"translate( <length-percentage> , <length-percentage>? )\",\"translate3d()\":\"translate3d( <length-percentage> , <length-percentage> , <length> )\",\"translateX()\":\"translateX( <length-percentage> )\",\"translateY()\":\"translateY( <length-percentage> )\",\"translateZ()\":\"translateZ( <length> )\",\"type-or-unit\":\"string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%\",\"type-selector\":\"<wq-name>|<ns-prefix>? '*'\",\"var()\":\"var( <custom-property-name> , <declaration-value>? )\",\"viewport-length\":\"auto|<length-percentage>\",\"wq-name\":\"<ns-prefix>? <ident-token>\",\"-legacy-gradient\":\"<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>\",\"-legacy-linear-gradient\":\"-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )\",\"-legacy-repeating-linear-gradient\":\"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )\",\"-legacy-linear-gradient-arguments\":\"[<angle>|<side-or-corner>]? , <color-stop-list>\",\"-legacy-radial-gradient\":\"-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )\",\"-legacy-repeating-radial-gradient\":\"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )\",\"-legacy-radial-gradient-arguments\":\"[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>\",\"-legacy-radial-gradient-size\":\"closest-side|closest-corner|farthest-side|farthest-corner|contain|cover\",\"-legacy-radial-gradient-shape\":\"circle|ellipse\",\"-non-standard-font\":\"-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body\",\"-non-standard-color\":\"-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text\",\"-non-standard-image-rendering\":\"optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast\",\"-non-standard-overflow\":\"-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable\",\"-non-standard-width\":\"min-intrinsic|intrinsic|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content\",\"-webkit-gradient()\":\"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )\",\"-webkit-gradient-color-stop\":\"from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )\",\"-webkit-gradient-point\":\"[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]\",\"-webkit-gradient-radius\":\"<length>|<percentage>\",\"-webkit-gradient-type\":\"linear|radial\",\"-webkit-mask-box-repeat\":\"repeat|stretch|round\",\"-webkit-mask-clip-style\":\"border|border-box|padding|padding-box|content|content-box|text\",\"-ms-filter-function-list\":\"<-ms-filter-function>+\",\"-ms-filter-function\":\"<-ms-filter-function-progid>|<-ms-filter-function-legacy>\",\"-ms-filter-function-progid\":\"'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]\",\"-ms-filter-function-legacy\":\"<ident-token>|<function-token> <any-value>? )\",\"-ms-filter\":\"<string>\",age:\"child|young|old\",\"attr-name\":\"<wq-name>\",\"attr-fallback\":\"<any-value>\",\"border-radius\":\"<length-percentage>{1,2}\",bottom:\"<length>|auto\",\"generic-voice\":\"[<age>? <gender> <integer>?]\",gender:\"male|female|neutral\",left:\"<length>|auto\",\"mask-image\":\"<mask-reference>#\",\"name-repeat\":\"repeat( [<positive-integer>|auto-fill] , <line-names>+ )\",paint:\"none|<color>|<url> [none|<color>]?|context-fill|context-stroke\",\"path()\":\"path( <string> )\",ratio:\"<integer> / <integer>\",right:\"<length>|auto\",\"svg-length\":\"<percentage>|<length>|<number>\",\"svg-writing-mode\":\"lr-tb|rl-tb|tb-rl|lr|rl|tb\",top:\"<length>|auto\",\"track-group\":\"'(' [<string>* <track-minmax> <string>*]+ ')' ['[' <positive-integer> ']']?|<track-minmax>\",\"track-list-v0\":\"[<string>* <track-group> <string>*]+|none\",\"track-minmax\":\"minmax( <track-breadth> , <track-breadth> )|auto|<track-breadth>|fit-content\",x:\"<number>\",y:\"<number>\",declaration:\"<ident-token> : <declaration-value>? ['!' important]?\",\"declaration-list\":\"[<declaration>? ';']* <declaration>?\",url:\"url( <string> <url-modifier>* )|<url-token>\",\"url-modifier\":\"<ident>|<function-token> <any-value> )\",\"number-zero-one\":\"<number [0,1]>\",\"number-one-or-greater\":\"<number [1,\u221e]>\",\"positive-integer\":\"<integer [0,\u221e]>\"},Or={\"--*\":\"<declaration-value>\",\"-ms-accelerator\":\"false|true\",\"-ms-block-progression\":\"tb|rl|bt|lr\",\"-ms-content-zoom-chaining\":\"none|chained\",\"-ms-content-zooming\":\"none|zoom\",\"-ms-content-zoom-limit\":\"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>\",\"-ms-content-zoom-limit-max\":\"<percentage>\",\"-ms-content-zoom-limit-min\":\"<percentage>\",\"-ms-content-zoom-snap\":\"<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>\",\"-ms-content-zoom-snap-points\":\"snapInterval( <percentage> , <percentage> )|snapList( <percentage># )\",\"-ms-content-zoom-snap-type\":\"none|proximity|mandatory\",\"-ms-filter\":\"<string>\",\"-ms-flow-from\":\"[none|<custom-ident>]#\",\"-ms-flow-into\":\"[none|<custom-ident>]#\",\"-ms-high-contrast-adjust\":\"auto|none\",\"-ms-hyphenate-limit-chars\":\"auto|<integer>{1,3}\",\"-ms-hyphenate-limit-lines\":\"no-limit|<integer>\",\"-ms-hyphenate-limit-zone\":\"<percentage>|<length>\",\"-ms-ime-align\":\"auto|after\",\"-ms-overflow-style\":\"auto|none|scrollbar|-ms-autohiding-scrollbar\",\"-ms-scrollbar-3dlight-color\":\"<color>\",\"-ms-scrollbar-arrow-color\":\"<color>\",\"-ms-scrollbar-base-color\":\"<color>\",\"-ms-scrollbar-darkshadow-color\":\"<color>\",\"-ms-scrollbar-face-color\":\"<color>\",\"-ms-scrollbar-highlight-color\":\"<color>\",\"-ms-scrollbar-shadow-color\":\"<color>\",\"-ms-scrollbar-track-color\":\"<color>\",\"-ms-scroll-chaining\":\"chained|none\",\"-ms-scroll-limit\":\"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>\",\"-ms-scroll-limit-x-max\":\"auto|<length>\",\"-ms-scroll-limit-x-min\":\"<length>\",\"-ms-scroll-limit-y-max\":\"auto|<length>\",\"-ms-scroll-limit-y-min\":\"<length>\",\"-ms-scroll-rails\":\"none|railed\",\"-ms-scroll-snap-points-x\":\"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )\",\"-ms-scroll-snap-points-y\":\"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )\",\"-ms-scroll-snap-type\":\"none|proximity|mandatory\",\"-ms-scroll-snap-x\":\"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>\",\"-ms-scroll-snap-y\":\"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>\",\"-ms-scroll-translation\":\"none|vertical-to-horizontal\",\"-ms-text-autospace\":\"none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space\",\"-ms-touch-select\":\"grippers|none\",\"-ms-user-select\":\"none|element|text\",\"-ms-wrap-flow\":\"auto|both|start|end|maximum|clear\",\"-ms-wrap-margin\":\"<length>\",\"-ms-wrap-through\":\"wrap|none\",\"-moz-appearance\":\"none|button|button-arrow-down|button-arrow-next|button-arrow-previous|button-arrow-up|button-bevel|button-focus|caret|checkbox|checkbox-container|checkbox-label|checkmenuitem|dualbutton|groupbox|listbox|listitem|menuarrow|menubar|menucheckbox|menuimage|menuitem|menuitemtext|menulist|menulist-button|menulist-text|menulist-textfield|menupopup|menuradio|menuseparator|meterbar|meterchunk|progressbar|progressbar-vertical|progresschunk|progresschunk-vertical|radio|radio-container|radio-label|radiomenuitem|range|range-thumb|resizer|resizerpanel|scale-horizontal|scalethumbend|scalethumb-horizontal|scalethumbstart|scalethumbtick|scalethumb-vertical|scale-vertical|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|separator|sheet|spinner|spinner-downbutton|spinner-textfield|spinner-upbutton|splitter|statusbar|statusbarpanel|tab|tabpanel|tabpanels|tab-scroll-arrow-back|tab-scroll-arrow-forward|textfield|textfield-multiline|toolbar|toolbarbutton|toolbarbutton-dropdown|toolbargripper|toolbox|tooltip|treeheader|treeheadercell|treeheadersortarrow|treeitem|treeline|treetwisty|treetwistyopen|treeview|-moz-mac-unified-toolbar|-moz-win-borderless-glass|-moz-win-browsertabbar-toolbox|-moz-win-communicationstext|-moz-win-communications-toolbox|-moz-win-exclude-glass|-moz-win-glass|-moz-win-mediatext|-moz-win-media-toolbox|-moz-window-button-box|-moz-window-button-box-maximized|-moz-window-button-close|-moz-window-button-maximize|-moz-window-button-minimize|-moz-window-button-restore|-moz-window-frame-bottom|-moz-window-frame-left|-moz-window-frame-right|-moz-window-titlebar|-moz-window-titlebar-maximized\",\"-moz-binding\":\"<url>|none\",\"-moz-border-bottom-colors\":\"<color>+|none\",\"-moz-border-left-colors\":\"<color>+|none\",\"-moz-border-right-colors\":\"<color>+|none\",\"-moz-border-top-colors\":\"<color>+|none\",\"-moz-context-properties\":\"none|[fill|fill-opacity|stroke|stroke-opacity]#\",\"-moz-float-edge\":\"border-box|content-box|margin-box|padding-box\",\"-moz-force-broken-image-icon\":\"<integer>\",\"-moz-image-region\":\"<shape>|auto\",\"-moz-orient\":\"inline|block|horizontal|vertical\",\"-moz-outline-radius\":\"<outline-radius>{1,4} [/ <outline-radius>{1,4}]?\",\"-moz-outline-radius-bottomleft\":\"<outline-radius>\",\"-moz-outline-radius-bottomright\":\"<outline-radius>\",\"-moz-outline-radius-topleft\":\"<outline-radius>\",\"-moz-outline-radius-topright\":\"<outline-radius>\",\"-moz-stack-sizing\":\"ignore|stretch-to-fit\",\"-moz-text-blink\":\"none|blink\",\"-moz-user-focus\":\"ignore|normal|select-after|select-before|select-menu|select-same|select-all|none\",\"-moz-user-input\":\"auto|none|enabled|disabled\",\"-moz-user-modify\":\"read-only|read-write|write-only\",\"-moz-window-dragging\":\"drag|no-drag\",\"-moz-window-shadow\":\"default|menu|tooltip|sheet|none\",\"-webkit-appearance\":\"none|button|button-bevel|caps-lock-indicator|caret|checkbox|default-button|listbox|listitem|media-fullscreen-button|media-mute-button|media-play-button|media-seek-back-button|media-seek-forward-button|media-slider|media-sliderthumb|menulist|menulist-button|menulist-text|menulist-textfield|push-button|radio|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|searchfield-cancel-button|searchfield-decoration|searchfield-results-button|searchfield-results-decoration|slider-horizontal|slider-vertical|sliderthumb-horizontal|sliderthumb-vertical|square-button|textarea|textfield\",\"-webkit-border-before\":\"<'border-width'>||<'border-style'>||<'color'>\",\"-webkit-border-before-color\":\"<'color'>\",\"-webkit-border-before-style\":\"<'border-style'>\",\"-webkit-border-before-width\":\"<'border-width'>\",\"-webkit-box-reflect\":\"[above|below|right|left]? <length>? <image>?\",\"-webkit-line-clamp\":\"none|<integer>\",\"-webkit-mask\":\"[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#\",\"-webkit-mask-attachment\":\"<attachment>#\",\"-webkit-mask-clip\":\"[<box>|border|padding|content|text]#\",\"-webkit-mask-composite\":\"<composite-style>#\",\"-webkit-mask-image\":\"<mask-reference>#\",\"-webkit-mask-origin\":\"[<box>|border|padding|content]#\",\"-webkit-mask-position\":\"<position>#\",\"-webkit-mask-position-x\":\"[<length-percentage>|left|center|right]#\",\"-webkit-mask-position-y\":\"[<length-percentage>|top|center|bottom]#\",\"-webkit-mask-repeat\":\"<repeat-style>#\",\"-webkit-mask-repeat-x\":\"repeat|no-repeat|space|round\",\"-webkit-mask-repeat-y\":\"repeat|no-repeat|space|round\",\"-webkit-mask-size\":\"<bg-size>#\",\"-webkit-overflow-scrolling\":\"auto|touch\",\"-webkit-tap-highlight-color\":\"<color>\",\"-webkit-text-fill-color\":\"<color>\",\"-webkit-text-stroke\":\"<length>||<color>\",\"-webkit-text-stroke-color\":\"<color>\",\"-webkit-text-stroke-width\":\"<length>\",\"-webkit-touch-callout\":\"default|none\",\"-webkit-user-modify\":\"read-only|read-write|read-write-plaintext-only\",\"align-content\":\"normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>\",\"align-items\":\"normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]\",\"align-self\":\"auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>\",all:\"initial|inherit|unset|revert\",animation:\"<single-animation>#\",\"animation-delay\":\"<time>#\",\"animation-direction\":\"<single-animation-direction>#\",\"animation-duration\":\"<time>#\",\"animation-fill-mode\":\"<single-animation-fill-mode>#\",\"animation-iteration-count\":\"<single-animation-iteration-count>#\",\"animation-name\":\"[none|<keyframes-name>]#\",\"animation-play-state\":\"<single-animation-play-state>#\",\"animation-timing-function\":\"<timing-function>#\",appearance:\"none|auto|button|textfield|<compat>\",azimuth:\"<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards\",\"backdrop-filter\":\"none|<filter-function-list>\",\"backface-visibility\":\"visible|hidden\",background:\"[<bg-layer> ,]* <final-bg-layer>\",\"background-attachment\":\"<attachment>#\",\"background-blend-mode\":\"<blend-mode>#\",\"background-clip\":\"<box>#\",\"background-color\":\"<color>\",\"background-image\":\"<bg-image>#\",\"background-origin\":\"<box>#\",\"background-position\":\"<bg-position>#\",\"background-position-x\":\"[center|[left|right|x-start|x-end]? <length-percentage>?]#\",\"background-position-y\":\"[center|[top|bottom|y-start|y-end]? <length-percentage>?]#\",\"background-repeat\":\"<repeat-style>#\",\"background-size\":\"<bg-size>#\",\"block-overflow\":\"clip|ellipsis|<string>\",\"block-size\":\"<'width'>\",border:\"<line-width>||<line-style>||<color>\",\"border-block\":\"<'border-top-width'>||<'border-top-style'>||<'color'>\",\"border-block-color\":\"<'border-top-color'>{1,2}\",\"border-block-style\":\"<'border-top-style'>\",\"border-block-width\":\"<'border-top-width'>\",\"border-block-end\":\"<'border-top-width'>||<'border-top-style'>||<'color'>\",\"border-block-end-color\":\"<'border-top-color'>\",\"border-block-end-style\":\"<'border-top-style'>\",\"border-block-end-width\":\"<'border-top-width'>\",\"border-block-start\":\"<'border-top-width'>||<'border-top-style'>||<'color'>\",\"border-block-start-color\":\"<'border-top-color'>\",\"border-block-start-style\":\"<'border-top-style'>\",\"border-block-start-width\":\"<'border-top-width'>\",\"border-bottom\":\"<line-width>||<line-style>||<color>\",\"border-bottom-color\":\"<'border-top-color'>\",\"border-bottom-left-radius\":\"<length-percentage>{1,2}\",\"border-bottom-right-radius\":\"<length-percentage>{1,2}\",\"border-bottom-style\":\"<line-style>\",\"border-bottom-width\":\"<line-width>\",\"border-collapse\":\"collapse|separate\",\"border-color\":\"<color>{1,4}\",\"border-end-end-radius\":\"<length-percentage>{1,2}\",\"border-end-start-radius\":\"<length-percentage>{1,2}\",\"border-image\":\"<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>\",\"border-image-outset\":\"[<length>|<number>]{1,4}\",\"border-image-repeat\":\"[stretch|repeat|round|space]{1,2}\",\"border-image-slice\":\"<number-percentage>{1,4}&&fill?\",\"border-image-source\":\"none|<image>\",\"border-image-width\":\"[<length-percentage>|<number>|auto]{1,4}\",\"border-inline\":\"<'border-top-width'>||<'border-top-style'>||<'color'>\",\"border-inline-end\":\"<'border-top-width'>||<'border-top-style'>||<'color'>\",\"border-inline-color\":\"<'border-top-color'>{1,2}\",\"border-inline-style\":\"<'border-top-style'>\",\"border-inline-width\":\"<'border-top-width'>\",\"border-inline-end-color\":\"<'border-top-color'>\",\"border-inline-end-style\":\"<'border-top-style'>\",\"border-inline-end-width\":\"<'border-top-width'>\",\"border-inline-start\":\"<'border-top-width'>||<'border-top-style'>||<'color'>\",\"border-inline-start-color\":\"<'border-top-color'>\",\"border-inline-start-style\":\"<'border-top-style'>\",\"border-inline-start-width\":\"<'border-top-width'>\",\"border-left\":\"<line-width>||<line-style>||<color>\",\"border-left-color\":\"<color>\",\"border-left-style\":\"<line-style>\",\"border-left-width\":\"<line-width>\",\"border-radius\":\"<length-percentage>{1,4} [/ <length-percentage>{1,4}]?\",\"border-right\":\"<line-width>||<line-style>||<color>\",\"border-right-color\":\"<color>\",\"border-right-style\":\"<line-style>\",\"border-right-width\":\"<line-width>\",\"border-spacing\":\"<length> <length>?\",\"border-start-end-radius\":\"<length-percentage>{1,2}\",\"border-start-start-radius\":\"<length-percentage>{1,2}\",\"border-style\":\"<line-style>{1,4}\",\"border-top\":\"<line-width>||<line-style>||<color>\",\"border-top-color\":\"<color>\",\"border-top-left-radius\":\"<length-percentage>{1,2}\",\"border-top-right-radius\":\"<length-percentage>{1,2}\",\"border-top-style\":\"<line-style>\",\"border-top-width\":\"<line-width>\",\"border-width\":\"<line-width>{1,4}\",bottom:\"<length>|<percentage>|auto\",\"box-align\":\"start|center|end|baseline|stretch\",\"box-decoration-break\":\"slice|clone\",\"box-direction\":\"normal|reverse|inherit\",\"box-flex\":\"<number>\",\"box-flex-group\":\"<integer>\",\"box-lines\":\"single|multiple\",\"box-ordinal-group\":\"<integer>\",\"box-orient\":\"horizontal|vertical|inline-axis|block-axis|inherit\",\"box-pack\":\"start|center|end|justify\",\"box-shadow\":\"none|<shadow>#\",\"box-sizing\":\"content-box|border-box\",\"break-after\":\"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region\",\"break-before\":\"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region\",\"break-inside\":\"auto|avoid|avoid-page|avoid-column|avoid-region\",\"caption-side\":\"top|bottom|block-start|block-end|inline-start|inline-end\",\"caret-color\":\"auto|<color>\",clear:\"none|left|right|both|inline-start|inline-end\",clip:\"<shape>|auto\",\"clip-path\":\"<clip-source>|[<basic-shape>||<geometry-box>]|none\",color:\"<color>\",\"color-adjust\":\"economy|exact\",\"column-count\":\"<integer>|auto\",\"column-fill\":\"auto|balance|balance-all\",\"column-gap\":\"normal|<length-percentage>\",\"column-rule\":\"<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>\",\"column-rule-color\":\"<color>\",\"column-rule-style\":\"<'border-style'>\",\"column-rule-width\":\"<'border-width'>\",\"column-span\":\"none|all\",\"column-width\":\"<length>|auto\",columns:\"<'column-width'>||<'column-count'>\",contain:\"none|strict|content|[size||layout||style||paint]\",content:\"normal|none|[<content-replacement>|<content-list>] [/ <string>]?\",\"counter-increment\":\"[<custom-ident> <integer>?]+|none\",\"counter-reset\":\"[<custom-ident> <integer>?]+|none\",\"counter-set\":\"[<custom-ident> <integer>?]+|none\",cursor:\"[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]\",direction:\"ltr|rtl\",display:\"block|contents|flex|flow|flow-root|grid|inline|inline-block|inline-flex|inline-grid|inline-list-item|inline-table|list-item|none|ruby|ruby-base|ruby-base-container|ruby-text|ruby-text-container|run-in|table|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row|table-row-group|-ms-flexbox|-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box\",\"empty-cells\":\"show|hide\",filter:\"none|<filter-function-list>|<-ms-filter-function-list>\",flex:\"none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]\",\"flex-basis\":\"content|<'width'>\",\"flex-direction\":\"row|row-reverse|column|column-reverse\",\"flex-flow\":\"<'flex-direction'>||<'flex-wrap'>\",\"flex-grow\":\"<number>\",\"flex-shrink\":\"<number>\",\"flex-wrap\":\"nowrap|wrap|wrap-reverse\",float:\"left|right|none|inline-start|inline-end\",font:\"[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar\",\"font-family\":\"[<family-name>|<generic-family>]#\",\"font-feature-settings\":\"normal|<feature-tag-value>#\",\"font-kerning\":\"auto|normal|none\",\"font-language-override\":\"normal|<string>\",\"font-optical-sizing\":\"auto|none\",\"font-variation-settings\":\"normal|[<string> <number>]#\",\"font-size\":\"<absolute-size>|<relative-size>|<length-percentage>\",\"font-size-adjust\":\"none|<number>\",\"font-stretch\":\"<font-stretch-absolute>\",\"font-style\":\"normal|italic|oblique <angle>?\",\"font-synthesis\":\"none|[weight||style]\",\"font-variant\":\"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\"font-variant-alternates\":\"normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]\",\"font-variant-caps\":\"normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps\",\"font-variant-east-asian\":\"normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\"font-variant-ligatures\":\"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]\",\"font-variant-numeric\":\"normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]\",\"font-variant-position\":\"normal|sub|super\",\"font-weight\":\"<font-weight-absolute>|bolder|lighter\",gap:\"<'row-gap'> <'column-gap'>?\",grid:\"<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>\",\"grid-area\":\"<grid-line> [/ <grid-line>]{0,3}\",\"grid-auto-columns\":\"<track-size>+\",\"grid-auto-flow\":\"[row|column]||dense\",\"grid-auto-rows\":\"<track-size>+\",\"grid-column\":\"<grid-line> [/ <grid-line>]?\",\"grid-column-end\":\"<grid-line>\",\"grid-column-gap\":\"<length-percentage>\",\"grid-column-start\":\"<grid-line>\",\"grid-gap\":\"<'grid-row-gap'> <'grid-column-gap'>?\",\"grid-row\":\"<grid-line> [/ <grid-line>]?\",\"grid-row-end\":\"<grid-line>\",\"grid-row-gap\":\"<length-percentage>\",\"grid-row-start\":\"<grid-line>\",\"grid-template\":\"none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?\",\"grid-template-areas\":\"none|<string>+\",\"grid-template-columns\":\"none|<track-list>|<auto-track-list>\",\"grid-template-rows\":\"none|<track-list>|<auto-track-list>\",\"hanging-punctuation\":\"none|[first||[force-end|allow-end]||last]\",height:\"[<length>|<percentage>]&&[border-box|content-box]?|available|min-content|max-content|fit-content|auto\",hyphens:\"none|manual|auto\",\"image-orientation\":\"from-image|<angle>|[<angle>? flip]\",\"image-rendering\":\"auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>\",\"image-resolution\":\"[from-image||<resolution>]&&snap?\",\"ime-mode\":\"auto|normal|active|inactive|disabled\",\"initial-letter\":\"normal|[<number> <integer>?]\",\"initial-letter-align\":\"[auto|alphabetic|hanging|ideographic]\",\"inline-size\":\"<'width'>\",inset:\"<'top'>{1,4}\",\"inset-block\":\"<'top'>{1,2}\",\"inset-block-end\":\"<'top'>\",\"inset-block-start\":\"<'top'>\",\"inset-inline\":\"<'top'>{1,2}\",\"inset-inline-end\":\"<'top'>\",\"inset-inline-start\":\"<'top'>\",isolation:\"auto|isolate\",\"justify-content\":\"normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]\",\"justify-items\":\"normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]\",\"justify-self\":\"auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]\",left:\"<length>|<percentage>|auto\",\"letter-spacing\":\"normal|<length-percentage>\",\"line-break\":\"auto|loose|normal|strict\",\"line-clamp\":\"none|<integer>\",\"line-height\":\"normal|<number>|<length>|<percentage>\",\"line-height-step\":\"<length>\",\"list-style\":\"<'list-style-type'>||<'list-style-position'>||<'list-style-image'>\",\"list-style-image\":\"<url>|none\",\"list-style-position\":\"inside|outside\",\"list-style-type\":\"<counter-style>|<string>|none\",margin:\"[<length>|<percentage>|auto]{1,4}\",\"margin-block\":\"<'margin-left'>{1,2}\",\"margin-block-end\":\"<'margin-left'>\",\"margin-block-start\":\"<'margin-left'>\",\"margin-bottom\":\"<length>|<percentage>|auto\",\"margin-inline\":\"<'margin-left'>{1,2}\",\"margin-inline-end\":\"<'margin-left'>\",\"margin-inline-start\":\"<'margin-left'>\",\"margin-left\":\"<length>|<percentage>|auto\",\"margin-right\":\"<length>|<percentage>|auto\",\"margin-top\":\"<length>|<percentage>|auto\",mask:\"<mask-layer>#\",\"mask-border\":\"<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>\",\"mask-border-mode\":\"luminance|alpha\",\"mask-border-outset\":\"[<length>|<number>]{1,4}\",\"mask-border-repeat\":\"[stretch|repeat|round|space]{1,2}\",\"mask-border-slice\":\"<number-percentage>{1,4} fill?\",\"mask-border-source\":\"none|<image>\",\"mask-border-width\":\"[<length-percentage>|<number>|auto]{1,4}\",\"mask-clip\":\"[<geometry-box>|no-clip]#\",\"mask-composite\":\"<compositing-operator>#\",\"mask-image\":\"<mask-reference>#\",\"mask-mode\":\"<masking-mode>#\",\"mask-origin\":\"<geometry-box>#\",\"mask-position\":\"<position>#\",\"mask-repeat\":\"<repeat-style>#\",\"mask-size\":\"<bg-size>#\",\"mask-type\":\"luminance|alpha\",\"max-block-size\":\"<'max-width'>\",\"max-height\":\"<length>|<percentage>|none|max-content|min-content|fit-content|fill-available\",\"max-inline-size\":\"<'max-width'>\",\"max-lines\":\"none|<integer>\",\"max-width\":\"<length>|<percentage>|none|max-content|min-content|fit-content|fill-available|<-non-standard-width>\",\"min-block-size\":\"<'min-width'>\",\"min-height\":\"<length>|<percentage>|auto|max-content|min-content|fit-content|fill-available\",\"min-inline-size\":\"<'min-width'>\",\"min-width\":\"<length>|<percentage>|auto|max-content|min-content|fit-content|fill-available|<-non-standard-width>\",\"mix-blend-mode\":\"<blend-mode>\",\"object-fit\":\"fill|contain|cover|none|scale-down\",\"object-position\":\"<position>\",offset:\"[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?\",\"offset-anchor\":\"auto|<position>\",\"offset-distance\":\"<length-percentage>\",\"offset-path\":\"none|ray( [<angle>&&<size>?&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]\",\"offset-position\":\"auto|<position>\",\"offset-rotate\":\"[auto|reverse]||<angle>\",opacity:\"<number-zero-one>\",order:\"<integer>\",orphans:\"<integer>\",outline:\"[<'outline-color'>||<'outline-style'>||<'outline-width'>]\",\"outline-color\":\"<color>|invert\",\"outline-offset\":\"<length>\",\"outline-style\":\"auto|<'border-style'>\",\"outline-width\":\"<line-width>\",overflow:\"[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>\",\"overflow-anchor\":\"auto|none\",\"overflow-block\":\"visible|hidden|clip|scroll|auto\",\"overflow-clip-box\":\"padding-box|content-box\",\"overflow-inline\":\"visible|hidden|clip|scroll|auto\",\"overflow-wrap\":\"normal|break-word|anywhere\",\"overflow-x\":\"visible|hidden|clip|scroll|auto\",\"overflow-y\":\"visible|hidden|clip|scroll|auto\",\"overscroll-behavior\":\"[contain|none|auto]{1,2}\",\"overscroll-behavior-x\":\"contain|none|auto\",\"overscroll-behavior-y\":\"contain|none|auto\",padding:\"[<length>|<percentage>]{1,4}\",\"padding-block\":\"<'padding-left'>{1,2}\",\"padding-block-end\":\"<'padding-left'>\",\"padding-block-start\":\"<'padding-left'>\",\"padding-bottom\":\"<length>|<percentage>\",\"padding-inline\":\"<'padding-left'>{1,2}\",\"padding-inline-end\":\"<'padding-left'>\",\"padding-inline-start\":\"<'padding-left'>\",\"padding-left\":\"<length>|<percentage>\",\"padding-right\":\"<length>|<percentage>\",\"padding-top\":\"<length>|<percentage>\",\"page-break-after\":\"auto|always|avoid|left|right|recto|verso\",\"page-break-before\":\"auto|always|avoid|left|right|recto|verso\",\"page-break-inside\":\"auto|avoid\",\"paint-order\":\"normal|[fill||stroke||markers]\",perspective:\"none|<length>\",\"perspective-origin\":\"<position>\",\"place-content\":\"<'align-content'> <'justify-content'>?\",\"place-items\":\"<'align-items'> <'justify-items'>?\",\"place-self\":\"<'align-self'> <'justify-self'>?\",\"pointer-events\":\"auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit\",position:\"static|relative|absolute|sticky|fixed|-webkit-sticky\",quotes:\"none|[<string> <string>]+\",resize:\"none|both|horizontal|vertical|block|inline\",right:\"<length>|<percentage>|auto\",rotate:\"none|<angle>|[x|y|z|<number>{3}]&&<angle>\",\"row-gap\":\"normal|<length-percentage>\",\"ruby-align\":\"start|center|space-between|space-around\",\"ruby-merge\":\"separate|collapse|auto\",\"ruby-position\":\"over|under|inter-character\",scale:\"none|<number>{1,3}\",\"scrollbar-color\":\"auto|dark|light|<color>{2}\",\"scrollbar-width\":\"auto|thin|none\",\"scroll-behavior\":\"auto|smooth\",\"scroll-margin\":\"<length>{1,4}\",\"scroll-margin-block\":\"<length>{1,2}\",\"scroll-margin-block-start\":\"<length>\",\"scroll-margin-block-end\":\"<length>\",\"scroll-margin-bottom\":\"<length>\",\"scroll-margin-inline\":\"<length>{1,2}\",\"scroll-margin-inline-start\":\"<length>\",\"scroll-margin-inline-end\":\"<length>\",\"scroll-margin-left\":\"<length>\",\"scroll-margin-right\":\"<length>\",\"scroll-margin-top\":\"<length>\",\"scroll-padding\":\"[auto|<length-percentage>]{1,4}\",\"scroll-padding-block\":\"[auto|<length-percentage>]{1,2}\",\"scroll-padding-block-start\":\"auto|<length-percentage>\",\"scroll-padding-block-end\":\"auto|<length-percentage>\",\"scroll-padding-bottom\":\"auto|<length-percentage>\",\"scroll-padding-inline\":\"[auto|<length-percentage>]{1,2}\",\"scroll-padding-inline-start\":\"auto|<length-percentage>\",\"scroll-padding-inline-end\":\"auto|<length-percentage>\",\"scroll-padding-left\":\"auto|<length-percentage>\",\"scroll-padding-right\":\"auto|<length-percentage>\",\"scroll-padding-top\":\"auto|<length-percentage>\",\"scroll-snap-align\":\"[none|start|end|center]{1,2}\",\"scroll-snap-coordinate\":\"none|<position>#\",\"scroll-snap-destination\":\"<position>\",\"scroll-snap-points-x\":\"none|repeat( <length-percentage> )\",\"scroll-snap-points-y\":\"none|repeat( <length-percentage> )\",\"scroll-snap-stop\":\"normal|always\",\"scroll-snap-type\":\"none|[x|y|block|inline|both] [mandatory|proximity]?\",\"scroll-snap-type-x\":\"none|mandatory|proximity\",\"scroll-snap-type-y\":\"none|mandatory|proximity\",\"shape-image-threshold\":\"<number>\",\"shape-margin\":\"<length-percentage>\",\"shape-outside\":\"none|<shape-box>||<basic-shape>|<image>\",\"tab-size\":\"<integer>|<length>\",\"table-layout\":\"auto|fixed\",\"text-align\":\"start|end|left|right|center|justify|match-parent\",\"text-align-last\":\"auto|start|end|left|right|center|justify\",\"text-combine-upright\":\"none|all|[digits <integer>?]\",\"text-decoration\":\"<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>\",\"text-decoration-color\":\"<color>\",\"text-decoration-line\":\"none|[underline||overline||line-through||blink]\",\"text-decoration-skip\":\"none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]\",\"text-decoration-skip-ink\":\"auto|none\",\"text-decoration-style\":\"solid|double|dotted|dashed|wavy\",\"text-emphasis\":\"<'text-emphasis-style'>||<'text-emphasis-color'>\",\"text-emphasis-color\":\"<color>\",\"text-emphasis-position\":\"[over|under]&&[right|left]\",\"text-emphasis-style\":\"none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>\",\"text-indent\":\"<length-percentage>&&hanging?&&each-line?\",\"text-justify\":\"auto|inter-character|inter-word|none\",\"text-orientation\":\"mixed|upright|sideways\",\"text-overflow\":\"[clip|ellipsis|<string>]{1,2}\",\"text-rendering\":\"auto|optimizeSpeed|optimizeLegibility|geometricPrecision\",\"text-shadow\":\"none|<shadow-t>#\",\"text-size-adjust\":\"none|auto|<percentage>\",\"text-transform\":\"none|capitalize|uppercase|lowercase|full-width|full-size-kana\",\"text-underline-position\":\"auto|[under||[left|right]]\",top:\"<length>|<percentage>|auto\",\"touch-action\":\"auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation\",transform:\"none|<transform-list>\",\"transform-box\":\"border-box|fill-box|view-box\",\"transform-origin\":\"[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?\",\"transform-style\":\"flat|preserve-3d\",transition:\"<single-transition>#\",\"transition-delay\":\"<time>#\",\"transition-duration\":\"<time>#\",\"transition-property\":\"none|<single-transition-property>#\",\"transition-timing-function\":\"<timing-function>#\",translate:\"none|<length-percentage> [<length-percentage> <length>?]?\",\"unicode-bidi\":\"normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate\",\"user-select\":\"auto|text|none|contain|all\",\"vertical-align\":\"baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>\",visibility:\"visible|hidden|collapse\",\"white-space\":\"normal|pre|nowrap|pre-wrap|pre-line\",widows:\"<integer>\",width:\"[<length>|<percentage>]&&[border-box|content-box]?|available|min-content|max-content|fit-content|auto\",\"will-change\":\"auto|<animateable-feature>#\",\"word-break\":\"normal|break-all|keep-all|break-word\",\"word-spacing\":\"normal|<length-percentage>\",\"word-wrap\":\"normal|break-word\",\"writing-mode\":\"horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>\",\"z-index\":\"auto|<integer>\",zoom:\"normal|reset|<number>|<percentage>\",\"-moz-background-clip\":\"padding|border\",\"-moz-border-radius-bottomleft\":\"<'border-bottom-left-radius'>\",\"-moz-border-radius-bottomright\":\"<'border-bottom-right-radius'>\",\"-moz-border-radius-topleft\":\"<'border-top-left-radius'>\",\"-moz-border-radius-topright\":\"<'border-bottom-right-radius'>\",\"-moz-control-character-visibility\":\"visible|hidden\",\"-moz-osx-font-smoothing\":\"auto|grayscale\",\"-moz-user-select\":\"none|text|all|-moz-none\",\"-ms-flex-align\":\"start|end|center|baseline|stretch\",\"-ms-flex-item-align\":\"auto|start|end|center|baseline|stretch\",\"-ms-flex-line-pack\":\"start|end|center|justify|distribute|stretch\",\"-ms-flex-negative\":\"<'flex-shrink'>\",\"-ms-flex-pack\":\"start|end|center|justify|distribute\",\"-ms-flex-order\":\"<integer>\",\"-ms-flex-positive\":\"<'flex-grow'>\",\"-ms-flex-preferred-size\":\"<'flex-basis'>\",\"-ms-interpolation-mode\":\"nearest-neighbor|bicubic\",\"-ms-grid-column-align\":\"start|end|center|stretch\",\"-ms-grid-columns\":\"<track-list-v0>\",\"-ms-grid-row-align\":\"start|end|center|stretch\",\"-ms-grid-rows\":\"<track-list-v0>\",\"-ms-hyphenate-limit-last\":\"none|always|column|page|spread\",\"-webkit-background-clip\":\"[<box>|border|padding|content|text]#\",\"-webkit-column-break-after\":\"always|auto|avoid\",\"-webkit-column-break-before\":\"always|auto|avoid\",\"-webkit-column-break-inside\":\"always|auto|avoid\",\"-webkit-font-smoothing\":\"auto|none|antialiased|subpixel-antialiased\",\"-webkit-mask-box-image\":\"[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?\",\"-webkit-print-color-adjust\":\"economy|exact\",\"-webkit-text-security\":\"none|circle|disc|square\",\"-webkit-user-drag\":\"none|element|auto\",\"-webkit-user-select\":\"auto|none|text|all\",\"alignment-baseline\":\"auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical\",\"baseline-shift\":\"baseline|sub|super|<svg-length>\",behavior:\"<url>+\",\"clip-rule\":\"nonzero|evenodd\",cue:\"<'cue-before'> <'cue-after'>?\",\"cue-after\":\"<url> <decibel>?|none\",\"cue-before\":\"<url> <decibel>?|none\",\"dominant-baseline\":\"auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge\",fill:\"<paint>\",\"fill-opacity\":\"<number-zero-one>\",\"fill-rule\":\"nonzero|evenodd\",\"glyph-orientation-horizontal\":\"<angle>\",\"glyph-orientation-vertical\":\"<angle>\",kerning:\"auto|<svg-length>\",marker:\"none|<url>\",\"marker-end\":\"none|<url>\",\"marker-mid\":\"none|<url>\",\"marker-start\":\"none|<url>\",pause:\"<'pause-before'> <'pause-after'>?\",\"pause-after\":\"<time>|none|x-weak|weak|medium|strong|x-strong\",\"pause-before\":\"<time>|none|x-weak|weak|medium|strong|x-strong\",rest:\"<'rest-before'> <'rest-after'>?\",\"rest-after\":\"<time>|none|x-weak|weak|medium|strong|x-strong\",\"rest-before\":\"<time>|none|x-weak|weak|medium|strong|x-strong\",\"shape-rendering\":\"auto|optimizeSpeed|crispEdges|geometricPrecision\",src:\"[<url> [format( <string># )]?|local( <family-name> )]#\",speak:\"auto|none|normal\",\"speak-as\":\"normal|spell-out||digits||[literal-punctuation|no-punctuation]\",stroke:\"<paint>\",\"stroke-dasharray\":\"none|[<svg-length>+]#\",\"stroke-dashoffset\":\"<svg-length>\",\"stroke-linecap\":\"butt|round|square\",\"stroke-linejoin\":\"miter|round|bevel\",\"stroke-miterlimit\":\"<number-one-or-greater>\",\"stroke-opacity\":\"<number-zero-one>\",\"stroke-width\":\"<svg-length>\",\"text-anchor\":\"start|middle|end\",\"unicode-range\":\"<urange>#\",\"voice-balance\":\"<number>|left|center|right|leftwards|rightwards\",\"voice-duration\":\"auto|<time>\",\"voice-family\":\"[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve\",\"voice-pitch\":\"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]\",\"voice-range\":\"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]\",\"voice-rate\":\"[normal|x-slow|slow|medium|fast|x-fast]||<percentage>\",\"voice-stress\":\"normal|strong|moderate|none|reduced\",\"voice-volume\":\"silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]\"},Dr={generic:!0,types:Er,properties:Or},Rr=Object.freeze({__proto__:null,generic:!0,types:Er,properties:Or,default:Dr}),Ir=Se.cmpChar,Mr=Se.isDigit,Nr=Se.TYPE,Br=Nr.WhiteSpace,jr=Nr.Comment,_r=Nr.Ident,qr=Nr.Number,Wr=Nr.Dimension;function Fr(e,t){var n=this.scanner.tokenStart+e,r=this.scanner.source.charCodeAt(n);for(43!==r&&45!==r||(t&&this.error(\"Number sign is not allowed\"),n++);n<this.scanner.tokenEnd;n++)Mr(this.scanner.source.charCodeAt(n))||this.error(\"Integer is expected\",n)}function Ur(e){return Fr.call(this,0,e)}function Yr(e,t){if(!Ir(this.scanner.source,this.scanner.tokenStart+e,t)){var n=\"\";switch(t){case 110:n=\"N is expected\";break;case 45:n=\"HyphenMinus is expected\"}this.error(n,this.scanner.tokenStart+e)}}function Hr(){for(var e=0,t=0,n=this.scanner.tokenType;n===Br||n===jr;)n=this.scanner.lookupType(++e);if(n!==qr){if(!this.scanner.isDelim(43,e)&&!this.scanner.isDelim(45,e))return null;t=this.scanner.isDelim(43,e)?43:45;do{n=this.scanner.lookupType(++e)}while(n===Br||n===jr);n!==qr&&(this.scanner.skip(e),Ur.call(this,!0))}return e>0&&this.scanner.skip(e),0===t&&43!==(n=this.scanner.source.charCodeAt(this.scanner.tokenStart))&&45!==n&&this.error(\"Number sign is expected\"),Ur.call(this,0!==t),45===t?\"-\"+this.consume(qr):this.consume(qr)}var Vr={name:\"AnPlusB\",structure:{a:[String,null],b:[String,null]},parse:function(){var e=this.scanner.tokenStart,t=null,n=null;if(this.scanner.tokenType===qr)Ur.call(this,!1),n=this.consume(qr);else if(this.scanner.tokenType===_r&&Ir(this.scanner.source,this.scanner.tokenStart,45))switch(t=\"-1\",Yr.call(this,1,110),this.scanner.getTokenLength()){case 2:this.scanner.next(),n=Hr.call(this);break;case 3:Yr.call(this,2,45),this.scanner.next(),this.scanner.skipSC(),Ur.call(this,!0),n=\"-\"+this.consume(qr);break;default:Yr.call(this,2,45),Fr.call(this,3,!0),this.scanner.next(),n=this.scanner.substrToCursor(e+2)}else if(this.scanner.tokenType===_r||this.scanner.isDelim(43)&&this.scanner.lookupType(1)===_r){var r=0;switch(t=\"1\",this.scanner.isDelim(43)&&(r=1,this.scanner.next()),Yr.call(this,0,110),this.scanner.getTokenLength()){case 1:this.scanner.next(),n=Hr.call(this);break;case 2:Yr.call(this,1,45),this.scanner.next(),this.scanner.skipSC(),Ur.call(this,!0),n=\"-\"+this.consume(qr);break;default:Yr.call(this,1,45),Fr.call(this,2,!0),this.scanner.next(),n=this.scanner.substrToCursor(e+r+1)}}else if(this.scanner.tokenType===Wr){for(var a=this.scanner.source.charCodeAt(this.scanner.tokenStart),i=(r=43===a||45===a,this.scanner.tokenStart+r);i<this.scanner.tokenEnd&&Mr(this.scanner.source.charCodeAt(i));i++);i===this.scanner.tokenStart+r&&this.error(\"Integer is expected\",this.scanner.tokenStart+r),Yr.call(this,i-this.scanner.tokenStart,110),t=this.scanner.source.substring(e,i),i+1===this.scanner.tokenEnd?(this.scanner.next(),n=Hr.call(this)):(Yr.call(this,i-this.scanner.tokenStart+1,45),i+2===this.scanner.tokenEnd?(this.scanner.next(),this.scanner.skipSC(),Ur.call(this,!0),n=\"-\"+this.consume(qr)):(Fr.call(this,i-this.scanner.tokenStart+2,!0),this.scanner.next(),n=this.scanner.substrToCursor(i+1)))}else this.error();return null!==t&&43===t.charCodeAt(0)&&(t=t.substr(1)),null!==n&&43===n.charCodeAt(0)&&(n=n.substr(1)),{type:\"AnPlusB\",loc:this.getLocation(e,this.scanner.tokenStart),a:t,b:n}},generate:function(e){var t=null!==e.a&&void 0!==e.a,n=null!==e.b&&void 0!==e.b;t?(this.chunk(\"+1\"===e.a?\"+n\":\"1\"===e.a?\"n\":\"-1\"===e.a?\"-n\":e.a+\"n\"),n&&(\"-\"===(n=String(e.b)).charAt(0)||\"+\"===n.charAt(0)?(this.chunk(n.charAt(0)),this.chunk(n.substr(1))):(this.chunk(\"+\"),this.chunk(n)))):this.chunk(String(e.b))}},Kr=Se.TYPE,Gr=Kr.WhiteSpace,$r=Kr.Semicolon,Qr=Kr.LeftCurlyBracket,Xr=Kr.Delim;function Zr(){return this.scanner.tokenIndex>0&&this.scanner.lookupType(-1)===Gr?this.scanner.tokenIndex>1?this.scanner.getTokenStart(this.scanner.tokenIndex-1):this.scanner.firstCharOffset:this.scanner.tokenStart}function Jr(){return 0}var ea={name:\"Raw\",structure:{value:String},parse:function(e,t,n){var r,a=this.scanner.getTokenStart(e);return this.scanner.skip(this.scanner.getRawLength(e,t||Jr)),r=n&&this.scanner.tokenStart>a?Zr.call(this):this.scanner.tokenStart,{type:\"Raw\",loc:this.getLocation(a,r),value:this.scanner.source.substring(a,r)}},generate:function(e){this.chunk(e.value)},mode:{default:Jr,leftCurlyBracket:function(e){return e===Qr?1:0},leftCurlyBracketOrSemicolon:function(e){return e===Qr||e===$r?1:0},exclamationMarkOrSemicolon:function(e,t,n){return e===Xr&&33===t.charCodeAt(n)||e===$r?1:0},semicolonIncluded:function(e){return e===$r?2:0}}},ta=Se.TYPE,na=ea.mode,ra=ta.AtKeyword,aa=ta.Semicolon,ia=ta.LeftCurlyBracket,oa=ta.RightCurlyBracket;function sa(e){return this.Raw(e,na.leftCurlyBracketOrSemicolon,!0)}function la(){for(var e,t=1;e=this.scanner.lookupType(t);t++){if(e===oa)return!0;if(e===ia||e===ra)return!1}return!1}var ca={name:\"Atrule\",structure:{name:String,prelude:[\"AtrulePrelude\",\"Raw\",null],block:[\"Block\",null]},parse:function(){var e,t,n=this.scanner.tokenStart,r=null,a=null;switch(this.eat(ra),t=(e=this.scanner.substrToCursor(n+1)).toLowerCase(),this.scanner.skipSC(),!1===this.scanner.eof&&this.scanner.tokenType!==ia&&this.scanner.tokenType!==aa&&(this.parseAtrulePrelude?\"AtrulePrelude\"===(r=this.parseWithFallback(this.AtrulePrelude.bind(this,e),sa)).type&&null===r.children.head&&(r=null):r=sa.call(this,this.scanner.tokenIndex),this.scanner.skipSC()),this.scanner.tokenType){case aa:this.scanner.next();break;case ia:a=this.atrule.hasOwnProperty(t)&&\"function\"==typeof this.atrule[t].block?this.atrule[t].block.call(this):this.Block(la.call(this))}return{type:\"Atrule\",loc:this.getLocation(n,this.scanner.tokenStart),name:e,prelude:r,block:a}},generate:function(e){this.chunk(\"@\"),this.chunk(e.name),null!==e.prelude&&(this.chunk(\" \"),this.node(e.prelude)),e.block?this.node(e.block):this.chunk(\";\")},walkContext:\"atrule\"},ua=Se.TYPE,ha=ua.Semicolon,da=ua.LeftCurlyBracket,pa={name:\"AtrulePrelude\",structure:{children:[[]]},parse:function(e){var t=null;return null!==e&&(e=e.toLowerCase()),this.scanner.skipSC(),t=this.atrule.hasOwnProperty(e)&&\"function\"==typeof this.atrule[e].prelude?this.atrule[e].prelude.call(this):this.readSequence(this.scope.AtrulePrelude),this.scanner.skipSC(),!0!==this.scanner.eof&&this.scanner.tokenType!==da&&this.scanner.tokenType!==ha&&this.error(\"Semicolon or block is expected\"),null===t&&(t=this.createList()),{type:\"AtrulePrelude\",loc:this.getLocationFromList(t),children:t}},generate:function(e){this.children(e)},walkContext:\"atrulePrelude\"},fa=Se.TYPE,ma=fa.Ident,ga=fa.String,ba=fa.Colon,ya=fa.LeftSquareBracket,ka=fa.RightSquareBracket;function va(){this.scanner.eof&&this.error(\"Unexpected end of input\");var e=this.scanner.tokenStart,t=!1,n=!0;return this.scanner.isDelim(42)?(t=!0,n=!1,this.scanner.next()):this.scanner.isDelim(124)||this.eat(ma),this.scanner.isDelim(124)?61!==this.scanner.source.charCodeAt(this.scanner.tokenStart+1)?(this.scanner.next(),this.eat(ma)):t&&this.error(\"Identifier is expected\",this.scanner.tokenEnd):t&&this.error(\"Vertical line is expected\"),n&&this.scanner.tokenType===ba&&(this.scanner.next(),this.eat(ma)),{type:\"Identifier\",loc:this.getLocation(e,this.scanner.tokenStart),name:this.scanner.substrToCursor(e)}}function wa(){var e=this.scanner.tokenStart,t=this.scanner.source.charCodeAt(e);return 61!==t&&126!==t&&94!==t&&36!==t&&42!==t&&124!==t&&this.error(\"Attribute selector (=, ~=, ^=, $=, *=, |=) is expected\"),this.scanner.next(),61!==t&&(this.scanner.isDelim(61)||this.error(\"Equal sign is expected\"),this.scanner.next()),this.scanner.substrToCursor(e)}var xa={name:\"AttributeSelector\",structure:{name:\"Identifier\",matcher:[String,null],value:[\"String\",\"Identifier\",null],flags:[String,null]},parse:function(){var e,t=this.scanner.tokenStart,n=null,r=null,a=null;return this.eat(ya),this.scanner.skipSC(),e=va.call(this),this.scanner.skipSC(),this.scanner.tokenType!==ka&&(this.scanner.tokenType!==ma&&(n=wa.call(this),this.scanner.skipSC(),r=this.scanner.tokenType===ga?this.String():this.Identifier(),this.scanner.skipSC()),this.scanner.tokenType===ma&&(a=this.scanner.getTokenValue(),this.scanner.next(),this.scanner.skipSC())),this.eat(ka),{type:\"AttributeSelector\",loc:this.getLocation(t,this.scanner.tokenStart),name:e,matcher:n,value:r,flags:a}},generate:function(e){var t=\" \";this.chunk(\"[\"),this.node(e.name),null!==e.matcher&&(this.chunk(e.matcher),null!==e.value&&(this.node(e.value),\"String\"===e.value.type&&(t=\"\"))),null!==e.flags&&(this.chunk(t),this.chunk(e.flags)),this.chunk(\"]\")}},Sa=Se.TYPE,Ca=ea.mode,Aa=Sa.WhiteSpace,za=Sa.Comment,Pa=Sa.Semicolon,La=Sa.AtKeyword,Ta=Sa.LeftCurlyBracket,Ea=Sa.RightCurlyBracket;function Oa(e){return this.Raw(e,null,!0)}function Da(){return this.parseWithFallback(this.Rule,Oa)}function Ra(e){return this.Raw(e,Ca.semicolonIncluded,!0)}function Ia(){if(this.scanner.tokenType===Pa)return Ra.call(this,this.scanner.tokenIndex);var e=this.parseWithFallback(this.Declaration,Ra);return this.scanner.tokenType===Pa&&this.scanner.next(),e}var Ma={name:\"Block\",structure:{children:[[\"Atrule\",\"Rule\",\"Declaration\"]]},parse:function(e){var t=e?Ia:Da,n=this.scanner.tokenStart,r=this.createList();this.eat(Ta);e:for(;!this.scanner.eof;)switch(this.scanner.tokenType){case Ea:break e;case Aa:case za:this.scanner.next();break;case La:r.push(this.parseWithFallback(this.Atrule,Oa));break;default:r.push(t.call(this))}return this.scanner.eof||this.eat(Ea),{type:\"Block\",loc:this.getLocation(n,this.scanner.tokenStart),children:r}},generate:function(e){this.chunk(\"{\"),this.children(e,(function(e){\"Declaration\"===e.type&&this.chunk(\";\")})),this.chunk(\"}\")},walkContext:\"block\"},Na=Se.TYPE,Ba=Na.LeftSquareBracket,ja=Na.RightSquareBracket,_a={name:\"Brackets\",structure:{children:[[]]},parse:function(e,t){var n,r=this.scanner.tokenStart;return this.eat(Ba),n=e.call(this,t),this.scanner.eof||this.eat(ja),{type:\"Brackets\",loc:this.getLocation(r,this.scanner.tokenStart),children:n}},generate:function(e){this.chunk(\"[\"),this.children(e),this.chunk(\"]\")}},qa=Se.TYPE.CDC,Wa={name:\"CDC\",structure:[],parse:function(){var e=this.scanner.tokenStart;return this.eat(qa),{type:\"CDC\",loc:this.getLocation(e,this.scanner.tokenStart)}},generate:function(){this.chunk(\"--\\x3e\")}},Fa=Se.TYPE.CDO,Ua={name:\"CDO\",structure:[],parse:function(){var e=this.scanner.tokenStart;return this.eat(Fa),{type:\"CDO\",loc:this.getLocation(e,this.scanner.tokenStart)}},generate:function(){this.chunk(\"\\x3c!--\")}},Ya=Se.TYPE.Ident,Ha={name:\"ClassSelector\",structure:{name:String},parse:function(){return this.scanner.isDelim(46)||this.error(\"Full stop is expected\"),this.scanner.next(),{type:\"ClassSelector\",loc:this.getLocation(this.scanner.tokenStart-1,this.scanner.tokenEnd),name:this.consume(Ya)}},generate:function(e){this.chunk(\".\"),this.chunk(e.name)}},Va=Se.TYPE.Ident,Ka={name:\"Combinator\",structure:{name:String},parse:function(){var e=this.scanner.tokenStart;switch(this.scanner.source.charCodeAt(this.scanner.tokenStart)){case 62:case 43:case 126:this.scanner.next();break;case 47:this.scanner.next(),this.scanner.tokenType===Va&&!1!==this.scanner.lookupValue(0,\"deep\")||this.error(\"Identifier `deep` is expected\"),this.scanner.next(),this.scanner.isDelim(47)||this.error(\"Solidus is expected\"),this.scanner.next();break;default:this.error(\"Combinator is expected\")}return{type:\"Combinator\",loc:this.getLocation(e,this.scanner.tokenStart),name:this.scanner.substrToCursor(e)}},generate:function(e){this.chunk(e.name)}},Ga=Se.TYPE.Comment,$a={name:\"Comment\",structure:{value:String},parse:function(){var e=this.scanner.tokenStart,t=this.scanner.tokenEnd;return this.eat(Ga),t-e+2>=2&&42===this.scanner.source.charCodeAt(t-2)&&47===this.scanner.source.charCodeAt(t-1)&&(t-=2),{type:\"Comment\",loc:this.getLocation(e,this.scanner.tokenStart),value:this.scanner.source.substring(e+2,t)}},generate:function(e){this.chunk(\"/*\"),this.chunk(e.value),this.chunk(\"*/\")}},Qa=ae.isCustomProperty,Xa=Se.TYPE,Za=ea.mode,Ja=Xa.Ident,ei=Xa.Hash,ti=Xa.Colon,ni=Xa.Semicolon,ri=Xa.Delim;function ai(e){return this.Raw(e,Za.exclamationMarkOrSemicolon,!0)}function ii(e){return this.Raw(e,Za.exclamationMarkOrSemicolon,!1)}function oi(){var e=this.scanner.tokenIndex,t=this.Value();return\"Raw\"!==t.type&&!1===this.scanner.eof&&this.scanner.tokenType!==ni&&!1===this.scanner.isDelim(33)&&!1===this.scanner.isBalanceEdge(e)&&this.error(),t}var si={name:\"Declaration\",structure:{important:[Boolean,String],property:String,value:[\"Value\",\"Raw\"]},parse:function(){var e,t=this.scanner.tokenStart,n=this.scanner.tokenIndex,r=li.call(this),a=Qa(r),i=a?this.parseCustomProperty:this.parseValue,o=a?ii:ai,s=!1;return this.scanner.skipSC(),this.eat(ti),a||this.scanner.skipSC(),e=i?this.parseWithFallback(oi,o):o.call(this,this.scanner.tokenIndex),this.scanner.isDelim(33)&&(s=ci.call(this),this.scanner.skipSC()),!1===this.scanner.eof&&this.scanner.tokenType!==ni&&!1===this.scanner.isBalanceEdge(n)&&this.error(),{type:\"Declaration\",loc:this.getLocation(t,this.scanner.tokenStart),important:s,property:r,value:e}},generate:function(e){this.chunk(e.property),this.chunk(\":\"),this.node(e.value),e.important&&this.chunk(!0===e.important?\"!important\":\"!\"+e.important)},walkContext:\"declaration\"};function li(){var e=this.scanner.tokenStart;if(this.scanner.tokenType===ri)switch(this.scanner.source.charCodeAt(this.scanner.tokenStart)){case 42:case 36:case 43:case 35:case 38:this.scanner.next();break;case 47:this.scanner.next(),this.scanner.isDelim(47)&&this.scanner.next()}return this.scanner.tokenType===ei?this.eat(ei):this.eat(Ja),this.scanner.substrToCursor(e)}function ci(){this.eat(ri),this.scanner.skipSC();var e=this.consume(Ja);return\"important\"===e||e}var ui=Se.TYPE,hi=ea.mode,di=ui.WhiteSpace,pi=ui.Comment,fi=ui.Semicolon;function mi(e){return this.Raw(e,hi.semicolonIncluded,!0)}var gi={name:\"DeclarationList\",structure:{children:[[\"Declaration\"]]},parse:function(){for(var e=this.createList();!this.scanner.eof;)switch(this.scanner.tokenType){case di:case pi:case fi:this.scanner.next();break;default:e.push(this.parseWithFallback(this.Declaration,mi))}return{type:\"DeclarationList\",loc:this.getLocationFromList(e),children:e}},generate:function(e){this.children(e,(function(e){\"Declaration\"===e.type&&this.chunk(\";\")}))}},bi=j.consumeNumber,yi=Se.TYPE.Dimension,ki={name:\"Dimension\",structure:{value:String,unit:String},parse:function(){var e=this.scanner.tokenStart,t=bi(this.scanner.source,e);return this.eat(yi),{type:\"Dimension\",loc:this.getLocation(e,this.scanner.tokenStart),value:this.scanner.source.substring(e,t),unit:this.scanner.source.substring(t,this.scanner.tokenStart)}},generate:function(e){this.chunk(e.value),this.chunk(e.unit)}},vi=Se.TYPE.RightParenthesis,wi={name:\"Function\",structure:{name:String,children:[[]]},parse:function(e,t){var n,r=this.scanner.tokenStart,a=this.consumeFunctionName(),i=a.toLowerCase();return n=t.hasOwnProperty(i)?t[i].call(this,t):e.call(this,t),this.scanner.eof||this.eat(vi),{type:\"Function\",loc:this.getLocation(r,this.scanner.tokenStart),name:a,children:n}},generate:function(e){this.chunk(e.name),this.chunk(\"(\"),this.children(e),this.chunk(\")\")},walkContext:\"function\"},xi=Se.TYPE.Hash,Si={name:\"HexColor\",structure:{value:String},parse:function(){var e=this.scanner.tokenStart;return this.eat(xi),{type:\"HexColor\",loc:this.getLocation(e,this.scanner.tokenStart),value:this.scanner.substrToCursor(e+1)}},generate:function(e){this.chunk(\"#\"),this.chunk(e.value)}},Ci=Se.TYPE.Ident,Ai={name:\"Identifier\",structure:{name:String},parse:function(){return{type:\"Identifier\",loc:this.getLocation(this.scanner.tokenStart,this.scanner.tokenEnd),name:this.consume(Ci)}},generate:function(e){this.chunk(e.name)}},zi=Se.TYPE.Hash,Pi={name:\"IdSelector\",structure:{name:String},parse:function(){var e=this.scanner.tokenStart;return this.eat(zi),{type:\"IdSelector\",loc:this.getLocation(e,this.scanner.tokenStart),name:this.scanner.substrToCursor(e+1)}},generate:function(e){this.chunk(\"#\"),this.chunk(e.name)}},Li=Se.TYPE,Ti=Li.Ident,Ei=Li.Number,Oi=Li.Dimension,Di=Li.LeftParenthesis,Ri=Li.RightParenthesis,Ii=Li.Colon,Mi=Li.Delim,Ni={name:\"MediaFeature\",structure:{name:String,value:[\"Identifier\",\"Number\",\"Dimension\",\"Ratio\",null]},parse:function(){var e,t=this.scanner.tokenStart,n=null;if(this.eat(Di),this.scanner.skipSC(),e=this.consume(Ti),this.scanner.skipSC(),this.scanner.tokenType!==Ri){switch(this.eat(Ii),this.scanner.skipSC(),this.scanner.tokenType){case Ei:n=this.lookupNonWSType(1)===Mi?this.Ratio():this.Number();break;case Oi:n=this.Dimension();break;case Ti:n=this.Identifier();break;default:this.error(\"Number, dimension, ratio or identifier is expected\")}this.scanner.skipSC()}return this.eat(Ri),{type:\"MediaFeature\",loc:this.getLocation(t,this.scanner.tokenStart),name:e,value:n}},generate:function(e){this.chunk(\"(\"),this.chunk(e.name),null!==e.value&&(this.chunk(\":\"),this.node(e.value)),this.chunk(\")\")}},Bi=Se.TYPE,ji=Bi.WhiteSpace,_i=Bi.Comment,qi=Bi.Ident,Wi=Bi.LeftParenthesis,Fi={name:\"MediaQuery\",structure:{children:[[\"Identifier\",\"MediaFeature\",\"WhiteSpace\"]]},parse:function(){this.scanner.skipSC();var e=this.createList(),t=null,n=null;e:for(;!this.scanner.eof;){switch(this.scanner.tokenType){case _i:this.scanner.next();continue;case ji:n=this.WhiteSpace();continue;case qi:t=this.Identifier();break;case Wi:t=this.MediaFeature();break;default:break e}null!==n&&(e.push(n),n=null),e.push(t)}return null===t&&this.error(\"Identifier or parenthesis is expected\"),{type:\"MediaQuery\",loc:this.getLocationFromList(e),children:e}},generate:function(e){this.children(e)}},Ui=Se.TYPE.Comma,Yi={name:\"MediaQueryList\",structure:{children:[[\"MediaQuery\"]]},parse:function(e){var t=this.createList();for(this.scanner.skipSC();!this.scanner.eof&&(t.push(this.MediaQuery(e)),this.scanner.tokenType===Ui);)this.scanner.next();return{type:\"MediaQueryList\",loc:this.getLocationFromList(t),children:t}},generate:function(e){this.children(e,(function(){this.chunk(\",\")}))}},Hi=Se.TYPE.Number,Vi={name:\"Number\",structure:{value:String},parse:function(){return{type:\"Number\",loc:this.getLocation(this.scanner.tokenStart,this.scanner.tokenEnd),value:this.consume(Hi)}},generate:function(e){this.chunk(e.value)}},Ki={name:\"Operator\",structure:{value:String},parse:function(){var e=this.scanner.tokenStart;return this.scanner.next(),{type:\"Operator\",loc:this.getLocation(e,this.scanner.tokenStart),value:this.scanner.substrToCursor(e)}},generate:function(e){this.chunk(e.value)}},Gi=Se.TYPE,$i=Gi.LeftParenthesis,Qi=Gi.RightParenthesis,Xi={name:\"Parentheses\",structure:{children:[[]]},parse:function(e,t){var n,r=this.scanner.tokenStart;return this.eat($i),n=e.call(this,t),this.scanner.eof||this.eat(Qi),{type:\"Parentheses\",loc:this.getLocation(r,this.scanner.tokenStart),children:n}},generate:function(e){this.chunk(\"(\"),this.children(e),this.chunk(\")\")}},Zi=j.consumeNumber,Ji=Se.TYPE.Percentage,eo={name:\"Percentage\",structure:{value:String},parse:function(){var e=this.scanner.tokenStart,t=Zi(this.scanner.source,e);return this.eat(Ji),{type:\"Percentage\",loc:this.getLocation(e,this.scanner.tokenStart),value:this.scanner.source.substring(e,t)}},generate:function(e){this.chunk(e.value),this.chunk(\"%\")}},to=Se.TYPE,no=to.Ident,ro=to.Function,ao=to.Colon,io=to.RightParenthesis,oo={name:\"PseudoClassSelector\",structure:{name:String,children:[[\"Raw\"],null]},parse:function(){var e,t,n=this.scanner.tokenStart,r=null;return this.eat(ao),this.scanner.tokenType===ro?(t=(e=this.consumeFunctionName()).toLowerCase(),this.pseudo.hasOwnProperty(t)?(this.scanner.skipSC(),r=this.pseudo[t].call(this),this.scanner.skipSC()):(r=this.createList()).push(this.Raw(this.scanner.tokenIndex,null,!1)),this.eat(io)):e=this.consume(no),{type:\"PseudoClassSelector\",loc:this.getLocation(n,this.scanner.tokenStart),name:e,children:r}},generate:function(e){this.chunk(\":\"),this.chunk(e.name),null!==e.children&&(this.chunk(\"(\"),this.children(e),this.chunk(\")\"))},walkContext:\"function\"},so=Se.TYPE,lo=so.Ident,co=so.Function,uo=so.Colon,ho=so.RightParenthesis,po={name:\"PseudoElementSelector\",structure:{name:String,children:[[\"Raw\"],null]},parse:function(){var e,t,n=this.scanner.tokenStart,r=null;return this.eat(uo),this.eat(uo),this.scanner.tokenType===co?(t=(e=this.consumeFunctionName()).toLowerCase(),this.pseudo.hasOwnProperty(t)?(this.scanner.skipSC(),r=this.pseudo[t].call(this),this.scanner.skipSC()):(r=this.createList()).push(this.Raw(this.scanner.tokenIndex,null,!1)),this.eat(ho)):e=this.consume(lo),{type:\"PseudoElementSelector\",loc:this.getLocation(n,this.scanner.tokenStart),name:e,children:r}},generate:function(e){this.chunk(\"::\"),this.chunk(e.name),null!==e.children&&(this.chunk(\"(\"),this.children(e),this.chunk(\")\"))},walkContext:\"function\"},fo=Se.isDigit,mo=Se.TYPE,go=mo.Number,bo=mo.Delim;function yo(){this.scanner.skipWS();for(var e=this.consume(go),t=0;t<e.length;t++){var n=e.charCodeAt(t);fo(n)||46===n||this.error(\"Unsigned number is expected\",this.scanner.tokenStart-e.length+t)}return 0===Number(e)&&this.error(\"Zero number is not allowed\",this.scanner.tokenStart-e.length),e}var ko={name:\"Ratio\",structure:{left:String,right:String},parse:function(){var e,t=this.scanner.tokenStart,n=yo.call(this);return this.scanner.skipWS(),this.scanner.isDelim(47)||this.error(\"Solidus is expected\"),this.eat(bo),e=yo.call(this),{type:\"Ratio\",loc:this.getLocation(t,this.scanner.tokenStart),left:n,right:e}},generate:function(e){this.chunk(e.left),this.chunk(\"/\"),this.chunk(e.right)}},vo=Se.TYPE,wo=ea.mode,xo=vo.LeftCurlyBracket;function So(e){return this.Raw(e,wo.leftCurlyBracket,!0)}function Co(){var e=this.SelectorList();return\"Raw\"!==e.type&&!1===this.scanner.eof&&this.scanner.tokenType!==xo&&this.error(),e}var Ao={name:\"Rule\",structure:{prelude:[\"SelectorList\",\"Raw\"],block:[\"Block\"]},parse:function(){var e,t,n=this.scanner.tokenIndex,r=this.scanner.tokenStart;return e=this.parseRulePrelude?this.parseWithFallback(Co,So):So.call(this,n),t=this.Block(!0),{type:\"Rule\",loc:this.getLocation(r,this.scanner.tokenStart),prelude:e,block:t}},generate:function(e){this.node(e.prelude),this.node(e.block)},walkContext:\"rule\"},zo=Se.TYPE.Comma,Po={name:\"SelectorList\",structure:{children:[[\"Selector\",\"Raw\"]]},parse:function(){for(var e=this.createList();!this.scanner.eof&&(e.push(this.Selector()),this.scanner.tokenType===zo);)this.scanner.next();return{type:\"SelectorList\",loc:this.getLocationFromList(e),children:e}},generate:function(e){this.children(e,(function(){this.chunk(\",\")}))},walkContext:\"selector\"},Lo=Se.TYPE.String,To={name:\"String\",structure:{value:String},parse:function(){return{type:\"String\",loc:this.getLocation(this.scanner.tokenStart,this.scanner.tokenEnd),value:this.consume(Lo)}},generate:function(e){this.chunk(e.value)}},Eo=Se.TYPE,Oo=Eo.WhiteSpace,Do=Eo.Comment,Ro=Eo.AtKeyword,Io=Eo.CDO,Mo=Eo.CDC;function No(e){return this.Raw(e,null,!1)}var Bo={name:\"StyleSheet\",structure:{children:[[\"Comment\",\"CDO\",\"CDC\",\"Atrule\",\"Rule\",\"Raw\"]]},parse:function(){for(var e,t=this.scanner.tokenStart,n=this.createList();!this.scanner.eof;){switch(this.scanner.tokenType){case Oo:this.scanner.next();continue;case Do:if(33!==this.scanner.source.charCodeAt(this.scanner.tokenStart+2)){this.scanner.next();continue}e=this.Comment();break;case Io:e=this.CDO();break;case Mo:e=this.CDC();break;case Ro:e=this.parseWithFallback(this.Atrule,No);break;default:e=this.parseWithFallback(this.Rule,No)}n.push(e)}return{type:\"StyleSheet\",loc:this.getLocation(t,this.scanner.tokenStart),children:n}},generate:function(e){this.children(e)},walkContext:\"stylesheet\"},jo=Se.TYPE.Ident;function _o(){this.scanner.tokenType!==jo&&!1===this.scanner.isDelim(42)&&this.error(\"Identifier or asterisk is expected\"),this.scanner.next()}var qo={name:\"TypeSelector\",structure:{name:String},parse:function(){var e=this.scanner.tokenStart;return this.scanner.isDelim(124)?(this.scanner.next(),_o.call(this)):(_o.call(this),this.scanner.isDelim(124)&&(this.scanner.next(),_o.call(this))),{type:\"TypeSelector\",loc:this.getLocation(e,this.scanner.tokenStart),name:this.scanner.substrToCursor(e)}},generate:function(e){this.chunk(e.name)}},Wo=Se.isHexDigit,Fo=Se.cmpChar,Uo=Se.TYPE,Yo=Se.NAME,Ho=Uo.Ident,Vo=Uo.Number,Ko=Uo.Dimension;function Go(e,t){for(var n=this.scanner.tokenStart+e,r=0;n<this.scanner.tokenEnd;n++){var a=this.scanner.source.charCodeAt(n);if(45===a&&t&&0!==r)return 0===Go.call(this,e+r+1,!1)&&this.error(),-1;Wo(a)||this.error(t&&0!==r?\"HyphenMinus\"+(r<6?\" or hex digit\":\"\")+\" is expected\":r<6?\"Hex digit is expected\":\"Unexpected input\",n),++r>6&&this.error(\"Too many hex digits\",n)}return this.scanner.next(),r}function $o(e){for(var t=0;this.scanner.isDelim(63);)++t>e&&this.error(\"Too many question marks\"),this.scanner.next()}function Qo(e){this.scanner.source.charCodeAt(this.scanner.tokenStart)!==e&&this.error(Yo[e]+\" is expected\")}function Xo(){var e=0;return this.scanner.isDelim(43)?(this.scanner.next(),this.scanner.tokenType===Ho?void((e=Go.call(this,0,!0))>0&&$o.call(this,6-e)):this.scanner.isDelim(63)?(this.scanner.next(),void $o.call(this,5)):void this.error(\"Hex digit or question mark is expected\")):this.scanner.tokenType===Vo?(Qo.call(this,43),e=Go.call(this,1,!0),this.scanner.isDelim(63)?void $o.call(this,6-e):this.scanner.tokenType===Ko||this.scanner.tokenType===Vo?(Qo.call(this,45),void Go.call(this,1,!1)):void 0):this.scanner.tokenType===Ko?(Qo.call(this,43),void((e=Go.call(this,1,!0))>0&&$o.call(this,6-e))):void this.error()}var Zo={name:\"UnicodeRange\",structure:{value:String},parse:function(){var e=this.scanner.tokenStart;return Fo(this.scanner.source,e,117)||this.error(\"U is expected\"),Fo(this.scanner.source,e+1,43)||this.error(\"Plus sign is expected\"),this.scanner.next(),Xo.call(this),{type:\"UnicodeRange\",loc:this.getLocation(e,this.scanner.tokenStart),value:this.scanner.substrToCursor(e)}},generate:function(e){this.chunk(e.value)}},Jo=Se.isWhiteSpace,es=Se.cmpStr,ts=Se.TYPE,ns=ts.Function,rs=ts.Url,as=ts.RightParenthesis,is={name:\"Url\",structure:{value:[\"String\",\"Raw\"]},parse:function(){var e,t=this.scanner.tokenStart;switch(this.scanner.tokenType){case rs:for(var n=t+4,r=this.scanner.tokenEnd-1;n<r&&Jo(this.scanner.source.charCodeAt(n));)n++;for(;n<r&&Jo(this.scanner.source.charCodeAt(r-1));)r--;e={type:\"Raw\",loc:this.getLocation(n,r),value:this.scanner.source.substring(n,r)},this.eat(rs);break;case ns:es(this.scanner.source,this.scanner.tokenStart,this.scanner.tokenEnd,\"url(\")||this.error(\"Function name must be `url`\"),this.eat(ns),this.scanner.skipSC(),e=this.String(),this.scanner.skipSC(),this.eat(as);break;default:this.error(\"Url or Function is expected\")}return{type:\"Url\",loc:this.getLocation(t,this.scanner.tokenStart),value:e}},generate:function(e){this.chunk(\"url\"),this.chunk(\"(\"),this.node(e.value),this.chunk(\")\")}},os=Se.TYPE.WhiteSpace,ss=Object.freeze({type:\"WhiteSpace\",loc:null,value:\" \"}),ls={AnPlusB:Vr,Atrule:ca,AtrulePrelude:pa,AttributeSelector:xa,Block:Ma,Brackets:_a,CDC:Wa,CDO:Ua,ClassSelector:Ha,Combinator:Ka,Comment:$a,Declaration:si,DeclarationList:gi,Dimension:ki,Function:wi,HexColor:Si,Identifier:Ai,IdSelector:Pi,MediaFeature:Ni,MediaQuery:Fi,MediaQueryList:Yi,Nth:{name:\"Nth\",structure:{nth:[\"AnPlusB\",\"Identifier\"],selector:[\"SelectorList\",null]},parse:function(e){this.scanner.skipSC();var t,n=this.scanner.tokenStart,r=n,a=null;return t=this.scanner.lookupValue(0,\"odd\")||this.scanner.lookupValue(0,\"even\")?this.Identifier():this.AnPlusB(),this.scanner.skipSC(),e&&this.scanner.lookupValue(0,\"of\")?(this.scanner.next(),a=this.SelectorList(),this.needPositions&&(r=this.getLastListNode(a.children).loc.end.offset)):this.needPositions&&(r=t.loc.end.offset),{type:\"Nth\",loc:this.getLocation(n,r),nth:t,selector:a}},generate:function(e){this.node(e.nth),null!==e.selector&&(this.chunk(\" of \"),this.node(e.selector))}},Number:Vi,Operator:Ki,Parentheses:Xi,Percentage:eo,PseudoClassSelector:oo,PseudoElementSelector:po,Ratio:ko,Raw:ea,Rule:Ao,Selector:{name:\"Selector\",structure:{children:[[\"TypeSelector\",\"IdSelector\",\"ClassSelector\",\"AttributeSelector\",\"PseudoClassSelector\",\"PseudoElementSelector\",\"Combinator\",\"WhiteSpace\"]]},parse:function(){var e=this.readSequence(this.scope.Selector);return null===this.getFirstListNode(e)&&this.error(\"Selector is expected\"),{type:\"Selector\",loc:this.getLocationFromList(e),children:e}},generate:function(e){this.children(e)}},SelectorList:Po,String:To,StyleSheet:Bo,TypeSelector:qo,UnicodeRange:Zo,Url:is,Value:{name:\"Value\",structure:{children:[[]]},parse:function(){var e=this.scanner.tokenStart,t=this.readSequence(this.scope.Value);return{type:\"Value\",loc:this.getLocation(e,this.scanner.tokenStart),children:t}},generate:function(e){this.children(e)}},WhiteSpace:{name:\"WhiteSpace\",structure:{value:String},parse:function(){return this.eat(os),ss},generate:function(e){this.chunk(e.value)}}},cs=Zn(Rr),us={generic:!0,types:cs.types,atrules:cs.atrules,properties:cs.properties,node:ls},hs=Se.cmpChar,ds=Se.cmpStr,ps=Se.TYPE,fs=ps.Ident,ms=ps.String,gs=ps.Number,bs=ps.Function,ys=ps.Url,ks=ps.Hash,vs=ps.Dimension,ws=ps.Percentage,xs=ps.LeftParenthesis,Ss=ps.LeftSquareBracket,Cs=ps.Comma,As=ps.Delim,zs=function(e){switch(this.scanner.tokenType){case ks:return this.HexColor();case Cs:return e.space=null,e.ignoreWSAfter=!0,this.Operator();case xs:return this.Parentheses(this.readSequence,e.recognizer);case Ss:return this.Brackets(this.readSequence,e.recognizer);case ms:return this.String();case vs:return this.Dimension();case ws:return this.Percentage();case gs:return this.Number();case bs:return ds(this.scanner.source,this.scanner.tokenStart,this.scanner.tokenEnd,\"url(\")?this.Url():this.Function(this.readSequence,e.recognizer);case ys:return this.Url();case fs:return hs(this.scanner.source,this.scanner.tokenStart,117)&&hs(this.scanner.source,this.scanner.tokenStart+1,43)?this.UnicodeRange():this.Identifier();case As:var t=this.scanner.source.charCodeAt(this.scanner.tokenStart);if(47===t||42===t||43===t||45===t)return this.Operator();35===t&&this.error(\"Hex or identifier is expected\",this.scanner.tokenStart+1)}},Ps={getNode:zs},Ls=Se.TYPE,Ts=Ls.Delim,Es=Ls.Ident,Os=Ls.Dimension,Ds=Ls.Percentage,Rs=Ls.Number,Is=Ls.Hash,Ms=Ls.Colon,Ns=Ls.LeftSquareBracket;var Bs={getNode:function(e){switch(this.scanner.tokenType){case Ns:return this.AttributeSelector();case Is:return this.IdSelector();case Ms:return this.scanner.lookupType(1)===Ms?this.PseudoElementSelector():this.PseudoClassSelector();case Es:return this.TypeSelector();case Rs:case Ds:return this.Percentage();case Os:46===this.scanner.source.charCodeAt(this.scanner.tokenStart)&&this.error(\"Identifier is expected\",this.scanner.tokenStart+1);break;case Ts:switch(this.scanner.source.charCodeAt(this.scanner.tokenStart)){case 43:case 62:case 126:return e.space=null,e.ignoreWSAfter=!0,this.Combinator();case 47:return this.Combinator();case 46:return this.ClassSelector();case 42:case 124:return this.TypeSelector();case 35:return this.IdSelector()}}}},js=function(){this.scanner.skipSC();var e=this.createSingleNodeList(this.IdSelector());return this.scanner.skipSC(),e},_s=Se.TYPE,qs=ea.mode,Ws=_s.Comma,Fs={AtrulePrelude:Ps,Selector:Bs,Value:{getNode:zs,\"-moz-element\":js,element:js,expression:function(){return this.createSingleNodeList(this.Raw(this.scanner.tokenIndex,null,!1))},var:function(){var e=this.createList();return this.scanner.skipSC(),e.push(this.Identifier()),this.scanner.skipSC(),this.scanner.tokenType===Ws&&(e.push(this.Operator()),e.push(this.parseCustomProperty?this.Value(null):this.Raw(this.scanner.tokenIndex,qs.exclamationMarkOrSemicolon,!1))),e}}},Us=Se.TYPE,Ys=Us.String,Hs=Us.Ident,Vs=Us.Url,Ks=Us.Function,Gs=Us.LeftParenthesis,$s={parse:{prelude:function(){var e=this.createList();switch(this.scanner.skipSC(),this.scanner.tokenType){case Ys:e.push(this.String());break;case Vs:case Ks:e.push(this.Url());break;default:this.error(\"String or url() is expected\")}return this.lookupNonWSType(0)!==Hs&&this.lookupNonWSType(0)!==Gs||(e.push(this.WhiteSpace()),e.push(this.MediaQueryList())),e},block:null}},Qs=Se.TYPE,Xs=Qs.WhiteSpace,Zs=Qs.Comment,Js=Qs.Ident,el=Qs.Function,tl=Qs.Colon,nl=Qs.LeftParenthesis;function rl(){return this.createSingleNodeList(this.Raw(this.scanner.tokenIndex,null,!1))}function al(){return this.scanner.skipSC(),this.scanner.tokenType===Js&&this.lookupNonWSType(1)===tl?this.createSingleNodeList(this.Declaration()):il.call(this)}function il(){var e,t=this.createList(),n=null;this.scanner.skipSC();e:for(;!this.scanner.eof;){switch(this.scanner.tokenType){case Xs:n=this.WhiteSpace();continue;case Zs:this.scanner.next();continue;case el:e=this.Function(rl,this.scope.AtrulePrelude);break;case Js:e=this.Identifier();break;case nl:e=this.Parentheses(al,this.scope.AtrulePrelude);break;default:break e}null!==n&&(t.push(n),n=null),t.push(e)}return t}var ol={parse:function(){return this.createSingleNodeList(this.SelectorList())}},sl={parse:function(){return this.createSingleNodeList(this.Nth(!0))}},ll={parse:function(){return this.createSingleNodeList(this.Nth(!1))}};var cl=Tr(function(){for(var e={},t=0;t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}(us,{parseContext:{default:\"StyleSheet\",stylesheet:\"StyleSheet\",atrule:\"Atrule\",atrulePrelude:function(e){return this.AtrulePrelude(e.atrule?String(e.atrule):null)},mediaQueryList:\"MediaQueryList\",mediaQuery:\"MediaQuery\",rule:\"Rule\",selectorList:\"SelectorList\",selector:\"Selector\",block:function(){return this.Block(!0)},declarationList:\"DeclarationList\",declaration:\"Declaration\",value:\"Value\"},scope:Fs,atrule:{\"font-face\":{parse:{prelude:null,block:function(){return this.Block(!0)}}},import:$s,media:{parse:{prelude:function(){return this.createSingleNodeList(this.MediaQueryList())},block:function(){return this.Block(!1)}}},page:{parse:{prelude:function(){return this.createSingleNodeList(this.SelectorList())},block:function(){return this.Block(!0)}}},supports:{parse:{prelude:function(){var e=il.call(this);return null===this.getFirstListNode(e)&&this.error(\"Condition is expected\"),e},block:function(){return this.Block(!1)}}}},pseudo:{dir:{parse:function(){return this.createSingleNodeList(this.Identifier())}},has:{parse:function(){return this.createSingleNodeList(this.SelectorList())}},lang:{parse:function(){return this.createSingleNodeList(this.Identifier())}},matches:ol,not:ol,\"nth-child\":sl,\"nth-last-child\":sl,\"nth-last-of-type\":ll,\"nth-of-type\":ll,slotted:{parse:function(){return this.createSingleNodeList(this.Selector())}}},node:ls},{node:ls})),ul=Object.prototype.hasOwnProperty;function hl(e,t){var n=Object.create(null);if(!Array.isArray(e))return null;for(var r=0;r<e.length;r++){var a=e[r];t&&(a=a.toLowerCase()),n[a]=!0}return n}function dl(e){if(!e)return null;var t=hl(e.tags,!0),n=hl(e.ids),r=hl(e.classes);return null===t&&null===n&&null===r?null:{tags:t,ids:n,classes:r}}var pl={buildIndex:function(e){var t=!1;if(e.scopes&&Array.isArray(e.scopes)){t=Object.create(null);for(var n=0;n<e.scopes.length;n++){var r=e.scopes[n];if(!r||!Array.isArray(r))throw new Error(\"Wrong usage format\");for(var a=0;a<r.length;a++){var i=r[a];if(ul.call(t,i))throw new Error(\"Class can't be used for several scopes: \"+i);t[i]=n+1}}}return{whitelist:dl(e),blacklist:dl(e.blacklist),scopes:t}}},fl={hasNoChildren:function(e){return!e||!e.children||e.children.isEmpty()},isNodeChildrenList:function(e,t){return null!==e&&e.children===t}},ml=cl.keyword,{hasNoChildren:gl}=fl,{isNodeChildrenList:bl}=fl,yl=Object.prototype.hasOwnProperty,kl=cl.walk,{hasNoChildren:vl}=fl;var{isNodeChildrenList:wl}=fl;function xl(e){return\"Operator\"===e.type&&\"+\"!==e.value&&\"-\"!==e.value}var Sl=cl.walk,Cl={Atrule:function(e,t,n){if(e.block&&(null!==this.stylesheet&&(this.stylesheet.firstAtrulesAllowed=!1),gl(e.block)))n.remove(t);else switch(e.name){case\"charset\":if(gl(e.prelude))return void n.remove(t);if(t.prev)return void n.remove(t);break;case\"import\":if(null===this.stylesheet||!this.stylesheet.firstAtrulesAllowed)return void n.remove(t);n.prevUntil(t.prev,(function(e){if(\"Atrule\"!==e.type||\"import\"!==e.name&&\"charset\"!==e.name)return this.root.firstAtrulesAllowed=!1,n.remove(t),!0}),this);break;default:var r=ml(e.name).basename;\"keyframes\"!==r&&\"media\"!==r&&\"supports\"!==r||(gl(e.prelude)||gl(e.block))&&n.remove(t)}},Comment:function(e,t,n){n.remove(t)},Declaration:function(e,t,n){e.value.children&&e.value.children.isEmpty()&&n.remove(t)},Raw:function(e,t,n){(bl(this.stylesheet,n)||bl(this.block,n))&&n.remove(t)},Rule:function(e,t,n,r){if(vl(e.prelude)||vl(e.block))n.remove(t);else{var a=r.usage;!a||null===a.whitelist&&null===a.blacklist||(function e(t,n){return t.children.each((function(r,a,i){var o=!1;kl(r,(function(r){if(null===this.selector||this.selector===t)switch(r.type){case\"SelectorList\":null!==this.function&&\"not\"===this.function.name.toLowerCase()||e(r,n)&&(o=!0);break;case\"ClassSelector\":null===n.whitelist||null===n.whitelist.classes||yl.call(n.whitelist.classes,r.name)||(o=!0),null!==n.blacklist&&null!==n.blacklist.classes&&yl.call(n.blacklist.classes,r.name)&&(o=!0);break;case\"IdSelector\":null===n.whitelist||null===n.whitelist.ids||yl.call(n.whitelist.ids,r.name)||(o=!0),null!==n.blacklist&&null!==n.blacklist.ids&&yl.call(n.blacklist.ids,r.name)&&(o=!0);break;case\"TypeSelector\":\"*\"!==r.name.charAt(r.name.length-1)&&(null===n.whitelist||null===n.whitelist.tags||yl.call(n.whitelist.tags,r.name.toLowerCase())||(o=!0),null!==n.blacklist&&null!==n.blacklist.tags&&yl.call(n.blacklist.tags,r.name.toLowerCase())&&(o=!0))}})),o&&i.remove(a)})),t.children.isEmpty()}(e.prelude,a),!vl(e.prelude))||n.remove(t)}},TypeSelector:function(e,t,n){if(\"*\"===t.data.name){var r=t.next&&t.next.data.type;\"IdSelector\"!==r&&\"ClassSelector\"!==r&&\"AttributeSelector\"!==r&&\"PseudoClassSelector\"!==r&&\"PseudoElementSelector\"!==r||n.remove(t)}},WhiteSpace:function(e,t,n){null!==t.next&&null!==t.prev?wl(this.stylesheet,n)||wl(this.block,n)?n.remove(t):\"WhiteSpace\"!==t.next.data.type?(xl(t.prev.data)||xl(t.next.data))&&n.remove(t):n.remove(t):n.remove(t)}},Al=cl.keyword,zl=/\\\\([0-9A-Fa-f]{1,6})(\\r\\n|[ \\t\\n\\f\\r])?|\\\\./g,Pl=/^(-?\\d|--)|[\\u0000-\\u002c\\u002e\\u002f\\u003A-\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u009f]/;var Ll=cl.List;var Tl=function(e){e.children.each((function(e,t,n){\"Identifier\"===e.type&&\"none\"===e.name.toLowerCase()&&(n.head===n.tail?t.data={type:\"Number\",loc:e.loc,value:\"0\"}:function(e,t){var n=t.prev,r=t.next;null!==r?\"WhiteSpace\"!==r.data.type||null!==n&&\"WhiteSpace\"!==n.data.type||e.remove(r):null!==n&&\"WhiteSpace\"===n.data.type&&e.remove(n),e.remove(t)}(n,t))}))},El=cl.property,Ol={font:function(e){var t=e.children;t.eachRight((function(e,t){if(\"Identifier\"===e.type)if(\"bold\"===e.name)t.data={type:\"Number\",loc:e.loc,value:\"700\"};else if(\"normal\"===e.name){var n=t.prev;n&&\"Operator\"===n.data.type&&\"/\"===n.data.value&&this.remove(n),this.remove(t)}else if(\"medium\"===e.name){var r=t.next;r&&\"Operator\"===r.data.type||this.remove(t)}})),t.each((function(e,t){\"WhiteSpace\"===e.type&&(t.prev&&t.next&&\"WhiteSpace\"!==t.next.data.type||this.remove(t))})),t.isEmpty()&&t.insert(t.createItem({type:\"Identifier\",name:\"normal\"}))},\"font-weight\":function(e){var t=e.children.head.data;if(\"Identifier\"===t.type)switch(t.name){case\"normal\":e.children.head.data={type:\"Number\",loc:t.loc,value:\"400\"};break;case\"bold\":e.children.head.data={type:\"Number\",loc:t.loc,value:\"700\"}}},background:function(e){function t(){if(a.length)return a[a.length-1].type}function n(){\"WhiteSpace\"===t()&&a.pop(),a.length||a.unshift({type:\"Number\",loc:null,value:\"0\"},{type:\"WhiteSpace\",value:\" \"},{type:\"Number\",loc:null,value:\"0\"}),r.push.apply(r,a),a=[]}var r=[],a=[];e.children.each((function(e){if(\"Operator\"===e.type&&\",\"===e.value)return n(),void r.push(e);(\"Identifier\"!==e.type||\"transparent\"!==e.name&&\"none\"!==e.name&&\"repeat\"!==e.name&&\"scroll\"!==e.name)&&(\"WhiteSpace\"!==e.type||a.length&&\"WhiteSpace\"!==t())&&a.push(e)})),n(),e.children=(new Ll).fromArray(r)},border:Tl,outline:Tl},Dl=/^(?:\\+|(-))?0*(\\d*)(?:\\.0*|(\\.\\d*?)0*)?$/,Rl=/^([\\+\\-])?0*(\\d*)(?:\\.0*|(\\.\\d*?)0*)?$/,Il={Dimension:!0,HexColor:!0,Identifier:!0,Number:!0,Raw:!0,UnicodeRange:!0};function Ml(e,t){var n=t&&null!==t.prev&&Il.hasOwnProperty(t.prev.data.type)?Rl:Dl;return\"\"!==(e=String(e).replace(n,\"$1$2$3\"))&&\"-\"!==e||(e=\"0\"),e}var Nl=function(e,t){e.value=Ml(e.value,t)},Bl=Nl.pack=Ml,jl={px:!0,mm:!0,cm:!0,in:!0,pt:!0,pc:!0,em:!0,ex:!0,ch:!0,rem:!0,vh:!0,vw:!0,vmin:!0,vmax:!0,vm:!0},_l=cl.lexer,ql=Nl.pack,Wl=new Set([\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"flex\",\"-ms-flex\"]),Fl=new RegExp(\"^((\\\\\\\\[0-9a-f]{1,6}(\\\\r\\\\n|[ \\\\n\\\\r\\\\t\\\\f])?|\\\\\\\\[^\\\\n\\\\r\\\\f0-9a-fA-F])|[^\\\"'\\\\(\\\\)\\\\\\\\\\\\s\\0\\b\\v\u000e-\u001f])*$\",\"i\"),Ul=cl.lexer,Yl=Nl.pack,Hl={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgrey:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",grey:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"639\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},Vl={8e5:\"maroon\",800080:\"purple\",808e3:\"olive\",808080:\"gray\",\"00ffff\":\"cyan\",f0ffff:\"azure\",f5f5dc:\"beige\",ffe4c4:\"bisque\",\"000000\":\"black\",\"0000ff\":\"blue\",a52a2a:\"brown\",ff7f50:\"coral\",ffd700:\"gold\",\"008000\":\"green\",\"4b0082\":\"indigo\",fffff0:\"ivory\",f0e68c:\"khaki\",\"00ff00\":\"lime\",faf0e6:\"linen\",\"000080\":\"navy\",ffa500:\"orange\",da70d6:\"orchid\",cd853f:\"peru\",ffc0cb:\"pink\",dda0dd:\"plum\",f00:\"red\",ff0000:\"red\",fa8072:\"salmon\",a0522d:\"sienna\",c0c0c0:\"silver\",fffafa:\"snow\",d2b48c:\"tan\",\"008080\":\"teal\",ff6347:\"tomato\",ee82ee:\"violet\",f5deb3:\"wheat\",ffffff:\"white\",ffff00:\"yellow\"};function Kl(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function Gl(e,t,n,r){var a,i,o;if(0===t)a=i=o=n;else{var s=n<.5?n*(1+t):n+t-n*t,l=2*n-s;a=Kl(l,s,e+1/3),i=Kl(l,s,e),o=Kl(l,s,e-1/3)}return[Math.round(255*a),Math.round(255*i),Math.round(255*o),r]}function $l(e){return 1===(e=e.toString(16)).length?\"0\"+e:e}function Ql(e,t,n){for(var r=e.head,a=[],i=!1;null!==r;){var o=r.data,s=o.type;switch(s){case\"Number\":case\"Percentage\":if(i)return;i=!0,a.push({type:s,value:Number(o.value)});break;case\"Operator\":if(\",\"===o.value){if(!i)return;i=!1}else if(i||\"+\"!==o.value)return;break;default:return}r=r.next}if(a.length===t){if(4===a.length){if(\"Number\"!==a[3].type)return;a[3].type=\"Alpha\"}if(n){if(a[0].type!==a[1].type||a[0].type!==a[2].type)return}else{if(\"Number\"!==a[0].type||\"Percentage\"!==a[1].type||\"Percentage\"!==a[2].type)return;a[0].type=\"Angle\"}return a.map((function(e){var t=Math.max(0,e.value);switch(e.type){case\"Number\":t=Math.min(t,255);break;case\"Percentage\":if(t=Math.min(t,100)/100,!n)return t;t*=255;break;case\"Angle\":return(t%360+360)%360/360;case\"Alpha\":return Math.min(t,1)}return Math.round(t)}))}}function Xl(e,t){var n=e.value.toLowerCase();6===n.length&&n[0]===n[1]&&n[2]===n[3]&&n[4]===n[5]&&(n=n[0]+n[2]+n[4]),Vl[n]?t.data={type:\"Identifier\",loc:e.loc,name:Vl[n]}:e.value=n}var Zl={compressFunction:function(e,t,n){var r,a=e.name;if(\"rgba\"===a||\"hsla\"===a){if(!(r=Ql(e.children,4,\"rgba\"===a)))return;if(\"hsla\"===a&&(r=Gl.apply(null,r),e.name=\"rgba\"),0===r[3]){var i=this.function&&this.function.name;if(0===r[0]&&0===r[1]&&0===r[2]||!/^(?:to|from|color-stop)$|gradient$/i.test(i))return void(t.data={type:\"Identifier\",loc:e.loc,name:\"transparent\"})}if(1!==r[3])return void e.children.each((function(e,t,n){\"Operator\"!==e.type?t.data={type:\"Number\",loc:e.loc,value:Yl(r.shift(),null)}:\",\"!==e.value&&n.remove(t)}));a=\"rgb\"}if(\"hsl\"===a){if(!(r=r||Ql(e.children,3,!1)))return;r=Gl.apply(null,r),a=\"rgb\"}if(\"rgb\"===a){if(!(r=r||Ql(e.children,3,!0)))return;var o=t.next;o&&\"WhiteSpace\"!==o.data.type&&n.insert(n.createItem({type:\"WhiteSpace\",value:\" \"}),o),t.data={type:\"HexColor\",loc:e.loc,value:$l(r[0])+$l(r[1])+$l(r[2])},Xl(t.data,t)}},compressIdent:function(e,t){if(null!==this.declaration){var n=e.name.toLowerCase();if(Hl.hasOwnProperty(n)&&Ul.matchDeclaration(this.declaration).isType(e,\"color\")){var r=Hl[n];r.length+1<=n.length?t.data={type:\"HexColor\",loc:e.loc,value:r}:(\"grey\"===n&&(n=\"gray\"),e.name=n)}}},compressHex:Xl},Jl=cl.walk,ec={Atrule:function(e){\"keyframes\"===Al(e.name).basename&&function(e){e.block.children.each((function(e){e.prelude.children.each((function(e){e.children.each((function(e,t){\"Percentage\"===e.type&&\"100\"===e.value?t.data={type:\"TypeSelector\",loc:e.loc,name:\"to\"}:\"TypeSelector\"===e.type&&\"from\"===e.name&&(t.data={type:\"Percentage\",loc:e.loc,value:\"0\"})}))}))}))}(e)},AttributeSelector:function(e){var t=e.value;if(t&&\"String\"===t.type){var n=t.value.replace(/^(.)(.*)\\1$/,\"$2\");(function(e){if(\"\"!==e&&\"-\"!==e)return e=e.replace(zl,\"a\"),!Pl.test(e)})(n)&&(e.value={type:\"Identifier\",loc:t.loc,name:n})}},Value:function(e){if(this.declaration){var t=El(this.declaration.property);Ol.hasOwnProperty(t.basename)&&Ol[t.basename](e)}},Dimension:function(e,t){var n=Bl(e.value,t);if(e.value=n,\"0\"===n&&null!==this.declaration&&null===this.atrulePrelude){var r=e.unit.toLowerCase();if(!jl.hasOwnProperty(r))return;if(\"-ms-flex\"===this.declaration.property||\"flex\"===this.declaration.property)return;if(this.function&&\"calc\"===this.function.name)return;t.data={type:\"Number\",loc:e.loc,value:n}}},Percentage:function(e,t){e.value=ql(e.value,t),\"0\"===e.value&&this.declaration&&!Wl.has(this.declaration.property)&&(t.data={type:\"Number\",loc:e.loc,value:e.value},_l.matchDeclaration(this.declaration).isType(t.data,\"length\")||(t.data=e))},Number:Nl,String:function(e){var t=e.value;t=t.replace(/\\\\(\\r\\n|\\r|\\n|\\f)/g,\"\"),e.value=t},Url:function(e){var t=e.value;if(\"String\"===t.type){var n=t.value[0],r=t.value.substr(1,t.value.length-2);r=r.replace(/\\\\\\\\/g,\"/\"),Fl.test(r)?e.value={type:\"Raw\",loc:e.value.loc,value:r}:e.value.value=-1===r.indexOf('\"')?'\"'+r+'\"':n+r+n}},HexColor:Zl.compressHex,Identifier:Zl.compressIdent,Function:Zl.compressFunction},tc=cl.generate;function nc(){this.seed=0,this.map=Object.create(null)}nc.prototype.resolve=function(e){var t=this.map[e];return t||(t=++this.seed,this.map[e]=t),t};var rc=cl.generate,ac={\"first-letter\":!0,\"first-line\":!0,after:!0,before:!0},ic={link:!0,visited:!0,hover:!0,active:!0,\"first-letter\":!0,\"first-line\":!0,after:!0,before:!0},oc=cl.keyword,sc=cl.walk,lc=cl.generate,cc=function(e,t){var n,r=(n=new nc,function(e){var t=tc(e);return e.id=n.resolve(t),e.length=t.length,e.fingerprint=null,e});return sc(e,{visit:\"Rule\",enter:function(e){e.block.children.each(r),function(e,t){var n=Object.create(null),r=!1;e.prelude.children.each((function(e){var a=\"*\",i=0;e.children.each((function(o){switch(o.type){case\"ClassSelector\":if(t&&t.scopes){var s=t.scopes[o.name]||0;if(0!==i&&s!==i)throw new Error(\"Selector can't has classes from different scopes: \"+rc(e));i=s}break;case\"PseudoClassSelector\":var l=o.name.toLowerCase();ic.hasOwnProperty(l)||(n[l]=!0,r=!0);break;case\"PseudoElementSelector\":l=o.name.toLowerCase();ac.hasOwnProperty(l)||(n[l]=!0,r=!0);break;case\"TypeSelector\":a=o.name.toLowerCase();break;case\"AttributeSelector\":o.flags&&(n[\"[\"+o.flags.toLowerCase()+\"]\"]=!0,r=!0);break;case\"WhiteSpace\":case\"Combinator\":a=\"*\"}})),e.compareMarker=function(e){var t=0,n=0,r=0;return e.children.each((function e(a){switch(a.type){case\"SelectorList\":case\"Selector\":a.children.each(e);break;case\"IdSelector\":t++;break;case\"ClassSelector\":case\"AttributeSelector\":n++;break;case\"PseudoClassSelector\":switch(a.name.toLowerCase()){case\"not\":a.children.each(e);break;case\"before\":case\"after\":case\"first-line\":case\"first-letter\":r++;break;default:n++}break;case\"PseudoElementSelector\":r++;break;case\"TypeSelector\":\"*\"!==a.name.charAt(a.name.length-1)&&r++}})),[t,n,r]}(e).toString(),e.id=null,e.id=rc(e),i&&(e.compareMarker+=\":\"+i),\"*\"!==a&&(e.compareMarker+=\",\"+a)})),e.pseudoSignature=r&&Object.keys(n).sort().join(\",\")}(e,t.usage)}}),sc(e,{visit:\"Atrule\",enter:function(e){e.prelude&&(e.prelude.id=null,e.prelude.id=lc(e.prelude)),\"keyframes\"===oc(e.name).basename&&(e.block.avoidRulesMerge=!0,e.block.children.each((function(e){e.prelude.children.each((function(e){e.compareMarker=e.id}))})))}}),{declaration:r}},uc=cl.List,hc=cl.keyword,dc=Object.prototype.hasOwnProperty,pc=cl.walk;function fc(e,t,n,r){var a=t.data,i=hc(a.name).basename,o=a.name.toLowerCase()+\"/\"+(a.prelude?a.prelude.id:null);dc.call(e,i)||(e[i]=Object.create(null)),r&&delete e[i][o],dc.call(e[i],o)||(e[i][o]=new uc),e[i][o].append(n.remove(t))}function mc(e){return\"Atrule\"===e.type&&\"media\"===e.name}function gc(e,t,n){if(mc(e)){var r=t.prev&&t.prev.data;r&&mc(r)&&e.prelude&&r.prelude&&e.prelude.id===r.prelude.id&&(r.block.children.appendList(e.block.children),n.remove(t))}}var bc=function(e,t){!function(e,t){var n=Object.create(null),r=null;for(var a in e.children.each((function(e,a,i){if(\"Atrule\"===e.type){var o=hc(e.name).basename;switch(o){case\"keyframes\":return void fc(n,a,i,!0);case\"media\":if(t.forceMediaMerge)return void fc(n,a,i,!1)}null===r&&\"charset\"!==o&&\"import\"!==o&&(r=a)}else null===r&&(r=a)})),n)for(var i in n[a])e.children.insertList(n[a][i],\"media\"===a?null:r)}(e,t),pc(e,{visit:\"Atrule\",reverse:!0,enter:gc})},yc=Object.prototype.hasOwnProperty;function kc(e,t){for(var n=e.head;null!==n;){for(var r=t.head;null!==r;){if(n.data.compareMarker===r.data.compareMarker)return!0;r=r.next}n=n.next}return!1}var vc={isEqualSelectors:function(e,t){for(var n=e.head,r=t.head;null!==n&&null!==r&&n.data.id===r.data.id;)n=n.next,r=r.next;return null===n&&null===r},isEqualDeclarations:function(e,t){for(var n=e.head,r=t.head;null!==n&&null!==r&&n.data.id===r.data.id;)n=n.next,r=r.next;return null===n&&null===r},compareDeclarations:function(e,t){for(var n={eq:[],ne1:[],ne2:[],ne2overrided:[]},r=Object.create(null),a=Object.create(null),i=t.head;i;i=i.next)a[i.data.id]=!0;for(i=e.head;i;i=i.next){(o=i.data).fingerprint&&(r[o.fingerprint]=o.important),a[o.id]?(a[o.id]=!1,n.eq.push(o)):n.ne1.push(o)}for(i=t.head;i;i=i.next){var o;a[(o=i.data).id]&&((!yc.call(r,o.fingerprint)||!r[o.fingerprint]&&o.important)&&n.ne2.push(o),n.ne2overrided.push(o))}return n},addSelectors:function(e,t){return t.each((function(t){for(var n=t.id,r=e.head;r;){var a=r.data.id;if(a===n)return;if(a>n)break;r=r.next}e.insert(e.createItem(t),r)})),e},hasSimilarSelectors:kc,unsafeToSkipNode:function e(t){switch(t.type){case\"Rule\":return kc(t.prelude.children,this);case\"Atrule\":if(t.block)return t.block.children.some(e,this);break;case\"Declaration\":return!1}return!0}},wc=cl.walk;function xc(e,t,n){var r=e.prelude.children,a=e.block.children;n.prevUntil(t.prev,(function(i){if(\"Rule\"!==i.type)return vc.unsafeToSkipNode.call(r,i);var o=i.prelude.children,s=i.block.children;if(e.pseudoSignature===i.pseudoSignature){if(vc.isEqualSelectors(o,r))return s.appendList(a),n.remove(t),!0;if(vc.isEqualDeclarations(a,s))return vc.addSelectors(o,r),n.remove(t),!0}return vc.hasSimilarSelectors(r,o)}))}var Sc=cl.List,Cc=cl.walk;function Ac(e,t,n){for(var r=e.prelude.children;r.head!==r.tail;){var a=new Sc;a.insert(r.remove(r.head)),n.insert(n.createItem({type:\"Rule\",loc:e.loc,prelude:{type:\"SelectorList\",loc:e.prelude.loc,children:a},block:{type:\"Block\",loc:e.block.loc,children:e.block.children.copy()},pseudoSignature:e.pseudoSignature}),t)}}var zc=cl.List,Pc=cl.generate,Lc=cl.walk,Tc=[\"top\",\"right\",\"bottom\",\"left\"],Ec={\"margin-top\":\"top\",\"margin-right\":\"right\",\"margin-bottom\":\"bottom\",\"margin-left\":\"left\",\"padding-top\":\"top\",\"padding-right\":\"right\",\"padding-bottom\":\"bottom\",\"padding-left\":\"left\",\"border-top-color\":\"top\",\"border-right-color\":\"right\",\"border-bottom-color\":\"bottom\",\"border-left-color\":\"left\",\"border-top-width\":\"top\",\"border-right-width\":\"right\",\"border-bottom-width\":\"bottom\",\"border-left-width\":\"left\",\"border-top-style\":\"top\",\"border-right-style\":\"right\",\"border-bottom-style\":\"bottom\",\"border-left-style\":\"left\"},Oc={margin:\"margin\",\"margin-top\":\"margin\",\"margin-right\":\"margin\",\"margin-bottom\":\"margin\",\"margin-left\":\"margin\",padding:\"padding\",\"padding-top\":\"padding\",\"padding-right\":\"padding\",\"padding-bottom\":\"padding\",\"padding-left\":\"padding\",\"border-color\":\"border-color\",\"border-top-color\":\"border-color\",\"border-right-color\":\"border-color\",\"border-bottom-color\":\"border-color\",\"border-left-color\":\"border-color\",\"border-width\":\"border-width\",\"border-top-width\":\"border-width\",\"border-right-width\":\"border-width\",\"border-bottom-width\":\"border-width\",\"border-left-width\":\"border-width\",\"border-style\":\"border-style\",\"border-top-style\":\"border-style\",\"border-right-style\":\"border-style\",\"border-bottom-style\":\"border-style\",\"border-left-style\":\"border-style\"};function Dc(e){this.name=e,this.loc=null,this.iehack=void 0,this.sides={top:null,right:null,bottom:null,left:null}}function Rc(e,t,n,r){var a=e.block.children,i=e.prelude.children.first().id;return e.block.children.eachRight((function(e,o){var s=e.property;if(Oc.hasOwnProperty(s)){var l,c,u=Oc[s];r&&i!==r||u in t&&(c=2,l=t[u]),l&&l.add(s,e)||(c=1,(l=new Dc(u)).add(s,e))?(t[u]=l,n.push({operation:c,block:a,item:o,shorthand:l}),r=i):r=null}})),r}Dc.prototype.getValueSequence=function(e,t){var n=[],r=\"\";return!(e.value.children.some((function(t){var a=!1;switch(t.type){case\"Identifier\":switch(t.name){case\"\\\\0\":case\"\\\\9\":return void(r=t.name);case\"inherit\":case\"initial\":case\"unset\":case\"revert\":a=t.name}break;case\"Dimension\":switch(t.unit){case\"rem\":case\"vw\":case\"vh\":case\"vmin\":case\"vmax\":case\"vm\":a=t.unit}break;case\"HexColor\":case\"Number\":case\"Percentage\":break;case\"Function\":a=t.name;break;case\"WhiteSpace\":return!1;default:return!0}n.push({node:t,special:a,important:e.important})}))||n.length>t)&&((\"string\"!=typeof this.iehack||this.iehack===r)&&(this.iehack=r,n))},Dc.prototype.canOverride=function(e,t){var n=this.sides[e];return!n||t.important&&!n.important},Dc.prototype.add=function(e,t){return!!function(){var n=this.sides,r=Ec[e];if(r){if(r in n==!1)return!1;if(!(i=this.getValueSequence(t,1))||!i.length)return!1;for(var a in n)if(null!==n[a]&&n[a].special!==i[0].special)return!1;return!this.canOverride(r,i[0])||(n[r]=i[0],!0)}if(e===this.name){var i;if(!(i=this.getValueSequence(t,4))||!i.length)return!1;switch(i.length){case 1:i[1]=i[0],i[2]=i[0],i[3]=i[0];break;case 2:i[2]=i[0],i[3]=i[1];break;case 3:i[3]=i[1]}for(var o=0;o<4;o++)for(var a in n)if(null!==n[a]&&n[a].special!==i[o].special)return!1;for(o=0;o<4;o++)this.canOverride(Tc[o],i[o])&&(n[Tc[o]]=i[o]);return!0}}.call(this)&&(this.loc||(this.loc=t.loc),!0)},Dc.prototype.isOkToMinimize=function(){var e=this.sides.top,t=this.sides.right,n=this.sides.bottom,r=this.sides.left;if(e&&t&&n&&r){var a=e.important+t.important+n.important+r.important;return 0===a||4===a}return!1},Dc.prototype.getValue=function(){var e=new zc,t=this.sides,n=[t.top,t.right,t.bottom,t.left],r=[Pc(t.top.node),Pc(t.right.node),Pc(t.bottom.node),Pc(t.left.node)];r[3]===r[1]&&(n.pop(),r[2]===r[0]&&(n.pop(),r[1]===r[0]&&n.pop()));for(var a=0;a<n.length;a++)a&&e.appendData({type:\"WhiteSpace\",value:\" \"}),e.appendData(n[a].node);return this.iehack&&(e.appendData({type:\"WhiteSpace\",value:\" \"}),e.appendData({type:\"Identifier\",loc:null,name:this.iehack})),{type:\"Value\",loc:null,children:e}},Dc.prototype.getDeclaration=function(){return{type:\"Declaration\",loc:this.loc,important:this.sides.top.important,property:this.name,value:this.getValue()}};var Ic=function(e,t){var n={},r=[];Lc(e,{visit:\"Rule\",reverse:!0,enter:function(e){var t,a,i=this.block||this.stylesheet,o=(e.pseudoSignature||\"\")+\"|\"+e.prelude.children.first().id;n.hasOwnProperty(i.id)?t=n[i.id]:(t={lastShortSelector:null},n[i.id]=t),t.hasOwnProperty(o)?a=t[o]:(a={},t[o]=a),t.lastShortSelector=Rc.call(this,e,a,r,t.lastShortSelector)}}),function(e,t){e.forEach((function(e){var n=e.shorthand;n.isOkToMinimize()&&(1===e.operation?e.item.data=t(n.getDeclaration()):e.block.remove(e.item))}))}(r,t.declaration)},Mc=cl.property,Nc=cl.keyword,Bc=cl.walk,jc=cl.generate,_c=1,qc={src:1},Wc={display:/table|ruby|flex|-(flex)?box$|grid|contents|run-in/i,\"text-align\":/^(start|end|match-parent|justify-all)$/i},Fc=[\"auto\",\"crosshair\",\"default\",\"move\",\"text\",\"wait\",\"help\",\"n-resize\",\"e-resize\",\"s-resize\",\"w-resize\",\"ne-resize\",\"nw-resize\",\"se-resize\",\"sw-resize\",\"pointer\",\"progress\",\"not-allowed\",\"no-drop\",\"vertical-text\",\"all-scroll\",\"col-resize\",\"row-resize\"],Uc=[\"static\",\"relative\",\"absolute\",\"fixed\"],Yc={\"border-width\":[\"border\"],\"border-style\":[\"border\"],\"border-color\":[\"border\"],\"border-top\":[\"border\"],\"border-right\":[\"border\"],\"border-bottom\":[\"border\"],\"border-left\":[\"border\"],\"border-top-width\":[\"border-top\",\"border-width\",\"border\"],\"border-right-width\":[\"border-right\",\"border-width\",\"border\"],\"border-bottom-width\":[\"border-bottom\",\"border-width\",\"border\"],\"border-left-width\":[\"border-left\",\"border-width\",\"border\"],\"border-top-style\":[\"border-top\",\"border-style\",\"border\"],\"border-right-style\":[\"border-right\",\"border-style\",\"border\"],\"border-bottom-style\":[\"border-bottom\",\"border-style\",\"border\"],\"border-left-style\":[\"border-left\",\"border-style\",\"border\"],\"border-top-color\":[\"border-top\",\"border-color\",\"border\"],\"border-right-color\":[\"border-right\",\"border-color\",\"border\"],\"border-bottom-color\":[\"border-bottom\",\"border-color\",\"border\"],\"border-left-color\":[\"border-left\",\"border-color\",\"border\"],\"margin-top\":[\"margin\"],\"margin-right\":[\"margin\"],\"margin-bottom\":[\"margin\"],\"margin-left\":[\"margin\"],\"padding-top\":[\"padding\"],\"padding-right\":[\"padding\"],\"padding-bottom\":[\"padding\"],\"padding-left\":[\"padding\"],\"font-style\":[\"font\"],\"font-variant\":[\"font\"],\"font-weight\":[\"font\"],\"font-size\":[\"font\"],\"font-family\":[\"font\"],\"list-style-type\":[\"list-style\"],\"list-style-position\":[\"list-style\"],\"list-style-image\":[\"list-style\"]};function Hc(e,t,n){var r=Mc(e).basename;if(\"background\"===r)return e+\":\"+jc(t.value);var a=t.id,i=n[a];if(!i){switch(t.value.type){case\"Value\":var o=\"\",s=\"\",l={},c=!1;t.value.children.each((function e(t){switch(t.type){case\"Value\":case\"Brackets\":case\"Parentheses\":t.children.each(e);break;case\"Raw\":c=!0;break;case\"Identifier\":var n=t.name;o||(o=Nc(n).vendor),/\\\\[09]/.test(n)&&(s=RegExp.lastMatch),\"cursor\"===r?-1===Fc.indexOf(n)&&(l[n]=!0):\"position\"===r?-1===Uc.indexOf(n)&&(l[n]=!0):Wc.hasOwnProperty(r)&&Wc[r].test(n)&&(l[n]=!0);break;case\"Function\":n=t.name;if(o||(o=Nc(n).vendor),\"rect\"===n)t.children.some((function(e){return\"Operator\"===e.type&&\",\"===e.value}))||(n=\"rect-backward\");l[n+\"()\"]=!0,t.children.each(e);break;case\"Dimension\":var a=t.unit;switch(/\\\\[09]/.test(a)&&(s=RegExp.lastMatch),a){case\"rem\":case\"vw\":case\"vh\":case\"vmin\":case\"vmax\":case\"vm\":l[a]=!0}}})),i=c?\"!\"+_c++:\"!\"+Object.keys(l).sort()+\"|\"+s+o;break;case\"Raw\":i=\"!\"+t.value.value;break;default:i=jc(t.value)}n[a]=i}return e+i}function Vc(e,t,n,r,a){var i=e.block.children;i.eachRight((function(e,t){var n,o=e.property,s=Hc(o,e,a);(n=r[s])&&!qc.hasOwnProperty(o)?e.important&&!n.item.data.important?(r[s]={block:i,item:t},n.block.remove(n.item)):i.remove(t):(n=function(e,t,n){var r=Mc(t.property);if(Yc.hasOwnProperty(r.basename))for(var a=Yc[r.basename],i=0;i<a.length;i++){var o=Hc(r.prefix+a[i],t,n),s=e.hasOwnProperty(o)?e[o]:null;if(s&&(!t.important||s.item.data.important))return s}}(r,e,a))?i.remove(t):(e.fingerprint=s,r[s]={block:i,item:t})})),i.isEmpty()&&n.remove(t)}var Kc=cl.walk;function Gc(e,t,n){var r=e.prelude.children,a=e.block.children,i=r.first().compareMarker,o={};n.nextUntil(t.next,(function(t,s){if(\"Rule\"!==t.type)return vc.unsafeToSkipNode.call(r,t);if(e.pseudoSignature!==t.pseudoSignature)return!0;var l=t.prelude.children.head,c=t.block.children,u=l.data.compareMarker;if(u in o)return!0;if(r.head===r.tail&&r.first().id===l.data.id)return a.appendList(c),void n.remove(s);if(vc.isEqualDeclarations(a,c)){var h=l.data.id;return r.some((function(e,t){var n=e.id;return h<n?(r.insert(l,t),!0):t.next?void 0:(r.insert(l),!0)})),void n.remove(s)}if(u===i)return!0;o[u]=!0}))}var $c=cl.List,Qc=cl.walk;function Xc(e){var t=0;return e.each((function(e){t+=e.id.length+1})),t-1}function Zc(e){for(var t=0,n=0;n<e.length;n++)t+=e[n].length;return t+e.length-1}function Jc(e,t,n){var r=null!==this.block&&this.block.avoidRulesMerge,a=e.prelude.children,i=e.block,o=Object.create(null),s=!0,l=!0;n.prevUntil(t.prev,(function(c,u){var h=c.block,d=c.type;if(\"Rule\"!==d){var p=vc.unsafeToSkipNode.call(a,c);return!p&&\"Atrule\"===d&&h&&Qc(h,{visit:\"Rule\",enter:function(e){e.prelude.children.each((function(e){o[e.compareMarker]=!0}))}}),p}var f=c.prelude.children;if(e.pseudoSignature!==c.pseudoSignature)return!0;if(!(l=!f.some((function(e){return e.compareMarker in o})))&&!s)return!0;if(s&&vc.isEqualSelectors(f,a))return h.children.appendList(i.children),n.remove(t),!0;var m=vc.compareDeclarations(i.children,h.children);if(m.eq.length){if(!m.ne1.length&&!m.ne2.length)return l&&(vc.addSelectors(a,f),n.remove(u)),!0;if(!r)if(m.ne1.length&&!m.ne2.length){var g=Xc(a),b=Zc(m.eq);s&&g<b&&(vc.addSelectors(f,a),i.children=(new $c).fromArray(m.ne1))}else if(!m.ne1.length&&m.ne2.length){g=Xc(f),b=Zc(m.eq);l&&g<b&&(vc.addSelectors(a,f),h.children=(new $c).fromArray(m.ne2))}else{var y={type:\"SelectorList\",loc:null,children:vc.addSelectors(f.copy(),a)},k=Xc(y.children)+2;if((b=Zc(m.eq))>=k){var v=n.createItem({type:\"Rule\",loc:null,prelude:y,block:{type:\"Block\",loc:null,children:(new $c).fromArray(m.eq)},pseudoSignature:e.pseudoSignature});return i.children=(new $c).fromArray(m.ne1),h.children=(new $c).fromArray(m.ne2overrided),s?n.insert(v,u):n.insert(v,t),!0}}}s&&(s=!f.some((function(e){return a.some((function(t){return t.compareMarker===e.compareMarker}))}))),f.each((function(e){o[e.compareMarker]=!0}))}))}var eu=function(e,t){var n=cc(e,t);t.logger(\"prepare\",e),bc(e,t),t.logger(\"mergeAtrule\",e),function(e){wc(e,{visit:\"Rule\",enter:xc})}(e),t.logger(\"initialMergeRuleset\",e),function(e){Cc(e,{visit:\"Rule\",reverse:!0,enter:Ac})}(e),t.logger(\"disjoinRuleset\",e),Ic(e,n),t.logger(\"restructShorthand\",e),function(e){var t={},n=Object.create(null);Bc(e,{visit:\"Rule\",reverse:!0,enter:function(e,r,a){var i,o,s=this.block||this.stylesheet,l=(e.pseudoSignature||\"\")+\"|\"+e.prelude.children.first().id;t.hasOwnProperty(s.id)?i=t[s.id]:(i={},t[s.id]=i),i.hasOwnProperty(l)?o=i[l]:(o={},i[l]=o),Vc.call(this,e,r,a,o,n)}})}(e),t.logger(\"restructBlock\",e),function(e){Kc(e,{visit:\"Rule\",enter:Gc})}(e),t.logger(\"mergeRuleset\",e),function(e){Qc(e,{visit:\"Rule\",reverse:!0,enter:Jc})}(e),t.logger(\"restructRuleset\",e)},tu=cl.List,nu=cl.clone,ru=cl.walk;function au(e,t){var n,r=new tu,a=!1;return e.nextUntil(e.head,(function(e,i,o){if(\"Comment\"===e.type)return t&&\"!\"===e.value.charAt(0)?!(!a&&!n)||(o.remove(i),void(n=e)):void o.remove(i);\"WhiteSpace\"!==e.type&&(a=!0),r.insert(o.remove(i))})),{comment:n,stylesheet:{type:\"StyleSheet\",loc:null,children:r}}}function iu(e,t,n,r){r.logger(\"Compress block #\"+n,null,!0);var a=1;return\"StyleSheet\"===e.type&&(e.firstAtrulesAllowed=t,e.id=a++),ru(e,{visit:\"Atrule\",enter:function(e){null!==e.block&&(e.block.id=a++)}}),r.logger(\"init\",e),function(e,t){Sl(e,{leave:function(e,n,r){Cl.hasOwnProperty(e.type)&&Cl[e.type].call(this,e,n,r,t)}})}(e,r),r.logger(\"clean\",e),function(e){Jl(e,{leave:function(e,t,n){ec.hasOwnProperty(e.type)&&ec[e.type].call(this,e,t,n)}})}(e),r.logger(\"replace\",e),r.restructuring&&eu(e,r),e}function ou(e){return\"restructure\"in e?e.restructure:!(\"restructuring\"in e)||e.restructuring}var su=function(e,t){e=e||{type:\"StyleSheet\",loc:null,children:new tu};var n,r,a,i,o={logger:\"function\"==typeof(t=t||{}).logger?t.logger:function(){},restructuring:ou(t),forceMediaMerge:Boolean(t.forceMediaMerge),usage:!!t.usage&&pl.buildIndex(t.usage)},s=function(e){var t=\"comments\"in e?e.comments:\"exclamation\";return\"boolean\"==typeof t?t=!!t&&\"exclamation\":\"exclamation\"!==t&&\"first-exclamation\"!==t&&(t=!1),t}(t),l=!0,c=new tu,u=1;t.clone&&(e=nu(e)),\"StyleSheet\"===e.type?(n=e.children,e.children=c):(i=e,n=(new tu).appendData({type:\"Rule\",loc:null,prelude:{type:\"SelectorList\",loc:null,children:(new tu).appendData({type:\"Selector\",loc:null,children:(new tu).appendData({type:\"TypeSelector\",loc:null,name:\"x\"})})},block:i}));do{if(iu((r=au(n,Boolean(s))).stylesheet,l,u++,o),a=r.stylesheet.children,r.comment&&(c.isEmpty()||c.insert(tu.createItem({type:\"Raw\",value:\"\\n\"})),c.insert(tu.createItem(r.comment)),a.isEmpty()||c.insert(tu.createItem({type:\"Raw\",value:\"\\n\"}))),l&&!a.isEmpty()){var h=a.last();(\"Atrule\"!==h.type||\"import\"!==h.name&&\"charset\"!==h.name)&&(l=!1)}\"exclamation\"!==s&&(s=!1),c.appendList(a)}while(!n.isEmpty());return{ast:e}},lu={version:\"4.0.3\"},cu=Zn(Object.freeze({__proto__:null,version:\"4.0.3\",default:lu})),uu=cl.parse,hu=cl.generate;function du(e,t,n,r){return t.debug&&console.error(\"## \"+e+\" done in %d ms\\n\",Date.now()-n),r}function pu(e){var t,n;return\"function\"!=typeof(e=function(e){var t={};for(var n in e)t[n]=e[n];return t}(e)).logger&&e.debug&&(e.logger=(t=e.debug,function(e,r){var a=e;if(r&&(a=\"[\"+((Date.now()-n)/1e3).toFixed(3)+\"s] \"+a),t>1&&r){var i=hu(r);2===t&&i.length>256&&(i=i.substr(0,256)+\"...\"),a+=\"\\n  \"+i+\"\\n\"}console.error(a),n=Date.now()})),e}function fu(e,t,n){Array.isArray(n)||(n=[n]),n.forEach((function(n){n(e,t)}))}function mu(e,t,n){var r=(n=n||{}).filename||\"<unknown>\",a=du(\"parsing\",n,Date.now(),uu(t,{context:e,filename:r,positions:Boolean(n.sourceMap)}));n.beforeCompress&&du(\"beforeCompress\",n,Date.now(),fu(a,n,n.beforeCompress));var i,o=du(\"compress\",n,Date.now(),su(a,pu(n)));return n.afterCompress&&du(\"afterCompress\",n,Date.now(),fu(o,n,n.afterCompress)),n.sourceMap?du(\"generate(sourceMap: true)\",n,Date.now(),((i=hu(o.ast,{sourceMap:!0})).map._file=r,i.map.setSourceContent(r,t),i)):du(\"generate\",n,Date.now(),{css:hu(o.ast),map:null})}var gu={version:cu.version,minify:function(e,t){return mu(\"stylesheet\",e,t)},minifyBlock:function(e,t){return mu(\"declarationList\",e,t)},syntax:Object.assign({compress:su},cl)},bu=gu.version,yu=gu.minify,ku=gu.minifyBlock,vu=gu.syntax;e.default=gu,e.minify=yu,e.minifyBlock=ku,e.syntax=vu,e.version=bu,Object.defineProperty(e,\"__esModule\",{value:!0})}));","Magento_PageBuilder/js/resource/dropzone/knockout-dropzone.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/*eslint-disable vars-on-top, strict*/\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD anonymous module\n        define(['knockout', 'jquery', 'Magento_PageBuilder/js/resource/dropzone/dropzone', 'mage/translate'], factory);\n    } else if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n        // CommonJS module\n        var ko = require('knockout'),\n            jQuery = require('jquery'),\n            Dropzone = require('Magento_PageBuilder/js/resource/dropzone/dropzone'),\n            translate = require('mage/translate');\n\n        factory(ko, jQuery, Dropzone, translate);\n    } else {\n        // No module loader (plain <script> tag) - put directly in global namespace\n        factory(window.ko, window.jQuery, window.Dropzone, window.translate);\n    }\n})(function (ko, jQuery, Dropzone, $t) {\n\n    // Create a new sortable Knockout binding\n    ko.bindingHandlers.dropzone = {\n\n        /**\n         * Init the dropzone element\n         *\n         * @param element\n         * @param valueAccessor\n         */\n        init: function (element, valueAccessor) {\n            var value = ko.unwrap(valueAccessor()),\n                originalSuccess = value.success,\n                options = {\n                    uploadMultiple: false,\n                    createImageThumbnails: false,\n                    addRemoveLinks: false,\n                    dictDefaultMessage: $t('Drop files here, or click to upload'),\n                    init: function () {\n                        // Add the current formKey into the request\n                        this.on('sending', function (file, xhr, formData) {\n                            formData.append('form_key', FORM_KEY);\n                        });\n                    },\n                    success: function (file, response) {\n                        return originalSuccess.call(this, file, response, value.bindKey);\n                    }\n                };\n\n            // Delete the success value\n            delete value.success;\n\n            // Extend the options with the values provided\n            jQuery.extend(options, value);\n\n            jQuery(element).addClass('dropzone');\n            new Dropzone(element, options);\n        }\n\n    };\n});","Magento_PageBuilder/js/resource/dropzone/dropzone.js":"// Uses AMD or browser globals to create a jQuery plugin.\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n} (function (jQuery) {\n    var module = { exports: { } }; // Fake component\n\n\n    /*\n     *\n     * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\n     *\n     * Copyright (c) 2012, Matias Meno\n     *\n     * Permission is hereby granted, free of charge, to any person obtaining a copy\n     * of this software and associated documentation files (the \"Software\"), to deal\n     * in the Software without restriction, including without limitation the rights\n     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n     * copies of the Software, and to permit persons to whom the Software is\n     * furnished to do so, subject to the following conditions:\n     *\n     * The above copyright notice and this permission notice shall be included in\n     * all copies or substantial portions of the Software.\n     *\n     * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n     * THE SOFTWARE.\n     *\n     */\n\n    (function() {\n        var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,\n            __slice = [].slice,\n            __hasProp = {}.hasOwnProperty,\n            __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n        noop = function() {};\n\n        Emitter = (function() {\n            function Emitter() {}\n\n            Emitter.prototype.addEventListener = Emitter.prototype.on;\n\n            Emitter.prototype.on = function(event, fn) {\n                this._callbacks = this._callbacks || {};\n                if (!this._callbacks[event]) {\n                    this._callbacks[event] = [];\n                }\n                this._callbacks[event].push(fn);\n                return this;\n            };\n\n            Emitter.prototype.emit = function() {\n                var args, callback, callbacks, event, _i, _len;\n                event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                this._callbacks = this._callbacks || {};\n                callbacks = this._callbacks[event];\n                if (callbacks) {\n                    for (_i = 0, _len = callbacks.length; _i < _len; _i++) {\n                        callback = callbacks[_i];\n                        callback.apply(this, args);\n                    }\n                }\n                return this;\n            };\n\n            Emitter.prototype.removeListener = Emitter.prototype.off;\n\n            Emitter.prototype.removeAllListeners = Emitter.prototype.off;\n\n            Emitter.prototype.removeEventListener = Emitter.prototype.off;\n\n            Emitter.prototype.off = function(event, fn) {\n                var callback, callbacks, i, _i, _len;\n                if (!this._callbacks || arguments.length === 0) {\n                    this._callbacks = {};\n                    return this;\n                }\n                callbacks = this._callbacks[event];\n                if (!callbacks) {\n                    return this;\n                }\n                if (arguments.length === 1) {\n                    delete this._callbacks[event];\n                    return this;\n                }\n                for (i = _i = 0, _len = callbacks.length; _i < _len; i = ++_i) {\n                    callback = callbacks[i];\n                    if (callback === fn) {\n                        callbacks.splice(i, 1);\n                        break;\n                    }\n                }\n                return this;\n            };\n\n            return Emitter;\n\n        })();\n\n        Dropzone = (function(_super) {\n            var extend, resolveOption;\n\n            __extends(Dropzone, _super);\n\n            Dropzone.prototype.Emitter = Emitter;\n\n\n            /*\n             This is a list of all available events you can register on a dropzone object.\n\n             You can register an event handler like this:\n\n             dropzone.on(\"dragEnter\", function() { });\n             */\n\n            Dropzone.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n\n            Dropzone.prototype.defaultOptions = {\n                url: null,\n                method: \"post\",\n                withCredentials: false,\n                parallelUploads: 2,\n                uploadMultiple: false,\n                maxFilesize: 256,\n                paramName: \"file\",\n                createImageThumbnails: true,\n                maxThumbnailFilesize: 10,\n                thumbnailWidth: 120,\n                thumbnailHeight: 120,\n                filesizeBase: 1000,\n                maxFiles: null,\n                params: {},\n                clickable: true,\n                ignoreHiddenFiles: true,\n                acceptedFiles: null,\n                acceptedMimeTypes: null,\n                autoProcessQueue: true,\n                autoQueue: true,\n                addRemoveLinks: false,\n                previewsContainer: null,\n                hiddenInputContainer: \"body\",\n                capture: null,\n                dictDefaultMessage: \"Drop files here to upload\",\n                dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n                dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n                dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n                dictInvalidFileType: \"You can't upload files of this type.\",\n                dictResponseError: \"Server responded with {{statusCode}} code.\",\n                dictCancelUpload: \"Cancel upload\",\n                dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n                dictRemoveFile: \"Remove file\",\n                dictRemoveFileConfirmation: null,\n                dictMaxFilesExceeded: \"You can not upload any more files.\",\n                accept: function(file, done) {\n                    return done();\n                },\n                init: function() {\n                    return noop;\n                },\n                forceFallback: false,\n                fallback: function() {\n                    var child, messageElement, span, _i, _len, _ref;\n                    this.element.className = \"\" + this.element.className + \" dz-browser-not-supported\";\n                    _ref = this.element.getElementsByTagName(\"div\");\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        child = _ref[_i];\n                        if (/(^| )dz-message($| )/.test(child.className)) {\n                            messageElement = child;\n                            child.className = \"dz-message\";\n                            continue;\n                        }\n                    }\n                    if (!messageElement) {\n                        messageElement = Dropzone.createElement(\"<div class=\\\"dz-message\\\"><span></span></div>\");\n                        this.element.appendChild(messageElement);\n                    }\n                    span = messageElement.getElementsByTagName(\"span\")[0];\n                    if (span) {\n                        if (span.textContent != null) {\n                            span.textContent = this.options.dictFallbackMessage;\n                        } else if (span.innerText != null) {\n                            span.innerText = this.options.dictFallbackMessage;\n                        }\n                    }\n                    return this.element.appendChild(this.getFallbackForm());\n                },\n                resize: function(file) {\n                    var info, srcRatio, trgRatio;\n                    info = {\n                        srcX: 0,\n                        srcY: 0,\n                        srcWidth: file.width,\n                        srcHeight: file.height\n                    };\n                    srcRatio = file.width / file.height;\n                    info.optWidth = this.options.thumbnailWidth;\n                    info.optHeight = this.options.thumbnailHeight;\n                    if ((info.optWidth == null) && (info.optHeight == null)) {\n                        info.optWidth = info.srcWidth;\n                        info.optHeight = info.srcHeight;\n                    } else if (info.optWidth == null) {\n                        info.optWidth = srcRatio * info.optHeight;\n                    } else if (info.optHeight == null) {\n                        info.optHeight = (1 / srcRatio) * info.optWidth;\n                    }\n                    trgRatio = info.optWidth / info.optHeight;\n                    if (file.height < info.optHeight || file.width < info.optWidth) {\n                        info.trgHeight = info.srcHeight;\n                        info.trgWidth = info.srcWidth;\n                    } else {\n                        if (srcRatio > trgRatio) {\n                            info.srcHeight = file.height;\n                            info.srcWidth = info.srcHeight * trgRatio;\n                        } else {\n                            info.srcWidth = file.width;\n                            info.srcHeight = info.srcWidth / trgRatio;\n                        }\n                    }\n                    info.srcX = (file.width - info.srcWidth) / 2;\n                    info.srcY = (file.height - info.srcHeight) / 2;\n                    return info;\n                },\n\n                /*\n                 Those functions register themselves to the events on init and handle all\n                 the user interface specific stuff. Overwriting them won't break the upload\n                 but can break the way it's displayed.\n                 You can overwrite them if you don't like the default behavior. If you just\n                 want to add an additional event handler, register it on the dropzone object\n                 and don't overwrite those options.\n                 */\n                drop: function(e) {\n                    return this.element.classList.remove(\"dz-drag-hover\");\n                },\n                dragstart: noop,\n                dragend: function(e) {\n                    return this.element.classList.remove(\"dz-drag-hover\");\n                },\n                dragenter: function(e) {\n                    return this.element.classList.add(\"dz-drag-hover\");\n                },\n                dragover: function(e) {\n                    return this.element.classList.add(\"dz-drag-hover\");\n                },\n                dragleave: function(e) {\n                    return this.element.classList.remove(\"dz-drag-hover\");\n                },\n                paste: noop,\n                reset: function() {\n                    return this.element.classList.remove(\"dz-started\");\n                },\n                addedfile: function(file) {\n                    var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\n                    if (this.element === this.previewsContainer) {\n                        this.element.classList.add(\"dz-started\");\n                    }\n                    if (this.previewsContainer) {\n                        file.previewElement = Dropzone.createElement(this.options.template.trim());\n                        file.template = file.previewElement;\n                        this.previewsContainer.appendChild(file.previewElement);\n                        _ref = file.previewElement.querySelectorAll(\"[data-dz-name]\");\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            node = _ref[_i];\n                            node.textContent = file.name;\n                        }\n                        _ref1 = file.previewElement.querySelectorAll(\"[data-dz-size]\");\n                        for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n                            node = _ref1[_j];\n                            node.innerHTML = this.filesize(file.size);\n                        }\n                        if (this.options.addRemoveLinks) {\n                            file._removeLink = Dropzone.createElement(\"<a class=\\\"dz-remove\\\" href=\\\"javascript:undefined;\\\" data-dz-remove>\" + this.options.dictRemoveFile + \"</a>\");\n                            file.previewElement.appendChild(file._removeLink);\n                        }\n                        removeFileEvent = (function(_this) {\n                            return function(e) {\n                                e.preventDefault();\n                                e.stopPropagation();\n                                if (file.status === Dropzone.UPLOADING) {\n                                    return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {\n                                        return _this.removeFile(file);\n                                    });\n                                } else {\n                                    if (_this.options.dictRemoveFileConfirmation) {\n                                        return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {\n                                            return _this.removeFile(file);\n                                        });\n                                    } else {\n                                        return _this.removeFile(file);\n                                    }\n                                }\n                            };\n                        })(this);\n                        _ref2 = file.previewElement.querySelectorAll(\"[data-dz-remove]\");\n                        _results = [];\n                        for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n                            removeLink = _ref2[_k];\n                            _results.push(removeLink.addEventListener(\"click\", removeFileEvent));\n                        }\n                        return _results;\n                    }\n                },\n                removedfile: function(file) {\n                    var _ref;\n                    if (file.previewElement) {\n                        if ((_ref = file.previewElement) != null) {\n                            _ref.parentNode.removeChild(file.previewElement);\n                        }\n                    }\n                    return this._updateMaxFilesReachedClass();\n                },\n                thumbnail: function(file, dataUrl) {\n                    var thumbnailElement, _i, _len, _ref;\n                    if (file.previewElement) {\n                        file.previewElement.classList.remove(\"dz-file-preview\");\n                        _ref = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\");\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            thumbnailElement = _ref[_i];\n                            thumbnailElement.alt = file.name;\n                            thumbnailElement.src = dataUrl;\n                        }\n                        return setTimeout(((function(_this) {\n                            return function() {\n                                return file.previewElement.classList.add(\"dz-image-preview\");\n                            };\n                        })(this)), 1);\n                    }\n                },\n                error: function(file, message) {\n                    var node, _i, _len, _ref, _results;\n                    if (file.previewElement) {\n                        file.previewElement.classList.add(\"dz-error\");\n                        if (typeof message !== \"String\" && message.error) {\n                            message = message.error;\n                        }\n                        _ref = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\");\n                        _results = [];\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            node = _ref[_i];\n                            _results.push(node.textContent = message);\n                        }\n                        return _results;\n                    }\n                },\n                errormultiple: noop,\n                processing: function(file) {\n                    if (file.previewElement) {\n                        file.previewElement.classList.add(\"dz-processing\");\n                        if (file._removeLink) {\n                            return file._removeLink.textContent = this.options.dictCancelUpload;\n                        }\n                    }\n                },\n                processingmultiple: noop,\n                uploadprogress: function(file, progress, bytesSent) {\n                    var node, _i, _len, _ref, _results;\n                    if (file.previewElement) {\n                        _ref = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\");\n                        _results = [];\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            node = _ref[_i];\n                            if (node.nodeName === 'PROGRESS') {\n                                _results.push(node.value = progress);\n                            } else {\n                                _results.push(node.style.width = \"\" + progress + \"%\");\n                            }\n                        }\n                        return _results;\n                    }\n                },\n                totaluploadprogress: noop,\n                sending: noop,\n                sendingmultiple: noop,\n                success: function(file) {\n                    if (file.previewElement) {\n                        return file.previewElement.classList.add(\"dz-success\");\n                    }\n                },\n                successmultiple: noop,\n                canceled: function(file) {\n                    return this.emit(\"error\", file, \"Upload canceled.\");\n                },\n                canceledmultiple: noop,\n                complete: function(file) {\n                    if (file._removeLink) {\n                        file._removeLink.textContent = this.options.dictRemoveFile;\n                    }\n                    if (file.previewElement) {\n                        return file.previewElement.classList.add(\"dz-complete\");\n                    }\n                },\n                completemultiple: noop,\n                maxfilesexceeded: noop,\n                maxfilesreached: noop,\n                queuecomplete: noop,\n                addedfiles: noop,\n                template: \"<div class=\\\"dz-preview dz-file-preview\\\">\\n  <div class=\\\"dz-image\\\"><img data-dz-thumbnail /></div>\\n  <div class=\\\"dz-details\\\">\\n    <div class=\\\"dz-size\\\"><span data-dz-size></span></div>\\n    <div class=\\\"dz-filename\\\"><span data-dz-name></span></div>\\n  </div>\\n  <div class=\\\"dz-progress\\\"><span class=\\\"dz-upload\\\" data-dz-uploadprogress></span></div>\\n  <div class=\\\"dz-error-message\\\"><span data-dz-errormessage></span></div>\\n  <div class=\\\"dz-success-mark\\\">\\n    <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\n      <title>Check</title>\\n      <defs></defs>\\n      <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n        <path d=\\\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" id=\\\"Oval-2\\\" stroke-opacity=\\\"0.198794158\\\" stroke=\\\"#747474\\\" fill-opacity=\\\"0.816519475\\\" fill=\\\"#FFFFFF\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\n      </g>\\n    </svg>\\n  </div>\\n  <div class=\\\"dz-error-mark\\\">\\n    <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\n      <title>Error</title>\\n      <defs></defs>\\n      <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n        <g id=\\\"Check-+-Oval-2\\\" sketch:type=\\\"MSLayerGroup\\\" stroke=\\\"#747474\\\" stroke-opacity=\\\"0.198794158\\\" fill=\\\"#FFFFFF\\\" fill-opacity=\\\"0.816519475\\\">\\n          <path d=\\\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" id=\\\"Oval-2\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\n        </g>\\n      </g>\\n    </svg>\\n  </div>\\n</div>\"\n            };\n\n            extend = function() {\n                var key, object, objects, target, val, _i, _len;\n                target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                for (_i = 0, _len = objects.length; _i < _len; _i++) {\n                    object = objects[_i];\n                    for (key in object) {\n                        val = object[key];\n                        target[key] = val;\n                    }\n                }\n                return target;\n            };\n\n            function Dropzone(element, options) {\n                var elementOptions, fallback, _ref;\n                this.element = element;\n                this.version = Dropzone.version;\n                this.defaultOptions.template = this.defaultOptions.template.replace(/\\n*/g, \"\");\n                this.clickableElements = [];\n                this.listeners = [];\n                this.files = [];\n                if (typeof this.element === \"string\") {\n                    this.element = document.querySelector(this.element);\n                }\n                if (!(this.element && (this.element.nodeType != null))) {\n                    throw new Error(\"Invalid dropzone element.\");\n                }\n                if (this.element.dropzone) {\n                    throw new Error(\"Dropzone already attached.\");\n                }\n                Dropzone.instances.push(this);\n                this.element.dropzone = this;\n                elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};\n                this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});\n                if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n                    return this.options.fallback.call(this);\n                }\n                if (this.options.url == null) {\n                    this.options.url = this.element.getAttribute(\"action\");\n                }\n                if (!this.options.url) {\n                    throw new Error(\"No URL provided.\");\n                }\n                if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {\n                    throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n                }\n                if (this.options.acceptedMimeTypes) {\n                    this.options.acceptedFiles = this.options.acceptedMimeTypes;\n                    delete this.options.acceptedMimeTypes;\n                }\n                this.options.method = this.options.method.toUpperCase();\n                if ((fallback = this.getExistingFallback()) && fallback.parentNode) {\n                    fallback.parentNode.removeChild(fallback);\n                }\n                if (this.options.previewsContainer !== false) {\n                    if (this.options.previewsContainer) {\n                        this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, \"previewsContainer\");\n                    } else {\n                        this.previewsContainer = this.element;\n                    }\n                }\n                if (this.options.clickable) {\n                    if (this.options.clickable === true) {\n                        this.clickableElements = [this.element];\n                    } else {\n                        this.clickableElements = Dropzone.getElements(this.options.clickable, \"clickable\");\n                    }\n                }\n                this.init();\n            }\n\n            Dropzone.prototype.getAcceptedFiles = function() {\n                var file, _i, _len, _ref, _results;\n                _ref = this.files;\n                _results = [];\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    file = _ref[_i];\n                    if (file.accepted) {\n                        _results.push(file);\n                    }\n                }\n                return _results;\n            };\n\n            Dropzone.prototype.getRejectedFiles = function() {\n                var file, _i, _len, _ref, _results;\n                _ref = this.files;\n                _results = [];\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    file = _ref[_i];\n                    if (!file.accepted) {\n                        _results.push(file);\n                    }\n                }\n                return _results;\n            };\n\n            Dropzone.prototype.getFilesWithStatus = function(status) {\n                var file, _i, _len, _ref, _results;\n                _ref = this.files;\n                _results = [];\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    file = _ref[_i];\n                    if (file.status === status) {\n                        _results.push(file);\n                    }\n                }\n                return _results;\n            };\n\n            Dropzone.prototype.getQueuedFiles = function() {\n                return this.getFilesWithStatus(Dropzone.QUEUED);\n            };\n\n            Dropzone.prototype.getUploadingFiles = function() {\n                return this.getFilesWithStatus(Dropzone.UPLOADING);\n            };\n\n            Dropzone.prototype.getAddedFiles = function() {\n                return this.getFilesWithStatus(Dropzone.ADDED);\n            };\n\n            Dropzone.prototype.getActiveFiles = function() {\n                var file, _i, _len, _ref, _results;\n                _ref = this.files;\n                _results = [];\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    file = _ref[_i];\n                    if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {\n                        _results.push(file);\n                    }\n                }\n                return _results;\n            };\n\n            Dropzone.prototype.init = function() {\n                var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;\n                if (this.element.tagName === \"form\") {\n                    this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n                }\n                if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n                    this.element.appendChild(Dropzone.createElement(\"<div class=\\\"dz-default dz-message\\\"><span>\" + this.options.dictDefaultMessage + \"</span></div>\"));\n                }\n                if (this.clickableElements.length) {\n                    setupHiddenFileInput = (function(_this) {\n                        return function() {\n                            if (_this.hiddenFileInput) {\n                                _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);\n                            }\n                            _this.hiddenFileInput = document.createElement(\"input\");\n                            _this.hiddenFileInput.setAttribute(\"type\", \"file\");\n                            if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {\n                                _this.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n                            }\n                            _this.hiddenFileInput.className = \"dz-hidden-input\";\n                            if (_this.options.acceptedFiles != null) {\n                                _this.hiddenFileInput.setAttribute(\"accept\", _this.options.acceptedFiles);\n                            }\n                            if (_this.options.capture != null) {\n                                _this.hiddenFileInput.setAttribute(\"capture\", _this.options.capture);\n                            }\n                            _this.hiddenFileInput.style.visibility = \"hidden\";\n                            _this.hiddenFileInput.style.position = \"absolute\";\n                            _this.hiddenFileInput.style.top = \"0\";\n                            _this.hiddenFileInput.style.left = \"0\";\n                            _this.hiddenFileInput.style.height = \"0\";\n                            _this.hiddenFileInput.style.width = \"0\";\n                            document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);\n                            return _this.hiddenFileInput.addEventListener(\"change\", function() {\n                                var file, files, _i, _len;\n                                files = _this.hiddenFileInput.files;\n                                if (files.length) {\n                                    for (_i = 0, _len = files.length; _i < _len; _i++) {\n                                        file = files[_i];\n                                        _this.addFile(file);\n                                    }\n                                }\n                                _this.emit(\"addedfiles\", files);\n                                return setupHiddenFileInput();\n                            });\n                        };\n                    })(this);\n                    setupHiddenFileInput();\n                }\n                this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;\n                _ref1 = this.events;\n                for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                    eventName = _ref1[_i];\n                    this.on(eventName, this.options[eventName]);\n                }\n                this.on(\"uploadprogress\", (function(_this) {\n                    return function() {\n                        return _this.updateTotalUploadProgress();\n                    };\n                })(this));\n                this.on(\"removedfile\", (function(_this) {\n                    return function() {\n                        return _this.updateTotalUploadProgress();\n                    };\n                })(this));\n                this.on(\"canceled\", (function(_this) {\n                    return function(file) {\n                        return _this.emit(\"complete\", file);\n                    };\n                })(this));\n                this.on(\"complete\", (function(_this) {\n                    return function(file) {\n                        if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {\n                            return setTimeout((function() {\n                                return _this.emit(\"queuecomplete\");\n                            }), 0);\n                        }\n                    };\n                })(this));\n                noPropagation = function(e) {\n                    e.stopPropagation();\n                    if (e.preventDefault) {\n                        return e.preventDefault();\n                    } else {\n                        return e.returnValue = false;\n                    }\n                };\n                this.listeners = [\n                    {\n                        element: this.element,\n                        events: {\n                            \"dragstart\": (function(_this) {\n                                return function(e) {\n                                    return _this.emit(\"dragstart\", e);\n                                };\n                            })(this),\n                            \"dragenter\": (function(_this) {\n                                return function(e) {\n                                    noPropagation(e);\n                                    return _this.emit(\"dragenter\", e);\n                                };\n                            })(this),\n                            \"dragover\": (function(_this) {\n                                return function(e) {\n                                    var efct;\n                                    try {\n                                        efct = e.dataTransfer.effectAllowed;\n                                    } catch (_error) {}\n                                    e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\n                                    noPropagation(e);\n                                    return _this.emit(\"dragover\", e);\n                                };\n                            })(this),\n                            \"dragleave\": (function(_this) {\n                                return function(e) {\n                                    return _this.emit(\"dragleave\", e);\n                                };\n                            })(this),\n                            \"drop\": (function(_this) {\n                                return function(e) {\n                                    noPropagation(e);\n                                    return _this.drop(e);\n                                };\n                            })(this),\n                            \"dragend\": (function(_this) {\n                                return function(e) {\n                                    return _this.emit(\"dragend\", e);\n                                };\n                            })(this)\n                        }\n                    }\n                ];\n                this.clickableElements.forEach((function(_this) {\n                    return function(clickableElement) {\n                        return _this.listeners.push({\n                            element: clickableElement,\n                            events: {\n                                \"click\": function(evt) {\n                                    if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(\".dz-message\")))) {\n                                        _this.hiddenFileInput.click();\n                                    }\n                                    return true;\n                                }\n                            }\n                        });\n                    };\n                })(this));\n                this.enable();\n                return this.options.init.call(this);\n            };\n\n            Dropzone.prototype.destroy = function() {\n                var _ref;\n                this.disable();\n                this.removeAllFiles(true);\n                if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {\n                    this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n                    this.hiddenFileInput = null;\n                }\n                delete this.element.dropzone;\n                return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n            };\n\n            Dropzone.prototype.updateTotalUploadProgress = function() {\n                var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;\n                totalBytesSent = 0;\n                totalBytes = 0;\n                activeFiles = this.getActiveFiles();\n                if (activeFiles.length) {\n                    _ref = this.getActiveFiles();\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        file = _ref[_i];\n                        totalBytesSent += file.upload.bytesSent;\n                        totalBytes += file.upload.total;\n                    }\n                    totalUploadProgress = 100 * totalBytesSent / totalBytes;\n                } else {\n                    totalUploadProgress = 100;\n                }\n                return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n            };\n\n            Dropzone.prototype._getParamName = function(n) {\n                if (typeof this.options.paramName === \"function\") {\n                    return this.options.paramName(n);\n                } else {\n                    return \"\" + this.options.paramName + (this.options.uploadMultiple ? \"[\" + n + \"]\" : \"\");\n                }\n            };\n\n            Dropzone.prototype.getFallbackForm = function() {\n                var existingFallback, fields, fieldsString, form;\n                if (existingFallback = this.getExistingFallback()) {\n                    return existingFallback;\n                }\n                fieldsString = \"<div class=\\\"dz-fallback\\\">\";\n                if (this.options.dictFallbackText) {\n                    fieldsString += \"<p>\" + this.options.dictFallbackText + \"</p>\";\n                }\n                fieldsString += \"<input type=\\\"file\\\" name=\\\"\" + (this._getParamName(0)) + \"\\\" \" + (this.options.uploadMultiple ? 'multiple=\"multiple\"' : void 0) + \" /><input type=\\\"submit\\\" value=\\\"Upload!\\\"></div>\";\n                fields = Dropzone.createElement(fieldsString);\n                if (this.element.tagName !== \"FORM\") {\n                    form = Dropzone.createElement(\"<form action=\\\"\" + this.options.url + \"\\\" enctype=\\\"multipart/form-data\\\" method=\\\"\" + this.options.method + \"\\\"></form>\");\n                    form.appendChild(fields);\n                } else {\n                    this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n                    this.element.setAttribute(\"method\", this.options.method);\n                }\n                return form != null ? form : fields;\n            };\n\n            Dropzone.prototype.getExistingFallback = function() {\n                var fallback, getFallback, tagName, _i, _len, _ref;\n                getFallback = function(elements) {\n                    var el, _i, _len;\n                    for (_i = 0, _len = elements.length; _i < _len; _i++) {\n                        el = elements[_i];\n                        if (/(^| )fallback($| )/.test(el.className)) {\n                            return el;\n                        }\n                    }\n                };\n                _ref = [\"div\", \"form\"];\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    tagName = _ref[_i];\n                    if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n                        return fallback;\n                    }\n                }\n            };\n\n            Dropzone.prototype.setupEventListeners = function() {\n                var elementListeners, event, listener, _i, _len, _ref, _results;\n                _ref = this.listeners;\n                _results = [];\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    elementListeners = _ref[_i];\n                    _results.push((function() {\n                        var _ref1, _results1;\n                        _ref1 = elementListeners.events;\n                        _results1 = [];\n                        for (event in _ref1) {\n                            listener = _ref1[event];\n                            _results1.push(elementListeners.element.addEventListener(event, listener, false));\n                        }\n                        return _results1;\n                    })());\n                }\n                return _results;\n            };\n\n            Dropzone.prototype.removeEventListeners = function() {\n                var elementListeners, event, listener, _i, _len, _ref, _results;\n                _ref = this.listeners;\n                _results = [];\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    elementListeners = _ref[_i];\n                    _results.push((function() {\n                        var _ref1, _results1;\n                        _ref1 = elementListeners.events;\n                        _results1 = [];\n                        for (event in _ref1) {\n                            listener = _ref1[event];\n                            _results1.push(elementListeners.element.removeEventListener(event, listener, false));\n                        }\n                        return _results1;\n                    })());\n                }\n                return _results;\n            };\n\n            Dropzone.prototype.disable = function() {\n                var file, _i, _len, _ref, _results;\n                this.clickableElements.forEach(function(element) {\n                    return element.classList.remove(\"dz-clickable\");\n                });\n                this.removeEventListeners();\n                _ref = this.files;\n                _results = [];\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    file = _ref[_i];\n                    _results.push(this.cancelUpload(file));\n                }\n                return _results;\n            };\n\n            Dropzone.prototype.enable = function() {\n                this.clickableElements.forEach(function(element) {\n                    return element.classList.add(\"dz-clickable\");\n                });\n                return this.setupEventListeners();\n            };\n\n            Dropzone.prototype.filesize = function(size) {\n                var cutoff, i, selectedSize, selectedUnit, unit, units, _i, _len;\n                selectedSize = 0;\n                selectedUnit = \"b\";\n                if (size > 0) {\n                    units = ['TB', 'GB', 'MB', 'KB', 'b'];\n                    for (i = _i = 0, _len = units.length; _i < _len; i = ++_i) {\n                        unit = units[i];\n                        cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n                        if (size >= cutoff) {\n                            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n                            selectedUnit = unit;\n                            break;\n                        }\n                    }\n                    selectedSize = Math.round(10 * selectedSize) / 10;\n                }\n                return \"<strong>\" + selectedSize + \"</strong> \" + selectedUnit;\n            };\n\n            Dropzone.prototype._updateMaxFilesReachedClass = function() {\n                if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n                    if (this.getAcceptedFiles().length === this.options.maxFiles) {\n                        this.emit('maxfilesreached', this.files);\n                    }\n                    return this.element.classList.add(\"dz-max-files-reached\");\n                } else {\n                    return this.element.classList.remove(\"dz-max-files-reached\");\n                }\n            };\n\n            Dropzone.prototype.drop = function(e) {\n                var files, items;\n                if (!e.dataTransfer) {\n                    return;\n                }\n                this.emit(\"drop\", e);\n                files = e.dataTransfer.files;\n                this.emit(\"addedfiles\", files);\n                if (files.length) {\n                    items = e.dataTransfer.items;\n                    if (items && items.length && (items[0].webkitGetAsEntry != null)) {\n                        this._addFilesFromItems(items);\n                    } else {\n                        this.handleFiles(files);\n                    }\n                }\n            };\n\n            Dropzone.prototype.paste = function(e) {\n                var items, _ref;\n                if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {\n                    return;\n                }\n                this.emit(\"paste\", e);\n                items = e.clipboardData.items;\n                if (items.length) {\n                    return this._addFilesFromItems(items);\n                }\n            };\n\n            Dropzone.prototype.handleFiles = function(files) {\n                var file, _i, _len, _results;\n                _results = [];\n                for (_i = 0, _len = files.length; _i < _len; _i++) {\n                    file = files[_i];\n                    _results.push(this.addFile(file));\n                }\n                return _results;\n            };\n\n            Dropzone.prototype._addFilesFromItems = function(items) {\n                var entry, item, _i, _len, _results;\n                _results = [];\n                for (_i = 0, _len = items.length; _i < _len; _i++) {\n                    item = items[_i];\n                    if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {\n                        if (entry.isFile) {\n                            _results.push(this.addFile(item.getAsFile()));\n                        } else if (entry.isDirectory) {\n                            _results.push(this._addFilesFromDirectory(entry, entry.name));\n                        } else {\n                            _results.push(void 0);\n                        }\n                    } else if (item.getAsFile != null) {\n                        if ((item.kind == null) || item.kind === \"file\") {\n                            _results.push(this.addFile(item.getAsFile()));\n                        } else {\n                            _results.push(void 0);\n                        }\n                    } else {\n                        _results.push(void 0);\n                    }\n                }\n                return _results;\n            };\n\n            Dropzone.prototype._addFilesFromDirectory = function(directory, path) {\n                var dirReader, entriesReader;\n                dirReader = directory.createReader();\n                entriesReader = (function(_this) {\n                    return function(entries) {\n                        var entry, _i, _len;\n                        for (_i = 0, _len = entries.length; _i < _len; _i++) {\n                            entry = entries[_i];\n                            if (entry.isFile) {\n                                entry.file(function(file) {\n                                    if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\n                                        return;\n                                    }\n                                    file.fullPath = \"\" + path + \"/\" + file.name;\n                                    return _this.addFile(file);\n                                });\n                            } else if (entry.isDirectory) {\n                                _this._addFilesFromDirectory(entry, \"\" + path + \"/\" + entry.name);\n                            }\n                        }\n                    };\n                })(this);\n                return dirReader.readEntries(entriesReader, function(error) {\n                    return typeof console !== \"undefined\" && console !== null ? typeof console.log === \"function\" ? console.log(error) : void 0 : void 0;\n                });\n            };\n\n            Dropzone.prototype.accept = function(file, done) {\n                if (file.size > this.options.maxFilesize * 1024 * 1024) {\n                    return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n                } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n                    return done(this.options.dictInvalidFileType);\n                } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n                    done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n                    return this.emit(\"maxfilesexceeded\", file);\n                } else {\n                    return this.options.accept.call(this, file, done);\n                }\n            };\n\n            Dropzone.prototype.addFile = function(file) {\n                file.upload = {\n                    progress: 0,\n                    total: file.size,\n                    bytesSent: 0\n                };\n                this.files.push(file);\n                file.status = Dropzone.ADDED;\n                this.emit(\"addedfile\", file);\n                this._enqueueThumbnail(file);\n                return this.accept(file, (function(_this) {\n                    return function(error) {\n                        if (error) {\n                            file.accepted = false;\n                            _this._errorProcessing([file], error);\n                        } else {\n                            file.accepted = true;\n                            if (_this.options.autoQueue) {\n                                _this.enqueueFile(file);\n                            }\n                        }\n                        return _this._updateMaxFilesReachedClass();\n                    };\n                })(this));\n            };\n\n            Dropzone.prototype.enqueueFiles = function(files) {\n                var file, _i, _len;\n                for (_i = 0, _len = files.length; _i < _len; _i++) {\n                    file = files[_i];\n                    this.enqueueFile(file);\n                }\n                return null;\n            };\n\n            Dropzone.prototype.enqueueFile = function(file) {\n                if (file.status === Dropzone.ADDED && file.accepted === true) {\n                    file.status = Dropzone.QUEUED;\n                    if (this.options.autoProcessQueue) {\n                        return setTimeout(((function(_this) {\n                            return function() {\n                                return _this.processQueue();\n                            };\n                        })(this)), 0);\n                    }\n                } else {\n                    throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n                }\n            };\n\n            Dropzone.prototype._thumbnailQueue = [];\n\n            Dropzone.prototype._processingThumbnail = false;\n\n            Dropzone.prototype._enqueueThumbnail = function(file) {\n                if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n                    this._thumbnailQueue.push(file);\n                    return setTimeout(((function(_this) {\n                        return function() {\n                            return _this._processThumbnailQueue();\n                        };\n                    })(this)), 0);\n                }\n            };\n\n            Dropzone.prototype._processThumbnailQueue = function() {\n                if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n                    return;\n                }\n                this._processingThumbnail = true;\n                return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) {\n                    return function() {\n                        _this._processingThumbnail = false;\n                        return _this._processThumbnailQueue();\n                    };\n                })(this));\n            };\n\n            Dropzone.prototype.removeFile = function(file) {\n                if (file.status === Dropzone.UPLOADING) {\n                    this.cancelUpload(file);\n                }\n                this.files = without(this.files, file);\n                this.emit(\"removedfile\", file);\n                if (this.files.length === 0) {\n                    return this.emit(\"reset\");\n                }\n            };\n\n            Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {\n                var file, _i, _len, _ref;\n                if (cancelIfNecessary == null) {\n                    cancelIfNecessary = false;\n                }\n                _ref = this.files.slice();\n                for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                    file = _ref[_i];\n                    if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n                        this.removeFile(file);\n                    }\n                }\n                return null;\n            };\n\n            Dropzone.prototype.createThumbnail = function(file, callback) {\n                var fileReader;\n                fileReader = new FileReader;\n                fileReader.onload = (function(_this) {\n                    return function() {\n                        if (file.type === \"image/svg+xml\") {\n                            _this.emit(\"thumbnail\", file, fileReader.result);\n                            if (callback != null) {\n                                callback();\n                            }\n                            return;\n                        }\n                        return _this.createThumbnailFromUrl(file, fileReader.result, callback);\n                    };\n                })(this);\n                return fileReader.readAsDataURL(file);\n            };\n\n            Dropzone.prototype.createThumbnailFromUrl = function(file, imageUrl, callback, crossOrigin) {\n                var img;\n                img = document.createElement(\"img\");\n                if (crossOrigin) {\n                    img.crossOrigin = crossOrigin;\n                }\n                img.onload = (function(_this) {\n                    return function() {\n                        var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;\n                        file.width = img.width;\n                        file.height = img.height;\n                        resizeInfo = _this.options.resize.call(_this, file);\n                        if (resizeInfo.trgWidth == null) {\n                            resizeInfo.trgWidth = resizeInfo.optWidth;\n                        }\n                        if (resizeInfo.trgHeight == null) {\n                            resizeInfo.trgHeight = resizeInfo.optHeight;\n                        }\n                        canvas = document.createElement(\"canvas\");\n                        ctx = canvas.getContext(\"2d\");\n                        canvas.width = resizeInfo.trgWidth;\n                        canvas.height = resizeInfo.trgHeight;\n                        drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n                        thumbnail = canvas.toDataURL(\"image/png\");\n                        _this.emit(\"thumbnail\", file, thumbnail);\n                        if (callback != null) {\n                            return callback();\n                        }\n                    };\n                })(this);\n                if (callback != null) {\n                    img.onerror = callback;\n                }\n                return img.src = imageUrl;\n            };\n\n            Dropzone.prototype.processQueue = function() {\n                var i, parallelUploads, processingLength, queuedFiles;\n                parallelUploads = this.options.parallelUploads;\n                processingLength = this.getUploadingFiles().length;\n                i = processingLength;\n                if (processingLength >= parallelUploads) {\n                    return;\n                }\n                queuedFiles = this.getQueuedFiles();\n                if (!(queuedFiles.length > 0)) {\n                    return;\n                }\n                if (this.options.uploadMultiple) {\n                    return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n                } else {\n                    while (i < parallelUploads) {\n                        if (!queuedFiles.length) {\n                            return;\n                        }\n                        this.processFile(queuedFiles.shift());\n                        i++;\n                    }\n                }\n            };\n\n            Dropzone.prototype.processFile = function(file) {\n                return this.processFiles([file]);\n            };\n\n            Dropzone.prototype.processFiles = function(files) {\n                var file, _i, _len;\n                for (_i = 0, _len = files.length; _i < _len; _i++) {\n                    file = files[_i];\n                    file.processing = true;\n                    file.status = Dropzone.UPLOADING;\n                    this.emit(\"processing\", file);\n                }\n                if (this.options.uploadMultiple) {\n                    this.emit(\"processingmultiple\", files);\n                }\n                return this.uploadFiles(files);\n            };\n\n            Dropzone.prototype._getFilesWithXhr = function(xhr) {\n                var file, files;\n                return files = (function() {\n                    var _i, _len, _ref, _results;\n                    _ref = this.files;\n                    _results = [];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        file = _ref[_i];\n                        if (file.xhr === xhr) {\n                            _results.push(file);\n                        }\n                    }\n                    return _results;\n                }).call(this);\n            };\n\n            Dropzone.prototype.cancelUpload = function(file) {\n                var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;\n                if (file.status === Dropzone.UPLOADING) {\n                    groupedFiles = this._getFilesWithXhr(file.xhr);\n                    for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {\n                        groupedFile = groupedFiles[_i];\n                        groupedFile.status = Dropzone.CANCELED;\n                    }\n                    file.xhr.abort();\n                    for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {\n                        groupedFile = groupedFiles[_j];\n                        this.emit(\"canceled\", groupedFile);\n                    }\n                    if (this.options.uploadMultiple) {\n                        this.emit(\"canceledmultiple\", groupedFiles);\n                    }\n                } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {\n                    file.status = Dropzone.CANCELED;\n                    this.emit(\"canceled\", file);\n                    if (this.options.uploadMultiple) {\n                        this.emit(\"canceledmultiple\", [file]);\n                    }\n                }\n                if (this.options.autoProcessQueue) {\n                    return this.processQueue();\n                }\n            };\n\n            resolveOption = function() {\n                var args, option;\n                option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                if (typeof option === 'function') {\n                    return option.apply(this, args);\n                }\n                return option;\n            };\n\n            Dropzone.prototype.uploadFile = function(file) {\n                return this.uploadFiles([file]);\n            };\n\n            Dropzone.prototype.uploadFiles = function(files) {\n                var file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, key, method, option, progressObj, response, updateProgress, url, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;\n                xhr = new XMLHttpRequest();\n                for (_i = 0, _len = files.length; _i < _len; _i++) {\n                    file = files[_i];\n                    file.xhr = xhr;\n                }\n                method = resolveOption(this.options.method, files);\n                url = resolveOption(this.options.url, files);\n                xhr.open(method, url, true);\n                xhr.withCredentials = !!this.options.withCredentials;\n                response = null;\n                handleError = (function(_this) {\n                    return function() {\n                        var _j, _len1, _results;\n                        _results = [];\n                        for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n                            file = files[_j];\n                            _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr));\n                        }\n                        return _results;\n                    };\n                })(this);\n                updateProgress = (function(_this) {\n                    return function(e) {\n                        var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;\n                        if (e != null) {\n                            progress = 100 * e.loaded / e.total;\n                            for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n                                file = files[_j];\n                                file.upload = {\n                                    progress: progress,\n                                    total: e.total,\n                                    bytesSent: e.loaded\n                                };\n                            }\n                        } else {\n                            allFilesFinished = true;\n                            progress = 100;\n                            for (_k = 0, _len2 = files.length; _k < _len2; _k++) {\n                                file = files[_k];\n                                if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {\n                                    allFilesFinished = false;\n                                }\n                                file.upload.progress = progress;\n                                file.upload.bytesSent = file.upload.total;\n                            }\n                            if (allFilesFinished) {\n                                return;\n                            }\n                        }\n                        _results = [];\n                        for (_l = 0, _len3 = files.length; _l < _len3; _l++) {\n                            file = files[_l];\n                            _results.push(_this.emit(\"uploadprogress\", file, progress, file.upload.bytesSent));\n                        }\n                        return _results;\n                    };\n                })(this);\n                xhr.onload = (function(_this) {\n                    return function(e) {\n                        var _ref;\n                        if (files[0].status === Dropzone.CANCELED) {\n                            return;\n                        }\n                        if (xhr.readyState !== 4) {\n                            return;\n                        }\n                        response = xhr.responseText;\n                        if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n                            try {\n                                response = JSON.parse(response);\n                            } catch (_error) {\n                                e = _error;\n                                response = \"Invalid JSON response from server.\";\n                            }\n                        }\n                        updateProgress();\n                        if (!((200 <= (_ref = xhr.status) && _ref < 300))) {\n                            return handleError();\n                        } else {\n                            return _this._finished(files, response, e);\n                        }\n                    };\n                })(this);\n                xhr.onerror = (function(_this) {\n                    return function() {\n                        if (files[0].status === Dropzone.CANCELED) {\n                            return;\n                        }\n                        return handleError();\n                    };\n                })(this);\n                progressObj = (_ref = xhr.upload) != null ? _ref : xhr;\n                progressObj.onprogress = updateProgress;\n                headers = {\n                    \"Accept\": \"application/json\",\n                    \"Cache-Control\": \"no-cache\",\n                    \"X-Requested-With\": \"XMLHttpRequest\"\n                };\n                if (this.options.headers) {\n                    extend(headers, this.options.headers);\n                }\n                for (headerName in headers) {\n                    headerValue = headers[headerName];\n                    if (headerValue) {\n                        xhr.setRequestHeader(headerName, headerValue);\n                    }\n                }\n                formData = new FormData();\n                if (this.options.params) {\n                    _ref1 = this.options.params;\n                    for (key in _ref1) {\n                        value = _ref1[key];\n                        formData.append(key, value);\n                    }\n                }\n                for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n                    file = files[_j];\n                    this.emit(\"sending\", file, xhr, formData);\n                }\n                if (this.options.uploadMultiple) {\n                    this.emit(\"sendingmultiple\", files, xhr, formData);\n                }\n                if (this.element.tagName === \"FORM\") {\n                    _ref2 = this.element.querySelectorAll(\"input, textarea, select, button\");\n                    for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n                        input = _ref2[_k];\n                        inputName = input.getAttribute(\"name\");\n                        inputType = input.getAttribute(\"type\");\n                        if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n                            _ref3 = input.options;\n                            for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {\n                                option = _ref3[_l];\n                                if (option.selected) {\n                                    formData.append(inputName, option.value);\n                                }\n                            }\n                        } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== \"checkbox\" && _ref4 !== \"radio\") || input.checked) {\n                            formData.append(inputName, input.value);\n                        }\n                    }\n                }\n                for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) {\n                    formData.append(this._getParamName(i), files[i], files[i].name);\n                }\n                return this.submitRequest(xhr, formData, files);\n            };\n\n            Dropzone.prototype.submitRequest = function(xhr, formData, files) {\n                return xhr.send(formData);\n            };\n\n            Dropzone.prototype._finished = function(files, responseText, e) {\n                var file, _i, _len;\n                for (_i = 0, _len = files.length; _i < _len; _i++) {\n                    file = files[_i];\n                    file.status = Dropzone.SUCCESS;\n                    this.emit(\"success\", file, responseText, e);\n                    this.emit(\"complete\", file);\n                }\n                if (this.options.uploadMultiple) {\n                    this.emit(\"successmultiple\", files, responseText, e);\n                    this.emit(\"completemultiple\", files);\n                }\n                if (this.options.autoProcessQueue) {\n                    return this.processQueue();\n                }\n            };\n\n            Dropzone.prototype._errorProcessing = function(files, message, xhr) {\n                var file, _i, _len;\n                for (_i = 0, _len = files.length; _i < _len; _i++) {\n                    file = files[_i];\n                    file.status = Dropzone.ERROR;\n                    this.emit(\"error\", file, message, xhr);\n                    this.emit(\"complete\", file);\n                }\n                if (this.options.uploadMultiple) {\n                    this.emit(\"errormultiple\", files, message, xhr);\n                    this.emit(\"completemultiple\", files);\n                }\n                if (this.options.autoProcessQueue) {\n                    return this.processQueue();\n                }\n            };\n\n            return Dropzone;\n\n        })(Emitter);\n\n        Dropzone.version = \"4.2.0\";\n\n        Dropzone.options = {};\n\n        Dropzone.optionsForElement = function(element) {\n            if (element.getAttribute(\"id\")) {\n                return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n            } else {\n                return void 0;\n            }\n        };\n\n        Dropzone.instances = [];\n\n        Dropzone.forElement = function(element) {\n            if (typeof element === \"string\") {\n                element = document.querySelector(element);\n            }\n            if ((element != null ? element.dropzone : void 0) == null) {\n                throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n            }\n            return element.dropzone;\n        };\n\n        Dropzone.autoDiscover = true;\n\n        Dropzone.discover = function() {\n            var checkElements, dropzone, dropzones, _i, _len, _results;\n            if (document.querySelectorAll) {\n                dropzones = document.querySelectorAll(\".dropzone\");\n            } else {\n                dropzones = [];\n                checkElements = function(elements) {\n                    var el, _i, _len, _results;\n                    _results = [];\n                    for (_i = 0, _len = elements.length; _i < _len; _i++) {\n                        el = elements[_i];\n                        if (/(^| )dropzone($| )/.test(el.className)) {\n                            _results.push(dropzones.push(el));\n                        } else {\n                            _results.push(void 0);\n                        }\n                    }\n                    return _results;\n                };\n                checkElements(document.getElementsByTagName(\"div\"));\n                checkElements(document.getElementsByTagName(\"form\"));\n            }\n            _results = [];\n            for (_i = 0, _len = dropzones.length; _i < _len; _i++) {\n                dropzone = dropzones[_i];\n                if (Dropzone.optionsForElement(dropzone) !== false) {\n                    _results.push(new Dropzone(dropzone));\n                } else {\n                    _results.push(void 0);\n                }\n            }\n            return _results;\n        };\n\n        Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\\/12/i];\n\n        Dropzone.isBrowserSupported = function() {\n            var capableBrowser, regex, _i, _len, _ref;\n            capableBrowser = true;\n            if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n                if (!(\"classList\" in document.createElement(\"a\"))) {\n                    capableBrowser = false;\n                } else {\n                    _ref = Dropzone.blacklistedBrowsers;\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        regex = _ref[_i];\n                        if (regex.test(navigator.userAgent)) {\n                            capableBrowser = false;\n                            continue;\n                        }\n                    }\n                }\n            } else {\n                capableBrowser = false;\n            }\n            return capableBrowser;\n        };\n\n        without = function(list, rejectedItem) {\n            var item, _i, _len, _results;\n            _results = [];\n            for (_i = 0, _len = list.length; _i < _len; _i++) {\n                item = list[_i];\n                if (item !== rejectedItem) {\n                    _results.push(item);\n                }\n            }\n            return _results;\n        };\n\n        camelize = function(str) {\n            return str.replace(/[\\-_](\\w)/g, function(match) {\n                return match.charAt(1).toUpperCase();\n            });\n        };\n\n        Dropzone.createElement = function(string) {\n            var div;\n            div = document.createElement(\"div\");\n            div.innerHTML = string;\n            return div.childNodes[0];\n        };\n\n        Dropzone.elementInside = function(element, container) {\n            if (element === container) {\n                return true;\n            }\n            while (element = element.parentNode) {\n                if (element === container) {\n                    return true;\n                }\n            }\n            return false;\n        };\n\n        Dropzone.getElement = function(el, name) {\n            var element;\n            if (typeof el === \"string\") {\n                element = document.querySelector(el);\n            } else if (el.nodeType != null) {\n                element = el;\n            }\n            if (element == null) {\n                throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\n            }\n            return element;\n        };\n\n        Dropzone.getElements = function(els, name) {\n            var e, el, elements, _i, _j, _len, _len1, _ref;\n            if (els instanceof Array) {\n                elements = [];\n                try {\n                    for (_i = 0, _len = els.length; _i < _len; _i++) {\n                        el = els[_i];\n                        elements.push(this.getElement(el, name));\n                    }\n                } catch (_error) {\n                    e = _error;\n                    elements = null;\n                }\n            } else if (typeof els === \"string\") {\n                elements = [];\n                _ref = document.querySelectorAll(els);\n                for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n                    el = _ref[_j];\n                    elements.push(el);\n                }\n            } else if (els.nodeType != null) {\n                elements = [els];\n            }\n            if (!((elements != null) && elements.length)) {\n                throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\n            }\n            return elements;\n        };\n\n        Dropzone.confirm = function(question, accepted, rejected) {\n            if (window.confirm(question)) {\n                return accepted();\n            } else if (rejected != null) {\n                return rejected();\n            }\n        };\n\n        Dropzone.isValidFile = function(file, acceptedFiles) {\n            var baseMimeType, mimeType, validType, _i, _len;\n            if (!acceptedFiles) {\n                return true;\n            }\n            acceptedFiles = acceptedFiles.split(\",\");\n            mimeType = file.type;\n            baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n            for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {\n                validType = acceptedFiles[_i];\n                validType = validType.trim();\n                if (validType.charAt(0) === \".\") {\n                    if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n                        return true;\n                    }\n                } else if (/\\/\\*$/.test(validType)) {\n                    if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n                        return true;\n                    }\n                } else {\n                    if (mimeType === validType) {\n                        return true;\n                    }\n                }\n            }\n            return false;\n        };\n\n        if (typeof jQuery !== \"undefined\" && jQuery !== null) {\n            jQuery.fn.dropzone = function(options) {\n                return this.each(function() {\n                    return new Dropzone(this, options);\n                });\n            };\n        }\n\n        if (typeof module !== \"undefined\" && module !== null) {\n            module.exports = Dropzone;\n        } else {\n            window.Dropzone = Dropzone;\n        }\n\n        Dropzone.ADDED = \"added\";\n\n        Dropzone.QUEUED = \"queued\";\n\n        Dropzone.ACCEPTED = Dropzone.QUEUED;\n\n        Dropzone.UPLOADING = \"uploading\";\n\n        Dropzone.PROCESSING = Dropzone.UPLOADING;\n\n        Dropzone.CANCELED = \"canceled\";\n\n        Dropzone.ERROR = \"error\";\n\n        Dropzone.SUCCESS = \"success\";\n\n\n        /*\n\n         Bugfix for iOS 6 and 7\n         Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n         based on the work of https://github.com/stomita/ios-imagefile-megapixel\n         */\n\n        detectVerticalSquash = function(img) {\n            var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;\n            iw = img.naturalWidth;\n            ih = img.naturalHeight;\n            canvas = document.createElement(\"canvas\");\n            canvas.width = 1;\n            canvas.height = ih;\n            ctx = canvas.getContext(\"2d\");\n            ctx.drawImage(img, 0, 0);\n            data = ctx.getImageData(0, 0, 1, ih).data;\n            sy = 0;\n            ey = ih;\n            py = ih;\n            while (py > sy) {\n                alpha = data[(py - 1) * 4 + 3];\n                if (alpha === 0) {\n                    ey = py;\n                } else {\n                    sy = py;\n                }\n                py = (ey + sy) >> 1;\n            }\n            ratio = py / ih;\n            if (ratio === 0) {\n                return 1;\n            } else {\n                return ratio;\n            }\n        };\n\n        drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n            var vertSquashRatio;\n            vertSquashRatio = detectVerticalSquash(img);\n            return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n        };\n\n\n        /*\n         * contentloaded.js\n         *\n         * Author: Diego Perini (diego.perini at gmail.com)\n         * Summary: cross-browser wrapper for DOMContentLoaded\n         * Updated: 20101020\n         * License: MIT\n         * Version: 1.2\n         *\n         * URL:\n         * http://javascript.nwbox.com/ContentLoaded/\n         * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n         */\n\n        contentLoaded = function(win, fn) {\n            var add, doc, done, init, poll, pre, rem, root, top;\n            done = false;\n            top = true;\n            doc = win.document;\n            root = doc.documentElement;\n            add = (doc.addEventListener ? \"addEventListener\" : \"attachEvent\");\n            rem = (doc.addEventListener ? \"removeEventListener\" : \"detachEvent\");\n            pre = (doc.addEventListener ? \"\" : \"on\");\n            init = function(e) {\n                if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n                    return;\n                }\n                (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n                if (!done && (done = true)) {\n                    return fn.call(win, e.type || e);\n                }\n            };\n            poll = function() {\n                var e;\n                try {\n                    root.doScroll(\"left\");\n                } catch (_error) {\n                    e = _error;\n                    setTimeout(poll, 50);\n                    return;\n                }\n                return init(\"poll\");\n            };\n            if (doc.readyState !== \"complete\") {\n                if (doc.createEventObject && root.doScroll) {\n                    try {\n                        top = !win.frameElement;\n                    } catch (_error) {}\n                    if (top) {\n                        poll();\n                    }\n                }\n                doc[add](pre + \"DOMContentLoaded\", init, false);\n                doc[add](pre + \"readystatechange\", init, false);\n                return win[add](pre + \"load\", init, false);\n            }\n        };\n\n        Dropzone._autoDiscoverFunction = function() {\n            if (Dropzone.autoDiscover) {\n                return Dropzone.discover();\n            }\n        };\n\n        contentLoaded(window, Dropzone._autoDiscoverFunction);\n\n    }).call(this);\n\n    return module.exports;\n}));","Magento_PageBuilder/js/resource/jquery/ui/jquery.ui.touch-punch.min.js":"/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011\u20132014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n *  jquery.ui.widget.js\n *  jquery.ui.mouse.js\n */\n!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent(\"MouseEvents\");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch=\"ontouchend\"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,\"mouseover\"),f(a,\"mousemove\"),f(a,\"mousedown\"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,\"mousemove\"))},b._touchEnd=function(a){e&&(f(a,\"mouseup\"),f(a,\"mouseout\"),this._touchMoved||f(a,\"click\"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,\"_touchStart\"),touchmove:a.proxy(b,\"_touchMove\"),touchend:a.proxy(b,\"_touchEnd\")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,\"_touchStart\"),touchmove:a.proxy(b,\"_touchMove\"),touchend:a.proxy(b,\"_touchEnd\")}),d.call(b)}}}(jQuery);\n","Magento_PageBuilder/js/resource/html2canvas/html2canvas.min.js":"/*!\n * html2canvas 1.0.0-rc.5 <https://html2canvas.hertzen.com>\n * Copyright (c) 2019 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n!function(A,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(A=A||self).html2canvas=e()}(this,function(){\"use strict\";\n    /*! *****************************************************************************\n        Copyright (c) Microsoft Corporation. All rights reserved.\n        Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n        this file except in compliance with the License. You may obtain a copy of the\n        License at http://www.apache.org/licenses/LICENSE-2.0\n\n        THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n        KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\n        WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\n        MERCHANTABLITY OR NON-INFRINGEMENT.\n\n        See the Apache Version 2.0 License for specific language governing permissions\n        and limitations under the License.\n        ***************************************************************************** */var r=function(A,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(A,e){A.__proto__=e}||function(A,e){for(var t in e)e.hasOwnProperty(t)&&(A[t]=e[t])})(A,e)};function A(A,e){function t(){this.constructor=A}r(A,e),A.prototype=null===e?Object.create(e):(t.prototype=e.prototype,new t)}var K=function(){return(K=Object.assign||function(A){for(var e,t=1,r=arguments.length;t<r;t++)for(var n in e=arguments[t])Object.prototype.hasOwnProperty.call(e,n)&&(A[n]=e[n]);return A}).apply(this,arguments)};function a(B,s,o,i){return new(o||(o=Promise))(function(A,e){function t(A){try{n(i.next(A))}catch(A){e(A)}}function r(A){try{n(i.throw(A))}catch(A){e(A)}}function n(e){e.done?A(e.value):new o(function(A){A(e.value)}).then(t,r)}n((i=i.apply(B,s||[])).next())})}function S(t,r){var n,B,s,A,o={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return A={next:e(0),throw:e(1),return:e(2)},\"function\"==typeof Symbol&&(A[Symbol.iterator]=function(){return this}),A;function e(e){return function(A){return function(e){if(n)throw new TypeError(\"Generator is already executing.\");for(;o;)try{if(n=1,B&&(s=2&e[0]?B.return:e[0]?B.throw||((s=B.return)&&s.call(B),0):B.next)&&!(s=s.call(B,e[1])).done)return s;switch(B=0,s&&(e=[2&e[0],s.value]),e[0]){case 0:case 1:s=e;break;case 4:return o.label++,{value:e[1],done:!1};case 5:o.label++,B=e[1],e=[0];continue;case 7:e=o.ops.pop(),o.trys.pop();continue;default:if(!(s=0<(s=o.trys).length&&s[s.length-1])&&(6===e[0]||2===e[0])){o=0;continue}if(3===e[0]&&(!s||e[1]>s[0]&&e[1]<s[3])){o.label=e[1];break}if(6===e[0]&&o.label<s[1]){o.label=s[1],s=e;break}if(s&&o.label<s[2]){o.label=s[2],o.ops.push(e);break}s[2]&&o.ops.pop(),o.trys.pop();continue}e=r.call(t,o)}catch(A){e=[6,A],B=0}finally{n=s=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}([e,A])}}}var I=(n.prototype.add=function(A,e,t,r){return new n(this.left+A,this.top+e,this.width+t,this.height+r)},n.fromClientRect=function(A){return new n(A.left,A.top,A.width,A.height)},n);function n(A,e,t,r){this.left=A,this.top=e,this.width=t,this.height=r}for(var T=function(A){return I.fromClientRect(A.getBoundingClientRect())},c=function(A){for(var e=[],t=0,r=A.length;t<r;){var n=A.charCodeAt(t++);if(55296<=n&&n<=56319&&t<r){var B=A.charCodeAt(t++);56320==(64512&B)?e.push(((1023&n)<<10)+(1023&B)+65536):(e.push(n),t--)}else e.push(n)}return e},l=function(){for(var A=[],e=0;e<arguments.length;e++)A[e]=arguments[e];if(String.fromCodePoint)return String.fromCodePoint.apply(String,A);var t=A.length;if(!t)return\"\";for(var r=[],n=-1,B=\"\";++n<t;){var s=A[n];s<=65535?r.push(s):(s-=65536,r.push(55296+(s>>10),s%1024+56320)),(n+1===t||16384<r.length)&&(B+=String.fromCharCode.apply(String,r),r.length=0)}return B},e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",Q=\"undefined\"==typeof Uint8Array?[]:new Uint8Array(256),t=0;t<e.length;t++)Q[e.charCodeAt(t)]=t;function B(A,e,t){return A.slice?A.slice(e,t):new Uint16Array(Array.prototype.slice.call(A,e,t))}var s=(o.prototype.get=function(A){var e;if(0<=A){if(A<55296||56319<A&&A<=65535)return e=((e=this.index[A>>5])<<2)+(31&A),this.data[e];if(A<=65535)return e=((e=this.index[2048+(A-55296>>5)])<<2)+(31&A),this.data[e];if(A<this.highStart)return e=2080+(A>>11),e=this.index[e],e+=A>>5&63,e=((e=this.index[e])<<2)+(31&A),this.data[e];if(A<=1114111)return this.data[this.highValueIndex]}return this.errorValue},o);function o(A,e,t,r,n,B){this.initialValue=A,this.errorValue=e,this.highStart=t,this.highValueIndex=r,this.index=n,this.data=B}function C(A,e,t,r){var n=r[t];if(Array.isArray(A)?-1!==A.indexOf(n):A===n)for(var B=t;B<=r.length;){if((i=r[++B])===e)return!0;if(i!==H)break}if(n===H)for(B=t;0<B;){var s=r[--B];if(Array.isArray(A)?-1!==A.indexOf(s):A===s)for(var o=t;o<=r.length;){var i;if((i=r[++o])===e)return!0;if(i!==H)break}if(s!==H)break}return!1}function g(A,e){for(var t=A;0<=t;){var r=e[t];if(r!==H)return r;t--}return 0}function w(A,e,t,r,n){if(0===t[r])return Y;var B=r-1;if(Array.isArray(n)&&!0===n[B])return Y;var s=B-1,o=1+B,i=e[B],a=0<=s?e[s]:0,c=e[o];if(2===i&&3===c)return Y;if(-1!==j.indexOf(i))return\"!\";if(-1!==j.indexOf(c))return Y;if(-1!==$.indexOf(c))return Y;if(8===g(B,e))return\"\u00f7\";if(11===q.get(A[B])&&(c===X||c===P||c===x))return Y;if(7===i||7===c)return Y;if(9===i)return Y;if(-1===[H,d,f].indexOf(i)&&9===c)return Y;if(-1!==[p,N,m,O,y].indexOf(c))return Y;if(g(B,e)===v)return Y;if(C(23,v,B,e))return Y;if(C([p,N],L,B,e))return Y;if(C(12,12,B,e))return Y;if(i===H)return\"\u00f7\";if(23===i||23===c)return Y;if(16===c||16===i)return\"\u00f7\";if(-1!==[d,f,L].indexOf(c)||14===i)return Y;if(36===a&&-1!==rA.indexOf(i))return Y;if(i===y&&36===c)return Y;if(c===R&&-1!==Z.concat(R,m,D,X,P,x).indexOf(i))return Y;if(-1!==Z.indexOf(c)&&i===D||-1!==Z.indexOf(i)&&c===D)return Y;if(i===M&&-1!==[X,P,x].indexOf(c)||-1!==[X,P,x].indexOf(i)&&c===b)return Y;if(-1!==Z.indexOf(i)&&-1!==AA.indexOf(c)||-1!==AA.indexOf(i)&&-1!==Z.indexOf(c))return Y;if(-1!==[M,b].indexOf(i)&&(c===D||-1!==[v,f].indexOf(c)&&e[1+o]===D)||-1!==[v,f].indexOf(i)&&c===D||i===D&&-1!==[D,y,O].indexOf(c))return Y;if(-1!==[D,y,O,p,N].indexOf(c))for(var Q=B;0<=Q;){if((w=e[Q])===D)return Y;if(-1===[y,O].indexOf(w))break;Q--}if(-1!==[M,b].indexOf(c))for(Q=-1!==[p,N].indexOf(i)?s:B;0<=Q;){var w;if((w=e[Q])===D)return Y;if(-1===[y,O].indexOf(w))break;Q--}if(J===i&&-1!==[J,G,V,z].indexOf(c)||-1!==[G,V].indexOf(i)&&-1!==[G,k].indexOf(c)||-1!==[k,z].indexOf(i)&&c===k)return Y;if(-1!==tA.indexOf(i)&&-1!==[R,b].indexOf(c)||-1!==tA.indexOf(c)&&i===M)return Y;if(-1!==Z.indexOf(i)&&-1!==Z.indexOf(c))return Y;if(i===O&&-1!==Z.indexOf(c))return Y;if(-1!==Z.concat(D).indexOf(i)&&c===v||-1!==Z.concat(D).indexOf(c)&&i===N)return Y;if(41===i&&41===c){for(var u=t[B],U=1;0<u&&41===e[--u];)U++;if(U%2!=0)return Y}return i===P&&c===x?Y:\"\u00f7\"}function u(t,A){A||(A={lineBreak:\"normal\",wordBreak:\"normal\"});var e=function(A,n){void 0===n&&(n=\"strict\");var B=[],s=[],o=[];return A.forEach(function(A,e){var t=q.get(A);if(50<t?(o.push(!0),t-=50):o.push(!1),-1!==[\"normal\",\"auto\",\"loose\"].indexOf(n)&&-1!==[8208,8211,12316,12448].indexOf(A))return s.push(e),B.push(16);if(4!==t&&11!==t)return s.push(e),31===t?B.push(\"strict\"===n?L:X):t===W?B.push(_):29===t?B.push(_):43===t?131072<=A&&A<=196605||196608<=A&&A<=262141?B.push(X):B.push(_):void B.push(t);if(0===e)return s.push(e),B.push(_);var r=B[e-1];return-1===eA.indexOf(r)?(s.push(s[e-1]),B.push(r)):(s.push(e),B.push(_))}),[s,B,o]}(t,A.lineBreak),r=e[0],n=e[1],B=e[2];return\"break-all\"!==A.wordBreak&&\"break-word\"!==A.wordBreak||(n=n.map(function(A){return-1!==[D,_,W].indexOf(A)?X:A})),[r,n,\"keep-all\"===A.wordBreak?B.map(function(A,e){return A&&19968<=t[e]&&t[e]<=40959}):void 0]}var i,U,E,F,h,H=10,d=13,f=15,p=17,N=18,m=19,R=20,L=21,v=22,O=24,D=25,b=26,M=27,y=28,_=30,P=32,x=33,V=34,z=35,X=37,J=38,G=39,k=40,W=42,Y=\"\u00d7\",q=(i=function(A){var e,t,r,n,B,s=.75*A.length,o=A.length,i=0;\"=\"===A[A.length-1]&&(s--,\"=\"===A[A.length-2]&&s--);var a=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array&&void 0!==Uint8Array.prototype.slice?new ArrayBuffer(s):new Array(s),c=Array.isArray(a)?a:new Uint8Array(a);for(e=0;e<o;e+=4)t=Q[A.charCodeAt(e)],r=Q[A.charCodeAt(e+1)],n=Q[A.charCodeAt(e+2)],B=Q[A.charCodeAt(e+3)],c[i++]=t<<2|r>>4,c[i++]=(15&r)<<4|n>>2,c[i++]=(3&n)<<6|63&B;return a}(\"KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA\"),U=Array.isArray(i)?function(A){for(var e=A.length,t=[],r=0;r<e;r+=4)t.push(A[r+3]<<24|A[r+2]<<16|A[r+1]<<8|A[r]);return t}(i):new Uint32Array(i),E=Array.isArray(i)?function(A){for(var e=A.length,t=[],r=0;r<e;r+=2)t.push(A[r+1]<<8|A[r]);return t}(i):new Uint16Array(i),F=B(E,12,U[4]/2),h=2===U[5]?B(E,(24+U[4])/2):function(A,e,t){return A.slice?A.slice(e,t):new Uint32Array(Array.prototype.slice.call(A,e,t))}(U,Math.ceil((24+U[4])/4)),new s(U[0],U[1],U[2],U[3],F,h)),Z=[_,36],j=[1,2,3,5],$=[H,8],AA=[M,b],eA=j.concat($),tA=[J,G,k,V,z],rA=[f,d],nA=(BA.prototype.slice=function(){return l.apply(void 0,this.codePoints.slice(this.start,this.end))},BA);function BA(A,e,t,r){this.codePoints=A,this.required=\"!\"===e,this.start=t,this.end=r}var sA,oA;(oA=sA||(sA={}))[oA.STRING_TOKEN=0]=\"STRING_TOKEN\",oA[oA.BAD_STRING_TOKEN=1]=\"BAD_STRING_TOKEN\",oA[oA.LEFT_PARENTHESIS_TOKEN=2]=\"LEFT_PARENTHESIS_TOKEN\",oA[oA.RIGHT_PARENTHESIS_TOKEN=3]=\"RIGHT_PARENTHESIS_TOKEN\",oA[oA.COMMA_TOKEN=4]=\"COMMA_TOKEN\",oA[oA.HASH_TOKEN=5]=\"HASH_TOKEN\",oA[oA.DELIM_TOKEN=6]=\"DELIM_TOKEN\",oA[oA.AT_KEYWORD_TOKEN=7]=\"AT_KEYWORD_TOKEN\",oA[oA.PREFIX_MATCH_TOKEN=8]=\"PREFIX_MATCH_TOKEN\",oA[oA.DASH_MATCH_TOKEN=9]=\"DASH_MATCH_TOKEN\",oA[oA.INCLUDE_MATCH_TOKEN=10]=\"INCLUDE_MATCH_TOKEN\",oA[oA.LEFT_CURLY_BRACKET_TOKEN=11]=\"LEFT_CURLY_BRACKET_TOKEN\",oA[oA.RIGHT_CURLY_BRACKET_TOKEN=12]=\"RIGHT_CURLY_BRACKET_TOKEN\",oA[oA.SUFFIX_MATCH_TOKEN=13]=\"SUFFIX_MATCH_TOKEN\",oA[oA.SUBSTRING_MATCH_TOKEN=14]=\"SUBSTRING_MATCH_TOKEN\",oA[oA.DIMENSION_TOKEN=15]=\"DIMENSION_TOKEN\",oA[oA.PERCENTAGE_TOKEN=16]=\"PERCENTAGE_TOKEN\",oA[oA.NUMBER_TOKEN=17]=\"NUMBER_TOKEN\",oA[oA.FUNCTION=18]=\"FUNCTION\",oA[oA.FUNCTION_TOKEN=19]=\"FUNCTION_TOKEN\",oA[oA.IDENT_TOKEN=20]=\"IDENT_TOKEN\",oA[oA.COLUMN_TOKEN=21]=\"COLUMN_TOKEN\",oA[oA.URL_TOKEN=22]=\"URL_TOKEN\",oA[oA.BAD_URL_TOKEN=23]=\"BAD_URL_TOKEN\",oA[oA.CDC_TOKEN=24]=\"CDC_TOKEN\",oA[oA.CDO_TOKEN=25]=\"CDO_TOKEN\",oA[oA.COLON_TOKEN=26]=\"COLON_TOKEN\",oA[oA.SEMICOLON_TOKEN=27]=\"SEMICOLON_TOKEN\",oA[oA.LEFT_SQUARE_BRACKET_TOKEN=28]=\"LEFT_SQUARE_BRACKET_TOKEN\",oA[oA.RIGHT_SQUARE_BRACKET_TOKEN=29]=\"RIGHT_SQUARE_BRACKET_TOKEN\",oA[oA.UNICODE_RANGE_TOKEN=30]=\"UNICODE_RANGE_TOKEN\",oA[oA.WHITESPACE_TOKEN=31]=\"WHITESPACE_TOKEN\",oA[oA.EOF_TOKEN=32]=\"EOF_TOKEN\";function iA(A){return 48<=A&&A<=57}function aA(A){return iA(A)||65<=A&&A<=70||97<=A&&A<=102}function cA(A){return 10===A||9===A||32===A}function QA(A){return function(A){return function(A){return 97<=A&&A<=122}(A)||function(A){return 65<=A&&A<=90}(A)}(A)||function(A){return 128<=A}(A)||95===A}function wA(A){return QA(A)||iA(A)||45===A}function uA(A,e){return 92===A&&10!==e}function UA(A,e,t){return 45===A?QA(e)||uA(e,t):!!QA(A)||!(92!==A||!uA(A,e))}function lA(A,e,t){return 43===A||45===A?!!iA(e)||46===e&&iA(t):iA(46===A?e:A)}var CA={type:sA.LEFT_PARENTHESIS_TOKEN},gA={type:sA.RIGHT_PARENTHESIS_TOKEN},EA={type:sA.COMMA_TOKEN},FA={type:sA.SUFFIX_MATCH_TOKEN},hA={type:sA.PREFIX_MATCH_TOKEN},HA={type:sA.COLUMN_TOKEN},dA={type:sA.DASH_MATCH_TOKEN},fA={type:sA.INCLUDE_MATCH_TOKEN},pA={type:sA.LEFT_CURLY_BRACKET_TOKEN},NA={type:sA.RIGHT_CURLY_BRACKET_TOKEN},KA={type:sA.SUBSTRING_MATCH_TOKEN},IA={type:sA.BAD_URL_TOKEN},TA={type:sA.BAD_STRING_TOKEN},mA={type:sA.CDO_TOKEN},RA={type:sA.CDC_TOKEN},LA={type:sA.COLON_TOKEN},vA={type:sA.SEMICOLON_TOKEN},OA={type:sA.LEFT_SQUARE_BRACKET_TOKEN},DA={type:sA.RIGHT_SQUARE_BRACKET_TOKEN},bA={type:sA.WHITESPACE_TOKEN},SA={type:sA.EOF_TOKEN},MA=(yA.prototype.write=function(A){this._value=this._value.concat(c(A))},yA.prototype.read=function(){for(var A=[],e=this.consumeToken();e!==SA;)A.push(e),e=this.consumeToken();return A},yA.prototype.consumeToken=function(){var A=this.consumeCodePoint();switch(A){case 34:return this.consumeStringToken(34);case 35:var e=this.peekCodePoint(0),t=this.peekCodePoint(1),r=this.peekCodePoint(2);if(wA(e)||uA(t,r)){var n=UA(e,t,r)?2:1,B=this.consumeName();return{type:sA.HASH_TOKEN,value:B,flags:n}}break;case 36:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),FA;break;case 39:return this.consumeStringToken(39);case 40:return CA;case 41:return gA;case 42:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),KA;break;case 43:if(lA(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case 44:return EA;case 45:var s=A,o=this.peekCodePoint(0),i=this.peekCodePoint(1);if(lA(s,o,i))return this.reconsumeCodePoint(A),this.consumeNumericToken();if(UA(s,o,i))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();if(45===o&&62===i)return this.consumeCodePoint(),this.consumeCodePoint(),RA;break;case 46:if(lA(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case 47:if(42===this.peekCodePoint(0))for(this.consumeCodePoint();;){var a=this.consumeCodePoint();if(42===a&&47===(a=this.consumeCodePoint()))return this.consumeToken();if(-1===a)return this.consumeToken()}break;case 58:return LA;case 59:return vA;case 60:if(33===this.peekCodePoint(0)&&45===this.peekCodePoint(1)&&45===this.peekCodePoint(2))return this.consumeCodePoint(),this.consumeCodePoint(),mA;break;case 64:var c=this.peekCodePoint(0),Q=this.peekCodePoint(1),w=this.peekCodePoint(2);if(UA(c,Q,w))return B=this.consumeName(),{type:sA.AT_KEYWORD_TOKEN,value:B};break;case 91:return OA;case 92:if(uA(A,this.peekCodePoint(0)))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();break;case 93:return DA;case 61:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),hA;break;case 123:return pA;case 125:return NA;case 117:case 85:var u=this.peekCodePoint(0),U=this.peekCodePoint(1);return 43!==u||!aA(U)&&63!==U||(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(A),this.consumeIdentLikeToken();case 124:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),dA;if(124===this.peekCodePoint(0))return this.consumeCodePoint(),HA;break;case 126:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),fA;break;case-1:return SA}return cA(A)?(this.consumeWhiteSpace(),bA):iA(A)?(this.reconsumeCodePoint(A),this.consumeNumericToken()):QA(A)?(this.reconsumeCodePoint(A),this.consumeIdentLikeToken()):{type:sA.DELIM_TOKEN,value:l(A)}},yA.prototype.consumeCodePoint=function(){var A=this._value.shift();return void 0===A?-1:A},yA.prototype.reconsumeCodePoint=function(A){this._value.unshift(A)},yA.prototype.peekCodePoint=function(A){return A>=this._value.length?-1:this._value[A]},yA.prototype.consumeUnicodeRangeToken=function(){for(var A=[],e=this.consumeCodePoint();aA(e)&&A.length<6;)A.push(e),e=this.consumeCodePoint();for(var t=!1;63===e&&A.length<6;)A.push(e),e=this.consumeCodePoint(),t=!0;if(t){var r=parseInt(l.apply(void 0,A.map(function(A){return 63===A?48:A})),16),n=parseInt(l.apply(void 0,A.map(function(A){return 63===A?70:A})),16);return{type:sA.UNICODE_RANGE_TOKEN,start:r,end:n}}var B=parseInt(l.apply(void 0,A),16);if(45===this.peekCodePoint(0)&&aA(this.peekCodePoint(1))){this.consumeCodePoint(),e=this.consumeCodePoint();for(var s=[];aA(e)&&s.length<6;)s.push(e),e=this.consumeCodePoint();return n=parseInt(l.apply(void 0,s),16),{type:sA.UNICODE_RANGE_TOKEN,start:B,end:n}}return{type:sA.UNICODE_RANGE_TOKEN,start:B,end:B}},yA.prototype.consumeIdentLikeToken=function(){var A=this.consumeName();return\"url\"===A.toLowerCase()&&40===this.peekCodePoint(0)?(this.consumeCodePoint(),this.consumeUrlToken()):40===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:sA.FUNCTION_TOKEN,value:A}):{type:sA.IDENT_TOKEN,value:A}},yA.prototype.consumeUrlToken=function(){var A=[];if(this.consumeWhiteSpace(),-1===this.peekCodePoint(0))return{type:sA.URL_TOKEN,value:\"\"};var e,t=this.peekCodePoint(0);if(39===t||34===t){var r=this.consumeStringToken(this.consumeCodePoint());return r.type===sA.STRING_TOKEN&&(this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0))?(this.consumeCodePoint(),{type:sA.URL_TOKEN,value:r.value}):(this.consumeBadUrlRemnants(),IA)}for(;;){var n=this.consumeCodePoint();if(-1===n||41===n)return{type:sA.URL_TOKEN,value:l.apply(void 0,A)};if(cA(n))return this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:sA.URL_TOKEN,value:l.apply(void 0,A)}):(this.consumeBadUrlRemnants(),IA);if(34===n||39===n||40===n||0<=(e=n)&&e<=8||11===e||14<=e&&e<=31||127===e)return this.consumeBadUrlRemnants(),IA;if(92===n){if(!uA(n,this.peekCodePoint(0)))return this.consumeBadUrlRemnants(),IA;A.push(this.consumeEscapedCodePoint())}else A.push(n)}},yA.prototype.consumeWhiteSpace=function(){for(;cA(this.peekCodePoint(0));)this.consumeCodePoint()},yA.prototype.consumeBadUrlRemnants=function(){for(;;){var A=this.consumeCodePoint();if(41===A||-1===A)return;uA(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},yA.prototype.consumeStringSlice=function(A){for(var e=\"\";0<A;){var t=Math.min(6e4,A);e+=l.apply(void 0,this._value.splice(0,t)),A-=t}return this._value.shift(),e},yA.prototype.consumeStringToken=function(A){for(var e=\"\",t=0;;){var r=this._value[t];if(-1===r||void 0===r||r===A)return e+=this.consumeStringSlice(t),{type:sA.STRING_TOKEN,value:e};if(10===r)return this._value.splice(0,t),TA;if(92===r){var n=this._value[t+1];-1!==n&&void 0!==n&&(10===n?(e+=this.consumeStringSlice(t),t=-1,this._value.shift()):uA(r,n)&&(e+=this.consumeStringSlice(t),e+=l(this.consumeEscapedCodePoint()),t=-1))}t++}},yA.prototype.consumeNumber=function(){var A=[],e=4,t=this.peekCodePoint(0);for(43!==t&&45!==t||A.push(this.consumeCodePoint());iA(this.peekCodePoint(0));)A.push(this.consumeCodePoint());t=this.peekCodePoint(0);var r=this.peekCodePoint(1);if(46===t&&iA(r))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),e=8;iA(this.peekCodePoint(0));)A.push(this.consumeCodePoint());t=this.peekCodePoint(0),r=this.peekCodePoint(1);var n=this.peekCodePoint(2);if((69===t||101===t)&&((43===r||45===r)&&iA(n)||iA(r)))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),e=8;iA(this.peekCodePoint(0));)A.push(this.consumeCodePoint());return[function(A){var e=0,t=1;43!==A[e]&&45!==A[e]||(45===A[e]&&(t=-1),e++);for(var r=[];iA(A[e]);)r.push(A[e++]);var n=r.length?parseInt(l.apply(void 0,r),10):0;46===A[e]&&e++;for(var B=[];iA(A[e]);)B.push(A[e++]);var s=B.length,o=s?parseInt(l.apply(void 0,B),10):0;69!==A[e]&&101!==A[e]||e++;var i=1;43!==A[e]&&45!==A[e]||(45===A[e]&&(i=-1),e++);for(var a=[];iA(A[e]);)a.push(A[e++]);var c=a.length?parseInt(l.apply(void 0,a),10):0;return t*(n+o*Math.pow(10,-s))*Math.pow(10,i*c)}(A),e]},yA.prototype.consumeNumericToken=function(){var A=this.consumeNumber(),e=A[0],t=A[1],r=this.peekCodePoint(0),n=this.peekCodePoint(1),B=this.peekCodePoint(2);if(UA(r,n,B)){var s=this.consumeName();return{type:sA.DIMENSION_TOKEN,number:e,flags:t,unit:s}}return 37===r?(this.consumeCodePoint(),{type:sA.PERCENTAGE_TOKEN,number:e,flags:t}):{type:sA.NUMBER_TOKEN,number:e,flags:t}},yA.prototype.consumeEscapedCodePoint=function(){var A=this.consumeCodePoint();if(aA(A)){for(var e=l(A);aA(this.peekCodePoint(0))&&e.length<6;)e+=l(this.consumeCodePoint());cA(this.peekCodePoint(0))&&this.consumeCodePoint();var t=parseInt(e,16);return 0===t||function(A){return 55296<=A&&A<=57343}(t)||1114111<t?65533:t}return-1===A?65533:A},yA.prototype.consumeName=function(){for(var A=\"\";;){var e=this.consumeCodePoint();if(wA(e))A+=l(e);else{if(!uA(e,this.peekCodePoint(0)))return this.reconsumeCodePoint(e),A;A+=l(this.consumeEscapedCodePoint())}}},yA);function yA(){this._value=[]}var _A=(PA.create=function(A){var e=new MA;return e.write(A),new PA(e.read())},PA.parseValue=function(A){return PA.create(A).parseComponentValue()},PA.parseValues=function(A){return PA.create(A).parseComponentValues()},PA.prototype.parseComponentValue=function(){for(var A=this.consumeToken();A.type===sA.WHITESPACE_TOKEN;)A=this.consumeToken();if(A.type===sA.EOF_TOKEN)throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");this.reconsumeToken(A);for(var e=this.consumeComponentValue();(A=this.consumeToken()).type===sA.WHITESPACE_TOKEN;);if(A.type===sA.EOF_TOKEN)return e;throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\")},PA.prototype.parseComponentValues=function(){for(var A=[];;){var e=this.consumeComponentValue();if(e.type===sA.EOF_TOKEN)return A;A.push(e),A.push()}},PA.prototype.consumeComponentValue=function(){var A=this.consumeToken();switch(A.type){case sA.LEFT_CURLY_BRACKET_TOKEN:case sA.LEFT_SQUARE_BRACKET_TOKEN:case sA.LEFT_PARENTHESIS_TOKEN:return this.consumeSimpleBlock(A.type);case sA.FUNCTION_TOKEN:return this.consumeFunction(A)}return A},PA.prototype.consumeSimpleBlock=function(A){for(var e={type:A,values:[]},t=this.consumeToken();;){if(t.type===sA.EOF_TOKEN||Be(t,A))return e;this.reconsumeToken(t),e.values.push(this.consumeComponentValue()),t=this.consumeToken()}},PA.prototype.consumeFunction=function(A){for(var e={name:A.value,values:[],type:sA.FUNCTION};;){var t=this.consumeToken();if(t.type===sA.EOF_TOKEN||t.type===sA.RIGHT_PARENTHESIS_TOKEN)return e;this.reconsumeToken(t),e.values.push(this.consumeComponentValue())}},PA.prototype.consumeToken=function(){var A=this._tokens.shift();return void 0===A?SA:A},PA.prototype.reconsumeToken=function(A){this._tokens.unshift(A)},PA);function PA(A){this._tokens=A}function xA(A){return A.type===sA.DIMENSION_TOKEN}function VA(A){return A.type===sA.NUMBER_TOKEN}function zA(A){return A.type===sA.IDENT_TOKEN}function XA(A){return A.type===sA.STRING_TOKEN}function JA(A,e){return zA(A)&&A.value===e}function GA(A){return A.type!==sA.WHITESPACE_TOKEN}function kA(A){return A.type!==sA.WHITESPACE_TOKEN&&A.type!==sA.COMMA_TOKEN}function WA(A){var e=[],t=[];return A.forEach(function(A){if(A.type===sA.COMMA_TOKEN){if(0===t.length)throw new Error(\"Error parsing function args, zero tokens for arg\");return e.push(t),void(t=[])}A.type!==sA.WHITESPACE_TOKEN&&t.push(A)}),t.length&&e.push(t),e}function YA(A){return A.type===sA.NUMBER_TOKEN||A.type===sA.DIMENSION_TOKEN}function qA(A){return A.type===sA.PERCENTAGE_TOKEN||YA(A)}function ZA(A){return 1<A.length?[A[0],A[1]]:[A[0]]}function jA(A,e,t){var r=A[0],n=A[1];return[ae(r,e),ae(void 0!==n?n:r,t)]}function $A(A){return A.type===sA.DIMENSION_TOKEN&&(\"deg\"===A.unit||\"grad\"===A.unit||\"rad\"===A.unit||\"turn\"===A.unit)}function Ae(A){switch(A.filter(zA).map(function(A){return A.value}).join(\" \")){case\"to bottom right\":case\"to right bottom\":case\"left top\":case\"top left\":return[se,se];case\"to top\":case\"bottom\":return Qe(0);case\"to bottom left\":case\"to left bottom\":case\"right top\":case\"top right\":return[se,ie];case\"to right\":case\"left\":return Qe(90);case\"to top left\":case\"to left top\":case\"right bottom\":case\"bottom right\":return[ie,ie];case\"to bottom\":case\"top\":return Qe(180);case\"to top right\":case\"to right top\":case\"left bottom\":case\"bottom left\":return[ie,se];case\"to left\":case\"right\":return Qe(270)}return 0}function ee(A){return 0==(255&A)}function te(A){var e=255&A,t=255&A>>8,r=255&A>>16,n=255&A>>24;return e<255?\"rgba(\"+n+\",\"+r+\",\"+t+\",\"+e/255+\")\":\"rgb(\"+n+\",\"+r+\",\"+t+\")\"}function re(A,e){if(A.type===sA.NUMBER_TOKEN)return A.number;if(A.type!==sA.PERCENTAGE_TOKEN)return 0;var t=3===e?1:255;return 3===e?A.number/100*t:Math.round(A.number/100*t)}function ne(A){var e=A.filter(kA);if(3===e.length){var t=e.map(re),r=t[0],n=t[1],B=t[2];return ue(r,n,B,1)}if(4!==e.length)return 0;var s=e.map(re),o=(r=s[0],n=s[1],B=s[2],s[3]);return ue(r,n,B,o)}var Be=function(A,e){return e===sA.LEFT_CURLY_BRACKET_TOKEN&&A.type===sA.RIGHT_CURLY_BRACKET_TOKEN||(e===sA.LEFT_SQUARE_BRACKET_TOKEN&&A.type===sA.RIGHT_SQUARE_BRACKET_TOKEN||e===sA.LEFT_PARENTHESIS_TOKEN&&A.type===sA.RIGHT_PARENTHESIS_TOKEN)},se={type:sA.NUMBER_TOKEN,number:0,flags:4},oe={type:sA.PERCENTAGE_TOKEN,number:50,flags:4},ie={type:sA.PERCENTAGE_TOKEN,number:100,flags:4},ae=function(A,e){if(A.type===sA.PERCENTAGE_TOKEN)return A.number/100*e;if(xA(A))switch(A.unit){case\"rem\":case\"em\":return 16*A.number;case\"px\":default:return A.number}return A.number},ce=function(A){if(A.type===sA.DIMENSION_TOKEN)switch(A.unit){case\"deg\":return Math.PI*A.number/180;case\"grad\":return Math.PI/200*A.number;case\"rad\":return A.number;case\"turn\":return 2*Math.PI*A.number}throw new Error(\"Unsupported angle type\")},Qe=function(A){return Math.PI*A/180},we=function(A){if(A.type===sA.FUNCTION){var e=he[A.name];if(void 0===e)throw new Error('Attempting to parse an unsupported color function \"'+A.name+'\"');return e(A.values)}if(A.type===sA.HASH_TOKEN){if(3===A.value.length){var t=A.value.substring(0,1),r=A.value.substring(1,2),n=A.value.substring(2,3);return ue(parseInt(t+t,16),parseInt(r+r,16),parseInt(n+n,16),1)}if(4===A.value.length){t=A.value.substring(0,1),r=A.value.substring(1,2),n=A.value.substring(2,3);var B=A.value.substring(3,4);return ue(parseInt(t+t,16),parseInt(r+r,16),parseInt(n+n,16),parseInt(B+B,16)/255)}if(6===A.value.length){t=A.value.substring(0,2),r=A.value.substring(2,4),n=A.value.substring(4,6);return ue(parseInt(t,16),parseInt(r,16),parseInt(n,16),1)}if(8===A.value.length){t=A.value.substring(0,2),r=A.value.substring(2,4),n=A.value.substring(4,6),B=A.value.substring(6,8);return ue(parseInt(t,16),parseInt(r,16),parseInt(n,16),parseInt(B,16)/255)}}if(A.type===sA.IDENT_TOKEN){var s=He[A.value.toUpperCase()];if(void 0!==s)return s}return He.TRANSPARENT},ue=function(A,e,t,r){return(A<<24|e<<16|t<<8|Math.round(255*r)<<0)>>>0};function Ue(A,e,t){return t<0&&(t+=1),1<=t&&(t-=1),t<1/6?(e-A)*t*6+A:t<.5?e:t<2/3?6*(e-A)*(2/3-t)+A:A}function le(A){var e=A.filter(kA),t=e[0],r=e[1],n=e[2],B=e[3],s=(t.type===sA.NUMBER_TOKEN?Qe(t.number):ce(t))/(2*Math.PI),o=qA(r)?r.number/100:0,i=qA(n)?n.number/100:0,a=void 0!==B&&qA(B)?ae(B,1):1;if(0==o)return ue(255*i,255*i,255*i,1);var c=i<=.5?i*(1+o):i+o-i*o,Q=2*i-c,w=Ue(Q,c,s+1/3),u=Ue(Q,c,s),U=Ue(Q,c,s-1/3);return ue(255*w,255*u,255*U,a)}var Ce,ge,Ee,Fe,he={hsl:le,hsla:le,rgb:ne,rgba:ne},He={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199};(ge=Ce||(Ce={}))[ge.VALUE=0]=\"VALUE\",ge[ge.LIST=1]=\"LIST\",ge[ge.IDENT_VALUE=2]=\"IDENT_VALUE\",ge[ge.TYPE_VALUE=3]=\"TYPE_VALUE\",ge[ge.TOKEN_VALUE=4]=\"TOKEN_VALUE\",(Fe=Ee||(Ee={}))[Fe.BORDER_BOX=0]=\"BORDER_BOX\",Fe[Fe.PADDING_BOX=1]=\"PADDING_BOX\";function de(A){var e=we(A[0]),t=A[1];return t&&qA(t)?{color:e,stop:t}:{color:e,stop:null}}function fe(A,t){var e=A[0],r=A[A.length-1];null===e.stop&&(e.stop=se),null===r.stop&&(r.stop=ie);for(var n=[],B=0,s=0;s<A.length;s++){var o=A[s].stop;if(null!==o){var i=ae(o,t);B<i?n.push(i):n.push(B),B=i}else n.push(null)}var a=null;for(s=0;s<n.length;s++){var c=n[s];if(null===c)null===a&&(a=s);else if(null!==a){for(var Q=s-a,w=(c-n[a-1])/(1+Q),u=1;u<=Q;u++)n[a+u-1]=w*u;a=null}}return A.map(function(A,e){return{color:A.color,stop:Math.max(Math.min(1,n[e]/t),0)}})}function pe(A,e,t){var r=\"number\"==typeof A?A:function(A,e,t){var r=e/2,n=t/2,B=ae(A[0],e)-r,s=n-ae(A[1],t);return(Math.atan2(s,B)+2*Math.PI)%(2*Math.PI)}(A,e,t),n=Math.abs(e*Math.sin(r))+Math.abs(t*Math.cos(r)),B=e/2,s=t/2,o=n/2,i=Math.sin(r-Math.PI/2)*o,a=Math.cos(r-Math.PI/2)*o;return[n,B-a,B+a,s-i,s+i]}function Ne(A,e){return Math.sqrt(A*A+e*e)}function Ke(A,e,B,s,o){return[[0,0],[0,e],[A,0],[A,e]].reduce(function(A,e){var t=e[0],r=e[1],n=Ne(B-t,s-r);return(o?n<A.optimumDistance:n>A.optimumDistance)?{optimumCorner:e,optimumDistance:n}:A},{optimumDistance:o?1/0:-1/0,optimumCorner:null}).optimumCorner}function Ie(A){var n=Qe(180),B=[];return WA(A).forEach(function(A,e){if(0===e){var t=A[0];if(t.type===sA.IDENT_TOKEN&&-1!==[\"top\",\"left\",\"right\",\"bottom\"].indexOf(t.value))return void(n=Ae(A));if($A(t))return void(n=(ce(t)+Qe(270))%Qe(360))}var r=de(A);B.push(r)}),{angle:n,stops:B,type:xe.LINEAR_GRADIENT}}function Te(A){return 0===A[0]&&255===A[1]&&0===A[2]&&255===A[3]}var me={name:\"background-clip\",initialValue:\"border-box\",prefix:!(Fe[Fe.CONTENT_BOX=2]=\"CONTENT_BOX\"),type:Ce.LIST,parse:function(A){return A.map(function(A){if(zA(A))switch(A.value){case\"padding-box\":return Ee.PADDING_BOX;case\"content-box\":return Ee.CONTENT_BOX}return Ee.BORDER_BOX})}},Re={name:\"background-color\",initialValue:\"transparent\",prefix:!1,type:Ce.TYPE_VALUE,format:\"color\"},Le=function(A,e,t,r,n){var B=\"http://www.w3.org/2000/svg\",s=document.createElementNS(B,\"svg\"),o=document.createElementNS(B,\"foreignObject\");return s.setAttributeNS(null,\"width\",A.toString()),s.setAttributeNS(null,\"height\",e.toString()),o.setAttributeNS(null,\"width\",\"100%\"),o.setAttributeNS(null,\"height\",\"100%\"),o.setAttributeNS(null,\"x\",t.toString()),o.setAttributeNS(null,\"y\",r.toString()),o.setAttributeNS(null,\"externalResourcesRequired\",\"true\"),s.appendChild(o),o.appendChild(n),s},ve=function(r){return new Promise(function(A,e){var t=new Image;t.onload=function(){return A(t)},t.onerror=e,t.src=\"data:image/svg+xml;charset=utf-8,\"+encodeURIComponent((new XMLSerializer).serializeToString(r))})},Oe={get SUPPORT_RANGE_BOUNDS(){var A=function(A){if(A.createRange){var e=A.createRange();if(e.getBoundingClientRect){var t=A.createElement(\"boundtest\");t.style.height=\"123px\",t.style.display=\"block\",A.body.appendChild(t),e.selectNode(t);var r=e.getBoundingClientRect(),n=Math.round(r.height);if(A.body.removeChild(t),123===n)return!0}}return!1}(document);return Object.defineProperty(Oe,\"SUPPORT_RANGE_BOUNDS\",{value:A}),A},get SUPPORT_SVG_DRAWING(){var A=function(A){var e=new Image,t=A.createElement(\"canvas\"),r=t.getContext(\"2d\");if(!r)return!1;e.src=\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";try{r.drawImage(e,0,0),t.toDataURL()}catch(A){return!1}return!0}(document);return Object.defineProperty(Oe,\"SUPPORT_SVG_DRAWING\",{value:A}),A},get SUPPORT_FOREIGNOBJECT_DRAWING(){var A=\"function\"==typeof Array.from&&\"function\"==typeof window.fetch?function(r){var A=r.createElement(\"canvas\"),n=100;A.width=n,A.height=n;var B=A.getContext(\"2d\");if(!B)return Promise.reject(!1);B.fillStyle=\"rgb(0, 255, 0)\",B.fillRect(0,0,n,n);var e=new Image,s=A.toDataURL();e.src=s;var t=Le(n,n,0,0,e);return B.fillStyle=\"red\",B.fillRect(0,0,n,n),ve(t).then(function(A){B.drawImage(A,0,0);var e=B.getImageData(0,0,n,n).data;B.fillStyle=\"red\",B.fillRect(0,0,n,n);var t=r.createElement(\"div\");return t.style.backgroundImage=\"url(\"+s+\")\",t.style.height=\"100px\",Te(e)?ve(Le(n,n,0,0,t)):Promise.reject(!1)}).then(function(A){return B.drawImage(A,0,0),Te(B.getImageData(0,0,n,n).data)}).catch(function(){return!1})}(document):Promise.resolve(!1);return Object.defineProperty(Oe,\"SUPPORT_FOREIGNOBJECT_DRAWING\",{value:A}),A},get SUPPORT_CORS_IMAGES(){var A=void 0!==(new Image).crossOrigin;return Object.defineProperty(Oe,\"SUPPORT_CORS_IMAGES\",{value:A}),A},get SUPPORT_RESPONSE_TYPE(){var A=\"string\"==typeof(new XMLHttpRequest).responseType;return Object.defineProperty(Oe,\"SUPPORT_RESPONSE_TYPE\",{value:A}),A},get SUPPORT_CORS_XHR(){var A=\"withCredentials\"in new XMLHttpRequest;return Object.defineProperty(Oe,\"SUPPORT_CORS_XHR\",{value:A}),A}},De=(be.prototype.debug=function(){for(var A=[],e=0;e<arguments.length;e++)A[e]=arguments[e];this.enabled&&(\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.debug?console.debug.apply(console,[this.id,this.getTime()+\"ms\"].concat(A)):this.info.apply(this,A))},be.prototype.getTime=function(){return Date.now()-this.start},be.create=function(A){be.instances[A.id]=new be(A)},be.destroy=function(A){delete be.instances[A]},be.getInstance=function(A){var e=be.instances[A];if(void 0===e)throw new Error(\"No logger instance found with id \"+A);return e},be.prototype.info=function(){for(var A=[],e=0;e<arguments.length;e++)A[e]=arguments[e];this.enabled&&\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.info&&console.info.apply(console,[this.id,this.getTime()+\"ms\"].concat(A))},be.prototype.error=function(){for(var A=[],e=0;e<arguments.length;e++)A[e]=arguments[e];this.enabled&&(\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.error?console.error.apply(console,[this.id,this.getTime()+\"ms\"].concat(A)):this.info.apply(this,A))},be.instances={},be);function be(A){var e=A.id,t=A.enabled;this.id=e,this.enabled=t,this.start=Date.now()}var Se=(Me.create=function(A,e){return Me._caches[A]=new ye(A,e)},Me.destroy=function(A){delete Me._caches[A]},Me.open=function(A){var e=Me._caches[A];if(void 0!==e)return e;throw new Error('Cache with key \"'+A+'\" not found')},Me.getOrigin=function(A){var e=Me._link;return e?(e.href=A,e.href=e.href,e.protocol+e.hostname+e.port):\"about:blank\"},Me.isSameOrigin=function(A){return Me.getOrigin(A)===Me._origin},Me.setContext=function(A){Me._link=A.document.createElement(\"a\"),Me._origin=Me.getOrigin(A.location.href)},Me.getInstance=function(){var A=Me._current;if(null===A)throw new Error(\"No cache instance attached\");return A},Me.attachInstance=function(A){Me._current=A},Me.detachInstance=function(){Me._current=null},Me._caches={},Me._origin=\"about:blank\",Me._current=null,Me);function Me(){}var ye=(_e.prototype.addImage=function(A){var e=Promise.resolve();return this.has(A)||(Ye(A)||Ge(A))&&(this._cache[A]=this.loadImage(A)),e},_e.prototype.match=function(A){return this._cache[A]},_e.prototype.loadImage=function(s){return a(this,void 0,void 0,function(){var e,r,t,n,B=this;return S(this,function(A){switch(A.label){case 0:return e=Se.isSameOrigin(s),r=!ke(s)&&!0===this._options.useCORS&&Oe.SUPPORT_CORS_IMAGES&&!e,t=!ke(s)&&!e&&\"string\"==typeof this._options.proxy&&Oe.SUPPORT_CORS_XHR&&!r,e||!1!==this._options.allowTaint||ke(s)||t||r?(n=s,t?[4,this.proxy(n)]:[3,2]):[2];case 1:n=A.sent(),A.label=2;case 2:return De.getInstance(this.id).debug(\"Added image \"+s.substring(0,256)),[4,new Promise(function(A,e){var t=new Image;t.onload=function(){return A(t)},t.onerror=e,(We(n)||r)&&(t.crossOrigin=\"anonymous\"),t.src=n,!0===t.complete&&setTimeout(function(){return A(t)},500),0<B._options.imageTimeout&&setTimeout(function(){return e(\"Timed out (\"+B._options.imageTimeout+\"ms) loading image\")},B._options.imageTimeout)})];case 3:return[2,A.sent()]}})})},_e.prototype.has=function(A){return void 0!==this._cache[A]},_e.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},_e.prototype.proxy=function(B){var s=this,o=this._options.proxy;if(!o)throw new Error(\"No proxy defined\");var i=B.substring(0,256);return new Promise(function(e,t){var r=Oe.SUPPORT_RESPONSE_TYPE?\"blob\":\"text\",n=new XMLHttpRequest;if(n.onload=function(){if(200===n.status)if(\"text\"==r)e(n.response);else{var A=new FileReader;A.addEventListener(\"load\",function(){return e(A.result)},!1),A.addEventListener(\"error\",function(A){return t(A)},!1),A.readAsDataURL(n.response)}else t(\"Failed to proxy resource \"+i+\" with status code \"+n.status)},n.onerror=t,n.open(\"GET\",o+\"?url=\"+encodeURIComponent(B)+\"&responseType=\"+r),\"text\"!=r&&n instanceof XMLHttpRequest&&(n.responseType=r),s._options.imageTimeout){var A=s._options.imageTimeout;n.timeout=A,n.ontimeout=function(){return t(\"Timed out (\"+A+\"ms) proxying \"+i)}}n.send()})},_e);function _e(A,e){this.id=A,this._options=e,this._cache={}}function Pe(A){var n=rt.CIRCLE,B=Bt.FARTHEST_CORNER,s=[],o=[];return WA(A).forEach(function(A,e){var t=!0;if(0===e?t=A.reduce(function(A,e){if(zA(e))switch(e.value){case\"center\":return o.push(oe),!1;case\"top\":case\"left\":return o.push(se),!1;case\"right\":case\"bottom\":return o.push(ie),!1}else if(qA(e)||YA(e))return o.push(e),!1;return A},t):1===e&&(t=A.reduce(function(A,e){if(zA(e))switch(e.value){case\"circle\":return n=rt.CIRCLE,!1;case et:return n=rt.ELLIPSE,!1;case tt:case Ze:return B=Bt.CLOSEST_SIDE,!1;case je:return B=Bt.FARTHEST_SIDE,!1;case $e:return B=Bt.CLOSEST_CORNER,!1;case\"cover\":case At:return B=Bt.FARTHEST_CORNER,!1}else if(YA(e)||qA(e))return Array.isArray(B)||(B=[]),B.push(e),!1;return A},t)),t){var r=de(A);s.push(r)}}),{size:B,shape:n,stops:s,position:o,type:xe.RADIAL_GRADIENT}}var xe,Ve,ze=/^data:image\\/svg\\+xml/i,Xe=/^data:image\\/.*;base64,/i,Je=/^data:image\\/.*/i,Ge=function(A){return Oe.SUPPORT_SVG_DRAWING||!qe(A)},ke=function(A){return Je.test(A)},We=function(A){return Xe.test(A)},Ye=function(A){return\"blob\"===A.substr(0,4)},qe=function(A){return\"svg\"===A.substr(-3).toLowerCase()||ze.test(A)},Ze=\"closest-side\",je=\"farthest-side\",$e=\"closest-corner\",At=\"farthest-corner\",et=\"ellipse\",tt=\"contain\";(Ve=xe||(xe={}))[Ve.URL=0]=\"URL\",Ve[Ve.LINEAR_GRADIENT=1]=\"LINEAR_GRADIENT\",Ve[Ve.RADIAL_GRADIENT=2]=\"RADIAL_GRADIENT\";var rt,nt,Bt,st;(nt=rt||(rt={}))[nt.CIRCLE=0]=\"CIRCLE\",nt[nt.ELLIPSE=1]=\"ELLIPSE\",(st=Bt||(Bt={}))[st.CLOSEST_SIDE=0]=\"CLOSEST_SIDE\",st[st.FARTHEST_SIDE=1]=\"FARTHEST_SIDE\",st[st.CLOSEST_CORNER=2]=\"CLOSEST_CORNER\",st[st.FARTHEST_CORNER=3]=\"FARTHEST_CORNER\";var ot=function(A){if(A.type===sA.URL_TOKEN){var e={url:A.value,type:xe.URL};return Se.getInstance().addImage(A.value),e}if(A.type!==sA.FUNCTION)throw new Error(\"Unsupported image type\");var t=ct[A.name];if(void 0===t)throw new Error('Attempting to parse an unsupported image function \"'+A.name+'\"');return t(A.values)};var it,at,ct={\"linear-gradient\":function(A){var n=Qe(180),B=[];return WA(A).forEach(function(A,e){if(0===e){var t=A[0];if(t.type===sA.IDENT_TOKEN&&\"to\"===t.value)return void(n=Ae(A));if($A(t))return void(n=ce(t))}var r=de(A);B.push(r)}),{angle:n,stops:B,type:xe.LINEAR_GRADIENT}},\"-moz-linear-gradient\":Ie,\"-ms-linear-gradient\":Ie,\"-o-linear-gradient\":Ie,\"-webkit-linear-gradient\":Ie,\"radial-gradient\":function(A){var B=rt.CIRCLE,s=Bt.FARTHEST_CORNER,o=[],i=[];return WA(A).forEach(function(A,e){var t=!0;if(0===e){var r=!1;t=A.reduce(function(A,e){if(r)if(zA(e))switch(e.value){case\"center\":return i.push(oe),A;case\"top\":case\"left\":return i.push(se),A;case\"right\":case\"bottom\":return i.push(ie),A}else(qA(e)||YA(e))&&i.push(e);else if(zA(e))switch(e.value){case\"circle\":return B=rt.CIRCLE,!1;case et:return B=rt.ELLIPSE,!1;case\"at\":return!(r=!0);case Ze:return s=Bt.CLOSEST_SIDE,!1;case\"cover\":case je:return s=Bt.FARTHEST_SIDE,!1;case tt:case $e:return s=Bt.CLOSEST_CORNER,!1;case At:return s=Bt.FARTHEST_CORNER,!1}else if(YA(e)||qA(e))return Array.isArray(s)||(s=[]),s.push(e),!1;return A},t)}if(t){var n=de(A);o.push(n)}}),{size:s,shape:B,stops:o,position:i,type:xe.RADIAL_GRADIENT}},\"-moz-radial-gradient\":Pe,\"-ms-radial-gradient\":Pe,\"-o-radial-gradient\":Pe,\"-webkit-radial-gradient\":Pe,\"-webkit-gradient\":function(A){var e=Qe(180),s=[],o=xe.LINEAR_GRADIENT,t=rt.CIRCLE,r=Bt.FARTHEST_CORNER;return WA(A).forEach(function(A,e){var t=A[0];if(0===e){if(zA(t)&&\"linear\"===t.value)return void(o=xe.LINEAR_GRADIENT);if(zA(t)&&\"radial\"===t.value)return void(o=xe.RADIAL_GRADIENT)}if(t.type===sA.FUNCTION)if(\"from\"===t.name){var r=we(t.values[0]);s.push({stop:se,color:r})}else if(\"to\"===t.name)r=we(t.values[0]),s.push({stop:ie,color:r});else if(\"color-stop\"===t.name){var n=t.values.filter(kA);if(2===n.length){r=we(n[1]);var B=n[0];VA(B)&&s.push({stop:{type:sA.PERCENTAGE_TOKEN,number:100*B.number,flags:B.flags},color:r})}}}),o===xe.LINEAR_GRADIENT?{angle:(e+Qe(180))%Qe(360),stops:s,type:o}:{size:r,shape:t,stops:s,position:[],type:o}}},Qt={name:\"background-image\",initialValue:\"none\",type:Ce.LIST,prefix:!1,parse:function(A){if(0===A.length)return[];var e=A[0];return e.type===sA.IDENT_TOKEN&&\"none\"===e.value?[]:A.filter(function(A){return kA(A)&&function(A){return A.type!==sA.FUNCTION||ct[A.name]}(A)}).map(ot)}},wt={name:\"background-origin\",initialValue:\"border-box\",prefix:!1,type:Ce.LIST,parse:function(A){return A.map(function(A){if(zA(A))switch(A.value){case\"padding-box\":return 1;case\"content-box\":return 2}return 0})}},ut={name:\"background-position\",initialValue:\"0% 0%\",type:Ce.LIST,prefix:!1,parse:function(A){return WA(A).map(function(A){return A.filter(qA)}).map(ZA)}};(at=it||(it={}))[at.REPEAT=0]=\"REPEAT\",at[at.NO_REPEAT=1]=\"NO_REPEAT\",at[at.REPEAT_X=2]=\"REPEAT_X\";var Ut,lt,Ct={name:\"background-repeat\",initialValue:\"repeat\",prefix:!(at[at.REPEAT_Y=3]=\"REPEAT_Y\"),type:Ce.LIST,parse:function(A){return WA(A).map(function(A){return A.filter(zA).map(function(A){return A.value}).join(\" \")}).map(gt)}},gt=function(A){switch(A){case\"no-repeat\":return it.NO_REPEAT;case\"repeat-x\":case\"repeat no-repeat\":return it.REPEAT_X;case\"repeat-y\":case\"no-repeat repeat\":return it.REPEAT_Y;case\"repeat\":default:return it.REPEAT}};(lt=Ut||(Ut={})).AUTO=\"auto\",lt.CONTAIN=\"contain\";function Et(A){return{name:\"border-\"+A+\"-color\",initialValue:\"transparent\",prefix:!1,type:Ce.TYPE_VALUE,format:\"color\"}}function Ft(A){return{name:\"border-radius-\"+A,initialValue:\"0 0\",prefix:!1,type:Ce.LIST,parse:function(A){return ZA(A.filter(qA))}}}var ht,Ht,dt={name:\"background-size\",initialValue:\"0\",prefix:!(lt.COVER=\"cover\"),type:Ce.LIST,parse:function(A){return WA(A).map(function(A){return A.filter(ft)})}},ft=function(A){return zA(A)||qA(A)},pt=Et(\"top\"),Nt=Et(\"right\"),Kt=Et(\"bottom\"),It=Et(\"left\"),Tt=Ft(\"top-left\"),mt=Ft(\"top-right\"),Rt=Ft(\"bottom-right\"),Lt=Ft(\"bottom-left\");(Ht=ht||(ht={}))[Ht.NONE=0]=\"NONE\",Ht[Ht.SOLID=1]=\"SOLID\";function vt(A){return{name:\"border-\"+A+\"-style\",initialValue:\"solid\",prefix:!1,type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"none\":return ht.NONE}return ht.SOLID}}}function Ot(A){return{name:\"border-\"+A+\"-width\",initialValue:\"0\",type:Ce.VALUE,prefix:!1,parse:function(A){return xA(A)?A.number:0}}}var Dt,bt,St=vt(\"top\"),Mt=vt(\"right\"),yt=vt(\"bottom\"),_t=vt(\"left\"),Pt=Ot(\"top\"),xt=Ot(\"right\"),Vt=Ot(\"bottom\"),zt=Ot(\"left\"),Xt={name:\"color\",initialValue:\"transparent\",prefix:!1,type:Ce.TYPE_VALUE,format:\"color\"},Jt={name:\"display\",initialValue:\"inline-block\",prefix:!1,type:Ce.LIST,parse:function(A){return A.filter(zA).reduce(function(A,e){return A|Gt(e.value)},0)}},Gt=function(A){switch(A){case\"block\":return 2;case\"inline\":return 4;case\"run-in\":return 8;case\"flow\":return 16;case\"flow-root\":return 32;case\"table\":return 64;case\"flex\":case\"-webkit-flex\":return 128;case\"grid\":case\"-ms-grid\":return 256;case\"ruby\":return 512;case\"subgrid\":return 1024;case\"list-item\":return 2048;case\"table-row-group\":return 4096;case\"table-header-group\":return 8192;case\"table-footer-group\":return 16384;case\"table-row\":return 32768;case\"table-cell\":return 65536;case\"table-column-group\":return 131072;case\"table-column\":return 262144;case\"table-caption\":return 524288;case\"ruby-base\":return 1048576;case\"ruby-text\":return 2097152;case\"ruby-base-container\":return 4194304;case\"ruby-text-container\":return 8388608;case\"contents\":return 16777216;case\"inline-block\":return 33554432;case\"inline-list-item\":return 67108864;case\"inline-table\":return 134217728;case\"inline-flex\":return 268435456;case\"inline-grid\":return 536870912}return 0};(bt=Dt||(Dt={}))[bt.NONE=0]=\"NONE\",bt[bt.LEFT=1]=\"LEFT\",bt[bt.RIGHT=2]=\"RIGHT\",bt[bt.INLINE_START=3]=\"INLINE_START\";var kt,Wt,Yt,qt,Zt={name:\"float\",initialValue:\"none\",prefix:!(bt[bt.INLINE_END=4]=\"INLINE_END\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"left\":return Dt.LEFT;case\"right\":return Dt.RIGHT;case\"inline-start\":return Dt.INLINE_START;case\"inline-end\":return Dt.INLINE_END}return Dt.NONE}},jt={name:\"letter-spacing\",initialValue:\"0\",prefix:!1,type:Ce.VALUE,parse:function(A){return A.type===sA.IDENT_TOKEN&&\"normal\"===A.value?0:A.type===sA.NUMBER_TOKEN?A.number:A.type===sA.DIMENSION_TOKEN?A.number:0}},$t={name:\"line-break\",initialValue:(Wt=kt||(kt={})).NORMAL=\"normal\",prefix:!(Wt.STRICT=\"strict\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"strict\":return kt.STRICT;case\"normal\":default:return kt.NORMAL}}},Ar={name:\"line-height\",initialValue:\"normal\",prefix:!1,type:Ce.TOKEN_VALUE},er={name:\"list-style-image\",initialValue:\"none\",type:Ce.VALUE,prefix:!1,parse:function(A){return A.type===sA.IDENT_TOKEN&&\"none\"===A.value?null:ot(A)}};(qt=Yt||(Yt={}))[qt.INSIDE=0]=\"INSIDE\";var tr,rr,nr={name:\"list-style-position\",initialValue:\"outside\",prefix:!(qt[qt.OUTSIDE=1]=\"OUTSIDE\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"inside\":return Yt.INSIDE;case\"outside\":default:return Yt.OUTSIDE}}};(rr=tr||(tr={}))[rr.NONE=-1]=\"NONE\",rr[rr.DISC=0]=\"DISC\",rr[rr.CIRCLE=1]=\"CIRCLE\",rr[rr.SQUARE=2]=\"SQUARE\",rr[rr.DECIMAL=3]=\"DECIMAL\",rr[rr.CJK_DECIMAL=4]=\"CJK_DECIMAL\",rr[rr.DECIMAL_LEADING_ZERO=5]=\"DECIMAL_LEADING_ZERO\",rr[rr.LOWER_ROMAN=6]=\"LOWER_ROMAN\",rr[rr.UPPER_ROMAN=7]=\"UPPER_ROMAN\",rr[rr.LOWER_GREEK=8]=\"LOWER_GREEK\",rr[rr.LOWER_ALPHA=9]=\"LOWER_ALPHA\",rr[rr.UPPER_ALPHA=10]=\"UPPER_ALPHA\",rr[rr.ARABIC_INDIC=11]=\"ARABIC_INDIC\",rr[rr.ARMENIAN=12]=\"ARMENIAN\",rr[rr.BENGALI=13]=\"BENGALI\",rr[rr.CAMBODIAN=14]=\"CAMBODIAN\",rr[rr.CJK_EARTHLY_BRANCH=15]=\"CJK_EARTHLY_BRANCH\",rr[rr.CJK_HEAVENLY_STEM=16]=\"CJK_HEAVENLY_STEM\",rr[rr.CJK_IDEOGRAPHIC=17]=\"CJK_IDEOGRAPHIC\",rr[rr.DEVANAGARI=18]=\"DEVANAGARI\",rr[rr.ETHIOPIC_NUMERIC=19]=\"ETHIOPIC_NUMERIC\",rr[rr.GEORGIAN=20]=\"GEORGIAN\",rr[rr.GUJARATI=21]=\"GUJARATI\",rr[rr.GURMUKHI=22]=\"GURMUKHI\",rr[rr.HEBREW=22]=\"HEBREW\",rr[rr.HIRAGANA=23]=\"HIRAGANA\",rr[rr.HIRAGANA_IROHA=24]=\"HIRAGANA_IROHA\",rr[rr.JAPANESE_FORMAL=25]=\"JAPANESE_FORMAL\",rr[rr.JAPANESE_INFORMAL=26]=\"JAPANESE_INFORMAL\",rr[rr.KANNADA=27]=\"KANNADA\",rr[rr.KATAKANA=28]=\"KATAKANA\",rr[rr.KATAKANA_IROHA=29]=\"KATAKANA_IROHA\",rr[rr.KHMER=30]=\"KHMER\",rr[rr.KOREAN_HANGUL_FORMAL=31]=\"KOREAN_HANGUL_FORMAL\",rr[rr.KOREAN_HANJA_FORMAL=32]=\"KOREAN_HANJA_FORMAL\",rr[rr.KOREAN_HANJA_INFORMAL=33]=\"KOREAN_HANJA_INFORMAL\",rr[rr.LAO=34]=\"LAO\",rr[rr.LOWER_ARMENIAN=35]=\"LOWER_ARMENIAN\",rr[rr.MALAYALAM=36]=\"MALAYALAM\",rr[rr.MONGOLIAN=37]=\"MONGOLIAN\",rr[rr.MYANMAR=38]=\"MYANMAR\",rr[rr.ORIYA=39]=\"ORIYA\",rr[rr.PERSIAN=40]=\"PERSIAN\",rr[rr.SIMP_CHINESE_FORMAL=41]=\"SIMP_CHINESE_FORMAL\",rr[rr.SIMP_CHINESE_INFORMAL=42]=\"SIMP_CHINESE_INFORMAL\",rr[rr.TAMIL=43]=\"TAMIL\",rr[rr.TELUGU=44]=\"TELUGU\",rr[rr.THAI=45]=\"THAI\",rr[rr.TIBETAN=46]=\"TIBETAN\",rr[rr.TRAD_CHINESE_FORMAL=47]=\"TRAD_CHINESE_FORMAL\",rr[rr.TRAD_CHINESE_INFORMAL=48]=\"TRAD_CHINESE_INFORMAL\",rr[rr.UPPER_ARMENIAN=49]=\"UPPER_ARMENIAN\",rr[rr.DISCLOSURE_OPEN=50]=\"DISCLOSURE_OPEN\";function Br(A){return{name:\"margin-\"+A,initialValue:\"0\",prefix:!1,type:Ce.TOKEN_VALUE}}var sr,or,ir={name:\"list-style-type\",initialValue:\"none\",prefix:!(rr[rr.DISCLOSURE_CLOSED=51]=\"DISCLOSURE_CLOSED\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"disc\":return tr.DISC;case\"circle\":return tr.CIRCLE;case\"square\":return tr.SQUARE;case\"decimal\":return tr.DECIMAL;case\"cjk-decimal\":return tr.CJK_DECIMAL;case\"decimal-leading-zero\":return tr.DECIMAL_LEADING_ZERO;case\"lower-roman\":return tr.LOWER_ROMAN;case\"upper-roman\":return tr.UPPER_ROMAN;case\"lower-greek\":return tr.LOWER_GREEK;case\"lower-alpha\":return tr.LOWER_ALPHA;case\"upper-alpha\":return tr.UPPER_ALPHA;case\"arabic-indic\":return tr.ARABIC_INDIC;case\"armenian\":return tr.ARMENIAN;case\"bengali\":return tr.BENGALI;case\"cambodian\":return tr.CAMBODIAN;case\"cjk-earthly-branch\":return tr.CJK_EARTHLY_BRANCH;case\"cjk-heavenly-stem\":return tr.CJK_HEAVENLY_STEM;case\"cjk-ideographic\":return tr.CJK_IDEOGRAPHIC;case\"devanagari\":return tr.DEVANAGARI;case\"ethiopic-numeric\":return tr.ETHIOPIC_NUMERIC;case\"georgian\":return tr.GEORGIAN;case\"gujarati\":return tr.GUJARATI;case\"gurmukhi\":return tr.GURMUKHI;case\"hebrew\":return tr.HEBREW;case\"hiragana\":return tr.HIRAGANA;case\"hiragana-iroha\":return tr.HIRAGANA_IROHA;case\"japanese-formal\":return tr.JAPANESE_FORMAL;case\"japanese-informal\":return tr.JAPANESE_INFORMAL;case\"kannada\":return tr.KANNADA;case\"katakana\":return tr.KATAKANA;case\"katakana-iroha\":return tr.KATAKANA_IROHA;case\"khmer\":return tr.KHMER;case\"korean-hangul-formal\":return tr.KOREAN_HANGUL_FORMAL;case\"korean-hanja-formal\":return tr.KOREAN_HANJA_FORMAL;case\"korean-hanja-informal\":return tr.KOREAN_HANJA_INFORMAL;case\"lao\":return tr.LAO;case\"lower-armenian\":return tr.LOWER_ARMENIAN;case\"malayalam\":return tr.MALAYALAM;case\"mongolian\":return tr.MONGOLIAN;case\"myanmar\":return tr.MYANMAR;case\"oriya\":return tr.ORIYA;case\"persian\":return tr.PERSIAN;case\"simp-chinese-formal\":return tr.SIMP_CHINESE_FORMAL;case\"simp-chinese-informal\":return tr.SIMP_CHINESE_INFORMAL;case\"tamil\":return tr.TAMIL;case\"telugu\":return tr.TELUGU;case\"thai\":return tr.THAI;case\"tibetan\":return tr.TIBETAN;case\"trad-chinese-formal\":return tr.TRAD_CHINESE_FORMAL;case\"trad-chinese-informal\":return tr.TRAD_CHINESE_INFORMAL;case\"upper-armenian\":return tr.UPPER_ARMENIAN;case\"disclosure-open\":return tr.DISCLOSURE_OPEN;case\"disclosure-closed\":return tr.DISCLOSURE_CLOSED;case\"none\":default:return tr.NONE}}},ar=Br(\"top\"),cr=Br(\"right\"),Qr=Br(\"bottom\"),wr=Br(\"left\");(or=sr||(sr={}))[or.VISIBLE=0]=\"VISIBLE\",or[or.HIDDEN=1]=\"HIDDEN\",or[or.SCROLL=2]=\"SCROLL\";function ur(A){return{name:\"padding-\"+A,initialValue:\"0\",prefix:!1,type:Ce.TYPE_VALUE,format:\"length-percentage\"}}var Ur,lr,Cr,gr,Er={name:\"overflow\",initialValue:\"visible\",prefix:!(or[or.AUTO=3]=\"AUTO\"),type:Ce.LIST,parse:function(A){return A.filter(zA).map(function(A){switch(A.value){case\"hidden\":return sr.HIDDEN;case\"scroll\":return sr.SCROLL;case\"auto\":return sr.AUTO;case\"visible\":default:return sr.VISIBLE}})}},Fr={name:\"overflow-wrap\",initialValue:(lr=Ur||(Ur={})).NORMAL=\"normal\",prefix:!(lr.BREAK_WORD=\"break-word\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"break-word\":return Ur.BREAK_WORD;case\"normal\":default:return Ur.NORMAL}}},hr=ur(\"top\"),Hr=ur(\"right\"),dr=ur(\"bottom\"),fr=ur(\"left\");(gr=Cr||(Cr={}))[gr.LEFT=0]=\"LEFT\",gr[gr.CENTER=1]=\"CENTER\";var pr,Nr,Kr={name:\"text-align\",initialValue:\"left\",prefix:!(gr[gr.RIGHT=2]=\"RIGHT\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"right\":return Cr.RIGHT;case\"center\":case\"justify\":return Cr.CENTER;case\"left\":default:return Cr.LEFT}}};(Nr=pr||(pr={}))[Nr.STATIC=0]=\"STATIC\",Nr[Nr.RELATIVE=1]=\"RELATIVE\",Nr[Nr.ABSOLUTE=2]=\"ABSOLUTE\",Nr[Nr.FIXED=3]=\"FIXED\";var Ir,Tr,mr={name:\"position\",initialValue:\"static\",prefix:!(Nr[Nr.STICKY=4]=\"STICKY\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"relative\":return pr.RELATIVE;case\"absolute\":return pr.ABSOLUTE;case\"fixed\":return pr.FIXED;case\"sticky\":return pr.STICKY}return pr.STATIC}},Rr={name:\"text-shadow\",initialValue:\"none\",type:Ce.LIST,prefix:!1,parse:function(A){return 1===A.length&&JA(A[0],\"none\")?[]:WA(A).map(function(A){for(var e={color:He.TRANSPARENT,offsetX:se,offsetY:se,blur:se},t=0,r=0;r<A.length;r++){var n=A[r];YA(n)?(0===t?e.offsetX=n:1===t?e.offsetY=n:e.blur=n,t++):e.color=we(n)}return e})}};(Tr=Ir||(Ir={}))[Tr.NONE=0]=\"NONE\",Tr[Tr.LOWERCASE=1]=\"LOWERCASE\",Tr[Tr.UPPERCASE=2]=\"UPPERCASE\";var Lr,vr,Or={name:\"text-transform\",initialValue:\"none\",prefix:!(Tr[Tr.CAPITALIZE=3]=\"CAPITALIZE\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"uppercase\":return Ir.UPPERCASE;case\"lowercase\":return Ir.LOWERCASE;case\"capitalize\":return Ir.CAPITALIZE}return Ir.NONE}},Dr={name:\"transform\",initialValue:\"none\",prefix:!0,type:Ce.VALUE,parse:function(A){if(A.type===sA.IDENT_TOKEN&&\"none\"===A.value)return null;if(A.type!==sA.FUNCTION)return null;var e=br[A.name];if(void 0===e)throw new Error('Attempting to parse an unsupported transform function \"'+A.name+'\"');return e(A.values)}},br={matrix:function(A){var e=A.filter(function(A){return A.type===sA.NUMBER_TOKEN}).map(function(A){return A.number});return 6===e.length?e:null},matrix3d:function(A){var e=A.filter(function(A){return A.type===sA.NUMBER_TOKEN}).map(function(A){return A.number}),t=e[0],r=e[1],n=(e[2],e[3],e[4]),B=e[5],s=(e[6],e[7],e[8],e[9],e[10],e[11],e[12]),o=e[13];e[14],e[15];return 16===e.length?[t,r,n,B,s,o]:null}},Sr={type:sA.PERCENTAGE_TOKEN,number:50,flags:4},Mr=[Sr,Sr],yr={name:\"transform-origin\",initialValue:\"50% 50%\",prefix:!0,type:Ce.LIST,parse:function(A){var e=A.filter(qA);return 2!==e.length?Mr:[e[0],e[1]]}};(vr=Lr||(Lr={}))[vr.VISIBLE=0]=\"VISIBLE\",vr[vr.HIDDEN=1]=\"HIDDEN\";var _r,Pr,xr={name:\"visible\",initialValue:\"none\",prefix:!(vr[vr.COLLAPSE=2]=\"COLLAPSE\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"hidden\":return Lr.HIDDEN;case\"collapse\":return Lr.COLLAPSE;case\"visible\":default:return Lr.VISIBLE}}};(Pr=_r||(_r={})).NORMAL=\"normal\",Pr.BREAK_ALL=\"break-all\";var Vr,zr,Xr={name:\"word-break\",initialValue:\"normal\",prefix:!(Pr.KEEP_ALL=\"keep-all\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"break-all\":return _r.BREAK_ALL;case\"keep-all\":return _r.KEEP_ALL;case\"normal\":default:return _r.NORMAL}}},Jr={name:\"z-index\",initialValue:\"auto\",prefix:!1,type:Ce.VALUE,parse:function(A){if(A.type===sA.IDENT_TOKEN)return{auto:!0,order:0};if(VA(A))return{auto:!1,order:A.number};throw new Error(\"Invalid z-index number parsed\")}},Gr={name:\"opacity\",initialValue:\"1\",type:Ce.VALUE,prefix:!1,parse:function(A){return VA(A)?A.number:1}},kr={name:\"text-decoration-color\",initialValue:\"transparent\",prefix:!1,type:Ce.TYPE_VALUE,format:\"color\"},Wr={name:\"text-decoration-line\",initialValue:\"none\",prefix:!1,type:Ce.LIST,parse:function(A){return A.filter(zA).map(function(A){switch(A.value){case\"underline\":return 1;case\"overline\":return 2;case\"line-through\":return 3;case\"none\":return 4}return 0}).filter(function(A){return 0!==A})}},Yr={name:\"font-family\",initialValue:\"\",prefix:!1,type:Ce.LIST,parse:function(A){return A.filter(qr).map(function(A){return A.value})}},qr=function(A){return A.type===sA.STRING_TOKEN||A.type===sA.IDENT_TOKEN},Zr={name:\"font-size\",initialValue:\"0\",prefix:!1,type:Ce.TYPE_VALUE,format:\"length\"},jr={name:\"font-weight\",initialValue:\"normal\",type:Ce.VALUE,prefix:!1,parse:function(A){if(VA(A))return A.number;if(zA(A))switch(A.value){case\"bold\":return 700;case\"normal\":default:return 400}return 400}},$r={name:\"font-variant\",initialValue:\"none\",type:Ce.LIST,prefix:!1,parse:function(A){return A.filter(zA).map(function(A){return A.value})}};(zr=Vr||(Vr={})).NORMAL=\"normal\",zr.ITALIC=\"italic\";function An(A,e){return 0!=(A&e)}function en(A,e,t){if(!A)return\"\";var r=A[Math.min(e,A.length-1)];return r?t?r.open:r.close:\"\"}var tn={name:\"font-style\",initialValue:\"normal\",prefix:!(zr.OBLIQUE=\"oblique\"),type:Ce.IDENT_VALUE,parse:function(A){switch(A){case\"oblique\":return Vr.OBLIQUE;case\"italic\":return Vr.ITALIC;case\"normal\":default:return Vr.NORMAL}}},rn={name:\"content\",initialValue:\"none\",type:Ce.LIST,prefix:!1,parse:function(A){if(0===A.length)return[];var e=A[0];return e.type===sA.IDENT_TOKEN&&\"none\"===e.value?[]:A}},nn={name:\"counter-increment\",initialValue:\"none\",prefix:!0,type:Ce.LIST,parse:function(A){if(0===A.length)return null;var e=A[0];if(e.type===sA.IDENT_TOKEN&&\"none\"===e.value)return null;for(var t=[],r=A.filter(GA),n=0;n<r.length;n++){var B=r[n],s=r[n+1];if(B.type===sA.IDENT_TOKEN){var o=s&&VA(s)?s.number:1;t.push({counter:B.value,increment:o})}}return t}},Bn={name:\"counter-reset\",initialValue:\"none\",prefix:!0,type:Ce.LIST,parse:function(A){if(0===A.length)return[];for(var e=[],t=A.filter(GA),r=0;r<t.length;r++){var n=t[r],B=t[r+1];if(zA(n)&&\"none\"!==n.value){var s=B&&VA(B)?B.number:0;e.push({counter:n.value,reset:s})}}return e}},sn={name:\"quotes\",initialValue:\"none\",prefix:!0,type:Ce.LIST,parse:function(A){if(0===A.length)return null;var e=A[0];if(e.type===sA.IDENT_TOKEN&&\"none\"===e.value)return null;var t=[],r=A.filter(XA);if(r.length%2!=0)return null;for(var n=0;n<r.length;n+=2){var B=r[n].value,s=r[n+1].value;t.push({open:B,close:s})}return t}},on={name:\"box-shadow\",initialValue:\"none\",type:Ce.LIST,prefix:!1,parse:function(A){return 1===A.length&&JA(A[0],\"none\")?[]:WA(A).map(function(A){for(var e={color:255,offsetX:se,offsetY:se,blur:se,spread:se,inset:!1},t=0,r=0;r<A.length;r++){var n=A[r];JA(n,\"inset\")?e.inset=!0:YA(n)?(0===t?e.offsetX=n:1===t?e.offsetY=n:2===t?e.blur=n:e.spread=n,t++):e.color=we(n)}return e})}},an=(cn.prototype.isVisible=function(){return 0<this.display&&0<this.opacity&&this.visibility===Lr.VISIBLE},cn.prototype.isTransparent=function(){return ee(this.backgroundColor)},cn.prototype.isTransformed=function(){return null!==this.transform},cn.prototype.isPositioned=function(){return this.position!==pr.STATIC},cn.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},cn.prototype.isFloating=function(){return this.float!==Dt.NONE},cn.prototype.isInlineLevel=function(){return An(this.display,4)||An(this.display,33554432)||An(this.display,268435456)||An(this.display,536870912)||An(this.display,67108864)||An(this.display,134217728)},cn);function cn(A){this.backgroundClip=Un(me,A.backgroundClip),this.backgroundColor=Un(Re,A.backgroundColor),this.backgroundImage=Un(Qt,A.backgroundImage),this.backgroundOrigin=Un(wt,A.backgroundOrigin),this.backgroundPosition=Un(ut,A.backgroundPosition),this.backgroundRepeat=Un(Ct,A.backgroundRepeat),this.backgroundSize=Un(dt,A.backgroundSize),this.borderTopColor=Un(pt,A.borderTopColor),this.borderRightColor=Un(Nt,A.borderRightColor),this.borderBottomColor=Un(Kt,A.borderBottomColor),this.borderLeftColor=Un(It,A.borderLeftColor),this.borderTopLeftRadius=Un(Tt,A.borderTopLeftRadius),this.borderTopRightRadius=Un(mt,A.borderTopRightRadius),this.borderBottomRightRadius=Un(Rt,A.borderBottomRightRadius),this.borderBottomLeftRadius=Un(Lt,A.borderBottomLeftRadius),this.borderTopStyle=Un(St,A.borderTopStyle),this.borderRightStyle=Un(Mt,A.borderRightStyle),this.borderBottomStyle=Un(yt,A.borderBottomStyle),this.borderLeftStyle=Un(_t,A.borderLeftStyle),this.borderTopWidth=Un(Pt,A.borderTopWidth),this.borderRightWidth=Un(xt,A.borderRightWidth),this.borderBottomWidth=Un(Vt,A.borderBottomWidth),this.borderLeftWidth=Un(zt,A.borderLeftWidth),this.boxShadow=Un(on,A.boxShadow),this.color=Un(Xt,A.color),this.display=Un(Jt,A.display),this.float=Un(Zt,A.cssFloat),this.fontFamily=Un(Yr,A.fontFamily),this.fontSize=Un(Zr,A.fontSize),this.fontStyle=Un(tn,A.fontStyle),this.fontVariant=Un($r,A.fontVariant),this.fontWeight=Un(jr,A.fontWeight),this.letterSpacing=Un(jt,A.letterSpacing),this.lineBreak=Un($t,A.lineBreak),this.lineHeight=Un(Ar,A.lineHeight),this.listStyleImage=Un(er,A.listStyleImage),this.listStylePosition=Un(nr,A.listStylePosition),this.listStyleType=Un(ir,A.listStyleType),this.marginTop=Un(ar,A.marginTop),this.marginRight=Un(cr,A.marginRight),this.marginBottom=Un(Qr,A.marginBottom),this.marginLeft=Un(wr,A.marginLeft),this.opacity=Un(Gr,A.opacity);var e=Un(Er,A.overflow);this.overflowX=e[0],this.overflowY=e[1<e.length?1:0],this.overflowWrap=Un(Fr,A.overflowWrap),this.paddingTop=Un(hr,A.paddingTop),this.paddingRight=Un(Hr,A.paddingRight),this.paddingBottom=Un(dr,A.paddingBottom),this.paddingLeft=Un(fr,A.paddingLeft),this.position=Un(mr,A.position),this.textAlign=Un(Kr,A.textAlign),this.textDecorationColor=Un(kr,A.textDecorationColor||A.color),this.textDecorationLine=Un(Wr,A.textDecorationLine),this.textShadow=Un(Rr,A.textShadow),this.textTransform=Un(Or,A.textTransform),this.transform=Un(Dr,A.transform),this.transformOrigin=Un(yr,A.transformOrigin),this.visibility=Un(xr,A.visibility),this.wordBreak=Un(Xr,A.wordBreak),this.zIndex=Un(Jr,A.zIndex)}var Qn,wn=function(A){this.content=Un(rn,A.content),this.quotes=Un(sn,A.quotes)},un=function(A){this.counterIncrement=Un(nn,A.counterIncrement),this.counterReset=Un(Bn,A.counterReset)},Un=function(A,e){var t=new MA,r=null!=e?e.toString():A.initialValue;t.write(r);var n=new _A(t.read());switch(A.type){case Ce.IDENT_VALUE:var B=n.parseComponentValue();return A.parse(zA(B)?B.value:A.initialValue);case Ce.VALUE:return A.parse(n.parseComponentValue());case Ce.LIST:return A.parse(n.parseComponentValues());case Ce.TOKEN_VALUE:return n.parseComponentValue();case Ce.TYPE_VALUE:switch(A.format){case\"angle\":return ce(n.parseComponentValue());case\"color\":return we(n.parseComponentValue());case\"image\":return ot(n.parseComponentValue());case\"length\":var s=n.parseComponentValue();return YA(s)?s:se;case\"length-percentage\":var o=n.parseComponentValue();return qA(o)?o:se}}throw new Error(\"Attempting to parse unsupported css format type \"+A.format)},ln=function(A){this.styles=new an(window.getComputedStyle(A,null)),this.textNodes=[],this.elements=[],null!==this.styles.transform&&uB(A)&&(A.style.transform=\"none\"),this.bounds=T(A),this.flags=0},Cn=function(A,e){this.text=A,this.bounds=e},gn=function(A){var e=A.ownerDocument;if(e){var t=e.createElement(\"html2canvaswrapper\");t.appendChild(A.cloneNode(!0));var r=A.parentNode;if(r){r.replaceChild(t,A);var n=T(t);return t.firstChild&&r.replaceChild(t.firstChild,t),n}}return new I(0,0,0,0)},En=function(A,e,t){var r=A.ownerDocument;if(!r)throw new Error(\"Node has no owner document\");var n=r.createRange();return n.setStart(A,e),n.setEnd(A,e+t),I.fromClientRect(n.getBoundingClientRect())},Fn=function(A,e){return 0!==e.letterSpacing?c(A).map(function(A){return l(A)}):hn(A,e)},hn=function(A,e){for(var t,r=function(A,e){var t=c(A),r=u(t,e),n=r[0],B=r[1],s=r[2],o=t.length,i=0,a=0;return{next:function(){if(o<=a)return{done:!0,value:null};for(var A=Y;a<o&&(A=w(t,B,n,++a,s))===Y;);if(A===Y&&a!==o)return{done:!0,value:null};var e=new nA(t,A,i,a);return i=a,{value:e,done:!1}}}}(A,{lineBreak:e.lineBreak,wordBreak:e.overflowWrap===Ur.BREAK_WORD?\"break-word\":e.wordBreak}),n=[];!(t=r.next()).done;)t.value&&n.push(t.value.slice());return n},Hn=function(A,e){this.text=dn(A.data,e.textTransform),this.textBounds=function(A,t,r){var e=Fn(A,t),n=[],B=0;return e.forEach(function(A){if(t.textDecorationLine.length||0<A.trim().length)if(Oe.SUPPORT_RANGE_BOUNDS)n.push(new Cn(A,En(r,B,A.length)));else{var e=r.splitText(A.length);n.push(new Cn(A,gn(r))),r=e}else Oe.SUPPORT_RANGE_BOUNDS||(r=r.splitText(A.length));B+=A.length}),n}(this.text,e,A)},dn=function(A,e){switch(e){case Ir.LOWERCASE:return A.toLowerCase();case Ir.CAPITALIZE:return A.replace(fn,pn);case Ir.UPPERCASE:return A.toUpperCase();default:return A}},fn=/(^|\\s|:|-|\\(|\\))([a-z])/g,pn=function(A,e,t){return 0<A.length?e+t.toUpperCase():A},Nn=(A(Kn,Qn=ln),Kn);function Kn(A){var e=Qn.call(this,A)||this;return e.src=A.currentSrc||A.src,e.intrinsicWidth=A.naturalWidth,e.intrinsicHeight=A.naturalHeight,Se.getInstance().addImage(e.src),e}var In,Tn=(A(mn,In=ln),mn);function mn(A){var e=In.call(this,A)||this;return e.canvas=A,e.intrinsicWidth=A.width,e.intrinsicHeight=A.height,e}var Rn,Ln=(A(vn,Rn=ln),vn);function vn(A){var e=Rn.call(this,A)||this,t=new XMLSerializer;return e.svg=\"data:image/svg+xml,\"+encodeURIComponent(t.serializeToString(A)),e.intrinsicWidth=A.width.baseVal.value,e.intrinsicHeight=A.height.baseVal.value,Se.getInstance().addImage(e.svg),e}var On,Dn=(A(bn,On=ln),bn);function bn(A){var e=On.call(this,A)||this;return e.value=A.value,e}var Sn,Mn=(A(yn,Sn=ln),yn);function yn(A){var e=Sn.call(this,A)||this;return e.start=A.start,e.reversed=\"boolean\"==typeof A.reversed&&!0===A.reversed,e}var _n,Pn=[{type:sA.DIMENSION_TOKEN,flags:0,unit:\"px\",number:3}],xn=[{type:sA.PERCENTAGE_TOKEN,flags:0,number:50}],Vn=\"checkbox\",zn=\"radio\",Xn=\"password\",Jn=707406591,Gn=(A(kn,_n=ln),kn);function kn(A){var e=_n.call(this,A)||this;switch(e.type=A.type.toLowerCase(),e.checked=A.checked,e.value=function(A){var e=A.type===Xn?new Array(A.value.length+1).join(\"\u2022\"):A.value;return 0===e.length?A.placeholder||\"\":e}(A),e.type!==Vn&&e.type!==zn||(e.styles.backgroundColor=3739148031,e.styles.borderTopColor=e.styles.borderRightColor=e.styles.borderBottomColor=e.styles.borderLeftColor=2779096575,e.styles.borderTopWidth=e.styles.borderRightWidth=e.styles.borderBottomWidth=e.styles.borderLeftWidth=1,e.styles.borderTopStyle=e.styles.borderRightStyle=e.styles.borderBottomStyle=e.styles.borderLeftStyle=ht.SOLID,e.styles.backgroundClip=[Ee.BORDER_BOX],e.styles.backgroundOrigin=[0],e.bounds=function(A){return A.width>A.height?new I(A.left+(A.width-A.height)/2,A.top,A.height,A.height):A.width<A.height?new I(A.left,A.top+(A.height-A.width)/2,A.width,A.width):A}(e.bounds)),e.type){case Vn:e.styles.borderTopRightRadius=e.styles.borderTopLeftRadius=e.styles.borderBottomRightRadius=e.styles.borderBottomLeftRadius=Pn;break;case zn:e.styles.borderTopRightRadius=e.styles.borderTopLeftRadius=e.styles.borderBottomRightRadius=e.styles.borderBottomLeftRadius=xn}return e}var Wn,Yn=(A(qn,Wn=ln),qn);function qn(A){var e=Wn.call(this,A)||this,t=A.options[A.selectedIndex||0];return e.value=t&&t.text||\"\",e}var Zn,jn=(A($n,Zn=ln),$n);function $n(A){var e=Zn.call(this,A)||this;return e.value=A.value,e}function AB(A){return we(_A.create(A).parseComponentValue())}var eB,tB=(A(rB,eB=ln),rB);function rB(A){var e=eB.call(this,A)||this;e.src=A.src,e.width=parseInt(A.width,10)||0,e.height=parseInt(A.height,10)||0,e.backgroundColor=e.styles.backgroundColor;try{if(A.contentWindow&&A.contentWindow.document&&A.contentWindow.document.documentElement){e.tree=iB(A.contentWindow.document.documentElement);var t=A.contentWindow.document.documentElement?AB(getComputedStyle(A.contentWindow.document.documentElement).backgroundColor):He.TRANSPARENT,r=A.contentWindow.document.body?AB(getComputedStyle(A.contentWindow.document.body).backgroundColor):He.TRANSPARENT;e.backgroundColor=ee(t)?ee(r)?e.styles.backgroundColor:r:t}}catch(A){}return e}function nB(A){return\"STYLE\"===A.tagName}var BB=[\"OL\",\"UL\",\"MENU\"],sB=function(A,e,t){for(var r=A.firstChild,n=void 0;r;r=n)if(n=r.nextSibling,QB(r)&&0<r.data.trim().length)e.textNodes.push(new Hn(r,e.styles));else if(wB(r)){var B=oB(r);B.styles.isVisible()&&(aB(r,B,t)?B.flags|=4:cB(B.styles)&&(B.flags|=2),-1!==BB.indexOf(r.tagName)&&(B.flags|=8),e.elements.push(B),dB(r)||gB(r)||fB(r)||sB(r,B,t))}},oB=function(A){return hB(A)?new Nn(A):FB(A)?new Tn(A):gB(A)?new Ln(A):UB(A)?new Dn(A):lB(A)?new Mn(A):CB(A)?new Gn(A):fB(A)?new Yn(A):dB(A)?new jn(A):HB(A)?new tB(A):new ln(A)},iB=function(A){var e=oB(A);return e.flags|=4,sB(A,e,e),e},aB=function(A,e,t){return e.styles.isPositionedWithZIndex()||e.styles.opacity<1||e.styles.isTransformed()||EB(A)&&t.styles.isTransparent()},cB=function(A){return A.isPositioned()||A.isFloating()},QB=function(A){return A.nodeType===Node.TEXT_NODE},wB=function(A){return A.nodeType===Node.ELEMENT_NODE},uB=function(A){return void 0!==A.style},UB=function(A){return\"LI\"===A.tagName},lB=function(A){return\"OL\"===A.tagName},CB=function(A){return\"INPUT\"===A.tagName},gB=function(A){return\"svg\"===A.tagName},EB=function(A){return\"BODY\"===A.tagName},FB=function(A){return\"CANVAS\"===A.tagName},hB=function(A){return\"IMG\"===A.tagName},HB=function(A){return\"IFRAME\"===A.tagName},dB=function(A){return\"TEXTAREA\"===A.tagName},fB=function(A){return\"SELECT\"===A.tagName},pB=(NB.prototype.getCounterValue=function(A){var e=this.counters[A];return e&&e.length?e[e.length-1]:1},NB.prototype.getCounterValues=function(A){var e=this.counters[A];return e||[]},NB.prototype.pop=function(A){var e=this;A.forEach(function(A){return e.counters[A].pop()})},NB.prototype.parse=function(A){var t=this,e=A.counterIncrement,r=A.counterReset,n=!0;null!==e&&e.forEach(function(A){var e=t.counters[A.counter];e&&0!==A.increment&&(n=!1,e[Math.max(0,e.length-1)]+=A.increment)});var B=[];return n&&r.forEach(function(A){var e=t.counters[A.counter];B.push(A.counter),e||(e=t.counters[A.counter]=[]),e.push(A.reset)}),B},NB);function NB(){this.counters={}}function KB(r,A,e,n,t,B){return r<A||e<r?yB(r,t,0<B.length):n.integers.reduce(function(A,e,t){for(;e<=r;)r-=e,A+=n.values[t];return A},\"\")+B}function IB(A,e,t,r){for(var n=\"\";t||A--,n=r(A)+n,e<=(A/=e)*e;);return n}function TB(A,e,t,r,n){var B=t-e+1;return(A<0?\"-\":\"\")+(IB(Math.abs(A),B,r,function(A){return l(Math.floor(A%B)+e)})+n)}function mB(A,e,t){void 0===t&&(t=\". \");var r=e.length;return IB(Math.abs(A),r,!1,function(A){return e[Math.floor(A%r)]})+t}function RB(A,e,t,r,n,B){if(A<-9999||9999<A)return yB(A,tr.CJK_DECIMAL,0<n.length);var s=Math.abs(A),o=n;if(0===s)return e[0]+o;for(var i=0;0<s&&i<=4;i++){var a=s%10;0==a&&An(B,1)&&\"\"!==o?o=e[a]+o:1<a||1==a&&0===i||1==a&&1===i&&An(B,2)||1==a&&1===i&&An(B,4)&&100<A||1==a&&1<i&&An(B,8)?o=e[a]+(0<i?t[i-1]:\"\")+o:1==a&&0<i&&(o=t[i-1]+o),s=Math.floor(s/10)}return(A<0?r:\"\")+o}var LB,vB,OB={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[\"M\",\"CM\",\"D\",\"CD\",\"C\",\"XC\",\"L\",\"XL\",\"X\",\"IX\",\"V\",\"IV\",\"I\"]},DB={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"\u0554\",\"\u0553\",\"\u0552\",\"\u0551\",\"\u0550\",\"\u054f\",\"\u054e\",\"\u054d\",\"\u054c\",\"\u054b\",\"\u054a\",\"\u0549\",\"\u0548\",\"\u0547\",\"\u0546\",\"\u0545\",\"\u0544\",\"\u0543\",\"\u0542\",\"\u0541\",\"\u0540\",\"\u053f\",\"\u053e\",\"\u053d\",\"\u053c\",\"\u053b\",\"\u053a\",\"\u0539\",\"\u0538\",\"\u0537\",\"\u0536\",\"\u0535\",\"\u0534\",\"\u0533\",\"\u0532\",\"\u0531\"]},bB={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:[\"\u05d9\u05f3\",\"\u05d8\u05f3\",\"\u05d7\u05f3\",\"\u05d6\u05f3\",\"\u05d5\u05f3\",\"\u05d4\u05f3\",\"\u05d3\u05f3\",\"\u05d2\u05f3\",\"\u05d1\u05f3\",\"\u05d0\u05f3\",\"\u05ea\",\"\u05e9\",\"\u05e8\",\"\u05e7\",\"\u05e6\",\"\u05e4\",\"\u05e2\",\"\u05e1\",\"\u05e0\",\"\u05de\",\"\u05dc\",\"\u05db\",\"\u05d9\u05d8\",\"\u05d9\u05d7\",\"\u05d9\u05d6\",\"\u05d8\u05d6\",\"\u05d8\u05d5\",\"\u05d9\",\"\u05d8\",\"\u05d7\",\"\u05d6\",\"\u05d5\",\"\u05d4\",\"\u05d3\",\"\u05d2\",\"\u05d1\",\"\u05d0\"]},SB={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"\u10f5\",\"\u10f0\",\"\u10ef\",\"\u10f4\",\"\u10ee\",\"\u10ed\",\"\u10ec\",\"\u10eb\",\"\u10ea\",\"\u10e9\",\"\u10e8\",\"\u10e7\",\"\u10e6\",\"\u10e5\",\"\u10e4\",\"\u10f3\",\"\u10e2\",\"\u10e1\",\"\u10e0\",\"\u10df\",\"\u10de\",\"\u10dd\",\"\u10f2\",\"\u10dc\",\"\u10db\",\"\u10da\",\"\u10d9\",\"\u10d8\",\"\u10d7\",\"\u10f1\",\"\u10d6\",\"\u10d5\",\"\u10d4\",\"\u10d3\",\"\u10d2\",\"\u10d1\",\"\u10d0\"]},MB=\"\ub9c8\uc774\ub108\uc2a4\",yB=function(A,e,t){var r=t?\". \":\"\",n=t?\"\u3001\":\"\",B=t?\", \":\"\",s=t?\" \":\"\";switch(e){case tr.DISC:return\"\u2022\"+s;case tr.CIRCLE:return\"\u25e6\"+s;case tr.SQUARE:return\"\u25fe\"+s;case tr.DECIMAL_LEADING_ZERO:var o=TB(A,48,57,!0,r);return o.length<4?\"0\"+o:o;case tr.CJK_DECIMAL:return mB(A,\"\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\",n);case tr.LOWER_ROMAN:return KB(A,1,3999,OB,tr.DECIMAL,r).toLowerCase();case tr.UPPER_ROMAN:return KB(A,1,3999,OB,tr.DECIMAL,r);case tr.LOWER_GREEK:return TB(A,945,969,!1,r);case tr.LOWER_ALPHA:return TB(A,97,122,!1,r);case tr.UPPER_ALPHA:return TB(A,65,90,!1,r);case tr.ARABIC_INDIC:return TB(A,1632,1641,!0,r);case tr.ARMENIAN:case tr.UPPER_ARMENIAN:return KB(A,1,9999,DB,tr.DECIMAL,r);case tr.LOWER_ARMENIAN:return KB(A,1,9999,DB,tr.DECIMAL,r).toLowerCase();case tr.BENGALI:return TB(A,2534,2543,!0,r);case tr.CAMBODIAN:case tr.KHMER:return TB(A,6112,6121,!0,r);case tr.CJK_EARTHLY_BRANCH:return mB(A,\"\u5b50\u4e11\u5bc5\u536f\u8fb0\u5df3\u5348\u672a\u7533\u9149\u620c\u4ea5\",n);case tr.CJK_HEAVENLY_STEM:return mB(A,\"\u7532\u4e59\u4e19\u4e01\u620a\u5df1\u5e9a\u8f9b\u58ec\u7678\",n);case tr.CJK_IDEOGRAPHIC:case tr.TRAD_CHINESE_INFORMAL:return RB(A,\"\u96f6\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\",\"\u5341\u767e\u5343\u842c\",\"\u8ca0\",n,14);case tr.TRAD_CHINESE_FORMAL:return RB(A,\"\u96f6\u58f9\u8cb3\u53c3\u8086\u4f0d\u9678\u67d2\u634c\u7396\",\"\u62fe\u4f70\u4edf\u842c\",\"\u8ca0\",n,15);case tr.SIMP_CHINESE_INFORMAL:return RB(A,\"\u96f6\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\",\"\u5341\u767e\u5343\u842c\",\"\u8d1f\",n,14);case tr.SIMP_CHINESE_FORMAL:return RB(A,\"\u96f6\u58f9\u8d30\u53c1\u8086\u4f0d\u9646\u67d2\u634c\u7396\",\"\u62fe\u4f70\u4edf\u842c\",\"\u8d1f\",n,15);case tr.JAPANESE_INFORMAL:return RB(A,\"\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\",\"\u5341\u767e\u5343\u4e07\",\"\u30de\u30a4\u30ca\u30b9\",n,0);case tr.JAPANESE_FORMAL:return RB(A,\"\u96f6\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\",\"\u62fe\u767e\u5343\u4e07\",\"\u30de\u30a4\u30ca\u30b9\",n,7);case tr.KOREAN_HANGUL_FORMAL:return RB(A,\"\uc601\uc77c\uc774\uc0bc\uc0ac\uc624\uc721\uce60\ud314\uad6c\",\"\uc2ed\ubc31\ucc9c\ub9cc\",MB,B,7);case tr.KOREAN_HANJA_INFORMAL:return RB(A,\"\u96f6\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\",\"\u5341\u767e\u5343\u842c\",MB,B,0);case tr.KOREAN_HANJA_FORMAL:return RB(A,\"\u96f6\u58f9\u8cb3\u53c3\u56db\u4e94\u516d\u4e03\u516b\u4e5d\",\"\u62fe\u767e\u5343\",MB,B,7);case tr.DEVANAGARI:return TB(A,2406,2415,!0,r);case tr.GEORGIAN:return KB(A,1,19999,SB,tr.DECIMAL,r);case tr.GUJARATI:return TB(A,2790,2799,!0,r);case tr.GURMUKHI:return TB(A,2662,2671,!0,r);case tr.HEBREW:return KB(A,1,10999,bB,tr.DECIMAL,r);case tr.HIRAGANA:return mB(A,\"\u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051\u3053\u3055\u3057\u3059\u305b\u305d\u305f\u3061\u3064\u3066\u3068\u306a\u306b\u306c\u306d\u306e\u306f\u3072\u3075\u3078\u307b\u307e\u307f\u3080\u3081\u3082\u3084\u3086\u3088\u3089\u308a\u308b\u308c\u308d\u308f\u3090\u3091\u3092\u3093\");case tr.HIRAGANA_IROHA:return mB(A,\"\u3044\u308d\u306f\u306b\u307b\u3078\u3068\u3061\u308a\u306c\u308b\u3092\u308f\u304b\u3088\u305f\u308c\u305d\u3064\u306d\u306a\u3089\u3080\u3046\u3090\u306e\u304a\u304f\u3084\u307e\u3051\u3075\u3053\u3048\u3066\u3042\u3055\u304d\u3086\u3081\u307f\u3057\u3091\u3072\u3082\u305b\u3059\");case tr.KANNADA:return TB(A,3302,3311,!0,r);case tr.KATAKANA:return mB(A,\"\u30a2\u30a4\u30a6\u30a8\u30aa\u30ab\u30ad\u30af\u30b1\u30b3\u30b5\u30b7\u30b9\u30bb\u30bd\u30bf\u30c1\u30c4\u30c6\u30c8\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d2\u30d5\u30d8\u30db\u30de\u30df\u30e0\u30e1\u30e2\u30e4\u30e6\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ef\u30f0\u30f1\u30f2\u30f3\",n);case tr.KATAKANA_IROHA:return mB(A,\"\u30a4\u30ed\u30cf\u30cb\u30db\u30d8\u30c8\u30c1\u30ea\u30cc\u30eb\u30f2\u30ef\u30ab\u30e8\u30bf\u30ec\u30bd\u30c4\u30cd\u30ca\u30e9\u30e0\u30a6\u30f0\u30ce\u30aa\u30af\u30e4\u30de\u30b1\u30d5\u30b3\u30a8\u30c6\u30a2\u30b5\u30ad\u30e6\u30e1\u30df\u30b7\u30f1\u30d2\u30e2\u30bb\u30b9\",n);case tr.LAO:return TB(A,3792,3801,!0,r);case tr.MONGOLIAN:return TB(A,6160,6169,!0,r);case tr.MYANMAR:return TB(A,4160,4169,!0,r);case tr.ORIYA:return TB(A,2918,2927,!0,r);case tr.PERSIAN:return TB(A,1776,1785,!0,r);case tr.TAMIL:return TB(A,3046,3055,!0,r);case tr.TELUGU:return TB(A,3174,3183,!0,r);case tr.THAI:return TB(A,3664,3673,!0,r);case tr.TIBETAN:return TB(A,3872,3881,!0,r);case tr.DECIMAL:default:return TB(A,48,57,!0,r)}},_B=\"data-html2canvas-ignore\",PB=(xB.prototype.toIFrame=function(A,t){var e=this,r=XB(A,t);if(!r.contentWindow)return Promise.reject(\"Unable to find iframe window\");var n=A.defaultView.pageXOffset,B=A.defaultView.pageYOffset,s=r.contentWindow,o=s.document,i=JB(r).then(function(){return a(e,void 0,void 0,function(){var e;return S(this,function(A){switch(A.label){case 0:return this.scrolledElements.forEach(YB),s&&(s.scrollTo(t.left,t.top),!/(iPad|iPhone|iPod)/g.test(navigator.userAgent)||s.scrollY===t.top&&s.scrollX===t.left||(o.documentElement.style.top=-t.top+\"px\",o.documentElement.style.left=-t.left+\"px\",o.documentElement.style.position=\"absolute\")),e=this.options.onclone,void 0===this.clonedReferenceElement?[2,Promise.reject(\"Error finding the \"+this.referenceElement.nodeName+\" in the cloned document\")]:o.fonts&&o.fonts.ready?[4,o.fonts.ready]:[3,2];case 1:A.sent(),A.label=2;case 2:return\"function\"==typeof e?[2,Promise.resolve().then(function(){return e(o)}).then(function(){return r})]:[2,r]}})})});return o.open(),o.write(kB(document.doctype)+\"<html></html>\"),WB(this.referenceElement.ownerDocument,n,B),o.replaceChild(o.adoptNode(this.documentElement),o.documentElement),o.close(),i},xB.prototype.createElementClone=function(A){return FB(A)?this.createCanvasClone(A):nB(A)?this.createStyleClone(A):A.cloneNode(!1)},xB.prototype.createStyleClone=function(A){try{var e=A.sheet;if(e&&e.cssRules){var t=[].slice.call(e.cssRules,0).reduce(function(A,e){return e&&\"string\"==typeof e.cssText?A+e.cssText:A},\"\"),r=A.cloneNode(!1);return r.textContent=t,r}}catch(A){if(De.getInstance(this.options.id).error(\"Unable to access cssRules property\",A),\"SecurityError\"!==A.name)throw A}return A.cloneNode(!1)},xB.prototype.createCanvasClone=function(A){if(this.options.inlineImages&&A.ownerDocument){var e=A.ownerDocument.createElement(\"img\");try{return e.src=A.toDataURL(),e}catch(A){De.getInstance(this.options.id).info(\"Unable to clone canvas contents, canvas is tainted\")}}var t=A.cloneNode(!1);try{t.width=A.width,t.height=A.height;var r=A.getContext(\"2d\"),n=t.getContext(\"2d\");return n&&(r?n.putImageData(r.getImageData(0,0,A.width,A.height),0,0):n.drawImage(A,0,0)),t}catch(A){}return t},xB.prototype.cloneNode=function(A){if(QB(A))return document.createTextNode(A.data);if(!A.ownerDocument)return A.cloneNode(!1);var e=A.ownerDocument.defaultView;if(uB(A)&&e){var t=this.createElementClone(A),r=e.getComputedStyle(A),n=e.getComputedStyle(A,\":before\"),B=e.getComputedStyle(A,\":after\");this.referenceElement===A&&(this.clonedReferenceElement=t),EB(t)&&$B(t);for(var s=this.counters.parse(new un(r)),o=this.resolvePseudoContent(A,t,n,LB.BEFORE),i=A.firstChild;i;i=i.nextSibling)wB(i)&&(\"SCRIPT\"===i.tagName||i.hasAttribute(_B)||\"function\"==typeof this.options.ignoreElements&&this.options.ignoreElements(i))||this.options.copyStyles&&wB(i)&&nB(i)||t.appendChild(this.cloneNode(i));o&&t.insertBefore(o,t.firstChild);var a=this.resolvePseudoContent(A,t,B,LB.AFTER);return a&&t.appendChild(a),this.counters.pop(s),r&&this.options.copyStyles&&!HB(A)&&GB(r,t),0===A.scrollTop&&0===A.scrollLeft||this.scrolledElements.push([t,A.scrollLeft,A.scrollTop]),(dB(A)||fB(A))&&(dB(t)||fB(t))&&(t.value=A.value),t}return A.cloneNode(!1)},xB.prototype.resolvePseudoContent=function(U,A,e,t){var l=this;if(e){var r=e.content,C=A.ownerDocument;if(C&&r&&\"none\"!==r&&\"-moz-alt-content\"!==r&&\"none\"!==e.display){this.counters.parse(new un(e));var g=new wn(e),E=C.createElement(\"html2canvaspseudoelement\");GB(e,E),g.content.forEach(function(A){if(A.type===sA.STRING_TOKEN)E.appendChild(C.createTextNode(A.value));else if(A.type===sA.URL_TOKEN){var e=C.createElement(\"img\");e.src=A.value,e.style.opacity=\"1\",E.appendChild(e)}else if(A.type===sA.FUNCTION){if(\"attr\"===A.name){var t=A.values.filter(zA);t.length&&E.appendChild(C.createTextNode(U.getAttribute(t[0].value)||\"\"))}else if(\"counter\"===A.name){var r=A.values.filter(kA),n=r[0],B=r[1];if(n&&zA(n)){var s=l.counters.getCounterValue(n.value),o=B&&zA(B)?ir.parse(B.value):tr.DECIMAL;E.appendChild(C.createTextNode(yB(s,o,!1)))}}else if(\"counters\"===A.name){var i=A.values.filter(kA),a=(n=i[0],i[1]);if(B=i[2],n&&zA(n)){var c=l.counters.getCounterValues(n.value),Q=B&&zA(B)?ir.parse(B.value):tr.DECIMAL,w=a&&a.type===sA.STRING_TOKEN?a.value:\"\",u=c.map(function(A){return yB(A,Q,!1)}).join(w);E.appendChild(C.createTextNode(u))}}}else if(A.type===sA.IDENT_TOKEN)switch(A.value){case\"open-quote\":E.appendChild(C.createTextNode(en(g.quotes,l.quoteDepth++,!0)));break;case\"close-quote\":E.appendChild(C.createTextNode(en(g.quotes,--l.quoteDepth,!1)));break;default:E.appendChild(C.createTextNode(A.value))}}),E.className=qB+\" \"+ZB;var n=t===LB.BEFORE?\" \"+qB:\" \"+ZB;return function(A){return\"object\"==typeof A.className}(A)?A.className.baseValue+=n:A.className+=n,E}}},xB.destroy=function(A){return!!A.parentNode&&(A.parentNode.removeChild(A),!0)},xB);function xB(A,e){if(this.options=e,this.scrolledElements=[],this.referenceElement=A,this.counters=new pB,this.quoteDepth=0,!A.ownerDocument)throw new Error(\"Cloned element does not have an owner document\");this.documentElement=this.cloneNode(A.ownerDocument.documentElement)}(vB=LB||(LB={}))[vB.BEFORE=0]=\"BEFORE\",vB[vB.AFTER=1]=\"AFTER\";var VB,zB,XB=function(A,e){var t=A.createElement(\"iframe\");return t.className=\"html2canvas-container\",t.style.visibility=\"hidden\",t.style.position=\"fixed\",t.style.left=\"-10000px\",t.style.top=\"0px\",t.style.border=\"0\",t.width=e.width.toString(),t.height=e.height.toString(),t.scrolling=\"no\",t.setAttribute(_B,\"true\"),A.body.appendChild(t),t},JB=function(n){return new Promise(function(e,A){var t=n.contentWindow;if(!t)return A(\"No window assigned for iframe\");var r=t.document;t.onload=n.onload=r.onreadystatechange=function(){t.onload=n.onload=r.onreadystatechange=null;var A=setInterval(function(){0<r.body.childNodes.length&&\"complete\"===r.readyState&&(clearInterval(A),e(n))},50)}})},GB=function(A,e){for(var t=A.length-1;0<=t;t--){var r=A.item(t);\"content\"!==r&&e.style.setProperty(r,A.getPropertyValue(r))}return e},kB=function(A){var e=\"\";return A&&(e+=\"<!DOCTYPE \",A.name&&(e+=A.name),A.internalSubset&&(e+=A.internalSubset),A.publicId&&(e+='\"'+A.publicId+'\"'),A.systemId&&(e+='\"'+A.systemId+'\"'),e+=\">\"),e},WB=function(A,e,t){A&&A.defaultView&&(e!==A.defaultView.pageXOffset||t!==A.defaultView.pageYOffset)&&A.defaultView.scrollTo(e,t)},YB=function(A){var e=A[0],t=A[1],r=A[2];e.scrollLeft=t,e.scrollTop=r},qB=\"___html2canvas___pseudoelement_before\",ZB=\"___html2canvas___pseudoelement_after\",jB='{\\n    content: \"\" !important;\\n    display: none !important;\\n}',$B=function(A){As(A,\".\"+qB+\":before\"+jB+\"\\n         .\"+ZB+\":after\"+jB)},As=function(A,e){var t=A.ownerDocument;if(t){var r=t.createElement(\"style\");r.textContent=e,A.appendChild(r)}};(zB=VB||(VB={}))[zB.VECTOR=0]=\"VECTOR\",zB[zB.BEZIER_CURVE=1]=\"BEZIER_CURVE\";function es(A,t){return A.length===t.length&&A.some(function(A,e){return A===t[e]})}var ts=(rs.prototype.add=function(A,e){return new rs(this.x+A,this.y+e)},rs);function rs(A,e){this.type=VB.VECTOR,this.x=A,this.y=e}function ns(A,e,t){return new ts(A.x+(e.x-A.x)*t,A.y+(e.y-A.y)*t)}var Bs=(ss.prototype.subdivide=function(A,e){var t=ns(this.start,this.startControl,A),r=ns(this.startControl,this.endControl,A),n=ns(this.endControl,this.end,A),B=ns(t,r,A),s=ns(r,n,A),o=ns(B,s,A);return e?new ss(this.start,t,B,o):new ss(o,s,n,this.end)},ss.prototype.add=function(A,e){return new ss(this.start.add(A,e),this.startControl.add(A,e),this.endControl.add(A,e),this.end.add(A,e))},ss.prototype.reverse=function(){return new ss(this.end,this.endControl,this.startControl,this.start)},ss);function ss(A,e,t,r){this.type=VB.BEZIER_CURVE,this.start=A,this.startControl=e,this.endControl=t,this.end=r}function os(A){return A.type===VB.BEZIER_CURVE}var is,as,cs=function(A){var e=A.styles,t=A.bounds,r=jA(e.borderTopLeftRadius,t.width,t.height),n=r[0],B=r[1],s=jA(e.borderTopRightRadius,t.width,t.height),o=s[0],i=s[1],a=jA(e.borderBottomRightRadius,t.width,t.height),c=a[0],Q=a[1],w=jA(e.borderBottomLeftRadius,t.width,t.height),u=w[0],U=w[1],l=[];l.push((n+o)/t.width),l.push((u+c)/t.width),l.push((B+U)/t.height),l.push((i+Q)/t.height);var C=Math.max.apply(Math,l);1<C&&(n/=C,B/=C,o/=C,i/=C,c/=C,Q/=C,u/=C,U/=C);var g=t.width-o,E=t.height-Q,F=t.width-c,h=t.height-U,H=e.borderTopWidth,d=e.borderRightWidth,f=e.borderBottomWidth,p=e.borderLeftWidth,N=ae(e.paddingTop,A.bounds.width),K=ae(e.paddingRight,A.bounds.width),I=ae(e.paddingBottom,A.bounds.width),T=ae(e.paddingLeft,A.bounds.width);this.topLeftBorderBox=0<n||0<B?us(t.left,t.top,n,B,is.TOP_LEFT):new ts(t.left,t.top),this.topRightBorderBox=0<o||0<i?us(t.left+g,t.top,o,i,is.TOP_RIGHT):new ts(t.left+t.width,t.top),this.bottomRightBorderBox=0<c||0<Q?us(t.left+F,t.top+E,c,Q,is.BOTTOM_RIGHT):new ts(t.left+t.width,t.top+t.height),this.bottomLeftBorderBox=0<u||0<U?us(t.left,t.top+h,u,U,is.BOTTOM_LEFT):new ts(t.left,t.top+t.height),this.topLeftPaddingBox=0<n||0<B?us(t.left+p,t.top+H,Math.max(0,n-p),Math.max(0,B-H),is.TOP_LEFT):new ts(t.left+p,t.top+H),this.topRightPaddingBox=0<o||0<i?us(t.left+Math.min(g,t.width+p),t.top+H,g>t.width+p?0:o-p,i-H,is.TOP_RIGHT):new ts(t.left+t.width-d,t.top+H),this.bottomRightPaddingBox=0<c||0<Q?us(t.left+Math.min(F,t.width-p),t.top+Math.min(E,t.height+H),Math.max(0,c-d),Q-f,is.BOTTOM_RIGHT):new ts(t.left+t.width-d,t.top+t.height-f),this.bottomLeftPaddingBox=0<u||0<U?us(t.left+p,t.top+h,Math.max(0,u-p),U-f,is.BOTTOM_LEFT):new ts(t.left+p,t.top+t.height-f),this.topLeftContentBox=0<n||0<B?us(t.left+p+T,t.top+H+N,Math.max(0,n-(p+T)),Math.max(0,B-(H+N)),is.TOP_LEFT):new ts(t.left+p+T,t.top+H+N),this.topRightContentBox=0<o||0<i?us(t.left+Math.min(g,t.width+p+T),t.top+H+N,g>t.width+p+T?0:o-p+T,i-(H+N),is.TOP_RIGHT):new ts(t.left+t.width-(d+K),t.top+H+N),this.bottomRightContentBox=0<c||0<Q?us(t.left+Math.min(F,t.width-(p+T)),t.top+Math.min(E,t.height+H+N),Math.max(0,c-(d+K)),Q-(f+I),is.BOTTOM_RIGHT):new ts(t.left+t.width-(d+K),t.top+t.height-(f+I)),this.bottomLeftContentBox=0<u||0<U?us(t.left+p+T,t.top+h,Math.max(0,u-(p+T)),U-(f+I),is.BOTTOM_LEFT):new ts(t.left+p+T,t.top+t.height-(f+I))};(as=is||(is={}))[as.TOP_LEFT=0]=\"TOP_LEFT\",as[as.TOP_RIGHT=1]=\"TOP_RIGHT\",as[as.BOTTOM_RIGHT=2]=\"BOTTOM_RIGHT\",as[as.BOTTOM_LEFT=3]=\"BOTTOM_LEFT\";function Qs(A){return[A.topLeftBorderBox,A.topRightBorderBox,A.bottomRightBorderBox,A.bottomLeftBorderBox]}function ws(A){return[A.topLeftPaddingBox,A.topRightPaddingBox,A.bottomRightPaddingBox,A.bottomLeftPaddingBox]}var us=function(A,e,t,r,n){var B=(Math.sqrt(2)-1)/3*4,s=t*B,o=r*B,i=A+t,a=e+r;switch(n){case is.TOP_LEFT:return new Bs(new ts(A,a),new ts(A,a-o),new ts(i-s,e),new ts(i,e));case is.TOP_RIGHT:return new Bs(new ts(A,e),new ts(A+s,e),new ts(i,a-o),new ts(i,a));case is.BOTTOM_RIGHT:return new Bs(new ts(i,e),new ts(i,e+o),new ts(A+s,a),new ts(A,a));case is.BOTTOM_LEFT:default:return new Bs(new ts(i,a),new ts(i-s,a),new ts(A,e+o),new ts(A,e))}},Us=function(A,e,t){this.type=0,this.offsetX=A,this.offsetY=e,this.matrix=t,this.target=6},ls=function(A,e){this.type=1,this.target=e,this.path=A},Cs=function(A){this.element=A,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]},gs=(Es.prototype.getParentEffects=function(){var A=this.effects.slice(0);if(this.container.styles.overflowX!==sr.VISIBLE){var e=Qs(this.curves),t=ws(this.curves);es(e,t)||A.push(new ls(t,6))}return A},Es);function Es(A,e){if(this.container=A,this.effects=e.slice(0),this.curves=new cs(A),null!==A.styles.transform){var t=A.bounds.left+A.styles.transformOrigin[0].number,r=A.bounds.top+A.styles.transformOrigin[1].number,n=A.styles.transform;this.effects.push(new Us(t,r,n))}if(A.styles.overflowX!==sr.VISIBLE){var B=Qs(this.curves),s=ws(this.curves);es(B,s)?this.effects.push(new ls(B,6)):(this.effects.push(new ls(B,2)),this.effects.push(new ls(s,4)))}}function Fs(A){var e=A.bounds,t=A.styles;return e.add(t.borderLeftWidth,t.borderTopWidth,-(t.borderRightWidth+t.borderLeftWidth),-(t.borderTopWidth+t.borderBottomWidth))}function hs(A){var e=A.styles,t=A.bounds,r=ae(e.paddingLeft,t.width),n=ae(e.paddingRight,t.width),B=ae(e.paddingTop,t.width),s=ae(e.paddingBottom,t.width);return t.add(r+e.borderLeftWidth,B+e.borderTopWidth,-(e.borderRightWidth+e.borderLeftWidth+r+n),-(e.borderTopWidth+e.borderBottomWidth+B+s))}function Hs(A,e,t){var r=function(A,e){return 0===A?e.bounds:2===A?hs(e):Fs(e)}(Ts(A.styles.backgroundOrigin,e),A),n=function(A,e){return A===Ee.BORDER_BOX?e.bounds:A===Ee.CONTENT_BOX?hs(e):Fs(e)}(Ts(A.styles.backgroundClip,e),A),B=Is(Ts(A.styles.backgroundSize,e),t,r),s=B[0],o=B[1],i=jA(Ts(A.styles.backgroundPosition,e),r.width-s,r.height-o);return[ms(Ts(A.styles.backgroundRepeat,e),i,B,r,n),Math.round(r.left+i[0]),Math.round(r.top+i[1]),s,o]}function ds(A){return zA(A)&&A.value===Ut.AUTO}function fs(A){return\"number\"==typeof A}var ps=function(c,Q,w,u){c.container.elements.forEach(function(A){var e=An(A.flags,4),t=An(A.flags,2),r=new gs(A,c.getParentEffects());An(A.styles.display,2048)&&u.push(r);var n=An(A.flags,8)?[]:u;if(e||t){var B=e||A.styles.isPositioned()?w:Q,s=new Cs(r);if(A.styles.isPositioned()||A.styles.opacity<1||A.styles.isTransformed()){var o=A.styles.zIndex.order;if(o<0){var i=0;B.negativeZIndex.some(function(A,e){return o>A.element.container.styles.zIndex.order?(i=e,!1):0<i}),B.negativeZIndex.splice(i,0,s)}else if(0<o){var a=0;B.positiveZIndex.some(function(A,e){return o>A.element.container.styles.zIndex.order?(a=e+1,!1):0<a}),B.positiveZIndex.splice(a,0,s)}else B.zeroOrAutoZIndexOrTransformedOrOpacity.push(s)}else A.styles.isFloating()?B.nonPositionedFloats.push(s):B.nonPositionedInlineLevel.push(s);ps(r,s,e?s:w,n)}else A.styles.isInlineLevel()?Q.inlineLevel.push(r):Q.nonInlineLevel.push(r),ps(r,Q,w,n);An(A.flags,8)&&Ns(A,n)})},Ns=function(A,e){for(var t=A instanceof Mn?A.start:1,r=A instanceof Mn&&A.reversed,n=0;n<e.length;n++){var B=e[n];B.container instanceof Dn&&\"number\"==typeof B.container.value&&0!==B.container.value&&(t=B.container.value),B.listValue=yB(t,B.container.styles.listStyleType,!0),t+=r?-1:1}},Ks=function(A,e,t,r){var n=[];return os(A)?n.push(A.subdivide(.5,!1)):n.push(A),os(t)?n.push(t.subdivide(.5,!0)):n.push(t),os(r)?n.push(r.subdivide(.5,!0).reverse()):n.push(r),os(e)?n.push(e.subdivide(.5,!1).reverse()):n.push(e),n},Is=function(A,e,t){var r=e[0],n=e[1],B=e[2],s=A[0],o=A[1];if(qA(s)&&o&&qA(o))return[ae(s,t.width),ae(o,t.height)];var i=fs(B);if(zA(s)&&(s.value===Ut.CONTAIN||s.value===Ut.COVER))return fs(B)?t.width/t.height<B!=(s.value===Ut.COVER)?[t.width,t.width/B]:[t.height*B,t.height]:[t.width,t.height];var a=fs(r),c=fs(n),Q=a||c;if(ds(s)&&(!o||ds(o)))return a&&c?[r,n]:i||Q?Q&&i?[a?r:n*B,c?n:r/B]:[a?r:t.width,c?n:t.height]:[t.width,t.height];if(i){var w=0,u=0;return qA(s)?w=ae(s,t.width):qA(o)&&(u=ae(o,t.height)),ds(s)?w=u*B:o&&!ds(o)||(u=w/B),[w,u]}var U=null,l=null;if(qA(s)?U=ae(s,t.width):o&&qA(o)&&(l=ae(o,t.height)),null===U||o&&!ds(o)||(l=a&&c?U/r*n:t.height),null!==l&&ds(s)&&(U=a&&c?l/n*r:t.width),null!==U&&null!==l)return[U,l];throw new Error(\"Unable to calculate background-size for element\")},Ts=function(A,e){var t=A[e];return void 0===t?A[0]:t},ms=function(A,e,t,r,n){var B=e[0],s=e[1],o=t[0],i=t[1];switch(A){case it.REPEAT_X:return[new ts(Math.round(r.left),Math.round(r.top+s)),new ts(Math.round(r.left+r.width),Math.round(r.top+s)),new ts(Math.round(r.left+r.width),Math.round(i+r.top+s)),new ts(Math.round(r.left),Math.round(i+r.top+s))];case it.REPEAT_Y:return[new ts(Math.round(r.left+B),Math.round(r.top)),new ts(Math.round(r.left+B+o),Math.round(r.top)),new ts(Math.round(r.left+B+o),Math.round(r.height+r.top)),new ts(Math.round(r.left+B),Math.round(r.height+r.top))];case it.NO_REPEAT:return[new ts(Math.round(r.left+B),Math.round(r.top+s)),new ts(Math.round(r.left+B+o),Math.round(r.top+s)),new ts(Math.round(r.left+B+o),Math.round(r.top+s+i)),new ts(Math.round(r.left+B),Math.round(r.top+s+i))];default:return[new ts(Math.round(n.left),Math.round(n.top)),new ts(Math.round(n.left+n.width),Math.round(n.top)),new ts(Math.round(n.left+n.width),Math.round(n.height+n.top)),new ts(Math.round(n.left),Math.round(n.height+n.top))]}},Rs=\"Hidden Text\",Ls=(vs.prototype.parseMetrics=function(A,e){var t=this._document.createElement(\"div\"),r=this._document.createElement(\"img\"),n=this._document.createElement(\"span\"),B=this._document.body;t.style.visibility=\"hidden\",t.style.fontFamily=A,t.style.fontSize=e,t.style.margin=\"0\",t.style.padding=\"0\",B.appendChild(t),r.src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",r.width=1,r.height=1,r.style.margin=\"0\",r.style.padding=\"0\",r.style.verticalAlign=\"baseline\",n.style.fontFamily=A,n.style.fontSize=e,n.style.margin=\"0\",n.style.padding=\"0\",n.appendChild(this._document.createTextNode(Rs)),t.appendChild(n),t.appendChild(r);var s=r.offsetTop-n.offsetTop+2;t.removeChild(n),t.appendChild(this._document.createTextNode(Rs)),t.style.lineHeight=\"normal\",r.style.verticalAlign=\"super\";var o=r.offsetTop-t.offsetTop+2;return B.removeChild(t),{baseline:s,middle:o}},vs.prototype.getMetrics=function(A,e){var t=A+\" \"+e;return void 0===this._data[t]&&(this._data[t]=this.parseMetrics(A,e)),this._data[t]},vs);function vs(A){this._data={},this._document=A}var Os=(Ds.prototype.applyEffects=function(A,e){for(var t=this;this._activeEffects.length;)this.popEffect();A.filter(function(A){return An(A.target,e)}).forEach(function(A){return t.applyEffect(A)})},Ds.prototype.applyEffect=function(A){this.ctx.save(),function(A){return 0===A.type}(A)&&(this.ctx.translate(A.offsetX,A.offsetY),this.ctx.transform(A.matrix[0],A.matrix[1],A.matrix[2],A.matrix[3],A.matrix[4],A.matrix[5]),this.ctx.translate(-A.offsetX,-A.offsetY)),function(A){return 1===A.type}(A)&&(this.path(A.path),this.ctx.clip()),this._activeEffects.push(A)},Ds.prototype.popEffect=function(){this._activeEffects.pop(),this.ctx.restore()},Ds.prototype.renderStack=function(t){return a(this,void 0,void 0,function(){var e;return S(this,function(A){switch(A.label){case 0:return(e=t.element.container.styles).isVisible()?(this.ctx.globalAlpha=e.opacity,[4,this.renderStackContent(t)]):[3,2];case 1:A.sent(),A.label=2;case 2:return[2]}})})},Ds.prototype.renderNode=function(e){return a(this,void 0,void 0,function(){return S(this,function(A){switch(A.label){case 0:return e.container.styles.isVisible()?[4,this.renderNodeBackgroundAndBorders(e)]:[3,3];case 1:return A.sent(),[4,this.renderNodeContent(e)];case 2:A.sent(),A.label=3;case 3:return[2]}})})},Ds.prototype.renderTextWithLetterSpacing=function(t,A){var r=this;0===A?this.ctx.fillText(t.text,t.bounds.left,t.bounds.top+t.bounds.height):c(t.text).map(function(A){return l(A)}).reduce(function(A,e){return r.ctx.fillText(e,A,t.bounds.top+t.bounds.height),A+r.ctx.measureText(e).width},t.bounds.left)},Ds.prototype.createFontStyle=function(A){var e=A.fontVariant.filter(function(A){return\"normal\"===A||\"small-caps\"===A}).join(\"\"),t=A.fontFamily.join(\", \"),r=xA(A.fontSize)?\"\"+A.fontSize.number+A.fontSize.unit:A.fontSize.number+\"px\";return[[A.fontStyle,e,A.fontWeight,r,t].join(\" \"),t,r]},Ds.prototype.renderTextNode=function(r,o){return a(this,void 0,void 0,function(){var e,t,n,B,s=this;return S(this,function(A){return e=this.createFontStyle(o),t=e[0],n=e[1],B=e[2],this.ctx.font=t,r.textBounds.forEach(function(r){s.ctx.fillStyle=te(o.color),s.renderTextWithLetterSpacing(r,o.letterSpacing);var A=o.textShadow;A.length&&r.text.trim().length&&(A.slice(0).reverse().forEach(function(A){s.ctx.shadowColor=te(A.color),s.ctx.shadowOffsetX=A.offsetX.number*s.options.scale,s.ctx.shadowOffsetY=A.offsetY.number*s.options.scale,s.ctx.shadowBlur=A.blur.number,s.ctx.fillText(r.text,r.bounds.left,r.bounds.top+r.bounds.height)}),s.ctx.shadowColor=\"\",s.ctx.shadowOffsetX=0,s.ctx.shadowOffsetY=0,s.ctx.shadowBlur=0),o.textDecorationLine.length&&(s.ctx.fillStyle=te(o.textDecorationColor||o.color),o.textDecorationLine.forEach(function(A){switch(A){case 1:var e=s.fontMetrics.getMetrics(n,B).baseline;s.ctx.fillRect(r.bounds.left,Math.round(r.bounds.top+e),r.bounds.width,1);break;case 2:s.ctx.fillRect(r.bounds.left,Math.round(r.bounds.top),r.bounds.width,1);break;case 3:var t=s.fontMetrics.getMetrics(n,B).middle;s.ctx.fillRect(r.bounds.left,Math.ceil(r.bounds.top+t),r.bounds.width,1)}}))}),[2]})})},Ds.prototype.renderReplacedElement=function(A,e,t){if(t&&0<A.intrinsicWidth&&0<A.intrinsicHeight){var r=hs(A),n=ws(e);this.path(n),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(t,0,0,A.intrinsicWidth,A.intrinsicHeight,r.left,r.top,r.width,r.height),this.ctx.restore()}},Ds.prototype.renderNodeContent=function(l){return a(this,void 0,void 0,function(){var e,t,r,n,B,s,o,i,a,c,Q,w,u,U;return S(this,function(A){switch(A.label){case 0:this.applyEffects(l.effects,4),e=l.container,t=l.curves,r=e.styles,n=0,B=e.textNodes,A.label=1;case 1:return n<B.length?(s=B[n],[4,this.renderTextNode(s,r)]):[3,4];case 2:A.sent(),A.label=3;case 3:return n++,[3,1];case 4:if(!(e instanceof Nn))return[3,8];A.label=5;case 5:return A.trys.push([5,7,,8]),[4,this.options.cache.match(e.src)];case 6:return w=A.sent(),this.renderReplacedElement(e,t,w),[3,8];case 7:return A.sent(),De.getInstance(this.options.id).error(\"Error loading image \"+e.src),[3,8];case 8:if(e instanceof Tn&&this.renderReplacedElement(e,t,e.canvas),!(e instanceof Ln))return[3,12];A.label=9;case 9:return A.trys.push([9,11,,12]),[4,this.options.cache.match(e.svg)];case 10:return w=A.sent(),this.renderReplacedElement(e,t,w),[3,12];case 11:return A.sent(),De.getInstance(this.options.id).error(\"Error loading svg \"+e.svg.substring(0,255)),[3,12];case 12:return e instanceof tB&&e.tree?[4,new Ds({id:this.options.id,scale:this.options.scale,backgroundColor:e.backgroundColor,x:0,y:0,scrollX:0,scrollY:0,width:e.width,height:e.height,cache:this.options.cache,windowWidth:e.width,windowHeight:e.height}).render(e.tree)]:[3,14];case 13:o=A.sent(),e.width&&e.height&&this.ctx.drawImage(o,0,0,e.width,e.height,e.bounds.left,e.bounds.top,e.bounds.width,e.bounds.height),A.label=14;case 14:if(e instanceof Gn&&(i=Math.min(e.bounds.width,e.bounds.height),e.type===Vn?e.checked&&(this.ctx.save(),this.path([new ts(e.bounds.left+.39363*i,e.bounds.top+.79*i),new ts(e.bounds.left+.16*i,e.bounds.top+.5549*i),new ts(e.bounds.left+.27347*i,e.bounds.top+.44071*i),new ts(e.bounds.left+.39694*i,e.bounds.top+.5649*i),new ts(e.bounds.left+.72983*i,e.bounds.top+.23*i),new ts(e.bounds.left+.84*i,e.bounds.top+.34085*i),new ts(e.bounds.left+.39363*i,e.bounds.top+.79*i)]),this.ctx.fillStyle=te(Jn),this.ctx.fill(),this.ctx.restore()):e.type===zn&&e.checked&&(this.ctx.save(),this.ctx.beginPath(),this.ctx.arc(e.bounds.left+i/2,e.bounds.top+i/2,i/4,0,2*Math.PI,!0),this.ctx.fillStyle=te(Jn),this.ctx.fill(),this.ctx.restore())),bs(e)&&e.value.length){switch(this.ctx.font=this.createFontStyle(r)[0],this.ctx.fillStyle=te(r.color),this.ctx.textBaseline=\"middle\",this.ctx.textAlign=Ms(e.styles.textAlign),U=hs(e),a=0,e.styles.textAlign){case Cr.CENTER:a+=U.width/2;break;case Cr.RIGHT:a+=U.width}c=U.add(a,0,0,-U.height/2+1),this.ctx.save(),this.path([new ts(U.left,U.top),new ts(U.left+U.width,U.top),new ts(U.left+U.width,U.top+U.height),new ts(U.left,U.top+U.height)]),this.ctx.clip(),this.renderTextWithLetterSpacing(new Cn(e.value,c),r.letterSpacing),this.ctx.restore(),this.ctx.textBaseline=\"bottom\",this.ctx.textAlign=\"left\"}if(!An(e.styles.display,2048))return[3,20];if(null===e.styles.listStyleImage)return[3,19];if((Q=e.styles.listStyleImage).type!==xe.URL)return[3,18];w=void 0,u=Q.url,A.label=15;case 15:return A.trys.push([15,17,,18]),[4,this.options.cache.match(u)];case 16:return w=A.sent(),this.ctx.drawImage(w,e.bounds.left-(w.width+10),e.bounds.top),[3,18];case 17:return A.sent(),De.getInstance(this.options.id).error(\"Error loading list-style-image \"+u),[3,18];case 18:return[3,20];case 19:l.listValue&&e.styles.listStyleType!==tr.NONE&&(this.ctx.font=this.createFontStyle(r)[0],this.ctx.fillStyle=te(r.color),this.ctx.textBaseline=\"middle\",this.ctx.textAlign=\"right\",U=new I(e.bounds.left,e.bounds.top+ae(e.styles.paddingTop,e.bounds.width),e.bounds.width,function(A,e){return zA(A)&&\"normal\"===A.value?1.2*e:A.type===sA.NUMBER_TOKEN?e*A.number:qA(A)?ae(A,e):e}(r.lineHeight,r.fontSize.number)/2+1),this.renderTextWithLetterSpacing(new Cn(l.listValue,U),r.letterSpacing),this.ctx.textBaseline=\"bottom\",this.ctx.textAlign=\"left\"),A.label=20;case 20:return[2]}})})},Ds.prototype.renderStackContent=function(C){return a(this,void 0,void 0,function(){var e,t,r,n,B,s,o,i,a,c,Q,w,u,U,l;return S(this,function(A){switch(A.label){case 0:return[4,this.renderNodeBackgroundAndBorders(C.element)];case 1:A.sent(),e=0,t=C.negativeZIndex,A.label=2;case 2:return e<t.length?(l=t[e],[4,this.renderStack(l)]):[3,5];case 3:A.sent(),A.label=4;case 4:return e++,[3,2];case 5:return[4,this.renderNodeContent(C.element)];case 6:A.sent(),r=0,n=C.nonInlineLevel,A.label=7;case 7:return r<n.length?(l=n[r],[4,this.renderNode(l)]):[3,10];case 8:A.sent(),A.label=9;case 9:return r++,[3,7];case 10:B=0,s=C.nonPositionedFloats,A.label=11;case 11:return B<s.length?(l=s[B],[4,this.renderStack(l)]):[3,14];case 12:A.sent(),A.label=13;case 13:return B++,[3,11];case 14:o=0,i=C.nonPositionedInlineLevel,A.label=15;case 15:return o<i.length?(l=i[o],[4,this.renderStack(l)]):[3,18];case 16:A.sent(),A.label=17;case 17:return o++,[3,15];case 18:a=0,c=C.inlineLevel,A.label=19;case 19:return a<c.length?(l=c[a],[4,this.renderNode(l)]):[3,22];case 20:A.sent(),A.label=21;case 21:return a++,[3,19];case 22:Q=0,w=C.zeroOrAutoZIndexOrTransformedOrOpacity,A.label=23;case 23:return Q<w.length?(l=w[Q],[4,this.renderStack(l)]):[3,26];case 24:A.sent(),A.label=25;case 25:return Q++,[3,23];case 26:u=0,U=C.positiveZIndex,A.label=27;case 27:return u<U.length?(l=U[u],[4,this.renderStack(l)]):[3,30];case 28:A.sent(),A.label=29;case 29:return u++,[3,27];case 30:return[2]}})})},Ds.prototype.mask=function(A){this.ctx.beginPath(),this.ctx.moveTo(0,0),this.ctx.lineTo(this.canvas.width,0),this.ctx.lineTo(this.canvas.width,this.canvas.height),this.ctx.lineTo(0,this.canvas.height),this.ctx.lineTo(0,0),this.formatPath(A.slice(0).reverse()),this.ctx.closePath()},Ds.prototype.path=function(A){this.ctx.beginPath(),this.formatPath(A),this.ctx.closePath()},Ds.prototype.formatPath=function(A){var r=this;A.forEach(function(A,e){var t=os(A)?A.start:A;0===e?r.ctx.moveTo(t.x,t.y):r.ctx.lineTo(t.x,t.y),os(A)&&r.ctx.bezierCurveTo(A.startControl.x,A.startControl.y,A.endControl.x,A.endControl.y,A.end.x,A.end.y)})},Ds.prototype.renderRepeat=function(A,e,t,r){this.path(A),this.ctx.fillStyle=e,this.ctx.translate(t,r),this.ctx.fill(),this.ctx.translate(-t,-r)},Ds.prototype.resizeImage=function(A,e,t){if(A.width===e&&A.height===t)return A;var r=this.canvas.ownerDocument.createElement(\"canvas\");return r.width=e,r.height=t,r.getContext(\"2d\").drawImage(A,0,0,A.width,A.height,0,0,e,t),r},Ds.prototype.renderBackgroundImage=function(b){return a(this,void 0,void 0,function(){var O,e,D,t,r,n;return S(this,function(A){switch(A.label){case 0:O=b.styles.backgroundImage.length-1,e=function(e){var t,r,n,B,s,o,i,a,c,Q,w,u,U,l,C,g,E,F,h,H,d,f,p,N,K,I,T,m,R,L,v;return S(this,function(A){switch(A.label){case 0:if(e.type!==xe.URL)return[3,5];t=void 0,r=e.url,A.label=1;case 1:return A.trys.push([1,3,,4]),[4,D.options.cache.match(r)];case 2:return t=A.sent(),[3,4];case 3:return A.sent(),De.getInstance(D.options.id).error(\"Error loading background-image \"+r),[3,4];case 4:return t&&(n=Hs(b,O,[t.width,t.height,t.width/t.height]),g=n[0],f=n[1],p=n[2],h=n[3],H=n[4],l=D.ctx.createPattern(D.resizeImage(t,h,H),\"repeat\"),D.renderRepeat(g,l,f,p)),[3,6];case 5:!function(A){return A.type===xe.LINEAR_GRADIENT}(e)?function(A){return A.type===xe.RADIAL_GRADIENT}(e)&&(C=Hs(b,O,[null,null,null]),g=C[0],E=C[1],F=C[2],h=C[3],H=C[4],d=0===e.position.length?[oe]:e.position,f=ae(d[0],h),p=ae(d[d.length-1],H),N=function(A,e,t,r,n){var B=0,s=0;switch(A.size){case Bt.CLOSEST_SIDE:A.shape===rt.CIRCLE?B=s=Math.min(Math.abs(e),Math.abs(e-r),Math.abs(t),Math.abs(t-n)):A.shape===rt.ELLIPSE&&(B=Math.min(Math.abs(e),Math.abs(e-r)),s=Math.min(Math.abs(t),Math.abs(t-n)));break;case Bt.CLOSEST_CORNER:if(A.shape===rt.CIRCLE)B=s=Math.min(Ne(e,t),Ne(e,t-n),Ne(e-r,t),Ne(e-r,t-n));else if(A.shape===rt.ELLIPSE){var o=Math.min(Math.abs(t),Math.abs(t-n))/Math.min(Math.abs(e),Math.abs(e-r)),i=Ke(r,n,e,t,!0),a=i[0],c=i[1];s=o*(B=Ne(a-e,(c-t)/o))}break;case Bt.FARTHEST_SIDE:A.shape===rt.CIRCLE?B=s=Math.max(Math.abs(e),Math.abs(e-r),Math.abs(t),Math.abs(t-n)):A.shape===rt.ELLIPSE&&(B=Math.max(Math.abs(e),Math.abs(e-r)),s=Math.max(Math.abs(t),Math.abs(t-n)));break;case Bt.FARTHEST_CORNER:if(A.shape===rt.CIRCLE)B=s=Math.max(Ne(e,t),Ne(e,t-n),Ne(e-r,t),Ne(e-r,t-n));else if(A.shape===rt.ELLIPSE){o=Math.max(Math.abs(t),Math.abs(t-n))/Math.max(Math.abs(e),Math.abs(e-r));var Q=Ke(r,n,e,t,!1);a=Q[0],c=Q[1],s=o*(B=Ne(a-e,(c-t)/o))}}return Array.isArray(A.size)&&(B=ae(A.size[0],r),s=2===A.size.length?ae(A.size[1],n):B),[B,s]}(e,f,p,h,H),K=N[0],I=N[1],0<K&&0<K&&(T=D.ctx.createRadialGradient(E+f,F+p,0,E+f,F+p,K),fe(e.stops,2*K).forEach(function(A){return T.addColorStop(A.stop,te(A.color))}),D.path(g),D.ctx.fillStyle=T,K!==I?(m=b.bounds.left+.5*b.bounds.width,R=b.bounds.top+.5*b.bounds.height,v=1/(L=I/K),D.ctx.save(),D.ctx.translate(m,R),D.ctx.transform(1,0,0,L,0,0),D.ctx.translate(-m,-R),D.ctx.fillRect(E,v*(F-R)+R,h,H*v),D.ctx.restore()):D.ctx.fill())):(B=Hs(b,O,[null,null,null]),g=B[0],f=B[1],p=B[2],h=B[3],H=B[4],s=pe(e.angle,h,H),o=s[0],i=s[1],a=s[2],c=s[3],Q=s[4],(w=document.createElement(\"canvas\")).width=h,w.height=H,u=w.getContext(\"2d\"),U=u.createLinearGradient(i,c,a,Q),fe(e.stops,o).forEach(function(A){return U.addColorStop(A.stop,te(A.color))}),u.fillStyle=U,u.fillRect(0,0,h,H),0<h&&0<H&&(l=D.ctx.createPattern(w,\"repeat\"),D.renderRepeat(g,l,f,p))),A.label=6;case 6:return O--,[2]}})},D=this,t=0,r=b.styles.backgroundImage.slice(0).reverse(),A.label=1;case 1:return t<r.length?(n=r[t],[5,e(n)]):[3,4];case 2:A.sent(),A.label=3;case 3:return t++,[3,1];case 4:return[2]}})})},Ds.prototype.renderBorder=function(e,t,r){return a(this,void 0,void 0,function(){return S(this,function(A){return this.path(function(A,e){switch(e){case 0:return Ks(A.topLeftBorderBox,A.topLeftPaddingBox,A.topRightBorderBox,A.topRightPaddingBox);case 1:return Ks(A.topRightBorderBox,A.topRightPaddingBox,A.bottomRightBorderBox,A.bottomRightPaddingBox);case 2:return Ks(A.bottomRightBorderBox,A.bottomRightPaddingBox,A.bottomLeftBorderBox,A.bottomLeftPaddingBox);case 3:default:return Ks(A.bottomLeftBorderBox,A.bottomLeftPaddingBox,A.topLeftBorderBox,A.topLeftPaddingBox)}}(r,t)),this.ctx.fillStyle=te(e),this.ctx.fill(),[2]})})},Ds.prototype.renderNodeBackgroundAndBorders=function(c){return a(this,void 0,void 0,function(){var e,t,r,n,B,s,o,i,a=this;return S(this,function(A){switch(A.label){case 0:return this.applyEffects(c.effects,2),e=c.container.styles,t=!ee(e.backgroundColor)||e.backgroundImage.length,r=[{style:e.borderTopStyle,color:e.borderTopColor},{style:e.borderRightStyle,color:e.borderRightColor},{style:e.borderBottomStyle,color:e.borderBottomColor},{style:e.borderLeftStyle,color:e.borderLeftColor}],n=Ss(Ts(e.backgroundClip,0),c.curves),t||e.boxShadow.length?(this.ctx.save(),this.path(n),this.ctx.clip(),ee(e.backgroundColor)||(this.ctx.fillStyle=te(e.backgroundColor),this.ctx.fill()),[4,this.renderBackgroundImage(c.container)]):[3,2];case 1:A.sent(),this.ctx.restore(),e.boxShadow.slice(0).reverse().forEach(function(A){a.ctx.save();var e=Qs(c.curves),t=A.inset?0:1e4,r=function(A,t,r,n,B){return A.map(function(A,e){switch(e){case 0:return A.add(t,r);case 1:return A.add(t+n,r);case 2:return A.add(t+n,r+B);case 3:return A.add(t,r+B)}return A})}(e,-t+(A.inset?1:-1)*A.spread.number,(A.inset?1:-1)*A.spread.number,A.spread.number*(A.inset?-2:2),A.spread.number*(A.inset?-2:2));A.inset?(a.path(e),a.ctx.clip(),a.mask(r)):(a.mask(e),a.ctx.clip(),a.path(r)),a.ctx.shadowOffsetX=A.offsetX.number+t,a.ctx.shadowOffsetY=A.offsetY.number,a.ctx.shadowColor=te(A.color),a.ctx.shadowBlur=A.blur.number,a.ctx.fillStyle=A.inset?te(A.color):\"rgba(0,0,0,1)\",a.ctx.fill(),a.ctx.restore()}),A.label=2;case 2:s=B=0,o=r,A.label=3;case 3:return s<o.length?(i=o[s]).style===ht.NONE||ee(i.color)?[3,5]:[4,this.renderBorder(i.color,B,c.curves)]:[3,7];case 4:A.sent(),A.label=5;case 5:B++,A.label=6;case 6:return s++,[3,3];case 7:return[2]}})})},Ds.prototype.render=function(t){return a(this,void 0,void 0,function(){var e;return S(this,function(A){switch(A.label){case 0:return this.options.backgroundColor&&(this.ctx.fillStyle=te(this.options.backgroundColor),this.ctx.fillRect(this.options.x-this.options.scrollX,this.options.y-this.options.scrollY,this.options.width,this.options.height)),e=function(A){var e=new gs(A,[]),t=new Cs(e),r=[];return ps(e,t,t,r),Ns(e.container,r),t}(t),[4,this.renderStack(e)];case 1:return A.sent(),this.applyEffects([],2),[2,this.canvas]}})})},Ds);function Ds(A){this._activeEffects=[],this.canvas=A.canvas?A.canvas:document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),(this.options=A).canvas||(this.canvas.width=Math.floor(A.width*A.scale),this.canvas.height=Math.floor(A.height*A.scale),this.canvas.style.width=A.width+\"px\",this.canvas.style.height=A.height+\"px\"),this.fontMetrics=new Ls(document),this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-A.x+A.scrollX,-A.y+A.scrollY),this.ctx.textBaseline=\"bottom\",this._activeEffects=[],De.getInstance(A.id).debug(\"Canvas renderer initialized (\"+A.width+\"x\"+A.height+\" at \"+A.x+\",\"+A.y+\") with scale \"+A.scale)}var bs=function(A){return A instanceof jn||(A instanceof Yn||A instanceof Gn&&A.type!==zn&&A.type!==Vn)},Ss=function(A,e){switch(A){case Ee.BORDER_BOX:return Qs(e);case Ee.CONTENT_BOX:return function(A){return[A.topLeftContentBox,A.topRightContentBox,A.bottomRightContentBox,A.bottomLeftContentBox]}(e);case Ee.PADDING_BOX:default:return ws(e)}},Ms=function(A){switch(A){case Cr.CENTER:return\"center\";case Cr.RIGHT:return\"right\";case Cr.LEFT:default:return\"left\"}},ys=(_s.prototype.render=function(r){return a(this,void 0,void 0,function(){var e,t;return S(this,function(A){switch(A.label){case 0:return e=Le(Math.max(this.options.windowWidth,this.options.width)*this.options.scale,Math.max(this.options.windowHeight,this.options.height)*this.options.scale,this.options.scrollX*this.options.scale,this.options.scrollY*this.options.scale,r),[4,xs(e)];case 1:return t=A.sent(),this.options.backgroundColor&&(this.ctx.fillStyle=te(this.options.backgroundColor),this.ctx.fillRect(0,0,this.options.width*this.options.scale,this.options.height*this.options.scale)),this.ctx.drawImage(t,-this.options.x*this.options.scale,-this.options.y*this.options.scale),[2,this.canvas]}})})},_s);function _s(A){this.canvas=A.canvas?A.canvas:document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),this.options=A,this.canvas.width=Math.floor(A.width*A.scale),this.canvas.height=Math.floor(A.height*A.scale),this.canvas.style.width=A.width+\"px\",this.canvas.style.height=A.height+\"px\",this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-A.x+A.scrollX,-A.y+A.scrollY),De.getInstance(A.id).debug(\"EXPERIMENTAL ForeignObject renderer initialized (\"+A.width+\"x\"+A.height+\" at \"+A.x+\",\"+A.y+\") with scale \"+A.scale)}function Ps(A){return we(_A.create(A).parseComponentValue())}var xs=function(r){return new Promise(function(A,e){var t=new Image;t.onload=function(){A(t)},t.onerror=e,t.src=\"data:image/svg+xml;charset=utf-8,\"+encodeURIComponent((new XMLSerializer).serializeToString(r))})};\"undefined\"!=typeof window&&Se.setContext(window);var Vs=function(p,N){return a(void 0,void 0,void 0,function(){var e,t,r,n,B,s,o,i,a,c,Q,w,u,U,l,C,g,E,F,h,H,d,f;return S(this,function(A){switch(A.label){case 0:if(!(e=p.ownerDocument))throw new Error(\"Element is not attached to a Document\");if(!(t=e.defaultView))throw new Error(\"Document is not attached to a Window\");return r=(Math.round(1e3*Math.random())+Date.now()).toString(16),n=EB(p)||function(A){return\"HTML\"===A.tagName}(p)?function(A){var e=A.body,t=A.documentElement;if(!e||!t)throw new Error(\"Unable to get document size\");var r=Math.max(Math.max(e.scrollWidth,t.scrollWidth),Math.max(e.offsetWidth,t.offsetWidth),Math.max(e.clientWidth,t.clientWidth)),n=Math.max(Math.max(e.scrollHeight,t.scrollHeight),Math.max(e.offsetHeight,t.offsetHeight),Math.max(e.clientHeight,t.clientHeight));return new I(0,0,r,n)}(e):T(p),B=n.width,s=n.height,o=n.left,i=n.top,a=K({},{allowTaint:!1,imageTimeout:15e3,proxy:void 0,useCORS:!1},N),c={backgroundColor:\"#ffffff\",cache:N.cache?N.cache:Se.create(r,a),logging:!0,removeContainer:!0,foreignObjectRendering:!1,scale:t.devicePixelRatio||1,windowWidth:t.innerWidth,windowHeight:t.innerHeight,scrollX:t.pageXOffset,scrollY:t.pageYOffset,x:o,y:i,width:Math.ceil(B),height:Math.ceil(s),id:r},Q=K({},c,a,N),w=new I(Q.scrollX,Q.scrollY,Q.windowWidth,Q.windowHeight),De.create({id:r,enabled:Q.logging}),De.getInstance(r).debug(\"Starting document clone\"),u=new PB(p,{id:r,onclone:Q.onclone,ignoreElements:Q.ignoreElements,inlineImages:Q.foreignObjectRendering,copyStyles:Q.foreignObjectRendering}),(U=u.clonedReferenceElement)?[4,u.toIFrame(e,w)]:[2,Promise.reject(\"Unable to find element in cloned iframe\")];case 1:return l=A.sent(),C=e.documentElement?Ps(getComputedStyle(e.documentElement).backgroundColor):He.TRANSPARENT,g=e.body?Ps(getComputedStyle(e.body).backgroundColor):He.TRANSPARENT,E=N.backgroundColor,F=\"string\"==typeof E?Ps(E):null===E?He.TRANSPARENT:4294967295,h=p===e.documentElement?ee(C)?ee(g)?F:g:C:F,H={id:r,cache:Q.cache,canvas:Q.canvas,backgroundColor:h,scale:Q.scale,x:Q.x,y:Q.y,scrollX:Q.scrollX,scrollY:Q.scrollY,width:Q.width,height:Q.height,windowWidth:Q.windowWidth,windowHeight:Q.windowHeight},Q.foreignObjectRendering?(De.getInstance(r).debug(\"Document cloned, using foreign object rendering\"),[4,new ys(H).render(U)]):[3,3];case 2:return d=A.sent(),[3,5];case 3:return De.getInstance(r).debug(\"Document cloned, using computed rendering\"),Se.attachInstance(Q.cache),De.getInstance(r).debug(\"Starting DOM parsing\"),f=iB(U),Se.detachInstance(),h===f.styles.backgroundColor&&(f.styles.backgroundColor=He.TRANSPARENT),De.getInstance(r).debug(\"Starting renderer\"),[4,new Os(H).render(f)];case 4:d=A.sent(),A.label=5;case 5:return!0===Q.removeContainer&&(PB.destroy(l)||De.getInstance(r).error(\"Cannot detach cloned iframe as it is not in the DOM anymore\")),De.getInstance(r).debug(\"Finished rendering\"),De.destroy(r),Se.destroy(r),[2,d]}})})};return function(A,e){return void 0===e&&(e={}),Vs(A,e)}});","Magento_PageBuilder/js/utils/breakpoints.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n    'underscore'\n], function (_) {\n    'use strict';\n\n    return {\n        /**\n         * Build media query.\n         *\n         * @param {Object} conditions\n         * @returns {String}\n         */\n        buildMedia: function (conditions) {\n            var result = _.map(_.pairs(conditions), function (condition) {\n                return '(' + condition.join(': ') + ')';\n            });\n\n            return result.join(' and ');\n        }\n    };\n});\n","Magento_PageBuilder/js/utils/map.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/**\n * googleMaps dependency is added within googlemaps.phtml through shim based on API key being set\n *\n * @api\n */\ndefine([\n    'underscore',\n    'module',\n    'Magento_PageBuilder/js/events'\n], function (_, module, events) {\n    'use strict';\n\n    var google = window.google || {},\n\n        /**\n         * Generates a google map usable latitude and longitude object\n         *\n         * @param {Object} position\n         * @return {google.maps.LatLng}\n         */\n        getGoogleLatitudeLongitude = function (position) {\n            return new google.maps.LatLng(position.latitude, position.longitude);\n        },\n        gmAuthFailure = false;\n\n    // jscs:disable requireCamelCaseOrUpperCaseIdentifiers\n    /**\n     * Google's error listener for map loader failures\n     */\n    window.gm_authFailure = function () {\n        events.trigger('googleMaps:authFailure');\n        gmAuthFailure = true;\n    };\n    // jscs:enable requireCamelCaseOrUpperCaseIdentifiers\n\n    return function (element, markers, additionalOptions) {\n        var options,\n            style;\n\n        // If we've previously had an API key error, throw the error even again\n        if (gmAuthFailure) {\n            events.trigger('googleMaps:authFailure');\n\n            return;\n        }\n\n        // If Google Maps isn't loaded don't try init the map, it won't work\n        if (typeof google.maps === 'undefined') {\n            return;\n        }\n\n        /**\n         * Just in case of a bad JSON that bypassed validation\n         */\n        try {\n            style = module.config().style ? JSON.parse(module.config().style) : [];\n        }\n        catch (error) {\n            style = [];\n        }\n        options = _.extend({\n            zoom: 8,\n            center: getGoogleLatitudeLongitude({\n                latitude: 30.2672,\n                longitude: -97.7431\n            }),\n            scrollwheel: false,\n            disableDoubleClickZoom: false,\n            disableDefaultUI: false,\n            mapTypeControl: true,\n            mapTypeControlOptions: {\n                style: google.maps.MapTypeControlStyle.DEFAULT\n            },\n            styles: style\n        }, additionalOptions);\n\n        /* Create the map */\n        this.map = new google.maps.Map(element, options);\n        this.markers = [];\n\n        /**\n         * Callback function on map config update\n         * @param {Array} newMarkers\n         * @param {Object} updateOptions\n         */\n        this.onUpdate = function (newMarkers, updateOptions) {\n            this.map.setOptions(updateOptions);\n            this.setMarkers(newMarkers);\n        };\n\n        /**\n         * Sets the markers to selected map\n         * @param {Object} newMarkers\n         */\n        this.setMarkers = function (newMarkers) {\n            var activeInfoWindow,\n                latitudeLongitudeBounds = new google.maps.LatLngBounds();\n\n            this.markers.forEach(function (marker) {\n                marker.setMap(null);\n            }, this);\n\n            this.markers = [];\n            this.bounds = [];\n\n            /**\n             * Creates and set listener for markers\n             */\n            if (newMarkers && newMarkers.length) {\n                newMarkers.forEach(function (newMarker) {\n                    var location = _.escape(newMarker['location_name']) || '',\n                    comment = newMarker.comment ?\n                        '<p>' + _.escape(newMarker.comment).replace(/(?:\\r\\n|\\r|\\n)/g, '<br/>') + '</p>'\n                        : '',\n                    phone = newMarker.phone ? '<p>Phone: ' + _.escape(newMarker.phone) + '</p>' : '',\n                    address = newMarker.address ? _.escape(newMarker.address) + '<br/>' : '',\n                    city = _.escape(newMarker.city) || '',\n                    country = newMarker.country ? _.escape(newMarker.country) : '',\n                    state = newMarker.state ? _.escape(newMarker.state) + ' ' : '',\n                    zipCode = newMarker.zipcode ? _.escape(newMarker.zipcode) : '',\n                    cityComma = city !== '' && (zipCode !== '' || state !== '') ? ', ' : '',\n                    lineBreak = city !== '' || zipCode !== '' ? '<br/>' : '',\n                    contentString =\n                        '<div>' +\n                        '<h3><b>' + location + '</b></h3>' +\n                        comment +\n                        phone +\n                        '<p><span>' + address +\n                        city + cityComma + state + zipCode + lineBreak +\n                        country + '</span></p>' +\n                        '</div>',\n                    infowindow = new google.maps.InfoWindow({\n                        content: contentString,\n                        maxWidth: 350\n                    }),\n                    newCreatedMarker = new google.maps.Marker({\n                        map: this.map,\n                        position: getGoogleLatitudeLongitude(newMarker.position),\n                        title: location\n                    });\n\n                    if (location) {\n                        newCreatedMarker.addListener('click', function () {\n                            if (activeInfoWindow) {\n                                activeInfoWindow.close();\n                            }\n\n                            infowindow.open(this.map, newCreatedMarker);\n                            activeInfoWindow = infowindow;\n                        }, this);\n                    }\n\n                    this.markers.push(newCreatedMarker);\n                    this.bounds.push(getGoogleLatitudeLongitude(newMarker.position));\n                }, this);\n            }\n\n            /**\n             * This sets the bounds of the map for multiple locations\n             */\n            if (this.bounds.length > 1) {\n                this.bounds.forEach(function (bound) {\n                    latitudeLongitudeBounds.extend(bound);\n                });\n                this.map.fitBounds(latitudeLongitudeBounds);\n            }\n\n            /**\n             * Zoom to 8 if there is only a single location\n             */\n            if (this.bounds.length === 1) {\n                this.map.setCenter(this.bounds[0]);\n                this.map.setZoom(8);\n            }\n        };\n\n        this.setMarkers(markers);\n    };\n});\n","Magento_PageBuilder/js/utils/nesting-widget-dialog.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"jquery\", \"mage/translate\", \"Magento_PageBuilder/js/modal/dismissible-confirm\"], function (_jquery, _translate, _dismissibleConfirm) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Validate inline editor for having nested widget\n   * Creates a dialog and removes inline editor widget if present\n   *\n   * @param {DataStore} dataStore\n   * @param {WysiwygInterface} wysiwyg\n   * @param {string} inlineMessageField\n   * @param {string} linkUrlField\n   */\n  function nestingWidgetDialog(dataStore, wysiwyg, inlineMessageField, linkUrlField) {\n    var dataStoreContent = dataStore.getState();\n    var inlineMessage = dataStoreContent[inlineMessageField];\n    var linkUrl = dataStoreContent[linkUrlField];\n    var widgetRegex = /\\{\\{widget([\\S\\s]*?)\\}\\}/ig;\n    var widgetPlaceholderRegex = /<span.*(class=)(\\\"|\\').*((magento-placeholder).*(magento-widget)|(magento-widget).*(magento-placeholder)).*<\\/span>/igm;\n\n    if (wysiwyg && inlineMessage.match(widgetRegex) && linkUrl && [\"page\", \"product\", \"category\", \"default\"].indexOf(linkUrl.type) !== -1 && linkUrl[linkUrl.type] && linkUrl[linkUrl.type].length !== 0) {\n      var inlineEditor = (0, _jquery)(\"#\" + wysiwyg.elementId);\n      inlineEditor.trigger(\"blur\");\n      (0, _dismissibleConfirm)({\n        actions: {\n          always: function always() {\n            var widgetLessDataStoreMessage = inlineMessage.replace(widgetRegex, \"\");\n            var widgetLessInlineMessage = inlineEditor.html().replace(widgetPlaceholderRegex, \"\");\n            dataStore.set(inlineMessageField, widgetLessDataStoreMessage);\n            inlineEditor.html(widgetLessInlineMessage);\n          }\n        },\n        content: (0, _translate)(\"We are unable to support widget within the content field whilst having a link set on the content type. Please remove the content type link if you'd like to set a widget within the content. We will automatically remove the widget within the content field.\"),\n        // tslint:disable-line:max-line-length\n        title: (0, _translate)(\"Nested widgets are not allowed\"),\n        haveCancelButton: false\n      });\n    }\n  }\n\n  return nestingWidgetDialog;\n});\n//# sourceMappingURL=nesting-widget-dialog.js.map","Magento_PageBuilder/js/utils/string.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Convert from snake case to camel case\n   *\n   * @param {string} currentString\n   * @returns {string}\n   * @api\n   */\n  function fromSnakeToCamelCase(currentString) {\n    var parts = currentString.split(/[_-]/);\n    var newString = \"\";\n\n    for (var i = 1; i < parts.length; i++) {\n      newString += parts[i].charAt(0).toUpperCase() + parts[i].slice(1);\n    }\n\n    return parts[0] + newString;\n  }\n  /**\n   * Convert a camel case string to snake case\n   *\n   * @param currentString\n   */\n\n\n  function fromCamelCaseToDash(currentString) {\n    return currentString.replace(/[A-Z]/g, function (m) {\n      return \"-\" + m.toLowerCase();\n    });\n  }\n\n  return {\n    fromSnakeToCamelCase: fromSnakeToCamelCase,\n    fromCamelCaseToDash: fromCamelCaseToDash\n  };\n});\n//# sourceMappingURL=string.js.map","Magento_PageBuilder/js/utils/create-stylesheet.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Create a stylesheet DOM object from a style block declaration\n   *\n   * @param {StyleBlocks} blocks\n   * @returns {HTMLStyleElement}\n   * @api\n   */\n  function createStyleSheet(blocks) {\n    var style = document.createElement(\"style\");\n    var text = Object.keys(blocks).map(function (selector) {\n      return selector + (\" {\\n\" + processDeclarationBlock(blocks[selector]) + \"\\n}\");\n    }).join(\"\\n\");\n    style.setAttribute(\"type\", \"text/css\");\n    style.appendChild(document.createTextNode(text));\n    return style;\n  }\n  /**\n   * Process a declaration block from the rule set\n   *\n   * @param {StyleBlock} block\n   * @returns {string}\n   */\n\n\n  function processDeclarationBlock(block) {\n    return Object.keys(block).map(function (property) {\n      return processDeclaration(property, block[property]);\n    }).join(\"\\n\");\n  }\n  /**\n   * Process a declaration, creating the property: value syntax\n   *\n   * @param {string} property\n   * @param {string | number} value\n   * @returns {string}\n   */\n\n\n  function processDeclaration(property, value) {\n    return hyphenate(property) + (\": \" + value + \";\");\n  }\n  /**\n   * Hyphenate style property, from textAlign to text-align\n   *\n   * @param {string} property\n   * @returns {string}\n   */\n\n\n  function hyphenate(property) {\n    return property.replace(/[A-Z]/g, function (match) {\n      return \"-\" + match.toLowerCase();\n    });\n  }\n\n  return {\n    createStyleSheet: createStyleSheet\n  };\n});\n//# sourceMappingURL=create-stylesheet.js.map","Magento_PageBuilder/js/utils/directives.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"Magento_PageBuilder/js/config\"], function (_config) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * MIME type to use in place of the image\n   *\n   * @type {string}\n   */\n  var mimeType = \"text/magento-directive\";\n  /**\n   * Determine if a URL is a directive of our type\n   *\n   * @param {string} url\n   * @returns {boolean}\n   * @api\n   */\n\n  function isDirectiveDataUrl(url) {\n    return url.indexOf(\"data:\" + mimeType) === 0;\n  }\n  /**\n   * Convert a directive into our data URI\n   *\n   * @param {string} directive\n   * @returns {string}\n   * @api\n   */\n\n\n  function toDataUrl(directive) {\n    return \"data:\" + mimeType + \",\" + encodeURIComponent(directive);\n  }\n  /**\n   * Convert a URI to it's directive equivalent\n   *\n   * @param {string} url\n   * @returns {string}\n   * @api\n   */\n\n\n  function fromDataUrl(url) {\n    if (!isDirectiveDataUrl(url)) {\n      throw Error(url + \" is not a magento directive data url\");\n    }\n\n    return decodeURIComponent(url.split(mimeType + \",\")[1]);\n  }\n  /**\n   * Decode all data URIs present in a string\n   *\n   * @param {string} str\n   * @returns {string}\n   * @api\n   */\n\n\n  function decodeAllDataUrlsInString(str) {\n    return str.replace(new RegExp(\"url\\\\s*\\\\(\\\\s*(?:&quot;|\\'|\\\")?(data:\" + mimeType + \",.+?)(?:&quot;|\\'|\\\")?\\\\s*\\\\)\", \"g\"), function (match, url) {\n      return \"url(\\'\" + fromDataUrl(url) + \"\\')\";\n    });\n  }\n  /**\n   * Retrieve the image URL with directive\n   *\n   * @param {Array} image\n   * @returns {string}\n   * @api\n   */\n\n\n  function getImageUrl(image) {\n    var imageUrl = image[0].url;\n    var mediaPath = imageUrl.split(_config.getConfig(\"media_url\"));\n    return \"{{media url=\" + mediaPath[1] + \"}}\";\n  }\n  /**\n   * Remove quotes in media directives, {{media url=\"wysiwyg/image.png\"}} convert to {{media url=wysiwyg/image.png}}\n   *\n   * @param {string} html\n   * @returns {string}\n   * @api\n   */\n\n\n  function removeQuotesInMediaDirectives(html) {\n    if (!html) {\n      return \"\";\n    }\n\n    var mediaDirectiveRegExp = /\\{\\{\\s*media\\s+url\\s*=\\s*(.*?)\\s*\\}\\}/g;\n    var urlRegExp = /\\{\\{\\s*media\\s+url\\s*=\\s*(.*)\\s*\\}\\}/;\n    var mediaDirectiveMatches = html.match(mediaDirectiveRegExp);\n\n    if (mediaDirectiveMatches) {\n      mediaDirectiveMatches.forEach(function (mediaDirective) {\n        var urlMatches = mediaDirective.match(urlRegExp);\n\n        if (urlMatches && urlMatches[1] !== undefined) {\n          var directiveWithOutQuotes = \"{{media url=\" + urlMatches[1].replace(/(\"|&quot;|\\s)/g, \"\") + \"}}\";\n          html = html.replace(mediaDirective, directiveWithOutQuotes);\n        }\n      });\n    }\n\n    return html;\n  }\n  /**\n   * Replace media directives with actual media URLs\n   *\n   * @param {string} html\n   * @returns {string}\n   * @api\n   */\n\n\n  function convertMediaDirectivesToUrls(html) {\n    if (!html) {\n      return \"\";\n    }\n\n    var mediaDirectiveRegExp = /\\{\\{\\s*media\\s+url\\s*=\\s*\"?[^\"\\s\\}]+\"?\\s*\\}\\}/g;\n    var mediaDirectiveMatches = html.match(mediaDirectiveRegExp);\n\n    if (mediaDirectiveMatches) {\n      mediaDirectiveMatches.forEach(function (mediaDirective) {\n        var urlRegExp = /\\{\\{\\s*media\\s+url\\s*=\\s*(?:\"|&quot;)?(.+)(?=}})\\s*\\}\\}/;\n        var urlMatches = mediaDirective.match(urlRegExp);\n\n        if (urlMatches && typeof urlMatches[1] !== \"undefined\") {\n          html = html.replace(mediaDirective, _config.getConfig(\"media_url\") + urlMatches[1].replace(/\"$/, \"\").replace(/&quot;$/, \"\"));\n        }\n      });\n    }\n\n    return html;\n  }\n  /**\n   * Replace data-src attribute with src.\n   *\n   * @param {string} html\n   * @returns {string}\n   */\n\n\n  function replaceWithSrc(html) {\n    return html.replace(new RegExp(\"data-tmp-src=\\\"\\{\\{\", \"g\"), \"src=\\\"{{\");\n  }\n  /**\n   * Replace src attribute with data-tmp-src.\n   *\n   * @param {string} html\n   * @returns {string}\n   */\n\n\n  function replaceWithDataSrc(html) {\n    return html.replace(new RegExp(\"src=\\\"\\{\\{\", \"g\"), \"data-tmp-src=\\\"{{\");\n  }\n\n  return Object.assign(decodeAllDataUrlsInString, {\n    toDataUrl: toDataUrl,\n    fromDataUrl: fromDataUrl,\n    getImageUrl: getImageUrl,\n    removeQuotesInMediaDirectives: removeQuotesInMediaDirectives,\n    convertMediaDirectivesToUrls: convertMediaDirectivesToUrls,\n    replaceWithSrc: replaceWithSrc,\n    replaceWithDataSrc: replaceWithDataSrc\n  });\n});\n//# sourceMappingURL=directives.js.map","Magento_PageBuilder/js/utils/promise-deferred.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Returns a deferred promise\n   *\n   * @returns {DeferredInterface}\n   * @api\n   */\n  function deferred() {\n    var resolve;\n    var reject;\n    var promise = new Promise(function (promiseResolve, promiseReject) {\n      resolve = promiseResolve;\n      reject = promiseReject;\n    });\n    return {\n      resolve: resolve,\n      reject: reject,\n      promise: promise\n    };\n  }\n\n  return deferred;\n});\n//# sourceMappingURL=promise-deferred.js.map","Magento_PageBuilder/js/utils/text.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  \"use strict\";\n});\n//# sourceMappingURL=text.js.map","Magento_PageBuilder/js/utils/image.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"Magento_PageBuilder/js/config\", \"Magento_PageBuilder/js/utils/directives\", \"Magento_PageBuilder/js/utils/url\"], function (_config, _directives, _url) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Decode image background URL to object\n   *\n   * @param value\n   * @returns {Object}\n   * @api\n   */\n  function decodeUrl(value) {\n    var result = \"\";\n    value = decodeURIComponent(value.replace(window.location.href, \"\"));\n    var regexp = /{{.*\\s*url=\"?(.*\\.([a-z|A-Z]*))\"?\\s*}}/;\n\n    if (regexp.test(value)) {\n      var _regexp$exec = regexp.exec(value),\n          url = _regexp$exec[1],\n          type = _regexp$exec[2];\n\n      var image = {\n        name: url.split(\"/\").pop(),\n        size: 0,\n        type: \"image/\" + type,\n        url: _config.getConfig(\"media_url\") + url\n      };\n      result = [image];\n    }\n\n    return result;\n  }\n  /**\n   * Convert a URL to an image directive\n   *\n   * @param {string} imageUrl\n   * @returns {string}\n   */\n\n\n  function urlToDirective(imageUrl) {\n    var mediaUrl = (0, _url.convertUrlToPathIfOtherUrlIsOnlyAPath)(_config.getConfig(\"media_url\"), imageUrl);\n    var mediaPath = imageUrl.split(mediaUrl);\n    return \"{{media url=\" + mediaPath[1] + \"}}\";\n  }\n  /**\n   * Convert an image URL to a background image data uri\n   *\n   * @param {string} imageUrl\n   * @returns {string}\n   */\n\n\n  function imageToBackgroundImageDataUrl(imageUrl) {\n    return \"url(\\'\" + (0, _directives.toDataUrl)(urlToDirective(imageUrl)) + \"\\')\";\n  }\n\n  return {\n    decodeUrl: decodeUrl,\n    urlToDirective: urlToDirective,\n    imageToBackgroundImageDataUrl: imageToBackgroundImageDataUrl\n  };\n});\n//# sourceMappingURL=image.js.map","Magento_PageBuilder/js/utils/url.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Check for whether url string contains only a path\n   *\n   * @param {String} url\n   * @returns {Boolean}\n   */\n  function isPathOnly(url) {\n    return url.indexOf(\"/\") === 0;\n  }\n  /**\n   * Get the path from a URL\n   *\n   * @param {String} url\n   * @returns {String}\n   */\n\n\n  function getPathFromUrl(url) {\n    var a = document.createElement(\"a\");\n    a.href = url;\n    return a.pathname;\n  }\n  /**\n   * Convert url to path if other url is only a path\n   *\n   * @param {string} url\n   * @param {string} otherUrl\n   * @returns {string}\n   * @api\n   */\n\n\n  function convertUrlToPathIfOtherUrlIsOnlyAPath(url, otherUrl) {\n    return isPathOnly(otherUrl) ? getPathFromUrl(url) : url;\n  }\n\n  return {\n    convertUrlToPathIfOtherUrlIsOnlyAPath: convertUrlToPathIfOtherUrlIsOnlyAPath\n  };\n});\n//# sourceMappingURL=url.js.map","Magento_PageBuilder/js/utils/array.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Move an array item within the current array\n   *\n   * @param array\n   * @param fromIndex\n   * @param toIndex\n   * @returns {Array<any>}\n   */\n  function moveArrayItem(array, fromIndex, toIndex) {\n    array.splice(toIndex, 0, array.splice(fromIndex, 1)[0]);\n    return array;\n  }\n  /**\n   * Move an array item from one array into another\n   *\n   * @param item\n   * @param array\n   * @param toIndex\n   * @returns {Array<any>}\n   */\n\n\n  function moveArrayItemIntoArray(item, array, toIndex) {\n    array.splice(toIndex, 0, item);\n    return array;\n  }\n  /**\n   * Remove an array item\n   *\n   * @param array\n   * @param item\n   * @returns {Array<any>}\n   */\n\n\n  function removeArrayItem(array, item) {\n    var index = array.indexOf(item);\n\n    if (index > -1) {\n      array.splice(index, 1);\n    }\n\n    return array;\n  }\n  /**\n   * Search outwards from an array item until a callback matches\n   *\n   * @author https://github.com/thejameskyle/outward-search\n   *\n   * @param {any[]} items\n   * @param {number} start\n   * @param {(item: any, index: number) => boolean} callback\n   * @returns {any}\n   * @api\n   */\n\n\n  function outwardSearch(items, start, callback) {\n    if (!items.length) {\n      return null;\n    }\n\n    if (start < 0 || start > items.length - 1) {\n      throw new TypeError(\"starting index must be within bounds of array\");\n    }\n\n    var max = items.length - 1;\n    var low = start;\n    var high = start + 1;\n\n    while (true) {\n      var hitMin = low < 0;\n      var hitMax = high > max;\n\n      if (hitMin && hitMax) {\n        break;\n      }\n\n      if (!hitMin) {\n        var _item = items[low];\n        var result = callback(_item, low);\n\n        if (!!result) {\n          return _item;\n        }\n\n        low--;\n      }\n\n      if (!hitMax) {\n        var _item2 = items[high];\n\n        var _result = callback(_item2, high);\n\n        if (!!_result) {\n          return _item2;\n        }\n\n        high++;\n      }\n    }\n\n    return null;\n  }\n\n  return {\n    moveArrayItem: moveArrayItem,\n    moveArrayItemIntoArray: moveArrayItemIntoArray,\n    removeArrayItem: removeArrayItem,\n    outwardSearch: outwardSearch\n  };\n});\n//# sourceMappingURL=array.js.map","Magento_PageBuilder/js/utils/loader.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n  function load(dependencies, factory, onError) {\n    require(dependencies, factory, onError);\n  }\n\n  return load;\n});\n//# sourceMappingURL=loader.js.map","Magento_PageBuilder/js/utils/position-sticky.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Determine if the current browser supports position sticky\n   *\n   * @returns {boolean}\n   */\n  function supportsPositionSticky() {\n    if (!window.getComputedStyle) {\n      return false;\n    }\n\n    var testNode = document.createElement(\"div\");\n    return [\"\", \"-webkit-\", \"-moz-\", \"-ms-\"].some(function (prefix) {\n      try {\n        testNode.style.position = prefix + \"sticky\";\n      } catch (e) {// Fail silently\n      }\n\n      return testNode.style.position !== \"\";\n    });\n  }\n\n  return {\n    supportsPositionSticky: supportsPositionSticky\n  };\n});\n//# sourceMappingURL=position-sticky.js.map","Magento_PageBuilder/js/utils/editor.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"jquery\", \"mage/adminhtml/tools\", \"mage/translate\", \"mageUtils\", \"Magento_PageBuilder/js/config\"], function (_jquery, _tools, _translate, _mageUtils, _config) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Is the inline WYSIWYG supported?\n   */\n  function isWysiwygSupported() {\n    return _config.getConfig(\"can_use_inline_editing_on_stage\");\n  }\n  /**\n   * Encode content for TinyMCE\n   *\n   * @param content\n   */\n\n\n  function encodeContent(content) {\n    if (isWysiwygSupported()) {\n      return convertVariablesToHtmlPreview(convertWidgetsToHtmlPreview(unescapeDoubleQuoteWithinWidgetDirective(removeInvalidPlaceholders(content))));\n    }\n\n    return content;\n  }\n  /**\n   * Prior to parsing the content remove any invalid placeholders within the content\n   *\n   * @param content\n   */\n\n\n  function removeInvalidPlaceholders(content) {\n    if (content.indexOf(\"magento-placeholder\") !== -1) {\n      var html = new DOMParser().parseFromString(content, \"text/html\");\n      var placeholders = html.querySelectorAll(\"span.magento-placeholder\");\n\n      if (placeholders.length > 0) {\n        [].slice.call(placeholders).forEach(function (placeholder) {\n          // If the invalid placeholder contains a directive, let's insert it back where it belongs\n          if (placeholder.innerText.indexOf(\"{{\") !== -1) {\n            placeholder.parentNode.insertBefore(document.createTextNode(placeholder.innerText), placeholder);\n          }\n\n          placeholder.remove();\n        });\n      }\n\n      return html.body.innerHTML;\n    }\n\n    return content;\n  }\n  /**\n   * Convert all variables to their HTML preview counterparts\n   *\n   * Re-implements logic from lib/web/mage/adminhtml/wysiwyg/tiny_mce/plugins/magentovariable/editor_plugin.js to parse\n   * and replace the variables within the content.\n   *\n   * @param content\n   */\n\n\n  function convertVariablesToHtmlPreview(content) {\n    var config = _config.getConfig(\"tinymce\").variables;\n\n    var magentoVariables = JSON.parse(config.placeholders);\n    return content.replace(/{\\{\\s?(?:customVar code=|config path=\\\")([^\\}\\\"]+)[\\\"]?\\s?\\}\\}/ig, function (match, path) {\n      var id = btoa(path).replace(/\\+/g, \":\").replace(/\\//g, \"_\").replace(/=/g, \"-\");\n      var placeholder = (0, _jquery)(\"<span />\").addClass(\"magento-variable\").addClass(\"magento-placeholder\").addClass(\"mceNonEditable\").prop(\"id\", id).prop(\"contentEditable\", \"false\");\n\n      if (magentoVariables[path].variable_type === \"custom\") {\n        placeholder.addClass(\"magento-custom-var\");\n      }\n\n      var variableType = magentoVariables[path].variable_type;\n\n      if (magentoVariables[path] && (variableType === \"default\" || variableType === \"custom\")) {\n        placeholder.text(magentoVariables[path].variable_name);\n      } else {\n        // If we're unable to find the placeholder we need to attach an error class\n        placeholder.addClass(\"magento-placeholder-error\");\n        placeholder.text(variableType === \"custom\" ? path : (0, _translate)(\"Not Found\"));\n      }\n\n      return placeholder[0].outerHTML;\n    });\n  }\n  /**\n   * Convert widgets within content to their HTML counterparts\n   *\n   * @param content\n   */\n\n\n  function convertWidgetsToHtmlPreview(content) {\n    var config = _config.getConfig(\"tinymce\").widgets;\n\n    return content.replace(/\\{\\{widget([\\S\\s]*?)\\}\\}/ig, function (match, widgetBody) {\n      var attributes = parseAttributesString(widgetBody);\n      var imageSrc;\n\n      if (attributes.type) {\n        var placeholder = (0, _jquery)(\"<span />\").addClass(\"magento-placeholder\").addClass(\"magento-widget\").addClass(\"mceNonEditable\").prop(\"id\", _mageUtils.uniqueid()).prop(\"contentEditable\", \"false\");\n        attributes.type = attributes.type.replace(/\\\\\\\\/g, \"\\\\\");\n        imageSrc = config.placeholders[attributes.type];\n\n        if (!imageSrc) {\n          imageSrc = config.error_image_url;\n          placeholder.addClass(\"magento-placeholder-error\");\n        }\n\n        var image = (0, _jquery)(\"<img />\").prop(\"id\", window.Base64.idEncode(match)).prop(\"src\", imageSrc);\n        placeholder.append(image);\n        var widgetType = \"\";\n\n        if (config.types[attributes.type]) {\n          widgetType += config.types[attributes.type];\n        }\n\n        placeholder.append((0, _jquery)(document.createTextNode(widgetType)));\n        return placeholder[0].outerHTML;\n      }\n    });\n  }\n  /**\n   * Parse attributes into a string\n   *\n   * @param attributes\n   */\n\n\n  function parseAttributesString(attributes) {\n    var result = {};\n    attributes.replace(/(\\w+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|([^>\\s]+)))?/g, function (match, key, value) {\n      result[key] = value ? value.replace(/&quote;/g, \"\\\"\") : value;\n      return \"\";\n    });\n    return result;\n  }\n  /**\n   * Lock all image sizes before initializing TinyMCE to avoid content jumps\n   *\n   * @param element\n   */\n\n\n  function lockImageSize(element) {\n    [].slice.call(element.querySelectorAll(\"img\")).forEach(function (image) {\n      if (image.style.width.length === 0) {\n        image.style.width = /^\\d+$/.test(image.getAttribute(\"width\")) ? image.getAttribute(\"width\") + \"px\" : image.getAttribute(\"width\");\n        image.setAttribute(\"data-width-locked\", \"true\");\n      }\n\n      if (image.style.height.length === 0) {\n        image.style.height = /^\\d+$/.test(image.getAttribute(\"height\")) ? image.getAttribute(\"height\") + \"px\" : image.getAttribute(\"height\");\n        image.setAttribute(\"data-height-locked\", \"true\");\n      }\n    });\n  }\n  /**\n   * Reverse forced image size after TinyMCE is finished initializing\n   *\n   * @param element\n   */\n\n\n  function unlockImageSize(element) {\n    [].slice.call(element.querySelectorAll(\"img\")).forEach(function (image) {\n      if (image.getAttribute(\"data-width-locked\")) {\n        image.style.width = null;\n        image.removeAttribute(\"data-width-locked\");\n      }\n\n      if (image.getAttribute(\"data-height-locked\")) {\n        image.style.height = null;\n        image.removeAttribute(\"data-height-locked\");\n      }\n    });\n  }\n  /**\n   * Create a bookmark within the content to be restored later\n   */\n\n\n  function createBookmark(event) {\n    var wrapperElement = (0, _jquery)(event.target).parents(\".inline-wysiwyg\");\n    /**\n     * Create an element bookmark\n     *\n     * @param element\n     */\n\n    var createElementBookmark = function createElementBookmark(element) {\n      return {\n        name: element.nodeName,\n        index: findNodeIndex(wrapperElement[0], element.nodeName, element)\n      };\n    }; // Handle direct clicks onto an IMG\n\n\n    if (event.target.nodeName === \"IMG\") {\n      return createElementBookmark(event.target);\n    }\n\n    if (window.getSelection) {\n      var selection = window.getSelection();\n\n      var id = _mageUtils.uniqueid();\n\n      if (selection.getRangeAt && selection.rangeCount) {\n        var range = normalizeTableCellSelection(selection.getRangeAt(0).cloneRange()); // Determine if the current node is an image or span that we want to select instead of text\n\n        var currentNode = range.startContainer;\n\n        if (currentNode.nodeType === Node.ELEMENT_NODE && (currentNode.nodeName === \"IMG\" || currentNode.nodeName === \"SPAN\" && currentNode.classList.contains(\"magento-placeholder\"))) {\n          return createElementBookmark(currentNode);\n        } // Also check if the direct parent is either of these\n\n\n        var parentNode = range.startContainer.parentNode;\n\n        if (parentNode.nodeName === \"IMG\" || parentNode.nodeName === \"SPAN\" && parentNode.classList.contains(\"magento-placeholder\")) {\n          return createElementBookmark(parentNode);\n        }\n\n        if (!range.collapsed) {\n          range.collapse(false);\n          var endBookmarkNode = createBookmarkSpan(id + \"_end\");\n          range.insertNode(endBookmarkNode);\n        }\n\n        var range2 = normalizeTableCellSelection(selection.getRangeAt(0));\n        range2.collapse(true);\n        var startBookmarkNode = createBookmarkSpan(id + \"_start\");\n        range2.insertNode(startBookmarkNode);\n        return {\n          id: id\n        };\n      }\n    }\n\n    return null;\n  }\n  /**\n   * Move the cursor to our new bookmark\n   *\n   * @param bookmark\n   */\n\n\n  function moveToBookmark(bookmark) {\n    window.tinymce.activeEditor.selection.moveToBookmark(bookmark);\n  }\n  /**\n   * Retrieve active editor from TinyMCE\n   */\n\n\n  function getActiveEditor() {\n    return window.tinymce.activeEditor;\n  }\n  /**\n   * Create a bookmark span for the selection\n   *\n   * @param id\n   */\n\n\n  function createBookmarkSpan(id) {\n    var bookmark = document.createElement(\"span\");\n    bookmark.setAttribute(\"data-mce-type\", \"bookmark\");\n    bookmark.id = id;\n    bookmark.style.overflow = \"hidden\";\n    bookmark.style.lineHeight = \"0px\";\n    return bookmark;\n  }\n  /**\n   * Find the index of an element within a wrapper\n   *\n   * @param wrapperElement\n   * @param name\n   * @param element\n   */\n\n\n  function findNodeIndex(wrapperElement, name, element) {\n    var selector = name.toLowerCase() + ':not([data-mce-bogus=\"all\"])'; // If there is no ID on the element add a unique ID so we can efficiently find it\n\n    if (!element.id) {\n      element.id = _mageUtils.uniqueid();\n    }\n\n    return (0, _jquery)(wrapperElement).find(selector).toArray().findIndex(function (node) {\n      return node.id === element.id;\n    });\n  }\n  /**\n   * Get a node by index within a wrapper\n   *\n   * @param wrapperElement\n   * @param name\n   * @param index\n   */\n\n\n  function getNodeByIndex(wrapperElement, name, index) {\n    var selector = name.toLowerCase() + ':not([data-mce-bogus=\"all\"])';\n    return (0, _jquery)(wrapperElement).find(selector).get(index);\n  }\n  /**\n   * Create a double click event that works in all browsers\n   */\n\n\n  function createDoubleClickEvent() {\n    try {\n      return new MouseEvent(\"dblclick\", {\n        view: window,\n        bubbles: true,\n        cancelable: true\n      });\n    } catch (e) {\n      var dblClickEvent = document.createEvent(\"MouseEvent\");\n      dblClickEvent.initMouseEvent(\"dblclick\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n      return dblClickEvent;\n    }\n  }\n  /**\n   * Replace all desktop styles that left unprocessed back to style element to prevent data corruption.\n   */\n\n\n  function processInlineStyles(html) {\n    var name = _config.getConfig(\"defaultViewport\");\n\n    var searchPattern = new RegExp(\"data-\" + name + \"-style=\", \"g\");\n    return html.replace(searchPattern, \"style=\");\n  }\n  /**\n   * Move the end point of a range to handle tables\n   *\n   * @param range\n   * @param start\n   */\n\n\n  function moveEndPoint(range, start) {\n    var container;\n    var offset;\n    var childNodes;\n\n    if (start) {\n      container = range.startContainer;\n      offset = range.startOffset;\n    } else {\n      container = range.endContainer;\n      offset = range.endOffset;\n    }\n\n    if (container.nodeType === Node.ELEMENT_NODE && container.nodeName === \"TR\") {\n      childNodes = container.childNodes;\n      container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n\n      if (container) {\n        offset = start ? 0 : container.childNodes.length;\n\n        if (start) {\n          range.setStart(container, offset);\n        } else {\n          range.setEnd(container, offset);\n        }\n      }\n    }\n  }\n  /**\n   * Normalize the table sell selection within a range to better handle selections being inside of tables\n   *\n   * @param range\n   */\n\n\n  function normalizeTableCellSelection(range) {\n    moveEndPoint(range, true);\n    moveEndPoint(range, false);\n    return range;\n  }\n  /**\n   * Convert HTML encoded double quote to double quote with backslash within widget directives\n   *\n   * @param {string} content\n   * @returns {string}\n   */\n\n\n  function escapeDoubleQuoteWithinWidgetDirective(content) {\n    return content.replace(/\\{\\{widget[\\S\\s]*?\\}\\}/ig, function (match) {\n      return match.replace(/&quot;/g, \"\\\\\\\"\");\n    });\n  }\n  /**\n   * Convert double quote with backslash to HTML encoded double quote within widget directives\n   *\n   * @param {string} content\n   * @returns {string}\n   */\n\n\n  function unescapeDoubleQuoteWithinWidgetDirective(content) {\n    return content.replace(/\\{\\{widget[\\S\\s]*?\\}\\}/ig, function (match) {\n      return match.replace(/\\\\+\"/g, \"&quot;\");\n    });\n  }\n  /**\n   * Convert double quote to single quote within magento variable directives\n   *\n   * @param {string} content\n   * @returns {string}\n   */\n\n\n  function replaceDoubleQuoteWithSingleQuoteWithinVariableDirective(content) {\n    // Find html elements which attributes contain magento variables directives\n    return content.replace(/<([a-z0-9\\-\\_]+)([^>]+?[a-z0-9\\-\\_]+=\"[^\"]*?\\{\\{.+?\\}\\}.*?\".*?)>/gi, function (match1, tag, attributes) {\n      // Replace double quote with single quote within magento variable directive\n      var sanitizedAttributes = attributes.replace(/\\{\\{[^\\{\\}]+\\}\\}/gi, function (match2) {\n        return match2.replace(/\"/g, \"'\");\n      });\n      return \"<\" + tag + sanitizedAttributes + \">\";\n    });\n  }\n\n  return {\n    isWysiwygSupported: isWysiwygSupported,\n    encodeContent: encodeContent,\n    parseAttributesString: parseAttributesString,\n    lockImageSize: lockImageSize,\n    unlockImageSize: unlockImageSize,\n    createBookmark: createBookmark,\n    moveToBookmark: moveToBookmark,\n    getActiveEditor: getActiveEditor,\n    findNodeIndex: findNodeIndex,\n    getNodeByIndex: getNodeByIndex,\n    createDoubleClickEvent: createDoubleClickEvent,\n    processInlineStyles: processInlineStyles,\n    escapeDoubleQuoteWithinWidgetDirective: escapeDoubleQuoteWithinWidgetDirective,\n    unescapeDoubleQuoteWithinWidgetDirective: unescapeDoubleQuoteWithinWidgetDirective,\n    replaceDoubleQuoteWithSingleQuoteWithinVariableDirective: replaceDoubleQuoteWithSingleQuoteWithinVariableDirective\n  };\n});\n//# sourceMappingURL=editor.js.map","Magento_PageBuilder/js/utils/nesting-link-dialog.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"jquery\", \"mage/translate\", \"Magento_PageBuilder/js/modal/dismissible-confirm\"], function (_jquery, _translate, _dismissibleConfirm) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Validate inline editor for having nested link\n   * Creates a dialog and removes inline editor link if present\n   *\n   * @param {DataStore} dataStore\n   * @param {WysiwygInterface} wysiwyg\n   * @param {string} inlineMessageField\n   * @param {string} linkUrlField\n   */\n  function nestingLinkDialog(dataStore, wysiwyg, inlineMessageField, linkUrlField) {\n    var dataStoreContent = dataStore.getState();\n    var inlineMessage = dataStoreContent[inlineMessageField];\n    var linkUrl = dataStoreContent[linkUrlField];\n    var aLinkRegex = /(<a[\\s]+[^>]+).+(?=<\\/a>)<\\/a>/igm;\n\n    if (wysiwyg && inlineMessage.match(aLinkRegex) && linkUrl && [\"page\", \"product\", \"category\", \"default\"].indexOf(linkUrl.type) !== -1 && linkUrl[linkUrl.type] && linkUrl[linkUrl.type].length !== 0) {\n      var inlineEditor = (0, _jquery)(\"#\" + wysiwyg.elementId);\n      inlineEditor.trigger(\"blur\");\n      (0, _dismissibleConfirm)({\n        actions: {\n          always: function always() {\n            var anchorLessDataStoreMessage = inlineMessage.replace(aLinkRegex, \"\");\n            var anchorLessInlineMessage = inlineEditor.html().replace(aLinkRegex, \"\");\n            dataStore.set(inlineMessageField, anchorLessDataStoreMessage);\n            inlineEditor.html(anchorLessInlineMessage);\n          }\n        },\n        content: (0, _translate)(\"We are unable to support links within the content field whilst having a link set on the content type. Please remove the content type link if you'd like to set a link within the content. We will automatically remove the links within the content field.\"),\n        // tslint:disable-line:max-line-length\n        title: (0, _translate)(\"Nested links are not allowed\"),\n        haveCancelButton: false\n      });\n    }\n  }\n\n  return nestingLinkDialog;\n});\n//# sourceMappingURL=nesting-link-dialog.js.map","Magento_PageBuilder/js/utils/object.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"object-path\"], function (_objectPath) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Retrieve a value from an object via a path\n   *\n   * @param {object} object\n   * @param {string} path\n   * @param {TResult} defaultValue\n   * @returns {TResult}\n   */\n  function get(object, path, defaultValue) {\n    return _objectPath.get(object, path, defaultValue);\n  }\n  /**\n   * Set a value within an object via a path\n   *\n   * @param {object} object\n   * @param {string} path\n   * @param {TResult} value\n   * @returns {TResult | undefined}\n   */\n\n\n  function set(object, path, value) {\n    return _objectPath.set(object, path, value);\n  }\n\n  return {\n    get: get,\n    set: set\n  };\n});\n//# sourceMappingURL=object.js.map","Magento_PageBuilder/js/utils/pagebuilder-header-height.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"jquery\"], function (_jquery) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Checks if PageBuilder has header and returns it's height\n   *\n   * @param {string} stageId\n   * @param {string} stageWrapper\n   * @param {string} pageBuilderHeader\n   * @returns {number}\n   */\n  function pageBuilderHeaderHeight(stageId, stageWrapper, pageBuilderHeader) {\n    if (stageWrapper === void 0) {\n      stageWrapper = \".pagebuilder-stage-wrapper\";\n    }\n\n    if (pageBuilderHeader === void 0) {\n      pageBuilderHeader = \".pagebuilder-header\";\n    }\n\n    var $stageWrapper = (0, _jquery)(\"#\" + stageId).closest(stageWrapper);\n    var $pageBuilderHeader = $stageWrapper.find(pageBuilderHeader);\n    return !!$pageBuilderHeader.length ? $pageBuilderHeader.height() : 0;\n  }\n\n  return pageBuilderHeaderHeight;\n});\n//# sourceMappingURL=pagebuilder-header-height.js.map","Magento_PageBuilder/js/utils/delay-until.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Delay until a condition is met\n   *\n   * @param {() => void} callback\n   * @param {() => boolean} condition\n   * @param {number} interval\n   */\n  function delayUntil(callback, condition, interval) {\n    if (interval === void 0) {\n      interval = 50;\n    }\n\n    var delayInterval = setInterval(function () {\n      if (condition()) {\n        clearInterval(delayInterval);\n        callback();\n      }\n    }, interval);\n  }\n\n  return delayUntil;\n});\n//# sourceMappingURL=delay-until.js.map","Magento_PageBuilder/js/utils/check-stage-full-screen.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"jquery\"], function (_jquery) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Check if stage full screen mode is active\n   *\n   * @param {string} stageId\n   * @returns {boolean}\n   */\n  function checkStageFullScreen(stageId) {\n    var $stage = (0, _jquery)(\"#\" + stageId);\n    var $fullScreenStageWrapper = $stage.closest(\".stage-full-screen\");\n    return !!$fullScreenStageWrapper.length;\n  }\n\n  return checkStageFullScreen;\n});\n//# sourceMappingURL=check-stage-full-screen.js.map","Magento_PageBuilder/js/system/config/enable-field.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n    'jquery',\n    'mage/translate',\n    'Magento_Ui/js/modal/confirm',\n    'domReady!'\n], function ($, $t, confirm) {\n    'use strict';\n\n    return function (config, enableSelectEl) {\n\n        var $enableSelectEl = $(enableSelectEl),\n            isEnabledInDatabase = !!parseInt($enableSelectEl.val(), 10);\n\n        $enableSelectEl.on('change', function () {\n            var userIsDisabling = !parseInt($enableSelectEl.val(), 10);\n\n            if (!isEnabledInDatabase || !userIsDisabling) {\n                return;\n            }\n\n            confirm({\n                title: $t(config.modalTitleText),\n                content: $t(config.modalContentBody),\n                buttons: [{\n                    text: $t('Cancel'),\n                    class: 'action-secondary action-dismiss action-pagebuilder-cancel',\n\n                    /**\n                     * Close modal and trigger 'cancel' action on click\n                     */\n                    click: function (event) {\n                        this.closeModal(event);\n                    }\n                }, {\n                    text: $t('Turn Off'),\n                    class: 'action-primary action-accept',\n\n                    /**\n                     * Close modal and trigger 'confirm' action on click\n                     */\n                    click: function (event) {\n                        this.closeModal(event, true);\n                    }\n                }],\n                actions: {\n\n                    /**\n                     * Revert back to original Enabled setting\n                     */\n                    cancel: function () {\n                        $enableSelectEl.val(Number(true));\n                    }\n                }\n            });\n        });\n    };\n});\n","Magento_PageBuilder/js/system/config/validator-rules-mixin.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n    'jquery'\n], function ($) {\n    'use strict';\n\n    return function (target) {\n        $.validator.addMethod(\n            'validate-google-map-style',\n            function (value) {\n                if ($.mage.isEmptyNoTrim(value)) {\n                    return true;\n                }\n\n                try {\n                    JSON.parse(value);\n                } catch (e) {\n                    return false;\n                }\n\n                return true;\n            },\n            $.mage.__('Google Maps Style JSON is invalid. Please paste the valid JSON style.')\n        );\n\n        $.validator.addMethod(\n            'validate-greater-than-one',\n            function (value) {\n                return !(value <= 1);\n            },\n            $.mage.__('Please enter a number 2 or greater in this field.')\n        );\n\n        $.validator.addMethod(\n            'validate-default-grid-size',\n            function (value) {\n                return !(parseInt(value, 10) >\n                    parseInt($('[name=\"groups[pagebuilder][fields][column_grid_max][value]\"]').val(), 10)\n                );\n            },\n            $.mage.__('Default grid size must be less than the maximum grid size.')\n        );\n\n        return target;\n    };\n});\n","Magento_PageBuilder/js/system/config/switch-attribute-type.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n    'jquery',\n    'mage/translate',\n    'Magento_Ui/js/modal/confirm',\n    'domReady!'\n], function ($, $t, confirm) {\n    'use strict';\n\n    return function (config, attributeDropDownEl) {\n\n        var $attributeDropDownEl = $(attributeDropDownEl),\n            previousOption = '';\n\n        $attributeDropDownEl.on('focus', function () {\n            // Store the current value on focus and on change\n            previousOption = this.value;\n        });\n\n        $attributeDropDownEl.on('change', function () {\n\n            if (attributeDropDownEl.options.length > 3 ||\n                this.value === 'pagebuilder' ||\n                previousOption !== 'pagebuilder'\n            ) {\n                return;\n            }\n\n            confirm({\n                title: $t(config.modalTitleText),\n                content: $t(config.modalContentBody),\n                buttons: [{\n                    text: $t('Cancel'),\n                    class: 'action-secondary action-dismiss action-pagebuilder-cancel',\n\n                    /**\n                     * Close modal and trigger 'cancel' action on click\n                     */\n                    click: function (event) {\n                        this.closeModal(event);\n                    }\n                }, {\n                    text: $t('Change Input Type'),\n                    class: 'action-primary action-accept',\n\n                    /**\n                     * Close modal and trigger 'confirm' action on click\n                     */\n                    click: function (event) {\n                        this.closeModal(event, true);\n                    }\n                }],\n                actions: {\n\n                    /**\n                     * Revert back to 'pagebuilder' setting\n                     */\n                    cancel: function () {\n                        $attributeDropDownEl.val('pagebuilder');\n                        $attributeDropDownEl.trigger('change');\n                    }\n                }\n            });\n        });\n    };\n});\n","Magento_PageBuilder/js/system/config/google-maps-api-key-validator.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine(['jquery'], function ($) {\n    'use strict';\n\n    /**\n     * Initialize click and input events to handle validation\n     *\n     * @param {Object} config\n     * @param {HTMLElement} el\n     */\n    var GoogleMapsApiKeyValidator = function (config, el) {\n        var sourceElement = $('#' + config.sourceField),\n            initialValue = sourceElement.val(),\n            resultElement = $('#' + config.elementId + ' > .result');\n\n        if (initialValue) {\n            $(el).attr('disabled', false);\n        }\n\n        $(el).on('click', function () {\n            var resultText = config.invalidLabel,\n                resultIcon = 'icon-admin-pagebuilder-error',\n                resultHtml;\n\n            $.ajax({\n                url: config.validateUrl,\n                showLoader: true,\n                data: {\n                    googleMapsApiKey: sourceElement.val()\n                }\n            }).done(function (data) {\n                if (data.success) {\n                    resultText = config.validLabel;\n                    resultIcon = 'icon-admin-pagebuilder-success';\n                }\n\n                resultHtml = '<i class=\"' + resultIcon + '\"></i> ' + resultText;\n                resultElement.html(resultHtml);\n            });\n        });\n\n        sourceElement.on('keyup', function (event) {\n            var elementValue = event.currentTarget.value,\n                buttonText = config.buttonLabel;\n\n            $(el).attr('disabled', !elementValue);\n            resultElement.html(buttonText);\n        });\n    };\n\n    return GoogleMapsApiKeyValidator;\n});\n","Magento_PageBuilder/js/wysiwyg/factory.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([\"jquery\", \"Magento_PageBuilder/js/utils/loader\"], function (_jquery, _loader) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * @param {String} contentTypeId The ID in the registry of the content type.\n   * @param {String} elementId The ID of the editor element in the DOM.\n   * @param {String} contentTypeName The type of content type this editor will be used in. E.g. \"banner\".\n   * @param {AdditionalDataConfigInterface} config The configuration for the wysiwyg.\n   * @param {DataStore} dataStore The datastore to store the content in.\n   * @param {String} fieldName The key in the provided datastore to set the data.\n   * @param {String} stageId The ID in the registry of the stage containing the content type.\n   * @returns {Wysiwyg}\n   */\n  function create(contentTypeId, elementId, contentTypeName, config, dataStore, fieldName, stageId) {\n    config = _jquery.extend(true, {}, config);\n    return new Promise(function (resolve) {\n      (0, _loader)([config.adapter_config.component], function (WysiwygInstance) {\n        new Promise(function (configResolve) {\n          if (config.adapter_config.config_modifiers && config.adapter_config.config_modifiers[contentTypeName]) {\n            (0, _loader)([config.adapter_config.config_modifiers[contentTypeName]], function (ConfigModifierType) {\n              var modifier = new ConfigModifierType(); // Allow dynamic settings to be set before editor is initialized\n\n              modifier.modify(contentTypeId, config);\n              configResolve();\n            });\n          } else {\n            configResolve();\n          }\n        }).then(function () {\n          // Instantiate the component\n          var wysiwyg = new WysiwygInstance(contentTypeId, elementId, config, dataStore, fieldName, stageId);\n\n          if (config.adapter_config.component_initializers && config.adapter_config.component_initializers[contentTypeName]) {\n            (0, _loader)([config.adapter_config.component_initializers[contentTypeName]], function (InitializerType) {\n              var initializer = new InitializerType(); // Allow dynamic bindings from configuration such as events from the editor\n\n              initializer.initialize(wysiwyg);\n              resolve(wysiwyg);\n            });\n          } else {\n            resolve(wysiwyg);\n          }\n        });\n      });\n    });\n  }\n\n  return create;\n});\n//# sourceMappingURL=factory.js.map","Magento_PageBuilder/js/wysiwyg/component-initializer-interface.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  \"use strict\";\n});\n//# sourceMappingURL=component-initializer-interface.js.map","Magento_PageBuilder/js/wysiwyg/config-modifier-interface.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  \"use strict\";\n});\n//# sourceMappingURL=config-modifier-interface.js.map","Magento_PageBuilder/js/wysiwyg/wysiwyg-interface.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  \"use strict\";\n});\n//# sourceMappingURL=wysiwyg-interface.js.map","Magento_PageBuilder/js/wysiwyg/tinymce.js":"/*eslint-disable */\n/* jscs:disable */\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\ndefine([\"jquery\", \"mage/adminhtml/wysiwyg/events\", \"mage/adminhtml/wysiwyg/tiny_mce/setup\", \"Magento_PageBuilder/js/events\", \"underscore\", \"Magento_PageBuilder/js/utils/check-stage-full-screen\", \"Magento_PageBuilder/js/utils/delay-until\", \"Magento_PageBuilder/js/utils/pagebuilder-header-height\"], function (_jquery, _events, _setup, _events2, _underscore, _checkStageFullScreen, _delayUntil, _pagebuilderHeaderHeight) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Inline editing wysiwyg component\n   *\n   * @api\n   */\n  var Wysiwyg = /*#__PURE__*/function () {\n    \"use strict\";\n\n    /**\n     * The id of the editor element\n     */\n\n    /**\n     * The supplied wysiwyg configuration\n     */\n\n    /**\n     * Id of content type\n     */\n\n    /**\n     * Id of the stage\n     */\n\n    /**\n     * Wysiwyg adapter instance\n     */\n\n    /**\n     * Content type's data store\n     */\n\n    /**\n     * Field name in data store reflecting value held in wysiwyg\n     */\n\n    /**\n     * Create a debounce to save the content into the data store\n     */\n\n    /**\n     * @param {String} contentTypeId The ID in the registry of the content type.\n     * @param {String} elementId The ID of the editor element in the DOM.\n     * @param {AdditionalDataConfigInterface} config The configuration for the wysiwyg.\n     * @param {DataStore} dataStore The datastore to store the content in.\n     * @param {String} fieldName The key in the provided datastore to set the data.\n     * @param {String} stageId The ID in the registry of the stage containing the content type.\n     */\n    function Wysiwyg(contentTypeId, elementId, config, dataStore, fieldName, stageId) {\n      this.saveContentDebounce = _underscore.debounce(this.saveContentFromWysiwygToDataStore.bind(this), 500);\n      this.contentTypeId = contentTypeId;\n      this.elementId = elementId;\n      this.fieldName = fieldName;\n      this.config = config;\n      this.dataStore = dataStore;\n      this.stageId = stageId;\n\n      if (this.config.adapter_config.mode === \"inline\") {\n        /**\n         * Don't include content_css within the inline mode of TinyMCE, if any stylesheets are included here they're\n         * appended to the head of the main page, and thus cause other styles to be modified.\n         *\n         * The styles for typography in the inline editor are scoped within _typography.less\n         */\n        this.config.adapter.tinymce.content_css = [];\n      }\n\n      var wysiwygSetup = new _setup(this.elementId, this.config.adapter);\n      wysiwygSetup.setup(this.config.adapter_config.mode);\n      this.wysiwygAdapter = wysiwygSetup.wysiwygInstance;\n\n      if (this.config.adapter_config.mode === \"inline\") {\n        this.wysiwygAdapter.eventBus.attachEventHandler(_events.afterFocus, this.onFocus.bind(this));\n        this.wysiwygAdapter.eventBus.attachEventHandler(_events.afterBlur, this.onBlur.bind(this));\n      } // Update content in our data store after our stage preview wysiwyg gets updated\n\n\n      this.wysiwygAdapter.eventBus.attachEventHandler(_events.afterChangeContent, this.onChangeContent.bind(this)); // Update content in our stage preview wysiwyg after its slideout counterpart gets updated\n\n      _events2.on(\"form:\" + this.contentTypeId + \":saveAfter\", this.setContentFromDataStoreToWysiwyg.bind(this));\n\n      _events2.on(\"stage:\" + this.stageId + \":fullScreenModeChangeAfter\", this.toggleFullScreen.bind(this));\n    }\n    /**\n     * Hide TinyMce inline toolbar options after fullscreen exit\n     */\n\n\n    var _proto = Wysiwyg.prototype;\n\n    _proto.toggleFullScreen = function toggleFullScreen() {\n      var _this = this;\n\n      var $editor = (0, _jquery)(\"#\" + this.elementId); // wait for fullscreen to close\n\n      _underscore.defer(function () {\n        if (!(0, _checkStageFullScreen)(_this.stageId) && _this.config.adapter_config.mode === \"inline\" && $editor.hasClass(\"mce-edit-focus\")) {\n          $editor.removeClass(\"mce-edit-focus\");\n\n          _this.onBlur();\n        }\n      });\n    }\n    /**\n     * @returns {WysiwygInstanceInterface}\n     */\n    ;\n\n    _proto.getAdapter = function getAdapter() {\n      return this.wysiwygAdapter;\n    }\n    /**\n     * Called for the onFocus event\n     */\n    ;\n\n    _proto.onFocus = function onFocus() {\n      var _this2 = this;\n\n      this.getFixedToolbarContainer().addClass(\"pagebuilder-toolbar-active\");\n\n      _events2.trigger(\"stage:interactionStart\");\n\n      var element = document.querySelector(\"#\" + this.elementId);\n\n      if (!element) {\n        return;\n      } // Wait for everything else to finish\n\n\n      _underscore.defer(function () {\n        return (0, _delayUntil)(function () {\n          var $inlineToolbar = _this2.getFixedToolbarContainer().find(\".tox-tinymce-inline\");\n\n          var self = _this2;\n          $inlineToolbar.css(\"min-width\", _this2.config.adapter_config.minToolbarWidth + \"px\");\n\n          _this2.invertInlineEditorToAccommodateOffscreenToolbar(); // Update toolbar when the height changes\n\n\n          _this2.toolbarHeight = $inlineToolbar.height();\n\n          if ($inlineToolbar.length) {\n            _this2.resizeObserver = new ResizeObserver(function (entries) {\n              for (var _iterator = _createForOfIteratorHelperLoose(entries), _step; !(_step = _iterator()).done;) {\n                var entry = _step.value;\n\n                if (entry.target === $inlineToolbar.get(0) && entry.target.clientHeight !== self.toolbarHeight) {\n                  self.invertInlineEditorToAccommodateOffscreenToolbar();\n                  self.toolbarHeight = entry.target.clientHeight;\n                }\n              }\n            });\n\n            _this2.resizeObserver.observe($inlineToolbar.get(0));\n          }\n\n          var dialogContainer = document.querySelector(\"#\" + _this2.elementId + \" ~ .tox-tinymce-aux\");\n\n          if (!!dialogContainer) {\n            dialogContainer.setAttribute(\"data-editor-aux\", _this2.elementId);\n            document.body.appendChild(dialogContainer);\n          }\n        }, function () {\n          return element.classList.contains(\"mce-edit-focus\");\n        }, 10);\n      });\n    }\n    /**\n     * Called for the onChangeContent event\n     */\n    ;\n\n    _proto.onChangeContent = function onChangeContent() {\n      this.saveContentDebounce();\n      this.invertInlineEditorToAccommodateOffscreenToolbar();\n    }\n    /**\n     * Called for the onBlur events\n     */\n    ;\n\n    _proto.onBlur = function onBlur() {\n      this.getFixedToolbarContainer().removeClass(\"pagebuilder-toolbar-active\").find(\".tox-tinymce-inline\").css(\"top\", \"\");\n\n      if (this.resizeObserver) {\n        this.resizeObserver.unobserve(this.getFixedToolbarContainer().find(\".tox-tinymce-inline\").get(0));\n      }\n\n      this.toolbarHeight = 0;\n      var dialogContainer = document.querySelector(\"[data-editor-aux=\" + this.elementId + \"]\");\n\n      if (!!dialogContainer) {\n        dialogContainer.removeAttribute(\"data-editor-aux\");\n        document.querySelector(\"#\" + this.elementId).parentNode.appendChild(dialogContainer);\n      }\n\n      _events2.trigger(\"stage:interactionStop\");\n    }\n    /**\n     * Update content in our data store after our stage preview wysiwyg gets updated\n     */\n    ;\n\n    _proto.saveContentFromWysiwygToDataStore = function saveContentFromWysiwygToDataStore() {\n      this.dataStore.set(this.fieldName, this.getAdapter().getContent());\n    }\n    /**\n     * Update content in our stage wysiwyg after our data store gets updated\n     */\n    ;\n\n    _proto.setContentFromDataStoreToWysiwyg = function setContentFromDataStoreToWysiwyg() {\n      this.getAdapter().setContent(this.dataStore.get(this.fieldName));\n    }\n    /**\n     * Adjust padding on stage if in fullscreen mode to accommodate inline wysiwyg toolbar overflowing fixed viewport\n     */\n    ;\n\n    _proto.invertInlineEditorToAccommodateOffscreenToolbar = function invertInlineEditorToAccommodateOffscreenToolbar() {\n      if (this.config.adapter_config.mode !== \"inline\") {\n        return;\n      }\n\n      var $inlineToolbar = this.getFixedToolbarContainer().find(\".tox-tinymce-inline\");\n\n      if (!$inlineToolbar.length) {\n        return;\n      }\n\n      var inlineWysiwygClientRectTop = this.getFixedToolbarContainer().get(0).getBoundingClientRect().top - (0, _pagebuilderHeaderHeight)(this.stageId);\n\n      if (!(0, _checkStageFullScreen)(this.stageId) || $inlineToolbar.height() < inlineWysiwygClientRectTop) {\n        var extraHeight = 0;\n\n        if ($inlineToolbar.parents(\".pagebuilder-slide[data-appearance='collage-left']\").length || $inlineToolbar.parents(\".pagebuilder-slide[data-appearance='collage-right']\").length || $inlineToolbar.parents(\".pagebuilder-slide[data-appearance='collage-centered']\").length) {\n          extraHeight = 29;\n        }\n\n        $inlineToolbar.css(\"top\", ($inlineToolbar.height() - extraHeight) * -1);\n        return;\n      }\n\n      $inlineToolbar.css(\"top\", \"\");\n    }\n    /**\n     * Get fixed toolbar container element referenced as selector in wysiwyg adapter settings\n     *\n     * @returns {jQuery}\n     */\n    ;\n\n    _proto.getFixedToolbarContainer = function getFixedToolbarContainer() {\n      return (0, _jquery)(\"#\" + this.elementId).closest(\"\" + this.config.adapter.settings.fixed_toolbar_container);\n    };\n\n    return Wysiwyg;\n  }();\n\n  return Wysiwyg;\n});\n//# sourceMappingURL=tinymce.js.map","Magento_PageBuilder/js/property/property-reader-pool-factory.js":"/*eslint-disable */\n/* jscs:disable */\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\ndefine([\"Magento_PageBuilder/js/config\", \"Magento_PageBuilder/js/utils/loader\", \"Magento_PageBuilder/js/property/property-reader-pool\"], function (_config, _loader, _propertyReaderPool) {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * Create a new instance of property reader pool\n   */\n  function create(contentType) {\n    var config = _config.getContentTypeConfig(contentType);\n\n    var propertyReaders = [];\n    var appearanceName;\n\n    for (var _i = 0, _Object$keys = Object.keys(config.appearances); _i < _Object$keys.length; _i++) {\n      appearanceName = _Object$keys[_i];\n      var appearance = config.appearances[appearanceName];\n\n      if (appearance !== undefined && appearance.elements !== undefined) {\n        var elementName = void 0;\n\n        for (var _i2 = 0, _Object$keys2 = Object.keys(appearance.elements); _i2 < _Object$keys2.length; _i2++) {\n          elementName = _Object$keys2[_i2];\n          var element = appearance.elements[elementName];\n\n          if (element.style !== undefined) {\n            for (var _iterator = _createForOfIteratorHelperLoose(element.style), _step; !(_step = _iterator()).done;) {\n              var propertyConfig = _step.value;\n\n              if (propertyConfig.reader && propertyReaders.indexOf(propertyConfig.reader) === -1 && !_propertyReaderPool.get(propertyConfig.reader)) {\n                propertyReaders.push(propertyConfig.reader);\n              }\n            }\n          }\n\n          if (element.attributes !== undefined) {\n            for (var _iterator2 = _createForOfIteratorHelperLoose(element.attributes), _step2; !(_step2 = _iterator2()).done;) {\n              var attributeConfig = _step2.value;\n\n              if (attributeConfig.reader && propertyReaders.indexOf(attributeConfig.reader) === -1 && !_propertyReaderPool.get(attributeConfig.reader)) {\n                propertyReaders.push(attributeConfig.reader);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return new Promise(function (resolve) {\n      (0, _loader)(propertyReaders, function () {\n        for (var _len = arguments.length, loadedPropertyReaders = new Array(_len), _key = 0; _key < _len; _key++) {\n          loadedPropertyReaders[_key] = arguments[_key];\n        }\n\n        for (var i = 0; i < propertyReaders.length; i++) {\n          _propertyReaderPool.register(propertyReaders[i], new loadedPropertyReaders[i]());\n        }\n\n        resolve(_propertyReaderPool);\n      });\n    });\n  }\n\n  return create;\n});\n//# sourceMappingURL=property-reader-pool-factory.js.map","Magento_PageBuilder/js/property/paddings.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * @api\n   */\n  var Paddings = /*#__PURE__*/function () {\n    \"use strict\";\n\n    function Paddings() {}\n\n    var _proto = Paddings.prototype;\n\n    /**\n     * Read paddings from element\n     *\n     * @param {HTMLElement} element\n     * @returns {string | object}\n     */\n    _proto.read = function read(element) {\n      return {\n        padding: {\n          left: element.style.paddingLeft,\n          top: element.style.paddingTop,\n          right: element.style.paddingRight,\n          bottom: element.style.paddingBottom\n        }\n      };\n    };\n\n    return Paddings;\n  }();\n\n  return Paddings;\n});\n//# sourceMappingURL=paddings.js.map","Magento_PageBuilder/js/property/link.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * @api\n   */\n  var Link = /*#__PURE__*/function () {\n    \"use strict\";\n\n    function Link() {\n      this.regexpByLinkType = {\n        category: new RegExp(/id_path=['\"]category\\/(\\d+)/),\n        product: new RegExp(/id_path=['\"]product\\/(\\d+)/),\n        page: new RegExp(/page_id=['\"](\\d+)/)\n      };\n    }\n\n    var _proto = Link.prototype;\n\n    /**\n     * Read link from element\n     *\n     * @param {HTMLElement} element\n     * @returns {string | object}\n     */\n    _proto.read = function read(element) {\n      var _ref;\n\n      var href = element.getAttribute(\"href\");\n      var attributeLinkType = element.getAttribute(\"data-link-type\");\n\n      if (typeof href === \"string\" && attributeLinkType !== \"default\") {\n        href = this.getIdFromWidgetSyntax(href, this.regexpByLinkType[attributeLinkType]);\n      }\n\n      return _ref = {}, _ref[attributeLinkType] = href, _ref.setting = element.getAttribute(\"target\") === \"_blank\", _ref.type = attributeLinkType, _ref;\n    }\n    /**\n     * Returns link value from widget string\n     *\n     * @param {string} href\n     * @param {RegExp} regexp\n     * @return {string}\n     */\n    ;\n\n    _proto.getIdFromWidgetSyntax = function getIdFromWidgetSyntax(href, regexp) {\n      var attributeIdMatches = href.match(regexp);\n\n      if (!attributeIdMatches) {\n        return href;\n      }\n\n      return attributeIdMatches[1];\n    };\n\n    return Link;\n  }();\n\n  return Link;\n});\n//# sourceMappingURL=link.js.map","Magento_PageBuilder/js/property/property-reader-interface.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  \"use strict\";\n});\n//# sourceMappingURL=property-reader-interface.js.map","Magento_PageBuilder/js/property/margins.js":"/*eslint-disable */\n/* jscs:disable */\ndefine([], function () {\n  /**\n   * Copyright \u00a9 Magento, Inc. All rights reserved.\n   * See COPYING.txt for license details.\n   */\n\n  /**\n   * @api\n   */\n  var Margins = /*#__PURE__*/function () {\n    \"use strict\";\n\n    function Margins() {}\n\n    var _proto = Margins.prototype;\n\n    /**\n     * Read margins from element\n     *\n     * @param {HTMLElement} element\n     * @returns {string | object}\n     */\n    _proto.read = function read(element) {\n      return {\n        margin: {\n          left: element.style.marginLeft,\n          top: element.style.marginTop,\n          right: element.style.marginRight,\n          bottom: element.style.marginBottom\n        }\n      };\n    };\n\n    return Margins;\n  }();\n\n  return Margins;\n});\n//# sourceMappingURL=margins.js.map"}
}});

Spamworldpro Mini