/*! grapesjs - 0.16.34 has remove style manager*/ 
! function(t, e) {
    "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.grapesjs = e() : t.grapesjs = e()
}(window, function() {
    return function(t) {
        var e = {};

        function n(r) {
            if (e[r]) return e[r].exports;
            var i = e[r] = {
                i: r,
                l: !1,
                exports: {}
            };
            return t[r].call(i.exports, i, i.exports, n), i.l = !0, i.exports
        }
        return n.m = t, n.c = e, n.d = function(t, e, r) {
            n.o(t, e) || Object.defineProperty(t, e, {
                enumerable: !0,
                get: r
            })
        }, n.r = function(t) {
            "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {
                value: "Module"
            }), Object.defineProperty(t, "__esModule", {
                value: !0
            })
        }, n.t = function(t, e) {
            if (1 & e && (t = n(t)), 8 & e) return t;
            if (4 & e && "object" == typeof t && t && t.__esModule) return t;
            var r = Object.create(null);
            if (n.r(r), Object.defineProperty(r, "default", {
                    enumerable: !0,
                    value: t
                }), 2 & e && "string" != typeof t)
                for (var i in t) n.d(r, i, function(e) {
                    return t[e]
                }.bind(null, i));
            return r
        }, n.n = function(t) {
            var e = t && t.__esModule ? function() {
                return t.default
            } : function() {
                return t
            };
            return n.d(e, "a", e), e
        }, n.o = function(t, e) {
            return Object.prototype.hasOwnProperty.call(t, e)
        }, n.p = "", n(n.s = 97)
    }([function(t, e, n) {
        "use strict";
        n.r(e), n.d(e, "default", function() {
            return xn
        }), n.d(e, "VERSION", function() {
            return i.e
        }), n.d(e, "restArguments", function() {
            return o
        }), n.d(e, "isObject", function() {
            return a
        }), n.d(e, "isNull", function() {
            return s
        }), n.d(e, "isUndefined", function() {
            return l
        }), n.d(e, "isBoolean", function() {
            return c
        }), n.d(e, "isElement", function() {
            return u
        }), n.d(e, "isString", function() {
            return h
        }), n.d(e, "isNumber", function() {
            return f
        }), n.d(e, "isDate", function() {
            return p
        }), n.d(e, "isRegExp", function() {
            return g
        }), n.d(e, "isError", function() {
            return v
        }), n.d(e, "isSymbol", function() {
            return m
        }), n.d(e, "isArrayBuffer", function() {
            return b
        }), n.d(e, "isDataView", function() {
            return j
        }), n.d(e, "isArray", function() {
            return T
        }), n.d(e, "isFunction", function() {
            return x
        }), n.d(e, "isArguments", function() {
            return M
        }), n.d(e, "isFinite", function() {
            return D
        }), n.d(e, "isNaN", function() {
            return A
        }), n.d(e, "isTypedArray", function() {
            return R
        }), n.d(e, "isEmpty", function() {
            return U
        }), n.d(e, "isMatch", function() {
            return B
        }), n.d(e, "isEqual", function() {
            return K
        }), n.d(e, "isMap", function() {
            return rt
        }), n.d(e, "isWeakMap", function() {
            return it
        }), n.d(e, "isSet", function() {
            return ot
        }), n.d(e, "isWeakSet", function() {
            return at
        }), n.d(e, "keys", function() {
            return $
        }), n.d(e, "allKeys", function() {
            return Y
        }), n.d(e, "values", function() {
            return st
        }), n.d(e, "pairs", function() {
            return lt
        }), n.d(e, "invert", function() {
            return ct
        }), n.d(e, "functions", function() {
            return ut
        }), n.d(e, "methods", function() {
            return ut
        }), n.d(e, "extend", function() {
            return ht
        }), n.d(e, "extendOwn", function() {
            return ft
        }), n.d(e, "assign", function() {
            return ft
        }), n.d(e, "defaults", function() {
            return pt
        }), n.d(e, "create", function() {
            return vt
        }), n.d(e, "clone", function() {
            return mt
        }), n.d(e, "tap", function() {
            return bt
        }), n.d(e, "get", function() {
            return Ot
        }), n.d(e, "has", function() {
            return Ct
        }), n.d(e, "mapObject", function() {
            return Dt
        }), n.d(e, "identity", function() {
            return St
        }), n.d(e, "constant", function() {
            return L
        }), n.d(e, "noop", function() {
            return At
        }), n.d(e, "toPath", function() {
            return yt
        }), n.d(e, "property", function() {
            return jt
        }), n.d(e, "propertyOf", function() {
            return Lt
        }), n.d(e, "matcher", function() {
            return kt
        }), n.d(e, "matches", function() {
            return kt
        }), n.d(e, "times", function() {
            return _t
        }), n.d(e, "random", function() {
            return Nt
        }), n.d(e, "now", function() {
            return It
        }), n.d(e, "escape", function() {
            return Rt
        }), n.d(e, "unescape", function() {
            return zt
        }), n.d(e, "templateSettings", function() {
            return Ht
        }), n.d(e, "template", function() {
            return qt
        }), n.d(e, "result", function() {
            return Gt
        }), n.d(e, "uniqueId", function() {
            return Yt
        }), n.d(e, "chain", function() {
            return Xt
        }), n.d(e, "iteratee", function() {
            return Et
        }), n.d(e, "partial", function() {
            return Qt
        }), n.d(e, "bind", function() {
            return te
        }), n.d(e, "bindAll", function() {
            return re
        }), n.d(e, "memoize", function() {
            return ie
        }), n.d(e, "delay", function() {
            return oe
        }), n.d(e, "defer", function() {
            return ae
        }), n.d(e, "throttle", function() {
            return se
        }), n.d(e, "debounce", function() {
            return le
        }), n.d(e, "wrap", function() {
            return ce
        }), n.d(e, "negate", function() {
            return ue
        }), n.d(e, "compose", function() {
            return de
        }), n.d(e, "after", function() {
            return he
        }), n.d(e, "before", function() {
            return fe
        }), n.d(e, "once", function() {
            return pe
        }), n.d(e, "findKey", function() {
            return ge
        }), n.d(e, "findIndex", function() {
            return me
        }), n.d(e, "findLastIndex", function() {
            return be
        }), n.d(e, "sortedIndex", function() {
            return ye
        }), n.d(e, "indexOf", function() {
            return xe
        }), n.d(e, "lastIndexOf", function() {
            return Oe
        }), n.d(e, "find", function() {
            return Ce
        }), n.d(e, "detect", function() {
            return Ce
        }), n.d(e, "findWhere", function() {
            return Se
        }), n.d(e, "each", function() {
            return ke
        }), n.d(e, "forEach", function() {
            return ke
        }), n.d(e, "map", function() {
            return je
        }), n.d(e, "collect", function() {
            return je
        }), n.d(e, "reduce", function() {
            return Pe
        }), n.d(e, "foldl", function() {
            return Pe
        }), n.d(e, "inject", function() {
            return Pe
        }), n.d(e, "reduceRight", function() {
            return Ee
        }), n.d(e, "foldr", function() {
            return Ee
        }), n.d(e, "filter", function() {
            return Me
        }), n.d(e, "select", function() {
            return Me
        }), n.d(e, "reject", function() {
            return De
        }), n.d(e, "every", function() {
            return Ae
        }), n.d(e, "all", function() {
            return Ae
        }), n.d(e, "some", function() {
            return Le
        }), n.d(e, "any", function() {
            return Le
        }), n.d(e, "contains", function() {
            return _e
        }), n.d(e, "includes", function() {
            return _e
        }), n.d(e, "include", function() {
            return _e
        }), n.d(e, "invoke", function() {
            return Ne
        }), n.d(e, "pluck", function() {
            return Ie
        }), n.d(e, "where", function() {
            return Fe
        }), n.d(e, "max", function() {
            return Ve
        }), n.d(e, "min", function() {
            return Re
        }), n.d(e, "shuffle", function() {
            return He
        }), n.d(e, "sample", function() {
            return ze
        }), n.d(e, "sortBy", function() {
            return $e
        }), n.d(e, "groupBy", function() {
            return Be
        }), n.d(e, "indexBy", function() {
            return We
        }), n.d(e, "countBy", function() {
            return qe
        }), n.d(e, "partition", function() {
            return Ge
        }), n.d(e, "toArray", function() {
            return Ye
        }), n.d(e, "size", function() {
            return Xe
        }), n.d(e, "pick", function() {
            return Ze
        }), n.d(e, "omit", function() {
            return Qe
        }), n.d(e, "first", function() {
            return en
        }), n.d(e, "head", function() {
            return en
        }), n.d(e, "take", function() {
            return en
        }), n.d(e, "initial", function() {
            return tn
        }), n.d(e, "last", function() {
            return rn
        }), n.d(e, "rest", function() {
            return nn
        }), n.d(e, "tail", function() {
            return nn
        }), n.d(e, "drop", function() {
            return nn
        }), n.d(e, "compact", function() {
            return on
        }), n.d(e, "flatten", function() {
            return an
        }), n.d(e, "without", function() {
            return ln
        }), n.d(e, "uniq", function() {
            return cn
        }), n.d(e, "unique", function() {
            return cn
        }), n.d(e, "union", function() {
            return un
        }), n.d(e, "intersection", function() {
            return dn
        }), n.d(e, "difference", function() {
            return sn
        }), n.d(e, "unzip", function() {
            return hn
        }), n.d(e, "transpose", function() {
            return hn
        }), n.d(e, "zip", function() {
            return fn
        }), n.d(e, "object", function() {
            return pn
        }), n.d(e, "range", function() {
            return gn
        }), n.d(e, "chunk", function() {
            return vn
        }), n.d(e, "mixin", function() {
            return bn
        });
        var r = {};
        n.r(r), n.d(r, "VERSION", function() {
            return i.e
        }), n.d(r, "restArguments", function() {
            return o
        }), n.d(r, "isObject", function() {
            return a
        }), n.d(r, "isNull", function() {
            return s
        }), n.d(r, "isUndefined", function() {
            return l
        }), n.d(r, "isBoolean", function() {
            return c
        }), n.d(r, "isElement", function() {
            return u
        }), n.d(r, "isString", function() {
            return h
        }), n.d(r, "isNumber", function() {
            return f
        }), n.d(r, "isDate", function() {
            return p
        }), n.d(r, "isRegExp", function() {
            return g
        }), n.d(r, "isError", function() {
            return v
        }), n.d(r, "isSymbol", function() {
            return m
        }), n.d(r, "isArrayBuffer", function() {
            return b
        }), n.d(r, "isDataView", function() {
            return j
        }), n.d(r, "isArray", function() {
            return T
        }), n.d(r, "isFunction", function() {
            return x
        }), n.d(r, "isArguments", function() {
            return M
        }), n.d(r, "isFinite", function() {
            return D
        }), n.d(r, "isNaN", function() {
            return A
        }), n.d(r, "isTypedArray", function() {
            return R
        }), n.d(r, "isEmpty", function() {
            return U
        }), n.d(r, "isMatch", function() {
            return B
        }), n.d(r, "isEqual", function() {
            return K
        }), n.d(r, "isMap", function() {
            return rt
        }), n.d(r, "isWeakMap", function() {
            return it
        }), n.d(r, "isSet", function() {
            return ot
        }), n.d(r, "isWeakSet", function() {
            return at
        }), n.d(r, "keys", function() {
            return $
        }), n.d(r, "allKeys", function() {
            return Y
        }), n.d(r, "values", function() {
            return st
        }), n.d(r, "pairs", function() {
            return lt
        }), n.d(r, "invert", function() {
            return ct
        }), n.d(r, "functions", function() {
            return ut
        }), n.d(r, "methods", function() {
            return ut
        }), n.d(r, "extend", function() {
            return ht
        }), n.d(r, "extendOwn", function() {
            return ft
        }), n.d(r, "assign", function() {
            return ft
        }), n.d(r, "defaults", function() {
            return pt
        }), n.d(r, "create", function() {
            return vt
        }), n.d(r, "clone", function() {
            return mt
        }), n.d(r, "tap", function() {
            return bt
        }), n.d(r, "get", function() {
            return Ot
        }), n.d(r, "has", function() {
            return Ct
        }), n.d(r, "mapObject", function() {
            return Dt
        }), n.d(r, "identity", function() {
            return St
        }), n.d(r, "constant", function() {
            return L
        }), n.d(r, "noop", function() {
            return At
        }), n.d(r, "toPath", function() {
            return yt
        }), n.d(r, "property", function() {
            return jt
        }), n.d(r, "propertyOf", function() {
            return Lt
        }), n.d(r, "matcher", function() {
            return kt
        }), n.d(r, "matches", function() {
            return kt
        }), n.d(r, "times", function() {
            return _t
        }), n.d(r, "random", function() {
            return Nt
        }), n.d(r, "now", function() {
            return It
        }), n.d(r, "escape", function() {
            return Rt
        }), n.d(r, "unescape", function() {
            return zt
        }), n.d(r, "templateSettings", function() {
            return Ht
        }), n.d(r, "template", function() {
            return qt
        }), n.d(r, "result", function() {
            return Gt
        }), n.d(r, "uniqueId", function() {
            return Yt
        }), n.d(r, "chain", function() {
            return Xt
        }), n.d(r, "iteratee", function() {
            return Et
        }), n.d(r, "partial", function() {
            return Qt
        }), n.d(r, "bind", function() {
            return te
        }), n.d(r, "bindAll", function() {
            return re
        }), n.d(r, "memoize", function() {
            return ie
        }), n.d(r, "delay", function() {
            return oe
        }), n.d(r, "defer", function() {
            return ae
        }), n.d(r, "throttle", function() {
            return se
        }), n.d(r, "debounce", function() {
            return le
        }), n.d(r, "wrap", function() {
            return ce
        }), n.d(r, "negate", function() {
            return ue
        }), n.d(r, "compose", function() {
            return de
        }), n.d(r, "after", function() {
            return he
        }), n.d(r, "before", function() {
            return fe
        }), n.d(r, "once", function() {
            return pe
        }), n.d(r, "findKey", function() {
            return ge
        }), n.d(r, "findIndex", function() {
            return me
        }), n.d(r, "findLastIndex", function() {
            return be
        }), n.d(r, "sortedIndex", function() {
            return ye
        }), n.d(r, "indexOf", function() {
            return xe
        }), n.d(r, "lastIndexOf", function() {
            return Oe
        }), n.d(r, "find", function() {
            return Ce
        }), n.d(r, "detect", function() {
            return Ce
        }), n.d(r, "findWhere", function() {
            return Se
        }), n.d(r, "each", function() {
            return ke
        }), n.d(r, "forEach", function() {
            return ke
        }), n.d(r, "map", function() {
            return je
        }), n.d(r, "collect", function() {
            return je
        }), n.d(r, "reduce", function() {
            return Pe
        }), n.d(r, "foldl", function() {
            return Pe
        }), n.d(r, "inject", function() {
            return Pe
        }), n.d(r, "reduceRight", function() {
            return Ee
        }), n.d(r, "foldr", function() {
            return Ee
        }), n.d(r, "filter", function() {
            return Me
        }), n.d(r, "select", function() {
            return Me
        }), n.d(r, "reject", function() {
            return De
        }), n.d(r, "every", function() {
            return Ae
        }), n.d(r, "all", function() {
            return Ae
        }), n.d(r, "some", function() {
            return Le
        }), n.d(r, "any", function() {
            return Le
        }), n.d(r, "contains", function() {
            return _e
        }), n.d(r, "includes", function() {
            return _e
        }), n.d(r, "include", function() {
            return _e
        }), n.d(r, "invoke", function() {
            return Ne
        }), n.d(r, "pluck", function() {
            return Ie
        }), n.d(r, "where", function() {
            return Fe
        }), n.d(r, "max", function() {
            return Ve
        }), n.d(r, "min", function() {
            return Re
        }), n.d(r, "shuffle", function() {
            return He
        }), n.d(r, "sample", function() {
            return ze
        }), n.d(r, "sortBy", function() {
            return $e
        }), n.d(r, "groupBy", function() {
            return Be
        }), n.d(r, "indexBy", function() {
            return We
        }), n.d(r, "countBy", function() {
            return qe
        }), n.d(r, "partition", function() {
            return Ge
        }), n.d(r, "toArray", function() {
            return Ye
        }), n.d(r, "size", function() {
            return Xe
        }), n.d(r, "pick", function() {
            return Ze
        }), n.d(r, "omit", function() {
            return Qe
        }), n.d(r, "first", function() {
            return en
        }), n.d(r, "head", function() {
            return en
        }), n.d(r, "take", function() {
            return en
        }), n.d(r, "initial", function() {
            return tn
        }), n.d(r, "last", function() {
            return rn
        }), n.d(r, "rest", function() {
            return nn
        }), n.d(r, "tail", function() {
            return nn
        }), n.d(r, "drop", function() {
            return nn
        }), n.d(r, "compact", function() {
            return on
        }), n.d(r, "flatten", function() {
            return an
        }), n.d(r, "without", function() {
            return ln
        }), n.d(r, "uniq", function() {
            return cn
        }), n.d(r, "unique", function() {
            return cn
        }), n.d(r, "union", function() {
            return un
        }), n.d(r, "intersection", function() {
            return dn
        }), n.d(r, "difference", function() {
            return sn
        }), n.d(r, "unzip", function() {
            return hn
        }), n.d(r, "transpose", function() {
            return hn
        }), n.d(r, "zip", function() {
            return fn
        }), n.d(r, "object", function() {
            return pn
        }), n.d(r, "range", function() {
            return gn
        }), n.d(r, "chunk", function() {
            return vn
        }), n.d(r, "mixin", function() {
            return bn
        }), n.d(r, "default", function() {
            return yn
        });
        var i = n(4);

        function o(t, e) {
            return e = null == e ? t.length - 1 : +e,
                function() {
                    for (var n = Math.max(arguments.length - e, 0), r = Array(n), i = 0; i < n; i++) r[i] = arguments[i + e];
                    switch (e) {
                        case 0:
                            return t.call(this, r);
                        case 1:
                            return t.call(this, arguments[0], r);
                        case 2:
                            return t.call(this, arguments[0], arguments[1], r)
                    }
                    var o = Array(e + 1);
                    for (i = 0; i < e; i++) o[i] = arguments[i];
                    return o[e] = r, t.apply(this, o)
                }
        }

        function a(t) {
            var e = typeof t;
            return "function" === e || "object" === e && !!t
        }

        function s(t) {
            return null === t
        }

        function l(t) {
            return void 0 === t
        }

        function c(t) {
            return !0 === t || !1 === t || "[object Boolean]" === i.t.call(t)
        }

        function u(t) {
            return !(!t || 1 !== t.nodeType)
        }

        function d(t) {
            var e = "[object " + t + "]";
            return function(t) {
                return i.t.call(t) === e
            }
        }
        var h = d("String"),
            f = d("Number"),
            p = d("Date"),
            g = d("RegExp"),
            v = d("Error"),
            m = d("Symbol"),
            b = d("ArrayBuffer"),
            y = d("Function"),
            w = i.p.document && i.p.document.childNodes;
        "object" != typeof Int8Array && "function" != typeof w && (y = function(t) {
            return "function" == typeof t || !1
        });
        var x = y,
            O = d("Object"),
            C = i.s && O(new DataView(new ArrayBuffer(8))),
            S = "undefined" != typeof Map && O(new Map),
            k = d("DataView"),
            j = C ? function(t) {
                return null != t && x(t.getInt8) && b(t.buffer)
            } : k,
            T = i.k || d("Array");

        function P(t, e) {
            return null != t && i.i.call(t, e)
        }
        var E = d("Arguments");
        ! function() {
            E(arguments) || (E = function(t) {
                return P(t, "callee")
            })
        }();
        var M = E;

        function D(t) {
            return !m(t) && Object(i.f)(t) && !isNaN(parseFloat(t))
        }

        function A(t) {
            return f(t) && Object(i.g)(t)
        }

        function L(t) {
            return function() {
                return t
            }
        }

        function _(t) {
            return function(e) {
                var n = t(e);
                return "number" == typeof n && n >= 0 && n <= i.b
            }
        }

        function N(t) {
            return function(e) {
                return null == e ? void 0 : e[t]
            }
        }
        var I = N("byteLength"),
            F = _(I),
            V = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/,
            R = i.r ? function(t) {
                return i.l ? Object(i.l)(t) && !j(t) : F(t) && V.test(i.t.call(t))
            } : L(!1),
            z = N("length");

        function H(t, e) {
            e = function(t) {
                for (var e = {}, n = t.length, r = 0; r < n; ++r) e[t[r]] = !0;
                return {
                    contains: function(t) {
                        return e[t]
                    },
                    push: function(n) {
                        return e[n] = !0, t.push(n)
                    }
                }
            }(e);
            var n = i.n.length,
                r = t.constructor,
                o = x(r) && r.prototype || i.c,
                a = "constructor";
            for (P(t, a) && !e.contains(a) && e.push(a); n--;)(a = i.n[n]) in t && t[a] !== o[a] && !e.contains(a) && e.push(a)
        }

        function $(t) {
            if (!a(t)) return [];
            if (i.m) return Object(i.m)(t);
            var e = [];
            for (var n in t) P(t, n) && e.push(n);
            return i.h && H(t, e), e
        }

        function U(t) {
            if (null == t) return !0;
            var e = z(t);
            return "number" == typeof e && (T(t) || h(t) || M(t)) ? 0 === e : 0 === z($(t))
        }

        function B(t, e) {
            var n = $(e),
                r = n.length;
            if (null == t) return !r;
            for (var i = Object(t), o = 0; o < r; o++) {
                var a = n[o];
                if (e[a] !== i[a] || !(a in i)) return !1
            }
            return !0
        }

        function W(t) {
            return t instanceof W ? t : this instanceof W ? void(this._wrapped = t) : new W(t)
        }

        function q(t) {
            return new Uint8Array(t.buffer || t, t.byteOffset || 0, I(t))
        }
        W.VERSION = i.e, W.prototype.value = function() {
            return this._wrapped
        }, W.prototype.valueOf = W.prototype.toJSON = W.prototype.value, W.prototype.toString = function() {
            return String(this._wrapped)
        };
        var G = "[object DataView]";

        function K(t, e) {
            return function t(e, n, r, o) {
                if (e === n) return 0 !== e || 1 / e == 1 / n;
                if (null == e || null == n) return !1;
                if (e != e) return n != n;
                var a = typeof e;
                return ("function" === a || "object" === a || "object" == typeof n) && function e(n, r, o, a) {
                    n instanceof W && (n = n._wrapped), r instanceof W && (r = r._wrapped);
                    var s = i.t.call(n);
                    if (s !== i.t.call(r)) return !1;
                    if (C && "[object Object]" == s && j(n)) {
                        if (!j(r)) return !1;
                        s = G
                    }
                    switch (s) {
                        case "[object RegExp]":
                        case "[object String]":
                            return "" + n == "" + r;
                        case "[object Number]":
                            return +n != +n ? +r != +r : 0 == +n ? 1 / +n == 1 / r : +n == +r;
                        case "[object Date]":
                        case "[object Boolean]":
                            return +n == +r;
                        case "[object Symbol]":
                            return i.d.valueOf.call(n) === i.d.valueOf.call(r);
                        case "[object ArrayBuffer]":
                        case G:
                            return e(q(n), q(r), o, a)
                    }
                    var l = "[object Array]" === s;
                    if (!l && R(n)) {
                        if (I(n) !== I(r)) return !1;
                        if (n.buffer === r.buffer && n.byteOffset === r.byteOffset) return !0;
                        l = !0
                    }
                    if (!l) {
                        if ("object" != typeof n || "object" != typeof r) return !1;
                        var c = n.constructor,
                            u = r.constructor;
                        if (c !== u && !(x(c) && c instanceof c && x(u) && u instanceof u) && "constructor" in n && "constructor" in r) return !1
                    }
                    a = a || [];
                    for (var d = (o = o || []).length; d--;)
                        if (o[d] === n) return a[d] === r;
                    if (o.push(n), a.push(r), l) {
                        if ((d = n.length) !== r.length) return !1;
                        for (; d--;)
                            if (!t(n[d], r[d], o, a)) return !1
                    } else {
                        var h, f = $(n);
                        if (d = f.length, $(r).length !== d) return !1;
                        for (; d--;)
                            if (!P(r, h = f[d]) || !t(n[h], r[h], o, a)) return !1
                    }
                    return o.pop(), a.pop(), !0
                }(e, n, r, o)
            }(t, e)
        }

        function Y(t) {
            if (!a(t)) return [];
            var e = [];
            for (var n in t) e.push(n);
            return i.h && H(t, e), e
        }

        function X(t) {
            var e = z(t);
            return function(n) {
                if (null == n) return !1;
                var r = Y(n);
                if (z(r)) return !1;
                for (var i = 0; i < e; i++)
                    if (!x(n[t[i]])) return !1;
                return t !== et || !x(n[J])
            }
        }
        var J = "forEach",
            Z = ["clear", "delete"],
            Q = ["get", "has", "set"],
            tt = Z.concat(J, Q),
            et = Z.concat(Q),
            nt = ["add"].concat(Z, J, "has"),
            rt = S ? X(tt) : d("Map"),
            it = S ? X(et) : d("WeakMap"),
            ot = S ? X(nt) : d("Set"),
            at = d("WeakSet");

        function st(t) {
            for (var e = $(t), n = e.length, r = Array(n), i = 0; i < n; i++) r[i] = t[e[i]];
            return r
        }

        function lt(t) {
            for (var e = $(t), n = e.length, r = Array(n), i = 0; i < n; i++) r[i] = [e[i], t[e[i]]];
            return r
        }

        function ct(t) {
            for (var e = {}, n = $(t), r = 0, i = n.length; r < i; r++) e[t[n[r]]] = n[r];
            return e
        }

        function ut(t) {
            var e = [];
            for (var n in t) x(t[n]) && e.push(n);
            return e.sort()
        }

        function dt(t, e) {
            return function(n) {
                var r = arguments.length;
                if (e && (n = Object(n)), r < 2 || null == n) return n;
                for (var i = 1; i < r; i++)
                    for (var o = arguments[i], a = t(o), s = a.length, l = 0; l < s; l++) {
                        var c = a[l];
                        e && void 0 !== n[c] || (n[c] = o[c])
                    }
                return n
            }
        }
        var ht = dt(Y),
            ft = dt($),
            pt = dt(Y, !0);

        function gt(t) {
            if (!a(t)) return {};
            if (i.j) return Object(i.j)(t);
            var e = function() {};
            e.prototype = t;
            var n = new e;
            return e.prototype = null, n
        }

        function vt(t, e) {
            var n = gt(t);
            return e && ft(n, e), n
        }

        function mt(t) {
            return a(t) ? T(t) ? t.slice() : ht({}, t) : t
        }

        function bt(t, e) {
            return e(t), t
        }

        function yt(t) {
            return T(t) ? t : [t]
        }

        function wt(t) {
            return W.toPath(t)
        }

        function xt(t, e) {
            for (var n = e.length, r = 0; r < n; r++) {
                if (null == t) return;
                t = t[e[r]]
            }
            return n ? t : void 0
        }

        function Ot(t, e, n) {
            var r = xt(t, wt(e));
            return l(r) ? n : r
        }

        function Ct(t, e) {
            for (var n = (e = wt(e)).length, r = 0; r < n; r++) {
                var i = e[r];
                if (!P(t, i)) return !1;
                t = t[i]
            }
            return !!n
        }

        function St(t) {
            return t
        }

        function kt(t) {
            return t = ft({}, t),
                function(e) {
                    return B(e, t)
                }
        }

        function jt(t) {
            return t = wt(t),
                function(e) {
                    return xt(e, t)
                }
        }

        function Tt(t, e, n) {
            if (void 0 === e) return t;
            switch (null == n ? 3 : n) {
                case 1:
                    return function(n) {
                        return t.call(e, n)
                    };
                case 3:
                    return function(n, r, i) {
                        return t.call(e, n, r, i)
                    };
                case 4:
                    return function(n, r, i, o) {
                        return t.call(e, n, r, i, o)
                    }
            }
            return function() {
                return t.apply(e, arguments)
            }
        }

        function Pt(t, e, n) {
            return null == t ? St : x(t) ? Tt(t, e, n) : a(t) && !T(t) ? kt(t) : jt(t)
        }

        function Et(t, e) {
            return Pt(t, e, 1 / 0)
        }

        function Mt(t, e, n) {
            return W.iteratee !== Et ? W.iteratee(t, e) : Pt(t, e, n)
        }

        function Dt(t, e, n) {
            e = Mt(e, n);
            for (var r = $(t), i = r.length, o = {}, a = 0; a < i; a++) {
                var s = r[a];
                o[s] = e(t[s], s, t)
            }
            return o
        }

        function At() {}

        function Lt(t) {
            return null == t ? At : function(e) {
                return Ot(t, e)
            }
        }

        function _t(t, e, n) {
            var r = Array(Math.max(0, t));
            e = Tt(e, n, 1);
            for (var i = 0; i < t; i++) r[i] = e(i);
            return r
        }

        function Nt(t, e) {
            return null == e && (e = t, t = 0), t + Math.floor(Math.random() * (e - t + 1))
        }
        W.toPath = yt, W.iteratee = Et;
        var It = Date.now || function() {
            return (new Date).getTime()
        };

        function Ft(t) {
            var e = function(e) {
                    return t[e]
                },
                n = "(?:" + $(t).join("|") + ")",
                r = RegExp(n),
                i = RegExp(n, "g");
            return function(t) {
                return t = null == t ? "" : "" + t, r.test(t) ? t.replace(i, e) : t
            }
        }
        var Vt = {
                "&": "&amp;",
                "<": "&lt;",
                ">": "&gt;",
                '"': "&quot;",
                "'": "&#x27;",
                "`": "&#x60;"
            },
            Rt = Ft(Vt),
            zt = Ft(ct(Vt)),
            Ht = W.templateSettings = {
                evaluate: /<%([\s\S]+?)%>/g,
                interpolate: /<%=([\s\S]+?)%>/g,
                escape: /<%-([\s\S]+?)%>/g
            },
            $t = /(.)^/,
            Ut = {
                "'": "'",
                "\\": "\\",
                "\r": "r",
                "\n": "n",
                "\u2028": "u2028",
                "\u2029": "u2029"
            },
            Bt = /\\|'|\r|\n|\u2028|\u2029/g;

        function Wt(t) {
            return "\\" + Ut[t]
        }

        function qt(t, e, n) {
            !e && n && (e = n), e = pt({}, e, W.templateSettings);
            var r, i = RegExp([(e.escape || $t).source, (e.interpolate || $t).source, (e.evaluate || $t).source].join("|") + "|$", "g"),
                o = 0,
                a = "__p+='";
            t.replace(i, function(e, n, r, i, s) {
                return a += t.slice(o, s).replace(Bt, Wt), o = s + e.length, n ? a += "'+\n((__t=(" + n + "))==null?'':_.escape(__t))+\n'" : r ? a += "'+\n((__t=(" + r + "))==null?'':__t)+\n'" : i && (a += "';\n" + i + "\n__p+='"), e
            }), a += "';\n", e.variable || (a = "with(obj||{}){\n" + a + "}\n"), a = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + a + "return __p;\n";
            try {
                r = new Function(e.variable || "obj", "_", a)
            } catch (t) {
                throw t.source = a, t
            }
            var s = function(t) {
                    return r.call(this, t, W)
                },
                l = e.variable || "obj";
            return s.source = "function(" + l + "){\n" + a + "}", s
        }

        function Gt(t, e, n) {
            var r = (e = wt(e)).length;
            if (!r) return x(n) ? n.call(t) : n;
            for (var i = 0; i < r; i++) {
                var o = null == t ? void 0 : t[e[i]];
                void 0 === o && (o = n, i = r), t = x(o) ? o.call(t) : o
            }
            return t
        }
        var Kt = 0;

        function Yt(t) {
            var e = ++Kt + "";
            return t ? t + e : e
        }

        function Xt(t) {
            var e = W(t);
            return e._chain = !0, e
        }

        function Jt(t, e, n, r, i) {
            if (!(r instanceof e)) return t.apply(n, i);
            var o = gt(t.prototype),
                s = t.apply(o, i);
            return a(s) ? s : o
        }
        var Zt = o(function(t, e) {
            var n = Zt.placeholder,
                r = function() {
                    for (var i = 0, o = e.length, a = Array(o), s = 0; s < o; s++) a[s] = e[s] === n ? arguments[i++] : e[s];
                    for (; i < arguments.length;) a.push(arguments[i++]);
                    return Jt(t, r, this, this, a)
                };
            return r
        });
        Zt.placeholder = W;
        var Qt = Zt,
            te = o(function(t, e, n) {
                if (!x(t)) throw new TypeError("Bind must be called on a function");
                var r = o(function(i) {
                    return Jt(t, r, e, this, n.concat(i))
                });
                return r
            }),
            ee = _(z);

        function ne(t, e, n, r) {
            if (r = r || [], e || 0 === e) {
                if (e <= 0) return r.concat(t)
            } else e = 1 / 0;
            for (var i = r.length, o = 0, a = z(t); o < a; o++) {
                var s = t[o];
                if (ee(s) && (T(s) || M(s)))
                    if (e > 1) ne(s, e - 1, n, r), i = r.length;
                    else
                        for (var l = 0, c = s.length; l < c;) r[i++] = s[l++];
                else n || (r[i++] = s)
            }
            return r
        }
        var re = o(function(t, e) {
            var n = (e = ne(e, !1, !1)).length;
            if (n < 1) throw new Error("bindAll must be passed function names");
            for (; n--;) {
                var r = e[n];
                t[r] = te(t[r], t)
            }
            return t
        });

        function ie(t, e) {
            var n = function(r) {
                var i = n.cache,
                    o = "" + (e ? e.apply(this, arguments) : r);
                return P(i, o) || (i[o] = t.apply(this, arguments)), i[o]
            };
            return n.cache = {}, n
        }
        var oe = o(function(t, e, n) {
                return setTimeout(function() {
                    return t.apply(null, n)
                }, e)
            }),
            ae = Qt(oe, W, 1);

        function se(t, e, n) {
            var r, i, o, a, s = 0;
            n || (n = {});
            var l = function() {
                    s = !1 === n.leading ? 0 : It(), r = null, a = t.apply(i, o), r || (i = o = null)
                },
                c = function() {
                    var c = It();
                    s || !1 !== n.leading || (s = c);
                    var u = e - (c - s);
                    return i = this, o = arguments, u <= 0 || u > e ? (r && (clearTimeout(r), r = null), s = c, a = t.apply(i, o), r || (i = o = null)) : r || !1 === n.trailing || (r = setTimeout(l, u)), a
                };
            return c.cancel = function() {
                clearTimeout(r), s = 0, r = i = o = null
            }, c
        }

        function le(t, e, n) {
            var r, i, a = function(e, n) {
                    r = null, n && (i = t.apply(e, n))
                },
                s = o(function(o) {
                    if (r && clearTimeout(r), n) {
                        var s = !r;
                        r = setTimeout(a, e), s && (i = t.apply(this, o))
                    } else r = oe(a, e, this, o);
                    return i
                });
            return s.cancel = function() {
                clearTimeout(r), r = null
            }, s
        }

        function ce(t, e) {
            return Qt(e, t)
        }

        function ue(t) {
            return function() {
                return !t.apply(this, arguments)
            }
        }

        function de() {
            var t = arguments,
                e = t.length - 1;
            return function() {
                for (var n = e, r = t[e].apply(this, arguments); n--;) r = t[n].call(this, r);
                return r
            }
        }

        function he(t, e) {
            return function() {
                if (--t < 1) return e.apply(this, arguments)
            }
        }

        function fe(t, e) {
            var n;
            return function() {
                return --t > 0 && (n = e.apply(this, arguments)), t <= 1 && (e = null), n
            }
        }
        var pe = Qt(fe, 2);

        function ge(t, e, n) {
            e = Mt(e, n);
            for (var r, i = $(t), o = 0, a = i.length; o < a; o++)
                if (e(t[r = i[o]], r, t)) return r
        }

        function ve(t) {
            return function(e, n, r) {
                n = Mt(n, r);
                for (var i = z(e), o = t > 0 ? 0 : i - 1; o >= 0 && o < i; o += t)
                    if (n(e[o], o, e)) return o;
                return -1
            }
        }
        var me = ve(1),
            be = ve(-1);

        function ye(t, e, n, r) {
            for (var i = (n = Mt(n, r, 1))(e), o = 0, a = z(t); o < a;) {
                var s = Math.floor((o + a) / 2);
                n(t[s]) < i ? o = s + 1 : a = s
            }
            return o
        }

        function we(t, e, n) {
            return function(r, o, a) {
                var s = 0,
                    l = z(r);
                if ("number" == typeof a) t > 0 ? s = a >= 0 ? a : Math.max(a + l, s) : l = a >= 0 ? Math.min(a + 1, l) : a + l + 1;
                else if (n && a && l) return r[a = n(r, o)] === o ? a : -1;
                if (o != o) return (a = e(i.q.call(r, s, l), A)) >= 0 ? a + s : -1;
                for (a = t > 0 ? s : l - 1; a >= 0 && a < l; a += t)
                    if (r[a] === o) return a;
                return -1
            }
        }
        var xe = we(1, me, ye),
            Oe = we(-1, be);

        function Ce(t, e, n) {
            var r = (ee(t) ? me : ge)(t, e, n);
            if (void 0 !== r && -1 !== r) return t[r]
        }

        function Se(t, e) {
            return Ce(t, kt(e))
        }

        function ke(t, e, n) {
            var r, i;
            if (e = Tt(e, n), ee(t))
                for (r = 0, i = t.length; r < i; r++) e(t[r], r, t);
            else {
                var o = $(t);
                for (r = 0, i = o.length; r < i; r++) e(t[o[r]], o[r], t)
            }
            return t
        }

        function je(t, e, n) {
            e = Mt(e, n);
            for (var r = !ee(t) && $(t), i = (r || t).length, o = Array(i), a = 0; a < i; a++) {
                var s = r ? r[a] : a;
                o[a] = e(t[s], s, t)
            }
            return o
        }

        function Te(t) {
            var e = function(e, n, r, i) {
                var o = !ee(e) && $(e),
                    a = (o || e).length,
                    s = t > 0 ? 0 : a - 1;
                for (i || (r = e[o ? o[s] : s], s += t); s >= 0 && s < a; s += t) {
                    var l = o ? o[s] : s;
                    r = n(r, e[l], l, e)
                }
                return r
            };
            return function(t, n, r, i) {
                var o = arguments.length >= 3;
                return e(t, Tt(n, i, 4), r, o)
            }
        }
        var Pe = Te(1),
            Ee = Te(-1);

        function Me(t, e, n) {
            var r = [];
            return e = Mt(e, n), ke(t, function(t, n, i) {
                e(t, n, i) && r.push(t)
            }), r
        }

        function De(t, e, n) {
            return Me(t, ue(Mt(e)), n)
        }

        function Ae(t, e, n) {
            e = Mt(e, n);
            for (var r = !ee(t) && $(t), i = (r || t).length, o = 0; o < i; o++) {
                var a = r ? r[o] : o;
                if (!e(t[a], a, t)) return !1
            }
            return !0
        }

        function Le(t, e, n) {
            e = Mt(e, n);
            for (var r = !ee(t) && $(t), i = (r || t).length, o = 0; o < i; o++) {
                var a = r ? r[o] : o;
                if (e(t[a], a, t)) return !0
            }
            return !1
        }

        function _e(t, e, n, r) {
            return ee(t) || (t = st(t)), ("number" != typeof n || r) && (n = 0), xe(t, e, n) >= 0
        }
        var Ne = o(function(t, e, n) {
            var r, i;
            return x(e) ? i = e : (e = wt(e), r = e.slice(0, -1), e = e[e.length - 1]), je(t, function(t) {
                var o = i;
                if (!o) {
                    if (r && r.length && (t = xt(t, r)), null == t) return;
                    o = t[e]
                }
                return null == o ? o : o.apply(t, n)
            })
        });

        function Ie(t, e) {
            return je(t, jt(e))
        }

        function Fe(t, e) {
            return Me(t, kt(e))
        }

        function Ve(t, e, n) {
            var r, i, o = -1 / 0,
                a = -1 / 0;
            if (null == e || "number" == typeof e && "object" != typeof t[0] && null != t)
                for (var s = 0, l = (t = ee(t) ? t : st(t)).length; s < l; s++) null != (r = t[s]) && r > o && (o = r);
            else e = Mt(e, n), ke(t, function(t, n, r) {
                ((i = e(t, n, r)) > a || i === -1 / 0 && o === -1 / 0) && (o = t, a = i)
            });
            return o
        }

        function Re(t, e, n) {
            var r, i, o = 1 / 0,
                a = 1 / 0;
            if (null == e || "number" == typeof e && "object" != typeof t[0] && null != t)
                for (var s = 0, l = (t = ee(t) ? t : st(t)).length; s < l; s++) null != (r = t[s]) && r < o && (o = r);
            else e = Mt(e, n), ke(t, function(t, n, r) {
                ((i = e(t, n, r)) < a || i === 1 / 0 && o === 1 / 0) && (o = t, a = i)
            });
            return o
        }

        function ze(t, e, n) {
            if (null == e || n) return ee(t) || (t = st(t)), t[Nt(t.length - 1)];
            var r = ee(t) ? mt(t) : st(t),
                i = z(r);
            e = Math.max(Math.min(e, i), 0);
            for (var o = i - 1, a = 0; a < e; a++) {
                var s = Nt(a, o),
                    l = r[a];
                r[a] = r[s], r[s] = l
            }
            return r.slice(0, e)
        }

        function He(t) {
            return ze(t, 1 / 0)
        }

        function $e(t, e, n) {
            var r = 0;
            return e = Mt(e, n), Ie(je(t, function(t, n, i) {
                return {
                    value: t,
                    index: r++,
                    criteria: e(t, n, i)
                }
            }).sort(function(t, e) {
                var n = t.criteria,
                    r = e.criteria;
                if (n !== r) {
                    if (n > r || void 0 === n) return 1;
                    if (n < r || void 0 === r) return -1
                }
                return t.index - e.index
            }), "value")
        }

        function Ue(t, e) {
            return function(n, r, i) {
                var o = e ? [
                    [],
                    []
                ] : {};
                return r = Mt(r, i), ke(n, function(e, i) {
                    var a = r(e, i, n);
                    t(o, e, a)
                }), o
            }
        }
        var Be = Ue(function(t, e, n) {
                P(t, n) ? t[n].push(e) : t[n] = [e]
            }),
            We = Ue(function(t, e, n) {
                t[n] = e
            }),
            qe = Ue(function(t, e, n) {
                P(t, n) ? t[n]++ : t[n] = 1
            }),
            Ge = Ue(function(t, e, n) {
                t[n ? 0 : 1].push(e)
            }, !0),
            Ke = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;

        function Ye(t) {
            return t ? T(t) ? i.q.call(t) : h(t) ? t.match(Ke) : ee(t) ? je(t, St) : st(t) : []
        }

        function Xe(t) {
            return null == t ? 0 : ee(t) ? t.length : $(t).length
        }

        function Je(t, e, n) {
            return e in n
        }
        var Ze = o(function(t, e) {
                var n = {},
                    r = e[0];
                if (null == t) return n;
                x(r) ? (e.length > 1 && (r = Tt(r, e[1])), e = Y(t)) : (r = Je, e = ne(e, !1, !1), t = Object(t));
                for (var i = 0, o = e.length; i < o; i++) {
                    var a = e[i],
                        s = t[a];
                    r(s, a, t) && (n[a] = s)
                }
                return n
            }),
            Qe = o(function(t, e) {
                var n, r = e[0];
                return x(r) ? (r = ue(r), e.length > 1 && (n = e[1])) : (e = je(ne(e, !1, !1), String), r = function(t, n) {
                    return !_e(e, n)
                }), Ze(t, r, n)
            });

        function tn(t, e, n) {
            return i.q.call(t, 0, Math.max(0, t.length - (null == e || n ? 1 : e)))
        }

        function en(t, e, n) {
            return null == t || t.length < 1 ? null == e || n ? void 0 : [] : null == e || n ? t[0] : tn(t, t.length - e)
        }

        function nn(t, e, n) {
            return i.q.call(t, null == e || n ? 1 : e)
        }

        function rn(t, e, n) {
            return null == t || t.length < 1 ? null == e || n ? void 0 : [] : null == e || n ? t[t.length - 1] : nn(t, Math.max(0, t.length - e))
        }

        function on(t) {
            return Me(t, Boolean)
        }

        function an(t, e) {
            return ne(t, e, !1)
        }
        var sn = o(function(t, e) {
                return e = ne(e, !0, !0), Me(t, function(t) {
                    return !_e(e, t)
                })
            }),
            ln = o(function(t, e) {
                return sn(t, e)
            });

        function cn(t, e, n, r) {
            c(e) || (r = n, n = e, e = !1), null != n && (n = Mt(n, r));
            for (var i = [], o = [], a = 0, s = z(t); a < s; a++) {
                var l = t[a],
                    u = n ? n(l, a, t) : l;
                e && !n ? (a && o === u || i.push(l), o = u) : n ? _e(o, u) || (o.push(u), i.push(l)) : _e(i, l) || i.push(l)
            }
            return i
        }
        var un = o(function(t) {
            return cn(ne(t, !0, !0))
        });

        function dn(t) {
            for (var e = [], n = arguments.length, r = 0, i = z(t); r < i; r++) {
                var o = t[r];
                if (!_e(e, o)) {
                    var a;
                    for (a = 1; a < n && _e(arguments[a], o); a++);
                    a === n && e.push(o)
                }
            }
            return e
        }

        function hn(t) {
            for (var e = t && Ve(t, z).length || 0, n = Array(e), r = 0; r < e; r++) n[r] = Ie(t, r);
            return n
        }
        var fn = o(hn);

        function pn(t, e) {
            for (var n = {}, r = 0, i = z(t); r < i; r++) e ? n[t[r]] = e[r] : n[t[r][0]] = t[r][1];
            return n
        }

        function gn(t, e, n) {
            null == e && (e = t || 0, t = 0), n || (n = e < t ? -1 : 1);
            for (var r = Math.max(Math.ceil((e - t) / n), 0), i = Array(r), o = 0; o < r; o++, t += n) i[o] = t;
            return i
        }

        function vn(t, e) {
            if (null == e || e < 1) return [];
            for (var n = [], r = 0, o = t.length; r < o;) n.push(i.q.call(t, r, r += e));
            return n
        }

        function mn(t, e) {
            return t._chain ? W(e).chain() : e
        }

        function bn(t) {
            return ke(ut(t), function(e) {
                var n = W[e] = t[e];
                W.prototype[e] = function() {
                    var t = [this._wrapped];
                    return i.o.apply(t, arguments), mn(this, n.apply(W, t))
                }
            }), W
        }
        ke(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(t) {
            var e = i.a[t];
            W.prototype[t] = function() {
                var n = this._wrapped;
                return null != n && (e.apply(n, arguments), "shift" !== t && "splice" !== t || 0 !== n.length || delete n[0]), mn(this, n)
            }
        }), ke(["concat", "join", "slice"], function(t) {
            var e = i.a[t];
            W.prototype[t] = function() {
                var t = this._wrapped;
                return null != t && (t = e.apply(t, arguments)), mn(this, t)
            }
        });
        var yn = W,
            wn = bn(r);
        wn._ = wn;
        var xn = wn
    }, function(t, e, n) {
        (function(r) {
            var i, o, a;
            a = "object" == typeof self && self.self === self && self || "object" == typeof r && r.global === r && r, i = [n(0), n(11), e], void 0 === (o = function(t, e, n) {
                a.Backbone = function(t, e, n, r) {
                    var i = t.Backbone,
                        o = Array.prototype.slice;
                    e.VERSION = "1.3.3", e.$ = r, e.noConflict = function() {
                        return t.Backbone = i, this
                    }, e.emulateHTTP = !1, e.emulateJSON = !1;
                    var a = function(t, e, r) {
                            n.each(e, function(e, i) {
                                n[i] && (t.prototype[i] = function(t, e, r) {
                                    switch (t) {
                                        case 1:
                                            return function() {
                                                return n[e](this[r])
                                            };
                                        case 2:
                                            return function(t) {
                                                return n[e](this[r], t)
                                            };
                                        case 3:
                                            return function(t, i) {
                                                return n[e](this[r], s(t, this), i)
                                            };
                                        case 4:
                                            return function(t, i, o) {
                                                return n[e](this[r], s(t, this), i, o)
                                            };
                                        default:
                                            return function() {
                                                var t = o.call(arguments);
                                                return t.unshift(this[r]), n[e].apply(n, t)
                                            }
                                    }
                                }(e, i, r))
                            })
                        },
                        s = function(t, e) {
                            return n.isFunction(t) ? t : n.isObject(t) && !e._isModel(t) ? l(t) : n.isString(t) ? function(e) {
                                return e.get(t)
                            } : t
                        },
                        l = function(t) {
                            var e = n.matches(t);
                            return function(t) {
                                return e(t.attributes)
                            }
                        },
                        c = e.Events = {},
                        u = /\s+/,
                        d = function(t, e, r, i, o) {
                            var a, s = 0;
                            if (r && "object" == typeof r) {
                                void 0 !== i && "context" in o && void 0 === o.context && (o.context = i);
                                for (a = n.keys(r); s < a.length; s++) e = d(t, e, a[s], r[a[s]], o)
                            } else if (r && u.test(r))
                                for (a = r.split(u); s < a.length; s++) e = t(e, a[s], i, o);
                            else e = t(e, r, i, o);
                            return e
                        };
                    c.on = function(t, e, n) {
                        return h(this, t, e, n)
                    };
                    var h = function(t, e, n, r, i) {
                        return t._events = d(f, t._events || {}, e, n, {
                            context: r,
                            ctx: t,
                            listening: i
                        }), i && ((t._listeners || (t._listeners = {}))[i.id] = i), t
                    };
                    c.listenTo = function(t, e, r) {
                        if (!t) return this;
                        var i = t._listenId || (t._listenId = n.uniqueId("l")),
                            o = this._listeningTo || (this._listeningTo = {}),
                            a = o[i];
                        if (!a) {
                            var s = this._listenId || (this._listenId = n.uniqueId("l"));
                            a = o[i] = {
                                obj: t,
                                objId: i,
                                id: s,
                                listeningTo: o,
                                count: 0
                            }
                        }
                        return h(t, e, r, this, a), this
                    };
                    var f = function(t, e, n, r) {
                        if (n) {
                            var i = t[e] || (t[e] = []),
                                o = r.context,
                                a = r.ctx,
                                s = r.listening;
                            s && s.count++, i.push({
                                callback: n,
                                context: o,
                                ctx: o || a,
                                listening: s
                            })
                        }
                        return t
                    };
                    c.off = function(t, e, n) {
                        return this._events ? (this._events = d(p, this._events, t, e, {
                            context: n,
                            listeners: this._listeners
                        }), this) : this
                    }, c.stopListening = function(t, e, r) {
                        var i = this._listeningTo;
                        if (!i) return this;
                        for (var o = t ? [t._listenId] : n.keys(i), a = 0; a < o.length; a++) {
                            var s = i[o[a]];
                            if (!s) break;
                            s.obj.off(e, r, this)
                        }
                        return this
                    };
                    var p = function(t, e, r, i) {
                        if (t) {
                            var o, a = 0,
                                s = i.context,
                                l = i.listeners;
                            if (e || r || s) {
                                for (var c = e ? [e] : n.keys(t); a < c.length; a++) {
                                    var u = t[e = c[a]];
                                    if (!u) break;
                                    for (var d = [], h = 0; h < u.length; h++) {
                                        var f = u[h];
                                        r && r !== f.callback && r !== f.callback._callback || s && s !== f.context ? d.push(f) : (o = f.listening) && 0 == --o.count && (delete l[o.id], delete o.listeningTo[o.objId])
                                    }
                                    d.length ? t[e] = d : delete t[e]
                                }
                                return t
                            }
                            for (var p = n.keys(l); a < p.length; a++) delete l[(o = l[p[a]]).id], delete o.listeningTo[o.objId]
                        }
                    };
                    c.once = function(t, e, r) {
                        var i = d(g, {}, t, e, n.bind(this.off, this));
                        return "string" == typeof t && null == r && (e = void 0), this.on(i, e, r)
                    }, c.listenToOnce = function(t, e, r) {
                        var i = d(g, {}, e, r, n.bind(this.stopListening, this, t));
                        return this.listenTo(t, i)
                    };
                    var g = function(t, e, r, i) {
                        if (r) {
                            var o = t[e] = n.once(function() {
                                i(e, o), r.apply(this, arguments)
                            });
                            o._callback = r
                        }
                        return t
                    };
                    c.trigger = function(t) {
                        if (!this._events) return this;
                        for (var e = Math.max(0, arguments.length - 1), n = Array(e), r = 0; r < e; r++) n[r] = arguments[r + 1];
                        return d(v, this._events, t, void 0, n), this
                    };
                    var v = function(t, e, n, r) {
                            if (t) {
                                var i = t[e],
                                    o = t.all;
                                i && o && (o = o.slice()), i && m(i, r), o && m(o, [e].concat(r))
                            }
                            return t
                        },
                        m = function(t, e) {
                            var n, r = -1,
                                i = t.length,
                                o = e[0],
                                a = e[1],
                                s = e[2];
                            switch (e.length) {
                                case 0:
                                    for (; ++r < i;)(n = t[r]).callback.call(n.ctx);
                                    return;
                                case 1:
                                    for (; ++r < i;)(n = t[r]).callback.call(n.ctx, o);
                                    return;
                                case 2:
                                    for (; ++r < i;)(n = t[r]).callback.call(n.ctx, o, a);
                                    return;
                                case 3:
                                    for (; ++r < i;)(n = t[r]).callback.call(n.ctx, o, a, s);
                                    return;
                                default:
                                    for (; ++r < i;)(n = t[r]).callback.apply(n.ctx, e);
                                    return
                            }
                        };
                    c.bind = c.on, c.unbind = c.off, n.extend(e, c);
                    var b = e.Model = function(t, e) {
                        var r = t || {};
                        e || (e = {}), this.cid = n.uniqueId(this.cidPrefix), this.attributes = {}, e.collection && (this.collection = e.collection), e.parse && (r = this.parse(r, e) || {});
                        var i = n.result(this, "defaults");
                        r = n.defaults(n.extend({}, i, r), i), this.set(r, e), this.changed = {}, this.initialize.apply(this, arguments)
                    };
                    n.extend(b.prototype, c, {
                        changed: null,
                        validationError: null,
                        idAttribute: "id",
                        cidPrefix: "c",
                        initialize: function() {},
                        toJSON: function(t) {
                            return n.clone(this.attributes)
                        },
                        sync: function() {
                            return e.sync.apply(this, arguments)
                        },
                        get: function(t) {
                            return this.attributes[t]
                        },
                        escape: function(t) {
                            return n.escape(this.get(t))
                        },
                        has: function(t) {
                            return null != this.get(t)
                        },
                        matches: function(t) {
                            return !!n.iteratee(t, this)(this.attributes)
                        },
                        set: function(t, e, r) {
                            if (null == t) return this;
                            var i;
                            if ("object" == typeof t ? (i = t, r = e) : (i = {})[t] = e, r || (r = {}), !this._validate(i, r)) return !1;
                            var o = r.unset,
                                a = r.silent,
                                s = [],
                                l = this._changing;
                            this._changing = !0, l || (this._previousAttributes = n.clone(this.attributes), this.changed = {});
                            var c = this.attributes,
                                u = this.changed,
                                d = this._previousAttributes;
                            for (var h in i) e = i[h], n.isEqual(c[h], e) || s.push(h), n.isEqual(d[h], e) ? delete u[h] : u[h] = e, o ? delete c[h] : c[h] = e;
                            if (this.idAttribute in i && (this.id = this.get(this.idAttribute)), !a) {
                                s.length && (this._pending = r);
                                for (var f = 0; f < s.length; f++) this.trigger("change:" + s[f], this, c[s[f]], r)
                            }
                            if (l) return this;
                            if (!a)
                                for (; this._pending;) r = this._pending, this._pending = !1, this.trigger("change", this, r);
                            return this._pending = !1, this._changing = !1, this
                        },
                        unset: function(t, e) {
                            return this.set(t, void 0, n.extend({}, e, {
                                unset: !0
                            }))
                        },
                        clear: function(t) {
                            var e = {};
                            for (var r in this.attributes) e[r] = void 0;
                            return this.set(e, n.extend({}, t, {
                                unset: !0
                            }))
                        },
                        hasChanged: function(t) {
                            return null == t ? !n.isEmpty(this.changed) : n.has(this.changed, t)
                        },
                        changedAttributes: function(t) {
                            if (!t) return !!this.hasChanged() && n.clone(this.changed);
                            var e = this._changing ? this._previousAttributes : this.attributes,
                                r = {};
                            for (var i in t) {
                                var o = t[i];
                                n.isEqual(e[i], o) || (r[i] = o)
                            }
                            return !!n.size(r) && r
                        },
                        previous: function(t) {
                            return null != t && this._previousAttributes ? this._previousAttributes[t] : null
                        },
                        previousAttributes: function() {
                            return n.clone(this._previousAttributes)
                        },
                        fetch: function(t) {
                            t = n.extend({
                                parse: !0
                            }, t);
                            var e = this,
                                r = t.success;
                            return t.success = function(n) {
                                var i = t.parse ? e.parse(n, t) : n;
                                if (!e.set(i, t)) return !1;
                                r && r.call(t.context, e, n, t), e.trigger("sync", e, n, t)
                            }, F(this, t), this.sync("read", this, t)
                        },
                        save: function(t, e, r) {
                            var i;
                            null == t || "object" == typeof t ? (i = t, r = e) : (i = {})[t] = e;
                            var o = (r = n.extend({
                                validate: !0,
                                parse: !0
                            }, r)).wait;
                            if (i && !o) {
                                if (!this.set(i, r)) return !1
                            } else if (!this._validate(i, r)) return !1;
                            var a = this,
                                s = r.success,
                                l = this.attributes;
                            r.success = function(t) {
                                a.attributes = l;
                                var e = r.parse ? a.parse(t, r) : t;
                                if (o && (e = n.extend({}, i, e)), e && !a.set(e, r)) return !1;
                                s && s.call(r.context, a, t, r), a.trigger("sync", a, t, r)
                            }, F(this, r), i && o && (this.attributes = n.extend({}, l, i));
                            var c = this.isNew() ? "create" : r.patch ? "patch" : "update";
                            "patch" !== c || r.attrs || (r.attrs = i);
                            var u = this.sync(c, this, r);
                            return this.attributes = l, u
                        },
                        destroy: function(t) {
                            t = t ? n.clone(t) : {};
                            var e = this,
                                r = t.success,
                                i = t.wait,
                                o = function() {
                                    e.stopListening(), e.trigger("destroy", e, e.collection, t)
                                };
                            t.success = function(n) {
                                i && o(), r && r.call(t.context, e, n, t), e.isNew() || e.trigger("sync", e, n, t)
                            };
                            var a = !1;
                            return this.isNew() ? n.defer(t.success) : (F(this, t), a = this.sync("delete", this, t)), i || o(), a
                        },
                        url: function() {
                            var t = n.result(this, "urlRoot") || n.result(this.collection, "url") || I();
                            if (this.isNew()) return t;
                            var e = this.get(this.idAttribute);
                            return t.replace(/[^\/]$/, "$&/") + encodeURIComponent(e)
                        },
                        parse: function(t, e) {
                            return t
                        },
                        clone: function() {
                            return new this.constructor(this.attributes)
                        },
                        isNew: function() {
                            return !this.has(this.idAttribute)
                        },
                        isValid: function(t) {
                            return this._validate({}, n.extend({}, t, {
                                validate: !0
                            }))
                        },
                        _validate: function(t, e) {
                            if (!e.validate || !this.validate) return !0;
                            t = n.extend({}, this.attributes, t);
                            var r = this.validationError = this.validate(t, e) || null;
                            return !r || (this.trigger("invalid", this, r, n.extend(e, {
                                validationError: r
                            })), !1)
                        }
                    }), a(b, {
                        keys: 1,
                        values: 1,
                        pairs: 1,
                        invert: 1,
                        pick: 0,
                        omit: 0,
                        chain: 1,
                        isEmpty: 1
                    }, "attributes");
                    var y = e.Collection = function(t, e) {
                            e || (e = {}), e.model && (this.model = e.model), void 0 !== e.comparator && (this.comparator = e.comparator), this._reset(), this.initialize.apply(this, arguments), t && this.reset(t, n.extend({
                                silent: !0
                            }, e))
                        },
                        w = {
                            add: !0,
                            remove: !0,
                            merge: !0
                        },
                        x = {
                            add: !0,
                            remove: !1
                        },
                        O = function(t, e, n) {
                            n = Math.min(Math.max(n, 0), t.length);
                            var r, i = Array(t.length - n),
                                o = e.length;
                            for (r = 0; r < i.length; r++) i[r] = t[r + n];
                            for (r = 0; r < o; r++) t[r + n] = e[r];
                            for (r = 0; r < i.length; r++) t[r + o + n] = i[r]
                        };
                    n.extend(y.prototype, c, {
                        model: b,
                        initialize: function() {},
                        toJSON: function(t) {
                            return this.map(function(e) {
                                return e.toJSON(t)
                            })
                        },
                        sync: function() {
                            return e.sync.apply(this, arguments)
                        },
                        add: function(t, e) {
                            return this.set(t, n.extend({
                                merge: !1
                            }, e, x))
                        },
                        remove: function(t, e) {
                            e = n.extend({}, e);
                            var r = !n.isArray(t);
                            t = r ? [t] : t.slice();
                            var i = this._removeModels(t, e);
                            return !e.silent && i.length && (e.changes = {
                                added: [],
                                merged: [],
                                removed: i
                            }, this.trigger("update", this, e)), r ? i[0] : i
                        },
                        set: function(t, e) {
                            if (null != t) {
                                (e = n.extend({}, w, e)).parse && !this._isModel(t) && (t = this.parse(t, e) || []);
                                var r = !n.isArray(t);
                                t = r ? [t] : t.slice();
                                var i = e.at;
                                null != i && (i = +i), i > this.length && (i = this.length), i < 0 && (i += this.length + 1);
                                var o, a, s = [],
                                    l = [],
                                    c = [],
                                    u = [],
                                    d = {},
                                    h = e.add,
                                    f = e.merge,
                                    p = e.remove,
                                    g = !1,
                                    v = this.comparator && null == i && !1 !== e.sort,
                                    m = n.isString(this.comparator) ? this.comparator : null;
                                for (a = 0; a < t.length; a++) {
                                    o = t[a];
                                    var b = this.get(o);
                                    if (b) {
                                        if (f && o !== b) {
                                            var y = this._isModel(o) ? o.attributes : o;
                                            e.parse && (y = b.parse(y, e)), b.set(y, e), c.push(b), v && !g && (g = b.hasChanged(m))
                                        }
                                        d[b.cid] || (d[b.cid] = !0, s.push(b)), t[a] = b
                                    } else h && (o = t[a] = this._prepareModel(o, e)) && (l.push(o), this._addReference(o, e), d[o.cid] = !0, s.push(o))
                                }
                                if (p) {
                                    for (a = 0; a < this.length; a++) d[(o = this.models[a]).cid] || u.push(o);
                                    u.length && this._removeModels(u, e)
                                }
                                var x = !1,
                                    C = !v && h && p;
                                if (s.length && C ? (x = this.length !== s.length || n.some(this.models, function(t, e) {
                                        return t !== s[e]
                                    }), this.models.length = 0, O(this.models, s, 0), this.length = this.models.length) : l.length && (v && (g = !0), O(this.models, l, null == i ? this.length : i), this.length = this.models.length), g && this.sort({
                                        silent: !0
                                    }), !e.silent) {
                                    for (a = 0; a < l.length; a++) null != i && (e.index = i + a), (o = l[a]).trigger("add", o, this, e);
                                    (g || x) && this.trigger("sort", this, e), (l.length || u.length || c.length) && (e.changes = {
                                        added: l,
                                        removed: u,
                                        merged: c
                                    }, this.trigger("update", this, e))
                                }
                                return r ? t[0] : t
                            }
                        },
                        reset: function(t, e) {
                            e = e ? n.clone(e) : {};
                            for (var r = 0; r < this.models.length; r++) this._removeReference(this.models[r], e);
                            return e.previousModels = this.models, this._reset(), t = this.add(t, n.extend({
                                silent: !0
                            }, e)), e.silent || this.trigger("reset", this, e), t
                        },
                        push: function(t, e) {
                            return this.add(t, n.extend({
                                at: this.length
                            }, e))
                        },
                        pop: function(t) {
                            var e = this.at(this.length - 1);
                            return this.remove(e, t)
                        },
                        unshift: function(t, e) {
                            return this.add(t, n.extend({
                                at: 0
                            }, e))
                        },
                        shift: function(t) {
                            var e = this.at(0);
                            return this.remove(e, t)
                        },
                        slice: function() {
                            return o.apply(this.models, arguments)
                        },
                        get: function(t) {
                            if (null != t) return this._byId[t] || this._byId[this.modelId(t.attributes || t)] || t.cid && this._byId[t.cid]
                        },
                        has: function(t) {
                            return null != this.get(t)
                        },
                        at: function(t) {
                            return t < 0 && (t += this.length), this.models[t]
                        },
                        where: function(t, e) {
                            return this[e ? "find" : "filter"](t)
                        },
                        findWhere: function(t) {
                            return this.where(t, !0)
                        },
                        sort: function(t) {
                            var e = this.comparator;
                            if (!e) throw new Error("Cannot sort a set without a comparator");
                            t || (t = {});
                            var r = e.length;
                            return n.isFunction(e) && (e = n.bind(e, this)), 1 === r || n.isString(e) ? this.models = this.sortBy(e) : this.models.sort(e), t.silent || this.trigger("sort", this, t), this
                        },
                        pluck: function(t) {
                            return this.map(t + "")
                        },
                        fetch: function(t) {
                            var e = (t = n.extend({
                                    parse: !0
                                }, t)).success,
                                r = this;
                            return t.success = function(n) {
                                var i = t.reset ? "reset" : "set";
                                r[i](n, t), e && e.call(t.context, r, n, t), r.trigger("sync", r, n, t)
                            }, F(this, t), this.sync("read", this, t)
                        },
                        create: function(t, e) {
                            var r = (e = e ? n.clone(e) : {}).wait;
                            if (!(t = this._prepareModel(t, e))) return !1;
                            r || this.add(t, e);
                            var i = this,
                                o = e.success;
                            return e.success = function(t, e, n) {
                                r && i.add(t, n), o && o.call(n.context, t, e, n)
                            }, t.save(null, e), t
                        },
                        parse: function(t, e) {
                            return t
                        },
                        clone: function() {
                            return new this.constructor(this.models, {
                                model: this.model,
                                comparator: this.comparator
                            })
                        },
                        modelId: function(t) {
                            return t[this.model.prototype.idAttribute || "id"]
                        },
                        _reset: function() {
                            this.length = 0, this.models = [], this._byId = {}
                        },
                        _prepareModel: function(t, e) {
                            if (this._isModel(t)) return t.collection || (t.collection = this), t;
                            (e = e ? n.clone(e) : {}).collection = this;
                            var r = new this.model(t, e);
                            return r.validationError ? (this.trigger("invalid", this, r.validationError, e), !1) : r
                        },
                        _removeModels: function(t, e) {
                            for (var n = [], r = 0; r < t.length; r++) {
                                var i = this.get(t[r]);
                                if (i) {
                                    var o = this.indexOf(i);
                                    this.models.splice(o, 1), this.length--, delete this._byId[i.cid];
                                    var a = this.modelId(i.attributes);
                                    null != a && delete this._byId[a], e.silent || (e.index = o, i.trigger("remove", i, this, e)), n.push(i), this._removeReference(i, e)
                                }
                            }
                            return n
                        },
                        _isModel: function(t) {
                            return t instanceof b
                        },
                        _addReference: function(t, e) {
                            this._byId[t.cid] = t;
                            var n = this.modelId(t.attributes);
                            null != n && (this._byId[n] = t), t.on("all", this._onModelEvent, this)
                        },
                        _removeReference: function(t, e) {
                            delete this._byId[t.cid];
                            var n = this.modelId(t.attributes);
                            null != n && delete this._byId[n], this === t.collection && delete t.collection, t.off("all", this._onModelEvent, this)
                        },
                        _onModelEvent: function(t, e, n, r) {
                            if (e) {
                                if (("add" === t || "remove" === t) && n !== this) return;
                                if ("destroy" === t && this.remove(e, r), "change" === t) {
                                    var i = this.modelId(e.previousAttributes()),
                                        o = this.modelId(e.attributes);
                                    i !== o && (null != i && delete this._byId[i], null != o && (this._byId[o] = e))
                                }
                            }
                            this.trigger.apply(this, arguments)
                        }
                    }), a(y, {
                        forEach: 3,
                        each: 3,
                        map: 3,
                        collect: 3,
                        reduce: 0,
                        foldl: 0,
                        inject: 0,
                        reduceRight: 0,
                        foldr: 0,
                        find: 3,
                        detect: 3,
                        filter: 3,
                        select: 3,
                        reject: 3,
                        every: 3,
                        all: 3,
                        some: 3,
                        any: 3,
                        include: 3,
                        includes: 3,
                        contains: 3,
                        invoke: 0,
                        max: 3,
                        min: 3,
                        toArray: 1,
                        size: 1,
                        first: 3,
                        head: 3,
                        take: 3,
                        initial: 3,
                        rest: 3,
                        tail: 3,
                        drop: 3,
                        last: 3,
                        without: 0,
                        difference: 0,
                        indexOf: 3,
                        shuffle: 1,
                        lastIndexOf: 3,
                        isEmpty: 1,
                        chain: 1,
                        sample: 3,
                        partition: 3,
                        groupBy: 3,
                        countBy: 3,
                        sortBy: 3,
                        indexBy: 3,
                        findIndex: 3,
                        findLastIndex: 3
                    }, "models");
                    var C = e.View = function(t) {
                            this.cid = n.uniqueId("view"), n.extend(this, n.pick(t, k)), this._ensureElement(), this.initialize.apply(this, arguments)
                        },
                        S = /^(\S+)\s*(.*)$/,
                        k = ["model", "collection", "el", "id", "attributes", "className", "tagName", "events"];
                    n.extend(C.prototype, c, {
                        tagName: "div",
                        $: function(t) {
                            return this.$el.find(t)
                        },
                        initialize: function() {},
                        render: function() {
                            return this
                        },
                        remove: function() {
                            return this._removeElement(), this.stopListening(), this
                        },
                        _removeElement: function() {
                            this.$el.remove()
                        },
                        setElement: function(t) {
                            return this.undelegateEvents(), this._setElement(t), this.delegateEvents(), this
                        },
                        _setElement: function(t) {
                            this.$el = t instanceof e.$ ? t : e.$(t), this.el = this.$el[0]
                        },
                        delegateEvents: function(t) {
                            if (t || (t = n.result(this, "events")), !t) return this;
                            for (var e in this.undelegateEvents(), t) {
                                var r = t[e];
                                if (n.isFunction(r) || (r = this[r]), r) {
                                    var i = e.match(S);
                                    this.delegate(i[1], i[2], n.bind(r, this))
                                }
                            }
                            return this
                        },
                        delegate: function(t, e, n) {
                            return this.$el.on(t + ".delegateEvents" + this.cid, e, n), this
                        },
                        undelegateEvents: function() {
                            return this.$el && this.$el.off(".delegateEvents" + this.cid), this
                        },
                        undelegate: function(t, e, n) {
                            return this.$el.off(t + ".delegateEvents" + this.cid, e, n), this
                        },
                        _createElement: function(t) {
                            return document.createElement(t)
                        },
                        _ensureElement: function() {
                            if (this.el) this.setElement(n.result(this, "el"));
                            else {
                                var t = n.extend({}, n.result(this, "attributes"));
                                this.id && (t.id = n.result(this, "id")), this.className && (t.class = n.result(this, "className")), this.setElement(this._createElement(n.result(this, "tagName"))), this._setAttributes(t)
                            }
                        },
                        _setAttributes: function(t) {
                            this.$el.attr(t)
                        }
                    }), e.sync = function(t, r, i) {
                        var o = j[t];
                        n.defaults(i || (i = {}), {
                            emulateHTTP: e.emulateHTTP,
                            emulateJSON: e.emulateJSON
                        });
                        var a = {
                            type: o,
                            dataType: "json"
                        };
                        if (i.url || (a.url = n.result(r, "url") || I()), null != i.data || !r || "create" !== t && "update" !== t && "patch" !== t || (a.contentType = "application/json", a.data = JSON.stringify(i.attrs || r.toJSON(i))), i.emulateJSON && (a.contentType = "application/x-www-form-urlencoded", a.data = a.data ? {
                                model: a.data
                            } : {}), i.emulateHTTP && ("PUT" === o || "DELETE" === o || "PATCH" === o)) {
                            a.type = "POST", i.emulateJSON && (a.data._method = o);
                            var s = i.beforeSend;
                            i.beforeSend = function(t) {
                                if (t.setRequestHeader("X-HTTP-Method-Override", o), s) return s.apply(this, arguments)
                            }
                        }
                        "GET" === a.type || i.emulateJSON || (a.processData = !1);
                        var l = i.error;
                        i.error = function(t, e, n) {
                            i.textStatus = e, i.errorThrown = n, l && l.call(i.context, t, e, n)
                        };
                        var c = i.xhr = e.ajax(n.extend(a, i));
                        return r.trigger("request", r, c, i), c
                    };
                    var j = {
                        create: "POST",
                        update: "PUT",
                        patch: "PATCH",
                        delete: "DELETE",
                        read: "GET"
                    };
                    e.ajax = function() {
                        return e.$.ajax.apply(e.$, arguments)
                    };
                    var T = e.Router = function(t) {
                            t || (t = {}), t.routes && (this.routes = t.routes), this._bindRoutes(), this.initialize.apply(this, arguments)
                        },
                        P = /\((.*?)\)/g,
                        E = /(\(\?)?:\w+/g,
                        M = /\*\w+/g,
                        D = /[\-{}\[\]+?.,\\\^$|#\s]/g;
                    n.extend(T.prototype, c, {
                        initialize: function() {},
                        route: function(t, r, i) {
                            n.isRegExp(t) || (t = this._routeToRegExp(t)), n.isFunction(r) && (i = r, r = ""), i || (i = this[r]);
                            var o = this;
                            return e.history.route(t, function(n) {
                                var a = o._extractParameters(t, n);
                                !1 !== o.execute(i, a, r) && (o.trigger.apply(o, ["route:" + r].concat(a)), o.trigger("route", r, a), e.history.trigger("route", o, r, a))
                            }), this
                        },
                        execute: function(t, e, n) {
                            t && t.apply(this, e)
                        },
                        navigate: function(t, n) {
                            return e.history.navigate(t, n), this
                        },
                        _bindRoutes: function() {
                            if (this.routes) {
                                this.routes = n.result(this, "routes");
                                for (var t, e = n.keys(this.routes); null != (t = e.pop());) this.route(t, this.routes[t])
                            }
                        },
                        _routeToRegExp: function(t) {
                            return t = t.replace(D, "\\$&").replace(P, "(?:$1)?").replace(E, function(t, e) {
                                return e ? t : "([^/?]+)"
                            }).replace(M, "([^?]*?)"), new RegExp("^" + t + "(?:\\?([\\s\\S]*))?$")
                        },
                        _extractParameters: function(t, e) {
                            var r = t.exec(e).slice(1);
                            return n.map(r, function(t, e) {
                                return e === r.length - 1 ? t || null : t ? decodeURIComponent(t) : null
                            })
                        }
                    });
                    var A = e.History = function() {
                            this.handlers = [], this.checkUrl = n.bind(this.checkUrl, this), "undefined" != typeof window && (this.location = window.location, this.history = window.history)
                        },
                        L = /^[#\/]|\s+$/g,
                        _ = /^\/+|\/+$/g,
                        N = /#.*$/;
                    A.started = !1, n.extend(A.prototype, c, {
                        interval: 50,
                        atRoot: function() {
                            return this.location.pathname.replace(/[^\/]$/, "$&/") === this.root && !this.getSearch()
                        },
                        matchRoot: function() {
                            return this.decodeFragment(this.location.pathname).slice(0, this.root.length - 1) + "/" === this.root
                        },
                        decodeFragment: function(t) {
                            return decodeURI(t.replace(/%25/g, "%2525"))
                        },
                        getSearch: function() {
                            var t = this.location.href.replace(/#.*/, "").match(/\?.+/);
                            return t ? t[0] : ""
                        },
                        getHash: function(t) {
                            var e = (t || this).location.href.match(/#(.*)$/);
                            return e ? e[1] : ""
                        },
                        getPath: function() {
                            var t = this.decodeFragment(this.location.pathname + this.getSearch()).slice(this.root.length - 1);
                            return "/" === t.charAt(0) ? t.slice(1) : t
                        },
                        getFragment: function(t) {
                            return null == t && (t = this._usePushState || !this._wantsHashChange ? this.getPath() : this.getHash()), t.replace(L, "")
                        },
                        start: function(t) {
                            if (A.started) throw new Error("Backbone.history has already been started");
                            if (A.started = !0, this.options = n.extend({
                                    root: "/"
                                }, this.options, t), this.root = this.options.root, this._wantsHashChange = !1 !== this.options.hashChange, this._hasHashChange = "onhashchange" in window && (void 0 === document.documentMode || document.documentMode > 7), this._useHashChange = this._wantsHashChange && this._hasHashChange, this._wantsPushState = !!this.options.pushState, this._hasPushState = !(!this.history || !this.history.pushState), this._usePushState = this._wantsPushState && this._hasPushState, this.fragment = this.getFragment(), this.root = ("/" + this.root + "/").replace(_, "/"), this._wantsHashChange && this._wantsPushState) {
                                if (!this._hasPushState && !this.atRoot()) {
                                    var e = this.root.slice(0, -1) || "/";
                                    return this.location.replace(e + "#" + this.getPath()), !0
                                }
                                this._hasPushState && this.atRoot() && this.navigate(this.getHash(), {
                                    replace: !0
                                })
                            }
                            if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {
                                this.iframe = document.createElement("iframe"), this.iframe.src = "javascript:0", this.iframe.style.display = "none", this.iframe.tabIndex = -1;
                                var r = document.body,
                                    i = r.insertBefore(this.iframe, r.firstChild).contentWindow;
                                i.document.open(), i.document.close(), i.location.hash = "#" + this.fragment
                            }
                            var o = window.addEventListener || function(t, e) {
                                return attachEvent("on" + t, e)
                            };
                            if (this._usePushState ? o("popstate", this.checkUrl, !1) : this._useHashChange && !this.iframe ? o("hashchange", this.checkUrl, !1) : this._wantsHashChange && (this._checkUrlInterval = setInterval(this.checkUrl, this.interval)), !this.options.silent) return this.loadUrl()
                        },
                        stop: function() {
                            var t = window.removeEventListener || function(t, e) {
                                return detachEvent("on" + t, e)
                            };
                            this._usePushState ? t("popstate", this.checkUrl, !1) : this._useHashChange && !this.iframe && t("hashchange", this.checkUrl, !1), this.iframe && (document.body.removeChild(this.iframe), this.iframe = null), this._checkUrlInterval && clearInterval(this._checkUrlInterval), A.started = !1
                        },
                        route: function(t, e) {
                            this.handlers.unshift({
                                route: t,
                                callback: e
                            })
                        },
                        checkUrl: function(t) {
                            var e = this.getFragment();
                            if (e === this.fragment && this.iframe && (e = this.getHash(this.iframe.contentWindow)), e === this.fragment) return !1;
                            this.iframe && this.navigate(e), this.loadUrl()
                        },
                        loadUrl: function(t) {
                            return !!this.matchRoot() && (t = this.fragment = this.getFragment(t), n.some(this.handlers, function(e) {
                                if (e.route.test(t)) return e.callback(t), !0
                            }))
                        },
                        navigate: function(t, e) {
                            if (!A.started) return !1;
                            e && !0 !== e || (e = {
                                trigger: !!e
                            }), t = this.getFragment(t || "");
                            var n = this.root;
                            "" !== t && "?" !== t.charAt(0) || (n = n.slice(0, -1) || "/");
                            var r = n + t;
                            if (t = this.decodeFragment(t.replace(N, "")), this.fragment !== t) {
                                if (this.fragment = t, this._usePushState) this.history[e.replace ? "replaceState" : "pushState"]({}, document.title, r);
                                else {
                                    if (!this._wantsHashChange) return this.location.assign(r);
                                    if (this._updateHash(this.location, t, e.replace), this.iframe && t !== this.getHash(this.iframe.contentWindow)) {
                                        var i = this.iframe.contentWindow;
                                        e.replace || (i.document.open(), i.document.close()), this._updateHash(i.location, t, e.replace)
                                    }
                                }
                                return e.trigger ? this.loadUrl(t) : void 0
                            }
                        },
                        _updateHash: function(t, e, n) {
                            if (n) {
                                var r = t.href.replace(/(javascript:|#).*$/, "");
                                t.replace(r + "#" + e)
                            } else t.hash = "#" + e
                        }
                    }), e.history = new A, b.extend = y.extend = T.extend = C.extend = A.extend = function(t, e) {
                        var r, i = this;
                        return r = t && n.has(t, "constructor") ? t.constructor : function() {
                            return i.apply(this, arguments)
                        }, n.extend(r, i, e), r.prototype = n.create(i.prototype, t), r.prototype.constructor = r, r.__super__ = i.prototype, r
                    };
                    var I = function() {
                            throw new Error('A "url" property or function must be specified')
                        },
                        F = function(t, e) {
                            var n = e.error;
                            e.error = function(r) {
                                n && n.call(e.context, t, r, e), t.trigger("error", t, r, e)
                            }
                        };
                    return e
                }(a, n, t, e)
            }.apply(e, i)) || (t.exports = o)
        }).call(this, n(26))
    }, function(t, e) {
        t.exports = function(t, e, n) {
            return e in t ? Object.defineProperty(t, e, {
                value: n,
                enumerable: !0,
                configurable: !0,
                writable: !0
            }) : t[e] = n, t
        }
    }, function(t, e, n) {
        "use strict";
        n.d(e, "q", function() {
            return x
        }), n.d(e, "v", function() {
            return h
        }), n.d(e, "u", function() {
            return f
        }), n.d(e, "k", function() {
            return b
        }), n.d(e, "s", function() {
            return c
        }), n.d(e, "g", function() {
            return O
        }), n.d(e, "d", function() {
            return C
        }), n.d(e, "b", function() {
            return v
        }), n.d(e, "r", function() {
            return w
        }), n.d(e, "f", function() {
            return j
        }), n.d(e, "n", function() {
            return T
        }), n.d(e, "e", function() {
            return y
        }), n.d(e, "x", function() {
            return d
        }), n.d(e, "t", function() {
            return m
        }), n.d(e, "h", function() {
            return S
        }), n.d(e, "i", function() {
            return p
        }), n.d(e, "c", function() {
            return M
        }), n.d(e, "j", function() {
            return L
        }), n.d(e, "w", function() {
            return _
        }), n.d(e, "a", function() {
            return u
        }), n.d(e, "o", function() {
            return P
        }), n.d(e, "m", function() {
            return E
        }), n.d(e, "l", function() {
            return D
        }), n.d(e, "p", function() {
            return A
        });
        var r = n(8),
            i = n.n(r),
            o = n(7),
            a = n.n(o),
            s = n(0),
            l = window.Element.prototype,
            c = l.matches || l.webkitMatchesSelector || l.mozMatchesSelector || l.msMatchesSelector,
            u = function t(e) {
                var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    r = Object(s.isArray)(e) ? a()(e) : [e];
                if (r.length) {
                    var i = r.shift();
                    if (i && (!n.unique || !document.querySelector('link[href="'.concat(i, '"]')))) {
                        var o = document.head,
                            l = document.createElement("link");
                        l.href = i, l.rel = "stylesheet", n.prepand ? o.insertBefore(l, o.firstChild) : o.appendChild(l)
                    }
                    t(r)
                }
            },
            d = function(t, e) {
                var n = {},
                    r = Object(s.keys)(e);
                for (var i in t)
                    if (t.hasOwnProperty(i)) {
                        var o = t[i],
                            a = e[i];
                        r.indexOf(i) >= 0 ? o !== a && (n[i] = a) : n[i] = null
                    } for (var l in e) e.hasOwnProperty(l) && Object(s.isUndefined)(t[l]) && (n[l] = e[l]);
                return n
            },
            h = function(t, e, n) {
                e = e.split(/\s+/), t = t instanceof Array ? t : [t];
                for (var r = function(r) {
                        t.forEach(function(t) {
                            return t.addEventListener(e[r], n)
                        })
                    }, i = 0; i < e.length; ++i) r(i)
            },
            f = function(t, e, n) {
                e = e.split(/\s+/), t = t instanceof Array ? t : [t];
                for (var r = function(r) {
                        t.forEach(function(t) {
                            return t.removeEventListener(e[r], n)
                        })
                    }, i = 0; i < e.length; ++i) r(i)
            },
            p = function(t) {
                return t.replace(parseFloat(t), "")
            },
            g = function(t) {
                return t[0].toUpperCase() + t.toLowerCase().slice(1)
            },
            v = function(t) {
                var e = t.split("-").filter(String);
                return e[0].toLowerCase() + e.slice(1).map(g)
            },
            m = function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                    n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,
                    r = 0;
                if (isNaN(t)) return n;
                if (t = parseFloat(t), Math.floor(t) !== t) {
                    var i = e.toString().split(".")[1];
                    r = i ? i.length : 0
                }
                return r ? parseFloat(t.toFixed(r)) : t
            },
            b = function(t) {
                return "draggable" in document.createElement("i") && (t ? t.get("Config").nativeDnD : 1)
            },
            y = function(t) {
                return Object(s.isElement)(t) || w(t) ? t : t && t.getEl ? t.getEl() : void 0
            },
            w = function(t) {
                return t && 3 === t.nodeType
            },
            x = function(t) {
                return t && !w(t) && ! function(t) {
                    return t && 8 === t.nodeType
                }(t)
            },
            O = function(t, e) {
                var n = t;
                return Object(s.isElement)(t) && (n = e(t).data("model")), n
            },
            C = function(t) {
                var e, n = {
                    top: 0,
                    left: 0,
                    width: 0,
                    height: 0
                };
                if (!t) return n;
                if (w(t)) {
                    var r = document.createRange();
                    r.selectNode(t), e = r.getBoundingClientRect(), r.detach()
                }
                return e || (t.getBoundingClientRect ? t.getBoundingClientRect() : n)
            },
            S = function(t) {
                return t.touches && t.touches[0] ? t.touches[0] : t
            },
            k = function(t) {
                return t.which || t.keyCode
            },
            j = function(t) {
                return String.fromCharCode(k(t))
            },
            T = function(t) {
                return 27 === k(t)
            },
            P = function(t) {
                return null !== t && !Array.isArray(t) && "object" === i()(t)
            },
            E = function(t) {
                return Object.keys(t).length <= 0
            },
            M = function(t) {
                return t && t.charAt(0).toUpperCase() + t.substring(1)
            },
            D = function(t) {
                return t && t.toHTML
            },
            A = function(t) {
                return t && t.toCSS
            },
            L = function(t) {
                return t.__gjsv
            },
            _ = function(t, e) {
                t.__gjsv = e
            }
    }, function(t, e, n) {
        "use strict";
        (function(t) {
            n.d(e, "e", function() {
                return r
            }), n.d(e, "p", function() {
                return i
            }), n.d(e, "a", function() {
                return o
            }), n.d(e, "c", function() {
                return a
            }), n.d(e, "d", function() {
                return s
            }), n.d(e, "o", function() {
                return l
            }), n.d(e, "q", function() {
                return c
            }), n.d(e, "t", function() {
                return u
            }), n.d(e, "i", function() {
                return d
            }), n.d(e, "r", function() {
                return h
            }), n.d(e, "s", function() {
                return f
            }), n.d(e, "k", function() {
                return p
            }), n.d(e, "m", function() {
                return g
            }), n.d(e, "j", function() {
                return v
            }), n.d(e, "l", function() {
                return m
            }), n.d(e, "g", function() {
                return b
            }), n.d(e, "f", function() {
                return y
            }), n.d(e, "h", function() {
                return w
            }), n.d(e, "n", function() {
                return x
            }), n.d(e, "b", function() {
                return O
            });
            var r = "1.12.0",
                i = "object" == typeof self && self.self === self && self || "object" == typeof t && t.global === t && t || Function("return this")() || {},
                o = Array.prototype,
                a = Object.prototype,
                s = "undefined" != typeof Symbol ? Symbol.prototype : null,
                l = o.push,
                c = o.slice,
                u = a.toString,
                d = a.hasOwnProperty,
                h = "undefined" != typeof ArrayBuffer,
                f = "undefined" != typeof DataView,
                p = Array.isArray,
                g = Object.keys,
                v = Object.create,
                m = h && ArrayBuffer.isView,
                b = isNaN,
                y = isFinite,
                w = !{
                    toString: null
                }.propertyIsEnumerable("toString"),
                x = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"],
                O = Math.pow(2, 53) - 1
        }).call(this, n(26))
    }, function(t, e, n) {
        "use strict";
        n.r(e), n.d(e, "eventDrag", function() {
            return S
        });
        var r = n(8),
            i = n.n(r),
            o = n(7),
            a = n.n(o),
            s = n(2),
            l = n.n(s),
            c = n(0),
            u = n(3),
            d = n(23),
            h = n(1),
            f = n.n(h),
            p = n(21),
            g = n(10),
            v = n(12);

        function m(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function b(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? m(Object(n), !0).forEach(function(e) {
                    l()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : m(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var y = f.a.Model.extend({
                defaults: {
                    type: "text",
                    label: "",
                    name: "",
                    min: "",
                    max: "",
                    unit: "",
                    step: 1,
                    value: "",
                    target: "",
                    default: "",
                    placeholder: "",
                    changeProp: 0,
                    options: []
                },
                initialize: function() {
                    var t = this.get("target"),
                        e = this.get("name"),
                        n = this.get("changeProp");
                    if (!this.get("id") && this.set("id", e), t) {
                        this.target = t, this.unset("target");
                        var r = n ? "change:".concat(e) : "change:attributes:".concat(e);
                        this.listenTo(t, r, this.targetUpdated)
                    }
                },
                props: function() {
                    return this.attributes
                },
                targetUpdated: function() {
                    var t = this.getTargetValue();
                    this.set({
                        value: t
                    }, {
                        fromTarget: 1
                    })
                },
                getTargetValue: function() {
                    var t, e = this.get("name"),
                        n = this.target;
                    return t = this.get("changeProp") ? n.get(e) : n.getAttributes()[e], Object(c.isUndefined)(t) ? "" : t
                },
                setTargetValue: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.target,
                        r = this.get("name");
                    if (!Object(c.isUndefined)(t)) {
                        var i = t;
                        if ("false" === t ? i = !1 : "true" === t && (i = !0), this.get("changeProp")) n.set(r, i, e);
                        else {
                            var o = b({}, n.get("attributes"));
                            o[r] = i, n.set("attributes", o, e)
                        }
                    }
                },
                setValueFromInput: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                        n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = {
                            value: t
                        };
                    this.set(r, b(b({}, n), {}, {
                        avoidStore: 1
                    })), e && (this.set("value", "", n), this.set(r, n))
                },
                getInitValue: function() {
                    var t, e = this.target,
                        n = this.get("name");
                    if (e) {
                        var r = e.get("attributes");
                        t = this.get("changeProp") ? e.get(n) : r[n]
                    }
                    return t || this.get("value") || this.get("default")
                }
            }),
            w = f.a.Collection.extend({
                model: y,
                initialize: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    this.em = e.em || "", this.listenTo(this, "add", this.handleAdd), this.listenTo(this, "reset", this.handleReset)
                },
                handleReset: function(t) {
                    var e = (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}).previousModels;
                    (void 0 === e ? [] : e).forEach(function(t) {
                        return t.trigger("remove")
                    })
                },
                handleAdd: function(t) {
                    var e = this.target;
                    e && (t.target = e)
                },
                setTarget: function(t) {
                    this.target = t
                },
                add: function(t, e) {
                    var n = this.em;
                    if (Object(c.isString)(t) || Object(c.isArray)(t)) {
                        var r = n && n.get && n.get("TraitManager"),
                            i = function() {
                                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                                return {
                                    build: function(e) {
                                        var n = [];
                                        "string" == typeof e && (e = [e]);
                                        for (var r = 0; r < e.length; r++) {
                                            var i = {},
                                                o = e[r];
                                            switch (i.name = o, o) {
                                                case "target":
                                                    i.type = "select", i.default = !1, i.options = t.optionsTarget
                                            }
                                            n.push(i)
                                        }
                                        return n
                                    }
                                }
                            }(r && r.getConfig());
                        Object(c.isString)(t) && (t = [t]);
                        for (var o = 0, a = t.length; o < a; o++) {
                            var s = t[o],
                                l = Object(c.isString)(s) ? i.build(s)[0] : s;
                            l.target = this.target, t[o] = l
                        }
                    }
                    return f.a.Collection.prototype.add.apply(this, [t, e])
                }
            });

        function x(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function O(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? x(Object(n), !0).forEach(function(e) {
                    l()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : x(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var C = function(t) {
                return t.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&")
            },
            S = "component:drag",
            k = f.a.Model.extend(d.a).extend({
                defaults: {
                    tagName: "div",
                    type: "",
                    name: "",
                    removable: !0,
                    draggable: !0,
                    droppable: !0,
                    badgable: !0,
                    stylable: !0,
                    "stylable-require": "",
                    "style-signature": "",
                    unstylable: "",
                    highlightable: !0,
                    copyable: !0,
                    resizable: !1,
                    editable: !1,
                    layerable: !0,
                    selectable: !0,
                    hoverable: !0,
                    void: !1,
                    state: "",
                    status: "",
                    content: "",
                    icon: "",
                    style: "",
                    classes: "",
                    script: "",
                    "script-props": "",
                    "script-export": "",
                    attributes: "",
                    traits: ["id", "title"],
                    propagate: "",
                    dmode: "",
                    toolbar: null
                },
                init: function() {},
                updated: function(t, e, n) {},
                removed: function() {},
                initialize: function() {
                    var t = this,
                        e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    Object(c.bindAll)(this, "__upSymbProps", "__upSymbCls", "__upSymbComps");
                    var r = n.em,
                        i = this.parent(),
                        o = i && i.attributes;
                    if (o && o.propagate) {
                        var a = {},
                            s = o.propagate;
                        s.forEach(function(t) {
                            return a[t] = i.get(t)
                        }), a.propagate = s, a = O(O({}, a), e), this.set(a)
                    }
                    var l = this.get("propagate");
                    l && this.set("propagate", Object(c.isArray)(l) ? l : [l]), n && n.config && n.config.voidElements.indexOf(this.get("tagName")) >= 0 && this.set("void", !0), n.em = r, this.opt = n, this.em = r, this.frame = n.frame, this.config = n.config || {}, this.set("attributes", O(O({}, this.defaults.attributes || {}), this.get("attributes") || {})), this.ccid = k.createId(this, n), this.initClasses(), this.initTraits(), this.initComponents(), this.initToolbar(), this.initScriptProps(), this.listenTo(this, "change:script", this.scriptUpdated), this.listenTo(this, "change:tagName", this.tagUpdated), this.listenTo(this, "change:attributes", this.attrUpdated), this.listenTo(this, "change:attributes:id", this._idUpdated), this.on("change:toolbar", this.__emitUpdateTlb), this.set("status", ""), this.views = [], this.__isSymbol() && this.__initSymb(), ["classes", "traits", "components"].forEach(function(e) {
                        var n = "add remove ".concat("components" !== e ? "change" : "");
                        t.listenTo(t.get(e), n.trim(), function() {
                            for (var n = arguments.length, r = new Array(n), i = 0; i < n; i++) r[i] = arguments[i];
                            return t.emitUpdate.apply(t, [e].concat(r))
                        })
                    }), n.temporary || (this.init(), r && r.trigger("component:create", this))
                },
                __emitUpdateTlb: function() {
                    this.emitUpdate("toolbar")
                },
                is: function(t) {
                    return !(this.get("type") != t)
                },
                props: function() {
                    return this.attributes
                },
                index: function() {
                    var t = this.collection;
                    return t && t.indexOf(this)
                },
                setDragMode: function(t) {
                    return this.set("dmode", t)
                },
                find: function(t) {
                    var e = [],
                        n = this.view.$el.find(t);
                    return n.each(function(t) {
                        var r = n.eq(t).data("model");
                        r && e.push(r)
                    }), e
                },
                findType: function(t) {
                    var e = [];
                    return function n(r) {
                        return r.forEach(function(r) {
                            r.is(t) && e.push(r), n(r.components())
                        })
                    }(this.components()), e
                },
                closest: function(t) {
                    var e = this.view.$el.closest(t);
                    return e.length && e.data("model")
                },
                closestType: function(t) {
                    for (var e = this.parent(); e && !e.is(t);) e = e.parent();
                    return e
                },
                contains: function(t) {
                    var e = !1;
                    if (!t) return e;
                    return function n(r) {
                        !e && r.forEach(function(r) {
                            r === t && (e = !0), !e && n(r.components())
                        })
                    }(this.components()), e
                },
                tagUpdated: function() {
                    var t = this.collection,
                        e = t.indexOf(this);
                    t.remove(this), t.add(this, {
                        at: e
                    })
                },
                replaceWith: function(t) {
                    var e = this.collection,
                        n = e.indexOf(this);
                    return e.remove(this), e.add(t, {
                        at: n
                    })
                },
                attrUpdated: function(t, e) {
                    var n = this,
                        r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        i = this.get("attributes"),
                        o = i.class;
                    o && this.setClass(o), delete i.class;
                    var a = i.style;
                    a && this.setStyle(a), delete i.style;
                    var s = O({}, this.previous("attributes")),
                        l = Object(u.x)(s, this.get("attributes"));
                    Object(c.keys)(l).forEach(function(t) {
                        return n.trigger("change:attributes:".concat(t), n, l[t], r)
                    })
                },
                setAttributes: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return this.set("attributes", O({}, t), e), this
                },
                addAttributes: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = O(O({}, this.getAttributes()), t);
                    return this.setAttributes(n, e), this
                },
                getStyle: function() {
                    var t = this.em;
                    if (t && t.getConfig("avoidInlineStyle")) {
                        var e = t.get("state"),
                            n = t.get("CssComposer").getIdRule(this.getId(), {
                                state: e
                            });
                        if (this.rule = n, n) return n.getStyle()
                    }
                    return d.a.getStyle.call(this)
                },
                setStyle: function() {
                    var t = this,
                        e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = this.em,
                        i = this.opt;
                    if (r && r.getConfig("avoidInlineStyle") && !i.temporary) {
                        var o = this.get("style") || {};
                        e = O(O({}, e = Object(c.isString)(e) ? this.parseStyle(e) : e), o);
                        var a = r.get("state"),
                            s = r.get("CssComposer"),
                            l = this.getStyle();
                        this.rule = s.setIdRule(this.getId(), e, O(O({}, n), {}, {
                            state: a
                        }));
                        var h = Object(u.x)(l, e);
                        this.set("style", {}, {
                            silent: 1
                        }), Object(c.keys)(h).forEach(function(e) {
                            return t.trigger("change:style:".concat(e))
                        })
                    } else e = d.a.setStyle.apply(this, arguments);
                    return e
                },
                getAttributes: function() {
                    var t, e = this.em,
                        n = [],
                        r = O({}, this.get("attributes")),
                        i = e && e.get("SelectorManager"),
                        o = this.getId();
                    return this.get("classes").forEach(function(t) {
                        return n.push(Object(c.isString)(t) ? t : t.get("name"))
                    }), n.length && (r.class = n.join(" ")), Object(c.has)(r, "id") || (e && e.getConfig("avoidInlineStyle") ? t = i && i.get(o, i.Selector.TYPE_ID) : Object(c.isEmpty)(this.getStyle()) || (t = 1), t && (r.id = this.getId())), r
                },
                addClass: function(t) {
                    var e = this.em.get("SelectorManager").addClass(t);
                    return this.get("classes").add(e)
                },
                setClass: function(t) {
                    return this.get("classes").reset(), this.addClass(t)
                },
                removeClass: function(t) {
                    var e = [];
                    t = Object(c.isArray)(t) ? t : [t];
                    var n = this.get("classes"),
                        r = g.a.TYPE_CLASS;
                    return t.forEach(function(t) {
                        t.split(" ").forEach(function(t) {
                            var i = n.where({
                                name: t,
                                type: r
                            })[0];
                            i && e.push(n.remove(i))
                        })
                    }), e
                },
                getClasses: function() {
                    var t = this.getAttributes().class;
                    return t ? t.split(" ") : []
                },
                __initSymb: function() {
                    this.__symbReady || (this.on("change", this.__upSymbProps), this.__symbReady = 1)
                },
                __isSymbol: function() {
                    return Object(c.isArray)(this.get("__symbol"))
                },
                __isSymbolTop: function() {
                    var t = this.parent();
                    return this.__isSymbol() && t && !t.__isSymbol()
                },
                __getSymbolOf: function() {
                    return this.get("__symbolOf")
                },
                __getSymbToUp: function() {
                    var t = this.get("__symbol");
                    return this.__isSymbol() ? t.filter(function(t) {
                        return t.collection || t.prevColl
                    }) : []
                },
                __getSymbTop: function(t) {
                    for (var e = this.__isSymbol(), n = this, r = this.parent(t); r && (e ? r.__isSymbol() : r.__getSymbolOf());) n = r, r = r.parent(t);
                    return n
                },
                __upSymbProps: function() {
                    var t = this.changedAttributes(),
                        e = t.attributes || {};
                    delete t.status, delete t.open, delete t.__symbol, delete t.__symbolOf, delete t.attributes, delete e.id, Object(u.m)(e) || (t.attributes = e), !Object(u.m)(t) && this.__getSymbToUp().forEach(function(e) {
                        return e.set(t)
                    })
                },
                __upSymbCls: function() {
                    var t = this;
                    this.__getSymbToUp().forEach(function(e) {
                        e.set({
                            classes: t.get("classes")
                        })
                    })
                },
                __upSymbComps: function(t, e, n) {
                    if (n)
                        if (n.add) {
                            var r = t.__getSymbToUp();
                            this.__getSymbToUp().forEach(function(e) {
                                var i = e.__getSymbTop(),
                                    o = r.filter(function(t) {
                                        var e = t.__getSymbTop({
                                            prev: 1
                                        });
                                        return i && e && e === i
                                    })[0] || t.clone({
                                        symbol: 1
                                    });
                                e.append(o, n)
                            })
                        } else t.__getSymbToUp().forEach(function(t) {
                            return t.remove(n)
                        });
                    else this.__getSymbToUp().forEach(function(n) {
                        var r = t.models.map(function(t) {
                            return t.clone({
                                symbol: 1
                            })
                        });
                        n.components().reset(r, e)
                    })
                },
                initClasses: function() {
                    var t = this.get("attributes").class || [],
                        e = [this, "change:classes", this.initClasses],
                        n = this.get("classes") || t,
                        r = Object(c.isString)(n) ? n.split(" ") : n;
                    this.stopListening.apply(this, e);
                    var i = this.normalizeClasses(r),
                        o = new v.a([]);
                    return this.set("classes", o), o.add(i), o.on("add remove reset", this.__upSymbCls), this.listenTo.apply(this, e), this
                },
                initComponents: function() {
                    var t = [this, "change:components", this.initComponents];
                    this.stopListening.apply(this, t);
                    var e = new p.a(null, this.opt);
                    e.parent = this;
                    var n = this.get("components"),
                        r = !this.opt.avoidChildren;
                    return this.set("components", e), r && e.add(Object(c.isFunction)(n) ? n(this) : n, this.opt), e.on("add remove reset", this.__upSymbComps), this.listenTo.apply(this, t), this
                },
                initTraits: function(t) {
                    var e = this.em,
                        n = [this, "change:traits", this.initTraits];
                    this.stopListening.apply(this, n), this.loadTraits();
                    var r = O({}, this.get("attributes")),
                        i = this.get("traits");
                    return i.each(function(t) {
                        if (!t.get("changeProp")) {
                            var e = t.get("name"),
                                n = t.getInitValue();
                            e && n && (r[e] = n)
                        }
                    }), i.length && this.set("attributes", r), this.listenTo.apply(this, n), t && e && e.trigger("component:toggled"), this
                },
                initScriptProps: function() {
                    if (!this.opt.temporary) {
                        var t = "script-props",
                            e = ["change:".concat(t), this.initScriptProps];
                        this.off.apply(this, e);
                        var n = this.previous(t) || [],
                            r = this.get(t) || [],
                            i = n.map(function(t) {
                                return "change:".concat(t)
                            }).join(" "),
                            o = r.map(function(t) {
                                return "change:".concat(t)
                            }).join(" ");
                        i && this.off(i, this.__scriptPropsChange), o && this.on(o, this.__scriptPropsChange), this.on.apply(this, e)
                    }
                },
                __scriptPropsChange: function(t, e) {
                    (arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}).avoidStore || this.trigger("rerender")
                },
                append: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.components().add(t, e);
                    return Object(c.isArray)(n) ? n : [n]
                },
                components: function(t) {
                    var e = this.get("components");
                    return Object(c.isUndefined)(t) ? e : (e.reset(), t && this.append(t))
                },
                empty: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return this.components().reset(null, t), this
                },
                parent: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.collection || t.prev && this.prevColl;
                    return e && e.parent
                },
                scriptUpdated: function() {
                    this.set("scriptUpdated", 1)
                },
                initToolbar: function() {
                    var t = this.em,
                        e = t && t.getConfig("stylePrefix") || "";
                    if (!this.get("toolbar")) {
                        var n = [];
                        this.collection && n.push({
                            attributes: {
                                class: "fa fa-arrow-up"
                            },
                            command: function(t) {
                                return t.runCommand("core:component-exit", {
                                    force: 1
                                })
                            }
                        }), this.get("draggable") && n.push({
                            attributes: {
                                class: "fa fa-arrows-alt ".concat(e, "no-touch-actions"),
                                draggable: !0
                            },
                            command: "tlb-move"
                        }), this.get("copyable") && n.push({
                            attributes: {
                                class: "fa fa-clone"
                            },
                            command: "tlb-clone"
                        }), this.get("removable") && n.push({
                            attributes: {
                                class: "fa fa-trash"
                            },
                            command: "tlb-delete"
                        }), this.set("toolbar", n)
                    }
                },
                loadTraits: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    if (t = t || this.get("traits"), !((t = Object(c.isFunction)(t) ? t(this) : t) instanceof w)) {
                        var n = new w([], this.opt);
                        n.setTarget(this), t.length && (t.forEach(function(t) {
                            return t.attributes && delete t.attributes.value
                        }), n.add(t)), this.set("traits", n, e)
                    }
                    return this
                },
                getTrait: function(t) {
                    return this.get("traits").filter(function(e) {
                        return e.get("id") === t || e.get("name") === t
                    })[0]
                },
                updateTrait: function(t, e) {
                    var n = this.em,
                        r = this.getTrait(t);
                    return r && r.set(e), n && n.trigger("component:toggled"), this
                },
                getTraitIndex: function(t) {
                    var e = this.getTrait(t);
                    return e ? this.get("traits").indexOf(e) : -1
                },
                removeTrait: function(t) {
                    var e = this,
                        n = this.em,
                        r = (Object(c.isArray)(t) ? t : [t]).map(function(t) {
                            return e.getTrait(t)
                        }),
                        i = this.get("traits").remove(r);
                    return n && n.trigger("component:toggled"), i
                },
                addTrait: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.em,
                        r = this.get("traits").add(t, e);
                    return n && n.trigger("component:toggled"), r
                },
                normalizeClasses: function(t) {
                    var e = [],
                        n = this.em,
                        r = n && n.get("SelectorManager");
                    if (r) return t.models ? a()(t.models) : (t.forEach(function(t) {
                        return e.push(r.add(t))
                    }), e)
                },
                clone: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.em,
                        n = O({}, this.attributes),
                        r = O({}, this.opt),
                        i = this.getId(),
                        o = e && e.get("CssComposer");
                    n.attributes = O({}, n.attributes), delete n.attributes.id, n.components = [], n.classes = [], n.traits = [], this.__isSymbolTop() && (t.symbol = 1), this.get("components").each(function(e, r) {
                        n.components[r] = e.clone(O(O({}, t), {}, {
                            _inner: 1
                        }))
                    }), this.get("traits").each(function(t, e) {
                        n.traits[e] = t.clone()
                    }), this.get("classes").each(function(t, e) {
                        n.classes[e] = t.get("name")
                    }), n.status = "", n.view = "", r.collection = null;
                    var a = new this.constructor(n, r),
                        s = "#".concat(a.getId());
                    if ((o ? o.getRules("#".concat(i)) : []).forEach(function(t) {
                            var e = t.clone();
                            e.set("selectors", [s]), o.getAll().add(e)
                        }), a.unset("__symbol"), t.symbol) {
                        var l = this.get("__symbol") || [];
                        l.push(a), this.set("__symbol", l), this.__initSymb(), a.set("__symbolOf", this)
                    }
                    var c = "component:clone";
                    return e && e.trigger(c, a), this.trigger(c, a), a
                },
                getName: function() {
                    var t = this.em,
                        e = this.attributes,
                        n = e.type,
                        r = e.tagName,
                        i = this.get("name"),
                        o = "div" == r,
                        a = n || (o ? "box" : r),
                        s = !n && r && !o && r,
                        l = "domComponents.names.",
                        c = i && t && t.t("".concat(l).concat(i)),
                        d = s && t && t.t("".concat(l).concat(s)),
                        h = t && (t.t("".concat(l).concat(n)) || t.t("".concat(l).concat(r)));
                    return this.get("custom-name") || c || i || d || Object(u.c)(s) || h || Object(u.c)(a)
                },
                getIcon: function() {
                    var t = this.get("icon");
                    return t ? t + " " : ""
                },
                toHTML: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this,
                        n = [],
                        r = t.tag || e.get("tagName"),
                        i = e.get("void"),
                        o = t.attributes,
                        a = this.getAttrToHTML();
                    for (var s in delete t.tag, o && (Object(c.isFunction)(o) ? a = o(e, a) || {} : Object(c.isObject)(o) && (a = o)), a) {
                        var l = a[s],
                            u = Object(c.isString)(l) ? l.replace(/"/g, "&quot;") : l;
                        Object(c.isUndefined)(u) || (Object(c.isBoolean)(u) ? u && n.push(s) : n.push("".concat(s, '="').concat(u, '"')))
                    }
                    var d = n.length ? " ".concat(n.join(" ")) : "",
                        h = "<".concat(r).concat(d).concat(i ? "/" : "", ">").concat(e.get("content"));
                    return e.get("components").each(function(e) {
                        return h += e.toHTML(t)
                    }), !i && (h += "</".concat(r, ">")), h
                },
                getAttrToHTML: function() {
                    var t = this.getAttributes();
                    return delete t.style, t
                },
                toJSON: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = f.a.Model.prototype.toJSON.call(this, t);
                    return e.attributes = this.getAttributes(), delete e.attributes.class, delete e.toolbar, delete e.traits, delete e.status, delete e.open, t.keepSymbols || (e.__symbol && (e.__symbol = this.__getSymbToUp().map(function(t) {
                        return t.getId()
                    })), e.__symbolOf && (e.__symbolOf = e.__symbolOf.getId())), this.em.getConfig("avoidDefaults") && this.getChangedProps(e), e
                },
                getChangedProps: function(t) {
                    var e = t || f.a.Model.prototype.toJSON.apply(this),
                        n = Object(c.result)(this, "defaults");
                    return Object(c.forEach)(n, function(t, n) {
                        -1 === ["type"].indexOf(n) && e[n] === t && delete e[n]
                    }), Object(c.isEmpty)(e.type) && delete e.type, Object(c.forEach)(["attributes", "style"], function(t) {
                        Object(c.isEmpty)(n[t]) && Object(c.isEmpty)(e[t]) && delete e[t]
                    }), Object(c.forEach)(["classes", "components"], function(t) {
                        (!e[t] || Object(c.isEmpty)(n[t]) && !e[t].length) && delete e[t]
                    }), e
                },
                getId: function() {
                    return (this.get("attributes") || {}).id || this.ccid || this.cid
                },
                setId: function(t, e) {
                    var n = O({}, this.get("attributes"));
                    return n.id = t, this.set("attributes", n, e), this
                },
                getEl: function(t) {
                    var e = this.getView(t);
                    return e && e.el
                },
                getView: function(t) {
                    var e = this.view,
                        n = this.views;
                    return t && (e = n.filter(function(e) {
                        return e._getFrame() === t.view
                    })[0]), e
                },
                getCurrentView: function() {
                    var t = (this.em.get("currentFrame") || {}).model;
                    return this.getView(t)
                },
                __getScriptProps: function() {
                    var t = this.props();
                    return (this.get("script-props") || []).reduce(function(e, n) {
                        return e[n] = t[n], e
                    }, {})
                },
                getScriptString: function(t) {
                    var e = this,
                        n = t || this.get("script");
                    if (!n) return n;
                    if (this.get("script-props")) n = n.toString().trim();
                    else {
                        if ("function" == typeof n) {
                            var r = n.toString().trim();
                            n = (r = r.replace(/^function[\s\w]*\(\)\s?\{/, "").replace(/\}$/, "")).trim()
                        }
                        var o = this.em.getConfig(),
                            a = C(o.tagVarStart || "{[ "),
                            s = C(o.tagVarEnd || " ]}"),
                            l = new RegExp("".concat(a, "([\\w\\d-]*)").concat(s), "g");
                        n = n.replace(l, function(t, n) {
                            e.scriptUpdated();
                            var r = e.attributes[n] || "";
                            return Object(c.isArray)(r) || "object" == i()(r) ? JSON.stringify(r) : r
                        })
                    }
                    return n
                },
                emitUpdate: function(t) {
                    for (var e = this.em, n = "component:update" + (t ? ":".concat(t) : ""), r = arguments.length, i = new Array(r > 1 ? r - 1 : 0), o = 1; o < r; o++) i[o - 1] = arguments[o];
                    t && this.updated.apply(this, [t, t && this.get(t), t && this.previous(t)].concat(i)), this.trigger.apply(this, [n].concat(i)), e && e.trigger.apply(e, [n, this].concat(i))
                },
                onAll: function(t) {
                    return Object(c.isFunction)(t) && (t(this), this.components().forEach(function(e) {
                        return e.onAll(t)
                    })), this
                },
                remove: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.collection;
                    return e && e.remove(this, t)
                },
                move: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return this.remove({
                        temporary: 1
                    }), t && t.append(this, e), this
                },
                resetId: function() {
                    var t = this.em,
                        e = this.getId();
                    if (e) {
                        var n = k.createId(this);
                        this.setId(n);
                        var r = t && t.get("CssComposer").getIdRule(e),
                            i = r && r.get("selectors").at(0);
                        return i && i.set("name", n), this
                    }
                },
                _getStyleRule: function() {
                    var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).id,
                        e = this.em,
                        n = t || this.getId();
                    return e && e.get("CssComposer").getIdRule(n)
                },
                _getStyleSelector: function(t) {
                    var e = this._getStyleRule(t);
                    return e && e.get("selectors").at(0)
                },
                _idUpdated: function(t, e) {
                    if (!(arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}).idUpdate) {
                        var n = this.ccid,
                            r = (this.get("attributes") || {}).id,
                            i = (this.previous("attributes") || {}).id || n,
                            o = k.getList(this);
                        if (o[r] || !r && i) return this.setId(i, {
                            idUpdate: 1
                        });
                        delete o[i], o[r] = this, this.ccid = r;
                        var a = this._getStyleSelector({
                            id: i
                        });
                        a && a.set({
                            name: r,
                            label: r
                        })
                    }
                }
            }, {
                isComponent: function(t) {
                    return {
                        tagName: t.tagName ? t.tagName.toLowerCase() : ""
                    }
                },
                ensureInList: function(t) {
                    var e = k.getList(t),
                        n = t.getId(),
                        r = e[n];
                    if (r) {
                        if (r !== t) {
                            var i = k.getIncrementId(n, e);
                            t.setId(i), e[i] = t
                        }
                    } else e[n] = t;
                    t.components().forEach(function(t) {
                        return k.ensureInList(t)
                    })
                },
                createId: function(t) {
                    var e, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = k.getList(t),
                        i = t.get("attributes").id;
                    return i ? (e = k.getIncrementId(i, r, n), t.setId(e)) : e = k.getNewId(r), r[e] = t, e
                },
                getNewId: function(t) {
                    for (var e = Object.keys(t).length.toString().length + 2, n = (Math.random() + 1.1).toString(36).slice(-e), r = "i".concat(n); t[r];) r = k.getNewId(t);
                    return r
                },
                getIncrementId: function(t, e) {
                    var n = (arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}).keepIds,
                        r = 1,
                        i = t;
                    if ((void 0 === n ? [] : n).indexOf(t) < 0)
                        for (; e[i];) r++, i = "".concat(t, "-").concat(r);
                    return i
                },
                getList: function(t) {
                    var e = t.opt && t.opt.domc;
                    return e ? e.componentsById : {}
                },
                checkId: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [],
                        n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
                        i = Object(c.isArray)(t) ? t : [t],
                        o = r.keepIds,
                        a = void 0 === o ? [] : o;
                    i.forEach(function(t) {
                        var i = t.attributes,
                            o = void 0 === i ? {} : i,
                            s = t.components,
                            l = o.id;
                        if (l && n[l] && a.indexOf(l) < 0) {
                            var u = k.getIncrementId(l, n);
                            o.id = u, Object(c.isArray)(e) && e.forEach(function(t) {
                                var e = t.selectors;
                                e.forEach(function(t, n) {
                                    t === "#".concat(l) && (e[n] = "#".concat(u))
                                })
                            })
                        }
                        s && k.checkId(s, e, n, r)
                    })
                }
            });
        e.default = k
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(1),
            a = n.n(o),
            s = n(0),
            l = n(21),
            c = n(35),
            u = n(12),
            d = n(9),
            h = n(3);

        function f(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function p(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? f(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : f(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = a.a.View.extend({
            className: function() {
                return this.getClasses()
            },
            tagName: function() {
                return this.model.get("tagName")
            },
            initialize: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = this.model,
                    n = t.config || {},
                    r = n.em,
                    i = e.opt || {},
                    o = this.$el,
                    a = this.el;
                n.draggableComponents, this.opts = t, this.modelOpt = i, this.config = n, this.em = r || "", this.pfx = n.stylePrefix || "", this.ppfx = n.pStylePrefix || "", this.attr = e.get("attributes"), this.classe = this.attr.class || [], this.listenTo(e, "change:style", this.updateStyle), this.listenTo(e, "change:attributes change:_innertext", this.renderAttributes), this.listenTo(e, "change:highlightable", this.updateHighlight), this.listenTo(e, "change:status", this.updateStatus), this.listenTo(e, "change:script rerender", this.reset), this.listenTo(e, "change:content", this.updateContent), this.listenTo(e, "change", this.handleChange), this.listenTo(e, "active", this.onActive), this.listenTo(e, "disable", this.onDisable), o.data("model", e), Object(h.w)(a, this), e.view = this, this._getFrame() && e.views.push(this), this.initClasses(), this.initComponents({
                    avoidRender: 1
                }), this.events = p(p({}, this.events), this.__isDraggable() && {
                    dragstart: "handleDragStart"
                }), this.delegateEvents(), !i.temporary && this.init(this._clbObj())
            },
            __isDraggable: function() {
                var t = this.model,
                    e = this.config,
                    n = t.attributes,
                    r = n._innertext,
                    i = n.draggable;
                return e.draggableComponents && i && !r
            },
            _clbObj: function() {
                var t = this.em,
                    e = this.model,
                    n = this.el;
                return {
                    editor: t && t.getEditor(),
                    model: e,
                    el: n
                }
            },
            init: function() {},
            removed: function() {},
            onActive: function() {},
            onDisable: function() {},
            remove: function() {
                var t = this;
                a.a.View.prototype.remove.apply(t, arguments);
                var e = t.model,
                    n = (t._getFrame() || {}).model;
                e.components().forEach(function(t) {
                    var e = t.getView(n);
                    e && e.remove()
                });
                var r = e.views;
                return r.splice(r.indexOf(t), 1), t.removed(t._clbObj()), t.$el.data({
                    model: "",
                    collection: "",
                    view: ""
                }), delete t.model, delete t.$el, delete t.el.__gjsv, delete t.childrenView, delete t.scriptContainer, delete t.opts, t
            },
            handleDragStart: function(t) {
                t.preventDefault(), t.stopPropagation(), this.em.get("Commands").run("tlb-move", {
                    target: this.model,
                    event: t
                })
            },
            initClasses: function() {
                var t = this.model,
                    e = "change:classes",
                    n = t.get("classes");
                n instanceof u.a && (this.stopListening(t, e, this.initClasses), this.listenTo(t, e, this.initClasses), this.listenTo(n, "add remove change", this.updateClasses), n.length && this.importClasses())
            },
            initComponents: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = this.model,
                    n = this.$el,
                    r = this.childrenView,
                    i = e.get("components"),
                    o = [e, "change:components", this.initComponents];
                i instanceof l.a && (n.data("collection", i), r && r.remove(), this.stopListening.apply(this, o), !t.avoidRender && this.renderChildren(), this.listenTo.apply(this, o))
            },
            handleChange: function() {
                var t = this.model,
                    e = Object(s.keys)(t.changed);
                if (1 !== e.length || "status" !== e[0])
                    for (var n in t.emitUpdate(), t.changed) t.emitUpdate(n)
            },
            importClasses: function() {
                var t = this.config.em.get("SelectorManager");
                t && this.model.get("classes").each(function(e) {
                    t.add(e.get("name"))
                })
            },
            updateStatus: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = (this.em, this.el),
                    n = this.model.get("status"),
                    r = (this.pfx, this.ppfx),
                    i = "".concat(r, "selected"),
                    o = "".concat(i, "-parent"),
                    a = "".concat(r, "freezed"),
                    s = "".concat(r, "hovered"),
                    l = [i, o, a, s];
                this.$el.removeClass(l.join(" "));
                var c = e.getAttribute("class") || "",
                    u = "";
                switch (n) {
                    case "selected":
                        u = "".concat(c, " ").concat(i);
                        break;
                    case "selected-parent":
                        u = "".concat(c, " ").concat(o);
                        break;
                    case "freezed":
                        u = "".concat(c, " ").concat(a);
                        break;
                    case "freezed-selected":
                        u = "".concat(c, " ").concat(a, " ").concat(i);
                        break;
                    case "hovered":
                        u = t.avoidHover ? "" : "".concat(c, " ").concat(s)
                }(u = u.trim()) && e.setAttribute("class", u)
            },
            updateHighlight: function() {
                var t = this.model.get("highlightable");
                this.setAttribute("data-highlightable", t ? 1 : "")
            },
            updateStyle: function() {
                var t = this.model,
                    e = this.em,
                    n = this.el;
                if (e && e.getConfig("avoidInlineStyle")) {
                    var r = t.getStyle(),
                        i = Object(s.isEmpty)(r);
                    !i && t.setStyle(r), t.get("_innertext") && i ? n.removeAttribute("id") : n.id = t.getId()
                } else this.setAttribute("style", t.styleToString())
            },
            updateClasses: function() {
                var t = this.model.get("classes").pluck("name").join(" ");
                this.setAttribute("class", t), this.updateStatus()
            },
            setAttribute: function(t, e) {
                var n = this.$el;
                e ? n.attr(t, e) : n.removeAttr(t)
            },
            getClasses: function() {
                return this.model.getClasses().join(" ")
            },
            updateAttributes: function() {
                var t = [],
                    e = this.model,
                    n = this.$el,
                    r = this.el,
                    i = (this.config, e.attributes),
                    o = i.highlightable,
                    a = i.textable,
                    l = p(p(p({
                        "data-gjs-type": i.type || "default"
                    }, this.__isDraggable() ? {
                        draggable: !0
                    } : {}), o ? {
                        "data-highlightable": 1
                    } : {}), a ? {
                        contenteditable: "false",
                        "data-gjs-textable": "true"
                    } : {});
                Object(s.each)(r.attributes, function(e) {
                    return t.push(e.nodeName)
                }), t.forEach(function(t) {
                    return n.removeAttr(t)
                });
                var c = p(p({}, l), e.getAttributes());
                Object(s.keys)(c).forEach(function(t) {
                    return !1 === c[t] && delete c[t]
                }), n.attr(c), this.updateStyle()
            },
            updateContent: function() {
                this.getChildrenContainer().innerHTML = this.model.get("content")
            },
            prevDef: function(t) {
                t.preventDefault()
            },
            updateScript: function() {
                var t = this.model,
                    e = this.em;
                t.get("script") && e && e.get("Canvas").getCanvasView().updateScript(this)
            },
            getChildrenContainer: function() {
                var t = this.el;
                return "function" == typeof this.getChildrenSelector ? t = this.el.querySelector(this.getChildrenSelector()) : this.getTemplate, t
            },
            getOffsetRect: function() {
                var t = {},
                    e = this.el,
                    n = 0,
                    r = 0;
                return function i(o) {
                    var a = o.offsetParent;
                    a ? (n += a.offsetTop, r += a.offsetLeft, i(a)) : (t.top = e.offsetTop + n, t.left = e.offsetLeft + r, t.bottom = t.top + e.offsetHeight, t.right = t.left + e.offsetWidth)
                }(e), t
            },
            isInViewport: function() {
                var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).rect,
                    e = this.el.ownerDocument,
                    n = e.body,
                    r = e.defaultView.frameElement,
                    i = t || this.getOffsetRect(),
                    o = i.top,
                    a = i.left,
                    s = this._getFrame().getOffsetRect();
                return o >= s.scrollTop && a >= s.scrollLeft && o <= s.scrollBottom && a <= r.offsetWidth + n.scrollLeft
            },
            scrollIntoView: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = this.getOffsetRect();
                if (!this.isInViewport({
                        rect: e
                    }) || t.force) {
                    var n = this.el;
                    "smooth" !== t.behavior ? n.ownerDocument.defaultView.scrollTo(0, e.top) : n.scrollIntoView(p({
                        behavior: "smooth",
                        block: "nearest"
                    }, t))
                }
            },
            reset: function() {
                var t = this.el;
                this.el = "", this._ensureElement(), this._setData(), Object(d.j)(t, this.el), this.render()
            },
            _setData: function() {
                var t = this.model,
                    e = t.components();
                this.$el.data({
                    model: t,
                    collection: e,
                    view: this
                })
            },
            _getFrame: function() {
                return this.config.frameView
            },
            renderChildren: function() {
                this.updateContent();
                var t = this.getChildrenContainer(),
                    e = this.childrenView || new c.a({
                        collection: this.model.get("components"),
                        config: this.config,
                        componentTypes: this.opts.componentTypes
                    });
                e.render(t), this.childrenView = e;
                for (var n = Array.prototype.slice.call(e.el.childNodes), r = 0, i = n.length; r < i; r++) t.appendChild(n.shift())
            },
            renderAttributes: function() {
                this.updateAttributes(), this.updateClasses()
            },
            render: function() {
                return this.renderAttributes(), this.modelOpt.temporary || (this.renderChildren(), this.updateScript(), Object(h.w)(this.el, this), this.postRender()), this
            },
            postRender: function() {
                var t = this.em,
                    e = this.model;
                this.modelOpt.temporary || (this.onRender(this._clbObj()), t && t.trigger("component:mount", e))
            },
            onRender: function() {}
        })
    }, function(t, e, n) {
        var r = n(74),
            i = n(75),
            o = n(43),
            a = n(76);
        t.exports = function(t) {
            return r(t) || i(t) || o(t) || a()
        }
    }, function(t, e) {
        function n(e) {
            return "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? t.exports = n = function(t) {
                return typeof t
            } : t.exports = n = function(t) {
                return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
            }, n(e)
        }
        t.exports = n
    }, function(t, e, n) {
        "use strict";
        n.d(e, "i", function() {
            return i
        }), n.d(e, "g", function() {
            return o
        }), n.d(e, "h", function() {
            return a
        }), n.d(e, "f", function() {
            return s
        }), n.d(e, "j", function() {
            return l
        }), n.d(e, "b", function() {
            return c
        }), n.d(e, "a", function() {
            return u
        }), n.d(e, "e", function() {
            return d
        }), n.d(e, "d", function() {
            return h
        }), n.d(e, "c", function() {
            return f
        });
        var r = n(0),
            i = "transitionend oTransitionEnd transitionend webkitTransitionEnd",
            o = function(t) {
                return t && 9 === t.nodeType
            },
            a = function(t) {
                return t && !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length)
            },
            s = function(t) {
                for (; t.firstChild;) t.removeChild(t.firstChild)
            },
            l = function(t, e) {
                t.parentNode.replaceChild(e, t)
            },
            c = function(t, e, n) {
                var i = t.childNodes,
                    o = i.length,
                    a = Object(r.isUndefined)(n) ? o : n;
                Object(r.isString)(e) && (t.insertAdjacentHTML("beforeEnd", e), e = t.lastChild, t.removeChild(e)), a >= o ? t.appendChild(e) : t.insertBefore(e, i[a])
            },
            u = function(t, e) {
                return c(t, e)
            },
            d = function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "",
                    n = arguments.length > 2 ? arguments[2] : void 0,
                    i = document.createElement(t);
                return e && Object(r.each)(e, function(t, e) {
                    return i.setAttribute(e, t)
                }), n && (Object(r.isString)(n) ? i.innerHTML = n : i.appendChild(n)), i
            },
            h = function(t, e) {
                var n;
                try {
                    n = new window[e](t.type, t)
                } catch (t) {
                    (n = document.createEvent(e)).initEvent(t.type, !0, !0)
                }
                return n.keyCodeVal = t.keyCode, n._parentEvent = t, ["keyCode", "which"].forEach(function(t) {
                    Object.defineProperty(n, t, {
                        get: function() {
                            return this.keyCodeVal
                        }
                    })
                }), n
            },
            f = function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];
                (Array.isArray(e) ? e : [e]).forEach(function(e) {
                    var n = e.tag || "div",
                        i = e.attributes || {},
                        o = document.createElement(n);
                    Object(r.each)(i, function(t, e) {
                        o.setAttribute(e, t)
                    }), t.appendChild(o)
                })
            }
    }, function(t, e, n) {
        "use strict";
        var r = n(1),
            i = n.n(r),
            o = n(0),
            a = i.a.Model,
            s = a.extend({
                idAttribute: "name",
                defaults: {
                    name: "",
                    label: "",
                    type: 1,
                    active: !0,
                    private: !1,
                    protected: !1
                },
                initialize: function(t) {
                    var e = (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}).config,
                        n = void 0 === e ? {} : e,
                        r = this.get("name"),
                        i = this.get("label");
                    r ? i || this.set("label", r) : this.set("name", i);
                    var o = this.get("name"),
                        a = n.escapeName,
                        l = a ? a(o) : s.escapeName(o);
                    this.set("name", l), this.em = n.em
                },
                getFullName: function() {
                    var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).escape,
                        e = this.get("name"),
                        n = "";
                    switch (this.get("type")) {
                        case 1:
                            n = ".";
                            break;
                        case 2:
                            n = "#"
                    }
                    return n + (t ? t(e) : e)
                },
                toJSON: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.em,
                        n = a.prototype.toJSON.call(this, [t]),
                        r = Object(o.result)(this, "defaults");
                    if (e && e.getConfig("avoidDefaults")) {
                        Object(o.forEach)(r, function(t, e) {
                            n[e] === t && delete n[e]
                        }), n.label === n.name && delete n.label;
                        var i = Object(o.keys)(n).length;
                        1 === i && n.name && (n = n.name), 2 === i && n.name && n.type && (n = this.getFullName())
                    }
                    return n
                }
            }, {
                TYPE_CLASS: 1,
                TYPE_ID: 2,
                escapeName: function(t) {
                    return "".concat(t).trim().replace(/([^a-z0-9\w-\:]+)/gi, "-")
                }
            });
        e.a = s
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = document,
            i = window,
            o = Array.prototype,
            a = o.filter,
            s = o.indexOf,
            l = o.map,
            c = o.push,
            u = o.reverse,
            d = o.slice,
            h = o.splice,
            f = /^#[\w-]*$/,
            p = /^\.[\w-]*$/,
            g = /<.+>/,
            v = /^\w+$/;

        function m(t, e) {
            return void 0 === e && (e = r), p.test(t) ? e.getElementsByClassName(t.slice(1)) : v.test(t) ? e.getElementsByTagName(t) : e.querySelectorAll(t)
        }

        function b(t, e) {
            if (void 0 === e && (e = r), t) {
                if (t.__cash) return t;
                var n = t;
                if (P(t)) {
                    if (e.__cash && (e = e[0]), !(n = f.test(t) ? e.getElementById(t.slice(1)) : g.test(t) ? ht(t) : m(t, e))) return
                } else if (T(t)) return this.ready(t);
                (n.nodeType || n === i) && (n = [n]), this.length = n.length;
                for (var o = 0, a = this.length; o < a; o++) this[o] = n[o]
            }
        }

        function y(t, e) {
            return new b(t, e)
        }
        var w = y.fn = y.prototype = b.prototype = {
            constructor: y,
            __cash: !0,
            length: 0,
            splice: h
        };
        w.get = function(t) {
            return void 0 === t ? d.call(this) : this[t < 0 ? t + this.length : t]
        }, w.eq = function(t) {
            return y(this.get(t))
        }, w.first = function() {
            return this.eq(0)
        }, w.last = function() {
            return this.eq(-1)
        }, w.map = function(t) {
            return y(l.call(this, function(e, n) {
                return t.call(e, n, e)
            }))
        }, w.slice = function() {
            return y(d.apply(this, arguments))
        };
        var x = /(?:^\w|[A-Z]|\b\w)/g,
            O = /[\s-_]+/g;

        function C(t) {
            return t.replace(x, function(t, e) {
                return t[e ? "toUpperCase" : "toLowerCase"]()
            }).replace(O, "")
        }

        function S(t, e) {
            for (var n = 0, r = t.length; n < r && !1 !== e.call(t[n], t[n], n, t); n++);
        }
        y.camelCase = C, y.each = S, w.each = function(t) {
            return S(this, function(e, n) {
                return t.call(e, n, e)
            }), this
        }, w.removeProp = function(t) {
            return this.each(function(e, n) {
                delete n[t]
            })
        }, y.extend = w.extend = function(t) {
            void 0 === t && (t = this);
            for (var e = arguments, n = e.length, r = n < 2 ? 0 : 1; r < n; r++)
                for (var i in e[r]) t[i] = e[r][i];
            return t
        };
        var k = 1;

        function j(t, e) {
            var n = t && (t.matches || t.webkitMatchesSelector || t.mozMatchesSelector || t.msMatchesSelector || t.oMatchesSelector);
            return !!n && n.call(t, e)
        }

        function T(t) {
            return "function" == typeof t
        }

        function P(t) {
            return "string" == typeof t
        }

        function E(t) {
            return !isNaN(parseFloat(t)) && isFinite(t)
        }
        y.guid = k, y.matches = j, y.isFunction = T, y.isString = P, y.isNumeric = E;
        var M = Array.isArray;

        function D(t) {
            return P(t) ? function(e, n) {
                return j(n, t)
            } : t.__cash ? function(e, n) {
                return t.is(n)
            } : function(t, e, n) {
                return e === n
            }
        }
        y.isArray = M, w.prop = function(t, e) {
            if (t) {
                if (P(t)) return arguments.length < 2 ? this[0] && this[0][t] : this.each(function(n, r) {
                    r[t] = e
                });
                for (var n in t) this.prop(n, t[n]);
                return this
            }
        }, w.filter = function(t) {
            if (!t) return y();
            var e = T(t) ? t : D(t);
            return y(a.call(this, function(n, r) {
                return e.call(n, r, n, t)
            }))
        };
        var A = /\S+/g;

        function L(t) {
            return P(t) && t.match(A) || []
        }

        function _(t) {
            return t.filter(function(t, e, n) {
                return n.indexOf(t) === e
            })
        }

        function N(t, e, n) {
            if (1 === t.nodeType) {
                var r = i.getComputedStyle(t, null);
                return e ? n ? r.getPropertyValue(e) : r[e] : r
            }
        }

        function I(t, e) {
            return parseInt(N(t, e), 10) || 0
        }
        w.hasClass = function(t) {
            var e = L(t),
                n = !1;
            return e.length && this.each(function(t, r) {
                return !(n = r.classList.contains(e[0]))
            }), n
        }, w.removeAttr = function(t) {
            var e = L(t);
            return e.length ? this.each(function(t, n) {
                S(e, function(t) {
                    n.removeAttribute(t)
                })
            }) : this
        }, w.attr = function(t, e) {
            if (t) {
                if (P(t)) {
                    if (arguments.length < 2) {
                        if (!this[0]) return;
                        var n = this[0].getAttribute(t);
                        return null === n ? void 0 : n
                    }
                    return null === e ? this.removeAttr(t) : this.each(function(n, r) {
                        r.setAttribute(t, e)
                    })
                }
                for (var r in t) this.attr(r, t[r]);
                return this
            }
        }, w.toggleClass = function(t, e) {
            var n = L(t),
                r = void 0 !== e;
            return n.length ? this.each(function(t, i) {
                S(n, function(t) {
                    r ? e ? i.classList.add(t) : i.classList.remove(t) : i.classList.toggle(t)
                })
            }) : this
        }, w.addClass = function(t) {
            return this.toggleClass(t, !0)
        }, w.removeClass = function(t) {
            return arguments.length ? this.toggleClass(t, !1) : this.attr("class", "")
        }, y.unique = _, w.add = function(t, e) {
            return y(_(this.get().concat(y(t, e).get())))
        };
        var F = /^--/;

        function V(t) {
            return F.test(t)
        }
        var R = {},
            z = r.createElement("div").style,
            H = ["webkit", "moz", "ms", "o"];

        function $(t, e) {
            if (void 0 === e && (e = V(t)), e) return t;
            if (!R[t]) {
                var n = C(t),
                    r = "" + n.charAt(0).toUpperCase() + n.slice(1);
                S((n + " " + H.join(r + " ") + r).split(" "), function(e) {
                    if (e in z) return R[t] = e, !1
                })
            }
            return R[t]
        }
        y.prefixedProp = $;
        var U = {
            animationIterationCount: !0,
            columnCount: !0,
            flexGrow: !0,
            flexShrink: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            order: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0
        };

        function B(t, e, n) {
            return void 0 === n && (n = V(t)), n || U[t] || !E(e) ? e : e + "px"
        }
        w.css = function(t, e) {
            if (P(t)) {
                var n = V(t);
                return t = $(t, n), arguments.length < 2 ? this[0] && N(this[0], t, n) : t ? (e = B(t, e, n), this.each(function(r, i) {
                    1 === i.nodeType && (n ? i.style.setProperty(t, e) : i.style[t] = e)
                })) : this
            }
            for (var r in t) this.css(r, t[r]);
            return this
        };
        var W = "__cashData",
            q = /^data-(.*)/;

        function G(t) {
            return t[W] = t[W] || {}
        }

        function K(t, e) {
            var n = G(t);
            if (e) {
                if (!(e in n)) {
                    var r = t.dataset ? t.dataset[e] || t.dataset[C(e)] : y(t).attr("data-" + e);
                    if (void 0 !== r) {
                        try {
                            r = JSON.parse(r)
                        } catch (t) {}
                        n[e] = r
                    }
                }
                return n[e]
            }
            return n
        }

        function Y(t, e) {
            return I(t, "border" + (e ? "Left" : "Top") + "Width") + I(t, "padding" + (e ? "Left" : "Top")) + I(t, "padding" + (e ? "Right" : "Bottom")) + I(t, "border" + (e ? "Right" : "Bottom") + "Width")
        }

        function X(t, e) {
            for (var n = 0, r = e.length; n < r; n++)
                if (t.indexOf(e[n]) < 0) return !1;
            return !0
        }

        function J(t, e, n) {
            S(t[n], function(t) {
                t[0];
                var r = t[1];
                e.removeEventListener(n, r)
            }), delete t[n]
        }
        y.hasData = function(t) {
            return W in t
        }, w.data = function(t, e) {
            var n = this;
            if (!t) {
                if (!this[0]) return;
                return S(this[0].attributes, function(t) {
                    var e = t.name.match(q);
                    e && n.data(e[1])
                }), K(this[0])
            }
            if (P(t)) return void 0 === e ? this[0] && K(this[0], t) : this.each(function(n, r) {
                return function(t, e, n) {
                    G(r)[e] = n
                }(0, t, e)
            });
            for (var r in t) this.data(r, t[r]);
            return this
        }, w.removeData = function(t) {
            return this.each(function(e, n) {
                return function(t, e) {
                    void 0 === e ? delete t[W] : delete G(t)[e]
                }(n, t)
            })
        }, S(["Width", "Height"], function(t) {
            w["inner" + t] = function() {
                if (this[0]) return this[0] === i ? i["inner" + t] : this[0]["client" + t]
            }
        }), S(["width", "height"], function(t, e) {
            w[t] = function(n) {
                return this[0] ? arguments.length ? (n = parseInt(n, 10), this.each(function(r, i) {
                    if (1 === i.nodeType) {
                        var o = N(i, "boxSizing");
                        i.style[t] = B(t, n + ("border-box" === o ? Y(i, !e) : 0))
                    }
                })) : this[0] === i ? this[0][C("outer-" + t)] : this[0].getBoundingClientRect()[t] - Y(this[0], !e) : void 0 === n ? void 0 : this
            }
        }), S(["Width", "Height"], function(t, e) {
            w["outer" + t] = function(n) {
                if (this[0]) return this[0] === i ? i["outer" + t] : this[0]["offset" + t] + (n ? I(this[0], "margin" + (e ? "Top" : "Left")) + I(this[0], "margin" + (e ? "Bottom" : "Right")) : 0)
            }
        });
        var Z = "__cashEvents",
            Q = ".";

        function tt(t) {
            return t[Z] = t[Z] || {}
        }

        function et(t) {
            var e = t.split(Q);
            return [e[0], e.slice(1).sort()]
        }

        function nt(t, e, n, r) {
            var i = tt(t);
            if (e) {
                var o = i[e];
                if (!o) return;
                r && (r.guid = r.guid || k++), i[e] = o.filter(function(i) {
                    var o = i[0],
                        a = i[1];
                    if (r && a.guid !== r.guid || !X(o, n)) return !0;
                    t.removeEventListener(e, a)
                })
            } else if (n && n.length)
                for (e in i) nt(t, e, n, r);
            else
                for (e in i) J(i, t, e)
        }
        w.off = function(t, e) {
            var n = this;
            return void 0 === t ? this.each(function(t, e) {
                return nt(e)
            }) : S(L(t), function(t) {
                var r = et(t),
                    i = r[0],
                    o = r[1];
                n.each(function(t, n) {
                    return nt(n, i, o, e)
                })
            }), this
        }, w.on = function(t, e, n, r) {
            var i = this;
            if (!P(t)) {
                for (var o in t) this.on(o, e, t[o]);
                return this
            }
            return T(e) && (n = e, e = !1), S(L(t), function(t) {
                var o = et(t),
                    a = o[0],
                    s = o[1];
                i.each(function(t, i) {
                    var o = function t(o) {
                        if (!o.namespace || X(s, o.namespace.split(Q))) {
                            var l = i;
                            if (e) {
                                for (var c = o.target; !j(c, e);) {
                                    if (c === i) return;
                                    if (!(c = c.parentNode)) return
                                }
                                l = c
                            }
                            o.namespace = o.namespace || "";
                            var u = n.call(l, o, o.data);
                            r && nt(i, a, s, t), !1 === u && (o.preventDefault(), o.stopPropagation())
                        }
                    };
                    o.guid = n.guid = n.guid || k++,
                        function(t, e, n, r) {
                            r.guid = r.guid || k++;
                            var i = tt(t);
                            i[e] = i[e] || [], i[e].push([n, r]), t.addEventListener(e, r)
                        }(i, a, s, o)
                })
            }), this
        }, w.one = function(t, e, n) {
            return this.on(t, e, n, !0)
        }, w.ready = function(t) {
            var e = function() {
                return t(y)
            };
            return "loading" !== r.readyState ? setTimeout(e) : r.addEventListener("DOMContentLoaded", e), this
        }, w.trigger = function(t, e) {
            var n = t;
            if (P(t)) {
                var i = et(t),
                    o = i[0],
                    a = i[1];
                (n = r.createEvent("HTMLEvents")).initEvent(o, !0, !0), n.namespace = a.join(Q)
            }
            return n.data = e, this.each(function(t, e) {
                e.dispatchEvent(n)
            })
        };
        var rt = /select-one/i,
            it = /select-multiple/i;

        function ot(t) {
            var e = t.type;
            return rt.test(e) ? function(t) {
                return t.selectedIndex < 0 ? null : t.options[t.selectedIndex].value
            }(t) : it.test(e) ? function(t) {
                var e = [];
                return S(t.options, function(t) {
                    !t.selected || t.disabled || t.parentNode.disabled || e.push(t.value)
                }), e
            }(t) : t.value
        }
        var at = /%20/g,
            st = /file|reset|submit|button|image/i,
            lt = /radio|checkbox/i;
        w.serialize = function() {
            var t = "";
            return this.each(function(e, n) {
                S(n.elements || [n], function(e) {
                    if (!e.disabled && e.name && "FIELDSET" !== e.tagName && !st.test(e.type) && (!lt.test(e.type) || e.checked)) {
                        var n = ot(e);
                        void 0 !== n && S(M(n) ? n : [n], function(n) {
                            t += function(t, e) {
                                return "&" + encodeURIComponent(t) + "=" + encodeURIComponent(e).replace(at, "+")
                            }(e.name, n)
                        })
                    }
                })
            }), t.substr(1)
        }, w.val = function(t) {
            return void 0 === t ? this[0] && ot(this[0]) : this.each(function(e, n) {
                var r = it.test(n.type),
                    i = null === t ? r ? [] : "" : t;
                r && M(i) ? S(n.options, function(t) {
                    t.selected = i.indexOf(t.value) >= 0
                }) : n.value = i
            })
        }, w.clone = function() {
            return this.map(function(t, e) {
                return e.cloneNode(!0)
            })
        }, w.detach = function() {
            return this.each(function(t, e) {
                e.parentNode && e.parentNode.removeChild(e)
            })
        };
        var ct, ut = /^\s*<(\w+)[^>]*>/,
            dt = /^\s*<(\w+)\s*\/?>(?:<\/\1>)?\s*$/;

        function ht(t) {
            if (function() {
                    if (!ct) {
                        var t = r.createElement("table"),
                            e = r.createElement("tr");
                        ct = {
                            "*": r.createElement("div"),
                            tr: r.createElement("tbody"),
                            td: e,
                            th: e,
                            thead: t,
                            tbody: t,
                            tfoot: t
                        }
                    }
                }(), !P(t)) return [];
            if (dt.test(t)) return [r.createElement(RegExp.$1)];
            var e = ut.test(t) && RegExp.$1,
                n = ct[e] || ct["*"];
            return n.innerHTML = t, y(n.childNodes).detach().get()
        }

        function ft(t, e, n) {
            if (void 0 !== e) {
                var r = P(e);
                !r && e.length ? S(e, function(e) {
                    return ft(t, e, n)
                }) : S(t, r ? function(t) {
                    t.insertAdjacentHTML(n ? "afterbegin" : "beforeend", e)
                } : function(t, r) {
                    return function(t, e, n) {
                        n ? t.insertBefore(e, t.childNodes[0]) : t.appendChild(e)
                    }(t, r ? e.cloneNode(!0) : e, n)
                })
            }
        }
        y.parseHTML = ht, w.empty = function() {
            var t = this[0];
            if (t)
                for (; t.firstChild;) t.removeChild(t.firstChild);
            return this
        }, w.append = function() {
            var t = this;
            return S(arguments, function(e) {
                ft(t, e)
            }), this
        }, w.appendTo = function(t) {
            return ft(y(t), this), this
        }, w.html = function(t) {
            if (void 0 === t) return this[0] && this[0].innerHTML;
            var e = t.nodeType ? t[0].outerHTML : t;
            return this.each(function(t, n) {
                n.innerHTML = e
            })
        }, w.insertAfter = function(t) {
            var e = this;
            return y(t).each(function(t, n) {
                var r = n.parentNode;
                e.each(function(e, i) {
                    r.insertBefore(t ? i.cloneNode(!0) : i, n.nextSibling)
                })
            }), this
        }, w.after = function() {
            var t = this;
            return S(u.apply(arguments), function(e) {
                u.apply(y(e).slice()).insertAfter(t)
            }), this
        }, w.insertBefore = function(t) {
            var e = this;
            return y(t).each(function(t, n) {
                var r = n.parentNode;
                e.each(function(e, i) {
                    r.insertBefore(t ? i.cloneNode(!0) : i, n)
                })
            }), this
        }, w.before = function() {
            var t = this;
            return S(arguments, function(e) {
                y(e).insertBefore(t)
            }), this
        }, w.prepend = function() {
            var t = this;
            return S(arguments, function(e) {
                ft(t, e, !0)
            }), this
        }, w.prependTo = function(t) {
            return ft(y(t), u.apply(this.slice()), !0), this
        }, w.remove = function() {
            return this.detach().off()
        }, w.replaceWith = function(t) {
            var e = this;
            return this.each(function(n, r) {
                var i = r.parentNode;
                if (i) {
                    var o = n ? y(t).clone() : y(t);
                    if (!o[0]) return e.remove(), !1;
                    i.replaceChild(o[0], r), y(o[0]).after(o.slice(1))
                }
            })
        }, w.replaceAll = function(t) {
            return y(t).replaceWith(this), this
        }, w.text = function(t) {
            return void 0 === t ? this[0] ? this[0].textContent : "" : this.each(function(e, n) {
                n.textContent = t
            })
        };
        var pt = r.documentElement;
        w.offset = function() {
            var t = this[0];
            if (t) {
                var e = t.getBoundingClientRect();
                return {
                    top: e.top + i.pageYOffset - pt.clientTop,
                    left: e.left + i.pageXOffset - pt.clientLeft
                }
            }
        }, w.offsetParent = function() {
            return y(this[0] && this[0].offsetParent)
        }, w.position = function() {
            var t = this[0];
            if (t) return {
                left: t.offsetLeft,
                top: t.offsetTop
            }
        }, w.children = function(t) {
            var e = [];
            return this.each(function(t, n) {
                c.apply(e, n.children)
            }), e = y(_(e)), t ? e.filter(function(e, n) {
                return j(n, t)
            }) : e
        }, w.contents = function() {
            var t = [];
            return this.each(function(e, n) {
                c.apply(t, "IFRAME" === n.tagName ? [n.contentDocument] : n.childNodes)
            }), y(t.length && _(t))
        }, w.find = function(t) {
            for (var e = [], n = 0, r = this.length; n < r; n++) {
                var i = m(t, this[n]);
                i.length && c.apply(e, i)
            }
            return y(e.length && _(e))
        }, w.has = function(t) {
            var e = P(t) ? function(e, n) {
                return !!m(t, n).length
            } : function(e, n) {
                return n.contains(t)
            };
            return this.filter(e)
        }, w.is = function(t) {
            if (!t || !this[0]) return !1;
            var e = D(t),
                n = !1;
            return this.each(function(r, i) {
                return !(n = e(r, i, t))
            }), n
        }, w.next = function() {
            return y(this[0] && this[0].nextElementSibling)
        }, w.not = function(t) {
            if (!t || !this[0]) return this;
            var e = D(t);
            return this.filter(function(n, r) {
                return !e(n, r, t)
            })
        }, w.parent = function() {
            var t = [];
            return this.each(function(e, n) {
                n && n.parentNode && t.push(n.parentNode)
            }), y(_(t))
        }, w.index = function(t) {
            var e = t ? y(t)[0] : this[0],
                n = t ? this : y(e).parent().children();
            return s.call(n, e)
        }, w.closest = function(t) {
            return t && this[0] ? this.is(t) ? this.filter(t) : this.parent().closest(t) : y()
        }, w.parents = function(t) {
            var e, n = [];
            return this.each(function(i, o) {
                for (e = o; e && e.parentNode && e !== r.body.parentNode;) e = e.parentNode, (!t || t && j(e, t)) && n.push(e)
            }), y(_(n))
        }, w.prev = function() {
            return y(this[0] && this[0].previousElementSibling)
        }, w.siblings = function() {
            var t = this[0];
            return this.parent().children().filter(function(e, n) {
                return n !== t
            })
        }, e.default = y
    }, function(t, e, n) {
        "use strict";
        var r = n(0),
            i = n(1),
            o = n.n(i),
            a = n(10);
        e.a = o.a.Collection.extend({
            model: a.a,
            modelId: function(t) {
                return "".concat(t.name, "_").concat(t.type || a.a.TYPE_CLASS)
            },
            getStyleable: function() {
                return Object(r.filter)(this.models, function(t) {
                    return t.get("active") && !t.get("private")
                })
            },
            getValid: function() {
                var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).noDisabled;
                return Object(r.filter)(this.models, function(t) {
                    return !t.get("private")
                }).filter(function(e) {
                    return t ? e.get("active") : 1
                })
            },
            getFullString: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    n = [];
                return (t || this).forEach(function(t) {
                    return n.push(t.getFullName(e))
                }), n.join("").trim()
            }
        })
    }, function(t, e, n) {
        t.exports = function() {
            "use strict";
            var t = navigator.userAgent,
                e = navigator.platform,
                n = /gecko\/\d/i.test(t),
                r = /MSIE \d/.test(t),
                i = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(t),
                o = /Edge\/(\d+)/.exec(t),
                a = r || i || o,
                s = a && (r ? document.documentMode || 6 : +(o || i)[1]),
                l = !o && /WebKit\//.test(t),
                c = l && /Qt\/\d+\.\d+/.test(t),
                u = !o && /Chrome\//.test(t),
                d = /Opera\//.test(t),
                h = /Apple Computer/.test(navigator.vendor),
                f = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(t),
                p = /PhantomJS/.test(t),
                g = h && (/Mobile\/\w+/.test(t) || navigator.maxTouchPoints > 2),
                v = /Android/.test(t),
                m = g || v || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),
                b = g || /Mac/.test(e),
                y = /\bCrOS\b/.test(t),
                w = /win/i.test(e),
                x = d && t.match(/Version\/(\d*\.\d*)/);
            x && (x = Number(x[1])), x && x >= 15 && (d = !1, l = !0);
            var O = b && (c || d && (null == x || x < 12.11)),
                C = n || a && s >= 9;

            function S(t) {
                return new RegExp("(^|\\s)" + t + "(?:$|\\s)\\s*")
            }
            var k, j = function(t, e) {
                var n = t.className,
                    r = S(e).exec(n);
                if (r) {
                    var i = n.slice(r.index + r[0].length);
                    t.className = n.slice(0, r.index) + (i ? r[1] + i : "")
                }
            };

            function T(t) {
                for (var e = t.childNodes.length; e > 0; --e) t.removeChild(t.firstChild);
                return t
            }

            function P(t, e) {
                return T(t).appendChild(e)
            }

            function E(t, e, n, r) {
                var i = document.createElement(t);
                if (n && (i.className = n), r && (i.style.cssText = r), "string" == typeof e) i.appendChild(document.createTextNode(e));
                else if (e)
                    for (var o = 0; o < e.length; ++o) i.appendChild(e[o]);
                return i
            }

            function M(t, e, n, r) {
                var i = E(t, e, n, r);
                return i.setAttribute("role", "presentation"), i
            }

            function D(t, e) {
                if (3 == e.nodeType && (e = e.parentNode), t.contains) return t.contains(e);
                do {
                    if (11 == e.nodeType && (e = e.host), e == t) return !0
                } while (e = e.parentNode)
            }

            function A() {
                var t;
                try {
                    t = document.activeElement
                } catch (e) {
                    t = document.body || null
                }
                for (; t && t.shadowRoot && t.shadowRoot.activeElement;) t = t.shadowRoot.activeElement;
                return t
            }

            function L(t, e) {
                var n = t.className;
                S(e).test(n) || (t.className += (n ? " " : "") + e)
            }

            function _(t, e) {
                for (var n = t.split(" "), r = 0; r < n.length; r++) n[r] && !S(n[r]).test(e) && (e += " " + n[r]);
                return e
            }
            k = document.createRange ? function(t, e, n, r) {
                var i = document.createRange();
                return i.setEnd(r || t, n), i.setStart(t, e), i
            } : function(t, e, n) {
                var r = document.body.createTextRange();
                try {
                    r.moveToElementText(t.parentNode)
                } catch (t) {
                    return r
                }
                return r.collapse(!0), r.moveEnd("character", n), r.moveStart("character", e), r
            };
            var N = function(t) {
                t.select()
            };

            function I(t) {
                var e = Array.prototype.slice.call(arguments, 1);
                return function() {
                    return t.apply(null, e)
                }
            }

            function F(t, e, n) {
                for (var r in e || (e = {}), t) !t.hasOwnProperty(r) || !1 === n && e.hasOwnProperty(r) || (e[r] = t[r]);
                return e
            }

            function V(t, e, n, r, i) {
                null == e && -1 == (e = t.search(/[^\s\u00a0]/)) && (e = t.length);
                for (var o = r || 0, a = i || 0;;) {
                    var s = t.indexOf("\t", o);
                    if (s < 0 || s >= e) return a + (e - o);
                    a += s - o, a += n - a % n, o = s + 1
                }
            }
            g ? N = function(t) {
                t.selectionStart = 0, t.selectionEnd = t.value.length
            } : a && (N = function(t) {
                try {
                    t.select()
                } catch (t) {}
            });
            var R = function() {
                this.id = null, this.f = null, this.time = 0, this.handler = I(this.onTimeout, this)
            };

            function z(t, e) {
                for (var n = 0; n < t.length; ++n)
                    if (t[n] == e) return n;
                return -1
            }
            R.prototype.onTimeout = function(t) {
                t.id = 0, t.time <= +new Date ? t.f() : setTimeout(t.handler, t.time - +new Date)
            }, R.prototype.set = function(t, e) {
                this.f = e;
                var n = +new Date + t;
                (!this.id || n < this.time) && (clearTimeout(this.id), this.id = setTimeout(this.handler, t), this.time = n)
            };
            var H = 50,
                $ = {
                    toString: function() {
                        return "CodeMirror.Pass"
                    }
                },
                U = {
                    scroll: !1
                },
                B = {
                    origin: "*mouse"
                },
                W = {
                    origin: "+move"
                };

            function q(t, e, n) {
                for (var r = 0, i = 0;;) {
                    var o = t.indexOf("\t", r); - 1 == o && (o = t.length);
                    var a = o - r;
                    if (o == t.length || i + a >= e) return r + Math.min(a, e - i);
                    if (i += o - r, r = o + 1, (i += n - i % n) >= e) return r
                }
            }
            var G = [""];

            function K(t) {
                for (; G.length <= t;) G.push(Y(G) + " ");
                return G[t]
            }

            function Y(t) {
                return t[t.length - 1]
            }

            function X(t, e) {
                for (var n = [], r = 0; r < t.length; r++) n[r] = e(t[r], r);
                return n
            }

            function J() {}

            function Z(t, e) {
                var n;
                return Object.create ? n = Object.create(t) : (J.prototype = t, n = new J), e && F(e, n), n
            }
            var Q = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;

            function tt(t) {
                return /\w/.test(t) || t > "" && (t.toUpperCase() != t.toLowerCase() || Q.test(t))
            }

            function et(t, e) {
                return e ? !!(e.source.indexOf("\\w") > -1 && tt(t)) || e.test(t) : tt(t)
            }

            function nt(t) {
                for (var e in t)
                    if (t.hasOwnProperty(e) && t[e]) return !1;
                return !0
            }
            var rt = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;

            function it(t) {
                return t.charCodeAt(0) >= 768 && rt.test(t)
            }

            function ot(t, e, n) {
                for (;
                    (n < 0 ? e > 0 : e < t.length) && it(t.charAt(e));) e += n;
                return e
            }

            function at(t, e, n) {
                for (var r = e > n ? -1 : 1;;) {
                    if (e == n) return e;
                    var i = (e + n) / 2,
                        o = r < 0 ? Math.ceil(i) : Math.floor(i);
                    if (o == e) return t(o) ? e : n;
                    t(o) ? n = o : e = o + r
                }
            }
            var st = null;

            function lt(t, e, n) {
                var r;
                st = null;
                for (var i = 0; i < t.length; ++i) {
                    var o = t[i];
                    if (o.from < e && o.to > e) return i;
                    o.to == e && (o.from != o.to && "before" == n ? r = i : st = i), o.from == e && (o.from != o.to && "before" != n ? r = i : st = i)
                }
                return null != r ? r : st
            }
            var ct = function() {
                var t = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,
                    e = /[stwN]/,
                    n = /[LRr]/,
                    r = /[Lb1n]/,
                    i = /[1n]/;

                function o(t, e, n) {
                    this.level = t, this.from = e, this.to = n
                }
                return function(a, s) {
                    var l = "ltr" == s ? "L" : "R";
                    if (0 == a.length || "ltr" == s && !t.test(a)) return !1;
                    for (var c, u = a.length, d = [], h = 0; h < u; ++h) d.push((c = a.charCodeAt(h)) <= 247 ? "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN".charAt(c) : 1424 <= c && c <= 1524 ? "R" : 1536 <= c && c <= 1785 ? "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111".charAt(c - 1536) : 1774 <= c && c <= 2220 ? "r" : 8192 <= c && c <= 8203 ? "w" : 8204 == c ? "b" : "L");
                    for (var f = 0, p = l; f < u; ++f) {
                        var g = d[f];
                        "m" == g ? d[f] = p : p = g
                    }
                    for (var v = 0, m = l; v < u; ++v) {
                        var b = d[v];
                        "1" == b && "r" == m ? d[v] = "n" : n.test(b) && (m = b, "r" == b && (d[v] = "R"))
                    }
                    for (var y = 1, w = d[0]; y < u - 1; ++y) {
                        var x = d[y];
                        "+" == x && "1" == w && "1" == d[y + 1] ? d[y] = "1" : "," != x || w != d[y + 1] || "1" != w && "n" != w || (d[y] = w), w = x
                    }
                    for (var O = 0; O < u; ++O) {
                        var C = d[O];
                        if ("," == C) d[O] = "N";
                        else if ("%" == C) {
                            var S = void 0;
                            for (S = O + 1; S < u && "%" == d[S]; ++S);
                            for (var k = O && "!" == d[O - 1] || S < u && "1" == d[S] ? "1" : "N", j = O; j < S; ++j) d[j] = k;
                            O = S - 1
                        }
                    }
                    for (var T = 0, P = l; T < u; ++T) {
                        var E = d[T];
                        "L" == P && "1" == E ? d[T] = "L" : n.test(E) && (P = E)
                    }
                    for (var M = 0; M < u; ++M)
                        if (e.test(d[M])) {
                            var D = void 0;
                            for (D = M + 1; D < u && e.test(d[D]); ++D);
                            for (var A = "L" == (M ? d[M - 1] : l), L = A == ("L" == (D < u ? d[D] : l)) ? A ? "L" : "R" : l, _ = M; _ < D; ++_) d[_] = L;
                            M = D - 1
                        } for (var N, I = [], F = 0; F < u;)
                        if (r.test(d[F])) {
                            var V = F;
                            for (++F; F < u && r.test(d[F]); ++F);
                            I.push(new o(0, V, F))
                        } else {
                            var R = F,
                                z = I.length,
                                H = "rtl" == s ? 1 : 0;
                            for (++F; F < u && "L" != d[F]; ++F);
                            for (var $ = R; $ < F;)
                                if (i.test(d[$])) {
                                    R < $ && (I.splice(z, 0, new o(1, R, $)), z += H);
                                    var U = $;
                                    for (++$; $ < F && i.test(d[$]); ++$);
                                    I.splice(z, 0, new o(2, U, $)), z += H, R = $
                                } else ++$;
                            R < F && I.splice(z, 0, new o(1, R, F))
                        } return "ltr" == s && (1 == I[0].level && (N = a.match(/^\s+/)) && (I[0].from = N[0].length, I.unshift(new o(0, 0, N[0].length))), 1 == Y(I).level && (N = a.match(/\s+$/)) && (Y(I).to -= N[0].length, I.push(new o(0, u - N[0].length, u)))), "rtl" == s ? I.reverse() : I
                }
            }();

            function ut(t, e) {
                var n = t.order;
                return null == n && (n = t.order = ct(t.text, e)), n
            }
            var dt = [],
                ht = function(t, e, n) {
                    if (t.addEventListener) t.addEventListener(e, n, !1);
                    else if (t.attachEvent) t.attachEvent("on" + e, n);
                    else {
                        var r = t._handlers || (t._handlers = {});
                        r[e] = (r[e] || dt).concat(n)
                    }
                };

            function ft(t, e) {
                return t._handlers && t._handlers[e] || dt
            }

            function pt(t, e, n) {
                if (t.removeEventListener) t.removeEventListener(e, n, !1);
                else if (t.detachEvent) t.detachEvent("on" + e, n);
                else {
                    var r = t._handlers,
                        i = r && r[e];
                    if (i) {
                        var o = z(i, n);
                        o > -1 && (r[e] = i.slice(0, o).concat(i.slice(o + 1)))
                    }
                }
            }

            function gt(t, e) {
                var n = ft(t, e);
                if (n.length)
                    for (var r = Array.prototype.slice.call(arguments, 2), i = 0; i < n.length; ++i) n[i].apply(null, r)
            }

            function vt(t, e, n) {
                return "string" == typeof e && (e = {
                    type: e,
                    preventDefault: function() {
                        this.defaultPrevented = !0
                    }
                }), gt(t, n || e.type, t, e), Ot(e) || e.codemirrorIgnore
            }

            function mt(t) {
                var e = t._handlers && t._handlers.cursorActivity;
                if (e)
                    for (var n = t.curOp.cursorActivityHandlers || (t.curOp.cursorActivityHandlers = []), r = 0; r < e.length; ++r) - 1 == z(n, e[r]) && n.push(e[r])
            }

            function bt(t, e) {
                return ft(t, e).length > 0
            }

            function yt(t) {
                t.prototype.on = function(t, e) {
                    ht(this, t, e)
                }, t.prototype.off = function(t, e) {
                    pt(this, t, e)
                }
            }

            function wt(t) {
                t.preventDefault ? t.preventDefault() : t.returnValue = !1
            }

            function xt(t) {
                t.stopPropagation ? t.stopPropagation() : t.cancelBubble = !0
            }

            function Ot(t) {
                return null != t.defaultPrevented ? t.defaultPrevented : 0 == t.returnValue
            }

            function Ct(t) {
                wt(t), xt(t)
            }

            function St(t) {
                return t.target || t.srcElement
            }

            function kt(t) {
                var e = t.which;
                return null == e && (1 & t.button ? e = 1 : 2 & t.button ? e = 3 : 4 & t.button && (e = 2)), b && t.ctrlKey && 1 == e && (e = 3), e
            }
            var jt, Tt, Pt = function() {
                if (a && s < 9) return !1;
                var t = E("div");
                return "draggable" in t || "dragDrop" in t
            }();

            function Et(t) {
                if (null == jt) {
                    var e = E("span", "​");
                    P(t, E("span", [e, document.createTextNode("x")])), 0 != t.firstChild.offsetHeight && (jt = e.offsetWidth <= 1 && e.offsetHeight > 2 && !(a && s < 8))
                }
                var n = jt ? E("span", "​") : E("span", " ", null, "display: inline-block; width: 1px; margin-right: -1px");
                return n.setAttribute("cm-text", ""), n
            }

            function Mt(t) {
                if (null != Tt) return Tt;
                var e = P(t, document.createTextNode("AخA")),
                    n = k(e, 0, 1).getBoundingClientRect(),
                    r = k(e, 1, 2).getBoundingClientRect();
                return T(t), !(!n || n.left == n.right) && (Tt = r.right - n.right < 3)
            }
            var Dt, At = 3 != "\n\nb".split(/\n/).length ? function(t) {
                    for (var e = 0, n = [], r = t.length; e <= r;) {
                        var i = t.indexOf("\n", e); - 1 == i && (i = t.length);
                        var o = t.slice(e, "\r" == t.charAt(i - 1) ? i - 1 : i),
                            a = o.indexOf("\r"); - 1 != a ? (n.push(o.slice(0, a)), e += a + 1) : (n.push(o), e = i + 1)
                    }
                    return n
                } : function(t) {
                    return t.split(/\r\n?|\n/)
                },
                Lt = window.getSelection ? function(t) {
                    try {
                        return t.selectionStart != t.selectionEnd
                    } catch (t) {
                        return !1
                    }
                } : function(t) {
                    var e;
                    try {
                        e = t.ownerDocument.selection.createRange()
                    } catch (t) {}
                    return !(!e || e.parentElement() != t) && 0 != e.compareEndPoints("StartToEnd", e)
                },
                _t = "oncopy" in (Dt = E("div")) || (Dt.setAttribute("oncopy", "return;"), "function" == typeof Dt.oncopy),
                Nt = null,
                It = {},
                Ft = {};

            function Vt(t) {
                if ("string" == typeof t && Ft.hasOwnProperty(t)) t = Ft[t];
                else if (t && "string" == typeof t.name && Ft.hasOwnProperty(t.name)) {
                    var e = Ft[t.name];
                    "string" == typeof e && (e = {
                        name: e
                    }), (t = Z(e, t)).name = e.name
                } else {
                    if ("string" == typeof t && /^[\w\-]+\/[\w\-]+\+xml$/.test(t)) return Vt("application/xml");
                    if ("string" == typeof t && /^[\w\-]+\/[\w\-]+\+json$/.test(t)) return Vt("application/json")
                }
                return "string" == typeof t ? {
                    name: t
                } : t || {
                    name: "null"
                }
            }

            function Rt(t, e) {
                e = Vt(e);
                var n = It[e.name];
                if (!n) return Rt(t, "text/plain");
                var r = n(t, e);
                if (zt.hasOwnProperty(e.name)) {
                    var i = zt[e.name];
                    for (var o in i) i.hasOwnProperty(o) && (r.hasOwnProperty(o) && (r["_" + o] = r[o]), r[o] = i[o])
                }
                if (r.name = e.name, e.helperType && (r.helperType = e.helperType), e.modeProps)
                    for (var a in e.modeProps) r[a] = e.modeProps[a];
                return r
            }
            var zt = {};

            function Ht(t, e) {
                F(e, zt.hasOwnProperty(t) ? zt[t] : zt[t] = {})
            }

            function $t(t, e) {
                if (!0 === e) return e;
                if (t.copyState) return t.copyState(e);
                var n = {};
                for (var r in e) {
                    var i = e[r];
                    i instanceof Array && (i = i.concat([])), n[r] = i
                }
                return n
            }

            function Ut(t, e) {
                for (var n; t.innerMode && (n = t.innerMode(e)) && n.mode != t;) e = n.state, t = n.mode;
                return n || {
                    mode: t,
                    state: e
                }
            }

            function Bt(t, e, n) {
                return !t.startState || t.startState(e, n)
            }
            var Wt = function(t, e, n) {
                this.pos = this.start = 0, this.string = t, this.tabSize = e || 8, this.lastColumnPos = this.lastColumnValue = 0, this.lineStart = 0, this.lineOracle = n
            };

            function qt(t, e) {
                if ((e -= t.first) < 0 || e >= t.size) throw new Error("There is no line " + (e + t.first) + " in the document.");
                for (var n = t; !n.lines;)
                    for (var r = 0;; ++r) {
                        var i = n.children[r],
                            o = i.chunkSize();
                        if (e < o) {
                            n = i;
                            break
                        }
                        e -= o
                    }
                return n.lines[e]
            }

            function Gt(t, e, n) {
                var r = [],
                    i = e.line;
                return t.iter(e.line, n.line + 1, function(t) {
                    var o = t.text;
                    i == n.line && (o = o.slice(0, n.ch)), i == e.line && (o = o.slice(e.ch)), r.push(o), ++i
                }), r
            }

            function Kt(t, e, n) {
                var r = [];
                return t.iter(e, n, function(t) {
                    r.push(t.text)
                }), r
            }

            function Yt(t, e) {
                var n = e - t.height;
                if (n)
                    for (var r = t; r; r = r.parent) r.height += n
            }

            function Xt(t) {
                if (null == t.parent) return null;
                for (var e = t.parent, n = z(e.lines, t), r = e.parent; r; e = r, r = r.parent)
                    for (var i = 0; r.children[i] != e; ++i) n += r.children[i].chunkSize();
                return n + e.first
            }

            function Jt(t, e) {
                var n = t.first;
                t: do {
                    for (var r = 0; r < t.children.length; ++r) {
                        var i = t.children[r],
                            o = i.height;
                        if (e < o) {
                            t = i;
                            continue t
                        }
                        e -= o, n += i.chunkSize()
                    }
                    return n
                } while (!t.lines);
                for (var a = 0; a < t.lines.length; ++a) {
                    var s = t.lines[a].height;
                    if (e < s) break;
                    e -= s
                }
                return n + a
            }

            function Zt(t, e) {
                return e >= t.first && e < t.first + t.size
            }

            function Qt(t, e) {
                return String(t.lineNumberFormatter(e + t.firstLineNumber))
            }

            function te(t, e, n) {
                if (void 0 === n && (n = null), !(this instanceof te)) return new te(t, e, n);
                this.line = t, this.ch = e, this.sticky = n
            }

            function ee(t, e) {
                return t.line - e.line || t.ch - e.ch
            }

            function ne(t, e) {
                return t.sticky == e.sticky && 0 == ee(t, e)
            }

            function re(t) {
                return te(t.line, t.ch)
            }

            function ie(t, e) {
                return ee(t, e) < 0 ? e : t
            }

            function oe(t, e) {
                return ee(t, e) < 0 ? t : e
            }

            function ae(t, e) {
                return Math.max(t.first, Math.min(e, t.first + t.size - 1))
            }

            function se(t, e) {
                if (e.line < t.first) return te(t.first, 0);
                var n = t.first + t.size - 1;
                return e.line > n ? te(n, qt(t, n).text.length) : function(t, e) {
                    var n = t.ch;
                    return null == n || n > e ? te(t.line, e) : n < 0 ? te(t.line, 0) : t
                }(e, qt(t, e.line).text.length)
            }

            function le(t, e) {
                for (var n = [], r = 0; r < e.length; r++) n[r] = se(t, e[r]);
                return n
            }
            Wt.prototype.eol = function() {
                return this.pos >= this.string.length
            }, Wt.prototype.sol = function() {
                return this.pos == this.lineStart
            }, Wt.prototype.peek = function() {
                return this.string.charAt(this.pos) || void 0
            }, Wt.prototype.next = function() {
                if (this.pos < this.string.length) return this.string.charAt(this.pos++)
            }, Wt.prototype.eat = function(t) {
                var e = this.string.charAt(this.pos);
                if ("string" == typeof t ? e == t : e && (t.test ? t.test(e) : t(e))) return ++this.pos, e
            }, Wt.prototype.eatWhile = function(t) {
                for (var e = this.pos; this.eat(t););
                return this.pos > e
            }, Wt.prototype.eatSpace = function() {
                for (var t = this.pos;
                    /[\s\u00a0]/.test(this.string.charAt(this.pos));) ++this.pos;
                return this.pos > t
            }, Wt.prototype.skipToEnd = function() {
                this.pos = this.string.length
            }, Wt.prototype.skipTo = function(t) {
                var e = this.string.indexOf(t, this.pos);
                if (e > -1) return this.pos = e, !0
            }, Wt.prototype.backUp = function(t) {
                this.pos -= t
            }, Wt.prototype.column = function() {
                return this.lastColumnPos < this.start && (this.lastColumnValue = V(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue), this.lastColumnPos = this.start), this.lastColumnValue - (this.lineStart ? V(this.string, this.lineStart, this.tabSize) : 0)
            }, Wt.prototype.indentation = function() {
                return V(this.string, null, this.tabSize) - (this.lineStart ? V(this.string, this.lineStart, this.tabSize) : 0)
            }, Wt.prototype.match = function(t, e, n) {
                if ("string" != typeof t) {
                    var r = this.string.slice(this.pos).match(t);
                    return r && r.index > 0 ? null : (r && !1 !== e && (this.pos += r[0].length), r)
                }
                var i = function(t) {
                    return n ? t.toLowerCase() : t
                };
                if (i(this.string.substr(this.pos, t.length)) == i(t)) return !1 !== e && (this.pos += t.length), !0
            }, Wt.prototype.current = function() {
                return this.string.slice(this.start, this.pos)
            }, Wt.prototype.hideFirstChars = function(t, e) {
                this.lineStart += t;
                try {
                    return e()
                } finally {
                    this.lineStart -= t
                }
            }, Wt.prototype.lookAhead = function(t) {
                var e = this.lineOracle;
                return e && e.lookAhead(t)
            }, Wt.prototype.baseToken = function() {
                var t = this.lineOracle;
                return t && t.baseToken(this.pos)
            };
            var ce = function(t, e) {
                    this.state = t, this.lookAhead = e
                },
                ue = function(t, e, n, r) {
                    this.state = e, this.doc = t, this.line = n, this.maxLookAhead = r || 0, this.baseTokens = null, this.baseTokenPos = 1
                };

            function de(t, e, n, r) {
                var i = [t.state.modeGen],
                    o = {};
                we(t, e.text, t.doc.mode, n, function(t, e) {
                    return i.push(t, e)
                }, o, r);
                for (var a = n.state, s = function(r) {
                        n.baseTokens = i;
                        var s = t.state.overlays[r],
                            l = 1,
                            c = 0;
                        n.state = !0, we(t, e.text, s.mode, n, function(t, e) {
                            for (var n = l; c < t;) {
                                var r = i[l];
                                r > t && i.splice(l, 1, t, i[l + 1], r), l += 2, c = Math.min(t, r)
                            }
                            if (e)
                                if (s.opaque) i.splice(n, l - n, t, "overlay " + e), l = n + 2;
                                else
                                    for (; n < l; n += 2) {
                                        var o = i[n + 1];
                                        i[n + 1] = (o ? o + " " : "") + "overlay " + e
                                    }
                        }, o), n.state = a, n.baseTokens = null, n.baseTokenPos = 1
                    }, l = 0; l < t.state.overlays.length; ++l) s(l);
                return {
                    styles: i,
                    classes: o.bgClass || o.textClass ? o : null
                }
            }

            function he(t, e, n) {
                if (!e.styles || e.styles[0] != t.state.modeGen) {
                    var r = fe(t, Xt(e)),
                        i = e.text.length > t.options.maxHighlightLength && $t(t.doc.mode, r.state),
                        o = de(t, e, r);
                    i && (r.state = i), e.stateAfter = r.save(!i), e.styles = o.styles, o.classes ? e.styleClasses = o.classes : e.styleClasses && (e.styleClasses = null), n === t.doc.highlightFrontier && (t.doc.modeFrontier = Math.max(t.doc.modeFrontier, ++t.doc.highlightFrontier))
                }
                return e.styles
            }

            function fe(t, e, n) {
                var r = t.doc,
                    i = t.display;
                if (!r.mode.startState) return new ue(r, !0, e);
                var o = function(t, e, n) {
                        for (var r, i, o = t.doc, a = n ? -1 : e - (t.doc.mode.innerMode ? 1e3 : 100), s = e; s > a; --s) {
                            if (s <= o.first) return o.first;
                            var l = qt(o, s - 1),
                                c = l.stateAfter;
                            if (c && (!n || s + (c instanceof ce ? c.lookAhead : 0) <= o.modeFrontier)) return s;
                            var u = V(l.text, null, t.options.tabSize);
                            (null == i || r > u) && (i = s - 1, r = u)
                        }
                        return i
                    }(t, e, n),
                    a = o > r.first && qt(r, o - 1).stateAfter,
                    s = a ? ue.fromSaved(r, a, o) : new ue(r, Bt(r.mode), o);
                return r.iter(o, e, function(n) {
                    pe(t, n.text, s);
                    var r = s.line;
                    n.stateAfter = r == e - 1 || r % 5 == 0 || r >= i.viewFrom && r < i.viewTo ? s.save() : null, s.nextLine()
                }), n && (r.modeFrontier = s.line), s
            }

            function pe(t, e, n, r) {
                var i = t.doc.mode,
                    o = new Wt(e, t.options.tabSize, n);
                for (o.start = o.pos = r || 0, "" == e && ge(i, n.state); !o.eol();) ve(i, o, n.state), o.start = o.pos
            }

            function ge(t, e) {
                if (t.blankLine) return t.blankLine(e);
                if (t.innerMode) {
                    var n = Ut(t, e);
                    return n.mode.blankLine ? n.mode.blankLine(n.state) : void 0
                }
            }

            function ve(t, e, n, r) {
                for (var i = 0; i < 10; i++) {
                    r && (r[0] = Ut(t, n).mode);
                    var o = t.token(e, n);
                    if (e.pos > e.start) return o
                }
                throw new Error("Mode " + t.name + " failed to advance stream.")
            }
            ue.prototype.lookAhead = function(t) {
                var e = this.doc.getLine(this.line + t);
                return null != e && t > this.maxLookAhead && (this.maxLookAhead = t), e
            }, ue.prototype.baseToken = function(t) {
                if (!this.baseTokens) return null;
                for (; this.baseTokens[this.baseTokenPos] <= t;) this.baseTokenPos += 2;
                var e = this.baseTokens[this.baseTokenPos + 1];
                return {
                    type: e && e.replace(/( |^)overlay .*/, ""),
                    size: this.baseTokens[this.baseTokenPos] - t
                }
            }, ue.prototype.nextLine = function() {
                this.line++, this.maxLookAhead > 0 && this.maxLookAhead--
            }, ue.fromSaved = function(t, e, n) {
                return e instanceof ce ? new ue(t, $t(t.mode, e.state), n, e.lookAhead) : new ue(t, $t(t.mode, e), n)
            }, ue.prototype.save = function(t) {
                var e = !1 !== t ? $t(this.doc.mode, this.state) : this.state;
                return this.maxLookAhead > 0 ? new ce(e, this.maxLookAhead) : e
            };
            var me = function(t, e, n) {
                this.start = t.start, this.end = t.pos, this.string = t.current(), this.type = e || null, this.state = n
            };

            function be(t, e, n, r) {
                var i, o, a = t.doc,
                    s = a.mode,
                    l = qt(a, (e = se(a, e)).line),
                    c = fe(t, e.line, n),
                    u = new Wt(l.text, t.options.tabSize, c);
                for (r && (o = []);
                    (r || u.pos < e.ch) && !u.eol();) u.start = u.pos, i = ve(s, u, c.state), r && o.push(new me(u, i, $t(a.mode, c.state)));
                return r ? o : new me(u, i, c.state)
            }

            function ye(t, e) {
                if (t)
                    for (;;) {
                        var n = t.match(/(?:^|\s+)line-(background-)?(\S+)/);
                        if (!n) break;
                        t = t.slice(0, n.index) + t.slice(n.index + n[0].length);
                        var r = n[1] ? "bgClass" : "textClass";
                        null == e[r] ? e[r] = n[2] : new RegExp("(?:^|\\s)" + n[2] + "(?:$|\\s)").test(e[r]) || (e[r] += " " + n[2])
                    }
                return t
            }

            function we(t, e, n, r, i, o, a) {
                var s = n.flattenSpans;
                null == s && (s = t.options.flattenSpans);
                var l, c = 0,
                    u = null,
                    d = new Wt(e, t.options.tabSize, r),
                    h = t.options.addModeClass && [null];
                for ("" == e && ye(ge(n, r.state), o); !d.eol();) {
                    if (d.pos > t.options.maxHighlightLength ? (s = !1, a && pe(t, e, r, d.pos), d.pos = e.length, l = null) : l = ye(ve(n, d, r.state, h), o), h) {
                        var f = h[0].name;
                        f && (l = "m-" + (l ? f + " " + l : f))
                    }
                    if (!s || u != l) {
                        for (; c < d.start;) i(c = Math.min(d.start, c + 5e3), u);
                        u = l
                    }
                    d.start = d.pos
                }
                for (; c < d.pos;) {
                    var p = Math.min(d.pos, c + 5e3);
                    i(p, u), c = p
                }
            }
            var xe = !1,
                Oe = !1;

            function Ce(t, e, n) {
                this.marker = t, this.from = e, this.to = n
            }

            function Se(t, e) {
                if (t)
                    for (var n = 0; n < t.length; ++n) {
                        var r = t[n];
                        if (r.marker == e) return r
                    }
            }

            function ke(t, e) {
                for (var n, r = 0; r < t.length; ++r) t[r] != e && (n || (n = [])).push(t[r]);
                return n
            }

            function je(t, e) {
                if (e.full) return null;
                var n = Zt(t, e.from.line) && qt(t, e.from.line).markedSpans,
                    r = Zt(t, e.to.line) && qt(t, e.to.line).markedSpans;
                if (!n && !r) return null;
                var i = e.from.ch,
                    o = e.to.ch,
                    a = 0 == ee(e.from, e.to),
                    s = function(t, e, n) {
                        var r;
                        if (t)
                            for (var i = 0; i < t.length; ++i) {
                                var o = t[i],
                                    a = o.marker;
                                if (null == o.from || (a.inclusiveLeft ? o.from <= e : o.from < e) || o.from == e && "bookmark" == a.type && (!n || !o.marker.insertLeft)) {
                                    var s = null == o.to || (a.inclusiveRight ? o.to >= e : o.to > e);
                                    (r || (r = [])).push(new Ce(a, o.from, s ? null : o.to))
                                }
                            }
                        return r
                    }(n, i, a),
                    l = function(t, e, n) {
                        var r;
                        if (t)
                            for (var i = 0; i < t.length; ++i) {
                                var o = t[i],
                                    a = o.marker;
                                if (null == o.to || (a.inclusiveRight ? o.to >= e : o.to > e) || o.from == e && "bookmark" == a.type && (!n || o.marker.insertLeft)) {
                                    var s = null == o.from || (a.inclusiveLeft ? o.from <= e : o.from < e);
                                    (r || (r = [])).push(new Ce(a, s ? null : o.from - e, null == o.to ? null : o.to - e))
                                }
                            }
                        return r
                    }(r, o, a),
                    c = 1 == e.text.length,
                    u = Y(e.text).length + (c ? i : 0);
                if (s)
                    for (var d = 0; d < s.length; ++d) {
                        var h = s[d];
                        if (null == h.to) {
                            var f = Se(l, h.marker);
                            f ? c && (h.to = null == f.to ? null : f.to + u) : h.to = i
                        }
                    }
                if (l)
                    for (var p = 0; p < l.length; ++p) {
                        var g = l[p];
                        null != g.to && (g.to += u), null == g.from ? Se(s, g.marker) || (g.from = u, c && (s || (s = [])).push(g)) : (g.from += u, c && (s || (s = [])).push(g))
                    }
                s && (s = Te(s)), l && l != s && (l = Te(l));
                var v = [s];
                if (!c) {
                    var m, b = e.text.length - 2;
                    if (b > 0 && s)
                        for (var y = 0; y < s.length; ++y) null == s[y].to && (m || (m = [])).push(new Ce(s[y].marker, null, null));
                    for (var w = 0; w < b; ++w) v.push(m);
                    v.push(l)
                }
                return v
            }

            function Te(t) {
                for (var e = 0; e < t.length; ++e) {
                    var n = t[e];
                    null != n.from && n.from == n.to && !1 !== n.marker.clearWhenEmpty && t.splice(e--, 1)
                }
                return t.length ? t : null
            }

            function Pe(t) {
                var e = t.markedSpans;
                if (e) {
                    for (var n = 0; n < e.length; ++n) e[n].marker.detachLine(t);
                    t.markedSpans = null
                }
            }

            function Ee(t, e) {
                if (e) {
                    for (var n = 0; n < e.length; ++n) e[n].marker.attachLine(t);
                    t.markedSpans = e
                }
            }

            function Me(t) {
                return t.inclusiveLeft ? -1 : 0
            }

            function De(t) {
                return t.inclusiveRight ? 1 : 0
            }

            function Ae(t, e) {
                var n = t.lines.length - e.lines.length;
                if (0 != n) return n;
                var r = t.find(),
                    i = e.find(),
                    o = ee(r.from, i.from) || Me(t) - Me(e);
                return o ? -o : ee(r.to, i.to) || De(t) - De(e) || e.id - t.id
            }

            function Le(t, e) {
                var n, r = Oe && t.markedSpans;
                if (r)
                    for (var i = void 0, o = 0; o < r.length; ++o)(i = r[o]).marker.collapsed && null == (e ? i.from : i.to) && (!n || Ae(n, i.marker) < 0) && (n = i.marker);
                return n
            }

            function _e(t) {
                return Le(t, !0)
            }

            function Ne(t) {
                return Le(t, !1)
            }

            function Ie(t, e) {
                var n, r = Oe && t.markedSpans;
                if (r)
                    for (var i = 0; i < r.length; ++i) {
                        var o = r[i];
                        o.marker.collapsed && (null == o.from || o.from < e) && (null == o.to || o.to > e) && (!n || Ae(n, o.marker) < 0) && (n = o.marker)
                    }
                return n
            }

            function Fe(t, e, n, r, i) {
                var o = qt(t, e),
                    a = Oe && o.markedSpans;
                if (a)
                    for (var s = 0; s < a.length; ++s) {
                        var l = a[s];
                        if (l.marker.collapsed) {
                            var c = l.marker.find(0),
                                u = ee(c.from, n) || Me(l.marker) - Me(i),
                                d = ee(c.to, r) || De(l.marker) - De(i);
                            if (!(u >= 0 && d <= 0 || u <= 0 && d >= 0) && (u <= 0 && (l.marker.inclusiveRight && i.inclusiveLeft ? ee(c.to, n) >= 0 : ee(c.to, n) > 0) || u >= 0 && (l.marker.inclusiveRight && i.inclusiveLeft ? ee(c.from, r) <= 0 : ee(c.from, r) < 0))) return !0
                        }
                    }
            }

            function Ve(t) {
                for (var e; e = _e(t);) t = e.find(-1, !0).line;
                return t
            }

            function Re(t, e) {
                var n = qt(t, e),
                    r = Ve(n);
                return n == r ? e : Xt(r)
            }

            function ze(t, e) {
                if (e > t.lastLine()) return e;
                var n, r = qt(t, e);
                if (!He(t, r)) return e;
                for (; n = Ne(r);) r = n.find(1, !0).line;
                return Xt(r) + 1
            }

            function He(t, e) {
                var n = Oe && e.markedSpans;
                if (n)
                    for (var r = void 0, i = 0; i < n.length; ++i)
                        if ((r = n[i]).marker.collapsed) {
                            if (null == r.from) return !0;
                            if (!r.marker.widgetNode && 0 == r.from && r.marker.inclusiveLeft && $e(t, e, r)) return !0
                        }
            }

            function $e(t, e, n) {
                if (null == n.to) {
                    var r = n.marker.find(1, !0);
                    return $e(t, r.line, Se(r.line.markedSpans, n.marker))
                }
                if (n.marker.inclusiveRight && n.to == e.text.length) return !0;
                for (var i = void 0, o = 0; o < e.markedSpans.length; ++o)
                    if ((i = e.markedSpans[o]).marker.collapsed && !i.marker.widgetNode && i.from == n.to && (null == i.to || i.to != n.from) && (i.marker.inclusiveLeft || n.marker.inclusiveRight) && $e(t, e, i)) return !0
            }

            function Ue(t) {
                for (var e = 0, n = (t = Ve(t)).parent, r = 0; r < n.lines.length; ++r) {
                    var i = n.lines[r];
                    if (i == t) break;
                    e += i.height
                }
                for (var o = n.parent; o; o = (n = o).parent)
                    for (var a = 0; a < o.children.length; ++a) {
                        var s = o.children[a];
                        if (s == n) break;
                        e += s.height
                    }
                return e
            }

            function Be(t) {
                if (0 == t.height) return 0;
                for (var e, n = t.text.length, r = t; e = _e(r);) {
                    var i = e.find(0, !0);
                    r = i.from.line, n += i.from.ch - i.to.ch
                }
                for (r = t; e = Ne(r);) {
                    var o = e.find(0, !0);
                    n -= r.text.length - o.from.ch, n += (r = o.to.line).text.length - o.to.ch
                }
                return n
            }

            function We(t) {
                var e = t.display,
                    n = t.doc;
                e.maxLine = qt(n, n.first), e.maxLineLength = Be(e.maxLine), e.maxLineChanged = !0, n.iter(function(t) {
                    var n = Be(t);
                    n > e.maxLineLength && (e.maxLineLength = n, e.maxLine = t)
                })
            }
            var qe = function(t, e, n) {
                this.text = t, Ee(this, e), this.height = n ? n(this) : 1
            };

            function Ge(t) {
                t.parent = null, Pe(t)
            }
            qe.prototype.lineNo = function() {
                return Xt(this)
            }, yt(qe);
            var Ke = {},
                Ye = {};

            function Xe(t, e) {
                if (!t || /^\s*$/.test(t)) return null;
                var n = e.addModeClass ? Ye : Ke;
                return n[t] || (n[t] = t.replace(/\S+/g, "cm-$&"))
            }

            function Je(t, e) {
                var n = M("span", null, null, l ? "padding-right: .1px" : null),
                    r = {
                        pre: M("pre", [n], "CodeMirror-line"),
                        content: n,
                        col: 0,
                        pos: 0,
                        cm: t,
                        trailingSpace: !1,
                        splitSpaces: t.getOption("lineWrapping")
                    };
                e.measure = {};
                for (var i = 0; i <= (e.rest ? e.rest.length : 0); i++) {
                    var o = i ? e.rest[i - 1] : e.line,
                        a = void 0;
                    r.pos = 0, r.addToken = Qe, Mt(t.display.measure) && (a = ut(o, t.doc.direction)) && (r.addToken = tn(r.addToken, a)), r.map = [], nn(o, r, he(t, o, e != t.display.externalMeasured && Xt(o))), o.styleClasses && (o.styleClasses.bgClass && (r.bgClass = _(o.styleClasses.bgClass, r.bgClass || "")), o.styleClasses.textClass && (r.textClass = _(o.styleClasses.textClass, r.textClass || ""))), 0 == r.map.length && r.map.push(0, 0, r.content.appendChild(Et(t.display.measure))), 0 == i ? (e.measure.map = r.map, e.measure.cache = {}) : ((e.measure.maps || (e.measure.maps = [])).push(r.map), (e.measure.caches || (e.measure.caches = [])).push({}))
                }
                if (l) {
                    var s = r.content.lastChild;
                    (/\bcm-tab\b/.test(s.className) || s.querySelector && s.querySelector(".cm-tab")) && (r.content.className = "cm-tab-wrap-hack")
                }
                return gt(t, "renderLine", t, e.line, r.pre), r.pre.className && (r.textClass = _(r.pre.className, r.textClass || "")), r
            }

            function Ze(t) {
                var e = E("span", "•", "cm-invalidchar");
                return e.title = "\\u" + t.charCodeAt(0).toString(16), e.setAttribute("aria-label", e.title), e
            }

            function Qe(t, e, n, r, i, o, l) {
                if (e) {
                    var c, u = t.splitSpaces ? function(t, e) {
                            if (t.length > 1 && !/  /.test(t)) return t;
                            for (var n = e, r = "", i = 0; i < t.length; i++) {
                                var o = t.charAt(i);
                                " " != o || !n || i != t.length - 1 && 32 != t.charCodeAt(i + 1) || (o = " "), r += o, n = " " == o
                            }
                            return r
                        }(e, t.trailingSpace) : e,
                        d = t.cm.state.specialChars,
                        h = !1;
                    if (d.test(e)) {
                        c = document.createDocumentFragment();
                        for (var f = 0;;) {
                            d.lastIndex = f;
                            var p = d.exec(e),
                                g = p ? p.index - f : e.length - f;
                            if (g) {
                                var v = document.createTextNode(u.slice(f, f + g));
                                a && s < 9 ? c.appendChild(E("span", [v])) : c.appendChild(v), t.map.push(t.pos, t.pos + g, v), t.col += g, t.pos += g
                            }
                            if (!p) break;
                            f += g + 1;
                            var m = void 0;
                            if ("\t" == p[0]) {
                                var b = t.cm.options.tabSize,
                                    y = b - t.col % b;
                                (m = c.appendChild(E("span", K(y), "cm-tab"))).setAttribute("role", "presentation"), m.setAttribute("cm-text", "\t"), t.col += y
                            } else "\r" == p[0] || "\n" == p[0] ? ((m = c.appendChild(E("span", "\r" == p[0] ? "␍" : "␤", "cm-invalidchar"))).setAttribute("cm-text", p[0]), t.col += 1) : ((m = t.cm.options.specialCharPlaceholder(p[0])).setAttribute("cm-text", p[0]), a && s < 9 ? c.appendChild(E("span", [m])) : c.appendChild(m), t.col += 1);
                            t.map.push(t.pos, t.pos + 1, m), t.pos++
                        }
                    } else t.col += e.length, c = document.createTextNode(u), t.map.push(t.pos, t.pos + e.length, c), a && s < 9 && (h = !0), t.pos += e.length;
                    if (t.trailingSpace = 32 == u.charCodeAt(e.length - 1), n || r || i || h || o || l) {
                        var w = n || "";
                        r && (w += r), i && (w += i);
                        var x = E("span", [c], w, o);
                        if (l)
                            for (var O in l) l.hasOwnProperty(O) && "style" != O && "class" != O && x.setAttribute(O, l[O]);
                        return t.content.appendChild(x)
                    }
                    t.content.appendChild(c)
                }
            }

            function tn(t, e) {
                return function(n, r, i, o, a, s, l) {
                    i = i ? i + " cm-force-border" : "cm-force-border";
                    for (var c = n.pos, u = c + r.length;;) {
                        for (var d = void 0, h = 0; h < e.length && !((d = e[h]).to > c && d.from <= c); h++);
                        if (d.to >= u) return t(n, r, i, o, a, s, l);
                        t(n, r.slice(0, d.to - c), i, o, null, s, l), o = null, r = r.slice(d.to - c), c = d.to
                    }
                }
            }

            function en(t, e, n, r) {
                var i = !r && n.widgetNode;
                i && t.map.push(t.pos, t.pos + e, i), !r && t.cm.display.input.needsContentAttribute && (i || (i = t.content.appendChild(document.createElement("span"))), i.setAttribute("cm-marker", n.id)), i && (t.cm.display.input.setUneditable(i), t.content.appendChild(i)), t.pos += e, t.trailingSpace = !1
            }

            function nn(t, e, n) {
                var r = t.markedSpans,
                    i = t.text,
                    o = 0;
                if (r)
                    for (var a, s, l, c, u, d, h, f = i.length, p = 0, g = 1, v = "", m = 0;;) {
                        if (m == p) {
                            l = c = u = s = "", h = null, d = null, m = 1 / 0;
                            for (var b = [], y = void 0, w = 0; w < r.length; ++w) {
                                var x = r[w],
                                    O = x.marker;
                                if ("bookmark" == O.type && x.from == p && O.widgetNode) b.push(O);
                                else if (x.from <= p && (null == x.to || x.to > p || O.collapsed && x.to == p && x.from == p)) {
                                    if (null != x.to && x.to != p && m > x.to && (m = x.to, c = ""), O.className && (l += " " + O.className), O.css && (s = (s ? s + ";" : "") + O.css), O.startStyle && x.from == p && (u += " " + O.startStyle), O.endStyle && x.to == m && (y || (y = [])).push(O.endStyle, x.to), O.title && ((h || (h = {})).title = O.title), O.attributes)
                                        for (var C in O.attributes)(h || (h = {}))[C] = O.attributes[C];
                                    O.collapsed && (!d || Ae(d.marker, O) < 0) && (d = x)
                                } else x.from > p && m > x.from && (m = x.from)
                            }
                            if (y)
                                for (var S = 0; S < y.length; S += 2) y[S + 1] == m && (c += " " + y[S]);
                            if (!d || d.from == p)
                                for (var k = 0; k < b.length; ++k) en(e, 0, b[k]);
                            if (d && (d.from || 0) == p) {
                                if (en(e, (null == d.to ? f + 1 : d.to) - p, d.marker, null == d.from), null == d.to) return;
                                d.to == p && (d = !1)
                            }
                        }
                        if (p >= f) break;
                        for (var j = Math.min(f, m);;) {
                            if (v) {
                                var T = p + v.length;
                                if (!d) {
                                    var P = T > j ? v.slice(0, j - p) : v;
                                    e.addToken(e, P, a ? a + l : l, u, p + P.length == m ? c : "", s, h)
                                }
                                if (T >= j) {
                                    v = v.slice(j - p), p = j;
                                    break
                                }
                                p = T, u = ""
                            }
                            v = i.slice(o, o = n[g++]), a = Xe(n[g++], e.cm.options)
                        }
                    } else
                        for (var E = 1; E < n.length; E += 2) e.addToken(e, i.slice(o, o = n[E]), Xe(n[E + 1], e.cm.options))
            }

            function rn(t, e, n) {
                this.line = e, this.rest = function(t) {
                    for (var e, n; e = Ne(t);) t = e.find(1, !0).line, (n || (n = [])).push(t);
                    return n
                }(e), this.size = this.rest ? Xt(Y(this.rest)) - n + 1 : 1, this.node = this.text = null, this.hidden = He(t, e)
            }

            function on(t, e, n) {
                for (var r, i = [], o = e; o < n; o = r) {
                    var a = new rn(t.doc, qt(t.doc, o), o);
                    r = o + a.size, i.push(a)
                }
                return i
            }
            var an = null,
                sn = null;

            function ln(t, e) {
                var n = ft(t, e);
                if (n.length) {
                    var r, i = Array.prototype.slice.call(arguments, 2);
                    an ? r = an.delayedCallbacks : sn ? r = sn : (r = sn = [], setTimeout(cn, 0));
                    for (var o = function(t) {
                            r.push(function() {
                                return n[t].apply(null, i)
                            })
                        }, a = 0; a < n.length; ++a) o(a)
                }
            }

            function cn() {
                var t = sn;
                sn = null;
                for (var e = 0; e < t.length; ++e) t[e]()
            }

            function un(t, e, n, r) {
                for (var i = 0; i < e.changes.length; i++) {
                    var o = e.changes[i];
                    "text" == o ? fn(t, e) : "gutter" == o ? gn(t, e, n, r) : "class" == o ? pn(t, e) : "widget" == o && vn(t, e, r)
                }
                e.changes = null
            }

            function dn(t) {
                return t.node == t.text && (t.node = E("div", null, null, "position: relative"), t.text.parentNode && t.text.parentNode.replaceChild(t.node, t.text), t.node.appendChild(t.text), a && s < 8 && (t.node.style.zIndex = 2)), t.node
            }

            function hn(t, e) {
                var n = t.display.externalMeasured;
                return n && n.line == e.line ? (t.display.externalMeasured = null, e.measure = n.measure, n.built) : Je(t, e)
            }

            function fn(t, e) {
                var n = e.text.className,
                    r = hn(t, e);
                e.text == e.node && (e.node = r.pre), e.text.parentNode.replaceChild(r.pre, e.text), e.text = r.pre, r.bgClass != e.bgClass || r.textClass != e.textClass ? (e.bgClass = r.bgClass, e.textClass = r.textClass, pn(t, e)) : n && (e.text.className = n)
            }

            function pn(t, e) {
                ! function(t, e) {
                    var n = e.bgClass ? e.bgClass + " " + (e.line.bgClass || "") : e.line.bgClass;
                    if (n && (n += " CodeMirror-linebackground"), e.background) n ? e.background.className = n : (e.background.parentNode.removeChild(e.background), e.background = null);
                    else if (n) {
                        var r = dn(e);
                        e.background = r.insertBefore(E("div", null, n), r.firstChild), t.display.input.setUneditable(e.background)
                    }
                }(t, e), e.line.wrapClass ? dn(e).className = e.line.wrapClass : e.node != e.text && (e.node.className = "");
                var n = e.textClass ? e.textClass + " " + (e.line.textClass || "") : e.line.textClass;
                e.text.className = n || ""
            }

            function gn(t, e, n, r) {
                if (e.gutter && (e.node.removeChild(e.gutter), e.gutter = null), e.gutterBackground && (e.node.removeChild(e.gutterBackground), e.gutterBackground = null), e.line.gutterClass) {
                    var i = dn(e);
                    e.gutterBackground = E("div", null, "CodeMirror-gutter-background " + e.line.gutterClass, "left: " + (t.options.fixedGutter ? r.fixedPos : -r.gutterTotalWidth) + "px; width: " + r.gutterTotalWidth + "px"), t.display.input.setUneditable(e.gutterBackground), i.insertBefore(e.gutterBackground, e.text)
                }
                var o = e.line.gutterMarkers;
                if (t.options.lineNumbers || o) {
                    var a = dn(e),
                        s = e.gutter = E("div", null, "CodeMirror-gutter-wrapper", "left: " + (t.options.fixedGutter ? r.fixedPos : -r.gutterTotalWidth) + "px");
                    if (t.display.input.setUneditable(s), a.insertBefore(s, e.text), e.line.gutterClass && (s.className += " " + e.line.gutterClass), !t.options.lineNumbers || o && o["CodeMirror-linenumbers"] || (e.lineNumber = s.appendChild(E("div", Qt(t.options, n), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + r.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + t.display.lineNumInnerWidth + "px"))), o)
                        for (var l = 0; l < t.display.gutterSpecs.length; ++l) {
                            var c = t.display.gutterSpecs[l].className,
                                u = o.hasOwnProperty(c) && o[c];
                            u && s.appendChild(E("div", [u], "CodeMirror-gutter-elt", "left: " + r.gutterLeft[c] + "px; width: " + r.gutterWidth[c] + "px"))
                        }
                }
            }

            function vn(t, e, n) {
                e.alignable && (e.alignable = null);
                for (var r = S("CodeMirror-linewidget"), i = e.node.firstChild, o = void 0; i; i = o) o = i.nextSibling, r.test(i.className) && e.node.removeChild(i);
                bn(t, e, n)
            }

            function mn(t, e, n, r) {
                var i = hn(t, e);
                return e.text = e.node = i.pre, i.bgClass && (e.bgClass = i.bgClass), i.textClass && (e.textClass = i.textClass), pn(t, e), gn(t, e, n, r), bn(t, e, r), e.node
            }

            function bn(t, e, n) {
                if (yn(t, e.line, e, n, !0), e.rest)
                    for (var r = 0; r < e.rest.length; r++) yn(t, e.rest[r], e, n, !1)
            }

            function yn(t, e, n, r, i) {
                if (e.widgets)
                    for (var o = dn(n), a = 0, s = e.widgets; a < s.length; ++a) {
                        var l = s[a],
                            c = E("div", [l.node], "CodeMirror-linewidget" + (l.className ? " " + l.className : ""));
                        l.handleMouseEvents || c.setAttribute("cm-ignore-events", "true"), wn(l, c, n, r), t.display.input.setUneditable(c), i && l.above ? o.insertBefore(c, n.gutter || n.text) : o.appendChild(c), ln(l, "redraw")
                    }
            }

            function wn(t, e, n, r) {
                if (t.noHScroll) {
                    (n.alignable || (n.alignable = [])).push(e);
                    var i = r.wrapperWidth;
                    e.style.left = r.fixedPos + "px", t.coverGutter || (i -= r.gutterTotalWidth, e.style.paddingLeft = r.gutterTotalWidth + "px"), e.style.width = i + "px"
                }
                t.coverGutter && (e.style.zIndex = 5, e.style.position = "relative", t.noHScroll || (e.style.marginLeft = -r.gutterTotalWidth + "px"))
            }

            function xn(t) {
                if (null != t.height) return t.height;
                var e = t.doc.cm;
                if (!e) return 0;
                if (!D(document.body, t.node)) {
                    var n = "position: relative;";
                    t.coverGutter && (n += "margin-left: -" + e.display.gutters.offsetWidth + "px;"), t.noHScroll && (n += "width: " + e.display.wrapper.clientWidth + "px;"), P(e.display.measure, E("div", [t.node], null, n))
                }
                return t.height = t.node.parentNode.offsetHeight
            }

            function On(t, e) {
                for (var n = St(e); n != t.wrapper; n = n.parentNode)
                    if (!n || 1 == n.nodeType && "true" == n.getAttribute("cm-ignore-events") || n.parentNode == t.sizer && n != t.mover) return !0
            }

            function Cn(t) {
                return t.lineSpace.offsetTop
            }

            function Sn(t) {
                return t.mover.offsetHeight - t.lineSpace.offsetHeight
            }

            function kn(t) {
                if (t.cachedPaddingH) return t.cachedPaddingH;
                var e = P(t.measure, E("pre", "x", "CodeMirror-line-like")),
                    n = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle,
                    r = {
                        left: parseInt(n.paddingLeft),
                        right: parseInt(n.paddingRight)
                    };
                return isNaN(r.left) || isNaN(r.right) || (t.cachedPaddingH = r), r
            }

            function jn(t) {
                return H - t.display.nativeBarWidth
            }

            function Tn(t) {
                return t.display.scroller.clientWidth - jn(t) - t.display.barWidth
            }

            function Pn(t) {
                return t.display.scroller.clientHeight - jn(t) - t.display.barHeight
            }

            function En(t, e, n) {
                if (t.line == e) return {
                    map: t.measure.map,
                    cache: t.measure.cache
                };
                for (var r = 0; r < t.rest.length; r++)
                    if (t.rest[r] == e) return {
                        map: t.measure.maps[r],
                        cache: t.measure.caches[r]
                    };
                for (var i = 0; i < t.rest.length; i++)
                    if (Xt(t.rest[i]) > n) return {
                        map: t.measure.maps[i],
                        cache: t.measure.caches[i],
                        before: !0
                    }
            }

            function Mn(t, e, n, r) {
                return Ln(t, An(t, e), n, r)
            }

            function Dn(t, e) {
                if (e >= t.display.viewFrom && e < t.display.viewTo) return t.display.view[lr(t, e)];
                var n = t.display.externalMeasured;
                return n && e >= n.lineN && e < n.lineN + n.size ? n : void 0
            }

            function An(t, e) {
                var n = Xt(e),
                    r = Dn(t, n);
                r && !r.text ? r = null : r && r.changes && (un(t, r, n, rr(t)), t.curOp.forceUpdate = !0), r || (r = function(t, e) {
                    var n = Xt(e = Ve(e)),
                        r = t.display.externalMeasured = new rn(t.doc, e, n);
                    r.lineN = n;
                    var i = r.built = Je(t, r);
                    return r.text = i.pre, P(t.display.lineMeasure, i.pre), r
                }(t, e));
                var i = En(r, e, n);
                return {
                    line: e,
                    view: r,
                    rect: null,
                    map: i.map,
                    cache: i.cache,
                    before: i.before,
                    hasHeights: !1
                }
            }

            function Ln(t, e, n, r, i) {
                e.before && (n = -1);
                var o, l = n + (r || "");
                return e.cache.hasOwnProperty(l) ? o = e.cache[l] : (e.rect || (e.rect = e.view.text.getBoundingClientRect()), e.hasHeights || (function(t, e, n) {
                    var r = t.options.lineWrapping,
                        i = r && Tn(t);
                    if (!e.measure.heights || r && e.measure.width != i) {
                        var o = e.measure.heights = [];
                        if (r) {
                            e.measure.width = i;
                            for (var a = e.text.firstChild.getClientRects(), s = 0; s < a.length - 1; s++) {
                                var l = a[s],
                                    c = a[s + 1];
                                Math.abs(l.bottom - c.bottom) > 2 && o.push((l.bottom + c.top) / 2 - n.top)
                            }
                        }
                        o.push(n.bottom - n.top)
                    }
                }(t, e.view, e.rect), e.hasHeights = !0), (o = function(t, e, n, r) {
                    var i, o = In(e.map, n, r),
                        l = o.node,
                        c = o.start,
                        u = o.end,
                        d = o.collapse;
                    if (3 == l.nodeType) {
                        for (var h = 0; h < 4; h++) {
                            for (; c && it(e.line.text.charAt(o.coverStart + c));) --c;
                            for (; o.coverStart + u < o.coverEnd && it(e.line.text.charAt(o.coverStart + u));) ++u;
                            if ((i = a && s < 9 && 0 == c && u == o.coverEnd - o.coverStart ? l.parentNode.getBoundingClientRect() : Fn(k(l, c, u).getClientRects(), r)).left || i.right || 0 == c) break;
                            u = c, c -= 1, d = "right"
                        }
                        a && s < 11 && (i = function(t, e) {
                            if (!window.screen || null == screen.logicalXDPI || screen.logicalXDPI == screen.deviceXDPI || ! function(t) {
                                    if (null != Nt) return Nt;
                                    var e = P(t, E("span", "x")),
                                        n = e.getBoundingClientRect(),
                                        r = k(e, 0, 1).getBoundingClientRect();
                                    return Nt = Math.abs(n.left - r.left) > 1
                                }(t)) return e;
                            var n = screen.logicalXDPI / screen.deviceXDPI,
                                r = screen.logicalYDPI / screen.deviceYDPI;
                            return {
                                left: e.left * n,
                                right: e.right * n,
                                top: e.top * r,
                                bottom: e.bottom * r
                            }
                        }(t.display.measure, i))
                    } else {
                        var f;
                        c > 0 && (d = r = "right"), i = t.options.lineWrapping && (f = l.getClientRects()).length > 1 ? f["right" == r ? f.length - 1 : 0] : l.getBoundingClientRect()
                    }
                    if (a && s < 9 && !c && (!i || !i.left && !i.right)) {
                        var p = l.parentNode.getClientRects()[0];
                        i = p ? {
                            left: p.left,
                            right: p.left + nr(t.display),
                            top: p.top,
                            bottom: p.bottom
                        } : Nn
                    }
                    for (var g = i.top - e.rect.top, v = i.bottom - e.rect.top, m = (g + v) / 2, b = e.view.measure.heights, y = 0; y < b.length - 1 && !(m < b[y]); y++);
                    var w = y ? b[y - 1] : 0,
                        x = b[y],
                        O = {
                            left: ("right" == d ? i.right : i.left) - e.rect.left,
                            right: ("left" == d ? i.left : i.right) - e.rect.left,
                            top: w,
                            bottom: x
                        };
                    return i.left || i.right || (O.bogus = !0), t.options.singleCursorHeightPerLine || (O.rtop = g, O.rbottom = v), O
                }(t, e, n, r)).bogus || (e.cache[l] = o)), {
                    left: o.left,
                    right: o.right,
                    top: i ? o.rtop : o.top,
                    bottom: i ? o.rbottom : o.bottom
                }
            }
            var _n, Nn = {
                left: 0,
                right: 0,
                top: 0,
                bottom: 0
            };

            function In(t, e, n) {
                for (var r, i, o, a, s, l, c = 0; c < t.length; c += 3)
                    if (s = t[c], l = t[c + 1], e < s ? (i = 0, o = 1, a = "left") : e < l ? o = 1 + (i = e - s) : (c == t.length - 3 || e == l && t[c + 3] > e) && (i = (o = l - s) - 1, e >= l && (a = "right")), null != i) {
                        if (r = t[c + 2], s == l && n == (r.insertLeft ? "left" : "right") && (a = n), "left" == n && 0 == i)
                            for (; c && t[c - 2] == t[c - 3] && t[c - 1].insertLeft;) r = t[2 + (c -= 3)], a = "left";
                        if ("right" == n && i == l - s)
                            for (; c < t.length - 3 && t[c + 3] == t[c + 4] && !t[c + 5].insertLeft;) r = t[(c += 3) + 2], a = "right";
                        break
                    } return {
                    node: r,
                    start: i,
                    end: o,
                    collapse: a,
                    coverStart: s,
                    coverEnd: l
                }
            }

            function Fn(t, e) {
                var n = Nn;
                if ("left" == e)
                    for (var r = 0; r < t.length && (n = t[r]).left == n.right; r++);
                else
                    for (var i = t.length - 1; i >= 0 && (n = t[i]).left == n.right; i--);
                return n
            }

            function Vn(t) {
                if (t.measure && (t.measure.cache = {}, t.measure.heights = null, t.rest))
                    for (var e = 0; e < t.rest.length; e++) t.measure.caches[e] = {}
            }

            function Rn(t) {
                t.display.externalMeasure = null, T(t.display.lineMeasure);
                for (var e = 0; e < t.display.view.length; e++) Vn(t.display.view[e])
            }

            function zn(t) {
                Rn(t), t.display.cachedCharWidth = t.display.cachedTextHeight = t.display.cachedPaddingH = null, t.options.lineWrapping || (t.display.maxLineChanged = !0), t.display.lineNumChars = null
            }

            function Hn() {
                return u && v ? -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) : window.pageXOffset || (document.documentElement || document.body).scrollLeft
            }

            function $n() {
                return u && v ? -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) : window.pageYOffset || (document.documentElement || document.body).scrollTop
            }

            function Un(t) {
                var e = 0;
                if (t.widgets)
                    for (var n = 0; n < t.widgets.length; ++n) t.widgets[n].above && (e += xn(t.widgets[n]));
                return e
            }

            function Bn(t, e, n, r, i) {
                if (!i) {
                    var o = Un(e);
                    n.top += o, n.bottom += o
                }
                if ("line" == r) return n;
                r || (r = "local");
                var a = Ue(e);
                if ("local" == r ? a += Cn(t.display) : a -= t.display.viewOffset, "page" == r || "window" == r) {
                    var s = t.display.lineSpace.getBoundingClientRect();
                    a += s.top + ("window" == r ? 0 : $n());
                    var l = s.left + ("window" == r ? 0 : Hn());
                    n.left += l, n.right += l
                }
                return n.top += a, n.bottom += a, n
            }

            function Wn(t, e, n) {
                if ("div" == n) return e;
                var r = e.left,
                    i = e.top;
                if ("page" == n) r -= Hn(), i -= $n();
                else if ("local" == n || !n) {
                    var o = t.display.sizer.getBoundingClientRect();
                    r += o.left, i += o.top
                }
                var a = t.display.lineSpace.getBoundingClientRect();
                return {
                    left: r - a.left,
                    top: i - a.top
                }
            }

            function qn(t, e, n, r, i) {
                return r || (r = qt(t.doc, e.line)), Bn(t, r, Mn(t, r, e.ch, i), n)
            }

            function Gn(t, e, n, r, i, o) {
                function a(e, a) {
                    var s = Ln(t, i, e, a ? "right" : "left", o);
                    return a ? s.left = s.right : s.right = s.left, Bn(t, r, s, n)
                }
                r = r || qt(t.doc, e.line), i || (i = An(t, r));
                var s = ut(r, t.doc.direction),
                    l = e.ch,
                    c = e.sticky;
                if (l >= r.text.length ? (l = r.text.length, c = "before") : l <= 0 && (l = 0, c = "after"), !s) return a("before" == c ? l - 1 : l, "before" == c);

                function u(t, e, n) {
                    return a(n ? t - 1 : t, 1 == s[e].level != n)
                }
                var d = lt(s, l, c),
                    h = st,
                    f = u(l, d, "before" == c);
                return null != h && (f.other = u(l, h, "before" != c)), f
            }

            function Kn(t, e) {
                var n = 0;
                e = se(t.doc, e), t.options.lineWrapping || (n = nr(t.display) * e.ch);
                var r = qt(t.doc, e.line),
                    i = Ue(r) + Cn(t.display);
                return {
                    left: n,
                    right: n,
                    top: i,
                    bottom: i + r.height
                }
            }

            function Yn(t, e, n, r, i) {
                var o = te(t, e, n);
                return o.xRel = i, r && (o.outside = r), o
            }

            function Xn(t, e, n) {
                var r = t.doc;
                if ((n += t.display.viewOffset) < 0) return Yn(r.first, 0, null, -1, -1);
                var i = Jt(r, n),
                    o = r.first + r.size - 1;
                if (i > o) return Yn(r.first + r.size - 1, qt(r, o).text.length, null, 1, 1);
                e < 0 && (e = 0);
                for (var a = qt(r, i);;) {
                    var s = tr(t, a, i, e, n),
                        l = Ie(a, s.ch + (s.xRel > 0 || s.outside > 0 ? 1 : 0));
                    if (!l) return s;
                    var c = l.find(1);
                    if (c.line == i) return c;
                    a = qt(r, i = c.line)
                }
            }

            function Jn(t, e, n, r) {
                r -= Un(e);
                var i = e.text.length,
                    o = at(function(e) {
                        return Ln(t, n, e - 1).bottom <= r
                    }, i, 0);
                return {
                    begin: o,
                    end: i = at(function(e) {
                        return Ln(t, n, e).top > r
                    }, o, i)
                }
            }

            function Zn(t, e, n, r) {
                return n || (n = An(t, e)), Jn(t, e, n, Bn(t, e, Ln(t, n, r), "line").top)
            }

            function Qn(t, e, n, r) {
                return !(t.bottom <= n) && (t.top > n || (r ? t.left : t.right) > e)
            }

            function tr(t, e, n, r, i) {
                i -= Ue(e);
                var o = An(t, e),
                    a = Un(e),
                    s = 0,
                    l = e.text.length,
                    c = !0,
                    u = ut(e, t.doc.direction);
                if (u) {
                    var d = (t.options.lineWrapping ? function(t, e, n, r, i, o, a) {
                        var s = Jn(t, e, r, a),
                            l = s.begin,
                            c = s.end;
                        /\s/.test(e.text.charAt(c - 1)) && c--;
                        for (var u = null, d = null, h = 0; h < i.length; h++) {
                            var f = i[h];
                            if (!(f.from >= c || f.to <= l)) {
                                var p = Ln(t, r, 1 != f.level ? Math.min(c, f.to) - 1 : Math.max(l, f.from)).right,
                                    g = p < o ? o - p + 1e9 : p - o;
                                (!u || d > g) && (u = f, d = g)
                            }
                        }
                        return u || (u = i[i.length - 1]), u.from < l && (u = {
                            from: l,
                            to: u.to,
                            level: u.level
                        }), u.to > c && (u = {
                            from: u.from,
                            to: c,
                            level: u.level
                        }), u
                    } : function(t, e, n, r, i, o, a) {
                        var s = at(function(s) {
                                var l = i[s],
                                    c = 1 != l.level;
                                return Qn(Gn(t, te(n, c ? l.to : l.from, c ? "before" : "after"), "line", e, r), o, a, !0)
                            }, 0, i.length - 1),
                            l = i[s];
                        if (s > 0) {
                            var c = 1 != l.level,
                                u = Gn(t, te(n, c ? l.from : l.to, c ? "after" : "before"), "line", e, r);
                            Qn(u, o, a, !0) && u.top > a && (l = i[s - 1])
                        }
                        return l
                    })(t, e, n, o, u, r, i);
                    s = (c = 1 != d.level) ? d.from : d.to - 1, l = c ? d.to : d.from - 1
                }
                var h, f, p = null,
                    g = null,
                    v = at(function(e) {
                        var n = Ln(t, o, e);
                        return n.top += a, n.bottom += a, !!Qn(n, r, i, !1) && (n.top <= i && n.left <= r && (p = e, g = n), !0)
                    }, s, l),
                    m = !1;
                if (g) {
                    var b = r - g.left < g.right - r,
                        y = b == c;
                    v = p + (y ? 0 : 1), f = y ? "after" : "before", h = b ? g.left : g.right
                } else {
                    c || v != l && v != s || v++, f = 0 == v ? "after" : v == e.text.length ? "before" : Ln(t, o, v - (c ? 1 : 0)).bottom + a <= i == c ? "after" : "before";
                    var w = Gn(t, te(n, v, f), "line", e, o);
                    h = w.left, m = i < w.top ? -1 : i >= w.bottom ? 1 : 0
                }
                return Yn(n, v = ot(e.text, v, 1), f, m, r - h)
            }

            function er(t) {
                if (null != t.cachedTextHeight) return t.cachedTextHeight;
                if (null == _n) {
                    _n = E("pre", null, "CodeMirror-line-like");
                    for (var e = 0; e < 49; ++e) _n.appendChild(document.createTextNode("x")), _n.appendChild(E("br"));
                    _n.appendChild(document.createTextNode("x"))
                }
                P(t.measure, _n);
                var n = _n.offsetHeight / 50;
                return n > 3 && (t.cachedTextHeight = n), T(t.measure), n || 1
            }

            function nr(t) {
                if (null != t.cachedCharWidth) return t.cachedCharWidth;
                var e = E("span", "xxxxxxxxxx"),
                    n = E("pre", [e], "CodeMirror-line-like");
                P(t.measure, n);
                var r = e.getBoundingClientRect(),
                    i = (r.right - r.left) / 10;
                return i > 2 && (t.cachedCharWidth = i), i || 10
            }

            function rr(t) {
                for (var e = t.display, n = {}, r = {}, i = e.gutters.clientLeft, o = e.gutters.firstChild, a = 0; o; o = o.nextSibling, ++a) {
                    var s = t.display.gutterSpecs[a].className;
                    n[s] = o.offsetLeft + o.clientLeft + i, r[s] = o.clientWidth
                }
                return {
                    fixedPos: ir(e),
                    gutterTotalWidth: e.gutters.offsetWidth,
                    gutterLeft: n,
                    gutterWidth: r,
                    wrapperWidth: e.wrapper.clientWidth
                }
            }

            function ir(t) {
                return t.scroller.getBoundingClientRect().left - t.sizer.getBoundingClientRect().left
            }

            function or(t) {
                var e = er(t.display),
                    n = t.options.lineWrapping,
                    r = n && Math.max(5, t.display.scroller.clientWidth / nr(t.display) - 3);
                return function(i) {
                    if (He(t.doc, i)) return 0;
                    var o = 0;
                    if (i.widgets)
                        for (var a = 0; a < i.widgets.length; a++) i.widgets[a].height && (o += i.widgets[a].height);
                    return n ? o + (Math.ceil(i.text.length / r) || 1) * e : o + e
                }
            }

            function ar(t) {
                var e = t.doc,
                    n = or(t);
                e.iter(function(t) {
                    var e = n(t);
                    e != t.height && Yt(t, e)
                })
            }

            function sr(t, e, n, r) {
                var i = t.display;
                if (!n && "true" == St(e).getAttribute("cm-not-content")) return null;
                var o, a, s = i.lineSpace.getBoundingClientRect();
                try {
                    o = e.clientX - s.left, a = e.clientY - s.top
                } catch (t) {
                    return null
                }
                var l, c = Xn(t, o, a);
                if (r && c.xRel > 0 && (l = qt(t.doc, c.line).text).length == c.ch) {
                    var u = V(l, l.length, t.options.tabSize) - l.length;
                    c = te(c.line, Math.max(0, Math.round((o - kn(t.display).left) / nr(t.display)) - u))
                }
                return c
            }

            function lr(t, e) {
                if (e >= t.display.viewTo) return null;
                if ((e -= t.display.viewFrom) < 0) return null;
                for (var n = t.display.view, r = 0; r < n.length; r++)
                    if ((e -= n[r].size) < 0) return r
            }

            function cr(t, e, n, r) {
                null == e && (e = t.doc.first), null == n && (n = t.doc.first + t.doc.size), r || (r = 0);
                var i = t.display;
                if (r && n < i.viewTo && (null == i.updateLineNumbers || i.updateLineNumbers > e) && (i.updateLineNumbers = e), t.curOp.viewChanged = !0, e >= i.viewTo) Oe && Re(t.doc, e) < i.viewTo && dr(t);
                else if (n <= i.viewFrom) Oe && ze(t.doc, n + r) > i.viewFrom ? dr(t) : (i.viewFrom += r, i.viewTo += r);
                else if (e <= i.viewFrom && n >= i.viewTo) dr(t);
                else if (e <= i.viewFrom) {
                    var o = hr(t, n, n + r, 1);
                    o ? (i.view = i.view.slice(o.index), i.viewFrom = o.lineN, i.viewTo += r) : dr(t)
                } else if (n >= i.viewTo) {
                    var a = hr(t, e, e, -1);
                    a ? (i.view = i.view.slice(0, a.index), i.viewTo = a.lineN) : dr(t)
                } else {
                    var s = hr(t, e, e, -1),
                        l = hr(t, n, n + r, 1);
                    s && l ? (i.view = i.view.slice(0, s.index).concat(on(t, s.lineN, l.lineN)).concat(i.view.slice(l.index)), i.viewTo += r) : dr(t)
                }
                var c = i.externalMeasured;
                c && (n < c.lineN ? c.lineN += r : e < c.lineN + c.size && (i.externalMeasured = null))
            }

            function ur(t, e, n) {
                t.curOp.viewChanged = !0;
                var r = t.display,
                    i = t.display.externalMeasured;
                if (i && e >= i.lineN && e < i.lineN + i.size && (r.externalMeasured = null), !(e < r.viewFrom || e >= r.viewTo)) {
                    var o = r.view[lr(t, e)];
                    if (null != o.node) {
                        var a = o.changes || (o.changes = []); - 1 == z(a, n) && a.push(n)
                    }
                }
            }

            function dr(t) {
                t.display.viewFrom = t.display.viewTo = t.doc.first, t.display.view = [], t.display.viewOffset = 0
            }

            function hr(t, e, n, r) {
                var i, o = lr(t, e),
                    a = t.display.view;
                if (!Oe || n == t.doc.first + t.doc.size) return {
                    index: o,
                    lineN: n
                };
                for (var s = t.display.viewFrom, l = 0; l < o; l++) s += a[l].size;
                if (s != e) {
                    if (r > 0) {
                        if (o == a.length - 1) return null;
                        i = s + a[o].size - e, o++
                    } else i = s - e;
                    e += i, n += i
                }
                for (; Re(t.doc, n) != n;) {
                    if (o == (r < 0 ? 0 : a.length - 1)) return null;
                    n += r * a[o - (r < 0 ? 1 : 0)].size, o += r
                }
                return {
                    index: o,
                    lineN: n
                }
            }

            function fr(t) {
                for (var e = t.display.view, n = 0, r = 0; r < e.length; r++) {
                    var i = e[r];
                    i.hidden || i.node && !i.changes || ++n
                }
                return n
            }

            function pr(t) {
                t.display.input.showSelection(t.display.input.prepareSelection())
            }

            function gr(t, e) {
                void 0 === e && (e = !0);
                for (var n = t.doc, r = {}, i = r.cursors = document.createDocumentFragment(), o = r.selection = document.createDocumentFragment(), a = 0; a < n.sel.ranges.length; a++)
                    if (e || a != n.sel.primIndex) {
                        var s = n.sel.ranges[a];
                        if (!(s.from().line >= t.display.viewTo || s.to().line < t.display.viewFrom)) {
                            var l = s.empty();
                            (l || t.options.showCursorWhenSelecting) && vr(t, s.head, i), l || br(t, s, o)
                        }
                    } return r
            }

            function vr(t, e, n) {
                var r = Gn(t, e, "div", null, null, !t.options.singleCursorHeightPerLine),
                    i = n.appendChild(E("div", " ", "CodeMirror-cursor"));
                if (i.style.left = r.left + "px", i.style.top = r.top + "px", i.style.height = Math.max(0, r.bottom - r.top) * t.options.cursorHeight + "px", r.other) {
                    var o = n.appendChild(E("div", " ", "CodeMirror-cursor CodeMirror-secondarycursor"));
                    o.style.display = "", o.style.left = r.other.left + "px", o.style.top = r.other.top + "px", o.style.height = .85 * (r.other.bottom - r.other.top) + "px"
                }
            }

            function mr(t, e) {
                return t.top - e.top || t.left - e.left
            }

            function br(t, e, n) {
                var r = t.display,
                    i = t.doc,
                    o = document.createDocumentFragment(),
                    a = kn(t.display),
                    s = a.left,
                    l = Math.max(r.sizerWidth, Tn(t) - r.sizer.offsetLeft) - a.right,
                    c = "ltr" == i.direction;

                function u(t, e, n, r) {
                    e < 0 && (e = 0), e = Math.round(e), r = Math.round(r), o.appendChild(E("div", null, "CodeMirror-selected", "position: absolute; left: " + t + "px;\n                             top: " + e + "px; width: " + (null == n ? l - t : n) + "px;\n                             height: " + (r - e) + "px"))
                }

                function d(e, n, r) {
                    var o, a, d = qt(i, e),
                        h = d.text.length;

                    function f(n, r) {
                        return qn(t, te(e, n), "div", d, r)
                    }

                    function p(e, n, r) {
                        var i = Zn(t, d, null, e),
                            o = "ltr" == n == ("after" == r) ? "left" : "right";
                        return f("after" == r ? i.begin : i.end - (/\s/.test(d.text.charAt(i.end - 1)) ? 2 : 1), o)[o]
                    }
                    var g = ut(d, i.direction);
                    return function(t, e, n, r) {
                        if (!t) return r(e, n, "ltr", 0);
                        for (var i = !1, o = 0; o < t.length; ++o) {
                            var a = t[o];
                            (a.from < n && a.to > e || e == n && a.to == e) && (r(Math.max(a.from, e), Math.min(a.to, n), 1 == a.level ? "rtl" : "ltr", o), i = !0)
                        }
                        i || r(e, n, "ltr")
                    }(g, n || 0, null == r ? h : r, function(t, e, i, d) {
                        var v = "ltr" == i,
                            m = f(t, v ? "left" : "right"),
                            b = f(e - 1, v ? "right" : "left"),
                            y = null == n && 0 == t,
                            w = null == r && e == h,
                            x = 0 == d,
                            O = !g || d == g.length - 1;
                        if (b.top - m.top <= 3) {
                            var C = (c ? w : y) && O,
                                S = (c ? y : w) && x ? s : (v ? m : b).left,
                                k = C ? l : (v ? b : m).right;
                            u(S, m.top, k - S, m.bottom)
                        } else {
                            var j, T, P, E;
                            v ? (j = c && y && x ? s : m.left, T = c ? l : p(t, i, "before"), P = c ? s : p(e, i, "after"), E = c && w && O ? l : b.right) : (j = c ? p(t, i, "before") : s, T = !c && y && x ? l : m.right, P = !c && w && O ? s : b.left, E = c ? p(e, i, "after") : l), u(j, m.top, T - j, m.bottom), m.bottom < b.top && u(s, m.bottom, null, b.top), u(P, b.top, E - P, b.bottom)
                        }(!o || mr(m, o) < 0) && (o = m), mr(b, o) < 0 && (o = b), (!a || mr(m, a) < 0) && (a = m), mr(b, a) < 0 && (a = b)
                    }), {
                        start: o,
                        end: a
                    }
                }
                var h = e.from(),
                    f = e.to();
                if (h.line == f.line) d(h.line, h.ch, f.ch);
                else {
                    var p = qt(i, h.line),
                        g = qt(i, f.line),
                        v = Ve(p) == Ve(g),
                        m = d(h.line, h.ch, v ? p.text.length + 1 : null).end,
                        b = d(f.line, v ? 0 : null, f.ch).start;
                    v && (m.top < b.top - 2 ? (u(m.right, m.top, null, m.bottom), u(s, b.top, b.left, b.bottom)) : u(m.right, m.top, b.left - m.right, m.bottom)), m.bottom < b.top && u(s, m.bottom, null, b.top)
                }
                n.appendChild(o)
            }

            function yr(t) {
                if (t.state.focused) {
                    var e = t.display;
                    clearInterval(e.blinker);
                    var n = !0;
                    e.cursorDiv.style.visibility = "", t.options.cursorBlinkRate > 0 ? e.blinker = setInterval(function() {
                        t.hasFocus() || Cr(t), e.cursorDiv.style.visibility = (n = !n) ? "" : "hidden"
                    }, t.options.cursorBlinkRate) : t.options.cursorBlinkRate < 0 && (e.cursorDiv.style.visibility = "hidden")
                }
            }

            function wr(t) {
                t.hasFocus() || (t.display.input.focus(), t.state.focused || Or(t))
            }

            function xr(t) {
                t.state.delayingBlurEvent = !0, setTimeout(function() {
                    t.state.delayingBlurEvent && (t.state.delayingBlurEvent = !1, t.state.focused && Cr(t))
                }, 100)
            }

            function Or(t, e) {
                t.state.delayingBlurEvent && !t.state.draggingText && (t.state.delayingBlurEvent = !1), "nocursor" != t.options.readOnly && (t.state.focused || (gt(t, "focus", t, e), t.state.focused = !0, L(t.display.wrapper, "CodeMirror-focused"), t.curOp || t.display.selForContextMenu == t.doc.sel || (t.display.input.reset(), l && setTimeout(function() {
                    return t.display.input.reset(!0)
                }, 20)), t.display.input.receivedFocus()), yr(t))
            }

            function Cr(t, e) {
                t.state.delayingBlurEvent || (t.state.focused && (gt(t, "blur", t, e), t.state.focused = !1, j(t.display.wrapper, "CodeMirror-focused")), clearInterval(t.display.blinker), setTimeout(function() {
                    t.state.focused || (t.display.shift = !1)
                }, 150))
            }

            function Sr(t) {
                for (var e = t.display, n = e.lineDiv.offsetTop, r = 0; r < e.view.length; r++) {
                    var i = e.view[r],
                        o = t.options.lineWrapping,
                        l = void 0,
                        c = 0;
                    if (!i.hidden) {
                        if (a && s < 8) {
                            var u = i.node.offsetTop + i.node.offsetHeight;
                            l = u - n, n = u
                        } else {
                            var d = i.node.getBoundingClientRect();
                            l = d.bottom - d.top, !o && i.text.firstChild && (c = i.text.firstChild.getBoundingClientRect().right - d.left - 1)
                        }
                        var h = i.line.height - l;
                        if ((h > .005 || h < -.005) && (Yt(i.line, l), kr(i.line), i.rest))
                            for (var f = 0; f < i.rest.length; f++) kr(i.rest[f]);
                        if (c > t.display.sizerWidth) {
                            var p = Math.ceil(c / nr(t.display));
                            p > t.display.maxLineLength && (t.display.maxLineLength = p, t.display.maxLine = i.line, t.display.maxLineChanged = !0)
                        }
                    }
                }
            }

            function kr(t) {
                if (t.widgets)
                    for (var e = 0; e < t.widgets.length; ++e) {
                        var n = t.widgets[e],
                            r = n.node.parentNode;
                        r && (n.height = r.offsetHeight)
                    }
            }

            function jr(t, e, n) {
                var r = n && null != n.top ? Math.max(0, n.top) : t.scroller.scrollTop;
                r = Math.floor(r - Cn(t));
                var i = n && null != n.bottom ? n.bottom : r + t.wrapper.clientHeight,
                    o = Jt(e, r),
                    a = Jt(e, i);
                if (n && n.ensure) {
                    var s = n.ensure.from.line,
                        l = n.ensure.to.line;
                    s < o ? (o = s, a = Jt(e, Ue(qt(e, s)) + t.wrapper.clientHeight)) : Math.min(l, e.lastLine()) >= a && (o = Jt(e, Ue(qt(e, l)) - t.wrapper.clientHeight), a = l)
                }
                return {
                    from: o,
                    to: Math.max(a, o + 1)
                }
            }

            function Tr(t, e) {
                var n = t.display,
                    r = er(t.display);
                e.top < 0 && (e.top = 0);
                var i = t.curOp && null != t.curOp.scrollTop ? t.curOp.scrollTop : n.scroller.scrollTop,
                    o = Pn(t),
                    a = {};
                e.bottom - e.top > o && (e.bottom = e.top + o);
                var s = t.doc.height + Sn(n),
                    l = e.top < r,
                    c = e.bottom > s - r;
                if (e.top < i) a.scrollTop = l ? 0 : e.top;
                else if (e.bottom > i + o) {
                    var u = Math.min(e.top, (c ? s : e.bottom) - o);
                    u != i && (a.scrollTop = u)
                }
                var d = t.options.fixedGutter ? 0 : n.gutters.offsetWidth,
                    h = t.curOp && null != t.curOp.scrollLeft ? t.curOp.scrollLeft : n.scroller.scrollLeft - d,
                    f = Tn(t) - n.gutters.offsetWidth,
                    p = e.right - e.left > f;
                return p && (e.right = e.left + f), e.left < 10 ? a.scrollLeft = 0 : e.left < h ? a.scrollLeft = Math.max(0, e.left + d - (p ? 0 : 10)) : e.right > f + h - 3 && (a.scrollLeft = e.right + (p ? 0 : 10) - f), a
            }

            function Pr(t, e) {
                null != e && (Dr(t), t.curOp.scrollTop = (null == t.curOp.scrollTop ? t.doc.scrollTop : t.curOp.scrollTop) + e)
            }

            function Er(t) {
                Dr(t);
                var e = t.getCursor();
                t.curOp.scrollToPos = {
                    from: e,
                    to: e,
                    margin: t.options.cursorScrollMargin
                }
            }

            function Mr(t, e, n) {
                null == e && null == n || Dr(t), null != e && (t.curOp.scrollLeft = e), null != n && (t.curOp.scrollTop = n)
            }

            function Dr(t) {
                var e = t.curOp.scrollToPos;
                e && (t.curOp.scrollToPos = null, Ar(t, Kn(t, e.from), Kn(t, e.to), e.margin))
            }

            function Ar(t, e, n, r) {
                var i = Tr(t, {
                    left: Math.min(e.left, n.left),
                    top: Math.min(e.top, n.top) - r,
                    right: Math.max(e.right, n.right),
                    bottom: Math.max(e.bottom, n.bottom) + r
                });
                Mr(t, i.scrollLeft, i.scrollTop)
            }

            function Lr(t, e) {
                Math.abs(t.doc.scrollTop - e) < 2 || (n || ai(t, {
                    top: e
                }), _r(t, e, !0), n && ai(t), ei(t, 100))
            }

            function _r(t, e, n) {
                e = Math.max(0, Math.min(t.display.scroller.scrollHeight - t.display.scroller.clientHeight, e)), (t.display.scroller.scrollTop != e || n) && (t.doc.scrollTop = e, t.display.scrollbars.setScrollTop(e), t.display.scroller.scrollTop != e && (t.display.scroller.scrollTop = e))
            }

            function Nr(t, e, n, r) {
                e = Math.max(0, Math.min(e, t.display.scroller.scrollWidth - t.display.scroller.clientWidth)), (n ? e == t.doc.scrollLeft : Math.abs(t.doc.scrollLeft - e) < 2) && !r || (t.doc.scrollLeft = e, ci(t), t.display.scroller.scrollLeft != e && (t.display.scroller.scrollLeft = e), t.display.scrollbars.setScrollLeft(e))
            }

            function Ir(t) {
                var e = t.display,
                    n = e.gutters.offsetWidth,
                    r = Math.round(t.doc.height + Sn(t.display));
                return {
                    clientHeight: e.scroller.clientHeight,
                    viewHeight: e.wrapper.clientHeight,
                    scrollWidth: e.scroller.scrollWidth,
                    clientWidth: e.scroller.clientWidth,
                    viewWidth: e.wrapper.clientWidth,
                    barLeft: t.options.fixedGutter ? n : 0,
                    docHeight: r,
                    scrollHeight: r + jn(t) + e.barHeight,
                    nativeBarWidth: e.nativeBarWidth,
                    gutterWidth: n
                }
            }
            var Fr = function(t, e, n) {
                this.cm = n;
                var r = this.vert = E("div", [E("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"),
                    i = this.horiz = E("div", [E("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
                r.tabIndex = i.tabIndex = -1, t(r), t(i), ht(r, "scroll", function() {
                    r.clientHeight && e(r.scrollTop, "vertical")
                }), ht(i, "scroll", function() {
                    i.clientWidth && e(i.scrollLeft, "horizontal")
                }), this.checkedZeroWidth = !1, a && s < 8 && (this.horiz.style.minHeight = this.vert.style.minWidth = "18px")
            };
            Fr.prototype.update = function(t) {
                var e = t.scrollWidth > t.clientWidth + 1,
                    n = t.scrollHeight > t.clientHeight + 1,
                    r = t.nativeBarWidth;
                if (n) {
                    this.vert.style.display = "block", this.vert.style.bottom = e ? r + "px" : "0";
                    var i = t.viewHeight - (e ? r : 0);
                    this.vert.firstChild.style.height = Math.max(0, t.scrollHeight - t.clientHeight + i) + "px"
                } else this.vert.style.display = "", this.vert.firstChild.style.height = "0";
                if (e) {
                    this.horiz.style.display = "block", this.horiz.style.right = n ? r + "px" : "0", this.horiz.style.left = t.barLeft + "px";
                    var o = t.viewWidth - t.barLeft - (n ? r : 0);
                    this.horiz.firstChild.style.width = Math.max(0, t.scrollWidth - t.clientWidth + o) + "px"
                } else this.horiz.style.display = "", this.horiz.firstChild.style.width = "0";
                return !this.checkedZeroWidth && t.clientHeight > 0 && (0 == r && this.zeroWidthHack(), this.checkedZeroWidth = !0), {
                    right: n ? r : 0,
                    bottom: e ? r : 0
                }
            }, Fr.prototype.setScrollLeft = function(t) {
                this.horiz.scrollLeft != t && (this.horiz.scrollLeft = t), this.disableHoriz && this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz")
            }, Fr.prototype.setScrollTop = function(t) {
                this.vert.scrollTop != t && (this.vert.scrollTop = t), this.disableVert && this.enableZeroWidthBar(this.vert, this.disableVert, "vert")
            }, Fr.prototype.zeroWidthHack = function() {
                var t = b && !f ? "12px" : "18px";
                this.horiz.style.height = this.vert.style.width = t, this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none", this.disableHoriz = new R, this.disableVert = new R
            }, Fr.prototype.enableZeroWidthBar = function(t, e, n) {
                t.style.pointerEvents = "auto", e.set(1e3, function r() {
                    var i = t.getBoundingClientRect();
                    ("vert" == n ? document.elementFromPoint(i.right - 1, (i.top + i.bottom) / 2) : document.elementFromPoint((i.right + i.left) / 2, i.bottom - 1)) != t ? t.style.pointerEvents = "none" : e.set(1e3, r)
                })
            }, Fr.prototype.clear = function() {
                var t = this.horiz.parentNode;
                t.removeChild(this.horiz), t.removeChild(this.vert)
            };
            var Vr = function() {};

            function Rr(t, e) {
                e || (e = Ir(t));
                var n = t.display.barWidth,
                    r = t.display.barHeight;
                zr(t, e);
                for (var i = 0; i < 4 && n != t.display.barWidth || r != t.display.barHeight; i++) n != t.display.barWidth && t.options.lineWrapping && Sr(t), zr(t, Ir(t)), n = t.display.barWidth, r = t.display.barHeight
            }

            function zr(t, e) {
                var n = t.display,
                    r = n.scrollbars.update(e);
                n.sizer.style.paddingRight = (n.barWidth = r.right) + "px", n.sizer.style.paddingBottom = (n.barHeight = r.bottom) + "px", n.heightForcer.style.borderBottom = r.bottom + "px solid transparent", r.right && r.bottom ? (n.scrollbarFiller.style.display = "block", n.scrollbarFiller.style.height = r.bottom + "px", n.scrollbarFiller.style.width = r.right + "px") : n.scrollbarFiller.style.display = "", r.bottom && t.options.coverGutterNextToScrollbar && t.options.fixedGutter ? (n.gutterFiller.style.display = "block", n.gutterFiller.style.height = r.bottom + "px", n.gutterFiller.style.width = e.gutterWidth + "px") : n.gutterFiller.style.display = ""
            }
            Vr.prototype.update = function() {
                return {
                    bottom: 0,
                    right: 0
                }
            }, Vr.prototype.setScrollLeft = function() {}, Vr.prototype.setScrollTop = function() {}, Vr.prototype.clear = function() {};
            var Hr = {
                native: Fr,
                null: Vr
            };

            function $r(t) {
                t.display.scrollbars && (t.display.scrollbars.clear(), t.display.scrollbars.addClass && j(t.display.wrapper, t.display.scrollbars.addClass)), t.display.scrollbars = new Hr[t.options.scrollbarStyle](function(e) {
                    t.display.wrapper.insertBefore(e, t.display.scrollbarFiller), ht(e, "mousedown", function() {
                        t.state.focused && setTimeout(function() {
                            return t.display.input.focus()
                        }, 0)
                    }), e.setAttribute("cm-not-content", "true")
                }, function(e, n) {
                    "horizontal" == n ? Nr(t, e) : Lr(t, e)
                }, t), t.display.scrollbars.addClass && L(t.display.wrapper, t.display.scrollbars.addClass)
            }
            var Ur = 0;

            function Br(t) {
                var e;
                t.curOp = {
                    cm: t,
                    viewChanged: !1,
                    startHeight: t.doc.height,
                    forceUpdate: !1,
                    updateInput: 0,
                    typing: !1,
                    changeObjs: null,
                    cursorActivityHandlers: null,
                    cursorActivityCalled: 0,
                    selectionChanged: !1,
                    updateMaxLine: !1,
                    scrollLeft: null,
                    scrollTop: null,
                    scrollToPos: null,
                    focus: !1,
                    id: ++Ur
                }, e = t.curOp, an ? an.ops.push(e) : e.ownsGroup = an = {
                    ops: [e],
                    delayedCallbacks: []
                }
            }

            function Wr(t) {
                var e = t.curOp;
                e && function(t, e) {
                    var n = t.ownsGroup;
                    if (n) try {
                        ! function(t) {
                            var e = t.delayedCallbacks,
                                n = 0;
                            do {
                                for (; n < e.length; n++) e[n].call(null);
                                for (var r = 0; r < t.ops.length; r++) {
                                    var i = t.ops[r];
                                    if (i.cursorActivityHandlers)
                                        for (; i.cursorActivityCalled < i.cursorActivityHandlers.length;) i.cursorActivityHandlers[i.cursorActivityCalled++].call(null, i.cm)
                                }
                            } while (n < e.length)
                        }(n)
                    } finally {
                        an = null,
                            function(t) {
                                for (var e = 0; e < t.ops.length; e++) t.ops[e].cm.curOp = null;
                                ! function(t) {
                                    for (var e = t.ops, n = 0; n < e.length; n++) qr(e[n]);
                                    for (var r = 0; r < e.length; r++) Gr(e[r]);
                                    for (var i = 0; i < e.length; i++) Kr(e[i]);
                                    for (var o = 0; o < e.length; o++) Yr(e[o]);
                                    for (var a = 0; a < e.length; a++) Xr(e[a])
                                }(t)
                            }(n)
                    }
                }(e)
            }

            function qr(t) {
                var e = t.cm,
                    n = e.display;
                ! function(t) {
                    var e = t.display;
                    !e.scrollbarsClipped && e.scroller.offsetWidth && (e.nativeBarWidth = e.scroller.offsetWidth - e.scroller.clientWidth, e.heightForcer.style.height = jn(t) + "px", e.sizer.style.marginBottom = -e.nativeBarWidth + "px", e.sizer.style.borderRightWidth = jn(t) + "px", e.scrollbarsClipped = !0)
                }(e), t.updateMaxLine && We(e), t.mustUpdate = t.viewChanged || t.forceUpdate || null != t.scrollTop || t.scrollToPos && (t.scrollToPos.from.line < n.viewFrom || t.scrollToPos.to.line >= n.viewTo) || n.maxLineChanged && e.options.lineWrapping, t.update = t.mustUpdate && new ri(e, t.mustUpdate && {
                    top: t.scrollTop,
                    ensure: t.scrollToPos
                }, t.forceUpdate)
            }

            function Gr(t) {
                t.updatedDisplay = t.mustUpdate && ii(t.cm, t.update)
            }

            function Kr(t) {
                var e = t.cm,
                    n = e.display;
                t.updatedDisplay && Sr(e), t.barMeasure = Ir(e), n.maxLineChanged && !e.options.lineWrapping && (t.adjustWidthTo = Mn(e, n.maxLine, n.maxLine.text.length).left + 3, e.display.sizerWidth = t.adjustWidthTo, t.barMeasure.scrollWidth = Math.max(n.scroller.clientWidth, n.sizer.offsetLeft + t.adjustWidthTo + jn(e) + e.display.barWidth), t.maxScrollLeft = Math.max(0, n.sizer.offsetLeft + t.adjustWidthTo - Tn(e))), (t.updatedDisplay || t.selectionChanged) && (t.preparedSelection = n.input.prepareSelection())
            }

            function Yr(t) {
                var e = t.cm;
                null != t.adjustWidthTo && (e.display.sizer.style.minWidth = t.adjustWidthTo + "px", t.maxScrollLeft < e.doc.scrollLeft && Nr(e, Math.min(e.display.scroller.scrollLeft, t.maxScrollLeft), !0), e.display.maxLineChanged = !1);
                var n = t.focus && t.focus == A();
                t.preparedSelection && e.display.input.showSelection(t.preparedSelection, n), (t.updatedDisplay || t.startHeight != e.doc.height) && Rr(e, t.barMeasure), t.updatedDisplay && li(e, t.barMeasure), t.selectionChanged && yr(e), e.state.focused && t.updateInput && e.display.input.reset(t.typing), n && wr(t.cm)
            }

            function Xr(t) {
                var e = t.cm,
                    n = e.display,
                    r = e.doc;
                t.updatedDisplay && oi(e, t.update), null == n.wheelStartX || null == t.scrollTop && null == t.scrollLeft && !t.scrollToPos || (n.wheelStartX = n.wheelStartY = null), null != t.scrollTop && _r(e, t.scrollTop, t.forceScroll), null != t.scrollLeft && Nr(e, t.scrollLeft, !0, !0), t.scrollToPos && function(t, e) {
                    if (!vt(t, "scrollCursorIntoView")) {
                        var n = t.display,
                            r = n.sizer.getBoundingClientRect(),
                            i = null;
                        if (e.top + r.top < 0 ? i = !0 : e.bottom + r.top > (window.innerHeight || document.documentElement.clientHeight) && (i = !1), null != i && !p) {
                            var o = E("div", "​", null, "position: absolute;\n                         top: " + (e.top - n.viewOffset - Cn(t.display)) + "px;\n                         height: " + (e.bottom - e.top + jn(t) + n.barHeight) + "px;\n                         left: " + e.left + "px; width: " + Math.max(2, e.right - e.left) + "px;");
                            t.display.lineSpace.appendChild(o), o.scrollIntoView(i), t.display.lineSpace.removeChild(o)
                        }
                    }
                }(e, function(t, e, n, r) {
                    var i;
                    null == r && (r = 0), t.options.lineWrapping || e != n || (n = "before" == (e = e.ch ? te(e.line, "before" == e.sticky ? e.ch - 1 : e.ch, "after") : e).sticky ? te(e.line, e.ch + 1, "before") : e);
                    for (var o = 0; o < 5; o++) {
                        var a = !1,
                            s = Gn(t, e),
                            l = n && n != e ? Gn(t, n) : s,
                            c = Tr(t, i = {
                                left: Math.min(s.left, l.left),
                                top: Math.min(s.top, l.top) - r,
                                right: Math.max(s.left, l.left),
                                bottom: Math.max(s.bottom, l.bottom) + r
                            }),
                            u = t.doc.scrollTop,
                            d = t.doc.scrollLeft;
                        if (null != c.scrollTop && (Lr(t, c.scrollTop), Math.abs(t.doc.scrollTop - u) > 1 && (a = !0)), null != c.scrollLeft && (Nr(t, c.scrollLeft), Math.abs(t.doc.scrollLeft - d) > 1 && (a = !0)), !a) break
                    }
                    return i
                }(e, se(r, t.scrollToPos.from), se(r, t.scrollToPos.to), t.scrollToPos.margin));
                var i = t.maybeHiddenMarkers,
                    o = t.maybeUnhiddenMarkers;
                if (i)
                    for (var a = 0; a < i.length; ++a) i[a].lines.length || gt(i[a], "hide");
                if (o)
                    for (var s = 0; s < o.length; ++s) o[s].lines.length && gt(o[s], "unhide");
                n.wrapper.offsetHeight && (r.scrollTop = e.display.scroller.scrollTop), t.changeObjs && gt(e, "changes", e, t.changeObjs), t.update && t.update.finish()
            }

            function Jr(t, e) {
                if (t.curOp) return e();
                Br(t);
                try {
                    return e()
                } finally {
                    Wr(t)
                }
            }

            function Zr(t, e) {
                return function() {
                    if (t.curOp) return e.apply(t, arguments);
                    Br(t);
                    try {
                        return e.apply(t, arguments)
                    } finally {
                        Wr(t)
                    }
                }
            }

            function Qr(t) {
                return function() {
                    if (this.curOp) return t.apply(this, arguments);
                    Br(this);
                    try {
                        return t.apply(this, arguments)
                    } finally {
                        Wr(this)
                    }
                }
            }

            function ti(t) {
                return function() {
                    var e = this.cm;
                    if (!e || e.curOp) return t.apply(this, arguments);
                    Br(e);
                    try {
                        return t.apply(this, arguments)
                    } finally {
                        Wr(e)
                    }
                }
            }

            function ei(t, e) {
                t.doc.highlightFrontier < t.display.viewTo && t.state.highlight.set(e, I(ni, t))
            }

            function ni(t) {
                var e = t.doc;
                if (!(e.highlightFrontier >= t.display.viewTo)) {
                    var n = +new Date + t.options.workTime,
                        r = fe(t, e.highlightFrontier),
                        i = [];
                    e.iter(r.line, Math.min(e.first + e.size, t.display.viewTo + 500), function(o) {
                        if (r.line >= t.display.viewFrom) {
                            var a = o.styles,
                                s = o.text.length > t.options.maxHighlightLength ? $t(e.mode, r.state) : null,
                                l = de(t, o, r, !0);
                            s && (r.state = s), o.styles = l.styles;
                            var c = o.styleClasses,
                                u = l.classes;
                            u ? o.styleClasses = u : c && (o.styleClasses = null);
                            for (var d = !a || a.length != o.styles.length || c != u && (!c || !u || c.bgClass != u.bgClass || c.textClass != u.textClass), h = 0; !d && h < a.length; ++h) d = a[h] != o.styles[h];
                            d && i.push(r.line), o.stateAfter = r.save(), r.nextLine()
                        } else o.text.length <= t.options.maxHighlightLength && pe(t, o.text, r), o.stateAfter = r.line % 5 == 0 ? r.save() : null, r.nextLine();
                        if (+new Date > n) return ei(t, t.options.workDelay), !0
                    }), e.highlightFrontier = r.line, e.modeFrontier = Math.max(e.modeFrontier, r.line), i.length && Jr(t, function() {
                        for (var e = 0; e < i.length; e++) ur(t, i[e], "text")
                    })
                }
            }
            var ri = function(t, e, n) {
                var r = t.display;
                this.viewport = e, this.visible = jr(r, t.doc, e), this.editorIsHidden = !r.wrapper.offsetWidth, this.wrapperHeight = r.wrapper.clientHeight, this.wrapperWidth = r.wrapper.clientWidth, this.oldDisplayWidth = Tn(t), this.force = n, this.dims = rr(t), this.events = []
            };

            function ii(t, e) {
                var n = t.display,
                    r = t.doc;
                if (e.editorIsHidden) return dr(t), !1;
                if (!e.force && e.visible.from >= n.viewFrom && e.visible.to <= n.viewTo && (null == n.updateLineNumbers || n.updateLineNumbers >= n.viewTo) && n.renderedView == n.view && 0 == fr(t)) return !1;
                ui(t) && (dr(t), e.dims = rr(t));
                var i = r.first + r.size,
                    o = Math.max(e.visible.from - t.options.viewportMargin, r.first),
                    a = Math.min(i, e.visible.to + t.options.viewportMargin);
                n.viewFrom < o && o - n.viewFrom < 20 && (o = Math.max(r.first, n.viewFrom)), n.viewTo > a && n.viewTo - a < 20 && (a = Math.min(i, n.viewTo)), Oe && (o = Re(t.doc, o), a = ze(t.doc, a));
                var s = o != n.viewFrom || a != n.viewTo || n.lastWrapHeight != e.wrapperHeight || n.lastWrapWidth != e.wrapperWidth;
                ! function(t, e, n) {
                    var r = t.display;
                    0 == r.view.length || e >= r.viewTo || n <= r.viewFrom ? (r.view = on(t, e, n), r.viewFrom = e) : (r.viewFrom > e ? r.view = on(t, e, r.viewFrom).concat(r.view) : r.viewFrom < e && (r.view = r.view.slice(lr(t, e))), r.viewFrom = e, r.viewTo < n ? r.view = r.view.concat(on(t, r.viewTo, n)) : r.viewTo > n && (r.view = r.view.slice(0, lr(t, n)))), r.viewTo = n
                }(t, o, a), n.viewOffset = Ue(qt(t.doc, n.viewFrom)), t.display.mover.style.top = n.viewOffset + "px";
                var c = fr(t);
                if (!s && 0 == c && !e.force && n.renderedView == n.view && (null == n.updateLineNumbers || n.updateLineNumbers >= n.viewTo)) return !1;
                var u = function(t) {
                    if (t.hasFocus()) return null;
                    var e = A();
                    if (!e || !D(t.display.lineDiv, e)) return null;
                    var n = {
                        activeElt: e
                    };
                    if (window.getSelection) {
                        var r = window.getSelection();
                        r.anchorNode && r.extend && D(t.display.lineDiv, r.anchorNode) && (n.anchorNode = r.anchorNode, n.anchorOffset = r.anchorOffset, n.focusNode = r.focusNode, n.focusOffset = r.focusOffset)
                    }
                    return n
                }(t);
                return c > 4 && (n.lineDiv.style.display = "none"),
                    function(t, e, n) {
                        var r = t.display,
                            i = t.options.lineNumbers,
                            o = r.lineDiv,
                            a = o.firstChild;

                        function s(e) {
                            var n = e.nextSibling;
                            return l && b && t.display.currentWheelTarget == e ? e.style.display = "none" : e.parentNode.removeChild(e), n
                        }
                        for (var c = r.view, u = r.viewFrom, d = 0; d < c.length; d++) {
                            var h = c[d];
                            if (h.hidden);
                            else if (h.node && h.node.parentNode == o) {
                                for (; a != h.node;) a = s(a);
                                var f = i && null != e && e <= u && h.lineNumber;
                                h.changes && (z(h.changes, "gutter") > -1 && (f = !1), un(t, h, u, n)), f && (T(h.lineNumber), h.lineNumber.appendChild(document.createTextNode(Qt(t.options, u)))), a = h.node.nextSibling
                            } else {
                                var p = mn(t, h, u, n);
                                o.insertBefore(p, a)
                            }
                            u += h.size
                        }
                        for (; a;) a = s(a)
                    }(t, n.updateLineNumbers, e.dims), c > 4 && (n.lineDiv.style.display = ""), n.renderedView = n.view,
                    function(t) {
                        if (t && t.activeElt && t.activeElt != A() && (t.activeElt.focus(), !/^(INPUT|TEXTAREA)$/.test(t.activeElt.nodeName) && t.anchorNode && D(document.body, t.anchorNode) && D(document.body, t.focusNode))) {
                            var e = window.getSelection(),
                                n = document.createRange();
                            n.setEnd(t.anchorNode, t.anchorOffset), n.collapse(!1), e.removeAllRanges(), e.addRange(n), e.extend(t.focusNode, t.focusOffset)
                        }
                    }(u), T(n.cursorDiv), T(n.selectionDiv), n.gutters.style.height = n.sizer.style.minHeight = 0, s && (n.lastWrapHeight = e.wrapperHeight, n.lastWrapWidth = e.wrapperWidth, ei(t, 400)), n.updateLineNumbers = null, !0
            }

            function oi(t, e) {
                for (var n = e.viewport, r = !0;; r = !1) {
                    if (r && t.options.lineWrapping && e.oldDisplayWidth != Tn(t)) r && (e.visible = jr(t.display, t.doc, n));
                    else if (n && null != n.top && (n = {
                            top: Math.min(t.doc.height + Sn(t.display) - Pn(t), n.top)
                        }), e.visible = jr(t.display, t.doc, n), e.visible.from >= t.display.viewFrom && e.visible.to <= t.display.viewTo) break;
                    if (!ii(t, e)) break;
                    Sr(t);
                    var i = Ir(t);
                    pr(t), Rr(t, i), li(t, i), e.force = !1
                }
                e.signal(t, "update", t), t.display.viewFrom == t.display.reportedViewFrom && t.display.viewTo == t.display.reportedViewTo || (e.signal(t, "viewportChange", t, t.display.viewFrom, t.display.viewTo), t.display.reportedViewFrom = t.display.viewFrom, t.display.reportedViewTo = t.display.viewTo)
            }

            function ai(t, e) {
                var n = new ri(t, e);
                if (ii(t, n)) {
                    Sr(t), oi(t, n);
                    var r = Ir(t);
                    pr(t), Rr(t, r), li(t, r), n.finish()
                }
            }

            function si(t) {
                var e = t.gutters.offsetWidth;
                t.sizer.style.marginLeft = e + "px"
            }

            function li(t, e) {
                t.display.sizer.style.minHeight = e.docHeight + "px", t.display.heightForcer.style.top = e.docHeight + "px", t.display.gutters.style.height = e.docHeight + t.display.barHeight + jn(t) + "px"
            }

            function ci(t) {
                var e = t.display,
                    n = e.view;
                if (e.alignWidgets || e.gutters.firstChild && t.options.fixedGutter) {
                    for (var r = ir(e) - e.scroller.scrollLeft + t.doc.scrollLeft, i = e.gutters.offsetWidth, o = r + "px", a = 0; a < n.length; a++)
                        if (!n[a].hidden) {
                            t.options.fixedGutter && (n[a].gutter && (n[a].gutter.style.left = o), n[a].gutterBackground && (n[a].gutterBackground.style.left = o));
                            var s = n[a].alignable;
                            if (s)
                                for (var l = 0; l < s.length; l++) s[l].style.left = o
                        } t.options.fixedGutter && (e.gutters.style.left = r + i + "px")
                }
            }

            function ui(t) {
                if (!t.options.lineNumbers) return !1;
                var e = t.doc,
                    n = Qt(t.options, e.first + e.size - 1),
                    r = t.display;
                if (n.length != r.lineNumChars) {
                    var i = r.measure.appendChild(E("div", [E("div", n)], "CodeMirror-linenumber CodeMirror-gutter-elt")),
                        o = i.firstChild.offsetWidth,
                        a = i.offsetWidth - o;
                    return r.lineGutter.style.width = "", r.lineNumInnerWidth = Math.max(o, r.lineGutter.offsetWidth - a) + 1, r.lineNumWidth = r.lineNumInnerWidth + a, r.lineNumChars = r.lineNumInnerWidth ? n.length : -1, r.lineGutter.style.width = r.lineNumWidth + "px", si(t.display), !0
                }
                return !1
            }

            function di(t, e) {
                for (var n = [], r = !1, i = 0; i < t.length; i++) {
                    var o = t[i],
                        a = null;
                    if ("string" != typeof o && (a = o.style, o = o.className), "CodeMirror-linenumbers" == o) {
                        if (!e) continue;
                        r = !0
                    }
                    n.push({
                        className: o,
                        style: a
                    })
                }
                return e && !r && n.push({
                    className: "CodeMirror-linenumbers",
                    style: null
                }), n
            }

            function hi(t) {
                var e = t.gutters,
                    n = t.gutterSpecs;
                T(e), t.lineGutter = null;
                for (var r = 0; r < n.length; ++r) {
                    var i = n[r],
                        o = i.className,
                        a = i.style,
                        s = e.appendChild(E("div", null, "CodeMirror-gutter " + o));
                    a && (s.style.cssText = a), "CodeMirror-linenumbers" == o && (t.lineGutter = s, s.style.width = (t.lineNumWidth || 1) + "px")
                }
                e.style.display = n.length ? "" : "none", si(t)
            }

            function fi(t) {
                hi(t.display), cr(t), ci(t)
            }

            function pi(t, e, r, i) {
                var o = this;
                this.input = r, o.scrollbarFiller = E("div", null, "CodeMirror-scrollbar-filler"), o.scrollbarFiller.setAttribute("cm-not-content", "true"), o.gutterFiller = E("div", null, "CodeMirror-gutter-filler"), o.gutterFiller.setAttribute("cm-not-content", "true"), o.lineDiv = M("div", null, "CodeMirror-code"), o.selectionDiv = E("div", null, null, "position: relative; z-index: 1"), o.cursorDiv = E("div", null, "CodeMirror-cursors"), o.measure = E("div", null, "CodeMirror-measure"), o.lineMeasure = E("div", null, "CodeMirror-measure"), o.lineSpace = M("div", [o.measure, o.lineMeasure, o.selectionDiv, o.cursorDiv, o.lineDiv], null, "position: relative; outline: none");
                var c = M("div", [o.lineSpace], "CodeMirror-lines");
                o.mover = E("div", [c], null, "position: relative"), o.sizer = E("div", [o.mover], "CodeMirror-sizer"), o.sizerWidth = null, o.heightForcer = E("div", null, null, "position: absolute; height: " + H + "px; width: 1px;"), o.gutters = E("div", null, "CodeMirror-gutters"), o.lineGutter = null, o.scroller = E("div", [o.sizer, o.heightForcer, o.gutters], "CodeMirror-scroll"), o.scroller.setAttribute("tabIndex", "-1"), o.wrapper = E("div", [o.scrollbarFiller, o.gutterFiller, o.scroller], "CodeMirror"), a && s < 8 && (o.gutters.style.zIndex = -1, o.scroller.style.paddingRight = 0), l || n && m || (o.scroller.draggable = !0), t && (t.appendChild ? t.appendChild(o.wrapper) : t(o.wrapper)), o.viewFrom = o.viewTo = e.first, o.reportedViewFrom = o.reportedViewTo = e.first, o.view = [], o.renderedView = null, o.externalMeasured = null, o.viewOffset = 0, o.lastWrapHeight = o.lastWrapWidth = 0, o.updateLineNumbers = null, o.nativeBarWidth = o.barHeight = o.barWidth = 0, o.scrollbarsClipped = !1, o.lineNumWidth = o.lineNumInnerWidth = o.lineNumChars = null, o.alignWidgets = !1, o.cachedCharWidth = o.cachedTextHeight = o.cachedPaddingH = null, o.maxLine = null, o.maxLineLength = 0, o.maxLineChanged = !1, o.wheelDX = o.wheelDY = o.wheelStartX = o.wheelStartY = null, o.shift = !1, o.selForContextMenu = null, o.activeTouch = null, o.gutterSpecs = di(i.gutters, i.lineNumbers), hi(o), r.init(o)
            }
            ri.prototype.signal = function(t, e) {
                bt(t, e) && this.events.push(arguments)
            }, ri.prototype.finish = function() {
                for (var t = 0; t < this.events.length; t++) gt.apply(null, this.events[t])
            };
            var gi = 0,
                vi = null;

            function mi(t) {
                var e = t.wheelDeltaX,
                    n = t.wheelDeltaY;
                return null == e && t.detail && t.axis == t.HORIZONTAL_AXIS && (e = t.detail), null == n && t.detail && t.axis == t.VERTICAL_AXIS ? n = t.detail : null == n && (n = t.wheelDelta), {
                    x: e,
                    y: n
                }
            }

            function bi(t) {
                var e = mi(t);
                return e.x *= vi, e.y *= vi, e
            }

            function yi(t, e) {
                var r = mi(e),
                    i = r.x,
                    o = r.y,
                    a = t.display,
                    s = a.scroller,
                    c = s.scrollWidth > s.clientWidth,
                    u = s.scrollHeight > s.clientHeight;
                if (i && c || o && u) {
                    if (o && b && l) t: for (var h = e.target, f = a.view; h != s; h = h.parentNode)
                        for (var p = 0; p < f.length; p++)
                            if (f[p].node == h) {
                                t.display.currentWheelTarget = h;
                                break t
                            } if (i && !n && !d && null != vi) return o && u && Lr(t, Math.max(0, s.scrollTop + o * vi)), Nr(t, Math.max(0, s.scrollLeft + i * vi)), (!o || o && u) && wt(e), void(a.wheelStartX = null);
                    if (o && null != vi) {
                        var g = o * vi,
                            v = t.doc.scrollTop,
                            m = v + a.wrapper.clientHeight;
                        g < 0 ? v = Math.max(0, v + g - 50) : m = Math.min(t.doc.height, m + g + 50), ai(t, {
                            top: v,
                            bottom: m
                        })
                    }
                    gi < 20 && (null == a.wheelStartX ? (a.wheelStartX = s.scrollLeft, a.wheelStartY = s.scrollTop, a.wheelDX = i, a.wheelDY = o, setTimeout(function() {
                        if (null != a.wheelStartX) {
                            var t = s.scrollLeft - a.wheelStartX,
                                e = s.scrollTop - a.wheelStartY,
                                n = e && a.wheelDY && e / a.wheelDY || t && a.wheelDX && t / a.wheelDX;
                            a.wheelStartX = a.wheelStartY = null, n && (vi = (vi * gi + n) / (gi + 1), ++gi)
                        }
                    }, 200)) : (a.wheelDX += i, a.wheelDY += o))
                }
            }
            a ? vi = -.53 : n ? vi = 15 : u ? vi = -.7 : h && (vi = -1 / 3);
            var wi = function(t, e) {
                this.ranges = t, this.primIndex = e
            };
            wi.prototype.primary = function() {
                return this.ranges[this.primIndex]
            }, wi.prototype.equals = function(t) {
                if (t == this) return !0;
                if (t.primIndex != this.primIndex || t.ranges.length != this.ranges.length) return !1;
                for (var e = 0; e < this.ranges.length; e++) {
                    var n = this.ranges[e],
                        r = t.ranges[e];
                    if (!ne(n.anchor, r.anchor) || !ne(n.head, r.head)) return !1
                }
                return !0
            }, wi.prototype.deepCopy = function() {
                for (var t = [], e = 0; e < this.ranges.length; e++) t[e] = new xi(re(this.ranges[e].anchor), re(this.ranges[e].head));
                return new wi(t, this.primIndex)
            }, wi.prototype.somethingSelected = function() {
                for (var t = 0; t < this.ranges.length; t++)
                    if (!this.ranges[t].empty()) return !0;
                return !1
            }, wi.prototype.contains = function(t, e) {
                e || (e = t);
                for (var n = 0; n < this.ranges.length; n++) {
                    var r = this.ranges[n];
                    if (ee(e, r.from()) >= 0 && ee(t, r.to()) <= 0) return n
                }
                return -1
            };
            var xi = function(t, e) {
                this.anchor = t, this.head = e
            };

            function Oi(t, e, n) {
                var r = t && t.options.selectionsMayTouch,
                    i = e[n];
                e.sort(function(t, e) {
                    return ee(t.from(), e.from())
                }), n = z(e, i);
                for (var o = 1; o < e.length; o++) {
                    var a = e[o],
                        s = e[o - 1],
                        l = ee(s.to(), a.from());
                    if (r && !a.empty() ? l > 0 : l >= 0) {
                        var c = oe(s.from(), a.from()),
                            u = ie(s.to(), a.to()),
                            d = s.empty() ? a.from() == a.head : s.from() == s.head;
                        o <= n && --n, e.splice(--o, 2, new xi(d ? u : c, d ? c : u))
                    }
                }
                return new wi(e, n)
            }

            function Ci(t, e) {
                return new wi([new xi(t, e || t)], 0)
            }

            function Si(t) {
                return t.text ? te(t.from.line + t.text.length - 1, Y(t.text).length + (1 == t.text.length ? t.from.ch : 0)) : t.to
            }

            function ki(t, e) {
                if (ee(t, e.from) < 0) return t;
                if (ee(t, e.to) <= 0) return Si(e);
                var n = t.line + e.text.length - (e.to.line - e.from.line) - 1,
                    r = t.ch;
                return t.line == e.to.line && (r += Si(e).ch - e.to.ch), te(n, r)
            }

            function ji(t, e) {
                for (var n = [], r = 0; r < t.sel.ranges.length; r++) {
                    var i = t.sel.ranges[r];
                    n.push(new xi(ki(i.anchor, e), ki(i.head, e)))
                }
                return Oi(t.cm, n, t.sel.primIndex)
            }

            function Ti(t, e, n) {
                return t.line == e.line ? te(n.line, t.ch - e.ch + n.ch) : te(n.line + (t.line - e.line), t.ch)
            }

            function Pi(t) {
                t.doc.mode = Rt(t.options, t.doc.modeOption), Ei(t)
            }

            function Ei(t) {
                t.doc.iter(function(t) {
                    t.stateAfter && (t.stateAfter = null), t.styles && (t.styles = null)
                }), t.doc.modeFrontier = t.doc.highlightFrontier = t.doc.first, ei(t, 100), t.state.modeGen++, t.curOp && cr(t)
            }

            function Mi(t, e) {
                return 0 == e.from.ch && 0 == e.to.ch && "" == Y(e.text) && (!t.cm || t.cm.options.wholeLineUpdateBefore)
            }

            function Di(t, e, n, r) {
                function i(t) {
                    return n ? n[t] : null
                }

                function o(t, n, i) {
                    ! function(t, e, n, r) {
                        t.text = e, t.stateAfter && (t.stateAfter = null), t.styles && (t.styles = null), null != t.order && (t.order = null), Pe(t), Ee(t, n);
                        var i = r ? r(t) : 1;
                        i != t.height && Yt(t, i)
                    }(t, n, i, r), ln(t, "change", t, e)
                }

                function a(t, e) {
                    for (var n = [], o = t; o < e; ++o) n.push(new qe(c[o], i(o), r));
                    return n
                }
                var s = e.from,
                    l = e.to,
                    c = e.text,
                    u = qt(t, s.line),
                    d = qt(t, l.line),
                    h = Y(c),
                    f = i(c.length - 1),
                    p = l.line - s.line;
                if (e.full) t.insert(0, a(0, c.length)), t.remove(c.length, t.size - c.length);
                else if (Mi(t, e)) {
                    var g = a(0, c.length - 1);
                    o(d, d.text, f), p && t.remove(s.line, p), g.length && t.insert(s.line, g)
                } else if (u == d)
                    if (1 == c.length) o(u, u.text.slice(0, s.ch) + h + u.text.slice(l.ch), f);
                    else {
                        var v = a(1, c.length - 1);
                        v.push(new qe(h + u.text.slice(l.ch), f, r)), o(u, u.text.slice(0, s.ch) + c[0], i(0)), t.insert(s.line + 1, v)
                    }
                else if (1 == c.length) o(u, u.text.slice(0, s.ch) + c[0] + d.text.slice(l.ch), i(0)), t.remove(s.line + 1, p);
                else {
                    o(u, u.text.slice(0, s.ch) + c[0], i(0)), o(d, h + d.text.slice(l.ch), f);
                    var m = a(1, c.length - 1);
                    p > 1 && t.remove(s.line + 1, p - 1), t.insert(s.line + 1, m)
                }
                ln(t, "change", t, e)
            }

            function Ai(t, e, n) {
                ! function t(r, i, o) {
                    if (r.linked)
                        for (var a = 0; a < r.linked.length; ++a) {
                            var s = r.linked[a];
                            if (s.doc != i) {
                                var l = o && s.sharedHist;
                                n && !l || (e(s.doc, l), t(s.doc, r, l))
                            }
                        }
                }(t, null, !0)
            }

            function Li(t, e) {
                if (e.cm) throw new Error("This document is already in use.");
                t.doc = e, e.cm = t, ar(t), Pi(t), _i(t), t.options.lineWrapping || We(t), t.options.mode = e.modeOption, cr(t)
            }

            function _i(t) {
                ("rtl" == t.doc.direction ? L : j)(t.display.lineDiv, "CodeMirror-rtl")
            }

            function Ni(t) {
                this.done = [], this.undone = [], this.undoDepth = 1 / 0, this.lastModTime = this.lastSelTime = 0, this.lastOp = this.lastSelOp = null, this.lastOrigin = this.lastSelOrigin = null, this.generation = this.maxGeneration = t || 1
            }

            function Ii(t, e) {
                var n = {
                    from: re(e.from),
                    to: Si(e),
                    text: Gt(t, e.from, e.to)
                };
                return zi(t, n, e.from.line, e.to.line + 1), Ai(t, function(t) {
                    return zi(t, n, e.from.line, e.to.line + 1)
                }, !0), n
            }

            function Fi(t) {
                for (; t.length && Y(t).ranges;) t.pop()
            }

            function Vi(t, e, n, r) {
                var i = t.history;
                i.undone.length = 0;
                var o, a, s = +new Date;
                if ((i.lastOp == r || i.lastOrigin == e.origin && e.origin && ("+" == e.origin.charAt(0) && i.lastModTime > s - (t.cm ? t.cm.options.historyEventDelay : 500) || "*" == e.origin.charAt(0))) && (o = function(t, e) {
                        return i.lastOp == r ? (Fi(t.done), Y(t.done)) : t.done.length && !Y(t.done).ranges ? Y(t.done) : t.done.length > 1 && !t.done[t.done.length - 2].ranges ? (t.done.pop(), Y(t.done)) : void 0
                    }(i))) a = Y(o.changes), 0 == ee(e.from, e.to) && 0 == ee(e.from, a.to) ? a.to = Si(e) : o.changes.push(Ii(t, e));
                else {
                    var l = Y(i.done);
                    for (l && l.ranges || Ri(t.sel, i.done), o = {
                            changes: [Ii(t, e)],
                            generation: i.generation
                        }, i.done.push(o); i.done.length > i.undoDepth;) i.done.shift(), i.done[0].ranges || i.done.shift()
                }
                i.done.push(n), i.generation = ++i.maxGeneration, i.lastModTime = i.lastSelTime = s, i.lastOp = i.lastSelOp = r, i.lastOrigin = i.lastSelOrigin = e.origin, a || gt(t, "historyAdded")
            }

            function Ri(t, e) {
                var n = Y(e);
                n && n.ranges && n.equals(t) || e.push(t)
            }

            function zi(t, e, n, r) {
                var i = e["spans_" + t.id],
                    o = 0;
                t.iter(Math.max(t.first, n), Math.min(t.first + t.size, r), function(n) {
                    n.markedSpans && ((i || (i = e["spans_" + t.id] = {}))[o] = n.markedSpans), ++o
                })
            }

            function Hi(t) {
                if (!t) return null;
                for (var e, n = 0; n < t.length; ++n) t[n].marker.explicitlyCleared ? e || (e = t.slice(0, n)) : e && e.push(t[n]);
                return e ? e.length ? e : null : t
            }

            function $i(t, e) {
                var n = function(t, e) {
                        var n = e["spans_" + t.id];
                        if (!n) return null;
                        for (var r = [], i = 0; i < e.text.length; ++i) r.push(Hi(n[i]));
                        return r
                    }(t, e),
                    r = je(t, e);
                if (!n) return r;
                if (!r) return n;
                for (var i = 0; i < n.length; ++i) {
                    var o = n[i],
                        a = r[i];
                    if (o && a) t: for (var s = 0; s < a.length; ++s) {
                        for (var l = a[s], c = 0; c < o.length; ++c)
                            if (o[c].marker == l.marker) continue t;
                        o.push(l)
                    } else a && (n[i] = a)
                }
                return n
            }

            function Ui(t, e, n) {
                for (var r = [], i = 0; i < t.length; ++i) {
                    var o = t[i];
                    if (o.ranges) r.push(n ? wi.prototype.deepCopy.call(o) : o);
                    else {
                        var a = o.changes,
                            s = [];
                        r.push({
                            changes: s
                        });
                        for (var l = 0; l < a.length; ++l) {
                            var c = a[l],
                                u = void 0;
                            if (s.push({
                                    from: c.from,
                                    to: c.to,
                                    text: c.text
                                }), e)
                                for (var d in c)(u = d.match(/^spans_(\d+)$/)) && z(e, Number(u[1])) > -1 && (Y(s)[d] = c[d], delete c[d])
                        }
                    }
                }
                return r
            }

            function Bi(t, e, n, r) {
                if (r) {
                    var i = t.anchor;
                    if (n) {
                        var o = ee(e, i) < 0;
                        o != ee(n, i) < 0 ? (i = e, e = n) : o != ee(e, n) < 0 && (e = n)
                    }
                    return new xi(i, e)
                }
                return new xi(n || e, e)
            }

            function Wi(t, e, n, r, i) {
                null == i && (i = t.cm && (t.cm.display.shift || t.extend)), Xi(t, new wi([Bi(t.sel.primary(), e, n, i)], 0), r)
            }

            function qi(t, e, n) {
                for (var r = [], i = t.cm && (t.cm.display.shift || t.extend), o = 0; o < t.sel.ranges.length; o++) r[o] = Bi(t.sel.ranges[o], e[o], null, i);
                Xi(t, Oi(t.cm, r, t.sel.primIndex), n)
            }

            function Gi(t, e, n, r) {
                var i = t.sel.ranges.slice(0);
                i[e] = n, Xi(t, Oi(t.cm, i, t.sel.primIndex), r)
            }

            function Ki(t, e, n, r) {
                Xi(t, Ci(e, n), r)
            }

            function Yi(t, e, n) {
                var r = t.history.done,
                    i = Y(r);
                i && i.ranges ? (r[r.length - 1] = e, Ji(t, e, n)) : Xi(t, e, n)
            }

            function Xi(t, e, n) {
                Ji(t, e, n),
                    function(t, e, n, r) {
                        var i = t.history,
                            o = r && r.origin;
                        n == i.lastSelOp || o && i.lastSelOrigin == o && (i.lastModTime == i.lastSelTime && i.lastOrigin == o || function(t, e, n, r) {
                            var i = e.charAt(0);
                            return "*" == i || "+" == i && n.ranges.length == r.ranges.length && n.somethingSelected() == r.somethingSelected() && new Date - t.history.lastSelTime <= (t.cm ? t.cm.options.historyEventDelay : 500)
                        }(t, o, Y(i.done), e)) ? i.done[i.done.length - 1] = e : Ri(e, i.done), i.lastSelTime = +new Date, i.lastSelOrigin = o, i.lastSelOp = n, r && !1 !== r.clearRedo && Fi(i.undone)
                    }(t, t.sel, t.cm ? t.cm.curOp.id : NaN, n)
            }

            function Ji(t, e, n) {
                (bt(t, "beforeSelectionChange") || t.cm && bt(t.cm, "beforeSelectionChange")) && (e = function(t, e, n) {
                    var r = {
                        ranges: e.ranges,
                        update: function(e) {
                            this.ranges = [];
                            for (var n = 0; n < e.length; n++) this.ranges[n] = new xi(se(t, e[n].anchor), se(t, e[n].head))
                        },
                        origin: n && n.origin
                    };
                    return gt(t, "beforeSelectionChange", t, r), t.cm && gt(t.cm, "beforeSelectionChange", t.cm, r), r.ranges != e.ranges ? Oi(t.cm, r.ranges, r.ranges.length - 1) : e
                }(t, e, n));
                var r = n && n.bias || (ee(e.primary().head, t.sel.primary().head) < 0 ? -1 : 1);
                Zi(t, to(t, e, r, !0)), n && !1 === n.scroll || !t.cm || Er(t.cm)
            }

            function Zi(t, e) {
                e.equals(t.sel) || (t.sel = e, t.cm && (t.cm.curOp.updateInput = 1, t.cm.curOp.selectionChanged = !0, mt(t.cm)), ln(t, "cursorActivity", t))
            }

            function Qi(t) {
                Zi(t, to(t, t.sel, null, !1))
            }

            function to(t, e, n, r) {
                for (var i, o = 0; o < e.ranges.length; o++) {
                    var a = e.ranges[o],
                        s = e.ranges.length == t.sel.ranges.length && t.sel.ranges[o],
                        l = no(t, a.anchor, s && s.anchor, n, r),
                        c = no(t, a.head, s && s.head, n, r);
                    (i || l != a.anchor || c != a.head) && (i || (i = e.ranges.slice(0, o)), i[o] = new xi(l, c))
                }
                return i ? Oi(t.cm, i, e.primIndex) : e
            }

            function eo(t, e, n, r, i) {
                var o = qt(t, e.line);
                if (o.markedSpans)
                    for (var a = 0; a < o.markedSpans.length; ++a) {
                        var s = o.markedSpans[a],
                            l = s.marker,
                            c = "selectLeft" in l ? !l.selectLeft : l.inclusiveLeft,
                            u = "selectRight" in l ? !l.selectRight : l.inclusiveRight;
                        if ((null == s.from || (c ? s.from <= e.ch : s.from < e.ch)) && (null == s.to || (u ? s.to >= e.ch : s.to > e.ch))) {
                            if (i && (gt(l, "beforeCursorEnter"), l.explicitlyCleared)) {
                                if (o.markedSpans) {
                                    --a;
                                    continue
                                }
                                break
                            }
                            if (!l.atomic) continue;
                            if (n) {
                                var d = l.find(r < 0 ? 1 : -1),
                                    h = void 0;
                                if ((r < 0 ? u : c) && (d = ro(t, d, -r, d && d.line == e.line ? o : null)), d && d.line == e.line && (h = ee(d, n)) && (r < 0 ? h < 0 : h > 0)) return eo(t, d, e, r, i)
                            }
                            var f = l.find(r < 0 ? -1 : 1);
                            return (r < 0 ? c : u) && (f = ro(t, f, r, f.line == e.line ? o : null)), f ? eo(t, f, e, r, i) : null
                        }
                    }
                return e
            }

            function no(t, e, n, r, i) {
                var o = r || 1;
                return eo(t, e, n, o, i) || !i && eo(t, e, n, o, !0) || eo(t, e, n, -o, i) || !i && eo(t, e, n, -o, !0) || (t.cantEdit = !0, te(t.first, 0))
            }

            function ro(t, e, n, r) {
                return n < 0 && 0 == e.ch ? e.line > t.first ? se(t, te(e.line - 1)) : null : n > 0 && e.ch == (r || qt(t, e.line)).text.length ? e.line < t.first + t.size - 1 ? te(e.line + 1, 0) : null : new te(e.line, e.ch + n)
            }

            function io(t) {
                t.setSelection(te(t.firstLine(), 0), te(t.lastLine()), U)
            }

            function oo(t, e, n) {
                var r = {
                    canceled: !1,
                    from: e.from,
                    to: e.to,
                    text: e.text,
                    origin: e.origin,
                    cancel: function() {
                        return r.canceled = !0
                    }
                };
                return n && (r.update = function(e, n, i, o) {
                    e && (r.from = se(t, e)), n && (r.to = se(t, n)), i && (r.text = i), void 0 !== o && (r.origin = o)
                }), gt(t, "beforeChange", t, r), t.cm && gt(t.cm, "beforeChange", t.cm, r), r.canceled ? (t.cm && (t.cm.curOp.updateInput = 2), null) : {
                    from: r.from,
                    to: r.to,
                    text: r.text,
                    origin: r.origin
                }
            }

            function ao(t, e, n) {
                if (t.cm) {
                    if (!t.cm.curOp) return Zr(t.cm, ao)(t, e, n);
                    if (t.cm.state.suppressEdits) return
                }
                if (!(bt(t, "beforeChange") || t.cm && bt(t.cm, "beforeChange")) || (e = oo(t, e, !0))) {
                    var r = xe && !n && function(t, e, n) {
                        var r = null;
                        if (t.iter(e.line, n.line + 1, function(t) {
                                if (t.markedSpans)
                                    for (var e = 0; e < t.markedSpans.length; ++e) {
                                        var n = t.markedSpans[e].marker;
                                        !n.readOnly || r && -1 != z(r, n) || (r || (r = [])).push(n)
                                    }
                            }), !r) return null;
                        for (var i = [{
                                from: e,
                                to: n
                            }], o = 0; o < r.length; ++o)
                            for (var a = r[o], s = a.find(0), l = 0; l < i.length; ++l) {
                                var c = i[l];
                                if (!(ee(c.to, s.from) < 0 || ee(c.from, s.to) > 0)) {
                                    var u = [l, 1],
                                        d = ee(c.from, s.from),
                                        h = ee(c.to, s.to);
                                    (d < 0 || !a.inclusiveLeft && !d) && u.push({
                                        from: c.from,
                                        to: s.from
                                    }), (h > 0 || !a.inclusiveRight && !h) && u.push({
                                        from: s.to,
                                        to: c.to
                                    }), i.splice.apply(i, u), l += u.length - 3
                                }
                            }
                        return i
                    }(t, e.from, e.to);
                    if (r)
                        for (var i = r.length - 1; i >= 0; --i) so(t, {
                            from: r[i].from,
                            to: r[i].to,
                            text: i ? [""] : e.text,
                            origin: e.origin
                        });
                    else so(t, e)
                }
            }

            function so(t, e) {
                if (1 != e.text.length || "" != e.text[0] || 0 != ee(e.from, e.to)) {
                    var n = ji(t, e);
                    Vi(t, e, n, t.cm ? t.cm.curOp.id : NaN), uo(t, e, n, je(t, e));
                    var r = [];
                    Ai(t, function(t, n) {
                        n || -1 != z(r, t.history) || (go(t.history, e), r.push(t.history)), uo(t, e, null, je(t, e))
                    })
                }
            }

            function lo(t, e, n) {
                var r = t.cm && t.cm.state.suppressEdits;
                if (!r || n) {
                    for (var i, o = t.history, a = t.sel, s = "undo" == e ? o.done : o.undone, l = "undo" == e ? o.undone : o.done, c = 0; c < s.length && (i = s[c], n ? !i.ranges || i.equals(t.sel) : i.ranges); c++);
                    if (c != s.length) {
                        for (o.lastOrigin = o.lastSelOrigin = null;;) {
                            if (!(i = s.pop()).ranges) {
                                if (r) return void s.push(i);
                                break
                            }
                            if (Ri(i, l), n && !i.equals(t.sel)) return void Xi(t, i, {
                                clearRedo: !1
                            });
                            a = i
                        }
                        var u = [];
                        Ri(a, l), l.push({
                            changes: u,
                            generation: o.generation
                        }), o.generation = i.generation || ++o.maxGeneration;
                        for (var d = bt(t, "beforeChange") || t.cm && bt(t.cm, "beforeChange"), h = function(n) {
                                var r = i.changes[n];
                                if (r.origin = e, d && !oo(t, r, !1)) return s.length = 0, {};
                                u.push(Ii(t, r));
                                var o = n ? ji(t, r) : Y(s);
                                uo(t, r, o, $i(t, r)), !n && t.cm && t.cm.scrollIntoView({
                                    from: r.from,
                                    to: Si(r)
                                });
                                var a = [];
                                Ai(t, function(t, e) {
                                    e || -1 != z(a, t.history) || (go(t.history, r), a.push(t.history)), uo(t, r, null, $i(t, r))
                                })
                            }, f = i.changes.length - 1; f >= 0; --f) {
                            var p = h(f);
                            if (p) return p.v
                        }
                    }
                }
            }

            function co(t, e) {
                if (0 != e && (t.first += e, t.sel = new wi(X(t.sel.ranges, function(t) {
                        return new xi(te(t.anchor.line + e, t.anchor.ch), te(t.head.line + e, t.head.ch))
                    }), t.sel.primIndex), t.cm)) {
                    cr(t.cm, t.first, t.first - e, e);
                    for (var n = t.cm.display, r = n.viewFrom; r < n.viewTo; r++) ur(t.cm, r, "gutter")
                }
            }

            function uo(t, e, n, r) {
                if (t.cm && !t.cm.curOp) return Zr(t.cm, uo)(t, e, n, r);
                if (e.to.line < t.first) co(t, e.text.length - 1 - (e.to.line - e.from.line));
                else if (!(e.from.line > t.lastLine())) {
                    if (e.from.line < t.first) {
                        var i = e.text.length - 1 - (t.first - e.from.line);
                        co(t, i), e = {
                            from: te(t.first, 0),
                            to: te(e.to.line + i, e.to.ch),
                            text: [Y(e.text)],
                            origin: e.origin
                        }
                    }
                    var o = t.lastLine();
                    e.to.line > o && (e = {
                        from: e.from,
                        to: te(o, qt(t, o).text.length),
                        text: [e.text[0]],
                        origin: e.origin
                    }), e.removed = Gt(t, e.from, e.to), n || (n = ji(t, e)), t.cm ? function(t, e, n) {
                        var r = t.doc,
                            i = t.display,
                            o = e.from,
                            a = e.to,
                            s = !1,
                            l = o.line;
                        t.options.lineWrapping || (l = Xt(Ve(qt(r, o.line))), r.iter(l, a.line + 1, function(t) {
                                if (t == i.maxLine) return s = !0, !0
                            })), r.sel.contains(e.from, e.to) > -1 && mt(t), Di(r, e, n, or(t)), t.options.lineWrapping || (r.iter(l, o.line + e.text.length, function(t) {
                                var e = Be(t);
                                e > i.maxLineLength && (i.maxLine = t, i.maxLineLength = e, i.maxLineChanged = !0, s = !1)
                            }), s && (t.curOp.updateMaxLine = !0)),
                            function(t, e) {
                                if (t.modeFrontier = Math.min(t.modeFrontier, e), !(t.highlightFrontier < e - 10)) {
                                    for (var n = t.first, r = e - 1; r > n; r--) {
                                        var i = qt(t, r).stateAfter;
                                        if (i && (!(i instanceof ce) || r + i.lookAhead < e)) {
                                            n = r + 1;
                                            break
                                        }
                                    }
                                    t.highlightFrontier = Math.min(t.highlightFrontier, n)
                                }
                            }(r, o.line), ei(t, 400);
                        var c = e.text.length - (a.line - o.line) - 1;
                        e.full ? cr(t) : o.line != a.line || 1 != e.text.length || Mi(t.doc, e) ? cr(t, o.line, a.line + 1, c) : ur(t, o.line, "text");
                        var u = bt(t, "changes"),
                            d = bt(t, "change");
                        if (d || u) {
                            var h = {
                                from: o,
                                to: a,
                                text: e.text,
                                removed: e.removed,
                                origin: e.origin
                            };
                            d && ln(t, "change", t, h), u && (t.curOp.changeObjs || (t.curOp.changeObjs = [])).push(h)
                        }
                        t.display.selForContextMenu = null
                    }(t.cm, e, r) : Di(t, e, r), Ji(t, n, U), t.cantEdit && no(t, te(t.firstLine(), 0)) && (t.cantEdit = !1)
                }
            }

            function ho(t, e, n, r, i) {
                var o;
                r || (r = n), ee(r, n) < 0 && (n = (o = [r, n])[0], r = o[1]), "string" == typeof e && (e = t.splitLines(e)), ao(t, {
                    from: n,
                    to: r,
                    text: e,
                    origin: i
                })
            }

            function fo(t, e, n, r) {
                n < t.line ? t.line += r : e < t.line && (t.line = e, t.ch = 0)
            }

            function po(t, e, n, r) {
                for (var i = 0; i < t.length; ++i) {
                    var o = t[i],
                        a = !0;
                    if (o.ranges) {
                        o.copied || ((o = t[i] = o.deepCopy()).copied = !0);
                        for (var s = 0; s < o.ranges.length; s++) fo(o.ranges[s].anchor, e, n, r), fo(o.ranges[s].head, e, n, r)
                    } else {
                        for (var l = 0; l < o.changes.length; ++l) {
                            var c = o.changes[l];
                            if (n < c.from.line) c.from = te(c.from.line + r, c.from.ch), c.to = te(c.to.line + r, c.to.ch);
                            else if (e <= c.to.line) {
                                a = !1;
                                break
                            }
                        }
                        a || (t.splice(0, i + 1), i = 0)
                    }
                }
            }

            function go(t, e) {
                var n = e.from.line,
                    r = e.to.line,
                    i = e.text.length - (r - n) - 1;
                po(t.done, n, r, i), po(t.undone, n, r, i)
            }

            function vo(t, e, n, r) {
                var i = e,
                    o = e;
                return "number" == typeof e ? o = qt(t, ae(t, e)) : i = Xt(e), null == i ? null : (r(o, i) && t.cm && ur(t.cm, i, n), o)
            }

            function mo(t) {
                this.lines = t, this.parent = null;
                for (var e = 0, n = 0; n < t.length; ++n) t[n].parent = this, e += t[n].height;
                this.height = e
            }

            function bo(t) {
                this.children = t;
                for (var e = 0, n = 0, r = 0; r < t.length; ++r) {
                    var i = t[r];
                    e += i.chunkSize(), n += i.height, i.parent = this
                }
                this.size = e, this.height = n, this.parent = null
            }
            xi.prototype.from = function() {
                return oe(this.anchor, this.head)
            }, xi.prototype.to = function() {
                return ie(this.anchor, this.head)
            }, xi.prototype.empty = function() {
                return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch
            }, mo.prototype = {
                chunkSize: function() {
                    return this.lines.length
                },
                removeInner: function(t, e) {
                    for (var n = t, r = t + e; n < r; ++n) {
                        var i = this.lines[n];
                        this.height -= i.height, Ge(i), ln(i, "delete")
                    }
                    this.lines.splice(t, e)
                },
                collapse: function(t) {
                    t.push.apply(t, this.lines)
                },
                insertInner: function(t, e, n) {
                    this.height += n, this.lines = this.lines.slice(0, t).concat(e).concat(this.lines.slice(t));
                    for (var r = 0; r < e.length; ++r) e[r].parent = this
                },
                iterN: function(t, e, n) {
                    for (var r = t + e; t < r; ++t)
                        if (n(this.lines[t])) return !0
                }
            }, bo.prototype = {
                chunkSize: function() {
                    return this.size
                },
                removeInner: function(t, e) {
                    this.size -= e;
                    for (var n = 0; n < this.children.length; ++n) {
                        var r = this.children[n],
                            i = r.chunkSize();
                        if (t < i) {
                            var o = Math.min(e, i - t),
                                a = r.height;
                            if (r.removeInner(t, o), this.height -= a - r.height, i == o && (this.children.splice(n--, 1), r.parent = null), 0 == (e -= o)) break;
                            t = 0
                        } else t -= i
                    }
                    if (this.size - e < 25 && (this.children.length > 1 || !(this.children[0] instanceof mo))) {
                        var s = [];
                        this.collapse(s), this.children = [new mo(s)], this.children[0].parent = this
                    }
                },
                collapse: function(t) {
                    for (var e = 0; e < this.children.length; ++e) this.children[e].collapse(t)
                },
                insertInner: function(t, e, n) {
                    this.size += e.length, this.height += n;
                    for (var r = 0; r < this.children.length; ++r) {
                        var i = this.children[r],
                            o = i.chunkSize();
                        if (t <= o) {
                            if (i.insertInner(t, e, n), i.lines && i.lines.length > 50) {
                                for (var a = i.lines.length % 25 + 25, s = a; s < i.lines.length;) {
                                    var l = new mo(i.lines.slice(s, s += 25));
                                    i.height -= l.height, this.children.splice(++r, 0, l), l.parent = this
                                }
                                i.lines = i.lines.slice(0, a), this.maybeSpill()
                            }
                            break
                        }
                        t -= o
                    }
                },
                maybeSpill: function() {
                    if (!(this.children.length <= 10)) {
                        var t = this;
                        do {
                            var e = new bo(t.children.splice(t.children.length - 5, 5));
                            if (t.parent) {
                                t.size -= e.size, t.height -= e.height;
                                var n = z(t.parent.children, t);
                                t.parent.children.splice(n + 1, 0, e)
                            } else {
                                var r = new bo(t.children);
                                r.parent = t, t.children = [r, e], t = r
                            }
                            e.parent = t.parent
                        } while (t.children.length > 10);
                        t.parent.maybeSpill()
                    }
                },
                iterN: function(t, e, n) {
                    for (var r = 0; r < this.children.length; ++r) {
                        var i = this.children[r],
                            o = i.chunkSize();
                        if (t < o) {
                            var a = Math.min(e, o - t);
                            if (i.iterN(t, a, n)) return !0;
                            if (0 == (e -= a)) break;
                            t = 0
                        } else t -= o
                    }
                }
            };
            var yo = function(t, e, n) {
                if (n)
                    for (var r in n) n.hasOwnProperty(r) && (this[r] = n[r]);
                this.doc = t, this.node = e
            };

            function wo(t, e, n) {
                Ue(e) < (t.curOp && t.curOp.scrollTop || t.doc.scrollTop) && Pr(t, n)
            }
            yo.prototype.clear = function() {
                var t = this.doc.cm,
                    e = this.line.widgets,
                    n = this.line,
                    r = Xt(n);
                if (null != r && e) {
                    for (var i = 0; i < e.length; ++i) e[i] == this && e.splice(i--, 1);
                    e.length || (n.widgets = null);
                    var o = xn(this);
                    Yt(n, Math.max(0, n.height - o)), t && (Jr(t, function() {
                        wo(t, n, -o), ur(t, r, "widget")
                    }), ln(t, "lineWidgetCleared", t, this, r))
                }
            }, yo.prototype.changed = function() {
                var t = this,
                    e = this.height,
                    n = this.doc.cm,
                    r = this.line;
                this.height = null;
                var i = xn(this) - e;
                i && (He(this.doc, r) || Yt(r, r.height + i), n && Jr(n, function() {
                    n.curOp.forceUpdate = !0, wo(n, r, i), ln(n, "lineWidgetChanged", n, t, Xt(r))
                }))
            }, yt(yo);
            var xo = 0,
                Oo = function(t, e) {
                    this.lines = [], this.type = e, this.doc = t, this.id = ++xo
                };

            function Co(t, e, n, r, i) {
                if (r && r.shared) return function(t, e, n, r, i) {
                    (r = F(r)).shared = !1;
                    var o = [Co(t, e, n, r, i)],
                        a = o[0],
                        s = r.widgetNode;
                    return Ai(t, function(t) {
                        s && (r.widgetNode = s.cloneNode(!0)), o.push(Co(t, se(t, e), se(t, n), r, i));
                        for (var l = 0; l < t.linked.length; ++l)
                            if (t.linked[l].isParent) return;
                        a = Y(o)
                    }), new So(o, a)
                }(t, e, n, r, i);
                if (t.cm && !t.cm.curOp) return Zr(t.cm, Co)(t, e, n, r, i);
                var o = new Oo(t, i),
                    a = ee(e, n);
                if (r && F(r, o, !1), a > 0 || 0 == a && !1 !== o.clearWhenEmpty) return o;
                if (o.replacedWith && (o.collapsed = !0, o.widgetNode = M("span", [o.replacedWith], "CodeMirror-widget"), r.handleMouseEvents || o.widgetNode.setAttribute("cm-ignore-events", "true"), r.insertLeft && (o.widgetNode.insertLeft = !0)), o.collapsed) {
                    if (Fe(t, e.line, e, n, o) || e.line != n.line && Fe(t, n.line, e, n, o)) throw new Error("Inserting collapsed marker partially overlapping an existing one");
                    Oe = !0
                }
                o.addToHistory && Vi(t, {
                    from: e,
                    to: n,
                    origin: "markText"
                }, t.sel, NaN);
                var s, l = e.line,
                    c = t.cm;
                if (t.iter(l, n.line + 1, function(t) {
                        c && o.collapsed && !c.options.lineWrapping && Ve(t) == c.display.maxLine && (s = !0), o.collapsed && l != e.line && Yt(t, 0),
                            function(t, e) {
                                t.markedSpans = t.markedSpans ? t.markedSpans.concat([e]) : [e], e.marker.attachLine(t)
                            }(t, new Ce(o, l == e.line ? e.ch : null, l == n.line ? n.ch : null)), ++l
                    }), o.collapsed && t.iter(e.line, n.line + 1, function(e) {
                        He(t, e) && Yt(e, 0)
                    }), o.clearOnEnter && ht(o, "beforeCursorEnter", function() {
                        return o.clear()
                    }), o.readOnly && (xe = !0, (t.history.done.length || t.history.undone.length) && t.clearHistory()), o.collapsed && (o.id = ++xo, o.atomic = !0), c) {
                    if (s && (c.curOp.updateMaxLine = !0), o.collapsed) cr(c, e.line, n.line + 1);
                    else if (o.className || o.startStyle || o.endStyle || o.css || o.attributes || o.title)
                        for (var u = e.line; u <= n.line; u++) ur(c, u, "text");
                    o.atomic && Qi(c.doc), ln(c, "markerAdded", c, o)
                }
                return o
            }
            Oo.prototype.clear = function() {
                if (!this.explicitlyCleared) {
                    var t = this.doc.cm,
                        e = t && !t.curOp;
                    if (e && Br(t), bt(this, "clear")) {
                        var n = this.find();
                        n && ln(this, "clear", n.from, n.to)
                    }
                    for (var r = null, i = null, o = 0; o < this.lines.length; ++o) {
                        var a = this.lines[o],
                            s = Se(a.markedSpans, this);
                        t && !this.collapsed ? ur(t, Xt(a), "text") : t && (null != s.to && (i = Xt(a)), null != s.from && (r = Xt(a))), a.markedSpans = ke(a.markedSpans, s), null == s.from && this.collapsed && !He(this.doc, a) && t && Yt(a, er(t.display))
                    }
                    if (t && this.collapsed && !t.options.lineWrapping)
                        for (var l = 0; l < this.lines.length; ++l) {
                            var c = Ve(this.lines[l]),
                                u = Be(c);
                            u > t.display.maxLineLength && (t.display.maxLine = c, t.display.maxLineLength = u, t.display.maxLineChanged = !0)
                        }
                    null != r && t && this.collapsed && cr(t, r, i + 1), this.lines.length = 0, this.explicitlyCleared = !0, this.atomic && this.doc.cantEdit && (this.doc.cantEdit = !1, t && Qi(t.doc)), t && ln(t, "markerCleared", t, this, r, i), e && Wr(t), this.parent && this.parent.clear()
                }
            }, Oo.prototype.find = function(t, e) {
                var n, r;
                null == t && "bookmark" == this.type && (t = 1);
                for (var i = 0; i < this.lines.length; ++i) {
                    var o = this.lines[i],
                        a = Se(o.markedSpans, this);
                    if (null != a.from && (n = te(e ? o : Xt(o), a.from), -1 == t)) return n;
                    if (null != a.to && (r = te(e ? o : Xt(o), a.to), 1 == t)) return r
                }
                return n && {
                    from: n,
                    to: r
                }
            }, Oo.prototype.changed = function() {
                var t = this,
                    e = this.find(-1, !0),
                    n = this,
                    r = this.doc.cm;
                e && r && Jr(r, function() {
                    var i = e.line,
                        o = Xt(e.line),
                        a = Dn(r, o);
                    if (a && (Vn(a), r.curOp.selectionChanged = r.curOp.forceUpdate = !0), r.curOp.updateMaxLine = !0, !He(n.doc, i) && null != n.height) {
                        var s = n.height;
                        n.height = null;
                        var l = xn(n) - s;
                        l && Yt(i, i.height + l)
                    }
                    ln(r, "markerChanged", r, t)
                })
            }, Oo.prototype.attachLine = function(t) {
                if (!this.lines.length && this.doc.cm) {
                    var e = this.doc.cm.curOp;
                    e.maybeHiddenMarkers && -1 != z(e.maybeHiddenMarkers, this) || (e.maybeUnhiddenMarkers || (e.maybeUnhiddenMarkers = [])).push(this)
                }
                this.lines.push(t)
            }, Oo.prototype.detachLine = function(t) {
                if (this.lines.splice(z(this.lines, t), 1), !this.lines.length && this.doc.cm) {
                    var e = this.doc.cm.curOp;
                    (e.maybeHiddenMarkers || (e.maybeHiddenMarkers = [])).push(this)
                }
            }, yt(Oo);
            var So = function(t, e) {
                this.markers = t, this.primary = e;
                for (var n = 0; n < t.length; ++n) t[n].parent = this
            };

            function ko(t) {
                return t.findMarks(te(t.first, 0), t.clipPos(te(t.lastLine())), function(t) {
                    return t.parent
                })
            }

            function jo(t) {
                for (var e = function(e) {
                        var n = t[e],
                            r = [n.primary.doc];
                        Ai(n.primary.doc, function(t) {
                            return r.push(t)
                        });
                        for (var i = 0; i < n.markers.length; i++) {
                            var o = n.markers[i]; - 1 == z(r, o.doc) && (o.parent = null, n.markers.splice(i--, 1))
                        }
                    }, n = 0; n < t.length; n++) e(n)
            }
            So.prototype.clear = function() {
                if (!this.explicitlyCleared) {
                    this.explicitlyCleared = !0;
                    for (var t = 0; t < this.markers.length; ++t) this.markers[t].clear();
                    ln(this, "clear")
                }
            }, So.prototype.find = function(t, e) {
                return this.primary.find(t, e)
            }, yt(So);
            var To = 0,
                Po = function(t, e, n, r, i) {
                    if (!(this instanceof Po)) return new Po(t, e, n, r, i);
                    null == n && (n = 0), bo.call(this, [new mo([new qe("", null)])]), this.first = n, this.scrollTop = this.scrollLeft = 0, this.cantEdit = !1, this.cleanGeneration = 1, this.modeFrontier = this.highlightFrontier = n;
                    var o = te(n, 0);
                    this.sel = Ci(o), this.history = new Ni(null), this.id = ++To, this.modeOption = e, this.lineSep = r, this.direction = "rtl" == i ? "rtl" : "ltr", this.extend = !1, "string" == typeof t && (t = this.splitLines(t)), Di(this, {
                        from: o,
                        to: o,
                        text: t
                    }), Xi(this, Ci(o), U)
                };
            Po.prototype = Z(bo.prototype, {
                constructor: Po,
                iter: function(t, e, n) {
                    n ? this.iterN(t - this.first, e - t, n) : this.iterN(this.first, this.first + this.size, t)
                },
                insert: function(t, e) {
                    for (var n = 0, r = 0; r < e.length; ++r) n += e[r].height;
                    this.insertInner(t - this.first, e, n)
                },
                remove: function(t, e) {
                    this.removeInner(t - this.first, e)
                },
                getValue: function(t) {
                    var e = Kt(this, this.first, this.first + this.size);
                    return !1 === t ? e : e.join(t || this.lineSeparator())
                },
                setValue: ti(function(t) {
                    var e = te(this.first, 0),
                        n = this.first + this.size - 1;
                    ao(this, {
                        from: e,
                        to: te(n, qt(this, n).text.length),
                        text: this.splitLines(t),
                        origin: "setValue",
                        full: !0
                    }, !0), this.cm && Mr(this.cm, 0, 0), Xi(this, Ci(e), U)
                }),
                replaceRange: function(t, e, n, r) {
                    ho(this, t, e = se(this, e), n = n ? se(this, n) : e, r)
                },
                getRange: function(t, e, n) {
                    var r = Gt(this, se(this, t), se(this, e));
                    return !1 === n ? r : r.join(n || this.lineSeparator())
                },
                getLine: function(t) {
                    var e = this.getLineHandle(t);
                    return e && e.text
                },
                getLineHandle: function(t) {
                    if (Zt(this, t)) return qt(this, t)
                },
                getLineNumber: function(t) {
                    return Xt(t)
                },
                getLineHandleVisualStart: function(t) {
                    return "number" == typeof t && (t = qt(this, t)), Ve(t)
                },
                lineCount: function() {
                    return this.size
                },
                firstLine: function() {
                    return this.first
                },
                lastLine: function() {
                    return this.first + this.size - 1
                },
                clipPos: function(t) {
                    return se(this, t)
                },
                getCursor: function(t) {
                    var e = this.sel.primary();
                    return null == t || "head" == t ? e.head : "anchor" == t ? e.anchor : "end" == t || "to" == t || !1 === t ? e.to() : e.from()
                },
                listSelections: function() {
                    return this.sel.ranges
                },
                somethingSelected: function() {
                    return this.sel.somethingSelected()
                },
                setCursor: ti(function(t, e, n) {
                    Ki(this, se(this, "number" == typeof t ? te(t, e || 0) : t), null, n)
                }),
                setSelection: ti(function(t, e, n) {
                    Ki(this, se(this, t), se(this, e || t), n)
                }),
                extendSelection: ti(function(t, e, n) {
                    Wi(this, se(this, t), e && se(this, e), n)
                }),
                extendSelections: ti(function(t, e) {
                    qi(this, le(this, t), e)
                }),
                extendSelectionsBy: ti(function(t, e) {
                    qi(this, le(this, X(this.sel.ranges, t)), e)
                }),
                setSelections: ti(function(t, e, n) {
                    if (t.length) {
                        for (var r = [], i = 0; i < t.length; i++) r[i] = new xi(se(this, t[i].anchor), se(this, t[i].head));
                        null == e && (e = Math.min(t.length - 1, this.sel.primIndex)), Xi(this, Oi(this.cm, r, e), n)
                    }
                }),
                addSelection: ti(function(t, e, n) {
                    var r = this.sel.ranges.slice(0);
                    r.push(new xi(se(this, t), se(this, e || t))), Xi(this, Oi(this.cm, r, r.length - 1), n)
                }),
                getSelection: function(t) {
                    for (var e, n = this.sel.ranges, r = 0; r < n.length; r++) {
                        var i = Gt(this, n[r].from(), n[r].to());
                        e = e ? e.concat(i) : i
                    }
                    return !1 === t ? e : e.join(t || this.lineSeparator())
                },
                getSelections: function(t) {
                    for (var e = [], n = this.sel.ranges, r = 0; r < n.length; r++) {
                        var i = Gt(this, n[r].from(), n[r].to());
                        !1 !== t && (i = i.join(t || this.lineSeparator())), e[r] = i
                    }
                    return e
                },
                replaceSelection: function(t, e, n) {
                    for (var r = [], i = 0; i < this.sel.ranges.length; i++) r[i] = t;
                    this.replaceSelections(r, e, n || "+input")
                },
                replaceSelections: ti(function(t, e, n) {
                    for (var r = [], i = this.sel, o = 0; o < i.ranges.length; o++) {
                        var a = i.ranges[o];
                        r[o] = {
                            from: a.from(),
                            to: a.to(),
                            text: this.splitLines(t[o]),
                            origin: n
                        }
                    }
                    for (var s = e && "end" != e && function(t, e, n) {
                            for (var r = [], i = te(t.first, 0), o = i, a = 0; a < e.length; a++) {
                                var s = e[a],
                                    l = Ti(s.from, i, o),
                                    c = Ti(Si(s), i, o);
                                if (i = s.to, o = c, "around" == n) {
                                    var u = t.sel.ranges[a],
                                        d = ee(u.head, u.anchor) < 0;
                                    r[a] = new xi(d ? c : l, d ? l : c)
                                } else r[a] = new xi(l, l)
                            }
                            return new wi(r, t.sel.primIndex)
                        }(this, r, e), l = r.length - 1; l >= 0; l--) ao(this, r[l]);
                    s ? Yi(this, s) : this.cm && Er(this.cm)
                }),
                undo: ti(function() {
                    lo(this, "undo")
                }),
                redo: ti(function() {
                    lo(this, "redo")
                }),
                undoSelection: ti(function() {
                    lo(this, "undo", !0)
                }),
                redoSelection: ti(function() {
                    lo(this, "redo", !0)
                }),
                setExtending: function(t) {
                    this.extend = t
                },
                getExtending: function() {
                    return this.extend
                },
                historySize: function() {
                    for (var t = this.history, e = 0, n = 0, r = 0; r < t.done.length; r++) t.done[r].ranges || ++e;
                    for (var i = 0; i < t.undone.length; i++) t.undone[i].ranges || ++n;
                    return {
                        undo: e,
                        redo: n
                    }
                },
                clearHistory: function() {
                    var t = this;
                    this.history = new Ni(this.history.maxGeneration), Ai(this, function(e) {
                        return e.history = t.history
                    }, !0)
                },
                markClean: function() {
                    this.cleanGeneration = this.changeGeneration(!0)
                },
                changeGeneration: function(t) {
                    return t && (this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null), this.history.generation
                },
                isClean: function(t) {
                    return this.history.generation == (t || this.cleanGeneration)
                },
                getHistory: function() {
                    return {
                        done: Ui(this.history.done),
                        undone: Ui(this.history.undone)
                    }
                },
                setHistory: function(t) {
                    var e = this.history = new Ni(this.history.maxGeneration);
                    e.done = Ui(t.done.slice(0), null, !0), e.undone = Ui(t.undone.slice(0), null, !0)
                },
                setGutterMarker: ti(function(t, e, n) {
                    return vo(this, t, "gutter", function(t) {
                        var r = t.gutterMarkers || (t.gutterMarkers = {});
                        return r[e] = n, !n && nt(r) && (t.gutterMarkers = null), !0
                    })
                }),
                clearGutter: ti(function(t) {
                    var e = this;
                    this.iter(function(n) {
                        n.gutterMarkers && n.gutterMarkers[t] && vo(e, n, "gutter", function() {
                            return n.gutterMarkers[t] = null, nt(n.gutterMarkers) && (n.gutterMarkers = null), !0
                        })
                    })
                }),
                lineInfo: function(t) {
                    var e;
                    if ("number" == typeof t) {
                        if (!Zt(this, t)) return null;
                        if (e = t, !(t = qt(this, t))) return null
                    } else if (null == (e = Xt(t))) return null;
                    return {
                        line: e,
                        handle: t,
                        text: t.text,
                        gutterMarkers: t.gutterMarkers,
                        textClass: t.textClass,
                        bgClass: t.bgClass,
                        wrapClass: t.wrapClass,
                        widgets: t.widgets
                    }
                },
                addLineClass: ti(function(t, e, n) {
                    return vo(this, t, "gutter" == e ? "gutter" : "class", function(t) {
                        var r = "text" == e ? "textClass" : "background" == e ? "bgClass" : "gutter" == e ? "gutterClass" : "wrapClass";
                        if (t[r]) {
                            if (S(n).test(t[r])) return !1;
                            t[r] += " " + n
                        } else t[r] = n;
                        return !0
                    })
                }),
                removeLineClass: ti(function(t, e, n) {
                    return vo(this, t, "gutter" == e ? "gutter" : "class", function(t) {
                        var r = "text" == e ? "textClass" : "background" == e ? "bgClass" : "gutter" == e ? "gutterClass" : "wrapClass",
                            i = t[r];
                        if (!i) return !1;
                        if (null == n) t[r] = null;
                        else {
                            var o = i.match(S(n));
                            if (!o) return !1;
                            var a = o.index + o[0].length;
                            t[r] = i.slice(0, o.index) + (o.index && a != i.length ? " " : "") + i.slice(a) || null
                        }
                        return !0
                    })
                }),
                addLineWidget: ti(function(t, e, n) {
                    return function(t, e, n, r) {
                        var i = new yo(t, n, r),
                            o = t.cm;
                        return o && i.noHScroll && (o.display.alignWidgets = !0), vo(t, e, "widget", function(e) {
                            var n = e.widgets || (e.widgets = []);
                            if (null == i.insertAt ? n.push(i) : n.splice(Math.min(n.length, Math.max(0, i.insertAt)), 0, i), i.line = e, o && !He(t, e)) {
                                var r = Ue(e) < t.scrollTop;
                                Yt(e, e.height + xn(i)), r && Pr(o, i.height), o.curOp.forceUpdate = !0
                            }
                            return !0
                        }), o && ln(o, "lineWidgetAdded", o, i, "number" == typeof e ? e : Xt(e)), i
                    }(this, t, e, n)
                }),
                removeLineWidget: function(t) {
                    t.clear()
                },
                markText: function(t, e, n) {
                    return Co(this, se(this, t), se(this, e), n, n && n.type || "range")
                },
                setBookmark: function(t, e) {
                    var n = {
                        replacedWith: e && (null == e.nodeType ? e.widget : e),
                        insertLeft: e && e.insertLeft,
                        clearWhenEmpty: !1,
                        shared: e && e.shared,
                        handleMouseEvents: e && e.handleMouseEvents
                    };
                    return Co(this, t = se(this, t), t, n, "bookmark")
                },
                findMarksAt: function(t) {
                    var e = [],
                        n = qt(this, (t = se(this, t)).line).markedSpans;
                    if (n)
                        for (var r = 0; r < n.length; ++r) {
                            var i = n[r];
                            (null == i.from || i.from <= t.ch) && (null == i.to || i.to >= t.ch) && e.push(i.marker.parent || i.marker)
                        }
                    return e
                },
                findMarks: function(t, e, n) {
                    t = se(this, t), e = se(this, e);
                    var r = [],
                        i = t.line;
                    return this.iter(t.line, e.line + 1, function(o) {
                        var a = o.markedSpans;
                        if (a)
                            for (var s = 0; s < a.length; s++) {
                                var l = a[s];
                                null != l.to && i == t.line && t.ch >= l.to || null == l.from && i != t.line || null != l.from && i == e.line && l.from >= e.ch || n && !n(l.marker) || r.push(l.marker.parent || l.marker)
                            }++i
                    }), r
                },
                getAllMarks: function() {
                    var t = [];
                    return this.iter(function(e) {
                        var n = e.markedSpans;
                        if (n)
                            for (var r = 0; r < n.length; ++r) null != n[r].from && t.push(n[r].marker)
                    }), t
                },
                posFromIndex: function(t) {
                    var e, n = this.first,
                        r = this.lineSeparator().length;
                    return this.iter(function(i) {
                        var o = i.text.length + r;
                        if (o > t) return e = t, !0;
                        t -= o, ++n
                    }), se(this, te(n, e))
                },
                indexFromPos: function(t) {
                    var e = (t = se(this, t)).ch;
                    if (t.line < this.first || t.ch < 0) return 0;
                    var n = this.lineSeparator().length;
                    return this.iter(this.first, t.line, function(t) {
                        e += t.text.length + n
                    }), e
                },
                copy: function(t) {
                    var e = new Po(Kt(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction);
                    return e.scrollTop = this.scrollTop, e.scrollLeft = this.scrollLeft, e.sel = this.sel, e.extend = !1, t && (e.history.undoDepth = this.history.undoDepth, e.setHistory(this.getHistory())), e
                },
                linkedDoc: function(t) {
                    t || (t = {});
                    var e = this.first,
                        n = this.first + this.size;
                    null != t.from && t.from > e && (e = t.from), null != t.to && t.to < n && (n = t.to);
                    var r = new Po(Kt(this, e, n), t.mode || this.modeOption, e, this.lineSep, this.direction);
                    return t.sharedHist && (r.history = this.history), (this.linked || (this.linked = [])).push({
                            doc: r,
                            sharedHist: t.sharedHist
                        }), r.linked = [{
                            doc: this,
                            isParent: !0,
                            sharedHist: t.sharedHist
                        }],
                        function(t, e) {
                            for (var n = 0; n < e.length; n++) {
                                var r = e[n],
                                    i = r.find(),
                                    o = t.clipPos(i.from),
                                    a = t.clipPos(i.to);
                                if (ee(o, a)) {
                                    var s = Co(t, o, a, r.primary, r.primary.type);
                                    r.markers.push(s), s.parent = r
                                }
                            }
                        }(r, ko(this)), r
                },
                unlinkDoc: function(t) {
                    if (t instanceof Ca && (t = t.doc), this.linked)
                        for (var e = 0; e < this.linked.length; ++e)
                            if (this.linked[e].doc == t) {
                                this.linked.splice(e, 1), t.unlinkDoc(this), jo(ko(this));
                                break
                            } if (t.history == this.history) {
                        var n = [t.id];
                        Ai(t, function(t) {
                            return n.push(t.id)
                        }, !0), t.history = new Ni(null), t.history.done = Ui(this.history.done, n), t.history.undone = Ui(this.history.undone, n)
                    }
                },
                iterLinkedDocs: function(t) {
                    Ai(this, t)
                },
                getMode: function() {
                    return this.mode
                },
                getEditor: function() {
                    return this.cm
                },
                splitLines: function(t) {
                    return this.lineSep ? t.split(this.lineSep) : At(t)
                },
                lineSeparator: function() {
                    return this.lineSep || "\n"
                },
                setDirection: ti(function(t) {
                    var e;
                    "rtl" != t && (t = "ltr"), t != this.direction && (this.direction = t, this.iter(function(t) {
                        return t.order = null
                    }), this.cm && Jr(e = this.cm, function() {
                        _i(e), cr(e)
                    }))
                })
            }), Po.prototype.eachLine = Po.prototype.iter;
            var Eo = 0;

            function Mo(t) {
                var e = this;
                if (Do(e), !vt(e, t) && !On(e.display, t)) {
                    wt(t), a && (Eo = +new Date);
                    var n = sr(e, t, !0),
                        r = t.dataTransfer.files;
                    if (n && !e.isReadOnly())
                        if (r && r.length && window.FileReader && window.File)
                            for (var i = r.length, o = Array(i), s = 0, l = function() {
                                    ++s == i && Zr(e, function() {
                                        var t = {
                                            from: n = se(e.doc, n),
                                            to: n,
                                            text: e.doc.splitLines(o.filter(function(t) {
                                                return null != t
                                            }).join(e.doc.lineSeparator())),
                                            origin: "paste"
                                        };
                                        ao(e.doc, t), Yi(e.doc, Ci(se(e.doc, n), se(e.doc, Si(t))))
                                    })()
                                }, c = function(t, n) {
                                    if (e.options.allowDropFileTypes && -1 == z(e.options.allowDropFileTypes, t.type)) l();
                                    else {
                                        var r = new FileReader;
                                        r.onerror = function() {
                                            return l()
                                        }, r.onload = function() {
                                            var t = r.result;
                                            /[\x00-\x08\x0e-\x1f]{2}/.test(t) || (o[n] = t), l()
                                        }, r.readAsText(t)
                                    }
                                }, u = 0; u < r.length; u++) c(r[u], u);
                        else {
                            if (e.state.draggingText && e.doc.sel.contains(n) > -1) return e.state.draggingText(t), void setTimeout(function() {
                                return e.display.input.focus()
                            }, 20);
                            try {
                                var d = t.dataTransfer.getData("Text");
                                if (d) {
                                    var h;
                                    if (e.state.draggingText && !e.state.draggingText.copy && (h = e.listSelections()), Ji(e.doc, Ci(n, n)), h)
                                        for (var f = 0; f < h.length; ++f) ho(e.doc, "", h[f].anchor, h[f].head, "drag");
                                    e.replaceSelection(d, "around", "paste"), e.display.input.focus()
                                }
                            } catch (t) {}
                        }
                }
            }

            function Do(t) {
                t.display.dragCursor && (t.display.lineSpace.removeChild(t.display.dragCursor), t.display.dragCursor = null)
            }

            function Ao(t) {
                if (document.getElementsByClassName) {
                    for (var e = document.getElementsByClassName("CodeMirror"), n = [], r = 0; r < e.length; r++) {
                        var i = e[r].CodeMirror;
                        i && n.push(i)
                    }
                    n.length && n[0].operation(function() {
                        for (var e = 0; e < n.length; e++) t(n[e])
                    })
                }
            }
            var Lo = !1;

            function _o(t) {
                var e = t.display;
                e.cachedCharWidth = e.cachedTextHeight = e.cachedPaddingH = null, e.scrollbarsClipped = !1, t.setSize()
            }
            for (var No = {
                    3: "Pause",
                    8: "Backspace",
                    9: "Tab",
                    13: "Enter",
                    16: "Shift",
                    17: "Ctrl",
                    18: "Alt",
                    19: "Pause",
                    20: "CapsLock",
                    27: "Esc",
                    32: "Space",
                    33: "PageUp",
                    34: "PageDown",
                    35: "End",
                    36: "Home",
                    37: "Left",
                    38: "Up",
                    39: "Right",
                    40: "Down",
                    44: "PrintScrn",
                    45: "Insert",
                    46: "Delete",
                    59: ";",
                    61: "=",
                    91: "Mod",
                    92: "Mod",
                    93: "Mod",
                    106: "*",
                    107: "=",
                    109: "-",
                    110: ".",
                    111: "/",
                    145: "ScrollLock",
                    173: "-",
                    186: ";",
                    187: "=",
                    188: ",",
                    189: "-",
                    190: ".",
                    191: "/",
                    192: "`",
                    219: "[",
                    220: "\\",
                    221: "]",
                    222: "'",
                    224: "Mod",
                    63232: "Up",
                    63233: "Down",
                    63234: "Left",
                    63235: "Right",
                    63272: "Delete",
                    63273: "Home",
                    63275: "End",
                    63276: "PageUp",
                    63277: "PageDown",
                    63302: "Insert"
                }, Io = 0; Io < 10; Io++) No[Io + 48] = No[Io + 96] = String(Io);
            for (var Fo = 65; Fo <= 90; Fo++) No[Fo] = String.fromCharCode(Fo);
            for (var Vo = 1; Vo <= 12; Vo++) No[Vo + 111] = No[Vo + 63235] = "F" + Vo;
            var Ro = {};

            function zo(t) {
                var e, n, r, i, o = t.split(/-(?!$)/);
                t = o[o.length - 1];
                for (var a = 0; a < o.length - 1; a++) {
                    var s = o[a];
                    if (/^(cmd|meta|m)$/i.test(s)) i = !0;
                    else if (/^a(lt)?$/i.test(s)) e = !0;
                    else if (/^(c|ctrl|control)$/i.test(s)) n = !0;
                    else {
                        if (!/^s(hift)?$/i.test(s)) throw new Error("Unrecognized modifier name: " + s);
                        r = !0
                    }
                }
                return e && (t = "Alt-" + t), n && (t = "Ctrl-" + t), i && (t = "Cmd-" + t), r && (t = "Shift-" + t), t
            }

            function Ho(t) {
                var e = {};
                for (var n in t)
                    if (t.hasOwnProperty(n)) {
                        var r = t[n];
                        if (/^(name|fallthrough|(de|at)tach)$/.test(n)) continue;
                        if ("..." == r) {
                            delete t[n];
                            continue
                        }
                        for (var i = X(n.split(" "), zo), o = 0; o < i.length; o++) {
                            var a = void 0,
                                s = void 0;
                            o == i.length - 1 ? (s = i.join(" "), a = r) : (s = i.slice(0, o + 1).join(" "), a = "...");
                            var l = e[s];
                            if (l) {
                                if (l != a) throw new Error("Inconsistent bindings for " + s)
                            } else e[s] = a
                        }
                        delete t[n]
                    } for (var c in e) t[c] = e[c];
                return t
            }

            function $o(t, e, n, r) {
                var i = (e = qo(e)).call ? e.call(t, r) : e[t];
                if (!1 === i) return "nothing";
                if ("..." === i) return "multi";
                if (null != i && n(i)) return "handled";
                if (e.fallthrough) {
                    if ("[object Array]" != Object.prototype.toString.call(e.fallthrough)) return $o(t, e.fallthrough, n, r);
                    for (var o = 0; o < e.fallthrough.length; o++) {
                        var a = $o(t, e.fallthrough[o], n, r);
                        if (a) return a
                    }
                }
            }

            function Uo(t) {
                var e = "string" == typeof t ? t : No[t.keyCode];
                return "Ctrl" == e || "Alt" == e || "Shift" == e || "Mod" == e
            }

            function Bo(t, e, n) {
                var r = t;
                return e.altKey && "Alt" != r && (t = "Alt-" + t), (O ? e.metaKey : e.ctrlKey) && "Ctrl" != r && (t = "Ctrl-" + t), (O ? e.ctrlKey : e.metaKey) && "Mod" != r && (t = "Cmd-" + t), !n && e.shiftKey && "Shift" != r && (t = "Shift-" + t), t
            }

            function Wo(t, e) {
                if (d && 34 == t.keyCode && t.char) return !1;
                var n = No[t.keyCode];
                return null != n && !t.altGraphKey && (3 == t.keyCode && t.code && (n = t.code), Bo(n, t, e))
            }

            function qo(t) {
                return "string" == typeof t ? Ro[t] : t
            }

            function Go(t, e) {
                for (var n = t.doc.sel.ranges, r = [], i = 0; i < n.length; i++) {
                    for (var o = e(n[i]); r.length && ee(o.from, Y(r).to) <= 0;) {
                        var a = r.pop();
                        if (ee(a.from, o.from) < 0) {
                            o.from = a.from;
                            break
                        }
                    }
                    r.push(o)
                }
                Jr(t, function() {
                    for (var e = r.length - 1; e >= 0; e--) ho(t.doc, "", r[e].from, r[e].to, "+delete");
                    Er(t)
                })
            }

            function Ko(t, e, n) {
                var r = ot(t.text, e + n, n);
                return r < 0 || r > t.text.length ? null : r
            }

            function Yo(t, e, n) {
                var r = Ko(t, e.ch, n);
                return null == r ? null : new te(e.line, r, n < 0 ? "after" : "before")
            }

            function Xo(t, e, n, r, i) {
                if (t) {
                    "rtl" == e.doc.direction && (i = -i);
                    var o = ut(n, e.doc.direction);
                    if (o) {
                        var a, s = i < 0 ? Y(o) : o[0],
                            l = i < 0 == (1 == s.level) ? "after" : "before";
                        if (s.level > 0 || "rtl" == e.doc.direction) {
                            var c = An(e, n);
                            a = i < 0 ? n.text.length - 1 : 0;
                            var u = Ln(e, c, a).top;
                            a = at(function(t) {
                                return Ln(e, c, t).top == u
                            }, i < 0 == (1 == s.level) ? s.from : s.to - 1, a), "before" == l && (a = Ko(n, a, 1))
                        } else a = i < 0 ? s.to : s.from;
                        return new te(r, a, l)
                    }
                }
                return new te(r, i < 0 ? n.text.length : 0, i < 0 ? "before" : "after")
            }
            Ro.basic = {
                Left: "goCharLeft",
                Right: "goCharRight",
                Up: "goLineUp",
                Down: "goLineDown",
                End: "goLineEnd",
                Home: "goLineStartSmart",
                PageUp: "goPageUp",
                PageDown: "goPageDown",
                Delete: "delCharAfter",
                Backspace: "delCharBefore",
                "Shift-Backspace": "delCharBefore",
                Tab: "defaultTab",
                "Shift-Tab": "indentAuto",
                Enter: "newlineAndIndent",
                Insert: "toggleOverwrite",
                Esc: "singleSelection"
            }, Ro.pcDefault = {
                "Ctrl-A": "selectAll",
                "Ctrl-D": "deleteLine",
                "Ctrl-Z": "undo",
                "Shift-Ctrl-Z": "redo",
                "Ctrl-Y": "redo",
                "Ctrl-Home": "goDocStart",
                "Ctrl-End": "goDocEnd",
                "Ctrl-Up": "goLineUp",
                "Ctrl-Down": "goLineDown",
                "Ctrl-Left": "goGroupLeft",
                "Ctrl-Right": "goGroupRight",
                "Alt-Left": "goLineStart",
                "Alt-Right": "goLineEnd",
                "Ctrl-Backspace": "delGroupBefore",
                "Ctrl-Delete": "delGroupAfter",
                "Ctrl-S": "save",
                "Ctrl-F": "find",
                "Ctrl-G": "findNext",
                "Shift-Ctrl-G": "findPrev",
                "Shift-Ctrl-F": "replace",
                "Shift-Ctrl-R": "replaceAll",
                "Ctrl-[": "indentLess",
                "Ctrl-]": "indentMore",
                "Ctrl-U": "undoSelection",
                "Shift-Ctrl-U": "redoSelection",
                "Alt-U": "redoSelection",
                fallthrough: "basic"
            }, Ro.emacsy = {
                "Ctrl-F": "goCharRight",
                "Ctrl-B": "goCharLeft",
                "Ctrl-P": "goLineUp",
                "Ctrl-N": "goLineDown",
                "Alt-F": "goWordRight",
                "Alt-B": "goWordLeft",
                "Ctrl-A": "goLineStart",
                "Ctrl-E": "goLineEnd",
                "Ctrl-V": "goPageDown",
                "Shift-Ctrl-V": "goPageUp",
                "Ctrl-D": "delCharAfter",
                "Ctrl-H": "delCharBefore",
                "Alt-D": "delWordAfter",
                "Alt-Backspace": "delWordBefore",
                "Ctrl-K": "killLine",
                "Ctrl-T": "transposeChars",
                "Ctrl-O": "openLine"
            }, Ro.macDefault = {
                "Cmd-A": "selectAll",
                "Cmd-D": "deleteLine",
                "Cmd-Z": "undo",
                "Shift-Cmd-Z": "redo",
                "Cmd-Y": "redo",
                "Cmd-Home": "goDocStart",
                "Cmd-Up": "goDocStart",
                "Cmd-End": "goDocEnd",
                "Cmd-Down": "goDocEnd",
                "Alt-Left": "goGroupLeft",
                "Alt-Right": "goGroupRight",
                "Cmd-Left": "goLineLeft",
                "Cmd-Right": "goLineRight",
                "Alt-Backspace": "delGroupBefore",
                "Ctrl-Alt-Backspace": "delGroupAfter",
                "Alt-Delete": "delGroupAfter",
                "Cmd-S": "save",
                "Cmd-F": "find",
                "Cmd-G": "findNext",
                "Shift-Cmd-G": "findPrev",
                "Cmd-Alt-F": "replace",
                "Shift-Cmd-Alt-F": "replaceAll",
                "Cmd-[": "indentLess",
                "Cmd-]": "indentMore",
                "Cmd-Backspace": "delWrappedLineLeft",
                "Cmd-Delete": "delWrappedLineRight",
                "Cmd-U": "undoSelection",
                "Shift-Cmd-U": "redoSelection",
                "Ctrl-Up": "goDocStart",
                "Ctrl-Down": "goDocEnd",
                fallthrough: ["basic", "emacsy"]
            }, Ro.default = b ? Ro.macDefault : Ro.pcDefault;
            var Jo = {
                selectAll: io,
                singleSelection: function(t) {
                    return t.setSelection(t.getCursor("anchor"), t.getCursor("head"), U)
                },
                killLine: function(t) {
                    return Go(t, function(e) {
                        if (e.empty()) {
                            var n = qt(t.doc, e.head.line).text.length;
                            return e.head.ch == n && e.head.line < t.lastLine() ? {
                                from: e.head,
                                to: te(e.head.line + 1, 0)
                            } : {
                                from: e.head,
                                to: te(e.head.line, n)
                            }
                        }
                        return {
                            from: e.from(),
                            to: e.to()
                        }
                    })
                },
                deleteLine: function(t) {
                    return Go(t, function(e) {
                        return {
                            from: te(e.from().line, 0),
                            to: se(t.doc, te(e.to().line + 1, 0))
                        }
                    })
                },
                delLineLeft: function(t) {
                    return Go(t, function(t) {
                        return {
                            from: te(t.from().line, 0),
                            to: t.from()
                        }
                    })
                },
                delWrappedLineLeft: function(t) {
                    return Go(t, function(e) {
                        var n = t.charCoords(e.head, "div").top + 5;
                        return {
                            from: t.coordsChar({
                                left: 0,
                                top: n
                            }, "div"),
                            to: e.from()
                        }
                    })
                },
                delWrappedLineRight: function(t) {
                    return Go(t, function(e) {
                        var n = t.charCoords(e.head, "div").top + 5,
                            r = t.coordsChar({
                                left: t.display.lineDiv.offsetWidth + 100,
                                top: n
                            }, "div");
                        return {
                            from: e.from(),
                            to: r
                        }
                    })
                },
                undo: function(t) {
                    return t.undo()
                },
                redo: function(t) {
                    return t.redo()
                },
                undoSelection: function(t) {
                    return t.undoSelection()
                },
                redoSelection: function(t) {
                    return t.redoSelection()
                },
                goDocStart: function(t) {
                    return t.extendSelection(te(t.firstLine(), 0))
                },
                goDocEnd: function(t) {
                    return t.extendSelection(te(t.lastLine()))
                },
                goLineStart: function(t) {
                    return t.extendSelectionsBy(function(e) {
                        return Zo(t, e.head.line)
                    }, {
                        origin: "+move",
                        bias: 1
                    })
                },
                goLineStartSmart: function(t) {
                    return t.extendSelectionsBy(function(e) {
                        return Qo(t, e.head)
                    }, {
                        origin: "+move",
                        bias: 1
                    })
                },
                goLineEnd: function(t) {
                    return t.extendSelectionsBy(function(e) {
                        return function(t, e) {
                            var n = qt(t.doc, e),
                                r = function(t) {
                                    for (var e; e = Ne(t);) t = e.find(1, !0).line;
                                    return t
                                }(n);
                            return r != n && (e = Xt(r)), Xo(!0, t, n, e, -1)
                        }(t, e.head.line)
                    }, {
                        origin: "+move",
                        bias: -1
                    })
                },
                goLineRight: function(t) {
                    return t.extendSelectionsBy(function(e) {
                        var n = t.cursorCoords(e.head, "div").top + 5;
                        return t.coordsChar({
                            left: t.display.lineDiv.offsetWidth + 100,
                            top: n
                        }, "div")
                    }, W)
                },
                goLineLeft: function(t) {
                    return t.extendSelectionsBy(function(e) {
                        var n = t.cursorCoords(e.head, "div").top + 5;
                        return t.coordsChar({
                            left: 0,
                            top: n
                        }, "div")
                    }, W)
                },
                goLineLeftSmart: function(t) {
                    return t.extendSelectionsBy(function(e) {
                        var n = t.cursorCoords(e.head, "div").top + 5,
                            r = t.coordsChar({
                                left: 0,
                                top: n
                            }, "div");
                        return r.ch < t.getLine(r.line).search(/\S/) ? Qo(t, e.head) : r
                    }, W)
                },
                goLineUp: function(t) {
                    return t.moveV(-1, "line")
                },
                goLineDown: function(t) {
                    return t.moveV(1, "line")
                },
                goPageUp: function(t) {
                    return t.moveV(-1, "page")
                },
                goPageDown: function(t) {
                    return t.moveV(1, "page")
                },
                goCharLeft: function(t) {
                    return t.moveH(-1, "char")
                },
                goCharRight: function(t) {
                    return t.moveH(1, "char")
                },
                goColumnLeft: function(t) {
                    return t.moveH(-1, "column")
                },
                goColumnRight: function(t) {
                    return t.moveH(1, "column")
                },
                goWordLeft: function(t) {
                    return t.moveH(-1, "word")
                },
                goGroupRight: function(t) {
                    return t.moveH(1, "group")
                },
                goGroupLeft: function(t) {
                    return t.moveH(-1, "group")
                },
                goWordRight: function(t) {
                    return t.moveH(1, "word")
                },
                delCharBefore: function(t) {
                    return t.deleteH(-1, "codepoint")
                },
                delCharAfter: function(t) {
                    return t.deleteH(1, "char")
                },
                delWordBefore: function(t) {
                    return t.deleteH(-1, "word")
                },
                delWordAfter: function(t) {
                    return t.deleteH(1, "word")
                },
                delGroupBefore: function(t) {
                    return t.deleteH(-1, "group")
                },
                delGroupAfter: function(t) {
                    return t.deleteH(1, "group")
                },
                indentAuto: function(t) {
                    return t.indentSelection("smart")
                },
                indentMore: function(t) {
                    return t.indentSelection("add")
                },
                indentLess: function(t) {
                    return t.indentSelection("subtract")
                },
                insertTab: function(t) {
                    return t.replaceSelection("\t")
                },
                insertSoftTab: function(t) {
                    for (var e = [], n = t.listSelections(), r = t.options.tabSize, i = 0; i < n.length; i++) {
                        var o = n[i].from(),
                            a = V(t.getLine(o.line), o.ch, r);
                        e.push(K(r - a % r))
                    }
                    t.replaceSelections(e)
                },
                defaultTab: function(t) {
                    t.somethingSelected() ? t.indentSelection("add") : t.execCommand("insertTab")
                },
                transposeChars: function(t) {
                    return Jr(t, function() {
                        for (var e = t.listSelections(), n = [], r = 0; r < e.length; r++)
                            if (e[r].empty()) {
                                var i = e[r].head,
                                    o = qt(t.doc, i.line).text;
                                if (o)
                                    if (i.ch == o.length && (i = new te(i.line, i.ch - 1)), i.ch > 0) i = new te(i.line, i.ch + 1), t.replaceRange(o.charAt(i.ch - 1) + o.charAt(i.ch - 2), te(i.line, i.ch - 2), i, "+transpose");
                                    else if (i.line > t.doc.first) {
                                    var a = qt(t.doc, i.line - 1).text;
                                    a && (i = new te(i.line, 1), t.replaceRange(o.charAt(0) + t.doc.lineSeparator() + a.charAt(a.length - 1), te(i.line - 1, a.length - 1), i, "+transpose"))
                                }
                                n.push(new xi(i, i))
                            } t.setSelections(n)
                    })
                },
                newlineAndIndent: function(t) {
                    return Jr(t, function() {
                        for (var e = t.listSelections(), n = e.length - 1; n >= 0; n--) t.replaceRange(t.doc.lineSeparator(), e[n].anchor, e[n].head, "+input");
                        e = t.listSelections();
                        for (var r = 0; r < e.length; r++) t.indentLine(e[r].from().line, null, !0);
                        Er(t)
                    })
                },
                openLine: function(t) {
                    return t.replaceSelection("\n", "start")
                },
                toggleOverwrite: function(t) {
                    return t.toggleOverwrite()
                }
            };

            function Zo(t, e) {
                var n = qt(t.doc, e),
                    r = Ve(n);
                return r != n && (e = Xt(r)), Xo(!0, t, r, e, 1)
            }

            function Qo(t, e) {
                var n = Zo(t, e.line),
                    r = qt(t.doc, n.line),
                    i = ut(r, t.doc.direction);
                if (!i || 0 == i[0].level) {
                    var o = Math.max(n.ch, r.text.search(/\S/)),
                        a = e.line == n.line && e.ch <= o && e.ch;
                    return te(n.line, a ? 0 : o, n.sticky)
                }
                return n
            }

            function ta(t, e, n) {
                if ("string" == typeof e && !(e = Jo[e])) return !1;
                t.display.input.ensurePolled();
                var r = t.display.shift,
                    i = !1;
                try {
                    t.isReadOnly() && (t.state.suppressEdits = !0), n && (t.display.shift = !1), i = e(t) != $
                } finally {
                    t.display.shift = r, t.state.suppressEdits = !1
                }
                return i
            }
            var ea = new R;

            function na(t, e, n, r) {
                var i = t.state.keySeq;
                if (i) {
                    if (Uo(e)) return "handled";
                    if (/\'$/.test(e) ? t.state.keySeq = null : ea.set(50, function() {
                            t.state.keySeq == i && (t.state.keySeq = null, t.display.input.reset())
                        }), ra(t, i + " " + e, n, r)) return !0
                }
                return ra(t, e, n, r)
            }

            function ra(t, e, n, r) {
                var i = function(t, e, n) {
                    for (var r = 0; r < t.state.keyMaps.length; r++) {
                        var i = $o(e, t.state.keyMaps[r], n, t);
                        if (i) return i
                    }
                    return t.options.extraKeys && $o(e, t.options.extraKeys, n, t) || $o(e, t.options.keyMap, n, t)
                }(t, e, r);
                return "multi" == i && (t.state.keySeq = e), "handled" == i && ln(t, "keyHandled", t, e, n), "handled" != i && "multi" != i || (wt(n), yr(t)), !!i
            }

            function ia(t, e) {
                var n = Wo(e, !0);
                return !!n && (e.shiftKey && !t.state.keySeq ? na(t, "Shift-" + n, e, function(e) {
                    return ta(t, e, !0)
                }) || na(t, n, e, function(e) {
                    if ("string" == typeof e ? /^go[A-Z]/.test(e) : e.motion) return ta(t, e)
                }) : na(t, n, e, function(e) {
                    return ta(t, e)
                }))
            }
            var oa = null;

            function aa(t) {
                var e = this;
                if (!(t.target && t.target != e.display.input.getField() || (e.curOp.focus = A(), vt(e, t)))) {
                    a && s < 11 && 27 == t.keyCode && (t.returnValue = !1);
                    var r = t.keyCode;
                    e.display.shift = 16 == r || t.shiftKey;
                    var i = ia(e, t);
                    d && (oa = i ? r : null, i || 88 != r || _t || !(b ? t.metaKey : t.ctrlKey) || e.replaceSelection("", null, "cut")), n && !b && !i && 46 == r && t.shiftKey && !t.ctrlKey && document.execCommand && document.execCommand("cut"), 18 != r || /\bCodeMirror-crosshair\b/.test(e.display.lineDiv.className) || function(t) {
                        var e = t.display.lineDiv;

                        function n(t) {
                            18 != t.keyCode && t.altKey || (j(e, "CodeMirror-crosshair"), pt(document, "keyup", n), pt(document, "mouseover", n))
                        }
                        L(e, "CodeMirror-crosshair"), ht(document, "keyup", n), ht(document, "mouseover", n)
                    }(e)
                }
            }

            function sa(t) {
                16 == t.keyCode && (this.doc.sel.shift = !1), vt(this, t)
            }

            function la(t) {
                var e = this;
                if (!(t.target && t.target != e.display.input.getField() || On(e.display, t) || vt(e, t) || t.ctrlKey && !t.altKey || b && t.metaKey)) {
                    var n = t.keyCode,
                        r = t.charCode;
                    if (d && n == oa) return oa = null, void wt(t);
                    if (!d || t.which && !(t.which < 10) || !ia(e, t)) {
                        var i = String.fromCharCode(null == r ? n : r);
                        "\b" != i && (function(t, e, n) {
                            return na(t, "'" + i + "'", e, function(e) {
                                return ta(t, e, !0)
                            })
                        }(e, t) || e.display.input.onKeyPress(t))
                    }
                }
            }
            var ca, ua, da = function(t, e, n) {
                this.time = t, this.pos = e, this.button = n
            };

            function ha(t) {
                var e = this,
                    n = e.display;
                if (!(vt(e, t) || n.activeTouch && n.input.supportsTouch()))
                    if (n.input.ensurePolled(), n.shift = t.shiftKey, On(n, t)) l || (n.scroller.draggable = !1, setTimeout(function() {
                        return n.scroller.draggable = !0
                    }, 100));
                    else if (!ga(e, t)) {
                    var r = sr(e, t),
                        i = kt(t),
                        o = r ? function(t, e) {
                            var n = +new Date;
                            return ua && ua.compare(n, t, e) ? (ca = ua = null, "triple") : ca && ca.compare(n, t, e) ? (ua = new da(n, t, e), ca = null, "double") : (ca = new da(n, t, e), ua = null, "single")
                        }(r, i) : "single";
                    window.focus(), 1 == i && e.state.selectingText && e.state.selectingText(t), r && function(t, e, n, r, i) {
                        var o = "Click";
                        return "double" == r ? o = "Double" + o : "triple" == r && (o = "Triple" + o), na(t, Bo(o = (1 == e ? "Left" : 2 == e ? "Middle" : "Right") + o, i), i, function(e) {
                            if ("string" == typeof e && (e = Jo[e]), !e) return !1;
                            var r = !1;
                            try {
                                t.isReadOnly() && (t.state.suppressEdits = !0), r = e(t, n) != $
                            } finally {
                                t.state.suppressEdits = !1
                            }
                            return r
                        })
                    }(e, i, r, o, t) || (1 == i ? r ? function(t, e, n, r) {
                        a ? setTimeout(I(wr, t), 0) : t.curOp.focus = A();
                        var i, o = function(t, e, n) {
                                var r = t.getOption("configureMouse"),
                                    i = r ? r(t, e, n) : {};
                                if (null == i.unit) {
                                    var o = y ? n.shiftKey && n.metaKey : n.altKey;
                                    i.unit = o ? "rectangle" : "single" == e ? "char" : "double" == e ? "word" : "line"
                                }
                                return (null == i.extend || t.doc.extend) && (i.extend = t.doc.extend || n.shiftKey), null == i.addNew && (i.addNew = b ? n.metaKey : n.ctrlKey), null == i.moveOnDrag && (i.moveOnDrag = !(b ? n.altKey : n.ctrlKey)), i
                            }(t, n, r),
                            c = t.doc.sel;
                        t.options.dragDrop && Pt && !t.isReadOnly() && "single" == n && (i = c.contains(e)) > -1 && (ee((i = c.ranges[i]).from(), e) < 0 || e.xRel > 0) && (ee(i.to(), e) > 0 || e.xRel < 0) ? function(t, e, n, r) {
                            var i = t.display,
                                o = !1,
                                c = Zr(t, function(e) {
                                    l && (i.scroller.draggable = !1), t.state.draggingText = !1, t.state.delayingBlurEvent && (t.hasFocus() ? t.state.delayingBlurEvent = !1 : xr(t)), pt(i.wrapper.ownerDocument, "mouseup", c), pt(i.wrapper.ownerDocument, "mousemove", u), pt(i.scroller, "dragstart", d), pt(i.scroller, "drop", c), o || (wt(e), r.addNew || Wi(t.doc, n, null, null, r.extend), l && !h || a && 9 == s ? setTimeout(function() {
                                        i.wrapper.ownerDocument.body.focus({
                                            preventScroll: !0
                                        }), i.input.focus()
                                    }, 20) : i.input.focus())
                                }),
                                u = function(t) {
                                    o = o || Math.abs(e.clientX - t.clientX) + Math.abs(e.clientY - t.clientY) >= 10
                                },
                                d = function() {
                                    return o = !0
                                };
                            l && (i.scroller.draggable = !0), t.state.draggingText = c, c.copy = !r.moveOnDrag, ht(i.wrapper.ownerDocument, "mouseup", c), ht(i.wrapper.ownerDocument, "mousemove", u), ht(i.scroller, "dragstart", d), ht(i.scroller, "drop", c), t.state.delayingBlurEvent = !0, setTimeout(function() {
                                return i.input.focus()
                            }, 20), i.scroller.dragDrop && i.scroller.dragDrop()
                        }(t, r, e, o) : function(t, e, n, r) {
                            a && xr(t);
                            var i = t.display,
                                o = t.doc;
                            wt(e);
                            var s, l, c = o.sel,
                                u = c.ranges;
                            if (r.addNew && !r.extend ? (l = o.sel.contains(n), s = l > -1 ? u[l] : new xi(n, n)) : (s = o.sel.primary(), l = o.sel.primIndex), "rectangle" == r.unit) r.addNew || (s = new xi(n, n)), n = sr(t, e, !0, !0), l = -1;
                            else {
                                var d = fa(t, n, r.unit);
                                s = r.extend ? Bi(s, d.anchor, d.head, r.extend) : d
                            }
                            r.addNew ? -1 == l ? (l = u.length, Xi(o, Oi(t, u.concat([s]), l), {
                                scroll: !1,
                                origin: "*mouse"
                            })) : u.length > 1 && u[l].empty() && "char" == r.unit && !r.extend ? (Xi(o, Oi(t, u.slice(0, l).concat(u.slice(l + 1)), 0), {
                                scroll: !1,
                                origin: "*mouse"
                            }), c = o.sel) : Gi(o, l, s, B) : (l = 0, Xi(o, new wi([s], 0), B), c = o.sel);
                            var h = n;

                            function f(e) {
                                if (0 != ee(h, e))
                                    if (h = e, "rectangle" == r.unit) {
                                        for (var i = [], a = t.options.tabSize, u = V(qt(o, n.line).text, n.ch, a), d = V(qt(o, e.line).text, e.ch, a), f = Math.min(u, d), p = Math.max(u, d), g = Math.min(n.line, e.line), v = Math.min(t.lastLine(), Math.max(n.line, e.line)); g <= v; g++) {
                                            var m = qt(o, g).text,
                                                b = q(m, f, a);
                                            f == p ? i.push(new xi(te(g, b), te(g, b))) : m.length > b && i.push(new xi(te(g, b), te(g, q(m, p, a))))
                                        }
                                        i.length || i.push(new xi(n, n)), Xi(o, Oi(t, c.ranges.slice(0, l).concat(i), l), {
                                            origin: "*mouse",
                                            scroll: !1
                                        }), t.scrollIntoView(e)
                                    } else {
                                        var y, w = s,
                                            x = fa(t, e, r.unit),
                                            O = w.anchor;
                                        ee(x.anchor, O) > 0 ? (y = x.head, O = oe(w.from(), x.anchor)) : (y = x.anchor, O = ie(w.to(), x.head));
                                        var C = c.ranges.slice(0);
                                        C[l] = function(t, e) {
                                            var n = e.anchor,
                                                r = e.head,
                                                i = qt(t.doc, n.line);
                                            if (0 == ee(n, r) && n.sticky == r.sticky) return e;
                                            var o = ut(i);
                                            if (!o) return e;
                                            var a = lt(o, n.ch, n.sticky),
                                                s = o[a];
                                            if (s.from != n.ch && s.to != n.ch) return e;
                                            var l, c = a + (s.from == n.ch == (1 != s.level) ? 0 : 1);
                                            if (0 == c || c == o.length) return e;
                                            if (r.line != n.line) l = (r.line - n.line) * ("ltr" == t.doc.direction ? 1 : -1) > 0;
                                            else {
                                                var u = lt(o, r.ch, r.sticky),
                                                    d = u - a || (r.ch - n.ch) * (1 == s.level ? -1 : 1);
                                                l = u == c - 1 || u == c ? d < 0 : d > 0
                                            }
                                            var h = o[c + (l ? -1 : 0)],
                                                f = l == (1 == h.level),
                                                p = f ? h.from : h.to,
                                                g = f ? "after" : "before";
                                            return n.ch == p && n.sticky == g ? e : new xi(new te(n.line, p, g), r)
                                        }(t, new xi(se(o, O), y)), Xi(o, Oi(t, C, l), B)
                                    }
                            }
                            var p = i.wrapper.getBoundingClientRect(),
                                g = 0;

                            function v(e) {
                                t.state.selectingText = !1, g = 1 / 0, e && (wt(e), i.input.focus()), pt(i.wrapper.ownerDocument, "mousemove", m), pt(i.wrapper.ownerDocument, "mouseup", b), o.history.lastSelOrigin = null
                            }
                            var m = Zr(t, function(e) {
                                    0 !== e.buttons && kt(e) ? function e(n) {
                                        var a = ++g,
                                            s = sr(t, n, !0, "rectangle" == r.unit);
                                        if (s)
                                            if (0 != ee(s, h)) {
                                                t.curOp.focus = A(), f(s);
                                                var l = jr(i, o);
                                                (s.line >= l.to || s.line < l.from) && setTimeout(Zr(t, function() {
                                                    g == a && e(n)
                                                }), 150)
                                            } else {
                                                var c = n.clientY < p.top ? -20 : n.clientY > p.bottom ? 20 : 0;
                                                c && setTimeout(Zr(t, function() {
                                                    g == a && (i.scroller.scrollTop += c, e(n))
                                                }), 50)
                                            }
                                    }(e) : v(e)
                                }),
                                b = Zr(t, v);
                            t.state.selectingText = b, ht(i.wrapper.ownerDocument, "mousemove", m), ht(i.wrapper.ownerDocument, "mouseup", b)
                        }(t, r, e, o)
                    }(e, r, o, t) : St(t) == n.scroller && wt(t) : 2 == i ? (r && Wi(e.doc, r), setTimeout(function() {
                        return n.input.focus()
                    }, 20)) : 3 == i && (C ? e.display.input.onContextMenu(t) : xr(e)))
                }
            }

            function fa(t, e, n) {
                if ("char" == n) return new xi(e, e);
                if ("word" == n) return t.findWordAt(e);
                if ("line" == n) return new xi(te(e.line, 0), se(t.doc, te(e.line + 1, 0)));
                var r = n(t, e);
                return new xi(r.from, r.to)
            }

            function pa(t, e, n, r) {
                var i, o;
                if (e.touches) i = e.touches[0].clientX, o = e.touches[0].clientY;
                else try {
                    i = e.clientX, o = e.clientY
                } catch (t) {
                    return !1
                }
                if (i >= Math.floor(t.display.gutters.getBoundingClientRect().right)) return !1;
                r && wt(e);
                var a = t.display,
                    s = a.lineDiv.getBoundingClientRect();
                if (o > s.bottom || !bt(t, n)) return Ot(e);
                o -= s.top - a.viewOffset;
                for (var l = 0; l < t.display.gutterSpecs.length; ++l) {
                    var c = a.gutters.childNodes[l];
                    if (c && c.getBoundingClientRect().right >= i) return gt(t, n, t, Jt(t.doc, o), t.display.gutterSpecs[l].className, e), Ot(e)
                }
            }

            function ga(t, e) {
                return pa(t, e, "gutterClick", !0)
            }

            function va(t, e) {
                On(t.display, e) || function(t, e) {
                    return !!bt(t, "gutterContextMenu") && pa(t, e, "gutterContextMenu", !1)
                }(t, e) || vt(t, e, "contextmenu") || C || t.display.input.onContextMenu(e)
            }

            function ma(t) {
                t.display.wrapper.className = t.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + t.options.theme.replace(/(^|\s)\s*/g, " cm-s-"), zn(t)
            }
            da.prototype.compare = function(t, e, n) {
                return this.time + 400 > t && 0 == ee(e, this.pos) && n == this.button
            };
            var ba = {
                    toString: function() {
                        return "CodeMirror.Init"
                    }
                },
                ya = {},
                wa = {};

            function xa(t, e, n) {
                if (!e != !(n && n != ba)) {
                    var r = t.display.dragFunctions,
                        i = e ? ht : pt;
                    i(t.display.scroller, "dragstart", r.start), i(t.display.scroller, "dragenter", r.enter), i(t.display.scroller, "dragover", r.over), i(t.display.scroller, "dragleave", r.leave), i(t.display.scroller, "drop", r.drop)
                }
            }

            function Oa(t) {
                t.options.lineWrapping ? (L(t.display.wrapper, "CodeMirror-wrap"), t.display.sizer.style.minWidth = "", t.display.sizerWidth = null) : (j(t.display.wrapper, "CodeMirror-wrap"), We(t)), ar(t), cr(t), zn(t), setTimeout(function() {
                    return Rr(t)
                }, 100)
            }

            function Ca(t, e) {
                var n = this;
                if (!(this instanceof Ca)) return new Ca(t, e);
                this.options = e = e ? F(e) : {}, F(ya, e, !1);
                var r = e.value;
                "string" == typeof r ? r = new Po(r, e.mode, null, e.lineSeparator, e.direction) : e.mode && (r.modeOption = e.mode), this.doc = r;
                var i = new Ca.inputStyles[e.inputStyle](this),
                    o = this.display = new pi(t, r, i, e);
                for (var c in o.wrapper.CodeMirror = this, ma(this), e.lineWrapping && (this.display.wrapper.className += " CodeMirror-wrap"), $r(this), this.state = {
                            keyMaps: [],
                            overlays: [],
                            modeGen: 0,
                            overwrite: !1,
                            delayingBlurEvent: !1,
                            focused: !1,
                            suppressEdits: !1,
                            pasteIncoming: -1,
                            cutIncoming: -1,
                            selectingText: !1,
                            draggingText: !1,
                            highlight: new R,
                            keySeq: null,
                            specialChars: null
                        }, e.autofocus && !m && o.input.focus(), a && s < 11 && setTimeout(function() {
                            return n.display.input.reset(!0)
                        }, 20),
                        function(t) {
                            var e = t.display;
                            ht(e.scroller, "mousedown", Zr(t, ha)), ht(e.scroller, "dblclick", a && s < 11 ? Zr(t, function(e) {
                                if (!vt(t, e)) {
                                    var n = sr(t, e);
                                    if (n && !ga(t, e) && !On(t.display, e)) {
                                        wt(e);
                                        var r = t.findWordAt(n);
                                        Wi(t.doc, r.anchor, r.head)
                                    }
                                }
                            }) : function(e) {
                                return vt(t, e) || wt(e)
                            }), ht(e.scroller, "contextmenu", function(e) {
                                return va(t, e)
                            }), ht(e.input.getField(), "contextmenu", function(n) {
                                e.scroller.contains(n.target) || va(t, n)
                            });
                            var n, r = {
                                end: 0
                            };

                            function i() {
                                e.activeTouch && (n = setTimeout(function() {
                                    return e.activeTouch = null
                                }, 1e3), (r = e.activeTouch).end = +new Date)
                            }

                            function o(t, e) {
                                if (null == e.left) return !0;
                                var n = e.left - t.left,
                                    r = e.top - t.top;
                                return n * n + r * r > 400
                            }
                            ht(e.scroller, "touchstart", function(i) {
                                if (!vt(t, i) && ! function(t) {
                                        if (1 != t.touches.length) return !1;
                                        var e = t.touches[0];
                                        return e.radiusX <= 1 && e.radiusY <= 1
                                    }(i) && !ga(t, i)) {
                                    e.input.ensurePolled(), clearTimeout(n);
                                    var o = +new Date;
                                    e.activeTouch = {
                                        start: o,
                                        moved: !1,
                                        prev: o - r.end <= 300 ? r : null
                                    }, 1 == i.touches.length && (e.activeTouch.left = i.touches[0].pageX, e.activeTouch.top = i.touches[0].pageY)
                                }
                            }), ht(e.scroller, "touchmove", function() {
                                e.activeTouch && (e.activeTouch.moved = !0)
                            }), ht(e.scroller, "touchend", function(n) {
                                var r = e.activeTouch;
                                if (r && !On(e, n) && null != r.left && !r.moved && new Date - r.start < 300) {
                                    var a, s = t.coordsChar(e.activeTouch, "page");
                                    a = !r.prev || o(r, r.prev) ? new xi(s, s) : !r.prev.prev || o(r, r.prev.prev) ? t.findWordAt(s) : new xi(te(s.line, 0), se(t.doc, te(s.line + 1, 0))), t.setSelection(a.anchor, a.head), t.focus(), wt(n)
                                }
                                i()
                            }), ht(e.scroller, "touchcancel", i), ht(e.scroller, "scroll", function() {
                                e.scroller.clientHeight && (Lr(t, e.scroller.scrollTop), Nr(t, e.scroller.scrollLeft, !0), gt(t, "scroll", t))
                            }), ht(e.scroller, "mousewheel", function(e) {
                                return yi(t, e)
                            }), ht(e.scroller, "DOMMouseScroll", function(e) {
                                return yi(t, e)
                            }), ht(e.wrapper, "scroll", function() {
                                return e.wrapper.scrollTop = e.wrapper.scrollLeft = 0
                            }), e.dragFunctions = {
                                enter: function(e) {
                                    vt(t, e) || Ct(e)
                                },
                                over: function(e) {
                                    vt(t, e) || (function(t, e) {
                                        var n = sr(t, e);
                                        if (n) {
                                            var r = document.createDocumentFragment();
                                            vr(t, n, r), t.display.dragCursor || (t.display.dragCursor = E("div", null, "CodeMirror-cursors CodeMirror-dragcursors"), t.display.lineSpace.insertBefore(t.display.dragCursor, t.display.cursorDiv)), P(t.display.dragCursor, r)
                                        }
                                    }(t, e), Ct(e))
                                },
                                start: function(e) {
                                    return function(t, e) {
                                        if (a && (!t.state.draggingText || +new Date - Eo < 100)) Ct(e);
                                        else if (!vt(t, e) && !On(t.display, e) && (e.dataTransfer.setData("Text", t.getSelection()), e.dataTransfer.effectAllowed = "copyMove", e.dataTransfer.setDragImage && !h)) {
                                            var n = E("img", null, null, "position: fixed; left: 0; top: 0;");
                                            n.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==", d && (n.width = n.height = 1, t.display.wrapper.appendChild(n), n._top = n.offsetTop), e.dataTransfer.setDragImage(n, 0, 0), d && n.parentNode.removeChild(n)
                                        }
                                    }(t, e)
                                },
                                drop: Zr(t, Mo),
                                leave: function(e) {
                                    vt(t, e) || Do(t)
                                }
                            };
                            var l = e.input.getField();
                            ht(l, "keyup", function(e) {
                                return sa.call(t, e)
                            }), ht(l, "keydown", Zr(t, aa)), ht(l, "keypress", Zr(t, la)), ht(l, "focus", function(e) {
                                return Or(t, e)
                            }), ht(l, "blur", function(e) {
                                return Cr(t, e)
                            })
                        }(this),
                        function() {
                            var t;
                            Lo || (ht(window, "resize", function() {
                                null == t && (t = setTimeout(function() {
                                    t = null, Ao(_o)
                                }, 100))
                            }), ht(window, "blur", function() {
                                return Ao(Cr)
                            }), Lo = !0)
                        }(), Br(this), this.curOp.forceUpdate = !0, Li(this, r), e.autofocus && !m || this.hasFocus() ? setTimeout(function() {
                            n.hasFocus() && !n.state.focused && Or(n)
                        }, 20) : Cr(this), wa) wa.hasOwnProperty(c) && wa[c](this, e[c], ba);
                ui(this), e.finishInit && e.finishInit(this);
                for (var u = 0; u < Sa.length; ++u) Sa[u](this);
                Wr(this), l && e.lineWrapping && "optimizelegibility" == getComputedStyle(o.lineDiv).textRendering && (o.lineDiv.style.textRendering = "auto")
            }
            Ca.defaults = ya, Ca.optionHandlers = wa;
            var Sa = [];

            function ka(t, e, n, r) {
                var i, o = t.doc;
                null == n && (n = "add"), "smart" == n && (o.mode.indent ? i = fe(t, e).state : n = "prev");
                var a = t.options.tabSize,
                    s = qt(o, e),
                    l = V(s.text, null, a);
                s.stateAfter && (s.stateAfter = null);
                var c, u = s.text.match(/^\s*/)[0];
                if (r || /\S/.test(s.text)) {
                    if ("smart" == n && ((c = o.mode.indent(i, s.text.slice(u.length), s.text)) == $ || c > 150)) {
                        if (!r) return;
                        n = "prev"
                    }
                } else c = 0, n = "not";
                "prev" == n ? c = e > o.first ? V(qt(o, e - 1).text, null, a) : 0 : "add" == n ? c = l + t.options.indentUnit : "subtract" == n ? c = l - t.options.indentUnit : "number" == typeof n && (c = l + n), c = Math.max(0, c);
                var d = "",
                    h = 0;
                if (t.options.indentWithTabs)
                    for (var f = Math.floor(c / a); f; --f) h += a, d += "\t";
                if (h < c && (d += K(c - h)), d != u) return ho(o, d, te(e, 0), te(e, u.length), "+input"), s.stateAfter = null, !0;
                for (var p = 0; p < o.sel.ranges.length; p++) {
                    var g = o.sel.ranges[p];
                    if (g.head.line == e && g.head.ch < u.length) {
                        var v = te(e, u.length);
                        Gi(o, p, new xi(v, v));
                        break
                    }
                }
            }
            Ca.defineInitHook = function(t) {
                return Sa.push(t)
            };
            var ja = null;

            function Ta(t) {
                ja = t
            }

            function Pa(t, e, n, r, i) {
                var o = t.doc;
                t.display.shift = !1, r || (r = o.sel);
                var a = +new Date - 200,
                    s = "paste" == i || t.state.pasteIncoming > a,
                    l = At(e),
                    c = null;
                if (s && r.ranges.length > 1)
                    if (ja && ja.text.join("\n") == e) {
                        if (r.ranges.length % ja.text.length == 0) {
                            c = [];
                            for (var u = 0; u < ja.text.length; u++) c.push(o.splitLines(ja.text[u]))
                        }
                    } else l.length == r.ranges.length && t.options.pasteLinesPerSelection && (c = X(l, function(t) {
                        return [t]
                    }));
                for (var d = t.curOp.updateInput, h = r.ranges.length - 1; h >= 0; h--) {
                    var f = r.ranges[h],
                        p = f.from(),
                        g = f.to();
                    f.empty() && (n && n > 0 ? p = te(p.line, p.ch - n) : t.state.overwrite && !s ? g = te(g.line, Math.min(qt(o, g.line).text.length, g.ch + Y(l).length)) : s && ja && ja.lineWise && ja.text.join("\n") == l.join("\n") && (p = g = te(p.line, 0)));
                    var v = {
                        from: p,
                        to: g,
                        text: c ? c[h % c.length] : l,
                        origin: i || (s ? "paste" : t.state.cutIncoming > a ? "cut" : "+input")
                    };
                    ao(t.doc, v), ln(t, "inputRead", t, v)
                }
                e && !s && Ma(t, e), Er(t), t.curOp.updateInput < 2 && (t.curOp.updateInput = d), t.curOp.typing = !0, t.state.pasteIncoming = t.state.cutIncoming = -1
            }

            function Ea(t, e) {
                var n = t.clipboardData && t.clipboardData.getData("Text");
                if (n) return t.preventDefault(), e.isReadOnly() || e.options.disableInput || Jr(e, function() {
                    return Pa(e, n, 0, null, "paste")
                }), !0
            }

            function Ma(t, e) {
                if (t.options.electricChars && t.options.smartIndent)
                    for (var n = t.doc.sel, r = n.ranges.length - 1; r >= 0; r--) {
                        var i = n.ranges[r];
                        if (!(i.head.ch > 100 || r && n.ranges[r - 1].head.line == i.head.line)) {
                            var o = t.getModeAt(i.head),
                                a = !1;
                            if (o.electricChars) {
                                for (var s = 0; s < o.electricChars.length; s++)
                                    if (e.indexOf(o.electricChars.charAt(s)) > -1) {
                                        a = ka(t, i.head.line, "smart");
                                        break
                                    }
                            } else o.electricInput && o.electricInput.test(qt(t.doc, i.head.line).text.slice(0, i.head.ch)) && (a = ka(t, i.head.line, "smart"));
                            a && ln(t, "electricInput", t, i.head.line)
                        }
                    }
            }

            function Da(t) {
                for (var e = [], n = [], r = 0; r < t.doc.sel.ranges.length; r++) {
                    var i = t.doc.sel.ranges[r].head.line,
                        o = {
                            anchor: te(i, 0),
                            head: te(i + 1, 0)
                        };
                    n.push(o), e.push(t.getRange(o.anchor, o.head))
                }
                return {
                    text: e,
                    ranges: n
                }
            }

            function Aa(t, e, n, r) {
                t.setAttribute("autocorrect", n ? "" : "off"), t.setAttribute("autocapitalize", r ? "" : "off"), t.setAttribute("spellcheck", !!e)
            }

            function La() {
                var t = E("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),
                    e = E("div", [t], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
                return l ? t.style.width = "1000px" : t.setAttribute("wrap", "off"), g && (t.style.border = "1px solid black"), Aa(t), e
            }

            function _a(t, e, n, r, i) {
                var o = e,
                    a = n,
                    s = qt(t, e.line),
                    l = i && "rtl" == t.direction ? -n : n;

                function c(o) {
                    var a, c;
                    if ("codepoint" == r) {
                        var u = s.text.charCodeAt(e.ch + (r > 0 ? 0 : -1));
                        if (isNaN(u)) a = null;
                        else {
                            var d = n > 0 ? u >= 55296 && u < 56320 : u >= 56320 && u < 57343;
                            a = new te(e.line, Math.max(0, Math.min(s.text.length, e.ch + n * (d ? 2 : 1))), -n)
                        }
                    } else a = i ? function(t, e, n, r) {
                        var i = ut(e, t.doc.direction);
                        if (!i) return Yo(e, n, r);
                        n.ch >= e.text.length ? (n.ch = e.text.length, n.sticky = "before") : n.ch <= 0 && (n.ch = 0, n.sticky = "after");
                        var o = lt(i, n.ch, n.sticky),
                            a = i[o];
                        if ("ltr" == t.doc.direction && a.level % 2 == 0 && (r > 0 ? a.to > n.ch : a.from < n.ch)) return Yo(e, n, r);
                        var s, l = function(t, n) {
                                return Ko(e, t instanceof te ? t.ch : t, n)
                            },
                            c = function(n) {
                                return t.options.lineWrapping ? (s = s || An(t, e), Zn(t, e, s, n)) : {
                                    begin: 0,
                                    end: e.text.length
                                }
                            },
                            u = c("before" == n.sticky ? l(n, -1) : n.ch);
                        if ("rtl" == t.doc.direction || 1 == a.level) {
                            var d = 1 == a.level == r < 0,
                                h = l(n, d ? 1 : -1);
                            if (null != h && (d ? h <= a.to && h <= u.end : h >= a.from && h >= u.begin)) {
                                var f = d ? "before" : "after";
                                return new te(n.line, h, f)
                            }
                        }
                        var p = function(t, e, r) {
                                for (var o = function(t, e) {
                                        return e ? new te(n.line, l(t, 1), "before") : new te(n.line, t, "after")
                                    }; t >= 0 && t < i.length; t += e) {
                                    var a = i[t],
                                        s = e > 0 == (1 != a.level),
                                        c = s ? r.begin : l(r.end, -1);
                                    if (a.from <= c && c < a.to) return o(c, s);
                                    if (c = s ? a.from : l(a.to, -1), r.begin <= c && c < r.end) return o(c, s)
                                }
                            },
                            g = p(o + r, r, u);
                        if (g) return g;
                        var v = r > 0 ? u.end : l(u.begin, -1);
                        return null == v || r > 0 && v == e.text.length || !(g = p(r > 0 ? 0 : i.length - 1, r, c(v))) ? null : g
                    }(t.cm, s, e, n) : Yo(s, e, n);
                    if (null == a) {
                        if (o || (c = e.line + l) < t.first || c >= t.first + t.size || (e = new te(c, e.ch, e.sticky), !(s = qt(t, c)))) return !1;
                        e = Xo(i, t.cm, s, e.line, l)
                    } else e = a;
                    return !0
                }
                if ("char" == r || "codepoint" == r) c();
                else if ("column" == r) c(!0);
                else if ("word" == r || "group" == r)
                    for (var u = null, d = "group" == r, h = t.cm && t.cm.getHelper(e, "wordChars"), f = !0; !(n < 0) || c(!f); f = !1) {
                        var p = s.text.charAt(e.ch) || "\n",
                            g = et(p, h) ? "w" : d && "\n" == p ? "n" : !d || /\s/.test(p) ? null : "p";
                        if (!d || f || g || (g = "s"), u && u != g) {
                            n < 0 && (n = 1, c(), e.sticky = "after");
                            break
                        }
                        if (g && (u = g), n > 0 && !c(!f)) break
                    }
                var v = no(t, e, o, a, !0);
                return ne(o, v) && (v.hitSide = !0), v
            }

            function Na(t, e, n, r) {
                var i, o, a = t.doc,
                    s = e.left;
                if ("page" == r) {
                    var l = Math.min(t.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight),
                        c = Math.max(l - .5 * er(t.display), 3);
                    i = (n > 0 ? e.bottom : e.top) + n * c
                } else "line" == r && (i = n > 0 ? e.bottom + 3 : e.top - 3);
                for (;
                    (o = Xn(t, s, i)).outside;) {
                    if (n < 0 ? i <= 0 : i >= a.height) {
                        o.hitSide = !0;
                        break
                    }
                    i += 5 * n
                }
                return o
            }
            var Ia = function(t) {
                this.cm = t, this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null, this.polling = new R, this.composing = null, this.gracePeriod = !1, this.readDOMTimeout = null
            };

            function Fa(t, e) {
                var n = Dn(t, e.line);
                if (!n || n.hidden) return null;
                var r = qt(t.doc, e.line),
                    i = En(n, r, e.line),
                    o = ut(r, t.doc.direction),
                    a = "left";
                o && (a = lt(o, e.ch) % 2 ? "right" : "left");
                var s = In(i.map, e.ch, a);
                return s.offset = "right" == s.collapse ? s.end : s.start, s
            }

            function Va(t, e) {
                return e && (t.bad = !0), t
            }

            function Ra(t, e, n) {
                var r;
                if (e == t.display.lineDiv) {
                    if (!(r = t.display.lineDiv.childNodes[n])) return Va(t.clipPos(te(t.display.viewTo - 1)), !0);
                    e = null, n = 0
                } else
                    for (r = e;; r = r.parentNode) {
                        if (!r || r == t.display.lineDiv) return null;
                        if (r.parentNode && r.parentNode == t.display.lineDiv) break
                    }
                for (var i = 0; i < t.display.view.length; i++) {
                    var o = t.display.view[i];
                    if (o.node == r) return za(o, e, n)
                }
            }

            function za(t, e, n) {
                var r = t.text.firstChild,
                    i = !1;
                if (!e || !D(r, e)) return Va(te(Xt(t.line), 0), !0);
                if (e == r && (i = !0, e = r.childNodes[n], n = 0, !e)) {
                    var o = t.rest ? Y(t.rest) : t.line;
                    return Va(te(Xt(o), o.text.length), i)
                }
                var a = 3 == e.nodeType ? e : null,
                    s = e;
                for (a || 1 != e.childNodes.length || 3 != e.firstChild.nodeType || (a = e.firstChild, n && (n = a.nodeValue.length)); s.parentNode != r;) s = s.parentNode;
                var l = t.measure,
                    c = l.maps;

                function u(e, n, r) {
                    for (var i = -1; i < (c ? c.length : 0); i++)
                        for (var o = i < 0 ? l.map : c[i], a = 0; a < o.length; a += 3) {
                            var s = o[a + 2];
                            if (s == e || s == n) {
                                var u = Xt(i < 0 ? t.line : t.rest[i]),
                                    d = o[a] + r;
                                return (r < 0 || s != e) && (d = o[a + (r ? 1 : 0)]), te(u, d)
                            }
                        }
                }
                var d = u(a, s, n);
                if (d) return Va(d, i);
                for (var h = s.nextSibling, f = a ? a.nodeValue.length - n : 0; h; h = h.nextSibling) {
                    if (d = u(h, h.firstChild, 0)) return Va(te(d.line, d.ch - f), i);
                    f += h.textContent.length
                }
                for (var p = s.previousSibling, g = n; p; p = p.previousSibling) {
                    if (d = u(p, p.firstChild, -1)) return Va(te(d.line, d.ch + g), i);
                    g += p.textContent.length
                }
            }
            Ia.prototype.init = function(t) {
                var e = this,
                    n = this,
                    r = n.cm,
                    i = n.div = t.lineDiv;

                function o(t) {
                    for (var e = t.target; e; e = e.parentNode) {
                        if (e == i) return !0;
                        if (/\bCodeMirror-(?:line)?widget\b/.test(e.className)) break
                    }
                    return !1
                }

                function a(t) {
                    if (o(t) && !vt(r, t)) {
                        if (r.somethingSelected()) Ta({
                            lineWise: !1,
                            text: r.getSelections()
                        }), "cut" == t.type && r.replaceSelection("", null, "cut");
                        else {
                            if (!r.options.lineWiseCopyCut) return;
                            var e = Da(r);
                            Ta({
                                lineWise: !0,
                                text: e.text
                            }), "cut" == t.type && r.operation(function() {
                                r.setSelections(e.ranges, 0, U), r.replaceSelection("", null, "cut")
                            })
                        }
                        if (t.clipboardData) {
                            t.clipboardData.clearData();
                            var a = ja.text.join("\n");
                            if (t.clipboardData.setData("Text", a), t.clipboardData.getData("Text") == a) return void t.preventDefault()
                        }
                        var s = La(),
                            l = s.firstChild;
                        r.display.lineSpace.insertBefore(s, r.display.lineSpace.firstChild), l.value = ja.text.join("\n");
                        var c = document.activeElement;
                        N(l), setTimeout(function() {
                            r.display.lineSpace.removeChild(s), c.focus(), c == i && n.showPrimarySelection()
                        }, 50)
                    }
                }
                Aa(i, r.options.spellcheck, r.options.autocorrect, r.options.autocapitalize), ht(i, "paste", function(t) {
                    !o(t) || vt(r, t) || Ea(t, r) || s <= 11 && setTimeout(Zr(r, function() {
                        return e.updateFromDOM()
                    }), 20)
                }), ht(i, "compositionstart", function(t) {
                    e.composing = {
                        data: t.data,
                        done: !1
                    }
                }), ht(i, "compositionupdate", function(t) {
                    e.composing || (e.composing = {
                        data: t.data,
                        done: !1
                    })
                }), ht(i, "compositionend", function(t) {
                    e.composing && (t.data != e.composing.data && e.readFromDOMSoon(), e.composing.done = !0)
                }), ht(i, "touchstart", function() {
                    return n.forceCompositionEnd()
                }), ht(i, "input", function() {
                    e.composing || e.readFromDOMSoon()
                }), ht(i, "copy", a), ht(i, "cut", a)
            }, Ia.prototype.screenReaderLabelChanged = function(t) {
                t ? this.div.setAttribute("aria-label", t) : this.div.removeAttribute("aria-label")
            }, Ia.prototype.prepareSelection = function() {
                var t = gr(this.cm, !1);
                return t.focus = document.activeElement == this.div, t
            }, Ia.prototype.showSelection = function(t, e) {
                t && this.cm.display.view.length && ((t.focus || e) && this.showPrimarySelection(), this.showMultipleSelections(t))
            }, Ia.prototype.getSelection = function() {
                return this.cm.display.wrapper.ownerDocument.getSelection()
            }, Ia.prototype.showPrimarySelection = function() {
                var t = this.getSelection(),
                    e = this.cm,
                    r = e.doc.sel.primary(),
                    i = r.from(),
                    o = r.to();
                if (e.display.viewTo == e.display.viewFrom || i.line >= e.display.viewTo || o.line < e.display.viewFrom) t.removeAllRanges();
                else {
                    var a = Ra(e, t.anchorNode, t.anchorOffset),
                        s = Ra(e, t.focusNode, t.focusOffset);
                    if (!a || a.bad || !s || s.bad || 0 != ee(oe(a, s), i) || 0 != ee(ie(a, s), o)) {
                        var l = e.display.view,
                            c = i.line >= e.display.viewFrom && Fa(e, i) || {
                                node: l[0].measure.map[2],
                                offset: 0
                            },
                            u = o.line < e.display.viewTo && Fa(e, o);
                        if (!u) {
                            var d = l[l.length - 1].measure,
                                h = d.maps ? d.maps[d.maps.length - 1] : d.map;
                            u = {
                                node: h[h.length - 1],
                                offset: h[h.length - 2] - h[h.length - 3]
                            }
                        }
                        if (c && u) {
                            var f, p = t.rangeCount && t.getRangeAt(0);
                            try {
                                f = k(c.node, c.offset, u.offset, u.node)
                            } catch (t) {}
                            f && (!n && e.state.focused ? (t.collapse(c.node, c.offset), f.collapsed || (t.removeAllRanges(), t.addRange(f))) : (t.removeAllRanges(), t.addRange(f)), p && null == t.anchorNode ? t.addRange(p) : n && this.startGracePeriod()), this.rememberSelection()
                        } else t.removeAllRanges()
                    }
                }
            }, Ia.prototype.startGracePeriod = function() {
                var t = this;
                clearTimeout(this.gracePeriod), this.gracePeriod = setTimeout(function() {
                    t.gracePeriod = !1, t.selectionChanged() && t.cm.operation(function() {
                        return t.cm.curOp.selectionChanged = !0
                    })
                }, 20)
            }, Ia.prototype.showMultipleSelections = function(t) {
                P(this.cm.display.cursorDiv, t.cursors), P(this.cm.display.selectionDiv, t.selection)
            }, Ia.prototype.rememberSelection = function() {
                var t = this.getSelection();
                this.lastAnchorNode = t.anchorNode, this.lastAnchorOffset = t.anchorOffset, this.lastFocusNode = t.focusNode, this.lastFocusOffset = t.focusOffset
            }, Ia.prototype.selectionInEditor = function() {
                var t = this.getSelection();
                if (!t.rangeCount) return !1;
                var e = t.getRangeAt(0).commonAncestorContainer;
                return D(this.div, e)
            }, Ia.prototype.focus = function() {
                "nocursor" != this.cm.options.readOnly && (this.selectionInEditor() && document.activeElement == this.div || this.showSelection(this.prepareSelection(), !0), this.div.focus())
            }, Ia.prototype.blur = function() {
                this.div.blur()
            }, Ia.prototype.getField = function() {
                return this.div
            }, Ia.prototype.supportsTouch = function() {
                return !0
            }, Ia.prototype.receivedFocus = function() {
                var t = this;
                this.selectionInEditor() ? this.pollSelection() : Jr(this.cm, function() {
                    return t.cm.curOp.selectionChanged = !0
                }), this.polling.set(this.cm.options.pollInterval, function e() {
                    t.cm.state.focused && (t.pollSelection(), t.polling.set(t.cm.options.pollInterval, e))
                })
            }, Ia.prototype.selectionChanged = function() {
                var t = this.getSelection();
                return t.anchorNode != this.lastAnchorNode || t.anchorOffset != this.lastAnchorOffset || t.focusNode != this.lastFocusNode || t.focusOffset != this.lastFocusOffset
            }, Ia.prototype.pollSelection = function() {
                if (null == this.readDOMTimeout && !this.gracePeriod && this.selectionChanged()) {
                    var t = this.getSelection(),
                        e = this.cm;
                    if (v && u && this.cm.display.gutterSpecs.length && function(t) {
                            for (var e = t; e; e = e.parentNode)
                                if (/CodeMirror-gutter-wrapper/.test(e.className)) return !0;
                            return !1
                        }(t.anchorNode)) return this.cm.triggerOnKeyDown({
                        type: "keydown",
                        keyCode: 8,
                        preventDefault: Math.abs
                    }), this.blur(), void this.focus();
                    if (!this.composing) {
                        this.rememberSelection();
                        var n = Ra(e, t.anchorNode, t.anchorOffset),
                            r = Ra(e, t.focusNode, t.focusOffset);
                        n && r && Jr(e, function() {
                            Xi(e.doc, Ci(n, r), U), (n.bad || r.bad) && (e.curOp.selectionChanged = !0)
                        })
                    }
                }
            }, Ia.prototype.pollContent = function() {
                null != this.readDOMTimeout && (clearTimeout(this.readDOMTimeout), this.readDOMTimeout = null);
                var t, e, n, r = this.cm,
                    i = r.display,
                    o = r.doc.sel.primary(),
                    a = o.from(),
                    s = o.to();
                if (0 == a.ch && a.line > r.firstLine() && (a = te(a.line - 1, qt(r.doc, a.line - 1).length)), s.ch == qt(r.doc, s.line).text.length && s.line < r.lastLine() && (s = te(s.line + 1, 0)), a.line < i.viewFrom || s.line > i.viewTo - 1) return !1;
                a.line == i.viewFrom || 0 == (t = lr(r, a.line)) ? (e = Xt(i.view[0].line), n = i.view[0].node) : (e = Xt(i.view[t].line), n = i.view[t - 1].node.nextSibling);
                var l, c, u = lr(r, s.line);
                if (u == i.view.length - 1 ? (l = i.viewTo - 1, c = i.lineDiv.lastChild) : (l = Xt(i.view[u + 1].line) - 1, c = i.view[u + 1].node.previousSibling), !n) return !1;
                for (var d = r.doc.splitLines(function(t, e, n, r, i) {
                        var o = "",
                            a = !1,
                            s = t.doc.lineSeparator(),
                            l = !1;

                        function c() {
                            a && (o += s, l && (o += s), a = l = !1)
                        }

                        function u(t) {
                            t && (c(), o += t)
                        }

                        function d(e) {
                            if (1 == e.nodeType) {
                                var n = e.getAttribute("cm-text");
                                if (n) return void u(n);
                                var o, h = e.getAttribute("cm-marker");
                                if (h) {
                                    var f = t.findMarks(te(r, 0), te(i + 1, 0), (v = +h, function(t) {
                                        return t.id == v
                                    }));
                                    return void(f.length && (o = f[0].find(0)) && u(Gt(t.doc, o.from, o.to).join(s)))
                                }
                                if ("false" == e.getAttribute("contenteditable")) return;
                                var p = /^(pre|div|p|li|table|br)$/i.test(e.nodeName);
                                if (!/^br$/i.test(e.nodeName) && 0 == e.textContent.length) return;
                                p && c();
                                for (var g = 0; g < e.childNodes.length; g++) d(e.childNodes[g]);
                                /^(pre|p)$/i.test(e.nodeName) && (l = !0), p && (a = !0)
                            } else 3 == e.nodeType && u(e.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
                            var v
                        }
                        for (; d(e), e != n;) e = e.nextSibling, l = !1;
                        return o
                    }(r, n, c, e, l)), h = Gt(r.doc, te(e, 0), te(l, qt(r.doc, l).text.length)); d.length > 1 && h.length > 1;)
                    if (Y(d) == Y(h)) d.pop(), h.pop(), l--;
                    else {
                        if (d[0] != h[0]) break;
                        d.shift(), h.shift(), e++
                    } for (var f = 0, p = 0, g = d[0], v = h[0], m = Math.min(g.length, v.length); f < m && g.charCodeAt(f) == v.charCodeAt(f);) ++f;
                for (var b = Y(d), y = Y(h), w = Math.min(b.length - (1 == d.length ? f : 0), y.length - (1 == h.length ? f : 0)); p < w && b.charCodeAt(b.length - p - 1) == y.charCodeAt(y.length - p - 1);) ++p;
                if (1 == d.length && 1 == h.length && e == a.line)
                    for (; f && f > a.ch && b.charCodeAt(b.length - p - 1) == y.charCodeAt(y.length - p - 1);) f--, p++;
                d[d.length - 1] = b.slice(0, b.length - p).replace(/^\u200b+/, ""), d[0] = d[0].slice(f).replace(/\u200b+$/, "");
                var x = te(e, f),
                    O = te(l, h.length ? Y(h).length - p : 0);
                return d.length > 1 || d[0] || ee(x, O) ? (ho(r.doc, d, x, O, "+input"), !0) : void 0
            }, Ia.prototype.ensurePolled = function() {
                this.forceCompositionEnd()
            }, Ia.prototype.reset = function() {
                this.forceCompositionEnd()
            }, Ia.prototype.forceCompositionEnd = function() {
                this.composing && (clearTimeout(this.readDOMTimeout), this.composing = null, this.updateFromDOM(), this.div.blur(), this.div.focus())
            }, Ia.prototype.readFromDOMSoon = function() {
                var t = this;
                null == this.readDOMTimeout && (this.readDOMTimeout = setTimeout(function() {
                    if (t.readDOMTimeout = null, t.composing) {
                        if (!t.composing.done) return;
                        t.composing = null
                    }
                    t.updateFromDOM()
                }, 80))
            }, Ia.prototype.updateFromDOM = function() {
                var t = this;
                !this.cm.isReadOnly() && this.pollContent() || Jr(this.cm, function() {
                    return cr(t.cm)
                })
            }, Ia.prototype.setUneditable = function(t) {
                t.contentEditable = "false"
            }, Ia.prototype.onKeyPress = function(t) {
                0 == t.charCode || this.composing || (t.preventDefault(), this.cm.isReadOnly() || Zr(this.cm, Pa)(this.cm, String.fromCharCode(null == t.charCode ? t.keyCode : t.charCode), 0))
            }, Ia.prototype.readOnlyChanged = function(t) {
                this.div.contentEditable = String("nocursor" != t)
            }, Ia.prototype.onContextMenu = function() {}, Ia.prototype.resetPosition = function() {}, Ia.prototype.needsContentAttribute = !0;
            var Ha = function(t) {
                this.cm = t, this.prevInput = "", this.pollingFast = !1, this.polling = new R, this.hasSelection = !1, this.composing = null
            };
            Ha.prototype.init = function(t) {
                    var e = this,
                        n = this,
                        r = this.cm;
                    this.createField(t);
                    var i = this.textarea;

                    function o(t) {
                        if (!vt(r, t)) {
                            if (r.somethingSelected()) Ta({
                                lineWise: !1,
                                text: r.getSelections()
                            });
                            else {
                                if (!r.options.lineWiseCopyCut) return;
                                var e = Da(r);
                                Ta({
                                    lineWise: !0,
                                    text: e.text
                                }), "cut" == t.type ? r.setSelections(e.ranges, null, U) : (n.prevInput = "", i.value = e.text.join("\n"), N(i))
                            }
                            "cut" == t.type && (r.state.cutIncoming = +new Date)
                        }
                    }
                    t.wrapper.insertBefore(this.wrapper, t.wrapper.firstChild), g && (i.style.width = "0px"), ht(i, "input", function() {
                        a && s >= 9 && e.hasSelection && (e.hasSelection = null), n.poll()
                    }), ht(i, "paste", function(t) {
                        vt(r, t) || Ea(t, r) || (r.state.pasteIncoming = +new Date, n.fastPoll())
                    }), ht(i, "cut", o), ht(i, "copy", o), ht(t.scroller, "paste", function(e) {
                        if (!On(t, e) && !vt(r, e)) {
                            if (!i.dispatchEvent) return r.state.pasteIncoming = +new Date, void n.focus();
                            var o = new Event("paste");
                            o.clipboardData = e.clipboardData, i.dispatchEvent(o)
                        }
                    }), ht(t.lineSpace, "selectstart", function(e) {
                        On(t, e) || wt(e)
                    }), ht(i, "compositionstart", function() {
                        var t = r.getCursor("from");
                        n.composing && n.composing.range.clear(), n.composing = {
                            start: t,
                            range: r.markText(t, r.getCursor("to"), {
                                className: "CodeMirror-composing"
                            })
                        }
                    }), ht(i, "compositionend", function() {
                        n.composing && (n.poll(), n.composing.range.clear(), n.composing = null)
                    })
                }, Ha.prototype.createField = function(t) {
                    this.wrapper = La(), this.textarea = this.wrapper.firstChild
                }, Ha.prototype.screenReaderLabelChanged = function(t) {
                    t ? this.textarea.setAttribute("aria-label", t) : this.textarea.removeAttribute("aria-label")
                }, Ha.prototype.prepareSelection = function() {
                    var t = this.cm,
                        e = t.display,
                        n = t.doc,
                        r = gr(t);
                    if (t.options.moveInputWithCursor) {
                        var i = Gn(t, n.sel.primary().head, "div"),
                            o = e.wrapper.getBoundingClientRect(),
                            a = e.lineDiv.getBoundingClientRect();
                        r.teTop = Math.max(0, Math.min(e.wrapper.clientHeight - 10, i.top + a.top - o.top)), r.teLeft = Math.max(0, Math.min(e.wrapper.clientWidth - 10, i.left + a.left - o.left))
                    }
                    return r
                }, Ha.prototype.showSelection = function(t) {
                    var e = this.cm.display;
                    P(e.cursorDiv, t.cursors), P(e.selectionDiv, t.selection), null != t.teTop && (this.wrapper.style.top = t.teTop + "px", this.wrapper.style.left = t.teLeft + "px")
                }, Ha.prototype.reset = function(t) {
                    if (!this.contextMenuPending && !this.composing) {
                        var e = this.cm;
                        if (e.somethingSelected()) {
                            this.prevInput = "";
                            var n = e.getSelection();
                            this.textarea.value = n, e.state.focused && N(this.textarea), a && s >= 9 && (this.hasSelection = n)
                        } else t || (this.prevInput = this.textarea.value = "", a && s >= 9 && (this.hasSelection = null))
                    }
                }, Ha.prototype.getField = function() {
                    return this.textarea
                }, Ha.prototype.supportsTouch = function() {
                    return !1
                }, Ha.prototype.focus = function() {
                    if ("nocursor" != this.cm.options.readOnly && (!m || A() != this.textarea)) try {
                        this.textarea.focus()
                    } catch (t) {}
                }, Ha.prototype.blur = function() {
                    this.textarea.blur()
                }, Ha.prototype.resetPosition = function() {
                    this.wrapper.style.top = this.wrapper.style.left = 0
                }, Ha.prototype.receivedFocus = function() {
                    this.slowPoll()
                }, Ha.prototype.slowPoll = function() {
                    var t = this;
                    this.pollingFast || this.polling.set(this.cm.options.pollInterval, function() {
                        t.poll(), t.cm.state.focused && t.slowPoll()
                    })
                }, Ha.prototype.fastPoll = function() {
                    var t = !1,
                        e = this;
                    e.pollingFast = !0, e.polling.set(20, function n() {
                        e.poll() || t ? (e.pollingFast = !1, e.slowPoll()) : (t = !0, e.polling.set(60, n))
                    })
                }, Ha.prototype.poll = function() {
                    var t = this,
                        e = this.cm,
                        n = this.textarea,
                        r = this.prevInput;
                    if (this.contextMenuPending || !e.state.focused || Lt(n) && !r && !this.composing || e.isReadOnly() || e.options.disableInput || e.state.keySeq) return !1;
                    var i = n.value;
                    if (i == r && !e.somethingSelected()) return !1;
                    if (a && s >= 9 && this.hasSelection === i || b && /[\uf700-\uf7ff]/.test(i)) return e.display.input.reset(), !1;
                    if (e.doc.sel == e.display.selForContextMenu) {
                        var o = i.charCodeAt(0);
                        if (8203 != o || r || (r = "​"), 8666 == o) return this.reset(), this.cm.execCommand("undo")
                    }
                    for (var l = 0, c = Math.min(r.length, i.length); l < c && r.charCodeAt(l) == i.charCodeAt(l);) ++l;
                    return Jr(e, function() {
                        Pa(e, i.slice(l), r.length - l, null, t.composing ? "*compose" : null), i.length > 1e3 || i.indexOf("\n") > -1 ? n.value = t.prevInput = "" : t.prevInput = i, t.composing && (t.composing.range.clear(), t.composing.range = e.markText(t.composing.start, e.getCursor("to"), {
                            className: "CodeMirror-composing"
                        }))
                    }), !0
                }, Ha.prototype.ensurePolled = function() {
                    this.pollingFast && this.poll() && (this.pollingFast = !1)
                }, Ha.prototype.onKeyPress = function() {
                    a && s >= 9 && (this.hasSelection = null), this.fastPoll()
                }, Ha.prototype.onContextMenu = function(t) {
                    var e = this,
                        n = e.cm,
                        r = n.display,
                        i = e.textarea;
                    e.contextMenuPending && e.contextMenuPending();
                    var o = sr(n, t),
                        c = r.scroller.scrollTop;
                    if (o && !d) {
                        n.options.resetSelectionOnContextMenu && -1 == n.doc.sel.contains(o) && Zr(n, Xi)(n.doc, Ci(o), U);
                        var u, h = i.style.cssText,
                            f = e.wrapper.style.cssText,
                            p = e.wrapper.offsetParent.getBoundingClientRect();
                        if (e.wrapper.style.cssText = "position: static", i.style.cssText = "position: absolute; width: 30px; height: 30px;\n      top: " + (t.clientY - p.top - 5) + "px; left: " + (t.clientX - p.left - 5) + "px;\n      z-index: 1000; background: " + (a ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);", l && (u = window.scrollY), r.input.focus(), l && window.scrollTo(null, u), r.input.reset(), n.somethingSelected() || (i.value = e.prevInput = " "), e.contextMenuPending = m, r.selForContextMenu = n.doc.sel, clearTimeout(r.detectingSelectAll), a && s >= 9 && v(), C) {
                            Ct(t);
                            var g = function() {
                                pt(window, "mouseup", g), setTimeout(m, 20)
                            };
                            ht(window, "mouseup", g)
                        } else setTimeout(m, 50)
                    }

                    function v() {
                        if (null != i.selectionStart) {
                            var t = n.somethingSelected(),
                                o = "​" + (t ? i.value : "");
                            i.value = "⇚", i.value = o, e.prevInput = t ? "" : "​", i.selectionStart = 1, i.selectionEnd = o.length, r.selForContextMenu = n.doc.sel
                        }
                    }

                    function m() {
                        if (e.contextMenuPending == m && (e.contextMenuPending = !1, e.wrapper.style.cssText = f, i.style.cssText = h, a && s < 9 && r.scrollbars.setScrollTop(r.scroller.scrollTop = c), null != i.selectionStart)) {
                            (!a || a && s < 9) && v();
                            var t = 0,
                                o = function() {
                                    r.selForContextMenu == n.doc.sel && 0 == i.selectionStart && i.selectionEnd > 0 && "​" == e.prevInput ? Zr(n, io)(n) : t++ < 10 ? r.detectingSelectAll = setTimeout(o, 500) : (r.selForContextMenu = null, r.input.reset())
                                };
                            r.detectingSelectAll = setTimeout(o, 200)
                        }
                    }
                }, Ha.prototype.readOnlyChanged = function(t) {
                    t || this.reset(), this.textarea.disabled = "nocursor" == t, this.textarea.readOnly = !!t
                }, Ha.prototype.setUneditable = function() {}, Ha.prototype.needsContentAttribute = !1,
                function(t) {
                    var e = t.optionHandlers;

                    function n(n, r, i, o) {
                        t.defaults[n] = r, i && (e[n] = o ? function(t, e, n) {
                            n != ba && i(t, e, n)
                        } : i)
                    }
                    t.defineOption = n, t.Init = ba, n("value", "", function(t, e) {
                        return t.setValue(e)
                    }, !0), n("mode", null, function(t, e) {
                        t.doc.modeOption = e, Pi(t)
                    }, !0), n("indentUnit", 2, Pi, !0), n("indentWithTabs", !1), n("smartIndent", !0), n("tabSize", 4, function(t) {
                        Ei(t), zn(t), cr(t)
                    }, !0), n("lineSeparator", null, function(t, e) {
                        if (t.doc.lineSep = e, e) {
                            var n = [],
                                r = t.doc.first;
                            t.doc.iter(function(t) {
                                for (var i = 0;;) {
                                    var o = t.text.indexOf(e, i);
                                    if (-1 == o) break;
                                    i = o + e.length, n.push(te(r, o))
                                }
                                r++
                            });
                            for (var i = n.length - 1; i >= 0; i--) ho(t.doc, e, n[i], te(n[i].line, n[i].ch + e.length))
                        }
                    }), n("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function(t, e, n) {
                        t.state.specialChars = new RegExp(e.source + (e.test("\t") ? "" : "|\t"), "g"), n != ba && t.refresh()
                    }), n("specialCharPlaceholder", Ze, function(t) {
                        return t.refresh()
                    }, !0), n("electricChars", !0), n("inputStyle", m ? "contenteditable" : "textarea", function() {
                        throw new Error("inputStyle can not (yet) be changed in a running editor")
                    }, !0), n("spellcheck", !1, function(t, e) {
                        return t.getInputField().spellcheck = e
                    }, !0), n("autocorrect", !1, function(t, e) {
                        return t.getInputField().autocorrect = e
                    }, !0), n("autocapitalize", !1, function(t, e) {
                        return t.getInputField().autocapitalize = e
                    }, !0), n("rtlMoveVisually", !w), n("wholeLineUpdateBefore", !0), n("theme", "default", function(t) {
                        ma(t), fi(t)
                    }, !0), n("keyMap", "default", function(t, e, n) {
                        var r = qo(e),
                            i = n != ba && qo(n);
                        i && i.detach && i.detach(t, r), r.attach && r.attach(t, i || null)
                    }), n("extraKeys", null), n("configureMouse", null), n("lineWrapping", !1, Oa, !0), n("gutters", [], function(t, e) {
                        t.display.gutterSpecs = di(e, t.options.lineNumbers), fi(t)
                    }, !0), n("fixedGutter", !0, function(t, e) {
                        t.display.gutters.style.left = e ? ir(t.display) + "px" : "0", t.refresh()
                    }, !0), n("coverGutterNextToScrollbar", !1, function(t) {
                        return Rr(t)
                    }, !0), n("scrollbarStyle", "native", function(t) {
                        $r(t), Rr(t), t.display.scrollbars.setScrollTop(t.doc.scrollTop), t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)
                    }, !0), n("lineNumbers", !1, function(t, e) {
                        t.display.gutterSpecs = di(t.options.gutters, e), fi(t)
                    }, !0), n("firstLineNumber", 1, fi, !0), n("lineNumberFormatter", function(t) {
                        return t
                    }, fi, !0), n("showCursorWhenSelecting", !1, pr, !0), n("resetSelectionOnContextMenu", !0), n("lineWiseCopyCut", !0), n("pasteLinesPerSelection", !0), n("selectionsMayTouch", !1), n("readOnly", !1, function(t, e) {
                        "nocursor" == e && (Cr(t), t.display.input.blur()), t.display.input.readOnlyChanged(e)
                    }), n("screenReaderLabel", null, function(t, e) {
                        e = "" === e ? null : e, t.display.input.screenReaderLabelChanged(e)
                    }), n("disableInput", !1, function(t, e) {
                        e || t.display.input.reset()
                    }, !0), n("dragDrop", !0, xa), n("allowDropFileTypes", null), n("cursorBlinkRate", 530), n("cursorScrollMargin", 0), n("cursorHeight", 1, pr, !0), n("singleCursorHeightPerLine", !0, pr, !0), n("workTime", 100), n("workDelay", 100), n("flattenSpans", !0, Ei, !0), n("addModeClass", !1, Ei, !0), n("pollInterval", 100), n("undoDepth", 200, function(t, e) {
                        return t.doc.history.undoDepth = e
                    }), n("historyEventDelay", 1250), n("viewportMargin", 10, function(t) {
                        return t.refresh()
                    }, !0), n("maxHighlightLength", 1e4, Ei, !0), n("moveInputWithCursor", !0, function(t, e) {
                        e || t.display.input.resetPosition()
                    }), n("tabindex", null, function(t, e) {
                        return t.display.input.getField().tabIndex = e || ""
                    }), n("autofocus", null), n("direction", "ltr", function(t, e) {
                        return t.doc.setDirection(e)
                    }, !0), n("phrases", null)
                }(Ca),
                function(t) {
                    var e = t.optionHandlers,
                        n = t.helpers = {};
                    t.prototype = {
                        constructor: t,
                        focus: function() {
                            window.focus(), this.display.input.focus()
                        },
                        setOption: function(t, n) {
                            var r = this.options,
                                i = r[t];
                            r[t] == n && "mode" != t || (r[t] = n, e.hasOwnProperty(t) && Zr(this, e[t])(this, n, i), gt(this, "optionChange", this, t))
                        },
                        getOption: function(t) {
                            return this.options[t]
                        },
                        getDoc: function() {
                            return this.doc
                        },
                        addKeyMap: function(t, e) {
                            this.state.keyMaps[e ? "push" : "unshift"](qo(t))
                        },
                        removeKeyMap: function(t) {
                            for (var e = this.state.keyMaps, n = 0; n < e.length; ++n)
                                if (e[n] == t || e[n].name == t) return e.splice(n, 1), !0
                        },
                        addOverlay: Qr(function(e, n) {
                            var r = e.token ? e : t.getMode(this.options, e);
                            if (r.startState) throw new Error("Overlays may not be stateful.");
                            ! function(t, e, n) {
                                for (var r = 0, i = n(e); r < t.length && n(t[r]) <= i;) r++;
                                t.splice(r, 0, e)
                            }(this.state.overlays, {
                                mode: r,
                                modeSpec: e,
                                opaque: n && n.opaque,
                                priority: n && n.priority || 0
                            }, function(t) {
                                return t.priority
                            }), this.state.modeGen++, cr(this)
                        }),
                        removeOverlay: Qr(function(t) {
                            for (var e = this.state.overlays, n = 0; n < e.length; ++n) {
                                var r = e[n].modeSpec;
                                if (r == t || "string" == typeof t && r.name == t) return e.splice(n, 1), this.state.modeGen++, void cr(this)
                            }
                        }),
                        indentLine: Qr(function(t, e, n) {
                            "string" != typeof e && "number" != typeof e && (e = null == e ? this.options.smartIndent ? "smart" : "prev" : e ? "add" : "subtract"), Zt(this.doc, t) && ka(this, t, e, n)
                        }),
                        indentSelection: Qr(function(t) {
                            for (var e = this.doc.sel.ranges, n = -1, r = 0; r < e.length; r++) {
                                var i = e[r];
                                if (i.empty()) i.head.line > n && (ka(this, i.head.line, t, !0), n = i.head.line, r == this.doc.sel.primIndex && Er(this));
                                else {
                                    var o = i.from(),
                                        a = i.to(),
                                        s = Math.max(n, o.line);
                                    n = Math.min(this.lastLine(), a.line - (a.ch ? 0 : 1)) + 1;
                                    for (var l = s; l < n; ++l) ka(this, l, t);
                                    var c = this.doc.sel.ranges;
                                    0 == o.ch && e.length == c.length && c[r].from().ch > 0 && Gi(this.doc, r, new xi(o, c[r].to()), U)
                                }
                            }
                        }),
                        getTokenAt: function(t, e) {
                            return be(this, t, e)
                        },
                        getLineTokens: function(t, e) {
                            return be(this, te(t), e, !0)
                        },
                        getTokenTypeAt: function(t) {
                            t = se(this.doc, t);
                            var e, n = he(this, qt(this.doc, t.line)),
                                r = 0,
                                i = (n.length - 1) / 2,
                                o = t.ch;
                            if (0 == o) e = n[2];
                            else
                                for (;;) {
                                    var a = r + i >> 1;
                                    if ((a ? n[2 * a - 1] : 0) >= o) i = a;
                                    else {
                                        if (!(n[2 * a + 1] < o)) {
                                            e = n[2 * a + 2];
                                            break
                                        }
                                        r = a + 1
                                    }
                                }
                            var s = e ? e.indexOf("overlay ") : -1;
                            return s < 0 ? e : 0 == s ? null : e.slice(0, s - 1)
                        },
                        getModeAt: function(e) {
                            var n = this.doc.mode;
                            return n.innerMode ? t.innerMode(n, this.getTokenAt(e).state).mode : n
                        },
                        getHelper: function(t, e) {
                            return this.getHelpers(t, e)[0]
                        },
                        getHelpers: function(t, e) {
                            var r = [];
                            if (!n.hasOwnProperty(e)) return r;
                            var i = n[e],
                                o = this.getModeAt(t);
                            if ("string" == typeof o[e]) i[o[e]] && r.push(i[o[e]]);
                            else if (o[e])
                                for (var a = 0; a < o[e].length; a++) {
                                    var s = i[o[e][a]];
                                    s && r.push(s)
                                } else o.helperType && i[o.helperType] ? r.push(i[o.helperType]) : i[o.name] && r.push(i[o.name]);
                            for (var l = 0; l < i._global.length; l++) {
                                var c = i._global[l];
                                c.pred(o, this) && -1 == z(r, c.val) && r.push(c.val)
                            }
                            return r
                        },
                        getStateAfter: function(t, e) {
                            var n = this.doc;
                            return fe(this, (t = ae(n, null == t ? n.first + n.size - 1 : t)) + 1, e).state
                        },
                        cursorCoords: function(t, e) {
                            var n = this.doc.sel.primary();
                            return Gn(this, null == t ? n.head : "object" == typeof t ? se(this.doc, t) : t ? n.from() : n.to(), e || "page")
                        },
                        charCoords: function(t, e) {
                            return qn(this, se(this.doc, t), e || "page")
                        },
                        coordsChar: function(t, e) {
                            return Xn(this, (t = Wn(this, t, e || "page")).left, t.top)
                        },
                        lineAtHeight: function(t, e) {
                            return t = Wn(this, {
                                top: t,
                                left: 0
                            }, e || "page").top, Jt(this.doc, t + this.display.viewOffset)
                        },
                        heightAtLine: function(t, e, n) {
                            var r, i = !1;
                            if ("number" == typeof t) {
                                var o = this.doc.first + this.doc.size - 1;
                                t < this.doc.first ? t = this.doc.first : t > o && (t = o, i = !0), r = qt(this.doc, t)
                            } else r = t;
                            return Bn(this, r, {
                                top: 0,
                                left: 0
                            }, e || "page", n || i).top + (i ? this.doc.height - Ue(r) : 0)
                        },
                        defaultTextHeight: function() {
                            return er(this.display)
                        },
                        defaultCharWidth: function() {
                            return nr(this.display)
                        },
                        getViewport: function() {
                            return {
                                from: this.display.viewFrom,
                                to: this.display.viewTo
                            }
                        },
                        addWidget: function(t, e, n, r, i) {
                            var o, a, s = this.display,
                                l = (t = Gn(this, se(this.doc, t))).bottom,
                                c = t.left;
                            if (e.style.position = "absolute", e.setAttribute("cm-ignore-events", "true"), this.display.input.setUneditable(e), s.sizer.appendChild(e), "over" == r) l = t.top;
                            else if ("above" == r || "near" == r) {
                                var u = Math.max(s.wrapper.clientHeight, this.doc.height),
                                    d = Math.max(s.sizer.clientWidth, s.lineSpace.clientWidth);
                                ("above" == r || t.bottom + e.offsetHeight > u) && t.top > e.offsetHeight ? l = t.top - e.offsetHeight : t.bottom + e.offsetHeight <= u && (l = t.bottom), c + e.offsetWidth > d && (c = d - e.offsetWidth)
                            }
                            e.style.top = l + "px", e.style.left = e.style.right = "", "right" == i ? (c = s.sizer.clientWidth - e.offsetWidth, e.style.right = "0px") : ("left" == i ? c = 0 : "middle" == i && (c = (s.sizer.clientWidth - e.offsetWidth) / 2), e.style.left = c + "px"), n && (null != (a = Tr(o = this, {
                                left: c,
                                top: l,
                                right: c + e.offsetWidth,
                                bottom: l + e.offsetHeight
                            })).scrollTop && Lr(o, a.scrollTop), null != a.scrollLeft && Nr(o, a.scrollLeft))
                        },
                        triggerOnKeyDown: Qr(aa),
                        triggerOnKeyPress: Qr(la),
                        triggerOnKeyUp: sa,
                        triggerOnMouseDown: Qr(ha),
                        execCommand: function(t) {
                            if (Jo.hasOwnProperty(t)) return Jo[t].call(null, this)
                        },
                        triggerElectric: Qr(function(t) {
                            Ma(this, t)
                        }),
                        findPosH: function(t, e, n, r) {
                            var i = 1;
                            e < 0 && (i = -1, e = -e);
                            for (var o = se(this.doc, t), a = 0; a < e && !(o = _a(this.doc, o, i, n, r)).hitSide; ++a);
                            return o
                        },
                        moveH: Qr(function(t, e) {
                            var n = this;
                            this.extendSelectionsBy(function(r) {
                                return n.display.shift || n.doc.extend || r.empty() ? _a(n.doc, r.head, t, e, n.options.rtlMoveVisually) : t < 0 ? r.from() : r.to()
                            }, W)
                        }),
                        deleteH: Qr(function(t, e) {
                            var n = this.doc.sel,
                                r = this.doc;
                            n.somethingSelected() ? r.replaceSelection("", null, "+delete") : Go(this, function(n) {
                                var i = _a(r, n.head, t, e, !1);
                                return t < 0 ? {
                                    from: i,
                                    to: n.head
                                } : {
                                    from: n.head,
                                    to: i
                                }
                            })
                        }),
                        findPosV: function(t, e, n, r) {
                            var i = 1,
                                o = r;
                            e < 0 && (i = -1, e = -e);
                            for (var a = se(this.doc, t), s = 0; s < e; ++s) {
                                var l = Gn(this, a, "div");
                                if (null == o ? o = l.left : l.left = o, (a = Na(this, l, i, n)).hitSide) break
                            }
                            return a
                        },
                        moveV: Qr(function(t, e) {
                            var n = this,
                                r = this.doc,
                                i = [],
                                o = !this.display.shift && !r.extend && r.sel.somethingSelected();
                            if (r.extendSelectionsBy(function(a) {
                                    if (o) return t < 0 ? a.from() : a.to();
                                    var s = Gn(n, a.head, "div");
                                    null != a.goalColumn && (s.left = a.goalColumn), i.push(s.left);
                                    var l = Na(n, s, t, e);
                                    return "page" == e && a == r.sel.primary() && Pr(n, qn(n, l, "div").top - s.top), l
                                }, W), i.length)
                                for (var a = 0; a < r.sel.ranges.length; a++) r.sel.ranges[a].goalColumn = i[a]
                        }),
                        findWordAt: function(t) {
                            var e = qt(this.doc, t.line).text,
                                n = t.ch,
                                r = t.ch;
                            if (e) {
                                var i = this.getHelper(t, "wordChars");
                                "before" != t.sticky && r != e.length || !n ? ++r : --n;
                                for (var o = e.charAt(n), a = et(o, i) ? function(t) {
                                        return et(t, i)
                                    } : /\s/.test(o) ? function(t) {
                                        return /\s/.test(t)
                                    } : function(t) {
                                        return !/\s/.test(t) && !et(t)
                                    }; n > 0 && a(e.charAt(n - 1));) --n;
                                for (; r < e.length && a(e.charAt(r));) ++r
                            }
                            return new xi(te(t.line, n), te(t.line, r))
                        },
                        toggleOverwrite: function(t) {
                            null != t && t == this.state.overwrite || ((this.state.overwrite = !this.state.overwrite) ? L(this.display.cursorDiv, "CodeMirror-overwrite") : j(this.display.cursorDiv, "CodeMirror-overwrite"), gt(this, "overwriteToggle", this, this.state.overwrite))
                        },
                        hasFocus: function() {
                            return this.display.input.getField() == A()
                        },
                        isReadOnly: function() {
                            return !(!this.options.readOnly && !this.doc.cantEdit)
                        },
                        scrollTo: Qr(function(t, e) {
                            Mr(this, t, e)
                        }),
                        getScrollInfo: function() {
                            var t = this.display.scroller;
                            return {
                                left: t.scrollLeft,
                                top: t.scrollTop,
                                height: t.scrollHeight - jn(this) - this.display.barHeight,
                                width: t.scrollWidth - jn(this) - this.display.barWidth,
                                clientHeight: Pn(this),
                                clientWidth: Tn(this)
                            }
                        },
                        scrollIntoView: Qr(function(t, e) {
                            null == t ? (t = {
                                from: this.doc.sel.primary().head,
                                to: null
                            }, null == e && (e = this.options.cursorScrollMargin)) : "number" == typeof t ? t = {
                                from: te(t, 0),
                                to: null
                            } : null == t.from && (t = {
                                from: t,
                                to: null
                            }), t.to || (t.to = t.from), t.margin = e || 0, null != t.from.line ? function(t, e) {
                                Dr(t), t.curOp.scrollToPos = e
                            }(this, t) : Ar(this, t.from, t.to, t.margin)
                        }),
                        setSize: Qr(function(t, e) {
                            var n = this,
                                r = function(t) {
                                    return "number" == typeof t || /^\d+$/.test(String(t)) ? t + "px" : t
                                };
                            null != t && (this.display.wrapper.style.width = r(t)), null != e && (this.display.wrapper.style.height = r(e)), this.options.lineWrapping && Rn(this);
                            var i = this.display.viewFrom;
                            this.doc.iter(i, this.display.viewTo, function(t) {
                                if (t.widgets)
                                    for (var e = 0; e < t.widgets.length; e++)
                                        if (t.widgets[e].noHScroll) {
                                            ur(n, i, "widget");
                                            break
                                        }++ i
                            }), this.curOp.forceUpdate = !0, gt(this, "refresh", this)
                        }),
                        operation: function(t) {
                            return Jr(this, t)
                        },
                        startOperation: function() {
                            return Br(this)
                        },
                        endOperation: function() {
                            return Wr(this)
                        },
                        refresh: Qr(function() {
                            var t = this.display.cachedTextHeight;
                            cr(this), this.curOp.forceUpdate = !0, zn(this), Mr(this, this.doc.scrollLeft, this.doc.scrollTop), si(this.display), (null == t || Math.abs(t - er(this.display)) > .5 || this.options.lineWrapping) && ar(this), gt(this, "refresh", this)
                        }),
                        swapDoc: Qr(function(t) {
                            var e = this.doc;
                            return e.cm = null, this.state.selectingText && this.state.selectingText(), Li(this, t), zn(this), this.display.input.reset(), Mr(this, t.scrollLeft, t.scrollTop), this.curOp.forceScroll = !0, ln(this, "swapDoc", this, e), e
                        }),
                        phrase: function(t) {
                            var e = this.options.phrases;
                            return e && Object.prototype.hasOwnProperty.call(e, t) ? e[t] : t
                        },
                        getInputField: function() {
                            return this.display.input.getField()
                        },
                        getWrapperElement: function() {
                            return this.display.wrapper
                        },
                        getScrollerElement: function() {
                            return this.display.scroller
                        },
                        getGutterElement: function() {
                            return this.display.gutters
                        }
                    }, yt(t), t.registerHelper = function(e, r, i) {
                        n.hasOwnProperty(e) || (n[e] = t[e] = {
                            _global: []
                        }), n[e][r] = i
                    }, t.registerGlobalHelper = function(e, r, i, o) {
                        t.registerHelper(e, r, o), n[e]._global.push({
                            pred: i,
                            val: o
                        })
                    }
                }(Ca);
            var $a = "iter insert remove copy getEditor constructor".split(" ");
            for (var Ua in Po.prototype) Po.prototype.hasOwnProperty(Ua) && z($a, Ua) < 0 && (Ca.prototype[Ua] = function(t) {
                return function() {
                    return t.apply(this.doc, arguments)
                }
            }(Po.prototype[Ua]));
            return yt(Po), Ca.inputStyles = {
                    textarea: Ha,
                    contenteditable: Ia
                }, Ca.defineMode = function(t) {
                    Ca.defaults.mode || "null" == t || (Ca.defaults.mode = t),
                        function(t, e) {
                            arguments.length > 2 && (e.dependencies = Array.prototype.slice.call(arguments, 2)), It[t] = e
                        }.apply(this, arguments)
                }, Ca.defineMIME = function(t, e) {
                    Ft[t] = e
                }, Ca.defineMode("null", function() {
                    return {
                        token: function(t) {
                            return t.skipToEnd()
                        }
                    }
                }), Ca.defineMIME("text/plain", "null"), Ca.defineExtension = function(t, e) {
                    Ca.prototype[t] = e
                }, Ca.defineDocExtension = function(t, e) {
                    Po.prototype[t] = e
                }, Ca.fromTextArea = function(t, e) {
                    if ((e = e ? F(e) : {}).value = t.value, !e.tabindex && t.tabIndex && (e.tabindex = t.tabIndex), !e.placeholder && t.placeholder && (e.placeholder = t.placeholder), null == e.autofocus) {
                        var n = A();
                        e.autofocus = n == t || null != t.getAttribute("autofocus") && n == document.body
                    }

                    function r() {
                        t.value = s.getValue()
                    }
                    var i;
                    if (t.form && (ht(t.form, "submit", r), !e.leaveSubmitMethodAlone)) {
                        var o = t.form;
                        i = o.submit;
                        try {
                            var a = o.submit = function() {
                                r(), o.submit = i, o.submit(), o.submit = a
                            }
                        } catch (t) {}
                    }
                    e.finishInit = function(n) {
                        n.save = r, n.getTextArea = function() {
                            return t
                        }, n.toTextArea = function() {
                            n.toTextArea = isNaN, r(), t.parentNode.removeChild(n.getWrapperElement()), t.style.display = "", t.form && (pt(t.form, "submit", r), e.leaveSubmitMethodAlone || "function" != typeof t.form.submit || (t.form.submit = i))
                        }
                    }, t.style.display = "none";
                    var s = Ca(function(e) {
                        return t.parentNode.insertBefore(e, t.nextSibling)
                    }, e);
                    return s
                },
                function(t) {
                    t.off = pt, t.on = ht, t.wheelEventPixels = bi, t.Doc = Po, t.splitLines = At, t.countColumn = V, t.findColumn = q, t.isWordChar = tt, t.Pass = $, t.signal = gt, t.Line = qe, t.changeEnd = Si, t.scrollbarModel = Hr, t.Pos = te, t.cmpPos = ee, t.modes = It, t.mimeModes = Ft, t.resolveMode = Vt, t.getMode = Rt, t.modeExtensions = zt, t.extendMode = Ht, t.copyState = $t, t.startState = Bt, t.innerMode = Ut, t.commands = Jo, t.keyMap = Ro, t.keyName = Wo, t.isModifierKey = Uo, t.lookupKey = $o, t.normalizeKeyMap = Ho, t.StringStream = Wt, t.SharedTextMarker = So, t.TextMarker = Oo, t.LineWidget = yo, t.e_preventDefault = wt, t.e_stopPropagation = xt, t.e_stop = Ct, t.addClass = L, t.contains = D, t.rmClass = j, t.keyNames = No
                }(Ca), Ca.version = "5.59.1", Ca
        }()
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(8),
            i = n.n(r),
            o = n(2),
            a = n.n(o),
            s = n(1),
            l = n.n(s),
            c = n(0),
            u = n(3),
            d = n(9),
            h = n(20);

        function f(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function p(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? f(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : f(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var g = l.a.View.extend({
                events: function() {
                    return this.model.get("events") || {
                        mousedown: "handleClick"
                    }
                },
                attributes: function() {
                    return this.model.get("attributes")
                },
                initialize: function() {
                    var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).config,
                        e = void 0 === t ? {} : t;
                    this.em = e.em, this.editor = e.editor
                },
                handleClick: function(t) {
                    t.preventDefault(), t.stopPropagation();
                    var e = this.editor,
                        n = this.em,
                        r = e.Canvas.getFrameEl().getBoundingClientRect(),
                        i = r.left,
                        o = r.top,
                        a = p(p({}, t), {}, {
                            clientX: t.clientX - i,
                            clientY: t.clientY - o
                        });
                    n.trigger("toolbar:run:before"), this.execCommand(a)
                },
                execCommand: function(t) {
                    var e = {
                            event: t
                        },
                        n = this.model.get("command"),
                        r = this.editor;
                    "function" == typeof n && n(r, null, e), "string" == typeof n && r.runCommand(n, e)
                },
                render: function() {
                    var t = this.editor,
                        e = this.$el,
                        n = this.model,
                        r = n.get("id"),
                        i = n.get("label"),
                        o = t.getConfig("stylePrefix");
                    return e.addClass("".concat(o, "toolbar-item")), r && e.addClass("".concat(o, "toolbar-item__").concat(r)), i && e.append(i), this
                }
            }),
            v = h.a.extend({
                itemView: g,
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    this.config = {
                        editor: t.editor || "",
                        em: t.em
                    }, this.listenTo(this.collection, "reset", this.render)
                }
            }),
            m = l.a.Model.extend({
                defaults: {
                    command: "",
                    attributes: {}
                }
            }),
            b = l.a.Collection.extend({
                model: m
            });

        function y(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function w(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? y(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : y(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var x, O = l.a.$;
        e.default = {
            init: function(t) {
                Object(c.bindAll)(this, "onHover", "onOut", "onClick", "onFrameScroll", "onFrameUpdated", "onContainerChange")
            },
            enable: function() {
                this.frameOff = this.canvasOff = this.adjScroll = null, this.startSelectComponent(), x = 1
            },
            startSelectComponent: function() {
                this.toggleSelectComponent(1), this.em.getSelected() && this.onSelect()
            },
            stopSelectComponent: function() {
                this.toggleSelectComponent()
            },
            toggleSelectComponent: function(t) {
                var e = this,
                    n = this.em,
                    r = n.getConfig("listenToEl"),
                    i = n.getContainer().parentNode,
                    o = t ? "on" : "off",
                    a = {
                        on: u.v,
                        off: u.u
                    };
                !r.length && i && r.push(i), a[o](window, "resize", this.onFrameUpdated), a[o](r, "scroll", this.onContainerChange), n[o]("component:toggled component:remove", this.onSelect, this), n[o]("change:componentHovered", this.onHovered, this), n[o]("component:resize component:styleUpdate component:input", this.updateGlobalPos, this), n[o]("component:update:toolbar", this._upToolbar, this), n[o]("change:canvasOffset", this.updateAttached, this), n[o]("frame:updated", this.onFrameUpdated, this), n[o]("canvas:updateTools", this.onFrameUpdated, this), n.get("Canvas").getFrames().forEach(function(t) {
                    var n, r, i = t.view;
                    i && (n = i.getWindow(), r = i.getBody(), a[o](r, "mouseover", e.onHover), a[o](r, "mouseleave", e.onOut), a[o](r, "click touchend", e.onClick), a[o](n, "scroll", e.onFrameScroll))
                })
            },
            onHover: function(t) {
                t.stopPropagation();
                var e = t.target,
                    n = Object(u.j)(e),
                    r = n && n._getFrame(),
                    i = O(e),
                    o = i.data("model");
                if (!o)
                    for (var a = i.parent(); !o && a.length && !Object(d.g)(a[0]);) o = a.data("model"), a = a.parent();
                if (o && !o.get("hoverable")) {
                    for (var s = o && o.parent(); s && !s.get("hoverable");) s = s.parent();
                    o = s
                }
                this.currentDoc = e.ownerDocument, this.em.setHovered(o), r && this.em.set("currentFrame", r)
            },
            onFrameUpdated: function() {
                this.updateLocalPos(), this.updateGlobalPos()
            },
            onHovered: function(t, e) {
                var n = this,
                    r = {};
                e ? e.views.forEach(function(t) {
                    var i = t.el,
                        o = n.getElementPos(i);
                    r = {
                        el: i,
                        pos: o,
                        component: e,
                        view: Object(u.j)(i)
                    }, n.updateToolsLocal(r), i.ownerDocument === n.currentDoc && (n.elHovered = r)
                }) : (this.currentDoc = null, this.elHovered = 0, this.updateToolsLocal(), this.canvas.getFrames().forEach(function(t) {
                    var e = t.view,
                        r = e && e.getToolsEl();
                    r && n.toggleToolsEl(0, 0, {
                        el: r
                    })
                }))
            },
            onSelect: Object(c.debounce)(function() {
                var t = this.em,
                    e = t.getSelected(),
                    n = t.get("currentFrame") || {},
                    r = e && e.getView(n.model),
                    i = r && r.el,
                    o = {};
                i && Object(d.h)(i) && (o = {
                    el: i,
                    pos: this.getElementPos(i),
                    component: e,
                    view: Object(u.j)(i)
                }), this.elSelected = o, this.updateToolsGlobal(), this.updateToolsLocal(o), this.initResize(e)
            }),
            updateGlobalPos: function() {
                var t = this.getElSelected();
                t.el && (t.pos = this.getElementPos(t.el), this.updateToolsGlobal())
            },
            updateLocalPos: function() {
                var t = this.getElHovered();
                t.el && (t.pos = this.getElementPos(t.el), this.updateToolsLocal())
            },
            getElHovered: function() {
                return this.elHovered || {}
            },
            getElSelected: function() {
                return this.elSelected || {}
            },
            onOut: function() {
                this.em.setHovered(0)
            },
            toggleToolsEl: function(t, e) {
                var n = (arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}).el || this.canvas.getToolsEl(e);
                return n && (n.style.opacity = t ? 1 : 0), n || {}
            },
            showElementOffset: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                x && this.editor.runCommand("show-offset", {
                    el: t,
                    elPos: e,
                    view: n.view,
                    force: 1,
                    top: 0,
                    left: 0
                })
            },
            hideElementOffset: function(t) {
                this.editor.stopCommand("show-offset", {
                    view: t
                })
            },
            showFixedElementOffset: function(t, e) {
                this.editor.runCommand("show-offset", {
                    el: t,
                    elPos: e,
                    state: "Fixed"
                })
            },
            hideFixedElementOffset: function(t, e) {
                this.editor && this.editor.stopCommand("show-offset", {
                    state: "Fixed"
                })
            },
            hideHighlighter: function(t) {
                this.canvas.getHighlighter(t).style.opacity = 0
            },
            onClick: function(t) {
                t.stopPropagation(), t.preventDefault();
                var e = this.em;
                if (e.get("_cmpDrag")) return e.set("_cmpDrag");
                var n = O(t.target),
                    r = n.data("model");
                if (!r)
                    for (var i = n.parent(); !r && i.length && !Object(d.g)(i[0]);) r = i.data("model"), i = i.parent();
                if (r)
                    if (r.get("selectable")) this.select(r, t);
                    else {
                        for (var o = r.parent(); o && !o.get("selectable");) o = o.parent();
                        this.select(o, t)
                    }
            },
            select: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                t && (this.editor.select(t, {
                    scroll: {},
                    event: e
                }), this.initResize(t))
            },
            updateBadge: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    r = O(t).data("model");
                if (r && r.get("badgable")) {
                    var i = this.getBadge(n);
                    if (!n.posOnly) {
                        var o = this.canvas.getConfig(),
                            a = r.getIcon(),
                            s = o.pStylePrefix || "",
                            l = "".concat(s, "badge"),
                            c = o.customBadgeLabel,
                            u = "".concat(a ? '<div class="'.concat(l, '__icon">').concat(a, "</div>") : "", '\n        <div class="').concat(l, '__name">').concat(r.getName(), "</div>");
                        i.innerHTML = c ? c(r) : u
                    }
                    var d = i.style;
                    d.display = "block";
                    var h = i ? i.offsetHeight : 0,
                        f = 0 - h,
                        p = n.topOff - h < 0 ? -n.topOff : f,
                        g = n.leftOff < 0 ? -n.leftOff : 0;
                    d.top = p + "px", d.left = g + "px"
                }
            },
            showHighlighter: function(t) {
                this.canvas.getHighlighter(t).style.opacity = ""
            },
            initResize: function(t) {
                var e, n = this.em,
                    r = this.canvas,
                    o = n ? n.get("Editor") : "",
                    a = (n ? n.get("Config") : "").stylePrefix || "",
                    s = "".concat(a, "resizing"),
                    l = !Object(c.isElement)(t) && Object(u.q)(t) ? t : n.getSelected(),
                    d = l && l.get("resizable"),
                    h = {},
                    f = function(t, e, n) {
                        var r = n.docs;
                        r && r.forEach(function(e) {
                            var n = e.body,
                                r = n.className || "";
                            n.className = ("add" == t ? "".concat(r, " ").concat(s) : r.replace(s, "")).trim()
                        })
                    };
                if (o && d) {
                    var p = Object(c.isElement)(t) ? t : l.getEl();
                    h = {
                        onStart: function(t) {
                            var i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                                o = i.el,
                                a = i.config,
                                s = i.resizer,
                                c = a.keyHeight,
                                d = a.keyWidth,
                                h = a.currentUnit,
                                p = a.keepAutoHeight,
                                g = a.keepAutoWidth;
                            f("add", 0, i), e = n.get("StyleManager").getModelToStyle(l), r.toggleFramesEvents();
                            var v = getComputedStyle(o),
                                m = e.getStyle(),
                                b = m[d];
                            a.autoWidth = g && "auto" === b, isNaN(parseFloat(b)) && (b = v[d]);
                            var y = m[c];
                            a.autoHeight = p && "auto" === y, isNaN(parseFloat(y)) && (y = v[c]), s.startDim.w = parseFloat(b), s.startDim.h = parseFloat(y), x = 0, h && (a.unitHeight = Object(u.i)(y), a.unitWidth = Object(u.i)(b))
                        },
                        onMove: function() {
                            o.trigger("component:resize")
                        },
                        onEnd: function(t, e) {
                            f("remove", 0, e), o.trigger("component:resize"), r.toggleFramesEvents(1), x = 1
                        },
                        updateTarget: function(t, i) {
                            var o = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                            if (e) {
                                var a = o.store,
                                    s = o.selectedHandler,
                                    l = o.config,
                                    c = l.keyHeight,
                                    u = l.keyWidth,
                                    d = l.autoHeight,
                                    h = l.autoWidth,
                                    f = l.unitWidth,
                                    p = l.unitHeight,
                                    g = ["tc", "bc"].indexOf(s) >= 0,
                                    v = ["cl", "cr"].indexOf(s) >= 0,
                                    m = {},
                                    b = a ? "" : 1;
                                if (!g) {
                                    var y = r.getBody().offsetWidth,
                                        x = i.w < y ? i.w : y;
                                    m[u] = h ? "auto" : "".concat(x).concat(f)
                                }
                                v || (m[c] = d ? "auto" : "".concat(i.h).concat(p)), e.addStyle(w(w({}, m), {}, {
                                    en: b
                                }), {
                                    avoidStore: !a
                                });
                                var O = "update:component:style",
                                    C = "".concat(O, ":").concat(c, " ").concat(O, ":").concat(u);
                                n && n.trigger(C, null, null, {
                                    noEmit: 1
                                })
                            }
                        }
                    }, "object" == i()(d) && (h = w(w({}, h), d)), this.resizer = o.runCommand("resize", {
                        el: p,
                        options: h,
                        force: 1
                    })
                } else o.stopCommand("resize"), this.resizer = null
            },
            updateToolbar: function(t) {
                var e = this.config.em,
                    n = t == e ? e.getSelected() : t,
                    r = this.canvas.getToolbarEl(),
                    i = r.style;
                if (n) {
                    var o = n.get("toolbar");
                    if (e.get("Config").showToolbar && o && o.length) {
                        if (i.opacity = "", i.display = "", !this.toolbar) {
                            r.innerHTML = "", this.toolbar = new b(o);
                            var a = new v({
                                collection: this.toolbar,
                                editor: this.editor,
                                em: e
                            });
                            r.appendChild(a.render().el)
                        }
                        this.toolbar.reset(o), i.top = "-100px", i.left = 0
                    } else i.display = "none"
                } else i.opacity = 0
            },
            updateToolbarPos: function(t) {
                var e = this.canvas.getToolbarEl().style;
                e.top = "".concat(t.top).concat("px"), e.left = "".concat(t.left).concat("px"), e.opacity = ""
            },
            getCanvasPosition: function() {
                return this.canvas.getCanvasView().getPosition()
            },
            getBadge: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                return this.canvas.getBadgeEl(t.view)
            },
            onFrameScroll: function() {
                this.updateTools()
            },
            updateTools: function() {
                this.updateToolsLocal(), this.updateGlobalPos()
            },
            isCompSelected: function(t) {
                return t && "selected" === t.get("status")
            },
            updateToolsLocal: function(t) {
                var e = t || this.getElHovered(),
                    n = e.el,
                    r = e.pos,
                    i = e.view,
                    o = e.component;
                if (n) {
                    var a = o.get("hoverable"),
                        s = this.lastHovered !== n,
                        l = s ? {} : {
                            posOnly: 1
                        };
                    s && a && (this.lastHovered = n, this.showHighlighter(i), this.showElementOffset(n, r, {
                        view: i
                    })), this.isCompSelected(o) && (this.hideHighlighter(i), this.hideElementOffset(i));
                    var c = "px",
                        u = this.toggleToolsEl(1, i).style,
                        d = this.canvas.canvasRectOffset(n, r),
                        h = d.top,
                        f = d.left;
                    this.updateBadge(n, r, w(w({}, l), {}, {
                        view: i,
                        topOff: h,
                        leftOff: f
                    })), u.top = h + c, u.left = f + c, u.width = r.width + c, u.height = r.height + c
                } else this.lastHovered = 0
            },
            _upToolbar: Object(c.debounce)(function() {
                this.updateToolsGlobal({
                    force: 1
                })
            }),
            updateToolsGlobal: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = this.getElSelected(),
                    n = e.el,
                    r = e.pos,
                    i = e.component;
                if (!n) return this.toggleToolsEl(), void(this.lastSelected = 0);
                var o = this.canvas;
                (this.lastSelected !== n || t.force) && (this.lastSelected = n, this.updateToolbar(i));
                var a = "px",
                    s = this.toggleToolsEl(1).style,
                    l = o.getTargetToElementFixed(n, o.getToolbarEl(), {
                        pos: r
                    }),
                    c = l.canvasOffsetTop,
                    u = l.canvasOffsetLeft;
                s.top = c + a, s.left = u + a, s.width = r.width + a, s.height = r.height + a, this.updateToolbarPos({
                    top: l.top,
                    left: l.left
                })
            },
            updateAttached: Object(c.debounce)(function() {
                this.updateGlobalPos()
            }),
            onContainerChange: Object(c.debounce)(function() {
                this.em.refreshCanvas()
            }, 150),
            getElementPos: function(t) {
                return this.canvas.getCanvasView().getElementPos(t)
            },
            hideBadge: function() {
                this.getBadge().style.display = "none"
            },
            cleanPrevious: function(t) {
                t && t.set({
                    status: "",
                    state: ""
                })
            },
            getContentWindow: function() {
                return this.canvas.getWindow()
            },
            run: function(t) {
                this.editor = t && t.get("Editor"), this.enable()
            },
            stop: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    r = this.em,
                    i = this.editor;
                this.onHovered(), this.stopSelectComponent(), !n.preserveSelected && r.setSelected(null), this.toggleToolsEl(), i && i.stopCommand("resize")
            }
        }
    }, function(t, e) {
        t.exports = function(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
    }, function(t, e) {
        function n(t, e) {
            for (var n = 0; n < e.length; n++) {
                var r = e[n];
                r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r)
            }
        }
        t.exports = function(t, e, r) {
            return e && n(t.prototype, e), r && n(t, r), t
        }
    }, function(t, e, n) {
        "use strict";
        n.d(e, "a", function() {
            return f
        });
        var r = n(2),
            i = n.n(r),
            o = n(15),
            a = n.n(o),
            s = n(16),
            l = n.n(s),
            c = n(0),
            u = n(3);

        function d(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function h(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? d(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : d(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var f = function() {
            function t() {
                var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                return a()(this, t), this.opts = {
                    container: null,
                    onStart: null,
                    onDrag: null,
                    onEnd: null,
                    setPosition: null,
                    getPosition: null,
                    guidesStatic: null,
                    guidesTarget: null,
                    snapOffset: 5,
                    doc: 0,
                    scale: 1
                }, Object(c.bindAll)(this, "drag", "stop", "keyHandle", "handleScroll"), this.setOptions(e), this.delta = {
                    x: 0,
                    y: 0
                }, this
            }
            return l()(t, [{
                key: "setOptions",
                value: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    this.opts = h(h({}, this.opts), t)
                }
            }, {
                key: "toggleDrag",
                value: function(t) {
                    var e = this.getDocumentEl(),
                        n = this.getContainerEl(),
                        r = this.getWindowEl(),
                        i = t ? "on" : "off",
                        o = {
                            on: u.v,
                            off: u.u
                        };
                    o[i](n, "mousemove dragover", this.drag), o[i](e, "mouseup dragend touchend", this.stop), o[i](e, "keydown", this.keyHandle), o[i](r, "scroll", this.handleScroll)
                }
            }, {
                key: "handleScroll",
                value: function() {
                    var t = this.lastScroll,
                        e = this.delta,
                        n = this.getScrollInfo(),
                        r = {
                            x: n.x - t.x,
                            y: n.y - t.y
                        };
                    this.move(e.x + r.x, e.y + r.y), this.lastScrollDiff = r
                }
            }, {
                key: "start",
                value: function(t) {
                    var e = this.opts,
                        n = e.onStart;
                    this.toggleDrag(1), this.startPointer = this.getPointerPos(t), this.guidesStatic = Object(c.result)(e, "guidesStatic") || [], this.guidesTarget = Object(c.result)(e, "guidesTarget") || [], Object(c.isFunction)(n) && n(t, this), this.startPosition = this.getStartPosition(), this.lastScrollDiff = {
                        x: 0,
                        y: 0
                    }, this.globScrollDiff = {
                        x: 0,
                        y: 0
                    }, this.drag(t)
                }
            }, {
                key: "drag",
                value: function(t) {
                    var e = this,
                        n = this.opts,
                        r = this.lastScrollDiff,
                        i = this.globScrollDiff,
                        o = n.onDrag,
                        a = this.startPointer,
                        s = this.getPointerPos(t),
                        l = {
                            x: i.x + r.x,
                            y: i.y + r.y
                        };
                    this.globScrollDiff = l;
                    var u = {
                        x: s.x - a.x + l.x,
                        y: s.y - a.y + l.y
                    };
                    this.lastScrollDiff = {
                        x: 0,
                        y: 0
                    };
                    var d = this.lockedAxis;
                    "x" === (d = t.shiftKey ? !d && this.detectAxisLock(u.x, u.y) : null) ? u.x = a.x: "y" === d && (u.y = a.y);
                    var f = function(r) {
                            ["x", "y"].forEach(function(t) {
                                return r[t] = r[t] * Object(c.result)(n, "scale")
                            }), e.delta = r, e.move(r.x, r.y), Object(c.isFunction)(o) && o(t, e)
                        },
                        p = h({}, u);
                    if (this.currentPointer = s, this.lockedAxis = d, this.lastScroll = this.getScrollInfo(), f(u), this.guidesTarget.length) {
                        var g = this.snapGuides(p),
                            v = g.newDelta,
                            m = g.trgX,
                            b = g.trgY;
                        (m || b) && f(v)
                    }
                    0 === t.which && this.stop(t)
                }
            }, {
                key: "snapGuides",
                value: function(t) {
                    var e = this,
                        n = t,
                        r = this.trgX,
                        i = this.trgY;
                    return this.guidesTarget.forEach(function(n) {
                        n.x && e.trgX || n.y && e.trgY || (n.active = 0, e.guidesStatic.forEach(function(o) {
                            if (!(n.y && o.x || n.x && o.y)) {
                                var a = n.y && o.y,
                                    s = a ? "y" : "x",
                                    l = n[s],
                                    u = o[s],
                                    d = t[s],
                                    h = a ? i : r;
                                if (e.isPointIn(l, u) && Object(c.isUndefined)(h)) {
                                    var f = d - (l - u);
                                    e.setGuideLock(n, f)
                                }
                            }
                        }))
                    }), r = this.trgX, i = this.trgY, ["x", "y"].forEach(function(r) {
                        var i = r.toUpperCase(),
                            o = e["trg".concat(i)];
                        o && !e.isPointIn(t[r], o.lock) && (e.setGuideLock(o, null), o = null), o && !Object(c.isUndefined)(o.lock) && (n[r] = o.lock)
                    }), {
                        newDelta: n,
                        trgX: this.trgX,
                        trgY: this.trgY
                    }
                }
            }, {
                key: "isPointIn",
                value: function(t, e) {
                    var n = (arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}).offset || this.opts.snapOffset;
                    return t >= e && t <= e + n || t <= e && t >= e - n
                }
            }, {
                key: "setGuideLock",
                value: function(t, e) {
                    var n = Object(c.isUndefined)(t.x) ? "Y" : "X",
                        r = "trg".concat(n);
                    return null !== e ? (t.active = 1, t.lock = e, this[r] = t) : (delete t.active, delete t.lock, delete this[r]), t
                }
            }, {
                key: "stop",
                value: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.delta,
                        r = e.cancel,
                        i = r ? 0 : n.x,
                        o = r ? 0 : n.y;
                    this.toggleDrag(), this.lockedAxis = null, this.move(i, o, 1);
                    var a = this.opts.onEnd;
                    Object(c.isFunction)(a) && a(t, this, {
                        cancelled: r
                    })
                }
            }, {
                key: "keyHandle",
                value: function(t) {
                    Object(u.n)(t) && this.stop(t, {
                        cancel: 1
                    })
                }
            }, {
                key: "move",
                value: function(t, e, n) {
                    var r = this.el,
                        i = this.opts,
                        o = this.startPosition;
                    if (o) {
                        var a = i.setPosition,
                            s = o.x + t,
                            l = o.y + e;
                        this.position = {
                            x: s,
                            y: l,
                            end: n
                        }, Object(c.isFunction)(a) && a(this.position), r && (r.style.left = "".concat(s, "px"), r.style.top = "".concat(l, "px"))
                    }
                }
            }, {
                key: "getContainerEl",
                value: function() {
                    var t = this.opts.container;
                    return t ? [t] : this.getDocumentEl()
                }
            }, {
                key: "getWindowEl",
                value: function() {
                    return this.getContainerEl().map(function(t) {
                        var e = t.ownerDocument || t;
                        return e.defaultView || e.parentWindow
                    })
                }
            }, {
                key: "getDocumentEl",
                value: function(t) {
                    var e = this.opts.doc;
                    if (t = t || this.el, !this.docs) {
                        var n = [document];
                        t && n.push(t.ownerDocument), e && n.push(e), this.docs = n
                    }
                    return this.docs
                }
            }, {
                key: "getPointerPos",
                value: function(t) {
                    var e = this.opts.getPointerPosition,
                        n = Object(u.h)(t);
                    return e ? e(t) : {
                        x: n.clientX,
                        y: n.clientY
                    }
                }
            }, {
                key: "getStartPosition",
                value: function() {
                    var t = this.el,
                        e = this.opts.getPosition,
                        n = {
                            x: 0,
                            y: 0
                        };
                    return Object(c.isFunction)(e) ? n = e() : t && (n = {
                        x: parseFloat(t.style.left),
                        y: parseFloat(t.style.top)
                    }), n
                }
            }, {
                key: "getScrollInfo",
                value: function() {
                    var t = this.opts.doc,
                        e = t && t.body;
                    return {
                        y: e ? e.scrollTop : 0,
                        x: e ? e.scrollLeft : 0
                    }
                }
            }, {
                key: "detectAxisLock",
                value: function(t, e) {
                    var n = t,
                        r = e,
                        i = Math.abs(n),
                        o = Math.abs(r);
                    return r >= i || r <= -i ? "x" : n > o || n < -o ? "y" : void 0
                }
            }]), t
        }()
    }, function(t, e, n) {
        "use strict";
        var r = n(1),
            i = n.n(r),
            o = i.a.$;
        e.a = i.a.View.extend({
            events: {
                change: "handleChange"
            },
            template: function() {
                return '<span class="'.concat(this.holderClass(), '"></span>')
            },
            inputClass: function() {
                return "".concat(this.ppfx, "field")
            },
            holderClass: function() {
                return "".concat(this.ppfx, "input-holder")
            },
            initialize: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = t.ppfx || "";
                this.opts = t, this.ppfx = e, this.em = t.target || {}, this.listenTo(this.model, "change:value", this.handleModelChange)
            },
            elementUpdated: function() {
                this.model.trigger("el:change")
            },
            setValue: function(t) {
                var e = this.model,
                    n = t || e.get("defaults"),
                    r = this.getInputEl();
                r && (r.value = n)
            },
            handleModelChange: function(t, e, n) {
                this.setValue(e, n)
            },
            handleChange: function(t) {
                t.stopPropagation();
                var e = this.getInputEl().value;
                this.model.set({
                    value: e
                }, {
                    fromInput: 1
                }), this.elementUpdated()
            },
            getInputEl: function() {
                if (!this.inputEl) {
                    var t = this.model,
                        e = this.opts.type || "text",
                        n = t.get("placeholder") || t.get("defaults") || t.get("default") || "";
                    this.inputEl = o('<input type="'.concat(e, '" placeholder="').concat(n, '">'))
                }
                return this.inputEl.get(0)
            },
            render: function() {
                this.inputEl = null;
                var t = this.$el;
                return t.addClass(this.inputClass()), t.html(this.template()), t.find(".".concat(this.holderClass())).append(this.getInputEl()), this
            }
        })
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1),
            i = n.n(r),
            o = n(9);
        e.default = i.a.View.extend({
            initialize: function(t) {
                this.config = t.config || {}, this.pfx = this.config.stylePrefix || "", this.target = t.target || {}, this.propTarget = t.propTarget || {}, this.onChange = t.onChange, this.onInputRender = t.onInputRender || {}, this.customValue = t.customValue || {}, this.properties = [];
                var e = this.collection;
                this.listenTo(e, "add", this.addTo), this.listenTo(e, "reset", this.render)
            },
            addTo: function(t, e, n) {
                this.add(t, null, n)
            },
            add: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    r = e || this.el,
                    i = new t.typeView({
                        model: t,
                        name: t.get("name"),
                        id: this.pfx + t.get("property"),
                        target: this.target,
                        propTarget: this.propTarget,
                        onChange: this.onChange,
                        onInputRender: this.onInputRender,
                        config: this.config
                    });
                "composite" != t.get("type") && (i.customValue = this.customValue), i.render();
                var a = i.el;
                this.properties.push(i), i.updateVisibility(), Object(o.b)(r, a, n.at)
            },
            render: function() {
                var t = this,
                    e = this.$el;
                this.clearItems();
                var n = document.createDocumentFragment();
                return this.collection.each(function(e) {
                    return t.add(e, n)
                }), e.empty(), e.append(n), e.attr("class", "".concat(this.pfx, "properties")), this
            },
            remove: function() {
                i.a.View.prototype.remove.apply(this, arguments), this.clearItems()
            },
            clearItems: function() {
                this.properties.forEach(function(t) {
                    return t.remove()
                }), this.properties = []
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r = n(0),
            i = n(1),
            o = n.n(i);
        e.a = o.a.View.extend({
            itemView: "",
            itemsView: "",
            itemType: "type",
            autoAdd: 0,
            initialize: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = arguments.length > 1 ? arguments[1] : void 0;
                this.config = e || t.config || {}, this.autoAdd && this.listenTo(this.collection, "add", this.addTo), this.items = [], this.init()
            },
            init: function() {},
            addTo: function(t) {
                this.add(t)
            },
            itemViewNotFound: function(t) {
                var e = this.config,
                    n = this.ns,
                    r = e.em,
                    i = "".concat(n ? "[".concat(n, "]: ") : "", "'").concat(t, "' type not found");
                r && r.logWarning(i)
            },
            add: function(t, e) {
                var n, i = this.config,
                    o = this.reuseView,
                    a = this.items,
                    s = this.itemsView,
                    l = void 0 === s ? {} : s,
                    c = e || null,
                    u = this.itemView,
                    d = t.get(this.itemType);
                l[d] ? u = l[d] : !d || l[d] || Object(r.includes)(["button", "checkbox", "color", "date", "datetime-local", "email", "file", "hidden", "image", "month", "number", "password", "radio", "range", "reset", "search", "submit", "tel", "text", "time", "url", "week"], d) || this.itemViewNotFound(d), n = t.view && o ? t.view : new u({
                    model: t,
                    config: i
                }, i), a && a.push(n);
                var h = n.render().el;
                c ? c.appendChild(h) : this.$el.append(h)
            },
            render: function() {
                var t = document.createDocumentFragment();
                return this.clearItems(), this.$el.empty(), this.collection.length && this.collection.each(function(e) {
                    this.add(e, t)
                }, this), this.$el.append(t), this.onRender(), this
            },
            onRender: function() {},
            remove: function() {
                this.clearItems(), o.a.View.prototype.remove.apply(this, arguments)
            },
            clearItems: function() {
                this.items
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r, i = n(8),
            o = n.n(i),
            a = n(2),
            s = n.n(a),
            l = n(1),
            c = n.n(l),
            u = n(0);

        function d(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function h(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? d(Object(n), !0).forEach(function(e) {
                    s()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : d(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var f = function t(e) {
            var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];
            return (e || []).forEach(function(e) {
                n.push(e.getId()), t(e.components(), n)
            }), n
        };
        e.a = c.a.Collection.extend({
            initialize: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                this.opt = e, this.listenTo(this, "add", this.onAdd), this.listenTo(this, "remove", this.removeChildren), this.listenTo(this, "reset", this.resetChildren), this.config = e.config, this.em = e.em, this.domc = e.domc
            },
            resetChildren: function(t) {
                var e = this,
                    n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    r = this,
                    i = n.previousModels || [],
                    o = i.filter(function(e) {
                        return !t.get(e.cid)
                    }),
                    a = function t(e) {
                        var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];
                        return e.map(function(e) {
                            n.push(e.getId()), t(e.components(), n)
                        }), n
                    }(t);
                n.keepIds = f(i).filter(function(t) {
                    return a.indexOf(t) >= 0
                }), o.forEach(function(t) {
                    return e.removeChildren(t, r, n)
                }), t.each(function(t) {
                    return e.onAdd(t)
                })
            },
            removeChildren: function(t, e) {
                var n = this,
                    r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                if (t) {
                    var i = this.domc,
                        o = this.em,
                        a = i ? i.allById() : {},
                        s = r.temporary;
                    if (t.prevColl = this, !s) {
                        var l = t.getId(),
                            c = o.get("SelectorManager").getAll(),
                            u = o.get("CssComposer").getAll(),
                            d = (r.keepIds || []).indexOf(l) < 0;
                        delete a[l];
                        var h = d ? u.remove(u.filter(function(t) {
                            return t.getSelectors().getFullString() === "#".concat(l)
                        }), r) : [];
                        if (c.remove(h.map(function(t) {
                                return t.getSelectors().at(0)
                            })), !t.opt.temporary) {
                            var f = o.get("Commands"),
                                p = t.get("style-signature"),
                                g = {
                                    target: t
                                };
                            p && f.run("core:component-style-clear", g), t.removed(), t.trigger("removed"), o.trigger("component:remove", t)
                        }
                        t.components().forEach(function(t) {
                            return n.removeChildren(t, e, r)
                        })
                    }
                    var v = t.components(),
                        m = o.get("UndoManager");
                    o.stopListening(v), o.stopListening(t), o.stopListening(t.get("classes")), m.remove(t), m.remove(v)
                }
            },
            model: function(t, e) {
                var n, r = e.collection.opt,
                    i = r.em,
                    o = i.get("DomComponents").componentTypes;
                e.em = i, e.config = r.config, e.componentTypes = o, e.domc = r.domc;
                for (var a = 0; a < o.length; a++)
                    if (o[a].id == t.type) {
                        n = o[a].model;
                        break
                    } return n || (n = o[o.length - 1].model, i && t.type && i.logWarning("Component type '".concat(t.type, "' not found"), {
                    attrs: t,
                    options: e
                })), new n(t, e)
            },
            parseString: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    i = this.em,
                    o = this.opt.domc,
                    a = i.get("CssComposer"),
                    s = i.get("Parser").parseHtml(t);
                return r || (r = n(5).default), r.checkId(s.html, s.css, o.componentsById, e), s.css && a && !e.temporary && a.addCollection(s.css, h(h({}, e), {}, {
                    extend: 1
                })), s.html
            },
            add: function(t) {
                var e = this,
                    n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                n.keepIds = f(n.previousModels), Object(u.isString)(t) ? t = this.parseString(t, n) : Object(u.isArray)(t) && t.forEach(function(r, i) {
                    if (Object(u.isString)(r)) {
                        var o = e.parseString(r, n);
                        t[i] = Object(u.isArray)(o) && !o.length ? null : o
                    }
                });
                var r = Object(u.isArray)(t);
                t = (r ? t : [t]).filter(function(t) {
                    return t
                }).map(function(t) {
                    return e.processDef(t)
                }), t = r ? Object(u.flatten)(t, 1) : t[0];
                var i = c.a.Collection.prototype.add.apply(this, [t, n]);
                return this.__firstAdd = i, i
            },
            processDef: function(t) {
                if (t.cid && t.ccid) return t;
                var e = this.em,
                    n = this.config,
                    r = (void 0 === n ? {} : n).processor,
                    i = t;
                if (r) {
                    var a = r(i = h({}, i));
                    a && (Object(u.each)(i, function(t, e) {
                        return delete i[e]
                    }), Object(u.extend)(i, a))
                }
                if (i.$$typeof && "object" == o()(i.props)) {
                    (i = h({}, i)).props = h({}, i.props);
                    var s = e.get("DomComponents"),
                        l = e.get("Parser").parserHtml;
                    Object(u.each)(i, function(t, e) {
                        Object(u.includes)(["props", "type"], e) || delete i[e]
                    });
                    var c = i.props,
                        d = c.children;
                    delete c.children, delete i.props;
                    var f = l.splitPropsFromAttr(c);
                    i.attributes = f.attrs, d && (i.components = d), i.type ? s.getType(i.type) || (i.tagName = i.type, delete i.type) : i.type = "textnode", Object(u.extend)(i, f.props)
                }
                return i
            },
            onAdd: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    r = this.domc,
                    i = this.em,
                    o = t.getStyle(),
                    a = i && i.getConfig("avoidInlineStyle");
                if (r && r.Component.ensureInList(t), !Object(u.isEmpty)(o) && !a && i && i.get && i.getConfig("forceClass") && !n.temporary) {
                    var s = t.cid;
                    i.get("CssComposer").setClassRule(s, o), t.setStyle({}), t.addClass(s)
                }
                this.__onAddEnd()
            },
            __onAddEnd: Object(u.debounce)(function() {
                var t = this.domc,
                    e = t && t.allById() || {},
                    n = this.__firstAdd,
                    r = Object(u.isArray)(n) ? n : [n],
                    i = {
                        silent: !0
                    };
                ! function t(n) {
                    n.forEach(function(n) {
                        var r = n.get("__symbol"),
                            o = n.get("__symbolOf");
                        r && Object(u.isArray)(r) && Object(u.isString)(r[0]) && n.set("__symbol", r.map(function(t) {
                            return e[t]
                        }).filter(function(t) {
                            return t
                        }), i), Object(u.isString)(o) && n.set("__symbolOf", e[o], i), t(n.components())
                    })
                }(r)
            })
        })
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1),
            i = n.n(r);
        i.a.$, e.default = i.a.View.extend({
            initialize: function(t) {
                this.config = t || {}, this.editorModel = this.em = this.config.em || {}, this.pfx = this.config.stylePrefix, this.ppfx = this.config.pStylePrefix, this.hoverClass = this.pfx + "hover", this.badgeClass = this.pfx + "badge", this.plhClass = this.pfx + "placeholder", this.freezClass = this.ppfx + "freezed", this.canvas = this.em.get && this.em.get("Canvas"), this.em.get && this.setElement(this.getCanvas()), this.canvas && (this.$canvas = this.$el, this.canvasTool = this.getCanvasTools()), this.init(this.config)
            },
            onFrameScroll: function(t) {},
            getCanvas: function() {
                return this.canvas.getElement()
            },
            getCanvasBody: function() {
                return this.canvas.getBody()
            },
            getCanvasWrapper: function() {
                return this.canvas.getWrapperEl()
            },
            getCanvasTools: function() {
                return this.canvas.getToolsEl()
            },
            offset: function(t) {
                var e = t.getBoundingClientRect();
                return {
                    top: e.top + t.ownerDocument.body.scrollTop,
                    left: e.left + t.ownerDocument.body.scrollLeft
                }
            },
            init: function(t) {},
            callRun: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    n = this.id;
                if (t.trigger("run:".concat(n, ":before"), e), !e || !e.abort) {
                    var r = e.sender || t,
                        i = this.run(t, r, e);
                    return t.trigger("run:".concat(n), i, e), t.trigger("run", n, i, e), i
                }
                t.trigger("abort:".concat(n), e)
            },
            callStop: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    n = this.id,
                    r = e.sender || t;
                t.trigger("stop:".concat(n, ":before"), e);
                var i = this.stop(t, r, e);
                return t.trigger("stop:".concat(n), i, e), t.trigger("stop", n, i, e), i
            },
            stopCommand: function() {
                this.em.get("Commands").stop(this.id)
            },
            run: function(t, e) {},
            stop: function(t, e) {}
        })
    }, function(t, e, n) {
        "use strict";
        var r = n(2),
            i = n.n(r),
            o = n(0),
            a = n(3),
            s = n(29);

        function l(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function c(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? l(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : l(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var u = Object(s.a)().parseStyle;
        e.a = {
            parseStyle: u,
            extendStyle: function(t) {
                return c(c({}, this.getStyle()), t)
            },
            getStyle: function() {
                return c({}, this.get("style") || {})
            },
            setStyle: function() {
                var t = this,
                    e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                Object(o.isString)(e) && (e = u(e));
                var r = this.getStyle(),
                    i = c({}, e);
                this.set("style", i, n);
                var s = Object(a.x)(r, i);
                return Object(o.keys)(s).forEach(function(e) {
                    var n = t.em;
                    t.trigger("change:style:".concat(e)), n && (n.trigger("styleable:change", t, e), n.trigger("styleable:change:".concat(e), t, e))
                }), i
            },
            addStyle: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "",
                    n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                "string" == typeof t ? t = {
                    prop: e
                } : n = e || {}, t = this.extendStyle(t), this.setStyle(t, n)
            },
            removeStyle: function(t) {
                var e = this.getStyle();
                delete e[t], this.setStyle(e)
            },
            styleToString: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = [],
                    n = this.getStyle();
                for (var r in n) {
                    var i = t.important,
                        a = Object(o.isArray)(i) ? i.indexOf(r) >= 0 : i,
                        s = "".concat(n[r]).concat(a ? " !important" : ""),
                        l = "__" == r.substr(0, 2);
                    s && !l && e.push("".concat(r, ":").concat(s, ";"))
                }
                return e.join("")
            },
            getSelectors: function() {
                return this.get("selectors") || this.get("classes")
            },
            getSelectorsString: function() {
                return this.selectorsToString ? this.selectorsToString() : this.getSelectors().getFullString()
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(1),
            a = n.n(o),
            s = n(30),
            l = n(0),
            c = n(3);

        function u(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function d(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? u(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : u(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var h = a.a.Model.extend({
                defaults: {
                    name: "",
                    property: "",
                    type: "",
                    defaults: "",
                    info: "",
                    value: "",
                    icon: "",
                    functionName: "",
                    status: "",
                    visible: !0,
                    fixedValues: ["initial", "inherit"],
                    full: 0,
                    important: 0,
                    toRequire: 0,
                    requires: null,
                    requiresParent: null
                },
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.get("id") || "",
                        r = this.get("name") || "";
                    !this.get("property") && this.set("property", (r || n).replace(/ /g, "-"));
                    var i = this.get("property");
                    !this.get("id") && this.set("id", i), !r && this.set("name", Object(c.c)(i).replace(/-/g, " ")), h.callInit(this, t, e)
                },
                init: function() {},
                clearValue: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return this.set({
                        value: void 0,
                        status: ""
                    }, t), this
                },
                setValue: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                        n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = this.parseValue(t),
                        i = !e;
                    !i && this.set({
                        value: void 0
                    }, {
                        avoidStore: i,
                        silent: !0
                    }), this.set(r, d({
                        avoidStore: i
                    }, n))
                },
                setValueFromInput: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                    this.setValue(t, e, d(d({}, n), {}, {
                        fromInput: 1
                    }))
                },
                parseValue: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = {
                            value: t
                        },
                        r = "!important";
                    if (Object(l.isString)(t) && -1 !== t.indexOf(r) && (n.value = t.replace(r, "").trim(), n.important = 1), !this.get("functionName") && !e.complete) return n;
                    var i = [],
                        o = "".concat(n.value),
                        a = o.indexOf("(") + 1,
                        s = o.lastIndexOf(")"),
                        c = o.substring(0, a - 1);
                    if (c && (n.functionName = c), i.push(a), s >= 0 && i.push(s), n.value = String.prototype.substring.apply(o, i), e.numeric) {
                        var u = parseFloat(n.value);
                        n.unit = n.value.replace(u, ""), n.value = u
                    }
                    return n
                },
                splitValues: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ",",
                        n = [],
                        r = "",
                        i = 0;
                    return (t || "").split("").forEach(function(t) {
                        "(" == t ? (i++, r += "(") : ")" == t && i > 0 ? (i--, r += ")") : t === e && 0 == i ? (n.push(r), r = "") : r += t
                    }), "" !== r && n.push(r), n.map(function(t) {
                        return t.trim()
                    })
                },
                getDefaultValue: function() {
                    return this.get("defaults")
                },
                getFullValue: function(t) {
                    var e = this.get("functionName"),
                        n = this.getDefaultValue(),
                        r = Object(l.isUndefined)(t) ? this.get("value") : t,
                        i = !Object(l.isUndefined)(r) && "" !== r;
                    if (r && n && r === n) return n;
                    if (e && i) {
                        var o = "url" === e ? "'".concat(r.replace(/'/g, ""), "'") : r;
                        r = "".concat(e, "(").concat(o, ")")
                    }
                    return i && this.get("important") && (r = "".concat(r, " !important")), r || ""
                }
            }, {
                callParentInit: function(t, e, n) {
                    var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {};
                    t.prototype.initialize.apply(e, [n, d(d({}, r), {}, {
                        skipInit: 1
                    })])
                },
                callInit: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                    !n.skipInit && t.init(e, n)
                }
            }),
            f = h;

        function p(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function g(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? p(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : p(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var v = f.extend({
                defaults: g(g({}, f.prototype.defaults), {}, {
                    detached: 0,
                    properties: [],
                    separator: " "
                }),
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    f.callParentInit(f, this, t, e);
                    var r = this.get("properties") || [],
                        i = n(24).default;
                    this.set("properties", new i(r)), this.listenTo(this, "change:value", this.updateValues), f.callInit(this, t, e)
                },
                clearValue: function() {
                    return this.get("properties").each(function(t) {
                        return t.clearValue()
                    }), f.prototype.clearValue.apply(this, arguments)
                },
                updateValues: function() {
                    var t = this.getFullValue().split(this.getSplitSeparator());
                    this.get("properties").each(function(e, n) {
                        var r = t.length;
                        t[n] || t[n % r + (1 != r && r % 2 ? 1 : 0)]
                    })
                },
                getSplitSeparator: function() {
                    return new RegExp("".concat(this.get("separator"), "(?![^\\(]*\\))"))
                },
                getDefaultValue: function(t) {
                    var e = this.get("defaults");
                    return e && !t ? e : (e = "", this.get("properties").each(function(t, n) {
                        return e += "".concat(t.getDefaultValue(), " ")
                    }), e.trim())
                },
                getFullValue: function() {
                    return this.get("detached") ? "" : this.get("properties").getFullValue()
                },
                getPropertyAt: function(t) {
                    return this.get("properties").at(t)
                }
            }),
            m = a.a.Model.extend({
                defaults: {
                    index: "",
                    value: "",
                    values: {},
                    active: !1,
                    preview: !1,
                    properties: []
                },
                initialize: function() {
                    var t = this.get("properties"),
                        e = this.get("value");
                    this.set("properties", t instanceof bt ? t : new bt(t));
                    var n = this.get("properties");
                    if (n.forEach(this.onPropAdd, this), this.listenTo(n, "add", this.onPropAdd), !e) {
                        var r = "",
                            i = this.get("values");
                        for (var o in i) r += " " + i[o];
                        this.set("value", r.trim())
                    }
                },
                onPropAdd: function(t) {
                    var e = this.collection;
                    t.parent = e && e.property
                },
                getPropertyAt: function(t) {
                    return this.get("properties").at(t)
                },
                getPropertyValue: function(t) {
                    var e = "";
                    return this.get("properties").each(function(n) {
                        n.get("property") == t && (e = n.getFullValue())
                    }), e
                },
                getFullValue: function() {
                    var t = [];
                    return this.get("properties").each(function(e) {
                        return t.push(e.getFullValue())
                    }), t.join(" ").trim()
                }
            });

        function b(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function y(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? b(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : b(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var w = a.a.Collection.extend({
            model: m,
            initialize: function() {
                this.idx = 1, this.on("add", this.onAdd), this.on("reset", this.onReset)
            },
            onAdd: function(t, e, n) {
                n.noIncrement || t.set("index", this.idx++), n.active && this.active(this.indexOf(t))
            },
            onReset: function() {
                this.idx = 1
            },
            getSeparator: function() {
                var t = this.property;
                return t ? t.get("layerSeparator") : ", "
            },
            getLayersFromValue: function(t) {
                var e = this,
                    n = [];
                return t.replace(/\(([\w\s,.]*)\)/g, function(e) {
                    var n = e.replace(/,\s*/g, ",");
                    t = t.replace(e, n)
                }), (t ? t.split(this.getSeparator()) : []).forEach(function(t) {
                    n.push({
                        properties: e.properties.parseValue(t)
                    })
                }), n
            },
            getLayersFromStyle: function(t) {
                var e = [],
                    n = this.properties;
                return n.each(function(n) {
                    var r = t[n.get("property")];
                    (r ? r.split(", ") : []).forEach(function(t, r) {
                        t = n.parseValue(t.trim()).value;
                        var i = e[r],
                            o = y(y({}, n.attributes), {
                                value: t
                            });
                        i ? i.properties.push(o) : e[r] = {
                            properties: [o]
                        }
                    })
                }), e.forEach(function(t) {
                    var e = t.properties.map(function(t) {
                        return t.property
                    });
                    n.each(function(n) {
                        var r = n.get("property");
                        e.indexOf(r) < 0 && t.properties.push(y({}, n.attributes))
                    })
                }), e
            },
            active: function(t) {
                this.each(function(t) {
                    return t.set("active", 0)
                });
                var e = this.at(t);
                e && e.set("active", 1)
            },
            getFullValue: function() {
                var t = [];
                return this.each(function(e) {
                    return t.push(e.getFullValue())
                }), t.join(this.getSeparator())
            },
            getPropertyValues: function(t, e) {
                var n = [];
                return this.each(function(r) {
                    var i = r.getPropertyValue(t);
                    i ? n.push(i) : !Object(l.isUndefined)(e) && n.push(e)
                }), n.join(", ")
            }
        });

        function x(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function O(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? x(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : x(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var C = v.extend({
                defaults: O(O({}, v.prototype.defaults), {}, {
                    layers: [],
                    layerSeparator: ", ",
                    prepend: 0,
                    preview: 0
                }),
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    v.callParentInit(v, this, t, e);
                    var n = this.get("layers"),
                        r = new w(n);
                    r.property = this, r.properties = this.get("properties"), this.set("layers", r), v.callInit(this, t, e)
                },
                getLayers: function() {
                    return this.get("layers")
                },
                getCurrentLayer: function() {
                    return this.getLayers().filter(function(t) {
                        return t.get("active")
                    })[0]
                },
                getFullValue: function() {
                    return this.get("detached") ? "" : this.get("layers").getFullValue()
                },
                getValueFromStyle: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.getLayers().getLayersFromStyle(t);
                    return new w(e).getFullValue()
                },
                clearValue: function() {
                    return this.getLayers().reset(), v.prototype.clearValue.apply(this, arguments)
                },
                getValueFromTarget: function(t) {
                    var e = this.attributes,
                        n = e.detached,
                        r = e.property,
                        i = e.properties,
                        o = t.getStyle(),
                        a = {};
                    return i.forEach(function(t) {
                        var e = t.get("property"),
                            n = o[e];
                        n && (a[e] = n)
                    }), n ? Object(l.keys)(a).length ? a : "" : o[r]
                },
                getLayersFromTarget: function(t) {}
            }),
            S = n(25),
            k = n.n(S);

        function j(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function T(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? j(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : j(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var P = "data-clear-style",
            E = a.a.View.extend({
                template: function() {
                    var t = this.pfx,
                        e = this.ppfx;
                    return '\n      <div class="'.concat(t, 'label" data-sm-label></div>\n      <div class="').concat(e, 'fields" data-sm-fields></div>\n    ')
                },
                templateLabel: function(t) {
                    var e = this.pfx,
                        n = this.em,
                        r = t.parent,
                        i = t.attributes,
                        o = i.icon,
                        a = void 0 === o ? "" : o,
                        s = i.info,
                        l = void 0 === s ? "" : s,
                        c = i.id,
                        u = i.name,
                        d = n && n.t("styleManager.properties.".concat(c)) || u;
                    return '\n      <span class="'.concat(e, "icon ").concat(a, '" title="').concat(l, '">\n        ').concat(d, "\n      </span>\n      ").concat(r ? "" : '<b class="'.concat(e, 'clear" ').concat(P, ">&Cross;</b>"), "\n    ")
                },
                templateInput: function(t) {
                    return '\n      <div class="'.concat(this.ppfx, 'field">\n        <input placeholder="').concat(t.getDefaultValue(), '"/>\n      </div>\n    ')
                },
                events: i()({
                    change: "inputValueChanged"
                }, "click [".concat(P, "]"), "clear"),
                initialize: function() {
                    var t = this,
                        e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    Object(l.bindAll)(this, "targetUpdated", "__change", "__updateStyle"), this.config = e.config || {};
                    var n = this.config.em;
                    this.em = n, this.pfx = this.config.stylePrefix || "", this.ppfx = this.config.pStylePrefix || "", this.target = e.target || {}, this.propTarget = e.propTarget || {}, this.onChange = e.onChange, this.onInputRender = e.onInputRender || {}, this.customValue = e.customValue || {};
                    var r = this.model;
                    this.property = r.get("property"), this.input = null;
                    var i = this.pfx;
                    if (this.inputHolderId = "#" + i + "input-holder", this.sector = r.collection && r.collection.sector, this.__destroyFn = this.destroy ? this.destroy.bind(this) : function() {}, r.view = this, r.get("value") || r.set("value", r.getDefaultValue()), n) {
                        this.listenTo(n, "update:component:style:".concat(this.property), this.targetUpdated);
                        var o = r.get("requires") || {};
                        Object.keys(o).forEach(function(e) {
                            t.listenTo(n, "component:styleUpdate:".concat(e), t.targetUpdated)
                        })
                    }
                    this.listenTo(this.propTarget, "update", this.targetUpdated), this.listenTo(r, "destroy remove", this.remove), this.listenTo(r, "change:value", this.modelValueChanged), this.listenTo(r, "targetUpdated", this.targetUpdated), this.listenTo(r, "change:visible", this.updateVisibility), this.listenTo(r, "change:status", this.updateStatus), this.listenTo(r, "change:name change:className change:full", this.render);
                    var a = this.init && this.init.bind(this);
                    a && a()
                },
                remove: function() {
                    var t = this;
                    a.a.View.prototype.remove.apply(this, arguments), ["em", "target", "input", "$input", "propTarget", "sector"].forEach(function(e) {
                        return t[e] = {}
                    }), this.__destroyFn(this._getClbOpts())
                },
                updateStatus: function() {
                    var t = this.model,
                        e = t.get("status"),
                        n = t.parent,
                        r = this.pfx,
                        i = this.ppfx,
                        o = this.config,
                        a = "".concat(i, "four-color"),
                        s = "".concat(i, "color-warn"),
                        l = this.$el.children(".".concat(r, "label")),
                        c = this.getClearEl(),
                        u = c ? c.style : {};
                    switch (l.removeClass("".concat(a, " ").concat(s)), u.display = "none", e) {
                        case "updated":
                            !n && l.addClass(a), o.clearProperties && (u.display = "inline");
                            break;
                        case "computed":
                            l.addClass(s)
                    }
                },
                clear: function(t) {
                    var e = this;
                    t && t.stopPropagation(), this.model.clearValue(), setTimeout(function() {
                        return e.targetUpdated()
                    })
                },
                getClearEl: function() {
                    return this.clearEl || (this.clearEl = this.el.querySelector("[".concat(P, "]"))), this.clearEl
                },
                getTarget: function() {
                    return this.getTargetModel()
                },
                getTargets: function() {
                    return this.propTarget.targets || [this.getTarget()]
                },
                getFirstTarget: function() {
                    return this.getTargets()[0]
                },
                getTargetModel: function() {
                    return this.propTarget && this.propTarget.model
                },
                getHelperModel: function() {
                    return this.propTarget && this.propTarget.helper
                },
                inputValueChanged: function(t) {
                    t && t.stopPropagation(), this.emit || (this.model.setValueFromInput(this.getInputValue()), this.elementUpdated())
                },
                elementUpdated: function() {
                    this.setStatus("updated")
                },
                setStatus: function(t) {
                    this.model.set("status", t);
                    var e = this.model.parent;
                    e && "updated" == t && e.set("status", t)
                },
                emitUpdateTarget: Object(l.debounce)(function() {
                    var t = this.config.em;
                    t && t.trigger("styleManager:update:target", this.getFirstTarget())
                }),
                _getTargetData: function() {
                    var t = this.model,
                        e = this.config,
                        n = this.getTargetValue({
                            ignoreDefault: 1
                        }),
                        r = t.getDefaultValue(),
                        i = this.getComputedValue(),
                        o = "",
                        a = "";
                    return n ? (o = n, e.highlightChanged && (a = "updated")) : i && e.showComputed && i != r ? (o = i, e.highlightComputed && (a = "computed")) : (o = r, a = ""), {
                        value: o,
                        status: a,
                        targetValue: n,
                        defaultValue: r,
                        computedValue: i
                    }
                },
                targetUpdated: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                    if (!this.config.fromLayer && (this.emitUpdateTarget(), this.checkVisibility())) {
                        var r = this.config.em,
                            i = this.model,
                            o = i.get("property"),
                            a = this._getTargetData(),
                            s = a.status,
                            l = a.value,
                            c = T({
                                status: s,
                                value: l
                            }, k()(a, ["status", "value"]));
                        return this.setStatus(s), i.setValue(l, 0, T({
                            fromTarget: 1
                        }, n)), r && (r.trigger("styleManager:change", this, o, l, c), r.trigger("styleManager:change:".concat(o), this, l, c), this._emitUpdate(c)), c
                    }
                },
                _emitUpdate: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.em,
                        n = this.model;
                    if (e) {
                        var r = n.get("property"),
                            i = T(T({}, this._getEventData()), t),
                            o = i.id;
                        e.trigger("style:update", i), e.trigger("style:update:".concat(r), i), r !== o && e.trigger("style:update:".concat(o), i)
                    }
                },
                _getEventData: function() {
                    var t = this.model;
                    return {
                        propertyView: this,
                        targets: this.getTargets(),
                        value: t.getFullValue(),
                        property: t,
                        id: t.get("id"),
                        name: t.get("property")
                    }
                },
                checkVisibility: function() {
                    var t = 1;
                    return this.config.hideNotStylable && (this.isTargetStylable() && this.isComponentStylable() ? this.show() : (this.hide(), t = 0), this.sector && this.sector.trigger("updateVisibility")), t
                },
                getTargetValue: function() {
                    var t, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        n = this.model,
                        r = this.getFirstTarget(),
                        i = this.customValue;
                    if (!r) return t;
                    if ((t = r.getStyle()[n.get("property")]) || e.ignoreDefault || (t = n.getDefaultValue()), "function" == typeof i && !e.ignoreCustomValue) {
                        var o = i(this, n.collection.indexOf(n), t);
                        o && (t = o)
                    }
                    return t
                },
                getComputedValue: function() {
                    var t = this.propTarget,
                        e = t.computed || {},
                        n = t.computedDefault || {},
                        r = this.config.avoidComputed || [],
                        i = this.model.get("property"),
                        o = r.indexOf(i) < 0,
                        a = e[i],
                        s = n[Object(c.b)(i)];
                    return e && o && s !== a && a || ""
                },
                getInputValue: function() {
                    var t = this.getInputEl();
                    return t ? t.value : ""
                },
                modelValueChanged: function(t, e) {
                    var n = this,
                        r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        o = this.model,
                        a = o.getFullValue();
                    if (r.fromInput || this.setValue(a), !r.fromTarget) {
                        this.getTargets().forEach(function(t) {
                            return n.__updateTarget(t, r)
                        });
                        var s = this.config.em;
                        if (!s) return;
                        var l = o.get("property"),
                            c = i()({}, l, a);
                        s.getSelectedAll().forEach(function(t) {
                            !r.noEmit && s.trigger("component:update", t, c, r), s.trigger("component:styleUpdate", t, l, r), s.trigger("component:styleUpdate:".concat(l), t, a, r), t.trigger("change:style", t, c, r), t.trigger("change:style:".concat(l), t, a, r)
                        })
                    }
                },
                __updateTarget: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.model.getFullValue(),
                        r = this.onChange;
                    t && this.isComponentStylable() && (e.fromTarget || (r && !e.fromParent ? r(t, this, e) : this.updateTargetStyle(n, null, T(T({}, e), {}, {
                        target: t
                    }))), this._emitUpdate())
                },
                updateTargetStyle: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "",
                        n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = e || this.model.get("property"),
                        i = n.target || this.getFirstTarget(),
                        o = i.getStyle();
                    t ? o[r] = t : delete o[r], n.avoidStore ? o.__ = 1 : delete o.__, i.setStyle(o, n);
                    var a = this.getHelperModel();
                    a && a.setStyle(o, n)
                },
                isTargetStylable: function(t) {
                    var e = t || this.getFirstTarget(),
                        n = this.model,
                        r = n.get("id"),
                        i = n.get("property"),
                        o = n.get("toRequire"),
                        a = e.get("unstylable"),
                        s = e.get("stylable-require"),
                        c = n.get("requires"),
                        u = n.get("requiresParent"),
                        d = this.sector ? this.sector.collection : null,
                        h = this.em ? this.em.getSelected() : null,
                        f = e.get("stylable");
                    if (Object(l.isArray)(f) && (f = f.indexOf(i) >= 0), Object(l.isArray)(a) && (f = a.indexOf(i) < 0), o && (f = !t || s && (s.indexOf(r) >= 0 || s.indexOf(i) >= 0)), d && c) {
                        var p = Object.keys(c);
                        d.each(function(t) {
                            t.get("properties").each(function(t) {
                                if (Object(l.includes)(p, t.id)) {
                                    var e = c[t.id];
                                    f = f && Object(l.includes)(e, t.get("value"))
                                }
                            })
                        })
                    }
                    if (u) {
                        var g = h && h.parent(),
                            v = g && g.getEl();
                        if (v) {
                            var m = window.getComputedStyle(v);
                            Object(l.each)(u, function(t, e) {
                                f = f && m[e] && Object(l.includes)(t, m[e])
                            })
                        } else f = !1
                    }
                    return f
                },
                isComponentStylable: function() {
                    var t = this.em,
                        e = t && t.getSelected();
                    return !e || this.isTargetStylable(e)
                },
                setRawValue: function(t) {
                    this.setValue(this.model.parseValue(t))
                },
                setValue: function(t) {
                    var e = this.model,
                        n = Object(l.isUndefined)(t) ? e.getDefaultValue() : t;
                    if (this.update) return this.__update(n);
                    var r = this.getInputEl();
                    r && (r.value = n)
                },
                getInputEl: function() {
                    return this.input || (this.input = this.el.querySelector("input")), this.input
                },
                updateVisibility: function() {
                    this.el.style.display = this.model.get("visible") ? "" : "none"
                },
                show: function() {
                    this.model.set("visible", 1)
                },
                hide: function() {
                    this.model.set("visible", 0)
                },
                cleanValue: function() {
                    this.setValue("")
                },
                clearCached: function() {
                    this.clearEl = null, this.input = null, this.$input = null
                },
                __update: function(t) {
                    var e = this.update && this.update.bind(this);
                    e && e(T(T({}, this._getClbOpts()), {}, {
                        value: t
                    }))
                },
                __change: function() {
                    for (var t = this.emit && this.emit.bind(this), e = arguments.length, n = new Array(e), r = 0; r < e; r++) n[r] = arguments[r];
                    t && t.apply(void 0, [this._getClbOpts()].concat(n))
                },
                __updateStyle: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = e.complete,
                        r = k()(e, ["complete"]),
                        i = !1 !== n;
                    Object(c.o)(t) ? this.getTargets().forEach(function(e) {
                        return e.addStyle(t, {
                            avoidStore: !i
                        })
                    }) : this.model.setValueFromInput(t, n, r), i && this.elementUpdated()
                },
                _getClbOpts: function() {
                    var t = this.model;
                    return {
                        el: this.el,
                        props: t.attributes,
                        setProps: function() {
                            return t.set.apply(t, arguments)
                        },
                        change: this.__change,
                        updateStyle: this.__updateStyle,
                        targets: this.getTargets()
                    }
                },
                render: function() {
                    this.clearCached();
                    var t = this.pfx,
                        e = this.model,
                        n = this.el,
                        r = this.$el,
                        i = e.get("property"),
                        o = e.get("full"),
                        a = e.get("className") || "",
                        s = "".concat(t, "property");
                    this.createdEl && this.__destroyFn(this._getClbOpts()), r.empty().append(this.template(e)), r.find("[data-sm-label]").append(this.templateLabel(e));
                    var l = this.create && this.create.bind(this);
                    this.createdEl = l && l(this._getClbOpts()), r.find("[data-sm-fields]").append(this.createdEl || this.templateInput(e)), n.className = "".concat(s, " ").concat(t).concat(e.get("type"), " ").concat(s, "__").concat(i, " ").concat(a).trim(), n.className += o ? " ".concat(s, "--full") : "", this.updateStatus();
                    var c = this.onRender && this.onRender.bind(this);
                    c && c(), this.setValue(e.get("value"), {
                        fromTarget: 1
                    })
                }
            });

        function M(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function D(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? M(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : M(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var A = a.a.$,
            L = E.extend({
                templateInput: function() {
                    var t = this.pfx;
                    return '\n      <div class="'.concat(t, "field ").concat(t, 'composite">\n        <span id="').concat(t, 'input-holder"></span>\n      </div>\n    ')
                },
                inputValueChanged: function() {
                    if (!this.model.get("detached")) {
                        for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                        E.prototype.inputValueChanged.apply(this, e)
                    }
                },
                clear: function(t) {
                    var e = this.properties;
                    e && e.forEach(function(t) {
                        return t.clear()
                    }), E.prototype.clear.apply(this, arguments)
                },
                remove: function() {
                    var t = this;
                    this.model.get("properties").reset(), E.prototype.remove.apply(this, arguments), ["properties", "props", "$props"].forEach(function(e) {
                        return t[e] = {}
                    })
                },
                onRender: function() {
                    var t = this.model,
                        e = t.get("properties") || [];
                    if (this.properties = [], e.length && (this.$input || (this.$input = A('<input type="hidden" value="0">'), this.input = this.$input.get(0)), this.props || (this.props = t.get("properties")), !this.$props)) {
                        this.props.each(function(e, n) {
                            e && "composite" == e.get("type") && (this.props.remove(e), console.warn("Nested composite types not yet allowed.")), e.parent = t
                        }, this);
                        var r = new(0, n(19).default)(this.getPropsConfig());
                        this.$props = r.render().$el, this.properties = r.properties, this.$el.find("#".concat(this.pfx, "input-holder")).append(this.$props)
                    }
                },
                getPropsConfig: function(t) {
                    var e = this,
                        n = this.model,
                        r = {
                            config: D(D({}, this.config), {}, {
                                highlightComputed: 0
                            }),
                            collection: this.props,
                            target: this.target,
                            propTarget: this.propTarget,
                            onChange: function(t, e, r) {
                                n.set("value", n.getFullValue(), r)
                            },
                            customValue: function(t, n) {
                                return e.valueOnIndex(n, t)
                            }
                        };
                    return n.get("detached") && delete r.onChange, r
                },
                valueOnIndex: function(t, e) {
                    var n = this.getTargetValue({
                        ignoreDefault: 1
                    });
                    return n ? n.split(this.model.getSplitSeparator())[t] : e && e.getTargetValue({
                        ignoreCustomValue: 1,
                        ignoreDefault: 1
                    })
                },
                clearCached: function() {
                    E.prototype.clearCached.apply(this, arguments), this.$input = null, this.props = null, this.$props = null
                }
            }),
            _ = n(19);

        function N(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function I(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? N(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : N(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var F = a.a.View.extend({
                events: {
                    click: "active",
                    "click [data-close-layer]": "removeItem",
                    "mousedown [data-move-layer]": "initSorter",
                    "touchstart [data-move-layer]": "initSorter"
                },
                template: function(t) {
                    var e = this.pfx,
                        n = this.ppfx,
                        r = this.em,
                        i = "".concat(r && r.t("styleManager.layer"), " ").concat(t.get("index"));
                    return '\n      <div id="'.concat(e, 'move" class="').concat(n, 'no-touch-actions" data-move-layer>\n        <i class="fa fa-arrows-alt"></i>\n      </div>\n      <div id="').concat(e, 'label">').concat(i, '</div>\n      <div id="').concat(e, 'preview-box">\n      \t<div id="').concat(e, 'preview" data-preview></div>\n      </div>\n      <div id="').concat(e, 'close-layer" class="').concat(e, 'btn-close" data-close-layer>\n        &Cross;\n      </div>\n      <div id="').concat(e, 'inputs" data-properties></div>\n      <div style="clear:both"></div>\n    ')
                },
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.model;
                    this.stackModel = t.stackModel, this.config = t.config || {}, this.em = this.config.em, this.pfx = this.config.stylePrefix || "", this.ppfx = this.config.pStylePrefix || "", this.sorter = t.sorter || null, this.propsConfig = t.propsConfig || {}, this.customPreview = t.onPreview, this.listenTo(e, "destroy remove", this.remove), this.listenTo(e, "change:active", this.updateVisibility), this.listenTo(e.get("properties"), "change", this.updatePreview), e.view = this, e.set({
                        droppable: 0,
                        draggable: 1
                    }), this.$el.data("model", e)
                },
                initSorter: function(t) {
                    this.sorter && this.sorter.startSort(this.el)
                },
                removeItem: function(t) {
                    t && t.stopPropagation(), this.remove()
                },
                remove: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.model,
                        n = this.props,
                        r = e.collection,
                        i = this.stackModel;
                    a.a.View.prototype.remove.apply(this, arguments), r && r.contains(e) && r.remove(e), i && i.set && (i.set({
                        stackIndex: null
                    }, {
                        silent: !0
                    }), !t.fromTarget && i.trigger("updateValue")), n && n.remove()
                },
                onPreview: function(t) {
                    var e = this.stackModel,
                        n = e && e.get("detached"),
                        r = t.split(" "),
                        i = [],
                        o = {};
                    return this.model.get("properties").each(function(t, e) {
                        var a = t.get("property"),
                            s = n ? t.getFullValue() : r[e] || "";
                        if (s && "integer" == t.get("type")) {
                            var l = parseInt(s, 10),
                                c = s.replace(l, "");
                            s = (l = (l = (l = isNaN(l) ? 0 : l) > 3 ? 3 : l) < -3 ? -3 : l) + c
                        }
                        i.push(s), o[a] = s
                    }), n ? o : i.join(" ")
                },
                updatePreview: function() {
                    var t = this.stackModel,
                        e = this.customPreview,
                        n = this.getPreviewEl(),
                        r = this.model.getFullValue(),
                        i = e ? e(r) : this.onPreview(r);
                    if (i && t && n) {
                        var o = n.style;
                        if (Object(l.isString)(i)) o[t.get("property")] = i;
                        else {
                            var a = [];
                            Object(l.each)(i, function(t, e) {
                                return a.push("".concat(e, ":").concat(t))
                            }), n.setAttribute("style", a.join(";"))
                        }
                    }
                },
                getPropertiesWrapper: function() {
                    return this.propsWrapEl || (this.propsWrapEl = this.el.querySelector("[data-properties]")), this.propsWrapEl
                },
                getPreviewEl: function() {
                    return this.previewEl || (this.previewEl = this.el.querySelector("[data-preview]")), this.previewEl
                },
                active: function() {
                    var t = this.model,
                        e = t.collection;
                    e.active(e.indexOf(t))
                },
                updateVisibility: function() {
                    var t = this.pfx,
                        e = this.getPropertiesWrapper(),
                        n = this.model.get("active");
                    e.style.display = n ? "" : "none", this.$el[n ? "addClass" : "removeClass"]("".concat(t, "active"))
                },
                render: function() {
                    var t = this.propsConfig,
                        e = this.model,
                        n = this.el,
                        r = this.pfx,
                        i = e.get("preview"),
                        o = new _.default({
                            collection: e.get("properties"),
                            config: I(I({}, this.config), {}, {
                                fromLayer: 1
                            }),
                            target: t.target,
                            customValue: t.customValue,
                            propTarget: t.propTarget,
                            onChange: t.onChange
                        }),
                        a = o.render().el;
                    return n.innerHTML = this.template(e), n.className = "".concat(r, "layer").concat(i ? "" : " ".concat(r, "no-preview")), this.props = o, this.getPropertiesWrapper().appendChild(a), this.updateVisibility(), this.updatePreview(), this
                }
            }),
            V = a.a.View.extend({
                initialize: function(t) {
                    this.config = t.config || {}, this.stackModel = t.stackModel, this.preview = t.preview, this.pfx = this.config.stylePrefix || "", this.ppfx = this.config.pStylePrefix || "", this.propsConfig = t.propsConfig;
                    var e = this.pfx,
                        n = this.ppfx,
                        r = this.collection;
                    this.className = "".concat(e, "layers ").concat(n, "field"), this.listenTo(r, "add", this.addTo), this.listenTo(r, "deselectAll", this.deselectAll), this.listenTo(r, "reset", this.reset), this.items = [];
                    var i = this.config.em || "",
                        o = i ? i.get("Utils") : "";
                    this.sorter = o ? new o.Sorter({
                        container: this.el,
                        ignoreViewChildren: 1,
                        containerSel: ".".concat(e, "layers"),
                        itemSel: ".".concat(e, "layer"),
                        pfx: this.config.pStylePrefix
                    }) : "", r.view = this, this.$el.data("model", r), this.$el.data("collection", r)
                },
                addTo: function(t) {
                    var e = this.collection.indexOf(t);
                    this.addToCollection(t, null, e)
                },
                addToCollection: function(t, e, n) {
                    var r = e || null,
                        i = this.stackModel,
                        o = this.config,
                        a = this.sorter,
                        s = this.propsConfig;
                    void 0 !== this.preview && t.set("preview", this.preview);
                    var l = new F({
                            model: t,
                            config: o,
                            sorter: a,
                            stackModel: i,
                            propsConfig: s
                        }),
                        c = l.render().el;
                    if (this.items.push(l), r) r.appendChild(c);
                    else if (void 0 !== n) {
                        var u = "before";
                        this.$el.children().length == n && (n--, u = "after"), n < 0 ? this.$el.append(c) : this.$el.children().eq(n)[u](c)
                    } else this.$el.append(c);
                    return c
                },
                deselectAll: function() {
                    this.$el.find("." + this.pfx + "layer").removeClass(this.pfx + "active")
                },
                reset: function(t, e) {
                    this.clearItems(e), this.render()
                },
                render: function() {
                    var t = document.createDocumentFragment();
                    return this.$el.empty(), this.collection.each(function(e) {
                        this.addToCollection(e, t)
                    }, this), this.$el.append(t), this.$el.attr("class", this.className), this.sorter && (this.sorter.plh = null), this
                },
                remove: function() {
                    this.clearItems(), a.a.View.prototype.remove.apply(this, arguments)
                },
                clearItems: function(t) {
                    this.items.forEach(function(e) {
                        return e.remove(t)
                    }), this.items = []
                }
            });

        function R(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }
        var z = new(n(31).a),
            H = L.extend({
                templateInput: function() {
                    var t = this.pfx;
                    return this.ppfx, '\n      <div class="'.concat(t, "field ").concat(t, 'stack">\n        <button type="button" id="').concat(t, 'add" data-add-layer>+</button>\n        <div data-layers-wrapper></div>\n      </div>\n    ')
                },
                init: function() {
                    var t = this.model;
                    this.pfx, t.set("stackIndex", null), this.events["click [data-add-layer]"] = "addLayer", this.listenTo(t, "change:stackIndex", this.indexChanged), this.listenTo(t, "updateValue", this.inputValueChanged), this.delegateEvents();
                    var e = this.getPropsConfig();
                    this.layers = new V({
                        collection: this.getLayers(),
                        stackModel: t,
                        preview: t.get("preview"),
                        config: this.config,
                        propsConfig: e
                    });
                    var r = n(19).default;
                    this.propsView = new r({
                        target: this.target,
                        collection: t.get("properties"),
                        stackModel: t,
                        config: this.config,
                        onChange: e.onChange,
                        propTarget: e.propTarget
                    })
                },
                targetUpdated: function() {
                    var t, e = this;
                    if (this.model.get("detached")) t = this._getTargetData(), this.setStatus(t.status), this.checkVisibility();
                    else {
                        for (var n = arguments.length, r = new Array(n), i = 0; i < n; i++) r[i] = arguments[i];
                        t = L.prototype.targetUpdated.apply(this, r)
                    }
                    setTimeout(function() {
                        return e.refreshLayers(t)
                    })
                },
                getLayers: function() {
                    return this.model.get("layers")
                },
                indexChanged: function(t) {
                    var e = this.model;
                    this.getLayers().active(e.get("stackIndex"))
                },
                addLayer: function() {
                    var t = this.model,
                        e = this.getLayers(),
                        n = t.get("prepend"),
                        r = t.get("properties").deepClone();
                    r.each(function(t) {
                        return t.set("value", "")
                    });
                    var o = e.add({
                        properties: r
                    }, function(t) {
                        for (var e = 1; e < arguments.length; e++) {
                            var n = null != arguments[e] ? arguments[e] : {};
                            e % 2 ? R(Object(n), !0).forEach(function(e) {
                                i()(t, e, n[e])
                            }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : R(Object(n)).forEach(function(e) {
                                Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                            })
                        }
                        return t
                    }({
                        active: 1
                    }, n && {
                        at: 0
                    }));
                    this.inputValueChanged({
                        up: 1
                    }), t.set("stackIndex", e.indexOf(o))
                },
                inputValueChanged: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.model;
                    t.up && this.elementUpdated(), e.get("detached") ? e.get("properties").each(function(t) {
                        return t.trigger("change:value")
                    }) : e.set("value", this.getLayerValues())
                },
                setValue: function() {},
                getLayerValues: function() {
                    return this.getLayers().getFullValue()
                },
                _getClassRule: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.em,
                        n = t.skipAdd,
                        r = void 0 === n ? 1 : n,
                        i = e.getSelected(),
                        o = e.get("StyleManager").getModelToStyle(i, {
                            skipAdd: r,
                            useClasses: 1
                        });
                    return o !== i && o
                },
                _getParentTarget: function(t) {
                    for (var e, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, r = this.em, i = this.model.get("property"), o = n.isValid || function(t) {
                            return t.getStyle()[i]
                        }, a = r.get("CssComposer").getAll().filter(function(e) {
                            return e.selectorsToString() === t.getSelectorsString()
                        }).reduce(function(t, e) {
                            return t[e.getAtRule()] = e, t
                        }, {}), s = z.sortMediaObject(a).map(function(t) {
                            return t.value
                        }), l = s.indexOf(t), c = s.splice(0, l), u = c.length - 1; u > -1; u--) {
                        var d = c[u];
                        if (o(d)) {
                            e = d;
                            break
                        }
                    }
                    return e
                },
                refreshLayers: function() {
                    var t, e, n, r, i, o, a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        s = [],
                        c = this.model,
                        u = this.em,
                        d = this.getLayers(),
                        h = c.get("detached"),
                        f = c.get("property"),
                        p = this.getFirstTarget(),
                        g = this.getComputedValue(),
                        v = u.getSelected(),
                        m = {
                            fromTarget: 1
                        };
                    if (h) {
                        e = a.targetValue || {};
                        var b = function(t) {
                            var e = c.get("properties").at(0).get("property");
                            return t && !Object(l.isUndefined)(t.getStyle()[e])
                        };
                        if (!Object(l.keys)(e).length && g && v) {
                            var y = {
                                isValid: function(t) {
                                    return b(t)
                                }
                            };
                            (r = this._getParentTarget(p, y)) ? e = r.getStyle(): (n = this._getClassRule(), r = !(i = b(n) && n.getStyle()) && this._getParentTarget(this._getClassRule({
                                skipAdd: 0
                            }), y), o = b(r) && r.getStyle(), e = i || o || {})
                        }
                        t = e, s = d.getLayersFromStyle(e)
                    } else {
                        var w = this.getTargetValue({
                            ignoreDefault: 1
                        });
                        !w && g && ((r = this._getParentTarget(p)) ? w = r.getStyle()[f] : (o = (r = !(i = (n = this._getClassRule()) && n.getStyle()[f]) && this._getParentTarget(this._getClassRule({
                            skipAdd: 0
                        }))) && r.getStyle()[f], w = i || o || g)), t = w = w == c.getDefaultValue() ? "" : w, s = d.getLayersFromValue(w)
                    }
                    var x = c.getLayersFromTarget(p, {
                        resultValue: t,
                        layersObj: s
                    }) || s;
                    d.reset(null, m), d.add(x, m), c.set({
                        stackIndex: null
                    }, {
                        silent: !0
                    })
                },
                getTargetValue: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.model,
                        n = e.attributes.detached,
                        r = this.getFirstTarget(),
                        i = L.prototype.getTargetValue.call(this, t);
                    return Object(l.isUndefined)(i) && !n ? i = e.getValueFromStyle(r.getStyle()) : n && (i = e.getValueFromTarget(r)), i
                },
                getPropsConfig: function() {
                    var t = this,
                        e = t.model;
                    return {
                        target: t.target,
                        propTarget: t.propTarget,
                        onChange: function(n, r, o) {
                            var a = r.model,
                                s = e.get("status");
                            if (e.get("detached")) {
                                var l = a.get("property"),
                                    c = a.getDefaultValue(),
                                    u = t.getLayers(),
                                    d = u.getPropertyValues(l, c);
                                r.updateTargetStyle(d, null, o), "background-image" != l || o.avoidStore || "computed" != s || e.get("properties").filter(function(t) {
                                    return "__" == t.get("property").substr(0, 2)
                                }).forEach(function(e) {
                                    var n = e.get("property"),
                                        r = u.getPropertyValues(n, e.getDefaultValue());
                                    t.getTargets().forEach(function(t) {
                                        return t.addStyle(i()({}, n, r), o)
                                    })
                                })
                            } else if ("updated" == s) {
                                var h = e.getFullValue();
                                e.set("value", h, o), !h && r.updateTargetStyle(h, null, o)
                            }
                        }
                    }
                },
                onRender: function() {
                    var t = this.el,
                        e = this.layers,
                        n = this.propsView,
                        r = t.querySelector("[data-layers-wrapper]");
                    n.render(), r.appendChild(e.render().el)
                }
            }),
            $ = a.a.$,
            U = E.extend({
                templateInput: function() {
                    var t = this.pfx,
                        e = this.em;
                    return '\n    <div class="'.concat(t, "field ").concat(t, "file\">\n      <div id='").concat(t, "input-holder'>\n        <div class=\"").concat(t, 'btn-c">\n          <button class="').concat(t, 'btn" id="').concat(t, 'images" type="button">\n            ').concat(e.t("styleManager.fileButton"), '\n          </button>\n        </div>\n        <div style="clear:both;"></div>\n      </div>\n      <div id="').concat(t, 'preview-box">\n        <div id="').concat(t, 'preview-file"></div>\n        <div id="').concat(t, 'close">&Cross;</div>\n      </div>\n    </div>\n    ')
                },
                init: function() {
                    var t = this.em;
                    this.modal = t.get("Modal"), this.am = t.get("AssetManager"), this.events["click #" + this.pfx + "close"] = "removeFile", this.events["click #" + this.pfx + "images"] = "openAssetManager", this.delegateEvents()
                },
                onRender: function() {
                    if (!this.$input) {
                        var t = this.model.getDefaultValue();
                        this.$input = $('<input placeholder="'.concat(t, '">'))
                    }
                    this.$preview || (this.$preview = this.$el.find("#" + this.pfx + "preview-file")), this.$previewBox || (this.$previewBox = this.$el.find("#" + this.pfx + "preview-box")), this.setValue(this.componentValue, 0)
                },
                clearCached: function() {
                    E.prototype.clearCached.apply(this, arguments), this.$preview = null, this.$previewBox = null
                },
                setValue: function(t, e) {
                    E.prototype.setValue.apply(this, arguments), this.setPreviewView(t && t != this.model.getDefaultValue()), this.setPreview(t)
                },
                setPreviewView: function(t) {
                    var e = this.$previewBox;
                    e && e[t ? "addClass" : "removeClass"]("".concat(this.pfx, "show")), e && e.css({
                        display: t ? "block" : "none"
                    })
                },
                spreadUrl: function(t) {
                    this.model.set("value", t), this.setPreviewView(1)
                },
                setPreview: function(t) {
                    var e = this.$preview;
                    t = t && t.indexOf("url(") < 0 ? "url(".concat(t, ")") : t, e && e.css("background-image", t)
                },
                cleanValue: function() {
                    this.setPreviewView(0), this.model.set({
                        value: ""
                    }, {
                        silent: !0
                    })
                },
                removeFile: function() {
                    this.model.set("value", this.model.getDefaultValue());
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    E.prototype.cleanValue.apply(this, e), this.setPreviewView(0)
                },
                openAssetManager: function(t) {
                    var e = this,
                        n = this.em,
                        r = this.modal,
                        i = n ? n.get("Editor") : "";
                    i && i.runCommand("open-assets", {
                        types: ["image"],
                        accept: "image/*",
                        target: this.getTargetModel(),
                        onClick: function() {},
                        onDblClick: function() {},
                        onSelect: function(t) {
                            r.close();
                            var n = Object(l.isString)(t) ? t : t.get("src");
                            e.spreadUrl(n)
                        }
                    })
                }
            }),
            B = a.a.$,
            W = E.extend({
                templateInput: function() {
                    return ""
                },
                init: function() {
                    var t = this.model;
                    this.listenTo(t, "change:unit", this.modelValueChanged), this.listenTo(t, "el:change", this.elementUpdated), this.listenTo(t, "change:units", this.render)
                },
                setValue: function(t) {
                    var e = this.model.parseValue(t);
                    t = "".concat(e.value).concat(e.unit), this.inputInst.setValue(t, {
                        silent: 1
                    })
                },
                onRender: function() {
                    var t = this.ppfx;
                    if (!this.input) {
                        var e = this.model.input;
                        e.ppfx = t, e.render(), this.el.querySelector(".".concat(t, "fields")).appendChild(e.el), this.$input = e.inputEl, this.unit = e.unitEl, this.$unit = B(this.unit), this.input = this.$input.get(0), this.inputInst = e
                    }
                },
                clearCached: function() {
                    E.prototype.clearCached.apply(this, arguments), this.unit = null, this.$unit = null
                }
            }),
            q = n(38);

        function G(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function K(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? G(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : G(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var Y = W.extend({
                setValue: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    e = K(K({}, e), {}, {
                        silent: 1
                    }), this.inputInst.setValue(t, e)
                },
                remove: function() {
                    var t = this;
                    W.prototype.remove.apply(this, arguments);
                    var e = this.inputInst;
                    e && e.remove(), ["inputInst", "$color"].forEach(function(e) {
                        return t[e] = {}
                    })
                },
                onRender: function() {
                    if (!this.input) {
                        var t = this.ppfx,
                            e = new q.a({
                                target: this.target,
                                model: this.model,
                                ppfx: t
                            }).render();
                        this.el.querySelector(".".concat(t, "fields")).appendChild(e.el), this.$input = e.inputEl, this.$color = e.colorEl, this.input = this.$input.get(0), this.inputInst = e
                    }
                }
            }),
            X = n(7),
            J = n.n(X);

        function Z(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function Q(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? Z(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Z(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var tt = f.extend({
            defaults: function() {
                return Q(Q({}, f.prototype.defaults), {}, {
                    options: [],
                    full: 1
                })
            },
            initialize: function() {
                for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                f.prototype.initialize.apply(this, e), this.listenTo(this, "change:options", this.onOptionChange)
            },
            onOptionChange: function() {
                this.set("list", this.get("options"))
            },
            getOptions: function() {
                var t = this.attributes,
                    e = t.options,
                    n = t.list;
                return e && e.length ? e : n
            },
            setOptions: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
                return this.set("options", t), this
            },
            addOption: function(t) {
                if (t) {
                    var e = this.getOptions();
                    this.setOptions([].concat(J()(e), [t]))
                }
                return this
            }
        });

        function et(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function nt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? et(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : et(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var rt = tt.extend({
                defaults: function() {
                    return nt(nt({}, tt.prototype.defaults()), {}, {
                        full: 0
                    })
                }
            }),
            it = (a.a.$, E.extend({
                templateInput: function() {
                    var t = this.pfx,
                        e = this.ppfx;
                    return '\n      <div class="'.concat(e, "field ").concat(e, 'select">\n        <span id="').concat(t, 'input-holder"></span>\n        <div class="').concat(e, 'sel-arrow">\n          <div class="').concat(e, 'd-s-arrow"></div>\n        </div>\n      </div>\n    ')
                },
                initialize: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    E.prototype.initialize.apply(this, e), this.listenTo(this.model, "change:options", this.updateOptions)
                },
                updateOptions: function() {
                    this.input = null, this.onRender()
                },
                onRender: function() {
                    var t = this.pfx,
                        e = this.model.getOptions();
                    if (!this.input) {
                        var n = "";
                        e.forEach(function(t) {
                            var e = t.name || t.value,
                                r = t.style ? t.style.replace(/"/g, "&quot;") : "",
                                i = r ? 'style="'.concat(r, '"') : "",
                                o = t.value.replace(/"/g, "&quot;");
                            n += '<option value="'.concat(o, '" ').concat(i, ">").concat(e, "</option>")
                        });
                        var r = this.el.querySelector("#".concat(t, "input-holder"));
                        r.innerHTML = "<select>".concat(n, "</select>"), this.input = r.firstChild
                    }
                }
            })),
            ot = E.extend({
                templateInput: function() {
                    this.pfx;
                    var t = this.ppfx;
                    return '\n      <div class="'.concat(t, "field ").concat(t, 'field-radio">\n      </div>\n    ')
                },
                onRender: function() {
                    var t = this.pfx,
                        e = this.ppfx,
                        n = "".concat(e, "radio-item-label"),
                        r = this.model,
                        i = r.get("property"),
                        o = r.get("list") || r.get("options") || [],
                        a = r.cid,
                        s = "".concat(t, "radio ").concat(t, "radio-").concat(i);
                    if (!this.input && o && o.length) {
                        var l = "";
                        o.forEach(function(r) {
                            var o = r.className ? "".concat(r.className, " ").concat(t, "icon ").concat(n) : "",
                                c = "".concat(i, "-").concat(r.value, "-").concat(a),
                                u = r.name || r.value,
                                d = r.title ? 'title="'.concat(r.title, '"') : "";
                            l += '\n            <div class="'.concat(e, 'radio-item">\n              <input type="radio" class="').concat(s, '" id="').concat(c, '" name="').concat(i, "-").concat(a, '" value="').concat(r.value, '"/>\n              <label class="').concat(o || n, '" ').concat(d, ' for="').concat(c, '">').concat(o ? "" : u, "</label>\n            </div>\n          ")
                        });
                        var c = this.el.querySelector(".".concat(e, "field"));
                        c.innerHTML = '<div class="'.concat(e, 'radio-items">').concat(l, "</div>"), this.input = c.firstChild
                    }
                },
                getInputValue: function() {
                    var t = this.getCheckedEl();
                    return t ? t.value : ""
                },
                getCheckedEl: function() {
                    var t = this.getInputEl();
                    return t ? t.querySelector("input:checked") : ""
                },
                setValue: function(t) {
                    var e = this.model,
                        n = t || e.get("value") || e.getDefaultValue(),
                        r = this.getInputEl(),
                        i = r ? r.querySelector('[value="'.concat(n, '"]')) : "";
                    if (i) i.checked = !0;
                    else {
                        var o = this.getCheckedEl();
                        o && (o.checked = !1)
                    }
                }
            }),
            at = n(32);

        function st(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function lt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? st(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : st(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var ct = f.extend({
            defaults: lt(lt({}, f.prototype.defaults), {}, {
                units: [],
                unit: "",
                step: 1,
                min: "",
                max: ""
            }),
            initialize: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                f.callParentInit(f, this, t, e);
                var n = this.get("unit"),
                    r = this.get("units");
                this.input = new at.a({
                    model: this
                }), r.length && !n && this.set("unit", r[0]), f.callInit(this, t, e)
            },
            clearValue: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                return this.set({
                    value: void 0,
                    unit: void 0
                }, t), this
            },
            parseValue: function(t) {
                var e = f.prototype.parseValue.apply(this, arguments),
                    n = this.input.validateInputValue(e.value, {
                        deepCheck: 1
                    }),
                    r = n.value,
                    i = n.unit;
                return e.value = r, e.unit = i, e
            },
            getFullValue: function() {
                var t = this.get("value"),
                    e = this.get("unit");
                return t = Object(l.isUndefined)(t) ? "" : t, e = !Object(l.isUndefined)(e) && t ? e : "", t = "".concat(t).concat(e), f.prototype.getFullValue.apply(this, [t])
            }
        });

        function ut(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function dt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? ut(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : ut(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var ht = ct.extend({
            defaults: dt(dt({}, ct.prototype.defaults), {}, {
                showInput: 1
            })
        });

        function ft(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function pt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? ft(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : ft(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var gt = W.extend({
            events: function() {
                return pt(pt({}, W.prototype.events), {}, {
                    "change [type=range]": "inputValueChanged",
                    "input [type=range]": "inputValueChangedSoft",
                    change: ""
                })
            },
            templateInput: function(t) {
                var e = this.ppfx;
                return '\n      <div class="'.concat(e, "field ").concat(e, 'field-range">\n        <input type="range"\n          min="').concat(t.get("min"), '"\n          max="').concat(t.get("max"), '"\n          step="').concat(t.get("step"), '"/>\n      </div>\n    ')
            },
            getSliderEl: function() {
                return this.slider || (this.slider = this.el.querySelector("input[type=range]")), this.slider
            },
            inputValueChanged: function() {
                var t = this.model,
                    e = t.get("step");
                this.getInputEl().value = this.getSliderEl().value;
                var n = this.getInputValue() - e;
                t.set("value", n, {
                    avoidStore: 1
                }).set("value", n + e), this.elementUpdated()
            },
            inputValueChangedSoft: function() {
                this.getInputEl().value = this.getSliderEl().value, this.model.set("value", this.getInputValue(), {
                    avoidStore: 1
                }), this.elementUpdated()
            },
            setValue: function(t) {
                var e = this.model.parseValue(t);
                this.getSliderEl().value = parseFloat(e.value), W.prototype.setValue.apply(this, arguments)
            },
            onRender: function() {
                W.prototype.onRender.apply(this, arguments), this.model.get("showInput") || (this.inputInst.el.style.display = "none")
            },
            clearCached: function() {
                W.prototype.clearCached.apply(this, arguments), this.slider = null
            }
        });

        function vt(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function mt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? vt(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : vt(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var bt = e.default = a.a.Collection.extend(s.a).extend({
            extendViewApi: 1,
            types: [{
                id: "stack",
                model: C,
                view: H,
                isType: function(t) {
                    if (t && "stack" == t.type) return t
                }
            }, {
                id: "composite",
                model: v,
                view: L,
                isType: function(t) {
                    if (t && "composite" == t.type) return t
                }
            }, {
                id: "file",
                model: f,
                view: U,
                isType: function(t) {
                    if (t && "file" == t.type) return t
                }
            }, {
                id: "color",
                model: f,
                view: Y,
                isType: function(t) {
                    if (t && "color" == t.type) return t
                }
            }, {
                id: "select",
                model: rt,
                view: it,
                isType: function(t) {
                    if (t && "select" == t.type) return t
                }
            }, {
                id: "radio",
                model: tt,
                view: ot,
                isType: function(t) {
                    if (t && "radio" == t.type) return t
                }
            }, {
                id: "slider",
                model: ht,
                view: gt,
                isType: function(t) {
                    if (t && "slider" == t.type) return t
                }
            }, {
                id: "integer",
                model: ct,
                view: W,
                isType: function(t) {
                    if (t && "integer" == t.type) return t
                }
            }, {
                id: "base",
                model: f,
                view: E,
                isType: function(t) {
                    return t.type = "base", t
                }
            }],
            deepClone: function() {
                var t = this.clone();
                return t.reset(t.map(function(t) {
                    var e = t.clone();
                    return e.typeView = t.typeView, e
                })), t
            },
            parseValue: function(t) {
                var e = this,
                    n = [];
                return t.split(" ").forEach(function(t, r) {
                    var i = e.at(r);
                    i && n.push(mt(mt({}, i.attributes), {
                        value: t
                    }))
                }), n
            },
            getFullValue: function() {
                var t = "";
                return this.each(function(e) {
                    return t += "".concat(e.getFullValue(), " ")
                }), t.trim()
            }
        })
    }, function(t, e, n) {
        var r = n(82);
        t.exports = function(t, e) {
            if (null == t) return {};
            var n, i, o = r(t, e);
            if (Object.getOwnPropertySymbols) {
                var a = Object.getOwnPropertySymbols(t);
                for (i = 0; i < a.length; i++) n = a[i], e.indexOf(n) >= 0 || Object.prototype.propertyIsEnumerable.call(t, n) && (o[n] = t[n])
            }
            return o
        }
    }, function(t, e) {
        var n;
        n = function() {
            return this
        }();
        try {
            n = n || new Function("return this")()
        } catch (t) {
            "object" == typeof window && (n = window)
        }
        t.exports = n
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1),
            i = n.n(r).a.$;
        e.default = {
            startSelectPosition: function(t, e) {
                var n = this,
                    r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                this.isPointed = !1;
                var i = this.editorModel.get("Utils"),
                    o = t.ownerDocument.body;
                i && !this.sorter && (this.sorter = new i.Sorter({
                    container: o,
                    placer: this.canvas.getPlacerEl(),
                    containerSel: "*",
                    itemSel: "*",
                    pfx: this.ppfx,
                    direction: "a",
                    document: e,
                    wmargin: 1,
                    nested: 1,
                    em: this.editorModel,
                    canvasRelative: 1,
                    scale: function() {
                        return n.em.getZoomDecimal()
                    }
                })), r.onStart && (this.sorter.onStart = r.onStart), t && this.sorter.startSort(t, {
                    container: o
                })
            },
            getOffsetDim: function() {
                var t = this.offset(this.canvas.getFrameEl()),
                    e = this.offset(this.canvas.getElement());
                return {
                    top: t.top - e.top,
                    left: t.left - e.left
                }
            },
            stopSelectPosition: function() {
                this.posTargetCollection = null, this.posIndex = "after" == this.posMethod && 0 !== this.cDim.length ? this.posIndex + 1 : this.posIndex, this.sorter && (this.sorter.moved = 0, this.sorter.endMove()), this.cDim && (this.posIsLastEl = 0 !== this.cDim.length && "after" == this.posMethod && this.posIndex == this.cDim.length, this.posTargetEl = 0 === this.cDim.length ? i(this.outsideElem) : !this.posIsLastEl && this.cDim[this.posIndex] ? i(this.cDim[this.posIndex][5]).parent() : i(this.outsideElem), this.posTargetModel = this.posTargetEl.data("model"), this.posTargetCollection = this.posTargetEl.data("model-comp"))
            },
            enable: function() {
                this.startSelectPosition()
            },
            nearFloat: function(t, e, n) {
                var r = t || 0,
                    i = e || "before",
                    o = n.length,
                    a = 0 !== o && "after" == i && r == o;
                return 0 !== o && (!a && !n[r][4] || n[r - 1] && !n[r - 1][4] || a && !n[r - 1][4]) ? 1 : 0
            },
            run: function() {
                this.enable()
            },
            stop: function() {
                this.stopSelectPosition(), this.$wrapper.css("cursor", ""), this.$wrapper.unbind()
            }
        }
    }, function(t, e, n) {
        "use strict";
        var r = n(40);
        window.Promise = window.Promise || r.a, e.a = "function" == typeof fetch ? fetch.bind() : function(t, e) {
            return new r.a(function(n, i) {
                var o = new XMLHttpRequest;
                for (var a in o.open(e.method || "get", t), o.withCredentials = "include" == e.credentials, e.headers || {}) o.setRequestHeader(a, e.headers[a]);
                o.onload = function(t) {
                    return n({
                        status: o.status,
                        statusText: o.statusText,
                        text: function() {
                            return r.a.resolve(o.responseText)
                        }
                    })
                }, o.onerror = i, o.upload && e.onProgress && (o.upload.onprogress = e.onProgress), e.body ? o.send(e.body) : o.send()
            })
        }
    }, function(t, e, n) {
        "use strict";
        var r = n(8),
            i = n.n(r),
            o = n(0);
        e.a = function(t) {
            var e = t,
                n = "data-gjs-";
            return {
                compTypes: "",
                modelAttrStart: n,
                splitPropsFromAttr: function() {
                    var t = this,
                        e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        r = {},
                        i = {};
                    return Object(o.each)(e, function(e, a) {
                        if (0 === a.indexOf(t.modelAttrStart)) {
                            var s = a.replace(n, ""),
                                l = e.length,
                                c = e && Object(o.isString)(e),
                                u = c && e.substr(0, 1),
                                d = c && e.substr(l - 1);
                            e = "false" !== (e = "true" === e || e) && e;
                            try {
                                e = "{" == u && "}" == d || "[" == u && "]" == d ? JSON.parse(e) : e
                            } catch (t) {}
                            r[s] = e
                        } else i[a] = e
                    }), {
                        props: r,
                        attrs: i
                    }
                },
                parseStyle: function(t) {
                    for (var e = {}, n = t.split(";"), r = 0, i = n.length; r < i; r++) {
                        var o = n[r].trim();
                        if (o) {
                            var a = o.split(":");
                            e[a[0].trim()] = a.slice(1).join(":").trim()
                        }
                    }
                    return e
                },
                parseClass: function(t) {
                    for (var e = [], n = t.split(" "), r = 0, i = n.length; r < i; r++) {
                        var o = n[r].trim();
                        o && e.push(o)
                    }
                    return e
                },
                parseNode: function(r) {
                    for (var o = [], a = r.childNodes, s = 0, l = a.length; s < l; s++) {
                        var c = a[s],
                            u = c.attributes || [],
                            d = u.length,
                            h = o[o.length - 1],
                            f = c.childNodes.length,
                            p = this.compTypes,
                            g = {};
                        if (p) {
                            var v = "",
                                m = c.getAttribute && c.getAttribute("".concat(n, "type"));
                            if (m) g = {
                                type: m
                            };
                            else {
                                for (var b = 0; b < p.length; b++) {
                                    var y = p[b];
                                    if (v = y.model.isComponent(c)) {
                                        "object" !== i()(v) && (v = {
                                            type: y.id
                                        });
                                        break
                                    }
                                }
                                g = v
                            }
                        }
                        g.tagName || (g.tagName = c.tagName ? c.tagName.toLowerCase() : ""), d && (g.attributes = {});
                        for (var w = 0; w < d; w++) {
                            var x = u[w].nodeName,
                                O = u[w].nodeValue;
                            if ("style" == x) g.style = this.parseStyle(O);
                            else if ("class" == x) g.classes = this.parseClass(O);
                            else {
                                if ("contenteditable" == x) continue;
                                if (0 === x.indexOf(n)) {
                                    var C = x.replace(n, ""),
                                        S = O.length,
                                        k = O && O.substr(0, 1),
                                        j = O && O.substr(S - 1);
                                    O = "false" !== (O = "true" === O || O) && O;
                                    try {
                                        O = "{" == k && "}" == j || "[" == k && "]" == j ? JSON.parse(O) : O
                                    } catch (t) {}
                                    g[C] = O
                                } else "" === O && !0 === c[x] && (O = !0), g.attributes[x] = O
                            }
                        }
                        if (f && !g.components) {
                            var T = c.childNodes[0];
                            1 === f && 3 === T.nodeType ? (!g.type && (g.type = "text"), g.components = {
                                type: "textnode",
                                content: T.nodeValue
                            }) : g.components = this.parseNode(c)
                        }
                        if ("textnode" == g.type) {
                            if (h && "textnode" == h.type) {
                                h.content += g.content;
                                continue
                            }
                            if (!t.keepEmptyTextNodes) {
                                var P = c.nodeValue;
                                if (" " != P && !P.trim()) continue
                            }
                        }
                        var E = g.components;
                        if (!g.type && E) {
                            for (var M = 1, D = 0, A = 0; A < E.length; A++) {
                                var L = E[A],
                                    _ = L.type;
                                if (["text", "textnode"].indexOf(_) < 0 && e.textTags.indexOf(L.tagName) < 0) {
                                    M = 0;
                                    break
                                }
                                "textnode" == _ && (D = 1)
                            }
                            M && D && (g.type = "text")
                        }(g.tagName || "textnode" == g.type) && o.push(g)
                    }
                    return o
                },
                parse: function(t, n) {
                    var r = e.em,
                        i = r && r.get("Config") || {},
                        o = {
                            html: "",
                            css: ""
                        },
                        a = document.createElement("div");
                    a.innerHTML = t;
                    var s = a.querySelectorAll("script"),
                        l = s.length;
                    if (!i.allowScripts)
                        for (; l--;) s[l].parentNode.removeChild(s[l]);
                    if (n) {
                        for (var c = a.querySelectorAll("style"), u = c.length, d = ""; u--;) d = c[u].innerHTML + d, c[u].parentNode.removeChild(c[u]);
                        d && (o.css = n.parse(d))
                    }
                    var h = this.parseNode(a),
                        f = 1 !== h.length || e.returnArray ? h : h[0];
                    return o.html = f, r && r.trigger("parse:html", {
                        input: t,
                        output: o
                    }), o
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        var r = n(0),
            i = n(1),
            o = n.n(i),
            a = o.a.Model,
            s = o.a.View;
        e.a = {
            types: [],
            initialize: function(t, e) {
                var n = this;
                this.model = function() {
                    var t, e, r, i = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    if (i && i.type) {
                        var a = n.getBaseType();
                        t = (r = n.getType(i.type)) ? r.model : a.model, e = r ? r.view : a.view
                    } else {
                        var s = n.recognizeType(i);
                        t = (r = s.type).model, e = r.view, i = s.attributes
                    }
                    var l = new t(i, o);
                    return l.typeView = e, l
                };
                var r = this.init && this.init.bind(this);
                r && r()
            },
            recognizeType: function(t) {
                for (var e = this.getTypes(), n = 0; n < e.length; n++) {
                    var r = e[n],
                        i = r.isType(t);
                    if (i = "boolean" == typeof i && i ? {
                            type: r.id
                        } : i) return {
                        type: r,
                        attributes: i
                    }
                }
                return {
                    type: this.getBaseType(),
                    attributes: t
                }
            },
            getBaseType: function() {
                var t = this.getTypes();
                return t[t.length - 1]
            },
            getTypes: function() {
                return this.types
            },
            getType: function(t) {
                for (var e = this.getTypes(), n = 0; n < e.length; n++) {
                    var r = e[n];
                    if (r.id === t) return r
                }
            },
            addType: function(t, e) {
                var n = this.getType(t),
                    i = this.getBaseType(),
                    o = n ? n.model : i.model,
                    l = n ? n.view : i.view,
                    c = e.model,
                    u = e.view,
                    d = e.isType;
                c = c instanceof a || Object(r.isFunction)(c) ? c : o.extend(c || {}), u = u instanceof s || Object(r.isFunction)(u) ? u : l.extend(u || {}), !this.extendViewApi || e.model || e.view || (u = u.extend(e)), n ? (n.model = c, n.view = u, n.isType = d || n.isType) : (e.id = t, e.model = c, e.view = u, e.isType = d || function(e) {
                    if (e && e.type == t) return !0
                }, this.getTypes().unshift(e))
            }
        }
    }, function(t, e, n) {
        "use strict";
        var r = n(1),
            i = n.n(r),
            o = n(0),
            a = Number.MAX_VALUE;
        e.a = i.a.Model.extend({
            initialize: function() {
                this.compCls = [], this.ids = []
            },
            buildFromModel: function(t) {
                var e = this,
                    n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    r = "",
                    i = this.em,
                    o = i && i.getConfig("avoidInlineStyle"),
                    a = t.styleToString(),
                    s = t.get("classes"),
                    l = n.wrapperIsBody,
                    c = t.get("wrapper");
                if (this.ids.push("#".concat(t.getId())), s.each(function(t) {
                        return e.compCls.push(t.getFullName())
                    }), !o && a) {
                    var u = "#".concat(t.getId());
                    r = "".concat(u = l && c ? "body" : u, "{").concat(a, "}")
                }
                return t.components().each(function(t) {
                    return r += e.buildFromModel(t, n)
                }), r
            },
            build: function(t) {
                var e = this,
                    n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    r = n.cssc,
                    i = n.em || "";
                this.em = i, this.compCls = [], this.ids = [];
                var a = this.buildFromModel(t, n),
                    s = Object(o.isUndefined)(n.clearStyles) && i ? i.getConfig("clearStyles") : n.clearStyles;
                if (r) {
                    var l = r.getAll(),
                        c = {},
                        u = [];
                    l.each(function(t) {
                        var r = t.getAtRule();
                        if (r) {
                            var i = c[r];
                            i ? i.push(t) : c[r] = [t]
                        } else a += e.buildFromRule(t, u, n)
                    }), this.sortMediaObject(c).forEach(function(t) {
                        var r = "",
                            i = t.key;
                        t.value.forEach(function(t) {
                            var o = e.buildFromRule(t, u, n);
                            t.get("singleAtRule") ? a += "".concat(i, "{").concat(o, "}") : r += o
                        }), r && (a += "".concat(i, "{").concat(r, "}"))
                    }), i && s && l.remove(u)
                }
                return a
            },
            buildFromRule: function(t, e) {
                var n, r = this,
                    i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    o = "",
                    a = t.selectorsToString({
                        skipAdd: 1
                    }),
                    s = t.get("selectorsAdd"),
                    l = t.get("singleAtRule");
                if (t.get("selectors").each(function(t) {
                        var e = t.getFullName();
                        (r.compCls.indexOf(e) >= 0 || r.ids.indexOf(e) >= 0 || i.keepUnusedStyles) && (n = 1)
                    }), a && n || s || l) {
                    var c = t.getDeclaration();
                    c && (o += c)
                } else e.push(t);
                return o
            },
            getQueryLength: function(t) {
                var e = /(-?\d*\.?\d+)\w{0,}/.exec(t);
                return e ? parseFloat(e[1]) : a
            },
            sortMediaObject: function() {
                var t = this,
                    e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    n = [];
                return Object(o.each)(e, function(t, e) {
                    return n.push({
                        key: e,
                        value: t
                    })
                }), n.sort(function(e, n) {
                    var r = [e.key, n.key].every(function(t) {
                            return -1 !== t.indexOf("min-width")
                        }),
                        i = r ? e.key : n.key,
                        o = r ? n.key : e.key;
                    return t.getQueryLength(i) - t.getQueryLength(o)
                })
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r = n(1),
            i = n.n(r),
            o = n(0),
            a = n(3),
            s = n(18);
        i.a.$, e.a = s.a.extend({
            events: {
                "change input": "handleChange",
                "change select": "handleUnitChange",
                "click [data-arrow-up]": "upArrowClick",
                "click [data-arrow-down]": "downArrowClick",
                "mousedown [data-arrows]": "downIncrement",
                keydown: "handleKeyDown"
            },
            template: function() {
                var t = this.ppfx;
                return '\n      <span class="'.concat(t, 'input-holder"></span>\n      <span class="').concat(t, 'field-units"></span>\n      <div class="').concat(t, 'field-arrows" data-arrows>\n        <div class="').concat(t, 'field-arrow-u" data-arrow-up></div>\n        <div class="').concat(t, 'field-arrow-d" data-arrow-down></div>\n      </div>\n    ')
            },
            inputClass: function() {
                var t = this.ppfx;
                return this.opts.contClass || "".concat(t, "field ").concat(t, "field-integer")
            },
            initialize: function() {
                s.a.prototype.initialize.apply(this, arguments), Object(o.bindAll)(this, "moveIncrement", "upIncrement"), this.doc = document, this.listenTo(this.model, "change:unit", this.handleModelChange)
            },
            setValue: function(t, e) {
                var n = e || {},
                    r = this.validateInputValue(t, {
                        deepCheck: 1
                    }),
                    i = {
                        value: r.value
                    };
                (r.unit || r.force) && (i.unit = r.unit), this.model.set(i, n), n.silent && this.handleModelChange()
            },
            handleChange: function(t) {
                t.stopPropagation(), this.setValue(this.getInputEl().value), this.elementUpdated()
            },
            handleUnitChange: function(t) {
                t.stopPropagation();
                var e = this.getUnitEl().value;
                this.model.set("unit", e), this.elementUpdated()
            },
            handleKeyDown: function(t) {
                "ArrowUp" === t.key && (t.preventDefault(), this.upArrowClick()), "ArrowDown" === t.key && (t.preventDefault(), this.downArrowClick())
            },
            elementUpdated: function() {
                this.model.trigger("el:change")
            },
            handleModelChange: function() {
                var t = this.model;
                this.getInputEl().value = t.get("value");
                var e = this.getUnitEl();
                e && (e.value = t.get("unit") || "")
            },
            getUnitEl: function() {
                if (!this.unitEl) {
                    var t = this.model,
                        e = t.get("units") || [];
                    if (e.length) {
                        var n = [];
                        e.forEach(function(e) {
                            var r = e == t.get("unit") ? "selected" : "";
                            n.push("<option ".concat(r, ">").concat(e, "</option>"))
                        });
                        var r = document.createElement("div");
                        r.innerHTML = '<select class="'.concat(this.ppfx, 'input-unit">').concat(n.join(""), "</select>"), this.unitEl = r.firstChild
                    }
                }
                return this.unitEl
            },
            upArrowClick: function() {
                var t = this.model,
                    e = t.get("step"),
                    n = parseFloat(t.get("value"));
                n = this.normalizeValue(n + e);
                var r = this.validateInputValue(n);
                t.set("value", r.value), this.elementUpdated()
            },
            downArrowClick: function() {
                var t = this.model,
                    e = t.get("step"),
                    n = parseFloat(t.get("value")),
                    r = this.normalizeValue(n - e),
                    i = this.validateInputValue(r);
                t.set("value", i.value), this.elementUpdated()
            },
            downIncrement: function(t) {
                t.preventDefault(), this.moved = 0;
                var e = this.model.get("value");
                e = this.normalizeValue(e), this.current = {
                    y: t.pageY,
                    val: e
                }, Object(a.v)(this.doc, "mousemove", this.moveIncrement), Object(a.v)(this.doc, "mouseup", this.upIncrement)
            },
            moveIncrement: function(t) {
                this.moved = 1;
                var e = this.model,
                    n = e.get("step"),
                    r = this.current,
                    i = this.normalizeValue(r.val + (r.y - t.pageY) * n);
                return this.prValue = this.validateInputValue(i).value, e.set("value", this.prValue, {
                    avoidStore: 1
                }), !1
            },
            upIncrement: function() {
                var t = this.model,
                    e = t.get("step");
                if (Object(a.u)(this.doc, "mouseup", this.upIncrement), Object(a.u)(this.doc, "mousemove", this.moveIncrement), this.prValue && this.moved) {
                    var n = this.prValue - e;
                    t.set("value", n, {
                        avoidStore: 1
                    }).set("value", n + e), this.elementUpdated()
                }
            },
            normalizeValue: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0,
                    n = this.model.get("step"),
                    r = 0;
                if (isNaN(t)) return e;
                if (t = parseFloat(t), Math.floor(t) !== t) {
                    var i = n.toString().split(".")[1];
                    r = i ? i.length : 0
                }
                return r ? parseFloat(t.toFixed(r)) : t
            },
            validateInputValue: function(t, e) {
                var n = 0,
                    r = e || {},
                    i = this.model,
                    a = Object(o.isUndefined)(t) ? "" : t,
                    s = i.get("units") || [],
                    l = i.get("unit") || s.length && s[0] || "",
                    c = i.get("max"),
                    u = i.get("min"),
                    d = !!i.get("limitlessMax");
                if (i.get("limitlessMin"), r.deepCheck) {
                    var h = i.get("fixedValues") || [];
                    if (a) {
                        var f = new RegExp("^" + h.join("|"), "g");
                        if (h.length && f.test(a)) a = a.match(f)[0], l = "", n = 1;
                        else {
                            var p = a + "";
                            a += "", a = parseFloat(a.replace(",", ".")), a = isNaN(a) ? "" : a;
                            var g = p.replace(a, "");
                            Object(o.indexOf)(s, g) >= 0 && (l = g)
                        }
                    }
                }
                return d || Object(o.isUndefined)(c) || "" === c || (a = a > c ? c : a), d || Object(o.isUndefined)(u) || "" === u || (a = a < u ? u : a), {
                    force: n,
                    value: a,
                    unit: l
                }
            },
            render: function() {
                s.a.prototype.render.call(this), this.unitEl = null;
                var t = this.getUnitEl();
                return t && this.$el.find(".".concat(this.ppfx, "field-units")).get(0).appendChild(t), this
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r = n(1),
            i = n.n(r),
            o = n(34);
        e.a = i.a.Collection.extend({
            model: o.a,
            initialize: function(t, e) {
                var n = this;
                e && e.em && (this.editor = e.em), setTimeout(function() {
                    n.on("remove", n.onRemove), n.on("add", n.onAdd)
                })
            },
            onAdd: function(t) {
                t.ensureSelectors()
            },
            onRemove: function(t) {
                var e = this.editor;
                e.stopListening(t), e.get("UndoManager").remove(t)
            },
            add: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                return "string" == typeof t && (t = this.editor.get("Parser").parseCss(t)), e.em = this.editor, i.a.Collection.prototype.add.apply(this, [t, e])
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r = n(7),
            i = n.n(r),
            o = n(2),
            a = n.n(o),
            s = n(0),
            l = n(1),
            c = n.n(l),
            u = n(23),
            d = n(12);

        function h(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function f(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? h(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : h(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var p = window.CSS;
        e.a = c.a.Model.extend(u.a).extend({
            defaults: {
                selectors: [],
                selectorsAdd: "",
                style: {},
                mediaText: "",
                state: "",
                stylable: !0,
                atRuleType: "",
                singleAtRule: 0,
                important: 0
            },
            initialize: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                this.config = t || {}, this.opt = e, this.em = e.em, this.ensureSelectors()
            },
            clone: function() {
                var t = f({}, this.opt),
                    e = f({}, this.attributes);
                return e.selectors = this.get("selectors").map(function(t) {
                    return t.clone()
                }), new this.constructor(e, t)
            },
            ensureSelectors: function() {
                var t = this.em,
                    e = t && t.get("SelectorManager"),
                    n = [this, "change:selectors", this.ensureSelectors],
                    r = this.getSelectors();
                if (this.stopListening.apply(this, n), r.models && (r = i()(r.models)), Array.isArray(r)) {
                    var o = r.filter(function(t) {
                        return t
                    }).map(function(t) {
                        return e ? e.add(t) : t
                    });
                    r = new d.a(o)
                }
                this.set("selectors", r), this.listenTo.apply(this, n)
            },
            getAtRule: function() {
                var t = this.get("atRuleType"),
                    e = this.get("mediaText"),
                    n = t ? "@".concat(t) : e ? "@media" : "";
                return n + (e && n ? " ".concat(e) : "")
            },
            selectorsToString: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = [],
                    n = this.em,
                    r = this.get("state"),
                    i = this.get("wrapper"),
                    o = this.get("selectorsAdd"),
                    a = {
                        escape: function(t) {
                            return p && p.escape ? p.escape(t) : t
                        }
                    },
                    s = i && n && n.getConfig("wrapperIsBody") ? "body" : this.get("selectors").getFullString(0, a),
                    l = r && !t.skipState ? ":".concat(r) : "";
                return s && e.push("".concat(s).concat(l)), o && !t.skipAdd && e.push(o), e.join(", ")
            },
            getDeclaration: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = "",
                    n = this.selectorsToString(),
                    r = this.styleToString(t),
                    i = this.get("singleAtRule");
                return (n || i) && r && (e = i ? r : "".concat(n, "{").concat(r, "}")), e
            },
            toCSS: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = "",
                    n = this.getAtRule(),
                    r = this.getDeclaration(t);
                return r && (e = r), n && e && (e = "".concat(n, "{").concat(e, "}")), e
            },
            toJSON: function() {
                for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                var r = c.a.Model.prototype.toJSON.apply(this, e);
                if (this.em.getConfig("avoidDefaults")) {
                    var i = this.defaults;
                    Object(s.forEach)(i, function(t, e) {
                        r[e] === t && delete r[e]
                    }), Object(s.isEmpty)(r.selectors) && delete r.selectors, Object(s.isEmpty)(r.style) && delete r.style
                }
                return r
            },
            compare: function(t, e, n) {
                var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
                    i = e || "",
                    o = n || "",
                    a = r.selectorsAdd || "",
                    l = r.atRuleType || "";
                t instanceof Array || t.models || (t = [t]);
                var c = Object(s.map)(t.models || t, function(t) {
                        return t.get("name")
                    }),
                    u = Object(s.map)(this.get("selectors").models, function(t) {
                        return t.get("name")
                    });
                if (c.length !== u.length) return !1;
                for (var d = 0; d < c.length; d++) {
                    for (var h = 0, f = 0; f < u.length; f++) c[d] === u[f] && (h = 1);
                    if (0 === h) return !1
                }
                return this.get("state") === i && this.get("mediaText") === o && this.get("selectorsAdd") === a && this.get("atRuleType") === l || !1
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r = n(1),
            i = n.n(r),
            o = n(0);
        e.a = i.a.View.extend({
            initialize: function(t) {
                this.opts = t || {}, this.config = t.config || {}, this.em = this.config.em;
                var e = this.collection;
                this.listenTo(e, "add", this.addTo), this.listenTo(e, "reset", this.resetChildren), this.listenTo(e, "remove", this.removeChildren)
            },
            removeChildren: function(t, e) {
                var n = this,
                    r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                t.views.forEach(function(t) {
                    if (t) {
                        var e = t.childrenView,
                            n = t.scriptContainer;
                        e && e.stopListening(), n && n.remove(), t.remove.apply(t)
                    }
                }), t.components().forEach(function(t) {
                    return n.removeChildren(t, e, r)
                })
            },
            addTo: function(t) {
                var e = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    n = this.config.em,
                    r = this.collection.indexOf(t);
                if (this.addToCollection(t, null, r), n && !e.temporary) {
                    ! function t(e) {
                        n.trigger("component:add", e), e.components().forEach(function(e) {
                            return t(e)
                        })
                    }(t)
                }
            },
            addToCollection: function(t, e, r) {
                this.compView || (this.compView = n(6).default);
                for (var i = this.config, a = this.opts, s = this.em, l = e || null, c = i.frameView, u = void 0 === c ? {} : c, d = u.model && t.getView(u.model), h = a.componentTypes || s && s.get("DomComponents").getTypes(), f = t.get("type"), p = this.compView, g = 0; g < h.length; g++)
                    if (h[g].id == f) {
                        p = h[g].view;
                        break
                    } var v, m = d || new p({
                    model: t,
                    config: i,
                    componentTypes: h
                });
                try {
                    v = m.render().el
                } catch (t) {
                    v = document.createTextNode(""), s.logError(t)
                }
                if (l) l.appendChild(v);
                else {
                    var b = this.parentEl,
                        y = b.childNodes;
                    if (Object(o.isUndefined)(r)) b.appendChild(v);
                    else {
                        var w = y.length == r;
                        w && r--, w || !y.length ? b.appendChild(v) : b.insertBefore(v, y[r])
                    }
                }
                return v
            },
            resetChildren: function(t) {
                var e = this,
                    n = (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}).previousModels,
                    r = void 0 === n ? [] : n;
                this.parentEl.innerHTML = "", r.forEach(function(t) {
                    return e.removeChildren(t, e.collection)
                }), t.each(function(t) {
                    return e.addToCollection(t)
                })
            },
            render: function(t) {
                var e = this,
                    n = this.el,
                    r = document.createDocumentFragment();
                return this.parentEl = t || this.el, this.collection.each(function(t) {
                    return e.addToCollection(t, r)
                }), n.innerHTML = "", n.appendChild(r), this
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r, i = n(0),
            o = n(3),
            a = n(1),
            s = n.n(a),
            l = n(6),
            c = n(5),
            u = "contentEditable",
            d = s.a.$;
        e.a = s.a.View.extend({
            events: {
                "mousedown [data-toggle-move]": "startSort",
                "touchstart [data-toggle-move]": "startSort",
                "click [data-toggle-visible]": "toggleVisibility",
                "click [data-toggle-select]": "handleSelect",
                "mouseover [data-toggle-select]": "handleHover",
                "mouseout [data-toggle-select]": "handleHoverOut",
                "click [data-toggle-open]": "toggleOpening",
                "dblclick [data-name]": "handleEdit",
                "focusout [data-name]": "handleEditEnd"
            },
            template: function(t) {
                var e = this.pfx,
                    n = this.ppfx,
                    r = this.config,
                    i = this.clsNoEdit,
                    o = r.hidable,
                    a = this.countChildren(t),
                    s = a ? "" : this.clsNoChild,
                    l = "".concat(this.clsTitle, " ").concat(s),
                    c = "".concat(this.clsTitleC, " ").concat(n, "one-bg"),
                    u = "".concat(this.clsCaret, " fa fa-chevron-right"),
                    d = "".concat(this.inputNameCls, " ").concat(i, " ").concat(n, "no-app"),
                    h = this.level + 1,
                    f = "".concat(30 + 10 * h, "px"),
                    p = t.getName(),
                    g = t.getIcon(),
                    v = "".concat(e, "layer");
                return "\n      ".concat(o ? '<i class="'.concat(e, "layer-vis fa fa-eye ").concat(this.isVisible() ? "" : "fa-eye-slash", '" data-toggle-visible></i>') : "", '\n      <div class="').concat(c, '">\n        <div class="').concat(l, '" style="padding-left: ').concat(f, '" data-toggle-select>\n          <div class="').concat(e, 'layer-title-inn">\n            <i class="').concat(u, '" data-toggle-open></i>\n            ').concat(g ? '<span class="'.concat(v, '__icon">').concat(g, "</span>") : "", '\n            <span class="').concat(d, '" data-name>').concat(p, '</span>\n          </div>\n        </div>\n      </div>\n      <div class="').concat(this.clsCount, '" data-count>').concat(a || "", '</div>\n      <div class="').concat(this.clsMove, '" data-toggle-move>\n        <i class="fa fa-arrows-alt"></i>\n      </div>\n      <div class="').concat(this.clsChildren, '"></div>')
            },
            initialize: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                this.opt = t, this.level = t.level, this.config = t.config, this.em = t.config.em, this.ppfx = this.em.get("Config").stylePrefix, this.sorter = t.sorter || "", this.pfx = this.config.stylePrefix, this.parentView = t.parentView;
                var e = this.pfx,
                    n = this.ppfx,
                    r = this.model,
                    i = r.get("components"),
                    o = r.get("type") || "default";
                r.set("open", !1), this.listenTo(i, "remove add reset", this.checkChildren), this.listenTo(r, "change:status", this.updateStatus), this.listenTo(r, "change:open", this.updateOpening), this.listenTo(r, "change:layerable", this.updateLayerable), this.listenTo(r, "change:style:display", this.updateVisibility), this.className = "".concat(e, "layer ").concat(e, "layer__t-").concat(o, " no-select ").concat(n, "two-color"), this.inputNameCls = "".concat(n, "layer-name"), this.clsTitleC = "".concat(e, "layer-title-c"), this.clsTitle = "".concat(e, "layer-title"), this.clsCaret = "".concat(e, "layer-caret"), this.clsCount = "".concat(e, "layer-count"), this.clsMove = "".concat(e, "layer-move"), this.clsChildren = "".concat(e, "layer-children"), this.clsNoChild = "".concat(e, "layer-no-chld"), this.clsEdit = "".concat(this.inputNameCls, "--edit"), this.clsNoEdit = "".concat(this.inputNameCls, "--no-edit"), this.$el.data("model", r), this.$el.data("collection", i), r.viewLayer = this
            },
            getVisibilityEl: function() {
                return this.eyeEl || (this.eyeEl = this.$el.children(".".concat(this.pfx, "layer-vis"))), this.eyeEl
            },
            updateVisibility: function() {
                var t = this.pfx,
                    e = this.model,
                    n = "".concat(t, "layer-hidden"),
                    r = "none" === e.getStyle().display ? "addClass" : "removeClass";
                this.$el[r](n), this.getVisibilityEl()[r]("fa-eye-slash")
            },
            toggleVisibility: function(t) {
                t && t.stopPropagation();
                var e = this.model,
                    n = this.em,
                    r = "__prev-display",
                    i = e.get(r),
                    o = e.getStyle(),
                    a = o.display;
                "none" == a ? (delete o.display, i && (o.display = i, e.unset(r))) : (a && e.set(r, a), o.display = "none"), e.setStyle(o), n && n.trigger("component:toggled")
            },
            handleEdit: function(t) {
                t && t.stopPropagation();
                var e = this.em,
                    n = this.$el,
                    r = this.clsNoEdit,
                    i = this.clsEdit,
                    o = this.getInputName();
                o[u] = !0, o.focus(), e && e.setEditing(1), n.find(".".concat(this.inputNameCls)).removeClass(r).addClass(i)
            },
            handleEditEnd: function(t) {
                t && t.stopPropagation();
                var e = this.em,
                    n = this.$el,
                    r = this.clsNoEdit,
                    i = this.clsEdit,
                    o = this.getInputName(),
                    a = o.textContent;
                o.scrollLeft = 0, o[u] = !1, this.model.set({
                    "custom-name": a
                }), e && e.setEditing(0), n.find(".".concat(this.inputNameCls)).addClass(r).removeClass(i)
            },
            getInputName: function() {
                return this.inputName || (this.inputName = this.el.querySelector(".".concat(this.inputNameCls))), this.inputName
            },
            updateOpening: function() {
                var t = this.opt.opened || {},
                    e = this.model,
                    n = "fa-chevron-down";
                e.get("open") ? (this.$el.addClass("open"), this.getCaret().addClass(n), t[e.cid] = e) : (this.$el.removeClass("open"), this.getCaret().removeClass(n), delete t[e.cid])
            },
            toggleOpening: function(t) {
                t.stopPropagation(), this.model.get("components").length && this.model.set("open", !this.model.get("open"))
            },
            handleSelect: function(t) {
                t.stopPropagation();
                var e = this.em,
                    n = this.config;
                if (e) {
                    var r = this.model;
                    e.setSelected(r, {
                        fromLayers: 1,
                        event: t
                    });
                    var i = n.scrollCanvas;
                    i && r.views.forEach(function(t) {
                        return t.scrollIntoView(i)
                    })
                }
            },
            handleHover: function(t) {
                t.stopPropagation();
                var e = this.em,
                    n = this.config,
                    r = this.model;
                e && n.showHover && e.setHovered(r, {
                    fromLayers: 1
                })
            },
            handleHoverOut: function(t) {
                t.stopPropagation();
                var e = this.em,
                    n = this.config;
                e && n.showHover && e.setHovered(0, {
                    fromLayers: 1
                })
            },
            startSort: function(t) {
                t.stopPropagation();
                var e = this.em,
                    n = this.sorter;
                t.button && 0 !== t.button || n && (n.onStart = function(t) {
                    return e.trigger("".concat(c.eventDrag, ":start"), t)
                }, n.onMoveClb = function(t) {
                    return e.trigger(c.eventDrag, t)
                }, n.startSort(t.target))
            },
            freeze: function() {
                this.$el.addClass(this.pfx + "opac50"), this.model.set("open", 0)
            },
            unfreeze: function() {
                this.$el.removeClass(this.pfx + "opac50")
            },
            updateStatus: function(t) {
                l.default.prototype.updateStatus.apply(this, [{
                    avoidHover: !this.config.highlightHover
                }])
            },
            isVisible: function() {
                var t = this.model.getStyle().display;
                return !(t && "none" === t)
            },
            checkChildren: function() {
                var t = this.model,
                    e = this.clsNoChild,
                    n = this.countChildren(t),
                    r = this.$el.children(".".concat(this.clsTitleC)).children(".".concat(this.clsTitle)),
                    i = this.cnt;
                i || (i = this.$el.children("[data-count]").get(0), this.cnt = i), r[n ? "removeClass" : "addClass"](e), i && (i.innerHTML = n || ""), !n && t.set("open", 0)
            },
            countChildren: function(t) {
                var e = 0;
                return t.get("components").each(function(t) {
                    var n = this.opt.isCountable,
                        r = this.config.hideTextnode;
                    n && !n(t, r) || e++
                }, this), e
            },
            getCaret: function() {
                return this.caret && this.caret.length || (this.pfx, this.caret = this.$el.children(".".concat(this.clsTitleC)).find(".".concat(this.clsCaret))), this.caret
            },
            setRoot: function(t) {
                t = Object(i.isString)(t) ? this.em.getWrapper().find(t)[0] : t;
                var e = Object(o.g)(t, d);
                e && (this.stopListening(), this.model = e, this.initialize(this.opt), this.render())
            },
            updateLayerable: function() {
                (this.parentView || this).render()
            },
            render: function() {
                var t = this.model,
                    e = this.config,
                    o = this.pfx,
                    a = this.ppfx,
                    s = this.opt.isCountable,
                    l = s && !s(t, e.hideTextnode),
                    c = this.isVisible(),
                    u = this.$el.empty(),
                    d = this.level + 1;
                Object(i.isUndefined)(r) && (r = n(90).default);
                var h = new r({
                    collection: t.get("components"),
                    config: this.config,
                    sorter: this.sorter,
                    opened: this.opt.opened,
                    parentView: this,
                    parent: t,
                    level: d
                }).render().$el;
                return this.config.showWrapper || 1 !== d ? (u.html(this.template(t)), u.find(".".concat(this.clsChildren)).append(h)) : u.append(h), t.get("draggable") && this.config.sortable || u.children(".".concat(this.clsMove)).remove(), !c && (this.className += " ".concat(o, "hide")), l && (this.className += " ".concat(a, "hidden")), u.attr("class", this.className), this.updateOpening(), this.updateStatus(), this.updateVisibility(), this
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r = n(1),
            i = n.n(r),
            o = i.a.View.extend({
                tagName: "style",
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    this.config = t.config || {};
                    var e = this.model;
                    this.listenTo(e, "change:style change:state change:mediaText", this.render), this.listenTo(e, "destroy remove", this.remove), this.listenTo(e.get("selectors"), "change", this.render)
                },
                render: function() {
                    var t = this.model.get("important");
                    return this.el.innerHTML = this.model.toCSS({
                        important: t
                    }), this
                }
            }),
            a = o.extend({
                _createElement: function(t) {
                    return document.createTextNode("")
                },
                render: function() {
                    var t = this.model,
                        e = t.get("important");
                    return this.el.textContent = t.getDeclaration({
                        important: e
                    }), this
                }
            }),
            s = i.a.$,
            l = function(t, e) {
                return "".concat(t).concat(e ? "-".concat(parseFloat(e)) : "")
            };
        e.a = i.a.View.extend({
            initialize: function(t) {
                var e = t.config || {};
                this.atRules = {}, this.config = e, this.em = e.em, this.pfx = e.stylePrefix || "", this.className = this.pfx + "rules";
                var n = this.collection;
                this.listenTo(n, "add", this.addTo), this.listenTo(n, "reset", this.render)
            },
            addTo: function(t) {
                this.addToCollection(t)
            },
            addToCollection: function(t, e) {
                if (this.renderStarted) {
                    var n, r, i = e || null,
                        s = {
                            model: t,
                            config: this.config
                        };
                    if ("keyframes" === t.get("atRuleType")) {
                        var c = t.getAtRule(),
                            u = this.atRules[c];
                        if (!u) {
                            var d = document.createElement("style");
                            u = document.createTextNode(""), d.appendChild(document.createTextNode("".concat(c, "{"))), d.appendChild(u), d.appendChild(document.createTextNode("}")), this.atRules[c] = u, n = d
                        }
                        r = new a(s), u.appendData(r.render().el.textContent)
                    } else n = (r = new o(s)).render().el;
                    var h = this.className,
                        f = t.get("mediaText"),
                        p = l(h),
                        g = p;
                    if (f && (g = l(h, this.getMediaWidth(f))), n) {
                        var v, m = i || this.el;
                        try {
                            v = m.querySelector("#".concat(g))
                        } catch (t) {}
                        v || (v = m.querySelector("#".concat(p))), v.appendChild(n)
                    }
                    return n
                }
            },
            getMediaWidth: function(t) {
                return t && t.replace("(".concat(this.em.getConfig("mediaCondition"), ": "), "").replace(")", "")
            },
            render: function() {
                var t = this;
                this.renderStarted = 1, this.atRules = {};
                var e = this.em,
                    n = this.$el,
                    r = this.className,
                    i = this.collection,
                    o = document.createDocumentFragment();
                n.empty();
                var a = e.get("DeviceManager").getAll().pluck("priority");
                return a.every(function(t) {
                    return t
                }) && a.unshift(0), a.forEach(function(t) {
                    return s('<div id="'.concat(l(r, t), '"></div>')).appendTo(o)
                }), i.each(function(e) {
                    return t.addToCollection(e, o)
                }), n.append(o), n.attr("class", r), this
            }
        })
    }, function(t, e, n) {
        "use strict";
        var r = n(2),
            i = n.n(r),
            o = n(1),
            a = n.n(o),
            s = n(0),
            l = n(8),
            c = n.n(l),
            u = n(18);

        function d(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function h(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? d(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : d(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var f = a.a.$;
        ! function(t, e) {
            var n = {
                    beforeShow: d,
                    move: d,
                    change: d,
                    show: d,
                    hide: d,
                    color: !1,
                    flat: !1,
                    showInput: !1,
                    allowEmpty: !1,
                    showButtons: !0,
                    clickoutFiresChange: !0,
                    showInitial: !1,
                    showPalette: !1,
                    showPaletteOnly: !1,
                    hideAfterPaletteSelect: !1,
                    togglePaletteOnly: !1,
                    showSelectionPalette: !0,
                    localStorageKey: !1,
                    appendTo: "body",
                    maxSelectionSize: 7,
                    cancelText: "cancel",
                    chooseText: "choose",
                    togglePaletteMoreText: "more",
                    togglePaletteLessText: "less",
                    clearText: "Clear Color Selection",
                    noColorSelectedText: "No Color Selected",
                    preferredFormat: !1,
                    className: "",
                    containerClassName: "",
                    replacerClassName: "",
                    showAlpha: !1,
                    theme: "sp-light",
                    palette: [
                        ["#ffffff", "#000000", "#ff0000", "#ff8000", "#ffff00", "#008000", "#0000ff", "#4b0082", "#9400d3"]
                    ],
                    selectionPalette: [],
                    disabled: !1,
                    offset: null
                },
                r = [],
                i = !!/msie/i.exec(window.navigator.userAgent),
                o = function() {
                    function t(t, e) {
                        return !!~("" + t).indexOf(e)
                    }
                    var e = document.createElement("div").style;
                    return e.cssText = "background-color:rgba(0,0,0,.5)", t(e.backgroundColor, "rgba") || t(e.backgroundColor, "hsla")
                }(),
                a = ["<div class='sp-replacer'>", "<div class='sp-preview'><div class='sp-preview-inner'></div></div>", "<div class='sp-dd'>&#9660;</div>", "</div>"].join(""),
                s = function() {
                    var t = "";
                    if (i)
                        for (var e = 1; e <= 6; e++) t += "<div class='sp-" + e + "'></div>";
                    return ["<div class='sp-container sp-hidden'>", "<div class='sp-palette-container'>", "<div class='sp-palette sp-thumb sp-cf'></div>", "<div class='sp-palette-button-container sp-cf'>", "<button type='button' class='sp-palette-toggle'></button>", "</div>", "</div>", "<div class='sp-picker-container'>", "<div class='sp-top sp-cf'>", "<div class='sp-fill'></div>", "<div class='sp-top-inner'>", "<div class='sp-color'>", "<div class='sp-sat'>", "<div class='sp-val'>", "<div class='sp-dragger'></div>", "</div>", "</div>", "</div>", "<div class='sp-clear sp-clear-display'>", "</div>", "<div class='sp-hue'>", "<div class='sp-slider'></div>", t, "</div>", "</div>", "<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>", "</div>", "<div class='sp-input-container sp-cf'>", "<input class='sp-input' type='text' spellcheck='false'  />", "</div>", "<div class='sp-initial sp-thumb sp-cf'></div>", "<div class='sp-button-container sp-cf'>", "<a class='sp-cancel' href='#'></a>", "<button type='button' class='sp-choose'></button>", "</div>", "</div>", "</div>"].join("")
                }();

            function l(e, n, r, i) {
                for (var a = [], s = 0; s < e.length; s++) {
                    var l = e[s];
                    if (l) {
                        var c = k(l),
                            u = c.toHsl().l < .5 ? "sp-thumb-el sp-thumb-dark" : "sp-thumb-el sp-thumb-light";
                        u += k.equals(n, l) ? " sp-thumb-active" : "";
                        var d = c.toString(i.preferredFormat || "rgb"),
                            h = o ? "background-color:" + c.toRgbString() : "filter:" + c.toFilter();
                        a.push('<span title="' + d + '" data-color="' + c.toRgbString() + '" class="' + u + '"><span class="sp-thumb-inner" style="' + h + ';"></span></span>')
                    } else a.push(t("<div />").append(t('<span data-color="" style="background-color:transparent;" class="sp-clear-display"></span>').attr("title", i.noColorSelectedText)).html())
                }
                return "<div class='sp-cf " + r + "'>" + a.join("") + "</div>"
            }

            function u(c, u) {
                var d, v, m = function(e, r) {
                        var i = t.extend({}, n, e);
                        return i.callbacks = {
                            move: f(i.move, r),
                            change: f(i.change, r),
                            show: f(i.show, r),
                            hide: f(i.hide, r),
                            beforeShow: f(i.beforeShow, r)
                        }, i
                    }(u, c),
                    b = m.flat,
                    y = m.showSelectionPalette,
                    w = m.localStorageKey,
                    x = m.theme,
                    O = m.callbacks,
                    C = (d = $t, 10, function() {
                        var t = this,
                            e = arguments;
                        v || (v = setTimeout(function() {
                            v = null, d.apply(t, e)
                        }, 10))
                    }),
                    S = !1,
                    j = !1,
                    T = 0,
                    P = 0,
                    E = 0,
                    M = 0,
                    D = 0,
                    A = 0,
                    L = 0,
                    _ = 0,
                    N = 0,
                    I = 0,
                    F = 1,
                    V = [],
                    R = [],
                    z = {},
                    H = m.selectionPalette.slice(0),
                    $ = m.maxSelectionSize,
                    U = "sp-dragging",
                    B = null,
                    W = c.ownerDocument,
                    q = (W.body, t(c)),
                    G = !1,
                    K = t(s, W).addClass(x),
                    Y = K.find(".sp-picker-container"),
                    X = K.find(".sp-color"),
                    J = K.find(".sp-dragger"),
                    Z = K.find(".sp-hue"),
                    Q = K.find(".sp-slider"),
                    tt = K.find(".sp-alpha-inner"),
                    et = K.find(".sp-alpha"),
                    nt = K.find(".sp-alpha-handle"),
                    rt = K.find(".sp-input"),
                    it = K.find(".sp-palette"),
                    ot = K.find(".sp-initial"),
                    at = K.find(".sp-cancel"),
                    st = K.find(".sp-clear"),
                    lt = K.find(".sp-choose"),
                    ct = K.find(".sp-palette-toggle"),
                    ut = q.is("input"),
                    dt = ut && "color" === q.attr("type") && g(),
                    ht = ut && !b,
                    ft = ht ? t(a).addClass(x).addClass(m.className).addClass(m.replacerClassName) : t([]),
                    pt = ht ? ft : q,
                    gt = ft.find(".sp-preview-inner"),
                    vt = m.color || ut && q.val(),
                    mt = !1,
                    bt = m.preferredFormat,
                    yt = !m.showButtons || m.clickoutFiresChange,
                    wt = !vt,
                    xt = m.allowEmpty && !dt;

                function Ot() {
                    if (m.showPaletteOnly && (m.showPalette = !0), ct.text(m.showPaletteOnly ? m.togglePaletteMoreText : m.togglePaletteLessText), m.palette) {
                        V = m.palette.slice(0), R = t.isArray(V[0]) ? V : [V], z = {};
                        for (var e = 0; e < R.length; e++)
                            for (var n = 0; n < R[e].length; n++) {
                                var r = k(R[e][n]).toRgbString();
                                z[r] = !0
                            }
                    }
                    K.toggleClass("sp-flat", b), K.toggleClass("sp-input-disabled", !m.showInput), K.toggleClass("sp-alpha-enabled", m.showAlpha), K.toggleClass("sp-clear-enabled", xt), K.toggleClass("sp-buttons-disabled", !m.showButtons), K.toggleClass("sp-palette-buttons-disabled", !m.togglePaletteOnly), K.toggleClass("sp-palette-disabled", !m.showPalette), K.toggleClass("sp-palette-only", m.showPaletteOnly), K.toggleClass("sp-initial-disabled", !m.showInitial), K.addClass(m.className).addClass(m.containerClassName), $t()
                }

                function Ct() {
                    if (w && window.localStorage) {
                        try {
                            var e = window.localStorage[w].split(",#");
                            e.length > 1 && (delete window.localStorage[w], t.each(e, function(t, e) {
                                St(e)
                            }))
                        } catch (t) {}
                        try {
                            H = window.localStorage[w].split(";")
                        } catch (t) {}
                    }
                }

                function St(e) {
                    if (y) {
                        var n = k(e).toRgbString();
                        if (!z[n] && -1 === t.inArray(n, H))
                            for (H.push(n); H.length > $;) H.shift();
                        if (w && window.localStorage) try {
                            window.localStorage[w] = H.join(";")
                        } catch (t) {}
                    }
                }

                function kt() {
                    var e = Ft(),
                        n = t.map(R, function(t, n) {
                            return l(t, e, "sp-palette-row sp-palette-row-" + n, m)
                        });
                    Ct(), H && n.push(l(function() {
                        var t = [];
                        if (m.showPalette)
                            for (var e = 0; e < H.length; e++) {
                                var n = k(H[e]).toRgbString();
                                z[n] || t.push(H[e])
                            }
                        return t.reverse().slice(0, m.maxSelectionSize)
                    }(), e, "sp-palette-row sp-palette-row-selection", m)), it.html(n.join(""))
                }

                function jt() {
                    if (m.showInitial) {
                        var t = mt,
                            e = Ft();
                        ot.html(l([t, e], e, "sp-palette-row-initial", m))
                    }
                }

                function Tt() {
                    (P <= 0 || T <= 0 || M <= 0) && $t(), j = !0, K.addClass(U), B = null, q.trigger("dragstart.spectrum", [Ft()])
                }

                function Pt() {
                    j = !1, K.removeClass(U), q.trigger("dragstop.spectrum", [Ft()])
                }

                function Et() {
                    var t = rt.val();
                    if (null !== t && "" !== t || !xt) {
                        var e = k(t);
                        e.isValid() ? (It(e), Ht(!0)) : rt.addClass("sp-validation-error")
                    } else It(null), Ht(!0)
                }

                function Mt() {
                    S ? _t() : Dt()
                }

                function Dt() {
                    var e = t.Event("beforeShow.spectrum");
                    if (S) $t();
                    else if (q.trigger("beforeShow.spectrum", [Ft()]), !1 !== O.beforeShow(Ft()) && !e.isDefaultPrevented()) {
                        ! function() {
                            for (var t = 0; t < r.length; t++) r[t] && r[t].hide()
                        }(), S = !0;
                        var n = t(W);
                        n.bind("keydown.spectrum", At), n.bind("click.spectrum", Lt), t(window).bind("resize.spectrum", C), ft.addClass("sp-active"), K.removeClass("sp-hidden"), $t(), Rt(), mt = Ft(), jt(), O.show(mt), q.trigger("show.spectrum", [mt])
                    }
                }

                function At(t) {
                    27 === t.keyCode && _t()
                }

                function Lt(t) {
                    2 != t.button && (j || (yt ? Ht(!0) : Nt(), _t()))
                }

                function _t() {
                    S && !b && (S = !1, t(W).unbind("keydown.spectrum", At), t(W).unbind("click.spectrum", Lt), t(window).unbind("resize.spectrum", C), ft.removeClass("sp-active"), K.addClass("sp-hidden"), O.hide(Ft()), q.trigger("hide.spectrum", [Ft()]))
                }

                function Nt() {
                    It(mt, !0)
                }

                function It(t, e) {
                    var n, r;
                    k.equals(t, Ft()) ? Rt() : (!t && xt ? wt = !0 : (wt = !1, r = (n = k(t)).toHsv(), _ = r.h % 360 / 360, N = r.s, I = r.v, F = r.a), Rt(), n && n.isValid() && !e && (bt = m.preferredFormat || n.getFormat()))
                }

                function Ft(t) {
                    return t = t || {}, xt && wt ? null : k.fromRatio({
                        h: _,
                        s: N,
                        v: I,
                        a: Math.round(100 * F) / 100
                    }, {
                        format: t.format || bt
                    })
                }

                function Vt() {
                    Rt(), O.move(Ft()), q.trigger("move.spectrum", [Ft()])
                }

                function Rt() {
                    rt.removeClass("sp-validation-error"), zt();
                    var t = k.fromRatio({
                        h: _,
                        s: 1,
                        v: 1
                    });
                    X.css("background-color", t.toHexString());
                    var e = bt;
                    F < 1 && (0 !== F || "name" !== e) && ("hex" !== e && "hex3" !== e && "hex6" !== e && "name" !== e || (e = "rgb"));
                    var n = Ft({
                            format: e
                        }),
                        r = "";
                    if (gt.removeClass("sp-clear-display"), gt.css("background-color", "transparent"), !n && xt) gt.addClass("sp-clear-display");
                    else {
                        var a = n.toHexString(),
                            s = n.toRgbString();
                        if (o || 1 === n.alpha ? gt.css("background-color", s) : (gt.css("background-color", "transparent"), gt.css("filter", n.toFilter())), m.showAlpha) {
                            var l = n.toRgb();
                            l.a = 0;
                            var c = k(l).toRgbString(),
                                u = "linear-gradient(left, " + c + ", " + a + ")";
                            i ? tt.css("filter", k(c).toFilter({
                                gradientType: 1
                            }, a)) : (tt.css("background", "-webkit-" + u), tt.css("background", "-moz-" + u), tt.css("background", "-ms-" + u), tt.css("background", "linear-gradient(to right, " + c + ", " + a + ")"))
                        }
                        r = n.toString(e)
                    }
                    m.showInput && rt.val(r), m.showPalette && kt(), jt()
                }

                function zt() {
                    var t = N,
                        e = I;
                    if (xt && wt) nt.hide(), Q.hide(), J.hide();
                    else {
                        nt.show(), Q.show(), J.show();
                        var n = t * T,
                            r = P - e * P;
                        n = Math.max(-E, Math.min(T - E, n - E)), r = Math.max(-E, Math.min(P - E, r - E)), J.css({
                            top: r + "px",
                            left: n + "px"
                        });
                        var i = F * D;
                        nt.css({
                            left: i - A / 2 + "px"
                        });
                        var o = _ * M;
                        Q.css({
                            top: o - L + "px"
                        })
                    }
                }

                function Ht(t) {
                    var e = Ft(),
                        n = "",
                        r = !k.equals(e, mt);
                    e && (n = e.toString(bt), St(e)), ut && q.val(n), t && r && (O.change(e), q.trigger("change", [e]))
                }

                function $t() {
                    var e, n, r, i, o, a, s, l, c, u, d, h;
                    S && (T = X.width(), P = X.height(), E = J.height(), Z.width(), M = Z.height(), L = Q.height(), D = et.width(), A = nt.width(), b || (K.css("position", "absolute"), m.offset ? K.offset(m.offset) : K.offset((n = pt, r = (e = K).outerWidth(), i = e.outerHeight(), o = n.outerHeight(), a = e[0].ownerDocument, s = a.documentElement, l = s.clientWidth, c = s.clientHeight, u = l + t(a).scrollLeft(), d = c + t(a).scrollTop(), (h = n.offset()).top += o, h.left -= Math.min(h.left, h.left + r > u && u > r ? Math.abs(h.left + r - u) : 0), h.top -= Math.min(h.top, h.top + i > d && d > i ? Math.abs(i + o - 0) : 0), h))), zt(), m.showPalette && kt(), q.trigger("reflow.spectrum"))
                }

                function Ut() {
                    _t(), G = !0, q.attr("disabled", !0), pt.addClass("sp-disabled")
                }! function() {
                    if (i && K.find("*:not(input)").attr("unselectable", "on"), Ot(), ht && q.after(ft).hide(), xt || st.hide(), b) q.after(K).hide();
                    else {
                        var e = "parent" === m.appendTo ? q.parent() : t(m.appendTo);
                        1 !== e.length && (e = t("body")), e.append(K)
                    }

                    function n(e) {
                        return e.data && e.data.ignore ? (It(t(e.target).closest(".sp-thumb-el").data("color")), Vt()) : (It(t(e.target).closest(".sp-thumb-el").data("color")), Vt(), Ht(!0), m.hideAfterPaletteSelect && _t()), !1
                    }
                    Ct(), pt.bind("click.spectrum touchstart.spectrum", function(e) {
                        G || Mt(), e.stopPropagation(), t(e.target).is("input") || e.preventDefault()
                    }), (q.is(":disabled") || !0 === m.disabled) && Ut(), K.click(h), rt.change(Et), rt.bind("paste", function() {
                        setTimeout(Et, 1)
                    }), rt.keydown(function(t) {
                        13 == t.keyCode && Et()
                    }), at.text(m.cancelText), at.bind("click.spectrum", function(t) {
                        t.stopPropagation(), t.preventDefault(), Nt(), _t()
                    }), st.attr("title", m.clearText), st.bind("click.spectrum", function(t) {
                        t.stopPropagation(), t.preventDefault(), wt = !0, Vt(), b && Ht(!0)
                    }), lt.text(m.chooseText), lt.bind("click.spectrum", function(t) {
                        t.stopPropagation(), t.preventDefault(), i && rt.is(":focus") && rt.trigger("change"), rt.hasClass("sp-validation-error") || (Ht(!0), _t())
                    }), ct.text(m.showPaletteOnly ? m.togglePaletteMoreText : m.togglePaletteLessText), ct.bind("click.spectrum", function(t) {
                        t.stopPropagation(), t.preventDefault(), m.showPaletteOnly = !m.showPaletteOnly, m.showPaletteOnly || b || K.css("left", "-=" + (Y.outerWidth(!0) + 5)), Ot()
                    }), p(et, function(t, e, n) {
                        F = t / D, wt = !1, n.shiftKey && (F = Math.round(10 * F) / 10), Vt()
                    }, Tt, Pt), p(Z, function(t, e) {
                        _ = parseFloat(e / M), wt = !1, m.showAlpha || (F = 1), Vt()
                    }, Tt, Pt), p(X, function(t, e, n) {
                        if (n.shiftKey) {
                            if (!B) {
                                var r = N * T,
                                    i = P - I * P,
                                    o = Math.abs(t - r) > Math.abs(e - i);
                                B = o ? "x" : "y"
                            }
                        } else B = null;
                        var a = !B || "y" === B;
                        (!B || "x" === B) && (N = parseFloat(t / T)), a && (I = parseFloat((P - e) / P)), wt = !1, m.showAlpha || (F = 1), Vt()
                    }, Tt, Pt), vt ? (It(vt), Rt(), bt = m.preferredFormat || k(vt).format, St(vt)) : Rt(), b && Dt();
                    var r = i ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum";
                    it.delegate(".sp-thumb-el", r, n), ot.delegate(".sp-thumb-el:nth-child(1)", r, {
                        ignore: !0
                    }, n)
                }();
                var Bt = {
                    show: Dt,
                    hide: _t,
                    toggle: Mt,
                    reflow: $t,
                    option: function(n, r) {
                        return n === e ? t.extend({}, m) : r === e ? m[n] : (m[n] = r, "preferredFormat" === n && (bt = m.preferredFormat), void Ot())
                    },
                    enable: function() {
                        G = !1, q.attr("disabled", !1), pt.removeClass("sp-disabled")
                    },
                    disable: Ut,
                    offset: function(t) {
                        m.offset = t, $t()
                    },
                    set: function(t) {
                        It(t), Ht()
                    },
                    get: Ft,
                    destroy: function() {
                        q.show(), pt.unbind("click.spectrum touchstart.spectrum"), K.remove(), ft.remove(), r[Bt.id] = null
                    },
                    container: K
                };
                return Bt.id = r.push(Bt) - 1, Bt
            }

            function d() {}

            function h(t) {
                t.stopPropagation()
            }

            function f(t, e) {
                var n = Array.prototype.slice,
                    r = n.call(arguments, 2);
                return function() {
                    return t.apply(e, r.concat(n.call(arguments)))
                }
            }

            function p(e, n, r, o) {
                n = n || function() {}, r = r || function() {}, o = o || function() {};
                var a = document,
                    s = !1,
                    l = {},
                    c = 0,
                    u = 0,
                    d = "ontouchstart" in window,
                    h = {};

                function f(t) {
                    t.stopPropagation && t.stopPropagation(), t.preventDefault && t.preventDefault(), t.returnValue = !1
                }

                function p(t) {
                    if (s) {
                        if (i && a.documentMode < 9 && !t.button) return g();
                        var r = t && t.touches && t.touches[0],
                            o = r && r.pageX || t.pageX,
                            h = r && r.pageY || t.pageY,
                            p = Math.max(0, Math.min(o - l.left, u)),
                            v = Math.max(0, Math.min(h - l.top, c));
                        d && f(t), n.apply(e, [p, v, t])
                    }
                }

                function g() {
                    s && (t(a).unbind(h), t(a.body).removeClass("sp-dragging"), setTimeout(function() {
                        o.apply(e, arguments)
                    }, 0)), s = !1
                }
                h.selectstart = f, h.dragstart = f, h["touchmove mousemove"] = p, h["touchend mouseup"] = g, t(e).bind("touchstart mousedown", function(n) {
                    (n.which ? 3 == n.which : 2 == n.button) || s || !1 !== r.apply(e, arguments) && (s = !0, c = t(e).height(), u = t(e).width(), l = t(e).offset(), t(a).bind(h), t(a.body).addClass("sp-dragging"), p(n), f(n))
                })
            }

            function g() {
                return t.fn.spectrum.inputTypeColorSupport()
            }
            var v = "spectrum.id";
            t.fn.spectrum = function(e, n) {
                if ("string" == typeof e) {
                    var i = this,
                        o = Array.prototype.slice.call(arguments, 1);
                    return this.each(function() {
                        var n = r[t(this).data(v)];
                        if (n) {
                            var a = n[e];
                            if (!a) throw new Error("Spectrum: no such method: '" + e + "'");
                            "get" == e ? i = n.get() : "container" == e ? i = n.container : "option" == e ? i = n.option.apply(n, o) : "destroy" == e ? (n.destroy(), t(this).removeData(v)) : a.apply(n, o)
                        }
                    }), i
                }
                return this.spectrum("destroy").each(function() {
                    var n = u(this, t.extend({}, e, t(this).data()));
                    t(this).data(v, n.id)
                })
            }, t.fn.spectrum.load = !0, t.fn.spectrum.loadOpts = {}, t.fn.spectrum.draggable = p, t.fn.spectrum.defaults = n, t.fn.spectrum.inputTypeColorSupport = function e() {
                if (void 0 === e._cachedResult) {
                    var n = t("<input type='color'/>")[0];
                    e._cachedResult = "color" === n.type && "" !== n.value
                }
                return e._cachedResult
            }, t.spectrum = {}, t.spectrum.localization = {}, t.spectrum.palettes = {}, t.fn.spectrum.processNativeColorInputs = function() {
                var e = t("input[type=color]");
                e.length && !g() && e.spectrum({
                    preferredFormat: "hex6"
                })
            };
            var m = /^[\s,#]+/,
                b = /\s+$/,
                y = 0,
                w = Math,
                x = w.round,
                O = w.min,
                C = w.max,
                S = w.random,
                k = function t(e, n) {
                    if (n = n || {}, (e = e || "") instanceof t) return e;
                    if (!(this instanceof t)) return new t(e, n);
                    var r = function(t) {
                        var e, n, r, i = {
                                r: 0,
                                g: 0,
                                b: 0
                            },
                            o = 1,
                            a = !1,
                            s = !1;
                        return "string" == typeof t && (t = function(t) {
                            t = t.replace(m, "").replace(b, "").toLowerCase();
                            var e, n, r = !1;
                            if (U[t]) t = U[t], r = !0;
                            else if ("transparent" == t) return {
                                r: 0,
                                g: 0,
                                b: 0,
                                a: 0,
                                format: "name"
                            };
                            return (e = tt.rgb.exec(t)) ? {
                                r: e[1],
                                g: e[2],
                                b: e[3]
                            } : (e = tt.rgba.exec(t)) ? {
                                r: e[1],
                                g: e[2],
                                b: e[3],
                                a: e[4]
                            } : (e = tt.hsl.exec(t)) ? {
                                h: e[1],
                                s: e[2],
                                l: e[3]
                            } : (e = tt.hsla.exec(t)) ? {
                                h: e[1],
                                s: e[2],
                                l: e[3],
                                a: e[4]
                            } : (e = tt.hsv.exec(t)) ? {
                                h: e[1],
                                s: e[2],
                                v: e[3]
                            } : (e = tt.hsva.exec(t)) ? {
                                h: e[1],
                                s: e[2],
                                v: e[3],
                                a: e[4]
                            } : (e = tt.hex8.exec(t)) ? {
                                a: (n = e[1], K(n) / 255),
                                r: K(e[2]),
                                g: K(e[3]),
                                b: K(e[4]),
                                format: r ? "name" : "hex8"
                            } : (e = tt.hex6.exec(t)) ? {
                                r: K(e[1]),
                                g: K(e[2]),
                                b: K(e[3]),
                                format: r ? "name" : "hex"
                            } : !!(e = tt.hex3.exec(t)) && {
                                r: K(e[1] + "" + e[1]),
                                g: K(e[2] + "" + e[2]),
                                b: K(e[3] + "" + e[3]),
                                format: r ? "name" : "hex"
                            }
                        }(t)), "object" == c()(t) && (t.hasOwnProperty("r") && t.hasOwnProperty("g") && t.hasOwnProperty("b") ? (e = t.r, n = t.g, r = t.b, i = {
                            r: 255 * q(e, 255),
                            g: 255 * q(n, 255),
                            b: 255 * q(r, 255)
                        }, a = !0, s = "%" === String(t.r).substr(-1) ? "prgb" : "rgb") : t.hasOwnProperty("h") && t.hasOwnProperty("s") && t.hasOwnProperty("v") ? (t.s = X(t.s), t.v = X(t.v), i = function(t, e, n) {
                            t = 6 * q(t, 360), e = q(e, 100), n = q(n, 100);
                            var r = w.floor(t),
                                i = t - r,
                                o = n * (1 - e),
                                a = n * (1 - i * e),
                                s = n * (1 - (1 - i) * e),
                                l = r % 6;
                            return {
                                r: 255 * [n, a, o, o, s, n][l],
                                g: 255 * [s, n, n, a, o, o][l],
                                b: 255 * [o, o, s, n, n, a][l]
                            }
                        }(t.h, t.s, t.v), a = !0, s = "hsv") : t.hasOwnProperty("h") && t.hasOwnProperty("s") && t.hasOwnProperty("l") && (t.s = X(t.s), t.l = X(t.l), i = function(t, e, n) {
                            var r, i, o;

                            function a(t, e, n) {
                                return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? t + 6 * (e - t) * n : n < .5 ? e : n < 2 / 3 ? t + (e - t) * (2 / 3 - n) * 6 : t
                            }
                            if (t = q(t, 360), e = q(e, 100), n = q(n, 100), 0 === e) r = i = o = n;
                            else {
                                var s = n < .5 ? n * (1 + e) : n + e - n * e,
                                    l = 2 * n - s;
                                r = a(l, s, t + 1 / 3), i = a(l, s, t), o = a(l, s, t - 1 / 3)
                            }
                            return {
                                r: 255 * r,
                                g: 255 * i,
                                b: 255 * o
                            }
                        }(t.h, t.s, t.l), a = !0, s = "hsl"), t.hasOwnProperty("a") && (o = t.a)), o = W(o), {
                            ok: a,
                            format: t.format || s,
                            r: O(255, C(i.r, 0)),
                            g: O(255, C(i.g, 0)),
                            b: O(255, C(i.b, 0)),
                            a: o
                        }
                    }(e);
                    this._originalInput = e, this._r = r.r, this._g = r.g, this._b = r.b, this._a = r.a, this._roundA = x(100 * this._a) / 100, this._format = n.format || r.format, this._gradientType = n.gradientType, this._r < 1 && (this._r = x(this._r)), this._g < 1 && (this._g = x(this._g)), this._b < 1 && (this._b = x(this._b)), this._ok = r.ok, this._tc_id = y++
                };

            function j(t, e, n) {
                t = q(t, 255), e = q(e, 255), n = q(n, 255);
                var r, i, o = C(t, e, n),
                    a = O(t, e, n),
                    s = (o + a) / 2;
                if (o == a) r = i = 0;
                else {
                    var l = o - a;
                    switch (i = s > .5 ? l / (2 - o - a) : l / (o + a), o) {
                        case t:
                            r = (e - n) / l + (e < n ? 6 : 0);
                            break;
                        case e:
                            r = (n - t) / l + 2;
                            break;
                        case n:
                            r = (t - e) / l + 4
                    }
                    r /= 6
                }
                return {
                    h: r,
                    s: i,
                    l: s
                }
            }

            function T(t, e, n) {
                t = q(t, 255), e = q(e, 255), n = q(n, 255);
                var r, i, o = C(t, e, n),
                    a = O(t, e, n),
                    s = o,
                    l = o - a;
                if (i = 0 === o ? 0 : l / o, o == a) r = 0;
                else {
                    switch (o) {
                        case t:
                            r = (e - n) / l + (e < n ? 6 : 0);
                            break;
                        case e:
                            r = (n - t) / l + 2;
                            break;
                        case n:
                            r = (t - e) / l + 4
                    }
                    r /= 6
                }
                return {
                    h: r,
                    s: i,
                    v: s
                }
            }

            function P(t, e, n, r) {
                var i = [Y(x(t).toString(16)), Y(x(e).toString(16)), Y(x(n).toString(16))];
                return r && i[0].charAt(0) == i[0].charAt(1) && i[1].charAt(0) == i[1].charAt(1) && i[2].charAt(0) == i[2].charAt(1) ? i[0].charAt(0) + i[1].charAt(0) + i[2].charAt(0) : i.join("")
            }

            function E(t, e, n, r) {
                var i;
                return [Y((i = r, Math.round(255 * parseFloat(i)).toString(16))), Y(x(t).toString(16)), Y(x(e).toString(16)), Y(x(n).toString(16))].join("")
            }

            function M(t, e) {
                e = 0 === e ? 0 : e || 10;
                var n = k(t).toHsl();
                return n.s -= e / 100, n.s = G(n.s), k(n)
            }

            function D(t, e) {
                e = 0 === e ? 0 : e || 10;
                var n = k(t).toHsl();
                return n.s += e / 100, n.s = G(n.s), k(n)
            }

            function A(t) {
                return k(t).desaturate(100)
            }

            function L(t, e) {
                e = 0 === e ? 0 : e || 10;
                var n = k(t).toHsl();
                return n.l += e / 100, n.l = G(n.l), k(n)
            }

            function _(t, e) {
                e = 0 === e ? 0 : e || 10;
                var n = k(t).toRgb();
                return n.r = C(0, O(255, n.r - x(-e / 100 * 255))), n.g = C(0, O(255, n.g - x(-e / 100 * 255))), n.b = C(0, O(255, n.b - x(-e / 100 * 255))), k(n)
            }

            function N(t, e) {
                e = 0 === e ? 0 : e || 10;
                var n = k(t).toHsl();
                return n.l -= e / 100, n.l = G(n.l), k(n)
            }

            function I(t, e) {
                var n = k(t).toHsl(),
                    r = (x(n.h) + e) % 360;
                return n.h = r < 0 ? 360 + r : r, k(n)
            }

            function F(t) {
                var e = k(t).toHsl();
                return e.h = (e.h + 180) % 360, k(e)
            }

            function V(t) {
                var e = k(t).toHsl(),
                    n = e.h;
                return [k(t), k({
                    h: (n + 120) % 360,
                    s: e.s,
                    l: e.l
                }), k({
                    h: (n + 240) % 360,
                    s: e.s,
                    l: e.l
                })]
            }

            function R(t) {
                var e = k(t).toHsl(),
                    n = e.h;
                return [k(t), k({
                    h: (n + 90) % 360,
                    s: e.s,
                    l: e.l
                }), k({
                    h: (n + 180) % 360,
                    s: e.s,
                    l: e.l
                }), k({
                    h: (n + 270) % 360,
                    s: e.s,
                    l: e.l
                })]
            }

            function z(t) {
                var e = k(t).toHsl(),
                    n = e.h;
                return [k(t), k({
                    h: (n + 72) % 360,
                    s: e.s,
                    l: e.l
                }), k({
                    h: (n + 216) % 360,
                    s: e.s,
                    l: e.l
                })]
            }

            function H(t, e, n) {
                e = e || 6, n = n || 30;
                var r = k(t).toHsl(),
                    i = 360 / n,
                    o = [k(t)];
                for (r.h = (r.h - (i * e >> 1) + 720) % 360; --e;) r.h = (r.h + i) % 360, o.push(k(r));
                return o
            }

            function $(t, e) {
                e = e || 6;
                for (var n = k(t).toHsv(), r = n.h, i = n.s, o = n.v, a = [], s = 1 / e; e--;) a.push(k({
                    h: r,
                    s: i,
                    v: o
                })), o = (o + s) % 1;
                return a
            }
            k.prototype = {
                isDark: function() {
                    return this.getBrightness() < 128
                },
                isLight: function() {
                    return !this.isDark()
                },
                isValid: function() {
                    return this._ok
                },
                getOriginalInput: function() {
                    return this._originalInput
                },
                getFormat: function() {
                    return this._format
                },
                getAlpha: function() {
                    return this._a
                },
                getBrightness: function() {
                    var t = this.toRgb();
                    return (299 * t.r + 587 * t.g + 114 * t.b) / 1e3
                },
                setAlpha: function(t) {
                    return this._a = W(t), this._roundA = x(100 * this._a) / 100, this
                },
                toHsv: function() {
                    var t = T(this._r, this._g, this._b);
                    return {
                        h: 360 * t.h,
                        s: t.s,
                        v: t.v,
                        a: this._a
                    }
                },
                toHsvString: function() {
                    var t = T(this._r, this._g, this._b),
                        e = x(360 * t.h),
                        n = x(100 * t.s),
                        r = x(100 * t.v);
                    return 1 == this._a ? "hsv(" + e + ", " + n + "%, " + r + "%)" : "hsva(" + e + ", " + n + "%, " + r + "%, " + this._roundA + ")"
                },
                toHsl: function() {
                    var t = j(this._r, this._g, this._b);
                    return {
                        h: 360 * t.h,
                        s: t.s,
                        l: t.l,
                        a: this._a
                    }
                },
                toHslString: function() {
                    var t = j(this._r, this._g, this._b),
                        e = x(360 * t.h),
                        n = x(100 * t.s),
                        r = x(100 * t.l);
                    return 1 == this._a ? "hsl(" + e + ", " + n + "%, " + r + "%)" : "hsla(" + e + ", " + n + "%, " + r + "%, " + this._roundA + ")"
                },
                toHex: function(t) {
                    return P(this._r, this._g, this._b, t)
                },
                toHexString: function(t) {
                    return "#" + this.toHex(t)
                },
                toHex8: function() {
                    return E(this._r, this._g, this._b, this._a)
                },
                toHex8String: function() {
                    return "#" + this.toHex8()
                },
                toRgb: function() {
                    return {
                        r: x(this._r),
                        g: x(this._g),
                        b: x(this._b),
                        a: this._a
                    }
                },
                toRgbString: function() {
                    return 1 == this._a ? "rgb(" + x(this._r) + ", " + x(this._g) + ", " + x(this._b) + ")" : "rgba(" + x(this._r) + ", " + x(this._g) + ", " + x(this._b) + ", " + this._roundA + ")"
                },
                toPercentageRgb: function() {
                    return {
                        r: x(100 * q(this._r, 255)) + "%",
                        g: x(100 * q(this._g, 255)) + "%",
                        b: x(100 * q(this._b, 255)) + "%",
                        a: this._a
                    }
                },
                toPercentageRgbString: function() {
                    return 1 == this._a ? "rgb(" + x(100 * q(this._r, 255)) + "%, " + x(100 * q(this._g, 255)) + "%, " + x(100 * q(this._b, 255)) + "%)" : "rgba(" + x(100 * q(this._r, 255)) + "%, " + x(100 * q(this._g, 255)) + "%, " + x(100 * q(this._b, 255)) + "%, " + this._roundA + ")"
                },
                toName: function() {
                    return 0 === this._a ? "transparent" : !(this._a < 1) && (B[P(this._r, this._g, this._b, !0)] || !1)
                },
                toFilter: function(t) {
                    var e = "#" + E(this._r, this._g, this._b, this._a),
                        n = e,
                        r = this._gradientType ? "GradientType = 1, " : "";
                    return t && (n = k(t).toHex8String()), "progid:DXImageTransform.Microsoft.gradient(" + r + "startColorstr=" + e + ",endColorstr=" + n + ")"
                },
                toString: function(t) {
                    var e = !!t;
                    t = t || this._format;
                    var n = !1,
                        r = this._a < 1 && this._a >= 0;
                    return e || !r || "hex" !== t && "hex6" !== t && "hex3" !== t && "name" !== t ? ("rgb" === t && (n = this.toRgbString()), "prgb" === t && (n = this.toPercentageRgbString()), "hex" !== t && "hex6" !== t || (n = this.toHexString()), "hex3" === t && (n = this.toHexString(!0)), "hex8" === t && (n = this.toHex8String()), "name" === t && (n = this.toName()), "hsl" === t && (n = this.toHslString()), "hsv" === t && (n = this.toHsvString()), n || this.toHexString()) : "name" === t && 0 === this._a ? this.toName() : this.toRgbString()
                },
                _applyModification: function(t, e) {
                    var n = t.apply(null, [this].concat([].slice.call(e)));
                    return this._r = n._r, this._g = n._g, this._b = n._b, this.setAlpha(n._a), this
                },
                lighten: function() {
                    return this._applyModification(L, arguments)
                },
                brighten: function() {
                    return this._applyModification(_, arguments)
                },
                darken: function() {
                    return this._applyModification(N, arguments)
                },
                desaturate: function() {
                    return this._applyModification(M, arguments)
                },
                saturate: function() {
                    return this._applyModification(D, arguments)
                },
                greyscale: function() {
                    return this._applyModification(A, arguments)
                },
                spin: function() {
                    return this._applyModification(I, arguments)
                },
                _applyCombination: function(t, e) {
                    return t.apply(null, [this].concat([].slice.call(e)))
                },
                analogous: function() {
                    return this._applyCombination(H, arguments)
                },
                complement: function() {
                    return this._applyCombination(F, arguments)
                },
                monochromatic: function() {
                    return this._applyCombination($, arguments)
                },
                splitcomplement: function() {
                    return this._applyCombination(z, arguments)
                },
                triad: function() {
                    return this._applyCombination(V, arguments)
                },
                tetrad: function() {
                    return this._applyCombination(R, arguments)
                }
            }, k.fromRatio = function(t, e) {
                if ("object" == c()(t)) {
                    var n = {};
                    for (var r in t) t.hasOwnProperty(r) && (n[r] = "a" === r ? t[r] : X(t[r]));
                    t = n
                }
                return k(t, e)
            }, k.equals = function(t, e) {
                return !(!t || !e) && k(t).toRgbString() == k(e).toRgbString()
            }, k.random = function() {
                return k.fromRatio({
                    r: S(),
                    g: S(),
                    b: S()
                })
            }, k.mix = function(t, e, n) {
                n = 0 === n ? 0 : n || 50;
                var r, i = k(t).toRgb(),
                    o = k(e).toRgb(),
                    a = n / 100,
                    s = 2 * a - 1,
                    l = o.a - i.a,
                    c = 1 - (r = ((r = s * l == -1 ? s : (s + l) / (1 + s * l)) + 1) / 2),
                    u = {
                        r: o.r * r + i.r * c,
                        g: o.g * r + i.g * c,
                        b: o.b * r + i.b * c,
                        a: o.a * a + i.a * (1 - a)
                    };
                return k(u)
            }, k.readability = function(t, e) {
                var n = k(t),
                    r = k(e),
                    i = n.toRgb(),
                    o = r.toRgb(),
                    a = n.getBrightness(),
                    s = r.getBrightness(),
                    l = Math.max(i.r, o.r) - Math.min(i.r, o.r) + Math.max(i.g, o.g) - Math.min(i.g, o.g) + Math.max(i.b, o.b) - Math.min(i.b, o.b);
                return {
                    brightness: Math.abs(a - s),
                    color: l
                }
            }, k.isReadable = function(t, e) {
                var n = k.readability(t, e);
                return n.brightness > 125 && n.color > 500
            }, k.mostReadable = function(t, e) {
                for (var n = null, r = 0, i = !1, o = 0; o < e.length; o++) {
                    var a = k.readability(t, e[o]),
                        s = a.brightness > 125 && a.color > 500,
                        l = a.brightness / 125 * 3 + a.color / 500;
                    (s && !i || s && i && l > r || !s && !i && l > r) && (i = s, r = l, n = k(e[o]))
                }
                return n
            };
            var U = k.names = {
                    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",
                    burntsienna: "ea7e5d",
                    cadetblue: "5f9ea0",
                    chartreuse: "7fff00",
                    chocolate: "d2691e",
                    coral: "ff7f50",
                    cornflowerblue: "6495ed",
                    cornsilk: "fff8dc",
                    crimson: "dc143c",
                    cyan: "0ff",
                    darkblue: "00008b",
                    darkcyan: "008b8b",
                    darkgoldenrod: "b8860b",
                    darkgray: "a9a9a9",
                    darkgreen: "006400",
                    darkgrey: "a9a9a9",
                    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",
                    green: "008000",
                    greenyellow: "adff2f",
                    grey: "808080",
                    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",
                    lightgreen: "90ee90",
                    lightgrey: "d3d3d3",
                    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: "663399",
                    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"
                },
                B = k.hexNames = function(t) {
                    var e = {};
                    for (var n in t) t.hasOwnProperty(n) && (e[t[n]] = n);
                    return e
                }(U);

            function W(t) {
                return t = parseFloat(t), (isNaN(t) || t < 0 || t > 1) && (t = 1), t
            }

            function q(t, e) {
                (function(t) {
                    return "string" == typeof t && -1 != t.indexOf(".") && 1 === parseFloat(t)
                })(t) && (t = "100%");
                var n = function(t) {
                    return "string" == typeof t && -1 != t.indexOf("%")
                }(t);
                return t = O(e, C(0, parseFloat(t))), n && (t = parseInt(t * e, 10) / 100), w.abs(t - e) < 1e-6 ? 1 : t % e / parseFloat(e)
            }

            function G(t) {
                return O(1, C(0, t))
            }

            function K(t) {
                return parseInt(t, 16)
            }

            function Y(t) {
                return 1 == t.length ? "0" + t : "" + t
            }

            function X(t) {
                return t <= 1 && (t = 100 * t + "%"), t
            }
            var J, Z, Q, tt = (Z = "[\\s|\\(]+(" + (J = "(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)") + ")[,|\\s]+(" + J + ")[,|\\s]+(" + J + ")\\s*\\)?", Q = "[\\s|\\(]+(" + J + ")[,|\\s]+(" + J + ")[,|\\s]+(" + J + ")[,|\\s]+(" + J + ")\\s*\\)?", {
                rgb: new RegExp("rgb" + Z),
                rgba: new RegExp("rgba" + Q),
                hsl: new RegExp("hsl" + Z),
                hsla: new RegExp("hsla" + Q),
                hsv: new RegExp("hsv" + Z),
                hsva: new RegExp("hsva" + Q),
                hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
                hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
                hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
            });
            window.tinycolor = k, t(function() {
                t.fn.spectrum.load && t.fn.spectrum.processNativeColorInputs()
            })
        }(f), e.a = u.a.extend({
            template: function() {
                var t = this.ppfx;
                return '\n      <div class="'.concat(this.holderClass(), '"></div>\n      <div class="').concat(t, 'field-colorp">\n        <div class="').concat(t, 'field-colorp-c" data-colorp-c>\n          <div class="').concat(t, 'checker-bg"></div>\n        </div>\n      </div>\n    ')
            },
            inputClass: function() {
                var t = this.ppfx;
                return "".concat(t, "field ").concat(t, "field-color")
            },
            holderClass: function() {
                return "".concat(this.ppfx, "input-holder")
            },
            remove: function() {
                u.a.prototype.remove.apply(this, arguments), this.colorEl.spectrum("destroy")
            },
            setValue: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    n = this.model.get("defaults"),
                    r = Object(s.isUndefined)(t) ? Object(s.isUndefined)(n) ? "" : n : t,
                    i = this.getInputEl(),
                    o = this.getColorEl(),
                    a = "none" != r ? r : "";
                i.value = r, o.get(0).style.backgroundColor = a, (e.fromTarget || e.fromInput && !e.avoidStore) && (o.spectrum("set", a), this.noneColor = "none" == r)
            },
            getColorEl: function() {
                if (!this.colorEl) {
                    var t, e = this.em,
                        n = this,
                        r = this.ppfx,
                        i = this.model,
                        o = f('<div class="'.concat(this.ppfx, 'field-color-picker"></div>')),
                        a = o.get(0).style,
                        s = e && e.config ? e.config.el : "",
                        l = e && e.getConfig && e.getConfig("colorPicker") || {},
                        c = function(t) {
                            return (1 == t.getAlpha() ? t.toHexString() : t.toRgbString()).replace(/ /g, "")
                        },
                        u = 0;
                    this.$el.find("[data-colorp-c]").append(o), o.spectrum(h(h(h({
                        containerClassName: "".concat(r, "one-bg ").concat(r, "two-color"),
                        appendTo: s || "body",
                        maxSelectionSize: 8,
                        showPalette: !0,
                        showAlpha: !0,
                        chooseText: "Ok",
                        cancelText: "⨯",
                        palette: []
                    }, l), i.get("colorPicker") || {}), {}, {
                        move: function(t) {
                            var e = c(t);
                            a.backgroundColor = e, i.setValueFromInput(e, 0)
                        },
                        change: function(t) {
                            u = 1;
                            var e = c(t);
                            a.backgroundColor = e, i.setValueFromInput(0, 0), i.setValueFromInput(e), n.noneColor = 0
                        },
                        show: function(e) {
                            u = 0, t = c(e)
                        },
                        hide: function(e) {
                            !u && t && (n.noneColor && (t = ""), a.backgroundColor = t, o.spectrum("set", t), i.setValueFromInput(t, 0))
                        }
                    })), e && e.on && e.on("component:selected", function() {
                        u = 1, o.spectrum("hide")
                    }), this.colorEl = o
                }
                return this.colorEl
            },
            render: function() {
                return u.a.prototype.render.call(this), this.getColorEl(), this
            }
        })
    }, function(t, e, n) {
        ! function(e) {
            var n, r = {},
                i = {
                    16: !1,
                    18: !1,
                    17: !1,
                    91: !1
                },
                o = "all",
                a = {
                    "⇧": 16,
                    shift: 16,
                    "⌥": 18,
                    alt: 18,
                    option: 18,
                    "⌃": 17,
                    ctrl: 17,
                    control: 17,
                    "⌘": 91,
                    command: 91
                },
                s = {
                    backspace: 8,
                    tab: 9,
                    clear: 12,
                    enter: 13,
                    return: 13,
                    esc: 27,
                    escape: 27,
                    space: 32,
                    left: 37,
                    up: 38,
                    right: 39,
                    down: 40,
                    del: 46,
                    delete: 46,
                    home: 36,
                    end: 35,
                    pageup: 33,
                    pagedown: 34,
                    ",": 188,
                    ".": 190,
                    "/": 191,
                    "`": 192,
                    "-": 189,
                    "=": 187,
                    ";": 186,
                    "'": 222,
                    "[": 219,
                    "]": 221,
                    "\\": 220
                },
                l = function(t) {
                    return s[t] || t.toUpperCase().charCodeAt(0)
                },
                c = [];
            for (n = 1; n < 20; n++) s["f" + n] = 111 + n;

            function u(t, e) {
                for (var n = t.length; n--;)
                    if (t[n] === e) return n;
                return -1
            }

            function d(t, e) {
                if (t.length != e.length) return !1;
                for (var n = 0; n < t.length; n++)
                    if (t[n] !== e[n]) return !1;
                return !0
            }
            var h = {
                16: "shiftKey",
                18: "altKey",
                17: "ctrlKey",
                91: "metaKey"
            };

            function f(t) {
                for (n in i) i[n] = t[h[n]]
            }

            function p(t, e, n) {
                var i, o;
                i = v(t), void 0 === n && (n = e, e = "all");
                for (var a = 0; a < i.length; a++) o = [], (t = i[a].split("+")).length > 1 && (o = m(t), t = [t[t.length - 1]]), t = t[0], (t = l(t)) in r || (r[t] = []), r[t].push({
                    shortcut: i[a],
                    scope: e,
                    method: n,
                    key: i[a],
                    mods: o
                })
            }
            for (n in a) p[n] = !1;

            function g() {
                return o || "all"
            }

            function v(t) {
                var e;
                return "" == (e = (t = t.replace(/\s/g, "")).split(","))[e.length - 1] && (e[e.length - 2] += ","), e
            }

            function m(t) {
                for (var e = t.slice(0, t.length - 1), n = 0; n < e.length; n++) e[n] = a[e[n]];
                return e
            }

            function b(t, e, n) {
                t.addEventListener ? t.addEventListener(e, n, !1) : t.attachEvent && t.attachEvent("on" + e, function() {
                    n(window.event)
                })
            }
            b(document, "keydown", function(t) {
                ! function(t) {
                    var e, n, o, s, l, d;
                    if (e = t.keyCode, -1 == u(c, e) && c.push(e), 93 != e && 224 != e || (e = 91), e in i)
                        for (o in i[e] = !0, a) a[o] == e && (p[o] = !0);
                    else if (f(t), p.filter.call(this, t) && e in r)
                        for (d = g(), s = 0; s < r[e].length; s++)
                            if ((n = r[e][s]).scope == d || "all" == n.scope) {
                                for (o in l = n.mods.length > 0, i)(!i[o] && u(n.mods, +o) > -1 || i[o] && -1 == u(n.mods, +o)) && (l = !1);
                                (0 != n.mods.length || i[16] || i[18] || i[17] || i[91]) && !l || !1 === n.method(t, n) && (t.preventDefault ? t.preventDefault() : t.returnValue = !1, t.stopPropagation && t.stopPropagation(), t.cancelBubble && (t.cancelBubble = !0))
                            }
                }(t)
            }), b(document, "keyup", function(t) {
                var e, n = t.keyCode,
                    r = u(c, n);
                if (r >= 0 && c.splice(r, 1), 93 != n && 224 != n || (n = 91), n in i)
                    for (e in i[n] = !1, a) a[e] == n && (p[e] = !1)
            }), b(window, "focus", function() {
                for (n in i) i[n] = !1;
                for (n in a) p[n] = !1
            });
            var y = e.key;
            e.key = p, e.key.setScope = function(t) {
                o = t || "all"
            }, e.key.getScope = g, e.key.deleteScope = function(t) {
                var e, n, i;
                for (e in r)
                    for (n = r[e], i = 0; i < n.length;) n[i].scope === t ? n.splice(i, 1) : i++
            }, e.key.filter = function(t) {
                var e = (t.target || t.srcElement).tagName;
                return !("INPUT" == e || "SELECT" == e || "TEXTAREA" == e)
            }, e.key.isPressed = function(t) {
                return "string" == typeof t && (t = l(t)), -1 != u(c, t)
            }, e.key.getPressedKeyCodes = function() {
                return c.slice(0)
            }, e.key.noConflict = function() {
                var t = e.key;
                return e.key = y, t
            }, e.key.unbind = function(t, e) {
                var n, i, o, a, s, c = [];
                for (n = v(t), a = 0; a < n.length; a++) {
                    if ((i = n[a].split("+")).length > 1 && (c = m(i), t = i[i.length - 1]), t = l(t), void 0 === e && (e = g()), !r[t]) return;
                    for (o = 0; o < r[t].length; o++)(s = r[t][o]).scope === e && d(s.mods, c) && (r[t][o] = {})
                }
            }, t.exports = p
        }(this)
    }, function(t, e, n) {
        "use strict";
        (function(t) {
            var r = n(8),
                i = n.n(r),
                o = n(71),
                a = n(72),
                s = setTimeout;

            function l(t) {
                return Boolean(t && void 0 !== t.length)
            }

            function c() {}

            function u(t) {
                if (!(this instanceof u)) throw new TypeError("Promises must be constructed via new");
                if ("function" != typeof t) throw new TypeError("not a function");
                this._state = 0, this._handled = !1, this._value = void 0, this._deferreds = [], v(t, this)
            }

            function d(t, e) {
                for (; 3 === t._state;) t = t._value;
                0 !== t._state ? (t._handled = !0, u._immediateFn(function() {
                    var n = 1 === t._state ? e.onFulfilled : e.onRejected;
                    if (null !== n) {
                        var r;
                        try {
                            r = n(t._value)
                        } catch (t) {
                            return void f(e.promise, t)
                        }
                        h(e.promise, r)
                    } else(1 === t._state ? h : f)(e.promise, t._value)
                })) : t._deferreds.push(e)
            }

            function h(t, e) {
                try {
                    if (e === t) throw new TypeError("A promise cannot be resolved with itself.");
                    if (e && ("object" === i()(e) || "function" == typeof e)) {
                        var n = e.then;
                        if (e instanceof u) return t._state = 3, t._value = e, void p(t);
                        if ("function" == typeof n) return void v((r = n, o = e, function() {
                            r.apply(o, arguments)
                        }), t)
                    }
                    t._state = 1, t._value = e, p(t)
                } catch (e) {
                    f(t, e)
                }
                var r, o
            }

            function f(t, e) {
                t._state = 2, t._value = e, p(t)
            }

            function p(t) {
                2 === t._state && 0 === t._deferreds.length && u._immediateFn(function() {
                    t._handled || u._unhandledRejectionFn(t._value)
                });
                for (var e = 0, n = t._deferreds.length; e < n; e++) d(t, t._deferreds[e]);
                t._deferreds = null
            }

            function g(t, e, n) {
                this.onFulfilled = "function" == typeof t ? t : null, this.onRejected = "function" == typeof e ? e : null, this.promise = n
            }

            function v(t, e) {
                var n = !1;
                try {
                    t(function(t) {
                        n || (n = !0, h(e, t))
                    }, function(t) {
                        n || (n = !0, f(e, t))
                    })
                } catch (t) {
                    if (n) return;
                    n = !0, f(e, t)
                }
            }
            u.prototype.catch = function(t) {
                return this.then(null, t)
            }, u.prototype.then = function(t, e) {
                var n = new this.constructor(c);
                return d(this, new g(t, e, n)), n
            }, u.prototype.finally = o.a, u.all = function(t) {
                return new u(function(e, n) {
                    if (!l(t)) return n(new TypeError("Promise.all accepts an array"));
                    var r = Array.prototype.slice.call(t);
                    if (0 === r.length) return e([]);
                    var o = r.length;

                    function a(t, s) {
                        try {
                            if (s && ("object" === i()(s) || "function" == typeof s)) {
                                var l = s.then;
                                if ("function" == typeof l) return void l.call(s, function(e) {
                                    a(t, e)
                                }, n)
                            }
                            r[t] = s, 0 == --o && e(r)
                        } catch (t) {
                            n(t)
                        }
                    }
                    for (var s = 0; s < r.length; s++) a(s, r[s])
                })
            }, u.allSettled = a.a, u.resolve = function(t) {
                return t && "object" === i()(t) && t.constructor === u ? t : new u(function(e) {
                    e(t)
                })
            }, u.reject = function(t) {
                return new u(function(e, n) {
                    n(t)
                })
            }, u.race = function(t) {
                return new u(function(e, n) {
                    if (!l(t)) return n(new TypeError("Promise.race accepts an array"));
                    for (var r = 0, i = t.length; r < i; r++) u.resolve(t[r]).then(e, n)
                })
            }, u._immediateFn = "function" == typeof t && function(e) {
                t(e)
            } || function(t) {
                s(t, 0)
            }, u._unhandledRejectionFn = function(t) {
                "undefined" != typeof console && console && console.warn("Possible Unhandled Promise Rejection:", t)
            }, e.a = u
        }).call(this, n(79).setImmediate)
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1),
            i = n.n(r),
            o = i.a.Model.extend({
                defaults: {
                    id: "",
                    label: "",
                    tagName: "span",
                    className: "",
                    command: "",
                    context: "",
                    buttons: [],
                    attributes: {},
                    options: {},
                    active: !1,
                    dragDrop: !1,
                    togglable: !0,
                    runDefaultCommand: !0,
                    stopDefaultCommand: !1,
                    disable: !1
                },
                initialize: function(t) {
                    if (this.get("buttons").length) {
                        var e = n(41).default;
                        this.set("buttons", new e(this.get("buttons")))
                    }
                }
            });
        e.default = i.a.Collection.extend({
            model: o,
            deactivateAllExceptOne: function(t, e) {
                this.forEach(function(n, r) {
                    n !== t && (n.set("active", !1), e && n.get("buttons").length && n.get("buttons").deactivateAllExceptOne(t, e))
                })
            },
            deactivateAll: function(t, e) {
                var n = t || "";
                this.forEach(function(t) {
                    t.get("context") == n && t !== e && (t.set("active", !1, {
                        silent: 1
                    }), t.trigger("updateActive", {
                        fromCollection: 1
                    }))
                })
            },
            disableAllButtons: function(t) {
                var e = t || "";
                this.forEach(function(t, n) {
                    t.get("context") == e && t.set("disable", !0)
                })
            },
            disableAllButtonsExceptOne: function(t, e) {
                this.forEach(function(n, r) {
                    n !== t && (n.set("disable", !0), e && n.get("buttons").length && n.get("buttons").disableAllButtonsExceptOne(t, e))
                })
            }
        })
    }, function(t, e) {
        t.exports = function(t, e) {
            (null == e || e > t.length) && (e = t.length);
            for (var n = 0, r = new Array(e); n < e; n++) r[n] = t[n];
            return r
        }
    }, function(t, e, n) {
        var r = n(42);
        t.exports = function(t, e) {
            if (t) {
                if ("string" == typeof t) return r(t, e);
                var n = Object.prototype.toString.call(t).slice(8, -1);
                return "Object" === n && t.constructor && (n = t.constructor.name), "Map" === n || "Set" === n ? Array.from(t) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? r(t, e) : void 0
            }
        }
    }, function(t, e, n) {
        ! function(t) {
            "use strict";

            function e(t) {
                for (var e = {}, n = 0; n < t.length; ++n) e[t[n].toLowerCase()] = !0;
                return e
            }
            t.defineMode("css", function(e, n) {
                var r = n.inline;
                n.propertyKeywords || (n = t.resolveMode("text/css"));
                var i, o, a = e.indentUnit,
                    s = n.tokenHooks,
                    l = n.documentTypes || {},
                    c = n.mediaTypes || {},
                    u = n.mediaFeatures || {},
                    d = n.mediaValueKeywords || {},
                    h = n.propertyKeywords || {},
                    f = n.nonStandardPropertyKeywords || {},
                    p = n.fontProperties || {},
                    g = n.counterDescriptors || {},
                    v = n.colorKeywords || {},
                    m = n.valueKeywords || {},
                    b = n.allowNested,
                    y = n.lineComment,
                    w = !0 === n.supportsAtComponent,
                    x = !1 !== e.highlightNonStandardPropertyKeywords;

                function O(t, e) {
                    return i = e, t
                }

                function C(t) {
                    return function(e, n) {
                        for (var r, i = !1; null != (r = e.next());) {
                            if (r == t && !i) {
                                ")" == t && e.backUp(1);
                                break
                            }
                            i = !i && "\\" == r
                        }
                        return (r == t || !i && ")" != t) && (n.tokenize = null), O("string", "string")
                    }
                }

                function S(t, e) {
                    return t.next(), t.match(/\s*[\"\')]/, !1) ? e.tokenize = null : e.tokenize = C(")"), O(null, "(")
                }

                function k(t, e, n) {
                    this.type = t, this.indent = e, this.prev = n
                }

                function j(t, e, n, r) {
                    return t.context = new k(n, e.indentation() + (!1 === r ? 0 : a), t.context), n
                }

                function T(t) {
                    return t.context.prev && (t.context = t.context.prev), t.context.type
                }

                function P(t, e, n) {
                    return D[n.context.type](t, e, n)
                }

                function E(t, e, n, r) {
                    for (var i = r || 1; i > 0; i--) n.context = n.context.prev;
                    return P(t, e, n)
                }

                function M(t) {
                    var e = t.current().toLowerCase();
                    o = m.hasOwnProperty(e) ? "atom" : v.hasOwnProperty(e) ? "keyword" : "variable"
                }
                var D = {
                    top: function(t, e, n) {
                        if ("{" == t) return j(n, e, "block");
                        if ("}" == t && n.context.prev) return T(n);
                        if (w && /@component/i.test(t)) return j(n, e, "atComponentBlock");
                        if (/^@(-moz-)?document$/i.test(t)) return j(n, e, "documentTypes");
                        if (/^@(media|supports|(-moz-)?document|import)$/i.test(t)) return j(n, e, "atBlock");
                        if (/^@(font-face|counter-style)/i.test(t)) return n.stateArg = t, "restricted_atBlock_before";
                        if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(t)) return "keyframes";
                        if (t && "@" == t.charAt(0)) return j(n, e, "at");
                        if ("hash" == t) o = "builtin";
                        else if ("word" == t) o = "tag";
                        else {
                            if ("variable-definition" == t) return "maybeprop";
                            if ("interpolation" == t) return j(n, e, "interpolation");
                            if (":" == t) return "pseudo";
                            if (b && "(" == t) return j(n, e, "parens")
                        }
                        return n.context.type
                    },
                    block: function(t, e, n) {
                        if ("word" == t) {
                            var r = e.current().toLowerCase();
                            return h.hasOwnProperty(r) ? (o = "property", "maybeprop") : f.hasOwnProperty(r) ? (o = x ? "string-2" : "property", "maybeprop") : b ? (o = e.match(/^\s*:(?:\s|$)/, !1) ? "property" : "tag", "block") : (o += " error", "maybeprop")
                        }
                        return "meta" == t ? "block" : b || "hash" != t && "qualifier" != t ? D.top(t, e, n) : (o = "error", "block")
                    },
                    maybeprop: function(t, e, n) {
                        return ":" == t ? j(n, e, "prop") : P(t, e, n)
                    },
                    prop: function(t, e, n) {
                        if (";" == t) return T(n);
                        if ("{" == t && b) return j(n, e, "propBlock");
                        if ("}" == t || "{" == t) return E(t, e, n);
                        if ("(" == t) return j(n, e, "parens");
                        if ("hash" != t || /^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(e.current())) {
                            if ("word" == t) M(e);
                            else if ("interpolation" == t) return j(n, e, "interpolation")
                        } else o += " error";
                        return "prop"
                    },
                    propBlock: function(t, e, n) {
                        return "}" == t ? T(n) : "word" == t ? (o = "property", "maybeprop") : n.context.type
                    },
                    parens: function(t, e, n) {
                        return "{" == t || "}" == t ? E(t, e, n) : ")" == t ? T(n) : "(" == t ? j(n, e, "parens") : "interpolation" == t ? j(n, e, "interpolation") : ("word" == t && M(e), "parens")
                    },
                    pseudo: function(t, e, n) {
                        return "meta" == t ? "pseudo" : "word" == t ? (o = "variable-3", n.context.type) : P(t, e, n)
                    },
                    documentTypes: function(t, e, n) {
                        return "word" == t && l.hasOwnProperty(e.current()) ? (o = "tag", n.context.type) : D.atBlock(t, e, n)
                    },
                    atBlock: function(t, e, n) {
                        if ("(" == t) return j(n, e, "atBlock_parens");
                        if ("}" == t || ";" == t) return E(t, e, n);
                        if ("{" == t) return T(n) && j(n, e, b ? "block" : "top");
                        if ("interpolation" == t) return j(n, e, "interpolation");
                        if ("word" == t) {
                            var r = e.current().toLowerCase();
                            o = "only" == r || "not" == r || "and" == r || "or" == r ? "keyword" : c.hasOwnProperty(r) ? "attribute" : u.hasOwnProperty(r) ? "property" : d.hasOwnProperty(r) ? "keyword" : h.hasOwnProperty(r) ? "property" : f.hasOwnProperty(r) ? x ? "string-2" : "property" : m.hasOwnProperty(r) ? "atom" : v.hasOwnProperty(r) ? "keyword" : "error"
                        }
                        return n.context.type
                    },
                    atComponentBlock: function(t, e, n) {
                        return "}" == t ? E(t, e, n) : "{" == t ? T(n) && j(n, e, b ? "block" : "top", !1) : ("word" == t && (o = "error"), n.context.type)
                    },
                    atBlock_parens: function(t, e, n) {
                        return ")" == t ? T(n) : "{" == t || "}" == t ? E(t, e, n, 2) : D.atBlock(t, e, n)
                    },
                    restricted_atBlock_before: function(t, e, n) {
                        return "{" == t ? j(n, e, "restricted_atBlock") : "word" == t && "@counter-style" == n.stateArg ? (o = "variable", "restricted_atBlock_before") : P(t, e, n)
                    },
                    restricted_atBlock: function(t, e, n) {
                        return "}" == t ? (n.stateArg = null, T(n)) : "word" == t ? (o = "@font-face" == n.stateArg && !p.hasOwnProperty(e.current().toLowerCase()) || "@counter-style" == n.stateArg && !g.hasOwnProperty(e.current().toLowerCase()) ? "error" : "property", "maybeprop") : "restricted_atBlock"
                    },
                    keyframes: function(t, e, n) {
                        return "word" == t ? (o = "variable", "keyframes") : "{" == t ? j(n, e, "top") : P(t, e, n)
                    },
                    at: function(t, e, n) {
                        return ";" == t ? T(n) : "{" == t || "}" == t ? E(t, e, n) : ("word" == t ? o = "tag" : "hash" == t && (o = "builtin"), "at")
                    },
                    interpolation: function(t, e, n) {
                        return "}" == t ? T(n) : "{" == t || ";" == t ? E(t, e, n) : ("word" == t ? o = "variable" : "variable" != t && "(" != t && ")" != t && (o = "error"), "interpolation")
                    }
                };
                return {
                    startState: function(t) {
                        return {
                            tokenize: null,
                            state: r ? "block" : "top",
                            stateArg: null,
                            context: new k(r ? "block" : "top", t || 0, null)
                        }
                    },
                    token: function(t, e) {
                        if (!e.tokenize && t.eatSpace()) return null;
                        var n = (e.tokenize || function(t, e) {
                            var n = t.next();
                            if (s[n]) {
                                var r = s[n](t, e);
                                if (!1 !== r) return r
                            }
                            return "@" == n ? (t.eatWhile(/[\w\\\-]/), O("def", t.current())) : "=" == n || ("~" == n || "|" == n) && t.eat("=") ? O(null, "compare") : '"' == n || "'" == n ? (e.tokenize = C(n), e.tokenize(t, e)) : "#" == n ? (t.eatWhile(/[\w\\\-]/), O("atom", "hash")) : "!" == n ? (t.match(/^\s*\w*/), O("keyword", "important")) : /\d/.test(n) || "." == n && t.eat(/\d/) ? (t.eatWhile(/[\w.%]/), O("number", "unit")) : "-" !== n ? /[,+>*\/]/.test(n) ? O(null, "select-op") : "." == n && t.match(/^-?[_a-z][_a-z0-9-]*/i) ? O("qualifier", "qualifier") : /[:;{}\[\]\(\)]/.test(n) ? O(null, n) : t.match(/[\w-.]+(?=\()/) ? (/^(url(-prefix)?|domain|regexp)$/.test(t.current().toLowerCase()) && (e.tokenize = S), O("variable callee", "variable")) : /[\w\\\-]/.test(n) ? (t.eatWhile(/[\w\\\-]/), O("property", "word")) : O(null, null) : /[\d.]/.test(t.peek()) ? (t.eatWhile(/[\w.%]/), O("number", "unit")) : t.match(/^-[\w\\\-]*/) ? (t.eatWhile(/[\w\\\-]/), t.match(/^\s*:/, !1) ? O("variable-2", "variable-definition") : O("variable-2", "variable")) : t.match(/^\w+-/) ? O("meta", "meta") : void 0
                        })(t, e);
                        return n && "object" == typeof n && (i = n[1], n = n[0]), o = n, "comment" != i && (e.state = D[e.state](i, t, e)), o
                    },
                    indent: function(t, e) {
                        var n = t.context,
                            r = e && e.charAt(0),
                            i = n.indent;
                        return "prop" != n.type || "}" != r && ")" != r || (n = n.prev), n.prev && ("}" != r || "block" != n.type && "top" != n.type && "interpolation" != n.type && "restricted_atBlock" != n.type ? (")" != r || "parens" != n.type && "atBlock_parens" != n.type) && ("{" != r || "at" != n.type && "atBlock" != n.type) || (i = Math.max(0, n.indent - a)) : i = (n = n.prev).indent), i
                    },
                    electricChars: "}",
                    blockCommentStart: "/*",
                    blockCommentEnd: "*/",
                    blockCommentContinue: " * ",
                    lineComment: y,
                    fold: "brace"
                }
            });
            var n = ["domain", "regexp", "url", "url-prefix"],
                r = e(n),
                i = ["all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed"],
                o = e(i),
                a = ["width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid", "orientation", "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme"],
                s = e(a),
                l = ["landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", "interlace", "progressive", "dark", "light"],
                c = e(l),
                u = ["align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "all", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backdrop-filter", "backface-visibility", "background", "background-attachment", "background-blend-mode", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-position-x", "background-position-y", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "block-size", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "contain", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-family", "font-feature-settings", "font-kerning", "font-language-override", "font-optical-sizing", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-variation-settings", "font-weight", "gap", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline", "inset-inline-end", "inset-inline-start", "isolation", "justify-content", "justify-items", "justify-self", "left", "letter-spacing", "line-break", "line-height", "line-height-step", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode", "mask-origin", "mask-position", "mask-repeat", "mask-size", "mask-type", "max-block-size", "max-height", "max-inline-size", "max-width", "min-block-size", "min-height", "min-inline-size", "min-width", "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "offset", "offset-anchor", "offset-distance", "offset-path", "offset-position", "offset-rotate", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotate", "rotation", "rotation-point", "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block", "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom", "scroll-margin-inline", "scroll-margin-inline-end", "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right", "scroll-margin-top", "scroll-padding", "scroll-padding-block", "scroll-padding-block-end", "scroll-padding-block-start", "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end", "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right", "scroll-padding-top", "scroll-snap-align", "scroll-snap-type", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-combine-upright", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-skip-ink", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-orientation", "text-outline", "text-overflow", "text-rendering", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "translate", "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index", "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode"],
                d = e(u),
                h = ["border-block", "border-block-color", "border-block-end", "border-block-end-color", "border-block-end-style", "border-block-end-width", "border-block-start", "border-block-start-color", "border-block-start-style", "border-block-start-width", "border-block-style", "border-block-width", "border-inline", "border-inline-color", "border-inline-end", "border-inline-end-color", "border-inline-end-style", "border-inline-end-width", "border-inline-start", "border-inline-start-color", "border-inline-start-style", "border-inline-start-width", "border-inline-style", "border-inline-width", "margin-block", "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end", "margin-inline-start", "padding-block", "padding-block-end", "padding-block-start", "padding-inline", "padding-inline-end", "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color", "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom"],
                f = e(h),
                p = e(["font-display", "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style"]),
                g = e(["additive-symbols", "fallback", "negative", "pad", "prefix", "range", "speak-as", "suffix", "symbols", "system"]),
                v = ["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", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "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", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen"],
                m = e(v),
                b = ["above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", "compact", "condensed", "contain", "content", "contents", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "difference", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d", "media-controls-background", "media-current-time-display", "media-fullscreen-button", "media-mute-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", "media-volume-slider-container", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub", "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "transform", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", "xx-large", "xx-small"],
                y = e(b),
                w = n.concat(i).concat(a).concat(l).concat(u).concat(h).concat(v).concat(b);

            function x(t, e) {
                for (var n, r = !1; null != (n = t.next());) {
                    if (r && "/" == n) {
                        e.tokenize = null;
                        break
                    }
                    r = "*" == n
                }
                return ["comment", "comment"]
            }
            t.registerHelper("hintWords", "css", w), t.defineMIME("text/css", {
                documentTypes: r,
                mediaTypes: o,
                mediaFeatures: s,
                mediaValueKeywords: c,
                propertyKeywords: d,
                nonStandardPropertyKeywords: f,
                fontProperties: p,
                counterDescriptors: g,
                colorKeywords: m,
                valueKeywords: y,
                tokenHooks: {
                    "/": function(t, e) {
                        return !!t.eat("*") && (e.tokenize = x, x(t, e))
                    }
                },
                name: "css"
            }), t.defineMIME("text/x-scss", {
                mediaTypes: o,
                mediaFeatures: s,
                mediaValueKeywords: c,
                propertyKeywords: d,
                nonStandardPropertyKeywords: f,
                colorKeywords: m,
                valueKeywords: y,
                fontProperties: p,
                allowNested: !0,
                lineComment: "//",
                tokenHooks: {
                    "/": function(t, e) {
                        return t.eat("/") ? (t.skipToEnd(), ["comment", "comment"]) : t.eat("*") ? (e.tokenize = x, x(t, e)) : ["operator", "operator"]
                    },
                    ":": function(t) {
                        return !!t.match(/\s*\{/, !1) && [null, null]
                    },
                    $: function(t) {
                        return t.match(/^[\w-]+/), t.match(/^\s*:/, !1) ? ["variable-2", "variable-definition"] : ["variable-2", "variable"]
                    },
                    "#": function(t) {
                        return !!t.eat("{") && [null, "interpolation"]
                    }
                },
                name: "css",
                helperType: "scss"
            }), t.defineMIME("text/x-less", {
                mediaTypes: o,
                mediaFeatures: s,
                mediaValueKeywords: c,
                propertyKeywords: d,
                nonStandardPropertyKeywords: f,
                colorKeywords: m,
                valueKeywords: y,
                fontProperties: p,
                allowNested: !0,
                lineComment: "//",
                tokenHooks: {
                    "/": function(t, e) {
                        return t.eat("/") ? (t.skipToEnd(), ["comment", "comment"]) : t.eat("*") ? (e.tokenize = x, x(t, e)) : ["operator", "operator"]
                    },
                    "@": function(t) {
                        return t.eat("{") ? [null, "interpolation"] : !t.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, !1) && (t.eatWhile(/[\w\\\-]/), t.match(/^\s*:/, !1) ? ["variable-2", "variable-definition"] : ["variable-2", "variable"])
                    },
                    "&": function() {
                        return ["atom", "atom"]
                    }
                },
                name: "css",
                helperType: "less"
            }), t.defineMIME("text/x-gss", {
                documentTypes: r,
                mediaTypes: o,
                mediaFeatures: s,
                propertyKeywords: d,
                nonStandardPropertyKeywords: f,
                fontProperties: p,
                counterDescriptors: g,
                colorKeywords: m,
                valueKeywords: y,
                supportsAtComponent: !0,
                tokenHooks: {
                    "/": function(t, e) {
                        return !!t.eat("*") && (e.tokenize = x, x(t, e))
                    }
                },
                name: "css",
                helperType: "gss"
            })
        }(n(13))
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t) {
                t.DomComponents.clear(), t.CssComposer.clear()
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(0),
            i = n(3),
            o = n(17);
        e.default = {
            run: function(t) {
                Object(r.bindAll)(this, "onKeyUp", "enableDragger", "disableDragger"), this.editor = t, this.canvasModel = this.canvas.getCanvasView().model, this.toggleMove(1)
            },
            stop: function(t) {
                this.toggleMove(), this.disableDragger()
            },
            onKeyUp: function(t) {
                " " === Object(i.f)(t) && this.editor.stopCommand(this.id)
            },
            enableDragger: function(t) {
                this.toggleDragger(1, t)
            },
            disableDragger: function(t) {
                this.toggleDragger(0, t)
            },
            toggleDragger: function(t, e) {
                var n = this.canvasModel,
                    r = this.em,
                    i = this.dragger,
                    a = t ? "add" : "remove";
                this.getCanvas().classList[a]("".concat(this.ppfx, "is__grabbing")), i || (i = new o.a({
                    getPosition: function() {
                        return {
                            x: n.get("x"),
                            y: n.get("y")
                        }
                    },
                    setPosition: function(t) {
                        var e = t.x,
                            r = t.y;
                        n.set({
                            x: e,
                            y: r
                        })
                    },
                    onStart: function(t, e) {
                        r.trigger("canvas:move:start", e)
                    },
                    onDrag: function(t, e) {
                        r.trigger("canvas:move", e)
                    },
                    onEnd: function(t, e) {
                        r.trigger("canvas:move:end", e)
                    }
                }), this.dragger = i), t ? i.start(e) : i.stop()
            },
            toggleMove: function(t) {
                var e = this.ppfx,
                    n = t ? "add" : "remove",
                    r = t ? "on" : "off",
                    o = {
                        on: i.v,
                        off: i.u
                    },
                    a = this.getCanvas(),
                    s = ["".concat(e, "is__grab")];
                !t && s.push("".concat(e, "is__grabbing")), s.forEach(function(t) {
                    return a.classList[n](t)
                }), o[r](document, "keyup", this.onKeyUp), o[r](a, "mousedown", this.enableDragger), o[r](document, "mouseup", this.disableDragger)
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(7),
            i = n.n(r),
            o = n(0);
        e.default = {
            run: function(t, e) {
                var n = this,
                    r = (arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}).component || t.getSelectedAll();
                return r = Object(o.isArray)(r) ? i()(r) : [r], t.select(null), r.forEach(function(t) {
                    if (!t || !t.get("removable")) return n.em.logWarning("The element is not removable", {
                        component: t
                    });
                    t.remove()
                }), r
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(0),
            a = n(17);

        function s(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function l(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? s(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : s(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var c = "dmode";
        e.default = {
            run: function(t, e) {
                var n = this,
                    r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                Object(o.bindAll)(this, "setPosition", "onStart", "onDrag", "onEnd", "getPosition", "getGuidesStatic", "renderGuide", "getGuidesTarget");
                var i = r.target,
                    s = r.event,
                    u = r.mode,
                    d = r.dragger,
                    h = void 0 === d ? {} : d,
                    f = l({
                        doc: i.getEl().ownerDocument,
                        onStart: this.onStart,
                        onEnd: this.onEnd,
                        onDrag: this.onDrag,
                        getPosition: this.getPosition,
                        setPosition: this.setPosition,
                        guidesStatic: function() {
                            return n.guidesStatic
                        },
                        guidesTarget: function() {
                            return n.guidesTarget
                        }
                    }, h);
                this.setupGuides(), this.opts = r, this.editor = t, this.em = t.getModel(), this.target = i, this.isTran = "translate" == u, this.guidesContainer = this.getGuidesContainer(), this.guidesTarget = this.getGuidesTarget(), this.guidesStatic = this.getGuidesStatic();
                var p = this.dragger;
                return p ? p.setOptions(f) : (p = new a.a(f), this.dragger = p), s && p.start(s), this.toggleDrag(1), this.em.trigger("".concat(c, ":start"), this.getEventOpts()), p
            },
            getEventOpts: function() {
                return {
                    mode: this.opts.mode,
                    target: this.target,
                    guidesTarget: this.guidesTarget,
                    guidesStatic: this.guidesStatic
                }
            },
            stop: function() {
                this.toggleDrag()
            },
            setupGuides: function() {
                (this.guides || []).forEach(function(t) {
                    var e = t.guide;
                    e && e.parentNode.removeChild(e)
                }), this.guides = []
            },
            getGuidesContainer: function() {
                var t = this,
                    e = this.guidesEl;
                if (!e) {
                    var n = this.editor,
                        r = this.em,
                        i = this.opts,
                        a = n.getConfig("stylePrefix"),
                        s = document.createElement("div"),
                        l = document.createElement("div"),
                        c = '<div class="'.concat(a, "guide-info__line ").concat(a, 'danger-bg">\n        <div class="').concat(a, "guide-info__content ").concat(a, 'danger-color"></div>\n      </div>');
                    (e = document.createElement("div")).className = "".concat(a, "guides"), s.className = "".concat(a, "guide-info ").concat(a, "guide-info__x"), l.className = "".concat(a, "guide-info ").concat(a, "guide-info__y"), s.innerHTML = c, l.innerHTML = c, e.appendChild(s), e.appendChild(l), n.Canvas.getGlobalToolsEl().appendChild(e), this.guidesEl = e, this.elGuideInfoX = s, this.elGuideInfoY = l, this.elGuideInfoContentX = s.querySelector(".".concat(a, "guide-info__content")), this.elGuideInfoContentY = l.querySelector(".".concat(a, "guide-info__content")), r.on("canvas:update frame:scroll", Object(o.debounce)(function() {
                        t.updateGuides(), i.debug && t.guides.forEach(function(e) {
                            return t.renderGuide(e)
                        })
                    }, 200))
                }
                return e
            },
            getGuidesStatic: function() {
                var t = this,
                    e = [],
                    n = this.target.getEl(),
                    r = n.parentNode,
                    i = void 0 === r ? {} : r;
                return Object(o.each)(i.children, function(r) {
                    return e = e.concat(n !== r ? t.getElementGuides(r) : [])
                }), e.concat(this.getElementGuides(i))
            },
            getGuidesTarget: function() {
                return this.getElementGuides(this.target.getEl())
            },
            updateGuides: function(t) {
                var e, n, r = this;
                (t || this.guides).forEach(function(t) {
                    var i = t.origin,
                        a = e === i ? n : r.getElementPos(i);
                    e = i, n = a, Object(o.each)(r.getGuidePosUpdate(t, a), function(e, n) {
                        return t[n] = e
                    }), t.originRect = a
                })
            },
            getGuidePosUpdate: function(t, e) {
                var n = {},
                    r = e.top,
                    i = e.height,
                    o = e.left,
                    a = e.width;
                switch (t.type) {
                    case "t":
                        n.y = r;
                        break;
                    case "b":
                        n.y = r + i;
                        break;
                    case "l":
                        n.x = o;
                        break;
                    case "r":
                        n.x = o + a;
                        break;
                    case "x":
                        n.x = o + a / 2;
                        break;
                    case "y":
                        n.y = r + i / 2
                }
                return n
            },
            renderGuide: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = t.guide || document.createElement("div"),
                    n = "px",
                    r = t.active ? 2 : 1,
                    i = e.children[0];
                return e.style = "position: absolute; background-color: ".concat(t.active ? "green" : "red", ";"), e.children.length || ((i = document.createElement("div")).style = "position: absolute; color: red; padding: 5px; top: 0; left: 0;", e.appendChild(i)), t.y ? (e.style.width = "100%", e.style.height = "".concat(r).concat(n), e.style.top = "".concat(t.y).concat(n), e.style.left = 0) : (e.style.width = "".concat(r).concat(n), e.style.height = "100%", e.style.left = "".concat(t.x).concat(n), e.style.top = "0".concat(n)), !t.guide && this.guidesContainer.appendChild(e), e
            },
            getElementPos: function(t) {
                return this.editor.Canvas.getElementPos(t, {
                    noScroll: 1
                })
            },
            getElementGuides: function(t) {
                var e = this,
                    n = this.opts,
                    r = this.getElementPos(t),
                    i = r.top,
                    o = r.height,
                    a = r.left,
                    s = r.width,
                    c = [{
                        type: "t",
                        y: i
                    }, {
                        type: "b",
                        y: i + o
                    }, {
                        type: "l",
                        x: a
                    }, {
                        type: "r",
                        x: a + s
                    }, {
                        type: "x",
                        x: a + s / 2
                    }, {
                        type: "y",
                        y: i + o / 2
                    }].map(function(i) {
                        return l(l({}, i), {}, {
                            origin: t,
                            originRect: r,
                            guide: n.debug && e.renderGuide(i)
                        })
                    });
                return c.forEach(function(t) {
                    return e.guides.push(t)
                }), c
            },
            getTranslate: function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "x",
                    n = 0;
                return (t || "").split(" ").forEach(function(t) {
                    var r = t.trim(),
                        i = "translate".concat(e.toUpperCase(), "(");
                    0 === r.indexOf(i) && (n = parseFloat(r.replace(i, "")))
                }), n
            },
            setTranslate: function(t, e, n) {
                var r = "translate".concat(e.toUpperCase(), "("),
                    i = "".concat(r).concat(n, ")"),
                    o = (t || "").split(" ").map(function(t) {
                        return 0 === t.trim().indexOf(r) && (t = i), t
                    }).join(" ");
                return o.indexOf(r) < 0 && (o += " ".concat(i)), o
            },
            getPosition: function() {
                var t = this.target,
                    e = this.isTran,
                    n = t.getStyle(),
                    r = n.left,
                    i = n.top,
                    o = n.transform,
                    a = 0,
                    s = 0;
                return e ? (a = this.getTranslate(o), s = this.getTranslate(o, "y")) : (a = parseFloat(r), s = parseFloat(i)), {
                    x: a,
                    y: s
                }
            },
            setPosition: function(t) {
                var e = t.x,
                    n = t.y,
                    r = t.end,
                    i = t.position,
                    a = t.width,
                    s = t.height,
                    l = this.target,
                    c = this.isTran,
                    u = r ? "" : 1,
                    d = "".concat(e).concat("px"),
                    h = "".concat(n).concat("px");
                if (c) {
                    var f = l.getStyle().transform || "";
                    return f = this.setTranslate(f, "x", d), f = this.setTranslate(f, "y", h), l.addStyle({
                        transform: f,
                        en: u
                    }, {
                        avoidStore: !r
                    })
                }
                var p = {
                        position: i,
                        width: a,
                        height: s
                    },
                    g = {
                        left: d,
                        top: h,
                        en: u
                    };
                Object(o.keys)(p).forEach(function(t) {
                    var e = p[t];
                    e && (g[t] = e)
                }), l.addStyle(g, {
                    avoidStore: !r
                })
            },
            _getDragData: function() {
                var t = this.target;
                return {
                    target: t,
                    parent: t.parent(),
                    index: t.index()
                }
            },
            onStart: function() {
                var t = this.target,
                    e = this.editor,
                    n = this.isTran,
                    r = this.opts,
                    i = r.center,
                    o = r.onStart,
                    a = e.Canvas,
                    s = t.getStyle(),
                    l = "absolute";
                if (o && o(this._getDragData()), !n && s.position !== l) {
                    var c = a.offset(t.getEl()),
                        u = c.left,
                        d = c.top,
                        h = c.width,
                        f = c.height;
                    if (i) {
                        var p = a.getMouseRelativeCanvas(event);
                        u = p.x, d = p.y
                    }
                    this.setPosition({
                        x: u,
                        y: d,
                        width: "".concat(h, "px"),
                        height: "".concat(f, "px"),
                        position: l
                    })
                }
            },
            onDrag: function() {
                var t = this,
                    e = this.guidesTarget,
                    n = this.opts,
                    r = n.onDrag;
                this.updateGuides(e), n.debug && e.forEach(function(e) {
                    return t.renderGuide(e)
                }), n.guidesInfo && this.renderGuideInfo(e.filter(function(t) {
                    return t.active
                })), r && r(this._getDragData())
            },
            onEnd: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    r = this.editor,
                    i = this.opts,
                    o = this.id,
                    a = i.onEnd;
                a && a(t, n, l(l({
                    event: t
                }, n), this._getDragData())), r.stopCommand(o), this.hideGuidesInfo(), this.em.trigger("".concat(c, ":end"), this.getEventOpts())
            },
            hideGuidesInfo: function() {
                var t = this;
                ["X", "Y"].forEach(function(e) {
                    var n = t["elGuideInfo".concat(e)];
                    n && (n.style.display = "none")
                })
            },
            renderGuideInfo: function() {
                var t = this,
                    e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [],
                    n = this.guidesStatic;
                this.hideGuidesInfo(), e.forEach(function(e) {
                    var r = e.origin,
                        i = e.x,
                        a = t.getElementPos(r),
                        s = Object(o.isUndefined)(i) ? "y" : "x",
                        u = "y" === s,
                        d = a[u ? "left" : "top"],
                        h = a.rect[u ? "left" : "top"],
                        f = u ? d + a.width : d + a.height,
                        p = u ? h + a.rect.width : h + a.rect.height,
                        g = t["elGuideInfo".concat(s.toUpperCase())],
                        v = t["elGuideInfoContent".concat(s.toUpperCase())],
                        m = g.style,
                        b = n.filter(function(t) {
                            return t.type === e.type
                        }).map(function(t) {
                            var e = t.originRect,
                                n = e.left,
                                r = e.width,
                                i = e.top,
                                o = e.height,
                                a = u ? n + r : i + o;
                            return {
                                gap: a < d ? d - a : (u ? n : i) - f,
                                guide: t
                            }
                        }).filter(function(t) {
                            return t.gap > 0
                        }).sort(function(t, e) {
                            return t.gap - e.gap
                        }).map(function(t) {
                            return t.guide
                        })[0];
                    if (b) {
                        var y = b.originRect,
                            w = y.left,
                            x = y.width,
                            O = y.top,
                            C = y.height,
                            S = y.rect,
                            k = u ? w < a.left : O < a.top,
                            j = u ? w : O,
                            T = u ? S.left : S.top,
                            P = u ? w + x : O + C,
                            E = u ? S.left + S.width : S.top + S.height,
                            M = u ? e.y : e.x,
                            D = k ? P : f,
                            A = "".concat(M, "px"),
                            L = k ? d - P : j - f,
                            _ = k ? h - E : T - p;
                        m.display = "", m[u ? "top" : "left"] = A, m[u ? "left" : "top"] = "".concat(D, "px"), m[u ? "width" : "height"] = "".concat(L, "px"), v.innerHTML = "".concat(Math.round(_), "px"), t.em.trigger("".concat(c, ":active"), l(l({}, t.getEventOpts()), {}, {
                            guide: e,
                            guidesStatic: n,
                            matched: b,
                            posFirst: M,
                            posSecond: D,
                            size: L,
                            sizeRaw: _,
                            elGuideInfo: g,
                            elGuideInfoCnt: v
                        }))
                    }
                })
            },
            toggleDrag: function(t) {
                var e = this.ppfx,
                    n = this.editor,
                    r = t ? "add" : "remove",
                    i = ["".concat(e, "is__grabbing")],
                    o = n.Canvas,
                    a = o.getBody();
                i.forEach(function(t) {
                    return a.classList[r](t)
                }), o[t ? "startAutoscroll" : "stopAutoscroll"]()
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t) {
                if (t.Canvas.hasFocus()) {
                    var e = [];
                    t.getSelectedAll().forEach(function(t) {
                        var n = t.components(),
                            r = n && n.at(0);
                        r && e.push(r)
                    }), e.length && t.select(e)
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                if (t.Canvas.hasFocus() || n.force) {
                    var r = [];
                    t.getSelectedAll().forEach(function(t) {
                        for (var e = t.parent(); e && !e.get("selectable");) e = e.parent();
                        e && r.push(e)
                    }), r.length && t.select(r)
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t) {
                if (t.Canvas.hasFocus()) {
                    var e = [];
                    t.getSelectedAll().forEach(function(t) {
                        var n = t.collection,
                            r = n.indexOf(t),
                            i = n.at(r + 1);
                        e.push(i || t)
                    }), e.length && t.select(e)
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t) {
                if (t.Canvas.hasFocus()) {
                    var e = [];
                    t.getSelectedAll().forEach(function(t) {
                        var n = t.collection,
                            r = n.indexOf(t),
                            i = n.at(r - 1);
                        e.push(i && r - 1 >= 0 ? i : t)
                    }), e.length && t.select(e)
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(0);
        e.default = {
            run: function(t, e) {
                var n = (arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}).target,
                    i = t.DomComponents,
                    o = n.get("type"),
                    a = i.getWrapper().findType(o).length,
                    s = [];
                if (!a) {
                    var l = t.CssComposer.getAll(),
                        c = n.get("style-signature");
                    c = Object(r.isArray)(c) ? c : [c], l.forEach(function(t) {
                        var e = t.selectorsToString();
                        c.forEach(function(n) {
                            n && e.indexOf(n) >= 0 && s.push(t)
                        })
                    }), l.remove(s)
                }
                return s
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(7),
            i = n.n(r);
        e.default = {
            run: function(t) {
                var e = t.getModel(),
                    n = i()(t.getSelectedAll());
                n.length && e.set("clipboard", n)
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(0),
            i = n(1),
            o = n.n(i),
            a = n(14),
            s = o.a.$;
        e.default = Object(r.extend)({}, a.default, {
            init: function(t) {
                Object(r.bindAll)(this, "startDelete", "stopDelete", "onDelete"), this.hoverClass = this.pfx + "hover-delete", this.badgeClass = this.pfx + "badge-red"
            },
            enable: function() {
                this.$el.find("*").mouseover(this.startDelete).mouseout(this.stopDelete).click(this.onDelete)
            },
            startDelete: function(t) {
                t.stopPropagation();
                var e = s(t.target);
                e.data("model").get("removable") && (e.addClass(this.hoverClass), this.attachBadge(e.get(0)))
            },
            stopDelete: function(t) {
                t.stopPropagation(), s(t.target).removeClass(this.hoverClass), this.badge && this.badge.css({
                    left: -1e3,
                    top: -1e3
                })
            },
            onDelete: function(t) {
                t.stopPropagation();
                var e = s(t.target);
                e.data("model").get("removable") && (e.data("model").destroy(), this.removeBadge(), this.clean())
            },
            updateBadgeLabel: function(t) {
                this.badge.html("Remove " + t.getName())
            }
        })
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1),
            i = n.n(r).a.$;
        e.default = {
            run: function(t, e) {
                var n = this;
                e && e.set && e.set("active", 0);
                var r = t.getConfig(),
                    o = t.Modal,
                    a = r.stylePrefix;
                if (this.cm = t.CodeManager || null, !this.$editors) {
                    var s = this.buildEditor("htmlmixed", "hopscotch", "HTML"),
                        l = this.buildEditor("css", "hopscotch", "CSS");
                    this.htmlEditor = s.el, this.cssEditor = l.el;
                    var c = i('<div class="'.concat(a, 'export-dl"></div>'));
                    c.append(s.$el).append(l.$el), this.$editors = c
                }
                o.open({
                    title: r.textViewCode,
                    content: this.$editors
                }).getModel().once("change:open", function() {
                    return t.stopCommand(n.id)
                }), this.htmlEditor.setContent(t.getHtml()), this.cssEditor.setContent(t.getCss())
            },
            stop: function(t) {
                var e = t.Modal;
                e && e.close()
            },
            buildEditor: function(t, e, n) {
                var r = document.createElement("textarea");
                !this.codeMirror && (this.codeMirror = this.cm.getViewer("CodeMirror"));
                var i = this.codeMirror.clone().set({
                        label: n,
                        codeName: t,
                        theme: e,
                        input: r
                    }),
                    o = new this.cm.EditorView({
                        model: i,
                        config: this.cm.getConfig()
                    }).render().$el;
                return i.init(r), {
                    el: i,
                    $el: o
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(0);
        e.default = {
            isEnabled: function() {
                var t = document;
                return t.fullscreenElement || t.webkitFullscreenElement || t.mozFullScreenElement ? 1 : 0
            },
            enable: function(t) {
                var e = "";
                return t.requestFullscreen ? t.requestFullscreen() : t.webkitRequestFullscreen ? (e = "webkit", t.webkitRequestFullscreen()) : t.mozRequestFullScreen ? (e = "moz", t.mozRequestFullScreen()) : t.msRequestFullscreen ? t.msRequestFullscreen() : console.warn("Fullscreen not supported"), e
            },
            disable: function() {
                var t = document;
                this.isEnabled() && (t.exitFullscreen ? t.exitFullscreen() : t.webkitExitFullscreen ? t.webkitExitFullscreen() : t.mozCancelFullScreen ? t.mozCancelFullScreen() : t.msExitFullscreen && t.msExitFullscreen())
            },
            fsChanged: function(t, e) {
                var n = (t || "") + "fullscreenchange";
                this.isEnabled() || (this.stop(null, this.sender), document.removeEventListener(n, this.fsChanged))
            },
            run: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                this.sender = e;
                var i = n.target,
                    o = Object(r.isElement)(i) ? i : document.querySelector(i),
                    a = this.enable(o || t.getContainer());
                this.fsChanged = this.fsChanged.bind(this, a), document.addEventListener(a + "fullscreenchange", this.fsChanged), t.trigger("change:canvasOffset")
            },
            stop: function(t, e) {
                e && e.set && e.set("active", !1), this.disable(), t && t.trigger("change:canvasOffset")
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(0),
            i = n(1),
            o = n.n(i),
            a = n(3),
            s = n(14),
            l = n(27),
            c = o.a.$;
        e.default = Object(r.extend)({}, l.default, s.default, {
            init: function(t) {
                s.default.init.apply(this, arguments), Object(r.bindAll)(this, "initSorter", "rollback", "onEndMove"), this.opt = t, this.hoverClass = this.ppfx + "highlighter-warning", this.badgeClass = this.ppfx + "badge-warning", this.noSelClass = this.ppfx + "no-select"
            },
            enable: function() {
                for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                s.default.enable.apply(this, e), this.getBadgeEl().addClass(this.badgeClass), this.getHighlighterEl().addClass(this.hoverClass);
                var r = this.$wrapper;
                r.css("cursor", "move"), r.on("mousedown", this.initSorter), r.addClass(this.noSelClass)
            },
            toggleClipboard: function() {},
            initSorter: function(t) {
                var e = c(t.target).data("model").get("draggable");
                e && (this.cacheEl = null, this.startSelectPosition(t.target, this.frameEl.contentDocument), this.sorter.draggable = e, this.sorter.onEndMove = this.onEndMove.bind(this), this.stopSelectComponent(), this.$wrapper.off("mousedown", this.initSorter), Object(a.v)(this.getContentWindow(), "keydown", this.rollback))
            },
            initSorterFromModel: function(t) {
                var e = t.get("draggable");
                if (e) {
                    this.cacheEl = null;
                    var n = t.view.el;
                    this.startSelectPosition(n, this.frameEl.contentDocument), this.sorter.draggable = e, this.sorter.onEndMove = this.onEndMoveFromModel.bind(this), this.stopSelectComponent(), Object(a.v)(this.getContentWindow(), "keydown", this.rollback)
                }
            },
            initSorterFromModels: function(t) {
                this.cacheEl = null;
                var e = t[t.length - 1],
                    n = (this.em.get("currentFrame") || {}).model,
                    r = e.getEl(n),
                    i = r.ownerDocument;
                this.startSelectPosition(r, i, {
                    onStart: this.onStart
                }), this.sorter.draggable = e.get("draggable"), this.sorter.toMove = t, this.sorter.onMoveClb = this.onDrag, this.sorter.onEndMove = this.onEndMoveFromModel.bind(this), this.stopSelectComponent(), Object(a.v)(this.getContentWindow(), "keydown", this.rollback)
            },
            onEndMoveFromModel: function() {
                Object(a.u)(this.getContentWindow(), "keydown", this.rollback)
            },
            onEndMove: function() {
                this.enable(), Object(a.u)(this.getContentWindow(), "keydown", this.rollback)
            },
            onSelect: function(t, e) {},
            rollback: function(t, e) {
                (27 == (t.which || t.keyCode) || e) && (this.sorter.moved = !1, this.sorter.endMove())
            },
            getBadgeEl: function() {
                return this.$badge || (this.$badge = c(this.getBadge())), this.$badge
            },
            getHighlighterEl: function() {
                return this.$hl || (this.$hl = c(this.canvas.getHighlighter())), this.$hl
            },
            stop: function() {
                for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                s.default.stop.apply(this, e), this.getBadgeEl().removeClass(this.badgeClass), this.getHighlighterEl().removeClass(this.hoverClass), this.$wrapper.css("cursor", "").unbind().removeClass(this.noSelClass)
            }
        })
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t, e) {
                var n = this,
                    r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    i = t.Modal,
                    o = t.AssetManager,
                    a = o.getConfig(),
                    s = o.getContainer(),
                    l = r.modalTitle || t.t("assetManager.modalTitle") || "",
                    c = r.types,
                    u = r.accept;
                if (o.setTarget(r.target), o.onClick(r.onClick), o.onDblClick(r.onDblClick), o.onSelect(r.onSelect), !this.rendered || c) {
                    var d = o.getAll().filter(function(t) {
                        return 1
                    });
                    c && c.length && (d = d.filter(function(t) {
                        return -1 !== c.indexOf(t.get("type"))
                    })), o.render(d), this.rendered = 1
                }
                if (u) {
                    var h = s.querySelector("input#".concat(a.stylePrefix, "uploadFile"));
                    h && h.setAttribute("accept", u)
                }
                return i.open({
                    title: l,
                    content: s
                }).getModel().once("change:open", function() {
                    return t.stopCommand(n.id)
                }), this
            },
            stop: function(t) {
                return t.Modal.close(), this
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t, e) {
                var n = t.BlockManager,
                    r = t.Panels;
                if (!this.blocks) {
                    n.render();
                    var i = "views-container",
                        o = document.createElement("div"),
                        a = r.getPanel(i) || r.addPanel({
                            id: i
                        });
                    o.appendChild(n.getContainer()), a.set("appendContent", o).trigger("change:appendContent"), this.blocks = o
                }
                this.blocks.style.display = "block"
            },
            stop: function() {
                var t = this.blocks;
                t && (t.style.display = "none")
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1);
        n.n(r).a.$, e.default = {
            run: function(t) {
                var e = t.LayerManager,
                    n = t.Panels;
                if (!this.layers) {
                    var r = "views-container",
                        i = document.createElement("div"),
                        o = n.getPanel(r) || n.addPanel({
                            id: r
                        });
                    i.appendChild(e.render()), o.set("appendContent", i).trigger("change:appendContent"), this.layers = i
                }
                this.layers.style.display = "block"
            },
            stop: function() {
                var t = this.layers;
                t && (t.style.display = "none")
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1),
            i = n.n(r).a.$;
        e.default = {
            run: function(t, e) {
                if (this.sender = e, !this.$cn) {
                    var n = t.getConfig(),
                        r = t.Panels;
                    this.$cn = i("<div></div>"), this.$cn2 = i("<div></div>"), this.$cn.append(this.$cn2);
                    var o = t.DeviceManager;
                    o && n.showDevices && r.addPanel({
                        id: "devices-c"
                    }).set("appendContent", o.render()).trigger("change:appendContent");
                    var a = t.SelectorManager;
                    a && this.$cn2.append(a.render([])), this.$cn2.append(t.StyleManager.render());
                    var s = t.StyleManager.getConfig().stylePrefix;
                    this.$header = i('<div class="'.concat(s, 'header">').concat(t.t("styleManager.empty"), "</div>")), this.$cn.append(this.$header), r.getPanel("views-container") ? this.panel = r.getPanel("views-container") : this.panel = r.addPanel({
                        id: "views-container"
                    }), this.panel.set("appendContent", this.$cn).trigger("change:appendContent"), this.target = t.editor, this.listenTo(this.target, "component:toggled", this.toggleSm)
                }
                this.toggleSm()
            },
            toggleSm: function() {
                var t = this.target,
                    e = this.sender;
                if (!e || !e.get || e.get("active")) {
                    var n = t.get("SelectorManager").getConfig().componentFirst,
                        r = t.getSelectedAll().length;
                    1 === r || r > 1 && n ? (this.$cn2.show(), this.$header.hide()) : (this.$cn2.hide(), this.$header.show())
                }
            },
            stop: function() {
                this.$cn2 && this.$cn2.hide(), this.$header && this.$header.hide()
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1),
            i = n.n(r).a.$;
        e.default = {
            run: function(t, e) {
                this.sender = e;
                var n = t.getModel(),
                    r = t.Config.stylePrefix,
                    o = t.TraitManager;
                if (!this.$cn) {
                    var a = o.getTraitsViewer(),
                        s = o.getConfig();
                    this.$cn = i("<div></div>"), this.$cn2 = i("<div></div>"), this.$cn.append(this.$cn2), this.$header = i("<div>").append('<div class="'.concat(s.stylePrefix, 'header">').concat(n.t("traitManager.empty"), "</div>")), this.$cn.append(this.$header), this.$cn2.append('<div class="'.concat(r, 'traits-label">').concat(n.t("traitManager.label"), "</div>")), this.$cn2.append(a.render().el);
                    var l = t.Panels;
                    (l.getPanel("views-container") ? l.getPanel("views-container") : l.addPanel({
                        id: "views-container"
                    })).set("appendContent", this.$cn.get(0)).trigger("change:appendContent"), this.target = t.getModel(), this.listenTo(this.target, "component:toggled", this.toggleTm)
                }
                this.toggleTm()
            },
            toggleTm: function() {
                var t = this.sender;
                t && t.get && !t.get("active") || (1 === this.target.getSelectedAll().length ? (this.$cn2.show(), this.$header.hide()) : (this.$cn2.hide(), this.$header.show()))
            },
            stop: function() {
                this.$cn2 && this.$cn2.hide(), this.$header && this.$header.hide()
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(0);
        e.default = {
            run: function(t) {
                var e = t.getModel().get("clipboard"),
                    n = t.getSelected();
                e && n && (t.getSelectedAll().forEach(function(n) {
                    if (n) {
                        var i, o = n.collection,
                            a = o.indexOf(n) + 1,
                            s = e.filter(function(t) {
                                return t.get("copyable")
                            });
                        i = Object(r.contains)(e, n) && n.get("copyable") ? o.add(n.clone(), {
                            at: a
                        }) : o.add(s.map(function(t) {
                            return t.clone()
                        }), {
                            at: a
                        }), (i = Object(r.isArray)(i) ? i : [i]).forEach(function(e) {
                            return t.trigger("component:paste", e)
                        })
                    }
                }), n.emitUpdate())
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(7),
            i = n.n(r),
            o = n(0),
            a = "sw-visibility";
        e.default = {
            getPanels: function(t) {
                return this.panels || (this.panels = t.Panels.getPanels()), this.panels
            },
            preventDrag: function(t) {
                t.abort = 1
            },
            tglEffects: function(t) {
                var e = this.em,
                    n = t ? "on" : "off";
                if (e) {
                    var r = e.get("Canvas"),
                        i = r.getBody(),
                        a = r.getToolbarEl();
                    a && (a.style.display = t ? "none" : "");
                    var s = i.querySelectorAll(".".concat(this.ppfx, "no-pointer"));
                    Object(o.each)(s, function(e) {
                        return e.style.pointerEvents = t ? "all" : ""
                    }), e[n]("run:tlb-move:before", this.preventDrag)
                }
            },
            run: function(t, e) {
                var n = this;
                this.sender = e, this.selected = i()(t.getSelectedAll()), t.select(), this.shouldRunSwVisibility || (this.shouldRunSwVisibility = t.Commands.isActive(a)), this.shouldRunSwVisibility && t.stopCommand(a), t.getModel().stopDefault();
                var r = this.getPanels(t),
                    o = t.Canvas.getElement(),
                    s = t.getEl(),
                    l = t.Config.stylePrefix;
                if (!this.helper) {
                    var c = document.createElement("span");
                    c.className = "".concat(l, "off-prv fa fa-eye-slash"), s.appendChild(c), c.onclick = function() {
                        return n.stopCommand()
                    }, this.helper = c
                }
                this.helper.style.display = "inline-block", r.forEach(function(t) {
                    return t.set("visible", !1)
                });
                var u = o.style;
                u.width = "100%", u.height = "100%", u.top = "0", u.left = "0", u.padding = "0", u.margin = "0", t.refresh(), this.tglEffects(1)
            },
            stop: function(t) {
                var e = this.sender,
                    n = void 0 === e ? {} : e,
                    r = this.selected;
                n.set && n.set("active", 0);
                var i = this.getPanels(t);
                this.shouldRunSwVisibility && (t.runCommand(a), this.shouldRunSwVisibility = !1), t.getModel().runDefault(), i.forEach(function(t) {
                    return t.set("visible", !0)
                }), t.Canvas.getElement().setAttribute("style", ""), r && t.select(r), delete this.selected, this.helper && (this.helper.style.display = "none"), t.refresh(), this.tglEffects()
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t, e, n) {
                var r = n || {},
                    i = r.el || "",
                    o = t.Canvas,
                    a = this.canvasResizer,
                    s = r.options || {},
                    l = o.getCanvasView();
                return s.appendTo = o.getResizerEl(), s.prefix = t.getConfig().stylePrefix, s.posFetcher = l.getElementPos.bind(l), s.mousePosFetcher = o.getMouseRelativePos, a && !r.forceNew || (this.canvasResizer = t.Utils.Resizer.init(s), a = this.canvasResizer), a.setOptions(s), a.blur(), a.focus(i), a
            },
            stop: function() {
                var t = this.canvasResizer;
                t && t.blur()
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(1),
            a = n.n(o),
            s = n(0),
            l = n(3);

        function c(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }
        var u = a.a.$;
        e.default = {
            getOffsetMethod: function(t) {
                return "get" + (t || "") + "OffsetViewerEl"
            },
            run: function(t, e, n) {
                var r = n || {},
                    o = r.state || "",
                    a = t.getConfig(),
                    d = this.em.getZoomDecimal(),
                    h = r.el || "";
                if (!a.showOffsets || Object(l.r)(h) || !a.showOffsetsSelected && "Fixed" == o) t.stopCommand(this.id, n);
                else {
                    var f = t.Canvas,
                        p = function(t) {
                            for (var e = 1; e < arguments.length; e++) {
                                var n = null != arguments[e] ? arguments[e] : {};
                                e % 2 ? c(Object(n), !0).forEach(function(e) {
                                    i()(t, e, n[e])
                                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : c(Object(n)).forEach(function(e) {
                                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                                })
                            }
                            return t
                        }({}, r.elPos || f.getElementPos(h));
                    Object(s.isUndefined)(r.top) || (p.top = r.top), Object(s.isUndefined)(r.left) || (p.left = r.left);
                    var g = window.getComputedStyle(h),
                        v = this.ppfx,
                        m = o + "State",
                        b = f[this.getOffsetMethod(o)](n.view);
                    b.style.opacity = "";
                    var y = this["marginT" + o],
                        w = this["marginB" + o],
                        x = this["marginL" + o],
                        O = this["marginR" + o],
                        C = this["padT" + o],
                        S = this["padB" + o],
                        k = this["padL" + o],
                        j = this["padR" + o];
                    if (b.childNodes.length && (this[m] = "1", y = b.querySelector("[data-offset-m-t]"), w = b.querySelector("[data-offset-m-b]"), x = b.querySelector("[data-offset-m-l]"), O = b.querySelector("[data-offset-m-r]"), C = b.querySelector("[data-offset-p-t]"), S = b.querySelector("[data-offset-p-b]"), k = b.querySelector("[data-offset-p-l]"), j = b.querySelector("[data-offset-p-r]")), !this[m]) {
                        var T = o.toLowerCase(),
                            P = T + "margin-v",
                            E = T + "padding-v",
                            M = u('<div class="'.concat(v, 'marginName">')).get(0),
                            D = u('<div class="'.concat(v, 'paddingName">')).get(0),
                            A = v + E + "-el",
                            L = "".concat(v + P + "-el", " ").concat(v + P),
                            _ = "".concat(A, " ").concat(v + E);
                        y = u('<div class="'.concat(L, '-top"></div>')).get(0), w = u('<div class="'.concat(L, '-bottom"></div>')).get(0), x = u('<div class="'.concat(L, '-left"></div>')).get(0), O = u('<div class="'.concat(L, '-right"></div>')).get(0), C = u('<div class="'.concat(_, '-top"></div>')).get(0), S = u('<div class="'.concat(_, '-bottom"></div>')).get(0), k = u('<div class="'.concat(_, '-left"></div>')).get(0), j = u('<div class="'.concat(_, '-right"></div>')).get(0), this["marginT" + o] = y, this["marginB" + o] = w, this["marginL" + o] = x, this["marginR" + o] = O, this["padT" + o] = C, this["padB" + o] = S, this["padL" + o] = k, this["padR" + o] = j, M.appendChild(y), M.appendChild(w), M.appendChild(x), M.appendChild(O), D.appendChild(C), D.appendChild(S), D.appendChild(k), D.appendChild(j), b.appendChild(M), b.appendChild(D), this[m] = "1"
                    }
                    var N = "px",
                        I = parseFloat(g.marginLeft.replace(N, "")) * d,
                        F = parseFloat(g.marginRight.replace(N, "")) * d,
                        V = parseFloat(g.marginTop.replace(N, "")) * d,
                        R = parseFloat(g.marginBottom.replace(N, "")) * d,
                        z = y.style,
                        H = w.style,
                        $ = x.style,
                        U = O.style,
                        B = C.style,
                        W = S.style,
                        q = k.style,
                        G = j.style,
                        K = parseFloat(p.left),
                        Y = parseFloat(g.width) * d + N;
                    z.height = V + N, z.width = Y, z.top = p.top - V + N, z.left = K + N, H.height = R + N, H.width = Y, H.top = p.top + p.height + N, H.left = K + N;
                    var X = p.height + V + R + N,
                        J = p.top - V + N;
                    $.height = X, $.width = I + N, $.top = J, $.left = K - I + N, U.height = X, U.width = F + N, U.top = J, U.left = K + p.width + N;
                    var Z = parseFloat(g.paddingTop) * d;
                    B.height = Z + N;
                    var Q = parseFloat(g.paddingBottom) * d;
                    W.height = Q + N;
                    var tt = p.height - Q - Z + N,
                        et = p.top + Z + N;
                    q.height = tt, q.width = parseFloat(g.paddingLeft) * d + N, q.top = et;
                    var nt = parseFloat(g.paddingRight) * d;
                    G.height = tt, G.width = nt + N, G.top = et
                }
            },
            stop: function(t, e) {
                var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    r = (n || {}).state || "",
                    i = this.getOffsetMethod(r);
                t.Canvas[i](n.view).style.opacity = 0
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e), e.default = {
            run: function(t) {
                this.toggleVis(t)
            },
            stop: function(t) {
                this.toggleVis(t, 0)
            },
            toggleVis: function(t) {
                var e = this,
                    n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1;
                if (!t.Commands.isActive("preview")) {
                    var r = n ? "add" : "remove";
                    t.Canvas.getFrames().forEach(function(t) {
                        t.view.getBody().classList[r]("".concat(e.ppfx, "dashed"))
                    })
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = {
                stylePrefix: "",
                appendTo: "",
                sortable: 1,
                hidable: 1,
                hideTextnode: 1,
                root: "",
                showWrapper: 1,
                showHover: 1,
                scrollCanvas: {
                    behavior: "smooth",
                    block: "nearest"
                },
                scrollLayers: {
                    behavior: "auto",
                    block: "nearest"
                },
                highlightHover: 1
            },
            a = n(36),
            s = n(0);

        function l(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function c(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? l(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : l(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n = {};
            return {
                name: "LayerManager",
                init: function() {
                    var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return (n = c(c({}, o), e)).stylePrefix = e.pStylePrefix, t = n.em, this
                },
                getConfig: function() {
                    return n
                },
                onLoad: function() {
                    e = new a.a({
                        level: 0,
                        config: n,
                        opened: n.opened || {},
                        model: t.get("DomComponents").getWrapper()
                    }), t && t.on("component:selected", this.componentChanged), this.componentChanged()
                },
                postRender: function() {
                    var t = n.appendTo,
                        e = n.root;
                    e && this.setRoot(e), t && (Object(s.isElement)(t) ? t : document.querySelector(t)).appendChild(this.render())
                },
                setRoot: function(t) {
                    return e.setRoot(t), this
                },
                getRoot: function() {
                    return e.model
                },
                getAll: function() {
                    return e
                },
                componentChanged: function(e) {
                    if (!(arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}).fromLayers) {
                        var r = t.get("opened"),
                            i = t.getSelected(),
                            o = n.scrollLayers,
                            a = i && i.collection ? i.collection.parent : null;
                        for (var s in r) r[s].set("open", 0);
                        for (; a;) a.set("open", 1), r[a.cid] = a, a = a.collection ? a.collection.parent : null;
                        if (i && o) {
                            var l = i.viewLayer && i.viewLayer.el;
                            l && l.scrollIntoView(o)
                        }
                    }
                },
                render: function() {
                    return e.render().el
                },
                destroy: function() {
                    e && e.remove(), [t, e, n].forEach(function(t) {
                        return {}
                    })
                }
            }
        }
    }, function(t, e, n) {
        var r, i, o;
        i = [n(0), n(1)], void 0 === (o = "function" == typeof(r = function(t, e) {
            var n = Array.prototype.slice;

            function r(t, e, n) {
                return n.length <= 4 ? t.call(e, n[0], n[1], n[2], n[3]) : t.apply(e, n)
            }

            function i(t, e) {
                return n.call(t, e)
            }

            function o(e, n) {
                return null != e && (t.isArray(n) || (n = i(arguments, 1)), t.all(n, function(t) {
                    return t in e
                }))
            }
            var a, s, l = (a = !1, s = -1, function() {
                return a || (s++, a = !0, t.defer(function() {
                    a = !1
                })), s
            });

            function c() {
                this.registeredObjects = [], this.cidIndexes = []
            }

            function u(e, n, r, i) {
                for (var o, a = 0, s = n.length; a < s; a++)
                    if (o = n[a]) {
                        if ("on" === e) {
                            if (!i.objectRegistry.register(o)) continue
                        } else if (!i.objectRegistry.unregister(o)) continue;
                        t.isFunction(o[e]) && o[e]("all", r, i)
                    }
            }

            function d(e, n) {
                var r = n.type,
                    i = n.undoTypes,
                    o = !i[r] || i[r][e];
                t.isFunction(o) && o(n.object, n.before, n.after, n.options)
            }

            function h(e, r, i, o, a) {
                if (!(i.isCurrentlyUndoRedoing || "undo" === e && -1 === i.pointer || "redo" === e && i.pointer === i.length - 1)) {
                    i.isCurrentlyUndoRedoing = !0;
                    var s, l, c = "undo" === e;
                    for (a ? l = c && i.pointer === i.length - 1 || !c && -1 === i.pointer ? t.clone(i.models) : n.apply(i.models, c ? [0, i.pointer] : [i.pointer, i.length - 1]) : (s = i.at(c ? i.pointer : i.pointer + 1), l = o ? i.where({
                            magicFusionIndex: s.get("magicFusionIndex")
                        }) : [s]), i.pointer += (c ? -1 : 1) * l.length; s = c ? l.pop() : l.shift();) s[e]();
                    i.isCurrentlyUndoRedoing = !1, r.trigger(e, r)
                }
            }
            c.prototype = {
                isRegistered: function(e) {
                    return e && e.cid ? this.registeredObjects[e.cid] : t.contains(this.registeredObjects, e)
                },
                register: function(t) {
                    return !this.isRegistered(t) && (t && t.cid ? (this.registeredObjects[t.cid] = t, this.cidIndexes.push(t.cid)) : this.registeredObjects.push(t), !0)
                },
                unregister: function(e) {
                    if (this.isRegistered(e)) {
                        if (e && e.cid) delete this.registeredObjects[e.cid], this.cidIndexes.splice(t.indexOf(this.cidIndexes, e.cid), 1);
                        else {
                            var n = t.indexOf(this.registeredObjects, e);
                            this.registeredObjects.splice(n, 1)
                        }
                        return !0
                    }
                    return !1
                },
                get: function() {
                    return t.map(this.cidIndexes, function(t) {
                        return this.registeredObjects[t]
                    }, this).concat(this.registeredObjects)
                }
            };
            var f = {
                add: {
                    undo: function(t, e, n, r) {
                        t.remove(n, r)
                    },
                    redo: function(t, e, n, r) {
                        r.index && (r.at = r.index), t.add(n, r)
                    },
                    on: function(e, n, r) {
                        return {
                            object: n,
                            before: void 0,
                            after: e,
                            options: t.clone(r)
                        }
                    }
                },
                remove: {
                    undo: function(t, e, n, r) {
                        "index" in r && (r.at = r.index), t.add(e, r)
                    },
                    redo: function(t, e, n, r) {
                        t.remove(e, r)
                    },
                    on: function(e, n, r) {
                        return {
                            object: n,
                            before: e,
                            after: void 0,
                            options: t.clone(r)
                        }
                    }
                },
                change: {
                    undo: function(e, n, r, i) {
                        t.isEmpty(n) ? t.each(t.keys(r), e.unset, e) : (e.set(n), i && i.unsetData && i.unsetData.before && i.unsetData.before.length && t.each(i.unsetData.before, e.unset, e))
                    },
                    redo: function(e, n, r, i) {
                        t.isEmpty(r) ? t.each(t.keys(n), e.unset, e) : (e.set(r), i && i.unsetData && i.unsetData.after && i.unsetData.after.length && t.each(i.unsetData.after, e.unset, e))
                    },
                    on: function(e, n) {
                        var r = e.changedAttributes(),
                            i = t.keys(r),
                            o = t.pick(e.previousAttributes(), i),
                            a = t.keys(o),
                            s = (n || (n = {})).unsetData = {
                                after: [],
                                before: []
                            };
                        return i.length != a.length && (i.length > a.length ? t.each(i, function(t) {
                            t in o || s.before.push(t)
                        }, this) : t.each(a, function(t) {
                            t in r || s.after.push(t)
                        })), {
                            object: e,
                            before: o,
                            after: r,
                            options: t.clone(n)
                        }
                    }
                },
                reset: {
                    undo: function(t, e, n) {
                        t.reset(e)
                    },
                    redo: function(t, e, n) {
                        t.reset(n)
                    },
                    on: function(e, n) {
                        return {
                            object: e,
                            before: n.previousModels,
                            after: t.clone(e.models)
                        }
                    }
                }
            };

            function p() {}

            function g(e, n, r, i) {
                if ("object" == typeof n) return t.each(n, function(t, n) {
                    2 === e ? g(e, t, r, i) : g(e, n, t, r)
                });
                switch (e) {
                    case 0:
                        o(r, "undo", "redo", "on") && t.all(t.pick(r, "undo", "redo", "on"), t.isFunction) && (i[n] = r);
                        break;
                    case 1:
                        i[n] && t.isObject(r) && (i[n] = t.extend({}, i[n], r));
                        break;
                    case 2:
                        delete i[n]
                }
                return this
            }
            p.prototype = f;
            var v = e.Model.extend({
                    defaults: {
                        type: null,
                        object: null,
                        before: null,
                        after: null,
                        magicFusionIndex: null
                    },
                    undo: function(t) {
                        d("undo", this.attributes)
                    },
                    redo: function(t) {
                        d("redo", this.attributes)
                    }
                }),
                m = e.Collection.extend({
                    model: v,
                    pointer: -1,
                    track: !1,
                    isCurrentlyUndoRedoing: !1,
                    maximumStackLength: 1 / 0,
                    setMaxLength: function(t) {
                        this.maximumStackLength = t
                    }
                }),
                b = e.Model.extend({
                    defaults: {
                        maximumStackLength: 1 / 0,
                        track: !1
                    },
                    initialize: function(e) {
                        this.stack = new m, this.objectRegistry = new c, this.undoTypes = new p, this.stack.setMaxLength(this.get("maximumStackLength")), this.on("change:maximumStackLength", function(t, e) {
                            this.stack.setMaxLength(e)
                        }, this), e && e.track && this.startTracking(), e && e.register && (t.isArray(e.register) || t.isArguments(e.register) ? r(this.register, this, e.register) : this.register(e.register))
                    },
                    startTracking: function() {
                        this.set("track", !0), this.stack.track = !0
                    },
                    stopTracking: function() {
                        this.set("track", !1), this.stack.track = !1
                    },
                    isTracking: function() {
                        return this.get("track")
                    },
                    _addToStack: function(t) {
                        ! function(t, e, n, i) {
                            if (t.track && !t.isCurrentlyUndoRedoing && e in i && function(t, e) {
                                    var n = t.condition,
                                        i = typeof n;
                                    return "function" === i ? !!r(n, t, e) : "boolean" !== i || n
                                }(i[e], n)) {
                                var a = r(i[e].on, i[e], n);
                                if (o(a, "object", "before", "after")) {
                                    if (a.type = e, a.magicFusionIndex = l(), a.undoTypes = i, t.pointer < t.length - 1)
                                        for (var s = t.length - t.pointer - 1; s--;) t.pop();
                                    t.pointer = t.length, t.add(a), t.length > t.maximumStackLength && (t.shift(), t.pointer--)
                                }
                            }
                        }(this.stack, t, i(arguments, 1), this.undoTypes)
                    },
                    register: function() {
                        u("on", arguments, this._addToStack, this)
                    },
                    unregister: function() {
                        u("off", arguments, this._addToStack, this)
                    },
                    unregisterAll: function() {
                        r(this.unregister, this, this.objectRegistry.get())
                    },
                    undo: function(t) {
                        h("undo", this, this.stack, t)
                    },
                    undoAll: function() {
                        h("undo", this, this.stack, !1, !0)
                    },
                    redo: function(t) {
                        h("redo", this, this.stack, t)
                    },
                    redoAll: function() {
                        h("redo", this, this.stack, !1, !0)
                    },
                    isAvailable: function(t) {
                        var e = this.stack,
                            n = e.length;
                        switch (t) {
                            case "undo":
                                return n > 0 && e.pointer > -1;
                            case "redo":
                                return n > 0 && e.pointer < n - 1;
                            default:
                                return !1
                        }
                    },
                    merge: function(e) {
                        for (var n, r = t.isArray(e) ? e : i(arguments); n = r.pop();) n instanceof b && n.stack instanceof m && (n.stack = this.stack)
                    },
                    addUndoType: function(t, e) {
                        g(0, t, e, this.undoTypes)
                    },
                    changeUndoType: function(t, e) {
                        g(1, t, e, this.undoTypes)
                    },
                    removeUndoType: function(t) {
                        g(2, t, void 0, this.undoTypes)
                    },
                    clear: function() {
                        this.stack.reset(), this.stack.pointer = -1
                    }
                });
            return t.extend(b, {
                defaults: function(e) {
                    t.extend(b.prototype.defaults, e)
                },
                addUndoType: function(t, e) {
                    g(0, t, e, f)
                },
                changeUndoType: function(t, e) {
                    g(1, t, e, f)
                },
                removeUndoType: function(t) {
                    g(2, t, void 0, f)
                }
            }), e.UndoManager = b
        }) ? r.apply(e, i) : r) || (t.exports = o)
    }, function(t, e, n) {
        "use strict";
        e.a = function(t) {
            var e = this.constructor;
            return this.then(function(n) {
                return e.resolve(t()).then(function() {
                    return n
                })
            }, function(n) {
                return e.resolve(t()).then(function() {
                    return e.reject(n)
                })
            })
        }
    }, function(t, e, n) {
        "use strict";
        var r = n(8),
            i = n.n(r);
        e.a = function(t) {
            return new this(function(e, n) {
                if (!t || void 0 === t.length) return n(new TypeError(i()(t) + " " + t + " is not iterable(cannot read property Symbol(Symbol.iterator))"));
                var r = Array.prototype.slice.call(t);
                if (0 === r.length) return e([]);
                var o = r.length;

                function a(t, n) {
                    if (n && ("object" === i()(n) || "function" == typeof n)) {
                        var s = n.then;
                        if ("function" == typeof s) return void s.call(n, function(e) {
                            a(t, e)
                        }, function(n) {
                            r[t] = {
                                status: "rejected",
                                reason: n
                            }, 0 == --o && e(r)
                        })
                    }
                    r[t] = {
                        status: "fulfilled",
                        value: n
                    }, 0 == --o && e(r)
                }
                for (var s = 0; s < r.length; s++) a(s, r[s])
            })
        }
    }, function(t, e, n) {
        var r = n(87),
            i = n(88),
            o = n(43),
            a = n(89);
        t.exports = function(t, e) {
            return r(t) || i(t, e) || o(t, e) || a()
        }
    }, function(t, e, n) {
        var r = n(42);
        t.exports = function(t) {
            if (Array.isArray(t)) return r(t)
        }
    }, function(t, e) {
        t.exports = function(t) {
            if ("undefined" != typeof Symbol && Symbol.iterator in Object(t)) return Array.from(t)
        }
    }, function(t, e) {
        t.exports = function() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(8),
            i = n.n(r),
            o = n(2),
            a = n.n(o),
            s = n(0),
            l = n(39),
            c = n.n(l);

        function u(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function d(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? u(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : u(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n = {},
                r = {
                    defaults: {
                        "core:undo": {
                            keys: "⌘+z, ctrl+z",
                            handler: "core:undo"
                        },
                        "core:redo": {
                            keys: "⌘+shift+z, ctrl+shift+z",
                            handler: "core:redo"
                        },
                        "core:copy": {
                            keys: "⌘+c, ctrl+c",
                            handler: "core:copy"
                        },
                        "core:paste": {
                            keys: "⌘+v, ctrl+v",
                            handler: "core:paste"
                        },
                        "core:component-next": {
                            keys: "s",
                            handler: "core:component-next"
                        },
                        "core:component-prev": {
                            keys: "w",
                            handler: "core:component-prev"
                        },
                        "core:component-enter": {
                            keys: "d",
                            handler: "core:component-enter"
                        },
                        "core:component-exit": {
                            keys: "a",
                            handler: "core:component-exit"
                        },
                        "core:component-delete": {
                            keys: "backspace, delete",
                            handler: "core:component-delete",
                            opts: {
                                prevent: 1
                            }
                        }
                    }
                };
            return {
                keymaster: c.a,
                name: "Keymaps",
                getConfig: function() {
                    return e
                },
                init: function() {
                    var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return e = d(d({}, r), n), t = e.em, this.em = t, this
                },
                onLoad: function() {
                    var t = e.defaults;
                    for (var n in t) {
                        var r = t[n];
                        this.add(n, r.keys, r.handler, r.opts || {})
                    }
                },
                add: function(t, e, r) {
                    var o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
                        a = this.em,
                        l = a.get("Commands"),
                        u = a.getEditor(),
                        d = a.get("Canvas"),
                        h = {
                            id: t,
                            keys: e,
                            handler: r
                        };
                    return n[t] && this.remove(t), n[t] = h, c()(e, function(e, n) {
                        var c = {
                            event: e,
                            h: n
                        };
                        if (r = Object(s.isString)(r) ? l.get(r) : r, !a.isEditing() && !u.Canvas.isInputFocused() || o.force) {
                            o.prevent && d.getCanvasView().preventDefault(e), "object" == i()(r) ? l.runCommand(r, c) : r(u, 0, c);
                            var h = [t, n.shortcut, e];
                            a.trigger.apply(a, ["keymap:emit"].concat(h)), a.trigger.apply(a, ["keymap:emit:".concat(t)].concat(h))
                        }
                    }), a.trigger("keymap:add", h), h
                },
                get: function(t) {
                    return n[t]
                },
                getAll: function() {
                    return n
                },
                remove: function(t) {
                    var e = this.em,
                        r = this.get(t);
                    if (r) return delete n[t], r.keys.split(", ").forEach(function(t) {
                        return c.a.unbind(t.trim())
                    }), e && e.trigger("keymap:remove", r), r
                },
                removeAll: function() {
                    var t = this;
                    return Object.keys(n).forEach(function(e) {
                        return t.remove(e)
                    }), this
                },
                destroy: function() {
                    this.removeAll(), [t, e, n].forEach(function(t) {
                        return {}
                    }), this.em = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(70),
            a = n.n(o);

        function s(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function l(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? s(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : s(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n, r, i = {
                    maximumStackLength: 500
                },
                o = function(t) {
                    return t.avoidStore || t.noUndo
                };
            return {
                name: "UndoManager",
                init: function() {
                    var s = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    n = l(l({}, s), i), t = n.em, this.em = t, (e = new a.a(l({
                        track: !0,
                        register: []
                    }, n))).changeUndoType("change", {
                        condition: !1
                    }), e.changeUndoType("add", {
                        on: function(t, e) {
                            var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                            if (!o(n)) return {
                                object: e,
                                before: void 0,
                                after: t,
                                options: l({}, n)
                            }
                        }
                    }), e.changeUndoType("remove", {
                        on: function(t, e) {
                            var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                            if (!o(n)) return {
                                object: e,
                                before: t,
                                after: void 0,
                                options: l({}, n)
                            }
                        }
                    });
                    var c = {
                        on: function(t, e) {
                            var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                            if (!r && (r = t.previousAttributes()), !o(n)) {
                                var i = {
                                    object: t,
                                    before: r,
                                    after: t.toJSON({
                                        keepSymbols: 1
                                    })
                                };
                                return r = null, i
                            }
                        },
                        undo: function(t, e, n, r) {
                            t.set(e)
                        },
                        redo: function(t, e, n, r) {
                            t.set(n)
                        }
                    };
                    return ["style", "attributes", "content", "src"].forEach(function(t) {
                        return e.addUndoType("change:".concat(t), c)
                    }), e.on("undo redo", function() {
                        return t.trigger("component:toggled change:canvasOffset")
                    }), ["undo", "redo"].forEach(function(n) {
                        return e.on(n, function() {
                            return t.trigger(n)
                        })
                    }), this
                },
                getConfig: function() {
                    return n
                },
                add: function(t) {
                    return e.register(t), this
                },
                remove: function(t) {
                    return e.unregister(t), this
                },
                removeAll: function() {
                    return e.unregisterAll(), this
                },
                start: function() {
                    return e.startTracking(), this
                },
                stop: function() {
                    return e.stopTracking(), this
                },
                undo: function() {
                    var n = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0];
                    return !t.isEditing() && e.undo(n), this
                },
                undoAll: function() {
                    return e.undoAll(), this
                },
                redo: function() {
                    var n = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0];
                    return !t.isEditing() && e.redo(n), this
                },
                redoAll: function() {
                    return e.redoAll(), this
                },
                hasUndo: function() {
                    return e.isAvailable("undo")
                },
                hasRedo: function() {
                    return e.isAvailable("redo")
                },
                getStack: function() {
                    return e.stack
                },
                getStackGroup: function() {
                    var t = [],
                        e = [];
                    return this.getStack().forEach(function(n) {
                        var r = n.get("magicFusionIndex");
                        e.indexOf(r) < 0 && (e.push(r), t.push(n))
                    }), t
                },
                getPointer: function() {
                    return this.getStack().pointer
                },
                clear: function() {
                    return e.clear(), this
                },
                getInstance: function() {
                    return e
                },
                destroy: function() {
                    this.clear().removeAll(), [t, e, n, r].forEach(function(t) {
                        return {}
                    }), this.em = {}
                }
            }
        }
    }, function(t, e, n) {
        (function(t) {
            var r = void 0 !== t && t || "undefined" != typeof self && self || window,
                i = Function.prototype.apply;

            function o(t, e) {
                this._id = t, this._clearFn = e
            }
            e.setTimeout = function() {
                return new o(i.call(setTimeout, r, arguments), clearTimeout)
            }, e.setInterval = function() {
                return new o(i.call(setInterval, r, arguments), clearInterval)
            }, e.clearTimeout = e.clearInterval = function(t) {
                t && t.close()
            }, o.prototype.unref = o.prototype.ref = function() {}, o.prototype.close = function() {
                this._clearFn.call(r, this._id)
            }, e.enroll = function(t, e) {
                clearTimeout(t._idleTimeoutId), t._idleTimeout = e
            }, e.unenroll = function(t) {
                clearTimeout(t._idleTimeoutId), t._idleTimeout = -1
            }, e._unrefActive = e.active = function(t) {
                clearTimeout(t._idleTimeoutId);
                var e = t._idleTimeout;
                e >= 0 && (t._idleTimeoutId = setTimeout(function() {
                    t._onTimeout && t._onTimeout()
                }, e))
            }, n(80), e.setImmediate = "undefined" != typeof self && self.setImmediate || void 0 !== t && t.setImmediate || this && this.setImmediate, e.clearImmediate = "undefined" != typeof self && self.clearImmediate || void 0 !== t && t.clearImmediate || this && this.clearImmediate
        }).call(this, n(26))
    }, function(t, e, n) {
        (function(t, e) {
            ! function(t, n) {
                "use strict";
                if (!t.setImmediate) {
                    var r, i, o, a, s, l = 1,
                        c = {},
                        u = !1,
                        d = t.document,
                        h = Object.getPrototypeOf && Object.getPrototypeOf(t);
                    h = h && h.setTimeout ? h : t, "[object process]" === {}.toString.call(t.process) ? r = function(t) {
                        e.nextTick(function() {
                            p(t)
                        })
                    } : function() {
                        if (t.postMessage && !t.importScripts) {
                            var e = !0,
                                n = t.onmessage;
                            return t.onmessage = function() {
                                e = !1
                            }, t.postMessage("", "*"), t.onmessage = n, e
                        }
                    }() ? (a = "setImmediate$" + Math.random() + "$", s = function(e) {
                        e.source === t && "string" == typeof e.data && 0 === e.data.indexOf(a) && p(+e.data.slice(a.length))
                    }, t.addEventListener ? t.addEventListener("message", s, !1) : t.attachEvent("onmessage", s), r = function(e) {
                        t.postMessage(a + e, "*")
                    }) : t.MessageChannel ? ((o = new MessageChannel).port1.onmessage = function(t) {
                        p(t.data)
                    }, r = function(t) {
                        o.port2.postMessage(t)
                    }) : d && "onreadystatechange" in d.createElement("script") ? (i = d.documentElement, r = function(t) {
                        var e = d.createElement("script");
                        e.onreadystatechange = function() {
                            p(t), e.onreadystatechange = null, i.removeChild(e), e = null
                        }, i.appendChild(e)
                    }) : r = function(t) {
                        setTimeout(p, 0, t)
                    }, h.setImmediate = function(t) {
                        "function" != typeof t && (t = new Function("" + t));
                        for (var e = new Array(arguments.length - 1), n = 0; n < e.length; n++) e[n] = arguments[n + 1];
                        var i = {
                            callback: t,
                            args: e
                        };
                        return c[l] = i, r(l), l++
                    }, h.clearImmediate = f
                }

                function f(t) {
                    delete c[t]
                }

                function p(t) {
                    if (u) setTimeout(p, 0, t);
                    else {
                        var e = c[t];
                        if (e) {
                            u = !0;
                            try {
                                ! function(t) {
                                    var e = t.callback,
                                        r = t.args;
                                    switch (r.length) {
                                        case 0:
                                            e();
                                            break;
                                        case 1:
                                            e(r[0]);
                                            break;
                                        case 2:
                                            e(r[0], r[1]);
                                            break;
                                        case 3:
                                            e(r[0], r[1], r[2]);
                                            break;
                                        default:
                                            e.apply(n, r)
                                    }
                                }(e)
                            } finally {
                                f(t), u = !1
                            }
                        }
                    }
                }
            }("undefined" == typeof self ? void 0 === t ? this : t : self)
        }).call(this, n(26), n(81))
    }, function(t, e) {
        var n, r, i = t.exports = {};

        function o() {
            throw new Error("setTimeout has not been defined")
        }

        function a() {
            throw new Error("clearTimeout has not been defined")
        }

        function s(t) {
            if (n === setTimeout) return setTimeout(t, 0);
            if ((n === o || !n) && setTimeout) return n = setTimeout, setTimeout(t, 0);
            try {
                return n(t, 0)
            } catch (e) {
                try {
                    return n.call(null, t, 0)
                } catch (e) {
                    return n.call(this, t, 0)
                }
            }
        }! function() {
            try {
                n = "function" == typeof setTimeout ? setTimeout : o
            } catch (t) {
                n = o
            }
            try {
                r = "function" == typeof clearTimeout ? clearTimeout : a
            } catch (t) {
                r = a
            }
        }();
        var l, c = [],
            u = !1,
            d = -1;

        function h() {
            u && l && (u = !1, l.length ? c = l.concat(c) : d = -1, c.length && f())
        }

        function f() {
            if (!u) {
                var t = s(h);
                u = !0;
                for (var e = c.length; e;) {
                    for (l = c, c = []; ++d < e;) l && l[d].run();
                    d = -1, e = c.length
                }
                l = null, u = !1,
                    function(t) {
                        if (r === clearTimeout) return clearTimeout(t);
                        if ((r === a || !r) && clearTimeout) return r = clearTimeout, clearTimeout(t);
                        try {
                            r(t)
                        } catch (e) {
                            try {
                                return r.call(null, t)
                            } catch (e) {
                                return r.call(this, t)
                            }
                        }
                    }(t)
            }
        }

        function p(t, e) {
            this.fun = t, this.array = e
        }

        function g() {}
        i.nextTick = function(t) {
            var e = new Array(arguments.length - 1);
            if (arguments.length > 1)
                for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];
            c.push(new p(t, e)), 1 !== c.length || u || s(f)
        }, p.prototype.run = function() {
            this.fun.apply(null, this.array)
        }, i.title = "browser", i.browser = !0, i.env = {}, i.argv = [], i.version = "", i.versions = {}, i.on = g, i.addListener = g, i.once = g, i.off = g, i.removeListener = g, i.removeAllListeners = g, i.emit = g, i.prependListener = g, i.prependOnceListener = g, i.listeners = function(t) {
            return []
        }, i.binding = function(t) {
            throw new Error("process.binding is not supported")
        }, i.cwd = function() {
            return "/"
        }, i.chdir = function(t) {
            throw new Error("process.chdir is not supported")
        }, i.umask = function() {
            return 0
        }
    }, function(t, e) {
        t.exports = function(t, e) {
            if (null == t) return {};
            var n, r, i = {},
                o = Object.keys(t);
            for (r = 0; r < o.length; r++) n = o[r], e.indexOf(n) >= 0 || (i[n] = t[n]);
            return i
        }
    }, function(t, e, n) {
        ! function(t) {
            "use strict";
            var e = {
                    script: [
                        ["lang", /(javascript|babel)/i, "javascript"],
                        ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, "javascript"],
                        ["type", /./, "text/plain"],
                        [null, null, "javascript"]
                    ],
                    style: [
                        ["lang", /^css$/i, "css"],
                        ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"],
                        ["type", /./, "text/plain"],
                        [null, null, "css"]
                    ]
                },
                n = {};

            function r(t, e) {
                var r = t.match(function(t) {
                    return n[t] || (n[t] = new RegExp("\\s+" + t + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"))
                }(e));
                return r ? /^\s*(.*?)\s*$/.exec(r[2])[1] : ""
            }

            function i(t, e) {
                return new RegExp((e ? "^" : "") + "</s*" + t + "s*>", "i")
            }

            function o(t, e) {
                for (var n in t)
                    for (var r = e[n] || (e[n] = []), i = t[n], o = i.length - 1; o >= 0; o--) r.unshift(i[o])
            }
            t.defineMode("htmlmixed", function(n, a) {
                var s = t.getMode(n, {
                        name: "xml",
                        htmlMode: !0,
                        multilineTagIndentFactor: a.multilineTagIndentFactor,
                        multilineTagIndentPastTag: a.multilineTagIndentPastTag,
                        allowMissingTagName: a.allowMissingTagName
                    }),
                    l = {},
                    c = a && a.tags,
                    u = a && a.scriptTypes;
                if (o(e, l), c && o(c, l), u)
                    for (var d = u.length - 1; d >= 0; d--) l.script.unshift(["type", u[d].matches, u[d].mode]);

                function h(e, o) {
                    var a, c = s.token(e, o.htmlState),
                        u = /\btag\b/.test(c);
                    if (u && !/[<>\s\/]/.test(e.current()) && (a = o.htmlState.tagName && o.htmlState.tagName.toLowerCase()) && l.hasOwnProperty(a)) o.inTag = a + " ";
                    else if (o.inTag && u && />$/.test(e.current())) {
                        var d = /^([\S]+) (.*)/.exec(o.inTag);
                        o.inTag = null;
                        var f = ">" == e.current() && function(t, e) {
                                for (var n = 0; n < t.length; n++) {
                                    var i = t[n];
                                    if (!i[0] || i[1].test(r(e, i[0]))) return i[2]
                                }
                            }(l[d[1]], d[2]),
                            p = t.getMode(n, f),
                            g = i(d[1], !0),
                            v = i(d[1], !1);
                        o.token = function(t, e) {
                            return t.match(g, !1) ? (e.token = h, e.localState = e.localMode = null, null) : function(t, e, n) {
                                var r = t.current(),
                                    i = r.search(e);
                                return i > -1 ? t.backUp(r.length - i) : r.match(/<\/?$/) && (t.backUp(r.length), t.match(e, !1) || t.match(r)), n
                            }(t, v, e.localMode.token(t, e.localState))
                        }, o.localMode = p, o.localState = t.startState(p, s.indent(o.htmlState, "", ""))
                    } else o.inTag && (o.inTag += e.current(), e.eol() && (o.inTag += " "));
                    return c
                }
                return {
                    startState: function() {
                        return {
                            token: h,
                            inTag: null,
                            localMode: null,
                            localState: null,
                            htmlState: t.startState(s)
                        }
                    },
                    copyState: function(e) {
                        var n;
                        return e.localState && (n = t.copyState(e.localMode, e.localState)), {
                            token: e.token,
                            inTag: e.inTag,
                            localMode: e.localMode,
                            localState: n,
                            htmlState: t.copyState(s, e.htmlState)
                        }
                    },
                    token: function(t, e) {
                        return e.token(t, e)
                    },
                    indent: function(e, n, r) {
                        return !e.localMode || /^\s*<\//.test(n) ? s.indent(e.htmlState, n, r) : e.localMode.indent ? e.localMode.indent(e.localState, n, r) : t.Pass
                    },
                    innerMode: function(t) {
                        return {
                            state: t.localState || t.htmlState,
                            mode: t.localMode || s
                        }
                    }
                }
            }, "xml", "javascript", "css"), t.defineMIME("text/html", "htmlmixed")
        }(n(13), n(84), n(85), n(44))
    }, function(t, e, n) {
        ! function(t) {
            "use strict";
            var e = {
                    autoSelfClosers: {
                        area: !0,
                        base: !0,
                        br: !0,
                        col: !0,
                        command: !0,
                        embed: !0,
                        frame: !0,
                        hr: !0,
                        img: !0,
                        input: !0,
                        keygen: !0,
                        link: !0,
                        meta: !0,
                        param: !0,
                        source: !0,
                        track: !0,
                        wbr: !0,
                        menuitem: !0
                    },
                    implicitlyClosed: {
                        dd: !0,
                        li: !0,
                        optgroup: !0,
                        option: !0,
                        p: !0,
                        rp: !0,
                        rt: !0,
                        tbody: !0,
                        td: !0,
                        tfoot: !0,
                        th: !0,
                        tr: !0
                    },
                    contextGrabbers: {
                        dd: {
                            dd: !0,
                            dt: !0
                        },
                        dt: {
                            dd: !0,
                            dt: !0
                        },
                        li: {
                            li: !0
                        },
                        option: {
                            option: !0,
                            optgroup: !0
                        },
                        optgroup: {
                            optgroup: !0
                        },
                        p: {
                            address: !0,
                            article: !0,
                            aside: !0,
                            blockquote: !0,
                            dir: !0,
                            div: !0,
                            dl: !0,
                            fieldset: !0,
                            footer: !0,
                            form: !0,
                            h1: !0,
                            h2: !0,
                            h3: !0,
                            h4: !0,
                            h5: !0,
                            h6: !0,
                            header: !0,
                            hgroup: !0,
                            hr: !0,
                            menu: !0,
                            nav: !0,
                            ol: !0,
                            p: !0,
                            pre: !0,
                            section: !0,
                            table: !0,
                            ul: !0
                        },
                        rp: {
                            rp: !0,
                            rt: !0
                        },
                        rt: {
                            rp: !0,
                            rt: !0
                        },
                        tbody: {
                            tbody: !0,
                            tfoot: !0
                        },
                        td: {
                            td: !0,
                            th: !0
                        },
                        tfoot: {
                            tbody: !0
                        },
                        th: {
                            td: !0,
                            th: !0
                        },
                        thead: {
                            tbody: !0,
                            tfoot: !0
                        },
                        tr: {
                            tr: !0
                        }
                    },
                    doNotIndent: {
                        pre: !0
                    },
                    allowUnquoted: !0,
                    allowMissing: !0,
                    caseFold: !0
                },
                n = {
                    autoSelfClosers: {},
                    implicitlyClosed: {},
                    contextGrabbers: {},
                    doNotIndent: {},
                    allowUnquoted: !1,
                    allowMissing: !1,
                    allowMissingTagName: !1,
                    caseFold: !1
                };
            t.defineMode("xml", function(r, i) {
                var o, a, s = r.indentUnit,
                    l = {},
                    c = i.htmlMode ? e : n;
                for (var u in c) l[u] = c[u];
                for (var u in i) l[u] = i[u];

                function d(t, e) {
                    function n(n) {
                        return e.tokenize = n, n(t, e)
                    }
                    var r = t.next();
                    return "<" == r ? t.eat("!") ? t.eat("[") ? t.match("CDATA[") ? n(f("atom", "]]>")) : null : t.match("--") ? n(f("comment", "--\x3e")) : t.match("DOCTYPE", !0, !0) ? (t.eatWhile(/[\w\._\-]/), n(function t(e) {
                        return function(n, r) {
                            for (var i; null != (i = n.next());) {
                                if ("<" == i) return r.tokenize = t(e + 1), r.tokenize(n, r);
                                if (">" == i) {
                                    if (1 == e) {
                                        r.tokenize = d;
                                        break
                                    }
                                    return r.tokenize = t(e - 1), r.tokenize(n, r)
                                }
                            }
                            return "meta"
                        }
                    }(1))) : null : t.eat("?") ? (t.eatWhile(/[\w\._\-]/), e.tokenize = f("meta", "?>"), "meta") : (o = t.eat("/") ? "closeTag" : "openTag", e.tokenize = h, "tag bracket") : "&" == r ? (t.eat("#") ? t.eat("x") ? t.eatWhile(/[a-fA-F\d]/) && t.eat(";") : t.eatWhile(/[\d]/) && t.eat(";") : t.eatWhile(/[\w\.\-:]/) && t.eat(";")) ? "atom" : "error" : (t.eatWhile(/[^&<]/), null)
                }

                function h(t, e) {
                    var n, r, i = t.next();
                    if (">" == i || "/" == i && t.eat(">")) return e.tokenize = d, o = ">" == i ? "endTag" : "selfcloseTag", "tag bracket";
                    if ("=" == i) return o = "equals", null;
                    if ("<" == i) {
                        e.tokenize = d, e.state = m, e.tagName = e.tagStart = null;
                        var a = e.tokenize(t, e);
                        return a ? a + " tag error" : "tag error"
                    }
                    return /[\'\"]/.test(i) ? (e.tokenize = (n = i, (r = function(t, e) {
                        for (; !t.eol();)
                            if (t.next() == n) {
                                e.tokenize = h;
                                break
                            } return "string"
                    }).isInAttribute = !0, r), e.stringStartCol = t.column(), e.tokenize(t, e)) : (t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/), "word")
                }

                function f(t, e) {
                    return function(n, r) {
                        for (; !n.eol();) {
                            if (n.match(e)) {
                                r.tokenize = d;
                                break
                            }
                            n.next()
                        }
                        return t
                    }
                }

                function p(t, e, n) {
                    this.prev = t.context, this.tagName = e || "", this.indent = t.indented, this.startOfLine = n, (l.doNotIndent.hasOwnProperty(e) || t.context && t.context.noIndent) && (this.noIndent = !0)
                }

                function g(t) {
                    t.context && (t.context = t.context.prev)
                }

                function v(t, e) {
                    for (var n;;) {
                        if (!t.context) return;
                        if (n = t.context.tagName, !l.contextGrabbers.hasOwnProperty(n) || !l.contextGrabbers[n].hasOwnProperty(e)) return;
                        g(t)
                    }
                }

                function m(t, e, n) {
                    return "openTag" == t ? (n.tagStart = e.column(), b) : "closeTag" == t ? y : m
                }

                function b(t, e, n) {
                    return "word" == t ? (n.tagName = e.current(), a = "tag", O) : l.allowMissingTagName && "endTag" == t ? (a = "tag bracket", O(t, 0, n)) : (a = "error", b)
                }

                function y(t, e, n) {
                    if ("word" == t) {
                        var r = e.current();
                        return n.context && n.context.tagName != r && l.implicitlyClosed.hasOwnProperty(n.context.tagName) && g(n), n.context && n.context.tagName == r || !1 === l.matchClosing ? (a = "tag", w) : (a = "tag error", x)
                    }
                    return l.allowMissingTagName && "endTag" == t ? (a = "tag bracket", w(t, 0, n)) : (a = "error", x)
                }

                function w(t, e, n) {
                    return "endTag" != t ? (a = "error", w) : (g(n), m)
                }

                function x(t, e, n) {
                    return a = "error", w(t, 0, n)
                }

                function O(t, e, n) {
                    if ("word" == t) return a = "attribute", C;
                    if ("endTag" == t || "selfcloseTag" == t) {
                        var r = n.tagName,
                            i = n.tagStart;
                        return n.tagName = n.tagStart = null, "selfcloseTag" == t || l.autoSelfClosers.hasOwnProperty(r) ? v(n, r) : (v(n, r), n.context = new p(n, r, i == n.indented)), m
                    }
                    return a = "error", O
                }

                function C(t, e, n) {
                    return "equals" == t ? S : (l.allowMissing || (a = "error"), O(t, 0, n))
                }

                function S(t, e, n) {
                    return "string" == t ? k : "word" == t && l.allowUnquoted ? (a = "string", O) : (a = "error", O(t, 0, n))
                }

                function k(t, e, n) {
                    return "string" == t ? k : O(t, 0, n)
                }
                return d.isInText = !0, {
                    startState: function(t) {
                        var e = {
                            tokenize: d,
                            state: m,
                            indented: t || 0,
                            tagName: null,
                            tagStart: null,
                            context: null
                        };
                        return null != t && (e.baseIndent = t), e
                    },
                    token: function(t, e) {
                        if (!e.tagName && t.sol() && (e.indented = t.indentation()), t.eatSpace()) return null;
                        o = null;
                        var n = e.tokenize(t, e);
                        return (n || o) && "comment" != n && (a = null, e.state = e.state(o || n, t, e), a && (n = "error" == a ? n + " error" : a)), n
                    },
                    indent: function(e, n, r) {
                        var i = e.context;
                        if (e.tokenize.isInAttribute) return e.tagStart == e.indented ? e.stringStartCol + 1 : e.indented + s;
                        if (i && i.noIndent) return t.Pass;
                        if (e.tokenize != h && e.tokenize != d) return r ? r.match(/^(\s*)/)[0].length : 0;
                        if (e.tagName) return !1 !== l.multilineTagIndentPastTag ? e.tagStart + e.tagName.length + 2 : e.tagStart + s * (l.multilineTagIndentFactor || 1);
                        if (l.alignCDATA && /<!\[CDATA\[/.test(n)) return 0;
                        var o = n && /^<(\/)?([\w_:\.-]*)/.exec(n);
                        if (o && o[1])
                            for (; i;) {
                                if (i.tagName == o[2]) {
                                    i = i.prev;
                                    break
                                }
                                if (!l.implicitlyClosed.hasOwnProperty(i.tagName)) break;
                                i = i.prev
                            } else if (o)
                                for (; i;) {
                                    var a = l.contextGrabbers[i.tagName];
                                    if (!a || !a.hasOwnProperty(o[2])) break;
                                    i = i.prev
                                }
                        for (; i && i.prev && !i.startOfLine;) i = i.prev;
                        return i ? i.indent + s : e.baseIndent || 0
                    },
                    electricInput: /<\/[\s\w:]+>$/,
                    blockCommentStart: "\x3c!--",
                    blockCommentEnd: "--\x3e",
                    configuration: l.htmlMode ? "html" : "xml",
                    helperType: l.htmlMode ? "html" : "xml",
                    skipAttribute: function(t) {
                        t.state == S && (t.state = O)
                    },
                    xmlCurrentTag: function(t) {
                        return t.tagName ? {
                            name: t.tagName,
                            close: "closeTag" == t.type
                        } : null
                    },
                    xmlCurrentContext: function(t) {
                        for (var e = [], n = t.context; n; n = n.prev) e.push(n.tagName);
                        return e.reverse()
                    }
                }
            }), t.defineMIME("text/xml", "xml"), t.defineMIME("application/xml", "xml"), t.mimeModes.hasOwnProperty("text/html") || t.defineMIME("text/html", {
                name: "xml",
                htmlMode: !0
            })
        }(n(13))
    }, function(t, e, n) {
        ! function(t) {
            "use strict";
            t.defineMode("javascript", function(e, n) {
                var r, i, o = e.indentUnit,
                    a = n.statementIndent,
                    s = n.jsonld,
                    l = n.json || s,
                    c = n.typescript,
                    u = n.wordCharacters || /[\w$\xa1-\uffff]/,
                    d = function() {
                        function t(t) {
                            return {
                                type: t,
                                style: "keyword"
                            }
                        }
                        var e = t("keyword a"),
                            n = t("keyword b"),
                            r = t("keyword c"),
                            i = t("keyword d"),
                            o = t("operator"),
                            a = {
                                type: "atom",
                                style: "atom"
                            };
                        return {
                            if: t("if"),
                            while: e,
                            with: e,
                            else: n,
                            do: n,
                            try: n,
                            finally: n,
                            return: i,
                            break: i,
                            continue: i,
                            new: t("new"),
                            delete: r,
                            void: r,
                            throw: r,
                            debugger: t("debugger"),
                            var: t("var"),
                            const: t("var"),
                            let: t("var"),
                            function: t("function"),
                            catch: t("catch"),
                            for: t("for"),
                            switch: t("switch"),
                            case: t("case"),
                            default: t("default"),
                            in: o,
                            typeof: o,
                            instanceof: o,
                            true: a,
                            false: a,
                            null: a,
                            undefined: a,
                            NaN: a,
                            Infinity: a,
                            this: t("this"),
                            class: t("class"),
                            super: t("atom"),
                            yield: r,
                            export: t("export"),
                            import: t("import"),
                            extends: r,
                            await: r
                        }
                    }(),
                    h = /[+\-*&%=<>!?|~^@]/,
                    f = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;

                function p(t, e, n) {
                    return r = t, i = n, e
                }

                function g(t, e) {
                    var n, r = t.next();
                    if ('"' == r || "'" == r) return e.tokenize = (n = r, function(t, e) {
                        var r, i = !1;
                        if (s && "@" == t.peek() && t.match(f)) return e.tokenize = g, p("jsonld-keyword", "meta");
                        for (; null != (r = t.next()) && (r != n || i);) i = !i && "\\" == r;
                        return i || (e.tokenize = g), p("string", "string")
                    }), e.tokenize(t, e);
                    if ("." == r && t.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) return p("number", "number");
                    if ("." == r && t.match("..")) return p("spread", "meta");
                    if (/[\[\]{}\(\),;\:\.]/.test(r)) return p(r);
                    if ("=" == r && t.eat(">")) return p("=>", "operator");
                    if ("0" == r && t.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) return p("number", "number");
                    if (/\d/.test(r)) return t.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/), p("number", "number");
                    if ("/" == r) return t.eat("*") ? (e.tokenize = v, v(t, e)) : t.eat("/") ? (t.skipToEnd(), p("comment", "comment")) : Yt(t, e, 1) ? (function(t) {
                        for (var e, n = !1, r = !1; null != (e = t.next());) {
                            if (!n) {
                                if ("/" == e && !r) return;
                                "[" == e ? r = !0 : r && "]" == e && (r = !1)
                            }
                            n = !n && "\\" == e
                        }
                    }(t), t.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/), p("regexp", "string-2")) : (t.eat("="), p("operator", "operator", t.current()));
                    if ("`" == r) return e.tokenize = m, m(t, e);
                    if ("#" == r && "!" == t.peek()) return t.skipToEnd(), p("meta", "meta");
                    if ("#" == r && t.eatWhile(u)) return p("variable", "property");
                    if ("<" == r && t.match("!--") || "-" == r && t.match("->") && !/\S/.test(t.string.slice(0, t.start))) return t.skipToEnd(), p("comment", "comment");
                    if (h.test(r)) return ">" == r && e.lexical && ">" == e.lexical.type || (t.eat("=") ? "!" != r && "=" != r || t.eat("=") : /[<>*+\-|&?]/.test(r) && (t.eat(r), ">" == r && t.eat(r))), "?" == r && t.eat(".") ? p(".") : p("operator", "operator", t.current());
                    if (u.test(r)) {
                        t.eatWhile(u);
                        var i = t.current();
                        if ("." != e.lastType) {
                            if (d.propertyIsEnumerable(i)) {
                                var o = d[i];
                                return p(o.type, o.style, i)
                            }
                            if ("async" == i && t.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, !1)) return p("async", "keyword", i)
                        }
                        return p("variable", "variable", i)
                    }
                }

                function v(t, e) {
                    for (var n, r = !1; n = t.next();) {
                        if ("/" == n && r) {
                            e.tokenize = g;
                            break
                        }
                        r = "*" == n
                    }
                    return p("comment", "comment")
                }

                function m(t, e) {
                    for (var n, r = !1; null != (n = t.next());) {
                        if (!r && ("`" == n || "$" == n && t.eat("{"))) {
                            e.tokenize = g;
                            break
                        }
                        r = !r && "\\" == n
                    }
                    return p("quasi", "string-2", t.current())
                }
                var b = "([{}])";

                function y(t, e) {
                    e.fatArrowAt && (e.fatArrowAt = null);
                    var n = t.string.indexOf("=>", t.start);
                    if (!(n < 0)) {
                        if (c) {
                            var r = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(t.string.slice(t.start, n));
                            r && (n = r.index)
                        }
                        for (var i = 0, o = !1, a = n - 1; a >= 0; --a) {
                            var s = t.string.charAt(a),
                                l = b.indexOf(s);
                            if (l >= 0 && l < 3) {
                                if (!i) {
                                    ++a;
                                    break
                                }
                                if (0 == --i) {
                                    "(" == s && (o = !0);
                                    break
                                }
                            } else if (l >= 3 && l < 6) ++i;
                            else if (u.test(s)) o = !0;
                            else if (/["'\/`]/.test(s))
                                for (;; --a) {
                                    if (0 == a) return;
                                    if (t.string.charAt(a - 1) == s && "\\" != t.string.charAt(a - 2)) {
                                        a--;
                                        break
                                    }
                                } else if (o && !i) {
                                    ++a;
                                    break
                                }
                        }
                        o && !i && (e.fatArrowAt = a)
                    }
                }
                var w = {
                    atom: !0,
                    number: !0,
                    variable: !0,
                    string: !0,
                    regexp: !0,
                    this: !0,
                    "jsonld-keyword": !0
                };

                function x(t, e, n, r, i, o) {
                    this.indented = t, this.column = e, this.type = n, this.prev = i, this.info = o, null != r && (this.align = r)
                }

                function O(t, e) {
                    for (var n = t.localVars; n; n = n.next)
                        if (n.name == e) return !0;
                    for (var r = t.context; r; r = r.prev)
                        for (n = r.vars; n; n = n.next)
                            if (n.name == e) return !0
                }
                var C = {
                    state: null,
                    column: null,
                    marked: null,
                    cc: null
                };

                function S() {
                    for (var t = arguments.length - 1; t >= 0; t--) C.cc.push(arguments[t])
                }

                function k() {
                    return S.apply(null, arguments), !0
                }

                function j(t, e) {
                    for (var n = e; n; n = n.next)
                        if (n.name == t) return !0;
                    return !1
                }

                function T(t) {
                    var e = C.state;
                    if (C.marked = "def", e.context)
                        if ("var" == e.lexical.info && e.context && e.context.block) {
                            var r = function t(e, n) {
                                if (n) {
                                    if (n.block) {
                                        var r = t(e, n.prev);
                                        return r ? r == n.prev ? n : new E(r, n.vars, !0) : null
                                    }
                                    return j(e, n.vars) ? n : new E(n.prev, new M(e, n.vars), !1)
                                }
                                return null
                            }(t, e.context);
                            if (null != r) return void(e.context = r)
                        } else if (!j(t, e.localVars)) return void(e.localVars = new M(t, e.localVars));
                    n.globalVars && !j(t, e.globalVars) && (e.globalVars = new M(t, e.globalVars))
                }

                function P(t) {
                    return "public" == t || "private" == t || "protected" == t || "abstract" == t || "readonly" == t
                }

                function E(t, e, n) {
                    this.prev = t, this.vars = e, this.block = n
                }

                function M(t, e) {
                    this.name = t, this.next = e
                }
                var D = new M("this", new M("arguments", null));

                function A() {
                    C.state.context = new E(C.state.context, C.state.localVars, !1), C.state.localVars = D
                }

                function L() {
                    C.state.context = new E(C.state.context, C.state.localVars, !0), C.state.localVars = null
                }

                function _() {
                    C.state.localVars = C.state.context.vars, C.state.context = C.state.context.prev
                }

                function N(t, e) {
                    var n = function() {
                        var n = C.state,
                            r = n.indented;
                        if ("stat" == n.lexical.type) r = n.lexical.indented;
                        else
                            for (var i = n.lexical; i && ")" == i.type && i.align; i = i.prev) r = i.indented;
                        n.lexical = new x(r, C.stream.column(), t, null, n.lexical, e)
                    };
                    return n.lex = !0, n
                }

                function I() {
                    var t = C.state;
                    t.lexical.prev && (")" == t.lexical.type && (t.indented = t.lexical.indented), t.lexical = t.lexical.prev)
                }

                function F(t) {
                    return function e(n) {
                        return n == t ? k() : ";" == t || "}" == n || ")" == n || "]" == n ? S() : k(e)
                    }
                }

                function V(t, e) {
                    return "var" == t ? k(N("vardef", e), wt, F(";"), I) : "keyword a" == t ? k(N("form"), $, V, I) : "keyword b" == t ? k(N("form"), V, I) : "keyword d" == t ? C.stream.match(/^\s*$/, !1) ? k() : k(N("stat"), B, F(";"), I) : "debugger" == t ? k(F(";")) : "{" == t ? k(N("}"), L, at, I, _) : ";" == t ? k() : "if" == t ? ("else" == C.state.lexical.info && C.state.cc[C.state.cc.length - 1] == I && C.state.cc.pop()(), k(N("form"), $, V, I, jt)) : "function" == t ? k(Mt) : "for" == t ? k(N("form"), Tt, V, I) : "class" == t || c && "interface" == e ? (C.marked = "keyword", k(N("form", "class" == t ? t : e), Nt, I)) : "variable" == t ? c && "declare" == e ? (C.marked = "keyword", k(V)) : c && ("module" == e || "enum" == e || "type" == e) && C.stream.match(/^\s*\w/, !1) ? (C.marked = "keyword", "enum" == e ? k(Gt) : "type" == e ? k(At, F("operator"), dt, F(";")) : k(N("form"), xt, F("{"), N("}"), at, I, I)) : c && "namespace" == e ? (C.marked = "keyword", k(N("form"), z, V, I)) : c && "abstract" == e ? (C.marked = "keyword", k(V)) : k(N("stat"), Q) : "switch" == t ? k(N("form"), $, F("{"), N("}", "switch"), L, at, I, I, _) : "case" == t ? k(z, F(":")) : "default" == t ? k(F(":")) : "catch" == t ? k(N("form"), A, R, V, I, _) : "export" == t ? k(N("stat"), Rt, I) : "import" == t ? k(N("stat"), Ht, I) : "async" == t ? k(V) : "@" == e ? k(z, V) : S(N("stat"), z, F(";"), I)
                }

                function R(t) {
                    if ("(" == t) return k(Lt, F(")"))
                }

                function z(t, e) {
                    return U(t, e, !1)
                }

                function H(t, e) {
                    return U(t, e, !0)
                }

                function $(t) {
                    return "(" != t ? S() : k(N(")"), B, F(")"), I)
                }

                function U(t, e, n) {
                    if (C.state.fatArrowAt == C.stream.start) {
                        var r = n ? X : Y;
                        if ("(" == t) return k(A, N(")"), it(Lt, ")"), I, F("=>"), r, _);
                        if ("variable" == t) return S(A, xt, F("=>"), r, _)
                    }
                    var i = n ? q : W;
                    return w.hasOwnProperty(t) ? k(i) : "function" == t ? k(Mt, i) : "class" == t || c && "interface" == e ? (C.marked = "keyword", k(N("form"), _t, I)) : "keyword c" == t || "async" == t ? k(n ? H : z) : "(" == t ? k(N(")"), B, F(")"), I, i) : "operator" == t || "spread" == t ? k(n ? H : z) : "[" == t ? k(N("]"), qt, I, i) : "{" == t ? ot(et, "}", null, i) : "quasi" == t ? S(G, i) : "new" == t ? k(function(t) {
                        return function(e) {
                            return "." == e ? k(t ? Z : J) : "variable" == e && c ? k(mt, t ? q : W) : S(t ? H : z)
                        }
                    }(n)) : "import" == t ? k(z) : k()
                }

                function B(t) {
                    return t.match(/[;\}\)\],]/) ? S() : S(z)
                }

                function W(t, e) {
                    return "," == t ? k(B) : q(t, e, !1)
                }

                function q(t, e, n) {
                    var r = 0 == n ? W : q,
                        i = 0 == n ? z : H;
                    return "=>" == t ? k(A, n ? X : Y, _) : "operator" == t ? /\+\+|--/.test(e) || c && "!" == e ? k(r) : c && "<" == e && C.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, !1) ? k(N(">"), it(dt, ">"), I, r) : "?" == e ? k(z, F(":"), i) : k(i) : "quasi" == t ? S(G, r) : ";" != t ? "(" == t ? ot(H, ")", "call", r) : "." == t ? k(tt, r) : "[" == t ? k(N("]"), B, F("]"), I, r) : c && "as" == e ? (C.marked = "keyword", k(dt, r)) : "regexp" == t ? (C.state.lastType = C.marked = "operator", C.stream.backUp(C.stream.pos - C.stream.start - 1), k(i)) : void 0 : void 0
                }

                function G(t, e) {
                    return "quasi" != t ? S() : "${" != e.slice(e.length - 2) ? k(G) : k(z, K)
                }

                function K(t) {
                    if ("}" == t) return C.marked = "string-2", C.state.tokenize = m, k(G)
                }

                function Y(t) {
                    return y(C.stream, C.state), S("{" == t ? V : z)
                }

                function X(t) {
                    return y(C.stream, C.state), S("{" == t ? V : H)
                }

                function J(t, e) {
                    if ("target" == e) return C.marked = "keyword", k(W)
                }

                function Z(t, e) {
                    if ("target" == e) return C.marked = "keyword", k(q)
                }

                function Q(t) {
                    return ":" == t ? k(I, V) : S(W, F(";"), I)
                }

                function tt(t) {
                    if ("variable" == t) return C.marked = "property", k()
                }

                function et(t, e) {
                    return "async" == t ? (C.marked = "property", k(et)) : "variable" == t || "keyword" == C.style ? (C.marked = "property", "get" == e || "set" == e ? k(nt) : (c && C.state.fatArrowAt == C.stream.start && (n = C.stream.match(/^\s*:\s*/, !1)) && (C.state.fatArrowAt = C.stream.pos + n[0].length), k(rt))) : "number" == t || "string" == t ? (C.marked = s ? "property" : C.style + " property", k(rt)) : "jsonld-keyword" == t ? k(rt) : c && P(e) ? (C.marked = "keyword", k(et)) : "[" == t ? k(z, st, F("]"), rt) : "spread" == t ? k(H, rt) : "*" == e ? (C.marked = "keyword", k(et)) : ":" == t ? S(rt) : void 0;
                    var n
                }

                function nt(t) {
                    return "variable" != t ? S(rt) : (C.marked = "property", k(Mt))
                }

                function rt(t) {
                    return ":" == t ? k(H) : "(" == t ? S(Mt) : void 0
                }

                function it(t, e, n) {
                    function r(i, o) {
                        if (n ? n.indexOf(i) > -1 : "," == i) {
                            var a = C.state.lexical;
                            return "call" == a.info && (a.pos = (a.pos || 0) + 1), k(function(n, r) {
                                return n == e || r == e ? S() : S(t)
                            }, r)
                        }
                        return i == e || o == e ? k() : n && n.indexOf(";") > -1 ? S(t) : k(F(e))
                    }
                    return function(n, i) {
                        return n == e || i == e ? k() : S(t, r)
                    }
                }

                function ot(t, e, n) {
                    for (var r = 3; r < arguments.length; r++) C.cc.push(arguments[r]);
                    return k(N(e, n), it(t, e), I)
                }

                function at(t) {
                    return "}" == t ? k() : S(V, at)
                }

                function st(t, e) {
                    if (c) {
                        if (":" == t) return k(dt);
                        if ("?" == e) return k(st)
                    }
                }

                function lt(t, e) {
                    if (c && (":" == t || "in" == e)) return k(dt)
                }

                function ct(t) {
                    if (c && ":" == t) return C.stream.match(/^\s*\w+\s+is\b/, !1) ? k(z, ut, dt) : k(dt)
                }

                function ut(t, e) {
                    if ("is" == e) return C.marked = "keyword", k()
                }

                function dt(t, e) {
                    return "keyof" == e || "typeof" == e || "infer" == e ? (C.marked = "keyword", k("typeof" == e ? H : dt)) : "variable" == t || "void" == e ? (C.marked = "type", k(vt)) : "|" == e || "&" == e ? k(dt) : "string" == t || "number" == t || "atom" == t ? k(vt) : "[" == t ? k(N("]"), it(dt, "]", ","), I, vt) : "{" == t ? k(N("}"), ft, I, vt) : "(" == t ? k(it(gt, ")"), ht, vt) : "<" == t ? k(it(dt, ">"), dt) : void 0
                }

                function ht(t) {
                    if ("=>" == t) return k(dt)
                }

                function ft(t) {
                    return "}" == t ? k() : "," == t || ";" == t ? k(ft) : S(pt, ft)
                }

                function pt(t, e) {
                    return "variable" == t || "keyword" == C.style ? (C.marked = "property", k(pt)) : "?" == e || "number" == t || "string" == t ? k(pt) : ":" == t ? k(dt) : "[" == t ? k(F("variable"), lt, F("]"), pt) : "(" == t ? S(Dt, pt) : t.match(/[;\}\)\],]/) ? void 0 : k()
                }

                function gt(t, e) {
                    return "variable" == t && C.stream.match(/^\s*[?:]/, !1) || "?" == e ? k(gt) : ":" == t ? k(dt) : "spread" == t ? k(gt) : S(dt)
                }

                function vt(t, e) {
                    return "<" == e ? k(N(">"), it(dt, ">"), I, vt) : "|" == e || "." == t || "&" == e ? k(dt) : "[" == t ? k(dt, F("]"), vt) : "extends" == e || "implements" == e ? (C.marked = "keyword", k(dt)) : "?" == e ? k(dt, F(":"), dt) : void 0
                }

                function mt(t, e) {
                    if ("<" == e) return k(N(">"), it(dt, ">"), I, vt)
                }

                function bt() {
                    return S(dt, yt)
                }

                function yt(t, e) {
                    if ("=" == e) return k(dt)
                }

                function wt(t, e) {
                    return "enum" == e ? (C.marked = "keyword", k(Gt)) : S(xt, st, St, kt)
                }

                function xt(t, e) {
                    return c && P(e) ? (C.marked = "keyword", k(xt)) : "variable" == t ? (T(e), k()) : "spread" == t ? k(xt) : "[" == t ? ot(Ct, "]") : "{" == t ? ot(Ot, "}") : void 0
                }

                function Ot(t, e) {
                    return "variable" != t || C.stream.match(/^\s*:/, !1) ? ("variable" == t && (C.marked = "property"), "spread" == t ? k(xt) : "}" == t ? S() : "[" == t ? k(z, F("]"), F(":"), Ot) : k(F(":"), xt, St)) : (T(e), k(St))
                }

                function Ct() {
                    return S(xt, St)
                }

                function St(t, e) {
                    if ("=" == e) return k(H)
                }

                function kt(t) {
                    if ("," == t) return k(wt)
                }

                function jt(t, e) {
                    if ("keyword b" == t && "else" == e) return k(N("form", "else"), V, I)
                }

                function Tt(t, e) {
                    return "await" == e ? k(Tt) : "(" == t ? k(N(")"), Pt, I) : void 0
                }

                function Pt(t) {
                    return "var" == t ? k(wt, Et) : "variable" == t ? k(Et) : S(Et)
                }

                function Et(t, e) {
                    return ")" == t ? k() : ";" == t ? k(Et) : "in" == e || "of" == e ? (C.marked = "keyword", k(z, Et)) : S(z, Et)
                }

                function Mt(t, e) {
                    return "*" == e ? (C.marked = "keyword", k(Mt)) : "variable" == t ? (T(e), k(Mt)) : "(" == t ? k(A, N(")"), it(Lt, ")"), I, ct, V, _) : c && "<" == e ? k(N(">"), it(bt, ">"), I, Mt) : void 0
                }

                function Dt(t, e) {
                    return "*" == e ? (C.marked = "keyword", k(Dt)) : "variable" == t ? (T(e), k(Dt)) : "(" == t ? k(A, N(")"), it(Lt, ")"), I, ct, _) : c && "<" == e ? k(N(">"), it(bt, ">"), I, Dt) : void 0
                }

                function At(t, e) {
                    return "keyword" == t || "variable" == t ? (C.marked = "type", k(At)) : "<" == e ? k(N(">"), it(bt, ">"), I) : void 0
                }

                function Lt(t, e) {
                    return "@" == e && k(z, Lt), "spread" == t ? k(Lt) : c && P(e) ? (C.marked = "keyword", k(Lt)) : c && "this" == t ? k(st, St) : S(xt, st, St)
                }

                function _t(t, e) {
                    return "variable" == t ? Nt(t, e) : It(t, e)
                }

                function Nt(t, e) {
                    if ("variable" == t) return T(e), k(It)
                }

                function It(t, e) {
                    return "<" == e ? k(N(">"), it(bt, ">"), I, It) : "extends" == e || "implements" == e || c && "," == t ? ("implements" == e && (C.marked = "keyword"), k(c ? dt : z, It)) : "{" == t ? k(N("}"), Ft, I) : void 0
                }

                function Ft(t, e) {
                    return "async" == t || "variable" == t && ("static" == e || "get" == e || "set" == e || c && P(e)) && C.stream.match(/^\s+[\w$\xa1-\uffff]/, !1) ? (C.marked = "keyword", k(Ft)) : "variable" == t || "keyword" == C.style ? (C.marked = "property", k(Vt, Ft)) : "number" == t || "string" == t ? k(Vt, Ft) : "[" == t ? k(z, st, F("]"), Vt, Ft) : "*" == e ? (C.marked = "keyword", k(Ft)) : c && "(" == t ? S(Dt, Ft) : ";" == t || "," == t ? k(Ft) : "}" == t ? k() : "@" == e ? k(z, Ft) : void 0
                }

                function Vt(t, e) {
                    if ("?" == e) return k(Vt);
                    if (":" == t) return k(dt, St);
                    if ("=" == e) return k(H);
                    var n = C.state.lexical.prev;
                    return S(n && "interface" == n.info ? Dt : Mt)
                }

                function Rt(t, e) {
                    return "*" == e ? (C.marked = "keyword", k(Wt, F(";"))) : "default" == e ? (C.marked = "keyword", k(z, F(";"))) : "{" == t ? k(it(zt, "}"), Wt, F(";")) : S(V)
                }

                function zt(t, e) {
                    return "as" == e ? (C.marked = "keyword", k(F("variable"))) : "variable" == t ? S(H, zt) : void 0
                }

                function Ht(t) {
                    return "string" == t ? k() : "(" == t ? S(z) : S($t, Ut, Wt)
                }

                function $t(t, e) {
                    return "{" == t ? ot($t, "}") : ("variable" == t && T(e), "*" == e && (C.marked = "keyword"), k(Bt))
                }

                function Ut(t) {
                    if ("," == t) return k($t, Ut)
                }

                function Bt(t, e) {
                    if ("as" == e) return C.marked = "keyword", k($t)
                }

                function Wt(t, e) {
                    if ("from" == e) return C.marked = "keyword", k(z)
                }

                function qt(t) {
                    return "]" == t ? k() : S(it(H, "]"))
                }

                function Gt() {
                    return S(N("form"), xt, F("{"), N("}"), it(Kt, "}"), I, I)
                }

                function Kt() {
                    return S(xt, St)
                }

                function Yt(t, e, n) {
                    return e.tokenize == g && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(e.lastType) || "quasi" == e.lastType && /\{\s*$/.test(t.string.slice(0, t.pos - (n || 0)))
                }
                return _.lex = !0, I.lex = !0, {
                    startState: function(t) {
                        var e = {
                            tokenize: g,
                            lastType: "sof",
                            cc: [],
                            lexical: new x((t || 0) - o, 0, "block", !1),
                            localVars: n.localVars,
                            context: n.localVars && new E(null, null, !1),
                            indented: t || 0
                        };
                        return n.globalVars && "object" == typeof n.globalVars && (e.globalVars = n.globalVars), e
                    },
                    token: function(t, e) {
                        if (t.sol() && (e.lexical.hasOwnProperty("align") || (e.lexical.align = !1), e.indented = t.indentation(), y(t, e)), e.tokenize != v && t.eatSpace()) return null;
                        var n = e.tokenize(t, e);
                        return "comment" == r ? n : (e.lastType = "operator" != r || "++" != i && "--" != i ? r : "incdec", function(t, e, n, r, i) {
                            var o = t.cc;
                            for (C.state = t, C.stream = i, C.marked = null, C.cc = o, C.style = e, t.lexical.hasOwnProperty("align") || (t.lexical.align = !0);;)
                                if ((o.length ? o.pop() : l ? z : V)(n, r)) {
                                    for (; o.length && o[o.length - 1].lex;) o.pop()();
                                    return C.marked ? C.marked : "variable" == n && O(t, r) ? "variable-2" : e
                                }
                        }(e, n, r, i, t))
                    },
                    indent: function(e, r) {
                        if (e.tokenize == v || e.tokenize == m) return t.Pass;
                        if (e.tokenize != g) return 0;
                        var i, s = r && r.charAt(0),
                            l = e.lexical;
                        if (!/^\s*else\b/.test(r))
                            for (var c = e.cc.length - 1; c >= 0; --c) {
                                var u = e.cc[c];
                                if (u == I) l = l.prev;
                                else if (u != jt) break
                            }
                        for (;
                            ("stat" == l.type || "form" == l.type) && ("}" == s || (i = e.cc[e.cc.length - 1]) && (i == W || i == q) && !/^[,\.=+\-*:?[\(]/.test(r));) l = l.prev;
                        a && ")" == l.type && "stat" == l.prev.type && (l = l.prev);
                        var d = l.type,
                            f = s == d;
                        return "vardef" == d ? l.indented + ("operator" == e.lastType || "," == e.lastType ? l.info.length + 1 : 0) : "form" == d && "{" == s ? l.indented : "form" == d ? l.indented + o : "stat" == d ? l.indented + (function(t, e) {
                            return "operator" == t.lastType || "," == t.lastType || h.test(e.charAt(0)) || /[,.]/.test(e.charAt(0))
                        }(e, r) ? a || o : 0) : "switch" != l.info || f || 0 == n.doubleIndentSwitch ? l.align ? l.column + (f ? 0 : 1) : l.indented + (f ? 0 : o) : l.indented + (/^(?:case|default)\b/.test(r) ? o : 2 * o)
                    },
                    electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
                    blockCommentStart: l ? null : "/*",
                    blockCommentEnd: l ? null : "*/",
                    blockCommentContinue: l ? null : " * ",
                    lineComment: l ? null : "//",
                    fold: "brace",
                    closeBrackets: "()[]{}''\"\"``",
                    helperType: l ? "json" : "javascript",
                    jsonldMode: s,
                    jsonMode: l,
                    expressionAllowed: Yt,
                    skipExpression: function(t) {
                        var e = t.cc[t.cc.length - 1];
                        e != z && e != H || t.cc.pop()
                    }
                }
            }), t.registerHelper("wordChars", "javascript", /[\w$]/), t.defineMIME("text/javascript", "javascript"), t.defineMIME("text/ecmascript", "javascript"), t.defineMIME("application/javascript", "javascript"), t.defineMIME("application/x-javascript", "javascript"), t.defineMIME("application/ecmascript", "javascript"), t.defineMIME("application/json", {
                name: "javascript",
                json: !0
            }), t.defineMIME("application/x-json", {
                name: "javascript",
                json: !0
            }), t.defineMIME("application/manifest+json", {
                name: "javascript",
                json: !0
            }), t.defineMIME("application/ld+json", {
                name: "javascript",
                jsonld: !0
            }), t.defineMIME("text/typescript", {
                name: "javascript",
                typescript: !0
            }), t.defineMIME("application/typescript", {
                name: "javascript",
                typescript: !0
            })
        }(n(13))
    }, function(t, e, n) {
        ! function(t) {
            t.extendMode("css", {
                commentStart: "/*",
                commentEnd: "*/",
                newlineAfterToken: function(t, e) {
                    return /^[;{}]$/.test(e)
                }
            }), t.extendMode("javascript", {
                commentStart: "/*",
                commentEnd: "*/",
                newlineAfterToken: function(t, e, n, r) {
                    return this.jsonMode ? /^[\[,{]$/.test(e) || /^}/.test(n) : (";" != e || !r.lexical || ")" != r.lexical.type) && /^[;{}]$/.test(e) && !/^;/.test(n)
                }
            });
            var e = /^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;
            t.extendMode("xml", {
                commentStart: "\x3c!--",
                commentEnd: "--\x3e",
                newlineAfterToken: function(t, n, r, i) {
                    var o = !1;
                    return "html" == this.configuration && (o = !!i.context && e.test(i.context.tagName)), !o && ("tag" == t && />$/.test(n) && i.context || /^</.test(r))
                }
            }), t.defineExtension("commentRange", function(e, n, r) {
                var i = this,
                    o = t.innerMode(i.getMode(), i.getTokenAt(n).state).mode;
                i.operation(function() {
                    if (e) i.replaceRange(o.commentEnd, r), i.replaceRange(o.commentStart, n), n.line == r.line && n.ch == r.ch && i.setCursor(n.line, n.ch + o.commentStart.length);
                    else {
                        var t = i.getRange(n, r),
                            a = t.indexOf(o.commentStart),
                            s = t.lastIndexOf(o.commentEnd);
                        a > -1 && s > -1 && s > a && (t = t.substr(0, a) + t.substring(a + o.commentStart.length, s) + t.substr(s + o.commentEnd.length)), i.replaceRange(t, n, r)
                    }
                })
            }), t.defineExtension("autoIndentRange", function(t, e) {
                var n = this;
                this.operation(function() {
                    for (var r = t.line; r <= e.line; r++) n.indentLine(r, "smart")
                })
            }), t.defineExtension("autoFormatRange", function(e, n) {
                var r = this,
                    i = r.getMode(),
                    o = r.getRange(e, n).split("\n"),
                    a = t.copyState(i, r.getTokenAt(e).state),
                    s = r.getOption("tabSize"),
                    l = "",
                    c = 0,
                    u = 0 === e.ch;

                function d() {
                    l += "\n", u = !0, ++c
                }
                for (var h = 0; h < o.length; ++h) {
                    for (var f = new t.StringStream(o[h], s); !f.eol();) {
                        var p = t.innerMode(i, a),
                            g = i.token(f, a),
                            v = f.current();
                        f.start = f.pos, u && !/\S/.test(v) || (l += v, u = !1), !u && p.mode.newlineAfterToken && p.mode.newlineAfterToken(g, v, f.string.slice(f.pos) || o[h + 1] || "", p.state) && d()
                    }!f.pos && i.blankLine && i.blankLine(a), !u && h < o.length - 1 && d()
                }
                r.operation(function() {
                    r.replaceRange(l, e, n);
                    for (var t = e.line + 1, i = e.line + c; t <= i; ++t) r.indentLine(t, "smart");
                    r.setSelection(e, r.getCursor(!1))
                })
            })
        }(n(13))
    }, function(t, e) {
        t.exports = function(t) {
            if (Array.isArray(t)) return t
        }
    }, function(t, e) {
        t.exports = function(t, e) {
            if ("undefined" != typeof Symbol && Symbol.iterator in Object(t)) {
                var n = [],
                    r = !0,
                    i = !1,
                    o = void 0;
                try {
                    for (var a, s = t[Symbol.iterator](); !(r = (a = s.next()).done) && (n.push(a.value), !e || n.length !== e); r = !0);
                } catch (t) {
                    i = !0, o = t
                } finally {
                    try {
                        r || null == s.return || s.return()
                    } finally {
                        if (i) throw o
                    }
                }
                return n
            }
        }
    }, function(t, e) {
        t.exports = function() {
            throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(1),
            i = n.n(r),
            o = n(36),
            a = n(5);
        e.default = i.a.View.extend({
            initialize: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                this.opt = t;
                var e = t.config || {};
                this.level = t.level, this.config = e, this.preview = t.preview, this.ppfx = e.pStylePrefix || "", this.pfx = e.stylePrefix || "", this.parent = t.parent, this.parentView = t.parentView;
                var n = this.pfx,
                    r = this.ppfx,
                    i = this.parent,
                    o = this.collection;
                this.listenTo(o, "add", this.addTo), this.listenTo(o, "reset resetNavigator", this.render), this.listenTo(o, "remove", this.removeChildren), this.className = "".concat(n, "layers");
                var s = e.em;
                if (e.sortable && !this.opt.sorter) {
                    var l = s.get("Utils");
                    this.opt.sorter = new l.Sorter({
                        container: e.sortContainer || this.el,
                        containerSel: ".".concat(this.className),
                        itemSel: ".".concat(n, "layer"),
                        ignoreViewChildren: 1,
                        onEndMove: function(t, e, n) {
                            var r = e.getSourceModel();
                            s.setSelected(r, {
                                forceChange: 1
                            }), s.trigger("".concat(a.eventDrag, ":end"), n)
                        },
                        avoidSelectOnEnd: 1,
                        nested: 1,
                        ppfx: r,
                        pfx: n
                    })
                }
                this.sorter = this.opt.sorter || "", this.$el.data("collection", o), i && this.$el.data("model", i)
            },
            removeChildren: function(t) {
                var e = t.viewLayer;
                e && (e.remove(), t.viewLayer = 0)
            },
            addTo: function(t) {
                var e = this.collection.indexOf(t);
                this.addToCollection(t, null, e)
            },
            addToCollection: function(t, e, n) {
                var r = this.level,
                    i = this.parentView,
                    a = e || null,
                    s = new(0, o.a)({
                        level: r,
                        model: t,
                        parentView: i,
                        config: this.config,
                        sorter: this.sorter,
                        isCountable: this.isCountable,
                        opened: this.opt.opened
                    }).render().el;
                if (a) a.appendChild(s);
                else if (void 0 !== n) {
                    var l = "before";
                    this.$el.children().length == n && (n--, l = "after"), n < 0 ? this.$el.append(s) : this.$el.children().eq(n)[l](s)
                } else this.$el.append(s);
                return s
            },
            isCountable: function(t, e) {
                var n = t.get("type"),
                    r = t.get("tagName");
                return !(("textnode" == n || "br" == r) && e || !t.get("layerable"))
            },
            render: function() {
                var t = this,
                    e = document.createDocumentFragment(),
                    n = this.el;
                return n.innerHTML = "", this.collection.each(function(n) {
                    return t.addToCollection(n, e)
                }), n.appendChild(e), n.className = this.className, this
            }
        })
    }, function(t, e, n) {
        var r = {
            "./CanvasClear": 45,
            "./CanvasClear.js": 45,
            "./CanvasMove": 46,
            "./CanvasMove.js": 46,
            "./CommandAbstract": 22,
            "./CommandAbstract.js": 22,
            "./ComponentDelete": 47,
            "./ComponentDelete.js": 47,
            "./ComponentDrag": 48,
            "./ComponentDrag.js": 48,
            "./ComponentEnter": 49,
            "./ComponentEnter.js": 49,
            "./ComponentExit": 50,
            "./ComponentExit.js": 50,
            "./ComponentNext": 51,
            "./ComponentNext.js": 51,
            "./ComponentPrev": 52,
            "./ComponentPrev.js": 52,
            "./ComponentStyleClear": 53,
            "./ComponentStyleClear.js": 53,
            "./CopyComponent": 54,
            "./CopyComponent.js": 54,
            "./DeleteComponent": 55,
            "./DeleteComponent.js": 55,
            "./ExportTemplate": 56,
            "./ExportTemplate.js": 56,
            "./Fullscreen": 57,
            "./Fullscreen.js": 57,
            "./MoveComponent": 58,
            "./MoveComponent.js": 58,
            "./OpenAssets": 59,
            "./OpenAssets.js": 59,
            "./OpenBlocks": 60,
            "./OpenBlocks.js": 60,
            "./OpenLayers": 61,
            "./OpenLayers.js": 61,
            "./OpenStyleManager": 62,
            "./OpenStyleManager.js": 62,
            "./OpenTraitManager": 63,
            "./OpenTraitManager.js": 63,
            "./PasteComponent": 64,
            "./PasteComponent.js": 64,
            "./Preview": 65,
            "./Preview.js": 65,
            "./Resize": 66,
            "./Resize.js": 66,
            "./SelectComponent": 14,
            "./SelectComponent.js": 14,
            "./SelectPosition": 27,
            "./SelectPosition.js": 27,
            "./ShowOffset": 67,
            "./ShowOffset.js": 67,
            "./SwitchVisibility": 68,
            "./SwitchVisibility.js": 68
        };

        function i(t) {
            var e = o(t);
            return n(e)
        }

        function o(t) {
            if (!n.o(r, t)) {
                var e = new Error("Cannot find module '" + t + "'");
                throw e.code = "MODULE_NOT_FOUND", e
            }
            return r[t]
        }
        i.keys = function() {
            return Object.keys(r)
        }, i.resolve = o, t.exports = i, i.id = 91
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(8),
            i = n.n(r),
            o = n(2),
            a = n.n(o),
            s = n(1),
            l = n.n(s),
            c = n(0),
            u = {
                stylePrefix: "comp-",
                wrapperId: "wrapper",
                wrapperName: "Body",
                wrapper: {
                    removable: !1,
                    copyable: !1,
                    draggable: !1,
                    components: [],
                    traits: [],
                    stylable: ["background", "background-color", "background-image", "background-repeat", "background-attachment", "background-position", "background-size"]
                },
                components: [],
                draggableComponents: 1,
                storeWrapper: 0,
                processor: 0,
                voidElements: ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "menuitem", "meta", "param", "source", "track", "wbr"]
            },
            d = n(5),
            h = n(21),
            f = n(6),
            p = n(35);

        function g(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function v(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? g(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : g(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var m = d.default.extend({
                defaults: v(v({}, d.default.prototype.defaults), {}, {
                    type: "cell",
                    tagName: "td",
                    draggable: ["tr"]
                })
            }, {
                isComponent: function(t) {
                    var e = "",
                        n = t.tagName;
                    return "TD" != n && "TH" != n || (e = {
                        type: "cell",
                        tagName: n.toLowerCase()
                    }), e
                }
            }),
            b = f.default.extend({});

        function y(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function w(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? y(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : y(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var x = d.default.extend({
                defaults: w(w({}, d.default.prototype.defaults), {}, {
                    tagName: "tr",
                    draggable: ["thead", "tbody", "tfoot"],
                    droppable: ["th", "td"]
                })
            }, {
                isComponent: function(t) {
                    return "TR" == t.tagName && !0
                }
            }),
            O = f.default.extend({});

        function C(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function S(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? C(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : C(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var k = d.default.extend({
                defaults: S(S({}, d.default.prototype.defaults), {}, {
                    type: "table",
                    tagName: "table",
                    droppable: ["tbody", "thead", "tfoot"]
                }),
                initialize: function(t, e) {
                    d.default.prototype.initialize.apply(this, arguments);
                    var n = this.get("components");
                    !n.length && n.add({
                        type: "tbody"
                    })
                }
            }, {
                isComponent: function(t) {
                    var e = "";
                    return "TABLE" == t.tagName && (e = {
                        type: "table"
                    }), e
                }
            }),
            j = f.default.extend({
                events: {}
            });

        function T(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function P(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? T(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : T(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var E = d.default.extend({
            defaults: P(P({}, d.default.prototype.defaults), {}, {
                type: "tbody",
                tagName: "tbody",
                draggable: ["table"],
                droppable: ["tr"],
                columns: 1,
                rows: 1
            }),
            initialize: function(t, e) {
                d.default.prototype.initialize.apply(this, arguments);
                var n = this.get("components"),
                    r = this.get("columns"),
                    i = this.get("rows");
                if (!n.length) {
                    for (var o = []; i--;) {
                        for (var a = [], s = r; s--;) a.push({
                            type: "cell",
                            classes: ["cell"]
                        });
                        o.push({
                            type: "row",
                            classes: ["row"],
                            components: a
                        })
                    }
                    n.add(o)
                }
            }
        }, {
            isComponent: function(t) {
                var e = "";
                return "TBODY" == t.tagName && (e = {
                    type: "tbody"
                }), e
            }
        });

        function M(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function D(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? M(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : M(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var A = E.extend({
                defaults: D(D({}, E.prototype.defaults), {}, {
                    type: "thead",
                    tagName: "thead"
                })
            }, {
                isComponent: function(t) {
                    var e = "";
                    return "THEAD" == t.tagName && (e = {
                        type: "thead"
                    }), e
                }
            }),
            L = f.default.extend({}),
            _ = f.default.extend({});

        function N(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function I(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? N(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : N(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var F = E.extend({
                defaults: I(I({}, E.prototype.defaults), {}, {
                    type: "tfoot",
                    tagName: "tfoot"
                })
            }, {
                isComponent: function(t) {
                    var e = "";
                    return "TFOOT" == t.tagName && (e = {
                        type: "tfoot"
                    }), e
                }
            }),
            V = f.default.extend({});

        function R(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function z(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? R(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : R(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var H = 'xmlns="http://www.w3.org/2000/svg" width="100" viewBox="0 0 24 24" style="fill: rgba(0,0,0,0.15); transform: scale(0.75)"',
            $ = d.default.extend({
                defaults: z(z({}, d.default.prototype.defaults), {}, {
                    type: "image",
                    tagName: "img",
                    void: !0,
                    droppable: 0,
                    editable: 1,
                    highlightable: 0,
                    resizable: {
                        ratioDefault: 1
                    },
                    traits: ["alt"],
                    src: "<svg ".concat(H, '>\n        <path d="M8.5 13.5l2.5 3 3.5-4.5 4.5 6H5m16 1V5a2 2 0 0 0-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2z"></path>\n      </svg>'),
                    fallback: "<svg ".concat(H, '>\n        <path d="M2.28 3L1 4.27l2 2V19c0 1.1.9 2 2 2h12.73l2 2L21 21.72 2.28 3m2.55 0L21 19.17V5a2 2 0 0 0-2-2H4.83M8.5 13.5l2.5 3 1-1.25L14.73 18H5l3.5-4.5z"></path>\n      </svg>'),
                    file: ""
                }),
                initialize: function(t, e) {
                    d.default.prototype.initialize.apply(this, arguments);
                    var n = this.get("attributes");
                    n.src && this.set("src", n.src)
                },
                initToolbar: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    d.default.prototype.initToolbar.apply(this, e);
                    var r = this.em;
                    if (r) {
                        var i = "image-editor";
                        if (r.get("Commands").has(i)) {
                            for (var o = !1, a = this.get("toolbar"), s = 0; s < a.length; s++)
                                if ("image-editor" === a[s].command) {
                                    o = !0;
                                    break
                                } o || (a.push({
                                attributes: {
                                    class: "fa fa-pencil"
                                },
                                command: i
                            }), this.set("toolbar", a))
                        }
                    }
                },
                getAttrToHTML: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    var r = d.default.prototype.getAttrToHTML.apply(this, e),
                        i = this.getSrcResult();
                    return i && (r.src = i), r
                },
                getSrcResult: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.get(t.fallback ? "fallback" : "src") || "",
                        n = e;
                    return e && "<svg" === e.substr(0, 4) && (n = "data:image/svg+xml;base64,".concat(window.btoa(e))), n
                },
                isDefaultSrc: function() {
                    return this.get("src") === Object(c.result)(this, "defaults").src
                },
                toJSON: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    var r = d.default.prototype.toJSON.apply(this, e);
                    return r.src === r.attributes.src && delete r.src, r
                },
                parseUri: function(t) {
                    var e = document.createElement("a");
                    e.href = t;
                    for (var n = {}, r = e.search.substring(1).split("&"), i = 0; i < r.length; i++) {
                        var o = r[i].split("="),
                            a = decodeURIComponent(o[0]);
                        a && (n[a] = decodeURIComponent(o[1]))
                    }
                    return {
                        hostname: e.hostname,
                        pathname: e.pathname,
                        protocol: e.protocol,
                        search: e.search,
                        hash: e.hash,
                        port: e.port,
                        query: n
                    }
                }
            }, {
                isComponent: function(t) {
                    var e = "";
                    return "IMG" == t.tagName && (e = {
                        type: "image"
                    }), e
                }
            });

        function U(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function B(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? U(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : U(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var W = $.extend({
                defaults: B(B({}, $.prototype.defaults), {}, {
                    type: "map",
                    src: "",
                    void: 0,
                    mapUrl: "https://maps.google.com/maps",
                    tagName: "iframe",
                    mapType: "q",
                    address: "",
                    zoom: "1",
                    attributes: {
                        frameborder: 0
                    },
                    toolbar: d.default.prototype.defaults.toolbar,
                    traits: [{
                        label: "Address",
                        name: "address",
                        placeholder: "eg. London, UK",
                        changeProp: 1
                    }, {
                        type: "select",
                        label: "Map type",
                        name: "mapType",
                        changeProp: 1,
                        options: [{
                            value: "q",
                            name: "Roadmap"
                        }, {
                            value: "w",
                            name: "Satellite"
                        }]
                    }, {
                        label: "Zoom",
                        name: "zoom",
                        type: "range",
                        min: "1",
                        max: "20",
                        changeProp: 1
                    }]
                }),
                initialize: function(t, e) {
                    this.get("src") ? this.parseFromSrc() : this.updateSrc(), $.prototype.initialize.apply(this, arguments), this.listenTo(this, "change:address change:zoom change:mapType", this.updateSrc)
                },
                updateSrc: function() {
                    this.set("src", this.getMapUrl())
                },
                getMapUrl: function() {
                    var t = this.get("address"),
                        e = this.get("zoom"),
                        n = this.get("mapType");
                    return t = t ? "&q=" + t : "", e = e ? "&z=" + e : "", n = n ? "&t=" + n : "", this.get("mapUrl") + "?" + t + e + n + "&output=embed"
                },
                parseFromSrc: function() {
                    var t = this.parseUri(this.get("src")).query;
                    t.q && this.set("address", t.q), t.z && this.set("zoom", t.z), t.t && this.set("mapType", t.t)
                }
            }, {
                isComponent: function(t) {
                    var e = "";
                    return "IFRAME" == t.tagName && /maps\.google\.com/.test(t.src) && (e = {
                        type: "map",
                        src: t.src
                    }), e
                }
            }),
            q = f.default.extend({
                tagName: "img",
                events: {
                    dblclick: "onActive",
                    click: "initResize",
                    error: "onError",
                    load: "onLoad",
                    dragstart: "noDrag"
                },
                initialize: function(t) {
                    var e = this.model;
                    f.default.prototype.initialize.apply(this, arguments), this.listenTo(e, "change:src", this.updateSrc), this.classEmpty = "".concat(this.ppfx, "plh-image");
                    var n = this.config;
                    n.modal && (this.modal = n.modal), n.am && (this.am = n.am), this.fetchFile()
                },
                fetchFile: function() {
                    if (!this.modelOpt.temporary) {
                        var t = this.model,
                            e = t.get("file");
                        e && (this.em.get("AssetManager").FileUploader().uploadFile({
                            dataTransfer: {
                                files: [e]
                            }
                        }, function(e) {
                            var n = e && e.data && e.data[0],
                                r = n && (Object(c.isString)(n) ? n : n.src);
                            r && t.set({
                                src: r
                            })
                        }), t.set("file", ""))
                    }
                },
                updateSrc: function() {
                    var t = this.model,
                        e = this.classEmpty,
                        n = this.$el,
                        r = t.getSrcResult(),
                        i = r && !t.isDefaultSrc();
                    t.addAttributes({
                        src: r
                    }), n[i ? "removeClass" : "addClass"](e)
                },
                onActive: function(t) {
                    t && t.stopPropagation();
                    var e = this.opts.config.em,
                        n = e ? e.get("Editor") : "";
                    n && this.model.get("editable") && n.runCommand("open-assets", {
                        target: this.model,
                        types: ["image"],
                        accept: "image/*",
                        onSelect: function() {
                            n.Modal.close(), n.AssetManager.setTarget(null)
                        }
                    })
                },
                onError: function() {
                    var t = this.model.getSrcResult({
                        fallback: 1
                    });
                    t && (this.el.src = t)
                },
                onLoad: function() {
                    this.em.trigger("change:canvasOffset")
                },
                noDrag: function(t) {
                    return t.preventDefault(), !1
                },
                render: function() {
                    this.renderAttributes(), this.updateSrc();
                    var t = this.$el,
                        e = this.model,
                        n = t.attr("class") || "";
                    return !e.get("src") && t.attr("class", "".concat(n, " ").concat(this.classEmpty).trim()), this.postRender(), this
                }
            }),
            G = q.extend({
                tagName: "div",
                events: {},
                initialize: function(t) {
                    q.prototype.initialize.apply(this, arguments), this.classEmpty = this.ppfx + "plh-map"
                },
                updateSrc: function() {
                    this.getIframe().src = this.model.get("src")
                },
                getIframe: function() {
                    if (!this.iframe) {
                        var t = document.createElement("iframe");
                        t.src = this.model.get("src"), t.frameBorder = 0, t.style.height = "100%", t.style.width = "100%", t.className = this.ppfx + "no-pointer", this.iframe = t
                    }
                    return this.iframe
                },
                render: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    return q.prototype.render.apply(this, e), this.updateClasses(), this.el.appendChild(this.getIframe()), this
                }
            });

        function K(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function Y(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? K(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : K(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var X = d.default.extend({
            defaults: Y(Y({}, d.default.prototype.defaults), {}, {
                type: "text",
                droppable: !1,
                editable: !0
            }),
            toHTML: function() {
                return this.trigger("sync:content", {
                    silent: 1
                }), d.default.prototype.toHTML.apply(this, arguments)
            }
        });

        function J(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function Z(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? J(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : J(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var Q = X.extend({
                defaults: Z(Z({}, X.prototype.defaults), {}, {
                    type: "link",
                    tagName: "a",
                    traits: ["title", "href", "target"]
                }),
                getAttrToHTML: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    var r = X.prototype.getAttrToHTML.apply(this, e);
                    return delete r.onmousedown, r
                }
            }, {
                isComponent: function(t) {
                    var e;
                    if ("A" == t.tagName) {
                        e = {
                            type: "link",
                            editable: 0
                        };
                        var n = t.childNodes,
                            r = n.length;
                        r || delete e.editable;
                        for (var i = 0; i < r; i++) {
                            var o = n[i];
                            if (3 == o.nodeType && "" != o.textContent.trim()) {
                                delete e.editable;
                                break
                            }
                        }
                    }
                    return e
                }
            }),
            tt = n(3);

        function et(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function nt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? et(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : et(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var rt = f.default.prototype,
            it = f.default.extend({
                events: {
                    dblclick: "onActive",
                    input: "onInput"
                },
                initialize: function(t) {
                    rt.initialize.apply(this, arguments), this.disableEditing = this.disableEditing.bind(this);
                    var e = this.model,
                        n = this.em;
                    this.listenTo(e, "focus", this.onActive), this.listenTo(e, "change:content", this.updateContentText), this.listenTo(e, "sync:content", this.syncContent), this.rte = n && n.get("RichTextEditor")
                },
                updateContentText: function(t, e) {
                    !(arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}).fromDisable && this.disableEditing()
                },
                onActive: function(t) {
                    var e = this.rte,
                        n = this.em;
                    if (!(this.rteEnabled || !this.model.get("editable") || n && n.isEditing())) {
                        if (t && t.stopPropagation && t.stopPropagation(), e) try {
                            this.activeRte = e.enable(this, this.activeRte)
                        } catch (t) {
                            n.logError(t)
                        }
                        this.toggleEvents(1)
                    }
                },
                onDisable: function() {
                    this.disableEditing()
                },
                disableEditing: function() {
                    var t = this.model,
                        e = this.rte,
                        n = this.activeRte,
                        r = this.em,
                        i = t.get("editable");
                    if (e && i) {
                        try {
                            e.disable(this, n)
                        } catch (t) {
                            r.logError(t)
                        }
                        this.syncContent()
                    }
                    this.toggleEvents()
                },
                getContent: function() {
                    var t = this.activeRte;
                    return t && "function" == typeof t.getContent ? t.getContent() : this.getChildrenContainer().innerHTML
                },
                syncContent: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.model,
                        n = this.rte;
                    if (this.rteEnabled || t.force) {
                        var r = this.getContent(),
                            i = e.components(),
                            o = nt({
                                fromDisable: 1
                            }, t);
                        if (e.set("content", "", o), n.customRte) i.length && i.reset(null, t), e.set("content", r, o);
                        else {
                            var a = function e(n) {
                                var r = !!n.get("textable"),
                                    i = !["text", "default", ""].some(function(t) {
                                        return n.is(t)
                                    }) || r;
                                n.set(nt({
                                    _innertext: !i,
                                    editable: i && n.get("editable"),
                                    selectable: i,
                                    hoverable: i,
                                    removable: r,
                                    draggable: r,
                                    highlightable: 0,
                                    copyable: r
                                }, !r && {
                                    toolbar: ""
                                }), t), n.get("components").each(function(t) {
                                    return e(t)
                                })
                            };
                            i.reset(r, t), i.each(function(t) {
                                return a(t)
                            }), i.trigger("resetNavigator")
                        }
                    }
                },
                onInput: function() {
                    var t = this.em,
                        e = "component",
                        n = ["".concat(e, ":update"), "".concat(e, ":input")].join(" ");
                    t && t.trigger(n, this.model)
                },
                disablePropagation: function(t) {
                    t.stopPropagation()
                },
                toggleEvents: function(t) {
                    var e = this.em,
                        n = this.model,
                        r = {
                            on: tt.v,
                            off: tt.u
                        },
                        i = t ? "on" : "off";
                    e.setEditing(t), this.rteEnabled = !!t;
                    var o = [this.el.ownerDocument, document];
                    if (r.off(o, "mousedown", this.disableEditing), r[i](o, "mousedown", this.disableEditing), e[i]("toolbar:run:before", this.disableEditing), n[i]("removed", this.disableEditing), this.$el.off("mousedown", this.disablePropagation), this.$el[i]("mousedown", this.disablePropagation), this.config.draggableComponents)
                        for (var a = this.el; a;) a.draggable = !t, (a = a.parentNode) && "BODY" == a.tagName && (a = 0)
                }
            }),
            ot = it.extend({
                render: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    return it.prototype.render.apply(this, e), this.el.addEventListener("click", this.prevDef, !0), this
                }
            });

        function at(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function st(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? at(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : at(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var lt = X.extend({
                defaults: st(st({}, X.prototype.defaults), {}, {
                    tagName: "label",
                    traits: ["id", "title", "for"]
                })
            }, {
                isComponent: function(t) {
                    if ("LABEL" == t.tagName) return {
                        type: "label"
                    }
                }
            }),
            ct = ot.extend({
                tagName: "span"
            });

        function ut(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function dt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? ut(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : ut(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var ht = "yt",
            ft = "vi",
            pt = "ytnc",
            gt = $.extend({
                defaults: dt(dt({}, $.prototype.defaults), {}, {
                    type: "video",
                    tagName: "video",
                    videoId: "",
                    void: 0,
                    provider: "so",
                    ytUrl: "https://www.youtube.com/embed/",
                    ytncUrl: "https://www.youtube-nocookie.com/embed/",
                    viUrl: "https://player.vimeo.com/video/",
                    loop: 0,
                    poster: "",
                    muted: 0,
                    autoplay: 0,
                    controls: 1,
                    color: "",
                    list: "",
                    rel: 1,
                    modestbranding: 0,
                    sources: [],
                    attributes: {
                        allowfullscreen: "allowfullscreen"
                    }
                }),
                initialize: function(t, e) {
                    this.em = e.em, this.get("src") && this.parseFromSrc(), this.updateTraits(), this.listenTo(this, "change:provider", this.updateTraits), this.listenTo(this, "change:videoId change:provider", this.updateSrc), $.prototype.initialize.apply(this, arguments)
                },
                updateTraits: function() {
                    var t, e = "iframe";
                    switch (this.get("provider")) {
                        case ht:
                        case pt:
                            t = this.getYoutubeTraits();
                            break;
                        case ft:
                            t = this.getVimeoTraits();
                            break;
                        default:
                            e = "video", t = this.getSourceTraits()
                    }
                    this.set({
                        tagName: e
                    }, {
                        silent: 1
                    }), this.set({
                        traits: t
                    }), this.em.trigger("component:toggled")
                },
                parseFromSrc: function() {
                    var t = this.get("provider"),
                        e = this.parseUri(this.get("src")),
                        n = e.query;
                    switch (t) {
                        case ht:
                        case pt:
                        case ft:
                            var r = e.pathname.split("/").pop();
                            this.set("videoId", r), n.list && this.set("list", n.list), n.autoplay && this.set("autoplay", 1), n.loop && this.set("loop", 1), 0 === parseInt(n.controls) && this.set("controls", 0), n.color && this.set("color", n.color), "0" === n.rel && this.set("rel", 0), "1" === n.modestbranding && this.set("modestbranding", 1)
                    }
                },
                updateSrc: function() {
                    var t = "";
                    switch (this.get("provider")) {
                        case ht:
                            t = this.getYoutubeSrc();
                            break;
                        case pt:
                            t = this.getYoutubeNoCookieSrc();
                            break;
                        case ft:
                            t = this.getVimeoSrc()
                    }
                    this.set({
                        src: t
                    })
                },
                getAttrToHTML: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    var r = $.prototype.getAttrToHTML.apply(this, e);
                    switch (this.get("provider")) {
                        case ht:
                        case pt:
                        case ft:
                            break;
                        default:
                            this.get("loop") && (r.loop = "loop"), this.get("autoplay") && (r.autoplay = "autoplay"), this.get("controls") && (r.controls = "controls")
                    }
                    return r
                },
                getProviderTrait: function() {
                    return {
                        type: "select",
                        label: "Provider",
                        name: "provider",
                        changeProp: 1,
                        options: [{
                            value: "so",
                            name: "HTML5 Source"
                        }, {
                            value: ht,
                            name: "Youtube"
                        }, {
                            value: pt,
                            name: "Youtube (no cookie)"
                        }, {
                            value: ft,
                            name: "Vimeo"
                        }]
                    }
                },
                getSourceTraits: function() {
                    return [this.getProviderTrait(), {
                        label: "Source",
                        name: "src",
                        placeholder: "eg. ./media/video.mp4",
                        changeProp: 1
                    }, {
                        label: "Poster",
                        name: "poster",
                        placeholder: "eg. ./media/image.jpg"
                    }, this.getAutoplayTrait(), this.getLoopTrait(), this.getControlsTrait()]
                },
                getYoutubeTraits: function() {
                    return [this.getProviderTrait(), {
                        label: "Video ID",
                        name: "videoId",
                        placeholder: "eg. jNQXAC9IVRw",
                        changeProp: 1
                    }, this.getAutoplayTrait(), this.getLoopTrait(), this.getControlsTrait(), {
                        type: "checkbox",
                        label: "Related",
                        name: "rel",
                        changeProp: 1
                    }, {
                        type: "checkbox",
                        label: "Modest",
                        name: "modestbranding",
                        changeProp: 1
                    }]
                },
                getVimeoTraits: function() {
                    return [this.getProviderTrait(), {
                        label: "Video ID",
                        name: "videoId",
                        placeholder: "eg. 123456789",
                        changeProp: 1
                    }, {
                        label: "Color",
                        name: "color",
                        placeholder: "eg. FF0000",
                        changeProp: 1
                    }, this.getAutoplayTrait(), this.getLoopTrait()]
                },
                getAutoplayTrait: function() {
                    return {
                        type: "checkbox",
                        label: "Autoplay",
                        name: "autoplay",
                        changeProp: 1
                    }
                },
                getLoopTrait: function() {
                    return {
                        type: "checkbox",
                        label: "Loop",
                        name: "loop",
                        changeProp: 1
                    }
                },
                getControlsTrait: function() {
                    return {
                        type: "checkbox",
                        label: "Controls",
                        name: "controls",
                        changeProp: 1
                    }
                },
                getYoutubeSrc: function() {
                    var t = this.get("videoId"),
                        e = this.get("ytUrl"),
                        n = this.get("list");
                    return e += t + (t.indexOf("?") < 0 ? "?" : ""), e += n ? "&list=".concat(n) : "", e += this.get("autoplay") ? "&autoplay=1" : "", e += this.get("controls") ? "" : "&controls=0&showinfo=0", e += this.get("loop") ? "&loop=1&playlist=".concat(t) : "", (e += this.get("rel") ? "" : "&rel=0") + (this.get("modestbranding") ? "&modestbranding=1" : "")
                },
                getYoutubeNoCookieSrc: function() {
                    var t = this.getYoutubeSrc();
                    return t.replace(this.get("ytUrl"), this.get("ytncUrl"))
                },
                getVimeoSrc: function() {
                    var t = this.get("viUrl");
                    return t += this.get("videoId") + "?", t += this.get("autoplay") ? "&autoplay=1" : "", t += this.get("loop") ? "&loop=1" : "", (t += this.get("controls") ? "" : "&title=0&portrait=0&badge=0") + (this.get("color") ? "&color=" + this.get("color") : "")
                }
            }, {
                isComponent: function(t) {
                    var e = "",
                        n = /youtube\.com\/embed/.test(t.src),
                        r = /youtube-nocookie\.com\/embed/.test(t.src),
                        i = /player\.vimeo\.com\/video/.test(t.src),
                        o = n || r || i;
                    return ("VIDEO" == t.tagName || "IFRAME" == t.tagName && o) && (e = {
                        type: "video"
                    }, t.src && (e.src = t.src), o && (n ? e.provider = ht : r ? e.provider = pt : i && (e.provider = ft))), e
                }
            }),
            vt = q.extend({
                tagName: "div",
                events: {},
                initialize: function(t) {
                    f.default.prototype.initialize.apply(this, arguments);
                    var e = this.model,
                        n = ["loop", "autoplay", "controls", "color", "rel", "modestbranding", "poster"].map(function(t) {
                            return "change:".concat(t)
                        }).join(" ");
                    this.listenTo(e, "change:provider", this.updateProvider), this.listenTo(e, "change:src", this.updateSrc), this.listenTo(e, n, this.updateVideo)
                },
                updateProvider: function() {
                    var t = this.model.get("provider");
                    this.el.innerHTML = "", this.el.appendChild(this.renderByProvider(t))
                },
                updateSrc: function() {
                    var t = this.model,
                        e = this.videoEl;
                    if (e) {
                        var n = t.get("provider"),
                            r = t.get("src");
                        switch (n) {
                            case "yt":
                                r = t.getYoutubeSrc();
                                break;
                            case "ytnc":
                                r = t.getYoutubeNoCookieSrc();
                                break;
                            case "vi":
                                r = t.getVimeoSrc()
                        }
                        e.src = r
                    }
                },
                updateVideo: function() {
                    var t = this.model.get("provider"),
                        e = this.videoEl,
                        n = this.model;
                    switch (t) {
                        case "yt":
                        case "ytnc":
                        case "vi":
                            this.model.trigger("change:videoId");
                            break;
                        default:
                            e.loop = n.get("loop"), e.autoplay = n.get("autoplay"), e.controls = n.get("controls"), e.poster = n.get("poster")
                    }
                },
                renderByProvider: function(t) {
                    var e;
                    switch (t) {
                        case "yt":
                            e = this.renderYoutube();
                            break;
                        case "ytnc":
                            e = this.renderYoutubeNoCookie();
                            break;
                        case "vi":
                            e = this.renderVimeo();
                            break;
                        default:
                            e = this.renderSource()
                    }
                    return this.videoEl = e, e
                },
                renderSource: function() {
                    var t = document.createElement("video");
                    return t.src = this.model.get("src"), this.initVideoEl(t), t
                },
                renderYoutube: function() {
                    var t = document.createElement("iframe");
                    return t.src = this.model.getYoutubeSrc(), t.frameBorder = 0, t.setAttribute("allowfullscreen", !0), this.initVideoEl(t), t
                },
                renderYoutubeNoCookie: function() {
                    var t = document.createElement("iframe");
                    return t.src = this.model.getYoutubeNoCookieSrc(), t.frameBorder = 0, t.setAttribute("allowfullscreen", !0), this.initVideoEl(t), t
                },
                renderVimeo: function() {
                    var t = document.createElement("iframe");
                    return t.src = this.model.getVimeoSrc(), t.frameBorder = 0, t.setAttribute("allowfullscreen", !0), this.initVideoEl(t), t
                },
                initVideoEl: function(t) {
                    t.className = this.ppfx + "no-pointer", t.style.height = "100%", t.style.width = "100%"
                },
                render: function() {
                    for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n];
                    q.prototype.render.apply(this, e), this.updateClasses();
                    var r = this.model.get("provider");
                    return this.el.appendChild(this.renderByProvider(r)), this.updateVideo(), this
                }
            });

        function mt(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function bt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? mt(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : mt(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var yt = d.default.extend({
                defaults: bt(bt({}, d.default.prototype.defaults), {}, {
                    type: "script",
                    droppable: !1,
                    draggable: !1,
                    layerable: !1
                })
            }, {
                isComponent: function(t) {
                    if ("SCRIPT" == t.tagName) {
                        var e = {
                            type: "script"
                        };
                        return t.src && (e.src = t.src, e.onload = t.onload), e
                    }
                }
            }),
            wt = q.extend({
                tagName: "script",
                events: {},
                render: function() {
                    var t = this.model,
                        e = t.get("src"),
                        n = this.em,
                        r = n && n.get("scriptCount") ? n.get("scriptCount") : 0,
                        i = "";
                    if (e) {
                        var o = t.get("onload"),
                            a = "script" + r,
                            s = "script" + (r + 1);
                        i = "var " + a + " = document.createElement('script');\n" + a + ".onload = function(){\n" + (o ? o + "();\n" : "") + "typeof " + s + "Start == 'function' && " + s + "Start();\n};\n" + a + ".src = '" + e + "';\nfunction " + a + "Start() { document.body.appendChild(" + a + "); };\n" + (r ? "" : a + "Start();"), n && n.set("scriptCount", r + 1)
                    } else i = t.get("content");
                    return this.el.innerHTML = i, this.postRender(), this
                }
            });

        function xt(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function Ot(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? xt(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : xt(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var Ct = d.default.extend({
            defaults: Ot(Ot({}, d.default.prototype.defaults), {}, {
                resizable: {
                    ratioDefault: 1
                },
                highlightable: 0
            }),
            getName: function() {
                var t = this.get("tagName"),
                    e = this.get("custom-name");
                return t = t.charAt(0).toUpperCase() + t.slice(1), e || t
            }
        }, {
            isComponent: function(t) {
                if (SVGElement && t instanceof SVGElement) return {
                    tagName: t.tagName,
                    type: "svg"
                }
            }
        });

        function St(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function kt(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? St(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : St(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var jt = Ct.extend({
                defaults: kt(kt({}, Ct.prototype.defaults), {}, {
                    selectable: !1,
                    hoverable: !1,
                    layerable: !1
                })
            }, {
                isComponent: function(t) {
                    if (Ct.isComponent(t) && "svg" !== t.tagName.toLowerCase()) return {
                        tagName: t.tagName,
                        type: "svg-in"
                    }
                }
            }),
            Tt = f.default.extend({
                _createElement: function(t) {
                    return document.createElementNS("http://www.w3.org/2000/svg", t)
                }
            });

        function Pt(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function Et(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? Pt(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Pt(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var Mt = d.default.extend({
            defaults: Et(Et({}, d.default.prototype.defaults), {}, {
                tagName: "",
                droppable: !1,
                layerable: !1,
                editable: !0
            }),
            toHTML: function() {
                return this.get("content").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;")
            }
        }, {
            isComponent: function(t) {
                var e = "";
                return 3 === t.nodeType && (e = {
                    type: "textnode",
                    content: t.textContent
                }), e
            }
        });

        function Dt(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }
        var At = Mt.extend({
                defaults: function(t) {
                    for (var e = 1; e < arguments.length; e++) {
                        var n = null != arguments[e] ? arguments[e] : {};
                        e % 2 ? Dt(Object(n), !0).forEach(function(e) {
                            a()(t, e, n[e])
                        }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Dt(Object(n)).forEach(function(e) {
                            Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                        })
                    }
                    return t
                }({}, Mt.prototype.defaults),
                toHTML: function() {
                    return "\x3c!--".concat(this.get("content"), "--\x3e")
                }
            }, {
                isComponent: function(t) {
                    if (8 == t.nodeType) return {
                        tagName: "NULL",
                        type: "comment",
                        content: t.textContent
                    }
                }
            }),
            Lt = f.default.extend({
                initialize: function() {
                    f.default.prototype.initialize.apply(this, arguments)
                },
                _setAttributes: function() {},
                renderAttributes: function() {},
                setAttribute: function() {},
                updateAttributes: function() {},
                initClasses: function() {},
                initComponents: function() {},
                delegateEvents: function() {},
                _createElement: function() {
                    return document.createTextNode("")
                },
                render: function() {
                    var t = this.model,
                        e = this.el;
                    return t.opt.temporary || (e.textContent = t.get("content")), this
                }
            }),
            _t = Lt.extend({
                _createElement: function() {
                    return document.createComment(this.model.get("content"))
                }
            }),
            Nt = d.default.extend({}, {
                isComponent: function() {
                    return !1
                }
            });

        function It(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function Ft(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? It(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : It(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n, r = {},
                o = {},
                a = [{
                    id: "cell",
                    model: m,
                    view: b
                }, {
                    id: "row",
                    model: x,
                    view: O
                }, {
                    id: "table",
                    model: k,
                    view: j
                }, {
                    id: "thead",
                    model: A,
                    view: L
                }, {
                    id: "tbody",
                    model: E,
                    view: _
                }, {
                    id: "tfoot",
                    model: F,
                    view: V
                }, {
                    id: "map",
                    model: W,
                    view: G
                }, {
                    id: "link",
                    model: Q,
                    view: ot
                }, {
                    id: "label",
                    model: lt,
                    view: ct
                }, {
                    id: "video",
                    model: gt,
                    view: vt
                }, {
                    id: "image",
                    model: $,
                    view: q
                }, {
                    id: "script",
                    model: yt,
                    view: wt
                }, {
                    id: "svg-in",
                    model: jt,
                    view: Tt
                }, {
                    id: "svg",
                    model: Ct,
                    view: Tt
                }, {
                    id: "comment",
                    model: At,
                    view: _t
                }, {
                    id: "textnode",
                    model: Mt,
                    view: Lt
                }, {
                    id: "text",
                    model: X,
                    view: it
                }, {
                    id: "wrapper",
                    model: Nt,
                    view: f.default
                }, {
                    id: "default",
                    model: d.default,
                    view: f.default
                }];
            return {
                Component: d.default,
                Components: h.a,
                ComponentsView: p.a,
                componentTypes: a,
                componentsById: o,
                name: "DomComponents",
                getConfig: function() {
                    return r
                },
                storageKey: function() {
                    var t = [],
                        e = r.stm && r.stm.getConfig() || {};
                    return e.storeHtml && t.push("html"), e.storeComponents && t.push("components"), t
                },
                init: function(i) {
                    var o = this;
                    for (var s in t = (r = i || {}).em, this.em = t, t && (r.components = t.config.components || r.components), u) s in r || (r[s] = u[s]);
                    var l = r.pStylePrefix;
                    if (l && (r.stylePrefix = l + r.stylePrefix), t) {
                        r.modal = t.get("Modal") || "", r.am = t.get("AssetManager") || "", t.get("Parser").compTypes = a, t.on("change:componentHovered", this.componentHovered, this);
                        var c = t.get("selected");
                        t.listenTo(c, "add", function(t, e, n) {
                            return o.selectAdd(t, n)
                        }), t.listenTo(c, "remove", function(t, e, n) {
                            return o.selectRemove(t, n)
                        })
                    }
                    var h = r.components,
                        p = Ft({}, r.wrapper);
                    return p["custom-name"] = r.wrapperName, p.wrapper = 1, p.type = "wrapper", h && h.constructor === Object && h.wrapper && (p = Ft({}, h), h = h.components || [], p.components = [], t && (t.config.components = h, r.components = h)), (e = new d.default(p, {
                        em: t,
                        config: r,
                        componentTypes: a,
                        domc: this
                    })).set({
                        attributes: {
                            id: "wrapper"
                        }
                    }), n = new f.default({
                        model: e,
                        config: r,
                        componentTypes: a
                    }), this
                },
                onLoad: function() {
                    this.setComponents(r.components)
                },
                postLoad: function(t) {
                    this.handleChanges(this.getWrapper(), null, {
                        avoidStore: 1
                    })
                },
                handleChanges: function(e, n) {
                    var r = this,
                        i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        o = e.components(),
                        a = t.get("UndoManager"),
                        s = t.handleUpdates.bind(t),
                        l = this.handleChanges.bind(this),
                        c = this.handleChangesColl.bind(this),
                        u = this.handleRemoves.bind(this);
                    a && a.add(e), a && o && a.add(o);
                    [
                        [e, "change:style change:content change:attributes change:src", s],
                        [e, "change:components", c],
                        [o, "add", l],
                        [o, "remove", u],
                        [e.get("classes"), "add remove", s]
                    ].forEach(function(e) {
                        t.stopListening(e[0], e[1], e[2]), t.listenTo(e[0], e[1], e[2])
                    }), !i.avoidStore && s("", "", i), o.each(function(t) {
                        return r.handleChanges(t, n, i)
                    })
                },
                handleChangesColl: function(e, n) {
                    var r = t.get("UndoManager");
                    if (r && n instanceof l.a.Collection) {
                        var i = this.handleChanges.bind(this),
                            o = this.handleRemoves.bind(this);
                        r.add(n), [
                            [n, "add", i],
                            [n, "remove", o]
                        ].forEach(function(e) {
                            t.stopListening(e[0], e[1], e[2]), t.listenTo(e[0], e[1], e[2])
                        })
                    }
                },
                handleRemoves: function(e, n) {
                    var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                    !r.avoidStore && t.handleUpdates(e, n, r)
                },
                load: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
                        e = this.em,
                        n = "";
                    !t && r.stm && (t = r.em.getCacheLoad());
                    var i = t,
                        o = i.components,
                        a = i.html;
                    if (o)
                        if (Object(c.isObject)(o) || Object(c.isArray)(o)) n = o;
                        else try {
                            n = JSON.parse(o)
                        } catch (t) {
                            e && e.logError(t)
                        } else a && (n = a);
                    var s = n && n.constructor === Object;
                    return (n && n.length || s) && (this.clear(), s ? this.getWrapper().set(n) : this.getComponents().add(n)), n
                },
                store: function(t) {
                    if (r.stm) {
                        var e = {},
                            n = this.storageKey();
                        if (n.indexOf("html") >= 0 && (e.html = r.em.getHtml()), n.indexOf("components") >= 0) {
                            this.em;
                            var i = r.storeWrapper ? this.getWrapper() : this.getComponents();
                            e.components = JSON.stringify(i)
                        }
                        return t || r.stm.store(e), e
                    }
                },
                getComponent: function() {
                    return e
                },
                getWrapper: function() {
                    return this.getComponent()
                },
                getComponents: function() {
                    return this.getWrapper().get("components")
                },
                addComponent: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return this.getComponents().add(t, e)
                },
                render: function() {
                    return n.render().el
                },
                clear: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return this.getComponents().map(function(t) {
                        return t
                    }).forEach(function(e) {
                        return e.remove(t)
                    }), this
                },
                setComponents: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    this.clear(e).addComponent(t, e)
                },
                addType: function(t, e) {
                    var n = this.em,
                        r = e.model,
                        o = void 0 === r ? {} : r,
                        s = e.view,
                        l = void 0 === s ? {} : s,
                        u = e.isComponent,
                        d = e.extend,
                        h = e.extendView,
                        f = e.extendFn,
                        p = void 0 === f ? [] : f,
                        g = e.extendFnView,
                        v = void 0 === g ? [] : g,
                        m = this.getType(t),
                        b = this.getType(d),
                        y = this.getType(h),
                        w = b || m || this.getType("default"),
                        x = w.model,
                        O = y ? y.view : w.view,
                        C = function(t, e, n) {
                            return t.reduce(function(t, r) {
                                var i = e[r],
                                    o = n.prototype[r];
                                return i && o && (t[r] = function() {
                                    o.bind(this).apply(void 0, arguments), i.bind(this).apply(void 0, arguments)
                                }), t
                            }, {})
                        };
                    "object" === i()(o) && (e.model = x.extend(Ft(Ft(Ft({}, o), C(p, o, x)), {}, {
                        defaults: Ft(Ft({}, x.prototype.defaults), Object(c.result)(o, "defaults") || {})
                    }), {
                        isComponent: !m || b || u ? u || function() {
                            return 0
                        } : x.isComponent
                    })), "object" === i()(l) && (e.view = O.extend(Ft(Ft({}, l), C(v, l, O)))), m ? (m.model = e.model, m.view = e.view) : (e.id = t, a.unshift(e));
                    var S = "component:type:".concat(m ? "update" : "add");
                    return n && n.trigger(S, m || e), this
                },
                getType: function(t) {
                    for (var e = a, n = 0; n < e.length; n++)
                        if (e[n].id == t) return e[n]
                },
                removeType: function(t) {
                    var e = a,
                        n = this.getType(t);
                    if (n) {
                        var r = e.indexOf(n);
                        return e.splice(r, 1), n
                    }
                },
                getTypes: function() {
                    return a
                },
                selectAdd: function(t) {
                    var e = this,
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    t && (t.set({
                        status: "selected"
                    }), ["component:selected", "component:toggled"].forEach(function(r) {
                        return e.em.trigger(r, t, n)
                    }))
                },
                selectRemove: function(t) {
                    var e = this,
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    t && (this.em, t.set({
                        status: "",
                        state: ""
                    }), ["component:deselected", "component:toggled"].forEach(function(r) {
                        return e.em.trigger(r, t, n)
                    }))
                },
                componentHovered: function() {
                    var t = r.em,
                        e = t.get("componentHovered"),
                        n = t.previous("componentHovered"),
                        i = "hovered";
                    n && n.get("status") == i && n.set({
                        status: "",
                        state: ""
                    }), e && Object(c.isEmpty)(e.get("status")) && e.set("status", i)
                },
                allById: function() {
                    return o
                },
                destroy: function() {
                    this.clear(), n.remove(), [r, t, o, e, n].forEach(function(t) {
                        return {}
                    }), this.em = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(7),
            i = n.n(r),
            o = n(2),
            a = n.n(o),
            s = n(3),
            l = n(15),
            c = n.n(l),
            u = n(16),
            d = n.n(u),
            h = n(0),
            f = function() {
                function t(e, n) {
                    var r = this;
                    c()(this, t), this.em = e;
                    var i = n || e.get("Canvas").getFrames().map(function(t) {
                            return t.get("root").getEl()
                        }),
                        o = Array.isArray(i) ? i : [i];
                    return this.el = i, this.counter = 0, Object(h.bindAll)(this, "handleDragEnter", "handleDragOver", "handleDrop", "handleDragLeave"), o.forEach(function(t) {
                        return r.toggleEffects(t, 1)
                    }), this
                }
                return d()(t, [{
                    key: "toggleEffects",
                    value: function(t, e) {
                        var n = {
                                on: s.v,
                                off: s.u
                            },
                            r = e ? "on" : "off";
                        n[r](t, "dragenter", this.handleDragEnter), n[r](t, "dragover", this.handleDragOver), n[r](t, "drop", this.handleDrop), n[r](t, "dragleave", this.handleDragLeave)
                    }
                }, {
                    key: "endDrop",
                    value: function(t, e) {
                        var n = this.em,
                            r = this.dragStop;
                        this.counter = 0, this.over = 0, r && r(t), n.runDefault({
                            preserveSelected: 1
                        }), n.trigger("canvas:dragend", e)
                    }
                }, {
                    key: "handleDragLeave",
                    value: function(t) {
                        this.updateCounter(-1, t)
                    }
                }, {
                    key: "updateCounter",
                    value: function(t, e) {
                        this.counter += t, 0 === this.counter && this.endDrop(1, e)
                    }
                }, {
                    key: "handleDragEnter",
                    value: function(t) {
                        var e = this,
                            n = this.em,
                            r = t.dataTransfer;
                        if (this.updateCounter(1, t), !this.over) {
                            this.over = 1;
                            var i, o, a = n.get("Utils"),
                                s = n.get("Canvas"),
                                l = s.getBody(),
                                c = n.get("dragContent") || "<br>";
                            if (n.stopDefault(), n.inAbsoluteMode()) {
                                var u = n.get("DomComponents").getWrapper(),
                                    d = u.append({})[0],
                                    h = n.get("Commands").run("core:component-drag", {
                                        event: t,
                                        guidesInfo: 1,
                                        center: 1,
                                        target: d,
                                        onEnd: function(t, n, i) {
                                            if (!i.cancelled) {
                                                var o = u.append(c)[0],
                                                    a = d.getStyle(),
                                                    s = a.left,
                                                    l = a.top,
                                                    h = a.position;
                                                o.addStyle({
                                                    left: s,
                                                    top: l,
                                                    position: h
                                                }), e.handleDragEnd(o, r)
                                            }
                                            d.remove()
                                        }
                                    });
                                i = function(e) {
                                    return h.stop(t, {
                                        cancel: e
                                    })
                                }, o = function(t) {
                                    return c = t
                                }
                            } else {
                                var f = new a.Sorter({
                                    em: n,
                                    wmargin: 1,
                                    nested: 1,
                                    canvasRelative: 1,
                                    direction: "a",
                                    container: l,
                                    placer: s.getPlacerEl(),
                                    containerSel: "*",
                                    itemSel: "*",
                                    pfx: "gjs-",
                                    onEndMove: function(t) {
                                        return e.handleDragEnd(t, r)
                                    },
                                    document: s.getFrameEl().contentDocument
                                });
                                f.setDropContent(c), f.startSort(), this.sorter = f, i = function(t) {
                                    t && (f.moved = 0), f.endMove()
                                }, o = function(t) {
                                    return f.setDropContent(t)
                                }
                            }
                            this.dragStop = i, this.dragContent = o, n.trigger("canvas:dragenter", r, c)
                        }
                    }
                }, {
                    key: "handleDragEnd",
                    value: function(t, e) {
                        if (t) {
                            var n = this.em;
                            n.set("dragResult", t), n.trigger("canvas:drop", e, t)
                        }
                    }
                }, {
                    key: "handleDragOver",
                    value: function(t) {
                        t.preventDefault(), this.em.trigger("canvas:dragover", t)
                    }
                }, {
                    key: "handleDrop",
                    value: function(t) {
                        t.preventDefault();
                        var e = this.dragContent,
                            n = t.dataTransfer,
                            r = this.getContentByData(n).content;
                        t.target.style.border = "", r && e && e(r), this.endDrop(!r, t)
                    }
                }, {
                    key: "getContentByData",
                    value: function(t) {
                        var e = this.em,
                            n = t.types,
                            r = t.files || [],
                            i = e.get("dragContent"),
                            o = t.getData("text");
                        if (r.length) {
                            o = [];
                            for (var a = 0; a < r.length; a++) {
                                var s = r[a],
                                    l = s.type.split("/")[0];
                                "image" == l && o.push({
                                    type: l,
                                    file: s,
                                    attributes: {
                                        alt: s.name
                                    }
                                })
                            }
                        } else if (i) o = i;
                        else if (Object(h.indexOf)(n, "text/html") >= 0) o = t.getData("text/html").replace(/<\/?meta[^>]*>/g, "");
                        else if (Object(h.indexOf)(n, "text/uri-list") >= 0) o = {
                            type: "link",
                            attributes: {
                                href: o
                            },
                            content: o
                        };
                        else if (Object(h.indexOf)(n, "text/json") >= 0) {
                            var c = t.getData("text/json");
                            c && (o = JSON.parse(c))
                        }
                        var u = {
                            content: o
                        };
                        return e.trigger("canvas:dragdata", t, u), u
                    }
                }]), t
            }(),
            p = {
                stylePrefix: "cv-",
                scripts: [],
                styles: [],
                customBadgeLabel: "",
                autoscrollLimit: 50,
                notTextable: ["button", "a", "input[type=checkbox]", "input[type=radio]"]
            },
            g = n(1),
            v = n.n(g),
            m = n(5),
            b = n(33);

        function y(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }
        var w = v.a.Model.extend({
                defaults: {
                    wrapper: "",
                    width: null,
                    height: null,
                    head: "",
                    x: 0,
                    y: 0,
                    root: 0,
                    components: 0,
                    styles: 0,
                    attributes: {}
                },
                initialize: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.attributes,
                        r = n.root,
                        i = n.styles,
                        o = n.components;
                    this.set("head", []), this.em = e.em;
                    var a = {
                        em: e.em,
                        config: e.em.get("DomComponents").getConfig(),
                        frame: this
                    };
                    !r && this.set("root", new m.default({
                        type: "wrapper",
                        components: o || []
                    }, a)), (!i || Object(h.isString)(i)) && this.set("styles", new b.a(i, a))
                },
                remove: function() {
                    this.view = 0;
                    var t = this.collection;
                    return t && t.remove(this)
                },
                getHead: function() {
                    return i()(this.get("head"))
                },
                setHead: function(t) {
                    return this.set("head", i()(t))
                },
                addHeadItem: function(t) {
                    var e = this.getHead();
                    e.push(t), this.setHead(e)
                },
                getHeadByAttr: function(t, e, n) {
                    return this.getHead().filter(function(r) {
                        return r.attributes && r.attributes[t] == e && (!n || n === r.tag)
                    })[0]
                },
                removeHeadByAttr: function(t, e, n) {
                    var r = this.getHead(),
                        i = this.getHeadByAttr(t, e, n),
                        o = r.indexOf(i);
                    o >= 0 && (r.splice(o, 1), this.setHead(r))
                },
                addLink: function(t) {
                    var e = "link";
                    !this.getHeadByAttr("href", t, e) && this.addHeadItem({
                        tag: e,
                        attributes: {
                            href: t,
                            rel: "stylesheet"
                        }
                    })
                },
                removeLink: function(t) {
                    this.removeHeadByAttr("href", t, "link")
                },
                addScript: function(t) {
                    var e = "script";
                    !this.getHeadByAttr("src", t, e) && this.addHeadItem({
                        tag: e,
                        attributes: {
                            src: t
                        }
                    })
                },
                removeScript: function(t) {
                    this.removeHeadByAttr("src", t, "script")
                },
                _emitUpdated: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    this.em.trigger("frame:updated", function(t) {
                        for (var e = 1; e < arguments.length; e++) {
                            var n = null != arguments[e] ? arguments[e] : {};
                            e % 2 ? y(Object(n), !0).forEach(function(e) {
                                a()(t, e, n[e])
                            }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : y(Object(n)).forEach(function(e) {
                                Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                            })
                        }
                        return t
                    }({
                        frame: this
                    }, t))
                }
            }),
            x = v.a.Collection.extend({
                model: w,
                initialize: function() {
                    Object(h.bindAll)(this, "itemLoaded")
                },
                itemLoaded: function() {
                    this.loadedItems++, this.loadedItems >= this.itemsToLoad && (this.trigger("loaded:all"), this.listenToLoadItems(0))
                },
                listenToLoad: function() {
                    this.loadedItems = 0, this.itemsToLoad = this.length, this.listenToLoadItems(1)
                },
                listenToLoadItems: function(t) {
                    var e = this;
                    this.forEach(function(n) {
                        return n[t ? "on" : "off"]("loaded", e.itemLoaded)
                    })
                }
            }),
            O = v.a.Model.extend({
                defaults: {
                    frame: "",
                    frames: "",
                    wrapper: "",
                    rulers: !1,
                    zoom: 100,
                    x: 0,
                    y: 0
                },
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = t.em,
                        n = t.styles,
                        r = void 0 === n ? [] : n,
                        i = t.scripts,
                        o = void 0 === i ? [] : i,
                        a = e && e.getWrapper(),
                        s = e && e.getStyle(),
                        l = new w({
                            root: a,
                            styles: s
                        }, t);
                    r.forEach(function(t) {
                        return l.addLink(t)
                    }), o.forEach(function(t) {
                        return l.addScript(t)
                    }), this.em = e, this.set("frame", l), this.set("frames", new x([l], t)), this.listenTo(this, "change:zoom", this.onZoomChange), this.listenTo(e, "change:device", this.updateDevice)
                },
                updateDevice: function() {
                    var t = this.em,
                        e = t.getDeviceModel(),
                        n = t.getCurrentFrameModel();
                    if (n && e) {
                        var r = e.attributes,
                            i = r.width,
                            o = r.height;
                        n.set({
                            width: i,
                            height: o
                        })
                    }
                },
                onZoomChange: function() {
                    this.get("zoom") < 1 && this.set("zoom", 1)
                }
            }),
            C = n(20),
            S = n(37),
            k = n(6),
            j = n(9);

        function T(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function P(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? T(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : T(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var E = v.a.View.extend({
                tagName: "iframe",
                attributes: {
                    allowfullscreen: "allowfullscreen",
                    "data-frame-el": !0
                },
                initialize: function(t) {
                    Object(h.bindAll)(this, "updateClientY", "stopAutoscroll", "autoscroll", "_emitUpdate");
                    var e = this.model,
                        n = this.el;
                    this.config = P(P({}, t.config || {}), {}, {
                        frameView: this
                    }), this.ppfx = this.config.pStylePrefix || "", this.em = this.config.em, this.listenTo(e, "change:head", this.updateHead), e.view = this, Object(s.w)(n, this)
                },
                updateHead: function() {
                    var t = this.getHead();
                    Object(j.f)(t), Object(j.c)(t, this.model.getHead())
                },
                getEl: function() {
                    return this.el
                },
                getWindow: function() {
                    return this.getEl().contentWindow
                },
                getDoc: function() {
                    return this.getEl().contentDocument
                },
                getHead: function() {
                    return this.getDoc().querySelector("head")
                },
                getBody: function() {
                    return this.getDoc().querySelector("body")
                },
                getWrapper: function() {
                    return this.getBody().querySelector("[data-gjs-type=wrapper]")
                },
                getJsContainer: function() {
                    return this.jsContainer || (this.jsContainer = Object(j.e)("div", {
                        class: "".concat(this.ppfx, "js-cont")
                    })), this.jsContainer
                },
                getToolsEl: function() {
                    var t = this.config.frameWrapView;
                    return t && t.elTools
                },
                getGlobalToolsEl: function() {
                    return this.em.get("Canvas").getGlobalToolsEl()
                },
                getHighlighter: function() {
                    return this._getTool("[data-hl]")
                },
                getBadgeEl: function() {
                    return this._getTool("[data-badge]")
                },
                getOffsetViewerEl: function() {
                    return this._getTool("[data-offset]")
                },
                getRect: function() {
                    return this.rect || (this.rect = this.el.getBoundingClientRect()), this.rect
                },
                getOffsetRect: function() {
                    var t = this.el,
                        e = this.getBody(),
                        n = e.scrollTop,
                        r = e.scrollLeft,
                        i = t.offsetHeight,
                        o = t.offsetWidth;
                    return {
                        top: t.offsetTop,
                        left: t.offsetLeft,
                        height: i,
                        width: o,
                        scrollTop: n,
                        scrollLeft: r,
                        scrollBottom: n + i,
                        scrollRight: r + o
                    }
                },
                _getTool: function(t) {
                    var e = this.getToolsEl();
                    return this[t] || (this[t] = e.querySelector(t)), this[t]
                },
                remove: function() {
                    var t = this.root,
                        e = this.model;
                    this._toggleEffects(), v.a.View.prototype.remove.apply(this, arguments), t.remove(), e.remove()
                },
                startAutoscroll: function() {
                    var t = this;
                    this.lastMaxHeight = this.getWrapper().offsetHeight - this.el.offsetHeight, setTimeout(function() {
                        t._toggleAutoscrollFx(1), requestAnimationFrame(t.autoscroll)
                    }, 0)
                },
                autoscroll: function() {
                    if (this.dragging) {
                        var t = this.lastClientY,
                            e = this.em.get("Canvas"),
                            n = this.getWindow(),
                            r = this.getBody().scrollTop,
                            i = t || 0,
                            o = e.getConfig().autoscrollLimit,
                            a = this.getRect().height - o,
                            s = r;
                        i < o && (s -= o - i), i > a && (s += i - a), !Object(h.isUndefined)(t) && s !== r && s > 0 && s < this.lastMaxHeight && (this.getGlobalToolsEl().style.opacity = 0, this.showGlobalTools(), n.scrollTo(0, s)), requestAnimationFrame(this.autoscroll)
                    }
                },
                updateClientY: function(t) {
                    t.preventDefault(), this.lastClientY = Object(s.h)(t).clientY * this.em.getZoomDecimal()
                },
                showGlobalTools: Object(h.debounce)(function() {
                    this.getGlobalToolsEl().style.opacity = ""
                }, 50),
                stopAutoscroll: function() {
                    this.dragging && this._toggleAutoscrollFx()
                },
                _toggleAutoscrollFx: function(t) {
                    this.dragging = t;
                    var e = this.getWindow(),
                        n = t ? "on" : "off",
                        r = {
                            on: s.v,
                            off: s.u
                        };
                    r[n](e, "mousemove dragover", this.updateClientY), r[n](e, "mouseup", this.stopAutoscroll)
                },
                render: function() {
                    var t = this.el,
                        e = this.$el,
                        n = this.ppfx,
                        r = this.config;
                    return e.attr({
                        class: n + "frame"
                    }), r.scripts.length ? this.renderScripts() : r.renderContent && (t.onload = this.renderBody.bind(this)), this
                },
                renderScripts: function() {
                    var t = this,
                        e = this.el,
                        n = this.config;
                    e.onload = function() {
                        return function n(r) {
                            if (r.length > 0) {
                                var i = r.shift(),
                                    o = Object(j.e)("script", P({
                                        type: "text/javascript"
                                    }, Object(h.isString)(i) ? {
                                        src: i
                                    } : i));
                                o.onerror = o.onload = n.bind(null, r), e.contentDocument.head.appendChild(o)
                            } else t.renderBody()
                        }(i()(n.scripts))
                    }
                },
                renderBody: function() {
                    var t = this,
                        e = this.config,
                        n = this.model,
                        r = this.ppfx,
                        i = n.get("root"),
                        o = n.get("styles"),
                        a = e.em,
                        l = this.getDoc(),
                        c = this.getHead(),
                        u = this.getBody(),
                        d = this.getWindow(),
                        f = a.get("Config"),
                        p = [];
                    d._isEditor = !0, e.styles.forEach(function(t) {
                        return p.push(Object(h.isString)(t) ? {
                            tag: "link",
                            attributes: {
                                href: t,
                                rel: "stylesheet"
                            }
                        } : {
                            tag: "link",
                            attributes: P({
                                rel: "stylesheet"
                            }, t)
                        })
                    }), p.length && Object(j.c)(c, p), Object(j.a)(u, "<style>\n      ".concat(f.baseCss || "", "\n\n      .").concat(r, "dashed *[data-highlightable] {\n        outline: 1px dashed rgba(170,170,170,0.7);\n        outline-offset: -2px;\n      }\n\n      .").concat(r, "selected {\n        outline: 3px solid #3b97e3 !important;\n        outline-offset: -3px;\n      }\n\n      .").concat(r, "selected-parent {\n        outline: 2px solid ").concat("#ffca6f", " !important\n      }\n\n      .").concat(r, "no-select {\n        user-select: none;\n        -webkit-user-select:none;\n        -moz-user-select: none;\n      }\n\n      .").concat(r, "freezed {\n        opacity: 0.5;\n        pointer-events: none;\n      }\n\n      .").concat(r, "no-pointer {\n        pointer-events: none;\n      }\n\n      .").concat(r, "plh-image {\n        background: #f5f5f5;\n        border: none;\n        height: 100px;\n        width: 100px;\n        display: block;\n        outline: 3px solid #ffca6f;\n        cursor: pointer;\n        outline-offset: -2px\n      }\n\n      .").concat(r, "grabbing {\n        cursor: grabbing;\n        cursor: -webkit-grabbing;\n      }\n\n      .").concat(r, "is__grabbing {\n        overflow-x: hidden;\n      }\n\n      .").concat(r, "is__grabbing,\n      .").concat(r, "is__grabbing * {\n        cursor: grabbing !important;\n      }\n\n      ").concat(f.canvasCss || "", "\n      ").concat(f.protectedCss || "", "\n    </style>")), this.root = new k.default({
                        model: i,
                        config: P(P({}, i.config), {}, {
                            frameView: this
                        })
                    }).render(), Object(j.a)(u, this.root.el), Object(j.a)(u, new S.a({
                        collection: o,
                        config: P(P({}, a.get("CssComposer").getConfig()), {}, {
                            frameView: this
                        })
                    }).render().el), Object(j.a)(u, this.getJsContainer()), Object(s.v)(u, "click", function(t) {
                        return t && "A" == t.target.tagName && t.preventDefault()
                    }), Object(s.v)(u, "submit", function(t) {
                        return t && t.preventDefault()
                    }), [{
                        event: "keydown keyup keypress",
                        class: "KeyboardEvent"
                    }, {
                        event: "mousemove",
                        class: "MouseEvent"
                    }, {
                        event: "wheel",
                        class: "WheelEvent"
                    }].forEach(function(e) {
                        return e.event.split(" ").forEach(function(n) {
                            l.addEventListener(n, function(n) {
                                return t.el.dispatchEvent(Object(j.d)(n, e.class))
                            })
                        })
                    }), this._toggleEffects(1), n.trigger("loaded")
                },
                _toggleEffects: function(t) {
                    (t ? s.v : s.u)(this.getWindow(), "".concat(j.i, " resize"), this._emitUpdate)
                },
                _emitUpdate: function() {
                    this.model._emitUpdated()
                }
            }),
            M = n(17);

        function D(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function A(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? D(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : D(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var L = v.a.View.extend({
                events: {
                    "click [data-action-remove]": "remove",
                    "mousedown [data-action-move]": "startDrag"
                },
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    Object(h.bindAll)(this, "onScroll", "frameLoaded", "updateOffset", "remove", "startDrag");
                    var n = this.model,
                        r = A(A({}, t.config || e), {}, {
                            frameWrapView: this
                        }),
                        i = r.canvasView,
                        o = r.em;
                    this.cv = i, this.config = r, this.em = o, this.canvas = o && o.get("Canvas"), this.ppfx = r.pStylePrefix || "", this.frame = new E({
                        model: n,
                        config: r
                    }), this.classAnim = "".concat(this.ppfx, "frame-wrapper--anim"), this.listenTo(n, "loaded", this.frameLoaded), this.listenTo(n, "change:x change:y", this.updatePos), this.listenTo(n, "change:width change:height", this.updateSize), this.listenTo(n, "destroy remove", this.remove), this.updatePos(), this.setupDragger()
                },
                setupDragger: function() {
                    var t, e, n, r = this,
                        i = this.canvas,
                        o = this.model,
                        a = function(t) {
                            i.toggleFramesEvents(t)
                        };
                    this.dragger = new M.a({
                        onStart: function() {
                            var i = o.attributes,
                                s = i.x,
                                l = i.y;
                            n = r.em.getZoomMultiplier(), t = s, e = l, a()
                        },
                        onEnd: function() {
                            return a(1)
                        },
                        setPosition: function(r) {
                            o.set({
                                x: t + r.x * n,
                                y: e + r.y * n
                            })
                        }
                    })
                },
                startDrag: function(t) {
                    t && this.dragger.start(t)
                },
                remove: function() {
                    return this.frame.remove(), this.frame = {}, v.a.View.prototype.remove.apply(this, arguments), this
                },
                updateOffset: Object(h.debounce)(function() {
                    var t = this.em,
                        e = this.$el,
                        n = this.frame;
                    t.runDefault({
                        preserveSelected: 1
                    }), e.removeClass(this.classAnim), n.model._emitUpdated()
                }),
                updatePos: function(t) {
                    var e = this.model,
                        n = this.el,
                        r = e.attributes,
                        i = r.x,
                        o = r.y,
                        a = n.style;
                    this.frame.rect = 0, a.left = isNaN(i) ? i : "".concat(i, "px"), a.top = isNaN(o) ? o : "".concat(o, "px"), t && this.updateOffset()
                },
                updateSize: Object(h.debounce)(function() {
                    this.updateDim()
                }),
                updateDim: function() {
                    var t = this.em,
                        e = this.el,
                        n = this.$el,
                        r = this.model,
                        i = this.classAnim,
                        o = r.attributes,
                        a = o.width,
                        s = o.height,
                        l = e.style,
                        c = l.width || "",
                        u = l.height || "",
                        d = a || "",
                        f = s || "",
                        p = c == d && u == f;
                    if (this.frame.rect = 0, n.addClass(i), l.width = Object(h.isNumber)(d) ? "".concat(d).concat("px") : d, l.height = Object(h.isNumber)(f) ? "".concat(f).concat("px") : f, Object(h.isNull)(a) || Object(h.isNull)(s)) {
                        var g = A(A({}, a ? {} : {
                            width: e.offsetWidth
                        }), s ? {} : {
                            height: e.offsetHeight
                        });
                        r.set(g, {
                            silent: 1
                        })
                    }
                    t.stopDefault({
                        preserveSelected: 1
                    }), p ? this.updateOffset() : n.one(j.i, this.updateOffset)
                },
                onScroll: function() {
                    var t = this.frame;
                    this.em.trigger("frame:scroll", {
                        frame: t,
                        body: t.getBody(),
                        target: t.getWindow()
                    })
                },
                frameLoaded: function() {
                    this.frame.getWindow().onscroll = this.onScroll, this.updateDim()
                },
                render: function() {
                    var t = this.frame,
                        e = this.$el,
                        n = this.ppfx,
                        r = this.cv,
                        i = this.model,
                        o = this.el,
                        a = i.attributes.onRender;
                    t.render(), e.empty().attr({
                        class: "".concat(n, "frame-wrapper")
                    }).append('\n      <div class="'.concat(n, 'frame-wrapper__top gjs-two-color" data-frame-top>\n        <div class="').concat(n, 'frame-wrapper__name" data-action-move>\n          ').concat(i.get("name") || "", '\n        </div>\n        <div class="').concat(n, 'frame-wrapper__top-r">\n          <div class="').concat(n, 'frame-wrapper__icon" data-action-remove style="display: none">\n            <svg viewBox="0 0 24 24"><path d="M19 4h-3.5l-1-1h-5l-1 1H5v2h14M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12z"></path></svg>\n          </div>\n        </div>\n      </div>\n      <div class="').concat(n, 'frame-wrapper__right" data-frame-right></div>\n      <div class="').concat(n, 'frame-wrapper__left" data-frame-left></div>\n      <div class="').concat(n, 'frame-wrapper__bottom" data-frame-bottom></div>\n      ')).append(t.el);
                    var s = Object(j.e)("div", {
                        class: "".concat(n, "tools"),
                        style: "pointer-events:none; opacity: 0"
                    }, '\n      <div class="'.concat(n, 'highlighter" data-hl></div>\n      <div class="').concat(n, 'badge" data-badge></div>\n      <div class="').concat(n, 'placeholder">\n        <div class="').concat(n, 'placeholder-int"></div>\n      </div>\n      <div class="').concat(n, 'ghost"></div>\n      <div class="').concat(n, 'toolbar" style="pointer-events:all"></div>\n      <div class="').concat(n, 'resizer"></div>\n      <div class="').concat(n, 'offset-v" data-offset>\n        <div class="gjs-marginName" data-offset-m>\n          <div class="gjs-margin-v-el gjs-margin-v-top" data-offset-m-t></div>\n          <div class="gjs-margin-v-el gjs-margin-v-bottom" data-offset-m-b></div>\n          <div class="gjs-margin-v-el gjs-margin-v-left" data-offset-m-l></div>\n          <div class="gjs-margin-v-el gjs-margin-v-right" data-offset-m-r></div>\n        </div>\n        <div class="gjs-paddingName" data-offset-m>\n          <div class="gjs-padding-v-el gjs-padding-v-top" data-offset-p-t></div>\n          <div class="gjs-padding-v-el gjs-padding-v-bottom" data-offset-p-b></div>\n          <div class="gjs-padding-v-el gjs-padding-v-left" data-offset-p-l></div>\n          <div class="gjs-padding-v-el gjs-padding-v-right" data-offset-p-r></div>\n        </div>\n      </div>\n      <div class="').concat(n, 'offset-fixed-v"></div>\n    '));
                    return this.elTools = s, r.toolsWrapper.appendChild(s), a && a({
                        el: o,
                        elTop: o.querySelector("[data-frame-top]"),
                        elRight: o.querySelector("[data-frame-right]"),
                        elBottom: o.querySelector("[data-frame-bottom]"),
                        elLeft: o.querySelector("[data-frame-left]"),
                        frame: i,
                        frameWrapperView: this,
                        remove: this.remove,
                        startDrag: this.startDrag
                    }), this
                }
            }),
            _ = C.a.extend({
                itemView: L,
                autoAdd: 1,
                init: function() {
                    this.listenTo(this.collection, "reset", this.render)
                },
                onRender: function() {
                    var t = this.config,
                        e = this.$el,
                        n = t.em;
                    n && e.attr({
                        class: "".concat(n.getConfig("stylePrefix"), "frames")
                    })
                }
            });

        function N(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function I(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? N(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : N(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var F, V = v.a.$,
            R = v.a.View.extend({
                events: {
                    wheel: "onWheel"
                },
                template: function() {
                    var t = this.pfx;
                    return '\n      <div class="'.concat(t, 'canvas__frames" data-frames></div>\n      <div id="').concat(t, 'tools" class="').concat(t, 'canvas__tools" data-tools></div>\n    ')
                },
                initialize: function(t) {
                    Object(h.bindAll)(this, "clearOff", "onKeyPress", "onCanvasMove"), Object(s.v)(window, "scroll resize", this.clearOff);
                    var e = this.model,
                        n = e.get("frames");
                    this.config = t.config || {}, this.em = this.config.em || {}, this.pfx = this.config.stylePrefix || "", this.ppfx = this.config.pStylePrefix || "", this.className = this.config.stylePrefix + "canvas";
                    var r = this.em,
                        i = this.config;
                    this.frames = new _({
                        collection: n,
                        config: I(I({}, i), {}, {
                            canvasView: this,
                            renderContent: 1
                        })
                    }), this.listenTo(r, "change:canvasOffset", this.clearOff), this.listenTo(r, "component:selected", this.checkSelected), this.listenTo(e, "change:zoom change:x change:y", this.updateFrames), this.listenTo(n, "loaded:all", function() {
                        return r.trigger("loaded")
                    }), this.toggleListeners(1)
                },
                checkSelected: function(t) {
                    var e = (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}).scroll,
                        n = this.em.get("currentFrame");
                    e && t.views.forEach(function(t) {
                        t._getFrame() !== n && t.scrollIntoView(e)
                    })
                },
                remove: function() {
                    var t = this.model.get("frames");
                    t.remove(t.models), this.frames.remove(), this.frames = {}, v.a.View.prototype.remove.apply(this, arguments), this.toggleListeners()
                },
                preventDefault: function(t) {
                    t && (t.preventDefault(), t._parentEvent && t._parentEvent.preventDefault())
                },
                onCanvasMove: function(t) {},
                toggleListeners: function(t) {
                    this.el, (t ? s.v : s.u)(document, "keypress", this.onKeyPress)
                },
                onKeyPress: function(t) {
                    var e = this.em;
                    " " !== Object(s.f)(t) || 1 === e.getZoomDecimal() || e.get("Canvas").isInputFocused() || (this.preventDefault(t), e.get("Editor").runCommand("core:canvas-move"))
                },
                onWheel: function(t) {
                    if ((t.ctrlKey || t.metaKey) && this.em.getConfig("multiFrames")) {
                        this.preventDefault(t);
                        var e = this.model,
                            n = Math.max(-1, Math.min(1, t.wheelDelta || -t.detail)),
                            r = e.get("zoom");
                        e.set("zoom", r + 2 * n)
                    }
                },
                updateFrames: function(t) {
                    var e = this.em,
                        n = this.model.attributes,
                        r = n.x,
                        i = n.y,
                        o = this.getZoom(),
                        a = {
                            preserveSelected: 1
                        },
                        s = o ? 1 / o : 1;
                    this.framesArea.style.transform = "scale(".concat(o, ") translate(").concat(r * s, "px, ").concat(i * s, "px)"), this.clearOff(), e.stopDefault(a), e.trigger("canvas:update", t), F && clearTimeout(F), F = setTimeout(function() {
                        return e.runDefault(a)
                    }, 300)
                },
                getZoom: function() {
                    return this.em.getZoomDecimal()
                },
                isElInViewport: function(t) {
                    var e = Object(s.e)(t),
                        n = Object(s.d)(e),
                        r = this.getFrameOffset(e),
                        i = n.top,
                        o = n.left;
                    return i >= 0 && o >= 0 && i <= r.height && o <= r.width
                },
                offset: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = Object(s.d)(t),
                        r = t.ownerDocument.body,
                        i = e.noScroll;
                    return {
                        top: n.top + (i ? 0 : r.scrollTop),
                        left: n.left + (i ? 0 : r.scrollLeft),
                        width: n.width,
                        height: n.height
                    }
                },
                clearOff: function() {
                    this.frmOff = null, this.cvsOff = null
                },
                getFrameOffset: function(t) {
                    if (!this.frmOff || t) {
                        var e = this.frame.el,
                            n = t ? t.ownerDocument.defaultView.frameElement : e;
                        this.frmOff = this.offset(n || e)
                    }
                    return this.frmOff
                },
                getCanvasOffset: function() {
                    return this.cvsOff || (this.cvsOff = this.offset(this.el)), this.cvsOff
                },
                getElementPos: function(t, e) {
                    var n = this.getZoom(),
                        r = e || {},
                        i = this.getFrameOffset(t),
                        o = this.getCanvasOffset(),
                        a = this.offset(t, e),
                        s = r.avoidFrameOffset ? 0 : i.top,
                        l = r.avoidFrameOffset ? 0 : i.left;
                    return {
                        top: a.top * n + s - o.top,
                        left: a.left * n + l - o.left,
                        height: a.height * n,
                        width: a.width * n,
                        zoom: n,
                        rect: a
                    }
                },
                getElementOffsets: function(t) {
                    var e = this;
                    if (!t || Object(s.r)(t)) return {};
                    var n = {},
                        r = window.getComputedStyle(t);
                    return ["marginTop", "marginRight", "marginBottom", "marginLeft", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft"].forEach(function(t) {
                        n[t] = parseFloat(r[t]) * e.getZoom()
                    }), n
                },
                getPosition: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.frame.el.contentDocument;
                    if (e) {
                        var n = e.body,
                            r = this.getZoom(),
                            i = this.getFrameOffset(),
                            o = this.getCanvasOffset(),
                            a = t.noScroll;
                        return {
                            top: i.top + (a ? 0 : n.scrollTop) * r - o.top,
                            left: i.left + (a ? 0 : n.scrollLeft) * r - o.left,
                            width: o.width,
                            height: o.height
                        }
                    }
                },
                updateScript: function(t) {
                    var e = t.model,
                        n = e.getId();
                    t.scriptContainer || (t.scriptContainer = V('<div data-id="'.concat(n, '">')), this.getJsContainer().appendChild(t.scriptContainer.get(0))), t.el.id = n, t.scriptContainer.html("");
                    var r = document.createElement("script"),
                        i = e.getScriptString(),
                        o = e.get("script-props") ? i : "function(){".concat(i, ";}"),
                        a = JSON.stringify(e.__getScriptProps());
                    r.innerHTML = "\n      setTimeout(function() {\n        var item = document.getElementById('".concat(n, "');\n        if (!item) return;\n        (").concat(o, ".bind(item))(").concat(a, ")\n      }, 1);"), setTimeout(function() {
                        return t.scriptContainer.get(0).appendChild(r)
                    }, 0)
                },
                getJsContainer: function(t) {
                    var e = this.getFrameView(t);
                    return e && e.getJsContainer()
                },
                getFrameView: function(t) {
                    return t && t._getFrame() || this.em.get("currentFrame")
                },
                render: function() {
                    var t = this.el,
                        e = this.$el,
                        n = this.ppfx,
                        r = this.model,
                        i = this.em,
                        o = this.frames,
                        a = i.get("CssComposer"),
                        s = r.get("wrapper");
                    e.html(this.template());
                    var l = e.find("[data-frames]");
                    this.framesArea = l.get(0), this.wrapper = s, s && "function" == typeof s.render && r.get("frame").set({
                        wrapper: s,
                        root: s.getWrapper(),
                        styles: a.getAll()
                    });
                    var c = e.find("[data-tools]");
                    this.toolsWrapper = c.get(0), c.append('\n      <div class="'.concat(n, "tools ").concat(n, 'tools-gl" style="pointer-events:none">\n        <div class="').concat(n, 'placeholder">\n          <div class="').concat(n, 'placeholder-int"></div>\n        </div>\n      </div>\n      <div id="').concat(n, 'tools" style="pointer-events:none">\n        <div class="').concat(n, 'badge"></div>\n        <div class="').concat(n, 'ghost"></div>\n        <div class="').concat(n, 'toolbar" style="pointer-events:all"></div>\n        <div class="').concat(n, 'resizer"></div>\n        <div class="').concat(n, 'offset-v"></div>\n        <div class="').concat(n, 'offset-fixed-v"></div>\n      </div>\n    '));
                    var u = t.querySelector("#".concat(n, "tools"));
                    this.hlEl = t.querySelector(".".concat(n, "highlighter")), this.badgeEl = t.querySelector(".".concat(n, "badge")), this.placerEl = t.querySelector(".".concat(n, "placeholder")), this.ghostEl = t.querySelector(".".concat(n, "ghost")), this.toolbarEl = t.querySelector(".".concat(n, "toolbar")), this.resizerEl = t.querySelector(".".concat(n, "resizer")), this.offsetEl = t.querySelector(".".concat(n, "offset-v")), this.fixedOffsetEl = t.querySelector(".".concat(n, "offset-fixed-v")), this.toolsGlobEl = t.querySelector(".".concat(n, "tools-gl")), this.toolsEl = u, this.el.className = this.className;
                    var d = r.get("frames");
                    return d.listenToLoad(), o.render(), i.setCurrentFrame(d.at(0).view), l.append(o.el), this.frame = d.at(0).view, this
                }
            });

        function z(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function H(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? z(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : z(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n = {};
            return {
                getCanvasView: function() {
                    return e
                },
                name: "Canvas",
                init: function() {
                    var r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    n = H(H(H({}, p), r), {}, {
                        module: this
                    }), this.em = n.em;
                    var i = n.pStylePrefix;
                    i && (n.stylePrefix = i + n.stylePrefix), t = new O(r), e = new R({
                        model: t,
                        config: n
                    });
                    var o = n.em.get("DomComponents");
                    return o && this.setWrapper(o), this.model = t, this.startAutoscroll = this.startAutoscroll.bind(this), this.stopAutoscroll = this.stopAutoscroll.bind(this), this
                },
                getConfig: function() {
                    return n
                },
                setWrapper: function(e) {
                    t.set("wrapper", e)
                },
                getElement: function() {
                    return e.el
                },
                getFrame: function(e) {
                    return e ? this.getFrames()[e] : t.get("frame")
                },
                getFrameEl: function() {
                    var t = e.frame;
                    return t && t.el
                },
                getFramesEl: function() {
                    return e.framesArea
                },
                getWindow: function() {
                    return this.getFrameEl().contentWindow
                },
                getDocument: function() {
                    var t = this.getFrameEl();
                    return t && t.contentDocument
                },
                getBody: function() {
                    var t = this.getDocument();
                    return t && t.body
                },
                getWrapperEl: function() {
                    var t = this.getBody();
                    return t && t.querySelector("#wrapper")
                },
                _getCompFrame: function(t) {
                    return t && t._getFrame()
                },
                _getLocalEl: function(t, e, n) {
                    var r = t,
                        i = this._getCompFrame(e);
                    return i ? i[n]() : r
                },
                getGlobalToolsEl: function() {
                    return e.toolsGlobEl
                },
                getToolsEl: function(t) {
                    return this._getLocalEl(e.toolsEl, t, "getToolsEl")
                },
                getHighlighter: function(t) {
                    return this._getLocalEl(e.hlEl, t, "getHighlighter")
                },
                getBadgeEl: function(t) {
                    return this._getLocalEl(e.badgeEl, t, "getBadgeEl")
                },
                getPlacerEl: function() {
                    return e.placerEl
                },
                getGhostEl: function() {
                    return e.ghostEl
                },
                getToolbarEl: function() {
                    return e.toolbarEl
                },
                getResizerEl: function() {
                    return e.resizerEl
                },
                getOffsetViewerEl: function(t) {
                    return this._getLocalEl(e.offsetEl, t, "getOffsetViewerEl")
                },
                getFixedOffsetViewerEl: function() {
                    return e.fixedOffsetEl
                },
                render: function() {
                    return e.render().el
                },
                getOffset: function() {
                    var t = this.offset(this.getFrameEl()),
                        e = this.offset(this.getElement());
                    return {
                        top: t.top - e.top,
                        left: t.left - e.left
                    }
                },
                offset: function(t) {
                    return e.offset(t)
                },
                setCustomBadgeLabel: function(t) {
                    n.customBadgeLabel = t
                },
                getElementPos: function(t, n) {
                    return e.getElementPos(t, n)
                },
                getElementOffsets: function(t) {
                    return e.getElementOffsets(t)
                },
                getRect: function() {
                    var t = e.getPosition(),
                        n = t.top,
                        r = t.left;
                    return H(H({}, e.getCanvasOffset()), {}, {
                        topScroll: n,
                        leftScroll: r
                    })
                },
                getTargetToElementDim: function(t, r) {
                    var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        o = i || {},
                        a = e.getPosition();
                    if (a) {
                        var s = o.elPos || e.getElementPos(r),
                            l = i.toRight || 0,
                            c = o.targetHeight || t.offsetHeight,
                            u = o.targetWidth || t.offsetWidth,
                            d = o.event || null,
                            h = s.top - c,
                            f = s.left;
                        f += l ? s.width : 0;
                        var p = (f = l ? f - u : f) < a.left ? a.left : f,
                            g = h < a.top ? a.top : h,
                            v = {
                                top: g = g > s.top + s.height ? s.top + s.height : g,
                                left: p,
                                elementTop: s.top,
                                elementLeft: s.left,
                                elementWidth: s.width,
                                elementHeight: s.height,
                                targetWidth: t.offsetWidth,
                                targetHeight: t.offsetHeight,
                                canvasTop: a.top,
                                canvasLeft: a.left,
                                canvasWidth: a.width,
                                canvasHeight: a.height
                            };
                        return d && n.em && n.em.trigger(d, v), v
                    }
                },
                canvasRectOffset: function(t, e) {
                    var n = this,
                        r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        i = function(t) {
                            var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,
                                i = arguments.length > 2 ? arguments[2] : void 0,
                                o = n.em.getZoomDecimal(),
                                a = e ? "top" : "left",
                                s = t.ownerDocument,
                                l = r.offset ? function(t) {
                                    var e = t.defaultView;
                                    return e && e.frameElement
                                }(s) : {},
                                c = l.offsetTop,
                                u = void 0 === c ? 0 : c,
                                d = l.offsetLeft,
                                h = void 0 === d ? 0 : d,
                                f = s.body || {},
                                p = f.scrollTop,
                                g = void 0 === p ? 0 : p,
                                v = f.scrollLeft,
                                m = e ? g : void 0 === v ? 0 : v,
                                b = e ? u : h;
                            return i[a] - (m - b) * o
                        };
                    return {
                        top: i(t, 1, e),
                        left: i(t, 0, e)
                    }
                },
                getTargetToElementFixed: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = n.pos || this.getElementPos(t),
                        i = n.canvasOff || this.canvasRectOffset(t, r),
                        o = e.offsetHeight || 0,
                        a = e.offsetWidth || 0,
                        s = r.left + r.width,
                        l = this.getCanvasView(),
                        c = l.getPosition(),
                        u = l.getFrameOffset(t),
                        d = n.event,
                        h = -o,
                        f = r.width - a;
                    f = r.left < -f ? -r.left : f, f = s > c.width ? f - (s - c.width) : f;
                    var p = r.height + o,
                        g = p < u.height;
                    i.top < o && (g ? h += p : h = -i.top < r.height ? -i.top : r.height);
                    var v = {
                        top: h,
                        left: f,
                        canvasOffsetTop: i.top,
                        canvasOffsetLeft: i.left
                    };
                    return d && this.em.trigger(d, v), v
                },
                getMouseRelativePos: function(t, e) {
                    var n = 0,
                        r = 0,
                        i = (e || {}).subWinOffset,
                        o = t.target.ownerDocument,
                        a = o.defaultView || o.parentWindow,
                        s = a.frameElement,
                        l = i ? a.pageYOffset : 0,
                        c = i ? a.pageXOffset : 0;
                    if (s) {
                        var u = s.getBoundingClientRect();
                        n = u.top || 0, r = u.left || 0
                    }
                    return {
                        y: t.clientY + n - l,
                        x: t.clientX + r - c
                    }
                },
                getMouseRelativeCanvas: function(t, n) {
                    var r = this.getZoomDecimal(),
                        i = e.getPosition(n),
                        o = i.top,
                        a = i.left;
                    return {
                        y: t.clientY * r + o,
                        x: t.clientX * r + a
                    }
                },
                hasFocus: function() {
                    return this.getDocument().hasFocus()
                },
                isInputFocused: function() {
                    var t = this.getDocument(),
                        e = this.getFrameEl(),
                        n = ["body"].concat(i()(this.getConfig().notTextable)),
                        r = e && document.activeElement === e ? t && t.activeElement : document.activeElement;
                    return r && !n.some(function(t) {
                        return r.matches(t)
                    })
                },
                scrollTo: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = Object(s.e)(t),
                        r = n && Object(s.j)(n);
                    r && r.scrollIntoView(e)
                },
                startAutoscroll: function(t) {
                    var e = t && t.view || this.em.getCurrentFrame();
                    e && e.startAutoscroll()
                },
                stopAutoscroll: function(t) {
                    var e = t && t.view || this.em.getCurrentFrame();
                    e && e.stopAutoscroll()
                },
                postRender: function() {
                    Object(s.k)(n.em) && (this.droppable = new f(n.em))
                },
                setZoom: function(e) {
                    return t.set("zoom", parseFloat(e)), this
                },
                getZoom: function() {
                    return parseFloat(t.get("zoom"))
                },
                getZoomDecimal: function() {
                    return this.getZoom() / 100
                },
                getZoomMultiplier: function() {
                    var t = this.getZoomDecimal();
                    return t ? 1 / t : 1
                },
                toggleFramesEvents: function(t) {
                    this.getFramesEl().style.pointerEvents = t ? "" : "none"
                },
                getFrameWrapperEl: function() {
                    return e.frame.getWrapper()
                },
                getFrames: function() {
                    return t.get("frames").map(function(t) {
                        return t
                    })
                },
                addFrame: function() {
                    var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return t.get("frames").add(H({}, e), H(H({}, n), {}, {
                        em: this.em
                    }))
                },
                destroy: function() {
                    var r = this;
                    t.stopListening(), e.remove(), [n, t, e].forEach(function(t) {
                        return {}
                    }), ["em", "model", "droppable"].forEach(function(t) {
                        return r[t] = {}
                    })
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(0),
            i = {
                stylePrefix: "trt-",
                appendTo: "",
                optionsTarget: [{
                    value: !1
                }, {
                    value: "_blank"
                }]
            },
            o = n(20),
            a = n(2),
            s = n.n(a),
            l = n(73),
            c = n.n(l),
            u = n(1),
            d = n.n(u),
            h = n(3);

        function f(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function p(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? f(Object(n), !0).forEach(function(e) {
                    s()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : f(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var g = d.a.$,
            v = d.a.View.extend({
                events: {},
                eventCapture: ["change"],
                appendInput: 1,
                attributes: function() {
                    return this.model.get("attributes")
                },
                templateLabel: function() {
                    var t = this.ppfx,
                        e = this.getLabel();
                    return '<div class="'.concat(t, 'label" title="').concat(e, '">').concat(e, "</div>")
                },
                templateInput: function() {
                    var t = this.clsField;
                    return '<div class="'.concat(t, '" data-input></div>')
                },
                initialize: function() {
                    var t = this,
                        e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).config,
                        n = void 0 === e ? {} : e,
                        r = this.model,
                        i = this.eventCapture,
                        o = r.target,
                        a = r.attributes.type;
                    this.config = n, this.em = n.em, this.pfx = n.stylePrefix || "", this.ppfx = n.pStylePrefix || "", this.target = o;
                    var s = this.ppfx;
                    this.clsField = "".concat(s, "field ").concat(s, "field-").concat(a), [
                        ["change:value", this.onValueChange],
                        ["remove", this.removeView]
                    ].forEach(function(e) {
                        var n = c()(e, 2),
                            i = n[0],
                            o = n[1];
                        r.off(i, o), t.listenTo(r, i, o)
                    }), r.view = this, this.listenTo(r, "change:label", this.render), this.listenTo(r, "change:placeholder", this.rerender), i.forEach(function(e) {
                        return t.events[e] = "onChange"
                    }), this.delegateEvents(), this.init()
                },
                getClbOpts: function() {
                    return {
                        component: this.target,
                        trait: this.model,
                        elInput: this.getInputElem()
                    }
                },
                removeView: function() {
                    this.remove(), this.removed()
                },
                init: function() {},
                removed: function() {},
                onRender: function() {},
                onUpdate: function() {},
                onEvent: function() {},
                onChange: function(t) {
                    var e = this.getInputElem();
                    e && !Object(r.isUndefined)(e.value) && this.model.set("value", e.value), this.onEvent(p(p({}, this.getClbOpts()), {}, {
                        event: t
                    }))
                },
                getValueForTarget: function() {
                    return this.model.get("value")
                },
                setInputValue: function(t) {
                    var e = this.getInputElem();
                    e && (e.value = t)
                },
                onValueChange: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                    if (n.fromTarget) this.setInputValue(t.get("value")), this.postUpdate();
                    else {
                        var r = this.getValueForTarget();
                        t.setTargetValue(r, n)
                    }
                },
                renderLabel: function() {
                    var t = this.$el,
                        e = this.target,
                        n = this.getLabel(),
                        r = this.templateLabel(e);
                    this.createLabel && (r = this.createLabel({
                        label: n,
                        component: e,
                        trait: this
                    }) || ""), t.find("[data-label]").append(r)
                },
                getLabel: function() {
                    var t = this.em,
                        e = this.model.attributes,
                        n = e.label,
                        r = e.name;
                    return t.t("traitManager.traits.labels.".concat(r)) || Object(h.c)(n || r).replace(/-/g, " ")
                },
                getComponent: function() {
                    return this.target
                },
                getInputEl: function() {
                    if (!this.$input) {
                        var t = this.em,
                            e = this.model,
                            n = e,
                            i = e.attributes.name,
                            o = n.get("placeholder") || n.get("default") || "",
                            a = n.get("type") || "text",
                            s = n.get("min"),
                            l = n.get("max"),
                            c = this.getModelValue(),
                            u = g('<input type="'.concat(a, '" placeholder="').concat(o, '">')),
                            d = t.t("traitManager.traits.attributes.".concat(i)) || {};
                        u.attr(d), Object(r.isUndefined)(c) || (n.set({
                            value: c
                        }, {
                            silent: !0
                        }), u.prop("value", c)), s && u.prop("min", s), l && u.prop("max", l), this.$input = u
                    }
                    return this.$input.get(0)
                },
                getInputElem: function() {
                    var t = this.input,
                        e = this.$input;
                    return t || e && e.get && e.get(0) || this.getElInput()
                },
                getModelValue: function() {
                    var t, e = this.model,
                        n = this.target,
                        i = e.get("name");
                    if (e.get("changeProp")) t = n.get(i);
                    else {
                        var o = n.get("attributes");
                        t = e.get("value") || o[i]
                    }
                    return Object(r.isUndefined)(t) ? "" : t
                },
                getElInput: function() {
                    return this.elInput
                },
                renderField: function() {
                    var t = this.$el,
                        e = this.appendInput,
                        n = this.model,
                        i = t.find("[data-input]"),
                        o = i[i.length - 1],
                        a = n.el;
                    a || (a = this.createInput ? this.createInput(this.getClbOpts()) : this.getInputEl()), Object(r.isString)(a) ? (o.innerHTML = a, this.elInput = o.firstChild) : (e ? o.appendChild(a) : o.insertBefore(a, o.firstChild), this.elInput = a), n.el = this.elInput
                },
                hasLabel: function() {
                    var t = this.model.attributes.label;
                    return !this.noLabel && !1 !== t
                },
                rerender: function() {
                    this.model.el = null, this.render()
                },
                postUpdate: function() {
                    this.onUpdate(this.getClbOpts())
                },
                render: function() {
                    var t = this.$el,
                        e = this.pfx,
                        n = this.ppfx,
                        i = this.model.attributes,
                        o = i.type,
                        a = i.id,
                        s = this.hasLabel && this.hasLabel(),
                        l = "".concat(e, "trait");
                    this.$input = null;
                    var c = '<div class="'.concat(l, " ").concat(l, "--").concat(o, '">\n      ').concat(s ? '<div class="'.concat(n, 'label-wrp" data-label></div>') : "", '\n      <div class="').concat(n, "field-wrp ").concat(n, "field-wrp--").concat(o, '" data-input>\n        ').concat(this.templateInput ? Object(r.isFunction)(this.templateInput) ? this.templateInput(this.getClbOpts()) : this.templateInput : "", "\n      </div>\n    </div>");
                    return t.empty().append(c), s && this.renderLabel(), this.renderField(), this.el.className = "".concat(l, "__wrp ").concat(l, "__wrp-").concat(a), this.postUpdate(), this.onRender(this.getClbOpts()), this
                }
            }),
            m = d.a.$,
            b = v.extend({
                init: function() {
                    this.listenTo(this.model, "change:options", this.rerender)
                },
                templateInput: function() {
                    var t = this.ppfx,
                        e = this.clsField;
                    return '<div class="'.concat(e, '">\n      <div data-input></div>\n      <div class="').concat(t, 'sel-arrow">\n        <div class="').concat(t, 'd-s-arrow"></div>\n      </div>\n    </div>')
                },
                getInputEl: function() {
                    if (!this.$input) {
                        var t = this.model,
                            e = this.em,
                            n = t.get("name"),
                            i = t.get("options") || [],
                            o = [],
                            a = "<select>";
                        i.forEach(function(t) {
                            var i, s, l, c = "";
                            Object(r.isString)(t) ? (i = t, s = t) : (i = t.name || t.label || t.value, s = "".concat(Object(r.isUndefined)(t.value) ? t.id : t.value).replace(/"/g, "&quot;"), c += (l = t.style ? t.style.replace(/"/g, "&quot;") : "") ? ' style="'.concat(l, '"') : "");
                            var u = e.t("traitManager.traits.options.".concat(n, ".").concat(s)) || i;
                            a += '<option value="'.concat(s, '"').concat(c, ">").concat(u, "</option>"), o.push(s)
                        }), a += "</select>", this.$input = m(a);
                        var s = t.getTargetValue(),
                            l = o.indexOf(s) >= 0 ? s : t.get("default");
                        !Object(r.isUndefined)(l) && this.$input.val(l)
                    }
                    return this.$input.get(0)
                }
            }),
            y = v.extend({
                appendInput: 0,
                templateInput: function() {
                    var t = this.ppfx,
                        e = this.clsField;
                    return '<label class="'.concat(e, '" data-input>\n    <i class="').concat(t, 'chk-icon"></i>\n  </label>')
                },
                onChange: function() {
                    var t = this.getInputElem().checked;
                    this.model.set("value", this.getCheckedValue(t))
                },
                getCheckedValue: function(t) {
                    var e = t,
                        n = this.model.attributes,
                        i = n.valueTrue,
                        o = n.valueFalse;
                    return e && !Object(r.isUndefined)(i) && (e = i), e || Object(r.isUndefined)(o) || (e = o), e
                },
                getInputEl: function() {
                    for (var t = !this.$input, e = arguments.length, n = new Array(e), i = 0; i < e; i++) n[i] = arguments[i];
                    var o = v.prototype.getInputEl.apply(this, n);
                    if (t) {
                        var a, s, l = this.model,
                            c = this.target,
                            u = l.attributes,
                            d = (u.valueTrue, u.valueFalse),
                            h = l.get("name");
                        l.get("changeProp") ? s = a = c.get(h) : a = !(!(s = c.get("attributes")[h]) && "" !== s), Object(r.isUndefined)(d) || s !== d || (a = !1), o.checked = a
                    }
                    return o
                }
            }),
            w = n(32),
            x = v.extend({
                getValueForTarget: function() {
                    var t = this.model,
                        e = t.attributes,
                        n = e.value,
                        i = e.unit;
                    return Object(r.isUndefined)(n) || "" === n ? t.get("default") : n + i
                },
                getInputEl: function() {
                    if (!this.input) {
                        var t = this.ppfx,
                            e = this.model,
                            n = this.getModelValue(),
                            r = new w.a({
                                contClass: "".concat(t, "field-int"),
                                type: "number",
                                model: e,
                                ppfx: t
                            });
                        this.input = r.render(), this.$input = this.input.inputEl, this.$unit = this.input.unitEl, e.set("value", n, {
                            fromTarget: 1
                        }), this.$input.val(n), this.input = r.el
                    }
                    return this.input
                }
            }),
            O = n(38),
            C = v.extend({
                templateInput: "",
                getInputEl: function() {
                    if (!this.input) {
                        var t = this.model,
                            e = this.getModelValue(),
                            n = new O.a({
                                model: t,
                                target: this.config.em,
                                contClass: this.ppfx + "field-color",
                                ppfx: this.ppfx
                            }).render();
                        n.setValue(e, {
                            fromTarget: 1
                        }), this.input = n.el
                    }
                    return this.input
                }
            }),
            S = v.extend({
                events: {
                    "click button": "handleClick"
                },
                templateInput: "",
                handleClick: function() {
                    var t = this.model,
                        e = this.em,
                        n = t.get("command");
                    n && (Object(r.isString)(n) ? e.get("Commands").run(n) : n(e.get("Editor"), t))
                },
                renderLabel: function() {
                    this.model.get("label") && v.prototype.renderLabel.apply(this, arguments)
                },
                getInputEl: function() {
                    var t = this.model,
                        e = this.ppfx,
                        n = t.props(),
                        r = n.labelButton,
                        i = n.text,
                        o = n.full,
                        a = r || i,
                        s = "".concat(e, "btn");
                    return '<button type="button" class="'.concat(s, "-prim").concat(o ? " ".concat(s, "--full") : "", '">').concat(a, "</button>")
                }
            }),
            k = o.a.extend({
                ns: "Traits",
                itemView: v,
                reuseView: 1,
                itemsView: {
                    text: v,
                    number: x,
                    select: b,
                    checkbox: y,
                    color: C,
                    button: S
                },
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = t.config || {};
                    this.config = e, this.em = t.editor, this.pfx = e.stylePrefix || "", this.ppfx = e.pStylePrefix || "", this.className = this.pfx + "traits";
                    this.listenTo(this.em, "component:toggled", this.updatedCollection), this.updatedCollection()
                },
                updatedCollection: function() {
                    var t = this.ppfx,
                        e = this.em.getSelected();
                    this.el.className = "".concat(this.className, " ").concat(t, "one-bg ").concat(t, "two-color"), this.collection = e ? e.get("traits") : [], this.render()
                }
            });
        e.default = function() {
            var t, e = {};
            return {
                TraitsView: k,
                name: "TraitManager",
                getConfig: function() {
                    return e
                },
                init: function() {
                    var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    e = n, Object(r.defaults)(e, i);
                    var o = e.pStylePrefix;
                    return o && (e.stylePrefix = "".concat(o).concat(e.stylePrefix)), t = new k({
                        collection: [],
                        editor: e.em,
                        config: e
                    }), this
                },
                postRender: function() {
                    var t = this.getConfig().appendTo;
                    t && (Object(r.isElement)(t) ? t : document.querySelector(t)).appendChild(this.render())
                },
                getTraitsViewer: function() {
                    return t
                },
                addType: function(e, n) {
                    var r = t.itemView;
                    t.itemsView[e] = r.extend(n)
                },
                getType: function(e) {
                    return t.itemsView[e]
                },
                render: function() {
                    return t.render().el
                },
                destroy: function() {
                    t.remove(), [e, t].forEach(function(t) {
                        return {}
                    })
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(0),
            a = {
                appendTo: "",
                appendOnClick: 0,
                blocks: []
            },
            s = n(1),
            l = n.n(s),
            c = l.a.Model.extend({
                defaults: {
                    id: "",
                    label: "",
                    open: !0,
                    attributes: {}
                }
            }),
            u = l.a.Model.extend({
                defaults: {
                    activate: 0,
                    select: 0,
                    resetId: 0,
                    label: "",
                    disable: 0,
                    media: "",
                    content: "",
                    category: "",
                    attributes: {}
                },
                initialize: function() {
                    var t = this.get("category");
                    t && "string" == typeof t && new c({
                        id: t,
                        label: t
                    })
                }
            }),
            d = l.a.Collection.extend({
                model: u
            }),
            h = l.a.Collection.extend({
                model: c
            }),
            f = n(3),
            p = l.a.View.extend({
                events: {
                    click: "handleClick",
                    mousedown: "startDrag",
                    dragstart: "handleDragStart",
                    drag: "handleDrag",
                    dragend: "handleDragEnd"
                },
                initialize: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.model;
                    this.em = e.em, this.config = e, this.endDrag = this.endDrag.bind(this), this.ppfx = e.pStylePrefix || "", this.listenTo(n, "destroy remove", this.remove), this.listenTo(n, "change", this.render)
                },
                handleClick: function() {
                    var t = this.config,
                        e = this.model,
                        n = this.em;
                    if (t.appendOnClick) {
                        var r, i = t.getSorter(),
                            o = e.get("content"),
                            a = n.getSelected();
                        if (i.setDropContent(o), a)
                            if (i.validTarget(a.getEl(), o).valid) r = a;
                            else {
                                var s = a.parent();
                                i.validTarget(s.getEl(), o).valid && (r = s)
                            } if (!r) {
                            var l = n.getWrapper();
                            i.validTarget(l.getEl(), o).valid && (r = l)
                        }
                        var c = r && r.append(o)[0];
                        c && n.setSelected(c, {
                            scroll: 1
                        })
                    }
                },
                startDrag: function(t) {
                    var e = this.config,
                        n = this.em,
                        r = this.model.get("disable");
                    if (0 === t.button && e.getSorter && !this.el.draggable && !r) {
                        n.refreshCanvas();
                        var i = e.getSorter();
                        i.setDragHelper(this.el, t), i.setDropContent(this.model.get("content")), i.startSort(this.el), Object(f.v)(document, "mouseup", this.endDrag)
                    }
                },
                handleDragStart: function(t) {
                    var e = this.em,
                        n = this.model,
                        r = n.get("content"),
                        i = Object(o.isObject)(r) ? JSON.stringify(r) : r;
                    e.set("dragResult"), t.dataTransfer.setData("text", i), e.set("dragContent", r), e.trigger("block:drag:start", n, t)
                },
                handleDrag: function(t) {
                    this.em.trigger("block:drag", this.model, t)
                },
                handleDragEnd: function() {
                    var t = this.em,
                        e = this.model,
                        n = t.get("dragResult");
                    if (n) {
                        var r = "activeOnRender",
                            i = n.get && n.get(r);
                        (e.get("activate") || i) && (n.trigger("active"), n.set(r, 0)), e.get("select") && t.setSelected(n), e.get("resetId") && n.onAll(function(t) {
                            return t.resetId()
                        })
                    }
                    t.set({
                        dragResult: null,
                        dragContent: null
                    }), t.trigger("block:drag:stop", n, e)
                },
                endDrag: function(t) {
                    Object(f.u)(document, "mouseup", this.endDrag);
                    var e = this.config.getSorter();
                    e.moved = 0, e.endMove()
                },
                render: function() {
                    var t = this.em,
                        e = this.el,
                        n = this.$el,
                        r = this.ppfx,
                        i = this.model,
                        o = i.get("disable"),
                        a = i.get("attributes") || {},
                        s = a.class || "",
                        l = "".concat(r, "block"),
                        c = t && t.t("blockManager.labels.".concat(i.id)) || i.get("label"),
                        u = i.get("render"),
                        d = i.get("media"),
                        h = o ? "".concat(l, "--disable") : "".concat(r, "four-color-h");
                    n.attr(a), e.className = "".concat(s, " ").concat(l, " ").concat(r, "one-bg ").concat(h).trim(), e.innerHTML = "\n      ".concat(d ? '<div class="'.concat(l, '__media">').concat(d, "</div>") : "", '\n      <div class="').concat(l, '-label">').concat(c, "</div>\n    "), e.title = e.textContent.trim(), e.setAttribute("draggable", !(!Object(f.k)(t) || o));
                    var p = u && u({
                        el: e,
                        model: i,
                        className: l,
                        prefix: r
                    });
                    return p && (e.innerHTML = p), this
                }
            }),
            g = l.a.View.extend({
                template: Object(o.template)('\n  <div class="<%= pfx %>title">\n    <i class="<%= pfx %>caret-icon"></i>\n    <%= label %>\n  </div>\n  <div class="<%= pfx %>blocks-c"></div>\n  '),
                events: {},
                initialize: function() {
                    var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    this.config = t;
                    var e = t.pStylePrefix || "";
                    this.em = t.em, this.pfx = e, this.caretR = "fa fa-caret-right", this.caretD = "fa fa-caret-down", this.iconClass = "".concat(e, "caret-icon"), this.activeClass = "".concat(e, "open"), this.className = "".concat(e, "block-category"), this.events["click .".concat(e, "title")] = "toggle", this.listenTo(this.model, "change:open", this.updateVisibility), this.delegateEvents()
                },
                updateVisibility: function() {
                    this.model.get("open") ? this.open() : this.close()
                },
                open: function() {
                    this.el.className = "".concat(this.className, " ").concat(this.activeClass), this.getIconEl().className = "".concat(this.iconClass, " ").concat(this.caretD), this.getBlocksEl().style.display = ""
                },
                close: function() {
                    this.el.className = this.className, this.getIconEl().className = "".concat(this.iconClass, " ").concat(this.caretR), this.getBlocksEl().style.display = "none"
                },
                toggle: function() {
                    var t = this.model;
                    t.set("open", !t.get("open"))
                },
                getIconEl: function() {
                    return this.iconEl || (this.iconEl = this.el.querySelector("." + this.iconClass)), this.iconEl
                },
                getBlocksEl: function() {
                    return this.blocksEl || (this.blocksEl = this.el.querySelector("." + this.pfx + "blocks-c")), this.blocksEl
                },
                append: function(t) {
                    this.getBlocksEl().appendChild(t)
                },
                render: function() {
                    var t = this.em,
                        e = this.el,
                        n = this.$el,
                        r = this.model,
                        i = t.t("blockManager.categories.".concat(r.id)) || r.get("label");
                    return e.innerHTML = this.template({
                        pfx: this.pfx,
                        label: i
                    }), e.className = this.className, n.css({
                        order: r.get("order")
                    }), this.updateVisibility(), this
                }
            });

        function v(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function m(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? v(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : v(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var b = l.a.View.extend({
            initialize: function(t, e) {
                Object(o.bindAll)(this, "getSorter", "onDrag", "onDrop"), this.config = e || {}, this.categories = t.categories || "", this.renderedCategories = [];
                var n = this.config.pStylePrefix || "";
                this.ppfx = n, this.noCatClass = "".concat(n, "blocks-no-cat"), this.blockContClass = "".concat(n, "blocks-c"), this.catsClass = "".concat(n, "block-categories");
                var r = this.collection;
                this.listenTo(r, "add", this.addTo), this.listenTo(r, "reset", this.render), this.em = this.config.em, this.tac = "test-tac", this.grabbingCls = this.ppfx + "grabbing", this.em && (this.config.getSorter = this.getSorter, this.canvas = this.em.get("Canvas"))
            },
            updateConfig: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                this.config = m(m({}, this.config), t)
            },
            getSorter: function() {
                if (this.em) {
                    if (!this.sorter) {
                        var t = this.em.get("Utils"),
                            e = this.canvas;
                        this.sorter = new t.Sorter({
                            container: e.getBody(),
                            placer: e.getPlacerEl(),
                            containerSel: "*",
                            itemSel: "*",
                            pfx: this.ppfx,
                            onStart: this.onDrag,
                            onEndMove: this.onDrop,
                            onMove: this.onMove,
                            document: e.getFrameEl().contentDocument,
                            direction: "a",
                            wmargin: 1,
                            nested: 1,
                            em: this.em,
                            canvasRelative: 1
                        })
                    }
                    return this.sorter
                }
            },
            onDrag: function(t) {
                this.em.stopDefault(), this.em.trigger("block:drag:start", t)
            },
            onMove: function(t) {
                this.em.trigger("block:drag:move", t)
            },
            onDrop: function(t) {
                var e = this.em;
                e.runDefault(), t && t.get && (t.get("activeOnRender") && (t.trigger("active"), t.set("activeOnRender", 0)), e.trigger("block:drag:stop", t))
            },
            addTo: function(t) {
                this.add(t)
            },
            add: function(t, e) {
                var n = this.config,
                    r = e || null,
                    i = new p({
                        model: t,
                        attributes: t.get("attributes")
                    }, n).render().el,
                    a = t.get("category");
                if (a && this.categories && !n.ignoreCategories) {
                    Object(o.isString)(a) ? a = {
                        id: a,
                        label: a
                    } : Object(o.isObject)(a) && !a.id && (a.id = a.label);
                    var s = this.categories.add(a),
                        l = s.get("id"),
                        c = this.renderedCategories[l],
                        u = this.getCategoriesEl();
                    return t.set("category", s), !c && u && (c = new g({
                        model: s
                    }, this.config).render(), this.renderedCategories[l] = c, u.appendChild(c.el)), void(c && c.append(i))
                }
                r ? r.appendChild(i) : this.append(i)
            },
            getCategoriesEl: function() {
                return this.catsEl || (this.catsEl = this.el.querySelector(".".concat(this.catsClass))), this.catsEl
            },
            getBlocksEl: function() {
                return this.blocksEl || (this.blocksEl = this.el.querySelector(".".concat(this.noCatClass, " .").concat(this.blockContClass))), this.blocksEl
            },
            append: function(t) {
                var e = this.getBlocksEl();
                e && e.appendChild(t)
            },
            render: function() {
                var t = this,
                    e = this.ppfx,
                    n = document.createDocumentFragment();
                this.catsEl = null, this.blocksEl = null, this.renderedCategories = [], this.el.innerHTML = '\n      <div class="'.concat(this.catsClass, '"></div>\n      <div class="').concat(this.noCatClass, '">\n        <div class="').concat(this.blockContClass, '"></div>\n      </div>\n    '), this.collection.each(function(e) {
                    return t.add(e, n)
                }), this.append(n);
                var r = "".concat(this.blockContClass, "s ").concat(e, "one-bg ").concat(e, "two-color");
                return this.$el.addClass(r), this
            }
        });

        function y(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function w(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? y(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : y(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n, r = {},
                i = [];
            return {
                name: "BlockManager",
                init: function(n) {
                    var o = (r = n || {}).em;
                    for (var s in a) s in r || (r[s] = a[s]);
                    return t = new d([]), e = new d([]), i = new h, t.listenTo(t, "add", function(t) {
                        e.add(t), o && o.trigger("block:add", t)
                    }), t.listenTo(t, "remove", function(t) {
                        e.remove(t), o && o.trigger("block:remove", t)
                    }), t.listenTo(t, "reset", function(t) {
                        e.reset(t.models)
                    }), this
                },
                getConfig: function() {
                    return r
                },
                onLoad: function() {
                    var t = this.getAll();
                    !t.length && t.reset(r.blocks)
                },
                postRender: function() {
                    n = new b({
                        collection: e,
                        categories: i
                    }, r);
                    var t = this.getConfig().appendTo;
                    t && (Object(o.isElement)(t) ? t : document.querySelector(t)).appendChild(this.render(e.models))
                },
                add: function(e, n) {
                    var r = n || {};
                    return r.id = e, t.add(r)
                },
                get: function(e) {
                    return t.get(e)
                },
                getAll: function() {
                    return t
                },
                getAllVisible: function() {
                    return e
                },
                remove: function(e) {
                    return t.remove(e)
                },
                getCategories: function() {
                    return i
                },
                getContainer: function() {
                    return n.el
                },
                render: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        o = t || this.getAll().models;
                    if (e.external) {
                        var a = new d(o);
                        return new b({
                            collection: a,
                            categories: i
                        }, w(w({}, r), e)).render().el
                    }
                    return n && (n.updateConfig(e), n.collection.reset(o), n.rendered || (n.render(), n.rendered = 1)), this.getContainer()
                },
                destroy: function() {
                    t.reset(), t.stopListening(), e.reset(), i.reset(), n && n.remove(), [t, e, i, n].forEach(function(t) {
                        return null
                    }), r = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = {
                assets: [],
                noAssets: "",
                stylePrefix: "am-",
                upload: 0,
                uploadName: "files",
                headers: {},
                params: {},
                credentials: "include",
                multiUpload: !0,
                autoAdd: 1,
                customFetch: "",
                uploadFile: "",
                embedAsBase64: 1,
                handleAdd: "",
                dropzone: 0,
                openAssetsOnDrop: 1,
                dropzoneContent: "",
                beforeUpload: null,
                showUrlInput: !0
            },
            i = n(1),
            o = n.n(i),
            a = n(2),
            s = n.n(a),
            l = o.a.Model.extend({
                idAttribute: "src",
                defaults: {
                    type: "",
                    src: ""
                },
                getFilename: function() {
                    return this.get("src").split("/").pop()
                },
                getExtension: function() {
                    return this.getFilename().split(".").pop()
                }
            });

        function c(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function u(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? c(Object(n), !0).forEach(function(e) {
                    s()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : c(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var d = l.extend({
                defaults: u(u({}, l.prototype.defaults), {}, {
                    type: "image",
                    unitDim: "px",
                    height: 0,
                    width: 0
                })
            }),
            h = n(0),
            f = o.a.View.extend({
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    this.options = t, this.collection = t.collection;
                    var e = t.config || {};
                    this.config = e, this.pfx = e.stylePrefix || "", this.ppfx = e.pStylePrefix || "", this.em = e.em, this.className = this.pfx + "asset", this.listenTo(this.model, "destroy remove", this.remove), this.model.view = this;
                    var n = this.init && this.init.bind(this);
                    n && n(t)
                },
                template: function() {
                    var t = this.pfx;
                    return '\n      <div class="'.concat(t, 'preview-cont">\n        ').concat(this.getPreview(), '\n      </div>\n      <div class="').concat(t, 'meta">\n        ').concat(this.getInfo(), '\n      </div>\n      <div class="').concat(t, 'close" data-toggle="asset-remove">\n        &Cross;\n      </div>\n    ')
                },
                updateTarget: function(t) {
                    t && t.set && (t.set("attributes", Object(h.clone)(t.get("attributes"))), t.set("src", this.model.get("src")))
                },
                getPreview: function() {
                    return ""
                },
                getInfo: function() {
                    return ""
                },
                render: function() {
                    var t = this.el;
                    return t.innerHTML = this.template(this, this.model), t.className = this.className, this
                }
            }).extend({
                events: {
                    "click [data-toggle=asset-remove]": "onRemove",
                    click: "onClick",
                    dblclick: "onDblClick"
                },
                getPreview: function() {
                    var t = this.pfx,
                        e = this.model.get("src");
                    return '\n      <div class="'.concat(t, 'preview" style="background-image: url(\'').concat(e, '\');"></div>\n      <div class="').concat(t, "preview-bg ").concat(this.ppfx, 'checker-bg"></div>\n    ')
                },
                getInfo: function() {
                    var t = this.pfx,
                        e = this.model,
                        n = e.get("name"),
                        r = e.get("width"),
                        i = e.get("height"),
                        o = e.get("unitDim"),
                        a = r && i ? "".concat(r, "x").concat(i).concat(o) : "";
                    return n = n || e.getFilename(), '\n      <div class="'.concat(t, 'name">').concat(n, '</div>\n      <div class="').concat(t, 'dimensions">').concat(a, "</div>\n    ")
                },
                init: function(t) {
                    var e = this.pfx;
                    this.className += " ".concat(e, "asset-image")
                },
                onClick: function() {
                    var t = this.config.onClick,
                        e = this.model;
                    this.collection.trigger("deselectAll"), this.$el.addClass(this.pfx + "highlight"), Object(h.isFunction)(t) ? t(e) : this.updateTarget(this.collection.target)
                },
                onDblClick: function() {
                    var t = this.em,
                        e = this.model,
                        n = this.config.onDblClick;
                    Object(h.isFunction)(n) ? n(e) : (this.updateTarget(this.collection.target), t && t.get("Modal").close());
                    var r = this.collection.onSelect;
                    Object(h.isFunction)(r) && r(e)
                },
                onRemove: function(t) {
                    t.stopImmediatePropagation(), this.model.collection.remove(this.model)
                }
            }),
            p = n(30),
            g = o.a.Collection.extend(p.a).extend({
                types: [{
                    id: "image",
                    model: d,
                    view: f,
                    isType: function(t) {
                        return "string" == typeof t ? {
                            type: "image",
                            src: t
                        } : t
                    }
                }]
            }),
            v = n(25),
            m = n.n(v),
            b = o.a.View.extend({
                events: {
                    submit: "handleSubmit"
                },
                template: function(t) {
                    var e = t.pfx,
                        n = t.ppfx,
                        r = t.em,
                        i = (m()(t, ["pfx", "ppfx", "em"]), "");
                    return this.config.showUrlInput && (i = '\n          <form class="'.concat(e, 'add-asset">\n            <div class="').concat(n, "field ").concat(e, 'add-field">\n              <input placeholder="').concat(r && r.t("assetManager.inputPlh"), '"/>\n            </div>\n            <button class="').concat(n, 'btn-prim">').concat(r && r.t("assetManager.addButton"), '</button>\n            <div style="clear:both"></div>\n          </form>\n      ')), '\n    <div class="'.concat(e, 'assets-cont">\n      <div class="').concat(e, 'assets-header">\n        ').concat(i, '\n      </div>\n      <div class="').concat(e, 'assets" data-el="assets"></div>\n      <div style="clear:both"></div>\n    </div>\n    ')
                },
                initialize: function(t) {
                    this.options = t, this.config = t.config, this.pfx = this.config.stylePrefix || "", this.ppfx = this.config.pStylePrefix || "", this.em = this.config.em;
                    var e = this.collection;
                    this.listenTo(e, "reset", this.renderAssets), this.listenTo(e, "add", this.addToAsset), this.listenTo(e, "remove", this.removedAsset), this.listenTo(e, "deselectAll", this.deselectAll)
                },
                handleSubmit: function(t) {
                    t.preventDefault();
                    var e = this.getAddInput(),
                        n = e && e.value.trim(),
                        r = this.config.handleAdd;
                    n && (e.value = "", this.getAssetsEl().scrollTop = 0, r ? r.bind(this)(n) : this.options.globalCollection.add(n, {
                        at: 0
                    }))
                },
                getAssetsEl: function() {
                    return this.el.querySelector(".".concat(this.pfx, "assets"))
                },
                getAddInput: function() {
                    return this.inputUrl && this.inputUrl.value || (this.inputUrl = this.el.querySelector(".".concat(this.pfx, "add-asset input"))), this.inputUrl
                },
                removedAsset: function(t) {
                    this.collection.length || this.toggleNoAssets()
                },
                addToAsset: function(t) {
                    1 == this.collection.length && this.toggleNoAssets(1), this.addAsset(t)
                },
                addAsset: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null,
                        n = this.collection,
                        r = this.config,
                        i = new t.typeView({
                            model: t,
                            collection: n,
                            config: r
                        }).render().el;
                    if (e) e.appendChild(i);
                    else {
                        var o = this.getAssetsEl();
                        o && o.insertBefore(i, o.firstChild)
                    }
                    return i
                },
                toggleNoAssets: function(t) {
                    var e = this.$el.find(".".concat(this.pfx, "assets"));
                    if (t) e.empty();
                    else {
                        var n = this.config.noAssets;
                        n && e.append(n)
                    }
                },
                deselectAll: function() {
                    var t = this.pfx;
                    this.$el.find(".".concat(t, "highlight")).removeClass("".concat(t, "highlight"))
                },
                renderAssets: function() {
                    var t = this,
                        e = document.createDocumentFragment(),
                        n = this.$el.find(".".concat(this.pfx, "assets"));
                    n.empty(), this.toggleNoAssets(this.collection.length), this.collection.each(function(n) {
                        return t.addAsset(n, e)
                    }), n.append(e)
                },
                render: function() {
                    var t = this.options.fu.render().el;
                    return this.$el.empty(), this.$el.append(t).append(this.template(this)), this.el.className = "".concat(this.ppfx, "asset-manager"), this.renderAssets(), this.rendered = 1, this
                }
            }),
            y = n(28);

        function w(t, e) {
            (null == e || e > t.length) && (e = t.length);
            for (var n = 0, r = new Array(e); n < e; n++) r[n] = t[n];
            return r
        }
        var x = o.a.View.extend({
            template: Object(h.template)('\n  <form>\n    <div id="<%= pfx %>title"><%= title %></div>\n    <input type="file" id="<%= uploadId %>" name="file" accept="*/*" <%= disabled ? \'disabled\' : \'\' %> <%= multiUpload ? \'multiple\' : \'\' %>/>\n    <div style="clear:both;"></div>\n  </form>\n  '),
            events: {},
            initialize: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                this.options = t;
                var e = t.config || {};
                this.config = e, this.em = this.config.em, this.pfx = e.stylePrefix || "", this.ppfx = e.pStylePrefix || "", this.target = this.options.globalCollection || {}, this.uploadId = this.pfx + "uploadFile", this.disabled = void 0 !== e.disableUpload ? e.disableUpload : !e.upload && !e.embedAsBase64, this.multiUpload = void 0 === e.multiUpload || e.multiUpload, this.events["change #" + this.uploadId] = "uploadFile";
                var n = e.uploadFile;
                n ? this.uploadFile = n.bind(this) : !e.upload && e.embedAsBase64 && (this.uploadFile = this.constructor.embedAsBase64), this.delegateEvents()
            },
            onUploadStart: function() {
                var t = this.config.em;
                t && t.trigger("asset:upload:start")
            },
            onUploadEnd: function(t) {
                var e = this.$el,
                    n = this.config.em;
                n && n.trigger("asset:upload:end", t);
                var r = e.find("input");
                r && r.val("")
            },
            onUploadError: function(t) {
                var e = this.config.em;
                console.error(t), this.onUploadEnd(t), e && e.trigger("asset:upload:error", t)
            },
            onUploadResponse: function(t, e) {
                var n, r = this.config.em,
                    i = this.config,
                    o = this.target;
                try {
                    n = "string" == typeof t ? JSON.parse(t) : t
                } catch (e) {
                    n = t
                }
                r && r.trigger("asset:upload:response", n), i.autoAdd && o && o.add(n.data, {
                    at: 0
                }), this.onUploadEnd(t), e && e(n)
            },
            uploadFile: function(t, e) {
                var n = this,
                    r = t.dataTransfer ? t.dataTransfer.files : t.target.files,
                    i = this.config,
                    o = i.beforeUpload;
                if (!1 !== (o && o(r))) {
                    var a = new FormData,
                        s = i.params,
                        l = i.customFetch;
                    for (var c in s) a.append(c, s[c]);
                    if (this.multiUpload)
                        for (var u = 0; u < r.length; u++) a.append("".concat(i.uploadName, "[]"), r[u]);
                    else r.length && a.append(i.uploadName, r[0]);
                    this.target;
                    var d = i.upload,
                        h = i.headers,
                        f = "X-Requested-With";
                    if (void 0 === h[f] && (h[f] = "XMLHttpRequest"), d) {
                        this.onUploadStart();
                        var p = {
                            method: "post",
                            credentials: i.credentials || "include",
                            headers: h,
                            body: a
                        };
                        return (l ? l(d, p) : Object(y.a)(d, p).then(function(t) {
                            return 1 == (t.status / 200 | 0) ? t.text() : t.text().then(function(t) {
                                return Promise.reject(t)
                            })
                        })).then(function(t) {
                            return n.onUploadResponse(t, e)
                        }).catch(function(t) {
                            return n.onUploadError(t)
                        })
                    }
                }
            },
            initDrop: function() {
                var t = this;
                !this.uploadForm && (this.uploadForm = this.$el.find("form").get(0), "draggable" in this.uploadForm) && (this.uploadFile, this.uploadForm.ondragover = function() {
                    return this.className = t.pfx + "hover", !1
                }, this.uploadForm.ondragleave = function() {
                    return this.className = "", !1
                }, this.uploadForm.ondrop = function(e) {
                    this.className = "", e.preventDefault(), t.uploadFile(e)
                })
            },
            initDropzone: function(t) {
                var e = this,
                    n = 0,
                    r = this.config,
                    i = t.model,
                    o = t.el,
                    a = i.get("Editor"),
                    s = (i.get("Config").el, i.get("Canvas").getBody()),
                    l = this.ppfx,
                    c = "".concat(l, "dropzone-active"),
                    u = "".concat(l, "dropzone"),
                    d = function() {
                        o.className = o.className.replace(c, "").trim(), n = 0
                    },
                    h = function() {
                        return n || (o.className += " ".concat(c), n = 1), !1
                    },
                    f = function() {
                        return d(), !1
                    },
                    p = function(t) {
                        if (d(), t.preventDefault(), t.stopPropagation(), e.uploadFile(t), r.openAssetsOnDrop && a) {
                            var n = a.getSelected();
                            a.runCommand("open-assets", {
                                target: n,
                                onSelect: function() {
                                    a.Modal.close(), a.AssetManager.setTarget(null)
                                }
                            })
                        }
                        return !1
                    };
                t.$el.append('<div class="'.concat(u, '">').concat(r.dropzoneContent, "</div>")), d(), "draggable" in o && [o, s].forEach(function(t) {
                    t.ondragover = h, t.ondragleave = f, t.ondrop = p
                })
            },
            render: function() {
                var t = this.$el,
                    e = this.pfx,
                    n = this.em;
                return t.html(this.template({
                    title: n && n.t("assetManager.uploadTitle"),
                    uploadId: this.uploadId,
                    disabled: this.disabled,
                    multiUpload: this.multiUpload,
                    pfx: e
                })), this.initDrop(), t.attr("class", e + "file-uploader"), this
            }
        }, {
            embedAsBase64: function(t, e) {
                var n = this,
                    r = t.dataTransfer ? t.dataTransfer.files : t.target.files,
                    i = {
                        data: []
                    };
                if (FileReader) {
                    var o, a = [],
                        s = /^(.+)\/(.+)$/,
                        l = function(t, e) {
                            var n;
                            if ("undefined" == typeof Symbol || null == t[Symbol.iterator]) {
                                if (Array.isArray(t) || (n = function(t, e) {
                                        if (t) {
                                            if ("string" == typeof t) return w(t, e);
                                            var n = Object.prototype.toString.call(t).slice(8, -1);
                                            return "Object" === n && t.constructor && (n = t.constructor.name), "Map" === n || "Set" === n ? Array.from(t) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? w(t, e) : void 0
                                        }
                                    }(t)) || e && t && "number" == typeof t.length) {
                                    n && (t = n);
                                    var r = 0,
                                        i = function() {};
                                    return {
                                        s: i,
                                        n: function() {
                                            return r >= t.length ? {
                                                done: !0
                                            } : {
                                                done: !1,
                                                value: t[r++]
                                            }
                                        },
                                        e: function(t) {
                                            throw t
                                        },
                                        f: 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.")
                            }
                            var o, a = !0,
                                s = !1;
                            return {
                                s: function() {
                                    n = t[Symbol.iterator]()
                                },
                                n: function() {
                                    var t = n.next();
                                    return a = t.done, t
                                },
                                e: function(t) {
                                    s = !0, o = t
                                },
                                f: function() {
                                    try {
                                        a || null == n.return || n.return()
                                    } finally {
                                        if (s) throw o
                                    }
                                }
                            }
                        }(r);
                    try {
                        var c = function() {
                            var t = o.value,
                                e = new Promise(function(e, n) {
                                    var r = new FileReader;
                                    r.addEventListener("load", function(i) {
                                        var o, a = t.name,
                                            l = s.exec(t.type);
                                        if ("image" === (o = l ? l[1] : t.type)) {
                                            var c = {
                                                    src: r.result,
                                                    name: a,
                                                    type: o,
                                                    height: 0,
                                                    width: 0
                                                },
                                                u = new Image;
                                            u.addEventListener("error", function(t) {
                                                n(t)
                                            }), u.addEventListener("load", function() {
                                                c.height = u.height, c.width = u.width, e(c)
                                            }), u.src = c.src
                                        } else e(o ? {
                                            src: r.result,
                                            name: a,
                                            type: o
                                        } : r.result)
                                    }), r.addEventListener("error", function(t) {
                                        n(t)
                                    }), r.addEventListener("abort", function(t) {
                                        n("Aborted")
                                    }), r.readAsDataURL(t)
                                });
                            a.push(e)
                        };
                        for (l.s(); !(o = l.n()).done;) c()
                    } catch (t) {
                        l.e(t)
                    } finally {
                        l.f()
                    }
                    Promise.all(a).then(function(t) {
                        i.data = t, n.onUploadResponse(i, e)
                    }, function(t) {
                        n.onUploadError(t)
                    })
                } else this.onUploadError(new Error("Unsupported platform, FileReader is not defined"))
            }
        });
        e.default = function() {
            var t, e, n, i = {};
            return {
                name: "AssetManager",
                storageKey: "assets",
                getConfig: function() {
                    return i
                },
                init: function(o) {
                    var a = this;
                    for (var s in i = o || {}, r) s in i || (i[s] = r[s]);
                    var l = i.pStylePrefix,
                        c = i.em;
                    l && (i.stylePrefix = l + i.stylePrefix), t = new g([]);
                    var u = {
                        collection: new g([]),
                        globalCollection: t,
                        config: i
                    };
                    return n = new x(u), u.fu = n, e = new b(u), t.listenTo(t, "add", function(t) {
                        a.getAllVisible().add(t), c && c.trigger("asset:add", t)
                    }), t.listenTo(t, "remove", function(t) {
                        a.getAllVisible().remove(t), c && c.trigger("asset:remove", t)
                    }), this
                },
                add: function(e) {
                    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return void 0 === n.at && (n.at = 0), t.add(e, n)
                },
                get: function(e) {
                    return t.where({
                        src: e
                    })[0]
                },
                getAll: function() {
                    return t
                },
                getAllVisible: function() {
                    return e.collection
                },
                remove: function(t) {
                    var e = this.get(t);
                    return this.getAll().remove(e), this
                },
                store: function(t) {
                    var e = {},
                        n = JSON.stringify(this.getAll().toJSON());
                    return e[this.storageKey] = n, !t && i.stm && i.stm.store(e), e
                },
                load: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.storageKey,
                        n = t[e] || [];
                    if ("string" == typeof n) try {
                        n = JSON.parse(t[e])
                    } catch (t) {}
                    return n && n.length && this.getAll().reset(n), n
                },
                getContainer: function() {
                    return e.el
                },
                getAssetsEl: function() {
                    return e.el.querySelector("[data-el=assets]")
                },
                render: function(t) {
                    var n = t || this.getAll().models;
                    return e.rendered || e.render(), e.collection.reset(n), this.getContainer()
                },
                addType: function(t, e) {
                    this.getAll().addType(t, e)
                },
                getType: function(t) {
                    return this.getAll().getType(t)
                },
                getTypes: function() {
                    return this.getAll().getTypes()
                },
                AssetsView: function() {
                    return e
                },
                FileUploader: function() {
                    return n
                },
                onLoad: function() {
                    this.getAll().reset(i.assets)
                },
                postRender: function(t) {
                    i.dropzone && n.initDropzone(t)
                },
                setTarget: function(t) {
                    e.collection.target = t
                },
                onSelect: function(t) {
                    e.collection.onSelect = t
                },
                onClick: function(t) {
                    i.onClick = t
                },
                onDblClick: function(t) {
                    i.onDblClick = t
                },
                destroy: function() {
                    t.reset(), n.collection.reset(), n.remove(), e.remove(), [t, e, n].forEach(function(t) {
                        return null
                    }), i = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(11),
            a = {
                stylePrefix: "gjs-",
                components: "",
                style: "",
                fromElement: 0,
                noticeOnUnload: !0,
                showOffsets: !1,
                showOffsetsSelected: !1,
                forceClass: !0,
                height: "900px",
                width: "100%",
                log: ["warning", "error"],
                baseCss: "\n    * {\n      box-sizing: border-box;\n    }\n    html, body, [data-gjs-type=wrapper] {\n      min-height: 100%;\n    }\n    body {\n      margin: 0;\n      height: 100%;\n      background-color: #fff\n    }\n    [data-gjs-type=wrapper] {\n      overflow: auto;\n      overflow-x: hidden;\n    }\n\n    * ::-webkit-scrollbar-track {\n      background: rgba(0, 0, 0, 0.1)\n    }\n\n    * ::-webkit-scrollbar-thumb {\n      background: rgba(255, 255, 255, 0.2)\n    }\n\n    * ::-webkit-scrollbar {\n      width: 10px\n    }\n  ",
                protectedCss: "* { box-sizing: border-box; } body {margin: 0;}",
                canvasCss: "",
                defaultCommand: "select-comp",
                showToolbar: 1,
                allowScripts: 0,
                showDevices: 1,
                devicePreviewMode: 0,
                mediaCondition: "max-width",
                tagVarStart: "{[ ",
                tagVarEnd: " ]}",
                keepEmptyTextNodes: 0,
                jsInHtml: !0,
                nativeDnD: 1,
                multipleSelection: 1,
                exportWrapper: 0,
                wrapperIsBody: 1,
                avoidInlineStyle: 1,
                avoidDefaults: 1,
                clearStyles: 0,
                dragMode: 0,
                listenToEl: [],
                cssIcons: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css",
                el: "",
                i18n: {},
                undoManager: {},
                assetManager: {},
                canvas: {},
                layers: {},
                storageManager: {},
                richTextEditor: {},
                domComponents: {},
                modal: {},
                codeManager: {},
                panels: {},
                commands: {},
                cssComposer: {},
                selectorManager: {},
                deviceManager: {
                    devices: [{
                        id: "desktop",
                        name: "Desktop",
                        width: ""
                    }, {
                        id: "tablet",
                        name: "Tablet",
                        width: "768px",
                        widthMedia: "992px"
                    }, {
                        id: "mobileLandscape",
                        name: "Mobile landscape",
                        width: "568px",
                        widthMedia: "768px"
                    }, {
                        id: "mobilePortrait",
                        name: "Mobile portrait",
                        width: "320px",
                        widthMedia: "480px"
                    }]
                },
                blockManager: {},
                traitManager: {},
                textViewCode: "Code",
                keepUnusedStyles: 0,
                multiFrames: 0
            },
            s = n(0),
            l = n(1),
            c = n.n(l),
            u = n(3);

        function d(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function h(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? d(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : d(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        c.a.$ = o.default;
        var f, p, g = [n(108), n(106), n(77), n(78), n(102), n(101), n(105), n(100), n(104), n(103), n(99), n(98), n(107), n(96), n(110), n(94), n(92), n(69), n(93), n(109), n(95)],
            v = c.a.Collection;
        ! function(t) {
            var e = {
                Backbone: c.a,
                $: c.a.$
            }.$;
            if (e && "jQuery" !== e.prototype.constructor.name) {
                var n = e.fn;
                n.hide = function() {
                    return this.css("display", "none")
                }, n.show = function() {
                    return this.css("display", "block")
                }, n.focus = function() {
                    var t = this.get(0);
                    return t && t.focus(), this
                }, n.bind = function(t, e) {
                    return this.on(t, e)
                }, n.unbind = function(t, e) {
                    if (Object(s.isObject)(t)) {
                        for (var n in t) t.hasOwnProperty(n) && this.off(n, t[n]);
                        return this
                    }
                    return this.off(t, e)
                }, n.click = function(t) {
                    return t ? this.on("click", t) : this.trigger("click")
                }, n.change = function(t) {
                    return t ? this.on("change", t) : this.trigger("change")
                }, n.keydown = function(t) {
                    return t ? this.on("keydown", t) : this.trigger("keydown")
                }, n.delegate = function(t, e, n, r) {
                    return r || (r = n), this.on(e, t, function(t) {
                        t.data = n, r(t)
                    })
                }, n.scrollLeft = function() {
                    var t = this.get(0),
                        e = (t = 9 == t.nodeType ? t.defaultView : t) instanceof Window ? t : null;
                    return e ? e.pageXOffset : t.scrollLeft || 0
                }, n.scrollTop = function() {
                    var t = this.get(0),
                        e = (t = 9 == t.nodeType ? t.defaultView : t) instanceof Window ? t : null;
                    return e ? e.pageYOffset : t.scrollTop || 0
                };
                var r = e.prototype.offset;
                n.offset = function(t) {
                    var e, n;
                    return t && (e = t.top, n = t.left), void 0 !== e && this.css("top", "".concat(e, "px")), void 0 !== n && this.css("left", "".concat(n, "px")), r.call(this)
                }, e.map = function(t, e) {
                    for (var n = [], r = 0; r < t.length; r++) n.push(e(t[r], r));
                    return n
                };
                var i = Array.prototype.indexOf;
                e.inArray = function(t, e, n) {
                    return null == e ? -1 : i.call(e, t, n)
                }, e.Event = function(t, n) {
                    if (!(this instanceof e.Event)) return new e.Event(t, n);
                    this.type = t, this.isDefaultPrevented = function() {
                        return !1
                    }
                }
            }
        }();
        var m = {
                debug: console.log,
                info: console.info,
                warning: console.warn,
                error: console.error
            },
            b = c.a.Model.extend({
                defaults: function() {
                    return {
                        editing: 0,
                        selected: new v,
                        clipboard: null,
                        dmode: 0,
                        componentHovered: null,
                        previousModel: null,
                        changesCount: 0,
                        storables: [],
                        modules: [],
                        toLoad: [],
                        opened: {},
                        device: ""
                    }
                },
                initialize: function() {
                    var t = this,
                        e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    this.config = e, this.set("Config", e), this.set("modules", []), this.set("toLoad", []), this.set("storables", []), this.set("selected", new v), this.set("dmode", e.dragMode);
                    var n = e.el,
                        r = e.log,
                        i = !0 === r ? Object(s.keys)(m) : Object(s.isArray)(r) ? r : [];
                    Object(s.bindAll)(this, "initBaseColorPicker"), n && e.fromElement && (this.config.components = n.innerHTML), this.attrsOrig = n ? Object(s.toArray)(n.attributes).reduce(function(t, e) {
                        return t[e.nodeName] = e.nodeValue, t
                    }, {}) : "", g.forEach(function(e) {
                        return t.loadModule(e)
                    }), this.on("change:componentHovered", this.componentHovered, this), this.on("change:changesCount", this.updateChanges, this), i.forEach(function(e) {
                        return t.listenLog(e)
                    }), [{
                        from: "change:selectedComponent",
                        to: "component:toggled"
                    }].forEach(function(e) {
                        var n = e.from,
                            r = e.to;
                        t.listenTo(t, n, function() {
                            for (var e = arguments.length, i = new Array(e), o = 0; o < e; o++) i[o] = arguments[o];
                            t.trigger.apply(t, [r].concat(i)), t.logWarning("The event '".concat(n, "' is deprecated, replace it with '").concat(r, "'"))
                        })
                    })
                },
                getContainer: function() {
                    return this.config.el
                },
                listenLog: function(t) {
                    this.listenTo(this, "log:".concat(t), m[t])
                },
                getConfig: function(t) {
                    var e = this.config;
                    return Object(s.isUndefined)(t) ? e : e[t]
                },
                loadOnStart: function() {
                    var t = this,
                        e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null,
                        n = this.get("StorageManager");
                    this.get("toLoad").forEach(function(t) {
                        t.onLoad()
                    });
                    var r = function() {
                        t.get("modules").forEach(function(e) {
                            return e.postLoad && e.postLoad(t)
                        }), e && e()
                    };
                    n && n.canAutoload() ? this.load(r) : r()
                },
                updateChanges: function() {
                    var t = this,
                        e = this.get("StorageManager"),
                        n = this.get("changesCount");
                    p && clearTimeout(p), p = setTimeout(function() {
                        return t.trigger("update")
                    }), this.config.noticeOnUnload && (window.onbeforeunload = n ? function(t) {
                        return 1
                    } : null), e.isAutosave() && n >= e.getStepsBeforeSave() && this.store()
                },
                loadModule: function(t) {
                    var e = this.config,
                        n = new(t.default || t),
                        r = n.name.charAt(0).toLowerCase() + n.name.slice(1),
                        i = Object(s.isUndefined)(e[r]) ? e[n.name] : e[r],
                        o = i || {},
                        a = this.get("StorageManager");
                    if (o.pStylePrefix = e.pStylePrefix || "", Object(s.isUndefined)(i) || i || (o._disable = 1), n.storageKey && n.store && n.load && a) {
                        o.stm = a;
                        var l = "domComponents" == r ? "unshift" : "push";
                        this.get("storables")[l](n)
                    }
                    return o.em = this, n.init(h({}, o)), !n.private && this.set(n.name, n), n.onLoad && this.get("toLoad").push(n), this.get("modules").push(n), this
                },
                init: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    this.destroyed && (this.initialize(e), this.destroyed = 0), this.set("Editor", t)
                },
                getEditor: function() {
                    return this.get("Editor")
                },
                handleUpdates: function(t, e) {
                    var n = this,
                        r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                    r.temporary || r.noCount || r.avoidStore || (f && clearTimeout(f), f = setTimeout(function() {
                        n.set("changesCount", n.get("changesCount") + 1, r)
                    }, 0))
                },
                componentHovered: function(t, e, n) {
                    var r = this.previous("componentHovered");
                    r && this.trigger("component:unhovered", r, n), e && this.trigger("component:hovered", e, n)
                },
                getSelected: function() {
                    return this.get("selected").last()
                },
                getSelectedAll: function() {
                    var t = this.get("selected");
                    return t && t.models || []
                },
                setSelected: function(t) {
                    var e = this,
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = n.event,
                        i = r && (r.ctrlKey || r.metaKey),
                        a = (r || {}).shiftKey,
                        l = Object(s.isArray)(t),
                        c = l ? t : [t],
                        d = this.get("selected"),
                        h = this.getConfig("multipleSelection");
                    l && this.removeSelected(d.filter(function(t) {
                        return !Object(s.contains)(c, t)
                    })), c.forEach(function(t) {
                        var r = Object(u.g)(t, o.default);
                        if (!r || r.get("selectable")) {
                            if (i && h) return e.toggleSelected(r);
                            if (a && h) {
                                e.clearSelection(e.get("Canvas").getWindow());
                                var c, f, p = r.collection,
                                    g = r.index();
                                if (e.getSelectedAll().forEach(function(t) {
                                        var e = t.collection,
                                            n = t.index();
                                        e === p && (n < g ? c = Object(s.isUndefined)(c) ? n : Math.max(c, n) : n > g && (f = Object(s.isUndefined)(f) ? n : Math.min(f, n)))
                                    }), !Object(s.isUndefined)(c))
                                    for (; c !== g;) e.addSelected(p.at(c)), c++;
                                if (!Object(s.isUndefined)(f))
                                    for (; f !== g;) e.addSelected(p.at(f)), f--;
                                return e.addSelected(r)
                            }!l && e.removeSelected(d.filter(function(t) {
                                return t !== r
                            })), e.addSelected(r, n)
                        }
                    })
                },
                addSelected: function(t) {
                    var e = this,
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = Object(u.g)(t, o.default);
                    (Object(s.isArray)(r) ? r : [r]).forEach(function(t) {
                        if (!t || t.get("selectable")) {
                            var r = e.get("selected");
                            n.forceChange && r.remove(t, n), r.push(t, n)
                        }
                    })
                },
                removeSelected: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    this.get("selected").remove(Object(u.g)(t, o.default), e)
                },
                toggleSelected: function(t) {
                    var e = this,
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = Object(u.g)(t, o.default);
                    (Object(s.isArray)(r) ? r : [r]).forEach(function(t) {
                        e.get("selected").contains(t) ? e.removeSelected(t, n) : e.addSelected(t, n)
                    })
                },
                setHovered: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = Object(u.g)(t, o.default);
                    n && !n.get("hoverable") || (e.forceChange && this.set("componentHovered", ""), this.set("componentHovered", n, e))
                },
                getHovered: function() {
                    return this.get("componentHovered")
                },
                setComponents: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return this.get("DomComponents").setComponents(t, e)
                },
                getComponents: function() {
                    var t = this.get("DomComponents"),
                        e = this.get("CodeManager");
                    if (t && e) {
                        var n = t.getComponents();
                        return e.getCode(n, "json")
                    }
                },
                setStyle: function(t) {
                    for (var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = this.get("CssComposer").getAll(), r = 0, i = n.length; r < i; r++) n.pop();
                    return n.add(t, e), this
                },
                getStyle: function() {
                    return this.get("CssComposer").getAll()
                },
                setState: function(t) {
                    return this.set("state", t), this
                },
                getState: function() {
                    return this.get("state") || ""
                },
                getHtml: function() {
                    var t = this.config,
                        e = t.exportWrapper,
                        n = t.wrapperIsBody,
                        r = t.jsInHtml ? this.getJs() : "",
                        i = this.get("DomComponents").getComponent();
                    return this.get("CodeManager").getCode(i, "html", {
                        exportWrapper: e,
                        wrapperIsBody: n
                    }) + (r ? "<script>".concat(r, "<\/script>") : "")
                },
                getCss: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.config,
                        n = e.wrapperIsBody,
                        r = t.avoidProtected,
                        i = Object(s.isUndefined)(t.keepUnusedStyles) ? e.keepUnusedStyles : t.keepUnusedStyles,
                        o = this.get("CssComposer"),
                        a = this.get("DomComponents").getComponent();
                    return (r ? "" : e.protectedCss) + this.get("CodeManager").getCode(a, "css", {
                        cssc: o,
                        wrapperIsBody: n,
                        keepUnusedStyles: i
                    })
                },
                getJs: function() {
                    var t = this.get("DomComponents").getWrapper();
                    return this.get("CodeManager").getCode(t, "js").trim()
                },
                store: function(t) {
                    var e = this,
                        n = this.get("StorageManager"),
                        r = {};
                    if (n) return this.get("storables").forEach(function(t) {
                        var e = t.store(1);
                        for (var n in e) r[n] = e[n]
                    }), n.store(r, function(n) {
                        t && t(n), e.set("changesCount", 0), e.trigger("storage:store", r)
                    }), r
                },
                load: function() {
                    var t = this,
                        e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null;
                    this.getCacheLoad(1, function(n) {
                        t.get("storables").forEach(function(e) {
                            e.load(n), e.postLoad && e.postLoad(t)
                        }), e && e(n)
                    })
                },
                getCacheLoad: function(t, e) {
                    var n = this;
                    if (this.cacheLoad && !t) return this.cacheLoad;
                    var r = this.get("StorageManager"),
                        i = [];
                    if (!r) return {};
                    this.get("storables").forEach(function(t) {
                        var e = t.storageKey;
                        e = Object(s.isFunction)(e) ? e() : e, (Object(s.isArray)(e) ? e : [e]).forEach(function(t) {
                            return i.push(t)
                        })
                    }), r.load(i, function(t) {
                        n.cacheLoad = t, e && e(t), setTimeout(function() {
                            return n.trigger("storage:load", t)
                        })
                    })
                },
                getDeviceModel: function() {
                    var t = this.get("device");
                    return this.get("DeviceManager").get(t)
                },
                runDefault: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.get("Commands").get(this.config.defaultCommand);
                    e && !this.defaultRunning && (e.stop(this, this, t), e.run(this, this, t), this.defaultRunning = 1)
                },
                stopDefault: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.get("Commands").get(this.config.defaultCommand);
                    e && (e.stop(this, this, t), this.defaultRunning = 0)
                },
                refreshCanvas: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    this.set("canvasOffset", null), this.set("canvasOffset", this.get("Canvas").getOffset()), t.tools && this.trigger("canvas:updateTools")
                },
                clearSelection: function(t) {
                    (t || window).getSelection().removeAllRanges()
                },
                getCurrentMedia: function() {
                    var t = this.config,
                        e = this.getDeviceModel(),
                        n = t.mediaCondition,
                        r = t.devicePreviewMode,
                        i = e && e.get("widthMedia");
                    return e && i && !r ? "(".concat(n, ": ").concat(i, ")") : ""
                },
                getWrapper: function() {
                    return this.get("DomComponents").getWrapper()
                },
                setCurrentFrame: function(t) {
                    return this.set("currentFrame", t)
                },
                getCurrentFrame: function() {
                    return this.get("currentFrame")
                },
                getCurrentFrameModel: function() {
                    return (this.getCurrentFrame() || {}).model
                },
                getDirtyCount: function() {
                    return this.get("changesCount")
                },
                getZoomDecimal: function() {
                    return this.get("Canvas").getZoomDecimal()
                },
                getZoomMultiplier: function() {
                    return this.get("Canvas").getZoomMultiplier()
                },
                setDragMode: function(t) {
                    return this.set("dmode", t)
                },
                t: function() {
                    var t;
                    return (t = this.get("I18n")).t.apply(t, arguments)
                },
                inAbsoluteMode: function() {
                    return "absolute" === this.get("dmode")
                },
                destroyAll: function() {
                    var t = this,
                        e = this.config,
                        n = this.getEditor(),
                        r = (e.grapesjs || {}).editors,
                        i = void 0 === r ? [] : r;
                    this.stopDefault(), this.get("modules").slice().reverse().forEach(function(t) {
                        return t.destroy()
                    }), this.view.remove(), this.stopListening(), this.clear({
                        silent: !0
                    }), this.destroyed = 1, ["config", "view", "_previousAttributes", "_events", "_listeners"].forEach(function(e) {
                        return t[e] = {}
                    }), i.splice(i.indexOf(n), 1), Object(o.default)(e.el).empty().attr(this.attrsOrig)
                },
                setEditing: function(t) {
                    return this.set("editing", t), this
                },
                isEditing: function() {
                    return !!this.get("editing")
                },
                log: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = e.ns,
                        r = e.level,
                        i = void 0 === r ? "debug" : r;
                    if (this.trigger("log", t, e), i && this.trigger("log:".concat(i), t, e), n) {
                        var o = "log-".concat(n);
                        this.trigger(o, t, e), i && this.trigger("".concat(o, ":").concat(i), t, e)
                    }
                },
                logInfo: function(t, e) {
                    this.log(t, h(h({}, e), {}, {
                        level: "info"
                    }))
                },
                logWarning: function(t, e) {
                    this.log(t, h(h({}, e), {}, {
                        level: "warning"
                    }))
                },
                logError: function(t, e) {
                    this.log(t, h(h({}, e), {}, {
                        level: "error"
                    }))
                },
                initBaseColorPicker: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.getConfig(),
                        r = n.colorPicker,
                        i = void 0 === r ? {} : r,
                        a = n.el,
                        s = n.stylePrefix;
                    return Object(o.default)(t).spectrum(h(h({
                        containerClassName: "".concat(s, "one-bg ").concat(s, "two-color"),
                        appendTo: a || "body",
                        maxSelectionSize: 8,
                        showPalette: !0,
                        palette: [],
                        showAlpha: !0,
                        chooseText: "Ok",
                        cancelText: "⨯"
                    }, e), i))
                },
                data: function(t, e, n) {
                    var r = "_gjs-data";
                    if (t[r] || (t[r] = {}), Object(s.isUndefined)(n)) return t[r][e];
                    t[r][e] = n
                }
            }),
            y = c.a.$,
            w = c.a.View.extend({
                initialize: function() {
                    var t = this,
                        e = this.model;
                    e.view = this, this.conf = e.config, this.pn = e.get("Panels"), this.cv = e.get("Canvas"), e.on("loaded", function() {
                        t.pn.active(), t.pn.disableButtons(), setTimeout(function() {
                            e.runDefault(), e.trigger("load", e.get("Editor"))
                        })
                    })
                },
                render: function() {
                    this.model;
                    var t = this.$el,
                        e = this.conf,
                        n = e.stylePrefix,
                        r = y(e.el || "body ".concat(e.container));
                    return Object(u.a)(e.cssIcons, {
                        unique: 1,
                        prepand: 1
                    }), t.empty(), e.width && r.css("width", e.width), e.height && r.css("height", e.height), t.append(this.cv.render()), t.append(this.pn.render()), t.attr("class", "".concat(n, "editor ").concat(n, "one-bg ").concat(n, "two-color")), r.addClass("".concat(n, "editor-cont")).empty().append(t), this
                }
            });

        function x(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function O(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? x(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : x(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var C = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = O(O({}, a), t);
                e.pStylePrefix = e.stylePrefix;
                var n = new b(e),
                    r = new w({
                        model: n,
                        config: e
                    });
                return {
                    $: o.default,
                    editor: n,
                    init: function() {
                        var t = this,
                            i = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                        return n.init(this, O(O({}, e), i)), ["I18n", "Utils", "Config", "Commands", "Keymaps", "Modal", "Panels", "Canvas", "Parser", "CodeManager", "UndoManager", "RichTextEditor", "DomComponents", ["Components", "DomComponents"], "LayerManager", ["Layers", "LayerManager"], "CssComposer", ["Css", "CssComposer"], "StorageManager", ["Storage", "StorageManager"], "AssetManager", ["Assets", "AssetManager"], "BlockManager", ["Blocks", "BlockManager"], "TraitManager", ["Traits", "TraitManager"], "SelectorManager", ["Selectors", "SelectorManager"], "StyleManager", ["Styles", "StyleManager"], "DeviceManager", ["Devices", "DeviceManager"]].forEach(function(e) {
                            Array.isArray(e) ? t[e[0]] = n.get(e[1]) : t[e] = n.get(e)
                        }), n.on("loaded", function() {
                            t.UndoManager.clear(), n.get("modules").forEach(function(t) {
                                t.postRender && t.postRender(r)
                            })
                        }), this
                    },
                    getConfig: function(t) {
                        return n.getConfig(t)
                    },
                    getHtml: function(t) {
                        return n.getHtml(t)
                    },
                    getCss: function(t) {
                        return n.getCss(t)
                    },
                    getJs: function() {
                        return n.getJs()
                    },
                    getComponents: function() {
                        return n.get("DomComponents").getComponents()
                    },
                    getWrapper: function() {
                        return n.get("DomComponents").getWrapper()
                    },
                    setComponents: function(t) {
                        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                        return n.setComponents(t, e), this
                    },
                    addComponents: function(t, e) {
                        return this.getWrapper().append(t, e)
                    },
                    getStyle: function() {
                        return n.get("CssComposer").getAll()
                    },
                    setStyle: function(t) {
                        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                        return n.setStyle(t, e), this
                    },
                    getSelected: function() {
                        return n.getSelected()
                    },
                    getSelectedAll: function() {
                        return n.getSelectedAll()
                    },
                    getSelectedToStyle: function() {
                        var t = n.getSelected();
                        if (t) return this.StyleManager.getModelToStyle(t)
                    },
                    select: function(t, e) {
                        return n.setSelected(t, e), this
                    },
                    selectAdd: function(t) {
                        return n.addSelected(t), this
                    },
                    selectRemove: function(t) {
                        return n.removeSelected(t), this
                    },
                    selectToggle: function(t) {
                        return n.toggleSelected(t), this
                    },
                    setDevice: function(t) {
                        return n.set("device", t), this
                    },
                    getDevice: function() {
                        return n.get("device")
                    },
                    runCommand: function(t) {
                        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                        return n.get("Commands").run(t, e)
                    },
                    stopCommand: function(t) {
                        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                        return n.get("Commands").stop(t, e)
                    },
                    store: function(t) {
                        return n.store(t)
                    },
                    load: function(t) {
                        return n.load(t)
                    },
                    getContainer: function() {
                        return e.el
                    },
                    getDirtyCount: function() {
                        return n.getDirtyCount()
                    },
                    refresh: function(t) {
                        n.refreshCanvas(t)
                    },
                    setCustomRte: function(t) {
                        this.RichTextEditor.customRte = t
                    },
                    setCustomParserCss: function(t) {
                        return this.Parser.getConfig().parserCss = t, this
                    },
                    setDragMode: function(t) {
                        return n.setDragMode(t), this
                    },
                    log: function(t) {
                        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                        return n.log(t, e), this
                    },
                    t: function() {
                        return n.t.apply(n, arguments)
                    },
                    on: function(t, e) {
                        return n.on(t, e), this
                    },
                    once: function(t, e) {
                        return n.once(t, e), this
                    },
                    off: function(t, e) {
                        return n.off(t, e), this
                    },
                    trigger: function(t) {
                        return n.trigger.apply(n, arguments), this
                    },
                    destroy: function() {
                        return n.destroyAll()
                    },
                    getEl: function() {
                        return r.el
                    },
                    getModel: function() {
                        return n
                    },
                    render: function() {
                        return r.render(), r.el
                    }
                }
            },
            S = {
                plugins: []
            };

        function k(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function j(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? k(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : k(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }! function() {
            if (function() {
                    for (var t, e = window.navigator.userAgent, n = [
                            ["edge", /Edge\/([0-9\._]+)/],
                            ["ie", /MSIE\s(7\.0)/],
                            ["ie", /MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],
                            ["ie", /Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/]
                        ], r = 0; r < n.length && !(t = n[r][1].exec(e)); r++);
                    return !!t
                }()) {
                var t = DOMImplementation.prototype.createHTMLDocument;
                DOMImplementation.prototype.createHTMLDocument = function(e) {
                    return e || (e = ""), t.apply(document.implementation, [e])
                }
            }
        }();
        var T = new function(t) {
                var e = {};
                for (var n in S) n in e || (e[n] = S[n]);
                var r = {};
                return {
                    add: function(t, e) {
                        return r[t] ? r[t] : (r[t] = e, e)
                    },
                    get: function(t) {
                        return r[t]
                    },
                    getAll: function() {
                        return r
                    }
                }
            },
            P = [],
            E = {
                autorender: 1,
                plugins: [],
                pluginsOpts: {}
            };
        e.default = {
            $: o.default,
            editors: P,
            plugins: T,
            version: "0.16.34",
            init: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    e = t.container;
                if (!e) throw new Error("'container' is required");
                (t = j(j(j({}, E), t), {}, {
                    grapesjs: this
                })).el = Object(s.isElement)(e) ? e : document.querySelector(e);
                var n = new C(t).init();
                return t.plugins.forEach(function(e) {
                    var r = T.get(e),
                        i = t.pluginsOpts[e] || {};
                    if (!r) {
                        var o = window[e];
                        r = o && o.default ? o.default : o
                    }
                    r ? r(n, i) : Object(s.isFunction)(e) ? e(n, i) : console.warn("Plugin ".concat(e, " not found"))
                }), n.getModel().loadOnStart(), t.autorender && n.render(), P.push(n), n
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = "sw-visibility",
            i = "export-template",
            o = "open-sm",
            a = "open-tm",
            s = "open-layers",
            l = "open-blocks",
            c = "fullscreen",
            u = "preview",
            d = {
                stylePrefix: "pn-",
                defaults: [{
                    id: "commands",
                    buttons: [{}]
                }, {
                    id: "options",
                    buttons: [{
                        active: !0,
                        id: r,
                        className: "fa fa-square-o",
                        command: r,
                        context: r,
                        attributes: {
                            title: "View components"
                        }
                    }, {
                        id: u,
                        className: "fa fa-eye",
                        command: u,
                        context: u,
                        attributes: {
                            title: "Preview"
                        }
                    }, {
                        id: c,
                        className: "fa fa-arrows-alt",
                        command: c,
                        context: c,
                        attributes: {
                            title: "Fullscreen"
                        }
                    }, {
                        id: i,
                        className: "fa fa-code",
                        command: i,
                        attributes: {
                            title: "View code"
                        }
                    }]
                }, {
                    id: "views",
                    buttons: [{
                        id: o,
                        className: "fa fa-paint-brush",
                        command: o,
                        active: !0,
                        togglable: 0,
                        attributes: {
                            title: "Open Style Manager"
                        }
                    }, {
                        id: a,
                        className: "fa fa-cog",
                        command: a,
                        togglable: 0,
                        attributes: {
                            title: "Settings"
                        }
                    }, {
                        id: s,
                        className: "fa fa-bars",
                        command: s,
                        togglable: 0,
                        attributes: {
                            title: "Open Layer Manager"
                        }
                    }, {
                        id: l,
                        className: "fa fa-th-large",
                        command: l,
                        togglable: 0,
                        attributes: {
                            title: "Open Blocks"
                        }
                    }]
                }],
                em: null,
                delayBtnsShow: 300
            },
            h = n(1),
            f = n.n(h),
            p = n(41),
            g = f.a.Model.extend({
                defaults: {
                    id: "",
                    content: "",
                    visible: !0,
                    buttons: [],
                    attributes: {}
                },
                initialize: function(t) {
                    this.btn = this.get("buttons") || [], this.buttons = new p.default(this.btn), this.set("buttons", this.buttons)
                }
            }),
            v = f.a.Collection.extend({
                model: g
            }),
            m = n(2),
            b = n.n(m),
            y = n(0);

        function w(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function x(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? w(Object(n), !0).forEach(function(e) {
                    b()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : w(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        f.a.$;
        var O = f.a.View.extend({
                tagName: function() {
                    return this.model.get("tagName")
                },
                events: {
                    click: "clicked"
                },
                initialize: function(t) {
                    var e = this.model.get("className");
                    this.config = t.config || {}, this.em = this.config.em || {};
                    var n = this.config.stylePrefix || "",
                        r = this.config.pStylePrefix || "";
                    this.pfx = n, this.ppfx = this.config.pStylePrefix || "", this.id = n + this.model.get("id"), this.activeCls = "".concat(n, "active ").concat(r, "four-color"), this.disableCls = "".concat(r, "disabled"), this.btnsVisCls = "".concat(n, "visible"), this.className = n + "btn" + (e ? " " + e : ""), this.listenTo(this.model, "change", this.render), this.listenTo(this.model, "change:active updateActive", this.updateActive), this.listenTo(this.model, "checkActive", this.checkActive), this.listenTo(this.model, "change:bntsVis", this.updateBtnsVis), this.listenTo(this.model, "change:attributes", this.updateAttributes), this.listenTo(this.model, "change:className", this.updateClassName), this.listenTo(this.model, "change:disable", this.updateDisable), this.em && this.em.get && (this.commands = this.em.get("Commands"))
                },
                updateClassName: function() {
                    var t = this.model,
                        e = this.pfx,
                        n = t.get("className"),
                        r = t.get("attributes").class,
                        i = "".concat(r || "", " ").concat(e, "btn ").concat(n || "");
                    this.$el.attr("class", i.trim())
                },
                updateAttributes: function() {
                    var t = this.em,
                        e = this.model,
                        n = this.$el,
                        r = e.get("attributes") || {},
                        i = t && t.t && t.t("panels.buttons.titles.".concat(e.id));
                    n.attr(r), i && n.attr({
                        title: i
                    }), this.updateClassName()
                },
                updateBtnsVis: function() {
                    this.$buttons && (this.model.get("bntsVis") ? this.$buttons.addClass(this.btnsVisCls) : this.$buttons.removeClass(this.btnsVisCls))
                },
                updateActive: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = this.model,
                        n = this.commands,
                        r = this.$el,
                        i = this.activeCls,
                        o = t.fromCollection,
                        a = e.get("context"),
                        s = e.get("options"),
                        l = e.get("command"),
                        c = {};
                    l && (n && Object(y.isString)(l) ? c = n.get(l) || {} : Object(y.isFunction)(l) ? c = n.create({
                        run: l
                    }) : null !== l && Object(y.isObject)(l) && (c = n.create(l)), e.get("active") ? (!o && e.collection.deactivateAll(a, e), e.set("active", !0, {
                        silent: !0
                    }).trigger("checkActive"), n.runCommand(c, x(x({}, s), {}, {
                        sender: e
                    })), c.noStop && e.set("active", !1)) : (r.removeClass(i), n.stopCommand(c, x(x({}, s), {}, {
                        sender: e,
                        force: 1
                    }))))
                },
                updateDisable: function() {
                    var t = this.disableCls,
                        e = this.model.get("disable");
                    this.$el[e ? "addClass" : "removeClass"](t)
                },
                checkActive: function() {
                    var t = this.model,
                        e = this.$el,
                        n = this.activeCls;
                    t.get("active") ? e.addClass(n) : e.removeClass(n)
                },
                clicked: function(t) {
                    var e = this.model;
                    e.get("bntsVis") || e.get("disable") || !e.get("command") || this.toggleActive()
                },
                toggleActive: function() {
                    var t = this.model,
                        e = this.em,
                        n = t.attributes,
                        r = n.active,
                        i = n.togglable;
                    r && !i || (t.set("active", !r), r ? t.get("runDefaultCommand") && e.runDefault() : t.get("stopDefaultCommand") && e.stopDefault())
                },
                render: function() {
                    var t = this.model,
                        e = t.get("label"),
                        n = this.$el;
                    return !t.get("el") && n.empty(), this.updateAttributes(), e && n.append(e), this.checkActive(), this.updateDisable(), this
                }
            }),
            C = f.a.View.extend({
                initialize: function(t) {
                    this.opt = t || {}, this.config = this.opt.config || {}, this.pfx = this.config.stylePrefix || "", this.parentM = this.opt.parentM || null, this.listenTo(this.collection, "add", this.addTo), this.listenTo(this.collection, "reset remove", this.render), this.className = this.pfx + "buttons"
                },
                addTo: function(t) {
                    this.addToCollection(t)
                },
                addToCollection: function(t, e) {
                    var n = e || null,
                        r = new O({
                            el: t.get("el"),
                            model: t,
                            config: this.config,
                            parentM: this.parentM
                        }).render().el;
                    return n ? n.appendChild(r) : this.$el.append(r), r
                },
                render: function() {
                    var t = document.createDocumentFragment();
                    return this.$el.empty(), this.collection.each(function(e) {
                        this.addToCollection(e, t)
                    }, this), this.$el.append(t), this.$el.attr("class", Object(y.result)(this, "className")), this
                }
            });

        function S(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }
        var k = f.a.View.extend({
                initialize: function(t) {
                    var e = t.config || {},
                        n = this.model;
                    this.config = e, this.pfx = e.stylePrefix || "", this.ppfx = e.pStylePrefix || "", this.buttons = n.get("buttons"), this.className = this.pfx + "panel", this.id = this.pfx + n.get("id"), this.listenTo(n, "change:appendContent", this.appendContent), this.listenTo(n, "change:content", this.updateContent), this.listenTo(n, "change:visible", this.toggleVisible), n.view = this
                },
                appendContent: function() {
                    this.$el.append(this.model.get("appendContent"))
                },
                updateContent: function() {
                    this.$el.html(this.model.get("content"))
                },
                toggleVisible: function() {
                    this.model.get("visible") ? this.$el.removeClass("".concat(this.ppfx, "hidden")) : this.$el.addClass("".concat(this.ppfx, "hidden"))
                },
                attributes: function() {
                    return this.model.get("attributes")
                },
                initResize: function() {
                    var t = this.config.em,
                        e = t ? t.get("Editor") : "",
                        n = this.model.get("resizable");
                    if (e && n) {
                        var r, i, o, a = !0 === n ? [1, 1, 1, 1] : n,
                            s = a.length,
                            l = 0;
                        2 == s ? (r = a[0], o = a[0], i = a[1], l = a[1]) : 4 == s && (r = a[0], i = a[1], o = a[2], l = a[3]);
                        var c = e.Utils.Resizer.init(function(t) {
                            for (var e = 1; e < arguments.length; e++) {
                                var n = null != arguments[e] ? arguments[e] : {};
                                e % 2 ? S(Object(n), !0).forEach(function(e) {
                                    b()(t, e, n[e])
                                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : S(Object(n)).forEach(function(e) {
                                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                                })
                            }
                            return t
                        }({
                            tc: r,
                            cr: i,
                            bc: o,
                            cl: l,
                            tl: 0,
                            tr: 0,
                            bl: 0,
                            br: 0,
                            appendTo: this.el,
                            silentFrames: 1,
                            avoidContainerUpdate: 1,
                            prefix: e.getConfig().stylePrefix,
                            onEnd: function() {
                                t && t.trigger("change:canvasOffset")
                            },
                            posFetcher: function(t, e) {
                                var n = e.target,
                                    r = t.style,
                                    i = c.getConfig(),
                                    o = i.keyWidth,
                                    a = i.keyHeight,
                                    s = t.getBoundingClientRect(),
                                    l = "container" == n,
                                    u = r[o],
                                    d = r[a];
                                return {
                                    left: 0,
                                    top: 0,
                                    width: u && !l ? parseFloat(u) : s.width,
                                    height: d && !l ? parseFloat(d) : s.height
                                }
                            }
                        }, n));
                        c.blur = function() {}, c.focus(this.el)
                    }
                },
                render: function() {
                    var t = this.$el,
                        e = this.ppfx,
                        n = "".concat(this.className, " ").concat(this.id, " ").concat(e, "one-bg ").concat(e, "two-color");
                    if (t.addClass(n), this.buttons.length) {
                        var r = new C({
                            collection: this.buttons,
                            config: this.config
                        });
                        t.append(r.render().el)
                    }
                    return t.append(this.model.get("content")), this
                }
            }),
            j = f.a.View.extend({
                initialize: function(t) {
                    this.opt = t || {}, this.config = this.opt.config || {}, this.pfx = this.config.stylePrefix || "";
                    var e = this.collection;
                    this.listenTo(e, "add", this.addTo), this.listenTo(e, "reset", this.render), this.listenTo(e, "remove", this.onRemove), this.className = this.pfx + "panels"
                },
                onRemove: function(t) {
                    var e = t.view;
                    e && e.remove()
                },
                addTo: function(t) {
                    this.addToCollection(t)
                },
                addToCollection: function(t, e) {
                    var n = e || null,
                        r = this.config,
                        i = t.get("el"),
                        o = new k({
                            el: i,
                            model: t,
                            config: r
                        }),
                        a = o.render().el,
                        s = t.get("appendTo");
                    return i || (s ? document.querySelector(s).appendChild(a) : n ? n.appendChild(a) : this.$el.append(a)), o.initResize(), a
                },
                render: function() {
                    var t = this,
                        e = this.$el,
                        n = document.createDocumentFragment();
                    return e.empty(), this.collection.each(function(e) {
                        return t.addToCollection(e, n)
                    }), e.append(n), e.attr("class", this.className), this
                }
            });
        e.default = function() {
            var t, e, n = {};
            return {
                name: "Panels",
                init: function(r) {
                    for (var i in n = r || {}, d) i in n || (n[i] = d[i]);
                    var o = n.pStylePrefix;
                    return o && (n.stylePrefix = o + n.stylePrefix), t = new v(n.defaults), e = new j({
                        collection: t,
                        config: n
                    }), this
                },
                getPanels: function() {
                    return t
                },
                getPanelsEl: function() {
                    return e.el
                },
                addPanel: function(e) {
                    return t.add(e)
                },
                removePanel: function(e) {
                    return t.remove(e)
                },
                getPanel: function(e) {
                    var n = t.where({
                        id: e
                    });
                    return n.length ? n[0] : null
                },
                addButton: function(t, e) {
                    var n = this.getPanel(t);
                    return n ? n.get("buttons").add(e) : null
                },
                removeButton: function(t, e) {
                    var n = this.getPanel(t);
                    return n && n.get("buttons").remove(e)
                },
                getButton: function(t, e) {
                    var n = this.getPanel(t);
                    if (n) {
                        var r = n.get("buttons").where({
                            id: e
                        });
                        return r.length ? r[0] : null
                    }
                    return null
                },
                render: function() {
                    return e.render().el
                },
                active: function() {
                    this.getPanels().each(function(t) {
                        t.get("buttons").each(function(t) {
                            t.get("active") && t.trigger("updateActive")
                        })
                    })
                },
                disableButtons: function() {
                    this.getPanels().each(function(t) {
                        t.get("buttons").each(function(t) {
                            t.get("disable") && t.trigger("change:disable")
                        })
                    })
                },
                destroy: function() {
                    t.reset(), t.stopListening(), e.remove(), [n, t, e].forEach(function(t) {
                        return {}
                    })
                },
                Panel: g
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(0),
            i = {
                stylePrefix: "cm-",
                inlineCss: !1
            },
            o = n(2),
            a = n.n(o),
            s = n(1),
            l = n.n(s);

        function c(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }
        var u = l.a.Model.extend({
                build: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = t.get("components");
                    return e.exportWrapper ? t.toHTML(function(t) {
                        for (var e = 1; e < arguments.length; e++) {
                            var n = null != arguments[e] ? arguments[e] : {};
                            e % 2 ? c(Object(n), !0).forEach(function(e) {
                                a()(t, e, n[e])
                            }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : c(Object(n)).forEach(function(e) {
                                Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                            })
                        }
                        return t
                    }({}, e.wrapperIsBody && {
                        tag: "body"
                    })) : this.buildModels(n)
                },
                buildModels: function(t) {
                    var e = "";
                    return t.each(function(t) {
                        e += t.toHTML()
                    }), e
                }
            }),
            d = n(31),
            h = l.a.Model.extend({
                build: function(t) {
                    var e = t.toJSON();
                    return this.beforeEach(e), Object(r.each)(e, function(t, n) {
                        var r = e[n];
                        if (r instanceof l.a.Model) e[n] = this.build(r);
                        else if (r instanceof l.a.Collection) {
                            var i = r;
                            e[n] = [], i.length && i.each(function(t, r) {
                                e[n][r] = this.build(t)
                            }, this)
                        }
                    }, this), e
                },
                beforeEach: function(t) {
                    delete t.status
                }
            }),
            f = l.a.Model.extend({
                mapModel: function(t) {
                    var e = "",
                        n = t.get("script-export") || t.get("script"),
                        i = t.get("type"),
                        o = t.get("components"),
                        s = t.getId();
                    if (n) {
                        var l = t.get("attributes");
                        l = Object(r.extend)({}, l, {
                            id: s
                        }), t.set("attributes", l, {
                            silent: 1
                        });
                        var c = t.getScriptString(n),
                            u = t.get("script-props");
                        if (t.get("scriptUpdated") && !u) this.mapJs[i + "-" + s] = {
                            ids: [s],
                            code: c
                        };
                        else {
                            var d, h = this.mapJs[i];
                            if (u && (d = t.__getScriptProps()), h) h.ids.push(s), d && (h.props[s] = d);
                            else {
                                var f = {
                                    ids: [s],
                                    code: c
                                };
                                d && (f.props = a()({}, s, d)), this.mapJs[i] = f
                            }
                        }
                    }
                    return o.each(function(t) {
                        e += this.mapModel(t)
                    }, this), e
                },
                build: function(t) {
                    this.mapJs = {}, this.mapModel(t);
                    var e = "";
                    for (var n in this.mapJs) {
                        var r = this.mapJs[n];
                        if (r.props) e += "\n          var props = ".concat(JSON.stringify(r.props), ";\n          var ids = Object.keys(props).map(function(id) { return '#'+id }).join(',');\n          var els = document.querySelectorAll(ids);\n          for (var i = 0, len = els.length; i < len; i++) {\n            var el = els[i];\n            (").concat(r.code, ".bind(el))(props[el.id]);\n          }");
                        else {
                            var i = "#" + r.ids.join(", #");
                            e += "\n          var items = document.querySelectorAll('".concat(i, "');\n          for (var i = 0, len = items.length; i < len; i++) {\n            (function(){").concat(r.code, "}.bind(items[i]))();\n          }")
                        }
                    }
                    return e
                }
            }),
            p = n(13),
            g = n.n(p);

        function v(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }
        n(83), n(44), n(86);
        var m = l.a.Model.extend({
                defaults: {
                    input: "",
                    label: "",
                    codeName: "",
                    theme: "hopscotch",
                    readOnly: !0,
                    lineNumbers: !0
                },
                init: function(t) {
                    return Object(r.bindAll)(this, "onChange"), this.editor = g.a.fromTextArea(t, function(t) {
                        for (var e = 1; e < arguments.length; e++) {
                            var n = null != arguments[e] ? arguments[e] : {};
                            e % 2 ? v(Object(n), !0).forEach(function(e) {
                                a()(t, e, n[e])
                            }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : v(Object(n)).forEach(function(e) {
                                Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                            })
                        }
                        return t
                    }({
                        dragDrop: !1,
                        lineWrapping: !0,
                        mode: this.get("codeName")
                    }, this.attributes)), this.element = t, this.editor.on("change", this.onChange), this
                },
                onChange: function() {
                    this.trigger("update", this)
                },
                getEditor: function() {
                    return this.editor
                },
                getElement: function() {
                    return this.element
                },
                setElement: function(t) {
                    return this.element = t, this
                },
                refresh: function() {
                    return this.getEditor().refresh(), this
                },
                focus: function() {
                    return this.getEditor().focus(), this
                },
                getContent: function() {
                    var t = this.getEditor();
                    return t && t.getValue()
                },
                setContent: function(t) {
                    var e = this,
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = this.editor;
                    r && (r.setValue(t), r.autoFormatRange && (g.a.commands.selectAll(r), r.autoFormatRange(r.getCursor(!0), r.getCursor(!1)), g.a.commands.goDocStart(r)), !n.noRefresh && setTimeout(function() {
                        return e.refresh()
                    }))
                }
            }),
            b = l.a.View.extend({
                template: Object(r.template)('\n  <div class="<%= pfx %>editor" id="<%= pfx %><%= codeName %>">\n  \t<div id="<%= pfx %>title"><%= label %></div>\n  \t<div id="<%= pfx %>code"></div>\n  </div>'),
                initialize: function(t) {
                    this.config = t.config || {}, this.pfx = this.config.stylePrefix
                },
                render: function() {
                    var t = this.model.toJSON();
                    return t.pfx = this.pfx, this.$el.html(this.template(t)), this.$el.attr("class", this.pfx + "editor-c"), this.$el.find("#" + this.pfx + "code").append(this.model.get("input")), this
                }
            });
        e.default = function() {
            var t = {},
                e = {},
                n = {},
                o = {},
                a = {};
            return {
                getConfig: function() {
                    return t
                },
                config: t,
                EditorView: b,
                name: "CodeManager",
                init: function(e) {
                    for (var r in t = e || {}, i) r in t || (t[r] = i[r]);
                    var o = t.pStylePrefix;
                    return o && (t.stylePrefix = o + t.stylePrefix), n.html = new u, n.css = new d.a, n.json = new h, n.js = new f, a.CodeMirror = new m, this.loadDefaultGenerators().loadDefaultViewers(), this
                },
                addGenerator: function(t, n) {
                    return e[t] = n, this
                },
                getGenerator: function(t) {
                    return e[t] || null
                },
                getGenerators: function() {
                    return e
                },
                addViewer: function(t, e) {
                    return o[t] = e, this
                },
                getViewer: function(t) {
                    return o[t] || null
                },
                getViewers: function() {
                    return o
                },
                createViewer: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = Object(r.isUndefined)(t.type) ? "CodeMirror" : t.type,
                        n = this.getViewer(e) && this.getViewer(e).clone(),
                        i = document.createElement("div"),
                        o = document.createElement("textarea");
                    return i.appendChild(o), n.set(t), n.init(o), n.setElement(i), n
                },
                updateViewer: function(t, e) {
                    t.setContent(e)
                },
                getCode: function(e, n) {
                    var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                    r.em = t.em;
                    var i = this.getGenerator(n);
                    return i ? i.build(e, r) : ""
                },
                loadDefaultGenerators: function() {
                    for (var t in n) this.addGenerator(t, n[t]);
                    return this
                },
                loadDefaultViewers: function() {
                    for (var t in a) this.addViewer(t, a[t]);
                    return this
                },
                destroy: function() {
                    [t, e, n, o, a].forEach(function(t) {
                        return {}
                    })
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(0),
            a = {
                stylePrefix: "sm-",
                sectors: [],
                appendTo: "",
                hideNotStylable: !0,
                highlightChanged: !0,
                highlightComputed: !0,
                showComputed: !0,
                clearProperties: 0,
                avoidComputed: ["width", "height"]
            },
            s = n(1),
            l = n.n(s),
            c = n(24),
            u = function() {
                return {
                    build: function(t) {
                        var e = [];
                        "string" == typeof t && (t = [t]);
                        for (var n = 0, r = t.length; n < r; n++) {
                            var i = {},
                                o = t[n];
                            switch (i.property = o, o) {
                                case "border-radius-c":
                                    i.property = "border-radius"
                            }
                            switch (o) {
                                case "top":
                                case "right":
                                case "bottom":
                                case "left":
                                case "margin-top":
                                case "margin-right":
                                case "margin-bottom":
                                case "margin-left":
                                case "padding-top":
                                case "padding-right":
                                case "padding-bottom":
                                case "padding-left":
                                case "width":
                                case "max-width":
                                case "min-width":
                                case "height":
                                case "max-height":
                                case "min-height":
                                case "flex-basis":
                                    i.fixedValues = ["initial", "inherit", "auto"];
                                    break;
                                case "font-size":
                                    i.fixedValues = ["medium", "xx-small", "x-small", "small", "large", "x-large", "xx-large", "smaller", "larger", "length", "initial", "inherit"];
                                    break;
                                case "letter-spacing":
                                case "line-height":
                                    i.fixedValues = ["normal", "initial", "inherit"]
                            }
                            switch (o) {
                                case "float":
                                case "position":
                                case "text-align":
                                    i.type = "radio";
                                    break;
                                case "display":
                                case "flex-direction":
                                case "flex-wrap":
                                case "justify-content":
                                case "align-items":
                                case "align-content":
                                case "align-self":
                                case "font-family":
                                case "font-weight":
                                case "border-style":
                                case "box-shadow-type":
                                case "background-repeat":
                                case "background-position":
                                case "background-attachment":
                                case "background-size":
                                case "transition-property":
                                case "transition-timing-function":
                                case "cursor":
                                case "overflow":
                                case "overflow-x":
                                case "overflow-y":
                                    i.type = "select";
                                    break;
                                case "top":
                                case "right":
                                case "bottom":
                                case "left":
                                case "margin-top":
                                case "margin-right":
                                case "margin-bottom":
                                case "margin-left":
                                case "padding-top":
                                case "padding-right":
                                case "padding-bottom":
                                case "padding-left":
                                case "min-height":
                                case "min-width":
                                case "max-height":
                                case "max-width":
                                case "width":
                                case "height":
                                case "font-size":
                                case "letter-spacing":
                                case "line-height":
                                case "text-shadow-h":
                                case "text-shadow-v":
                                case "text-shadow-blur":
                                case "border-radius-c":
                                case "border-top-left-radius":
                                case "border-top-right-radius":
                                case "border-bottom-left-radius":
                                case "border-bottom-right-radius":
                                case "border-width":
                                case "box-shadow-h":
                                case "box-shadow-v":
                                case "box-shadow-blur":
                                case "box-shadow-spread":
                                case "transition-duration":
                                case "perspective":
                                case "transform-rotate-x":
                                case "transform-rotate-y":
                                case "transform-rotate-z":
                                case "transform-scale-x":
                                case "transform-scale-y":
                                case "transform-scale-z":
                                case "order":
                                case "flex-grow":
                                case "flex-shrink":
                                case "flex-basis":
                                    i.type = "integer";
                                    break;
                                case "margin":
                                case "padding":
                                case "border-radius":
                                case "border":
                                case "transform":
                                    i.type = "composite";
                                    break;
                                case "color":
                                case "text-shadow-color":
                                case "background-color":
                                case "border-color":
                                case "box-shadow-color":
                                    i.type = "color";
                                    break;
                                case "text-shadow":
                                case "box-shadow":
                                case "background":
                                case "transition":
                                    i.type = "stack";
                                    break;
                                case "background-image":
                                    i.type = "file"
                            }
                            switch (o) {
                                case "float":
                                case "background-color":
                                case "text-shadow":
                                    i.defaults = "none";
                                    break;
                                case "display":
                                    i.defaults = "block";
                                    break;
                                case "flex-direction":
                                    i.defaults = "row";
                                    break;
                                case "flex-wrap":
                                    i.defaults = "nowrap";
                                    break;
                                case "justify-content":
                                    i.defaults = "flex-start";
                                    break;
                                case "align-items":
                                case "align-content":
                                    i.defaults = "stretch";
                                    break;
                                case "align-self":
                                    i.defaults = "auto";
                                    break;
                                case "position":
                                    i.defaults = "static";
                                    break;
                                case "margin-top":
                                case "margin-right":
                                case "margin-bottom":
                                case "margin-left":
                                case "padding-top":
                                case "padding-right":
                                case "padding-bottom":
                                case "padding-left":
                                case "text-shadow-h":
                                case "text-shadow-v":
                                case "text-shadow-blur":
                                case "border-radius-c":
                                case "box-shadow-h":
                                case "box-shadow-v":
                                case "box-shadow-spread":
                                case "perspective":
                                case "transform-rotate-x":
                                case "transform-rotate-y":
                                case "transform-rotate-z":
                                case "order":
                                case "flex-grow":
                                    i.defaults = 0;
                                    break;
                                case "border-top-left-radius":
                                case "border-top-right-radius":
                                case "border-bottom-left-radius":
                                case "border-bottom-right-radius":
                                    i.defaults = "0px";
                                    break;
                                case "transform-scale-x":
                                case "transform-scale-y":
                                case "transform-scale-z":
                                case "flex-shrink":
                                    i.defaults = 1;
                                    break;
                                case "box-shadow-blur":
                                    i.defaults = "5px";
                                    break;
                                case "top":
                                case "right":
                                case "bottom":
                                case "left":
                                case "min-height":
                                case "min-width":
                                case "max-height":
                                case "max-width":
                                case "width":
                                case "height":
                                case "background-size":
                                case "cursor":
                                case "flex-basis":
                                    i.defaults = "auto";
                                    break;
                                case "font-family":
                                    i.defaults = "Arial, Helvetica, sans-serif";
                                    break;
                                case "font-size":
                                case "border-width":
                                    i.defaults = "medium";
                                    break;
                                case "font-weight":
                                    i.defaults = "400";
                                    break;
                                case "letter-spacing":
                                case "line-height":
                                    i.defaults = "normal";
                                    break;
                                case "color":
                                case "text-shadow-color":
                                case "border-color":
                                case "box-shadow-color":
                                    i.defaults = "black";
                                    break;
                                case "text-align":
                                    i.defaults = "left";
                                    break;
                                case "border-style":
                                    i.defaults = "solid";
                                    break;
                                case "box-shadow-type":
                                    i.defaults = "";
                                    break;
                                case "background-repeat":
                                    i.defaults = "repeat";
                                    break;
                                case "background-position":
                                    i.defaults = "left top";
                                    break;
                                case "background-attachment":
                                    i.defaults = "scroll";
                                    break;
                                case "transition-property":
                                    i.defaults = "width";
                                    break;
                                case "transition-duration":
                                    i.defaults = "2";
                                    break;
                                case "transition-timing-function":
                                    i.defaults = "ease";
                                    break;
                                case "overflow":
                                case "overflow-x":
                                case "overflow-y":
                                    i.defaults = "visible"
                            }
                            switch (o) {
                                case "flex-direction":
                                case "flex-wrap":
                                case "justify-content":
                                case "align-items":
                                case "align-content":
                                    i.requires = {
                                        display: ["flex"]
                                    };
                                    break;
                                case "order":
                                case "flex-basis":
                                case "flex-grow":
                                case "flex-shrink":
                                case "align-self":
                                    i.requiresParent = {
                                        display: ["flex"]
                                    }
                            }
                            switch (o) {
                                case "top":
                                case "bottom":
                                case "margin-top":
                                case "margin-bottom":
                                case "padding-top":
                                case "padding-bottom":
                                case "min-height":
                                case "max-height":
                                case "height":
                                    i.units = ["px", "%", "vh"];
                                    break;
                                case "right":
                                case "left":
                                case "margin-right":
                                case "margin-left":
                                case "padding-right":
                                case "padding-left":
                                case "min-width":
                                case "max-width":
                                case "width":
                                    i.units = ["px", "%", "vw"];
                                    break;
                                case "flex-basis":
                                    i.units = ["px", "%", "vw", "vh"];
                                    break;
                                case "text-shadow-v":
                                case "text-shadow-h":
                                case "text-shadow-blur":
                                case "border-radius-c":
                                case "border-top-left-radius":
                                case "border-top-right-radius":
                                case "border-bottom-left-radius":
                                case "border-bottom-right-radius":
                                case "box-shadow-h":
                                case "box-shadow-v":
                                    i.units = ["px", "%"];
                                    break;
                                case "font-size":
                                case "letter-spacing":
                                case "line-height":
                                    i.units = ["px", "em", "rem", "%"];
                                    break;
                                case "border-width":
                                    i.units = ["px", "em"];
                                    break;
                                case "box-shadow-blur":
                                case "box-shadow-spread":
                                case "perspective":
                                    i.units = ["px"];
                                    break;
                                case "transition-duration":
                                    i.units = ["s"];
                                    break;
                                case "transform-rotate-x":
                                case "transform-rotate-y":
                                case "transform-rotate-z":
                                    i.units = ["deg"]
                            }
                            switch (o) {
                                case "padding-top":
                                case "padding-right":
                                case "padding-bottom":
                                case "padding-left":
                                case "min-height":
                                case "min-width":
                                case "max-height":
                                case "max-width":
                                case "width":
                                case "height":
                                case "font-size":
                                case "text-shadow-blur":
                                case "border-radius-c":
                                case "border-top-left-radius":
                                case "border-top-right-radius":
                                case "border-bottom-left-radius":
                                case "border-bottom-right-radius":
                                case "border-width":
                                case "box-shadow-blur":
                                case "transition-duration":
                                case "perspective":
                                case "flex-basis":
                                    i.min = 0
                            }
                            switch (o) {
                                case "text-shadow":
                                case "box-shadow":
                                case "background":
                                    i.preview = !0
                            }
                            switch (o) {
                                case "background":
                                    i.detached = !0
                            }
                            switch (o) {
                                case "transform-rotate-x":
                                    i.functionName = "rotateX";
                                    break;
                                case "transform-rotate-y":
                                    i.functionName = "rotateY";
                                    break;
                                case "transform-rotate-z":
                                    i.functionName = "rotateZ";
                                    break;
                                case "transform-scale-x":
                                    i.functionName = "scaleX";
                                    break;
                                case "transform-scale-y":
                                    i.functionName = "scaleY";
                                    break;
                                case "transform-scale-z":
                                    i.functionName = "scaleZ";
                                    break;
                                case "background-image":
                                    i.functionName = "url"
                            }
                            switch (o) {
                                case "float":
                                    i.list = [{
                                        value: "none"
                                    }, {
                                        value: "left"
                                    }, {
                                        value: "right"
                                    }];
                                    break;
                                case "display":
                                    i.list = [{
                                        value: "block"
                                    }, {
                                        value: "inline"
                                    }, {
                                        value: "inline-block"
                                    }, {
                                        value: "flex"
                                    }, {
                                        value: "none"
                                    }];
                                    break;
                                case "flex-direction":
                                    i.list = [{
                                        value: "row"
                                    }, {
                                        value: "row-reverse"
                                    }, {
                                        value: "column"
                                    }, {
                                        value: "column-reverse"
                                    }];
                                    break;
                                case "flex-wrap":
                                    i.list = [{
                                        value: "nowrap"
                                    }, {
                                        value: "wrap"
                                    }, {
                                        value: "wrap-reverse"
                                    }];
                                    break;
                                case "justify-content":
                                    i.list = [{
                                        value: "flex-start"
                                    }, {
                                        value: "flex-end"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "space-between"
                                    }, {
                                        value: "space-around"
                                    }, {
                                        value: "space-evenly"
                                    }];
                                    break;
                                case "align-items":
                                    i.list = [{
                                        value: "flex-start"
                                    }, {
                                        value: "flex-end"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "baseline"
                                    }, {
                                        value: "stretch"
                                    }];
                                    break;
                                case "align-content":
                                    i.list = [{
                                        value: "flex-start"
                                    }, {
                                        value: "flex-end"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "space-between"
                                    }, {
                                        value: "space-around"
                                    }, {
                                        value: "stretch"
                                    }];
                                    break;
                                case "align-self":
                                    i.list = [{
                                        value: "auto"
                                    }, {
                                        value: "flex-start"
                                    }, {
                                        value: "flex-end"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "baseline"
                                    }, {
                                        value: "stretch"
                                    }];
                                    break;
                                case "position":
                                    i.list = [{
                                        value: "static"
                                    }, {
                                        value: "relative"
                                    }, {
                                        value: "absolute"
                                    }, {
                                        value: "fixed"
                                    }];
                                    break;
                                case "font-family":
                                    var a = ", sans-serif",
                                        s = ["Arial, Helvetica" + a, "Arial Black, Gadget" + a, "Brush Script MT" + a, "Comic Sans MS, cursive" + a, "Courier New, Courier, monospace", "Georgia, serif", "Helvetica" + a, "Impact, Charcoal" + a, "Lucida Sans Unicode, Lucida Grande" + a, "Tahoma, Geneva" + a, "Times New Roman, Times, serif", "Trebuchet MS, Helvetica" + a, "Verdana, Geneva" + a];
                                    i.list = [];
                                    for (var l = 0, c = s.length; l < c; l++) {
                                        var u = {};
                                        u.value = s[l], u.name = s[l].split(",")[0], i.list.push(u)
                                    }
                                    break;
                                case "font-weight":
                                    i.list = [{
                                        value: "100",
                                        name: "Thin"
                                    }, {
                                        value: "200",
                                        name: "Extra-Light"
                                    }, {
                                        value: "300",
                                        name: "Light"
                                    }, {
                                        value: "400",
                                        name: "Normal"
                                    }, {
                                        value: "500",
                                        name: "Medium"
                                    }, {
                                        value: "600",
                                        name: "Semi-Bold"
                                    }, {
                                        value: "700",
                                        name: "Bold"
                                    }, {
                                        value: "800",
                                        name: "Extra-Bold"
                                    }, {
                                        value: "900",
                                        name: "Ultra-Bold"
                                    }];
                                    break;
                                case "text-align":
                                    i.list = [{
                                        value: "left"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "right"
                                    }, {
                                        value: "justify"
                                    }];
                                    break;
                                case "border-style":
                                    i.list = [{
                                        value: "none"
                                    }, {
                                        value: "solid"
                                    }, {
                                        value: "dotted"
                                    }, {
                                        value: "dashed"
                                    }, {
                                        value: "double"
                                    }, {
                                        value: "groove"
                                    }, {
                                        value: "ridge"
                                    }, {
                                        value: "inset"
                                    }, {
                                        value: "outset"
                                    }];
                                    break;
                                case "box-shadow-type":
                                    i.list = [{
                                        value: "",
                                        name: "Outside"
                                    }, {
                                        value: "inset",
                                        name: "Inside"
                                    }];
                                    break;
                                case "background-repeat":
                                    i.list = [{
                                        value: "repeat"
                                    }, {
                                        value: "repeat-x"
                                    }, {
                                        value: "repeat-y"
                                    }, {
                                        value: "no-repeat"
                                    }];
                                    break;
                                case "background-position":
                                    i.list = [{
                                        value: "left top"
                                    }, {
                                        value: "left center"
                                    }, {
                                        value: "left bottom"
                                    }, {
                                        value: "right top"
                                    }, {
                                        value: "right center"
                                    }, {
                                        value: "right bottom"
                                    }, {
                                        value: "center top"
                                    }, {
                                        value: "center center"
                                    }, {
                                        value: "center bottom"
                                    }];
                                    break;
                                case "background-attachment":
                                    i.list = [{
                                        value: "scroll"
                                    }, {
                                        value: "fixed"
                                    }, {
                                        value: "local"
                                    }];
                                    break;
                                case "background-size":
                                    i.list = [{
                                        value: "auto"
                                    }, {
                                        value: "cover"
                                    }, {
                                        value: "contain"
                                    }];
                                    break;
                                case "transition-property":
                                    i.list = [{
                                        value: "all"
                                    }, {
                                        value: "width"
                                    }, {
                                        value: "height"
                                    }, {
                                        value: "background-color"
                                    }, {
                                        value: "transform"
                                    }, {
                                        value: "box-shadow"
                                    }, {
                                        value: "opacity"
                                    }];
                                    break;
                                case "transition-timing-function":
                                    i.list = [{
                                        value: "linear"
                                    }, {
                                        value: "ease"
                                    }, {
                                        value: "ease-in"
                                    }, {
                                        value: "ease-out"
                                    }, {
                                        value: "ease-in-out"
                                    }];
                                    break;
                                case "cursor":
                                    i.list = [{
                                        value: "auto"
                                    }, {
                                        value: "pointer"
                                    }, {
                                        value: "copy"
                                    }, {
                                        value: "crosshair"
                                    }, {
                                        value: "grab"
                                    }, {
                                        value: "grabbing"
                                    }, {
                                        value: "help"
                                    }, {
                                        value: "move"
                                    }, {
                                        value: "text"
                                    }];
                                    break;
                                case "overflow":
                                case "overflow-x":
                                case "overflow-y":
                                    i.list = [{
                                        value: "visible"
                                    }, {
                                        value: "hidden"
                                    }, {
                                        value: "scroll"
                                    }, {
                                        value: "auto"
                                    }]
                            }
                            switch (o) {
                                case "margin":
                                    i.properties = this.build(["margin-top", "margin-right", "margin-bottom", "margin-left"]);
                                    break;
                                case "padding":
                                    i.properties = this.build(["padding-top", "padding-right", "padding-bottom", "padding-left"]);
                                    break;
                                case "text-shadow":
                                    i.properties = this.build(["text-shadow-h", "text-shadow-v", "text-shadow-blur", "text-shadow-color"]);
                                    break;
                                case "border":
                                    i.properties = this.build(["border-width", "border-style", "border-color"]);
                                    break;
                                case "border-radius":
                                    i.properties = this.build(["border-top-left-radius", "border-top-right-radius", "border-bottom-right-radius", "border-bottom-left-radius"]);
                                    break;
                                case "box-shadow":
                                    i.properties = this.build(["box-shadow-h", "box-shadow-v", "box-shadow-blur", "box-shadow-spread", "box-shadow-color", "box-shadow-type"]);
                                    break;
                                case "background":
                                    i.properties = this.build(["background-image", "background-repeat", "background-position", "background-attachment", "background-size"]);
                                    break;
                                case "transition":
                                    i.properties = this.build(["transition-property", "transition-duration", "transition-timing-function"]);
                                    break;
                                case "transform":
                                    i.properties = this.build(["transform-rotate-x", "transform-rotate-y", "transform-rotate-z", "transform-scale-x", "transform-scale-y", "transform-scale-z"])
                            }
                            e.push(i)
                        }
                        return e
                    }
                }
            },
            d = l.a.Model.extend({
                defaults: {
                    id: "",
                    name: "",
                    open: !0,
                    buildProps: "",
                    extendBuilded: 1,
                    properties: []
                },
                initialize: function(t) {
                    var e, n = t || {},
                        r = this.buildProperties(n.buildProps),
                        i = this.get("name") || "";
                    !this.get("id") && this.set("id", i.replace(/ /g, "_").toLowerCase()), e = r ? this.extendProperties(r) : this.get("properties");
                    var o = new c.default(e);
                    o.sector = this, this.set("properties", o)
                },
                extendProperties: function(t, e, n) {
                    for (var r = t.length, i = e || this.get("properties"), a = this.get("extendBuilded"), s = [], l = 0, c = i.length; l < c; l++) {
                        for (var u = i[l], d = 0, h = 0; h < r; h++) {
                            var f = t[h];
                            if (u.property != f.property && u.id != f.property);
                            else {
                                var p = u.properties;
                                p && p.length && (u.properties = this.extendProperties(f.properties || [], p, 1)), t[h] = a ? Object(o.extend)(f, u) : u, s[h] = t[h], d = 1
                            }
                        }
                        d || (t.push(u), s.push(u))
                    }
                    return n ? s.filter(function(t) {
                        return t
                    }) : t
                },
                buildProperties: function(t) {
                    var e = t || [];
                    if (e.length) return this.propFactory || (this.propFactory = new u), this.propFactory.build(e)
                }
            }),
            h = l.a.Collection.extend({
                model: d,
                initialize: function() {
                    this.listenTo(this, "reset", this.onReset)
                },
                onReset: function(t) {
                    ((arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}).previousModels || []).forEach(function(t) {
                        return t.get("properties").reset()
                    })
                }
            }),
            f = n(3),
            p = n(9),
            g = n(19),
            v = l.a.View.extend({
                template: Object(o.template)('\n  <div class="<%= pfx %>title" data-sector-title>\n    <i id="<%= pfx %>caret" class="fa"></i>\n    <%= label %>\n  </div>'),
                events: {
                    "click [data-sector-title]": "toggle"
                },
                initialize: function(t) {
                    this.config = t.config || {}, this.em = this.config.em, this.pfx = this.config.stylePrefix || "", this.target = t.target || {}, this.propTarget = t.propTarget || {}, this.caretR = "fa-caret-right", this.caretD = "fa-caret-down";
                    var e = this.model;
                    this.listenTo(e, "change:open", this.updateOpen), this.listenTo(e, "updateVisibility", this.updateVisibility), this.listenTo(e, "destroy remove", this.remove)
                },
                updateVisibility: function() {
                    var t;
                    this.model.get("properties").each(function(e) {
                        e.get("visible") && (t = 1)
                    }), this.el.style.display = t ? "" : "none"
                },
                updateOpen: function() {
                    this.model.get("open") ? this.show() : this.hide()
                },
                show: function() {
                    this.$el.addClass(this.pfx + "open"), this.getPropertiesEl().style.display = "", this.$caret.removeClass(this.caretR).addClass(this.caretD)
                },
                hide: function() {
                    this.$el.removeClass(this.pfx + "open"), this.getPropertiesEl().style.display = "none", this.$caret.removeClass(this.caretD).addClass(this.caretR)
                },
                getPropertiesEl: function() {
                    return this.$el.find(".".concat(this.pfx, "properties")).get(0)
                },
                toggle: function(t) {
                    var e = this.model.get("open") ? 0 : 1;
                    this.model.set("open", e)
                },
                render: function() {
                    var t = this.pfx,
                        e = this.model,
                        n = this.em,
                        r = this.$el,
                        i = e.attributes,
                        o = i.id,
                        a = i.name,
                        s = n && n.t("styleManager.sectors.".concat(o)) || a;
                    return r.html(this.template({
                        pfx: t,
                        label: s
                    })), this.$caret = r.find("#".concat(t, "caret")), this.renderProperties(), r.attr("class", "".concat(t, "sector ").concat(t, "sector__").concat(o, " no-select")), this.updateOpen(), this
                },
                renderProperties: function() {
                    var t = this.model.get("properties");
                    if (t) {
                        var e = new g.default({
                            collection: t,
                            target: this.target,
                            propTarget: this.propTarget,
                            config: this.config
                        });
                        this.$el.append(e.render().el)
                    }
                }
            });

        function m(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function b(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? m(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : m(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var y = "hc-state",
            w = l.a.View.extend({
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = t.config || {};
                    this.pfx = e.stylePrefix || "", this.ppfx = e.pStylePrefix || "", this.target = t.target || {}, this.config = e;
                    var n = {};
                    Object(o.extend)(n, l.a.Events);
                    var r = document.body,
                        i = document.createElement("el-".concat((new Date).getTime()));
                    r.appendChild(i), n.computedDefault = b({}, window.getComputedStyle(i)), r.removeChild(i), this.propTarget = n;
                    var a = this.collection;
                    this.listenTo(a, "add", this.addTo), this.listenTo(a, "reset", this.render), this.listenTo(this.target, "component:toggled component:update:classes change:state change:device frame:resized", this.targetUpdated)
                },
                remove: function() {
                    var t = this;
                    l.a.View.prototype.remove.apply(this, arguments), ["target", "config", "propTarget"].forEach(function(e) {
                        return t[e] = {}
                    })
                },
                addTo: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                    this.addToCollection(t, null, n)
                },
                toggleStateCls: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [],
                        e = arguments.length > 1 ? arguments[1] : void 0;
                    t.forEach(function(t) {
                        var n = t.getEl();
                        n && n.classList && n.classList[e ? "add" : "remove"](y)
                    })
                },
                targetUpdated: function(t) {
                    var e = this.target,
                        n = this.propTarget,
                        r = e.getSelectedAll(),
                        i = e.getSelected(),
                        o = t && t.toHTML ? t : i;
                    if (o && this.toggleStateCls([o]), i) {
                        var a = e.get("Config").devicePreviewMode ? "" : e.get("state"),
                            s = e.get("SelectorManager").getConfig().componentFirst,
                            l = i.getEl();
                        if (n.helper = null, n.targets = null, l && Object(f.q)(l)) {
                            var c = a ? ":".concat(a) : null;
                            n.computed = window.getComputedStyle(l, c)
                        }
                        var u = e.get("StyleManager");
                        i = u.getModelToStyle(i), a && (function() {
                            var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                                r = e.get("CssComposer"),
                                i = r.getAll(),
                                o = r.getClassRule(y);
                            o ? (i.remove(o), i.add(o)) : o = r.setClassRule(y), o.set("important", 1), o.setStyle(t), n.helper = o
                        }(i.getStyle()), this.toggleStateCls(r, 1)), n.model = i, s && (n.targets = r.map(function(t) {
                            return u.getModelToStyle(t)
                        }).filter(Boolean)), n.trigger("update")
                    }
                },
                setTarget: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.target,
                        r = Object(o.isArray)(t) ? t : [t],
                        i = e.targetIsClass,
                        a = e.stylable,
                        s = [];
                    r.forEach(function(t) {
                        var e = t;
                        if (Object(o.isString)(t)) {
                            var r, l = n.get("CssComposer").getAll();
                            i && (r = l.filter(function(e) {
                                return e.get("selectors").getFullString() === t
                            })[0]), r || (r = l.filter(function(e) {
                                return e.get("selectorsAdd") === t
                            })[0]), r || (r = l.add({
                                selectors: [],
                                selectorsAdd: t
                            })), a && r.set({
                                stylable: a
                            }), e = r
                        }
                        s.push(e)
                    });
                    var l = this.propTarget;
                    return l.targets = s, l.trigger("update", {
                        targets: s
                    }), s
                },
                addToCollection: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = this.pfx,
                        i = this.target,
                        o = this.propTarget,
                        a = this.config,
                        s = this.el,
                        l = e || s,
                        c = new v({
                            model: t,
                            id: "".concat(r).concat(t.get("id")),
                            name: t.get("name"),
                            properties: t.get("properties"),
                            target: i,
                            propTarget: o,
                            config: a
                        }).render().el;
                    return Object(p.b)(l, c, n.at), c
                },
                render: function() {
                    var t = this,
                        e = document.createDocumentFragment(),
                        n = this.$el,
                        r = this.pfx,
                        i = this.ppfx;
                    return n.empty(), this.collection.each(function(n) {
                        return t.addToCollection(n, e)
                    }), n.append(e), n.addClass("".concat(r, "sectors ").concat(i, "one-bg ").concat(i, "two-color")), this
                }
            });

        function x(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function O(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? x(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : x(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n, r = {};
            return {
                PropertyFactory: {
                    build: function(t) {
                        var e = [];
                        "string" == typeof t && (t = [t]);
                        for (var n = 0, r = t.length; n < r; n++) {
                            var i = {},
                                o = t[n];
                            switch (i.property = o, o) {
                                case "border-radius-c":
                                    i.property = "border-radius"
                            }
                            switch (o) {
                                case "top":
                                case "right":
                                case "bottom":
                                case "left":
                                case "margin-top":
                                case "margin-right":
                                case "margin-bottom":
                                case "margin-left":
                                case "padding-top":
                                case "padding-right":
                                case "padding-bottom":
                                case "padding-left":
                                case "width":
                                case "max-width":
                                case "min-width":
                                case "height":
                                case "max-height":
                                case "min-height":
                                case "flex-basis":
                                    i.fixedValues = ["initial", "inherit", "auto"];
                                    break;
                                case "font-size":
                                    i.fixedValues = ["medium", "xx-small", "x-small", "small", "large", "x-large", "xx-large", "smaller", "larger", "length", "initial", "inherit"];
                                    break;
                                case "letter-spacing":
                                case "line-height":
                                    i.fixedValues = ["normal", "initial", "inherit"]
                            }
                            switch (o) {
                                case "float":
                                case "position":
                                case "text-align":
                                    i.type = "radio";
                                    break;
                                case "display":
                                case "flex-direction":
                                case "flex-wrap":
                                case "justify-content":
                                case "align-items":
                                case "align-content":
                                case "align-self":
                                case "font-family":
                                case "font-weight":
                                case "border-style":
                                case "box-shadow-type":
                                case "background-repeat":
                                case "background-position":
                                case "background-attachment":
                                case "background-size":
                                case "transition-property":
                                case "transition-timing-function":
                                case "cursor":
                                case "overflow":
                                case "overflow-x":
                                case "overflow-y":
                                    i.type = "select";
                                    break;
                                case "top":
                                case "right":
                                case "bottom":
                                case "left":
                                case "margin-top":
                                case "margin-right":
                                case "margin-bottom":
                                case "margin-left":
                                case "padding-top":
                                case "padding-right":
                                case "padding-bottom":
                                case "padding-left":
                                case "min-height":
                                case "min-width":
                                case "max-height":
                                case "max-width":
                                case "width":
                                case "height":
                                case "font-size":
                                case "letter-spacing":
                                case "line-height":
                                case "text-shadow-h":
                                case "text-shadow-v":
                                case "text-shadow-blur":
                                case "border-radius-c":
                                case "border-top-left-radius":
                                case "border-top-right-radius":
                                case "border-bottom-left-radius":
                                case "border-bottom-right-radius":
                                case "border-width":
                                case "box-shadow-h":
                                case "box-shadow-v":
                                case "box-shadow-blur":
                                case "box-shadow-spread":
                                case "transition-duration":
                                case "perspective":
                                case "transform-rotate-x":
                                case "transform-rotate-y":
                                case "transform-rotate-z":
                                case "transform-scale-x":
                                case "transform-scale-y":
                                case "transform-scale-z":
                                case "order":
                                case "flex-grow":
                                case "flex-shrink":
                                case "flex-basis":
                                    i.type = "integer";
                                    break;
                                case "margin":
                                case "padding":
                                case "border-radius":
                                case "border":
                                case "transform":
                                    i.type = "composite";
                                    break;
                                case "color":
                                case "text-shadow-color":
                                case "background-color":
                                case "border-color":
                                case "box-shadow-color":
                                    i.type = "color";
                                    break;
                                case "text-shadow":
                                case "box-shadow":
                                case "background":
                                case "transition":
                                    i.type = "stack";
                                    break;
                                case "background-image":
                                    i.type = "file"
                            }
                            switch (o) {
                                case "float":
                                case "background-color":
                                case "text-shadow":
                                    i.defaults = "none";
                                    break;
                                case "display":
                                    i.defaults = "block";
                                    break;
                                case "flex-direction":
                                    i.defaults = "row";
                                    break;
                                case "flex-wrap":
                                    i.defaults = "nowrap";
                                    break;
                                case "justify-content":
                                    i.defaults = "flex-start";
                                    break;
                                case "align-items":
                                case "align-content":
                                    i.defaults = "stretch";
                                    break;
                                case "align-self":
                                    i.defaults = "auto";
                                    break;
                                case "position":
                                    i.defaults = "static";
                                    break;
                                case "margin-top":
                                case "margin-right":
                                case "margin-bottom":
                                case "margin-left":
                                case "padding-top":
                                case "padding-right":
                                case "padding-bottom":
                                case "padding-left":
                                case "text-shadow-h":
                                case "text-shadow-v":
                                case "text-shadow-blur":
                                case "border-radius-c":
                                case "box-shadow-h":
                                case "box-shadow-v":
                                case "box-shadow-spread":
                                case "perspective":
                                case "transform-rotate-x":
                                case "transform-rotate-y":
                                case "transform-rotate-z":
                                case "order":
                                case "flex-grow":
                                    i.defaults = 0;
                                    break;
                                case "border-top-left-radius":
                                case "border-top-right-radius":
                                case "border-bottom-left-radius":
                                case "border-bottom-right-radius":
                                    i.defaults = "0px";
                                    break;
                                case "transform-scale-x":
                                case "transform-scale-y":
                                case "transform-scale-z":
                                case "flex-shrink":
                                    i.defaults = 1;
                                    break;
                                case "box-shadow-blur":
                                    i.defaults = "5px";
                                    break;
                                case "top":
                                case "right":
                                case "bottom":
                                case "left":
                                case "min-height":
                                case "min-width":
                                case "max-height":
                                case "max-width":
                                case "width":
                                case "height":
                                case "background-size":
                                case "cursor":
                                case "flex-basis":
                                    i.defaults = "auto";
                                    break;
                                case "font-family":
                                    i.defaults = "Arial, Helvetica, sans-serif";
                                    break;
                                case "font-size":
                                case "border-width":
                                    i.defaults = "medium";
                                    break;
                                case "font-weight":
                                    i.defaults = "400";
                                    break;
                                case "letter-spacing":
                                case "line-height":
                                    i.defaults = "normal";
                                    break;
                                case "color":
                                case "text-shadow-color":
                                case "border-color":
                                case "box-shadow-color":
                                    i.defaults = "black";
                                    break;
                                case "text-align":
                                    i.defaults = "left";
                                    break;
                                case "border-style":
                                    i.defaults = "solid";
                                    break;
                                case "box-shadow-type":
                                    i.defaults = "";
                                    break;
                                case "background-repeat":
                                    i.defaults = "repeat";
                                    break;
                                case "background-position":
                                    i.defaults = "left top";
                                    break;
                                case "background-attachment":
                                    i.defaults = "scroll";
                                    break;
                                case "transition-property":
                                    i.defaults = "width";
                                    break;
                                case "transition-duration":
                                    i.defaults = "2";
                                    break;
                                case "transition-timing-function":
                                    i.defaults = "ease";
                                    break;
                                case "overflow":
                                case "overflow-x":
                                case "overflow-y":
                                    i.defaults = "visible"
                            }
                            switch (o) {
                                case "flex-direction":
                                case "flex-wrap":
                                case "justify-content":
                                case "align-items":
                                case "align-content":
                                    i.requires = {
                                        display: ["flex"]
                                    };
                                    break;
                                case "order":
                                case "flex-basis":
                                case "flex-grow":
                                case "flex-shrink":
                                case "align-self":
                                    i.requiresParent = {
                                        display: ["flex"]
                                    }
                            }
                            switch (o) {
                                case "top":
                                case "bottom":
                                case "margin-top":
                                case "margin-bottom":
                                case "padding-top":
                                case "padding-bottom":
                                case "min-height":
                                case "max-height":
                                case "height":
                                    i.units = ["px", "%", "vh"];
                                    break;
                                case "right":
                                case "left":
                                case "margin-right":
                                case "margin-left":
                                case "padding-right":
                                case "padding-left":
                                case "min-width":
                                case "max-width":
                                case "width":
                                    i.units = ["px", "%", "vw"];
                                    break;
                                case "flex-basis":
                                    i.units = ["px", "%", "vw", "vh"];
                                    break;
                                case "text-shadow-v":
                                case "text-shadow-h":
                                case "text-shadow-blur":
                                case "border-radius-c":
                                case "border-top-left-radius":
                                case "border-top-right-radius":
                                case "border-bottom-left-radius":
                                case "border-bottom-right-radius":
                                case "box-shadow-h":
                                case "box-shadow-v":
                                    i.units = ["px", "%"];
                                    break;
                                case "font-size":
                                case "letter-spacing":
                                case "line-height":
                                    i.units = ["px", "em", "rem", "%"];
                                    break;
                                case "border-width":
                                    i.units = ["px", "em"];
                                    break;
                                case "box-shadow-blur":
                                case "box-shadow-spread":
                                case "perspective":
                                    i.units = ["px"];
                                    break;
                                case "transition-duration":
                                    i.units = ["s"];
                                    break;
                                case "transform-rotate-x":
                                case "transform-rotate-y":
                                case "transform-rotate-z":
                                    i.units = ["deg"]
                            }
                            switch (o) {
                                case "padding-top":
                                case "padding-right":
                                case "padding-bottom":
                                case "padding-left":
                                case "min-height":
                                case "min-width":
                                case "max-height":
                                case "max-width":
                                case "width":
                                case "height":
                                case "font-size":
                                case "text-shadow-blur":
                                case "border-radius-c":
                                case "border-top-left-radius":
                                case "border-top-right-radius":
                                case "border-bottom-left-radius":
                                case "border-bottom-right-radius":
                                case "border-width":
                                case "box-shadow-blur":
                                case "transition-duration":
                                case "perspective":
                                case "flex-basis":
                                    i.min = 0
                            }
                            switch (o) {
                                case "text-shadow":
                                case "box-shadow":
                                case "background":
                                    i.preview = !0
                            }
                            switch (o) {
                                case "background":
                                    i.detached = !0
                            }
                            switch (o) {
                                case "transform-rotate-x":
                                    i.functionName = "rotateX";
                                    break;
                                case "transform-rotate-y":
                                    i.functionName = "rotateY";
                                    break;
                                case "transform-rotate-z":
                                    i.functionName = "rotateZ";
                                    break;
                                case "transform-scale-x":
                                    i.functionName = "scaleX";
                                    break;
                                case "transform-scale-y":
                                    i.functionName = "scaleY";
                                    break;
                                case "transform-scale-z":
                                    i.functionName = "scaleZ";
                                    break;
                                case "background-image":
                                    i.functionName = "url"
                            }
                            switch (o) {
                                case "float":
                                    i.list = [{
                                        value: "none"
                                    }, {
                                        value: "left"
                                    }, {
                                        value: "right"
                                    }];
                                    break;
                                case "display":
                                    i.list = [{
                                        value: "block"
                                    }, {
                                        value: "inline"
                                    }, {
                                        value: "inline-block"
                                    }, {
                                        value: "flex"
                                    }, {
                                        value: "none"
                                    }];
                                    break;
                                case "flex-direction":
                                    i.list = [{
                                        value: "row"
                                    }, {
                                        value: "row-reverse"
                                    }, {
                                        value: "column"
                                    }, {
                                        value: "column-reverse"
                                    }];
                                    break;
                                case "flex-wrap":
                                    i.list = [{
                                        value: "nowrap"
                                    }, {
                                        value: "wrap"
                                    }, {
                                        value: "wrap-reverse"
                                    }];
                                    break;
                                case "justify-content":
                                    i.list = [{
                                        value: "flex-start"
                                    }, {
                                        value: "flex-end"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "space-between"
                                    }, {
                                        value: "space-around"
                                    }, {
                                        value: "space-evenly"
                                    }];
                                    break;
                                case "align-items":
                                    i.list = [{
                                        value: "flex-start"
                                    }, {
                                        value: "flex-end"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "baseline"
                                    }, {
                                        value: "stretch"
                                    }];
                                    break;
                                case "align-content":
                                    i.list = [{
                                        value: "flex-start"
                                    }, {
                                        value: "flex-end"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "space-between"
                                    }, {
                                        value: "space-around"
                                    }, {
                                        value: "stretch"
                                    }];
                                    break;
                                case "align-self":
                                    i.list = [{
                                        value: "auto"
                                    }, {
                                        value: "flex-start"
                                    }, {
                                        value: "flex-end"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "baseline"
                                    }, {
                                        value: "stretch"
                                    }];
                                    break;
                                case "position":
                                    i.list = [{
                                        value: "static"
                                    }, {
                                        value: "relative"
                                    }, {
                                        value: "absolute"
                                    }, {
                                        value: "fixed"
                                    }];
                                    break;
                                case "font-family":
                                    var a = ", sans-serif",
                                        s = ["Arial, Helvetica" + a, "Arial Black, Gadget" + a, "Brush Script MT" + a, "Comic Sans MS, cursive" + a, "Courier New, Courier, monospace", "Georgia, serif", "Helvetica" + a, "Impact, Charcoal" + a, "Lucida Sans Unicode, Lucida Grande" + a, "Tahoma, Geneva" + a, "Times New Roman, Times, serif", "Trebuchet MS, Helvetica" + a, "Verdana, Geneva" + a];
                                    i.list = [];
                                    for (var l = 0, c = s.length; l < c; l++) {
                                        var u = {};
                                        u.value = s[l], u.name = s[l].split(",")[0], i.list.push(u)
                                    }
                                    break;
                                case "font-weight":
                                    i.list = [{
                                        value: "100",
                                        name: "Thin"
                                    }, {
                                        value: "200",
                                        name: "Extra-Light"
                                    }, {
                                        value: "300",
                                        name: "Light"
                                    }, {
                                        value: "400",
                                        name: "Normal"
                                    }, {
                                        value: "500",
                                        name: "Medium"
                                    }, {
                                        value: "600",
                                        name: "Semi-Bold"
                                    }, {
                                        value: "700",
                                        name: "Bold"
                                    }, {
                                        value: "800",
                                        name: "Extra-Bold"
                                    }, {
                                        value: "900",
                                        name: "Ultra-Bold"
                                    }];
                                    break;
                                case "text-align":
                                    i.list = [{
                                        value: "left"
                                    }, {
                                        value: "center"
                                    }, {
                                        value: "right"
                                    }, {
                                        value: "justify"
                                    }];
                                    break;
                                case "border-style":
                                    i.list = [{
                                        value: "none"
                                    }, {
                                        value: "solid"
                                    }, {
                                        value: "dotted"
                                    }, {
                                        value: "dashed"
                                    }, {
                                        value: "double"
                                    }, {
                                        value: "groove"
                                    }, {
                                        value: "ridge"
                                    }, {
                                        value: "inset"
                                    }, {
                                        value: "outset"
                                    }];
                                    break;
                                case "box-shadow-type":
                                    i.list = [{
                                        value: "",
                                        name: "Outside"
                                    }, {
                                        value: "inset",
                                        name: "Inside"
                                    }];
                                    break;
                                case "background-repeat":
                                    i.list = [{
                                        value: "repeat"
                                    }, {
                                        value: "repeat-x"
                                    }, {
                                        value: "repeat-y"
                                    }, {
                                        value: "no-repeat"
                                    }];
                                    break;
                                case "background-position":
                                    i.list = [{
                                        value: "left top"
                                    }, {
                                        value: "left center"
                                    }, {
                                        value: "left bottom"
                                    }, {
                                        value: "right top"
                                    }, {
                                        value: "right center"
                                    }, {
                                        value: "right bottom"
                                    }, {
                                        value: "center top"
                                    }, {
                                        value: "center center"
                                    }, {
                                        value: "center bottom"
                                    }];
                                    break;
                                case "background-attachment":
                                    i.list = [{
                                        value: "scroll"
                                    }, {
                                        value: "fixed"
                                    }, {
                                        value: "local"
                                    }];
                                    break;
                                case "background-size":
                                    i.list = [{
                                        value: "auto"
                                    }, {
                                        value: "cover"
                                    }, {
                                        value: "contain"
                                    }];
                                    break;
                                case "transition-property":
                                    i.list = [{
                                        value: "all"
                                    }, {
                                        value: "width"
                                    }, {
                                        value: "height"
                                    }, {
                                        value: "background-color"
                                    }, {
                                        value: "transform"
                                    }, {
                                        value: "box-shadow"
                                    }, {
                                        value: "opacity"
                                    }];
                                    break;
                                case "transition-timing-function":
                                    i.list = [{
                                        value: "linear"
                                    }, {
                                        value: "ease"
                                    }, {
                                        value: "ease-in"
                                    }, {
                                        value: "ease-out"
                                    }, {
                                        value: "ease-in-out"
                                    }];
                                    break;
                                case "cursor":
                                    i.list = [{
                                        value: "auto"
                                    }, {
                                        value: "pointer"
                                    }, {
                                        value: "copy"
                                    }, {
                                        value: "crosshair"
                                    }, {
                                        value: "grab"
                                    }, {
                                        value: "grabbing"
                                    }, {
                                        value: "help"
                                    }, {
                                        value: "move"
                                    }, {
                                        value: "text"
                                    }];
                                    break;
                                case "overflow":
                                case "overflow-x":
                                case "overflow-y":
                                    i.list = [{
                                        value: "visible"
                                    }, {
                                        value: "hidden"
                                    }, {
                                        value: "scroll"
                                    }, {
                                        value: "auto"
                                    }]
                            }
                            switch (o) {
                                case "margin":
                                    i.properties = this.build(["margin-top", "margin-right", "margin-bottom", "margin-left"]);
                                    break;
                                case "padding":
                                    i.properties = this.build(["padding-top", "padding-right", "padding-bottom", "padding-left"]);
                                    break;
                                case "text-shadow":
                                    i.properties = this.build(["text-shadow-h", "text-shadow-v", "text-shadow-blur", "text-shadow-color"]);
                                    break;
                                case "border":
                                    i.properties = this.build(["border-width", "border-style", "border-color"]);
                                    break;
                                case "border-radius":
                                    i.properties = this.build(["border-top-left-radius", "border-top-right-radius", "border-bottom-right-radius", "border-bottom-left-radius"]);
                                    break;
                                case "box-shadow":
                                    i.properties = this.build(["box-shadow-h", "box-shadow-v", "box-shadow-blur", "box-shadow-spread", "box-shadow-color", "box-shadow-type"]);
                                    break;
                                case "background":
                                    i.properties = this.build(["background-image", "background-repeat", "background-position", "background-attachment", "background-size"]);
                                    break;
                                case "transition":
                                    i.properties = this.build(["transition-property", "transition-duration", "transition-timing-function"]);
                                    break;
                                case "transform":
                                    i.properties = this.build(["transform-rotate-x", "transform-rotate-y", "transform-rotate-z", "transform-scale-x", "transform-scale-y", "transform-scale-z"])
                            }
                            e.push(i)
                        }
                        return e
                    }
                },
                name: "StyleManager",
                getConfig: function() {
                    return r
                },
                init: function(i) {
                    var o = (r = O(O({}, a), i)).pStylePrefix;
                    return this.em = r.em, o && (r.stylePrefix = o + r.stylePrefix), t = new c.default, e = new h([], r), n = new w({
                        collection: e,
                        target: r.em,
                        config: r
                    }), this
                },
                onLoad: function() {
                    e.add(r.sectors, {
                        silent: !0
                    })
                },
                postRender: function() {
                    var t = this.getConfig().appendTo;
                    t && (Object(o.isElement)(t) ? t : document.querySelector(t)).appendChild(this.render())
                },
                addSector: function(t, n) {
                    var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        i = this.getSector(t);
                    return i || (n.id = t, i = e.add(n, r)), i
                },
                getSector: function(t) {
                    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = e.where({
                            id: t
                        })[0];
                    return !r && n.warn && this._logNoSector(t), r
                },
                removeSector: function(t) {
                    return this.getSectors().remove(this.getSector(t, {
                        warn: 1
                    }))
                },
                getSectors: function() {
                    return e
                },
                addProperty: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = this.getSector(t, {
                            warn: 1
                        }),
                        i = null;
                    return r && (i = r.get("properties").add(e, n)), i
                },
                getProperty: function(t, e) {
                    var n, r = this.getSector(t, {
                        warn: 1
                    });
                    return r && (n = r.get("properties").filter(function(t) {
                        return t.get("property") === e || t.get("id") === e
                    })[0]), n || null
                },
                removeProperty: function(t, e) {
                    var n = this.getProperties(t);
                    return n && n.remove(this.getProperty(t, e))
                },
                getProperties: function(t) {
                    var e = null,
                        n = this.getSector(t, {
                            warn: 1
                        });
                    return n && (e = n.get("properties")), e
                },
                getModelToStyle: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = r.em,
                        i = e.skipAdd,
                        o = t.get("classes"),
                        a = t.getId();
                    if (n) {
                        var s, l = n.getConfig(),
                            c = n.get("UndoManager"),
                            u = n.get("CssComposer"),
                            d = n.get("SelectorManager"),
                            h = d ? d.getConfig() : {},
                            f = l.devicePreviewMode ? "" : n.get("state"),
                            p = o.getStyleable(),
                            g = p.length,
                            v = !h.componentFirst || e.useClasses,
                            m = {
                                noCount: 1
                            },
                            b = {
                                state: f,
                                addOpts: m
                            };
                        if (c.stop(), g && v) {
                            var y = n.getCurrentMedia();
                            (s = u.get(p, f, y)) || i || (s = u.add(p, f, y, {}, m))
                        } else l.avoidInlineStyle && (!(s = u.getIdRule(a, b)) && !i && (s = u.setIdRule(a, {}, b)), t.is("wrapper") && s.set("wrapper", 1));
                        s && (t = s), c.start()
                    }
                    return t
                },
                addType: function(e, n) {
                    t.addType(e, n)
                },
                getType: function(e) {
                    return t.getType(e)
                },
                getTypes: function() {
                    return t.getTypes()
                },
                createType: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = e.model,
                        i = void 0 === n ? {} : n,
                        o = e.view,
                        a = void 0 === o ? {} : o,
                        s = this.getType(t);
                    if (s) return new s.view(O({
                        model: new s.model(i),
                        config: r
                    }, a))
                },
                setTarget: function(t, e) {
                    return n.setTarget(t, e)
                },
                getEmitter: function() {
                    return n.propTarget
                },
                render: function() {
                    return n.render().el
                },
                _logNoSector: function(t) {
                    var e = this.em;
                    e && e.logWarning("'".concat(t, "' sector not found"))
                },
                destroy: function() {
                    [t, e].forEach(function(t) {
                        t.reset(), t.stopListening()
                    }), n.remove(), [r, t, e, n].forEach(function(t) {
                        return {}
                    }), this.em = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = {
                devices: []
            },
            a = n(1),
            s = n.n(a),
            l = s.a.Model.extend({
                idAttribute: "name",
                defaults: {
                    name: "",
                    width: null,
                    height: "",
                    widthMedia: null,
                    priority: null
                },
                initialize: function() {
                    var t = this;
                    null === this.get("widthMedia") && this.set("widthMedia", this.get("width")), null === this.get("width") && this.set("width", this.get("widthMedia")), !this.get("priority") && this.set("priority", parseFloat(this.get("widthMedia")) || 0), ["width", "height", "widthMedia"].forEach(function(e) {
                        return t.checkUnit(e)
                    })
                },
                checkUnit: function(t) {
                    var e = this.get(t) || "";
                    (parseFloat(e) || 0).toString() === e.toString() && this.set(t, "".concat(e, "px"))
                }
            }),
            c = s.a.Collection.extend({
                model: l,
                comparator: function(t, e) {
                    var n = Number.MAX_VALUE;
                    return (e.get("priority") || n) - (t.get("priority") || n)
                },
                getSorted: function() {
                    return this.sort()
                }
            }),
            u = n(0),
            d = s.a.View.extend({
                template: Object(u.template)('\n    <div class="<%= ppfx %>device-label"><%= deviceLabel %></div>\n    <div class="<%= ppfx %>field <%= ppfx %>select">\n      <span id="<%= ppfx %>input-holder">\n        <select class="<%= ppfx %>devices"></select>\n      </span>\n      <div class="<%= ppfx %>sel-arrow">\n        <div class="<%= ppfx %>d-s-arrow"></div>\n      </div>\n    </div>\n    <button style="display:none" class="<%= ppfx %>add-trasp">+</button>'),
                events: {
                    change: "updateDevice"
                },
                initialize: function(t) {
                    this.config = t.config || {}, this.em = this.config.em, this.ppfx = this.config.pStylePrefix || "", this.events["click ." + this.ppfx + "add-trasp"] = this.startAdd, this.listenTo(this.em, "change:device", this.updateSelect), this.delegateEvents()
                },
                startAdd: function() {},
                updateDevice: function() {
                    var t = this.em;
                    if (t) {
                        var e = this.devicesEl,
                            n = e ? e.val() : "";
                        t.set("device", n)
                    }
                },
                updateSelect: function() {
                    var t = this.em,
                        e = this.devicesEl;
                    if (t && t.getDeviceModel && e) {
                        var n = t.getDeviceModel(),
                            r = n ? n.get("name") : "";
                        e.val(r)
                    }
                },
                getOptions: function() {
                    var t = this.collection,
                        e = this.em,
                        n = "";
                    return t.each(function(t) {
                        var r = t.attributes,
                            i = r.name,
                            o = r.id,
                            a = e && e.t && e.t("deviceManager.devices.".concat(o)) || i;
                        n += '<option value="'.concat(i, '">').concat(a, "</option>")
                    }), n
                },
                render: function() {
                    var t = this.em,
                        e = this.ppfx,
                        n = this.$el,
                        r = this.el;
                    return n.html(this.template({
                        ppfx: e,
                        deviceLabel: t && t.t && t.t("deviceManager.device")
                    })), this.devicesEl = n.find(".".concat(e, "devices")), this.devicesEl.append(this.getOptions()), r.className = "".concat(e, "devices-c"), this
                }
            });

        function h(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function f(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? h(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : h(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n = {};
            return {
                name: "DeviceManager",
                init: function(r) {
                    var i = this;
                    for (var a in n = r || {}, o) a in n || (n[a] = o[a]);
                    return t = new c, (n.devices || []).forEach(function(t) {
                        return i.add(t.id || t.name, t.width, t)
                    }), e = new d({
                        collection: t,
                        config: n
                    }), this
                },
                add: function(e, n) {
                    var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        i = f(f({}, r), {}, {
                            id: e,
                            name: r.name || e,
                            width: n
                        });
                    return t.add(i)
                },
                get: function(e) {
                    return t.get(e)
                },
                getAll: function() {
                    return t
                },
                render: function() {
                    return e.render().el
                },
                destroy: function() {
                    t.reset(), t.stopListening(), e.remove(), [t, e].forEach(function(t) {
                        return null
                    }), n = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = {
                id: "gjs-",
                autosave: 1,
                autoload: 1,
                type: "local",
                stepsBeforeSave: 1,
                storeComponents: 1,
                storeStyles: 1,
                storeHtml: 1,
                storeCss: 1,
                checkLocal: 1,
                params: {},
                headers: {},
                urlStore: "",
                urlLoad: "",
                beforeSend: function(t, e) {},
                onComplete: function(t, e) {},
                contentTypeJson: !0,
                credentials: "include",
                fetchOptions: ""
            },
            a = n(1),
            s = n.n(a),
            l = s.a.Model.extend({
                defaults: {
                    checkLocal: !0
                },
                store: function(t, e) {
                    for (var n in this.checkStorageEnvironment(), t) localStorage.setItem(n, t[n]);
                    "function" == typeof e && e()
                },
                load: function(t, e) {
                    this.checkStorageEnvironment();
                    for (var n = {}, r = 0, i = t.length; r < i; r++) {
                        var o = localStorage.getItem(t[r]);
                        o && (n[t[r]] = o)
                    }
                    return "function" == typeof e && e(n), n
                },
                remove: function(t) {
                    this.checkStorageEnvironment();
                    for (var e = 0, n = t.length; e < n; e++) localStorage.removeItem(t[e])
                },
                checkStorageEnvironment: function() {
                    this.get("checkLocal") && !localStorage && console.warn("Your browser doesn't support localStorage")
                }
            }),
            c = n(28),
            u = n(0);

        function d(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function h(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? d(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : d(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var f = s.a.Model.extend({
            fetch: c.a,
            defaults: {
                urlStore: "",
                urlLoad: "",
                params: {},
                beforeSend: function() {},
                onComplete: function() {},
                contentTypeJson: !1,
                credentials: "include",
                fetchOptions: ""
            },
            onStart: function() {
                this.get("em");
                var t = this.get("beforeSend");
                t && t()
            },
            onError: function(t, e) {
                if (e) e(t);
                else {
                    var n = this.get("em");
                    console.error(t), n && n.trigger("storage:error", t)
                }
            },
            onResponse: function(t, e) {
                var n = this.get("em"),
                    r = this.get("onComplete"),
                    i = this.get("contentTypeJson") && t && "string" == typeof t ? JSON.parse(t) : t;
                r && r(i), e && e(i), n && n.trigger("storage:response", i)
            },
            store: function(t, e, n) {
                var r = {};
                for (var i in t) r[i] = t[i];
                this.request(this.get("urlStore"), {
                    body: r
                }, e, n)
            },
            load: function(t, e, n) {
                this.request(this.get("urlLoad"), {
                    method: "get"
                }, e, n)
            },
            request: function(t) {
                var e, n, r = this,
                    i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    o = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null,
                    a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null,
                    s = this.get("contentTypeJson"),
                    l = this.get("headers") || {},
                    c = this.get("params"),
                    d = "X-Requested-With",
                    f = "Content-Type",
                    p = i.body || {};
                for (var g in c) p[g] = c[g];
                if (Object(u.isUndefined)(l[d]) && (l[d] = "XMLHttpRequest"), Object(u.isUndefined)(l[f]) && s && (l[f] = "application/json; charset=utf-8"), s) n = JSON.stringify(p);
                else
                    for (var v in n = new FormData, p) n.append(v, p[v]);
                "post" === (e = {
                    method: i.method || "post",
                    credentials: this.get("credentials"),
                    headers: l
                }).method && (e.body = n);
                var m = this.get("fetchOptions") || {},
                    b = Object(u.isFunction)(m) ? m(e) : e;
                this.onStart(), this.fetch(t, h(h({}, e), b || {})).then(function(t) {
                    return 1 == (t.status / 200 | 0) ? t.text() : t.text().then(function(t) {
                        return Promise.reject(t)
                    })
                }).then(function(t) {
                    return r.onResponse(t, o)
                }).catch(function(t) {
                    return r.onError(t, a)
                })
            }
        });

        function p(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function g(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? p(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : p(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var v = "storage:start",
            m = "storage:end",
            b = "storage:error";
        e.default = function() {
            var t, e = {},
                n = {},
                r = {};
            return {
                name: "StorageManager",
                init: function() {
                    var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return e = g(g({}, o), n), t = e.em, e._disable && (e.type = 0), r.remote = new f(e), r.local = new l(e), e.currentStorage = e.type, this.loadDefaultProviders().setCurrent(e.type), this
                },
                getConfig: function() {
                    return e
                },
                isAutosave: function() {
                    return !!e.autosave
                },
                setAutosave: function(t) {
                    return e.autosave = !!t, this
                },
                getStepsBeforeSave: function() {
                    return e.stepsBeforeSave
                },
                setStepsBeforeSave: function(t) {
                    return e.stepsBeforeSave = t, this
                },
                add: function(t, e) {
                    return n[t] = e, this
                },
                get: function(t) {
                    return n[t] || null
                },
                getStorages: function() {
                    return n
                },
                getCurrent: function() {
                    return e.currentStorage
                },
                setCurrent: function(t) {
                    return e.currentStorage = t, this
                },
                store: function(t, n) {
                    var r = this,
                        i = this.get(this.getCurrent()),
                        o = {};
                    for (var a in this.onStart("store", t), t) o[e.id + a] = t[a];
                    return i ? i.store(o, function(t) {
                        n && n(t), r.onEnd("store", t)
                    }, function(t) {
                        r.onError("store", t)
                    }) : null
                },
                load: function(t, n) {
                    var r = this,
                        i = this.get(this.getCurrent()),
                        o = [],
                        a = {};
                    "string" == typeof t && (t = [t]), this.onStart("load", t);
                    for (var s = 0, l = t.length; s < l; s++) o.push(e.id + t[s]);
                    i ? i.load(o, function(t) {
                        var i = new RegExp("^" + e.id);
                        for (var o in t) {
                            var s = o.replace(i, "");
                            a[s] = t[o]
                        }
                        n && n(a), r.onEnd("load", a)
                    }, function(t) {
                        n && n(a), r.onError("load", t)
                    }) : n && n(a)
                },
                loadDefaultProviders: function() {
                    for (var t in r) this.add(t, r[t]);
                    return this
                },
                getCurrentStorage: function() {
                    return this.get(this.getCurrent())
                },
                onStart: function(e, n) {
                    t && (t.trigger(v), e && t.trigger("".concat(v, ":").concat(e), n))
                },
                onEnd: function(e, n) {
                    t && (t.trigger(m), e && t.trigger("".concat(m, ":").concat(e), n))
                },
                onError: function(e, n) {
                    t && (t.trigger(b, n), e && t.trigger("".concat(b, ":").concat(e), n), this.onEnd(e, n))
                },
                canAutoload: function() {
                    return this.getCurrentStorage() && this.getConfig().autoload
                },
                destroy: function() {
                    [e, t, n, r].forEach(function(t) {
                        return {}
                    })
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = {
                stylePrefix: "mdl-",
                title: "",
                content: "",
                backdrop: !0
            },
            a = n(1),
            s = n.n(a),
            l = s.a.Model.extend({
                defaults: {
                    title: "",
                    content: "",
                    open: !1
                }
            });

        function c(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function u(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? c(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : c(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var d = s.a.View.extend({
            template: function(t) {
                var e = t.pfx,
                    n = t.ppfx,
                    r = t.content,
                    i = t.title;
                return '<div class="'.concat(e, "dialog ").concat(n, "one-bg ").concat(n, 'two-color">\n      <div class="').concat(e, 'header">\n        <div class="').concat(e, 'title">').concat(i, '</div>\n        <div class="').concat(e, 'btn-close" data-close-modal>&Cross;</div>\n      </div>\n      <div class="').concat(e, 'content">\n        <div id="').concat(e, 'c">').concat(r, '</div>\n        <div style="clear:both"></div>\n      </div>\n    </div>\n    <div class="').concat(e, 'collector" style="display: none"></div>')
            },
            events: {
                click: "onClick",
                "click [data-close-modal]": "hide"
            },
            initialize: function(t) {
                var e = this.model,
                    n = t.config || {},
                    r = n.stylePrefix || "";
                this.config = n, this.pfx = r, this.ppfx = n.pStylePrefix || "", this.listenTo(e, "change:open", this.updateOpen), this.listenTo(e, "change:title", this.updateTitle), this.listenTo(e, "change:content", this.updateContent)
            },
            onClick: function(t) {
                this.config.backdrop && t.target === this.el && this.hide()
            },
            getCollector: function() {
                return this.$collector || (this.$collector = this.$el.find("." + this.pfx + "collector")), this.$collector
            },
            getContent: function() {
                var t = this.pfx;
                return this.$content || (this.$content = this.$el.find(".".concat(t, "content #").concat(t, "c"))), this.$content
            },
            getTitle: function() {
                return this.$title || (this.$title = this.$el.find("." + this.pfx + "title")), this.$title.get(0)
            },
            updateContent: function() {
                var t = this.getContent(),
                    e = t.children(),
                    n = this.getCollector(),
                    r = this.model.get("content");
                e.length && n.append(e), t.empty().append(r)
            },
            updateTitle: function() {
                var t = this.getTitle();
                t && (t.innerHTML = this.model.get("title"))
            },
            updateOpen: function() {
                this.el.style.display = this.model.get("open") ? "" : "none"
            },
            hide: function() {
                this.model.set("open", 0)
            },
            show: function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                this.model.set("open", 1), this.updateAttr(t.attributes)
            },
            updateAttr: function(t) {
                var e = this.pfx,
                    n = this.$el,
                    r = this.el,
                    i = [].slice.call(r.attributes).map(function(t) {
                        return t.name
                    });
                n.removeAttr(i.join(" ")), n.attr(u(u({}, t || {}), {}, {
                    class: "".concat(e, "container ").concat(t && t.class || "").trim()
                }))
            },
            render: function() {
                var t = this.$el,
                    e = this.model.toJSON();
                return e.pfx = this.pfx, e.ppfx = this.ppfx, t.html(this.template(e)), this.updateAttr(), this.updateOpen(), this
            }
        });

        function h(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function f(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? h(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : h(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n = {};
            return {
                name: "Modal",
                getConfig: function() {
                    return n
                },
                init: function() {
                    var r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        i = (n = f(f({}, o), r)).em;
                    this.em = i;
                    var a = n.pStylePrefix;
                    return a && (n.stylePrefix = a + n.stylePrefix), (t = new l(n)).on("change:open", function(t, e) {
                        return function(t, e) {
                            e && e.trigger("modal:".concat(t ? "open" : "close"))
                        }(e, i)
                    }), e = new d({
                        model: t,
                        config: n
                    }), this
                },
                postRender: function(t) {
                    var e = t.model.getConfig().el || t.el;
                    this.render().appendTo(e)
                },
                open: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return t.title && this.setTitle(t.title), t.content && this.setContent(t.content), e.show(t), this
                },
                close: function() {
                    return e.hide(), this
                },
                onceClose: function(t) {
                    return this.em.once("modal:close", t), this
                },
                onceOpen: function(t) {
                    return this.em.once("modal:open", t), this
                },
                isOpen: function() {
                    return !!t.get("open")
                },
                setTitle: function(e) {
                    return t.set("title", e), this
                },
                getTitle: function() {
                    return t.get("title")
                },
                setContent: function(e) {
                    return t.set("content", " "), t.set("content", e), this
                },
                getContent: function() {
                    return t.get("content")
                },
                getContentEl: function() {
                    return e.getContent().get(0)
                },
                getModel: function() {
                    return t
                },
                render: function() {
                    return e.render().$el
                },
                destroy: function() {
                    e.remove(), [n, t, e].forEach(function(t) {
                        return {}
                    }), this.em = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(0),
            a = n(3),
            s = {
                stylePrefix: "clm-",
                appendTo: "",
                selectors: [],
                states: [{
                    name: "hover"
                }, {
                    name: "active"
                }, {
                    name: "nth-of-type(2n)"
                }],
                escapeName: 0,
                selectedName: 0,
                iconAdd: '<svg viewBox="0 0 24 24"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path></svg>',
                iconSync: '<svg viewBox="0 0 24 24"><path d="M12 18c-3.31 0-6-2.69-6-6 0-1 .25-1.97.7-2.8L5.24 7.74A7.93 7.93 0 0 0 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4m0-11V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1-.25 1.97-.7 2.8l1.46 1.46A7.93 7.93 0 0 0 20 12c0-4.42-3.58-8-8-8z"></path></svg>',
                iconTagOn: '<svg viewBox="0 0 24 24"><path d="M19 19H5V5h10V3H5c-1.11 0-2 .89-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-8h-2m-11.09-.92L6.5 11.5 11 16 21 6l-1.41-1.42L11 13.17l-3.09-3.09z"></path></svg>',
                iconTagOff: '<svg viewBox="0 0 24 24"><path d="M19 3H5c-1.11 0-2 .89-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5a2 2 0 0 0-2-2m0 2v14H5V5h14z"></path></svg>',
                iconTagRemove: '<svg viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"></path></svg>',
                render: 0,
                componentFirst: 0
            },
            l = n(10),
            c = n(12),
            u = n(7),
            d = n.n(u),
            h = n(1),
            f = n.n(h),
            p = "contentEditable",
            g = f.a.View.extend({
                template: function() {
                    var t = this.pfx,
                        e = this.model,
                        n = this.config,
                        r = e.get("label") || "";
                    return '\n      <span id="'.concat(t, 'checkbox" class="').concat(t, 'tag-status" data-tag-status></span>\n      <span id="').concat(t, 'tag-label" data-tag-name>').concat(r, '</span>\n      <span id="').concat(t, 'close" class="').concat(t, 'tag-close" data-tag-remove>\n        ').concat(n.iconTagRemove, "\n      </span>\n    ")
                },
                events: {
                    "click [data-tag-remove]": "removeTag",
                    "click [data-tag-status]": "changeStatus",
                    "dblclick [data-tag-name]": "startEditTag",
                    "focusout [data-tag-name]": "endEditTag"
                },
                initialize: function(t) {
                    var e = t.config || {};
                    this.config = e, this.coll = t.coll || null, this.pfx = e.stylePrefix || "", this.ppfx = e.pStylePrefix || "", this.em = e.em, this.listenTo(this.model, "change:active", this.updateStatus)
                },
                getInputEl: function() {
                    return this.inputEl || (this.inputEl = this.el.querySelector("[data-tag-name]")), this.inputEl
                },
                startEditTag: function() {
                    var t = this.em,
                        e = this.getInputEl();
                    e[p] = !0, e.focus(), t && t.setEditing(1)
                },
                endEditTag: function() {
                    var t = this.model,
                        e = this.getInputEl(),
                        n = e.textContent,
                        r = this.em,
                        i = r && r.get("SelectorManager");
                    if (e[p] = !1, r && r.setEditing(0), i) {
                        var o = i.escapeName(n);
                        i.get(o) ? e.innerText = t.get("label") : t.set({
                            name: o,
                            label: n
                        })
                    }
                },
                changeStatus: function() {
                    var t = this.model;
                    t.set("active", !t.get("active"))
                },
                removeTag: function() {
                    var t = this.em,
                        e = this.model;
                    (t && t.getSelectedAll()).forEach(function(t) {
                        !e.get("protected") && t && t.getSelectors().remove(e)
                    })
                },
                updateStatus: function() {
                    var t = this.model,
                        e = this.$el,
                        n = this.config,
                        r = n.iconTagOn,
                        i = n.iconTagOff,
                        o = e.find("[data-tag-status]");
                    t.get("active") ? (o.html(r), e.removeClass("opac50")) : (o.html(i), e.addClass("opac50"))
                },
                render: function() {
                    var t = this.pfx,
                        e = this.ppfx;
                    return this.$el.html(this.template()), this.$el.attr("class", "".concat(t, "tag ").concat(e, "three-bg")), this.updateStatus(), this
                }
            }),
            v = f.a.View.extend({
                template: function(t) {
                    var e = t.labelInfo,
                        n = t.labelStates,
                        r = t.labelHead,
                        i = t.iconSync,
                        o = t.iconAdd,
                        a = t.pfx,
                        s = t.ppfx;
                    return '\n    <div id="'.concat(a, 'up" class="').concat(a, 'header">\n      <div id="').concat(a, 'label" class="').concat(a, 'header-label">').concat(r, '</div>\n      <div id="').concat(a, 'status-c" class="').concat(a, 'header-status">\n        <span id="').concat(a, 'input-c" data-states-c>\n          <div class="').concat(s, "field ").concat(s, 'select">\n            <span id="').concat(s, 'input-holder">\n              <select id="').concat(a, 'states" data-states>\n                <option value="">').concat(n, '</option>\n              </select>\n            </span>\n            <div class="').concat(s, 'sel-arrow">\n              <div class="').concat(s, 'd-s-arrow"></div>\n            </div>\n          </div>\n        </span>\n      </div>\n    </div>\n    <div id="').concat(a, 'tags-field" class="').concat(s, 'field">\n      <div id="').concat(a, 'tags-c" data-selectors></div>\n      <input id="').concat(a, 'new" data-input/>\n      <span id="').concat(a, 'add-tag" class="').concat(a, "tags-btn ").concat(a, 'tags-btn__add" data-add>\n        ').concat(o, '\n      </span>\n      <span class="').concat(a, "tags-btn ").concat(a, 'tags-btn__sync" style="display: none" data-sync-style>\n        ').concat(i, '\n      </span>\n    </div>\n    <div class="').concat(a, 'sels-info">\n      <div class="').concat(a, 'label-sel">').concat(e, ':</div>\n      <div class="').concat(a, 'sels" data-selected></div>\n      <div style="clear:both"></div>\n    </div>')
                },
                events: {
                    "change [data-states]": "stateChanged",
                    "click [data-add]": "startNewTag",
                    "focusout [data-input]": "endNewTag",
                    "keyup [data-input]": "onInputKeyUp",
                    "click [data-sync-style]": "syncStyle"
                },
                initialize: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    this.config = t.config || {}, this.pfx = this.config.stylePrefix || "", this.ppfx = this.config.pStylePrefix || "", this.className = this.pfx + "tags", this.stateInputId = this.pfx + "states", this.stateInputC = this.pfx + "input-c", this.states = this.config.states || [];
                    var e = this.config.em,
                        n = this.collection;
                    this.target = this.config.em, this.em = e;
                    var r = this.getStyleEmitter();
                    this.listenTo(e, "component:toggled component:update:classes", this.componentChanged), this.listenTo(r, "update", this.componentChanged), this.listenTo(e, "component:update:classes change:state", this.__handleStateChange), this.listenTo(e, "styleable:change change:device", this.checkSync), this.listenTo(n, "add", this.addNew), this.listenTo(n, "reset", this.renderClasses), this.listenTo(n, "remove", this.tagRemoved), this.delegateEvents()
                },
                syncStyle: function() {
                    var t, e = this.em,
                        n = this.getTarget(),
                        r = e.get("CssComposer"),
                        i = this.getCommonSelectors({
                            opts: {
                                noDisabled: 1
                            }
                        }),
                        o = e.get("state"),
                        a = e.getCurrentMedia(),
                        s = [],
                        l = r.get(i, o, a) || r.add(i, o, a);
                    this.getTargets().forEach(function(e) {
                        var n = r.getIdRule(e.getId(), {
                            state: o,
                            mediaText: a
                        });
                        t = n.getStyle(), n.setStyle({}), s.push(n)
                    }), t && l.addStyle(t), e.trigger("component:toggled"), e.trigger("component:sync-style", {
                        component: n,
                        selectors: i,
                        mediaText: a,
                        rule: l,
                        ruleComponents: s,
                        state: o
                    })
                },
                getStyleEmitter: function() {
                    var t = this.em,
                        e = t && t.get("StyleManager");
                    return e && e.getEmitter() || {}
                },
                tagRemoved: function(t) {
                    this.updateStateVis()
                },
                getStateOptions: function() {
                    var t = this.states,
                        e = this.em,
                        n = [];
                    return t.forEach(function(t) {
                        return n.push('<option value="'.concat(t.name, '">').concat(e.t("selectorManager.states.".concat(t.name)) || t.label || t.name, "</option>"))
                    }), n.join("")
                },
                addNew: function(t) {
                    this.addToClasses(t)
                },
                startNewTag: function() {
                    this.$addBtn.css({
                        display: "none"
                    }), this.$input.show().focus()
                },
                endNewTag: function() {
                    this.$addBtn.css({
                        display: ""
                    }), this.$input.hide().val("")
                },
                onInputKeyUp: function(t) {
                    13 === t.keyCode ? this.addNewTag(this.$input.val()) : 27 === t.keyCode && this.endNewTag()
                },
                checkStates: function() {
                    var t = this.em.getState(),
                        e = this.getStates();
                    e && e.val(t)
                },
                componentChanged: Object(o.debounce)(function() {
                    var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).targets;
                    this.updateSelection(t)
                }),
                updateSelection: function(t) {
                    var e = t || this.getTargets(),
                        n = [];
                    return (e = Object(o.isArray)(e) ? e : [e]) && e.length && (n = this.getCommonSelectors({
                        targets: e
                    }), this.checkSync({
                        validSelectors: n
                    })), this.collection.reset(n), this.updateStateVis(e), n
                },
                getCommonSelectors: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        e = t.targets,
                        n = t.opts,
                        r = void 0 === n ? {} : n,
                        i = (e || this.getTargets()).map(function(t) {
                            return t.getSelectors && t.getSelectors().getValid(r)
                        }).filter(function(t) {
                            return t
                        });
                    return this._commonSelectors.apply(this, d()(i))
                },
                _commonSelectors: function() {
                    for (var t = this, e = arguments.length, n = new Array(e), r = 0; r < e; r++) n[r] = arguments[r];
                    return n.length ? 1 === n.length ? n[0] : 2 === n.length ? n[0].filter(function(t) {
                        return n[1].indexOf(t) >= 0
                    }) : n.slice(1).reduce(function(e, n) {
                        return t._commonSelectors(e, n)
                    }, n[0]) : []
                },
                checkSync: Object(o.debounce)(function() {
                    var t, e = this.$btnSyncEl,
                        n = this.config,
                        r = this.collection,
                        i = this.getTarget();
                    if (i && n.componentFirst && r.length) {
                        var a = i.getStyle();
                        t = !Object(o.isEmpty)(a)
                    }
                    e && e[t ? "show" : "hide"]()
                }),
                getTarget: function() {
                    return this.target.getSelected()
                },
                getTargets: function() {
                    return this.target.getSelectedAll()
                },
                updateStateVis: function(t) {
                    var e = this.em,
                        n = e && e.getConfig("avoidInlineStyle"),
                        r = this.collection.length || n ? "" : "none";
                    this.getStatesC().css("display", r), this.updateSelector(t)
                },
                __handleStateChange: function() {
                    this.updateSelector(this.getTargets())
                },
                updateSelector: function(t) {
                    var e = this,
                        n = this.el.querySelector("[data-selected]"),
                        r = [],
                        i = t || this.getTargets();
                    (i = Object(o.isArray)(i) ? i : [i]).forEach(function(t) {
                        return r.push(e.__getName(t))
                    }), n && (n.innerHTML = r.join(", ")), this.checkStates()
                },
                __getName: function(t) {
                    var e, n = this.pfx,
                        r = this.config,
                        i = this.em,
                        a = r.selectedName,
                        s = r.componentFirst;
                    if (Object(o.isString)(t)) e = '<span class="'.concat(n, 'sel-gen">').concat(t, "</span>");
                    else {
                        if (!t || !t.get) return;
                        var l = t.getSelectors().getStyleable(),
                            c = i.get("state"),
                            u = t.getId ? '<span class="'.concat(n, 'sel-cmp">').concat(t.getName(), '</span><span class="').concat(n, 'sel-id">#').concat(t.getId(), "</span>") : "";
                        e = (e = this.collection.getFullString(l)) ? '<span class="'.concat(n, 'sel-rule">').concat(e, "</span>") : t.get("selectorsAdd") || u, e = s && u ? u : e, e += c ? '<span class="'.concat(n, 'sel-state">:').concat(c, "</span>") : "", e = a ? a({
                            result: e,
                            state: c,
                            target: t
                        }) : e
                    }
                    return e && '<span class="'.concat(n, 'sel">').concat(e, "</span>")
                },
                stateChanged: function(t) {
                    var e = this.em,
                        n = t.target.value;
                    e.set("state", n)
                },
                addNewTag: function(t) {
                    var e = this,
                        n = this.em;
                    if (t.trim()) {
                        if (n) {
                            var r = n.get("SelectorManager").add({
                                label: t
                            });
                            this.getTargets().forEach(function(t) {
                                t.getSelectors().add(r), e.collection.add(r), e.updateStateVis()
                            })
                        }
                        this.endNewTag()
                    }
                },
                addToClasses: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null,
                        n = this.getClasses(),
                        r = new g({
                            model: t,
                            config: this.config,
                            coll: this.collection
                        }).render().el;
                    return e ? e.appendChild(r) : n.append(r), r
                },
                renderClasses: function() {
                    var t = this,
                        e = document.createDocumentFragment(),
                        n = this.getClasses();
                    n.empty(), this.collection.each(function(n) {
                        return t.addToClasses(n, e)
                    }), n.append(e)
                },
                getClasses: function() {
                    return this.$el.find("[data-selectors]")
                },
                getStates: function() {
                    if (!this.$states) {
                        var t = this.$el.find("[data-states]");
                        this.$states = t[0] && t
                    }
                    return this.$states
                },
                getStatesC: function() {
                    return this.$statesC || (this.$statesC = this.$el.find("#" + this.stateInputC)), this.$statesC
                },
                render: function() {
                    var t = this.em,
                        e = this.pfx,
                        n = this.ppfx,
                        r = this.config,
                        i = this.$el,
                        o = this.el,
                        a = r.render,
                        s = {
                            iconSync: r.iconSync,
                            iconAdd: r.iconAdd,
                            labelHead: t.t("selectorManager.label"),
                            labelStates: t.t("selectorManager.emptyState"),
                            labelInfo: t.t("selectorManager.selected"),
                            ppfx: n,
                            pfx: e,
                            el: o
                        };
                    i.html(this.template(s));
                    var l = a && a(s);
                    l && l !== o && i.empty().append(l), this.$input = i.find("[data-input]"), this.$addBtn = i.find("[data-add]"), this.$classes = i.find("#" + e + "tags-c"), this.$btnSyncEl = i.find("[data-sync-style]"), this.$input.hide();
                    var c = this.getStates();
                    return c && c.append(this.getStateOptions()), this.renderClasses(), i.attr("class", "".concat(this.className, " ").concat(n, "one-bg ").concat(n, "two-color")), this
                }
            });

        function m(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function b(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? m(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : m(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var y = function(t) {
                return Object(o.isString)(t) && "#" == t[0]
            },
            w = function(t) {
                return Object(o.isString)(t) && "." == t[0]
            };
        e.default = function(t) {
            var e, n = t || {};
            return {
                Selector: l.a,
                Selectors: c.a,
                name: "SelectorManager",
                getConfig: function() {
                    return n
                },
                init: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        r = (n = b(b({}, s), t)).em,
                        i = n.pStylePrefix;
                    return this.em = r, i && (n.stylePrefix = i + n.stylePrefix), this.selectorTags = new v({
                        collection: new c.a([], {
                            em: r,
                            config: n
                        }),
                        config: n
                    }), (e = new c.a(n.selectors)).on("add", function(t) {
                        return r.trigger("selector:add", t)
                    }), e.on("remove", function(t) {
                        return r.trigger("selector:remove", t)
                    }), e.on("change", function(t) {
                        return r.trigger("selector:update", t, t.previousAttributes(), t.changedAttributes())
                    }), r.on("change:state", function(t, e) {
                        return r.trigger("selector:state", e)
                    }), this
                },
                postRender: function() {
                    var t = this.getConfig().appendTo;
                    t && (Object(o.isElement)(t) ? t : document.querySelector(t)).appendChild(this.render([]))
                },
                select: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = Array.isArray(t) ? t : [t],
                        r = this.em.get("StyleManager").setTarget(n, e).filter(function(t) {
                            return t
                        }).map(function(t) {
                            return Object(a.l)(t) || Object(a.p)(t) && !t.get("selectorsAdd") ? t : t.getSelectorsString()
                        });
                    return this.selectorTags.componentChanged({
                        targets: r
                    }), this
                },
                setState: function(t) {
                    return this.em.setState(t), this
                },
                getState: function() {
                    return this.em.getState()
                },
                addSelector: function(t) {
                    var r = b({}, arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {});
                    Object(o.isObject)(t) ? r = t : r.name = t, y(r.name) ? (r.name = r.name.substr(1), r.type = l.a.TYPE_ID) : w(r.name) && (r.name = r.name.substr(1)), r.label && !r.name && (r.name = this.escapeName(r.label));
                    var i = r.name;
                    return (i ? this.get(i, r.type) : e.where(r)[0]) || e.add(r, {
                        config: n
                    })
                },
                getSelector: function(t) {
                    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : l.a.TYPE_CLASS;
                    return y(t) ? (t = t.substr(1), n = l.a.TYPE_ID) : w(t) && (t = t.substr(1)), e.where({
                        name: t,
                        type: n
                    })[0]
                },
                add: function(t) {
                    var e = this,
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return Object(o.isArray)(t) ? t.map(function(t) {
                        return e.addSelector(t, n)
                    }) : this.addSelector(t, n)
                },
                addClass: function(t) {
                    var e = this,
                        n = [];
                    return Object(o.isString)(t) && (t = t.trim().split(" ")), t.forEach(function(t) {
                        return n.push(e.addSelector(t))
                    }), n
                },
                get: function(t, e) {
                    var n = this;
                    if (Object(o.isArray)(t)) {
                        var r = [];
                        return t.map(function(t) {
                            return n.getSelector(t)
                        }).filter(function(t) {
                            return t
                        }).forEach(function(t) {
                            return r.indexOf(t) < 0 && r.push(t)
                        }), r
                    }
                    return this.getSelector(t, e)
                },
                getAll: function() {
                    return e
                },
                escapeName: function(t) {
                    var e = n.escapeName;
                    return e ? e(t) : l.a.escapeName(t)
                },
                render: function(t) {
                    return t ? (this.selectorTags = new v({
                        collection: new c.a(t),
                        config: n
                    }), this.selectorTags.render().el) : this.selectorTags.render().el
                },
                destroy: function() {
                    e.reset(), e.stopListening(), this.selectorTags.remove(), [n, e].forEach(function(t) {
                        return {}
                    }), this.em = {}, this.selectorTags = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = {
                textTags: ["br", "b", "i", "u", "a", "ul", "ol"],
                parserCss: null,
                parserHtml: null
            },
            a = n(0),
            s = {
                4: "media",
                5: "font-face",
                6: "page",
                7: "keyframes",
                11: "counter-style",
                12: "supports",
                13: "document",
                14: "font-feature-values",
                15: "viewport"
            },
            l = Object(a.keys)(s),
            c = ["5", "6", "11", "15"],
            u = ["font-face", "page", "counter-style", "viewport"],
            d = function() {
                for (var t = [], e = [], n = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "").split(","), r = 0, i = n.length; r < i; r++) {
                    var o = n[r].trim();
                    if (/^(\.{1}[\w\-]+)+(:{1,2}[\w\-()]+)?$/gi.test(o) || /^(#{1}[\w\-]+){1}(:{1,2}[\w\-()]+)?$/gi.test(o)) {
                        var a = o.split(".").filter(Boolean);
                        e.push(a)
                    } else t.push(o)
                }
                return {
                    result: e,
                    add: t
                }
            },
            h = function(t) {
                for (var e = t.style, n = {}, r = 0, i = e.length; r < i; r++) {
                    var o = e[r],
                        a = e.getPropertyValue(o),
                        s = e.getPropertyPriority(o);
                    n[o] = "".concat(a).concat(s ? " !".concat(s) : "")
                }
                return n
            },
            f = function(t) {
                return (t.conditionText || t.media && t.media.mediaText || t.name || t.selectorText || "").trim()
            },
            p = function(t) {
                var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    r = {},
                    i = t.length,
                    o = t[i - 1],
                    a = o ? o.split(/:(.+)/) : [],
                    s = a[1],
                    l = n.atRule,
                    c = n.selectorsAdd,
                    d = n.mediaText;
                return u.indexOf(l) >= 0 && (r.singleAtRule = 1), l && (r.atRuleType = l), c && (r.selectorsAdd = c), d && (r.mediaText = d), s && (t[i - 1] = a[0], r.state = s, a.splice(a.length - 1, 1)), r.selectors = t, r.style = e, r
            },
            g = function() {
                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                return {
                    parse: function(e) {
                        var n = this,
                            r = [],
                            i = t.parserCss,
                            o = t.em,
                            a = o && o.get && o.get("Editor");
                        return (i ? i(e, a) : function(t) {
                            var e = document.createElement("style");
                            e.innerHTML = t, document.head.appendChild(e);
                            var n = e.sheet;
                            return document.head.removeChild(e),
                                function t(e) {
                                    for (var n = [], r = e.cssRules || [], i = 0, o = r.length; i < o; i++) {
                                        var a = r[i],
                                            u = a.type.toString(),
                                            g = 0,
                                            v = "",
                                            m = "",
                                            b = a.selectorText || a.keyText,
                                            y = c.indexOf(u) >= 0;
                                        if (y) g = 1, v = s[u], m = f(a);
                                        else if (l.indexOf(u) >= 0) {
                                            var w = t(a);
                                            m = f(a);
                                            for (var x = 0, O = w.length; x < O; x++) {
                                                var C = w[x];
                                                m && (C.mediaText = m), C.atRuleType = s[u]
                                            }
                                            n = n.concat(w)
                                        }
                                        if (b || y) {
                                            for (var S = h(a), k = d(b), j = k.add, T = void 0, P = 0, E = (b = k.result).length; P < E; P++) {
                                                var M = p(b[P], S, {
                                                    atRule: s[u]
                                                });
                                                n.push(M), T = M
                                            }
                                            if (j.length) {
                                                var D = j.join(", ");
                                                if (T) T.selectorsAdd = D;
                                                else {
                                                    var A = {
                                                        selectors: [],
                                                        selectorsAdd: D,
                                                        style: S
                                                    };
                                                    g && (A.singleAtRule = g), v && (A.atRuleType = v), m && (A.mediaText = m), n.push(A)
                                                }
                                            }
                                        }
                                    }
                                    return n
                                }(n)
                        }(e)).forEach(function(t) {
                            return r = r.concat(n.checkNode(t))
                        }), o && o.trigger("parse:css", {
                            input: e,
                            output: r
                        }), r
                    },
                    checkNode: function(t) {
                        var e = t,
                            n = e.selectors,
                            r = e.style;
                        if (Object(a.isString)(n)) {
                            var i = [],
                                o = d(n),
                                s = o.result,
                                l = o.add.join(", "),
                                c = {
                                    atRule: t.atRule,
                                    mediaText: t.params
                                };
                            s.length ? s.forEach(function(t) {
                                i.push(p(t, r, c))
                            }) : i.push(p([], r, c)), l && (i[i.length - 1].selectorsAdd = l), t = i
                        }
                        return t
                    }
                }
            },
            v = n(29);

        function m(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function b(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? m(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : m(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n = {};
            return {
                compTypes: "",
                parserCss: null,
                parserHtml: null,
                name: "Parser",
                getConfig: function() {
                    return n
                },
                init: function() {
                    var r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return (n = b(b({}, o), r)).Parser = this, t = new v.a(n), e = new g(n), this.em = n.em, this.parserCss = e, this.parserHtml = t, this
                },
                parseHtml: function(n) {
                    var r = this.em,
                        i = this.compTypes;
                    return t.compTypes = r ? r.get("DomComponents").getTypes() : i, t.parse(n, e)
                },
                parseCss: function(t) {
                    return e.parse(t)
                },
                destroy: function() {
                    var r = this;
                    [n, t, e].forEach(function(t) {
                        return {}
                    }), ["em", "parserCss", "parserHtml"].forEach(function(t) {
                        return r[t] = {}
                    })
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(8),
            a = n.n(o),
            s = n(0),
            l = {
                placeholder: "eg. Text here"
            },
            c = {
                locale: "en",
                localeFallback: "en",
                detectLocale: 1,
                debug: 0,
                messages: {
                    en: {
                        assetManager: {
                            addButton: "Add image",
                            inputPlh: "http://path/to/the/image.jpg",
                            modalTitle: "Select Image",
                            uploadTitle: "Drop files here or click to upload"
                        },
                        blockManager: {
                            labels: {},
                            categories: {}
                        },
                        domComponents: {
                            names: {
                                "": "Box",
                                wrapper: "Body",
                                text: "Text",
                                comment: "Comment",
                                image: "Image",
                                video: "Video",
                                label: "Label",
                                link: "Link",
                                map: "Map",
                                tfoot: "Table foot",
                                tbody: "Table body",
                                thead: "Table head",
                                table: "Table",
                                row: "Table row",
                                cell: "Table cell"
                            }
                        },
                        deviceManager: {
                            device: "Device",
                            devices: {
                                desktop: "Desktop",
                                tablet: "Tablet",
                                mobileLandscape: "Mobile Landscape",
                                mobilePortrait: "Mobile Portrait"
                            }
                        },
                        panels: {
                            buttons: {
                                titles: {
                                    preview: "Preview",
                                    fullscreen: "Fullscreen",
                                    "sw-visibility": "View components",
                                    "export-template": "View code",
                                    "open-sm": "Open Style Manager",
                                    "open-tm": "Settings",
                                    "open-layers": "Open Layer Manager",
                                    "open-blocks": "Open Blocks"
                                }
                            }
                        },
                        selectorManager: {
                            label: "Classes",
                            selected: "Selected",
                            emptyState: "- State -",
                            states: {
                                hover: "Hover",
                                active: "Click",
                                "nth-of-type(2n)": "Even/Odd"
                            }
                        },
                        styleManager: {
                            empty: "Select an element before using Style Manager",
                            layer: "Layer",
                            fileButton: "Images",
                            sectors: {
                                general: "General",
                                layout: "Layout",
                                typography: "Typography",
                                decorations: "Decorations",
                                extra: "Extra",
                                flex: "Flex",
                                dimension: "Dimension"
                            },
                            properties: {}
                        },
                        traitManager: {
                            empty: "Select an element before using Trait Manager",
                            label: "Component settings",
                            traits: {
                                labels: {},
                                attributes: {
                                    id: l,
                                    alt: l,
                                    title: l,
                                    href: {
                                        placeholder: "eg. https://google.com"
                                    }
                                },
                                options: {
                                    target: {
                                        false: "This window",
                                        _blank: "New window"
                                    }
                                }
                            }
                        }
                    }
                }
            };

        function u(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function d(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? u(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : u(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var h = function(t) {
            return !Array.isArray(t) && null !== t && "object" === a()(t)
        };
        e.default = function() {
            return {
                name: "I18n",
                config: c,
                init: function() {
                    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return this.config = d(d(d({}, c), t), {}, {
                        messages: d(d({}, c.messages), t.messages || {})
                    }), this.config.detectLocale && (this.config.locale = this._localLang()), this.em = t.em, this
                },
                getConfig: function() {
                    return this.config
                },
                setLocale: function(t) {
                    var e = this.em,
                        n = this.config,
                        r = {
                            value: t,
                            valuePrev: n.locale
                        };
                    return e && e.trigger("i18n:locale", r), n.locale = t, this
                },
                getLocale: function() {
                    return this.config.locale
                },
                getMessages: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.config.messages;
                    return t && !n[t] && this._debug("'".concat(t, "' i18n lang not found"), e), t ? n[t] : n
                },
                setMessages: function(t) {
                    var e = this.em;
                    return this.config.messages = t, e && e.trigger("i18n:update", t), this
                },
                addMessages: function(t) {
                    var e = this.em,
                        n = this.config.messages;
                    return e && e.trigger("i18n:add", t), this.setMessages(function t() {
                        for (var e = d({}, arguments.length <= 0 ? void 0 : arguments[0]), n = 1; n < arguments.length; n++) {
                            var r = d({}, n < 0 || arguments.length <= n ? void 0 : arguments[n]);
                            for (var i in r) {
                                var o = e[i],
                                    a = r[i];
                                h(o) && h(a) ? e[i] = t(o, a) : e[i] = a
                            }
                        }
                        return e
                    }(n, t)), this
                },
                t: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.config,
                        r = e.params || {},
                        i = e.l || this.getLocale(),
                        o = e.lFlb || n.localeFallback,
                        a = this._getMsg(t, i, e);
                    return a || (a = this._getMsg(t, o, e)), !a && this._debug("'".concat(t, "' i18n key not found in '").concat(i, "' lang"), e), a && Object(s.isString)(a) ? this._addParams(a, r) : a
                },
                _localLang: function() {
                    var t = window.navigator || {},
                        e = t.language || t.userLanguage;
                    return e ? e.split("-")[0] : "en"
                },
                _addParams: function(t, e) {
                    var n = new RegExp("{([\\w\\d-]*)}", "g");
                    return t.replace(n, function(t, n) {
                        return e[n] || ""
                    }).trim()
                },
                _getMsg: function(t, e) {
                    var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        r = this.getMessages(e, n);
                    if (r) {
                        var i = r[t];
                        return !i && t.indexOf(".") > 0 && (i = t.split(".").reduce(function(t, e) {
                            if (!Object(s.isUndefined)(t)) return t[e]
                        }, r)), i
                    }
                },
                _debug: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.em,
                        r = this.config;
                    (e.debug || r.debug) && n && n.logWarning(t)
                },
                destroy: function() {
                    this.config = c, this.em = {}
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(7),
            i = n.n(r),
            o = n(2),
            a = n.n(o),
            s = n(15),
            l = n.n(s),
            c = n(16),
            u = n.n(c),
            d = n(3);

        function h(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function f(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? h(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : h(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var p = "_rte",
            g = function(t) {
                var e = t.selection().anchorNode,
                    n = e && e.parentNode,
                    r = e && e.nextSibling;
                return n && "A" == n.nodeName || r && "A" == r.nodeName
            },
            v = {
                bold: {
                    name: "bold",
                    icon: "<b>B</b>",
                    attributes: {
                        title: "Bold"
                    },
                    result: function(t) {
                        return t.exec("bold")
                    }
                },
                italic: {
                    name: "italic",
                    icon: "<i>I</i>",
                    attributes: {
                        title: "Italic"
                    },
                    result: function(t) {
                        return t.exec("italic")
                    }
                },
                underline: {
                    name: "underline",
                    icon: "<u>U</u>",
                    attributes: {
                        title: "Underline"
                    },
                    result: function(t) {
                        return t.exec("underline")
                    }
                },
                strikethrough: {
                    name: "strikethrough",
                    icon: "<s>S</s>",
                    attributes: {
                        title: "Strike-through"
                    },
                    result: function(t) {
                        return t.exec("strikeThrough")
                    }
                },
                link: {
                    icon: '<span style="transform:rotate(45deg)">&supdsub;</span>',
                    name: "link",
                    attributes: {
                        style: "font-size:1.4rem;padding:0 4px 2px;",
                        title: "Link"
                    },
                    state: function(t, e) {
                        return t && t.selection() && g(t) ? 1 : 0
                    },
                    result: function(t) {
                        g(t) ? t.exec("unlink") : t.insertHTML('<a class="link" href="">'.concat(t.selection(), "</a>"))
                    }
                }
            },
            m = function() {
                function t() {
                    var e = this,
                        n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    l()(this, t);
                    var r = n.el;
                    if (r[p]) return r[p];
                    r[p] = this, this.setEl(r), this.updateActiveActions = this.updateActiveActions.bind(this);
                    var i = n.actions || [];
                    i.forEach(function(t, e) {
                        "string" == typeof t ? t = v[t] : v[t.name] && (t = f(f({}, v[t.name]), t)), i[e] = t
                    });
                    var o = i.length ? i : Object.keys(v).map(function(t) {
                        return v[t]
                    });
                    n.classes = f(f({}, {
                        actionbar: "actionbar",
                        button: "action",
                        active: "active",
                        disabled: "disabled",
                        inactive: "inactive"
                    }), n.classes);
                    var a = n.classes,
                        s = n.actionbar;
                    if (this.actionbar = s, this.settings = n, this.classes = a, this.actions = o, !s) {
                        var c = n.actionbarContainer;
                        (s = document.createElement("div")).className = a.actionbar, c.appendChild(s), this.actionbar = s, o.forEach(function(t) {
                            return e.addAction(t)
                        })
                    }
                    return n.styleWithCSS && this.exec("styleWithCSS"), this.syncActions(), this
                }
                return u()(t, [{
                    key: "destroy",
                    value: function() {
                        this.el = 0, this.doc = 0, this.actionbar = 0, this.settings = {}, this.classes = {}, this.actions = []
                    }
                }, {
                    key: "setEl",
                    value: function(t) {
                        this.el = t, this.doc = t.ownerDocument
                    }
                }, {
                    key: "updateActiveActions",
                    value: function() {
                        var t = this;
                        this.getActions().forEach(function(e) {
                            var n = e.btn,
                                r = e.update,
                                i = f({}, t.classes),
                                o = i.active,
                                a = i.inactive,
                                s = i.disabled,
                                l = e.state,
                                c = e.name,
                                u = t.doc;
                            if (n.className = n.className.replace(o, "").trim(), n.className = n.className.replace(a, "").trim(), n.className = n.className.replace(s, "").trim(), l) switch (l(t, u)) {
                                case 1:
                                    n.className += " ".concat(o);
                                    break;
                                case 0:
                                    n.className += " ".concat(a);
                                    break;
                                case -1:
                                    n.className += " ".concat(s)
                            } else u.queryCommandSupported(c) && u.queryCommandState(c) && (n.className += " ".concat(o));
                            r && r(t, e)
                        })
                    }
                }, {
                    key: "enable",
                    value: function() {
                        return this.enabled || (this.actionbarEl().style.display = "", this.el.contentEditable = !0, Object(d.v)(this.el, "mouseup keyup", this.updateActiveActions), this.syncActions(), this.updateActiveActions(), this.el.focus(), this.enabled = 1), this
                    }
                }, {
                    key: "disable",
                    value: function() {
                        return this.actionbarEl().style.display = "none", this.el.contentEditable = !1, Object(d.u)(this.el, "mouseup keyup", this.updateActiveActions), this.enabled = 0, this
                    }
                }, {
                    key: "syncActions",
                    value: function() {
                        var t = this;
                        this.getActions().forEach(function(e) {
                            if (t.settings.actionbar && (!e.state || e.state && e.state(t, t.doc) >= 0)) {
                                var n = e.event || "click";
                                e.btn["on".concat(n)] = function(n) {
                                    e.result(t, e), t.updateActiveActions()
                                }
                            }
                        })
                    }
                }, {
                    key: "addAction",
                    value: function(t) {
                        var e = (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}).sync,
                            n = document.createElement("span"),
                            r = t.icon,
                            i = t.attributes || {};
                        for (var o in n.className = this.classes.button, t.btn = n, i) n.setAttribute(o, i[o]);
                        "string" == typeof r ? n.innerHTML = r : n.appendChild(r), this.actionbarEl().appendChild(n), e && (this.actions.push(t), this.syncActions())
                    }
                }, {
                    key: "getActions",
                    value: function() {
                        return this.actions
                    }
                }, {
                    key: "selection",
                    value: function() {
                        return this.doc.getSelection()
                    }
                }, {
                    key: "exec",
                    value: function(t) {
                        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;
                        this.doc.execCommand(t, !1, e)
                    }
                }, {
                    key: "actionbarEl",
                    value: function() {
                        return this.actionbar
                    }
                }, {
                    key: "insertHTML",
                    value: function(t) {
                        var e = this.doc,
                            n = e.getSelection();
                        if (n && n.rangeCount) {
                            var r = e.createElement("div"),
                                i = n.getRangeAt(0);
                            i.deleteContents(), r.innerHTML = t, Array.prototype.slice.call(r.childNodes).forEach(function(t) {
                                i.insertNode(t)
                            }), n.removeAllRanges(), n.addRange(i), this.el.focus()
                        }
                    }
                }]), t
            }(),
            b = {
                stylePrefix: "rte-",
                adjustToolbar: 1,
                actions: ["bold", "italic", "underline", "strikethrough", "link"]
            };

        function y(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function w(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? y(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : y(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n, r, o, a = {},
                s = function() {
                    var e = t.style,
                        n = "-1000px";
                    e.top = n, e.left = n, e.display = "none"
                };
            return {
                customRte: null,
                name: "RichTextEditor",
                getConfig: function() {
                    return a
                },
                init: function() {
                    var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                        r = (a = w(w({}, b), n)).pStylePrefix;
                    return r && (a.stylePrefix = r + a.stylePrefix), this.pfx = a.stylePrefix, e = a.actions || [], (t = document.createElement("div")).className = "".concat(r, "rte-toolbar ").concat(r, "one-bg"), o = this.initRte(document.createElement("div")), Object(d.v)(t, "mousedown", function(t) {
                        return t.stopPropagation()
                    }), this
                },
                destroy: function() {
                    var i = this.customRte;
                    o && o.destroy(), i && i.destroy && i.destroy(), this.actionbar = 0, this.actions = 0, [a, t, e, n, r, o].forEach(function(t) {
                        return {}
                    })
                },
                postRender: function(e) {
                    var n = e.model.get("Canvas");
                    t.style.pointerEvents = "all", s(), n.getToolsEl().appendChild(t)
                },
                initRte: function(e) {
                    var n = this.pfx,
                        r = t,
                        s = this.actionbar,
                        l = this.actions || i()(a.actions),
                        c = {
                            actionbar: "".concat(n, "actionbar"),
                            button: "".concat(n, "action"),
                            active: "".concat(n, "active"),
                            inactive: "".concat(n, "inactive"),
                            disabled: "".concat(n, "disabled")
                        },
                        u = new m({
                            el: e,
                            classes: c,
                            actions: l,
                            actionbar: s,
                            actionbarContainer: r
                        });
                    return o && o.setEl(e), u.actionbar && (this.actionbar = u.actionbar), u.actions && (this.actions = u.actions), u
                },
                add: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    e.name = t, o.addAction(e, {
                        sync: 1
                    })
                },
                get: function(t) {
                    var e;
                    return o.getActions().forEach(function(n) {
                        n.name == t && (e = n)
                    }), e
                },
                getAll: function() {
                    return o.getActions()
                },
                remove: function(t) {
                    var e = this.getAll(),
                        n = this.get(t);
                    if (n) {
                        var r = n.btn,
                            i = e.indexOf(n);
                        r.parentNode.removeChild(r), e.splice(i, 1)
                    }
                    return n
                },
                getToolbarEl: function() {
                    return t
                },
                updatePosition: function() {
                    var e = a.em.get("Canvas"),
                        r = t.style,
                        i = e.getTargetToElementFixed(n, t, {
                            event: "rteToolbarPosUpdate"
                        });
                    r.top = i.top + "px", r.left = "0px"
                },
                enable: function(e, i) {
                    n = e.el;
                    var o = a.em.get("Canvas"),
                        s = a.em,
                        l = e.getChildrenContainer(),
                        c = this.customRte;
                    if (r = o.getElementPos(n), t.style.display = "", i = c ? c.enable(l, i) : this.initRte(l).enable(), s) {
                        setTimeout(this.updatePosition.bind(this), 0);
                        var u = "change:canvasOffset canvasScroll frame:scroll component:update";
                        s.off(u, this.updatePosition, this), s.on(u, this.updatePosition, this), s.trigger("rte:enable", e, i)
                    }
                    return i
                },
                disable: function(t, e) {
                    var n = a.em,
                        r = this.customRte,
                        i = t.getChildrenContainer();
                    r ? r.disable(i, e) : e && e.disable(), s(), n && n.trigger("rte:disable", t, e)
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(17),
            i = n(2),
            o = n.n(i),
            a = n(1),
            s = n.n(a),
            l = n(0),
            c = n(3);

        function u(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function d(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? u(Object(n), !0).forEach(function(e) {
                    o()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : u(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var h = s.a.$,
            f = s.a.View.extend({
                initialize: function(t) {
                    this.opt = t || {}, Object(l.bindAll)(this, "startSort", "onMove", "endMove", "rollback", "updateOffset", "moveDragHelper");
                    var e = t || {};
                    this.elT = 0, this.elL = 0, this.borderOffset = e.borderOffset || 10;
                    var n = e.container;
                    this.el = "string" == typeof n ? document.querySelector(n) : n, this.$el = h(this.el), this.containerSel = e.containerSel || "div", this.itemSel = e.itemSel || "div", this.draggable = e.draggable || !0, this.nested = e.nested || 0, this.pfx = e.pfx || "", this.ppfx = e.ppfx || "", this.freezeClass = e.freezeClass || this.pfx + "freezed", this.onStart = e.onStart || "", this.onEndMove = e.onEndMove || "", this.direction = e.direction || "v", this.onMoveClb = e.onMove || "", this.relative = e.relative || 0, this.ignoreViewChildren = e.ignoreViewChildren || 0, this.ignoreModels = e.ignoreModels || 0, this.plh = e.placer || "", this.wmargin = e.wmargin || 0, this.offTop = e.offsetTop || 0, this.offLeft = e.offsetLeft || 0, this.document = e.document || document, this.$document = h(this.document), this.dropContent = null, this.em = e.em || "", this.dragHelper = null, this.canvasRelative = e.canvasRelative || 0, this.selectOnEnd = !e.avoidSelectOnEnd, this.scale = e.scale, this.activeTextModel = null, this.em && this.em.on && (this.em.on("change:canvasOffset", this.updateOffset), this.updateOffset())
                },
                getScale: function() {
                    return Object(l.result)(this, scale) || 1
                },
                getContainerEl: function(t) {
                    if (t && (this.el = t), !this.el) {
                        var e = this.opt.container;
                        this.el = "string" == typeof e ? document.querySelector(e) : e, this.$el = h(this.el)
                    }
                    return this.el
                },
                getDocuments: function(t) {
                    var e = this.em,
                        n = t ? t.ownerDocument : e && e.get("Canvas").getBody().ownerDocument,
                        r = [document];
                    return n && r.push(n), r
                },
                updateOffset: function() {
                    var t = this.em.get("canvasOffset") || {};
                    this.offTop = t.top, this.offLeft = t.left
                },
                setDropContent: function(t) {
                    this.dropModel = null, this.dropContent = t
                },
                updateTextViewCursorPosition: function(t) {
                    var e = this.em.get("Canvas"),
                        n = e.getDocument(),
                        r = null;
                    if (n.caretRangeFromPoint) {
                        var i = Object(c.h)(t);
                        r = n.caretRangeFromPoint(i.clientX, i.clientY)
                    } else t.rangeParent && (r = n.createRange()).setStart(t.rangeParent, t.rangeOffset);
                    var o = e.getWindow().getSelection();
                    e.getFrameEl().focus(), o.removeAllRanges(), r && o.addRange(r)
                },
                setContentEditable: function(t, e) {
                    if (t) {
                        var n = t.getEl();
                        n.contentEditable != e && (n.contentEditable = e)
                    }
                },
                toggleSortCursor: function(t) {
                    var e = this.em,
                        n = e && e.get("Canvas");
                    n && (t ? n.startAutoscroll() : n.stopAutoscroll())
                },
                setDragHelper: function(t, e) {
                    for (var n = e || "", r = t.cloneNode(1), i = t.getBoundingClientRect(), o = getComputedStyle(t), a = "", s = 0; s < o.length; s++) {
                        var l = o[s];
                        a += "".concat(l, ":").concat(o.getPropertyValue(l), ";")
                    }
                    document.body.appendChild(r), r.className += " ".concat(this.pfx, "bdrag"), r.setAttribute("style", a), this.dragHelper = r, r.style.width = "".concat(i.width, "px"), r.style.height = "".concat(i.height, "px"), n && this.moveDragHelper(n), this.em && h(this.em.get("Canvas").getBody().ownerDocument).off("mousemove", this.moveDragHelper).on("mousemove", this.moveDragHelper), h(document).off("mousemove", this.moveDragHelper).on("mousemove", this.moveDragHelper)
                },
                moveDragHelper: function(t) {
                    var e = t.target.ownerDocument;
                    if (this.dragHelper && e) {
                        var n = t.pageY,
                            r = t.pageX,
                            i = 0,
                            o = 0,
                            a = (e.defaultView || e.parentWindow).frameElement,
                            s = this.dragHelper.style;
                        if (a) {
                            var l = a.getBoundingClientRect();
                            i = l.top + document.documentElement.scrollTop, o = l.left + document.documentElement.scrollLeft, n = t.clientY, r = t.clientX
                        }
                        s.top = n + i + "px", s.left = r + o + "px"
                    }
                },
                matches: function(t, e, n) {
                    return c.s.call(t, e)
                },
                closest: function(t, e) {
                    if (t) {
                        for (var n = t.parentNode; n && 1 === n.nodeType;) {
                            if (this.matches(n, e)) return n;
                            n = n.parentNode
                        }
                        return null
                    }
                },
                offset: function(t) {
                    var e = t.getBoundingClientRect();
                    return {
                        top: e.top + document.body.scrollTop,
                        left: e.left + document.body.scrollLeft
                    }
                },
                createPlaceholder: function() {
                    var t = this.pfx,
                        e = document.createElement("div"),
                        n = document.createElement("div");
                    return e.className = t + "placeholder", e.style.display = "none", e.style["pointer-events"] = "none", n.className = t + "placeholder-int", e.appendChild(n), e
                },
                startSort: function(t) {
                    var e, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = this.em,
                        i = this.itemSel,
                        o = this.containerSel,
                        a = this.getContainerEl(n.container),
                        s = this.getDocuments(t),
                        l = this.onStart,
                        u = this.plh;
                    this.dropModel = null, this.target = null, this.prevTarget = null, this.moved = 0, t && !this.matches(t, "".concat(i, ", ").concat(o)) && (t = this.closest(t, i)), this.eV = t, u || (u = this.createPlaceholder(), a.appendChild(u), this.plh = u), t && ((e = this.getSourceModel(t)) && e.set && e.set("status", "freezed"), this.srcModel = e), Object(c.v)(a, "mousemove dragover", this.onMove), Object(c.v)(s, "mouseup dragend touchend", this.endMove), Object(c.v)(s, "keydown", this.rollback), l && l({
                        target: e,
                        parent: e && e.parent(),
                        index: e && e.index()
                    }), r && r.clearSelection(), this.toggleSortCursor(1), r && r.trigger("sorter:drag:start", t, e)
                },
                getTargetModel: function(t) {
                    var e = t || this.target;
                    return h(e).data("model")
                },
                getSourceModel: function(t) {
                    var e = this,
                        n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = n.target,
                        i = n.avoidChildren,
                        o = void 0 === i ? 1 : i,
                        a = this.em,
                        s = this.eV,
                        l = t || s,
                        c = this.dropModel,
                        u = this.dropContent,
                        f = function(t) {
                            return t && r && t.opt && t.opt.avoidChildren && e.isTextableActive(t, r)
                        };
                    if (u && a) {
                        if (f(c) && (c = null), !c) {
                            var p = a.get("DomComponents").getComponents(),
                                g = {
                                    avoidChildren: o,
                                    avoidStore: 1,
                                    avoidUpdateStyle: 1
                                },
                                v = p.add(u, d(d({}, g), {}, {
                                    temporary: 1
                                }));
                            if (c = (c = p.remove(v, g)) instanceof Array ? c[0] : c, this.dropModel = c, f(c)) return this.getSourceModel(l, {
                                target: r,
                                avoidChildren: 0
                            })
                        }
                        return c
                    }
                    return l && h(l).data("model")
                },
                selectTargetModel: function(t, e) {
                    if (!(t instanceof s.a.Collection || e && e === t)) {
                        var n = this.targetModel;
                        n && n !== this.srcModel && n.set("status", ""), t && t.set && (t.set("status", "selected-parent"), this.targetModel = t)
                    }
                },
                onMove: function(t) {
                    var e = t,
                        n = this.em,
                        r = this.onMoveClb,
                        i = this.plh;
                    this.moved = 1;
                    var o = i.style.display;
                    o && "none" !== o || (i.style.display = "block");
                    var a = this.offset(this.el);
                    this.elT = this.wmargin ? Math.abs(a.top) : a.top, this.elL = this.wmargin ? Math.abs(a.left) : a.left;
                    var s = t.pageY - this.elT + this.el.scrollTop,
                        c = t.pageX - this.elL + this.el.scrollLeft;
                    if (this.canvasRelative && n) {
                        var u = n.get("Canvas").getMouseRelativeCanvas(t, {
                            noScroll: 1
                        });
                        c = u.x, s = u.y
                    }
                    this.rX = c, this.rY = s, this.eventMove = t;
                    var d = this.getSourceModel(),
                        f = this.dimsFromTarget(t.target, c, s),
                        p = this.target,
                        g = p && this.getTargetModel(p);
                    if (this.selectTargetModel(g, d), g || (i.style.display = "none"), p) {
                        this.lastDims = f;
                        var v = this.findPosition(f, c, s);
                        this.isTextableActive(d, g) ? (this.activeTextModel = g, this.setContentEditable(g, !0), i.style.display = "none", this.lastPos = v, this.updateTextViewCursorPosition(e)) : (this.disableTextable(), this.activeTextModel = null, this.lastPos && this.lastPos.index == v.index && this.lastPos.method == v.method || (this.movePlaceholder(this.plh, f, v, this.prevTargetDim), this.$plh || (this.$plh = h(this.plh)), this.canvasRelative || (this.offTop && this.$plh.css("top", "+=" + this.offTop + "px"), this.offLeft && this.$plh.css("left", "+=" + this.offLeft + "px")), this.lastPos = v)), Object(l.isFunction)(r) && r({
                            event: t,
                            target: d,
                            parent: g,
                            index: v.index + ("after" == v.method ? 1 : 0)
                        }), n && n.trigger("sorter:drag", {
                            target: p,
                            targetModel: g,
                            sourceModel: d,
                            dims: f,
                            pos: v,
                            x: c,
                            y: s
                        })
                    }
                },
                isTextableActive: function(t, e) {
                    return t && t.get && t.get("textable") && e && e.is("text")
                },
                disableTextable: function() {
                    var t = this.activeTextModel;
                    t && t.getView().disableEditing()
                },
                isInFlow: function(t, e) {
                    if (!t) return !1;
                    e = e || document.body;
                    var n = t;
                    return n.offsetHeight, !!this.styleInFlow(n, e)
                },
                styleInFlow: function(t, e) {
                    if (!Object(c.r)(t)) {
                        var n = t.style || {},
                            r = h(t),
                            i = e && h(e);
                        if (!(n.overflow && "visible" !== n.overflow || "none" !== r.css("float") || i && "flex" == i.css("display") && "column" !== i.css("flex-direction"))) {
                            switch (n.position) {
                                case "static":
                                case "relative":
                                case "":
                                    break;
                                default:
                                    return
                            }
                            switch (t.tagName) {
                                case "TR":
                                case "TBODY":
                                case "THEAD":
                                case "TFOOT":
                                    return !0
                            }
                            switch (r.css("display")) {
                                case "block":
                                case "list-item":
                                case "table":
                                case "flex":
                                    return !0
                            }
                        }
                    }
                },
                validTarget: function(t, e) {
                    var n = this.getTargetModel(t),
                        r = this.getSourceModel(e, {
                            target: n
                        }),
                        i = {
                            valid: !0,
                            src: e = r && r.view && r.view.el,
                            srcModel: r,
                            trg: t = n && n.view && n.view.el,
                            trgModel: n
                        };
                    if (!e || !t) return i.valid = !1, i;
                    var o = r.get("draggable");
                    o = o instanceof Array ? o.join(", ") : o, i.dragInfo = o, o = Object(l.isString)(o) ? this.matches(t, o) : o, i.draggable = o;
                    var a = n.get("droppable");
                    return a = (a = a instanceof s.a.Collection ? 1 : a) instanceof Array ? a.join(", ") : a, i.dropInfo = a, a = Object(l.isString)(a) ? this.matches(e, a) : a, a = o && this.isTextableActive(r, n) ? 1 : a, i.droppable = a, a && o || (i.valid = !1), i
                },
                dimsFromTarget: function(t, e, n) {
                    var r = this.em,
                        i = [];
                    if (!t) return i;
                    if (this.matches(t, "".concat(this.itemSel, ", ").concat(this.containerSel)) || (t = this.closest(t, this.itemSel)), this.draggable instanceof Array && (t = this.closest(t, this.draggable.join(","))), !t) return i;
                    if (this.prevTarget && this.prevTarget != t && (this.prevTarget = null), !this.prevTarget) {
                        this.targetP = this.closest(t, this.containerSel);
                        var o = this.validTarget(t);
                        if (r && r.trigger("sorter:drag:validation", o), !o.valid && this.targetP) return this.dimsFromTarget(this.targetP, e, n);
                        this.prevTarget = t, this.prevTargetDim = this.getDim(t), this.cacheDimsP = this.getChildrenDim(this.targetP), this.cacheDims = this.getChildrenDim(t)
                    }
                    if (this.prevTarget == t && (i = this.cacheDims), this.target = this.prevTarget, this.nearBorders(this.prevTargetDim, e, n) || !this.nested && !this.cacheDims.length) {
                        var a = this.targetP;
                        a && this.validTarget(a).valid && (i = this.cacheDimsP, this.target = a)
                    }
                    return this.lastPos = null, i
                },
                getTargetFromEl: function(t) {
                    var e, n = t,
                        r = this.targetPrev,
                        i = this.em,
                        o = this.containerSel,
                        a = this.itemSel;
                    if (this.matches(n, "".concat(a, ", ").concat(o)) || (n = this.closest(n, a)), this.draggable instanceof Array && (n = this.closest(n, this.draggable.join(","))), r && r != n && (this.targetPrev = ""), !this.targetPrev) {
                        e = this.closest(n, o);
                        var s = this.validTarget(n);
                        if (i && i.trigger("sorter:drag:validation", s), !s.valid && e) return this.getTargetFromEl(e);
                        this.targetPrev = n
                    }
                    return this.nearElBorders(n) && (e = this.closest(n, o)) && this.validTarget(e).valid && (n = e), n
                },
                nearElBorders: function(t) {
                    var e = t.getBoundingClientRect(),
                        n = t.ownerDocument.body,
                        r = this.getCurrentPos(),
                        i = r.x,
                        o = r.y,
                        a = e.top + n.scrollTop,
                        s = e.left + n.scrollLeft,
                        l = e.width,
                        c = e.height;
                    if (o < a + 10 || o > a + c - 10 || i < s + 10 || i > s + l - 10) return 1
                },
                getCurrentPos: function() {
                    var t = this.eventMove;
                    return {
                        x: t.pageX || 0,
                        y: t.pageY || 0
                    }
                },
                getDim: function(t) {
                    var e, n, r, i, o = this.em;
                    if (this.canvasRelative && o) {
                        var a = o.get("Canvas"),
                            s = a.getElementPos(t, {
                                noScroll: 1
                            }),
                            l = a.getElementOffsets(t);
                        e = s.top - l.marginTop, n = s.left - l.marginLeft, r = s.height + l.marginTop + l.marginBottom, i = s.width + l.marginLeft + l.marginRight
                    } else {
                        var c = this.offset(t);
                        e = this.relative ? t.offsetTop : c.top - (this.wmargin ? -1 : 1) * this.elT, n = this.relative ? t.offsetLeft : c.left - (this.wmargin ? -1 : 1) * this.elL, r = t.offsetHeight, i = t.offsetWidth
                    }
                    return [e, n, r, i]
                },
                getChildrenDim: function(t) {
                    var e = this,
                        n = [];
                    if (!t) return n;
                    var r = this.getTargetModel(t);
                    if (r && r.view && !this.ignoreViewChildren) {
                        var i = r.getCurrentView ? r.getCurrentView() : r.view;
                        t = i.getChildrenContainer()
                    }
                    return Object(l.each)(t.children, function(r, i) {
                        var o = Object(c.g)(r, h),
                            a = o && o.index ? o.index() : i;
                        if (Object(c.r)(r) || e.matches(r, e.itemSel)) {
                            var s = e.getDim(r),
                                l = e.direction;
                            l = "v" == l || "h" != l && e.isInFlow(r, t), s.push(l, r, a), n.push(s)
                        }
                    }), n
                },
                nearBorders: function(t, e, n) {
                    var r = 0,
                        i = this.borderOffset,
                        o = e || 0,
                        a = n || 0,
                        s = t[0],
                        l = t[1],
                        c = t[2],
                        u = t[3];
                    return (s + i > a || a > s + c - i || l + i > o || o > l + u - i) && (r = 1), !!r
                },
                findPosition: function(t, e, n) {
                    for (var r = {
                            index: 0,
                            indexEl: 0,
                            method: "before"
                        }, i = 0, o = 0, a = 0, s = 0, l = 0, c = 0, u = 0, d = 0, h = 0, f = t.length; h < f; h++)
                        if (a = (d = t[h])[1] + d[3], u = d[0] + d[2], l = d[1] + d[3] / 2, c = d[0] + d[2] / 2, !(o && d[1] > o || s && c >= s || i && a < i))
                            if (r.index = h, r.indexEl = d[6], d[4]) {
                                if (n < c) {
                                    r.method = "before";
                                    break
                                }
                                r.method = "after"
                            } else n < u && (s = u), e < l ? (o = l, r.method = "before") : (i = l, r.method = "after");
                    return r
                },
                movePlaceholder: function(t, e, n, r) {
                    var i = 0,
                        o = 0,
                        a = 0,
                        s = 0,
                        l = "px",
                        c = n.method,
                        u = e[n.index];
                    if (t.classList.remove("vertical"), t.classList.add("horizontal"), u) u[4] ? (a = u[3] + l, s = "auto", i = "before" == c ? u[0] - 0 : u[0] + u[2] - 0, o = u[1]) : (a = "auto", s = u[2] - 0 + l, i = u[0] + 0, o = "before" == c ? u[1] - 0 : u[1] + u[3] - 0, t.classList.remove("horizontal"), t.classList.add("vertical"));
                    else {
                        if (!this.nested) return void(t.style.display = "none");
                        r && (i = r[0] + 5, o = r[1] + 5, a = parseInt(r[3]) - 10 + l, s = "auto")
                    }
                    t.style.top = i + l, t.style.left = o + l, a && (t.style.width = a), s && (t.style.height = s)
                },
                endMove: function(t) {
                    var e, n = this,
                        r = this.eV,
                        i = [],
                        o = this.getDocuments(),
                        a = this.getContainerEl(),
                        s = this.onEndMove,
                        u = this.target,
                        h = this.lastPos;
                    if (Object(c.u)(a, "mousemove dragover", this.onMove), Object(c.u)(o, "mouseup dragend touchend", this.endMove), Object(c.u)(o, "keydown", this.rollback), this.plh.style.display = "none", r && (e = this.getSourceModel(), this.selectOnEnd && e && e.set && (e.set("status", ""), e.set("status", "selected"))), this.moved) {
                        var f = this.toMove;
                        (Object(l.isArray)(f) ? f : f ? [f] : [r]).forEach(function(t) {
                            i.push(n.move(u, t, h))
                        })
                    }
                    this.plh && (this.plh.style.display = "none");
                    var p = this.dragHelper;
                    if (p && (p.parentNode.removeChild(p), this.dragHelper = null), this.disableTextable(), this.selectTargetModel(), this.toggleSortCursor(), this.toMove = null, this.eventMove = 0, this.dropModel = null, Object(l.isFunction)(s)) {
                        var g = {
                            target: e,
                            parent: e && e.parent(),
                            index: e && e.index()
                        };
                        i.length ? i.forEach(function(t) {
                            return s(t, n, g)
                        }) : s(null, this, d(d({}, g), {}, {
                            cancelled: 1
                        }))
                    }
                },
                move: function(t, e, n) {
                    var r = this.em,
                        i = this.activeTextModel,
                        o = this.dropContent,
                        a = Object(c.e)(e);
                    r && r.trigger("component:dragEnd:before", t, a, n);
                    var l, u, f, p = [],
                        g = n.indexEl,
                        v = this.validTarget(t, a),
                        m = h(t).data("collection"),
                        b = v.srcModel,
                        y = v.droppable,
                        w = v.draggable,
                        x = v.dropInfo,
                        O = v.dragInfo,
                        C = v.trgModel;
                    y = C instanceof s.a.Collection ? 1 : y;
                    var S = this.isTextableActive(b, C);
                    if (m && y && w) {
                        var k = {
                            at: g = "after" === n.method ? g + 1 : g,
                            noIncrement: 1
                        };
                        if (o ? (l = o, k.silent = !1, k.avoidUpdateStyle = 1) : (k.temporary = 1, u = m.add({}, d({}, k)), b.collection && (l = b.collection.remove(b, {
                                temporary: 1
                            }))), S) {
                            var j = i.getView();
                            i.trigger("active");
                            var T = j.activeRte,
                                P = b.getEl();
                            delete b.opt.temporary, b.getView().render(), P.setAttribute("data-gjs-textable", "true");
                            var E = P.outerHTML;
                            T.insertHTML && T.insertHTML(E)
                        } else f = m.add(l, k);
                        o ? this.dropContent = null : m.remove(u), this.prevTarget = null
                    } else m || p.push("Target collection not found"), y || p.push("Target is not droppable, accepts [".concat(x, "]")), w || p.push("Component not draggable, acceptable by [".concat(O, "]")), console.warn("Invalid target position: " + p.join(", "));
                    return r && r.trigger("component:dragEnd", m, l, p), r && r.trigger("sorter:drag:end", {
                        targetCollection: m,
                        modelToDrop: l,
                        warns: p,
                        validResult: v,
                        dst: t,
                        srcEl: a
                    }), f
                },
                rollback: function(t) {
                    Object(c.u)(this.getDocuments(), "keydown", this.rollback), 27 == (t.which || t.keyCode) && (this.moved = 0, this.endMove())
                }
            }),
            p = n(15),
            g = n.n(p),
            v = n(16),
            m = n.n(v);

        function b(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function y(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? b(Object(n), !0).forEach(function(e) {
                    o()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : b(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var w = {
                mousePosFetcher: null,
                updateTarget: null,
                ratioDefault: 0,
                posFetcher: null,
                onStart: null,
                onMove: null,
                onEnd: null,
                onUpdateContainer: function() {},
                step: 1,
                minDim: 32,
                maxDim: "",
                unitHeight: "px",
                unitWidth: "px",
                keyHeight: "height",
                keyWidth: "width",
                currentUnit: 1,
                silentFrames: 0,
                avoidContainerUpdate: 0,
                keepAutoHeight: !1,
                keepAutoWidth: !1,
                autoHeight: !1,
                autoWidth: !1,
                tl: 1,
                tc: 1,
                tr: 1,
                cl: 1,
                cr: 1,
                bl: 1,
                bc: 1,
                br: 1
            },
            x = function() {
                function t() {
                    var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    return g()(this, t), this.setOptions(e), Object(l.bindAll)(this, "handleKeyDown", "handleMouseDown", "move", "stop"), this
                }
                return m()(t, [{
                    key: "getConfig",
                    value: function() {
                        return this.opts
                    }
                }, {
                    key: "setOptions",
                    value: function() {
                        var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                        this.opts = Object(l.defaults)(t, w), this.setup()
                    }
                }, {
                    key: "setup",
                    value: function() {
                        var t = this.opts,
                            e = t.prefix || "",
                            n = t.appendTo || document.body,
                            r = this.container;
                        for (r || ((r = document.createElement("div")).className = "".concat(e, "resizer-c"), n.appendChild(r), this.container = r); r.firstChild;) r.removeChild(r.firstChild);
                        var i = {};
                        for (var o in ["tl", "tc", "tr", "cl", "cr", "bl", "bc", "br"].forEach(function(e) {
                                return i[e] = t[e] ? function(t, e) {
                                    var n = e.prefix || "",
                                        r = document.createElement("i");
                                    return r.className = n + "resizer-h " + n + "resizer-h-" + t, r.setAttribute("data-" + n + "handler", t), r
                                }(e, t) : ""
                            }), i) {
                            var a = i[o];
                            a && r.appendChild(a)
                        }
                        this.handlers = i, this.mousePosFetcher = t.mousePosFetcher, this.updateTarget = t.updateTarget, this.posFetcher = t.posFetcher, this.onStart = t.onStart, this.onMove = t.onMove, this.onEnd = t.onEnd, this.onUpdateContainer = t.onUpdateContainer
                    }
                }, {
                    key: "toggleFrames",
                    value: function(t) {
                        if (this.opts.silentFrames) {
                            var e = document.querySelectorAll("iframe");
                            Object(l.each)(e, function(e) {
                                return e.style.pointerEvents = t ? "none" : ""
                            })
                        }
                    }
                }, {
                    key: "isHandler",
                    value: function(t) {
                        var e = this.handlers;
                        for (var n in e)
                            if (e[n] === t) return !0;
                        return !1
                    }
                }, {
                    key: "getFocusedEl",
                    value: function() {
                        return this.el
                    }
                }, {
                    key: "getDocumentEl",
                    value: function() {
                        return [this.el.ownerDocument, document]
                    }
                }, {
                    key: "getElementPos",
                    value: function(t) {
                        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                            n = this.posFetcher || "";
                        return n ? n(t, e) : function(t, e) {
                            var n = e || window,
                                r = t.getBoundingClientRect();
                            return {
                                left: r.left + n.pageXOffset,
                                top: r.top + n.pageYOffset,
                                width: r.width,
                                height: r.height
                            }
                        }(t)
                    }
                }, {
                    key: "focus",
                    value: function(t) {
                        t && t === this.el || (this.el = t, this.updateContainer({
                            forceShow: 1
                        }), Object(c.v)(this.getDocumentEl(), "mousedown", this.handleMouseDown))
                    }
                }, {
                    key: "blur",
                    value: function() {
                        this.container.style.display = "none", this.el && (Object(c.u)(this.getDocumentEl(), "mousedown", this.handleMouseDown), this.el = null)
                    }
                }, {
                    key: "start",
                    value: function(t) {
                        if (0 === t.button) {
                            t.preventDefault(), t.stopPropagation();
                            var e = this.el,
                                n = this.opts || {},
                                r = "data-" + n.prefix + "handler",
                                i = this.getElementPos(e, {
                                    target: "el"
                                });
                            this.handlerAttr = t.target.getAttribute(r), this.clickedHandler = t.target, this.startDim = {
                                t: i.top,
                                l: i.left,
                                w: i.width,
                                h: i.height
                            }, this.rectDim = {
                                t: i.top,
                                l: i.left,
                                w: i.width,
                                h: i.height
                            }, this.startPos = {
                                x: t.clientX,
                                y: t.clientY
                            };
                            var o = this.getDocumentEl();
                            Object(c.v)(o, "mousemove", this.move), Object(c.v)(o, "keydown", this.handleKeyDown), Object(c.v)(o, "mouseup", this.stop), Object(l.isFunction)(this.onStart) && this.onStart(t, {
                                docs: o,
                                config: n,
                                el: e,
                                resizer: this
                            }), this.toggleFrames(1), this.move(t)
                        }
                    }
                }, {
                    key: "move",
                    value: function(t) {
                        var e = this.onMove,
                            n = this.mousePosFetcher,
                            r = n ? n(t) : {
                                x: t.clientX,
                                y: t.clientY
                            };
                        this.currentPos = r, this.delta = {
                            x: r.x - this.startPos.x,
                            y: r.y - this.startPos.y
                        }, this.keys = {
                            shift: t.shiftKey,
                            ctrl: t.ctrlKey,
                            alt: t.altKey
                        }, this.rectDim = this.calc(this), this.updateRect(0), e && e(t), 0 === t.which && this.stop(t)
                    }
                }, {
                    key: "stop",
                    value: function(t) {
                        var e = this.opts,
                            n = this.getDocumentEl();
                        Object(c.u)(n, "mousemove", this.move), Object(c.u)(n, "keydown", this.handleKeyDown), Object(c.u)(n, "mouseup", this.stop), this.updateRect(1), this.toggleFrames(), Object(l.isFunction)(this.onEnd) && this.onEnd(t, {
                            docs: n,
                            config: e
                        })
                    }
                }, {
                    key: "updateRect",
                    value: function(t) {
                        var e = this.el,
                            n = this.opts,
                            r = this.rectDim,
                            i = this.updateTarget,
                            o = this.getSelectedHandler(),
                            a = n.unitHeight,
                            s = n.unitWidth,
                            c = n.keyWidth,
                            u = n.keyHeight;
                        if (Object(l.isFunction)(i)) i(e, r, {
                            store: t,
                            selectedHandler: o,
                            resizer: this,
                            config: n
                        });
                        else {
                            var d = e.style;
                            d[c] = r.w + s, d[u] = r.h + a
                        }
                        this.updateContainer()
                    }
                }, {
                    key: "updateContainer",
                    value: function() {
                        var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                            e = this.opts,
                            n = this.container,
                            r = this.el,
                            i = n.style;
                        !e.avoidContainerUpdate && r && t.forceShow && (i.display = "block"), this.onUpdateContainer({
                            el: n,
                            resizer: this,
                            opts: y(y({}, e), t)
                        })
                    }
                }, {
                    key: "getSelectedHandler",
                    value: function() {
                        var t = this.handlers;
                        if (this.selectedHandler)
                            for (var e in t)
                                if (t[e] === this.selectedHandler) return e
                    }
                }, {
                    key: "handleKeyDown",
                    value: function(t) {
                        27 === t.keyCode && (this.rectDim = this.startDim, this.stop(t))
                    }
                }, {
                    key: "handleMouseDown",
                    value: function(t) {
                        var e = t.target;
                        this.isHandler(e) ? (this.selectedHandler = e, this.start(t)) : e !== this.el && (this.selectedHandler = "", this.blur())
                    }
                }, {
                    key: "calc",
                    value: function(t) {
                        var e, n = this.opts || {},
                            r = n.step,
                            i = this.startDim,
                            o = n.minDim,
                            a = n.maxDim,
                            s = t.delta.x,
                            l = t.delta.y,
                            u = i.w,
                            d = i.h,
                            h = {
                                t: 0,
                                l: 0,
                                w: u,
                                h: d
                            };
                        if (t) {
                            var f = t.handlerAttr;
                            ~f.indexOf("r") && (e = Object(c.t)(u + s * r, r), e = Math.max(o, e), a && (e = Math.min(a, e)), h.w = e), ~f.indexOf("b") && (e = Object(c.t)(d + l * r, r), e = Math.max(o, e), a && (e = Math.min(a, e)), h.h = e), ~f.indexOf("l") && (e = Object(c.t)(u - s * r, r), e = Math.max(o, e), a && (e = Math.min(a, e)), h.w = e), ~f.indexOf("t") && (e = Object(c.t)(d - l * r, r), e = Math.max(o, e), a && (e = Math.min(a, e)), h.h = e);
                            var p = n.ratioDefault ? !t.keys.shift : t.keys.shift;
                            if (f.indexOf("c") < 0 && p) {
                                var g = i.w / i.h;
                                h.w / h.h > g ? h.h = Math.round(h.w / g) : h.w = Math.round(h.h * g)
                            }
                            return ~f.indexOf("l") && (h.l = i.w - h.w), ~f.indexOf("t") && (h.t = i.h - h.h), h
                        }
                    }
                }]), t
            }(),
            O = {
                init: function(t) {
                    return new x(t)
                }
            };
        e.default = function() {
            return {
                name: "Utils",
                init: function() {
                    return this
                },
                destroy: function() {},
                Sorter: f,
                Resizer: O,
                Dragger: r.a
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(7),
            i = n.n(r),
            o = n(2),
            a = n.n(o),
            s = n(0),
            l = n(22),
            c = {
                stylePrefix: "com-",
                defaults: [],
                strict: 1
            },
            u = n(5);

        function d(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function h(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? d(Object(n), !0).forEach(function(e) {
                    a()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : d(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        var f = [
            ["preview", "Preview", "preview"],
            ["resize", "Resize", "resize"],
            ["fullscreen", "Fullscreen", "fullscreen"],
            ["copy", "CopyComponent"],
            ["paste", "PasteComponent"],
            ["canvas-move", "CanvasMove"],
            ["canvas-clear", "CanvasClear"],
            ["open-code", "ExportTemplate", "export-template"],
            ["open-layers", "OpenLayers", "open-layers"],
            ["open-styles", "OpenStyleManager", "open-sm"],
            ["open-traits", "OpenTraitManager", "open-tm"],
            ["open-blocks", "OpenBlocks", "open-blocks"],
            ["open-assets", "OpenAssets", "open-assets"],
            ["component-select", "SelectComponent", "select-comp"],
            ["component-outline", "SwitchVisibility", "sw-visibility"],
            ["component-offset", "ShowOffset", "show-offset"],
            ["component-move", "MoveComponent", "move-comp"],
            ["component-next", "ComponentNext"],
            ["component-prev", "ComponentPrev"],
            ["component-enter", "ComponentEnter"],
            ["component-exit", "ComponentExit", "select-parent"],
            ["component-delete", "ComponentDelete"],
            ["component-style-clear", "ComponentStyleClear"],
            ["component-drag", "ComponentDrag"]
        ];
        e.default = function() {
            var t, e = {},
                r = {},
                o = {},
                a = {};
            return {
                CommandAbstract: l.default,
                name: "Commands",
                init: function() {
                    var r = this,
                        a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    e = h(h({}, c), a), t = e.em;
                    var l = e.pStylePrefix;
                    return l && (e.stylePrefix = l + e.stylePrefix), Object.keys(e.defaults).forEach(function(t) {
                        var n = e.defaults[t];
                        n.id && r.add(n.id, n)
                    }), o["tlb-delete"] = {
                        run: function(t) {
                            return t.runCommand("core:component-delete")
                        }
                    }, o["tlb-clone"] = {
                        run: function(t) {
                            t.runCommand("core:copy"), t.runCommand("core:paste")
                        }
                    }, o["tlb-move"] = {
                        run: function(t, e) {
                            var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                                r = t.getModel(),
                                o = n && n.event,
                                a = n.target,
                                l = a || t.getSelected(),
                                c = a ? [a] : i()(t.getSelectedAll()),
                                d = o && "dragstart" == o.type,
                                h = {
                                    preserveSelected: 1
                                },
                                f = l.get("dmode") || r.get("dmode"),
                                p = function() {
                                    return r.stopDefault(h)
                                },
                                g = Object(s.includes)(["absolute", "translate"], f);
                            if (c.forEach(function(t) {
                                    return t.trigger("disable")
                                }), !l || !l.get("draggable")) return r.logWarning("The element is not draggable");
                            d ? setTimeout(p, 0) : p();
                            var v = function(t) {
                                    r.trigger("".concat(u.eventDrag, ":start"), t)
                                },
                                m = function(t) {
                                    r.trigger(u.eventDrag, t)
                                },
                                b = function(e, n, i) {
                                    r.runDefault(h), c.forEach(function(t) {
                                        return t.set("status", "selected")
                                    }), t.select(c), l.emitUpdate(), r.trigger("".concat(u.eventDrag, ":end"), i), (g || i.cancelled) && r.set("_cmpDrag", 1)
                                };
                            if (g) t.runCommand("core:component-drag", {
                                guidesInfo: 1,
                                mode: f,
                                target: l,
                                onStart: v,
                                onDrag: m,
                                onEnd: b,
                                event: o
                            });
                            else {
                                d && o.dataTransfer.setDragImage(l.view.el, 0, 0);
                                var y = t.Commands.get("move-comp");
                                y.onStart = v, y.onDrag = m, y.onEndMoveFromModel = b, y.initSorterFromModels(c)
                            }
                            c.forEach(function(t) {
                                return t.set("status", "freezed-selected")
                            })
                        }
                    }, o["core:undo"] = function(t) {
                        return t.UndoManager.undo()
                    }, o["core:redo"] = function(t) {
                        return t.UndoManager.redo()
                    }, f.forEach(function(e) {
                        var r = e[2],
                            i = n(91)("./".concat(e[1])).default,
                            a = "core:".concat(e[0]);
                        o[a] = i, r && (o[r] = i, ["run", "stop"].forEach(function(e) {
                            t.on("".concat(e, ":").concat(r), function() {
                                for (var n, r = arguments.length, i = new Array(r), o = 0; o < r; o++) i[o] = arguments[o];
                                return (n = t).trigger.apply(n, ["".concat(e, ":").concat(a)].concat(i))
                            })
                        }))
                    }), e.em && (e.model = e.em.get("Canvas")), this.loadDefaultCommands(), this
                },
                add: function(t, e) {
                    return Object(s.isFunction)(e) && (e = {
                        run: e
                    }), e.stop || (e.noStop = 1), delete e.initialize, e.id = t, r[t] = l.default.extend(e), this
                },
                get: function(n) {
                    var i = r[n];
                    return Object(s.isFunction)(i) ? (i = new i(e), r[n] = i) : i || t.logWarning("'".concat(n, "' command not found")), i
                },
                extend: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        n = this.get(t);
                    if (n) {
                        var r = h(h({}, n.constructor.prototype), e);
                        this.add(t, r);
                        var i = f.filter(function(e) {
                            return "core:".concat(e[0]) === t && e[2]
                        })[0];
                        i && this.add(i[2], r)
                    }
                    return this
                },
                has: function(t) {
                    return !!r[t]
                },
                getAll: function() {
                    return r
                },
                run: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return this.runCommand(this.get(t), e)
                },
                stop: function(t) {
                    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    return this.stopCommand(this.get(t), e)
                },
                isActive: function(t) {
                    return this.getActive().hasOwnProperty(t)
                },
                getActive: function() {
                    return a
                },
                loadDefaultCommands: function() {
                    for (var t in o) this.add(t, o[t]);
                    return this
                },
                runCommand: function(n) {
                    var r, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    if (n && n.run) {
                        var o = n.id,
                            s = t.get("Editor");
                        this.isActive(o) && !i.force && e.strict || (r = n.callRun(s, i), o && n.stop && !n.noStop && !i.abort && (a[o] = r))
                    }
                    return r
                },
                stopCommand: function(n) {
                    var r, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                    if (n && n.run) {
                        var o = n.id,
                            s = t.get("Editor");
                        (this.isActive(o) || i.force || !e.strict) && (o && delete a[o], r = n.callStop(s, i))
                    }
                    return r
                },
                create: function(t) {
                    return t.stop || (t.noStop = 1), new(l.default.extend(t))(e)
                },
                destroy: function() {
                    [t, e, r, o, a].forEach(function(t) {
                        return {}
                    })
                }
            }
        }
    }, function(t, e, n) {
        "use strict";
        n.r(e);
        var r = n(2),
            i = n.n(r),
            o = n(0),
            a = {
                stylePrefix: "css-",
                staticRules: "",
                rules: []
            },
            s = n(34),
            l = n(33),
            c = n(37),
            u = n(12),
            d = n(10);

        function h(t, e) {
            var n = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var r = Object.getOwnPropertySymbols(t);
                e && (r = r.filter(function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                })), n.push.apply(n, r)
            }
            return n
        }

        function f(t) {
            for (var e = 1; e < arguments.length; e++) {
                var n = null != arguments[e] ? arguments[e] : {};
                e % 2 ? h(Object(n), !0).forEach(function(e) {
                    i()(t, e, n[e])
                }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : h(Object(n)).forEach(function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e))
                })
            }
            return t
        }
        e.default = function() {
            var t, e, n, r = {};
            return {
                Selectors: u.a,
                name: "CssComposer",
                getConfig: function() {
                    return r
                },
                storageKey: function() {
                    var t = [],
                        e = r.stm && r.stm.getConfig() || {};
                    return e.storeCss && t.push("css"), e.storeStyles && t.push("styles"), t
                },
                init: function(i) {
                    for (var o in r = i || {}, a) o in r || (r[o] = a[o]);
                    var s = r.pStylePrefix;
                    s && (r.stylePrefix = s + r.stylePrefix);
                    var u = r.em && r.em.config.style || "";
                    return r.rules = u || r.rules, t = r.em, e = new l.a([], r), n = new c.a({
                        collection: e,
                        config: r
                    }), this
                },
                onLoad: function() {
                    e.add(r.rules)
                },
                postLoad: function(t) {
                    var e = this,
                        n = "add remove",
                        r = this.getAll(),
                        i = t.get("UndoManager");
                    i && i.add(r), t.stopListening(r, n, this.handleChange), t.listenTo(r, n, this.handleChange), r.each(function(t) {
                        return e.handleChange(t, null, {
                            avoidStore: 1
                        })
                    })
                },
                handleChange: function(e, n) {
                    var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        i = "change:style",
                        o = t.get("UndoManager");
                    o && o.add(e);
                    var a = t.handleUpdates.bind(t);
                    t.stopListening(e, i, a), t.listenTo(e, i, a), !r.avoidStore && a("", "", r)
                },
                load: function(t) {
                    var n = t || "";
                    !n && r.stm && (n = r.em.getCacheLoad());
                    var i = n.styles || "";
                    if (n.styles) try {
                        i = JSON.parse(n.styles)
                    } catch (t) {} else n.css && (i = r.em.get("Parser").parseCss(n.css));
                    return Object(o.isArray)(i) ? i.length && e.reset(i) : i && e.reset(i), i
                },
                store: function(t) {
                    if (r.stm) {
                        var n = {},
                            i = this.storageKey();
                        return i.indexOf("css") >= 0 && (n.css = r.em.getCss()), i.indexOf("styles") >= 0 && (n.styles = JSON.stringify(e)), t || r.stm.store(n), n
                    }
                },
                add: function(t, n, i) {
                    var o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
                        a = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : {},
                        l = n || "",
                        c = i || "",
                        u = f({}, o),
                        d = this.get(t, l, c, u);
                    return d && d.config && !d.config.singleAtRule || (u.state = l, u.mediaText = c, u.selectors = [], (d = new s.a(u, r)).get("selectors").add(t, a), e.add(d, a)), d
                },
                get: function(t, n, r, i) {
                    var o = null;
                    return e.each(function(e) {
                        o || e.compare(t, n, r, i) && (o = e)
                    }), o
                },
                getAll: function() {
                    return e
                },
                clear: function() {
                    return this.getAll().reset(), this
                },
                addCollection: function(t) {
                    for (var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = [], i = t instanceof Array ? t : [t], o = 0, a = i.length; o < a; o++) {
                        var s = i[o] || {};
                        if (s.selectors) {
                            var l = r.em && r.em.get("SelectorManager");
                            l || console.warn("Selector Manager not found");
                            for (var c = s.selectors, u = c instanceof Array ? c : [c], d = [], h = 0, p = u.length; h < p; h++) {
                                var g = l.add(u[h]);
                                d.push(g)
                            }
                            var v = this.get(d, s.state, s.mediaText, s),
                                m = this.add(d, s.state, s.mediaText, s),
                                b = !v || !e.avoidUpdateStyle,
                                y = s.style || {};
                            if (b) {
                                var w = e.extend ? f(f({}, m.get("style")), y) : y;
                                m.set("style", w)
                            }
                            n.push(m)
                        }
                    }
                    return n
                },
                setRule: function(e, n) {
                    var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        i = r.atRuleType,
                        o = r.atRuleParams,
                        a = t.get("Parser").parserCss.checkNode({
                            selectors: e,
                            style: n
                        })[0],
                        s = a.state,
                        l = a.selectorsAdd,
                        c = t.get("SelectorManager").add(a.selectors),
                        u = this.add(c, s, o, {
                            selectorsAdd: l,
                            atRule: i
                        });
                    return u.setStyle(n, r), u
                },
                getRule: function(e) {
                    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = t.get("SelectorManager"),
                        i = t.get("Parser").parserCss.checkNode({
                            selectors: e
                        })[0],
                        o = r.get(i.selectors),
                        a = i.state,
                        s = i.selectorsAdd,
                        l = n.atRuleType,
                        c = n.atRuleParams;
                    return o && this.get(o, a, c, {
                        selectorsAdd: s,
                        atRule: l
                    })
                },
                getRules: function(t) {
                    return this.getAll().filter(function(e) {
                        return e.getSelectors().getFullString() === t
                    })
                },
                setIdRule: function(e) {
                    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        i = r.addOpts,
                        o = void 0 === i ? {} : i,
                        a = r.state || "",
                        s = r.mediaText || t.getCurrentMedia(),
                        l = t.get("SelectorManager").add({
                            name: e,
                            type: d.a.TYPE_ID
                        }, o),
                        c = this.add(l, a, s, {}, o);
                    return c.setStyle(n, f(f({}, r), o)), c
                },
                getIdRule: function(e) {
                    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = n.state || "",
                        i = n.mediaText || t.getCurrentMedia(),
                        o = t.get("SelectorManager").get(e, d.a.TYPE_ID);
                    return o && this.get(o, r, i)
                },
                setClassRule: function(e) {
                    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                        i = r.state || "",
                        o = r.mediaText || t.getCurrentMedia(),
                        a = t.get("SelectorManager").add({
                            name: e,
                            type: d.a.TYPE_CLASS
                        }),
                        s = this.add(a, i, o);
                    return s.setStyle(n, r), s
                },
                getClassRule: function(e) {
                    var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                        r = n.state || "",
                        i = n.mediaText || t.getCurrentMedia(),
                        o = t.get("SelectorManager").get(e, d.a.TYPE_CLASS);
                    return o && this.get(o, r, i)
                },
                render: function() {
                    return n.render().el
                },
                destroy: function() {
                    e.reset(), e.stopListening(), n.remove(), [t, e, n].forEach(function(t) {
                        return null
                    }), r = {}
                }
            }
        }
    }]).default
});