if (function(e, t) {
    "use strict";
    "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
        if (!e.document)
            throw new Error("jQuery requires a window with a document");
        return t(e)
    }
    : t(e)
}("undefined" != typeof window ? window : this, (function(e, t) {
    "use strict";
    function i(e, t, i) {
        var n, s, o = (i = i || ce).createElement("script");
        if (o.text = e,
        t)
            for (n in he)
                (s = t[n] || t.getAttribute && t.getAttribute(n)) && o.setAttribute(n, s);
        i.head.appendChild(o).parentNode.removeChild(o)
    }
    function n(e) {
        return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? ne[se.call(e)] || "object" : typeof e
    }
    function s(e) {
        var t = !!e && "length"in e && e.length
          , i = n(e);
        return !ue(e) && !de(e) && ("array" === i || 0 === t || "number" == typeof t && 0 < t && t - 1 in e)
    }
    function o(e, t) {
        return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
    }
    function a(e, t, i) {
        return ue(t) ? pe.grep(e, (function(e, n) {
            return !!t.call(e, n, e) !== i
        }
        )) : t.nodeType ? pe.grep(e, (function(e) {
            return e === t !== i
        }
        )) : "string" != typeof t ? pe.grep(e, (function(e) {
            return -1 < ie.call(t, e) !== i
        }
        )) : pe.filter(t, e, i)
    }
    function r(e, t) {
        for (; (e = e[t]) && 1 !== e.nodeType; )
            ;
        return e
    }
    function l(e) {
        return e
    }
    function u(e) {
        throw e
    }
    function d(e, t, i, n) {
        var s;
        try {
            e && ue(s = e.promise) ? s.call(e).done(t).fail(i) : e && ue(s = e.then) ? s.call(e, t, i) : t.apply(void 0, [e].slice(n))
        } catch (e) {
            i.apply(void 0, [e])
        }
    }
    function c() {
        ce.removeEventListener("DOMContentLoaded", c),
        e.removeEventListener("load", c),
        pe.ready()
    }
    function h(e, t) {
        return t.toUpperCase()
    }
    function f(e) {
        return e.replace(Ie, "ms-").replace(Pe, h)
    }
    function p() {
        this.expando = pe.expando + p.uid++
    }
    function m(e, t, i) {
        var n, s;
        if (void 0 === i && 1 === e.nodeType)
            if (n = "data-" + t.replace($e, "-$&").toLowerCase(),
            "string" == typeof (i = e.getAttribute(n))) {
                try {
                    i = "true" === (s = i) || "false" !== s && ("null" === s ? null : s === +s + "" ? +s : Ne.test(s) ? JSON.parse(s) : s)
                } catch (e) {}
                Me.set(e, t, i)
            } else
                i = void 0;
        return i
    }
    function g(e, t, i, n) {
        var s, o, a = 20, r = n ? function() {
            return n.cur()
        }
        : function() {
            return pe.css(e, t, "")
        }
        , l = r(), u = i && i[3] || (pe.cssNumber[t] ? "" : "px"), d = e.nodeType && (pe.cssNumber[t] || "px" !== u && +l) && Le.exec(pe.css(e, t));
        if (d && d[3] !== u) {
            for (l /= 2,
            u = u || d[3],
            d = +l || 1; a--; )
                pe.style(e, t, d + u),
                (1 - o) * (1 - (o = r() / l || .5)) <= 0 && (a = 0),
                d /= o;
            d *= 2,
            pe.style(e, t, d + u),
            i = i || []
        }
        return i && (d = +d || +l || 0,
        s = i[1] ? d + (i[1] + 1) * i[2] : +i[2],
        n && (n.unit = u,
        n.start = d,
        n.end = s)),
        s
    }
    function v(e, t) {
        for (var i, n, s, o, a, r, l, u = [], d = 0, c = e.length; d < c; d++)
            (n = e[d]).style && (i = n.style.display,
            t ? ("none" === i && (u[d] = Ae.get(n, "display") || null,
            u[d] || (n.style.display = "")),
            "" === n.style.display && Re(n) && (u[d] = (l = a = o = void 0,
            a = (s = n).ownerDocument,
            r = s.nodeName,
            (l = We[r]) || (o = a.body.appendChild(a.createElement(r)),
            l = pe.css(o, "display"),
            o.parentNode.removeChild(o),
            "none" === l && (l = "block"),
            We[r] = l)))) : "none" !== i && (u[d] = "none",
            Ae.set(n, "display", i)));
        for (d = 0; d < c; d++)
            null != u[d] && (e[d].style.display = u[d]);
        return e
    }
    function b(e, t) {
        var i;
        return i = void 0 !== e.getElementsByTagName ? e.getElementsByTagName(t || "*") : void 0 !== e.querySelectorAll ? e.querySelectorAll(t || "*") : [],
        void 0 === t || t && o(e, t) ? pe.merge([e], i) : i
    }
    function y(e, t) {
        for (var i = 0, n = e.length; i < n; i++)
            Ae.set(e[i], "globalEval", !t || Ae.get(t[i], "globalEval"))
    }
    function _(e, t, i, s, o) {
        for (var a, r, l, u, d, c, h = t.createDocumentFragment(), f = [], p = 0, m = e.length; p < m; p++)
            if ((a = e[p]) || 0 === a)
                if ("object" === n(a))
                    pe.merge(f, a.nodeType ? [a] : a);
                else if (Qe.test(a)) {
                    for (r = r || h.appendChild(t.createElement("div")),
                    l = (Ye.exec(a) || ["", ""])[1].toLowerCase(),
                    u = Ke[l] || Ke._default,
                    r.innerHTML = u[1] + pe.htmlPrefilter(a) + u[2],
                    c = u[0]; c--; )
                        r = r.lastChild;
                    pe.merge(f, r.childNodes),
                    (r = h.firstChild).textContent = ""
                } else
                    f.push(t.createTextNode(a));
        for (h.textContent = "",
        p = 0; a = f[p++]; )
            if (s && -1 < pe.inArray(a, s))
                o && o.push(a);
            else if (d = Fe(a),
            r = b(h.appendChild(a), "script"),
            d && y(r),
            i)
                for (c = 0; a = r[c++]; )
                    Ve.test(a.type || "") && i.push(a);
        return h
    }
    function w() {
        return !0
    }
    function x() {
        return !1
    }
    function k(e, t) {
        return e === function() {
            try {
                return ce.activeElement
            } catch (e) {}
        }() == ("focus" === t)
    }
    function C(e, t, i, n, s, o) {
        var a, r;
        if ("object" == typeof t) {
            for (r in "string" != typeof i && (n = n || i,
            i = void 0),
            t)
                C(e, r, i, n, t[r], o);
            return e
        }
        if (null == n && null == s ? (s = i,
        n = i = void 0) : null == s && ("string" == typeof i ? (s = n,
        n = void 0) : (s = n,
        n = i,
        i = void 0)),
        !1 === s)
            s = x;
        else if (!s)
            return e;
        return 1 === o && (a = s,
        (s = function(e) {
            return pe().off(e),
            a.apply(this, arguments)
        }
        ).guid = a.guid || (a.guid = pe.guid++)),
        e.each((function() {
            pe.event.add(this, t, s, n, i)
        }
        ))
    }
    function D(e, t, i) {
        i ? (Ae.set(e, t, !1),
        pe.event.add(e, t, {
            namespace: !1,
            handler: function(e) {
                var n, s, o = Ae.get(this, t);
                if (1 & e.isTrigger && this[t]) {
                    if (o.length)
                        (pe.event.special[t] || {}).delegateType && e.stopPropagation();
                    else if (o = J.call(arguments),
                    Ae.set(this, t, o),
                    n = i(this, t),
                    this[t](),
                    o !== (s = Ae.get(this, t)) || n ? Ae.set(this, t, !1) : s = {},
                    o !== s)
                        return e.stopImmediatePropagation(),
                        e.preventDefault(),
                        s.value
                } else
                    o.length && (Ae.set(this, t, {
                        value: pe.event.trigger(pe.extend(o[0], pe.Event.prototype), o.slice(1), this)
                    }),
                    e.stopImmediatePropagation())
            }
        })) : void 0 === Ae.get(e, t) && pe.event.add(e, t, w)
    }
    function T(e, t) {
        return o(e, "table") && o(11 !== t.nodeType ? t : t.firstChild, "tr") && pe(e).children("tbody")[0] || e
    }
    function S(e) {
        return e.type = (null !== e.getAttribute("type")) + "/" + e.type,
        e
    }
    function I(e) {
        return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"),
        e
    }
    function P(e, t) {
        var i, n, s, o, a, r;
        if (1 === t.nodeType) {
            if (Ae.hasData(e) && (r = Ae.get(e).events))
                for (s in Ae.remove(t, "handle events"),
                r)
                    for (i = 0,
                    n = r[s].length; i < n; i++)
                        pe.event.add(t, s, r[s][i]);
            Me.hasData(e) && (o = Me.access(e),
            a = pe.extend({}, o),
            Me.set(t, a))
        }
    }
    function E(e, t, n, s) {
        t = ee(t);
        var o, a, r, l, u, d, c = 0, h = e.length, f = h - 1, p = t[0], m = ue(p);
        if (m || 1 < h && "string" == typeof p && !le.checkClone && et.test(p))
            return e.each((function(i) {
                var o = e.eq(i);
                m && (t[0] = p.call(this, i, o.php())),
                E(o, t, n, s)
            }
            ));
        if (h && (a = (o = _(t, e[0].ownerDocument, !1, e, s)).firstChild,
        1 === o.childNodes.length && (o = a),
        a || s)) {
            for (l = (r = pe.map(b(o, "script"), S)).length; c < h; c++)
                u = o,
                c !== f && (u = pe.clone(u, !0, !0),
                l && pe.merge(r, b(u, "script"))),
                n.call(e[c], u, c);
            if (l)
                for (d = r[r.length - 1].ownerDocument,
                pe.map(r, I),
                c = 0; c < l; c++)
                    u = r[c],
                    Ve.test(u.type || "") && !Ae.access(u, "globalEval") && pe.contains(d, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? pe._evalUrl && !u.noModule && pe._evalUrl(u.src, {
                        nonce: u.nonce || u.getAttribute("nonce")
                    }, d) : i(u.textContent.replace(tt, ""), u, d))
        }
        return e
    }
    function A(e, t, i) {
        for (var n, s = t ? pe.filter(t, e) : e, o = 0; null != (n = s[o]); o++)
            i || 1 !== n.nodeType || pe.cleanData(b(n)),
            n.parentNode && (i && Fe(n) && y(b(n, "script")),
            n.parentNode.removeChild(n));
        return e
    }
    function M(e, t, i) {
        var n, s, o, a, r = e.style;
        return (i = i || nt(e)) && ("" !== (a = i.getPropertyValue(t) || i[t]) || Fe(e) || (a = pe.style(e, t)),
        !le.pixelBoxStyles() && it.test(a) && ot.test(t) && (n = r.width,
        s = r.minWidth,
        o = r.maxWidth,
        r.minWidth = r.maxWidth = r.width = a,
        a = i.width,
        r.width = n,
        r.minWidth = s,
        r.maxWidth = o)),
        void 0 !== a ? a + "" : a
    }
    function N(e, t) {
        return {
            get: function() {
                if (!e())
                    return (this.get = t).apply(this, arguments);
                delete this.get
            }
        }
    }
    function $(e) {
        return pe.cssProps[e] || lt[e] || (e in rt ? e : lt[e] = function(e) {
            for (var t = e[0].toUpperCase() + e.slice(1), i = at.length; i--; )
                if ((e = at[i] + t)in rt)
                    return e
        }(e) || e)
    }
    function O(e, t, i) {
        var n = Le.exec(t);
        return n ? Math.max(0, n[2] - (i || 0)) + (n[3] || "px") : t
    }
    function L(e, t, i, n, s, o) {
        var a = "width" === t ? 1 : 0
          , r = 0
          , l = 0;
        if (i === (n ? "border" : "content"))
            return 0;
        for (; a < 4; a += 2)
            "margin" === i && (l += pe.css(e, i + je[a], !0, s)),
            n ? ("content" === i && (l -= pe.css(e, "padding" + je[a], !0, s)),
            "margin" !== i && (l -= pe.css(e, "border" + je[a] + "Width", !0, s))) : (l += pe.css(e, "padding" + je[a], !0, s),
            "padding" !== i ? l += pe.css(e, "border" + je[a] + "Width", !0, s) : r += pe.css(e, "border" + je[a] + "Width", !0, s));
        return !n && 0 <= o && (l += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - l - r - .5)) || 0),
        l
    }
    function j(e, t, i) {
        var n = nt(e)
          , s = (!le.boxSizingReliable() || i) && "border-box" === pe.css(e, "boxSizing", !1, n)
          , a = s
          , r = M(e, t, n)
          , l = "offset" + t[0].toUpperCase() + t.slice(1);
        if (it.test(r)) {
            if (!i)
                return r;
            r = "auto"
        }
        return (!le.boxSizingReliable() && s || !le.reliableTrDimensions() && o(e, "tr") || "auto" === r || !parseFloat(r) && "inline" === pe.css(e, "display", !1, n)) && e.getClientRects().length && (s = "border-box" === pe.css(e, "boxSizing", !1, n),
        (a = l in e) && (r = e[l])),
        (r = parseFloat(r) || 0) + L(e, t, i || (s ? "border" : "content"), a, n, r) + "px"
    }
    function H(e, t, i, n, s) {
        return new H.prototype.init(e,t,i,n,s)
    }
    function F() {
        pt && (!1 === ce.hidden && e.requestAnimationFrame ? e.requestAnimationFrame(F) : e.setTimeout(F, pe.fx.interval),
        pe.fx.tick())
    }
    function z() {
        return e.setTimeout((function() {
            ft = void 0
        }
        )),
        ft = Date.now()
    }
    function R(e, t) {
        var i, n = 0, s = {
            height: e
        };
        for (t = t ? 1 : 0; n < 4; n += 2 - t)
            s["margin" + (i = je[n])] = s["padding" + i] = e;
        return t && (s.opacity = s.width = e),
        s
    }
    function W(e, t, i) {
        for (var n, s = (q.tweeners[t] || []).concat(q.tweeners["*"]), o = 0, a = s.length; o < a; o++)
            if (n = s[o].call(i, t, e))
                return n
    }
    function q(e, t, i) {
        var n, s, o = 0, a = q.prefilters.length, r = pe.Deferred().always((function() {
            delete l.elem
        }
        )), l = function() {
            if (s)
                return !1;
            for (var t = ft || z(), i = Math.max(0, u.startTime + u.duration - t), n = 1 - (i / u.duration || 0), o = 0, a = u.tweens.length; o < a; o++)
                u.tweens[o].run(n);
            return r.notifyWith(e, [u, n, i]),
            n < 1 && a ? i : (a || r.notifyWith(e, [u, 1, 0]),
            r.resolveWith(e, [u]),
            !1)
        }, u = r.promise({
            elem: e,
            props: pe.extend({}, t),
            opts: pe.extend(!0, {
                specialEasing: {},
                easing: pe.easing._default
            }, i),
            originalProperties: t,
            originalOptions: i,
            startTime: ft || z(),
            duration: i.duration,
            tweens: [],
            createTween: function(t, i) {
                var n = pe.Tween(e, u.opts, t, i, u.opts.specialEasing[t] || u.opts.easing);
                return u.tweens.push(n),
                n
            },
            stop: function(t) {
                var i = 0
                  , n = t ? u.tweens.length : 0;
                if (s)
                    return this;
                for (s = !0; i < n; i++)
                    u.tweens[i].run(1);
                return t ? (r.notifyWith(e, [u, 1, 0]),
                r.resolveWith(e, [u, t])) : r.rejectWith(e, [u, t]),
                this
            }
        }), d = u.props;
        for (function(e, t) {
            var i, n, s, o, a;
            for (i in e)
                if (s = t[n = f(i)],
                o = e[i],
                Array.isArray(o) && (s = o[1],
                o = e[i] = o[0]),
                i !== n && (e[n] = o,
                delete e[i]),
                (a = pe.cssHooks[n]) && "expand"in a)
                    for (i in o = a.expand(o),
                    delete e[n],
                    o)
                        i in e || (e[i] = o[i],
                        t[i] = s);
                else
                    t[n] = s
        }(d, u.opts.specialEasing); o < a; o++)
            if (n = q.prefilters[o].call(u, e, d, u.opts))
                return ue(n.stop) && (pe._queueHooks(u.elem, u.opts.queue).stop = n.stop.bind(n)),
                n;
        return pe.map(d, W, u),
        ue(u.opts.start) && u.opts.start.call(e, u),
        u.progress(u.opts.progress).done(u.opts.done, u.opts.complete).fail(u.opts.fail).always(u.opts.always),
        pe.fx.timer(pe.extend(l, {
            elem: e,
            anim: u,
            queue: u.opts.queue
        })),
        u
    }
    function B(e) {
        return (e.match(Ce) || []).join(" ")
    }
    function U(e) {
        return e.getAttribute && e.getAttribute("class") || ""
    }
    function Y(e) {
        return Array.isArray(e) ? e : "string" == typeof e && e.match(Ce) || []
    }
    function V(e, t, i, s) {
        var o;
        if (Array.isArray(t))
            pe.each(t, (function(t, n) {
                i || Pt.test(e) ? s(e, n) : V(e + "[" + ("object" == typeof n && null != n ? t : "") + "]", n, i, s)
            }
            ));
        else if (i || "object" !== n(t))
            s(e, t);
        else
            for (o in t)
                V(e + "[" + o + "]", t[o], i, s)
    }
    function K(e) {
        return function(t, i) {
            "string" != typeof t && (i = t,
            t = "*");
            var n, s = 0, o = t.toLowerCase().match(Ce) || [];
            if (ue(i))
                for (; n = o[s++]; )
                    "+" === n[0] ? (n = n.slice(1) || "*",
                    (e[n] = e[n] || []).unshift(i)) : (e[n] = e[n] || []).push(i)
        }
    }
    function Q(e, t, i, n) {
        function s(r) {
            var l;
            return o[r] = !0,
            pe.each(e[r] || [], (function(e, r) {
                var u = r(t, i, n);
                return "string" != typeof u || a || o[u] ? a ? !(l = u) : void 0 : (t.dataTypes.unshift(u),
                s(u),
                !1)
            }
            )),
            l
        }
        var o = {}
          , a = e === zt;
        return s(t.dataTypes[0]) || !o["*"] && s("*")
    }
    function X(e, t) {
        var i, n, s = pe.ajaxSettings.flatOptions || {};
        for (i in t)
            void 0 !== t[i] && ((s[i] ? e : n || (n = {}))[i] = t[i]);
        return n && pe.extend(!0, e, n),
        e
    }
    var G = []
      , Z = Object.getPrototypeOf
      , J = G.slice
      , ee = G.flat ? function(e) {
        return G.flat.call(e)
    }
    : function(e) {
        return G.concat.apply([], e)
    }
      , te = G.push
      , ie = G.indexOf
      , ne = {}
      , se = ne.toString
      , oe = ne.hasOwnProperty
      , ae = oe.toString
      , re = ae.call(Object)
      , le = {}
      , ue = function(e) {
        return "function" == typeof e && "number" != typeof e.nodeType
    }
      , de = function(e) {
        return null != e && e === e.window
    }
      , ce = e.document
      , he = {
        type: !0,
        src: !0,
        nonce: !0,
        noModule: !0
    }
      , fe = "3.5.1"
      , pe = function(e, t) {
        return new pe.fn.init(e,t)
    };
    pe.fn = pe.prototype = {
        jquery: fe,
        constructor: pe,
        length: 0,
        toArray: function() {
            return J.call(this)
        },
        get: function(e) {
            return null == e ? J.call(this) : e < 0 ? this[e + this.length] : this[e]
        },
        pushStack: function(e) {
            var t = pe.merge(this.constructor(), e);
            return t.prevObject = this,
            t
        },
        each: function(e) {
            return pe.each(this, e)
        },
        map: function(e) {
            return this.pushStack(pe.map(this, (function(t, i) {
                return e.call(t, i, t)
            }
            )))
        },
        slice: function() {
            return this.pushStack(J.apply(this, arguments))
        },
        first: function() {
            return this.eq(0)
        },
        last: function() {
            return this.eq(-1)
        },
        even: function() {
            return this.pushStack(pe.grep(this, (function(e, t) {
                return (t + 1) % 2
            }
            )))
        },
        odd: function() {
            return this.pushStack(pe.grep(this, (function(e, t) {
                return t % 2
            }
            )))
        },
        eq: function(e) {
            var t = this.length
              , i = +e + (e < 0 ? t : 0);
            return this.pushStack(0 <= i && i < t ? [this[i]] : [])
        },
        end: function() {
            return this.prevObject || this.constructor()
        },
        push: te,
        sort: G.sort,
        splice: G.splice
    },
    pe.extend = pe.fn.extend = function() {
        var e, t, i, n, s, o, a = arguments[0] || {}, r = 1, l = arguments.length, u = !1;
        for ("boolean" == typeof a && (u = a,
        a = arguments[r] || {},
        r++),
        "object" == typeof a || ue(a) || (a = {}),
        r === l && (a = this,
        r--); r < l; r++)
            if (null != (e = arguments[r]))
                for (t in e)
                    n = e[t],
                    "__proto__" !== t && a !== n && (u && n && (pe.isPlainObject(n) || (s = Array.isArray(n))) ? (i = a[t],
                    o = s && !Array.isArray(i) ? [] : s || pe.isPlainObject(i) ? i : {},
                    s = !1,
                    a[t] = pe.extend(u, o, n)) : void 0 !== n && (a[t] = n));
        return a
    }
    ,
    pe.extend({
        expando: "jQuery" + (fe + Math.random()).replace(/\D/g, ""),
        isReady: !0,
        error: function(e) {
            throw new Error(e)
        },
        noop: function() {},
        isPlainObject: function(e) {
            var t, i;
            return !(!e || "[object Object]" !== se.call(e) || (t = Z(e)) && ("function" != typeof (i = oe.call(t, "constructor") && t.constructor) || ae.call(i) !== re))
        },
        isEmptyObject: function(e) {
            var t;
            for (t in e)
                return !1;
            return !0
        },
        globalEval: function(e, t, n) {
            i(e, {
                nonce: t && t.nonce
            }, n)
        },
        each: function(e, t) {
            var i, n = 0;
            if (s(e))
                for (i = e.length; n < i && !1 !== t.call(e[n], n, e[n]); n++)
                    ;
            else
                for (n in e)
                    if (!1 === t.call(e[n], n, e[n]))
                        break;
            return e
        },
        makeArray: function(e, t) {
            var i = t || [];
            return null != e && (s(Object(e)) ? pe.merge(i, "string" == typeof e ? [e] : e) : te.call(i, e)),
            i
        },
        inArray: function(e, t, i) {
            return null == t ? -1 : ie.call(t, e, i)
        },
        merge: function(e, t) {
            for (var i = +t.length, n = 0, s = e.length; n < i; n++)
                e[s++] = t[n];
            return e.length = s,
            e
        },
        grep: function(e, t, i) {
            for (var n = [], s = 0, o = e.length, a = !i; s < o; s++)
                !t(e[s], s) !== a && n.push(e[s]);
            return n
        },
        map: function(e, t, i) {
            var n, o, a = 0, r = [];
            if (s(e))
                for (n = e.length; a < n; a++)
                    null != (o = t(e[a], a, i)) && r.push(o);
            else
                for (a in e)
                    null != (o = t(e[a], a, i)) && r.push(o);
            return ee(r)
        },
        guid: 1,
        support: le
    }),
    "function" == typeof Symbol && (pe.fn[Symbol.iterator] = G[Symbol.iterator]),
    pe.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), (function(e, t) {
        ne["[object " + t + "]"] = t.toLowerCase()
    }
    ));
    var me = function(e) {
        function t(e, t, i, n) {
            var s, o, a, r, l, u, d, h = t && t.ownerDocument, p = t ? t.nodeType : 9;
            if (i = i || [],
            "string" != typeof e || !e || 1 !== p && 9 !== p && 11 !== p)
                return i;
            if (!n && (E(t),
            t = t || A,
            N)) {
                if (11 !== p && (l = ve.exec(e)))
                    if (s = l[1]) {
                        if (9 === p) {
                            if (!(a = t.getElementById(s)))
                                return i;
                            if (a.id === s)
                                return i.push(a),
                                i
                        } else if (h && (a = h.getElementById(s)) && j(t, a) && a.id === s)
                            return i.push(a),
                            i
                    } else {
                        if (l[2])
                            return G.apply(i, t.getElementsByTagName(e)),
                            i;
                        if ((s = l[3]) && _.getElementsByClassName && t.getElementsByClassName)
                            return G.apply(i, t.getElementsByClassName(s)),
                            i
                    }
                if (_.qsa && !U[e + " "] && (!$ || !$.test(e)) && (1 !== p || "object" !== t.nodeName.toLowerCase())) {
                    if (d = e,
                    h = t,
                    1 === p && (ue.test(e) || le.test(e))) {
                        for ((h = be.test(e) && c(t.parentNode) || t) === t && _.scope || ((r = t.getAttribute("id")) ? r = r.replace(we, xe) : t.setAttribute("id", r = H)),
                        o = (u = C(e)).length; o--; )
                            u[o] = (r ? "#" + r : ":scope") + " " + f(u[o]);
                        d = u.join(",")
                    }
                    try {
                        return G.apply(i, h.querySelectorAll(d)),
                        i
                    } catch (t) {
                        U(e, !0)
                    } finally {
                        r === H && t.removeAttribute("id")
                    }
                }
            }
            return T(e.replace(ae, "$1"), t, i, n)
        }
        function i() {
            var e = [];
            return function t(i, n) {
                return e.push(i + " ") > w.cacheLength && delete t[e.shift()],
                t[i + " "] = n
            }
        }
        function n(e) {
            return e[H] = !0,
            e
        }
        function s(e) {
            var t = A.createElement("fieldset");
            try {
                return !!e(t)
            } catch (e) {
                return !1
            } finally {
                t.parentNode && t.parentNode.removeChild(t),
                t = null
            }
        }
        function o(e, t) {
            for (var i = e.split("|"), n = i.length; n--; )
                w.attrHandle[i[n]] = t
        }
        function a(e, t) {
            var i = t && e
              , n = i && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
            if (n)
                return n;
            if (i)
                for (; i = i.nextSibling; )
                    if (i === t)
                        return -1;
            return e ? 1 : -1
        }
        function r(e) {
            return function(t) {
                return "input" === t.nodeName.toLowerCase() && t.type === e
            }
        }
        function l(e) {
            return function(t) {
                var i = t.nodeName.toLowerCase();
                return ("input" === i || "button" === i) && t.type === e
            }
        }
        function u(e) {
            return function(t) {
                return "form"in t ? t.parentNode && !1 === t.disabled ? "label"in t ? "label"in t.parentNode ? t.parentNode.disabled === e : t.disabled === e : t.isDisabled === e || t.isDisabled !== !e && Ce(t) === e : t.disabled === e : "label"in t && t.disabled === e
            }
        }
        function d(e) {
            return n((function(t) {
                return t = +t,
                n((function(i, n) {
                    for (var s, o = e([], i.length, t), a = o.length; a--; )
                        i[s = o[a]] && (i[s] = !(n[s] = i[s]))
                }
                ))
            }
            ))
        }
        function c(e) {
            return e && void 0 !== e.getElementsByTagName && e
        }
        function h() {}
        function f(e) {
            for (var t = 0, i = e.length, n = ""; t < i; t++)
                n += e[t].value;
            return n
        }
        function p(e, t, i) {
            var n = t.dir
              , s = t.next
              , o = s || n
              , a = i && "parentNode" === o
              , r = R++;
            return t.first ? function(t, i, s) {
                for (; t = t[n]; )
                    if (1 === t.nodeType || a)
                        return e(t, i, s);
                return !1
            }
            : function(t, i, l) {
                var u, d, c, h = [z, r];
                if (l) {
                    for (; t = t[n]; )
                        if ((1 === t.nodeType || a) && e(t, i, l))
                            return !0
                } else
                    for (; t = t[n]; )
                        if (1 === t.nodeType || a)
                            if (d = (c = t[H] || (t[H] = {}))[t.uniqueID] || (c[t.uniqueID] = {}),
                            s && s === t.nodeName.toLowerCase())
                                t = t[n] || t;
                            else {
                                if ((u = d[o]) && u[0] === z && u[1] === r)
                                    return h[2] = u[2];
                                if ((d[o] = h)[2] = e(t, i, l))
                                    return !0
                            }
                return !1
            }
        }
        function m(e) {
            return 1 < e.length ? function(t, i, n) {
                for (var s = e.length; s--; )
                    if (!e[s](t, i, n))
                        return !1;
                return !0
            }
            : e[0]
        }
        function g(e, t, i, n, s) {
            for (var o, a = [], r = 0, l = e.length, u = null != t; r < l; r++)
                (o = e[r]) && (i && !i(o, n, s) || (a.push(o),
                u && t.push(r)));
            return a
        }
        function v(e, i, s, o, a, r) {
            return o && !o[H] && (o = v(o)),
            a && !a[H] && (a = v(a, r)),
            n((function(n, r, l, u) {
                var d, c, h, f = [], p = [], m = r.length, v = n || function(e, i, n) {
                    for (var s = 0, o = i.length; s < o; s++)
                        t(e, i[s], n);
                    return n
                }(i || "*", l.nodeType ? [l] : l, []), b = !e || !n && i ? v : g(v, f, e, l, u), y = s ? a || (n ? e : m || o) ? [] : r : b;
                if (s && s(b, y, l, u),
                o)
                    for (d = g(y, p),
                    o(d, [], l, u),
                    c = d.length; c--; )
                        (h = d[c]) && (y[p[c]] = !(b[p[c]] = h));
                if (n) {
                    if (a || e) {
                        if (a) {
                            for (d = [],
                            c = y.length; c--; )
                                (h = y[c]) && d.push(b[c] = h);
                            a(null, y = [], d, u)
                        }
                        for (c = y.length; c--; )
                            (h = y[c]) && -1 < (d = a ? J(n, h) : f[c]) && (n[d] = !(r[d] = h))
                    }
                } else
                    y = g(y === r ? y.splice(m, y.length) : y),
                    a ? a(null, r, y, u) : G.apply(r, y)
            }
            ))
        }
        function b(e) {
            for (var t, i, n, s = e.length, o = w.relative[e[0].type], a = o || w.relative[" "], r = o ? 1 : 0, l = p((function(e) {
                return e === t
            }
            ), a, !0), u = p((function(e) {
                return -1 < J(t, e)
            }
            ), a, !0), d = [function(e, i, n) {
                var s = !o && (n || i !== S) || ((t = i).nodeType ? l(e, i, n) : u(e, i, n));
                return t = null,
                s
            }
            ]; r < s; r++)
                if (i = w.relative[e[r].type])
                    d = [p(m(d), i)];
                else {
                    if ((i = w.filter[e[r].type].apply(null, e[r].matches))[H]) {
                        for (n = ++r; n < s && !w.relative[e[n].type]; n++)
                            ;
                        return v(1 < r && m(d), 1 < r && f(e.slice(0, r - 1).concat({
                            value: " " === e[r - 2].type ? "*" : ""
                        })).replace(ae, "$1"), i, r < n && b(e.slice(r, n)), n < s && b(e = e.slice(n)), n < s && f(e))
                    }
                    d.push(i)
                }
            return m(d)
        }
        var y, _, w, x, k, C, D, T, S, I, P, E, A, M, N, $, O, L, j, H = "sizzle" + 1 * new Date, F = e.document, z = 0, R = 0, W = i(), q = i(), B = i(), U = i(), Y = function(e, t) {
            return e === t && (P = !0),
            0
        }, V = {}.hasOwnProperty, K = [], Q = K.pop, X = K.push, G = K.push, Z = K.slice, J = function(e, t) {
            for (var i = 0, n = e.length; i < n; i++)
                if (e[i] === t)
                    return i;
            return -1
        }, ee = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", te = "[\\x20\\t\\r\\n\\f]", ie = "(?:\\\\[\\da-fA-F]{1,6}" + te + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", ne = "\\[" + te + "*(" + ie + ")(?:" + te + "*([*^$|!~]?=)" + te + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + ie + "))|)" + te + "*\\]", se = ":(" + ie + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + ne + ")*)|.*)\\)|)", oe = new RegExp(te + "+","g"), ae = new RegExp("^" + te + "+|((?:^|[^\\\\])(?:\\\\.)*)" + te + "+$","g"), re = new RegExp("^" + te + "*," + te + "*"), le = new RegExp("^" + te + "*([>+~]|" + te + ")" + te + "*"), ue = new RegExp(te + "|>"), de = new RegExp(se), ce = new RegExp("^" + ie + "$"), he = {
            ID: new RegExp("^#(" + ie + ")"),
            CLASS: new RegExp("^\\.(" + ie + ")"),
            TAG: new RegExp("^(" + ie + "|[*])"),
            ATTR: new RegExp("^" + ne),
            PSEUDO: new RegExp("^" + se),
            CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + te + "*(even|odd|(([+-]|)(\\d*)n|)" + te + "*(?:([+-]|)" + te + "*(\\d+)|))" + te + "*\\)|)","i"),
            bool: new RegExp("^(?:" + ee + ")$","i"),
            needsContext: new RegExp("^" + te + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + te + "*((?:-\\d)?\\d*)" + te + "*\\)|)(?=[^-]|$)","i")
        }, fe = /HTML$/i, pe = /^(?:input|select|textarea|button)$/i, me = /^h\d$/i, ge = /^[^{]+\{\s*\[native \w/, ve = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, be = /[+~]/, ye = new RegExp("\\\\[\\da-fA-F]{1,6}" + te + "?|\\\\([^\\r\\n\\f])","g"), _e = function(e, t) {
            var i = "0x" + e.slice(1) - 65536;
            return t || (i < 0 ? String.fromCharCode(i + 65536) : String.fromCharCode(i >> 10 | 55296, 1023 & i | 56320))
        }, we = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, xe = function(e, t) {
            return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e
        }, ke = function() {
            E()
        }, Ce = p((function(e) {
            return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase()
        }
        ), {
            dir: "parentNode",
            next: "legend"
        });
        try {
            G.apply(K = Z.call(F.childNodes), F.childNodes),
            K[F.childNodes.length].nodeType
        } catch (y) {
            G = {
                apply: K.length ? function(e, t) {
                    X.apply(e, Z.call(t))
                }
                : function(e, t) {
                    for (var i = e.length, n = 0; e[i++] = t[n++]; )
                        ;
                    e.length = i - 1
                }
            }
        }
        for (y in _ = t.support = {},
        k = t.isXML = function(e) {
            var t = e.namespaceURI
              , i = (e.ownerDocument || e).documentElement;
            return !fe.test(t || i && i.nodeName || "HTML")
        }
        ,
        E = t.setDocument = function(e) {
            var t, i, n = e ? e.ownerDocument || e : F;
            return n != A && 9 === n.nodeType && n.documentElement && (M = (A = n).documentElement,
            N = !k(A),
            F != A && (i = A.defaultView) && i.top !== i && (i.addEventListener ? i.addEventListener("unload", ke, !1) : i.attachEvent && i.attachEvent("onunload", ke)),
            _.scope = s((function(e) {
                return M.appendChild(e).appendChild(A.createElement("div")),
                void 0 !== e.querySelectorAll && !e.querySelectorAll(":scope fieldset div").length
            }
            )),
            _.attributes = s((function(e) {
                return e.className = "i",
                !e.getAttribute("className")
            }
            )),
            _.getElementsByTagName = s((function(e) {
                return e.appendChild(A.createComment("")),
                !e.getElementsByTagName("*").length
            }
            )),
            _.getElementsByClassName = ge.test(A.getElementsByClassName),
            _.getById = s((function(e) {
                return M.appendChild(e).id = H,
                !A.getElementsByName || !A.getElementsByName(H).length
            }
            )),
            _.getById ? (w.filter.ID = function(e) {
                var t = e.replace(ye, _e);
                return function(e) {
                    return e.getAttribute("id") === t
                }
            }
            ,
            w.find.ID = function(e, t) {
                if (void 0 !== t.getElementById && N) {
                    var i = t.getElementById(e);
                    return i ? [i] : []
                }
            }
            ) : (w.filter.ID = function(e) {
                var t = e.replace(ye, _e);
                return function(e) {
                    var i = void 0 !== e.getAttributeNode && e.getAttributeNode("id");
                    return i && i.value === t
                }
            }
            ,
            w.find.ID = function(e, t) {
                if (void 0 !== t.getElementById && N) {
                    var i, n, s, o = t.getElementById(e);
                    if (o) {
                        if ((i = o.getAttributeNode("id")) && i.value === e)
                            return [o];
                        for (s = t.getElementsByName(e),
                        n = 0; o = s[n++]; )
                            if ((i = o.getAttributeNode("id")) && i.value === e)
                                return [o]
                    }
                    return []
                }
            }
            ),
            w.find.TAG = _.getElementsByTagName ? function(e, t) {
                return void 0 !== t.getElementsByTagName ? t.getElementsByTagName(e) : _.qsa ? t.querySelectorAll(e) : void 0
            }
            : function(e, t) {
                var i, n = [], s = 0, o = t.getElementsByTagName(e);
                if ("*" === e) {
                    for (; i = o[s++]; )
                        1 === i.nodeType && n.push(i);
                    return n
                }
                return o
            }
            ,
            w.find.CLASS = _.getElementsByClassName && function(e, t) {
                if (void 0 !== t.getElementsByClassName && N)
                    return t.getElementsByClassName(e)
            }
            ,
            O = [],
            $ = [],
            (_.qsa = ge.test(A.querySelectorAll)) && (s((function(e) {
                var t;
                M.appendChild(e).innerHTML = "<a id='" + H + "'></a><select id='" + H + "-\r\\' msallowcapture=''><option selected=''></option></select>",
                e.querySelectorAll("[msallowcapture^='']").length && $.push("[*^$]=" + te + "*(?:''|\"\")"),
                e.querySelectorAll("[selected]").length || $.push("\\[" + te + "*(?:value|" + ee + ")"),
                e.querySelectorAll("[id~=" + H + "-]").length || $.push("~="),
                (t = A.createElement("input")).setAttribute("name", ""),
                e.appendChild(t),
                e.querySelectorAll("[name='']").length || $.push("\\[" + te + "*name" + te + "*=" + te + "*(?:''|\"\")"),
                e.querySelectorAll(":checked").length || $.push(":checked"),
                e.querySelectorAll("a#" + H + "+*").length || $.push(".#.+[+~]"),
                e.querySelectorAll("\\\f"),
                $.push("[\\r\\n\\f]")
            }
            )),
            s((function(e) {
                e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
                var t = A.createElement("input");
                t.setAttribute("type", "hidden"),
                e.appendChild(t).setAttribute("name", "D"),
                e.querySelectorAll("[name=d]").length && $.push("name" + te + "*[*^$|!~]?="),
                2 !== e.querySelectorAll(":enabled").length && $.push(":enabled", ":disabled"),
                M.appendChild(e).disabled = !0,
                2 !== e.querySelectorAll(":disabled").length && $.push(":enabled", ":disabled"),
                e.querySelectorAll("*,:x"),
                $.push(",.*:")
            }
            ))),
            (_.matchesSelector = ge.test(L = M.matches || M.webkitMatchesSelector || M.mozMatchesSelector || M.oMatchesSelector || M.msMatchesSelector)) && s((function(e) {
                _.disconnectedMatch = L.call(e, "*"),
                L.call(e, "[s!='']:x"),
                O.push("!=", se)
            }
            )),
            $ = $.length && new RegExp($.join("|")),
            O = O.length && new RegExp(O.join("|")),
            t = ge.test(M.compareDocumentPosition),
            j = t || ge.test(M.contains) ? function(e, t) {
                var i = 9 === e.nodeType ? e.documentElement : e
                  , n = t && t.parentNode;
                return e === n || !(!n || 1 !== n.nodeType || !(i.contains ? i.contains(n) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(n)))
            }
            : function(e, t) {
                if (t)
                    for (; t = t.parentNode; )
                        if (t === e)
                            return !0;
                return !1
            }
            ,
            Y = t ? function(e, t) {
                if (e === t)
                    return P = !0,
                    0;
                var i = !e.compareDocumentPosition - !t.compareDocumentPosition;
                return i || (1 & (i = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !_.sortDetached && t.compareDocumentPosition(e) === i ? e == A || e.ownerDocument == F && j(F, e) ? -1 : t == A || t.ownerDocument == F && j(F, t) ? 1 : I ? J(I, e) - J(I, t) : 0 : 4 & i ? -1 : 1)
            }
            : function(e, t) {
                if (e === t)
                    return P = !0,
                    0;
                var i, n = 0, s = e.parentNode, o = t.parentNode, r = [e], l = [t];
                if (!s || !o)
                    return e == A ? -1 : t == A ? 1 : s ? -1 : o ? 1 : I ? J(I, e) - J(I, t) : 0;
                if (s === o)
                    return a(e, t);
                for (i = e; i = i.parentNode; )
                    r.unshift(i);
                for (i = t; i = i.parentNode; )
                    l.unshift(i);
                for (; r[n] === l[n]; )
                    n++;
                return n ? a(r[n], l[n]) : r[n] == F ? -1 : l[n] == F ? 1 : 0
            }
            ),
            A
        }
        ,
        t.matches = function(e, i) {
            return t(e, null, null, i)
        }
        ,
        t.matchesSelector = function(e, i) {
            if (E(e),
            _.matchesSelector && N && !U[i + " "] && (!O || !O.test(i)) && (!$ || !$.test(i)))
                try {
                    var n = L.call(e, i);
                    if (n || _.disconnectedMatch || e.document && 11 !== e.document.nodeType)
                        return n
                } catch (e) {
                    U(i, !0)
                }
            return 0 < t(i, A, null, [e]).length
        }
        ,
        t.contains = function(e, t) {
            return (e.ownerDocument || e) != A && E(e),
            j(e, t)
        }
        ,
        t.attr = function(e, t) {
            (e.ownerDocument || e) != A && E(e);
            var i = w.attrHandle[t.toLowerCase()]
              , n = i && V.call(w.attrHandle, t.toLowerCase()) ? i(e, t, !N) : void 0;
            return void 0 !== n ? n : _.attributes || !N ? e.getAttribute(t) : (n = e.getAttributeNode(t)) && n.specified ? n.value : null
        }
        ,
        t.escape = function(e) {
            return (e + "").replace(we, xe)
        }
        ,
        t.error = function(e) {
            throw new Error("Syntax error, unrecognized expression: " + e)
        }
        ,
        t.uniqueSort = function(e) {
            var t, i = [], n = 0, s = 0;
            if (P = !_.detectDuplicates,
            I = !_.sortStable && e.slice(0),
            e.sort(Y),
            P) {
                for (; t = e[s++]; )
                    t === e[s] && (n = i.push(s));
                for (; n--; )
                    e.splice(i[n], 1)
            }
            return I = null,
            e
        }
        ,
        x = t.getText = function(e) {
            var t, i = "", n = 0, s = e.nodeType;
            if (s) {
                if (1 === s || 9 === s || 11 === s) {
                    if ("string" == typeof e.textContent)
                        return e.textContent;
                    for (e = e.firstChild; e; e = e.nextSibling)
                        i += x(e)
                } else if (3 === s || 4 === s)
                    return e.nodeValue
            } else
                for (; t = e[n++]; )
                    i += x(t);
            return i
        }
        ,
        (w = t.selectors = {
            cacheLength: 50,
            createPseudo: n,
            match: he,
            attrHandle: {},
            find: {},
            relative: {
                ">": {
                    dir: "parentNode",
                    first: !0
                },
                " ": {
                    dir: "parentNode"
                },
                "+": {
                    dir: "previousSibling",
                    first: !0
                },
                "~": {
                    dir: "previousSibling"
                }
            },
            preFilter: {
                ATTR: function(e) {
                    return e[1] = e[1].replace(ye, _e),
                    e[3] = (e[3] || e[4] || e[5] || "").replace(ye, _e),
                    "~=" === e[2] && (e[3] = " " + e[3] + " "),
                    e.slice(0, 4)
                },
                CHILD: function(e) {
                    return e[1] = e[1].toLowerCase(),
                    "nth" === e[1].slice(0, 3) ? (e[3] || t.error(e[0]),
                    e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])),
                    e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && t.error(e[0]),
                    e
                },
                PSEUDO: function(e) {
                    var t, i = !e[6] && e[2];
                    return he.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : i && de.test(i) && (t = C(i, !0)) && (t = i.indexOf(")", i.length - t) - i.length) && (e[0] = e[0].slice(0, t),
                    e[2] = i.slice(0, t)),
                    e.slice(0, 3))
                }
            },
            filter: {
                TAG: function(e) {
                    var t = e.replace(ye, _e).toLowerCase();
                    return "*" === e ? function() {
                        return !0
                    }
                    : function(e) {
                        return e.nodeName && e.nodeName.toLowerCase() === t
                    }
                },
                CLASS: function(e) {
                    var t = W[e + " "];
                    return t || (t = new RegExp("(^|" + te + ")" + e + "(" + te + "|$)")) && W(e, (function(e) {
                        return t.test("string" == typeof e.className && e.className || void 0 !== e.getAttribute && e.getAttribute("class") || "")
                    }
                    ))
                },
                ATTR: function(e, i, n) {
                    return function(s) {
                        var o = t.attr(s, e);
                        return null == o ? "!=" === i : !i || (o += "",
                        "=" === i ? o === n : "!=" === i ? o !== n : "^=" === i ? n && 0 === o.indexOf(n) : "*=" === i ? n && -1 < o.indexOf(n) : "$=" === i ? n && o.slice(-n.length) === n : "~=" === i ? -1 < (" " + o.replace(oe, " ") + " ").indexOf(n) : "|=" === i && (o === n || o.slice(0, n.length + 1) === n + "-"))
                    }
                },
                CHILD: function(e, t, i, n, s) {
                    var o = "nth" !== e.slice(0, 3)
                      , a = "last" !== e.slice(-4)
                      , r = "of-type" === t;
                    return 1 === n && 0 === s ? function(e) {
                        return !!e.parentNode
                    }
                    : function(t, i, l) {
                        var u, d, c, h, f, p, m = o !== a ? "nextSibling" : "previousSibling", g = t.parentNode, v = r && t.nodeName.toLowerCase(), b = !l && !r, y = !1;
                        if (g) {
                            if (o) {
                                for (; m; ) {
                                    for (h = t; h = h[m]; )
                                        if (r ? h.nodeName.toLowerCase() === v : 1 === h.nodeType)
                                            return !1;
                                    p = m = "only" === e && !p && "nextSibling"
                                }
                                return !0
                            }
                            if (p = [a ? g.firstChild : g.lastChild],
                            a && b) {
                                for (y = (f = (u = (d = (c = (h = g)[H] || (h[H] = {}))[h.uniqueID] || (c[h.uniqueID] = {}))[e] || [])[0] === z && u[1]) && u[2],
                                h = f && g.childNodes[f]; h = ++f && h && h[m] || (y = f = 0) || p.pop(); )
                                    if (1 === h.nodeType && ++y && h === t) {
                                        d[e] = [z, f, y];
                                        break
                                    }
                            } else if (b && (y = f = (u = (d = (c = (h = t)[H] || (h[H] = {}))[h.uniqueID] || (c[h.uniqueID] = {}))[e] || [])[0] === z && u[1]),
                            !1 === y)
                                for (; (h = ++f && h && h[m] || (y = f = 0) || p.pop()) && ((r ? h.nodeName.toLowerCase() !== v : 1 !== h.nodeType) || !++y || (b && ((d = (c = h[H] || (h[H] = {}))[h.uniqueID] || (c[h.uniqueID] = {}))[e] = [z, y]),
                                h !== t)); )
                                    ;
                            return (y -= s) === n || y % n == 0 && 0 <= y / n
                        }
                    }
                },
                PSEUDO: function(e, i) {
                    var s, o = w.pseudos[e] || w.setFilters[e.toLowerCase()] || t.error("unsupported pseudo: " + e);
                    return o[H] ? o(i) : 1 < o.length ? (s = [e, e, "", i],
                    w.setFilters.hasOwnProperty(e.toLowerCase()) ? n((function(e, t) {
                        for (var n, s = o(e, i), a = s.length; a--; )
                            e[n = J(e, s[a])] = !(t[n] = s[a])
                    }
                    )) : function(e) {
                        return o(e, 0, s)
                    }
                    ) : o
                }
            },
            pseudos: {
                not: n((function(e) {
                    var t = []
                      , i = []
                      , s = D(e.replace(ae, "$1"));
                    return s[H] ? n((function(e, t, i, n) {
                        for (var o, a = s(e, null, n, []), r = e.length; r--; )
                            (o = a[r]) && (e[r] = !(t[r] = o))
                    }
                    )) : function(e, n, o) {
                        return t[0] = e,
                        s(t, null, o, i),
                        t[0] = null,
                        !i.pop()
                    }
                }
                )),
                has: n((function(e) {
                    return function(i) {
                        return 0 < t(e, i).length
                    }
                }
                )),
                contains: n((function(e) {
                    return e = e.replace(ye, _e),
                    function(t) {
                        return -1 < (t.textContent || x(t)).indexOf(e)
                    }
                }
                )),
                lang: n((function(e) {
                    return ce.test(e || "") || t.error("unsupported lang: " + e),
                    e = e.replace(ye, _e).toLowerCase(),
                    function(t) {
                        var i;
                        do {
                            if (i = N ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang"))
                                return (i = i.toLowerCase()) === e || 0 === i.indexOf(e + "-")
                        } while ((t = t.parentNode) && 1 === t.nodeType);
                        return !1
                    }
                }
                )),
                target: function(t) {
                    var i = e.location && e.location.hash;
                    return i && i.slice(1) === t.id
                },
                root: function(e) {
                    return e === M
                },
                focus: function(e) {
                    return e === A.activeElement && (!A.hasFocus || A.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
                },
                enabled: u(!1),
                disabled: u(!0),
                checked: function(e) {
                    var t = e.nodeName.toLowerCase();
                    return "input" === t && !!e.checked || "option" === t && !!e.selected
                },
                selected: function(e) {
                    return e.parentNode && e.parentNode.selectedIndex,
                    !0 === e.selected
                },
                empty: function(e) {
                    for (e = e.firstChild; e; e = e.nextSibling)
                        if (e.nodeType < 6)
                            return !1;
                    return !0
                },
                parent: function(e) {
                    return !w.pseudos.empty(e)
                },
                header: function(e) {
                    return me.test(e.nodeName)
                },
                input: function(e) {
                    return pe.test(e.nodeName)
                },
                button: function(e) {
                    var t = e.nodeName.toLowerCase();
                    return "input" === t && "button" === e.type || "button" === t
                },
                text: function(e) {
                    var t;
                    return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
                },
                first: d((function() {
                    return [0]
                }
                )),
                last: d((function(e, t) {
                    return [t - 1]
                }
                )),
                eq: d((function(e, t, i) {
                    return [i < 0 ? i + t : i]
                }
                )),
                even: d((function(e, t) {
                    for (var i = 0; i < t; i += 2)
                        e.push(i);
                    return e
                }
                )),
                odd: d((function(e, t) {
                    for (var i = 1; i < t; i += 2)
                        e.push(i);
                    return e
                }
                )),
                lt: d((function(e, t, i) {
                    for (var n = i < 0 ? i + t : t < i ? t : i; 0 <= --n; )
                        e.push(n);
                    return e
                }
                )),
                gt: d((function(e, t, i) {
                    for (var n = i < 0 ? i + t : i; ++n < t; )
                        e.push(n);
                    return e
                }
                ))
            }
        }).pseudos.nth = w.pseudos.eq,
        {
            radio: !0,
            checkbox: !0,
            file: !0,
            password: !0,
            image: !0
        })
            w.pseudos[y] = r(y);
        for (y in {
            submit: !0,
            reset: !0
        })
            w.pseudos[y] = l(y);
        return h.prototype = w.filters = w.pseudos,
        w.setFilters = new h,
        C = t.tokenize = function(e, i) {
            var n, s, o, a, r, l, u, d = q[e + " "];
            if (d)
                return i ? 0 : d.slice(0);
            for (r = e,
            l = [],
            u = w.preFilter; r; ) {
                for (a in n && !(s = re.exec(r)) || (s && (r = r.slice(s[0].length) || r),
                l.push(o = [])),
                n = !1,
                (s = le.exec(r)) && (n = s.shift(),
                o.push({
                    value: n,
                    type: s[0].replace(ae, " ")
                }),
                r = r.slice(n.length)),
                w.filter)
                    !(s = he[a].exec(r)) || u[a] && !(s = u[a](s)) || (n = s.shift(),
                    o.push({
                        value: n,
                        type: a,
                        matches: s
                    }),
                    r = r.slice(n.length));
                if (!n)
                    break
            }
            return i ? r.length : r ? t.error(e) : q(e, l).slice(0)
        }
        ,
        D = t.compile = function(e, i) {
            var s, o, a, r, l, u, d = [], c = [], h = B[e + " "];
            if (!h) {
                for (i || (i = C(e)),
                s = i.length; s--; )
                    (h = b(i[s]))[H] ? d.push(h) : c.push(h);
                (h = B(e, (o = c,
                r = 0 < (a = d).length,
                l = 0 < o.length,
                u = function(e, i, n, s, u) {
                    var d, c, h, f = 0, p = "0", m = e && [], v = [], b = S, y = e || l && w.find.TAG("*", u), _ = z += null == b ? 1 : Math.random() || .1, x = y.length;
                    for (u && (S = i == A || i || u); p !== x && null != (d = y[p]); p++) {
                        if (l && d) {
                            for (c = 0,
                            i || d.ownerDocument == A || (E(d),
                            n = !N); h = o[c++]; )
                                if (h(d, i || A, n)) {
                                    s.push(d);
                                    break
                                }
                            u && (z = _)
                        }
                        r && ((d = !h && d) && f--,
                        e && m.push(d))
                    }
                    if (f += p,
                    r && p !== f) {
                        for (c = 0; h = a[c++]; )
                            h(m, v, i, n);
                        if (e) {
                            if (0 < f)
                                for (; p--; )
                                    m[p] || v[p] || (v[p] = Q.call(s));
                            v = g(v)
                        }
                        G.apply(s, v),
                        u && !e && 0 < v.length && 1 < f + a.length && t.uniqueSort(s)
                    }
                    return u && (z = _,
                    S = b),
                    m
                }
                ,
                r ? n(u) : u))).selector = e
            }
            return h
        }
        ,
        T = t.select = function(e, t, i, n) {
            var s, o, a, r, l, u = "function" == typeof e && e, d = !n && C(e = u.selector || e);
            if (i = i || [],
            1 === d.length) {
                if (2 < (o = d[0] = d[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && N && w.relative[o[1].type]) {
                    if (!(t = (w.find.ID(a.matches[0].replace(ye, _e), t) || [])[0]))
                        return i;
                    u && (t = t.parentNode),
                    e = e.slice(o.shift().value.length)
                }
                for (s = he.needsContext.test(e) ? 0 : o.length; s-- && (a = o[s],
                !w.relative[r = a.type]); )
                    if ((l = w.find[r]) && (n = l(a.matches[0].replace(ye, _e), be.test(o[0].type) && c(t.parentNode) || t))) {
                        if (o.splice(s, 1),
                        !(e = n.length && f(o)))
                            return G.apply(i, n),
                            i;
                        break
                    }
            }
            return (u || D(e, d))(n, t, !N, i, !t || be.test(e) && c(t.parentNode) || t),
            i
        }
        ,
        _.sortStable = H.split("").sort(Y).join("") === H,
        _.detectDuplicates = !!P,
        E(),
        _.sortDetached = s((function(e) {
            return 1 & e.compareDocumentPosition(A.createElement("fieldset"))
        }
        )),
        s((function(e) {
            return e.innerHTML = "<a href='#'></a>",
            "#" === e.firstChild.getAttribute("href")
        }
        )) || o("type|href|height|width", (function(e, t, i) {
            if (!i)
                return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
        }
        )),
        _.attributes && s((function(e) {
            return e.innerHTML = "<input/>",
            e.firstChild.setAttribute("value", ""),
            "" === e.firstChild.getAttribute("value")
        }
        )) || o("value", (function(e, t, i) {
            if (!i && "input" === e.nodeName.toLowerCase())
                return e.defaultValue
        }
        )),
        s((function(e) {
            return null == e.getAttribute("disabled")
        }
        )) || o(ee, (function(e, t, i) {
            var n;
            if (!i)
                return !0 === e[t] ? t.toLowerCase() : (n = e.getAttributeNode(t)) && n.specified ? n.value : null
        }
        )),
        t
    }(e);
    pe.find = me,
    pe.expr = me.selectors,
    pe.expr[":"] = pe.expr.pseudos,
    pe.uniqueSort = pe.unique = me.uniqueSort,
    pe.text = me.getText,
    pe.isXMLDoc = me.isXML,
    pe.contains = me.contains,
    pe.escapeSelector = me.escape;
    var ge = function(e, t, i) {
        for (var n = [], s = void 0 !== i; (e = e[t]) && 9 !== e.nodeType; )
            if (1 === e.nodeType) {
                if (s && pe(e).is(i))
                    break;
                n.push(e)
            }
        return n
    }
      , ve = function(e, t) {
        for (var i = []; e; e = e.nextSibling)
            1 === e.nodeType && e !== t && i.push(e);
        return i
    }
      , be = pe.expr.match.needsContext
      , ye = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
    pe.filter = function(e, t, i) {
        var n = t[0];
        return i && (e = ":not(" + e + ")"),
        1 === t.length && 1 === n.nodeType ? pe.find.matchesSelector(n, e) ? [n] : [] : pe.find.matches(e, pe.grep(t, (function(e) {
            return 1 === e.nodeType
        }
        )))
    }
    ,
    pe.fn.extend({
        find: function(e) {
            var t, i, n = this.length, s = this;
            if ("string" != typeof e)
                return this.pushStack(pe(e).filter((function() {
                    for (t = 0; t < n; t++)
                        if (pe.contains(s[t], this))
                            return !0
                }
                )));
            for (i = this.pushStack([]),
            t = 0; t < n; t++)
                pe.find(e, s[t], i);
            return 1 < n ? pe.uniqueSort(i) : i
        },
        filter: function(e) {
            return this.pushStack(a(this, e || [], !1))
        },
        not: function(e) {
            return this.pushStack(a(this, e || [], !0))
        },
        is: function(e) {
            return !!a(this, "string" == typeof e && be.test(e) ? pe(e) : e || [], !1).length
        }
    });
    var _e, we = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
    (pe.fn.init = function(e, t, i) {
        var n, s;
        if (!e)
            return this;
        if (i = i || _e,
        "string" == typeof e) {
            if (!(n = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : we.exec(e)) || !n[1] && t)
                return !t || t.jquery ? (t || i).find(e) : this.constructor(t).find(e);
            if (n[1]) {
                if (t = t instanceof pe ? t[0] : t,
                pe.merge(this, pe.parseHTML(n[1], t && t.nodeType ? t.ownerDocument || t : ce, !0)),
                ye.test(n[1]) && pe.isPlainObject(t))
                    for (n in t)
                        ue(this[n]) ? this[n](t[n]) : this.attr(n, t[n]);
                return this
            }
            return (s = ce.getElementById(n[2])) && (this[0] = s,
            this.length = 1),
            this
        }
        return e.nodeType ? (this[0] = e,
        this.length = 1,
        this) : ue(e) ? void 0 !== i.ready ? i.ready(e) : e(pe) : pe.makeArray(e, this)
    }
    ).prototype = pe.fn,
    _e = pe(ce);
    var xe = /^(?:parents|prev(?:Until|All))/
      , ke = {
        children: !0,
        contents: !0,
        next: !0,
        prev: !0
    };
    pe.fn.extend({
        has: function(e) {
            var t = pe(e, this)
              , i = t.length;
            return this.filter((function() {
                for (var e = 0; e < i; e++)
                    if (pe.contains(this, t[e]))
                        return !0
            }
            ))
        },
        closest: function(e, t) {
            var i, n = 0, s = this.length, o = [], a = "string" != typeof e && pe(e);
            if (!be.test(e))
                for (; n < s; n++)
                    for (i = this[n]; i && i !== t; i = i.parentNode)
                        if (i.nodeType < 11 && (a ? -1 < a.index(i) : 1 === i.nodeType && pe.find.matchesSelector(i, e))) {
                            o.push(i);
                            break
                        }
            return this.pushStack(1 < o.length ? pe.uniqueSort(o) : o)
        },
        index: function(e) {
            return e ? "string" == typeof e ? ie.call(pe(e), this[0]) : ie.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
        },
        add: function(e, t) {
            return this.pushStack(pe.uniqueSort(pe.merge(this.get(), pe(e, t))))
        },
        addBack: function(e) {
            return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
        }
    }),
    pe.each({
        parent: function(e) {
            var t = e.parentNode;
            return t && 11 !== t.nodeType ? t : null
        },
        parents: function(e) {
            return ge(e, "parentNode")
        },
        parentsUntil: function(e, t, i) {
            return ge(e, "parentNode", i)
        },
        next: function(e) {
            return r(e, "nextSibling")
        },
        prev: function(e) {
            return r(e, "previousSibling")
        },
        nextAll: function(e) {
            return ge(e, "nextSibling")
        },
        prevAll: function(e) {
            return ge(e, "previousSibling")
        },
        nextUntil: function(e, t, i) {
            return ge(e, "nextSibling", i)
        },
        prevUntil: function(e, t, i) {
            return ge(e, "previousSibling", i)
        },
        siblings: function(e) {
            return ve((e.parentNode || {}).firstChild, e)
        },
        children: function(e) {
            return ve(e.firstChild)
        },
        contents: function(e) {
            return null != e.contentDocument && Z(e.contentDocument) ? e.contentDocument : (o(e, "template") && (e = e.content || e),
            pe.merge([], e.childNodes))
        }
    }, (function(e, t) {
        pe.fn[e] = function(i, n) {
            var s = pe.map(this, t, i);
            return "Until" !== e.slice(-5) && (n = i),
            n && "string" == typeof n && (s = pe.filter(n, s)),
            1 < this.length && (ke[e] || pe.uniqueSort(s),
            xe.test(e) && s.reverse()),
            this.pushStack(s)
        }
    }
    ));
    var Ce = /[^\x20\t\r\n\f]+/g;
    pe.Callbacks = function(e) {
        var t, i;
        e = "string" == typeof e ? (t = e,
        i = {},
        pe.each(t.match(Ce) || [], (function(e, t) {
            i[t] = !0
        }
        )),
        i) : pe.extend({}, e);
        var s, o, a, r, l = [], u = [], d = -1, c = function() {
            for (r = r || e.once,
            a = s = !0; u.length; d = -1)
                for (o = u.shift(); ++d < l.length; )
                    !1 === l[d].apply(o[0], o[1]) && e.stopOnFalse && (d = l.length,
                    o = !1);
            e.memory || (o = !1),
            s = !1,
            r && (l = o ? [] : "")
        }, h = {
            add: function() {
                return l && (o && !s && (d = l.length - 1,
                u.push(o)),
                function t(i) {
                    pe.each(i, (function(i, s) {
                        ue(s) ? e.unique && h.has(s) || l.push(s) : s && s.length && "string" !== n(s) && t(s)
                    }
                    ))
                }(arguments),
                o && !s && c()),
                this
            },
            remove: function() {
                return pe.each(arguments, (function(e, t) {
                    for (var i; -1 < (i = pe.inArray(t, l, i)); )
                        l.splice(i, 1),
                        i <= d && d--
                }
                )),
                this
            },
            has: function(e) {
                return e ? -1 < pe.inArray(e, l) : 0 < l.length
            },
            empty: function() {
                return l && (l = []),
                this
            },
            disable: function() {
                return r = u = [],
                l = o = "",
                this
            },
            disabled: function() {
                return !l
            },
            lock: function() {
                return r = u = [],
                o || s || (l = o = ""),
                this
            },
            locked: function() {
                return !!r
            },
            fireWith: function(e, t) {
                return r || (t = [e, (t = t || []).slice ? t.slice() : t],
                u.push(t),
                s || c()),
                this
            },
            fire: function() {
                return h.fireWith(this, arguments),
                this
            },
            fired: function() {
                return !!a
            }
        };
        return h
    }
    ,
    pe.extend({
        Deferred: function(t) {
            var i = [["notify", "progress", pe.Callbacks("memory"), pe.Callbacks("memory"), 2], ["resolve", "done", pe.Callbacks("once memory"), pe.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", pe.Callbacks("once memory"), pe.Callbacks("once memory"), 1, "rejected"]]
              , n = "pending"
              , s = {
                state: function() {
                    return n
                },
                always: function() {
                    return o.done(arguments).fail(arguments),
                    this
                },
                catch: function(e) {
                    return s.then(null, e)
                },
                pipe: function() {
                    var e = arguments;
                    return pe.Deferred((function(t) {
                        pe.each(i, (function(i, n) {
                            var s = ue(e[n[4]]) && e[n[4]];
                            o[n[1]]((function() {
                                var e = s && s.apply(this, arguments);
                                e && ue(e.promise) ? e.promise().progress(t.notify).done(t.resolve).fail(t.reject) : t[n[0] + "With"](this, s ? [e] : arguments)
                            }
                            ))
                        }
                        )),
                        e = null
                    }
                    )).promise()
                },
                then: function(t, n, s) {
                    function o(t, i, n, s) {
                        return function() {
                            var r = this
                              , d = arguments
                              , c = function() {
                                var e, c;
                                if (!(t < a)) {
                                    if ((e = n.apply(r, d)) === i.promise())
                                        throw new TypeError("Thenable self-resolution");
                                    c = e && ("object" == typeof e || "function" == typeof e) && e.then,
                                    ue(c) ? s ? c.call(e, o(a, i, l, s), o(a, i, u, s)) : (a++,
                                    c.call(e, o(a, i, l, s), o(a, i, u, s), o(a, i, l, i.notifyWith))) : (n !== l && (r = void 0,
                                    d = [e]),
                                    (s || i.resolveWith)(r, d))
                                }
                            }
                              , h = s ? c : function() {
                                try {
                                    c()
                                } catch (e) {
                                    pe.Deferred.exceptionHook && pe.Deferred.exceptionHook(e, h.stackTrace),
                                    a <= t + 1 && (n !== u && (r = void 0,
                                    d = [e]),
                                    i.rejectWith(r, d))
                                }
                            }
                            ;
                            t ? h() : (pe.Deferred.getStackHook && (h.stackTrace = pe.Deferred.getStackHook()),
                            e.setTimeout(h))
                        }
                    }
                    var a = 0;
                    return pe.Deferred((function(e) {
                        i[0][3].add(o(0, e, ue(s) ? s : l, e.notifyWith)),
                        i[1][3].add(o(0, e, ue(t) ? t : l)),
                        i[2][3].add(o(0, e, ue(n) ? n : u))
                    }
                    )).promise()
                },
                promise: function(e) {
                    return null != e ? pe.extend(e, s) : s
                }
            }
              , o = {};
            return pe.each(i, (function(e, t) {
                var a = t[2]
                  , r = t[5];
                s[t[1]] = a.add,
                r && a.add((function() {
                    n = r
                }
                ), i[3 - e][2].disable, i[3 - e][3].disable, i[0][2].lock, i[0][3].lock),
                a.add(t[3].fire),
                o[t[0]] = function() {
                    return o[t[0] + "With"](this === o ? void 0 : this, arguments),
                    this
                }
                ,
                o[t[0] + "With"] = a.fireWith
            }
            )),
            s.promise(o),
            t && t.call(o, o),
            o
        },
        when: function(e) {
            var t = arguments.length
              , i = t
              , n = Array(i)
              , s = J.call(arguments)
              , o = pe.Deferred()
              , a = function(e) {
                return function(i) {
                    n[e] = this,
                    s[e] = 1 < arguments.length ? J.call(arguments) : i,
                    --t || o.resolveWith(n, s)
                }
            };
            if (t <= 1 && (d(e, o.done(a(i)).resolve, o.reject, !t),
            "pending" === o.state() || ue(s[i] && s[i].then)))
                return o.then();
            for (; i--; )
                d(s[i], a(i), o.reject);
            return o.promise()
        }
    });
    var De = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
    pe.Deferred.exceptionHook = function(t, i) {
        e.console && e.console.warn && t && De.test(t.name) && e.console.warn("jQuery.Deferred exception: " + t.message, t.stack, i)
    }
    ,
    pe.readyException = function(t) {
        e.setTimeout((function() {
            throw t
        }
        ))
    }
    ;
    var Te = pe.Deferred();
    pe.fn.ready = function(e) {
        return Te.then(e).catch((function(e) {
            pe.readyException(e)
        }
        )),
        this
    }
    ,
    pe.extend({
        isReady: !1,
        readyWait: 1,
        ready: function(e) {
            (!0 === e ? --pe.readyWait : pe.isReady) || (pe.isReady = !0) !== e && 0 < --pe.readyWait || Te.resolveWith(ce, [pe])
        }
    }),
    pe.ready.then = Te.then,
    "complete" === ce.readyState || "loading" !== ce.readyState && !ce.documentElement.doScroll ? e.setTimeout(pe.ready) : (ce.addEventListener("DOMContentLoaded", c),
    e.addEventListener("load", c));
    var Se = function(e, t, i, s, o, a, r) {
        var l = 0
          , u = e.length
          , d = null == i;
        if ("object" === n(i))
            for (l in o = !0,
            i)
                Se(e, t, l, i[l], !0, a, r);
        else if (void 0 !== s && (o = !0,
        ue(s) || (r = !0),
        d && (r ? (t.call(e, s),
        t = null) : (d = t,
        t = function(e, t, i) {
            return d.call(pe(e), i)
        }
        )),
        t))
            for (; l < u; l++)
                t(e[l], i, r ? s : s.call(e[l], l, t(e[l], i)));
        return o ? e : d ? t.call(e) : u ? t(e[0], i) : a
    }
      , Ie = /^-ms-/
      , Pe = /-([a-z])/g
      , Ee = function(e) {
        return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
    };
    p.uid = 1,
    p.prototype = {
        cache: function(e) {
            var t = e[this.expando];
            return t || (t = {},
            Ee(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
                value: t,
                configurable: !0
            }))),
            t
        },
        set: function(e, t, i) {
            var n, s = this.cache(e);
            if ("string" == typeof t)
                s[f(t)] = i;
            else
                for (n in t)
                    s[f(n)] = t[n];
            return s
        },
        get: function(e, t) {
            return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][f(t)]
        },
        access: function(e, t, i) {
            return void 0 === t || t && "string" == typeof t && void 0 === i ? this.get(e, t) : (this.set(e, t, i),
            void 0 !== i ? i : t)
        },
        remove: function(e, t) {
            var i, n = e[this.expando];
            if (void 0 !== n) {
                if (void 0 !== t) {
                    i = (t = Array.isArray(t) ? t.map(f) : (t = f(t))in n ? [t] : t.match(Ce) || []).length;
                    for (; i--; )
                        delete n[t[i]]
                }
                (void 0 === t || pe.isEmptyObject(n)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
            }
        },
        hasData: function(e) {
            var t = e[this.expando];
            return void 0 !== t && !pe.isEmptyObject(t)
        }
    };
    var Ae = new p
      , Me = new p
      , Ne = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/
      , $e = /[A-Z]/g;
    pe.extend({
        hasData: function(e) {
            return Me.hasData(e) || Ae.hasData(e)
        },
        data: function(e, t, i) {
            return Me.access(e, t, i)
        },
        removeData: function(e, t) {
            Me.remove(e, t)
        },
        _data: function(e, t, i) {
            return Ae.access(e, t, i)
        },
        _removeData: function(e, t) {
            Ae.remove(e, t)
        }
    }),
    pe.fn.extend({
        data: function(e, t) {
            var i, n, s, o = this[0], a = o && o.attributes;
            if (void 0 === e) {
                if (this.length && (s = Me.get(o),
                1 === o.nodeType && !Ae.get(o, "hasDataAttrs"))) {
                    for (i = a.length; i--; )
                        a[i] && 0 === (n = a[i].name).indexOf("data-") && (n = f(n.slice(5)),
                        m(o, n, s[n]));
                    Ae.set(o, "hasDataAttrs", !0)
                }
                return s
            }
            return "object" == typeof e ? this.each((function() {
                Me.set(this, e)
            }
            )) : Se(this, (function(t) {
                var i;
                if (o && void 0 === t)
                    return void 0 !== (i = Me.get(o, e)) || void 0 !== (i = m(o, e)) ? i : void 0;
                this.each((function() {
                    Me.set(this, e, t)
                }
                ))
            }
            ), null, t, 1 < arguments.length, null, !0)
        },
        removeData: function(e) {
            return this.each((function() {
                Me.remove(this, e)
            }
            ))
        }
    }),
    pe.extend({
        queue: function(e, t, i) {
            var n;
            if (e)
                return t = (t || "fx") + "queue",
                n = Ae.get(e, t),
                i && (!n || Array.isArray(i) ? n = Ae.access(e, t, pe.makeArray(i)) : n.push(i)),
                n || []
        },
        dequeue: function(e, t) {
            t = t || "fx";
            var i = pe.queue(e, t)
              , n = i.length
              , s = i.shift()
              , o = pe._queueHooks(e, t);
            "inprogress" === s && (s = i.shift(),
            n--),
            s && ("fx" === t && i.unshift("inprogress"),
            delete o.stop,
            s.call(e, (function() {
                pe.dequeue(e, t)
            }
            ), o)),
            !n && o && o.empty.fire()
        },
        _queueHooks: function(e, t) {
            var i = t + "queueHooks";
            return Ae.get(e, i) || Ae.access(e, i, {
                empty: pe.Callbacks("once memory").add((function() {
                    Ae.remove(e, [t + "queue", i])
                }
                ))
            })
        }
    }),
    pe.fn.extend({
        queue: function(e, t) {
            var i = 2;
            return "string" != typeof e && (t = e,
            e = "fx",
            i--),
            arguments.length < i ? pe.queue(this[0], e) : void 0 === t ? this : this.each((function() {
                var i = pe.queue(this, e, t);
                pe._queueHooks(this, e),
                "fx" === e && "inprogress" !== i[0] && pe.dequeue(this, e)
            }
            ))
        },
        dequeue: function(e) {
            return this.each((function() {
                pe.dequeue(this, e)
            }
            ))
        },
        clearQueue: function(e) {
            return this.queue(e || "fx", [])
        },
        promise: function(e, t) {
            var i, n = 1, s = pe.Deferred(), o = this, a = this.length, r = function() {
                --n || s.resolveWith(o, [o])
            };
            for ("string" != typeof e && (t = e,
            e = void 0),
            e = e || "fx"; a--; )
                (i = Ae.get(o[a], e + "queueHooks")) && i.empty && (n++,
                i.empty.add(r));
            return r(),
            s.promise(t)
        }
    });
    var Oe = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source
      , Le = new RegExp("^(?:([+-])=|)(" + Oe + ")([a-z%]*)$","i")
      , je = ["Top", "Right", "Bottom", "Left"]
      , He = ce.documentElement
      , Fe = function(e) {
        return pe.contains(e.ownerDocument, e)
    }
      , ze = {
        composed: !0
    };
    He.getRootNode && (Fe = function(e) {
        return pe.contains(e.ownerDocument, e) || e.getRootNode(ze) === e.ownerDocument
    }
    );
    var Re = function(e, t) {
        return "none" === (e = t || e).style.display || "" === e.style.display && Fe(e) && "none" === pe.css(e, "display")
    }
      , We = {};
    pe.fn.extend({
        show: function() {
            return v(this, !0)
        },
        hide: function() {
            return v(this)
        },
        toggle: function(e) {
            return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each((function() {
                Re(this) ? pe(this).show() : pe(this).hide()
            }
            ))
        }
    });
    var qe, Be, Ue = /^(?:checkbox|radio)$/i, Ye = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, Ve = /^$|^module$|\/(?:java|ecma)script/i;
    qe = ce.createDocumentFragment().appendChild(ce.createElement("div")),
    (Be = ce.createElement("input")).setAttribute("type", "radio"),
    Be.setAttribute("checked", "checked"),
    Be.setAttribute("name", "t"),
    qe.appendChild(Be),
    le.checkClone = qe.cloneNode(!0).cloneNode(!0).lastChild.checked,
    qe.innerHTML = "<textarea>x</textarea>",
    le.noCloneChecked = !!qe.cloneNode(!0).lastChild.defaultValue,
    qe.innerHTML = "<option></option>",
    le.option = !!qe.lastChild;
    var Ke = {
        thead: [1, "<table>", "</table>"],
        col: [2, "<table><colgroup>", "</colgroup></table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        _default: [0, "", ""]
    };
    Ke.tbody = Ke.tfoot = Ke.colgroup = Ke.caption = Ke.thead,
    Ke.th = Ke.td,
    le.option || (Ke.optgroup = Ke.option = [1, "<select multiple='multiple'>", "</select>"]);
    var Qe = /<|&#?\w+;/
      , Xe = /^key/
      , Ge = /^(?:mouse|pointer|contextmenu|drag|drop)|click/
      , Ze = /^([^.]*)(?:\.(.+)|)/;
    pe.event = {
        global: {},
        add: function(e, t, i, n, s) {
            var o, a, r, l, u, d, c, h, f, p, m, g = Ae.get(e);
            if (Ee(e))
                for (i.handler && (i = (o = i).handler,
                s = o.selector),
                s && pe.find.matchesSelector(He, s),
                i.guid || (i.guid = pe.guid++),
                (l = g.events) || (l = g.events = Object.create(null)),
                (a = g.handle) || (a = g.handle = function(t) {
                    return void 0 !== pe && pe.event.triggered !== t.type ? pe.event.dispatch.apply(e, arguments) : void 0
                }
                ),
                u = (t = (t || "").match(Ce) || [""]).length; u--; )
                    f = m = (r = Ze.exec(t[u]) || [])[1],
                    p = (r[2] || "").split(".").sort(),
                    f && (c = pe.event.special[f] || {},
                    f = (s ? c.delegateType : c.bindType) || f,
                    c = pe.event.special[f] || {},
                    d = pe.extend({
                        type: f,
                        origType: m,
                        data: n,
                        handler: i,
                        guid: i.guid,
                        selector: s,
                        needsContext: s && pe.expr.match.needsContext.test(s),
                        namespace: p.join(".")
                    }, o),
                    (h = l[f]) || ((h = l[f] = []).delegateCount = 0,
                    c.setup && !1 !== c.setup.call(e, n, p, a) || e.addEventListener && e.addEventListener(f, a)),
                    c.add && (c.add.call(e, d),
                    d.handler.guid || (d.handler.guid = i.guid)),
                    s ? h.splice(h.delegateCount++, 0, d) : h.push(d),
                    pe.event.global[f] = !0)
        },
        remove: function(e, t, i, n, s) {
            var o, a, r, l, u, d, c, h, f, p, m, g = Ae.hasData(e) && Ae.get(e);
            if (g && (l = g.events)) {
                for (u = (t = (t || "").match(Ce) || [""]).length; u--; )
                    if (f = m = (r = Ze.exec(t[u]) || [])[1],
                    p = (r[2] || "").split(".").sort(),
                    f) {
                        for (c = pe.event.special[f] || {},
                        h = l[f = (n ? c.delegateType : c.bindType) || f] || [],
                        r = r[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"),
                        a = o = h.length; o--; )
                            d = h[o],
                            !s && m !== d.origType || i && i.guid !== d.guid || r && !r.test(d.namespace) || n && n !== d.selector && ("**" !== n || !d.selector) || (h.splice(o, 1),
                            d.selector && h.delegateCount--,
                            c.remove && c.remove.call(e, d));
                        a && !h.length && (c.teardown && !1 !== c.teardown.call(e, p, g.handle) || pe.removeEvent(e, f, g.handle),
                        delete l[f])
                    } else
                        for (f in l)
                            pe.event.remove(e, f + t[u], i, n, !0);
                pe.isEmptyObject(l) && Ae.remove(e, "handle events")
            }
        },
        dispatch: function(e) {
            var t, i, n, s, o, a, r = new Array(arguments.length), l = pe.event.fix(e), u = (Ae.get(this, "events") || Object.create(null))[l.type] || [], d = pe.event.special[l.type] || {};
            for (r[0] = l,
            t = 1; t < arguments.length; t++)
                r[t] = arguments[t];
            if (l.delegateTarget = this,
            !d.preDispatch || !1 !== d.preDispatch.call(this, l)) {
                for (a = pe.event.handlers.call(this, l, u),
                t = 0; (s = a[t++]) && !l.isPropagationStopped(); )
                    for (l.currentTarget = s.elem,
                    i = 0; (o = s.handlers[i++]) && !l.isImmediatePropagationStopped(); )
                        l.rnamespace && !1 !== o.namespace && !l.rnamespace.test(o.namespace) || (l.handleObj = o,
                        l.data = o.data,
                        void 0 !== (n = ((pe.event.special[o.origType] || {}).handle || o.handler).apply(s.elem, r)) && !1 === (l.result = n) && (l.preventDefault(),
                        l.stopPropagation()));
                return d.postDispatch && d.postDispatch.call(this, l),
                l.result
            }
        },
        handlers: function(e, t) {
            var i, n, s, o, a, r = [], l = t.delegateCount, u = e.target;
            if (l && u.nodeType && !("click" === e.type && 1 <= e.button))
                for (; u !== this; u = u.parentNode || this)
                    if (1 === u.nodeType && ("click" !== e.type || !0 !== u.disabled)) {
                        for (o = [],
                        a = {},
                        i = 0; i < l; i++)
                            void 0 === a[s = (n = t[i]).selector + " "] && (a[s] = n.needsContext ? -1 < pe(s, this).index(u) : pe.find(s, this, null, [u]).length),
                            a[s] && o.push(n);
                        o.length && r.push({
                            elem: u,
                            handlers: o
                        })
                    }
            return u = this,
            l < t.length && r.push({
                elem: u,
                handlers: t.slice(l)
            }),
            r
        },
        addProp: function(e, t) {
            Object.defineProperty(pe.Event.prototype, e, {
                enumerable: !0,
                configurable: !0,
                get: ue(t) ? function() {
                    if (this.originalEvent)
                        return t(this.originalEvent)
                }
                : function() {
                    if (this.originalEvent)
                        return this.originalEvent[e]
                }
                ,
                set: function(t) {
                    Object.defineProperty(this, e, {
                        enumerable: !0,
                        configurable: !0,
                        writable: !0,
                        value: t
                    })
                }
            })
        },
        fix: function(e) {
            return e[pe.expando] ? e : new pe.Event(e)
        },
        special: {
            load: {
                noBubble: !0
            },
            click: {
                setup: function(e) {
                    var t = this || e;
                    return Ue.test(t.type) && t.click && o(t, "input") && D(t, "click", w),
                    !1
                },
                trigger: function(e) {
                    var t = this || e;
                    return Ue.test(t.type) && t.click && o(t, "input") && D(t, "click"),
                    !0
                },
                _default: function(e) {
                    var t = e.target;
                    return Ue.test(t.type) && t.click && o(t, "input") && Ae.get(t, "click") || o(t, "a")
                }
            },
            beforeunload: {
                postDispatch: function(e) {
                    void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
                }
            }
        }
    },
    pe.removeEvent = function(e, t, i) {
        e.removeEventListener && e.removeEventListener(t, i)
    }
    ,
    pe.Event = function(e, t) {
        if (!(this instanceof pe.Event))
            return new pe.Event(e,t);
        e && e.type ? (this.originalEvent = e,
        this.type = e.type,
        this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? w : x,
        this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target,
        this.currentTarget = e.currentTarget,
        this.relatedTarget = e.relatedTarget) : this.type = e,
        t && pe.extend(this, t),
        this.timeStamp = e && e.timeStamp || Date.now(),
        this[pe.expando] = !0
    }
    ,
    pe.Event.prototype = {
        constructor: pe.Event,
        isDefaultPrevented: x,
        isPropagationStopped: x,
        isImmediatePropagationStopped: x,
        isSimulated: !1,
        preventDefault: function() {
            var e = this.originalEvent;
            this.isDefaultPrevented = w,
            e && !this.isSimulated && e.preventDefault()
        },
        stopPropagation: function() {
            var e = this.originalEvent;
            this.isPropagationStopped = w,
            e && !this.isSimulated && e.stopPropagation()
        },
        stopImmediatePropagation: function() {
            var e = this.originalEvent;
            this.isImmediatePropagationStopped = w,
            e && !this.isSimulated && e.stopImmediatePropagation(),
            this.stopPropagation()
        }
    },
    pe.each({
        altKey: !0,
        bubbles: !0,
        cancelable: !0,
        changedTouches: !0,
        ctrlKey: !0,
        detail: !0,
        eventPhase: !0,
        metaKey: !0,
        pageX: !0,
        pageY: !0,
        shiftKey: !0,
        view: !0,
        char: !0,
        code: !0,
        charCode: !0,
        key: !0,
        keyCode: !0,
        button: !0,
        buttons: !0,
        clientX: !0,
        clientY: !0,
        offsetX: !0,
        offsetY: !0,
        pointerId: !0,
        pointerType: !0,
        screenX: !0,
        screenY: !0,
        targetTouches: !0,
        toElement: !0,
        touches: !0,
        which: function(e) {
            var t = e.button;
            return null == e.which && Xe.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && Ge.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which
        }
    }, pe.event.addProp),
    pe.each({
        focus: "focusin",
        blur: "focusout"
    }, (function(e, t) {
        pe.event.special[e] = {
            setup: function() {
                return D(this, e, k),
                !1
            },
            trigger: function() {
                return D(this, e),
                !0
            },
            delegateType: t
        }
    }
    )),
    pe.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout",
        pointerenter: "pointerover",
        pointerleave: "pointerout"
    }, (function(e, t) {
        pe.event.special[e] = {
            delegateType: t,
            bindType: t,
            handle: function(e) {
                var i, n = e.relatedTarget, s = e.handleObj;
                return n && (n === this || pe.contains(this, n)) || (e.type = s.origType,
                i = s.handler.apply(this, arguments),
                e.type = t),
                i
            }
        }
    }
    )),
    pe.fn.extend({
        on: function(e, t, i, n) {
            return C(this, e, t, i, n)
        },
        one: function(e, t, i, n) {
            return C(this, e, t, i, n, 1)
        },
        off: function(e, t, i) {
            var n, s;
            if (e && e.preventDefault && e.handleObj)
                return n = e.handleObj,
                pe(e.delegateTarget).off(n.namespace ? n.origType + "." + n.namespace : n.origType, n.selector, n.handler),
                this;
            if ("object" == typeof e) {
                for (s in e)
                    this.off(s, t, e[s]);
                return this
            }
            return !1 !== t && "function" != typeof t || (i = t,
            t = void 0),
            !1 === i && (i = x),
            this.each((function() {
                pe.event.remove(this, e, i, t)
            }
            ))
        }
    });
    var Je = /<script|<style|<link/i
      , et = /checked\s*(?:[^=]|=\s*.checked.)/i
      , tt = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
    pe.extend({
        htmlPrefilter: function(e) {
            return e
        },
        clone: function(e, t, i) {
            var n, s, o, a, r, l, u, d = e.cloneNode(!0), c = Fe(e);
            if (!(le.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || pe.isXMLDoc(e)))
                for (a = b(d),
                n = 0,
                s = (o = b(e)).length; n < s; n++)
                    r = o[n],
                    "input" === (u = (l = a[n]).nodeName.toLowerCase()) && Ue.test(r.type) ? l.checked = r.checked : "input" !== u && "textarea" !== u || (l.defaultValue = r.defaultValue);
            if (t)
                if (i)
                    for (o = o || b(e),
                    a = a || b(d),
                    n = 0,
                    s = o.length; n < s; n++)
                        P(o[n], a[n]);
                else
                    P(e, d);
            return 0 < (a = b(d, "script")).length && y(a, !c && b(e, "script")),
            d
        },
        cleanData: function(e) {
            for (var t, i, n, s = pe.event.special, o = 0; void 0 !== (i = e[o]); o++)
                if (Ee(i)) {
                    if (t = i[Ae.expando]) {
                        if (t.events)
                            for (n in t.events)
                                s[n] ? pe.event.remove(i, n) : pe.removeEvent(i, n, t.handle);
                        i[Ae.expando] = void 0
                    }
                    i[Me.expando] && (i[Me.expando] = void 0)
                }
        }
    }),
    pe.fn.extend({
        detach: function(e) {
            return A(this, e, !0)
        },
        remove: function(e) {
            return A(this, e)
        },
        text: function(e) {
            return Se(this, (function(e) {
                return void 0 === e ? pe.text(this) : this.empty().each((function() {
                    1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e)
                }
                ))
            }
            ), null, e, arguments.length)
        },
        append: function() {
            return E(this, arguments, (function(e) {
                1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || T(this, e).appendChild(e)
            }
            ))
        },
        prepend: function() {
            return E(this, arguments, (function(e) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var t = T(this, e);
                    t.insertBefore(e, t.firstChild)
                }
            }
            ))
        },
        before: function() {
            return E(this, arguments, (function(e) {
                this.parentNode && this.parentNode.insertBefore(e, this)
            }
            ))
        },
        after: function() {
            return E(this, arguments, (function(e) {
                this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
            }
            ))
        },
        empty: function() {
            for (var e, t = 0; null != (e = this[t]); t++)
                1 === e.nodeType && (pe.cleanData(b(e, !1)),
                e.textContent = "");
            return this
        },
        clone: function(e, t) {
            return e = null != e && e,
            t = null == t ? e : t,
            this.map((function() {
                return pe.clone(this, e, t)
            }
            ))
        },
        html: function(e) {
            return Se(this, (function(e) {
                var t = this[0] || {}
                  , i = 0
                  , n = this.length;
                if (void 0 === e && 1 === t.nodeType)
                    return t.innerHTML;
                if ("string" == typeof e && !Je.test(e) && !Ke[(Ye.exec(e) || ["", ""])[1].toLowerCase()]) {
                    e = pe.htmlPrefilter(e);
                    try {
                        for (; i < n; i++)
                            1 === (t = this[i] || {}).nodeType && (pe.cleanData(b(t, !1)),
                            t.innerHTML = e);
                        t = 0
                    } catch (e) {}
                }
                t && this.empty().append(e)
            }
            ), null, e, arguments.length)
        },
        replaceWith: function() {
            var e = [];
            return E(this, arguments, (function(t) {
                var i = this.parentNode;
                pe.inArray(this, e) < 0 && (pe.cleanData(b(this)),
                i && i.replaceChild(t, this))
            }
            ), e)
        }
    }),
    pe.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    }, (function(e, t) {
        pe.fn[e] = function(e) {
            for (var i, n = [], s = pe(e), o = s.length - 1, a = 0; a <= o; a++)
                i = a === o ? this : this.clone(!0),
                pe(s[a])[t](i),
                te.apply(n, i.get());
            return this.pushStack(n)
        }
    }
    ));
    var it = new RegExp("^(" + Oe + ")(?!px)[a-z%]+$","i")
      , nt = function(t) {
        var i = t.ownerDocument.defaultView;
        return i && i.opener || (i = e),
        i.getComputedStyle(t)
    }
      , st = function(e, t, i) {
        var n, s, o = {};
        for (s in t)
            o[s] = e.style[s],
            e.style[s] = t[s];
        for (s in n = i.call(e),
        t)
            e.style[s] = o[s];
        return n
    }
      , ot = new RegExp(je.join("|"),"i");
    !function() {
        function t() {
            if (d) {
                u.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",
                d.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",
                He.appendChild(u).appendChild(d);
                var t = e.getComputedStyle(d);
                n = "1%" !== t.top,
                l = 12 === i(t.marginLeft),
                d.style.right = "60%",
                a = 36 === i(t.right),
                s = 36 === i(t.width),
                d.style.position = "absolute",
                o = 12 === i(d.offsetWidth / 3),
                He.removeChild(u),
                d = null
            }
        }
        function i(e) {
            return Math.round(parseFloat(e))
        }
        var n, s, o, a, r, l, u = ce.createElement("div"), d = ce.createElement("div");
        d.style && (d.style.backgroundClip = "content-box",
        d.cloneNode(!0).style.backgroundClip = "",
        le.clearCloneStyle = "content-box" === d.style.backgroundClip,
        pe.extend(le, {
            boxSizingReliable: function() {
                return t(),
                s
            },
            pixelBoxStyles: function() {
                return t(),
                a
            },
            pixelPosition: function() {
                return t(),
                n
            },
            reliableMarginLeft: function() {
                return t(),
                l
            },
            scrollboxSize: function() {
                return t(),
                o
            },
            reliableTrDimensions: function() {
                var t, i, n, s;
                return null == r && (t = ce.createElement("table"),
                i = ce.createElement("tr"),
                n = ce.createElement("div"),
                t.style.cssText = "position:absolute;left:-11111px",
                i.style.height = "1px",
                n.style.height = "9px",
                He.appendChild(t).appendChild(i).appendChild(n),
                s = e.getComputedStyle(i),
                r = 3 < parseInt(s.height),
                He.removeChild(t)),
                r
            }
        }))
    }();
    var at = ["Webkit", "Moz", "ms"]
      , rt = ce.createElement("div").style
      , lt = {}
      , ut = /^(none|table(?!-c[ea]).+)/
      , dt = /^--/
      , ct = {
        position: "absolute",
        visibility: "hidden",
        display: "block"
    }
      , ht = {
        letterSpacing: "0",
        fontWeight: "400"
    };
    pe.extend({
        cssHooks: {
            opacity: {
                get: function(e, t) {
                    if (t) {
                        var i = M(e, "opacity");
                        return "" === i ? "1" : i
                    }
                }
            }
        },
        cssNumber: {
            animationIterationCount: !0,
            columnCount: !0,
            fillOpacity: !0,
            flexGrow: !0,
            flexShrink: !0,
            fontWeight: !0,
            gridArea: !0,
            gridColumn: !0,
            gridColumnEnd: !0,
            gridColumnStart: !0,
            gridRow: !0,
            gridRowEnd: !0,
            gridRowStart: !0,
            lineHeight: !0,
            opacity: !0,
            order: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {},
        style: function(e, t, i, n) {
            if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
                var s, o, a, r = f(t), l = dt.test(t), u = e.style;
                if (l || (t = $(r)),
                a = pe.cssHooks[t] || pe.cssHooks[r],
                void 0 === i)
                    return a && "get"in a && void 0 !== (s = a.get(e, !1, n)) ? s : u[t];
                "string" == (o = typeof i) && (s = Le.exec(i)) && s[1] && (i = g(e, t, s),
                o = "number"),
                null != i && i == i && ("number" !== o || l || (i += s && s[3] || (pe.cssNumber[r] ? "" : "px")),
                le.clearCloneStyle || "" !== i || 0 !== t.indexOf("background") || (u[t] = "inherit"),
                a && "set"in a && void 0 === (i = a.set(e, i, n)) || (l ? u.setProperty(t, i) : u[t] = i))
            }
        },
        css: function(e, t, i, n) {
            var s, o, a, r = f(t);
            return dt.test(t) || (t = $(r)),
            (a = pe.cssHooks[t] || pe.cssHooks[r]) && "get"in a && (s = a.get(e, !0, i)),
            void 0 === s && (s = M(e, t, n)),
            "normal" === s && t in ht && (s = ht[t]),
            "" === i || i ? (o = parseFloat(s),
            !0 === i || isFinite(o) ? o || 0 : s) : s
        }
    }),
    pe.each(["height", "width"], (function(e, t) {
        pe.cssHooks[t] = {
            get: function(e, i, n) {
                if (i)
                    return !ut.test(pe.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? j(e, t, n) : st(e, ct, (function() {
                        return j(e, t, n)
                    }
                    ))
            },
            set: function(e, i, n) {
                var s, o = nt(e), a = !le.scrollboxSize() && "absolute" === o.position, r = (a || n) && "border-box" === pe.css(e, "boxSizing", !1, o), l = n ? L(e, t, n, r, o) : 0;
                return r && a && (l -= Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - parseFloat(o[t]) - L(e, t, "border", !1, o) - .5)),
                l && (s = Le.exec(i)) && "px" !== (s[3] || "px") && (e.style[t] = i,
                i = pe.css(e, t)),
                O(0, i, l)
            }
        }
    }
    )),
    pe.cssHooks.marginLeft = N(le.reliableMarginLeft, (function(e, t) {
        if (t)
            return (parseFloat(M(e, "marginLeft")) || e.getBoundingClientRect().left - st(e, {
                marginLeft: 0
            }, (function() {
                return e.getBoundingClientRect().left
            }
            ))) + "px"
    }
    )),
    pe.each({
        margin: "",
        padding: "",
        border: "Width"
    }, (function(e, t) {
        pe.cssHooks[e + t] = {
            expand: function(i) {
                for (var n = 0, s = {}, o = "string" == typeof i ? i.split(" ") : [i]; n < 4; n++)
                    s[e + je[n] + t] = o[n] || o[n - 2] || o[0];
                return s
            }
        },
        "margin" !== e && (pe.cssHooks[e + t].set = O)
    }
    )),
    pe.fn.extend({
        css: function(e, t) {
            return Se(this, (function(e, t, i) {
                var n, s, o = {}, a = 0;
                if (Array.isArray(t)) {
                    for (n = nt(e),
                    s = t.length; a < s; a++)
                        o[t[a]] = pe.css(e, t[a], !1, n);
                    return o
                }
                return void 0 !== i ? pe.style(e, t, i) : pe.css(e, t)
            }
            ), e, t, 1 < arguments.length)
        }
    }),
    ((pe.Tween = H).prototype = {
        constructor: H,
        init: function(e, t, i, n, s, o) {
            this.elem = e,
            this.prop = i,
            this.easing = s || pe.easing._default,
            this.options = t,
            this.start = this.now = this.cur(),
            this.end = n,
            this.unit = o || (pe.cssNumber[i] ? "" : "px")
        },
        cur: function() {
            var e = H.propHooks[this.prop];
            return e && e.get ? e.get(this) : H.propHooks._default.get(this)
        },
        run: function(e) {
            var t, i = H.propHooks[this.prop];
            return this.options.duration ? this.pos = t = pe.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e,
            this.now = (this.end - this.start) * t + this.start,
            this.options.step && this.options.step.call(this.elem, this.now, this),
            i && i.set ? i.set(this) : H.propHooks._default.set(this),
            this
        }
    }).init.prototype = H.prototype,
    (H.propHooks = {
        _default: {
            get: function(e) {
                var t;
                return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = pe.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0
            },
            set: function(e) {
                pe.fx.step[e.prop] ? pe.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !pe.cssHooks[e.prop] && null == e.elem.style[$(e.prop)] ? e.elem[e.prop] = e.now : pe.style(e.elem, e.prop, e.now + e.unit)
            }
        }
    }).scrollTop = H.propHooks.scrollLeft = {
        set: function(e) {
            e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
        }
    },
    pe.easing = {
        linear: function(e) {
            return e
        },
        swing: function(e) {
            return .5 - Math.cos(e * Math.PI) / 2
        },
        _default: "swing"
    },
    pe.fx = H.prototype.init,
    pe.fx.step = {};
    var ft, pt, mt, gt, vt = /^(?:toggle|show|hide)$/, bt = /queueHooks$/;
    pe.Animation = pe.extend(q, {
        tweeners: {
            "*": [function(e, t) {
                var i = this.createTween(e, t);
                return g(i.elem, e, Le.exec(t), i),
                i
            }
            ]
        },
        tweener: function(e, t) {
            ue(e) ? (t = e,
            e = ["*"]) : e = e.match(Ce);
            for (var i, n = 0, s = e.length; n < s; n++)
                i = e[n],
                q.tweeners[i] = q.tweeners[i] || [],
                q.tweeners[i].unshift(t)
        },
        prefilters: [function(e, t, i) {
            var n, s, o, a, r, l, u, d, c = "width"in t || "height"in t, h = this, f = {}, p = e.style, m = e.nodeType && Re(e), g = Ae.get(e, "fxshow");
            for (n in i.queue || (null == (a = pe._queueHooks(e, "fx")).unqueued && (a.unqueued = 0,
            r = a.empty.fire,
            a.empty.fire = function() {
                a.unqueued || r()
            }
            ),
            a.unqueued++,
            h.always((function() {
                h.always((function() {
                    a.unqueued--,
                    pe.queue(e, "fx").length || a.empty.fire()
                }
                ))
            }
            ))),
            t)
                if (s = t[n],
                vt.test(s)) {
                    if (delete t[n],
                    o = o || "toggle" === s,
                    s === (m ? "hide" : "show")) {
                        if ("show" !== s || !g || void 0 === g[n])
                            continue;
                        m = !0
                    }
                    f[n] = g && g[n] || pe.style(e, n)
                }
            if ((l = !pe.isEmptyObject(t)) || !pe.isEmptyObject(f))
                for (n in c && 1 === e.nodeType && (i.overflow = [p.overflow, p.overflowX, p.overflowY],
                null == (u = g && g.display) && (u = Ae.get(e, "display")),
                "none" === (d = pe.css(e, "display")) && (u ? d = u : (v([e], !0),
                u = e.style.display || u,
                d = pe.css(e, "display"),
                v([e]))),
                ("inline" === d || "inline-block" === d && null != u) && "none" === pe.css(e, "float") && (l || (h.done((function() {
                    p.display = u
                }
                )),
                null == u && (d = p.display,
                u = "none" === d ? "" : d)),
                p.display = "inline-block")),
                i.overflow && (p.overflow = "hidden",
                h.always((function() {
                    p.overflow = i.overflow[0],
                    p.overflowX = i.overflow[1],
                    p.overflowY = i.overflow[2]
                }
                ))),
                l = !1,
                f)
                    l || (g ? "hidden"in g && (m = g.hidden) : g = Ae.access(e, "fxshow", {
                        display: u
                    }),
                    o && (g.hidden = !m),
                    m && v([e], !0),
                    h.done((function() {
                        for (n in m || v([e]),
                        Ae.remove(e, "fxshow"),
                        f)
                            pe.style(e, n, f[n])
                    }
                    ))),
                    l = W(m ? g[n] : 0, n, h),
                    n in g || (g[n] = l.start,
                    m && (l.end = l.start,
                    l.start = 0))
        }
        ],
        prefilter: function(e, t) {
            t ? q.prefilters.unshift(e) : q.prefilters.push(e)
        }
    }),
    pe.speed = function(e, t, i) {
        var n = e && "object" == typeof e ? pe.extend({}, e) : {
            complete: i || !i && t || ue(e) && e,
            duration: e,
            easing: i && t || t && !ue(t) && t
        };
        return pe.fx.off ? n.duration = 0 : "number" != typeof n.duration && (n.duration in pe.fx.speeds ? n.duration = pe.fx.speeds[n.duration] : n.duration = pe.fx.speeds._default),
        null != n.queue && !0 !== n.queue || (n.queue = "fx"),
        n.old = n.complete,
        n.complete = function() {
            ue(n.old) && n.old.call(this),
            n.queue && pe.dequeue(this, n.queue)
        }
        ,
        n
    }
    ,
    pe.fn.extend({
        fadeTo: function(e, t, i, n) {
            return this.filter(Re).css("opacity", 0).show().end().animate({
                opacity: t
            }, e, i, n)
        },
        animate: function(e, t, i, n) {
            var s = pe.isEmptyObject(e)
              , o = pe.speed(t, i, n)
              , a = function() {
                var t = q(this, pe.extend({}, e), o);
                (s || Ae.get(this, "finish")) && t.stop(!0)
            };
            return a.finish = a,
            s || !1 === o.queue ? this.each(a) : this.queue(o.queue, a)
        },
        stop: function(e, t, i) {
            var n = function(e) {
                var t = e.stop;
                delete e.stop,
                t(i)
            };
            return "string" != typeof e && (i = t,
            t = e,
            e = void 0),
            t && this.queue(e || "fx", []),
            this.each((function() {
                var t = !0
                  , s = null != e && e + "queueHooks"
                  , o = pe.timers
                  , a = Ae.get(this);
                if (s)
                    a[s] && a[s].stop && n(a[s]);
                else
                    for (s in a)
                        a[s] && a[s].stop && bt.test(s) && n(a[s]);
                for (s = o.length; s--; )
                    o[s].elem !== this || null != e && o[s].queue !== e || (o[s].anim.stop(i),
                    t = !1,
                    o.splice(s, 1));
                !t && i || pe.dequeue(this, e)
            }
            ))
        },
        finish: function(e) {
            return !1 !== e && (e = e || "fx"),
            this.each((function() {
                var t, i = Ae.get(this), n = i[e + "queue"], s = i[e + "queueHooks"], o = pe.timers, a = n ? n.length : 0;
                for (i.finish = !0,
                pe.queue(this, e, []),
                s && s.stop && s.stop.call(this, !0),
                t = o.length; t--; )
                    o[t].elem === this && o[t].queue === e && (o[t].anim.stop(!0),
                    o.splice(t, 1));
                for (t = 0; t < a; t++)
                    n[t] && n[t].finish && n[t].finish.call(this);
                delete i.finish
            }
            ))
        }
    }),
    pe.each(["toggle", "show", "hide"], (function(e, t) {
        var i = pe.fn[t];
        pe.fn[t] = function(e, n, s) {
            return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(R(t, !0), e, n, s)
        }
    }
    )),
    pe.each({
        slideDown: R("show"),
        slideUp: R("hide"),
        slideToggle: R("toggle"),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        },
        fadeToggle: {
            opacity: "toggle"
        }
    }, (function(e, t) {
        pe.fn[e] = function(e, i, n) {
            return this.animate(t, e, i, n)
        }
    }
    )),
    pe.timers = [],
    pe.fx.tick = function() {
        var e, t = 0, i = pe.timers;
        for (ft = Date.now(); t < i.length; t++)
            (e = i[t])() || i[t] !== e || i.splice(t--, 1);
        i.length || pe.fx.stop(),
        ft = void 0
    }
    ,
    pe.fx.timer = function(e) {
        pe.timers.push(e),
        pe.fx.start()
    }
    ,
    pe.fx.interval = 13,
    pe.fx.start = function() {
        pt || (pt = !0,
        F())
    }
    ,
    pe.fx.stop = function() {
        pt = null
    }
    ,
    pe.fx.speeds = {
        slow: 600,
        fast: 200,
        _default: 400
    },
    pe.fn.delay = function(t, i) {
        return t = pe.fx && pe.fx.speeds[t] || t,
        i = i || "fx",
        this.queue(i, (function(i, n) {
            var s = e.setTimeout(i, t);
            n.stop = function() {
                e.clearTimeout(s)
            }
        }
        ))
    }
    ,
    mt = ce.createElement("input"),
    gt = ce.createElement("select").appendChild(ce.createElement("option")),
    mt.type = "checkbox",
    le.checkOn = "" !== mt.value,
    le.optSelected = gt.selected,
    (mt = ce.createElement("input")).value = "t",
    mt.type = "radio",
    le.radioValue = "t" === mt.value;
    var yt, _t = pe.expr.attrHandle;
    pe.fn.extend({
        attr: function(e, t) {
            return Se(this, pe.attr, e, t, 1 < arguments.length)
        },
        removeAttr: function(e) {
            return this.each((function() {
                pe.removeAttr(this, e)
            }
            ))
        }
    }),
    pe.extend({
        attr: function(e, t, i) {
            var n, s, o = e.nodeType;
            if (3 !== o && 8 !== o && 2 !== o)
                return void 0 === e.getAttribute ? pe.prop(e, t, i) : (1 === o && pe.isXMLDoc(e) || (s = pe.attrHooks[t.toLowerCase()] || (pe.expr.match.bool.test(t) ? yt : void 0)),
                void 0 !== i ? null === i ? void pe.removeAttr(e, t) : s && "set"in s && void 0 !== (n = s.set(e, i, t)) ? n : (e.setAttribute(t, i + ""),
                i) : s && "get"in s && null !== (n = s.get(e, t)) ? n : null == (n = pe.find.attr(e, t)) ? void 0 : n)
        },
        attrHooks: {
            type: {
                set: function(e, t) {
                    if (!le.radioValue && "radio" === t && o(e, "input")) {
                        var i = e.value;
                        return e.setAttribute("type", t),
                        i && (e.value = i),
                        t
                    }
                }
            }
        },
        removeAttr: function(e, t) {
            var i, n = 0, s = t && t.match(Ce);
            if (s && 1 === e.nodeType)
                for (; i = s[n++]; )
                    e.removeAttribute(i)
        }
    }),
    yt = {
        set: function(e, t, i) {
            return !1 === t ? pe.removeAttr(e, i) : e.setAttribute(i, i),
            i
        }
    },
    pe.each(pe.expr.match.bool.source.match(/\w+/g), (function(e, t) {
        var i = _t[t] || pe.find.attr;
        _t[t] = function(e, t, n) {
            var s, o, a = t.toLowerCase();
            return n || (o = _t[a],
            _t[a] = s,
            s = null != i(e, t, n) ? a : null,
            _t[a] = o),
            s
        }
    }
    ));
    var wt = /^(?:input|select|textarea|button)$/i
      , xt = /^(?:a|area)$/i;
    pe.fn.extend({
        prop: function(e, t) {
            return Se(this, pe.prop, e, t, 1 < arguments.length)
        },
        removeProp: function(e) {
            return this.each((function() {
                delete this[pe.propFix[e] || e]
            }
            ))
        }
    }),
    pe.extend({
        prop: function(e, t, i) {
            var n, s, o = e.nodeType;
            if (3 !== o && 8 !== o && 2 !== o)
                return 1 === o && pe.isXMLDoc(e) || (t = pe.propFix[t] || t,
                s = pe.propHooks[t]),
                void 0 !== i ? s && "set"in s && void 0 !== (n = s.set(e, i, t)) ? n : e[t] = i : s && "get"in s && null !== (n = s.get(e, t)) ? n : e[t]
        },
        propHooks: {
            tabIndex: {
                get: function(e) {
                    var t = pe.find.attr(e, "tabindex");
                    return t ? parseInt(t, 10) : wt.test(e.nodeName) || xt.test(e.nodeName) && e.href ? 0 : -1
                }
            }
        },
        propFix: {
            for: "htmlFor",
            class: "className"
        }
    }),
    le.optSelected || (pe.propHooks.selected = {
        get: function(e) {
            var t = e.parentNode;
            return t && t.parentNode && t.parentNode.selectedIndex,
            null
        },
        set: function(e) {
            var t = e.parentNode;
            t && (t.selectedIndex,
            t.parentNode && t.parentNode.selectedIndex)
        }
    }),
    pe.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], (function() {
        pe.propFix[this.toLowerCase()] = this
    }
    )),
    pe.fn.extend({
        addClass: function(e) {
            var t, i, n, s, o, a, r, l = 0;
            if (ue(e))
                return this.each((function(t) {
                    pe(this).addClass(e.call(this, t, U(this)))
                }
                ));
            if ((t = Y(e)).length)
                for (; i = this[l++]; )
                    if (s = U(i),
                    n = 1 === i.nodeType && " " + B(s) + " ") {
                        for (a = 0; o = t[a++]; )
                            n.indexOf(" " + o + " ") < 0 && (n += o + " ");
                        s !== (r = B(n)) && i.setAttribute("class", r)
                    }
            return this
        },
        removeClass: function(e) {
            var t, i, n, s, o, a, r, l = 0;
            if (ue(e))
                return this.each((function(t) {
                    pe(this).removeClass(e.call(this, t, U(this)))
                }
                ));
            if (!arguments.length)
                return this.attr("class", "");
            if ((t = Y(e)).length)
                for (; i = this[l++]; )
                    if (s = U(i),
                    n = 1 === i.nodeType && " " + B(s) + " ") {
                        for (a = 0; o = t[a++]; )
                            for (; -1 < n.indexOf(" " + o + " "); )
                                n = n.replace(" " + o + " ", " ");
                        s !== (r = B(n)) && i.setAttribute("class", r)
                    }
            return this
        },
        toggleClass: function(e, t) {
            var i = typeof e
              , n = "string" === i || Array.isArray(e);
            return "boolean" == typeof t && n ? t ? this.addClass(e) : this.removeClass(e) : ue(e) ? this.each((function(i) {
                pe(this).toggleClass(e.call(this, i, U(this), t), t)
            }
            )) : this.each((function() {
                var t, s, o, a;
                if (n)
                    for (s = 0,
                    o = pe(this),
                    a = Y(e); t = a[s++]; )
                        o.hasClass(t) ? o.removeClass(t) : o.addClass(t);
                else
                    void 0 !== e && "boolean" !== i || ((t = U(this)) && Ae.set(this, "__className__", t),
                    this.setAttribute && this.setAttribute("class", t || !1 === e ? "" : Ae.get(this, "__className__") || ""))
            }
            ))
        },
        hasClass: function(e) {
            var t, i, n = 0;
            for (t = " " + e + " "; i = this[n++]; )
                if (1 === i.nodeType && -1 < (" " + B(U(i)) + " ").indexOf(t))
                    return !0;
            return !1
        }
    });
    var kt = /\r/g;
    pe.fn.extend({
        val: function(e) {
            var t, i, n, s = this[0];
            return arguments.length ? (n = ue(e),
            this.each((function(i) {
                var s;
                1 === this.nodeType && (null == (s = n ? e.call(this, i, pe(this).val()) : e) ? s = "" : "number" == typeof s ? s += "" : Array.isArray(s) && (s = pe.map(s, (function(e) {
                    return null == e ? "" : e + ""
                }
                ))),
                (t = pe.valHooks[this.type] || pe.valHooks[this.nodeName.toLowerCase()]) && "set"in t && void 0 !== t.set(this, s, "value") || (this.value = s))
            }
            ))) : s ? (t = pe.valHooks[s.type] || pe.valHooks[s.nodeName.toLowerCase()]) && "get"in t && void 0 !== (i = t.get(s, "value")) ? i : "string" == typeof (i = s.value) ? i.replace(kt, "") : null == i ? "" : i : void 0
        }
    }),
    pe.extend({
        valHooks: {
            option: {
                get: function(e) {
                    var t = pe.find.attr(e, "value");
                    return null != t ? t : B(pe.text(e))
                }
            },
            select: {
                get: function(e) {
                    var t, i, n, s = e.options, a = e.selectedIndex, r = "select-one" === e.type, l = r ? null : [], u = r ? a + 1 : s.length;
                    for (n = a < 0 ? u : r ? a : 0; n < u; n++)
                        if (((i = s[n]).selected || n === a) && !i.disabled && (!i.parentNode.disabled || !o(i.parentNode, "optgroup"))) {
                            if (t = pe(i).val(),
                            r)
                                return t;
                            l.push(t)
                        }
                    return l
                },
                set: function(e, t) {
                    for (var i, n, s = e.options, o = pe.makeArray(t), a = s.length; a--; )
                        ((n = s[a]).selected = -1 < pe.inArray(pe.valHooks.option.get(n), o)) && (i = !0);
                    return i || (e.selectedIndex = -1),
                    o
                }
            }
        }
    }),
    pe.each(["radio", "checkbox"], (function() {
        pe.valHooks[this] = {
            set: function(e, t) {
                if (Array.isArray(t))
                    return e.checked = -1 < pe.inArray(pe(e).val(), t)
            }
        },
        le.checkOn || (pe.valHooks[this].get = function(e) {
            return null === e.getAttribute("value") ? "on" : e.value
        }
        )
    }
    )),
    le.focusin = "onfocusin"in e;
    var Ct = /^(?:focusinfocus|focusoutblur)$/
      , Dt = function(e) {
        e.stopPropagation()
    };
    pe.extend(pe.event, {
        trigger: function(t, i, n, s) {
            var o, a, r, l, u, d, c, h, f = [n || ce], p = oe.call(t, "type") ? t.type : t, m = oe.call(t, "namespace") ? t.namespace.split(".") : [];
            if (a = h = r = n = n || ce,
            3 !== n.nodeType && 8 !== n.nodeType && !Ct.test(p + pe.event.triggered) && (-1 < p.indexOf(".") && (p = (m = p.split(".")).shift(),
            m.sort()),
            u = p.indexOf(":") < 0 && "on" + p,
            (t = t[pe.expando] ? t : new pe.Event(p,"object" == typeof t && t)).isTrigger = s ? 2 : 3,
            t.namespace = m.join("."),
            t.rnamespace = t.namespace ? new RegExp("(^|\\.)" + m.join("\\.(?:.*\\.|)") + "(\\.|$)") : null,
            t.result = void 0,
            t.target || (t.target = n),
            i = null == i ? [t] : pe.makeArray(i, [t]),
            c = pe.event.special[p] || {},
            s || !c.trigger || !1 !== c.trigger.apply(n, i))) {
                if (!s && !c.noBubble && !de(n)) {
                    for (l = c.delegateType || p,
                    Ct.test(l + p) || (a = a.parentNode); a; a = a.parentNode)
                        f.push(a),
                        r = a;
                    r === (n.ownerDocument || ce) && f.push(r.defaultView || r.parentWindow || e)
                }
                for (o = 0; (a = f[o++]) && !t.isPropagationStopped(); )
                    h = a,
                    t.type = 1 < o ? l : c.bindType || p,
                    (d = (Ae.get(a, "events") || Object.create(null))[t.type] && Ae.get(a, "handle")) && d.apply(a, i),
                    (d = u && a[u]) && d.apply && Ee(a) && (t.result = d.apply(a, i),
                    !1 === t.result && t.preventDefault());
                return t.type = p,
                s || t.isDefaultPrevented() || c._default && !1 !== c._default.apply(f.pop(), i) || !Ee(n) || u && ue(n[p]) && !de(n) && ((r = n[u]) && (n[u] = null),
                pe.event.triggered = p,
                t.isPropagationStopped() && h.addEventListener(p, Dt),
                n[p](),
                t.isPropagationStopped() && h.removeEventListener(p, Dt),
                pe.event.triggered = void 0,
                r && (n[u] = r)),
                t.result
            }
        },
        simulate: function(e, t, i) {
            var n = pe.extend(new pe.Event, i, {
                type: e,
                isSimulated: !0
            });
            pe.event.trigger(n, null, t)
        }
    }),
    pe.fn.extend({
        trigger: function(e, t) {
            return this.each((function() {
                pe.event.trigger(e, t, this)
            }
            ))
        },
        triggerHandler: function(e, t) {
            var i = this[0];
            if (i)
                return pe.event.trigger(e, t, i, !0)
        }
    }),
    le.focusin || pe.each({
        focus: "focusin",
        blur: "focusout"
    }, (function(e, t) {
        var i = function(e) {
            pe.event.simulate(t, e.target, pe.event.fix(e))
        };
        pe.event.special[t] = {
            setup: function() {
                var n = this.ownerDocument || this.document || this
                  , s = Ae.access(n, t);
                s || n.addEventListener(e, i, !0),
                Ae.access(n, t, (s || 0) + 1)
            },
            teardown: function() {
                var n = this.ownerDocument || this.document || this
                  , s = Ae.access(n, t) - 1;
                s ? Ae.access(n, t, s) : (n.removeEventListener(e, i, !0),
                Ae.remove(n, t))
            }
        }
    }
    ));
    var Tt = e.location
      , St = {
        guid: Date.now()
    }
      , It = /\?/;
    pe.parseXML = function(t) {
        var i;
        if (!t || "string" != typeof t)
            return null;
        try {
            i = (new e.DOMParser).parseFromString(t, "text/xml")
        } catch (t) {
            i = void 0
        }
        return i && !i.getElementsByTagName("parsererror").length || pe.error("Invalid XML: " + t),
        i
    }
    ;
    var Pt = /\[\]$/
      , Et = /\r?\n/g
      , At = /^(?:submit|button|image|reset|file)$/i
      , Mt = /^(?:input|select|textarea|keygen)/i;
    pe.param = function(e, t) {
        var i, n = [], s = function(e, t) {
            var i = ue(t) ? t() : t;
            n[n.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == i ? "" : i)
        };
        if (null == e)
            return "";
        if (Array.isArray(e) || e.jquery && !pe.isPlainObject(e))
            pe.each(e, (function() {
                s(this.name, this.value)
            }
            ));
        else
            for (i in e)
                V(i, e[i], t, s);
        return n.join("&")
    }
    ,
    pe.fn.extend({
        serialize: function() {
            return pe.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map((function() {
                var e = pe.prop(this, "elements");
                return e ? pe.makeArray(e) : this
            }
            )).filter((function() {
                var e = this.type;
                return this.name && !pe(this).is(":disabled") && Mt.test(this.nodeName) && !At.test(e) && (this.checked || !Ue.test(e))
            }
            )).map((function(e, t) {
                var i = pe(this).val();
                return null == i ? null : Array.isArray(i) ? pe.map(i, (function(e) {
                    return {
                        name: t.name,
                        value: e.replace(Et, "\r\n")
                    }
                }
                )) : {
                    name: t.name,
                    value: i.replace(Et, "\r\n")
                }
            }
            )).get()
        }
    });
    var Nt = /%20/g
      , $t = /#.*$/
      , Ot = /([?&])_=[^&]*/
      , Lt = /^(.*?):[ \t]*([^\r\n]*)$/gm
      , jt = /^(?:GET|HEAD)$/
      , Ht = /^\/\//
      , Ft = {}
      , zt = {}
      , Rt = "*/".concat("*")
      , Wt = ce.createElement("a");
    Wt.href = Tt.href,
    pe.extend({
        active: 0,
        lastModified: {},
        etag: {},
        ajaxSettings: {
            url: Tt.href,
            type: "GET",
            isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),
            global: !0,
            processData: !0,
            async: !0,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            accepts: {
                "*": Rt,
                text: "text/plain",
                html: "text/html",
                xml: "application/xml, text/xml",
                json: "application/json, text/javascript"
            },
            contents: {
                xml: /\bxml\b/,
                html: /\bhtml/,
                json: /\bjson\b/
            },
            responseFields: {
                xml: "responseXML",
                text: "responseText",
                json: "responseJSON"
            },
            converters: {
                "* text": String,
                "text html": !0,
                "text json": JSON.parse,
                "text xml": pe.parseXML
            },
            flatOptions: {
                url: !0,
                context: !0
            }
        },
        ajaxSetup: function(e, t) {
            return t ? X(X(e, pe.ajaxSettings), t) : X(pe.ajaxSettings, e)
        },
        ajaxPrefilter: K(Ft),
        ajaxTransport: K(zt),
        ajax: function(t, i) {
            function n(t, i, n, r) {
                var u, h, f, _, w, x = i;
                d || (d = !0,
                l && e.clearTimeout(l),
                s = void 0,
                a = r || "",
                k.readyState = 0 < t ? 4 : 0,
                u = 200 <= t && t < 300 || 304 === t,
                n && (_ = function(e, t, i) {
                    for (var n, s, o, a, r = e.contents, l = e.dataTypes; "*" === l[0]; )
                        l.shift(),
                        void 0 === n && (n = e.mimeType || t.getResponseHeader("Content-Type"));
                    if (n)
                        for (s in r)
                            if (r[s] && r[s].test(n)) {
                                l.unshift(s);
                                break
                            }
                    if (l[0]in i)
                        o = l[0];
                    else {
                        for (s in i) {
                            if (!l[0] || e.converters[s + " " + l[0]]) {
                                o = s;
                                break
                            }
                            a || (a = s)
                        }
                        o = o || a
                    }
                    if (o)
                        return o !== l[0] && l.unshift(o),
                        i[o]
                }(p, k, n)),
                !u && -1 < pe.inArray("script", p.dataTypes) && (p.converters["text script"] = function() {}
                ),
                _ = function(e, t, i, n) {
                    var s, o, a, r, l, u = {}, d = e.dataTypes.slice();
                    if (d[1])
                        for (a in e.converters)
                            u[a.toLowerCase()] = e.converters[a];
                    for (o = d.shift(); o; )
                        if (e.responseFields[o] && (i[e.responseFields[o]] = t),
                        !l && n && e.dataFilter && (t = e.dataFilter(t, e.dataType)),
                        l = o,
                        o = d.shift())
                            if ("*" === o)
                                o = l;
                            else if ("*" !== l && l !== o) {
                                if (!(a = u[l + " " + o] || u["* " + o]))
                                    for (s in u)
                                        if ((r = s.split(" "))[1] === o && (a = u[l + " " + r[0]] || u["* " + r[0]])) {
                                            !0 === a ? a = u[s] : !0 !== u[s] && (o = r[0],
                                            d.unshift(r[1]));
                                            break
                                        }
                                if (!0 !== a)
                                    if (a && e.throws)
                                        t = a(t);
                                    else
                                        try {
                                            t = a(t)
                                        } catch (e) {
                                            return {
                                                state: "parsererror",
                                                error: a ? e : "No conversion from " + l + " to " + o
                                            }
                                        }
                            }
                    return {
                        state: "success",
                        data: t
                    }
                }(p, _, k, u),
                u ? (p.ifModified && ((w = k.getResponseHeader("Last-Modified")) && (pe.lastModified[o] = w),
                (w = k.getResponseHeader("etag")) && (pe.etag[o] = w)),
                204 === t || "HEAD" === p.type ? x = "nocontent" : 304 === t ? x = "notmodified" : (x = _.state,
                h = _.data,
                u = !(f = _.error))) : (f = x,
                !t && x || (x = "error",
                t < 0 && (t = 0))),
                k.status = t,
                k.statusText = (i || x) + "",
                u ? v.resolveWith(m, [h, x, k]) : v.rejectWith(m, [k, x, f]),
                k.statusCode(y),
                y = void 0,
                c && g.trigger(u ? "ajaxSuccess" : "ajaxError", [k, p, u ? h : f]),
                b.fireWith(m, [k, x]),
                c && (g.trigger("ajaxComplete", [k, p]),
                --pe.active || pe.event.trigger("ajaxStop")))
            }
            "object" == typeof t && (i = t,
            t = void 0),
            i = i || {};
            var s, o, a, r, l, u, d, c, h, f, p = pe.ajaxSetup({}, i), m = p.context || p, g = p.context && (m.nodeType || m.jquery) ? pe(m) : pe.event, v = pe.Deferred(), b = pe.Callbacks("once memory"), y = p.statusCode || {}, _ = {}, w = {}, x = "canceled", k = {
                readyState: 0,
                getResponseHeader: function(e) {
                    var t;
                    if (d) {
                        if (!r)
                            for (r = {}; t = Lt.exec(a); )
                                r[t[1].toLowerCase() + " "] = (r[t[1].toLowerCase() + " "] || []).concat(t[2]);
                        t = r[e.toLowerCase() + " "]
                    }
                    return null == t ? null : t.join(", ")
                },
                getAllResponseHeaders: function() {
                    return d ? a : null
                },
                setRequestHeader: function(e, t) {
                    return null == d && (e = w[e.toLowerCase()] = w[e.toLowerCase()] || e,
                    _[e] = t),
                    this
                },
                overrideMimeType: function(e) {
                    return null == d && (p.mimeType = e),
                    this
                },
                statusCode: function(e) {
                    var t;
                    if (e)
                        if (d)
                            k.always(e[k.status]);
                        else
                            for (t in e)
                                y[t] = [y[t], e[t]];
                    return this
                },
                abort: function(e) {
                    var t = e || x;
                    return s && s.abort(t),
                    n(0, t),
                    this
                }
            };
            if (v.promise(k),
            p.url = ((t || p.url || Tt.href) + "").replace(Ht, Tt.protocol + "//"),
            p.type = i.method || i.type || p.method || p.type,
            p.dataTypes = (p.dataType || "*").toLowerCase().match(Ce) || [""],
            null == p.crossDomain) {
                u = ce.createElement("a");
                try {
                    u.href = p.url,
                    u.href = u.href,
                    p.crossDomain = Wt.protocol + "//" + Wt.host != u.protocol + "//" + u.host
                } catch (t) {
                    p.crossDomain = !0
                }
            }
            if (p.data && p.processData && "string" != typeof p.data && (p.data = pe.param(p.data, p.traditional)),
            Q(Ft, p, i, k),
            d)
                return k;
            for (h in (c = pe.event && p.global) && 0 == pe.active++ && pe.event.trigger("ajaxStart"),
            p.type = p.type.toUpperCase(),
            p.hasContent = !jt.test(p.type),
            o = p.url.replace($t, ""),
            p.hasContent ? p.data && p.processData && 0 === (p.contentType || "").indexOf("application/x-www-form-urlencoded") && (p.data = p.data.replace(Nt, "+")) : (f = p.url.slice(o.length),
            p.data && (p.processData || "string" == typeof p.data) && (o += (It.test(o) ? "&" : "?") + p.data,
            delete p.data),
            !1 === p.cache && (o = o.replace(Ot, "$1"),
            f = (It.test(o) ? "&" : "?") + "_=" + St.guid++ + f),
            p.url = o + f),
            p.ifModified && (pe.lastModified[o] && k.setRequestHeader("If-Modified-Since", pe.lastModified[o]),
            pe.etag[o] && k.setRequestHeader("If-None-Match", pe.etag[o])),
            (p.data && p.hasContent && !1 !== p.contentType || i.contentType) && k.setRequestHeader("Content-Type", p.contentType),
            k.setRequestHeader("Accept", p.dataTypes[0] && p.accepts[p.dataTypes[0]] ? p.accepts[p.dataTypes[0]] + ("*" !== p.dataTypes[0] ? ", " + Rt + "; q=0.01" : "") : p.accepts["*"]),
            p.headers)
                k.setRequestHeader(h, p.headers[h]);
            if (p.beforeSend && (!1 === p.beforeSend.call(m, k, p) || d))
                return k.abort();
            if (x = "abort",
            b.add(p.complete),
            k.done(p.success),
            k.fail(p.error),
            s = Q(zt, p, i, k)) {
                if (k.readyState = 1,
                c && g.trigger("ajaxSend", [k, p]),
                d)
                    return k;
                p.async && 0 < p.timeout && (l = e.setTimeout((function() {
                    k.abort("timeout")
                }
                ), p.timeout));
                try {
                    d = !1,
                    s.send(_, n)
                } catch (t) {
                    if (d)
                        throw t;
                    n(-1, t)
                }
            } else
                n(-1, "No Transport");
            return k
        },
        getJSON: function(e, t, i) {
            return pe.get(e, t, i, "json")
        },
        getScript: function(e, t) {
            return pe.get(e, void 0, t, "script")
        }
    }),
    pe.each(["get", "post"], (function(e, t) {
        pe[t] = function(e, i, n, s) {
            return ue(i) && (s = s || n,
            n = i,
            i = void 0),
            pe.ajax(pe.extend({
                url: e,
                type: t,
                dataType: s,
                data: i,
                success: n
            }, pe.isPlainObject(e) && e))
        }
    }
    )),
    pe.ajaxPrefilter((function(e) {
        var t;
        for (t in e.headers)
            "content-type" === t.toLowerCase() && (e.contentType = e.headers[t] || "")
    }
    )),
    pe._evalUrl = function(e, t, i) {
        return pe.ajax({
            url: e,
            type: "GET",
            dataType: "script",
            cache: !0,
            async: !1,
            global: !1,
            converters: {
                "text script": function() {}
            },
            dataFilter: function(e) {
                pe.globalEval(e, t, i)
            }
        })
    }
    ,
    pe.fn.extend({
        wrapAll: function(e) {
            var t;
            return this[0] && (ue(e) && (e = e.call(this[0])),
            t = pe(e, this[0].ownerDocument).eq(0).clone(!0),
            this[0].parentNode && t.insertBefore(this[0]),
            t.map((function() {
                for (var e = this; e.firstElementChild; )
                    e = e.firstElementChild;
                return e
            }
            )).append(this)),
            this
        },
        wrapInner: function(e) {
            return ue(e) ? this.each((function(t) {
                pe(this).wrapInner(e.call(this, t))
            }
            )) : this.each((function() {
                var t = pe(this)
                  , i = t.contents();
                i.length ? i.wrapAll(e) : t.append(e)
            }
            ))
        },
        wrap: function(e) {
            var t = ue(e);
            return this.each((function(i) {
                pe(this).wrapAll(t ? e.call(this, i) : e)
            }
            ))
        },
        unwrap: function(e) {
            return this.parent(e).not("body").each((function() {
                pe(this).replaceWith(this.childNodes)
            }
            )),
            this
        }
    }),
    pe.expr.pseudos.hidden = function(e) {
        return !pe.expr.pseudos.visible(e)
    }
    ,
    pe.expr.pseudos.visible = function(e) {
        return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length)
    }
    ,
    pe.ajaxSettings.xhr = function() {
        try {
            return new e.XMLHttpRequest
        } catch (e) {}
    }
    ;
    var qt = {
        0: 200,
        1223: 204
    }
      , Bt = pe.ajaxSettings.xhr();
    le.cors = !!Bt && "withCredentials"in Bt,
    le.ajax = Bt = !!Bt,
    pe.ajaxTransport((function(t) {
        var i, n;
        if (le.cors || Bt && !t.crossDomain)
            return {
                send: function(s, o) {
                    var a, r = t.xhr();
                    if (r.open(t.type, t.url, t.async, t.username, t.password),
                    t.xhrFields)
                        for (a in t.xhrFields)
                            r[a] = t.xhrFields[a];
                    for (a in t.mimeType && r.overrideMimeType && r.overrideMimeType(t.mimeType),
                    t.crossDomain || s["X-Requested-With"] || (s["X-Requested-With"] = "XMLHttpRequest"),
                    s)
                        r.setRequestHeader(a, s[a]);
                    i = function(e) {
                        return function() {
                            i && (i = n = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null,
                            "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? o(0, "error") : o(r.status, r.statusText) : o(qt[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? {
                                binary: r.response
                            } : {
                                text: r.responseText
                            }, r.getAllResponseHeaders()))
                        }
                    }
                    ,
                    r.onload = i(),
                    n = r.onerror = r.ontimeout = i("error"),
                    void 0 !== r.onabort ? r.onabort = n : r.onreadystatechange = function() {
                        4 === r.readyState && e.setTimeout((function() {
                            i && n()
                        }
                        ))
                    }
                    ,
                    i = i("abort");
                    try {
                        r.send(t.hasContent && t.data || null)
                    } catch (s) {
                        if (i)
                            throw s
                    }
                },
                abort: function() {
                    i && i()
                }
            }
    }
    )),
    pe.ajaxPrefilter((function(e) {
        e.crossDomain && (e.contents.script = !1)
    }
    )),
    pe.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /\b(?:java|ecma)script\b/
        },
        converters: {
            "text script": function(e) {
                return pe.globalEval(e),
                e
            }
        }
    }),
    pe.ajaxPrefilter("script", (function(e) {
        void 0 === e.cache && (e.cache = !1),
        e.crossDomain && (e.type = "GET")
    }
    )),
    pe.ajaxTransport("script", (function(e) {
        var t, i;
        if (e.crossDomain || e.scriptAttrs)
            return {
                send: function(n, s) {
                    t = pe("<script>").attr(e.scriptAttrs || {}).prop({
                        charset: e.scriptCharset,
                        src: e.url
                    }).on("load error", i = function(e) {
                        t.remove(),
                        i = null,
                        e && s("error" === e.type ? 404 : 200, e.type)
                    }
                    ),
                    ce.head.appendChild(t[0])
                },
                abort: function() {
                    i && i()
                }
            }
    }
    ));
    var Ut, Yt = [], Vt = /(=)\?(?=&|$)|\?\?/;
    pe.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            var e = Yt.pop() || pe.expando + "_" + St.guid++;
            return this[e] = !0,
            e
        }
    }),
    pe.ajaxPrefilter("json jsonp", (function(t, i, n) {
        var s, o, a, r = !1 !== t.jsonp && (Vt.test(t.url) ? "url" : "string" == typeof t.data && 0 === (t.contentType || "").indexOf("application/x-www-form-urlencoded") && Vt.test(t.data) && "data");
        if (r || "jsonp" === t.dataTypes[0])
            return s = t.jsonpCallback = ue(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback,
            r ? t[r] = t[r].replace(Vt, "$1" + s) : !1 !== t.jsonp && (t.url += (It.test(t.url) ? "&" : "?") + t.jsonp + "=" + s),
            t.converters["script json"] = function() {
                return a || pe.error(s + " was not called"),
                a[0]
            }
            ,
            t.dataTypes[0] = "json",
            o = e[s],
            e[s] = function() {
                a = arguments
            }
            ,
            n.always((function() {
                void 0 === o ? pe(e).removeProp(s) : e[s] = o,
                t[s] && (t.jsonpCallback = i.jsonpCallback,
                Yt.push(s)),
                a && ue(o) && o(a[0]),
                a = o = void 0
            }
            )),
            "script"
    }
    )),
    le.createHTMLDocument = ((Ut = ce.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>",
    2 === Ut.childNodes.length),
    pe.parseHTML = function(e, t, i) {
        return "string" != typeof e ? [] : ("boolean" == typeof t && (i = t,
        t = !1),
        t || (le.createHTMLDocument ? ((n = (t = ce.implementation.createHTMLDocument("")).createElement("base")).href = ce.location.href,
        t.head.appendChild(n)) : t = ce),
        o = !i && [],
        (s = ye.exec(e)) ? [t.createElement(s[1])] : (s = _([e], t, o),
        o && o.length && pe(o).remove(),
        pe.merge([], s.childNodes)));
        var n, s, o
    }
    ,
    pe.fn.load = function(e, t, i) {
        var n, s, o, a = this, r = e.indexOf(" ");
        return -1 < r && (n = B(e.slice(r)),
        e = e.slice(0, r)),
        ue(t) ? (i = t,
        t = void 0) : t && "object" == typeof t && (s = "POST"),
        0 < a.length && pe.ajax({
            url: e,
            type: s || "GET",
            dataType: "html",
            data: t
        }).done((function(e) {
            o = arguments,
            a.php(n ? pe("<div>").append(pe.parseHTML(e)).find(n) : e)
        }
        )).always(i && function(e, t) {
            a.each((function() {
                i.apply(this, o || [e.responseText, t, e])
            }
            ))
        }
        ),
        this
    }
    ,
    pe.expr.pseudos.animated = function(e) {
        return pe.grep(pe.timers, (function(t) {
            return e === t.elem
        }
        )).length
    }
    ,
    pe.offset = {
        setOffset: function(e, t, i) {
            var n, s, o, a, r, l, u = pe.css(e, "position"), d = pe(e), c = {};
            "static" === u && (e.style.position = "relative"),
            r = d.offset(),
            o = pe.css(e, "top"),
            l = pe.css(e, "left"),
            ("absolute" === u || "fixed" === u) && -1 < (o + l).indexOf("auto") ? (a = (n = d.position()).top,
            s = n.left) : (a = parseFloat(o) || 0,
            s = parseFloat(l) || 0),
            ue(t) && (t = t.call(e, i, pe.extend({}, r))),
            null != t.top && (c.top = t.top - r.top + a),
            null != t.left && (c.left = t.left - r.left + s),
            "using"in t ? t.using.call(e, c) : ("number" == typeof c.top && (c.top += "px"),
            "number" == typeof c.left && (c.left += "px"),
            d.css(c))
        }
    },
    pe.fn.extend({
        offset: function(e) {
            if (arguments.length)
                return void 0 === e ? this : this.each((function(t) {
                    pe.offset.setOffset(this, e, t)
                }
                ));
            var t, i, n = this[0];
            return n ? n.getClientRects().length ? (t = n.getBoundingClientRect(),
            i = n.ownerDocument.defaultView,
            {
                top: t.top + i.pageYOffset,
                left: t.left + i.pageXOffset
            }) : {
                top: 0,
                left: 0
            } : void 0
        },
        position: function() {
            if (this[0]) {
                var e, t, i, n = this[0], s = {
                    top: 0,
                    left: 0
                };
                if ("fixed" === pe.css(n, "position"))
                    t = n.getBoundingClientRect();
                else {
                    for (t = this.offset(),
                    i = n.ownerDocument,
                    e = n.offsetParent || i.documentElement; e && (e === i.body || e === i.documentElement) && "static" === pe.css(e, "position"); )
                        e = e.parentNode;
                    e && e !== n && 1 === e.nodeType && ((s = pe(e).offset()).top += pe.css(e, "borderTopWidth", !0),
                    s.left += pe.css(e, "borderLeftWidth", !0))
                }
                return {
                    top: t.top - s.top - pe.css(n, "marginTop", !0),
                    left: t.left - s.left - pe.css(n, "marginLeft", !0)
                }
            }
        },
        offsetParent: function() {
            return this.map((function() {
                for (var e = this.offsetParent; e && "static" === pe.css(e, "position"); )
                    e = e.offsetParent;
                return e || He
            }
            ))
        }
    }),
    pe.each({
        scrollLeft: "pageXOffset",
        scrollTop: "pageYOffset"
    }, (function(e, t) {
        var i = "pageYOffset" === t;
        pe.fn[e] = function(n) {
            return Se(this, (function(e, n, s) {
                var o;
                if (de(e) ? o = e : 9 === e.nodeType && (o = e.defaultView),
                void 0 === s)
                    return o ? o[t] : e[n];
                o ? o.scrollTo(i ? o.pageXOffset : s, i ? s : o.pageYOffset) : e[n] = s
            }
            ), e, n, arguments.length)
        }
    }
    )),
    pe.each(["top", "left"], (function(e, t) {
        pe.cssHooks[t] = N(le.pixelPosition, (function(e, i) {
            if (i)
                return i = M(e, t),
                it.test(i) ? pe(e).position()[t] + "px" : i
        }
        ))
    }
    )),
    pe.each({
        Height: "height",
        Width: "width"
    }, (function(e, t) {
        pe.each({
            padding: "inner" + e,
            content: t,
            "": "outer" + e
        }, (function(i, n) {
            pe.fn[n] = function(s, o) {
                var a = arguments.length && (i || "boolean" != typeof s)
                  , r = i || (!0 === s || !0 === o ? "margin" : "border");
                return Se(this, (function(t, i, s) {
                    var o;
                    return de(t) ? 0 === n.indexOf("outer") ? t["inner" + e] : t.document.documentElement["client" + e] : 9 === t.nodeType ? (o = t.documentElement,
                    Math.max(t.body["scroll" + e], o["scroll" + e], t.body["offset" + e], o["offset" + e], o["client" + e])) : void 0 === s ? pe.css(t, i, r) : pe.style(t, i, s, r)
                }
                ), t, a ? s : void 0, a)
            }
        }
        ))
    }
    )),
    pe.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], (function(e, t) {
        pe.fn[t] = function(e) {
            return this.on(t, e)
        }
    }
    )),
    pe.fn.extend({
        bind: function(e, t, i) {
            return this.on(e, null, t, i)
        },
        unbind: function(e, t) {
            return this.off(e, null, t)
        },
        delegate: function(e, t, i, n) {
            return this.on(t, e, i, n)
        },
        undelegate: function(e, t, i) {
            return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", i)
        },
        hover: function(e, t) {
            return this.mouseenter(e).mouseleave(t || e)
        }
    }),
    pe.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), (function(e, t) {
        pe.fn[t] = function(e, i) {
            return 0 < arguments.length ? this.on(t, null, e, i) : this.trigger(t)
        }
    }
    ));
    var Kt = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
    pe.proxy = function(e, t) {
        var i, n, s;
        if ("string" == typeof t && (i = e[t],
        t = e,
        e = i),
        ue(e))
            return n = J.call(arguments, 2),
            (s = function() {
                return e.apply(t || this, n.concat(J.call(arguments)))
            }
            ).guid = e.guid = e.guid || pe.guid++,
            s
    }
    ,
    pe.holdReady = function(e) {
        e ? pe.readyWait++ : pe.ready(!0)
    }
    ,
    pe.isArray = Array.isArray,
    pe.parseJSON = JSON.parse,
    pe.nodeName = o,
    pe.isFunction = ue,
    pe.isWindow = de,
    pe.camelCase = f,
    pe.type = n,
    pe.now = Date.now,
    pe.isNumeric = function(e) {
        var t = pe.type(e);
        return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e))
    }
    ,
    pe.trim = function(e) {
        return null == e ? "" : (e + "").replace(Kt, "")
    }
    ,
    "function" == typeof define && define.amd && define("jquery", [], (function() {
        return pe
    }
    ));
    var Qt = e.jQuery
      , Xt = e.$;
    return pe.noConflict = function(t) {
        return e.$ === pe && (e.$ = Xt),
        t && e.jQuery === pe && (e.jQuery = Qt),
        pe
    }
    ,
    void 0 === t && (e.jQuery = e.$ = pe),
    pe
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : e(jQuery)
}((function(e) {
    return e.ui = e.ui || {},
    e.ui.version = "1.12.1"
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.extend(e.expr[":"], {
        data: e.expr.createPseudo ? e.expr.createPseudo((function(t) {
            return function(i) {
                return !!e.data(i, t)
            }
        }
        )) : function(t, i, n) {
            return !!e.data(t, n[3])
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.fn.extend({
        disableSelection: (t = "onselectstart"in document.createElement("div") ? "selectstart" : "mousedown",
        function() {
            return this.on(t + ".ui-disableSelection", (function(e) {
                e.preventDefault()
            }
            ))
        }
        ),
        enableSelection: function() {
            return this.off(".ui-disableSelection")
        }
    });
    var t
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    function t(e) {
        for (var t = e.css("visibility"); "inherit" === t; )
            t = (e = e.parent()).css("visibility");
        return "hidden" !== t
    }
    return e.ui.focusable = function(i, n) {
        var s, o, a, r, l, u = i.nodeName.toLowerCase();
        return "area" === u ? (o = (s = i.parentNode).name,
        !(!i.href || !o || "map" !== s.nodeName.toLowerCase()) && ((a = e("img[usemap='#" + o + "']")).length > 0 && a.is(":visible"))) : (/^(input|select|textarea|button|object)$/.test(u) ? (r = !i.disabled) && (l = e(i).closest("fieldset")[0]) && (r = !l.disabled) : r = "a" === u && i.href || n,
        r && e(i).is(":visible") && t(e(i)))
    }
    ,
    e.extend(e.expr[":"], {
        focusable: function(t) {
            return e.ui.focusable(t, null != e.attr(t, "tabindex"))
        }
    }),
    e.ui.focusable
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.fn.form = function() {
        return "string" == typeof this[0].form ? this.closest("form") : e(this[0].form)
    }
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase())
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.ui.keyCode = {
        BACKSPACE: 8,
        COMMA: 188,
        DELETE: 46,
        DOWN: 40,
        END: 35,
        ENTER: 13,
        ESCAPE: 27,
        HOME: 36,
        LEFT: 37,
        PAGE_DOWN: 34,
        PAGE_UP: 33,
        PERIOD: 190,
        RIGHT: 39,
        SPACE: 32,
        TAB: 9,
        UP: 38
    }
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.ui.escapeSelector = (t = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g,
    function(e) {
        return e.replace(t, "\\$1")
    }
    );
    var t
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version", "./escape-selector"], e) : e(jQuery)
}((function(e) {
    return e.fn.labels = function() {
        var t, i, n, s, o;
        return this[0].labels && this[0].labels.length ? this.pushStack(this[0].labels) : (s = this.eq(0).parents("label"),
        (n = this.attr("id")) && (o = (t = this.eq(0).parents().last()).add(t.length ? t.siblings() : this.siblings()),
        i = "label[for='" + e.ui.escapeSelector(n) + "']",
        s = s.add(o.find(i).addBack(i))),
        this.pushStack(s))
    }
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    "1.7" === e.fn.jquery.substring(0, 3) && (e.each(["Width", "Height"], (function(t, i) {
        function n(t, i, n, o) {
            return e.each(s, (function() {
                i -= parseFloat(e.css(t, "padding" + this)) || 0,
                n && (i -= parseFloat(e.css(t, "border" + this + "Width")) || 0),
                o && (i -= parseFloat(e.css(t, "margin" + this)) || 0)
            }
            )),
            i
        }
        var s = "Width" === i ? ["Left", "Right"] : ["Top", "Bottom"]
          , o = i.toLowerCase()
          , a = {
            innerWidth: e.fn.innerWidth,
            innerHeight: e.fn.innerHeight,
            outerWidth: e.fn.outerWidth,
            outerHeight: e.fn.outerHeight
        };
        e.fn["inner" + i] = function(t) {
            return void 0 === t ? a["inner" + i].call(this) : this.each((function() {
                e(this).css(o, n(this, t) + "px")
            }
            ))
        }
        ,
        e.fn["outer" + i] = function(t, s) {
            return "number" != typeof t ? a["outer" + i].call(this, t) : this.each((function() {
                e(this).css(o, n(this, t, !0, s) + "px")
            }
            ))
        }
    }
    )),
    e.fn.addBack = function(e) {
        return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
    }
    )
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.ui.plugin = {
        add: function(t, i, n) {
            var s, o = e.ui[t].prototype;
            for (s in n)
                o.plugins[s] = o.plugins[s] || [],
                o.plugins[s].push([i, n[s]])
        },
        call: function(e, t, i, n) {
            var s, o = e.plugins[t];
            if (o && (n || e.element[0].parentNode && 11 !== e.element[0].parentNode.nodeType))
                for (s = 0; s < o.length; s++)
                    e.options[o[s][0]] && o[s][1].apply(e.element, i)
        }
    }
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.ui.safeActiveElement = function(e) {
        var t;
        try {
            t = e.activeElement
        } catch (i) {
            t = e.body
        }
        return t || (t = e.body),
        t.nodeName || (t = e.body),
        t
    }
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.ui.safeBlur = function(t) {
        t && "body" !== t.nodeName.toLowerCase() && e(t).trigger("blur")
    }
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.fn.scrollParent = function(t) {
        var i = this.css("position")
          , n = "absolute" === i
          , s = t ? /(auto|scroll|hidden)/ : /(auto|scroll)/
          , o = this.parents().filter((function() {
            var t = e(this);
            return (!n || "static" !== t.css("position")) && s.test(t.css("overflow") + t.css("overflow-y") + t.css("overflow-x"))
        }
        )).eq(0);
        return "fixed" !== i && o.length ? o : e(this[0].ownerDocument || document)
    }
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version", "./focusable"], e) : e(jQuery)
}((function(e) {
    return e.extend(e.expr[":"], {
        tabbable: function(t) {
            var i = e.attr(t, "tabindex")
              , n = null != i;
            return (!n || i >= 0) && e.ui.focusable(t, n)
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return e.fn.extend({
        uniqueId: (t = 0,
        function() {
            return this.each((function() {
                this.id || (this.id = "ui-id-" + ++t)
            }
            ))
        }
        ),
        removeUniqueId: function() {
            return this.each((function() {
                /^ui-id-\d+$/.test(this.id) && e(this).removeAttr("id")
            }
            ))
        }
    });
    var t
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    var t, i = "ui-effects-", n = "ui-effects-style", s = "ui-effects-animated", o = e;
    return e.effects = {
        effect: {}
    },
    function(e, t) {
        function i(e, t, i) {
            var n = c[t.type] || {};
            return null == e ? i || !t.def ? null : t.def : (e = n.floor ? ~~e : parseFloat(e),
            isNaN(e) ? t.def : n.mod ? (e + n.mod) % n.mod : 0 > e ? 0 : n.max < e ? n.max : e)
        }
        function n(t) {
            var i = u()
              , n = i._rgba = [];
            return t = t.toLowerCase(),
            p(l, (function(e, s) {
                var o, a = s.re.exec(t), r = a && s.parse(a), l = s.space || "rgba";
                if (r)
                    return o = i[l](r),
                    i[d[l].cache] = o[d[l].cache],
                    n = i._rgba = o._rgba,
                    !1
            }
            )),
            n.length ? ("0,0,0,0" === n.join() && e.extend(n, o.transparent),
            i) : o[t]
        }
        function s(e, t, i) {
            return 6 * (i = (i + 1) % 1) < 1 ? e + (t - e) * i * 6 : 2 * i < 1 ? t : 3 * i < 2 ? e + (t - e) * (2 / 3 - i) * 6 : e
        }
        var o, a = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", r = /^([\-+])=\s*(\d+\.?\d*)/, l = [{
            re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
            parse: function(e) {
                return [e[1], e[2], e[3], e[4]]
            }
        }, {
            re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
            parse: function(e) {
                return [2.55 * e[1], 2.55 * e[2], 2.55 * e[3], e[4]]
            }
        }, {
            re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
            parse: function(e) {
                return [parseInt(e[1], 16), parseInt(e[2], 16), parseInt(e[3], 16)]
            }
        }, {
            re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
            parse: function(e) {
                return [parseInt(e[1] + e[1], 16), parseInt(e[2] + e[2], 16), parseInt(e[3] + e[3], 16)]
            }
        }, {
            re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
            space: "hsla",
            parse: function(e) {
                return [e[1], e[2] / 100, e[3] / 100, e[4]]
            }
        }], u = e.Color = function(t, i, n, s) {
            return new e.Color.fn.parse(t,i,n,s)
        }
        , d = {
            rgba: {
                props: {
                    red: {
                        idx: 0,
                        type: "byte"
                    },
                    green: {
                        idx: 1,
                        type: "byte"
                    },
                    blue: {
                        idx: 2,
                        type: "byte"
                    }
                }
            },
            hsla: {
                props: {
                    hue: {
                        idx: 0,
                        type: "degrees"
                    },
                    saturation: {
                        idx: 1,
                        type: "percent"
                    },
                    lightness: {
                        idx: 2,
                        type: "percent"
                    }
                }
            }
        }, c = {
            byte: {
                floor: !0,
                max: 255
            },
            percent: {
                max: 1
            },
            degrees: {
                mod: 360,
                floor: !0
            }
        }, h = u.support = {}, f = e("<p>")[0], p = e.each;
        f.style.cssText = "background-color:rgba(1,1,1,.5)",
        h.rgba = f.style.backgroundColor.indexOf("rgba") > -1,
        p(d, (function(e, t) {
            t.cache = "_" + e,
            t.props.alpha = {
                idx: 3,
                type: "percent",
                def: 1
            }
        }
        )),
        u.fn = e.extend(u.prototype, {
            parse: function(s, a, r, l) {
                if (s === t)
                    return this._rgba = [null, null, null, null],
                    this;
                (s.jquery || s.nodeType) && (s = e(s).css(a),
                a = t);
                var c = this
                  , h = e.type(s)
                  , f = this._rgba = [];
                return a !== t && (s = [s, a, r, l],
                h = "array"),
                "string" === h ? this.parse(n(s) || o._default) : "array" === h ? (p(d.rgba.props, (function(e, t) {
                    f[t.idx] = i(s[t.idx], t)
                }
                )),
                this) : "object" === h ? (p(d, s instanceof u ? function(e, t) {
                    s[t.cache] && (c[t.cache] = s[t.cache].slice())
                }
                : function(t, n) {
                    var o = n.cache;
                    p(n.props, (function(e, t) {
                        if (!c[o] && n.to) {
                            if ("alpha" === e || null == s[e])
                                return;
                            c[o] = n.to(c._rgba)
                        }
                        c[o][t.idx] = i(s[e], t, !0)
                    }
                    )),
                    c[o] && e.inArray(null, c[o].slice(0, 3)) < 0 && (c[o][3] = 1,
                    n.from && (c._rgba = n.from(c[o])))
                }
                ),
                this) : void 0
            },
            is: function(e) {
                var t = u(e)
                  , i = !0
                  , n = this;
                return p(d, (function(e, s) {
                    var o, a = t[s.cache];
                    return a && (o = n[s.cache] || s.to && s.to(n._rgba) || [],
                    p(s.props, (function(e, t) {
                        if (null != a[t.idx])
                            return i = a[t.idx] === o[t.idx]
                    }
                    ))),
                    i
                }
                )),
                i
            },
            _space: function() {
                var e = []
                  , t = this;
                return p(d, (function(i, n) {
                    t[n.cache] && e.push(i)
                }
                )),
                e.pop()
            },
            transition: function(e, t) {
                var n = u(e)
                  , s = n._space()
                  , o = d[s]
                  , a = 0 === this.alpha() ? u("transparent") : this
                  , r = a[o.cache] || o.to(a._rgba)
                  , l = r.slice();
                return n = n[o.cache],
                p(o.props, (function(e, s) {
                    var o = s.idx
                      , a = r[o]
                      , u = n[o]
                      , d = c[s.type] || {};
                    null !== u && (null === a ? l[o] = u : (d.mod && (u - a > d.mod / 2 ? a += d.mod : a - u > d.mod / 2 && (a -= d.mod)),
                    l[o] = i((u - a) * t + a, s)))
                }
                )),
                this[s](l)
            },
            blend: function(t) {
                if (1 === this._rgba[3])
                    return this;
                var i = this._rgba.slice()
                  , n = i.pop()
                  , s = u(t)._rgba;
                return u(e.map(i, (function(e, t) {
                    return (1 - n) * s[t] + n * e
                }
                )))
            },
            toRgbaString: function() {
                var t = "rgba("
                  , i = e.map(this._rgba, (function(e, t) {
                    return null == e ? t > 2 ? 1 : 0 : e
                }
                ));
                return 1 === i[3] && (i.pop(),
                t = "rgb("),
                t + i.join() + ")"
            },
            toHslaString: function() {
                var t = "hsla("
                  , i = e.map(this.hsla(), (function(e, t) {
                    return null == e && (e = t > 2 ? 1 : 0),
                    t && t < 3 && (e = Math.round(100 * e) + "%"),
                    e
                }
                ));
                return 1 === i[3] && (i.pop(),
                t = "hsl("),
                t + i.join() + ")"
            },
            toHexString: function(t) {
                var i = this._rgba.slice()
                  , n = i.pop();
                return t && i.push(~~(255 * n)),
                "#" + e.map(i, (function(e) {
                    return 1 === (e = (e || 0).toString(16)).length ? "0" + e : e
                }
                )).join("")
            },
            toString: function() {
                return 0 === this._rgba[3] ? "transparent" : this.toRgbaString()
            }
        }),
        u.fn.parse.prototype = u.fn,
        d.hsla.to = function(e) {
            if (null == e[0] || null == e[1] || null == e[2])
                return [null, null, null, e[3]];
            var t, i, n = e[0] / 255, s = e[1] / 255, o = e[2] / 255, a = e[3], r = Math.max(n, s, o), l = Math.min(n, s, o), u = r - l, d = r + l, c = .5 * d;
            return t = l === r ? 0 : n === r ? 60 * (s - o) / u + 360 : s === r ? 60 * (o - n) / u + 120 : 60 * (n - s) / u + 240,
            i = 0 === u ? 0 : c <= .5 ? u / d : u / (2 - d),
            [Math.round(t) % 360, i, c, null == a ? 1 : a]
        }
        ,
        d.hsla.from = function(e) {
            if (null == e[0] || null == e[1] || null == e[2])
                return [null, null, null, e[3]];
            var t = e[0] / 360
              , i = e[1]
              , n = e[2]
              , o = e[3]
              , a = n <= .5 ? n * (1 + i) : n + i - n * i
              , r = 2 * n - a;
            return [Math.round(255 * s(r, a, t + 1 / 3)), Math.round(255 * s(r, a, t)), Math.round(255 * s(r, a, t - 1 / 3)), o]
        }
        ,
        p(d, (function(n, s) {
            var o = s.props
              , a = s.cache
              , l = s.to
              , d = s.from;
            u.fn[n] = function(n) {
                if (l && !this[a] && (this[a] = l(this._rgba)),
                n === t)
                    return this[a].slice();
                var s, r = e.type(n), c = "array" === r || "object" === r ? n : arguments, h = this[a].slice();
                return p(o, (function(e, t) {
                    var n = c["object" === r ? e : t.idx];
                    null == n && (n = h[t.idx]),
                    h[t.idx] = i(n, t)
                }
                )),
                d ? ((s = u(d(h)))[a] = h,
                s) : u(h)
            }
            ,
            p(o, (function(t, i) {
                u.fn[t] || (u.fn[t] = function(s) {
                    var o, a = e.type(s), l = "alpha" === t ? this._hsla ? "hsla" : "rgba" : n, u = this[l](), d = u[i.idx];
                    return "undefined" === a ? d : ("function" === a && (s = s.call(this, d),
                    a = e.type(s)),
                    null == s && i.empty ? this : ("string" === a && (o = r.exec(s)) && (s = d + parseFloat(o[2]) * ("+" === o[1] ? 1 : -1)),
                    u[i.idx] = s,
                    this[l](u)))
                }
                )
            }
            ))
        }
        )),
        u.hook = function(t) {
            var i = t.split(" ");
            p(i, (function(t, i) {
                e.cssHooks[i] = {
                    set: function(t, s) {
                        var o, a, r = "";
                        if ("transparent" !== s && ("string" !== e.type(s) || (o = n(s)))) {
                            if (s = u(o || s),
                            !h.rgba && 1 !== s._rgba[3]) {
                                for (a = "backgroundColor" === i ? t.parentNode : t; ("" === r || "transparent" === r) && a && a.style; )
                                    try {
                                        r = e.css(a, "backgroundColor"),
                                        a = a.parentNode
                                    } catch (e) {}
                                s = s.blend(r && "transparent" !== r ? r : "_default")
                            }
                            s = s.toRgbaString()
                        }
                        try {
                            t.style[i] = s
                        } catch (e) {}
                    }
                },
                e.fx.step[i] = function(t) {
                    t.colorInit || (t.start = u(t.elem, i),
                    t.end = u(t.end),
                    t.colorInit = !0),
                    e.cssHooks[i].set(t.elem, t.start.transition(t.end, t.pos))
                }
            }
            ))
        }
        ,
        u.hook(a),
        e.cssHooks.borderColor = {
            expand: function(e) {
                var t = {};
                return p(["Top", "Right", "Bottom", "Left"], (function(i, n) {
                    t["border" + n + "Color"] = e
                }
                )),
                t
            }
        },
        o = e.Color.names = {
            aqua: "#00ffff",
            black: "#000000",
            blue: "#0000ff",
            fuchsia: "#ff00ff",
            gray: "#808080",
            green: "#008000",
            lime: "#00ff00",
            maroon: "#800000",
            navy: "#000080",
            olive: "#808000",
            purple: "#800080",
            red: "#ff0000",
            silver: "#c0c0c0",
            teal: "#008080",
            white: "#ffffff",
            yellow: "#ffff00",
            transparent: [null, null, null, 0],
            _default: "#ffffff"
        }
    }(o),
    function() {
        function t(t) {
            var i, n, s = t.ownerDocument.defaultView ? t.ownerDocument.defaultView.getComputedStyle(t, null) : t.currentStyle, o = {};
            if (s && s.length && s[0] && s[s[0]])
                for (n = s.length; n--; )
                    "string" == typeof s[i = s[n]] && (o[e.camelCase(i)] = s[i]);
            else
                for (i in s)
                    "string" == typeof s[i] && (o[i] = s[i]);
            return o
        }
        function i(t, i) {
            var n, s, o = {};
            for (n in i)
                s = i[n],
                t[n] !== s && (a[n] || !e.fx.step[n] && isNaN(parseFloat(s)) || (o[n] = s));
            return o
        }
        var n, s = ["add", "remove", "toggle"], a = {
            border: 1,
            borderBottom: 1,
            borderColor: 1,
            borderLeft: 1,
            borderRight: 1,
            borderTop: 1,
            borderWidth: 1,
            margin: 1,
            padding: 1
        };
        e.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], (function(t, i) {
            e.fx.step[i] = function(e) {
                ("none" !== e.end && !e.setAttr || 1 === e.pos && !e.setAttr) && (o.style(e.elem, i, e.end),
                e.setAttr = !0)
            }
        }
        )),
        e.fn.addBack || (e.fn.addBack = function(e) {
            return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
        }
        ),
        e.effects.animateClass = function(n, o, a, r) {
            var l = e.speed(o, a, r);
            return this.queue((function() {
                var o, a = e(this), r = a.attr("class") || "", u = l.children ? a.find("*").addBack() : a;
                u = u.map((function() {
                    return {
                        el: e(this),
                        start: t(this)
                    }
                }
                )),
                (o = function() {
                    e.each(s, (function(e, t) {
                        n[t] && a[t + "Class"](n[t])
                    }
                    ))
                }
                )(),
                u = u.map((function() {
                    return this.end = t(this.el[0]),
                    this.diff = i(this.start, this.end),
                    this
                }
                )),
                a.attr("class", r),
                u = u.map((function() {
                    var t = this
                      , i = e.Deferred()
                      , n = e.extend({}, l, {
                        queue: !1,
                        complete: function() {
                            i.resolve(t)
                        }
                    });
                    return this.el.animate(this.diff, n),
                    i.promise()
                }
                )),
                e.when.apply(e, u.get()).done((function() {
                    o(),
                    e.each(arguments, (function() {
                        var t = this.el;
                        e.each(this.diff, (function(e) {
                            t.css(e, "")
                        }
                        ))
                    }
                    )),
                    l.complete.call(a[0])
                }
                ))
            }
            ))
        }
        ,
        e.fn.extend({
            addClass: (n = e.fn.addClass,
            function(t, i, s, o) {
                return i ? e.effects.animateClass.call(this, {
                    add: t
                }, i, s, o) : n.apply(this, arguments)
            }
            ),
            removeClass: function(t) {
                return function(i, n, s, o) {
                    return arguments.length > 1 ? e.effects.animateClass.call(this, {
                        remove: i
                    }, n, s, o) : t.apply(this, arguments)
                }
            }(e.fn.removeClass),
            toggleClass: function(t) {
                return function(i, n, s, o, a) {
                    return "boolean" == typeof n || void 0 === n ? s ? e.effects.animateClass.call(this, n ? {
                        add: i
                    } : {
                        remove: i
                    }, s, o, a) : t.apply(this, arguments) : e.effects.animateClass.call(this, {
                        toggle: i
                    }, n, s, o)
                }
            }(e.fn.toggleClass),
            switchClass: function(t, i, n, s, o) {
                return e.effects.animateClass.call(this, {
                    add: i,
                    remove: t
                }, n, s, o)
            }
        })
    }(),
    function() {
        function t(t, i, n, s) {
            return e.isPlainObject(t) && (i = t,
            t = t.effect),
            t = {
                effect: t
            },
            null == i && (i = {}),
            e.isFunction(i) && (s = i,
            n = null,
            i = {}),
            ("number" == typeof i || e.fx.speeds[i]) && (s = n,
            n = i,
            i = {}),
            e.isFunction(n) && (s = n,
            n = null),
            i && e.extend(t, i),
            n = n || i.duration,
            t.duration = e.fx.off ? 0 : "number" == typeof n ? n : n in e.fx.speeds ? e.fx.speeds[n] : e.fx.speeds._default,
            t.complete = s || i.complete,
            t
        }
        function o(t) {
            return !(t && "number" != typeof t && !e.fx.speeds[t]) || ("string" == typeof t && !e.effects.effect[t] || (!!e.isFunction(t) || "object" == typeof t && !t.effect))
        }
        function a(e, t) {
            var i = t.outerWidth()
              , n = t.outerHeight()
              , s = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/.exec(e) || ["", 0, i, n, 0];
            return {
                top: parseFloat(s[1]) || 0,
                right: "auto" === s[2] ? i : parseFloat(s[2]),
                bottom: "auto" === s[3] ? n : parseFloat(s[3]),
                left: parseFloat(s[4]) || 0
            }
        }
        var r;
        e.expr && e.expr.filters && e.expr.filters.animated && (e.expr.filters.animated = (r = e.expr.filters.animated,
        function(t) {
            return !!e(t).data(s) || r(t)
        }
        )),
        !1 !== e.uiBackCompat && e.extend(e.effects, {
            save: function(e, t) {
                for (var n = 0, s = t.length; n < s; n++)
                    null !== t[n] && e.data(i + t[n], e[0].style[t[n]])
            },
            restore: function(e, t) {
                for (var n, s = 0, o = t.length; s < o; s++)
                    null !== t[s] && (n = e.data(i + t[s]),
                    e.css(t[s], n))
            },
            setMode: function(e, t) {
                return "toggle" === t && (t = e.is(":hidden") ? "show" : "hide"),
                t
            },
            createWrapper: function(t) {
                if (t.parent().is(".ui-effects-wrapper"))
                    return t.parent();
                var i = {
                    width: t.outerWidth(!0),
                    height: t.outerHeight(!0),
                    float: t.css("float")
                }
                  , n = e("<div></div>").addClass("ui-effects-wrapper").css({
                    fontSize: "100%",
                    background: "transparent",
                    border: "none",
                    margin: 0,
                    padding: 0
                })
                  , s = {
                    width: t.width(),
                    height: t.height()
                }
                  , o = document.activeElement;
                try {
                    o.id
                } catch (e) {
                    o = document.body
                }
                return t.wrap(n),
                (t[0] === o || e.contains(t[0], o)) && e(o).trigger("focus"),
                n = t.parent(),
                "static" === t.css("position") ? (n.css({
                    position: "relative"
                }),
                t.css({
                    position: "relative"
                })) : (e.extend(i, {
                    position: t.css("position"),
                    zIndex: t.css("z-index")
                }),
                e.each(["top", "left", "bottom", "right"], (function(e, n) {
                    i[n] = t.css(n),
                    isNaN(parseInt(i[n], 10)) && (i[n] = "auto")
                }
                )),
                t.css({
                    position: "relative",
                    top: 0,
                    left: 0,
                    right: "auto",
                    bottom: "auto"
                })),
                t.css(s),
                n.css(i).show()
            },
            removeWrapper: function(t) {
                var i = document.activeElement;
                return t.parent().is(".ui-effects-wrapper") && (t.parent().replaceWith(t),
                (t[0] === i || e.contains(t[0], i)) && e(i).trigger("focus")),
                t
            }
        }),
        e.extend(e.effects, {
            version: "1.12.1",
            define: function(t, i, n) {
                return n || (n = i,
                i = "effect"),
                e.effects.effect[t] = n,
                e.effects.effect[t].mode = i,
                n
            },
            scaledDimensions: function(e, t, i) {
                if (0 === t)
                    return {
                        height: 0,
                        width: 0,
                        outerHeight: 0,
                        outerWidth: 0
                    };
                var n = "horizontal" !== i ? (t || 100) / 100 : 1
                  , s = "vertical" !== i ? (t || 100) / 100 : 1;
                return {
                    height: e.height() * s,
                    width: e.width() * n,
                    outerHeight: e.outerHeight() * s,
                    outerWidth: e.outerWidth() * n
                }
            },
            clipToBox: function(e) {
                return {
                    width: e.clip.right - e.clip.left,
                    height: e.clip.bottom - e.clip.top,
                    left: e.clip.left,
                    top: e.clip.top
                }
            },
            unshift: function(e, t, i) {
                var n = e.queue();
                t > 1 && n.splice.apply(n, [1, 0].concat(n.splice(t, i))),
                e.dequeue()
            },
            saveStyle: function(e) {
                e.data(n, e[0].style.cssText)
            },
            restoreStyle: function(e) {
                e[0].style.cssText = e.data(n) || "",
                e.removeData(n)
            },
            mode: function(e, t) {
                var i = e.is(":hidden");
                return "toggle" === t && (t = i ? "show" : "hide"),
                (i ? "hide" === t : "show" === t) && (t = "none"),
                t
            },
            getBaseline: function(e, t) {
                var i, n;
                switch (e[0]) {
                case "top":
                    i = 0;
                    break;
                case "middle":
                    i = .5;
                    break;
                case "bottom":
                    i = 1;
                    break;
                default:
                    i = e[0] / t.height
                }
                switch (e[1]) {
                case "left":
                    n = 0;
                    break;
                case "center":
                    n = .5;
                    break;
                case "right":
                    n = 1;
                    break;
                default:
                    n = e[1] / t.width
                }
                return {
                    x: n,
                    y: i
                }
            },
            createPlaceholder: function(t) {
                var n, s = t.css("position"), o = t.position();
                return t.css({
                    marginTop: t.css("marginTop"),
                    marginBottom: t.css("marginBottom"),
                    marginLeft: t.css("marginLeft"),
                    marginRight: t.css("marginRight")
                }).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()),
                /^(static|relative)/.test(s) && (s = "absolute",
                n = e("<" + t[0].nodeName + ">").insertAfter(t).css({
                    display: /^(inline|ruby)/.test(t.css("display")) ? "inline-block" : "block",
                    visibility: "hidden",
                    marginTop: t.css("marginTop"),
                    marginBottom: t.css("marginBottom"),
                    marginLeft: t.css("marginLeft"),
                    marginRight: t.css("marginRight"),
                    float: t.css("float")
                }).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),
                t.data(i + "placeholder", n)),
                t.css({
                    position: s,
                    left: o.left,
                    top: o.top
                }),
                n
            },
            removePlaceholder: function(e) {
                var t = i + "placeholder"
                  , n = e.data(t);
                n && (n.remove(),
                e.removeData(t))
            },
            cleanUp: function(t) {
                e.effects.restoreStyle(t),
                e.effects.removePlaceholder(t)
            },
            setTransition: function(t, i, n, s) {
                return s = s || {},
                e.each(i, (function(e, i) {
                    var o = t.cssUnit(i);
                    o[0] > 0 && (s[i] = o[0] * n + o[1])
                }
                )),
                s
            }
        }),
        e.fn.extend({
            effect: function() {
                function i(t) {
                    function i() {
                        l.removeData(s),
                        e.effects.cleanUp(l),
                        "hide" === n.mode && l.hide(),
                        r()
                    }
                    function r() {
                        e.isFunction(u) && u.call(l[0]),
                        e.isFunction(t) && t()
                    }
                    var l = e(this);
                    n.mode = c.shift(),
                    !1 === e.uiBackCompat || a ? "none" === n.mode ? (l[d](),
                    r()) : o.call(l[0], n, i) : (l.is(":hidden") ? "hide" === d : "show" === d) ? (l[d](),
                    r()) : o.call(l[0], n, r)
                }
                var n = t.apply(this, arguments)
                  , o = e.effects.effect[n.effect]
                  , a = o.mode
                  , r = n.queue
                  , l = r || "fx"
                  , u = n.complete
                  , d = n.mode
                  , c = []
                  , h = function(t) {
                    var i = e(this)
                      , n = e.effects.mode(i, d) || a;
                    i.data(s, !0),
                    c.push(n),
                    a && ("show" === n || n === a && "hide" === n) && i.show(),
                    a && "none" === n || e.effects.saveStyle(i),
                    e.isFunction(t) && t()
                };
                return e.fx.off || !o ? d ? this[d](n.duration, u) : this.each((function() {
                    u && u.call(this)
                }
                )) : !1 === r ? this.each(h).each(i) : this.queue(l, h).queue(l, i)
            },
            show: function(e) {
                return function(i) {
                    if (o(i))
                        return e.apply(this, arguments);
                    var n = t.apply(this, arguments);
                    return n.mode = "show",
                    this.effect.call(this, n)
                }
            }(e.fn.show),
            hide: function(e) {
                return function(i) {
                    if (o(i))
                        return e.apply(this, arguments);
                    var n = t.apply(this, arguments);
                    return n.mode = "hide",
                    this.effect.call(this, n)
                }
            }(e.fn.hide),
            toggle: function(e) {
                return function(i) {
                    if (o(i) || "boolean" == typeof i)
                        return e.apply(this, arguments);
                    var n = t.apply(this, arguments);
                    return n.mode = "toggle",
                    this.effect.call(this, n)
                }
            }(e.fn.toggle),
            cssUnit: function(t) {
                var i = this.css(t)
                  , n = [];
                return e.each(["em", "px", "%", "pt"], (function(e, t) {
                    i.indexOf(t) > 0 && (n = [parseFloat(i), t])
                }
                )),
                n
            },
            cssClip: function(e) {
                return e ? this.css("clip", "rect(" + e.top + "px " + e.right + "px " + e.bottom + "px " + e.left + "px)") : a(this.css("clip"), this)
            },
            transfer: function(t, i) {
                var n = e(this)
                  , s = e(t.to)
                  , o = "fixed" === s.css("position")
                  , a = e("body")
                  , r = o ? a.scrollTop() : 0
                  , l = o ? a.scrollLeft() : 0
                  , u = s.offset()
                  , d = {
                    top: u.top - r,
                    left: u.left - l,
                    height: s.innerHeight(),
                    width: s.innerWidth()
                }
                  , c = n.offset()
                  , h = e("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(t.className).css({
                    top: c.top - r,
                    left: c.left - l,
                    height: n.innerHeight(),
                    width: n.innerWidth(),
                    position: o ? "fixed" : "absolute"
                }).animate(d, t.duration, t.easing, (function() {
                    h.remove(),
                    e.isFunction(i) && i()
                }
                ))
            }
        }),
        e.fx.step.clip = function(t) {
            t.clipInit || (t.start = e(t.elem).cssClip(),
            "string" == typeof t.end && (t.end = a(t.end, t.elem)),
            t.clipInit = !0),
            e(t.elem).cssClip({
                top: t.pos * (t.end.top - t.start.top) + t.start.top,
                right: t.pos * (t.end.right - t.start.right) + t.start.right,
                bottom: t.pos * (t.end.bottom - t.start.bottom) + t.start.bottom,
                left: t.pos * (t.end.left - t.start.left) + t.start.left
            })
        }
    }(),
    t = {},
    e.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], (function(e, i) {
        t[i] = function(t) {
            return Math.pow(t, e + 2)
        }
    }
    )),
    e.extend(t, {
        Sine: function(e) {
            return 1 - Math.cos(e * Math.PI / 2)
        },
        Circ: function(e) {
            return 1 - Math.sqrt(1 - e * e)
        },
        Elastic: function(e) {
            return 0 === e || 1 === e ? e : -Math.pow(2, 8 * (e - 1)) * Math.sin((80 * (e - 1) - 7.5) * Math.PI / 15)
        },
        Back: function(e) {
            return e * e * (3 * e - 2)
        },
        Bounce: function(e) {
            for (var t, i = 4; e < ((t = Math.pow(2, --i)) - 1) / 11; )
                ;
            return 1 / Math.pow(4, 3 - i) - 7.5625 * Math.pow((3 * t - 2) / 22 - e, 2)
        }
    }),
    e.each(t, (function(t, i) {
        e.easing["easeIn" + t] = i,
        e.easing["easeOut" + t] = function(e) {
            return 1 - i(1 - e)
        }
        ,
        e.easing["easeInOut" + t] = function(e) {
            return e < .5 ? i(2 * e) / 2 : 1 - i(-2 * e + 2) / 2
        }
    }
    )),
    e.effects
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./form", "./version"], e) : e(jQuery)
}((function(e) {
    return e.ui.formResetMixin = {
        _formResetHandler: function() {
            var t = e(this);
            setTimeout((function() {
                var i = t.data("ui-form-reset-instances");
                e.each(i, (function() {
                    this.refresh()
                }
                ))
            }
            ))
        },
        _bindFormResetHandler: function() {
            if (this.form = this.element.form(),
            this.form.length) {
                var e = this.form.data("ui-form-reset-instances") || [];
                e.length || this.form.on("reset.ui-form-reset", this._formResetHandler),
                e.push(this),
                this.form.data("ui-form-reset-instances", e)
            }
        },
        _unbindFormResetHandler: function() {
            if (this.form.length) {
                var t = this.form.data("ui-form-reset-instances");
                t.splice(e.inArray(this, t), 1),
                t.length ? this.form.data("ui-form-reset-instances", t) : this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")
            }
        }
    }
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    return function() {
        function t(e, t, i) {
            return [parseFloat(e[0]) * (c.test(e[0]) ? t / 100 : 1), parseFloat(e[1]) * (c.test(e[1]) ? i / 100 : 1)]
        }
        function i(t, i) {
            return parseInt(e.css(t, i), 10) || 0
        }
        function n(t) {
            var i = t[0];
            return 9 === i.nodeType ? {
                width: t.width(),
                height: t.height(),
                offset: {
                    top: 0,
                    left: 0
                }
            } : e.isWindow(i) ? {
                width: t.width(),
                height: t.height(),
                offset: {
                    top: t.scrollTop(),
                    left: t.scrollLeft()
                }
            } : i.preventDefault ? {
                width: 0,
                height: 0,
                offset: {
                    top: i.pageY,
                    left: i.pageX
                }
            } : {
                width: t.outerWidth(),
                height: t.outerHeight(),
                offset: t.offset()
            }
        }
        var s, o = Math.max, a = Math.abs, r = /left|center|right/, l = /top|center|bottom/, u = /[\+\-]\d+(\.[\d]+)?%?/, d = /^\w+/, c = /%$/, h = e.fn.position;
        e.position = {
            scrollbarWidth: function() {
                if (void 0 !== s)
                    return s;
                var t, i, n = e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), o = n.children()[0];
                return e("body").append(n),
                t = o.offsetWidth,
                n.css("overflow", "scroll"),
                t === (i = o.offsetWidth) && (i = n[0].clientWidth),
                n.remove(),
                s = t - i
            },
            getScrollInfo: function(t) {
                var i = t.isWindow || t.isDocument ? "" : t.element.css("overflow-x")
                  , n = t.isWindow || t.isDocument ? "" : t.element.css("overflow-y")
                  , s = "scroll" === i || "auto" === i && t.width < t.element[0].scrollWidth;
                return {
                    width: "scroll" === n || "auto" === n && t.height < t.element[0].scrollHeight ? e.position.scrollbarWidth() : 0,
                    height: s ? e.position.scrollbarWidth() : 0
                }
            },
            getWithinInfo: function(t) {
                var i = e(t || window)
                  , n = e.isWindow(i[0])
                  , s = !!i[0] && 9 === i[0].nodeType;
                return {
                    element: i,
                    isWindow: n,
                    isDocument: s,
                    offset: !n && !s ? e(t).offset() : {
                        left: 0,
                        top: 0
                    },
                    scrollLeft: i.scrollLeft(),
                    scrollTop: i.scrollTop(),
                    width: i.outerWidth(),
                    height: i.outerHeight()
                }
            }
        },
        e.fn.position = function(s) {
            if (!s || !s.of)
                return h.apply(this, arguments);
            s = e.extend({}, s);
            var c, f, p, m, g, v, b = e(s.of), y = e.position.getWithinInfo(s.within), _ = e.position.getScrollInfo(y), w = (s.collision || "flip").split(" "), x = {};
            return v = n(b),
            b[0].preventDefault && (s.at = "left top"),
            f = v.width,
            p = v.height,
            m = v.offset,
            g = e.extend({}, m),
            e.each(["my", "at"], (function() {
                var e, t, i = (s[this] || "").split(" ");
                1 === i.length && (i = r.test(i[0]) ? i.concat(["center"]) : l.test(i[0]) ? ["center"].concat(i) : ["center", "center"]),
                i[0] = r.test(i[0]) ? i[0] : "center",
                i[1] = l.test(i[1]) ? i[1] : "center",
                e = u.exec(i[0]),
                t = u.exec(i[1]),
                x[this] = [e ? e[0] : 0, t ? t[0] : 0],
                s[this] = [d.exec(i[0])[0], d.exec(i[1])[0]]
            }
            )),
            1 === w.length && (w[1] = w[0]),
            "right" === s.at[0] ? g.left += f : "center" === s.at[0] && (g.left += f / 2),
            "bottom" === s.at[1] ? g.top += p : "center" === s.at[1] && (g.top += p / 2),
            c = t(x.at, f, p),
            g.left += c[0],
            g.top += c[1],
            this.each((function() {
                var n, r, l = e(this), u = l.outerWidth(), d = l.outerHeight(), h = i(this, "marginLeft"), v = i(this, "marginTop"), k = u + h + i(this, "marginRight") + _.width, C = d + v + i(this, "marginBottom") + _.height, D = e.extend({}, g), T = t(x.my, l.outerWidth(), l.outerHeight());
                "right" === s.my[0] ? D.left -= u : "center" === s.my[0] && (D.left -= u / 2),
                "bottom" === s.my[1] ? D.top -= d : "center" === s.my[1] && (D.top -= d / 2),
                D.left += T[0],
                D.top += T[1],
                n = {
                    marginLeft: h,
                    marginTop: v
                },
                e.each(["left", "top"], (function(t, i) {
                    e.ui.position[w[t]] && e.ui.position[w[t]][i](D, {
                        targetWidth: f,
                        targetHeight: p,
                        elemWidth: u,
                        elemHeight: d,
                        collisionPosition: n,
                        collisionWidth: k,
                        collisionHeight: C,
                        offset: [c[0] + T[0], c[1] + T[1]],
                        my: s.my,
                        at: s.at,
                        within: y,
                        elem: l
                    })
                }
                )),
                s.using && (r = function(e) {
                    var t = m.left - D.left
                      , i = t + f - u
                      , n = m.top - D.top
                      , r = n + p - d
                      , c = {
                        target: {
                            element: b,
                            left: m.left,
                            top: m.top,
                            width: f,
                            height: p
                        },
                        element: {
                            element: l,
                            left: D.left,
                            top: D.top,
                            width: u,
                            height: d
                        },
                        horizontal: i < 0 ? "left" : t > 0 ? "right" : "center",
                        vertical: r < 0 ? "top" : n > 0 ? "bottom" : "middle"
                    };
                    f < u && a(t + i) < f && (c.horizontal = "center"),
                    p < d && a(n + r) < p && (c.vertical = "middle"),
                    o(a(t), a(i)) > o(a(n), a(r)) ? c.important = "horizontal" : c.important = "vertical",
                    s.using.call(this, e, c)
                }
                ),
                l.offset(e.extend(D, {
                    using: r
                }))
            }
            ))
        }
        ,
        e.ui.position = {
            fit: {
                left: function(e, t) {
                    var i, n = t.within, s = n.isWindow ? n.scrollLeft : n.offset.left, a = n.width, r = e.left - t.collisionPosition.marginLeft, l = s - r, u = r + t.collisionWidth - a - s;
                    t.collisionWidth > a ? l > 0 && u <= 0 ? (i = e.left + l + t.collisionWidth - a - s,
                    e.left += l - i) : e.left = u > 0 && l <= 0 ? s : l > u ? s + a - t.collisionWidth : s : l > 0 ? e.left += l : u > 0 ? e.left -= u : e.left = o(e.left - r, e.left)
                },
                top: function(e, t) {
                    var i, n = t.within, s = n.isWindow ? n.scrollTop : n.offset.top, a = t.within.height, r = e.top - t.collisionPosition.marginTop, l = s - r, u = r + t.collisionHeight - a - s;
                    t.collisionHeight > a ? l > 0 && u <= 0 ? (i = e.top + l + t.collisionHeight - a - s,
                    e.top += l - i) : e.top = u > 0 && l <= 0 ? s : l > u ? s + a - t.collisionHeight : s : l > 0 ? e.top += l : u > 0 ? e.top -= u : e.top = o(e.top - r, e.top)
                }
            },
            flip: {
                left: function(e, t) {
                    var i, n, s = t.within, o = s.offset.left + s.scrollLeft, r = s.width, l = s.isWindow ? s.scrollLeft : s.offset.left, u = e.left - t.collisionPosition.marginLeft, d = u - l, c = u + t.collisionWidth - r - l, h = "left" === t.my[0] ? -t.elemWidth : "right" === t.my[0] ? t.elemWidth : 0, f = "left" === t.at[0] ? t.targetWidth : "right" === t.at[0] ? -t.targetWidth : 0, p = -2 * t.offset[0];
                    d < 0 ? ((i = e.left + h + f + p + t.collisionWidth - r - o) < 0 || i < a(d)) && (e.left += h + f + p) : c > 0 && ((n = e.left - t.collisionPosition.marginLeft + h + f + p - l) > 0 || a(n) < c) && (e.left += h + f + p)
                },
                top: function(e, t) {
                    var i, n, s = t.within, o = s.offset.top + s.scrollTop, r = s.height, l = s.isWindow ? s.scrollTop : s.offset.top, u = e.top - t.collisionPosition.marginTop, d = u - l, c = u + t.collisionHeight - r - l, h = "top" === t.my[1] ? -t.elemHeight : "bottom" === t.my[1] ? t.elemHeight : 0, f = "top" === t.at[1] ? t.targetHeight : "bottom" === t.at[1] ? -t.targetHeight : 0, p = -2 * t.offset[1];
                    d < 0 ? ((n = e.top + h + f + p + t.collisionHeight - r - o) < 0 || n < a(d)) && (e.top += h + f + p) : c > 0 && ((i = e.top - t.collisionPosition.marginTop + h + f + p - l) > 0 || a(i) < c) && (e.top += h + f + p)
                }
            },
            flipfit: {
                left: function() {
                    e.ui.position.flip.left.apply(this, arguments),
                    e.ui.position.fit.left.apply(this, arguments)
                },
                top: function() {
                    e.ui.position.flip.top.apply(this, arguments),
                    e.ui.position.fit.top.apply(this, arguments)
                }
            }
        }
    }(),
    e.ui.position
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./version"], e) : e(jQuery)
}((function(e) {
    var t, i = 0, n = Array.prototype.slice;
    return e.cleanData = (t = e.cleanData,
    function(i) {
        var n, s, o;
        for (o = 0; null != (s = i[o]); o++)
            try {
                (n = e._data(s, "events")) && n.remove && e(s).triggerHandler("remove")
            } catch (e) {}
        t(i)
    }
    ),
    e.widget = function(t, i, n) {
        var s, o, a, r = {}, l = t.split(".")[0], u = l + "-" + (t = t.split(".")[1]);
        return n || (n = i,
        i = e.Widget),
        e.isArray(n) && (n = e.extend.apply(null, [{}].concat(n))),
        e.expr[":"][u.toLowerCase()] = function(t) {
            return !!e.data(t, u)
        }
        ,
        e[l] = e[l] || {},
        s = e[l][t],
        o = e[l][t] = function(e, t) {
            if (!this._createWidget)
                return new o(e,t);
            arguments.length && this._createWidget(e, t)
        }
        ,
        e.extend(o, s, {
            version: n.version,
            _proto: e.extend({}, n),
            _childConstructors: []
        }),
        (a = new i).options = e.widget.extend({}, a.options),
        e.each(n, (function(t, n) {
            e.isFunction(n) ? r[t] = function() {
                function e() {
                    return i.prototype[t].apply(this, arguments)
                }
                function s(e) {
                    return i.prototype[t].apply(this, e)
                }
                return function() {
                    var t, i = this._super, o = this._superApply;
                    return this._super = e,
                    this._superApply = s,
                    t = n.apply(this, arguments),
                    this._super = i,
                    this._superApply = o,
                    t
                }
            }() : r[t] = n
        }
        )),
        o.prototype = e.widget.extend(a, {
            widgetEventPrefix: s && a.widgetEventPrefix || t
        }, r, {
            constructor: o,
            namespace: l,
            widgetName: t,
            widgetFullName: u
        }),
        s ? (e.each(s._childConstructors, (function(t, i) {
            var n = i.prototype;
            e.widget(n.namespace + "." + n.widgetName, o, i._proto)
        }
        )),
        delete s._childConstructors) : i._childConstructors.push(o),
        e.widget.bridge(t, o),
        o
    }
    ,
    e.widget.extend = function(t) {
        for (var i, s, o = n.call(arguments, 1), a = 0, r = o.length; a < r; a++)
            for (i in o[a])
                s = o[a][i],
                o[a].hasOwnProperty(i) && void 0 !== s && (e.isPlainObject(s) ? t[i] = e.isPlainObject(t[i]) ? e.widget.extend({}, t[i], s) : e.widget.extend({}, s) : t[i] = s);
        return t
    }
    ,
    e.widget.bridge = function(t, i) {
        var s = i.prototype.widgetFullName || t;
        e.fn[t] = function(o) {
            var a = "string" == typeof o
              , r = n.call(arguments, 1)
              , l = this;
            return a ? this.length || "instance" !== o ? this.each((function() {
                var i, n = e.data(this, s);
                return "instance" === o ? (l = n,
                !1) : n ? e.isFunction(n[o]) && "_" !== o.charAt(0) ? (i = n[o].apply(n, r)) !== n && void 0 !== i ? (l = i && i.jquery ? l.pushStack(i.get()) : i,
                !1) : void 0 : e.error("no such method '" + o + "' for " + t + " widget instance") : e.error("cannot call methods on " + t + " prior to initialization; attempted to call method '" + o + "'")
            }
            )) : l = void 0 : (r.length && (o = e.widget.extend.apply(null, [o].concat(r))),
            this.each((function() {
                var t = e.data(this, s);
                t ? (t.option(o || {}),
                t._init && t._init()) : e.data(this, s, new i(o,this))
            }
            ))),
            l
        }
    }
    ,
    e.Widget = function() {}
    ,
    e.Widget._childConstructors = [],
    e.Widget.prototype = {
        widgetName: "widget",
        widgetEventPrefix: "",
        defaultElement: "<div>",
        options: {
            classes: {},
            disabled: !1,
            create: null
        },
        _createWidget: function(t, n) {
            n = e(n || this.defaultElement || this)[0],
            this.element = e(n),
            this.uuid = i++,
            this.eventNamespace = "." + this.widgetName + this.uuid,
            this.bindings = e(),
            this.hoverable = e(),
            this.focusable = e(),
            this.classesElementLookup = {},
            n !== this && (e.data(n, this.widgetFullName, this),
            this._on(!0, this.element, {
                remove: function(e) {
                    e.target === n && this.destroy()
                }
            }),
            this.document = e(n.style ? n.ownerDocument : n.document || n),
            this.window = e(this.document[0].defaultView || this.document[0].parentWindow)),
            this.options = e.widget.extend({}, this.options, this._getCreateOptions(), t),
            this._create(),
            this.options.disabled && this._setOptionDisabled(this.options.disabled),
            this._trigger("create", null, this._getCreateEventData()),
            this._init()
        },
        _getCreateOptions: function() {
            return {}
        },
        _getCreateEventData: e.noop,
        _create: e.noop,
        _init: e.noop,
        destroy: function() {
            var t = this;
            this._destroy(),
            e.each(this.classesElementLookup, (function(e, i) {
                t._removeClass(i, e)
            }
            )),
            this.element.off(this.eventNamespace).removeData(this.widgetFullName),
            this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),
            this.bindings.off(this.eventNamespace)
        },
        _destroy: e.noop,
        widget: function() {
            return this.element
        },
        option: function(t, i) {
            var n, s, o, a = t;
            if (0 === arguments.length)
                return e.widget.extend({}, this.options);
            if ("string" == typeof t)
                if (a = {},
                n = t.split("."),
                t = n.shift(),
                n.length) {
                    for (s = a[t] = e.widget.extend({}, this.options[t]),
                    o = 0; o < n.length - 1; o++)
                        s[n[o]] = s[n[o]] || {},
                        s = s[n[o]];
                    if (t = n.pop(),
                    1 === arguments.length)
                        return void 0 === s[t] ? null : s[t];
                    s[t] = i
                } else {
                    if (1 === arguments.length)
                        return void 0 === this.options[t] ? null : this.options[t];
                    a[t] = i
                }
            return this._setOptions(a),
            this
        },
        _setOptions: function(e) {
            var t;
            for (t in e)
                this._setOption(t, e[t]);
            return this
        },
        _setOption: function(e, t) {
            return "classes" === e && this._setOptionClasses(t),
            this.options[e] = t,
            "disabled" === e && this._setOptionDisabled(t),
            this
        },
        _setOptionClasses: function(t) {
            var i, n, s;
            for (i in t)
                s = this.classesElementLookup[i],
                t[i] !== this.options.classes[i] && s && s.length && (n = e(s.get()),
                this._removeClass(s, i),
                n.addClass(this._classes({
                    element: n,
                    keys: i,
                    classes: t,
                    add: !0
                })))
        },
        _setOptionDisabled: function(e) {
            this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, !!e),
            e && (this._removeClass(this.hoverable, null, "ui-state-hover"),
            this._removeClass(this.focusable, null, "ui-state-focus"))
        },
        enable: function() {
            return this._setOptions({
                disabled: !1
            })
        },
        disable: function() {
            return this._setOptions({
                disabled: !0
            })
        },
        _classes: function(t) {
            function i(i, o) {
                var a, r;
                for (r = 0; r < i.length; r++)
                    a = s.classesElementLookup[i[r]] || e(),
                    a = t.add ? e(e.unique(a.get().concat(t.element.get()))) : e(a.not(t.element).get()),
                    s.classesElementLookup[i[r]] = a,
                    n.push(i[r]),
                    o && t.classes[i[r]] && n.push(t.classes[i[r]])
            }
            var n = []
              , s = this;
            return t = e.extend({
                element: this.element,
                classes: this.options.classes || {}
            }, t),
            this._on(t.element, {
                remove: "_untrackClassesElement"
            }),
            t.keys && i(t.keys.match(/\S+/g) || [], !0),
            t.extra && i(t.extra.match(/\S+/g) || []),
            n.join(" ")
        },
        _untrackClassesElement: function(t) {
            var i = this;
            e.each(i.classesElementLookup, (function(n, s) {
                -1 !== e.inArray(t.target, s) && (i.classesElementLookup[n] = e(s.not(t.target).get()))
            }
            ))
        },
        _removeClass: function(e, t, i) {
            return this._toggleClass(e, t, i, !1)
        },
        _addClass: function(e, t, i) {
            return this._toggleClass(e, t, i, !0)
        },
        _toggleClass: function(e, t, i, n) {
            n = "boolean" == typeof n ? n : i;
            var s = "string" == typeof e || null === e
              , o = {
                extra: s ? t : i,
                keys: s ? e : t,
                element: s ? this.element : e,
                add: n
            };
            return o.element.toggleClass(this._classes(o), n),
            this
        },
        _on: function(t, i, n) {
            var s, o = this;
            "boolean" != typeof t && (n = i,
            i = t,
            t = !1),
            n ? (i = s = e(i),
            this.bindings = this.bindings.add(i)) : (n = i,
            i = this.element,
            s = this.widget()),
            e.each(n, (function(n, a) {
                function r() {
                    if (t || !0 !== o.options.disabled && !e(this).hasClass("ui-state-disabled"))
                        return ("string" == typeof a ? o[a] : a).apply(o, arguments)
                }
                "string" != typeof a && (r.guid = a.guid = a.guid || r.guid || e.guid++);
                var l = n.match(/^([\w:-]*)\s*(.*)$/)
                  , u = l[1] + o.eventNamespace
                  , d = l[2];
                d ? s.on(u, d, r) : i.on(u, r)
            }
            ))
        },
        _off: function(t, i) {
            i = (i || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace,
            t.off(i).off(i),
            this.bindings = e(this.bindings.not(t).get()),
            this.focusable = e(this.focusable.not(t).get()),
            this.hoverable = e(this.hoverable.not(t).get())
        },
        _delay: function(e, t) {
            function i() {
                return ("string" == typeof e ? n[e] : e).apply(n, arguments)
            }
            var n = this;
            return setTimeout(i, t || 0)
        },
        _hoverable: function(t) {
            this.hoverable = this.hoverable.add(t),
            this._on(t, {
                mouseenter: function(t) {
                    this._addClass(e(t.currentTarget), null, "ui-state-hover")
                },
                mouseleave: function(t) {
                    this._removeClass(e(t.currentTarget), null, "ui-state-hover")
                }
            })
        },
        _focusable: function(t) {
            this.focusable = this.focusable.add(t),
            this._on(t, {
                focusin: function(t) {
                    this._addClass(e(t.currentTarget), null, "ui-state-focus")
                },
                focusout: function(t) {
                    this._removeClass(e(t.currentTarget), null, "ui-state-focus")
                }
            })
        },
        _trigger: function(t, i, n) {
            var s, o, a = this.options[t];
            if (n = n || {},
            (i = e.Event(i)).type = (t === this.widgetEventPrefix ? t : this.widgetEventPrefix + t).toLowerCase(),
            i.target = this.element[0],
            o = i.originalEvent)
                for (s in o)
                    s in i || (i[s] = o[s]);
            return this.element.trigger(i, n),
            !(e.isFunction(a) && !1 === a.apply(this.element[0], [i].concat(n)) || i.isDefaultPrevented())
        }
    },
    e.each({
        show: "fadeIn",
        hide: "fadeOut"
    }, (function(t, i) {
        e.Widget.prototype["_" + t] = function(n, s, o) {
            var a;
            "string" == typeof s && (s = {
                effect: s
            });
            var r = s ? !0 === s || "number" == typeof s ? i : s.effect || i : t;
            "number" == typeof (s = s || {}) && (s = {
                duration: s
            }),
            a = !e.isEmptyObject(s),
            s.complete = o,
            s.delay && n.delay(s.delay),
            a && e.effects && e.effects.effect[r] ? n[t](s) : r !== t && n[r] ? n[r](s.duration, s.easing, o) : n.queue((function(i) {
                e(this)[t](),
                o && o.call(n[0]),
                i()
            }
            ))
        }
    }
    )),
    e.widget
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("blind", "hide", (function(t, i) {
        var n = {
            up: ["bottom", "top"],
            vertical: ["bottom", "top"],
            down: ["top", "bottom"],
            left: ["right", "left"],
            horizontal: ["right", "left"],
            right: ["left", "right"]
        }
          , s = e(this)
          , o = t.direction || "up"
          , a = s.cssClip()
          , r = {
            clip: e.extend({}, a)
        }
          , l = e.effects.createPlaceholder(s);
        r.clip[n[o][0]] = r.clip[n[o][1]],
        "show" === t.mode && (s.cssClip(r.clip),
        l && l.css(e.effects.clipToBox(r)),
        r.clip = a),
        l && l.animate(e.effects.clipToBox(r), t.duration, t.easing),
        s.animate(r, {
            queue: !1,
            duration: t.duration,
            easing: t.easing,
            complete: i
        })
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("bounce", (function(t, i) {
        var n, s, o, a = e(this), r = t.mode, l = "hide" === r, u = "show" === r, d = t.direction || "up", c = t.distance, h = t.times || 5, f = 2 * h + (u || l ? 1 : 0), p = t.duration / f, m = t.easing, g = "up" === d || "down" === d ? "top" : "left", v = "up" === d || "left" === d, b = 0, y = a.queue().length;
        for (e.effects.createPlaceholder(a),
        o = a.css(g),
        c || (c = a["top" === g ? "outerHeight" : "outerWidth"]() / 3),
        u && ((s = {
            opacity: 1
        })[g] = o,
        a.css("opacity", 0).css(g, v ? 2 * -c : 2 * c).animate(s, p, m)),
        l && (c /= Math.pow(2, h - 1)),
        (s = {})[g] = o; b < h; b++)
            (n = {})[g] = (v ? "-=" : "+=") + c,
            a.animate(n, p, m).animate(s, p, m),
            c = l ? 2 * c : c / 2;
        l && ((n = {
            opacity: 0
        })[g] = (v ? "-=" : "+=") + c,
        a.animate(n, p, m)),
        a.queue(i),
        e.effects.unshift(a, y, f + 1)
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("clip", "hide", (function(t, i) {
        var n, s = {}, o = e(this), a = t.direction || "vertical", r = "both" === a, l = r || "horizontal" === a, u = r || "vertical" === a;
        n = o.cssClip(),
        s.clip = {
            top: u ? (n.bottom - n.top) / 2 : n.top,
            right: l ? (n.right - n.left) / 2 : n.right,
            bottom: u ? (n.bottom - n.top) / 2 : n.bottom,
            left: l ? (n.right - n.left) / 2 : n.left
        },
        e.effects.createPlaceholder(o),
        "show" === t.mode && (o.cssClip(s.clip),
        s.clip = n),
        o.animate(s, {
            queue: !1,
            duration: t.duration,
            easing: t.easing,
            complete: i
        })
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("drop", "hide", (function(t, i) {
        var n, s = e(this), o = "show" === t.mode, a = t.direction || "left", r = "up" === a || "down" === a ? "top" : "left", l = "up" === a || "left" === a ? "-=" : "+=", u = "+=" === l ? "-=" : "+=", d = {
            opacity: 0
        };
        e.effects.createPlaceholder(s),
        n = t.distance || s["top" === r ? "outerHeight" : "outerWidth"](!0) / 2,
        d[r] = l + n,
        o && (s.css(d),
        d[r] = u + n,
        d.opacity = 1),
        s.animate(d, {
            queue: !1,
            duration: t.duration,
            easing: t.easing,
            complete: i
        })
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("explode", "hide", (function(t, i) {
        function n() {
            b.push(this),
            b.length === c * h && s()
        }
        function s() {
            f.css({
                visibility: "visible"
            }),
            e(b).remove(),
            i()
        }
        var o, a, r, l, u, d, c = t.pieces ? Math.round(Math.sqrt(t.pieces)) : 3, h = c, f = e(this), p = "show" === t.mode, m = f.show().css("visibility", "hidden").offset(), g = Math.ceil(f.outerWidth() / h), v = Math.ceil(f.outerHeight() / c), b = [];
        for (o = 0; o < c; o++)
            for (l = m.top + o * v,
            d = o - (c - 1) / 2,
            a = 0; a < h; a++)
                r = m.left + a * g,
                u = a - (h - 1) / 2,
                f.clone().appendTo("body").wrap("<div></div>").css({
                    position: "absolute",
                    visibility: "visible",
                    left: -a * g,
                    top: -o * v
                }).parent().addClass("ui-effects-explode").css({
                    position: "absolute",
                    overflow: "hidden",
                    width: g,
                    height: v,
                    left: r + (p ? u * g : 0),
                    top: l + (p ? d * v : 0),
                    opacity: p ? 0 : 1
                }).animate({
                    left: r + (p ? 0 : u * g),
                    top: l + (p ? 0 : d * v),
                    opacity: p ? 1 : 0
                }, t.duration || 500, t.easing, n)
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("fade", "toggle", (function(t, i) {
        var n = "show" === t.mode;
        e(this).css("opacity", n ? 0 : 1).animate({
            opacity: n ? 1 : 0
        }, {
            queue: !1,
            duration: t.duration,
            easing: t.easing,
            complete: i
        })
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("fold", "hide", (function(t, i) {
        var n = e(this)
          , s = t.mode
          , o = "show" === s
          , a = "hide" === s
          , r = t.size || 15
          , l = /([0-9]+)%/.exec(r)
          , u = !!t.horizFirst ? ["right", "bottom"] : ["bottom", "right"]
          , d = t.duration / 2
          , c = e.effects.createPlaceholder(n)
          , h = n.cssClip()
          , f = {
            clip: e.extend({}, h)
        }
          , p = {
            clip: e.extend({}, h)
        }
          , m = [h[u[0]], h[u[1]]]
          , g = n.queue().length;
        l && (r = parseInt(l[1], 10) / 100 * m[a ? 0 : 1]),
        f.clip[u[0]] = r,
        p.clip[u[0]] = r,
        p.clip[u[1]] = 0,
        o && (n.cssClip(p.clip),
        c && c.css(e.effects.clipToBox(p)),
        p.clip = h),
        n.queue((function(i) {
            c && c.animate(e.effects.clipToBox(f), d, t.easing).animate(e.effects.clipToBox(p), d, t.easing),
            i()
        }
        )).animate(f, d, t.easing).animate(p, d, t.easing).queue(i),
        e.effects.unshift(n, g, 4)
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("highlight", "show", (function(t, i) {
        var n = e(this)
          , s = {
            backgroundColor: n.css("backgroundColor")
        };
        "hide" === t.mode && (s.opacity = 0),
        e.effects.saveStyle(n),
        n.css({
            backgroundImage: "none",
            backgroundColor: t.color || "#ffff99"
        }).animate(s, {
            queue: !1,
            duration: t.duration,
            easing: t.easing,
            complete: i
        })
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("size", (function(t, i) {
        var n, s, o, a = e(this), r = ["fontSize"], l = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], u = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], d = t.mode, c = "effect" !== d, h = t.scale || "both", f = t.origin || ["middle", "center"], p = a.css("position"), m = a.position(), g = e.effects.scaledDimensions(a), v = t.from || g, b = t.to || e.effects.scaledDimensions(a, 0);
        e.effects.createPlaceholder(a),
        "show" === d && (o = v,
        v = b,
        b = o),
        s = {
            from: {
                y: v.height / g.height,
                x: v.width / g.width
            },
            to: {
                y: b.height / g.height,
                x: b.width / g.width
            }
        },
        "box" !== h && "both" !== h || (s.from.y !== s.to.y && (v = e.effects.setTransition(a, l, s.from.y, v),
        b = e.effects.setTransition(a, l, s.to.y, b)),
        s.from.x !== s.to.x && (v = e.effects.setTransition(a, u, s.from.x, v),
        b = e.effects.setTransition(a, u, s.to.x, b))),
        "content" !== h && "both" !== h || s.from.y !== s.to.y && (v = e.effects.setTransition(a, r, s.from.y, v),
        b = e.effects.setTransition(a, r, s.to.y, b)),
        f && (n = e.effects.getBaseline(f, g),
        v.top = (g.outerHeight - v.outerHeight) * n.y + m.top,
        v.left = (g.outerWidth - v.outerWidth) * n.x + m.left,
        b.top = (g.outerHeight - b.outerHeight) * n.y + m.top,
        b.left = (g.outerWidth - b.outerWidth) * n.x + m.left),
        a.css(v),
        "content" !== h && "both" !== h || (l = l.concat(["marginTop", "marginBottom"]).concat(r),
        u = u.concat(["marginLeft", "marginRight"]),
        a.find("*[width]").each((function() {
            var i = e(this)
              , n = e.effects.scaledDimensions(i)
              , o = {
                height: n.height * s.from.y,
                width: n.width * s.from.x,
                outerHeight: n.outerHeight * s.from.y,
                outerWidth: n.outerWidth * s.from.x
            }
              , a = {
                height: n.height * s.to.y,
                width: n.width * s.to.x,
                outerHeight: n.height * s.to.y,
                outerWidth: n.width * s.to.x
            };
            s.from.y !== s.to.y && (o = e.effects.setTransition(i, l, s.from.y, o),
            a = e.effects.setTransition(i, l, s.to.y, a)),
            s.from.x !== s.to.x && (o = e.effects.setTransition(i, u, s.from.x, o),
            a = e.effects.setTransition(i, u, s.to.x, a)),
            c && e.effects.saveStyle(i),
            i.css(o),
            i.animate(a, t.duration, t.easing, (function() {
                c && e.effects.restoreStyle(i)
            }
            ))
        }
        ))),
        a.animate(b, {
            queue: !1,
            duration: t.duration,
            easing: t.easing,
            complete: function() {
                var t = a.offset();
                0 === b.opacity && a.css("opacity", v.opacity),
                c || (a.css("position", "static" === p ? "relative" : p).offset(t),
                e.effects.saveStyle(a)),
                i()
            }
        })
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect", "./effect-size"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("scale", (function(t, i) {
        var n = e(this)
          , s = t.mode
          , o = parseInt(t.percent, 10) || (0 === parseInt(t.percent, 10) || "effect" !== s ? 0 : 100)
          , a = e.extend(!0, {
            from: e.effects.scaledDimensions(n),
            to: e.effects.scaledDimensions(n, o, t.direction || "both"),
            origin: t.origin || ["middle", "center"]
        }, t);
        t.fade && (a.from.opacity = 1,
        a.to.opacity = 0),
        e.effects.effect.size.call(this, a, i)
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect", "./effect-scale"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("puff", "hide", (function(t, i) {
        var n = e.extend(!0, {}, t, {
            fade: !0,
            percent: parseInt(t.percent, 10) || 150
        });
        e.effects.effect.scale.call(this, n, i)
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("pulsate", "show", (function(t, i) {
        var n = e(this)
          , s = t.mode
          , o = "show" === s
          , a = o || "hide" === s
          , r = 2 * (t.times || 5) + (a ? 1 : 0)
          , l = t.duration / r
          , u = 0
          , d = 1
          , c = n.queue().length;
        for (!o && n.is(":visible") || (n.css("opacity", 0).show(),
        u = 1); d < r; d++)
            n.animate({
                opacity: u
            }, l, t.easing),
            u = 1 - u;
        n.animate({
            opacity: u
        }, l, t.easing),
        n.queue(i),
        e.effects.unshift(n, c, r + 1)
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("shake", (function(t, i) {
        var n = 1
          , s = e(this)
          , o = t.direction || "left"
          , a = t.distance || 20
          , r = t.times || 3
          , l = 2 * r + 1
          , u = Math.round(t.duration / l)
          , d = "up" === o || "down" === o ? "top" : "left"
          , c = "up" === o || "left" === o
          , h = {}
          , f = {}
          , p = {}
          , m = s.queue().length;
        for (e.effects.createPlaceholder(s),
        h[d] = (c ? "-=" : "+=") + a,
        f[d] = (c ? "+=" : "-=") + 2 * a,
        p[d] = (c ? "-=" : "+=") + 2 * a,
        s.animate(h, u, t.easing); n < r; n++)
            s.animate(f, u, t.easing).animate(p, u, t.easing);
        s.animate(f, u, t.easing).animate(h, u / 2, t.easing).queue(i),
        e.effects.unshift(s, m, l + 1)
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    return e.effects.define("slide", "show", (function(t, i) {
        var n, s, o = e(this), a = {
            up: ["bottom", "top"],
            down: ["top", "bottom"],
            left: ["right", "left"],
            right: ["left", "right"]
        }, r = t.mode, l = t.direction || "left", u = "up" === l || "down" === l ? "top" : "left", d = "up" === l || "left" === l, c = t.distance || o["top" === u ? "outerHeight" : "outerWidth"](!0), h = {};
        e.effects.createPlaceholder(o),
        n = o.cssClip(),
        s = o.position()[u],
        h[u] = (d ? -1 : 1) * c + s,
        h.clip = o.cssClip(),
        h.clip[a[l][1]] = h.clip[a[l][0]],
        "show" === r && (o.cssClip(h.clip),
        o.css(u, h[u]),
        h.clip = n,
        h[u] = s),
        o.animate(h, {
            queue: !1,
            duration: t.duration,
            easing: t.easing,
            complete: i
        })
    }
    ))
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../effect"], e) : e(jQuery)
}((function(e) {
    var t;
    return !1 !== e.uiBackCompat && (t = e.effects.define("transfer", (function(t, i) {
        e(this).transfer(t, i)
    }
    ))),
    t
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../keycode", "../unique-id", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.accordion", {
        version: "1.12.1",
        options: {
            active: 0,
            animate: {},
            classes: {
                "ui-accordion-header": "ui-corner-top",
                "ui-accordion-header-collapsed": "ui-corner-all",
                "ui-accordion-content": "ui-corner-bottom"
            },
            collapsible: !1,
            event: "click",
            header: "> li > :first-child, > :not(li):even",
            heightStyle: "auto",
            icons: {
                activeHeader: "ui-icon-triangle-1-s",
                header: "ui-icon-triangle-1-e"
            },
            activate: null,
            beforeActivate: null
        },
        hideProps: {
            borderTopWidth: "hide",
            borderBottomWidth: "hide",
            paddingTop: "hide",
            paddingBottom: "hide",
            height: "hide"
        },
        showProps: {
            borderTopWidth: "show",
            borderBottomWidth: "show",
            paddingTop: "show",
            paddingBottom: "show",
            height: "show"
        },
        _create: function() {
            var t = this.options;
            this.prevShow = this.prevHide = e(),
            this._addClass("ui-accordion", "ui-widget ui-helper-reset"),
            this.element.attr("role", "tablist"),
            t.collapsible || !1 !== t.active && null != t.active || (t.active = 0),
            this._processPanels(),
            t.active < 0 && (t.active += this.headers.length),
            this._refresh()
        },
        _getCreateEventData: function() {
            return {
                header: this.active,
                panel: this.active.length ? this.active.next() : e()
            }
        },
        _createIcons: function() {
            var t, i, n = this.options.icons;
            n && (t = e("<span>"),
            this._addClass(t, "ui-accordion-header-icon", "ui-icon " + n.header),
            t.prependTo(this.headers),
            i = this.active.children(".ui-accordion-header-icon"),
            this._removeClass(i, n.header)._addClass(i, null, n.activeHeader)._addClass(this.headers, "ui-accordion-icons"))
        },
        _destroyIcons: function() {
            this._removeClass(this.headers, "ui-accordion-icons"),
            this.headers.children(".ui-accordion-header-icon").remove()
        },
        _destroy: function() {
            var e;
            this.element.removeAttr("role"),
            this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),
            this._destroyIcons(),
            e = this.headers.next().css("display", "").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),
            "content" !== this.options.heightStyle && e.css("height", "")
        },
        _setOption: function(e, t) {
            "active" !== e ? ("event" === e && (this.options.event && this._off(this.headers, this.options.event),
            this._setupEvents(t)),
            this._super(e, t),
            "collapsible" !== e || t || !1 !== this.options.active || this._activate(0),
            "icons" === e && (this._destroyIcons(),
            t && this._createIcons())) : this._activate(t)
        },
        _setOptionDisabled: function(e) {
            this._super(e),
            this.element.attr("aria-disabled", e),
            this._toggleClass(null, "ui-state-disabled", !!e),
            this._toggleClass(this.headers.add(this.headers.next()), null, "ui-state-disabled", !!e)
        },
        _keydown: function(t) {
            if (!t.altKey && !t.ctrlKey) {
                var i = e.ui.keyCode
                  , n = this.headers.length
                  , s = this.headers.index(t.target)
                  , o = !1;
                switch (t.keyCode) {
                case i.RIGHT:
                case i.DOWN:
                    o = this.headers[(s + 1) % n];
                    break;
                case i.LEFT:
                case i.UP:
                    o = this.headers[(s - 1 + n) % n];
                    break;
                case i.SPACE:
                case i.ENTER:
                    this._eventHandler(t);
                    break;
                case i.HOME:
                    o = this.headers[0];
                    break;
                case i.END:
                    o = this.headers[n - 1]
                }
                o && (e(t.target).attr("tabIndex", -1),
                e(o).attr("tabIndex", 0),
                e(o).trigger("focus"),
                t.preventDefault())
            }
        },
        _panelKeyDown: function(t) {
            t.keyCode === e.ui.keyCode.UP && t.ctrlKey && e(t.currentTarget).prev().trigger("focus")
        },
        refresh: function() {
            var t = this.options;
            this._processPanels(),
            !1 === t.active && !0 === t.collapsible || !this.headers.length ? (t.active = !1,
            this.active = e()) : !1 === t.active ? this._activate(0) : this.active.length && !e.contains(this.element[0], this.active[0]) ? this.headers.length === this.headers.find(".ui-state-disabled").length ? (t.active = !1,
            this.active = e()) : this._activate(Math.max(0, t.active - 1)) : t.active = this.headers.index(this.active),
            this._destroyIcons(),
            this._refresh()
        },
        _processPanels: function() {
            var e = this.headers
              , t = this.panels;
            this.headers = this.element.find(this.options.header),
            this._addClass(this.headers, "ui-accordion-header ui-accordion-header-collapsed", "ui-state-default"),
            this.panels = this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),
            this._addClass(this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content"),
            t && (this._off(e.not(this.headers)),
            this._off(t.not(this.panels)))
        },
        _refresh: function() {
            var t, i = this.options, n = i.heightStyle, s = this.element.parent();
            this.active = this._findActive(i.active),
            this._addClass(this.active, "ui-accordion-header-active", "ui-state-active")._removeClass(this.active, "ui-accordion-header-collapsed"),
            this._addClass(this.active.next(), "ui-accordion-content-active"),
            this.active.next().show(),
            this.headers.attr("role", "tab").each((function() {
                var t = e(this)
                  , i = t.uniqueId().attr("id")
                  , n = t.next()
                  , s = n.uniqueId().attr("id");
                t.attr("aria-controls", s),
                n.attr("aria-labelledby", i)
            }
            )).next().attr("role", "tabpanel"),
            this.headers.not(this.active).attr({
                "aria-selected": "false",
                "aria-expanded": "false",
                tabIndex: -1
            }).next().attr({
                "aria-hidden": "true"
            }).hide(),
            this.active.length ? this.active.attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            }).next().attr({
                "aria-hidden": "false"
            }) : this.headers.eq(0).attr("tabIndex", 0),
            this._createIcons(),
            this._setupEvents(i.event),
            "fill" === n ? (t = s.height(),
            this.element.siblings(":visible").each((function() {
                var i = e(this)
                  , n = i.css("position");
                "absolute" !== n && "fixed" !== n && (t -= i.outerHeight(!0))
            }
            )),
            this.headers.each((function() {
                t -= e(this).outerHeight(!0)
            }
            )),
            this.headers.next().each((function() {
                e(this).height(Math.max(0, t - e(this).innerHeight() + e(this).height()))
            }
            )).css("overflow", "auto")) : "auto" === n && (t = 0,
            this.headers.next().each((function() {
                var i = e(this).is(":visible");
                i || e(this).show(),
                t = Math.max(t, e(this).css("height", "").height()),
                i || e(this).hide()
            }
            )).height(t))
        },
        _activate: function(t) {
            var i = this._findActive(t)[0];
            i !== this.active[0] && (i = i || this.active[0],
            this._eventHandler({
                target: i,
                currentTarget: i,
                preventDefault: e.noop
            }))
        },
        _findActive: function(t) {
            return "number" == typeof t ? this.headers.eq(t) : e()
        },
        _setupEvents: function(t) {
            var i = {
                keydown: "_keydown"
            };
            t && e.each(t.split(" "), (function(e, t) {
                i[t] = "_eventHandler"
            }
            )),
            this._off(this.headers.add(this.headers.next())),
            this._on(this.headers, i),
            this._on(this.headers.next(), {
                keydown: "_panelKeyDown"
            }),
            this._hoverable(this.headers),
            this._focusable(this.headers)
        },
        _eventHandler: function(t) {
            var i, n, s = this.options, o = this.active, a = e(t.currentTarget), r = a[0] === o[0], l = r && s.collapsible, u = l ? e() : a.next(), d = o.next(), c = {
                oldHeader: o,
                oldPanel: d,
                newHeader: l ? e() : a,
                newPanel: u
            };
            t.preventDefault(),
            r && !s.collapsible || !1 === this._trigger("beforeActivate", t, c) || (s.active = !l && this.headers.index(a),
            this.active = r ? e() : a,
            this._toggle(c),
            this._removeClass(o, "ui-accordion-header-active", "ui-state-active"),
            s.icons && (i = o.children(".ui-accordion-header-icon"),
            this._removeClass(i, null, s.icons.activeHeader)._addClass(i, null, s.icons.header)),
            r || (this._removeClass(a, "ui-accordion-header-collapsed")._addClass(a, "ui-accordion-header-active", "ui-state-active"),
            s.icons && (n = a.children(".ui-accordion-header-icon"),
            this._removeClass(n, null, s.icons.header)._addClass(n, null, s.icons.activeHeader)),
            this._addClass(a.next(), "ui-accordion-content-active")))
        },
        _toggle: function(t) {
            var i = t.newPanel
              , n = this.prevShow.length ? this.prevShow : t.oldPanel;
            this.prevShow.add(this.prevHide).stop(!0, !0),
            this.prevShow = i,
            this.prevHide = n,
            this.options.animate ? this._animate(i, n, t) : (n.hide(),
            i.show(),
            this._toggleComplete(t)),
            n.attr({
                "aria-hidden": "true"
            }),
            n.prev().attr({
                "aria-selected": "false",
                "aria-expanded": "false"
            }),
            i.length && n.length ? n.prev().attr({
                tabIndex: -1,
                "aria-expanded": "false"
            }) : i.length && this.headers.filter((function() {
                return 0 === parseInt(e(this).attr("tabIndex"), 10)
            }
            )).attr("tabIndex", -1),
            i.attr("aria-hidden", "false").prev().attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            })
        },
        _animate: function(e, t, i) {
            var n, s, o, a = this, r = 0, l = e.css("box-sizing"), u = e.length && (!t.length || e.index() < t.index()), d = this.options.animate || {}, c = u && d.down || d, h = function() {
                a._toggleComplete(i)
            };
            return "number" == typeof c && (o = c),
            "string" == typeof c && (s = c),
            s = s || c.easing || d.easing,
            o = o || c.duration || d.duration,
            t.length ? e.length ? (n = e.show().outerHeight(),
            t.animate(this.hideProps, {
                duration: o,
                easing: s,
                step: function(e, t) {
                    t.now = Math.round(e)
                }
            }),
            void e.hide().animate(this.showProps, {
                duration: o,
                easing: s,
                complete: h,
                step: function(e, i) {
                    i.now = Math.round(e),
                    "height" !== i.prop ? "content-box" === l && (r += i.now) : "content" !== a.options.heightStyle && (i.now = Math.round(n - t.outerHeight() - r),
                    r = 0)
                }
            })) : t.animate(this.hideProps, o, s, h) : e.animate(this.showProps, o, s, h)
        },
        _toggleComplete: function(e) {
            var t = e.oldPanel
              , i = t.prev();
            this._removeClass(t, "ui-accordion-content-active"),
            this._removeClass(i, "ui-accordion-header-active")._addClass(i, "ui-accordion-header-collapsed"),
            t.length && (t.parent()[0].className = t.parent()[0].className),
            this._trigger("activate", null, e)
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../keycode", "../position", "../safe-active-element", "../unique-id", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.menu", {
        version: "1.12.1",
        defaultElement: "<ul>",
        delay: 300,
        options: {
            icons: {
                submenu: "ui-icon-caret-1-e"
            },
            items: "> *",
            menus: "ul",
            position: {
                my: "left top",
                at: "right top"
            },
            role: "menu",
            blur: null,
            focus: null,
            select: null
        },
        _create: function() {
            this.activeMenu = this.element,
            this.mouseHandled = !1,
            this.element.uniqueId().attr({
                role: this.options.role,
                tabIndex: 0
            }),
            this._addClass("ui-menu", "ui-widget ui-widget-content"),
            this._on({
                "mousedown .ui-menu-item": function(e) {
                    e.preventDefault()
                },
                "click .ui-menu-item": function(t) {
                    var i = e(t.target)
                      , n = e(e.ui.safeActiveElement(this.document[0]));
                    !this.mouseHandled && i.not(".ui-state-disabled").length && (this.select(t),
                    t.isPropagationStopped() || (this.mouseHandled = !0),
                    i.has(".ui-menu").length ? this.expand(t) : !this.element.is(":focus") && n.closest(".ui-menu").length && (this.element.trigger("focus", [!0]),
                    this.active && 1 === this.active.parents(".ui-menu").length && clearTimeout(this.timer)))
                },
                "mouseenter .ui-menu-item": function(t) {
                    if (!this.previousFilter) {
                        var i = e(t.target).closest(".ui-menu-item")
                          , n = e(t.currentTarget);
                        i[0] === n[0] && (this._removeClass(n.siblings().children(".ui-state-active"), null, "ui-state-active"),
                        this.focus(t, n))
                    }
                },
                mouseleave: "collapseAll",
                "mouseleave .ui-menu": "collapseAll",
                focus: function(e, t) {
                    var i = this.active || this.element.find(this.options.items).eq(0);
                    t || this.focus(e, i)
                },
                blur: function(t) {
                    this._delay((function() {
                        !e.contains(this.element[0], e.ui.safeActiveElement(this.document[0])) && this.collapseAll(t)
                    }
                    ))
                },
                keydown: "_keydown"
            }),
            this.refresh(),
            this._on(this.document, {
                click: function(e) {
                    this._closeOnDocumentClick(e) && this.collapseAll(e),
                    this.mouseHandled = !1
                }
            })
        },
        _destroy: function() {
            var t = this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");
            this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),
            t.children().each((function() {
                var t = e(this);
                t.data("ui-menu-submenu-caret") && t.remove()
            }
            ))
        },
        _keydown: function(t) {
            var i, n, s, o, a = !0;
            switch (t.keyCode) {
            case e.ui.keyCode.PAGE_UP:
                this.previousPage(t);
                break;
            case e.ui.keyCode.PAGE_DOWN:
                this.nextPage(t);
                break;
            case e.ui.keyCode.HOME:
                this._move("first", "first", t);
                break;
            case e.ui.keyCode.END:
                this._move("last", "last", t);
                break;
            case e.ui.keyCode.UP:
                this.previous(t);
                break;
            case e.ui.keyCode.DOWN:
                this.next(t);
                break;
            case e.ui.keyCode.LEFT:
                this.collapse(t);
                break;
            case e.ui.keyCode.RIGHT:
                this.active && !this.active.is(".ui-state-disabled") && this.expand(t);
                break;
            case e.ui.keyCode.ENTER:
            case e.ui.keyCode.SPACE:
                this._activate(t);
                break;
            case e.ui.keyCode.ESCAPE:
                this.collapse(t);
                break;
            default:
                a = !1,
                n = this.previousFilter || "",
                o = !1,
                s = t.keyCode >= 96 && t.keyCode <= 105 ? (t.keyCode - 96).toString() : String.fromCharCode(t.keyCode),
                clearTimeout(this.filterTimer),
                s === n ? o = !0 : s = n + s,
                i = this._filterMenuItems(s),
                (i = o && -1 !== i.index(this.active.next()) ? this.active.nextAll(".ui-menu-item") : i).length || (s = String.fromCharCode(t.keyCode),
                i = this._filterMenuItems(s)),
                i.length ? (this.focus(t, i),
                this.previousFilter = s,
                this.filterTimer = this._delay((function() {
                    delete this.previousFilter
                }
                ), 1e3)) : delete this.previousFilter
            }
            a && t.preventDefault()
        },
        _activate: function(e) {
            this.active && !this.active.is(".ui-state-disabled") && (this.active.children("[aria-haspopup='true']").length ? this.expand(e) : this.select(e))
        },
        refresh: function() {
            var t, i, n, s, o = this, a = this.options.icons.submenu, r = this.element.find(this.options.menus);
            this._toggleClass("ui-menu-icons", null, !!this.element.find(".ui-icon").length),
            i = r.filter(":not(.ui-menu)").hide().attr({
                role: this.options.role,
                "aria-hidden": "true",
                "aria-expanded": "false"
            }).each((function() {
                var t = e(this)
                  , i = t.prev()
                  , n = e("<span>").data("ui-menu-submenu-caret", !0);
                o._addClass(n, "ui-menu-icon", "ui-icon " + a),
                i.attr("aria-haspopup", "true").prepend(n),
                t.attr("aria-labelledby", i.attr("id"))
            }
            )),
            this._addClass(i, "ui-menu", "ui-widget ui-widget-content ui-front"),
            (t = r.add(this.element).find(this.options.items)).not(".ui-menu-item").each((function() {
                var t = e(this);
                o._isDivider(t) && o._addClass(t, "ui-menu-divider", "ui-widget-content")
            }
            )),
            s = (n = t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({
                tabIndex: -1,
                role: this._itemRole()
            }),
            this._addClass(n, "ui-menu-item")._addClass(s, "ui-menu-item-wrapper"),
            t.filter(".ui-state-disabled").attr("aria-disabled", "true"),
            this.active && !e.contains(this.element[0], this.active[0]) && this.blur()
        },
        _itemRole: function() {
            return {
                menu: "menuitem",
                listbox: "option"
            }[this.options.role]
        },
        _setOption: function(e, t) {
            if ("icons" === e) {
                var i = this.element.find(".ui-menu-icon");
                this._removeClass(i, null, this.options.icons.submenu)._addClass(i, null, t.submenu)
            }
            this._super(e, t)
        },
        _setOptionDisabled: function(e) {
            this._super(e),
            this.element.attr("aria-disabled", String(e)),
            this._toggleClass(null, "ui-state-disabled", !!e)
        },
        focus: function(e, t) {
            var i, n, s;
            this.blur(e, e && "focus" === e.type),
            this._scrollIntoView(t),
            this.active = t.first(),
            n = this.active.children(".ui-menu-item-wrapper"),
            this._addClass(n, null, "ui-state-active"),
            this.options.role && this.element.attr("aria-activedescendant", n.attr("id")),
            s = this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),
            this._addClass(s, null, "ui-state-active"),
            e && "keydown" === e.type ? this._close() : this.timer = this._delay((function() {
                this._close()
            }
            ), this.delay),
            (i = t.children(".ui-menu")).length && e && /^mouse/.test(e.type) && this._startOpening(i),
            this.activeMenu = t.parent(),
            this._trigger("focus", e, {
                item: t
            })
        },
        _scrollIntoView: function(t) {
            var i, n, s, o, a, r;
            this._hasScroll() && (i = parseFloat(e.css(this.activeMenu[0], "borderTopWidth")) || 0,
            n = parseFloat(e.css(this.activeMenu[0], "paddingTop")) || 0,
            s = t.offset().top - this.activeMenu.offset().top - i - n,
            o = this.activeMenu.scrollTop(),
            a = this.activeMenu.height(),
            r = t.outerHeight(),
            s < 0 ? this.activeMenu.scrollTop(o + s) : s + r > a && this.activeMenu.scrollTop(o + s - a + r))
        },
        blur: function(e, t) {
            t || clearTimeout(this.timer),
            this.active && (this._removeClass(this.active.children(".ui-menu-item-wrapper"), null, "ui-state-active"),
            this._trigger("blur", e, {
                item: this.active
            }),
            this.active = null)
        },
        _startOpening: function(e) {
            clearTimeout(this.timer),
            "true" === e.attr("aria-hidden") && (this.timer = this._delay((function() {
                this._close(),
                this._open(e)
            }
            ), this.delay))
        },
        _open: function(t) {
            var i = e.extend({
                of: this.active
            }, this.options.position);
            clearTimeout(this.timer),
            this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden", "true"),
            t.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(i)
        },
        collapseAll: function(t, i) {
            clearTimeout(this.timer),
            this.timer = this._delay((function() {
                var n = i ? this.element : e(t && t.target).closest(this.element.find(".ui-menu"));
                n.length || (n = this.element),
                this._close(n),
                this.blur(t),
                this._removeClass(n.find(".ui-state-active"), null, "ui-state-active"),
                this.activeMenu = n
            }
            ), this.delay)
        },
        _close: function(e) {
            e || (e = this.active ? this.active.parent() : this.element),
            e.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false")
        },
        _closeOnDocumentClick: function(t) {
            return !e(t.target).closest(".ui-menu").length
        },
        _isDivider: function(e) {
            return !/[^\-\u2014\u2013\s]/.test(e.text())
        },
        collapse: function(e) {
            var t = this.active && this.active.parent().closest(".ui-menu-item", this.element);
            t && t.length && (this._close(),
            this.focus(e, t))
        },
        expand: function(e) {
            var t = this.active && this.active.children(".ui-menu ").find(this.options.items).first();
            t && t.length && (this._open(t.parent()),
            this._delay((function() {
                this.focus(e, t)
            }
            )))
        },
        next: function(e) {
            this._move("next", "first", e)
        },
        previous: function(e) {
            this._move("prev", "last", e)
        },
        isFirstItem: function() {
            return this.active && !this.active.prevAll(".ui-menu-item").length
        },
        isLastItem: function() {
            return this.active && !this.active.nextAll(".ui-menu-item").length
        },
        _move: function(e, t, i) {
            var n;
            this.active && (n = "first" === e || "last" === e ? this.active["first" === e ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1) : this.active[e + "All"](".ui-menu-item").eq(0)),
            n && n.length && this.active || (n = this.activeMenu.find(this.options.items)[t]()),
            this.focus(i, n)
        },
        nextPage: function(t) {
            var i, n, s;
            this.active ? this.isLastItem() || (this._hasScroll() ? (n = this.active.offset().top,
            s = this.element.height(),
            this.active.nextAll(".ui-menu-item").each((function() {
                return (i = e(this)).offset().top - n - s < 0
            }
            )),
            this.focus(t, i)) : this.focus(t, this.activeMenu.find(this.options.items)[this.active ? "last" : "first"]())) : this.next(t)
        },
        previousPage: function(t) {
            var i, n, s;
            this.active ? this.isFirstItem() || (this._hasScroll() ? (n = this.active.offset().top,
            s = this.element.height(),
            this.active.prevAll(".ui-menu-item").each((function() {
                return (i = e(this)).offset().top - n + s > 0
            }
            )),
            this.focus(t, i)) : this.focus(t, this.activeMenu.find(this.options.items).first())) : this.next(t)
        },
        _hasScroll: function() {
            return this.element.outerHeight() < this.element.prop("scrollHeight")
        },
        select: function(t) {
            this.active = this.active || e(t.target).closest(".ui-menu-item");
            var i = {
                item: this.active
            };
            this.active.has(".ui-menu").length || this.collapseAll(t, !0),
            this._trigger("select", t, i)
        },
        _filterMenuItems: function(t) {
            var i = t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
              , n = new RegExp("^" + i,"i");
            return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter((function() {
                return n.test(e.trim(e(this).children(".ui-menu-item-wrapper").text()))
            }
            ))
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./menu", "../keycode", "../position", "../safe-active-element", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.autocomplete", {
        version: "1.12.1",
        defaultElement: "<input>",
        options: {
            appendTo: null,
            autoFocus: !1,
            delay: 300,
            minLength: 1,
            position: {
                my: "left top",
                at: "left bottom",
                collision: "none"
            },
            source: null,
            change: null,
            close: null,
            focus: null,
            open: null,
            response: null,
            search: null,
            select: null
        },
        requestIndex: 0,
        pending: 0,
        _create: function() {
            var t, i, n, s = this.element[0].nodeName.toLowerCase(), o = "textarea" === s, a = "input" === s;
            this.isMultiLine = o || !a && this._isContentEditable(this.element),
            this.valueMethod = this.element[o || a ? "val" : "text"],
            this.isNewMenu = !0,
            this._addClass("ui-autocomplete-input"),
            this.element.attr("autocomplete", "off"),
            this._on(this.element, {
                keydown: function(s) {
                    if (this.element.prop("readOnly"))
                        return t = !0,
                        n = !0,
                        void (i = !0);
                    t = !1,
                    n = !1,
                    i = !1;
                    var o = e.ui.keyCode;
                    switch (s.keyCode) {
                    case o.PAGE_UP:
                        t = !0,
                        this._move("previousPage", s);
                        break;
                    case o.PAGE_DOWN:
                        t = !0,
                        this._move("nextPage", s);
                        break;
                    case o.UP:
                        t = !0,
                        this._keyEvent("previous", s);
                        break;
                    case o.DOWN:
                        t = !0,
                        this._keyEvent("next", s);
                        break;
                    case o.ENTER:
                        this.menu.active && (t = !0,
                        s.preventDefault(),
                        this.menu.select(s));
                        break;
                    case o.TAB:
                        this.menu.active && this.menu.select(s);
                        break;
                    case o.ESCAPE:
                        this.menu.element.is(":visible") && (this.isMultiLine || this._value(this.term),
                        this.close(s),
                        s.preventDefault());
                        break;
                    default:
                        i = !0,
                        this._searchTimeout(s)
                    }
                },
                keypress: function(n) {
                    if (t)
                        return t = !1,
                        void (this.isMultiLine && !this.menu.element.is(":visible") || n.preventDefault());
                    if (!i) {
                        var s = e.ui.keyCode;
                        switch (n.keyCode) {
                        case s.PAGE_UP:
                            this._move("previousPage", n);
                            break;
                        case s.PAGE_DOWN:
                            this._move("nextPage", n);
                            break;
                        case s.UP:
                            this._keyEvent("previous", n);
                            break;
                        case s.DOWN:
                            this._keyEvent("next", n)
                        }
                    }
                },
                input: function(e) {
                    if (n)
                        return n = !1,
                        void e.preventDefault();
                    this._searchTimeout(e)
                },
                focus: function() {
                    this.selectedItem = null,
                    this.previous = this._value()
                },
                blur: function(e) {
                    this.cancelBlur ? delete this.cancelBlur : (clearTimeout(this.searching),
                    this.close(e),
                    this._change(e))
                }
            }),
            this._initSource(),
            this.menu = e("<ul>").appendTo(this._appendTo()).menu({
                role: null
            }).hide().menu("instance"),
            this._addClass(this.menu.element, "ui-autocomplete", "ui-front"),
            this._on(this.menu.element, {
                mousedown: function(t) {
                    t.preventDefault(),
                    this.cancelBlur = !0,
                    this._delay((function() {
                        delete this.cancelBlur,
                        this.element[0] !== e.ui.safeActiveElement(this.document[0]) && this.element.trigger("focus")
                    }
                    ))
                },
                menufocus: function(t, i) {
                    var n, s;
                    if (this.isNewMenu && (this.isNewMenu = !1,
                    t.originalEvent && /^mouse/.test(t.originalEvent.type)))
                        return this.menu.blur(),
                        void this.document.one("mousemove", (function() {
                            e(t.target).trigger(t.originalEvent)
                        }
                        ));
                    s = i.item.data("ui-autocomplete-item"),
                    !1 !== this._trigger("focus", t, {
                        item: s
                    }) && t.originalEvent && /^key/.test(t.originalEvent.type) && this._value(s.value),
                    (n = i.item.attr("aria-label") || s.value) && e.trim(n).length && (this.liveRegion.children().hide(),
                    e("<div>").text(n).appendTo(this.liveRegion))
                },
                menuselect: function(t, i) {
                    var n = i.item.data("ui-autocomplete-item")
                      , s = this.previous;
                    this.element[0] !== e.ui.safeActiveElement(this.document[0]) && (this.element.trigger("focus"),
                    this.previous = s,
                    this._delay((function() {
                        this.previous = s,
                        this.selectedItem = n
                    }
                    ))),
                    !1 !== this._trigger("select", t, {
                        item: n
                    }) && this._value(n.value),
                    this.term = this._value(),
                    this.close(t),
                    this.selectedItem = n
                }
            }),
            this.liveRegion = e("<div>", {
                role: "status",
                "aria-live": "assertive",
                "aria-relevant": "additions"
            }).appendTo(this.document[0].body),
            this._addClass(this.liveRegion, null, "ui-helper-hidden-accessible"),
            this._on(this.window, {
                beforeunload: function() {
                    this.element.removeAttr("autocomplete")
                }
            })
        },
        _destroy: function() {
            clearTimeout(this.searching),
            this.element.removeAttr("autocomplete"),
            this.menu.element.remove(),
            this.liveRegion.remove()
        },
        _setOption: function(e, t) {
            this._super(e, t),
            "source" === e && this._initSource(),
            "appendTo" === e && this.menu.element.appendTo(this._appendTo()),
            "disabled" === e && t && this.xhr && this.xhr.abort()
        },
        _isEventTargetInWidget: function(t) {
            var i = this.menu.element[0];
            return t.target === this.element[0] || t.target === i || e.contains(i, t.target)
        },
        _closeOnClickOutside: function(e) {
            this._isEventTargetInWidget(e) || this.close()
        },
        _appendTo: function() {
            var t = this.options.appendTo;
            return t && (t = t.jquery || t.nodeType ? e(t) : this.document.find(t).eq(0)),
            t && t[0] || (t = this.element.closest(".ui-front, dialog")),
            t.length || (t = this.document[0].body),
            t
        },
        _initSource: function() {
            var t, i, n = this;
            e.isArray(this.options.source) ? (t = this.options.source,
            this.source = function(i, n) {
                n(e.ui.autocomplete.filter(t, i.term))
            }
            ) : "string" == typeof this.options.source ? (i = this.options.source,
            this.source = function(t, s) {
                n.xhr && n.xhr.abort(),
                n.xhr = e.ajax({
                    url: i,
                    data: t,
                    dataType: "json",
                    success: function(e) {
                        s(e)
                    },
                    error: function() {
                        s([])
                    }
                })
            }
            ) : this.source = this.options.source
        },
        _searchTimeout: function(e) {
            clearTimeout(this.searching),
            this.searching = this._delay((function() {
                var t = this.term === this._value()
                  , i = this.menu.element.is(":visible")
                  , n = e.altKey || e.ctrlKey || e.metaKey || e.shiftKey;
                t && (!t || i || n) || (this.selectedItem = null,
                this.search(null, e))
            }
            ), this.options.delay)
        },
        search: function(e, t) {
            return e = null != e ? e : this._value(),
            this.term = this._value(),
            e.length < this.options.minLength ? this.close(t) : !1 !== this._trigger("search", t) ? this._search(e) : void 0
        },
        _search: function(e) {
            this.pending++,
            this._addClass("ui-autocomplete-loading"),
            this.cancelSearch = !1,
            this.source({
                term: e
            }, this._response())
        },
        _response: function() {
            var t = ++this.requestIndex;
            return e.proxy((function(e) {
                t === this.requestIndex && this.__response(e),
                this.pending--,
                this.pending || this._removeClass("ui-autocomplete-loading")
            }
            ), this)
        },
        __response: function(e) {
            e && (e = this._normalize(e)),
            this._trigger("response", null, {
                content: e
            }),
            !this.options.disabled && e && e.length && !this.cancelSearch ? (this._suggest(e),
            this._trigger("open")) : this._close()
        },
        close: function(e) {
            this.cancelSearch = !0,
            this._close(e)
        },
        _close: function(e) {
            this._off(this.document, "mousedown"),
            this.menu.element.is(":visible") && (this.menu.element.hide(),
            this.menu.blur(),
            this.isNewMenu = !0,
            this._trigger("close", e))
        },
        _change: function(e) {
            this.previous !== this._value() && this._trigger("change", e, {
                item: this.selectedItem
            })
        },
        _normalize: function(t) {
            return t.length && t[0].label && t[0].value ? t : e.map(t, (function(t) {
                return "string" == typeof t ? {
                    label: t,
                    value: t
                } : e.extend({}, t, {
                    label: t.label || t.value,
                    value: t.value || t.label
                })
            }
            ))
        },
        _suggest: function(t) {
            var i = this.menu.element.empty();
            this._renderMenu(i, t),
            this.isNewMenu = !0,
            this.menu.refresh(),
            i.show(),
            this._resizeMenu(),
            i.position(e.extend({
                of: this.element
            }, this.options.position)),
            this.options.autoFocus && this.menu.next(),
            this._on(this.document, {
                mousedown: "_closeOnClickOutside"
            })
        },
        _resizeMenu: function() {
            var e = this.menu.element;
            e.outerWidth(Math.max(e.width("").outerWidth() + 1, this.element.outerWidth()))
        },
        _renderMenu: function(t, i) {
            var n = this;
            e.each(i, (function(e, i) {
                n._renderItemData(t, i)
            }
            ))
        },
        _renderItemData: function(e, t) {
            return this._renderItem(e, t).data("ui-autocomplete-item", t)
        },
        _renderItem: function(t, i) {
            return e("<li>").append(e("<div>").text(i.label)).appendTo(t)
        },
        _move: function(e, t) {
            if (this.menu.element.is(":visible"))
                return this.menu.isFirstItem() && /^previous/.test(e) || this.menu.isLastItem() && /^next/.test(e) ? (this.isMultiLine || this._value(this.term),
                void this.menu.blur()) : void this.menu[e](t);
            this.search(null, t)
        },
        widget: function() {
            return this.menu.element
        },
        _value: function() {
            return this.valueMethod.apply(this.element, arguments)
        },
        _keyEvent: function(e, t) {
            this.isMultiLine && !this.menu.element.is(":visible") || (this._move(e, t),
            t.preventDefault())
        },
        _isContentEditable: function(e) {
            if (!e.length)
                return !1;
            var t = e.prop("contentEditable");
            return "inherit" === t ? this._isContentEditable(e.parent()) : "true" === t
        }
    }),
    e.extend(e.ui.autocomplete, {
        escapeRegex: function(e) {
            return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
        },
        filter: function(t, i) {
            var n = new RegExp(e.ui.autocomplete.escapeRegex(i),"i");
            return e.grep(t, (function(e) {
                return n.test(e.label || e.value || e)
            }
            ))
        }
    }),
    e.widget("ui.autocomplete", e.ui.autocomplete, {
        options: {
            messages: {
                noResults: "No search results.",
                results: function(e) {
                    return e + (e > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."
                }
            }
        },
        __response: function(t) {
            var i;
            this._superApply(arguments),
            this.options.disabled || this.cancelSearch || (i = t && t.length ? this.options.messages.results(t.length) : this.options.messages.noResults,
            this.liveRegion.children().hide(),
            e("<div>").text(i).appendTo(this.liveRegion))
        }
    }),
    e.ui.autocomplete
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../widget"], e) : e(jQuery)
}((function(e) {
    var t = /ui-corner-([a-z]){2,6}/g;
    return e.widget("ui.controlgroup", {
        version: "1.12.1",
        defaultElement: "<div>",
        options: {
            direction: "horizontal",
            disabled: null,
            onlyVisible: !0,
            items: {
                button: "input[type=button], input[type=submit], input[type=reset], button, a",
                controlgroupLabel: ".ui-controlgroup-label",
                checkboxradio: "input[type='checkbox'], input[type='radio']",
                selectmenu: "select",
                spinner: ".ui-spinner-input"
            }
        },
        _create: function() {
            this._enhance()
        },
        _enhance: function() {
            this.element.attr("role", "toolbar"),
            this.refresh()
        },
        _destroy: function() {
            this._callChildMethod("destroy"),
            this.childWidgets.removeData("ui-controlgroup-data"),
            this.element.removeAttr("role"),
            this.options.items.controlgroupLabel && this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()
        },
        _initWidgets: function() {
            var t = this
              , i = [];
            e.each(this.options.items, (function(n, s) {
                var o, a = {};
                if (s)
                    return "controlgroupLabel" === n ? ((o = t.element.find(s)).each((function() {
                        var t = e(this);
                        t.children(".ui-controlgroup-label-contents").length || t.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")
                    }
                    )),
                    t._addClass(o, null, "ui-widget ui-widget-content ui-state-default"),
                    void (i = i.concat(o.get()))) : void (e.fn[n] && (a = t["_" + n + "Options"] ? t["_" + n + "Options"]("middle") : {
                        classes: {}
                    },
                    t.element.find(s).each((function() {
                        var s = e(this)
                          , o = s[n]("instance")
                          , r = e.widget.extend({}, a);
                        if ("button" !== n || !s.parent(".ui-spinner").length) {
                            o || (o = s[n]()[n]("instance")),
                            o && (r.classes = t._resolveClassesValues(r.classes, o)),
                            s[n](r);
                            var l = s[n]("widget");
                            e.data(l[0], "ui-controlgroup-data", o || s[n]("instance")),
                            i.push(l[0])
                        }
                    }
                    ))))
            }
            )),
            this.childWidgets = e(e.unique(i)),
            this._addClass(this.childWidgets, "ui-controlgroup-item")
        },
        _callChildMethod: function(t) {
            this.childWidgets.each((function() {
                var i = e(this).data("ui-controlgroup-data");
                i && i[t] && i[t]()
            }
            ))
        },
        _updateCornerClass: function(e, t) {
            var i = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"
              , n = this._buildSimpleOptions(t, "label").classes.label;
            this._removeClass(e, null, i),
            this._addClass(e, null, n)
        },
        _buildSimpleOptions: function(e, t) {
            var i = "vertical" === this.options.direction
              , n = {
                classes: {}
            };
            return n.classes[t] = {
                middle: "",
                first: "ui-corner-" + (i ? "top" : "left"),
                last: "ui-corner-" + (i ? "bottom" : "right"),
                only: "ui-corner-all"
            }[e],
            n
        },
        _spinnerOptions: function(e) {
            var t = this._buildSimpleOptions(e, "ui-spinner");
            return t.classes["ui-spinner-up"] = "",
            t.classes["ui-spinner-down"] = "",
            t
        },
        _buttonOptions: function(e) {
            return this._buildSimpleOptions(e, "ui-button")
        },
        _checkboxradioOptions: function(e) {
            return this._buildSimpleOptions(e, "ui-checkboxradio-label")
        },
        _selectmenuOptions: function(e) {
            var t = "vertical" === this.options.direction;
            return {
                width: !!t && "auto",
                classes: {
                    middle: {
                        "ui-selectmenu-button-open": "",
                        "ui-selectmenu-button-closed": ""
                    },
                    first: {
                        "ui-selectmenu-button-open": "ui-corner-" + (t ? "top" : "tl"),
                        "ui-selectmenu-button-closed": "ui-corner-" + (t ? "top" : "left")
                    },
                    last: {
                        "ui-selectmenu-button-open": t ? "" : "ui-corner-tr",
                        "ui-selectmenu-button-closed": "ui-corner-" + (t ? "bottom" : "right")
                    },
                    only: {
                        "ui-selectmenu-button-open": "ui-corner-top",
                        "ui-selectmenu-button-closed": "ui-corner-all"
                    }
                }[e]
            }
        },
        _resolveClassesValues: function(i, n) {
            var s = {};
            return e.each(i, (function(o) {
                var a = n.options.classes[o] || "";
                a = e.trim(a.replace(t, "")),
                s[o] = (a + " " + i[o]).replace(/\s+/g, " ")
            }
            )),
            s
        },
        _setOption: function(e, t) {
            "direction" === e && this._removeClass("ui-controlgroup-" + this.options.direction),
            this._super(e, t),
            "disabled" !== e ? this.refresh() : this._callChildMethod(t ? "disable" : "enable")
        },
        refresh: function() {
            var t, i = this;
            this._addClass("ui-controlgroup ui-controlgroup-" + this.options.direction),
            "horizontal" === this.options.direction && this._addClass(null, "ui-helper-clearfix"),
            this._initWidgets(),
            t = this.childWidgets,
            this.options.onlyVisible && (t = t.filter(":visible")),
            t.length && (e.each(["first", "last"], (function(e, n) {
                var s = t[n]().data("ui-controlgroup-data");
                if (s && i["_" + s.widgetName + "Options"]) {
                    var o = i["_" + s.widgetName + "Options"](1 === t.length ? "only" : n);
                    o.classes = i._resolveClassesValues(o.classes, s),
                    s.element[s.widgetName](o)
                } else
                    i._updateCornerClass(t[n](), n)
            }
            )),
            this._callChildMethod("refresh"))
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../escape-selector", "../form-reset-mixin", "../labels", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.checkboxradio", [e.ui.formResetMixin, {
        version: "1.12.1",
        options: {
            disabled: null,
            label: null,
            icon: !0,
            classes: {
                "ui-checkboxradio-label": "ui-corner-all",
                "ui-checkboxradio-icon": "ui-corner-all"
            }
        },
        _getCreateOptions: function() {
            var t, i, n = this, s = this._super() || {};
            return this._readType(),
            i = this.element.labels(),
            this.label = e(i[i.length - 1]),
            this.label.length || e.error("No label found for checkboxradio widget"),
            this.originalLabel = "",
            this.label.contents().not(this.element[0]).each((function() {
                n.originalLabel += 3 === this.nodeType ? e(this).text() : this.outerHTML
            }
            )),
            this.originalLabel && (s.label = this.originalLabel),
            null != (t = this.element[0].disabled) && (s.disabled = t),
            s
        },
        _create: function() {
            var e = this.element[0].checked;
            this._bindFormResetHandler(),
            null == this.options.disabled && (this.options.disabled = this.element[0].disabled),
            this._setOption("disabled", this.options.disabled),
            this._addClass("ui-checkboxradio", "ui-helper-hidden-accessible"),
            this._addClass(this.label, "ui-checkboxradio-label", "ui-button ui-widget"),
            "radio" === this.type && this._addClass(this.label, "ui-checkboxradio-radio-label"),
            this.options.label && this.options.label !== this.originalLabel ? this._updateLabel() : this.originalLabel && (this.options.label = this.originalLabel),
            this._enhance(),
            e && (this._addClass(this.label, "ui-checkboxradio-checked", "ui-state-active"),
            this.icon && this._addClass(this.icon, null, "ui-state-hover")),
            this._on({
                change: "_toggleClasses",
                focus: function() {
                    this._addClass(this.label, null, "ui-state-focus ui-visual-focus")
                },
                blur: function() {
                    this._removeClass(this.label, null, "ui-state-focus ui-visual-focus")
                }
            })
        },
        _readType: function() {
            var t = this.element[0].nodeName.toLowerCase();
            this.type = this.element[0].type,
            "input" === t && /radio|checkbox/.test(this.type) || e.error("Can't create checkboxradio on element.nodeName=" + t + " and element.type=" + this.type)
        },
        _enhance: function() {
            this._updateIcon(this.element[0].checked)
        },
        widget: function() {
            return this.label
        },
        _getRadioGroup: function() {
            var t = this.element[0].name
              , i = "input[name='" + e.ui.escapeSelector(t) + "']";
            return t ? (this.form.length ? e(this.form[0].elements).filter(i) : e(i).filter((function() {
                return 0 === e(this).form().length
            }
            ))).not(this.element) : e([])
        },
        _toggleClasses: function() {
            var t = this.element[0].checked;
            this._toggleClass(this.label, "ui-checkboxradio-checked", "ui-state-active", t),
            this.options.icon && "checkbox" === this.type && this._toggleClass(this.icon, null, "ui-icon-check ui-state-checked", t)._toggleClass(this.icon, null, "ui-icon-blank", !t),
            "radio" === this.type && this._getRadioGroup().each((function() {
                var t = e(this).checkboxradio("instance");
                t && t._removeClass(t.label, "ui-checkboxradio-checked", "ui-state-active")
            }
            ))
        },
        _destroy: function() {
            this._unbindFormResetHandler(),
            this.icon && (this.icon.remove(),
            this.iconSpace.remove())
        },
        _setOption: function(e, t) {
            if ("label" !== e || t) {
                if (this._super(e, t),
                "disabled" === e)
                    return this._toggleClass(this.label, null, "ui-state-disabled", t),
                    void (this.element[0].disabled = t);
                this.refresh()
            }
        },
        _updateIcon: function(t) {
            var i = "ui-icon ui-icon-background ";
            this.options.icon ? (this.icon || (this.icon = e("<span>"),
            this.iconSpace = e("<span> </span>"),
            this._addClass(this.iconSpace, "ui-checkboxradio-icon-space")),
            "checkbox" === this.type ? (i += t ? "ui-icon-check ui-state-checked" : "ui-icon-blank",
            this._removeClass(this.icon, null, t ? "ui-icon-blank" : "ui-icon-check")) : i += "ui-icon-blank",
            this._addClass(this.icon, "ui-checkboxradio-icon", i),
            t || this._removeClass(this.icon, null, "ui-icon-check ui-state-checked"),
            this.icon.prependTo(this.label).after(this.iconSpace)) : void 0 !== this.icon && (this.icon.remove(),
            this.iconSpace.remove(),
            delete this.icon)
        },
        _updateLabel: function() {
            var e = this.label.contents().not(this.element[0]);
            this.icon && (e = e.not(this.icon[0])),
            this.iconSpace && (e = e.not(this.iconSpace[0])),
            e.remove(),
            this.label.append(this.options.label)
        },
        refresh: function() {
            var e = this.element[0].checked
              , t = this.element[0].disabled;
            this._updateIcon(e),
            this._toggleClass(this.label, "ui-checkboxradio-checked", "ui-state-active", e),
            null !== this.options.label && this._updateLabel(),
            t !== this.options.disabled && this._setOptions({
                disabled: t
            })
        }
    }]),
    e.ui.checkboxradio
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./controlgroup", "./checkboxradio", "../keycode", "../widget"], e) : e(jQuery)
}((function(e) {
    var t;
    return e.widget("ui.button", {
        version: "1.12.1",
        defaultElement: "<button>",
        options: {
            classes: {
                "ui-button": "ui-corner-all"
            },
            disabled: null,
            icon: null,
            iconPosition: "beginning",
            label: null,
            showLabel: !0
        },
        _getCreateOptions: function() {
            var e, t = this._super() || {};
            return this.isInput = this.element.is("input"),
            null != (e = this.element[0].disabled) && (t.disabled = e),
            this.originalLabel = this.isInput ? this.element.val() : this.element.php(),
            this.originalLabel && (t.label = this.originalLabel),
            t
        },
        _create: function() {
            !this.option.showLabel & !this.options.icon && (this.options.showLabel = !0),
            null == this.options.disabled && (this.options.disabled = this.element[0].disabled || !1),
            this.hasTitle = !!this.element.attr("title"),
            this.options.label && this.options.label !== this.originalLabel && (this.isInput ? this.element.val(this.options.label) : this.element.php(this.options.label)),
            this._addClass("ui-button", "ui-widget"),
            this._setOption("disabled", this.options.disabled),
            this._enhance(),
            this.element.is("a") && this._on({
                keyup: function(t) {
                    t.keyCode === e.ui.keyCode.SPACE && (t.preventDefault(),
                    this.element[0].click ? this.element[0].click() : this.element.trigger("click"))
                }
            })
        },
        _enhance: function() {
            this.element.is("button") || this.element.attr("role", "button"),
            this.options.icon && (this._updateIcon("icon", this.options.icon),
            this._updateTooltip())
        },
        _updateTooltip: function() {
            this.title = this.element.attr("title"),
            this.options.showLabel || this.title || this.element.attr("title", this.options.label)
        },
        _updateIcon: function(t, i) {
            var n = "iconPosition" !== t
              , s = n ? this.options.iconPosition : i
              , o = "top" === s || "bottom" === s;
            this.icon ? n && this._removeClass(this.icon, null, this.options.icon) : (this.icon = e("<span>"),
            this._addClass(this.icon, "ui-button-icon", "ui-icon"),
            this.options.showLabel || this._addClass("ui-button-icon-only")),
            n && this._addClass(this.icon, null, i),
            this._attachIcon(s),
            o ? (this._addClass(this.icon, null, "ui-widget-icon-block"),
            this.iconSpace && this.iconSpace.remove()) : (this.iconSpace || (this.iconSpace = e("<span> </span>"),
            this._addClass(this.iconSpace, "ui-button-icon-space")),
            this._removeClass(this.icon, null, "ui-wiget-icon-block"),
            this._attachIconSpace(s))
        },
        _destroy: function() {
            this.element.removeAttr("role"),
            this.icon && this.icon.remove(),
            this.iconSpace && this.iconSpace.remove(),
            this.hasTitle || this.element.removeAttr("title")
        },
        _attachIconSpace: function(e) {
            this.icon[/^(?:end|bottom)/.test(e) ? "before" : "after"](this.iconSpace)
        },
        _attachIcon: function(e) {
            this.element[/^(?:end|bottom)/.test(e) ? "append" : "prepend"](this.icon)
        },
        _setOptions: function(e) {
            var t = void 0 === e.showLabel ? this.options.showLabel : e.showLabel
              , i = void 0 === e.icon ? this.options.icon : e.icon;
            t || i || (e.showLabel = !0),
            this._super(e)
        },
        _setOption: function(e, t) {
            "icon" === e && (t ? this._updateIcon(e, t) : this.icon && (this.icon.remove(),
            this.iconSpace && this.iconSpace.remove())),
            "iconPosition" === e && this._updateIcon(e, t),
            "showLabel" === e && (this._toggleClass("ui-button-icon-only", null, !t),
            this._updateTooltip()),
            "label" === e && (this.isInput ? this.element.val(t) : (this.element.php(t),
            this.icon && (this._attachIcon(this.options.iconPosition),
            this._attachIconSpace(this.options.iconPosition)))),
            this._super(e, t),
            "disabled" === e && (this._toggleClass(null, "ui-state-disabled", t),
            this.element[0].disabled = t,
            t && this.element.blur())
        },
        refresh: function() {
            var e = this.element.is("input, button") ? this.element[0].disabled : this.element.hasClass("ui-button-disabled");
            e !== this.options.disabled && this._setOptions({
                disabled: e
            }),
            this._updateTooltip()
        }
    }),
    !1 !== e.uiBackCompat && (e.widget("ui.button", e.ui.button, {
        options: {
            text: !0,
            icons: {
                primary: null,
                secondary: null
            }
        },
        _create: function() {
            this.options.showLabel && !this.options.text && (this.options.showLabel = this.options.text),
            !this.options.showLabel && this.options.text && (this.options.text = this.options.showLabel),
            this.options.icon || !this.options.icons.primary && !this.options.icons.secondary ? this.options.icon && (this.options.icons.primary = this.options.icon) : this.options.icons.primary ? this.options.icon = this.options.icons.primary : (this.options.icon = this.options.icons.secondary,
            this.options.iconPosition = "end"),
            this._super()
        },
        _setOption: function(e, t) {
            "text" !== e ? ("showLabel" === e && (this.options.text = t),
            "icon" === e && (this.options.icons.primary = t),
            "icons" === e && (t.primary ? (this._super("icon", t.primary),
            this._super("iconPosition", "beginning")) : t.secondary && (this._super("icon", t.secondary),
            this._super("iconPosition", "end"))),
            this._superApply(arguments)) : this._super("showLabel", t)
        }
    }),
    e.fn.button = (t = e.fn.button,
    function() {
        return !this.length || this.length && "INPUT" !== this[0].tagName || this.length && "INPUT" === this[0].tagName && "checkbox" !== this.attr("type") && "radio" !== this.attr("type") ? t.apply(this, arguments) : (e.ui.checkboxradio || e.error("Checkboxradio widget missing"),
        0 === arguments.length ? this.checkboxradio({
            icon: !1
        }) : this.checkboxradio.apply(this, arguments))
    }
    ),
    e.fn.buttonset = function() {
        return e.ui.controlgroup || e.error("Controlgroup widget missing"),
        "option" === arguments[0] && "items" === arguments[1] && arguments[2] ? this.controlgroup.apply(this, [arguments[0], "items.button", arguments[2]]) : "option" === arguments[0] && "items" === arguments[1] ? this.controlgroup.apply(this, [arguments[0], "items.button"]) : ("object" == typeof arguments[0] && arguments[0].items && (arguments[0].items = {
            button: arguments[0].items
        }),
        this.controlgroup.apply(this, arguments))
    }
    ),
    e.ui.button
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../keycode"], e) : e(jQuery)
}((function(e) {
    function t(e) {
        for (var t, i; e.length && e[0] !== document; ) {
            if (("absolute" === (t = e.css("position")) || "relative" === t || "fixed" === t) && (i = parseInt(e.css("zIndex"), 10),
            !isNaN(i) && 0 !== i))
                return i;
            e = e.parent()
        }
        return 0
    }
    function i() {
        this._curInst = null,
        this._keyEvent = !1,
        this._disabledInputs = [],
        this._datepickerShowing = !1,
        this._inDialog = !1,
        this._mainDivId = "ui-datepicker-div",
        this._inlineClass = "ui-datepicker-inline",
        this._appendClass = "ui-datepicker-append",
        this._triggerClass = "ui-datepicker-trigger",
        this._dialogClass = "ui-datepicker-dialog",
        this._disableClass = "ui-datepicker-disabled",
        this._unselectableClass = "ui-datepicker-unselectable",
        this._currentClass = "ui-datepicker-current-day",
        this._dayOverClass = "ui-datepicker-days-cell-over",
        this.regional = [],
        this.regional[""] = {
            closeText: "Done",
            prevText: "Prev",
            nextText: "Next",
            currentText: "Today",
            monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
            dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
            dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
            weekHeader: "Wk",
            dateFormat: "mm/dd/yy",
            firstDay: 0,
            isRTL: !1,
            showMonthAfterYear: !1,
            yearSuffix: ""
        },
        this._defaults = {
            showOn: "focus",
            showAnim: "fadeIn",
            showOptions: {},
            defaultDate: null,
            appendText: "",
            buttonText: "...",
            buttonImage: "",
            buttonImageOnly: !1,
            hideIfNoPrevNext: !1,
            navigationAsDateFormat: !1,
            gotoCurrent: !1,
            changeMonth: !1,
            changeYear: !1,
            yearRange: "c-10:c+10",
            showOtherMonths: !1,
            selectOtherMonths: !1,
            showWeek: !1,
            calculateWeek: this.iso8601Week,
            shortYearCutoff: "+10",
            minDate: null,
            maxDate: null,
            duration: "fast",
            beforeShowDay: null,
            beforeShow: null,
            onSelect: null,
            onChangeMonthYear: null,
            onClose: null,
            numberOfMonths: 1,
            showCurrentAtPos: 0,
            stepMonths: 1,
            stepBigMonths: 12,
            altField: "",
            altFormat: "",
            constrainInput: !0,
            showButtonPanel: !1,
            autoSize: !1,
            disabled: !1
        },
        e.extend(this._defaults, this.regional[""]),
        this.regional.en = e.extend(!0, {}, this.regional[""]),
        this.regional["en-US"] = e.extend(!0, {}, this.regional.en),
        this.dpDiv = n(e("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))
    }
    function n(t) {
        var i = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
        return t.on("mouseout", i, (function() {
            e(this).removeClass("ui-state-hover"),
            -1 !== this.className.indexOf("ui-datepicker-prev") && e(this).removeClass("ui-datepicker-prev-hover"),
            -1 !== this.className.indexOf("ui-datepicker-next") && e(this).removeClass("ui-datepicker-next-hover")
        }
        )).on("mouseover", i, s)
    }
    function s() {
        e.datepicker._isDisabledDatepicker(a.inline ? a.dpDiv.parent()[0] : a.input[0]) || (e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),
        e(this).addClass("ui-state-hover"),
        -1 !== this.className.indexOf("ui-datepicker-prev") && e(this).addClass("ui-datepicker-prev-hover"),
        -1 !== this.className.indexOf("ui-datepicker-next") && e(this).addClass("ui-datepicker-next-hover"))
    }
    function o(t, i) {
        for (var n in e.extend(t, i),
        i)
            null == i[n] && (t[n] = i[n]);
        return t
    }
    var a;
    return e.extend(e.ui, {
        datepicker: {
            version: "1.12.1"
        }
    }),
    e.extend(i.prototype, {
        markerClassName: "hasDatepicker",
        maxRows: 4,
        _widgetDatepicker: function() {
            return this.dpDiv
        },
        setDefaults: function(e) {
            return o(this._defaults, e || {}),
            this
        },
        _attachDatepicker: function(t, i) {
            var n, s, o;
            s = "div" === (n = t.nodeName.toLowerCase()) || "span" === n,
            t.id || (this.uuid += 1,
            t.id = "dp" + this.uuid),
            (o = this._newInst(e(t), s)).settings = e.extend({}, i || {}),
            "input" === n ? this._connectDatepicker(t, o) : s && this._inlineDatepicker(t, o)
        },
        _newInst: function(t, i) {
            return {
                id: t[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"),
                input: t,
                selectedDay: 0,
                selectedMonth: 0,
                selectedYear: 0,
                drawMonth: 0,
                drawYear: 0,
                inline: i,
                dpDiv: i ? n(e("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) : this.dpDiv
            }
        },
        _connectDatepicker: function(t, i) {
            var n = e(t);
            i.append = e([]),
            i.trigger = e([]),
            n.hasClass(this.markerClassName) || (this._attachments(n, i),
            n.addClass(this.markerClassName).on("keydown", this._doKeyDown).on("keypress", this._doKeyPress).on("keyup", this._doKeyUp),
            this._autoSize(i),
            e.data(t, "datepicker", i),
            i.settings.disabled && this._disableDatepicker(t))
        },
        _attachments: function(t, i) {
            var n, s, o, a = this._get(i, "appendText"), r = this._get(i, "isRTL");
            i.append && i.append.remove(),
            a && (i.append = e("<span class='" + this._appendClass + "'>" + a + "</span>"),
            t[r ? "before" : "after"](i.append)),
            t.off("focus", this._showDatepicker),
            i.trigger && i.trigger.remove(),
            "focus" !== (n = this._get(i, "showOn")) && "both" !== n || t.on("focus", this._showDatepicker),
            "button" !== n && "both" !== n || (s = this._get(i, "buttonText"),
            o = this._get(i, "buttonImage"),
            i.trigger = e(this._get(i, "buttonImageOnly") ? e("<img/>").addClass(this._triggerClass).attr({
                src: o,
                alt: s,
                title: s
            }) : e("<button type='button'></button>").addClass(this._triggerClass).html(o ? e("<img/>").attr({
                src: o,
                alt: s,
                title: s
            }) : s)),
            t[r ? "before" : "after"](i.trigger),
            i.trigger.on("click", (function() {
                return e.datepicker._datepickerShowing && e.datepicker._lastInput === t[0] ? e.datepicker._hideDatepicker() : e.datepicker._datepickerShowing && e.datepicker._lastInput !== t[0] ? (e.datepicker._hideDatepicker(),
                e.datepicker._showDatepicker(t[0])) : e.datepicker._showDatepicker(t[0]),
                !1
            }
            )))
        },
        _autoSize: function(e) {
            if (this._get(e, "autoSize") && !e.inline) {
                var t, i, n, s, o = new Date(2009,11,20), a = this._get(e, "dateFormat");
                a.match(/[DM]/) && (t = function(e) {
                    for (i = 0,
                    n = 0,
                    s = 0; s < e.length; s++)
                        e[s].length > i && (i = e[s].length,
                        n = s);
                    return n
                }
                ,
                o.setMonth(t(this._get(e, a.match(/MM/) ? "monthNames" : "monthNamesShort"))),
                o.setDate(t(this._get(e, a.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - o.getDay())),
                e.input.attr("size", this._formatDate(e, o).length)
            }
        },
        _inlineDatepicker: function(t, i) {
            var n = e(t);
            n.hasClass(this.markerClassName) || (n.addClass(this.markerClassName).append(i.dpDiv),
            e.data(t, "datepicker", i),
            this._setDate(i, this._getDefaultDate(i), !0),
            this._updateDatepicker(i),
            this._updateAlternate(i),
            i.settings.disabled && this._disableDatepicker(t),
            i.dpDiv.css("display", "block"))
        },
        _dialogDatepicker: function(t, i, n, s, a) {
            var r, l, u, d, c, h = this._dialogInst;
            return h || (this.uuid += 1,
            r = "dp" + this.uuid,
            this._dialogInput = e("<input type='text' id='" + r + "' style='position: absolute; top: -100px; width: 0px;'/>"),
            this._dialogInput.on("keydown", this._doKeyDown),
            e("body").append(this._dialogInput),
            (h = this._dialogInst = this._newInst(this._dialogInput, !1)).settings = {},
            e.data(this._dialogInput[0], "datepicker", h)),
            o(h.settings, s || {}),
            i = i && i.constructor === Date ? this._formatDate(h, i) : i,
            this._dialogInput.val(i),
            this._pos = a ? a.length ? a : [a.pageX, a.pageY] : null,
            this._pos || (l = document.documentElement.clientWidth,
            u = document.documentElement.clientHeight,
            d = document.documentElement.scrollLeft || document.body.scrollLeft,
            c = document.documentElement.scrollTop || document.body.scrollTop,
            this._pos = [l / 2 - 100 + d, u / 2 - 150 + c]),
            this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"),
            h.settings.onSelect = n,
            this._inDialog = !0,
            this.dpDiv.addClass(this._dialogClass),
            this._showDatepicker(this._dialogInput[0]),
            e.blockUI && e.blockUI(this.dpDiv),
            e.data(this._dialogInput[0], "datepicker", h),
            this
        },
        _destroyDatepicker: function(t) {
            var i, n = e(t), s = e.data(t, "datepicker");
            n.hasClass(this.markerClassName) && (i = t.nodeName.toLowerCase(),
            e.removeData(t, "datepicker"),
            "input" === i ? (s.append.remove(),
            s.trigger.remove(),
            n.removeClass(this.markerClassName).off("focus", this._showDatepicker).off("keydown", this._doKeyDown).off("keypress", this._doKeyPress).off("keyup", this._doKeyUp)) : "div" !== i && "span" !== i || n.removeClass(this.markerClassName).empty(),
            a === s && (a = null))
        },
        _enableDatepicker: function(t) {
            var i, n, s = e(t), o = e.data(t, "datepicker");
            s.hasClass(this.markerClassName) && ("input" === (i = t.nodeName.toLowerCase()) ? (t.disabled = !1,
            o.trigger.filter("button").each((function() {
                this.disabled = !1
            }
            )).end().filter("img").css({
                opacity: "1.0",
                cursor: ""
            })) : "div" !== i && "span" !== i || ((n = s.children("." + this._inlineClass)).children().removeClass("ui-state-disabled"),
            n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)),
            this._disabledInputs = e.map(this._disabledInputs, (function(e) {
                return e === t ? null : e
            }
            )))
        },
        _disableDatepicker: function(t) {
            var i, n, s = e(t), o = e.data(t, "datepicker");
            s.hasClass(this.markerClassName) && ("input" === (i = t.nodeName.toLowerCase()) ? (t.disabled = !0,
            o.trigger.filter("button").each((function() {
                this.disabled = !0
            }
            )).end().filter("img").css({
                opacity: "0.5",
                cursor: "default"
            })) : "div" !== i && "span" !== i || ((n = s.children("." + this._inlineClass)).children().addClass("ui-state-disabled"),
            n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)),
            this._disabledInputs = e.map(this._disabledInputs, (function(e) {
                return e === t ? null : e
            }
            )),
            this._disabledInputs[this._disabledInputs.length] = t)
        },
        _isDisabledDatepicker: function(e) {
            if (!e)
                return !1;
            for (var t = 0; t < this._disabledInputs.length; t++)
                if (this._disabledInputs[t] === e)
                    return !0;
            return !1
        },
        _getInst: function(t) {
            try {
                return e.data(t, "datepicker")
            } catch (e) {
                throw "Missing instance data for this datepicker"
            }
        },
        _optionDatepicker: function(t, i, n) {
            var s, a, r, l, u = this._getInst(t);
            if (2 === arguments.length && "string" == typeof i)
                return "defaults" === i ? e.extend({}, e.datepicker._defaults) : u ? "all" === i ? e.extend({}, u.settings) : this._get(u, i) : null;
            s = i || {},
            "string" == typeof i && ((s = {})[i] = n),
            u && (this._curInst === u && this._hideDatepicker(),
            a = this._getDateDatepicker(t, !0),
            r = this._getMinMaxDate(u, "min"),
            l = this._getMinMaxDate(u, "max"),
            o(u.settings, s),
            null !== r && void 0 !== s.dateFormat && void 0 === s.minDate && (u.settings.minDate = this._formatDate(u, r)),
            null !== l && void 0 !== s.dateFormat && void 0 === s.maxDate && (u.settings.maxDate = this._formatDate(u, l)),
            "disabled"in s && (s.disabled ? this._disableDatepicker(t) : this._enableDatepicker(t)),
            this._attachments(e(t), u),
            this._autoSize(u),
            this._setDate(u, a),
            this._updateAlternate(u),
            this._updateDatepicker(u))
        },
        _changeDatepicker: function(e, t, i) {
            this._optionDatepicker(e, t, i)
        },
        _refreshDatepicker: function(e) {
            var t = this._getInst(e);
            t && this._updateDatepicker(t)
        },
        _setDateDatepicker: function(e, t) {
            var i = this._getInst(e);
            i && (this._setDate(i, t),
            this._updateDatepicker(i),
            this._updateAlternate(i))
        },
        _getDateDatepicker: function(e, t) {
            var i = this._getInst(e);
            return i && !i.inline && this._setDateFromField(i, t),
            i ? this._getDate(i) : null
        },
        _doKeyDown: function(t) {
            var i, n, s, o = e.datepicker._getInst(t.target), a = !0, r = o.dpDiv.is(".ui-datepicker-rtl");
            if (o._keyEvent = !0,
            e.datepicker._datepickerShowing)
                switch (t.keyCode) {
                case 9:
                    e.datepicker._hideDatepicker(),
                    a = !1;
                    break;
                case 13:
                    return (s = e("td." + e.datepicker._dayOverClass + ":not(." + e.datepicker._currentClass + ")", o.dpDiv))[0] && e.datepicker._selectDay(t.target, o.selectedMonth, o.selectedYear, s[0]),
                    (i = e.datepicker._get(o, "onSelect")) ? (n = e.datepicker._formatDate(o),
                    i.apply(o.input ? o.input[0] : null, [n, o])) : e.datepicker._hideDatepicker(),
                    !1;
                case 27:
                    e.datepicker._hideDatepicker();
                    break;
                case 33:
                    e.datepicker._adjustDate(t.target, t.ctrlKey ? -e.datepicker._get(o, "stepBigMonths") : -e.datepicker._get(o, "stepMonths"), "M");
                    break;
                case 34:
                    e.datepicker._adjustDate(t.target, t.ctrlKey ? +e.datepicker._get(o, "stepBigMonths") : +e.datepicker._get(o, "stepMonths"), "M");
                    break;
                case 35:
                    (t.ctrlKey || t.metaKey) && e.datepicker._clearDate(t.target),
                    a = t.ctrlKey || t.metaKey;
                    break;
                case 36:
                    (t.ctrlKey || t.metaKey) && e.datepicker._gotoToday(t.target),
                    a = t.ctrlKey || t.metaKey;
                    break;
                case 37:
                    (t.ctrlKey || t.metaKey) && e.datepicker._adjustDate(t.target, r ? 1 : -1, "D"),
                    a = t.ctrlKey || t.metaKey,
                    t.originalEvent.altKey && e.datepicker._adjustDate(t.target, t.ctrlKey ? -e.datepicker._get(o, "stepBigMonths") : -e.datepicker._get(o, "stepMonths"), "M");
                    break;
                case 38:
                    (t.ctrlKey || t.metaKey) && e.datepicker._adjustDate(t.target, -7, "D"),
                    a = t.ctrlKey || t.metaKey;
                    break;
                case 39:
                    (t.ctrlKey || t.metaKey) && e.datepicker._adjustDate(t.target, r ? -1 : 1, "D"),
                    a = t.ctrlKey || t.metaKey,
                    t.originalEvent.altKey && e.datepicker._adjustDate(t.target, t.ctrlKey ? +e.datepicker._get(o, "stepBigMonths") : +e.datepicker._get(o, "stepMonths"), "M");
                    break;
                case 40:
                    (t.ctrlKey || t.metaKey) && e.datepicker._adjustDate(t.target, 7, "D"),
                    a = t.ctrlKey || t.metaKey;
                    break;
                default:
                    a = !1
                }
            else
                36 === t.keyCode && t.ctrlKey ? e.datepicker._showDatepicker(this) : a = !1;
            a && (t.preventDefault(),
            t.stopPropagation())
        },
        _doKeyPress: function(t) {
            var i, n, s = e.datepicker._getInst(t.target);
            if (e.datepicker._get(s, "constrainInput"))
                return i = e.datepicker._possibleChars(e.datepicker._get(s, "dateFormat")),
                n = String.fromCharCode(null == t.charCode ? t.keyCode : t.charCode),
                t.ctrlKey || t.metaKey || n < " " || !i || i.indexOf(n) > -1
        },
        _doKeyUp: function(t) {
            var i = e.datepicker._getInst(t.target);
            if (i.input.val() !== i.lastVal)
                try {
                    e.datepicker.parseDate(e.datepicker._get(i, "dateFormat"), i.input ? i.input.val() : null, e.datepicker._getFormatConfig(i)) && (e.datepicker._setDateFromField(i),
                    e.datepicker._updateAlternate(i),
                    e.datepicker._updateDatepicker(i))
                } catch (e) {}
            return !0
        },
        _showDatepicker: function(i) {
            var n, s, a, r, l, u, d;
            ("input" !== (i = i.target || i).nodeName.toLowerCase() && (i = e("input", i.parentNode)[0]),
            e.datepicker._isDisabledDatepicker(i) || e.datepicker._lastInput === i) || (n = e.datepicker._getInst(i),
            e.datepicker._curInst && e.datepicker._curInst !== n && (e.datepicker._curInst.dpDiv.stop(!0, !0),
            n && e.datepicker._datepickerShowing && e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),
            !1 !== (a = (s = e.datepicker._get(n, "beforeShow")) ? s.apply(i, [i, n]) : {}) && (o(n.settings, a),
            n.lastVal = null,
            e.datepicker._lastInput = i,
            e.datepicker._setDateFromField(n),
            e.datepicker._inDialog && (i.value = ""),
            e.datepicker._pos || (e.datepicker._pos = e.datepicker._findPos(i),
            e.datepicker._pos[1] += i.offsetHeight),
            r = !1,
            e(i).parents().each((function() {
                return !(r |= "fixed" === e(this).css("position"))
            }
            )),
            l = {
                left: e.datepicker._pos[0],
                top: e.datepicker._pos[1]
            },
            e.datepicker._pos = null,
            n.dpDiv.empty(),
            n.dpDiv.css({
                position: "absolute",
                display: "block",
                top: "-1000px"
            }),
            e.datepicker._updateDatepicker(n),
            l = e.datepicker._checkOffset(n, l, r),
            n.dpDiv.css({
                position: e.datepicker._inDialog && e.blockUI ? "static" : r ? "fixed" : "absolute",
                display: "none",
                left: l.left + "px",
                top: l.top + "px"
            }),
            n.inline || (u = e.datepicker._get(n, "showAnim"),
            d = e.datepicker._get(n, "duration"),
            n.dpDiv.css("z-index", t(e(i)) + 1),
            e.datepicker._datepickerShowing = !0,
            e.effects && e.effects.effect[u] ? n.dpDiv.show(u, e.datepicker._get(n, "showOptions"), d) : n.dpDiv[u || "show"](u ? d : null),
            e.datepicker._shouldFocusInput(n) && n.input.trigger("focus"),
            e.datepicker._curInst = n)))
        },
        _updateDatepicker: function(t) {
            this.maxRows = 4,
            a = t,
            t.dpDiv.empty().append(this._generateHTML(t)),
            this._attachHandlers(t);
            var i, n = this._getNumberOfMonths(t), o = n[1], r = 17, l = t.dpDiv.find("." + this._dayOverClass + " a");
            l.length > 0 && s.apply(l.get(0)),
            t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),
            o > 1 && t.dpDiv.addClass("ui-datepicker-multi-" + o).css("width", r * o + "em"),
            t.dpDiv[(1 !== n[0] || 1 !== n[1] ? "add" : "remove") + "Class"]("ui-datepicker-multi"),
            t.dpDiv[(this._get(t, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"),
            t === e.datepicker._curInst && e.datepicker._datepickerShowing && e.datepicker._shouldFocusInput(t) && t.input.trigger("focus"),
            t.yearshtml && (i = t.yearshtml,
            setTimeout((function() {
                i === t.yearshtml && t.yearshtml && t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),
                i = t.yearshtml = null
            }
            ), 0))
        },
        _shouldFocusInput: function(e) {
            return e.input && e.input.is(":visible") && !e.input.is(":disabled") && !e.input.is(":focus")
        },
        _checkOffset: function(t, i, n) {
            var s = t.dpDiv.outerWidth()
              , o = t.dpDiv.outerHeight()
              , a = t.input ? t.input.outerWidth() : 0
              , r = t.input ? t.input.outerHeight() : 0
              , l = document.documentElement.clientWidth + (n ? 0 : e(document).scrollLeft())
              , u = document.documentElement.clientHeight + (n ? 0 : e(document).scrollTop());
            return i.left -= this._get(t, "isRTL") ? s - a : 0,
            i.left -= n && i.left === t.input.offset().left ? e(document).scrollLeft() : 0,
            i.top -= n && i.top === t.input.offset().top + r ? e(document).scrollTop() : 0,
            i.left -= Math.min(i.left, i.left + s > l && l > s ? Math.abs(i.left + s - l) : 0),
            i.top -= Math.min(i.top, i.top + o > u && u > o ? Math.abs(o + r) : 0),
            i
        },
        _findPos: function(t) {
            for (var i, n = this._getInst(t), s = this._get(n, "isRTL"); t && ("hidden" === t.type || 1 !== t.nodeType || e.expr.filters.hidden(t)); )
                t = t[s ? "previousSibling" : "nextSibling"];
            return [(i = e(t).offset()).left, i.top]
        },
        _hideDatepicker: function(t) {
            var i, n, s, o, a = this._curInst;
            !a || t && a !== e.data(t, "datepicker") || this._datepickerShowing && (i = this._get(a, "showAnim"),
            n = this._get(a, "duration"),
            s = function() {
                e.datepicker._tidyDialog(a)
            }
            ,
            e.effects && (e.effects.effect[i] || e.effects[i]) ? a.dpDiv.hide(i, e.datepicker._get(a, "showOptions"), n, s) : a.dpDiv["slideDown" === i ? "slideUp" : "fadeIn" === i ? "fadeOut" : "hide"](i ? n : null, s),
            i || s(),
            this._datepickerShowing = !1,
            (o = this._get(a, "onClose")) && o.apply(a.input ? a.input[0] : null, [a.input ? a.input.val() : "", a]),
            this._lastInput = null,
            this._inDialog && (this._dialogInput.css({
                position: "absolute",
                left: "0",
                top: "-100px"
            }),
            e.blockUI && (e.unblockUI(),
            e("body").append(this.dpDiv))),
            this._inDialog = !1)
        },
        _tidyDialog: function(e) {
            e.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")
        },
        _checkExternalClick: function(t) {
            if (e.datepicker._curInst) {
                var i = e(t.target)
                  , n = e.datepicker._getInst(i[0]);
                (i[0].id === e.datepicker._mainDivId || 0 !== i.parents("#" + e.datepicker._mainDivId).length || i.hasClass(e.datepicker.markerClassName) || i.closest("." + e.datepicker._triggerClass).length || !e.datepicker._datepickerShowing || e.datepicker._inDialog && e.blockUI) && (!i.hasClass(e.datepicker.markerClassName) || e.datepicker._curInst === n) || e.datepicker._hideDatepicker()
            }
        },
        _adjustDate: function(t, i, n) {
            var s = e(t)
              , o = this._getInst(s[0]);
            this._isDisabledDatepicker(s[0]) || (this._adjustInstDate(o, i + ("M" === n ? this._get(o, "showCurrentAtPos") : 0), n),
            this._updateDatepicker(o))
        },
        _gotoToday: function(t) {
            var i, n = e(t), s = this._getInst(n[0]);
            this._get(s, "gotoCurrent") && s.currentDay ? (s.selectedDay = s.currentDay,
            s.drawMonth = s.selectedMonth = s.currentMonth,
            s.drawYear = s.selectedYear = s.currentYear) : (i = new Date,
            s.selectedDay = i.getDate(),
            s.drawMonth = s.selectedMonth = i.getMonth(),
            s.drawYear = s.selectedYear = i.getFullYear()),
            this._notifyChange(s),
            this._adjustDate(n)
        },
        _selectMonthYear: function(t, i, n) {
            var s = e(t)
              , o = this._getInst(s[0]);
            o["selected" + ("M" === n ? "Month" : "Year")] = o["draw" + ("M" === n ? "Month" : "Year")] = parseInt(i.options[i.selectedIndex].value, 10),
            this._notifyChange(o),
            this._adjustDate(s)
        },
        _selectDay: function(t, i, n, s) {
            var o, a = e(t);
            e(s).hasClass(this._unselectableClass) || this._isDisabledDatepicker(a[0]) || ((o = this._getInst(a[0])).selectedDay = o.currentDay = e("a", s).html(),
            o.selectedMonth = o.currentMonth = i,
            o.selectedYear = o.currentYear = n,
            this._selectDate(t, this._formatDate(o, o.currentDay, o.currentMonth, o.currentYear)))
        },
        _clearDate: function(t) {
            var i = e(t);
            this._selectDate(i, "")
        },
        _selectDate: function(t, i) {
            var n, s = e(t), o = this._getInst(s[0]);
            i = null != i ? i : this._formatDate(o),
            o.input && o.input.val(i),
            this._updateAlternate(o),
            (n = this._get(o, "onSelect")) ? n.apply(o.input ? o.input[0] : null, [i, o]) : o.input && o.input.trigger("change"),
            o.inline ? this._updateDatepicker(o) : (this._hideDatepicker(),
            this._lastInput = o.input[0],
            "object" != typeof o.input[0] && o.input.trigger("focus"),
            this._lastInput = null)
        },
        _updateAlternate: function(t) {
            var i, n, s, o = this._get(t, "altField");
            o && (i = this._get(t, "altFormat") || this._get(t, "dateFormat"),
            n = this._getDate(t),
            s = this.formatDate(i, n, this._getFormatConfig(t)),
            e(o).val(s))
        },
        noWeekends: function(e) {
            var t = e.getDay();
            return [t > 0 && t < 6, ""]
        },
        iso8601Week: function(e) {
            var t, i = new Date(e.getTime());
            return i.setDate(i.getDate() + 4 - (i.getDay() || 7)),
            t = i.getTime(),
            i.setMonth(0),
            i.setDate(1),
            Math.floor(Math.round((t - i) / 864e5) / 7) + 1
        },
        parseDate: function(t, i, n) {
            if (null == t || null == i)
                throw "Invalid arguments";
            if ("" === (i = "object" == typeof i ? i.toString() : i + ""))
                return null;
            var s, o, a, r, l = 0, u = (n ? n.shortYearCutoff : null) || this._defaults.shortYearCutoff, d = "string" != typeof u ? u : (new Date).getFullYear() % 100 + parseInt(u, 10), c = (n ? n.dayNamesShort : null) || this._defaults.dayNamesShort, h = (n ? n.dayNames : null) || this._defaults.dayNames, f = (n ? n.monthNamesShort : null) || this._defaults.monthNamesShort, p = (n ? n.monthNames : null) || this._defaults.monthNames, m = -1, g = -1, v = -1, b = -1, y = !1, _ = function(e) {
                var i = s + 1 < t.length && t.charAt(s + 1) === e;
                return i && s++,
                i
            }, w = function(e) {
                var t = _(e)
                  , n = "@" === e ? 14 : "!" === e ? 20 : "y" === e && t ? 4 : "o" === e ? 3 : 2
                  , s = new RegExp("^\\d{" + ("y" === e ? n : 1) + "," + n + "}")
                  , o = i.substring(l).match(s);
                if (!o)
                    throw "Missing number at position " + l;
                return l += o[0].length,
                parseInt(o[0], 10)
            }, x = function(t, n, s) {
                var o = -1
                  , a = e.map(_(t) ? s : n, (function(e, t) {
                    return [[t, e]]
                }
                )).sort((function(e, t) {
                    return -(e[1].length - t[1].length)
                }
                ));
                if (e.each(a, (function(e, t) {
                    var n = t[1];
                    if (i.substr(l, n.length).toLowerCase() === n.toLowerCase())
                        return o = t[0],
                        l += n.length,
                        !1
                }
                )),
                -1 !== o)
                    return o + 1;
                throw "Unknown name at position " + l
            }, k = function() {
                if (i.charAt(l) !== t.charAt(s))
                    throw "Unexpected literal at position " + l;
                l++
            };
            for (s = 0; s < t.length; s++)
                if (y)
                    "'" !== t.charAt(s) || _("'") ? k() : y = !1;
                else
                    switch (t.charAt(s)) {
                    case "d":
                        v = w("d");
                        break;
                    case "D":
                        x("D", c, h);
                        break;
                    case "o":
                        b = w("o");
                        break;
                    case "m":
                        g = w("m");
                        break;
                    case "M":
                        g = x("M", f, p);
                        break;
                    case "y":
                        m = w("y");
                        break;
                    case "@":
                        m = (r = new Date(w("@"))).getFullYear(),
                        g = r.getMonth() + 1,
                        v = r.getDate();
                        break;
                    case "!":
                        m = (r = new Date((w("!") - this._ticksTo1970) / 1e4)).getFullYear(),
                        g = r.getMonth() + 1,
                        v = r.getDate();
                        break;
                    case "'":
                        _("'") ? k() : y = !0;
                        break;
                    default:
                        k()
                    }
            if (l < i.length && (a = i.substr(l),
            !/^\s+/.test(a)))
                throw "Extra/unparsed characters found in date: " + a;
            if (-1 === m ? m = (new Date).getFullYear() : m < 100 && (m += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (m <= d ? 0 : -100)),
            b > -1)
                for (g = 1,
                v = b; ; ) {
                    if (v <= (o = this._getDaysInMonth(m, g - 1)))
                        break;
                    g++,
                    v -= o
                }
            if ((r = this._daylightSavingAdjust(new Date(m,g - 1,v))).getFullYear() !== m || r.getMonth() + 1 !== g || r.getDate() !== v)
                throw "Invalid date";
            return r
        },
        ATOM: "yy-mm-dd",
        COOKIE: "D, dd M yy",
        ISO_8601: "yy-mm-dd",
        RFC_822: "D, d M y",
        RFC_850: "DD, dd-M-y",
        RFC_1036: "D, d M y",
        RFC_1123: "D, d M yy",
        RFC_2822: "D, d M yy",
        RSS: "D, d M y",
        TICKS: "!",
        TIMESTAMP: "@",
        W3C: "yy-mm-dd",
        _ticksTo1970: 24 * (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)) * 60 * 60 * 1e7,
        formatDate: function(e, t, i) {
            if (!t)
                return "";
            var n, s = (i ? i.dayNamesShort : null) || this._defaults.dayNamesShort, o = (i ? i.dayNames : null) || this._defaults.dayNames, a = (i ? i.monthNamesShort : null) || this._defaults.monthNamesShort, r = (i ? i.monthNames : null) || this._defaults.monthNames, l = function(t) {
                var i = n + 1 < e.length && e.charAt(n + 1) === t;
                return i && n++,
                i
            }, u = function(e, t, i) {
                var n = "" + t;
                if (l(e))
                    for (; n.length < i; )
                        n = "0" + n;
                return n
            }, d = function(e, t, i, n) {
                return l(e) ? n[t] : i[t]
            }, c = "", h = !1;
            if (t)
                for (n = 0; n < e.length; n++)
                    if (h)
                        "'" !== e.charAt(n) || l("'") ? c += e.charAt(n) : h = !1;
                    else
                        switch (e.charAt(n)) {
                        case "d":
                            c += u("d", t.getDate(), 2);
                            break;
                        case "D":
                            c += d("D", t.getDay(), s, o);
                            break;
                        case "o":
                            c += u("o", Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime() - new Date(t.getFullYear(),0,0).getTime()) / 864e5), 3);
                            break;
                        case "m":
                            c += u("m", t.getMonth() + 1, 2);
                            break;
                        case "M":
                            c += d("M", t.getMonth(), a, r);
                            break;
                        case "y":
                            c += l("y") ? t.getFullYear() : (t.getFullYear() % 100 < 10 ? "0" : "") + t.getFullYear() % 100;
                            break;
                        case "@":
                            c += t.getTime();
                            break;
                        case "!":
                            c += 1e4 * t.getTime() + this._ticksTo1970;
                            break;
                        case "'":
                            l("'") ? c += "'" : h = !0;
                            break;
                        default:
                            c += e.charAt(n)
                        }
            return c
        },
        _possibleChars: function(e) {
            var t, i = "", n = !1, s = function(i) {
                var n = t + 1 < e.length && e.charAt(t + 1) === i;
                return n && t++,
                n
            };
            for (t = 0; t < e.length; t++)
                if (n)
                    "'" !== e.charAt(t) || s("'") ? i += e.charAt(t) : n = !1;
                else
                    switch (e.charAt(t)) {
                    case "d":
                    case "m":
                    case "y":
                    case "@":
                        i += "0123456789";
                        break;
                    case "D":
                    case "M":
                        return null;
                    case "'":
                        s("'") ? i += "'" : n = !0;
                        break;
                    default:
                        i += e.charAt(t)
                    }
            return i
        },
        _get: function(e, t) {
            return void 0 !== e.settings[t] ? e.settings[t] : this._defaults[t]
        },
        _setDateFromField: function(e, t) {
            if (e.input.val() !== e.lastVal) {
                var i = this._get(e, "dateFormat")
                  , n = e.lastVal = e.input ? e.input.val() : null
                  , s = this._getDefaultDate(e)
                  , o = s
                  , a = this._getFormatConfig(e);
                try {
                    o = this.parseDate(i, n, a) || s
                } catch (e) {
                    n = t ? "" : n
                }
                e.selectedDay = o.getDate(),
                e.drawMonth = e.selectedMonth = o.getMonth(),
                e.drawYear = e.selectedYear = o.getFullYear(),
                e.currentDay = n ? o.getDate() : 0,
                e.currentMonth = n ? o.getMonth() : 0,
                e.currentYear = n ? o.getFullYear() : 0,
                this._adjustInstDate(e)
            }
        },
        _getDefaultDate: function(e) {
            return this._restrictMinMax(e, this._determineDate(e, this._get(e, "defaultDate"), new Date))
        },
        _determineDate: function(t, i, n) {
            var s = function(e) {
                var t = new Date;
                return t.setDate(t.getDate() + e),
                t
            }
              , o = function(i) {
                try {
                    return e.datepicker.parseDate(e.datepicker._get(t, "dateFormat"), i, e.datepicker._getFormatConfig(t))
                } catch (e) {}
                for (var n = (i.toLowerCase().match(/^c/) ? e.datepicker._getDate(t) : null) || new Date, s = n.getFullYear(), o = n.getMonth(), a = n.getDate(), r = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, l = r.exec(i); l; ) {
                    switch (l[2] || "d") {
                    case "d":
                    case "D":
                        a += parseInt(l[1], 10);
                        break;
                    case "w":
                    case "W":
                        a += 7 * parseInt(l[1], 10);
                        break;
                    case "m":
                    case "M":
                        o += parseInt(l[1], 10),
                        a = Math.min(a, e.datepicker._getDaysInMonth(s, o));
                        break;
                    case "y":
                    case "Y":
                        s += parseInt(l[1], 10),
                        a = Math.min(a, e.datepicker._getDaysInMonth(s, o))
                    }
                    l = r.exec(i)
                }
                return new Date(s,o,a)
            }
              , a = null == i || "" === i ? n : "string" == typeof i ? o(i) : "number" == typeof i ? isNaN(i) ? n : s(i) : new Date(i.getTime());
            return (a = a && "Invalid Date" === a.toString() ? n : a) && (a.setHours(0),
            a.setMinutes(0),
            a.setSeconds(0),
            a.setMilliseconds(0)),
            this._daylightSavingAdjust(a)
        },
        _daylightSavingAdjust: function(e) {
            return e ? (e.setHours(e.getHours() > 12 ? e.getHours() + 2 : 0),
            e) : null
        },
        _setDate: function(e, t, i) {
            var n = !t
              , s = e.selectedMonth
              , o = e.selectedYear
              , a = this._restrictMinMax(e, this._determineDate(e, t, new Date));
            e.selectedDay = e.currentDay = a.getDate(),
            e.drawMonth = e.selectedMonth = e.currentMonth = a.getMonth(),
            e.drawYear = e.selectedYear = e.currentYear = a.getFullYear(),
            s === e.selectedMonth && o === e.selectedYear || i || this._notifyChange(e),
            this._adjustInstDate(e),
            e.input && e.input.val(n ? "" : this._formatDate(e))
        },
        _getDate: function(e) {
            return !e.currentYear || e.input && "" === e.input.val() ? null : this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay))
        },
        _attachHandlers: function(t) {
            var i = this._get(t, "stepMonths")
              , n = "#" + t.id.replace(/\\\\/g, "\\");
            t.dpDiv.find("[data-handler]").map((function() {
                var t = {
                    prev: function() {
                        e.datepicker._adjustDate(n, -i, "M")
                    },
                    next: function() {
                        e.datepicker._adjustDate(n, +i, "M")
                    },
                    hide: function() {
                        e.datepicker._hideDatepicker()
                    },
                    today: function() {
                        e.datepicker._gotoToday(n)
                    },
                    selectDay: function() {
                        return e.datepicker._selectDay(n, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this),
                        !1
                    },
                    selectMonth: function() {
                        return e.datepicker._selectMonthYear(n, this, "M"),
                        !1
                    },
                    selectYear: function() {
                        return e.datepicker._selectMonthYear(n, this, "Y"),
                        !1
                    }
                };
                e(this).on(this.getAttribute("data-event"), t[this.getAttribute("data-handler")])
            }
            ))
        },
        _generateHTML: function(e) {
            var t, i, n, s, o, a, r, l, u, d, c, h, f, p, m, g, v, b, y, _, w, x, k, C, D, T, S, I, P, E, A, M, N, $, O, L, j, H, F, z = new Date, R = this._daylightSavingAdjust(new Date(z.getFullYear(),z.getMonth(),z.getDate())), W = this._get(e, "isRTL"), q = this._get(e, "showButtonPanel"), B = this._get(e, "hideIfNoPrevNext"), U = this._get(e, "navigationAsDateFormat"), Y = this._getNumberOfMonths(e), V = this._get(e, "showCurrentAtPos"), K = this._get(e, "stepMonths"), Q = 1 !== Y[0] || 1 !== Y[1], X = this._daylightSavingAdjust(e.currentDay ? new Date(e.currentYear,e.currentMonth,e.currentDay) : new Date(9999,9,9)), G = this._getMinMaxDate(e, "min"), Z = this._getMinMaxDate(e, "max"), J = e.drawMonth - V, ee = e.drawYear;
            if (J < 0 && (J += 12,
            ee--),
            Z)
                for (t = this._daylightSavingAdjust(new Date(Z.getFullYear(),Z.getMonth() - Y[0] * Y[1] + 1,Z.getDate())),
                t = G && t < G ? G : t; this._daylightSavingAdjust(new Date(ee,J,1)) > t; )
                    --J < 0 && (J = 11,
                    ee--);
            for (e.drawMonth = J,
            e.drawYear = ee,
            i = this._get(e, "prevText"),
            i = U ? this.formatDate(i, this._daylightSavingAdjust(new Date(ee,J - K,1)), this._getFormatConfig(e)) : i,
            n = this._canAdjustMonth(e, -1, ee, J) ? "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='" + i + "'><span class='ui-icon ui-icon-circle-triangle-" + (W ? "e" : "w") + "'>" + i + "</span></a>" : B ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + i + "'><span class='ui-icon ui-icon-circle-triangle-" + (W ? "e" : "w") + "'>" + i + "</span></a>",
            s = this._get(e, "nextText"),
            s = U ? this.formatDate(s, this._daylightSavingAdjust(new Date(ee,J + K,1)), this._getFormatConfig(e)) : s,
            o = this._canAdjustMonth(e, 1, ee, J) ? "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='" + s + "'><span class='ui-icon ui-icon-circle-triangle-" + (W ? "w" : "e") + "'>" + s + "</span></a>" : B ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + s + "'><span class='ui-icon ui-icon-circle-triangle-" + (W ? "w" : "e") + "'>" + s + "</span></a>",
            a = this._get(e, "currentText"),
            r = this._get(e, "gotoCurrent") && e.currentDay ? X : R,
            a = U ? this.formatDate(a, r, this._getFormatConfig(e)) : a,
            l = e.inline ? "" : "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + this._get(e, "closeText") + "</button>",
            u = q ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (W ? l : "") + (this._isInRange(e, r) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>" + a + "</button>" : "") + (W ? "" : l) + "</div>" : "",
            d = parseInt(this._get(e, "firstDay"), 10),
            d = isNaN(d) ? 0 : d,
            c = this._get(e, "showWeek"),
            h = this._get(e, "dayNames"),
            f = this._get(e, "dayNamesMin"),
            p = this._get(e, "monthNames"),
            m = this._get(e, "monthNamesShort"),
            g = this._get(e, "beforeShowDay"),
            v = this._get(e, "showOtherMonths"),
            b = this._get(e, "selectOtherMonths"),
            y = this._getDefaultDate(e),
            _ = "",
            x = 0; x < Y[0]; x++) {
                for (k = "",
                this.maxRows = 4,
                C = 0; C < Y[1]; C++) {
                    if (D = this._daylightSavingAdjust(new Date(ee,J,e.selectedDay)),
                    T = " ui-corner-all",
                    S = "",
                    Q) {
                        if (S += "<div class='ui-datepicker-group",
                        Y[1] > 1)
                            switch (C) {
                            case 0:
                                S += " ui-datepicker-group-first",
                                T = " ui-corner-" + (W ? "right" : "left");
                                break;
                            case Y[1] - 1:
                                S += " ui-datepicker-group-last",
                                T = " ui-corner-" + (W ? "left" : "right");
                                break;
                            default:
                                S += " ui-datepicker-group-middle",
                                T = ""
                            }
                        S += "'>"
                    }
                    for (S += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + T + "'>" + (/all|left/.test(T) && 0 === x ? W ? o : n : "") + (/all|right/.test(T) && 0 === x ? W ? n : o : "") + this._generateMonthYearHeader(e, J, ee, G, Z, x > 0 || C > 0, p, m) + "</div><table class='ui-datepicker-calendar'><thead><tr>",
                    I = c ? "<th class='ui-datepicker-week-col'>" + this._get(e, "weekHeader") + "</th>" : "",
                    w = 0; w < 7; w++)
                        I += "<th scope='col'" + ((w + d + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + "><span title='" + h[P = (w + d) % 7] + "'>" + f[P] + "</span></th>";
                    for (S += I + "</tr></thead><tbody>",
                    E = this._getDaysInMonth(ee, J),
                    ee === e.selectedYear && J === e.selectedMonth && (e.selectedDay = Math.min(e.selectedDay, E)),
                    A = (this._getFirstDayOfMonth(ee, J) - d + 7) % 7,
                    M = Math.ceil((A + E) / 7),
                    N = Q && this.maxRows > M ? this.maxRows : M,
                    this.maxRows = N,
                    $ = this._daylightSavingAdjust(new Date(ee,J,1 - A)),
                    O = 0; O < N; O++) {
                        for (S += "<tr>",
                        L = c ? "<td class='ui-datepicker-week-col'>" + this._get(e, "calculateWeek")($) + "</td>" : "",
                        w = 0; w < 7; w++)
                            j = g ? g.apply(e.input ? e.input[0] : null, [$]) : [!0, ""],
                            F = (H = $.getMonth() !== J) && !b || !j[0] || G && $ < G || Z && $ > Z,
                            L += "<td class='" + ((w + d + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + (H ? " ui-datepicker-other-month" : "") + ($.getTime() === D.getTime() && J === e.selectedMonth && e._keyEvent || y.getTime() === $.getTime() && y.getTime() === D.getTime() ? " " + this._dayOverClass : "") + (F ? " " + this._unselectableClass + " ui-state-disabled" : "") + (H && !v ? "" : " " + j[1] + ($.getTime() === X.getTime() ? " " + this._currentClass : "") + ($.getTime() === R.getTime() ? " ui-datepicker-today" : "")) + "'" + (H && !v || !j[2] ? "" : " title='" + j[2].replace(/'/g, "&#39;") + "'") + (F ? "" : " data-handler='selectDay' data-event='click' data-month='" + $.getMonth() + "' data-year='" + $.getFullYear() + "'") + ">" + (H && !v ? "&#xa0;" : F ? "<span class='ui-state-default'>" + $.getDate() + "</span>" : "<a class='ui-state-default" + ($.getTime() === R.getTime() ? " ui-state-highlight" : "") + ($.getTime() === X.getTime() ? " ui-state-active" : "") + (H ? " ui-priority-secondary" : "") + "' href='#'>" + $.getDate() + "</a>") + "</td>",
                            $.setDate($.getDate() + 1),
                            $ = this._daylightSavingAdjust($);
                        S += L + "</tr>"
                    }
                    ++J > 11 && (J = 0,
                    ee++),
                    k += S += "</tbody></table>" + (Q ? "</div>" + (Y[0] > 0 && C === Y[1] - 1 ? "<div class='ui-datepicker-row-break'></div>" : "") : "")
                }
                _ += k
            }
            return _ += u,
            e._keyEvent = !1,
            _
        },
        _generateMonthYearHeader: function(e, t, i, n, s, o, a, r) {
            var l, u, d, c, h, f, p, m, g = this._get(e, "changeMonth"), v = this._get(e, "changeYear"), b = this._get(e, "showMonthAfterYear"), y = "<div class='ui-datepicker-title'>", _ = "";
            if (o || !g)
                _ += "<span class='ui-datepicker-month'>" + a[t] + "</span>";
            else {
                for (l = n && n.getFullYear() === i,
                u = s && s.getFullYear() === i,
                _ += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",
                d = 0; d < 12; d++)
                    (!l || d >= n.getMonth()) && (!u || d <= s.getMonth()) && (_ += "<option value='" + d + "'" + (d === t ? " selected='selected'" : "") + ">" + r[d] + "</option>");
                _ += "</select>"
            }
            if (b || (y += _ + (!o && g && v ? "" : "&#xa0;")),
            !e.yearshtml)
                if (e.yearshtml = "",
                o || !v)
                    y += "<span class='ui-datepicker-year'>" + i + "</span>";
                else {
                    for (c = this._get(e, "yearRange").split(":"),
                    h = (new Date).getFullYear(),
                    f = function(e) {
                        var t = e.match(/c[+\-].*/) ? i + parseInt(e.substring(1), 10) : e.match(/[+\-].*/) ? h + parseInt(e, 10) : parseInt(e, 10);
                        return isNaN(t) ? h : t
                    }
                    ,
                    p = f(c[0]),
                    m = Math.max(p, f(c[1] || "")),
                    p = n ? Math.max(p, n.getFullYear()) : p,
                    m = s ? Math.min(m, s.getFullYear()) : m,
                    e.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; p <= m; p++)
                        e.yearshtml += "<option value='" + p + "'" + (p === i ? " selected='selected'" : "") + ">" + p + "</option>";
                    e.yearshtml += "</select>",
                    y += e.yearshtml,
                    e.yearshtml = null
                }
            return y += this._get(e, "yearSuffix"),
            b && (y += (!o && g && v ? "" : "&#xa0;") + _),
            y += "</div>"
        },
        _adjustInstDate: function(e, t, i) {
            var n = e.selectedYear + ("Y" === i ? t : 0)
              , s = e.selectedMonth + ("M" === i ? t : 0)
              , o = Math.min(e.selectedDay, this._getDaysInMonth(n, s)) + ("D" === i ? t : 0)
              , a = this._restrictMinMax(e, this._daylightSavingAdjust(new Date(n,s,o)));
            e.selectedDay = a.getDate(),
            e.drawMonth = e.selectedMonth = a.getMonth(),
            e.drawYear = e.selectedYear = a.getFullYear(),
            "M" !== i && "Y" !== i || this._notifyChange(e)
        },
        _restrictMinMax: function(e, t) {
            var i = this._getMinMaxDate(e, "min")
              , n = this._getMinMaxDate(e, "max")
              , s = i && t < i ? i : t;
            return n && s > n ? n : s
        },
        _notifyChange: function(e) {
            var t = this._get(e, "onChangeMonthYear");
            t && t.apply(e.input ? e.input[0] : null, [e.selectedYear, e.selectedMonth + 1, e])
        },
        _getNumberOfMonths: function(e) {
            var t = this._get(e, "numberOfMonths");
            return null == t ? [1, 1] : "number" == typeof t ? [1, t] : t
        },
        _getMinMaxDate: function(e, t) {
            return this._determineDate(e, this._get(e, t + "Date"), null)
        },
        _getDaysInMonth: function(e, t) {
            return 32 - this._daylightSavingAdjust(new Date(e,t,32)).getDate()
        },
        _getFirstDayOfMonth: function(e, t) {
            return new Date(e,t,1).getDay()
        },
        _canAdjustMonth: function(e, t, i, n) {
            var s = this._getNumberOfMonths(e)
              , o = this._daylightSavingAdjust(new Date(i,n + (t < 0 ? t : s[0] * s[1]),1));
            return t < 0 && o.setDate(this._getDaysInMonth(o.getFullYear(), o.getMonth())),
            this._isInRange(e, o)
        },
        _isInRange: function(e, t) {
            var i, n, s = this._getMinMaxDate(e, "min"), o = this._getMinMaxDate(e, "max"), a = null, r = null, l = this._get(e, "yearRange");
            return l && (i = l.split(":"),
            n = (new Date).getFullYear(),
            a = parseInt(i[0], 10),
            r = parseInt(i[1], 10),
            i[0].match(/[+\-].*/) && (a += n),
            i[1].match(/[+\-].*/) && (r += n)),
            (!s || t.getTime() >= s.getTime()) && (!o || t.getTime() <= o.getTime()) && (!a || t.getFullYear() >= a) && (!r || t.getFullYear() <= r)
        },
        _getFormatConfig: function(e) {
            var t = this._get(e, "shortYearCutoff");
            return {
                shortYearCutoff: t = "string" != typeof t ? t : (new Date).getFullYear() % 100 + parseInt(t, 10),
                dayNamesShort: this._get(e, "dayNamesShort"),
                dayNames: this._get(e, "dayNames"),
                monthNamesShort: this._get(e, "monthNamesShort"),
                monthNames: this._get(e, "monthNames")
            }
        },
        _formatDate: function(e, t, i, n) {
            t || (e.currentDay = e.selectedDay,
            e.currentMonth = e.selectedMonth,
            e.currentYear = e.selectedYear);
            var s = t ? "object" == typeof t ? t : this._daylightSavingAdjust(new Date(n,i,t)) : this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));
            return this.formatDate(this._get(e, "dateFormat"), s, this._getFormatConfig(e))
        }
    }),
    e.fn.datepicker = function(t) {
        if (!this.length)
            return this;
        e.datepicker.initialized || (e(document).on("mousedown", e.datepicker._checkExternalClick),
        e.datepicker.initialized = !0),
        0 === e("#" + e.datepicker._mainDivId).length && e("body").append(e.datepicker.dpDiv);
        var i = Array.prototype.slice.call(arguments, 1);
        return "string" != typeof t || "isDisabled" !== t && "getDate" !== t && "widget" !== t ? "option" === t && 2 === arguments.length && "string" == typeof arguments[1] ? e.datepicker["_" + t + "Datepicker"].apply(e.datepicker, [this[0]].concat(i)) : this.each((function() {
            "string" == typeof t ? e.datepicker["_" + t + "Datepicker"].apply(e.datepicker, [this].concat(i)) : e.datepicker._attachDatepicker(this, t)
        }
        )) : e.datepicker["_" + t + "Datepicker"].apply(e.datepicker, [this[0]].concat(i))
    }
    ,
    e.datepicker = new i,
    e.datepicker.initialized = !1,
    e.datepicker.uuid = (new Date).getTime(),
    e.datepicker.version = "1.12.1",
    e.datepicker
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../ie", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    var t = !1;
    return e(document).on("mouseup", (function() {
        t = !1
    }
    )),
    e.widget("ui.mouse", {
        version: "1.12.1",
        options: {
            cancel: "input, textarea, button, select, option",
            distance: 1,
            delay: 0
        },
        _mouseInit: function() {
            var t = this;
            this.element.on("mousedown." + this.widgetName, (function(e) {
                return t._mouseDown(e)
            }
            )).on("click." + this.widgetName, (function(i) {
                if (!0 === e.data(i.target, t.widgetName + ".preventClickEvent"))
                    return e.removeData(i.target, t.widgetName + ".preventClickEvent"),
                    i.stopImmediatePropagation(),
                    !1
            }
            )),
            this.started = !1
        },
        _mouseDestroy: function() {
            this.element.off("." + this.widgetName),
            this._mouseMoveDelegate && this.document.off("mousemove." + this.widgetName, this._mouseMoveDelegate).off("mouseup." + this.widgetName, this._mouseUpDelegate)
        },
        _mouseDown: function(i) {
            if (!t) {
                this._mouseMoved = !1,
                this._mouseStarted && this._mouseUp(i),
                this._mouseDownEvent = i;
                var n = this
                  , s = 1 === i.which
                  , o = !("string" != typeof this.options.cancel || !i.target.nodeName) && e(i.target).closest(this.options.cancel).length;
                return !(s && !o && this._mouseCapture(i)) || (this.mouseDelayMet = !this.options.delay,
                this.mouseDelayMet || (this._mouseDelayTimer = setTimeout((function() {
                    n.mouseDelayMet = !0
                }
                ), this.options.delay)),
                this._mouseDistanceMet(i) && this._mouseDelayMet(i) && (this._mouseStarted = !1 !== this._mouseStart(i),
                !this._mouseStarted) ? (i.preventDefault(),
                !0) : (!0 === e.data(i.target, this.widgetName + ".preventClickEvent") && e.removeData(i.target, this.widgetName + ".preventClickEvent"),
                this._mouseMoveDelegate = function(e) {
                    return n._mouseMove(e)
                }
                ,
                this._mouseUpDelegate = function(e) {
                    return n._mouseUp(e)
                }
                ,
                this.document.on("mousemove." + this.widgetName, this._mouseMoveDelegate).on("mouseup." + this.widgetName, this._mouseUpDelegate),
                i.preventDefault(),
                t = !0,
                !0))
            }
        },
        _mouseMove: function(t) {
            if (this._mouseMoved) {
                if (e.ui.ie && (!document.documentMode || document.documentMode < 9) && !t.button)
                    return this._mouseUp(t);
                if (!t.which)
                    if (t.originalEvent.altKey || t.originalEvent.ctrlKey || t.originalEvent.metaKey || t.originalEvent.shiftKey)
                        this.ignoreMissingWhich = !0;
                    else if (!this.ignoreMissingWhich)
                        return this._mouseUp(t)
            }
            return (t.which || t.button) && (this._mouseMoved = !0),
            this._mouseStarted ? (this._mouseDrag(t),
            t.preventDefault()) : (this._mouseDistanceMet(t) && this._mouseDelayMet(t) && (this._mouseStarted = !1 !== this._mouseStart(this._mouseDownEvent, t),
            this._mouseStarted ? this._mouseDrag(t) : this._mouseUp(t)),
            !this._mouseStarted)
        },
        _mouseUp: function(i) {
            this.document.off("mousemove." + this.widgetName, this._mouseMoveDelegate).off("mouseup." + this.widgetName, this._mouseUpDelegate),
            this._mouseStarted && (this._mouseStarted = !1,
            i.target === this._mouseDownEvent.target && e.data(i.target, this.widgetName + ".preventClickEvent", !0),
            this._mouseStop(i)),
            this._mouseDelayTimer && (clearTimeout(this._mouseDelayTimer),
            delete this._mouseDelayTimer),
            this.ignoreMissingWhich = !1,
            t = !1,
            i.preventDefault()
        },
        _mouseDistanceMet: function(e) {
            return Math.max(Math.abs(this._mouseDownEvent.pageX - e.pageX), Math.abs(this._mouseDownEvent.pageY - e.pageY)) >= this.options.distance
        },
        _mouseDelayMet: function() {
            return this.mouseDelayMet
        },
        _mouseStart: function() {},
        _mouseDrag: function() {},
        _mouseStop: function() {},
        _mouseCapture: function() {
            return !0
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./mouse", "../data", "../plugin", "../safe-active-element", "../safe-blur", "../scroll-parent", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.draggable", e.ui.mouse, {
        version: "1.12.1",
        widgetEventPrefix: "drag",
        options: {
            addClasses: !0,
            appendTo: "parent",
            axis: !1,
            connectToSortable: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            iframeFix: !1,
            opacity: !1,
            refreshPositions: !1,
            revert: !1,
            revertDuration: 500,
            scope: "default",
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            snap: !1,
            snapMode: "both",
            snapTolerance: 20,
            stack: !1,
            zIndex: !1,
            drag: null,
            start: null,
            stop: null
        },
        _create: function() {
            "original" === this.options.helper && this._setPositionRelative(),
            this.options.addClasses && this._addClass("ui-draggable"),
            this._setHandleClassName(),
            this._mouseInit()
        },
        _setOption: function(e, t) {
            this._super(e, t),
            "handle" === e && (this._removeHandleClassName(),
            this._setHandleClassName())
        },
        _destroy: function() {
            (this.helper || this.element).is(".ui-draggable-dragging") ? this.destroyOnClear = !0 : (this._removeHandleClassName(),
            this._mouseDestroy())
        },
        _mouseCapture: function(t) {
            var i = this.options;
            return !(this.helper || i.disabled || e(t.target).closest(".ui-resizable-handle").length > 0) && (this.handle = this._getHandle(t),
            !!this.handle && (this._blurActiveElement(t),
            this._blockFrames(!0 === i.iframeFix ? "iframe" : i.iframeFix),
            !0))
        },
        _blockFrames: function(t) {
            this.iframeBlocks = this.document.find(t).map((function() {
                var t = e(this);
                return e("<div>").css("position", "absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]
            }
            ))
        },
        _unblockFrames: function() {
            this.iframeBlocks && (this.iframeBlocks.remove(),
            delete this.iframeBlocks)
        },
        _blurActiveElement: function(t) {
            var i = e.ui.safeActiveElement(this.document[0]);
            e(t.target).closest(i).length || e.ui.safeBlur(i)
        },
        _mouseStart: function(t) {
            var i = this.options;
            return this.helper = this._createHelper(t),
            this._addClass(this.helper, "ui-draggable-dragging"),
            this._cacheHelperProportions(),
            e.ui.ddmanager && (e.ui.ddmanager.current = this),
            this._cacheMargins(),
            this.cssPosition = this.helper.css("position"),
            this.scrollParent = this.helper.scrollParent(!0),
            this.offsetParent = this.helper.offsetParent(),
            this.hasFixedAncestor = this.helper.parents().filter((function() {
                return "fixed" === e(this).css("position")
            }
            )).length > 0,
            this.positionAbs = this.element.offset(),
            this._refreshOffsets(t),
            this.originalPosition = this.position = this._generatePosition(t, !1),
            this.originalPageX = t.pageX,
            this.originalPageY = t.pageY,
            i.cursorAt && this._adjustOffsetFromHelper(i.cursorAt),
            this._setContainment(),
            !1 === this._trigger("start", t) ? (this._clear(),
            !1) : (this._cacheHelperProportions(),
            e.ui.ddmanager && !i.dropBehaviour && e.ui.ddmanager.prepareOffsets(this, t),
            this._mouseDrag(t, !0),
            e.ui.ddmanager && e.ui.ddmanager.dragStart(this, t),
            !0)
        },
        _refreshOffsets: function(e) {
            this.offset = {
                top: this.positionAbs.top - this.margins.top,
                left: this.positionAbs.left - this.margins.left,
                scroll: !1,
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            },
            this.offset.click = {
                left: e.pageX - this.offset.left,
                top: e.pageY - this.offset.top
            }
        },
        _mouseDrag: function(t, i) {
            if (this.hasFixedAncestor && (this.offset.parent = this._getParentOffset()),
            this.position = this._generatePosition(t, !0),
            this.positionAbs = this._convertPositionTo("absolute"),
            !i) {
                var n = this._uiHash();
                if (!1 === this._trigger("drag", t, n))
                    return this._mouseUp(new e.Event("mouseup",t)),
                    !1;
                this.position = n.position
            }
            return this.helper[0].style.left = this.position.left + "px",
            this.helper[0].style.top = this.position.top + "px",
            e.ui.ddmanager && e.ui.ddmanager.drag(this, t),
            !1
        },
        _mouseStop: function(t) {
            var i = this
              , n = !1;
            return e.ui.ddmanager && !this.options.dropBehaviour && (n = e.ui.ddmanager.drop(this, t)),
            this.dropped && (n = this.dropped,
            this.dropped = !1),
            "invalid" === this.options.revert && !n || "valid" === this.options.revert && n || !0 === this.options.revert || e.isFunction(this.options.revert) && this.options.revert.call(this.element, n) ? e(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), (function() {
                !1 !== i._trigger("stop", t) && i._clear()
            }
            )) : !1 !== this._trigger("stop", t) && this._clear(),
            !1
        },
        _mouseUp: function(t) {
            return this._unblockFrames(),
            e.ui.ddmanager && e.ui.ddmanager.dragStop(this, t),
            this.handleElement.is(t.target) && this.element.trigger("focus"),
            e.ui.mouse.prototype._mouseUp.call(this, t)
        },
        cancel: function() {
            return this.helper.is(".ui-draggable-dragging") ? this._mouseUp(new e.Event("mouseup",{
                target: this.element[0]
            })) : this._clear(),
            this
        },
        _getHandle: function(t) {
            return !this.options.handle || !!e(t.target).closest(this.element.find(this.options.handle)).length
        },
        _setHandleClassName: function() {
            this.handleElement = this.options.handle ? this.element.find(this.options.handle) : this.element,
            this._addClass(this.handleElement, "ui-draggable-handle")
        },
        _removeHandleClassName: function() {
            this._removeClass(this.handleElement, "ui-draggable-handle")
        },
        _createHelper: function(t) {
            var i = this.options
              , n = e.isFunction(i.helper)
              , s = n ? e(i.helper.apply(this.element[0], [t])) : "clone" === i.helper ? this.element.clone().removeAttr("id") : this.element;
            return s.parents("body").length || s.appendTo("parent" === i.appendTo ? this.element[0].parentNode : i.appendTo),
            n && s[0] === this.element[0] && this._setPositionRelative(),
            s[0] === this.element[0] || /(fixed|absolute)/.test(s.css("position")) || s.css("position", "absolute"),
            s
        },
        _setPositionRelative: function() {
            /^(?:r|a|f)/.test(this.element.css("position")) || (this.element[0].style.position = "relative")
        },
        _adjustOffsetFromHelper: function(t) {
            "string" == typeof t && (t = t.split(" ")),
            e.isArray(t) && (t = {
                left: +t[0],
                top: +t[1] || 0
            }),
            "left"in t && (this.offset.click.left = t.left + this.margins.left),
            "right"in t && (this.offset.click.left = this.helperProportions.width - t.right + this.margins.left),
            "top"in t && (this.offset.click.top = t.top + this.margins.top),
            "bottom"in t && (this.offset.click.top = this.helperProportions.height - t.bottom + this.margins.top)
        },
        _isRootNode: function(e) {
            return /(html|body)/i.test(e.tagName) || e === this.document[0]
        },
        _getParentOffset: function() {
            var t = this.offsetParent.offset()
              , i = this.document[0];
            return "absolute" === this.cssPosition && this.scrollParent[0] !== i && e.contains(this.scrollParent[0], this.offsetParent[0]) && (t.left += this.scrollParent.scrollLeft(),
            t.top += this.scrollParent.scrollTop()),
            this._isRootNode(this.offsetParent[0]) && (t = {
                top: 0,
                left: 0
            }),
            {
                top: t.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: t.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if ("relative" !== this.cssPosition)
                return {
                    top: 0,
                    left: 0
                };
            var e = this.element.position()
              , t = this._isRootNode(this.scrollParent[0]);
            return {
                top: e.top - (parseInt(this.helper.css("top"), 10) || 0) + (t ? 0 : this.scrollParent.scrollTop()),
                left: e.left - (parseInt(this.helper.css("left"), 10) || 0) + (t ? 0 : this.scrollParent.scrollLeft())
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.element.css("marginLeft"), 10) || 0,
                top: parseInt(this.element.css("marginTop"), 10) || 0,
                right: parseInt(this.element.css("marginRight"), 10) || 0,
                bottom: parseInt(this.element.css("marginBottom"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var t, i, n, s = this.options, o = this.document[0];
            this.relativeContainer = null,
            s.containment ? "window" !== s.containment ? "document" !== s.containment ? s.containment.constructor !== Array ? ("parent" === s.containment && (s.containment = this.helper[0].parentNode),
            (n = (i = e(s.containment))[0]) && (t = /(scroll|auto)/.test(i.css("overflow")),
            this.containment = [(parseInt(i.css("borderLeftWidth"), 10) || 0) + (parseInt(i.css("paddingLeft"), 10) || 0), (parseInt(i.css("borderTopWidth"), 10) || 0) + (parseInt(i.css("paddingTop"), 10) || 0), (t ? Math.max(n.scrollWidth, n.offsetWidth) : n.offsetWidth) - (parseInt(i.css("borderRightWidth"), 10) || 0) - (parseInt(i.css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (t ? Math.max(n.scrollHeight, n.offsetHeight) : n.offsetHeight) - (parseInt(i.css("borderBottomWidth"), 10) || 0) - (parseInt(i.css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom],
            this.relativeContainer = i)) : this.containment = s.containment : this.containment = [0, 0, e(o).width() - this.helperProportions.width - this.margins.left, (e(o).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top] : this.containment = [e(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, e(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, e(window).scrollLeft() + e(window).width() - this.helperProportions.width - this.margins.left, e(window).scrollTop() + (e(window).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top] : this.containment = null
        },
        _convertPositionTo: function(e, t) {
            t || (t = this.position);
            var i = "absolute" === e ? 1 : -1
              , n = this._isRootNode(this.scrollParent[0]);
            return {
                top: t.top + this.offset.relative.top * i + this.offset.parent.top * i - ("fixed" === this.cssPosition ? -this.offset.scroll.top : n ? 0 : this.offset.scroll.top) * i,
                left: t.left + this.offset.relative.left * i + this.offset.parent.left * i - ("fixed" === this.cssPosition ? -this.offset.scroll.left : n ? 0 : this.offset.scroll.left) * i
            }
        },
        _generatePosition: function(e, t) {
            var i, n, s, o, a = this.options, r = this._isRootNode(this.scrollParent[0]), l = e.pageX, u = e.pageY;
            return r && this.offset.scroll || (this.offset.scroll = {
                top: this.scrollParent.scrollTop(),
                left: this.scrollParent.scrollLeft()
            }),
            t && (this.containment && (this.relativeContainer ? (n = this.relativeContainer.offset(),
            i = [this.containment[0] + n.left, this.containment[1] + n.top, this.containment[2] + n.left, this.containment[3] + n.top]) : i = this.containment,
            e.pageX - this.offset.click.left < i[0] && (l = i[0] + this.offset.click.left),
            e.pageY - this.offset.click.top < i[1] && (u = i[1] + this.offset.click.top),
            e.pageX - this.offset.click.left > i[2] && (l = i[2] + this.offset.click.left),
            e.pageY - this.offset.click.top > i[3] && (u = i[3] + this.offset.click.top)),
            a.grid && (s = a.grid[1] ? this.originalPageY + Math.round((u - this.originalPageY) / a.grid[1]) * a.grid[1] : this.originalPageY,
            u = i ? s - this.offset.click.top >= i[1] || s - this.offset.click.top > i[3] ? s : s - this.offset.click.top >= i[1] ? s - a.grid[1] : s + a.grid[1] : s,
            o = a.grid[0] ? this.originalPageX + Math.round((l - this.originalPageX) / a.grid[0]) * a.grid[0] : this.originalPageX,
            l = i ? o - this.offset.click.left >= i[0] || o - this.offset.click.left > i[2] ? o : o - this.offset.click.left >= i[0] ? o - a.grid[0] : o + a.grid[0] : o),
            "y" === a.axis && (l = this.originalPageX),
            "x" === a.axis && (u = this.originalPageY)),
            {
                top: u - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.offset.scroll.top : r ? 0 : this.offset.scroll.top),
                left: l - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.offset.scroll.left : r ? 0 : this.offset.scroll.left)
            }
        },
        _clear: function() {
            this._removeClass(this.helper, "ui-draggable-dragging"),
            this.helper[0] === this.element[0] || this.cancelHelperRemoval || this.helper.remove(),
            this.helper = null,
            this.cancelHelperRemoval = !1,
            this.destroyOnClear && this.destroy()
        },
        _trigger: function(t, i, n) {
            return n = n || this._uiHash(),
            e.ui.plugin.call(this, t, [i, n, this], !0),
            /^(drag|start|stop)/.test(t) && (this.positionAbs = this._convertPositionTo("absolute"),
            n.offset = this.positionAbs),
            e.Widget.prototype._trigger.call(this, t, i, n)
        },
        plugins: {},
        _uiHash: function() {
            return {
                helper: this.helper,
                position: this.position,
                originalPosition: this.originalPosition,
                offset: this.positionAbs
            }
        }
    }),
    e.ui.plugin.add("draggable", "connectToSortable", {
        start: function(t, i, n) {
            var s = e.extend({}, i, {
                item: n.element
            });
            n.sortables = [],
            e(n.options.connectToSortable).each((function() {
                var i = e(this).sortable("instance");
                i && !i.options.disabled && (n.sortables.push(i),
                i.refreshPositions(),
                i._trigger("activate", t, s))
            }
            ))
        },
        stop: function(t, i, n) {
            var s = e.extend({}, i, {
                item: n.element
            });
            n.cancelHelperRemoval = !1,
            e.each(n.sortables, (function() {
                var e = this;
                e.isOver ? (e.isOver = 0,
                n.cancelHelperRemoval = !0,
                e.cancelHelperRemoval = !1,
                e._storedCSS = {
                    position: e.placeholder.css("position"),
                    top: e.placeholder.css("top"),
                    left: e.placeholder.css("left")
                },
                e._mouseStop(t),
                e.options.helper = e.options._helper) : (e.cancelHelperRemoval = !0,
                e._trigger("deactivate", t, s))
            }
            ))
        },
        drag: function(t, i, n) {
            e.each(n.sortables, (function() {
                var s = !1
                  , o = this;
                o.positionAbs = n.positionAbs,
                o.helperProportions = n.helperProportions,
                o.offset.click = n.offset.click,
                o._intersectsWith(o.containerCache) && (s = !0,
                e.each(n.sortables, (function() {
                    return this.positionAbs = n.positionAbs,
                    this.helperProportions = n.helperProportions,
                    this.offset.click = n.offset.click,
                    this !== o && this._intersectsWith(this.containerCache) && e.contains(o.element[0], this.element[0]) && (s = !1),
                    s
                }
                ))),
                s ? (o.isOver || (o.isOver = 1,
                n._parent = i.helper.parent(),
                o.currentItem = i.helper.appendTo(o.element).data("ui-sortable-item", !0),
                o.options._helper = o.options.helper,
                o.options.helper = function() {
                    return i.helper[0]
                }
                ,
                t.target = o.currentItem[0],
                o._mouseCapture(t, !0),
                o._mouseStart(t, !0, !0),
                o.offset.click.top = n.offset.click.top,
                o.offset.click.left = n.offset.click.left,
                o.offset.parent.left -= n.offset.parent.left - o.offset.parent.left,
                o.offset.parent.top -= n.offset.parent.top - o.offset.parent.top,
                n._trigger("toSortable", t),
                n.dropped = o.element,
                e.each(n.sortables, (function() {
                    this.refreshPositions()
                }
                )),
                n.currentItem = n.element,
                o.fromOutside = n),
                o.currentItem && (o._mouseDrag(t),
                i.position = o.position)) : o.isOver && (o.isOver = 0,
                o.cancelHelperRemoval = !0,
                o.options._revert = o.options.revert,
                o.options.revert = !1,
                o._trigger("out", t, o._uiHash(o)),
                o._mouseStop(t, !0),
                o.options.revert = o.options._revert,
                o.options.helper = o.options._helper,
                o.placeholder && o.placeholder.remove(),
                i.helper.appendTo(n._parent),
                n._refreshOffsets(t),
                i.position = n._generatePosition(t, !0),
                n._trigger("fromSortable", t),
                n.dropped = !1,
                e.each(n.sortables, (function() {
                    this.refreshPositions()
                }
                )))
            }
            ))
        }
    }),
    e.ui.plugin.add("draggable", "cursor", {
        start: function(t, i, n) {
            var s = e("body")
              , o = n.options;
            s.css("cursor") && (o._cursor = s.css("cursor")),
            s.css("cursor", o.cursor)
        },
        stop: function(t, i, n) {
            var s = n.options;
            s._cursor && e("body").css("cursor", s._cursor)
        }
    }),
    e.ui.plugin.add("draggable", "opacity", {
        start: function(t, i, n) {
            var s = e(i.helper)
              , o = n.options;
            s.css("opacity") && (o._opacity = s.css("opacity")),
            s.css("opacity", o.opacity)
        },
        stop: function(t, i, n) {
            var s = n.options;
            s._opacity && e(i.helper).css("opacity", s._opacity)
        }
    }),
    e.ui.plugin.add("draggable", "scroll", {
        start: function(e, t, i) {
            i.scrollParentNotHidden || (i.scrollParentNotHidden = i.helper.scrollParent(!1)),
            i.scrollParentNotHidden[0] !== i.document[0] && "HTML" !== i.scrollParentNotHidden[0].tagName && (i.overflowOffset = i.scrollParentNotHidden.offset())
        },
        drag: function(t, i, n) {
            var s = n.options
              , o = !1
              , a = n.scrollParentNotHidden[0]
              , r = n.document[0];
            a !== r && "HTML" !== a.tagName ? (s.axis && "x" === s.axis || (n.overflowOffset.top + a.offsetHeight - t.pageY < s.scrollSensitivity ? a.scrollTop = o = a.scrollTop + s.scrollSpeed : t.pageY - n.overflowOffset.top < s.scrollSensitivity && (a.scrollTop = o = a.scrollTop - s.scrollSpeed)),
            s.axis && "y" === s.axis || (n.overflowOffset.left + a.offsetWidth - t.pageX < s.scrollSensitivity ? a.scrollLeft = o = a.scrollLeft + s.scrollSpeed : t.pageX - n.overflowOffset.left < s.scrollSensitivity && (a.scrollLeft = o = a.scrollLeft - s.scrollSpeed))) : (s.axis && "x" === s.axis || (t.pageY - e(r).scrollTop() < s.scrollSensitivity ? o = e(r).scrollTop(e(r).scrollTop() - s.scrollSpeed) : e(window).height() - (t.pageY - e(r).scrollTop()) < s.scrollSensitivity && (o = e(r).scrollTop(e(r).scrollTop() + s.scrollSpeed))),
            s.axis && "y" === s.axis || (t.pageX - e(r).scrollLeft() < s.scrollSensitivity ? o = e(r).scrollLeft(e(r).scrollLeft() - s.scrollSpeed) : e(window).width() - (t.pageX - e(r).scrollLeft()) < s.scrollSensitivity && (o = e(r).scrollLeft(e(r).scrollLeft() + s.scrollSpeed)))),
            !1 !== o && e.ui.ddmanager && !s.dropBehaviour && e.ui.ddmanager.prepareOffsets(n, t)
        }
    }),
    e.ui.plugin.add("draggable", "snap", {
        start: function(t, i, n) {
            var s = n.options;
            n.snapElements = [],
            e(s.snap.constructor !== String ? s.snap.items || ":data(ui-draggable)" : s.snap).each((function() {
                var t = e(this)
                  , i = t.offset();
                this !== n.element[0] && n.snapElements.push({
                    item: this,
                    width: t.outerWidth(),
                    height: t.outerHeight(),
                    top: i.top,
                    left: i.left
                })
            }
            ))
        },
        drag: function(t, i, n) {
            var s, o, a, r, l, u, d, c, h, f, p = n.options, m = p.snapTolerance, g = i.offset.left, v = g + n.helperProportions.width, b = i.offset.top, y = b + n.helperProportions.height;
            for (h = n.snapElements.length - 1; h >= 0; h--)
                u = (l = n.snapElements[h].left - n.margins.left) + n.snapElements[h].width,
                c = (d = n.snapElements[h].top - n.margins.top) + n.snapElements[h].height,
                v < l - m || g > u + m || y < d - m || b > c + m || !e.contains(n.snapElements[h].item.ownerDocument, n.snapElements[h].item) ? (n.snapElements[h].snapping && n.options.snap.release && n.options.snap.release.call(n.element, t, e.extend(n._uiHash(), {
                    snapItem: n.snapElements[h].item
                })),
                n.snapElements[h].snapping = !1) : ("inner" !== p.snapMode && (s = Math.abs(d - y) <= m,
                o = Math.abs(c - b) <= m,
                a = Math.abs(l - v) <= m,
                r = Math.abs(u - g) <= m,
                s && (i.position.top = n._convertPositionTo("relative", {
                    top: d - n.helperProportions.height,
                    left: 0
                }).top),
                o && (i.position.top = n._convertPositionTo("relative", {
                    top: c,
                    left: 0
                }).top),
                a && (i.position.left = n._convertPositionTo("relative", {
                    top: 0,
                    left: l - n.helperProportions.width
                }).left),
                r && (i.position.left = n._convertPositionTo("relative", {
                    top: 0,
                    left: u
                }).left)),
                f = s || o || a || r,
                "outer" !== p.snapMode && (s = Math.abs(d - b) <= m,
                o = Math.abs(c - y) <= m,
                a = Math.abs(l - g) <= m,
                r = Math.abs(u - v) <= m,
                s && (i.position.top = n._convertPositionTo("relative", {
                    top: d,
                    left: 0
                }).top),
                o && (i.position.top = n._convertPositionTo("relative", {
                    top: c - n.helperProportions.height,
                    left: 0
                }).top),
                a && (i.position.left = n._convertPositionTo("relative", {
                    top: 0,
                    left: l
                }).left),
                r && (i.position.left = n._convertPositionTo("relative", {
                    top: 0,
                    left: u - n.helperProportions.width
                }).left)),
                !n.snapElements[h].snapping && (s || o || a || r || f) && n.options.snap.snap && n.options.snap.snap.call(n.element, t, e.extend(n._uiHash(), {
                    snapItem: n.snapElements[h].item
                })),
                n.snapElements[h].snapping = s || o || a || r || f)
        }
    }),
    e.ui.plugin.add("draggable", "stack", {
        start: function(t, i, n) {
            var s, o = n.options, a = e.makeArray(e(o.stack)).sort((function(t, i) {
                return (parseInt(e(t).css("zIndex"), 10) || 0) - (parseInt(e(i).css("zIndex"), 10) || 0)
            }
            ));
            a.length && (s = parseInt(e(a[0]).css("zIndex"), 10) || 0,
            e(a).each((function(t) {
                e(this).css("zIndex", s + t)
            }
            )),
            this.css("zIndex", s + a.length))
        }
    }),
    e.ui.plugin.add("draggable", "zIndex", {
        start: function(t, i, n) {
            var s = e(i.helper)
              , o = n.options;
            s.css("zIndex") && (o._zIndex = s.css("zIndex")),
            s.css("zIndex", o.zIndex)
        },
        stop: function(t, i, n) {
            var s = n.options;
            s._zIndex && e(i.helper).css("zIndex", s._zIndex)
        }
    }),
    e.ui.draggable
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./mouse", "../disable-selection", "../plugin", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.resizable", e.ui.mouse, {
        version: "1.12.1",
        widgetEventPrefix: "resize",
        options: {
            alsoResize: !1,
            animate: !1,
            animateDuration: "slow",
            animateEasing: "swing",
            aspectRatio: !1,
            autoHide: !1,
            classes: {
                "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
            },
            containment: !1,
            ghost: !1,
            grid: !1,
            handles: "e,s,se",
            helper: !1,
            maxHeight: null,
            maxWidth: null,
            minHeight: 10,
            minWidth: 10,
            zIndex: 90,
            resize: null,
            start: null,
            stop: null
        },
        _num: function(e) {
            return parseFloat(e) || 0
        },
        _isNumber: function(e) {
            return !isNaN(parseFloat(e))
        },
        _hasScroll: function(t, i) {
            if ("hidden" === e(t).css("overflow"))
                return !1;
            var n = i && "left" === i ? "scrollLeft" : "scrollTop"
              , s = !1;
            return t[n] > 0 || (t[n] = 1,
            s = t[n] > 0,
            t[n] = 0,
            s)
        },
        _create: function() {
            var t, i = this.options, n = this;
            this._addClass("ui-resizable"),
            e.extend(this, {
                _aspectRatio: !!i.aspectRatio,
                aspectRatio: i.aspectRatio,
                originalElement: this.element,
                _proportionallyResizeElements: [],
                _helper: i.helper || i.ghost || i.animate ? i.helper || "ui-resizable-helper" : null
            }),
            this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i) && (this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
                position: this.element.css("position"),
                width: this.element.outerWidth(),
                height: this.element.outerHeight(),
                top: this.element.css("top"),
                left: this.element.css("left")
            })),
            this.element = this.element.parent().data("ui-resizable", this.element.resizable("instance")),
            this.elementIsWrapper = !0,
            t = {
                marginTop: this.originalElement.css("marginTop"),
                marginRight: this.originalElement.css("marginRight"),
                marginBottom: this.originalElement.css("marginBottom"),
                marginLeft: this.originalElement.css("marginLeft")
            },
            this.element.css(t),
            this.originalElement.css("margin", 0),
            this.originalResizeStyle = this.originalElement.css("resize"),
            this.originalElement.css("resize", "none"),
            this._proportionallyResizeElements.push(this.originalElement.css({
                position: "static",
                zoom: 1,
                display: "block"
            })),
            this.originalElement.css(t),
            this._proportionallyResize()),
            this._setupHandles(),
            i.autoHide && e(this.element).on("mouseenter", (function() {
                i.disabled || (n._removeClass("ui-resizable-autohide"),
                n._handles.show())
            }
            )).on("mouseleave", (function() {
                i.disabled || n.resizing || (n._addClass("ui-resizable-autohide"),
                n._handles.hide())
            }
            )),
            this._mouseInit()
        },
        _destroy: function() {
            this._mouseDestroy();
            var t, i = function(t) {
                e(t).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()
            };
            return this.elementIsWrapper && (i(this.element),
            t = this.element,
            this.originalElement.css({
                position: t.css("position"),
                width: t.outerWidth(),
                height: t.outerHeight(),
                top: t.css("top"),
                left: t.css("left")
            }).insertAfter(t),
            t.remove()),
            this.originalElement.css("resize", this.originalResizeStyle),
            i(this.originalElement),
            this
        },
        _setOption: function(e, t) {
            if (this._super(e, t),
            "handles" === e)
                this._removeHandles(),
                this._setupHandles()
        },
        _setupHandles: function() {
            var t, i, n, s, o, a = this.options, r = this;
            if (this.handles = a.handles || (e(".ui-resizable-handle", this.element).length ? {
                n: ".ui-resizable-n",
                e: ".ui-resizable-e",
                s: ".ui-resizable-s",
                w: ".ui-resizable-w",
                se: ".ui-resizable-se",
                sw: ".ui-resizable-sw",
                ne: ".ui-resizable-ne",
                nw: ".ui-resizable-nw"
            } : "e,s,se"),
            this._handles = e(),
            this.handles.constructor === String)
                for ("all" === this.handles && (this.handles = "n,e,s,w,se,sw,ne,nw"),
                n = this.handles.split(","),
                this.handles = {},
                i = 0; i < n.length; i++)
                    s = "ui-resizable-" + (t = e.trim(n[i])),
                    o = e("<div>"),
                    this._addClass(o, "ui-resizable-handle " + s),
                    o.css({
                        zIndex: a.zIndex
                    }),
                    this.handles[t] = ".ui-resizable-" + t,
                    this.element.append(o);
            this._renderAxis = function(t) {
                var i, n, s, o;
                for (i in t = t || this.element,
                this.handles)
                    this.handles[i].constructor === String ? this.handles[i] = this.element.children(this.handles[i]).first().show() : (this.handles[i].jquery || this.handles[i].nodeType) && (this.handles[i] = e(this.handles[i]),
                    this._on(this.handles[i], {
                        mousedown: r._mouseDown
                    })),
                    this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i) && (n = e(this.handles[i], this.element),
                    o = /sw|ne|nw|se|n|s/.test(i) ? n.outerHeight() : n.outerWidth(),
                    s = ["padding", /ne|nw|n/.test(i) ? "Top" : /se|sw|s/.test(i) ? "Bottom" : /^e$/.test(i) ? "Right" : "Left"].join(""),
                    t.css(s, o),
                    this._proportionallyResize()),
                    this._handles = this._handles.add(this.handles[i])
            }
            ,
            this._renderAxis(this.element),
            this._handles = this._handles.add(this.element.find(".ui-resizable-handle")),
            this._handles.disableSelection(),
            this._handles.on("mouseover", (function() {
                r.resizing || (this.className && (o = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),
                r.axis = o && o[1] ? o[1] : "se")
            }
            )),
            a.autoHide && (this._handles.hide(),
            this._addClass("ui-resizable-autohide"))
        },
        _removeHandles: function() {
            this._handles.remove()
        },
        _mouseCapture: function(t) {
            var i, n, s = !1;
            for (i in this.handles)
                ((n = e(this.handles[i])[0]) === t.target || e.contains(n, t.target)) && (s = !0);
            return !this.options.disabled && s
        },
        _mouseStart: function(t) {
            var i, n, s, o = this.options, a = this.element;
            return this.resizing = !0,
            this._renderProxy(),
            i = this._num(this.helper.css("left")),
            n = this._num(this.helper.css("top")),
            o.containment && (i += e(o.containment).scrollLeft() || 0,
            n += e(o.containment).scrollTop() || 0),
            this.offset = this.helper.offset(),
            this.position = {
                left: i,
                top: n
            },
            this.size = this._helper ? {
                width: this.helper.width(),
                height: this.helper.height()
            } : {
                width: a.width(),
                height: a.height()
            },
            this.originalSize = this._helper ? {
                width: a.outerWidth(),
                height: a.outerHeight()
            } : {
                width: a.width(),
                height: a.height()
            },
            this.sizeDiff = {
                width: a.outerWidth() - a.width(),
                height: a.outerHeight() - a.height()
            },
            this.originalPosition = {
                left: i,
                top: n
            },
            this.originalMousePosition = {
                left: t.pageX,
                top: t.pageY
            },
            this.aspectRatio = "number" == typeof o.aspectRatio ? o.aspectRatio : this.originalSize.width / this.originalSize.height || 1,
            s = e(".ui-resizable-" + this.axis).css("cursor"),
            e("body").css("cursor", "auto" === s ? this.axis + "-resize" : s),
            this._addClass("ui-resizable-resizing"),
            this._propagate("start", t),
            !0
        },
        _mouseDrag: function(t) {
            var i, n, s = this.originalMousePosition, o = this.axis, a = t.pageX - s.left || 0, r = t.pageY - s.top || 0, l = this._change[o];
            return this._updatePrevProperties(),
            !!l && (i = l.apply(this, [t, a, r]),
            this._updateVirtualBoundaries(t.shiftKey),
            (this._aspectRatio || t.shiftKey) && (i = this._updateRatio(i, t)),
            i = this._respectSize(i, t),
            this._updateCache(i),
            this._propagate("resize", t),
            n = this._applyChanges(),
            !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize(),
            e.isEmptyObject(n) || (this._updatePrevProperties(),
            this._trigger("resize", t, this.ui()),
            this._applyChanges()),
            !1)
        },
        _mouseStop: function(t) {
            this.resizing = !1;
            var i, n, s, o, a, r, l, u = this.options, d = this;
            return this._helper && (s = (n = (i = this._proportionallyResizeElements).length && /textarea/i.test(i[0].nodeName)) && this._hasScroll(i[0], "left") ? 0 : d.sizeDiff.height,
            o = n ? 0 : d.sizeDiff.width,
            a = {
                width: d.helper.width() - o,
                height: d.helper.height() - s
            },
            r = parseFloat(d.element.css("left")) + (d.position.left - d.originalPosition.left) || null,
            l = parseFloat(d.element.css("top")) + (d.position.top - d.originalPosition.top) || null,
            u.animate || this.element.css(e.extend(a, {
                top: l,
                left: r
            })),
            d.helper.height(d.size.height),
            d.helper.width(d.size.width),
            this._helper && !u.animate && this._proportionallyResize()),
            e("body").css("cursor", "auto"),
            this._removeClass("ui-resizable-resizing"),
            this._propagate("stop", t),
            this._helper && this.helper.remove(),
            !1
        },
        _updatePrevProperties: function() {
            this.prevPosition = {
                top: this.position.top,
                left: this.position.left
            },
            this.prevSize = {
                width: this.size.width,
                height: this.size.height
            }
        },
        _applyChanges: function() {
            var e = {};
            return this.position.top !== this.prevPosition.top && (e.top = this.position.top + "px"),
            this.position.left !== this.prevPosition.left && (e.left = this.position.left + "px"),
            this.size.width !== this.prevSize.width && (e.width = this.size.width + "px"),
            this.size.height !== this.prevSize.height && (e.height = this.size.height + "px"),
            this.helper.css(e),
            e
        },
        _updateVirtualBoundaries: function(e) {
            var t, i, n, s, o, a = this.options;
            o = {
                minWidth: this._isNumber(a.minWidth) ? a.minWidth : 0,
                maxWidth: this._isNumber(a.maxWidth) ? a.maxWidth : 1 / 0,
                minHeight: this._isNumber(a.minHeight) ? a.minHeight : 0,
                maxHeight: this._isNumber(a.maxHeight) ? a.maxHeight : 1 / 0
            },
            (this._aspectRatio || e) && (t = o.minHeight * this.aspectRatio,
            n = o.minWidth / this.aspectRatio,
            i = o.maxHeight * this.aspectRatio,
            s = o.maxWidth / this.aspectRatio,
            t > o.minWidth && (o.minWidth = t),
            n > o.minHeight && (o.minHeight = n),
            i < o.maxWidth && (o.maxWidth = i),
            s < o.maxHeight && (o.maxHeight = s)),
            this._vBoundaries = o
        },
        _updateCache: function(e) {
            this.offset = this.helper.offset(),
            this._isNumber(e.left) && (this.position.left = e.left),
            this._isNumber(e.top) && (this.position.top = e.top),
            this._isNumber(e.height) && (this.size.height = e.height),
            this._isNumber(e.width) && (this.size.width = e.width)
        },
        _updateRatio: function(e) {
            var t = this.position
              , i = this.size
              , n = this.axis;
            return this._isNumber(e.height) ? e.width = e.height * this.aspectRatio : this._isNumber(e.width) && (e.height = e.width / this.aspectRatio),
            "sw" === n && (e.left = t.left + (i.width - e.width),
            e.top = null),
            "nw" === n && (e.top = t.top + (i.height - e.height),
            e.left = t.left + (i.width - e.width)),
            e
        },
        _respectSize: function(e) {
            var t = this._vBoundaries
              , i = this.axis
              , n = this._isNumber(e.width) && t.maxWidth && t.maxWidth < e.width
              , s = this._isNumber(e.height) && t.maxHeight && t.maxHeight < e.height
              , o = this._isNumber(e.width) && t.minWidth && t.minWidth > e.width
              , a = this._isNumber(e.height) && t.minHeight && t.minHeight > e.height
              , r = this.originalPosition.left + this.originalSize.width
              , l = this.originalPosition.top + this.originalSize.height
              , u = /sw|nw|w/.test(i)
              , d = /nw|ne|n/.test(i);
            return o && (e.width = t.minWidth),
            a && (e.height = t.minHeight),
            n && (e.width = t.maxWidth),
            s && (e.height = t.maxHeight),
            o && u && (e.left = r - t.minWidth),
            n && u && (e.left = r - t.maxWidth),
            a && d && (e.top = l - t.minHeight),
            s && d && (e.top = l - t.maxHeight),
            e.width || e.height || e.left || !e.top ? e.width || e.height || e.top || !e.left || (e.left = null) : e.top = null,
            e
        },
        _getPaddingPlusBorderDimensions: function(e) {
            for (var t = 0, i = [], n = [e.css("borderTopWidth"), e.css("borderRightWidth"), e.css("borderBottomWidth"), e.css("borderLeftWidth")], s = [e.css("paddingTop"), e.css("paddingRight"), e.css("paddingBottom"), e.css("paddingLeft")]; t < 4; t++)
                i[t] = parseFloat(n[t]) || 0,
                i[t] += parseFloat(s[t]) || 0;
            return {
                height: i[0] + i[2],
                width: i[1] + i[3]
            }
        },
        _proportionallyResize: function() {
            if (this._proportionallyResizeElements.length)
                for (var e, t = 0, i = this.helper || this.element; t < this._proportionallyResizeElements.length; t++)
                    e = this._proportionallyResizeElements[t],
                    this.outerDimensions || (this.outerDimensions = this._getPaddingPlusBorderDimensions(e)),
                    e.css({
                        height: i.height() - this.outerDimensions.height || 0,
                        width: i.width() - this.outerDimensions.width || 0
                    })
        },
        _renderProxy: function() {
            var t = this.element
              , i = this.options;
            this.elementOffset = t.offset(),
            this._helper ? (this.helper = this.helper || e("<div style='overflow:hidden;'></div>"),
            this._addClass(this.helper, this._helper),
            this.helper.css({
                width: this.element.outerWidth(),
                height: this.element.outerHeight(),
                position: "absolute",
                left: this.elementOffset.left + "px",
                top: this.elementOffset.top + "px",
                zIndex: ++i.zIndex
            }),
            this.helper.appendTo("body").disableSelection()) : this.helper = this.element
        },
        _change: {
            e: function(e, t) {
                return {
                    width: this.originalSize.width + t
                }
            },
            w: function(e, t) {
                var i = this.originalSize;
                return {
                    left: this.originalPosition.left + t,
                    width: i.width - t
                }
            },
            n: function(e, t, i) {
                var n = this.originalSize;
                return {
                    top: this.originalPosition.top + i,
                    height: n.height - i
                }
            },
            s: function(e, t, i) {
                return {
                    height: this.originalSize.height + i
                }
            },
            se: function(t, i, n) {
                return e.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [t, i, n]))
            },
            sw: function(t, i, n) {
                return e.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [t, i, n]))
            },
            ne: function(t, i, n) {
                return e.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [t, i, n]))
            },
            nw: function(t, i, n) {
                return e.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [t, i, n]))
            }
        },
        _propagate: function(t, i) {
            e.ui.plugin.call(this, t, [i, this.ui()]),
            "resize" !== t && this._trigger(t, i, this.ui())
        },
        plugins: {},
        ui: function() {
            return {
                originalElement: this.originalElement,
                element: this.element,
                helper: this.helper,
                position: this.position,
                size: this.size,
                originalSize: this.originalSize,
                originalPosition: this.originalPosition
            }
        }
    }),
    e.ui.plugin.add("resizable", "animate", {
        stop: function(t) {
            var i = e(this).resizable("instance")
              , n = i.options
              , s = i._proportionallyResizeElements
              , o = s.length && /textarea/i.test(s[0].nodeName)
              , a = o && i._hasScroll(s[0], "left") ? 0 : i.sizeDiff.height
              , r = o ? 0 : i.sizeDiff.width
              , l = {
                width: i.size.width - r,
                height: i.size.height - a
            }
              , u = parseFloat(i.element.css("left")) + (i.position.left - i.originalPosition.left) || null
              , d = parseFloat(i.element.css("top")) + (i.position.top - i.originalPosition.top) || null;
            i.element.animate(e.extend(l, d && u ? {
                top: d,
                left: u
            } : {}), {
                duration: n.animateDuration,
                easing: n.animateEasing,
                step: function() {
                    var n = {
                        width: parseFloat(i.element.css("width")),
                        height: parseFloat(i.element.css("height")),
                        top: parseFloat(i.element.css("top")),
                        left: parseFloat(i.element.css("left"))
                    };
                    s && s.length && e(s[0]).css({
                        width: n.width,
                        height: n.height
                    }),
                    i._updateCache(n),
                    i._propagate("resize", t)
                }
            })
        }
    }),
    e.ui.plugin.add("resizable", "containment", {
        start: function() {
            var t, i, n, s, o, a, r, l = e(this).resizable("instance"), u = l.options, d = l.element, c = u.containment, h = c instanceof e ? c.get(0) : /parent/.test(c) ? d.parent().get(0) : c;
            h && (l.containerElement = e(h),
            /document/.test(c) || c === document ? (l.containerOffset = {
                left: 0,
                top: 0
            },
            l.containerPosition = {
                left: 0,
                top: 0
            },
            l.parentData = {
                element: e(document),
                left: 0,
                top: 0,
                width: e(document).width(),
                height: e(document).height() || document.body.parentNode.scrollHeight
            }) : (t = e(h),
            i = [],
            e(["Top", "Right", "Left", "Bottom"]).each((function(e, n) {
                i[e] = l._num(t.css("padding" + n))
            }
            )),
            l.containerOffset = t.offset(),
            l.containerPosition = t.position(),
            l.containerSize = {
                height: t.innerHeight() - i[3],
                width: t.innerWidth() - i[1]
            },
            n = l.containerOffset,
            s = l.containerSize.height,
            o = l.containerSize.width,
            a = l._hasScroll(h, "left") ? h.scrollWidth : o,
            r = l._hasScroll(h) ? h.scrollHeight : s,
            l.parentData = {
                element: h,
                left: n.left,
                top: n.top,
                width: a,
                height: r
            }))
        },
        resize: function(t) {
            var i, n, s, o, a = e(this).resizable("instance"), r = a.options, l = a.containerOffset, u = a.position, d = a._aspectRatio || t.shiftKey, c = {
                top: 0,
                left: 0
            }, h = a.containerElement, f = !0;
            h[0] !== document && /static/.test(h.css("position")) && (c = l),
            u.left < (a._helper ? l.left : 0) && (a.size.width = a.size.width + (a._helper ? a.position.left - l.left : a.position.left - c.left),
            d && (a.size.height = a.size.width / a.aspectRatio,
            f = !1),
            a.position.left = r.helper ? l.left : 0),
            u.top < (a._helper ? l.top : 0) && (a.size.height = a.size.height + (a._helper ? a.position.top - l.top : a.position.top),
            d && (a.size.width = a.size.height * a.aspectRatio,
            f = !1),
            a.position.top = a._helper ? l.top : 0),
            s = a.containerElement.get(0) === a.element.parent().get(0),
            o = /relative|absolute/.test(a.containerElement.css("position")),
            s && o ? (a.offset.left = a.parentData.left + a.position.left,
            a.offset.top = a.parentData.top + a.position.top) : (a.offset.left = a.element.offset().left,
            a.offset.top = a.element.offset().top),
            i = Math.abs(a.sizeDiff.width + (a._helper ? a.offset.left - c.left : a.offset.left - l.left)),
            n = Math.abs(a.sizeDiff.height + (a._helper ? a.offset.top - c.top : a.offset.top - l.top)),
            i + a.size.width >= a.parentData.width && (a.size.width = a.parentData.width - i,
            d && (a.size.height = a.size.width / a.aspectRatio,
            f = !1)),
            n + a.size.height >= a.parentData.height && (a.size.height = a.parentData.height - n,
            d && (a.size.width = a.size.height * a.aspectRatio,
            f = !1)),
            f || (a.position.left = a.prevPosition.left,
            a.position.top = a.prevPosition.top,
            a.size.width = a.prevSize.width,
            a.size.height = a.prevSize.height)
        },
        stop: function() {
            var t = e(this).resizable("instance")
              , i = t.options
              , n = t.containerOffset
              , s = t.containerPosition
              , o = t.containerElement
              , a = e(t.helper)
              , r = a.offset()
              , l = a.outerWidth() - t.sizeDiff.width
              , u = a.outerHeight() - t.sizeDiff.height;
            t._helper && !i.animate && /relative/.test(o.css("position")) && e(this).css({
                left: r.left - s.left - n.left,
                width: l,
                height: u
            }),
            t._helper && !i.animate && /static/.test(o.css("position")) && e(this).css({
                left: r.left - s.left - n.left,
                width: l,
                height: u
            })
        }
    }),
    e.ui.plugin.add("resizable", "alsoResize", {
        start: function() {
            var t = e(this).resizable("instance").options;
            e(t.alsoResize).each((function() {
                var t = e(this);
                t.data("ui-resizable-alsoresize", {
                    width: parseFloat(t.width()),
                    height: parseFloat(t.height()),
                    left: parseFloat(t.css("left")),
                    top: parseFloat(t.css("top"))
                })
            }
            ))
        },
        resize: function(t, i) {
            var n = e(this).resizable("instance")
              , s = n.options
              , o = n.originalSize
              , a = n.originalPosition
              , r = {
                height: n.size.height - o.height || 0,
                width: n.size.width - o.width || 0,
                top: n.position.top - a.top || 0,
                left: n.position.left - a.left || 0
            };
            e(s.alsoResize).each((function() {
                var t = e(this)
                  , n = e(this).data("ui-resizable-alsoresize")
                  , s = {}
                  , o = t.parents(i.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
                e.each(o, (function(e, t) {
                    var i = (n[t] || 0) + (r[t] || 0);
                    i && i >= 0 && (s[t] = i || null)
                }
                )),
                t.css(s)
            }
            ))
        },
        stop: function() {
            e(this).removeData("ui-resizable-alsoresize")
        }
    }),
    e.ui.plugin.add("resizable", "ghost", {
        start: function() {
            var t = e(this).resizable("instance")
              , i = t.size;
            t.ghost = t.originalElement.clone(),
            t.ghost.css({
                opacity: .25,
                display: "block",
                position: "relative",
                height: i.height,
                width: i.width,
                margin: 0,
                left: 0,
                top: 0
            }),
            t._addClass(t.ghost, "ui-resizable-ghost"),
            !1 !== e.uiBackCompat && "string" == typeof t.options.ghost && t.ghost.addClass(this.options.ghost),
            t.ghost.appendTo(t.helper)
        },
        resize: function() {
            var t = e(this).resizable("instance");
            t.ghost && t.ghost.css({
                position: "relative",
                height: t.size.height,
                width: t.size.width
            })
        },
        stop: function() {
            var t = e(this).resizable("instance");
            t.ghost && t.helper && t.helper.get(0).removeChild(t.ghost.get(0))
        }
    }),
    e.ui.plugin.add("resizable", "grid", {
        resize: function() {
            var t, i = e(this).resizable("instance"), n = i.options, s = i.size, o = i.originalSize, a = i.originalPosition, r = i.axis, l = "number" == typeof n.grid ? [n.grid, n.grid] : n.grid, u = l[0] || 1, d = l[1] || 1, c = Math.round((s.width - o.width) / u) * u, h = Math.round((s.height - o.height) / d) * d, f = o.width + c, p = o.height + h, m = n.maxWidth && n.maxWidth < f, g = n.maxHeight && n.maxHeight < p, v = n.minWidth && n.minWidth > f, b = n.minHeight && n.minHeight > p;
            n.grid = l,
            v && (f += u),
            b && (p += d),
            m && (f -= u),
            g && (p -= d),
            /^(se|s|e)$/.test(r) ? (i.size.width = f,
            i.size.height = p) : /^(ne)$/.test(r) ? (i.size.width = f,
            i.size.height = p,
            i.position.top = a.top - h) : /^(sw)$/.test(r) ? (i.size.width = f,
            i.size.height = p,
            i.position.left = a.left - c) : ((p - d <= 0 || f - u <= 0) && (t = i._getPaddingPlusBorderDimensions(this)),
            p - d > 0 ? (i.size.height = p,
            i.position.top = a.top - h) : (p = d - t.height,
            i.size.height = p,
            i.position.top = a.top + o.height - p),
            f - u > 0 ? (i.size.width = f,
            i.position.left = a.left - c) : (f = u - t.width,
            i.size.width = f,
            i.position.left = a.left + o.width - f))
        }
    }),
    e.ui.resizable
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./button", "./draggable", "./mouse", "./resizable", "../focusable", "../keycode", "../position", "../safe-active-element", "../safe-blur", "../tabbable", "../unique-id", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.dialog", {
        version: "1.12.1",
        options: {
            appendTo: "body",
            autoOpen: !0,
            buttons: [],
            classes: {
                "ui-dialog": "ui-corner-all",
                "ui-dialog-titlebar": "ui-corner-all"
            },
            closeOnEscape: !0,
            closeText: "Close",
            draggable: !0,
            hide: null,
            height: "auto",
            maxHeight: null,
            maxWidth: null,
            minHeight: 150,
            minWidth: 150,
            modal: !1,
            position: {
                my: "center",
                at: "center",
                of: window,
                collision: "fit",
                using: function(t) {
                    var i = e(this).css(t).offset().top;
                    i < 0 && e(this).css("top", t.top - i)
                }
            },
            resizable: !0,
            show: null,
            title: null,
            width: 300,
            beforeClose: null,
            close: null,
            drag: null,
            dragStart: null,
            dragStop: null,
            focus: null,
            open: null,
            resize: null,
            resizeStart: null,
            resizeStop: null
        },
        sizeRelatedOptions: {
            buttons: !0,
            height: !0,
            maxHeight: !0,
            maxWidth: !0,
            minHeight: !0,
            minWidth: !0,
            width: !0
        },
        resizableRelatedOptions: {
            maxHeight: !0,
            maxWidth: !0,
            minHeight: !0,
            minWidth: !0
        },
        _create: function() {
            this.originalCss = {
                display: this.element[0].style.display,
                width: this.element[0].style.width,
                minHeight: this.element[0].style.minHeight,
                maxHeight: this.element[0].style.maxHeight,
                height: this.element[0].style.height
            },
            this.originalPosition = {
                parent: this.element.parent(),
                index: this.element.parent().children().index(this.element)
            },
            this.originalTitle = this.element.attr("title"),
            null == this.options.title && null != this.originalTitle && (this.options.title = this.originalTitle),
            this.options.disabled && (this.options.disabled = !1),
            this._createWrapper(),
            this.element.show().removeAttr("title").appendTo(this.uiDialog),
            this._addClass("ui-dialog-content", "ui-widget-content"),
            this._createTitlebar(),
            this._createButtonPane(),
            this.options.draggable && e.fn.draggable && this._makeDraggable(),
            this.options.resizable && e.fn.resizable && this._makeResizable(),
            this._isOpen = !1,
            this._trackFocus()
        },
        _init: function() {
            this.options.autoOpen && this.open()
        },
        _appendTo: function() {
            var t = this.options.appendTo;
            return t && (t.jquery || t.nodeType) ? e(t) : this.document.find(t || "body").eq(0)
        },
        _destroy: function() {
            var e, t = this.originalPosition;
            this._untrackInstance(),
            this._destroyOverlay(),
            this.element.removeUniqueId().css(this.originalCss).detach(),
            this.uiDialog.remove(),
            this.originalTitle && this.element.attr("title", this.originalTitle),
            (e = t.parent.children().eq(t.index)).length && e[0] !== this.element[0] ? e.before(this.element) : t.parent.append(this.element)
        },
        widget: function() {
            return this.uiDialog
        },
        disable: e.noop,
        enable: e.noop,
        close: function(t) {
            var i = this;
            this._isOpen && !1 !== this._trigger("beforeClose", t) && (this._isOpen = !1,
            this._focusedElement = null,
            this._destroyOverlay(),
            this._untrackInstance(),
            this.opener.filter(":focusable").trigger("focus").length || e.ui.safeBlur(e.ui.safeActiveElement(this.document[0])),
            this._hide(this.uiDialog, this.options.hide, (function() {
                i._trigger("close", t)
            }
            )))
        },
        isOpen: function() {
            return this._isOpen
        },
        moveToTop: function() {
            this._moveToTop()
        },
        _moveToTop: function(t, i) {
            var n = !1
              , s = this.uiDialog.siblings(".ui-front:visible").map((function() {
                return +e(this).css("z-index")
            }
            )).get()
              , o = Math.max.apply(null, s);
            return o >= +this.uiDialog.css("z-index") && (this.uiDialog.css("z-index", o + 1),
            n = !0),
            n && !i && this._trigger("focus", t),
            n
        },
        open: function() {
            var t = this;
            this._isOpen ? this._moveToTop() && this._focusTabbable() : (this._isOpen = !0,
            this.opener = e(e.ui.safeActiveElement(this.document[0])),
            this._size(),
            this._position(),
            this._createOverlay(),
            this._moveToTop(null, !0),
            this.overlay && this.overlay.css("z-index", this.uiDialog.css("z-index") - 1),
            this._show(this.uiDialog, this.options.show, (function() {
                t._focusTabbable(),
                t._trigger("focus")
            }
            )),
            this._makeFocusTarget(),
            this._trigger("open"))
        },
        _focusTabbable: function() {
            var e = this._focusedElement;
            e || (e = this.element.find("[autofocus]")),
            e.length || (e = this.element.find(":tabbable")),
            e.length || (e = this.uiDialogButtonPane.find(":tabbable")),
            e.length || (e = this.uiDialogTitlebarClose.filter(":tabbable")),
            e.length || (e = this.uiDialog),
            e.eq(0).trigger("focus")
        },
        _keepFocus: function(t) {
            function i() {
                var t = e.ui.safeActiveElement(this.document[0]);
                this.uiDialog[0] === t || e.contains(this.uiDialog[0], t) || this._focusTabbable()
            }
            t.preventDefault(),
            i.call(this),
            this._delay(i)
        },
        _createWrapper: function() {
            this.uiDialog = e("<div>").hide().attr({
                tabIndex: -1,
                role: "dialog"
            }).appendTo(this._appendTo()),
            this._addClass(this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front"),
            this._on(this.uiDialog, {
                keydown: function(t) {
                    if (this.options.closeOnEscape && !t.isDefaultPrevented() && t.keyCode && t.keyCode === e.ui.keyCode.ESCAPE)
                        return t.preventDefault(),
                        void this.close(t);
                    if (t.keyCode === e.ui.keyCode.TAB && !t.isDefaultPrevented()) {
                        var i = this.uiDialog.find(":tabbable")
                          , n = i.filter(":first")
                          , s = i.filter(":last");
                        t.target !== s[0] && t.target !== this.uiDialog[0] || t.shiftKey ? t.target !== n[0] && t.target !== this.uiDialog[0] || !t.shiftKey || (this._delay((function() {
                            s.trigger("focus")
                        }
                        )),
                        t.preventDefault()) : (this._delay((function() {
                            n.trigger("focus")
                        }
                        )),
                        t.preventDefault())
                    }
                },
                mousedown: function(e) {
                    this._moveToTop(e) && this._focusTabbable()
                }
            }),
            this.element.find("[aria-describedby]").length || this.uiDialog.attr({
                "aria-describedby": this.element.uniqueId().attr("id")
            })
        },
        _createTitlebar: function() {
            var t;
            this.uiDialogTitlebar = e("<div>"),
            this._addClass(this.uiDialogTitlebar, "ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix"),
            this._on(this.uiDialogTitlebar, {
                mousedown: function(t) {
                    e(t.target).closest(".ui-dialog-titlebar-close") || this.uiDialog.trigger("focus")
                }
            }),
            this.uiDialogTitlebarClose = e("<button type='button'></button>").button({
                label: e("<a>").text(this.options.closeText).html(),
                icon: "ui-icon-closethick",
                showLabel: !1
            }).appendTo(this.uiDialogTitlebar),
            this._addClass(this.uiDialogTitlebarClose, "ui-dialog-titlebar-close"),
            this._on(this.uiDialogTitlebarClose, {
                click: function(e) {
                    e.preventDefault(),
                    this.close(e)
                }
            }),
            t = e("<span>").uniqueId().prependTo(this.uiDialogTitlebar),
            this._addClass(t, "ui-dialog-title"),
            this._title(t),
            this.uiDialogTitlebar.prependTo(this.uiDialog),
            this.uiDialog.attr({
                "aria-labelledby": t.attr("id")
            })
        },
        _title: function(e) {
            this.options.title ? e.text(this.options.title) : e.php("&#160;")
        },
        _createButtonPane: function() {
            this.uiDialogButtonPane = e("<div>"),
            this._addClass(this.uiDialogButtonPane, "ui-dialog-buttonpane", "ui-widget-content ui-helper-clearfix"),
            this.uiButtonSet = e("<div>").appendTo(this.uiDialogButtonPane),
            this._addClass(this.uiButtonSet, "ui-dialog-buttonset"),
            this._createButtons()
        },
        _createButtons: function() {
            var t = this
              , i = this.options.buttons;
            this.uiDialogButtonPane.remove(),
            this.uiButtonSet.empty(),
            e.isEmptyObject(i) || e.isArray(i) && !i.length ? this._removeClass(this.uiDialog, "ui-dialog-buttons") : (e.each(i, (function(i, n) {
                var s, o;
                n = e.isFunction(n) ? {
                    click: n,
                    text: i
                } : n,
                n = e.extend({
                    type: "button"
                }, n),
                s = n.click,
                o = {
                    icon: n.icon,
                    iconPosition: n.iconPosition,
                    showLabel: n.showLabel,
                    icons: n.icons,
                    text: n.text
                },
                delete n.click,
                delete n.icon,
                delete n.iconPosition,
                delete n.showLabel,
                delete n.icons,
                "boolean" == typeof n.text && delete n.text,
                e("<button></button>", n).button(o).appendTo(t.uiButtonSet).on("click", (function() {
                    s.apply(t.element[0], arguments)
                }
                ))
            }
            )),
            this._addClass(this.uiDialog, "ui-dialog-buttons"),
            this.uiDialogButtonPane.appendTo(this.uiDialog))
        },
        _makeDraggable: function() {
            function t(e) {
                return {
                    position: e.position,
                    offset: e.offset
                }
            }
            var i = this
              , n = this.options;
            this.uiDialog.draggable({
                cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
                handle: ".ui-dialog-titlebar",
                containment: "document",
                start: function(n, s) {
                    i._addClass(e(this), "ui-dialog-dragging"),
                    i._blockFrames(),
                    i._trigger("dragStart", n, t(s))
                },
                drag: function(e, n) {
                    i._trigger("drag", e, t(n))
                },
                stop: function(s, o) {
                    var a = o.offset.left - i.document.scrollLeft()
                      , r = o.offset.top - i.document.scrollTop();
                    n.position = {
                        my: "left top",
                        at: "left" + (a >= 0 ? "+" : "") + a + " top" + (r >= 0 ? "+" : "") + r,
                        of: i.window
                    },
                    i._removeClass(e(this), "ui-dialog-dragging"),
                    i._unblockFrames(),
                    i._trigger("dragStop", s, t(o))
                }
            })
        },
        _makeResizable: function() {
            function t(e) {
                return {
                    originalPosition: e.originalPosition,
                    originalSize: e.originalSize,
                    position: e.position,
                    size: e.size
                }
            }
            var i = this
              , n = this.options
              , s = n.resizable
              , o = this.uiDialog.css("position")
              , a = "string" == typeof s ? s : "n,e,s,w,se,sw,ne,nw";
            this.uiDialog.resizable({
                cancel: ".ui-dialog-content",
                containment: "document",
                alsoResize: this.element,
                maxWidth: n.maxWidth,
                maxHeight: n.maxHeight,
                minWidth: n.minWidth,
                minHeight: this._minHeight(),
                handles: a,
                start: function(n, s) {
                    i._addClass(e(this), "ui-dialog-resizing"),
                    i._blockFrames(),
                    i._trigger("resizeStart", n, t(s))
                },
                resize: function(e, n) {
                    i._trigger("resize", e, t(n))
                },
                stop: function(s, o) {
                    var a = i.uiDialog.offset()
                      , r = a.left - i.document.scrollLeft()
                      , l = a.top - i.document.scrollTop();
                    n.height = i.uiDialog.height(),
                    n.width = i.uiDialog.width(),
                    n.position = {
                        my: "left top",
                        at: "left" + (r >= 0 ? "+" : "") + r + " top" + (l >= 0 ? "+" : "") + l,
                        of: i.window
                    },
                    i._removeClass(e(this), "ui-dialog-resizing"),
                    i._unblockFrames(),
                    i._trigger("resizeStop", s, t(o))
                }
            }).css("position", o)
        },
        _trackFocus: function() {
            this._on(this.widget(), {
                focusin: function(t) {
                    this._makeFocusTarget(),
                    this._focusedElement = e(t.target)
                }
            })
        },
        _makeFocusTarget: function() {
            this._untrackInstance(),
            this._trackingInstances().unshift(this)
        },
        _untrackInstance: function() {
            var t = this._trackingInstances()
              , i = e.inArray(this, t);
            -1 !== i && t.splice(i, 1)
        },
        _trackingInstances: function() {
            var e = this.document.data("ui-dialog-instances");
            return e || (e = [],
            this.document.data("ui-dialog-instances", e)),
            e
        },
        _minHeight: function() {
            var e = this.options;
            return "auto" === e.height ? e.minHeight : Math.min(e.minHeight, e.height)
        },
        _position: function() {
            var e = this.uiDialog.is(":visible");
            e || this.uiDialog.show(),
            this.uiDialog.position(this.options.position),
            e || this.uiDialog.hide()
        },
        _setOptions: function(t) {
            var i = this
              , n = !1
              , s = {};
            e.each(t, (function(e, t) {
                i._setOption(e, t),
                e in i.sizeRelatedOptions && (n = !0),
                e in i.resizableRelatedOptions && (s[e] = t)
            }
            )),
            n && (this._size(),
            this._position()),
            this.uiDialog.is(":data(ui-resizable)") && this.uiDialog.resizable("option", s)
        },
        _setOption: function(t, i) {
            var n, s, o = this.uiDialog;
            "disabled" !== t && (this._super(t, i),
            "appendTo" === t && this.uiDialog.appendTo(this._appendTo()),
            "buttons" === t && this._createButtons(),
            "closeText" === t && this.uiDialogTitlebarClose.button({
                label: e("<a>").text("" + this.options.closeText).html()
            }),
            "draggable" === t && ((n = o.is(":data(ui-draggable)")) && !i && o.draggable("destroy"),
            !n && i && this._makeDraggable()),
            "position" === t && this._position(),
            "resizable" === t && ((s = o.is(":data(ui-resizable)")) && !i && o.resizable("destroy"),
            s && "string" == typeof i && o.resizable("option", "handles", i),
            s || !1 === i || this._makeResizable()),
            "title" === t && this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))
        },
        _size: function() {
            var e, t, i, n = this.options;
            this.element.show().css({
                width: "auto",
                minHeight: 0,
                maxHeight: "none",
                height: 0
            }),
            n.minWidth > n.width && (n.width = n.minWidth),
            e = this.uiDialog.css({
                height: "auto",
                width: n.width
            }).outerHeight(),
            t = Math.max(0, n.minHeight - e),
            i = "number" == typeof n.maxHeight ? Math.max(0, n.maxHeight - e) : "none",
            "auto" === n.height ? this.element.css({
                minHeight: t,
                maxHeight: i,
                height: "auto"
            }) : this.element.height(Math.max(0, n.height - e)),
            this.uiDialog.is(":data(ui-resizable)") && this.uiDialog.resizable("option", "minHeight", this._minHeight())
        },
        _blockFrames: function() {
            this.iframeBlocks = this.document.find("iframe").map((function() {
                var t = e(this);
                return e("<div>").css({
                    position: "absolute",
                    width: t.outerWidth(),
                    height: t.outerHeight()
                }).appendTo(t.parent()).offset(t.offset())[0]
            }
            ))
        },
        _unblockFrames: function() {
            this.iframeBlocks && (this.iframeBlocks.remove(),
            delete this.iframeBlocks)
        },
        _allowInteraction: function(t) {
            return !!e(t.target).closest(".ui-dialog").length || !!e(t.target).closest(".ui-datepicker").length
        },
        _createOverlay: function() {
            if (this.options.modal) {
                var t = !0;
                this._delay((function() {
                    t = !1
                }
                )),
                this.document.data("ui-dialog-overlays") || this._on(this.document, {
                    focusin: function(e) {
                        t || this._allowInteraction(e) || (e.preventDefault(),
                        this._trackingInstances()[0]._focusTabbable())
                    }
                }),
                this.overlay = e("<div>").appendTo(this._appendTo()),
                this._addClass(this.overlay, null, "ui-widget-overlay ui-front"),
                this._on(this.overlay, {
                    mousedown: "_keepFocus"
                }),
                this.document.data("ui-dialog-overlays", (this.document.data("ui-dialog-overlays") || 0) + 1)
            }
        },
        _destroyOverlay: function() {
            if (this.options.modal && this.overlay) {
                var e = this.document.data("ui-dialog-overlays") - 1;
                e ? this.document.data("ui-dialog-overlays", e) : (this._off(this.document, "focusin"),
                this.document.removeData("ui-dialog-overlays")),
                this.overlay.remove(),
                this.overlay = null
            }
        }
    }),
    !1 !== e.uiBackCompat && e.widget("ui.dialog", e.ui.dialog, {
        options: {
            dialogClass: ""
        },
        _createWrapper: function() {
            this._super(),
            this.uiDialog.addClass(this.options.dialogClass)
        },
        _setOption: function(e, t) {
            "dialogClass" === e && this.uiDialog.removeClass(this.options.dialogClass).addClass(t),
            this._superApply(arguments)
        }
    }),
    e.ui.dialog
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./draggable", "./mouse", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    e.widget("ui.droppable", {
        version: "1.12.1",
        widgetEventPrefix: "drop",
        options: {
            accept: "*",
            addClasses: !0,
            greedy: !1,
            scope: "default",
            tolerance: "intersect",
            activate: null,
            deactivate: null,
            drop: null,
            out: null,
            over: null
        },
        _create: function() {
            var t, i = this.options, n = i.accept;
            this.isover = !1,
            this.isout = !0,
            this.accept = e.isFunction(n) ? n : function(e) {
                return e.is(n)
            }
            ,
            this.proportions = function() {
                if (!arguments.length)
                    return t || (t = {
                        width: this.element[0].offsetWidth,
                        height: this.element[0].offsetHeight
                    });
                t = arguments[0]
            }
            ,
            this._addToManager(i.scope),
            i.addClasses && this._addClass("ui-droppable")
        },
        _addToManager: function(t) {
            e.ui.ddmanager.droppables[t] = e.ui.ddmanager.droppables[t] || [],
            e.ui.ddmanager.droppables[t].push(this)
        },
        _splice: function(e) {
            for (var t = 0; t < e.length; t++)
                e[t] === this && e.splice(t, 1)
        },
        _destroy: function() {
            var t = e.ui.ddmanager.droppables[this.options.scope];
            this._splice(t)
        },
        _setOption: function(t, i) {
            if ("accept" === t)
                this.accept = e.isFunction(i) ? i : function(e) {
                    return e.is(i)
                }
                ;
            else if ("scope" === t) {
                var n = e.ui.ddmanager.droppables[this.options.scope];
                this._splice(n),
                this._addToManager(i)
            }
            this._super(t, i)
        },
        _activate: function(t) {
            var i = e.ui.ddmanager.current;
            this._addActiveClass(),
            i && this._trigger("activate", t, this.ui(i))
        },
        _deactivate: function(t) {
            var i = e.ui.ddmanager.current;
            this._removeActiveClass(),
            i && this._trigger("deactivate", t, this.ui(i))
        },
        _over: function(t) {
            var i = e.ui.ddmanager.current;
            i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this._addHoverClass(),
            this._trigger("over", t, this.ui(i)))
        },
        _out: function(t) {
            var i = e.ui.ddmanager.current;
            i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this._removeHoverClass(),
            this._trigger("out", t, this.ui(i)))
        },
        _drop: function(i, n) {
            var s = n || e.ui.ddmanager.current
              , o = !1;
            return !(!s || (s.currentItem || s.element)[0] === this.element[0]) && (this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each((function() {
                var n = e(this).droppable("instance");
                if (n.options.greedy && !n.options.disabled && n.options.scope === s.options.scope && n.accept.call(n.element[0], s.currentItem || s.element) && t(s, e.extend(n, {
                    offset: n.element.offset()
                }), n.options.tolerance, i))
                    return o = !0,
                    !1
            }
            )),
            !o && (!!this.accept.call(this.element[0], s.currentItem || s.element) && (this._removeActiveClass(),
            this._removeHoverClass(),
            this._trigger("drop", i, this.ui(s)),
            this.element)))
        },
        ui: function(e) {
            return {
                draggable: e.currentItem || e.element,
                helper: e.helper,
                position: e.position,
                offset: e.positionAbs
            }
        },
        _addHoverClass: function() {
            this._addClass("ui-droppable-hover")
        },
        _removeHoverClass: function() {
            this._removeClass("ui-droppable-hover")
        },
        _addActiveClass: function() {
            this._addClass("ui-droppable-active")
        },
        _removeActiveClass: function() {
            this._removeClass("ui-droppable-active")
        }
    });
    var t = e.ui.intersect = function() {
        function e(e, t, i) {
            return e >= t && e < t + i
        }
        return function(t, i, n, s) {
            if (!i.offset)
                return !1;
            var o = (t.positionAbs || t.position.absolute).left + t.margins.left
              , a = (t.positionAbs || t.position.absolute).top + t.margins.top
              , r = o + t.helperProportions.width
              , l = a + t.helperProportions.height
              , u = i.offset.left
              , d = i.offset.top
              , c = u + i.proportions().width
              , h = d + i.proportions().height;
            switch (n) {
            case "fit":
                return u <= o && r <= c && d <= a && l <= h;
            case "intersect":
                return u < o + t.helperProportions.width / 2 && r - t.helperProportions.width / 2 < c && d < a + t.helperProportions.height / 2 && l - t.helperProportions.height / 2 < h;
            case "pointer":
                return e(s.pageY, d, i.proportions().height) && e(s.pageX, u, i.proportions().width);
            case "touch":
                return (a >= d && a <= h || l >= d && l <= h || a < d && l > h) && (o >= u && o <= c || r >= u && r <= c || o < u && r > c);
            default:
                return !1
            }
        }
    }();
    return e.ui.ddmanager = {
        current: null,
        droppables: {
            default: []
        },
        prepareOffsets: function(t, i) {
            var n, s, o = e.ui.ddmanager.droppables[t.options.scope] || [], a = i ? i.type : null, r = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
            e: for (n = 0; n < o.length; n++)
                if (!(o[n].options.disabled || t && !o[n].accept.call(o[n].element[0], t.currentItem || t.element))) {
                    for (s = 0; s < r.length; s++)
                        if (r[s] === o[n].element[0]) {
                            o[n].proportions().height = 0;
                            continue e
                        }
                    o[n].visible = "none" !== o[n].element.css("display"),
                    o[n].visible && ("mousedown" === a && o[n]._activate.call(o[n], i),
                    o[n].offset = o[n].element.offset(),
                    o[n].proportions({
                        width: o[n].element[0].offsetWidth,
                        height: o[n].element[0].offsetHeight
                    }))
                }
        },
        drop: function(i, n) {
            var s = !1;
            return e.each((e.ui.ddmanager.droppables[i.options.scope] || []).slice(), (function() {
                this.options && (!this.options.disabled && this.visible && t(i, this, this.options.tolerance, n) && (s = this._drop.call(this, n) || s),
                !this.options.disabled && this.visible && this.accept.call(this.element[0], i.currentItem || i.element) && (this.isout = !0,
                this.isover = !1,
                this._deactivate.call(this, n)))
            }
            )),
            s
        },
        dragStart: function(t, i) {
            t.element.parentsUntil("body").on("scroll.droppable", (function() {
                t.options.refreshPositions || e.ui.ddmanager.prepareOffsets(t, i)
            }
            ))
        },
        drag: function(i, n) {
            i.options.refreshPositions && e.ui.ddmanager.prepareOffsets(i, n),
            e.each(e.ui.ddmanager.droppables[i.options.scope] || [], (function() {
                if (!this.options.disabled && !this.greedyChild && this.visible) {
                    var s, o, a, r = t(i, this, this.options.tolerance, n), l = !r && this.isover ? "isout" : r && !this.isover ? "isover" : null;
                    l && (this.options.greedy && (o = this.options.scope,
                    (a = this.element.parents(":data(ui-droppable)").filter((function() {
                        return e(this).droppable("instance").options.scope === o
                    }
                    ))).length && ((s = e(a[0]).droppable("instance")).greedyChild = "isover" === l)),
                    s && "isover" === l && (s.isover = !1,
                    s.isout = !0,
                    s._out.call(s, n)),
                    this[l] = !0,
                    this["isout" === l ? "isover" : "isout"] = !1,
                    this["isover" === l ? "_over" : "_out"].call(this, n),
                    s && "isout" === l && (s.isout = !1,
                    s.isover = !0,
                    s._over.call(s, n)))
                }
            }
            ))
        },
        dragStop: function(t, i) {
            t.element.parentsUntil("body").off("scroll.droppable"),
            t.options.refreshPositions || e.ui.ddmanager.prepareOffsets(t, i)
        }
    },
    !1 !== e.uiBackCompat && e.widget("ui.droppable", e.ui.droppable, {
        options: {
            hoverClass: !1,
            activeClass: !1
        },
        _addActiveClass: function() {
            this._super(),
            this.options.activeClass && this.element.addClass(this.options.activeClass)
        },
        _removeActiveClass: function() {
            this._super(),
            this.options.activeClass && this.element.removeClass(this.options.activeClass)
        },
        _addHoverClass: function() {
            this._super(),
            this.options.hoverClass && this.element.addClass(this.options.hoverClass)
        },
        _removeHoverClass: function() {
            this._super(),
            this.options.hoverClass && this.element.removeClass(this.options.hoverClass)
        }
    }),
    e.ui.droppable
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.progressbar", {
        version: "1.12.1",
        options: {
            classes: {
                "ui-progressbar": "ui-corner-all",
                "ui-progressbar-value": "ui-corner-left",
                "ui-progressbar-complete": "ui-corner-right"
            },
            max: 100,
            value: 0,
            change: null,
            complete: null
        },
        min: 0,
        _create: function() {
            this.oldValue = this.options.value = this._constrainedValue(),
            this.element.attr({
                role: "progressbar",
                "aria-valuemin": this.min
            }),
            this._addClass("ui-progressbar", "ui-widget ui-widget-content"),
            this.valueDiv = e("<div>").appendTo(this.element),
            this._addClass(this.valueDiv, "ui-progressbar-value", "ui-widget-header"),
            this._refreshValue()
        },
        _destroy: function() {
            this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),
            this.valueDiv.remove()
        },
        value: function(e) {
            if (void 0 === e)
                return this.options.value;
            this.options.value = this._constrainedValue(e),
            this._refreshValue()
        },
        _constrainedValue: function(e) {
            return void 0 === e && (e = this.options.value),
            this.indeterminate = !1 === e,
            "number" != typeof e && (e = 0),
            !this.indeterminate && Math.min(this.options.max, Math.max(this.min, e))
        },
        _setOptions: function(e) {
            var t = e.value;
            delete e.value,
            this._super(e),
            this.options.value = this._constrainedValue(t),
            this._refreshValue()
        },
        _setOption: function(e, t) {
            "max" === e && (t = Math.max(this.min, t)),
            this._super(e, t)
        },
        _setOptionDisabled: function(e) {
            this._super(e),
            this.element.attr("aria-disabled", e),
            this._toggleClass(null, "ui-state-disabled", !!e)
        },
        _percentage: function() {
            return this.indeterminate ? 100 : 100 * (this.options.value - this.min) / (this.options.max - this.min)
        },
        _refreshValue: function() {
            var t = this.options.value
              , i = this._percentage();
            this.valueDiv.toggle(this.indeterminate || t > this.min).width(i.toFixed(0) + "%"),
            this._toggleClass(this.valueDiv, "ui-progressbar-complete", null, t === this.options.max)._toggleClass("ui-progressbar-indeterminate", null, this.indeterminate),
            this.indeterminate ? (this.element.removeAttr("aria-valuenow"),
            this.overlayDiv || (this.overlayDiv = e("<div>").appendTo(this.valueDiv),
            this._addClass(this.overlayDiv, "ui-progressbar-overlay"))) : (this.element.attr({
                "aria-valuemax": this.options.max,
                "aria-valuenow": t
            }),
            this.overlayDiv && (this.overlayDiv.remove(),
            this.overlayDiv = null)),
            this.oldValue !== t && (this.oldValue = t,
            this._trigger("change")),
            t === this.options.max && this._trigger("complete")
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./mouse", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.selectable", e.ui.mouse, {
        version: "1.12.1",
        options: {
            appendTo: "body",
            autoRefresh: !0,
            distance: 0,
            filter: "*",
            tolerance: "touch",
            selected: null,
            selecting: null,
            start: null,
            stop: null,
            unselected: null,
            unselecting: null
        },
        _create: function() {
            var t = this;
            this._addClass("ui-selectable"),
            this.dragged = !1,
            this.refresh = function() {
                t.elementPos = e(t.element[0]).offset(),
                t.selectees = e(t.options.filter, t.element[0]),
                t._addClass(t.selectees, "ui-selectee"),
                t.selectees.each((function() {
                    var i = e(this)
                      , n = i.offset()
                      , s = {
                        left: n.left - t.elementPos.left,
                        top: n.top - t.elementPos.top
                    };
                    e.data(this, "selectable-item", {
                        element: this,
                        $element: i,
                        left: s.left,
                        top: s.top,
                        right: s.left + i.outerWidth(),
                        bottom: s.top + i.outerHeight(),
                        startselected: !1,
                        selected: i.hasClass("ui-selected"),
                        selecting: i.hasClass("ui-selecting"),
                        unselecting: i.hasClass("ui-unselecting")
                    })
                }
                ))
            }
            ,
            this.refresh(),
            this._mouseInit(),
            this.helper = e("<div>"),
            this._addClass(this.helper, "ui-selectable-helper")
        },
        _destroy: function() {
            this.selectees.removeData("selectable-item"),
            this._mouseDestroy()
        },
        _mouseStart: function(t) {
            var i = this
              , n = this.options;
            this.opos = [t.pageX, t.pageY],
            this.elementPos = e(this.element[0]).offset(),
            this.options.disabled || (this.selectees = e(n.filter, this.element[0]),
            this._trigger("start", t),
            e(n.appendTo).append(this.helper),
            this.helper.css({
                left: t.pageX,
                top: t.pageY,
                width: 0,
                height: 0
            }),
            n.autoRefresh && this.refresh(),
            this.selectees.filter(".ui-selected").each((function() {
                var n = e.data(this, "selectable-item");
                n.startselected = !0,
                t.metaKey || t.ctrlKey || (i._removeClass(n.$element, "ui-selected"),
                n.selected = !1,
                i._addClass(n.$element, "ui-unselecting"),
                n.unselecting = !0,
                i._trigger("unselecting", t, {
                    unselecting: n.element
                }))
            }
            )),
            e(t.target).parents().addBack().each((function() {
                var n, s = e.data(this, "selectable-item");
                if (s)
                    return n = !t.metaKey && !t.ctrlKey || !s.$element.hasClass("ui-selected"),
                    i._removeClass(s.$element, n ? "ui-unselecting" : "ui-selected")._addClass(s.$element, n ? "ui-selecting" : "ui-unselecting"),
                    s.unselecting = !n,
                    s.selecting = n,
                    s.selected = n,
                    n ? i._trigger("selecting", t, {
                        selecting: s.element
                    }) : i._trigger("unselecting", t, {
                        unselecting: s.element
                    }),
                    !1
            }
            )))
        },
        _mouseDrag: function(t) {
            if (this.dragged = !0,
            !this.options.disabled) {
                var i, n = this, s = this.options, o = this.opos[0], a = this.opos[1], r = t.pageX, l = t.pageY;
                return o > r && (i = r,
                r = o,
                o = i),
                a > l && (i = l,
                l = a,
                a = i),
                this.helper.css({
                    left: o,
                    top: a,
                    width: r - o,
                    height: l - a
                }),
                this.selectees.each((function() {
                    var i = e.data(this, "selectable-item")
                      , u = !1
                      , d = {};
                    i && i.element !== n.element[0] && (d.left = i.left + n.elementPos.left,
                    d.right = i.right + n.elementPos.left,
                    d.top = i.top + n.elementPos.top,
                    d.bottom = i.bottom + n.elementPos.top,
                    "touch" === s.tolerance ? u = !(d.left > r || d.right < o || d.top > l || d.bottom < a) : "fit" === s.tolerance && (u = d.left > o && d.right < r && d.top > a && d.bottom < l),
                    u ? (i.selected && (n._removeClass(i.$element, "ui-selected"),
                    i.selected = !1),
                    i.unselecting && (n._removeClass(i.$element, "ui-unselecting"),
                    i.unselecting = !1),
                    i.selecting || (n._addClass(i.$element, "ui-selecting"),
                    i.selecting = !0,
                    n._trigger("selecting", t, {
                        selecting: i.element
                    }))) : (i.selecting && ((t.metaKey || t.ctrlKey) && i.startselected ? (n._removeClass(i.$element, "ui-selecting"),
                    i.selecting = !1,
                    n._addClass(i.$element, "ui-selected"),
                    i.selected = !0) : (n._removeClass(i.$element, "ui-selecting"),
                    i.selecting = !1,
                    i.startselected && (n._addClass(i.$element, "ui-unselecting"),
                    i.unselecting = !0),
                    n._trigger("unselecting", t, {
                        unselecting: i.element
                    }))),
                    i.selected && (t.metaKey || t.ctrlKey || i.startselected || (n._removeClass(i.$element, "ui-selected"),
                    i.selected = !1,
                    n._addClass(i.$element, "ui-unselecting"),
                    i.unselecting = !0,
                    n._trigger("unselecting", t, {
                        unselecting: i.element
                    })))))
                }
                )),
                !1
            }
        },
        _mouseStop: function(t) {
            var i = this;
            return this.dragged = !1,
            e(".ui-unselecting", this.element[0]).each((function() {
                var n = e.data(this, "selectable-item");
                i._removeClass(n.$element, "ui-unselecting"),
                n.unselecting = !1,
                n.startselected = !1,
                i._trigger("unselected", t, {
                    unselected: n.element
                })
            }
            )),
            e(".ui-selecting", this.element[0]).each((function() {
                var n = e.data(this, "selectable-item");
                i._removeClass(n.$element, "ui-selecting")._addClass(n.$element, "ui-selected"),
                n.selecting = !1,
                n.selected = !0,
                n.startselected = !0,
                i._trigger("selected", t, {
                    selected: n.element
                })
            }
            )),
            this._trigger("stop", t),
            this.helper.remove(),
            !1
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./menu", "../escape-selector", "../form-reset-mixin", "../keycode", "../labels", "../position", "../unique-id", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.selectmenu", [e.ui.formResetMixin, {
        version: "1.12.1",
        defaultElement: "<select>",
        options: {
            appendTo: null,
            classes: {
                "ui-selectmenu-button-open": "ui-corner-top",
                "ui-selectmenu-button-closed": "ui-corner-all"
            },
            disabled: null,
            icons: {
                button: "ui-icon-triangle-1-s"
            },
            position: {
                my: "left top",
                at: "left bottom",
                collision: "none"
            },
            width: !1,
            change: null,
            close: null,
            focus: null,
            open: null,
            select: null
        },
        _create: function() {
            var t = this.element.uniqueId().attr("id");
            this.ids = {
                element: t,
                button: t + "-button",
                menu: t + "-menu"
            },
            this._drawButton(),
            this._drawMenu(),
            this._bindFormResetHandler(),
            this._rendered = !1,
            this.menuItems = e()
        },
        _drawButton: function() {
            var t, i = this, n = this._parseOption(this.element.find("option:selected"), this.element[0].selectedIndex);
            this.labels = this.element.labels().attr("for", this.ids.button),
            this._on(this.labels, {
                click: function(e) {
                    this.button.focus(),
                    e.preventDefault()
                }
            }),
            this.element.hide(),
            this.button = e("<span>", {
                tabindex: this.options.disabled ? -1 : 0,
                id: this.ids.button,
                role: "combobox",
                "aria-expanded": "false",
                "aria-autocomplete": "list",
                "aria-owns": this.ids.menu,
                "aria-haspopup": "true",
                title: this.element.attr("title")
            }).insertAfter(this.element),
            this._addClass(this.button, "ui-selectmenu-button ui-selectmenu-button-closed", "ui-button ui-widget"),
            t = e("<span>").appendTo(this.button),
            this._addClass(t, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button),
            this.buttonItem = this._renderButtonItem(n).appendTo(this.button),
            !1 !== this.options.width && this._resizeButton(),
            this._on(this.button, this._buttonEvents),
            this.button.one("focusin", (function() {
                i._rendered || i._refreshMenu()
            }
            ))
        },
        _drawMenu: function() {
            var t = this;
            this.menu = e("<ul>", {
                "aria-hidden": "true",
                "aria-labelledby": this.ids.button,
                id: this.ids.menu
            }),
            this.menuWrap = e("<div>").append(this.menu),
            this._addClass(this.menuWrap, "ui-selectmenu-menu", "ui-front"),
            this.menuWrap.appendTo(this._appendTo()),
            this.menuInstance = this.menu.menu({
                classes: {
                    "ui-menu": "ui-corner-bottom"
                },
                role: "listbox",
                select: function(e, i) {
                    e.preventDefault(),
                    t._setSelection(),
                    t._select(i.item.data("ui-selectmenu-item"), e)
                },
                focus: function(e, i) {
                    var n = i.item.data("ui-selectmenu-item");
                    null != t.focusIndex && n.index !== t.focusIndex && (t._trigger("focus", e, {
                        item: n
                    }),
                    t.isOpen || t._select(n, e)),
                    t.focusIndex = n.index,
                    t.button.attr("aria-activedescendant", t.menuItems.eq(n.index).attr("id"))
                }
            }).menu("instance"),
            this.menuInstance._off(this.menu, "mouseleave"),
            this.menuInstance._closeOnDocumentClick = function() {
                return !1
            }
            ,
            this.menuInstance._isDivider = function() {
                return !1
            }
        },
        refresh: function() {
            this._refreshMenu(),
            this.buttonItem.replaceWith(this.buttonItem = this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item") || {})),
            null === this.options.width && this._resizeButton()
        },
        _refreshMenu: function() {
            var e, t = this.element.find("option");
            this.menu.empty(),
            this._parseOptions(t),
            this._renderMenu(this.menu, this.items),
            this.menuInstance.refresh(),
            this.menuItems = this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),
            this._rendered = !0,
            t.length && (e = this._getSelectedItem(),
            this.menuInstance.focus(null, e),
            this._setAria(e.data("ui-selectmenu-item")),
            this._setOption("disabled", this.element.prop("disabled")))
        },
        open: function(e) {
            this.options.disabled || (this._rendered ? (this._removeClass(this.menu.find(".ui-state-active"), null, "ui-state-active"),
            this.menuInstance.focus(null, this._getSelectedItem())) : this._refreshMenu(),
            this.menuItems.length && (this.isOpen = !0,
            this._toggleAttr(),
            this._resizeMenu(),
            this._position(),
            this._on(this.document, this._documentClick),
            this._trigger("open", e)))
        },
        _position: function() {
            this.menuWrap.position(e.extend({
                of: this.button
            }, this.options.position))
        },
        close: function(e) {
            this.isOpen && (this.isOpen = !1,
            this._toggleAttr(),
            this.range = null,
            this._off(this.document),
            this._trigger("close", e))
        },
        widget: function() {
            return this.button
        },
        menuWidget: function() {
            return this.menu
        },
        _renderButtonItem: function(t) {
            var i = e("<span>");
            return this._setText(i, t.label),
            this._addClass(i, "ui-selectmenu-text"),
            i
        },
        _renderMenu: function(t, i) {
            var n = this
              , s = "";
            e.each(i, (function(i, o) {
                var a;
                o.optgroup !== s && (a = e("<li>", {
                    text: o.optgroup
                }),
                n._addClass(a, "ui-selectmenu-optgroup", "ui-menu-divider" + (o.element.parent("optgroup").prop("disabled") ? " ui-state-disabled" : "")),
                a.appendTo(t),
                s = o.optgroup),
                n._renderItemData(t, o)
            }
            ))
        },
        _renderItemData: function(e, t) {
            return this._renderItem(e, t).data("ui-selectmenu-item", t)
        },
        _renderItem: function(t, i) {
            var n = e("<li>")
              , s = e("<div>", {
                title: i.element.attr("title")
            });
            return i.disabled && this._addClass(n, null, "ui-state-disabled"),
            this._setText(s, i.label),
            n.append(s).appendTo(t)
        },
        _setText: function(e, t) {
            t ? e.text(t) : e.php("&#160;")
        },
        _move: function(e, t) {
            var i, n, s = ".ui-menu-item";
            this.isOpen ? i = this.menuItems.eq(this.focusIndex).parent("li") : (i = this.menuItems.eq(this.element[0].selectedIndex).parent("li"),
            s += ":not(.ui-state-disabled)"),
            (n = "first" === e || "last" === e ? i["first" === e ? "prevAll" : "nextAll"](s).eq(-1) : i[e + "All"](s).eq(0)).length && this.menuInstance.focus(t, n)
        },
        _getSelectedItem: function() {
            return this.menuItems.eq(this.element[0].selectedIndex).parent("li")
        },
        _toggle: function(e) {
            this[this.isOpen ? "close" : "open"](e)
        },
        _setSelection: function() {
            var e;
            this.range && (window.getSelection ? ((e = window.getSelection()).removeAllRanges(),
            e.addRange(this.range)) : this.range.select(),
            this.button.focus())
        },
        _documentClick: {
            mousedown: function(t) {
                this.isOpen && (e(t.target).closest(".ui-selectmenu-menu, #" + e.ui.escapeSelector(this.ids.button)).length || this.close(t))
            }
        },
        _buttonEvents: {
            mousedown: function() {
                var e;
                window.getSelection ? (e = window.getSelection()).rangeCount && (this.range = e.getRangeAt(0)) : this.range = document.selection.createRange()
            },
            click: function(e) {
                this._setSelection(),
                this._toggle(e)
            },
            keydown: function(t) {
                var i = !0;
                switch (t.keyCode) {
                case e.ui.keyCode.TAB:
                case e.ui.keyCode.ESCAPE:
                    this.close(t),
                    i = !1;
                    break;
                case e.ui.keyCode.ENTER:
                    this.isOpen && this._selectFocusedItem(t);
                    break;
                case e.ui.keyCode.UP:
                    t.altKey ? this._toggle(t) : this._move("prev", t);
                    break;
                case e.ui.keyCode.DOWN:
                    t.altKey ? this._toggle(t) : this._move("next", t);
                    break;
                case e.ui.keyCode.SPACE:
                    this.isOpen ? this._selectFocusedItem(t) : this._toggle(t);
                    break;
                case e.ui.keyCode.LEFT:
                    this._move("prev", t);
                    break;
                case e.ui.keyCode.RIGHT:
                    this._move("next", t);
                    break;
                case e.ui.keyCode.HOME:
                case e.ui.keyCode.PAGE_UP:
                    this._move("first", t);
                    break;
                case e.ui.keyCode.END:
                case e.ui.keyCode.PAGE_DOWN:
                    this._move("last", t);
                    break;
                default:
                    this.menu.trigger(t),
                    i = !1
                }
                i && t.preventDefault()
            }
        },
        _selectFocusedItem: function(e) {
            var t = this.menuItems.eq(this.focusIndex).parent("li");
            t.hasClass("ui-state-disabled") || this._select(t.data("ui-selectmenu-item"), e)
        },
        _select: function(e, t) {
            var i = this.element[0].selectedIndex;
            this.element[0].selectedIndex = e.index,
            this.buttonItem.replaceWith(this.buttonItem = this._renderButtonItem(e)),
            this._setAria(e),
            this._trigger("select", t, {
                item: e
            }),
            e.index !== i && this._trigger("change", t, {
                item: e
            }),
            this.close(t)
        },
        _setAria: function(e) {
            var t = this.menuItems.eq(e.index).attr("id");
            this.button.attr({
                "aria-labelledby": t,
                "aria-activedescendant": t
            }),
            this.menu.attr("aria-activedescendant", t)
        },
        _setOption: function(e, t) {
            if ("icons" === e) {
                var i = this.button.find("span.ui-icon");
                this._removeClass(i, null, this.options.icons.button)._addClass(i, null, t.button)
            }
            this._super(e, t),
            "appendTo" === e && this.menuWrap.appendTo(this._appendTo()),
            "width" === e && this._resizeButton()
        },
        _setOptionDisabled: function(e) {
            this._super(e),
            this.menuInstance.option("disabled", e),
            this.button.attr("aria-disabled", e),
            this._toggleClass(this.button, null, "ui-state-disabled", e),
            this.element.prop("disabled", e),
            e ? (this.button.attr("tabindex", -1),
            this.close()) : this.button.attr("tabindex", 0)
        },
        _appendTo: function() {
            var t = this.options.appendTo;
            return t && (t = t.jquery || t.nodeType ? e(t) : this.document.find(t).eq(0)),
            t && t[0] || (t = this.element.closest(".ui-front, dialog")),
            t.length || (t = this.document[0].body),
            t
        },
        _toggleAttr: function() {
            this.button.attr("aria-expanded", this.isOpen),
            this._removeClass(this.button, "ui-selectmenu-button-" + (this.isOpen ? "closed" : "open"))._addClass(this.button, "ui-selectmenu-button-" + (this.isOpen ? "open" : "closed"))._toggleClass(this.menuWrap, "ui-selectmenu-open", null, this.isOpen),
            this.menu.attr("aria-hidden", !this.isOpen)
        },
        _resizeButton: function() {
            var e = this.options.width;
            !1 !== e ? (null === e && (e = this.element.show().outerWidth(),
            this.element.hide()),
            this.button.outerWidth(e)) : this.button.css("width", "")
        },
        _resizeMenu: function() {
            this.menu.outerWidth(Math.max(this.button.outerWidth(), this.menu.width("").outerWidth() + 1))
        },
        _getCreateOptions: function() {
            var e = this._super();
            return e.disabled = this.element.prop("disabled"),
            e
        },
        _parseOptions: function(t) {
            var i = this
              , n = [];
            t.each((function(t, s) {
                n.push(i._parseOption(e(s), t))
            }
            )),
            this.items = n
        },
        _parseOption: function(e, t) {
            var i = e.parent("optgroup");
            return {
                element: e,
                index: t,
                value: e.val(),
                label: e.text(),
                optgroup: i.attr("label") || "",
                disabled: i.prop("disabled") || e.prop("disabled")
            }
        },
        _destroy: function() {
            this._unbindFormResetHandler(),
            this.menuWrap.remove(),
            this.button.remove(),
            this.element.show(),
            this.element.removeUniqueId(),
            this.labels.attr("for", this.ids.element)
        }
    }])
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./mouse", "../keycode", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.slider", e.ui.mouse, {
        version: "1.12.1",
        widgetEventPrefix: "slide",
        options: {
            animate: !1,
            classes: {
                "ui-slider": "ui-corner-all",
                "ui-slider-handle": "ui-corner-all",
                "ui-slider-range": "ui-corner-all ui-widget-header"
            },
            distance: 0,
            max: 100,
            min: 0,
            orientation: "horizontal",
            range: !1,
            step: 1,
            value: 0,
            values: null,
            change: null,
            slide: null,
            start: null,
            stop: null
        },
        numPages: 5,
        _create: function() {
            this._keySliding = !1,
            this._mouseSliding = !1,
            this._animateOff = !0,
            this._handleIndex = null,
            this._detectOrientation(),
            this._mouseInit(),
            this._calculateNewMax(),
            this._addClass("ui-slider ui-slider-" + this.orientation, "ui-widget ui-widget-content"),
            this._refresh(),
            this._animateOff = !1
        },
        _refresh: function() {
            this._createRange(),
            this._createHandles(),
            this._setupEvents(),
            this._refreshValue()
        },
        _createHandles: function() {
            var t, i, n = this.options, s = this.element.find(".ui-slider-handle"), o = "<span tabindex='0'></span>", a = [];
            for (i = n.values && n.values.length || 1,
            s.length > i && (s.slice(i).remove(),
            s = s.slice(0, i)),
            t = s.length; t < i; t++)
                a.push(o);
            this.handles = s.add(e(a.join("")).appendTo(this.element)),
            this._addClass(this.handles, "ui-slider-handle", "ui-state-default"),
            this.handle = this.handles.eq(0),
            this.handles.each((function(t) {
                e(this).data("ui-slider-handle-index", t).attr("tabIndex", 0)
            }
            ))
        },
        _createRange: function() {
            var t = this.options;
            t.range ? (!0 === t.range && (t.values ? t.values.length && 2 !== t.values.length ? t.values = [t.values[0], t.values[0]] : e.isArray(t.values) && (t.values = t.values.slice(0)) : t.values = [this._valueMin(), this._valueMin()]),
            this.range && this.range.length ? (this._removeClass(this.range, "ui-slider-range-min ui-slider-range-max"),
            this.range.css({
                left: "",
                bottom: ""
            })) : (this.range = e("<div>").appendTo(this.element),
            this._addClass(this.range, "ui-slider-range")),
            "min" !== t.range && "max" !== t.range || this._addClass(this.range, "ui-slider-range-" + t.range)) : (this.range && this.range.remove(),
            this.range = null)
        },
        _setupEvents: function() {
            this._off(this.handles),
            this._on(this.handles, this._handleEvents),
            this._hoverable(this.handles),
            this._focusable(this.handles)
        },
        _destroy: function() {
            this.handles.remove(),
            this.range && this.range.remove(),
            this._mouseDestroy()
        },
        _mouseCapture: function(t) {
            var i, n, s, o, a, r, l, u = this, d = this.options;
            return !d.disabled && (this.elementSize = {
                width: this.element.outerWidth(),
                height: this.element.outerHeight()
            },
            this.elementOffset = this.element.offset(),
            i = {
                x: t.pageX,
                y: t.pageY
            },
            n = this._normValueFromMouse(i),
            s = this._valueMax() - this._valueMin() + 1,
            this.handles.each((function(t) {
                var i = Math.abs(n - u.values(t));
                (s > i || s === i && (t === u._lastChangedValue || u.values(t) === d.min)) && (s = i,
                o = e(this),
                a = t)
            }
            )),
            !1 !== this._start(t, a) && (this._mouseSliding = !0,
            this._handleIndex = a,
            this._addClass(o, null, "ui-state-active"),
            o.trigger("focus"),
            r = o.offset(),
            l = !e(t.target).parents().addBack().is(".ui-slider-handle"),
            this._clickOffset = l ? {
                left: 0,
                top: 0
            } : {
                left: t.pageX - r.left - o.width() / 2,
                top: t.pageY - r.top - o.height() / 2 - (parseInt(o.css("borderTopWidth"), 10) || 0) - (parseInt(o.css("borderBottomWidth"), 10) || 0) + (parseInt(o.css("marginTop"), 10) || 0)
            },
            this.handles.hasClass("ui-state-hover") || this._slide(t, a, n),
            this._animateOff = !0,
            !0))
        },
        _mouseStart: function() {
            return !0
        },
        _mouseDrag: function(e) {
            var t = {
                x: e.pageX,
                y: e.pageY
            }
              , i = this._normValueFromMouse(t);
            return this._slide(e, this._handleIndex, i),
            !1
        },
        _mouseStop: function(e) {
            return this._removeClass(this.handles, null, "ui-state-active"),
            this._mouseSliding = !1,
            this._stop(e, this._handleIndex),
            this._change(e, this._handleIndex),
            this._handleIndex = null,
            this._clickOffset = null,
            this._animateOff = !1,
            !1
        },
        _detectOrientation: function() {
            this.orientation = "vertical" === this.options.orientation ? "vertical" : "horizontal"
        },
        _normValueFromMouse: function(e) {
            var t, i, n, s, o;
            return "horizontal" === this.orientation ? (t = this.elementSize.width,
            i = e.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0)) : (t = this.elementSize.height,
            i = e.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0)),
            (n = i / t) > 1 && (n = 1),
            n < 0 && (n = 0),
            "vertical" === this.orientation && (n = 1 - n),
            s = this._valueMax() - this._valueMin(),
            o = this._valueMin() + n * s,
            this._trimAlignValue(o)
        },
        _uiHash: function(e, t, i) {
            var n = {
                handle: this.handles[e],
                handleIndex: e,
                value: void 0 !== t ? t : this.value()
            };
            return this._hasMultipleValues() && (n.value = void 0 !== t ? t : this.values(e),
            n.values = i || this.values()),
            n
        },
        _hasMultipleValues: function() {
            return this.options.values && this.options.values.length
        },
        _start: function(e, t) {
            return this._trigger("start", e, this._uiHash(t))
        },
        _slide: function(e, t, i) {
            var n, s = this.value(), o = this.values();
            this._hasMultipleValues() && (n = this.values(t ? 0 : 1),
            s = this.values(t),
            2 === this.options.values.length && !0 === this.options.range && (i = 0 === t ? Math.min(n, i) : Math.max(n, i)),
            o[t] = i),
            i !== s && !1 !== this._trigger("slide", e, this._uiHash(t, i, o)) && (this._hasMultipleValues() ? this.values(t, i) : this.value(i))
        },
        _stop: function(e, t) {
            this._trigger("stop", e, this._uiHash(t))
        },
        _change: function(e, t) {
            this._keySliding || this._mouseSliding || (this._lastChangedValue = t,
            this._trigger("change", e, this._uiHash(t)))
        },
        value: function(e) {
            return arguments.length ? (this.options.value = this._trimAlignValue(e),
            this._refreshValue(),
            void this._change(null, 0)) : this._value()
        },
        values: function(t, i) {
            var n, s, o;
            if (arguments.length > 1)
                return this.options.values[t] = this._trimAlignValue(i),
                this._refreshValue(),
                void this._change(null, t);
            if (!arguments.length)
                return this._values();
            if (!e.isArray(arguments[0]))
                return this._hasMultipleValues() ? this._values(t) : this.value();
            for (n = this.options.values,
            s = arguments[0],
            o = 0; o < n.length; o += 1)
                n[o] = this._trimAlignValue(s[o]),
                this._change(null, o);
            this._refreshValue()
        },
        _setOption: function(t, i) {
            var n, s = 0;
            switch ("range" === t && !0 === this.options.range && ("min" === i ? (this.options.value = this._values(0),
            this.options.values = null) : "max" === i && (this.options.value = this._values(this.options.values.length - 1),
            this.options.values = null)),
            e.isArray(this.options.values) && (s = this.options.values.length),
            this._super(t, i),
            t) {
            case "orientation":
                this._detectOrientation(),
                this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-" + this.orientation),
                this._refreshValue(),
                this.options.range && this._refreshRange(i),
                this.handles.css("horizontal" === i ? "bottom" : "left", "");
                break;
            case "value":
                this._animateOff = !0,
                this._refreshValue(),
                this._change(null, 0),
                this._animateOff = !1;
                break;
            case "values":
                for (this._animateOff = !0,
                this._refreshValue(),
                n = s - 1; n >= 0; n--)
                    this._change(null, n);
                this._animateOff = !1;
                break;
            case "step":
            case "min":
            case "max":
                this._animateOff = !0,
                this._calculateNewMax(),
                this._refreshValue(),
                this._animateOff = !1;
                break;
            case "range":
                this._animateOff = !0,
                this._refresh(),
                this._animateOff = !1
            }
        },
        _setOptionDisabled: function(e) {
            this._super(e),
            this._toggleClass(null, "ui-state-disabled", !!e)
        },
        _value: function() {
            var e = this.options.value;
            return e = this._trimAlignValue(e)
        },
        _values: function(e) {
            var t, i, n;
            if (arguments.length)
                return t = this.options.values[e],
                t = this._trimAlignValue(t);
            if (this._hasMultipleValues()) {
                for (i = this.options.values.slice(),
                n = 0; n < i.length; n += 1)
                    i[n] = this._trimAlignValue(i[n]);
                return i
            }
            return []
        },
        _trimAlignValue: function(e) {
            if (e <= this._valueMin())
                return this._valueMin();
            if (e >= this._valueMax())
                return this._valueMax();
            var t = this.options.step > 0 ? this.options.step : 1
              , i = (e - this._valueMin()) % t
              , n = e - i;
            return 2 * Math.abs(i) >= t && (n += i > 0 ? t : -t),
            parseFloat(n.toFixed(5))
        },
        _calculateNewMax: function() {
            var e = this.options.max
              , t = this._valueMin()
              , i = this.options.step;
            (e = Math.round((e - t) / i) * i + t) > this.options.max && (e -= i),
            this.max = parseFloat(e.toFixed(this._precision()))
        },
        _precision: function() {
            var e = this._precisionOf(this.options.step);
            return null !== this.options.min && (e = Math.max(e, this._precisionOf(this.options.min))),
            e
        },
        _precisionOf: function(e) {
            var t = e.toString()
              , i = t.indexOf(".");
            return -1 === i ? 0 : t.length - i - 1
        },
        _valueMin: function() {
            return this.options.min
        },
        _valueMax: function() {
            return this.max
        },
        _refreshRange: function(e) {
            "vertical" === e && this.range.css({
                width: "",
                left: ""
            }),
            "horizontal" === e && this.range.css({
                height: "",
                bottom: ""
            })
        },
        _refreshValue: function() {
            var t, i, n, s, o, a = this.options.range, r = this.options, l = this, u = !this._animateOff && r.animate, d = {};
            this._hasMultipleValues() ? this.handles.each((function(n) {
                i = (l.values(n) - l._valueMin()) / (l._valueMax() - l._valueMin()) * 100,
                d["horizontal" === l.orientation ? "left" : "bottom"] = i + "%",
                e(this).stop(1, 1)[u ? "animate" : "css"](d, r.animate),
                !0 === l.options.range && ("horizontal" === l.orientation ? (0 === n && l.range.stop(1, 1)[u ? "animate" : "css"]({
                    left: i + "%"
                }, r.animate),
                1 === n && l.range[u ? "animate" : "css"]({
                    width: i - t + "%"
                }, {
                    queue: !1,
                    duration: r.animate
                })) : (0 === n && l.range.stop(1, 1)[u ? "animate" : "css"]({
                    bottom: i + "%"
                }, r.animate),
                1 === n && l.range[u ? "animate" : "css"]({
                    height: i - t + "%"
                }, {
                    queue: !1,
                    duration: r.animate
                }))),
                t = i
            }
            )) : (n = this.value(),
            s = this._valueMin(),
            o = this._valueMax(),
            i = o !== s ? (n - s) / (o - s) * 100 : 0,
            d["horizontal" === this.orientation ? "left" : "bottom"] = i + "%",
            this.handle.stop(1, 1)[u ? "animate" : "css"](d, r.animate),
            "min" === a && "horizontal" === this.orientation && this.range.stop(1, 1)[u ? "animate" : "css"]({
                width: i + "%"
            }, r.animate),
            "max" === a && "horizontal" === this.orientation && this.range.stop(1, 1)[u ? "animate" : "css"]({
                width: 100 - i + "%"
            }, r.animate),
            "min" === a && "vertical" === this.orientation && this.range.stop(1, 1)[u ? "animate" : "css"]({
                height: i + "%"
            }, r.animate),
            "max" === a && "vertical" === this.orientation && this.range.stop(1, 1)[u ? "animate" : "css"]({
                height: 100 - i + "%"
            }, r.animate))
        },
        _handleEvents: {
            keydown: function(t) {
                var i, n, s, o = e(t.target).data("ui-slider-handle-index");
                switch (t.keyCode) {
                case e.ui.keyCode.HOME:
                case e.ui.keyCode.END:
                case e.ui.keyCode.PAGE_UP:
                case e.ui.keyCode.PAGE_DOWN:
                case e.ui.keyCode.UP:
                case e.ui.keyCode.RIGHT:
                case e.ui.keyCode.DOWN:
                case e.ui.keyCode.LEFT:
                    if (t.preventDefault(),
                    !this._keySliding && (this._keySliding = !0,
                    this._addClass(e(t.target), null, "ui-state-active"),
                    !1 === this._start(t, o)))
                        return
                }
                switch (s = this.options.step,
                i = n = this._hasMultipleValues() ? this.values(o) : this.value(),
                t.keyCode) {
                case e.ui.keyCode.HOME:
                    n = this._valueMin();
                    break;
                case e.ui.keyCode.END:
                    n = this._valueMax();
                    break;
                case e.ui.keyCode.PAGE_UP:
                    n = this._trimAlignValue(i + (this._valueMax() - this._valueMin()) / this.numPages);
                    break;
                case e.ui.keyCode.PAGE_DOWN:
                    n = this._trimAlignValue(i - (this._valueMax() - this._valueMin()) / this.numPages);
                    break;
                case e.ui.keyCode.UP:
                case e.ui.keyCode.RIGHT:
                    if (i === this._valueMax())
                        return;
                    n = this._trimAlignValue(i + s);
                    break;
                case e.ui.keyCode.DOWN:
                case e.ui.keyCode.LEFT:
                    if (i === this._valueMin())
                        return;
                    n = this._trimAlignValue(i - s)
                }
                this._slide(t, o, n)
            },
            keyup: function(t) {
                var i = e(t.target).data("ui-slider-handle-index");
                this._keySliding && (this._keySliding = !1,
                this._stop(t, i),
                this._change(t, i),
                this._removeClass(e(t.target), null, "ui-state-active"))
            }
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./mouse", "../data", "../ie", "../scroll-parent", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.sortable", e.ui.mouse, {
        version: "1.12.1",
        widgetEventPrefix: "sort",
        ready: !1,
        options: {
            appendTo: "parent",
            axis: !1,
            connectWith: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            dropOnEmpty: !0,
            forcePlaceholderSize: !1,
            forceHelperSize: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            items: "> *",
            opacity: !1,
            placeholder: !1,
            revert: !1,
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            scope: "default",
            tolerance: "intersect",
            zIndex: 1e3,
            activate: null,
            beforeStop: null,
            change: null,
            deactivate: null,
            out: null,
            over: null,
            receive: null,
            remove: null,
            sort: null,
            start: null,
            stop: null,
            update: null
        },
        _isOverAxis: function(e, t, i) {
            return e >= t && e < t + i
        },
        _isFloating: function(e) {
            return /left|right/.test(e.css("float")) || /inline|table-cell/.test(e.css("display"))
        },
        _create: function() {
            this.containerCache = {},
            this._addClass("ui-sortable"),
            this.refresh(),
            this.offset = this.element.offset(),
            this._mouseInit(),
            this._setHandleClassName(),
            this.ready = !0
        },
        _setOption: function(e, t) {
            this._super(e, t),
            "handle" === e && this._setHandleClassName()
        },
        _setHandleClassName: function() {
            var t = this;
            this._removeClass(this.element.find(".ui-sortable-handle"), "ui-sortable-handle"),
            e.each(this.items, (function() {
                t._addClass(this.instance.options.handle ? this.item.find(this.instance.options.handle) : this.item, "ui-sortable-handle")
            }
            ))
        },
        _destroy: function() {
            this._mouseDestroy();
            for (var e = this.items.length - 1; e >= 0; e--)
                this.items[e].item.removeData(this.widgetName + "-item");
            return this
        },
        _mouseCapture: function(t, i) {
            var n = null
              , s = !1
              , o = this;
            return !this.reverting && (!this.options.disabled && "static" !== this.options.type && (this._refreshItems(t),
            e(t.target).parents().each((function() {
                if (e.data(this, o.widgetName + "-item") === o)
                    return n = e(this),
                    !1
            }
            )),
            e.data(t.target, o.widgetName + "-item") === o && (n = e(t.target)),
            !!n && (!(this.options.handle && !i && (e(this.options.handle, n).find("*").addBack().each((function() {
                this === t.target && (s = !0)
            }
            )),
            !s)) && (this.currentItem = n,
            this._removeCurrentsFromItems(),
            !0))))
        },
        _mouseStart: function(t, i, n) {
            var s, o, a = this.options;
            if (this.currentContainer = this,
            this.refreshPositions(),
            this.helper = this._createHelper(t),
            this._cacheHelperProportions(),
            this._cacheMargins(),
            this.scrollParent = this.helper.scrollParent(),
            this.offset = this.currentItem.offset(),
            this.offset = {
                top: this.offset.top - this.margins.top,
                left: this.offset.left - this.margins.left
            },
            e.extend(this.offset, {
                click: {
                    left: t.pageX - this.offset.left,
                    top: t.pageY - this.offset.top
                },
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }),
            this.helper.css("position", "absolute"),
            this.cssPosition = this.helper.css("position"),
            this.originalPosition = this._generatePosition(t),
            this.originalPageX = t.pageX,
            this.originalPageY = t.pageY,
            a.cursorAt && this._adjustOffsetFromHelper(a.cursorAt),
            this.domPosition = {
                prev: this.currentItem.prev()[0],
                parent: this.currentItem.parent()[0]
            },
            this.helper[0] !== this.currentItem[0] && this.currentItem.hide(),
            this._createPlaceholder(),
            a.containment && this._setContainment(),
            a.cursor && "auto" !== a.cursor && (o = this.document.find("body"),
            this.storedCursor = o.css("cursor"),
            o.css("cursor", a.cursor),
            this.storedStylesheet = e("<style>*{ cursor: " + a.cursor + " !important; }</style>").appendTo(o)),
            a.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")),
            this.helper.css("opacity", a.opacity)),
            a.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")),
            this.helper.css("zIndex", a.zIndex)),
            this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()),
            this._trigger("start", t, this._uiHash()),
            this._preserveHelperProportions || this._cacheHelperProportions(),
            !n)
                for (s = this.containers.length - 1; s >= 0; s--)
                    this.containers[s]._trigger("activate", t, this._uiHash(this));
            return e.ui.ddmanager && (e.ui.ddmanager.current = this),
            e.ui.ddmanager && !a.dropBehaviour && e.ui.ddmanager.prepareOffsets(this, t),
            this.dragging = !0,
            this._addClass(this.helper, "ui-sortable-helper"),
            this._mouseDrag(t),
            !0
        },
        _mouseDrag: function(t) {
            var i, n, s, o, a = this.options, r = !1;
            for (this.position = this._generatePosition(t),
            this.positionAbs = this._convertPositionTo("absolute"),
            this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs),
            this.options.scroll && (this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - t.pageY < a.scrollSensitivity ? this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop + a.scrollSpeed : t.pageY - this.overflowOffset.top < a.scrollSensitivity && (this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop - a.scrollSpeed),
            this.overflowOffset.left + this.scrollParent[0].offsetWidth - t.pageX < a.scrollSensitivity ? this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft + a.scrollSpeed : t.pageX - this.overflowOffset.left < a.scrollSensitivity && (this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft - a.scrollSpeed)) : (t.pageY - this.document.scrollTop() < a.scrollSensitivity ? r = this.document.scrollTop(this.document.scrollTop() - a.scrollSpeed) : this.window.height() - (t.pageY - this.document.scrollTop()) < a.scrollSensitivity && (r = this.document.scrollTop(this.document.scrollTop() + a.scrollSpeed)),
            t.pageX - this.document.scrollLeft() < a.scrollSensitivity ? r = this.document.scrollLeft(this.document.scrollLeft() - a.scrollSpeed) : this.window.width() - (t.pageX - this.document.scrollLeft()) < a.scrollSensitivity && (r = this.document.scrollLeft(this.document.scrollLeft() + a.scrollSpeed))),
            !1 !== r && e.ui.ddmanager && !a.dropBehaviour && e.ui.ddmanager.prepareOffsets(this, t)),
            this.positionAbs = this._convertPositionTo("absolute"),
            this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"),
            this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"),
            i = this.items.length - 1; i >= 0; i--)
                if (s = (n = this.items[i]).item[0],
                (o = this._intersectsWithPointer(n)) && n.instance === this.currentContainer && !(s === this.currentItem[0] || this.placeholder[1 === o ? "next" : "prev"]()[0] === s || e.contains(this.placeholder[0], s) || "semi-dynamic" === this.options.type && e.contains(this.element[0], s))) {
                    if (this.direction = 1 === o ? "down" : "up",
                    "pointer" !== this.options.tolerance && !this._intersectsWithSides(n))
                        break;
                    this._rearrange(t, n),
                    this._trigger("change", t, this._uiHash());
                    break
                }
            return this._contactContainers(t),
            e.ui.ddmanager && e.ui.ddmanager.drag(this, t),
            this._trigger("sort", t, this._uiHash()),
            this.lastPositionAbs = this.positionAbs,
            !1
        },
        _mouseStop: function(t, i) {
            if (t) {
                if (e.ui.ddmanager && !this.options.dropBehaviour && e.ui.ddmanager.drop(this, t),
                this.options.revert) {
                    var n = this
                      , s = this.placeholder.offset()
                      , o = this.options.axis
                      , a = {};
                    o && "x" !== o || (a.left = s.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft)),
                    o && "y" !== o || (a.top = s.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop)),
                    this.reverting = !0,
                    e(this.helper).animate(a, parseInt(this.options.revert, 10) || 500, (function() {
                        n._clear(t)
                    }
                    ))
                } else
                    this._clear(t, i);
                return !1
            }
        },
        cancel: function() {
            if (this.dragging) {
                this._mouseUp(new e.Event("mouseup",{
                    target: null
                })),
                "original" === this.options.helper ? (this.currentItem.css(this._storedCSS),
                this._removeClass(this.currentItem, "ui-sortable-helper")) : this.currentItem.show();
                for (var t = this.containers.length - 1; t >= 0; t--)
                    this.containers[t]._trigger("deactivate", null, this._uiHash(this)),
                    this.containers[t].containerCache.over && (this.containers[t]._trigger("out", null, this._uiHash(this)),
                    this.containers[t].containerCache.over = 0)
            }
            return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]),
            "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(),
            e.extend(this, {
                helper: null,
                dragging: !1,
                reverting: !1,
                _noFinalSort: null
            }),
            this.domPosition.prev ? e(this.domPosition.prev).after(this.currentItem) : e(this.domPosition.parent).prepend(this.currentItem)),
            this
        },
        serialize: function(t) {
            var i = this._getItemsAsjQuery(t && t.connected)
              , n = [];
            return t = t || {},
            e(i).each((function() {
                var i = (e(t.item || this).attr(t.attribute || "id") || "").match(t.expression || /(.+)[\-=_](.+)/);
                i && n.push((t.key || i[1] + "[]") + "=" + (t.key && t.expression ? i[1] : i[2]))
            }
            )),
            !n.length && t.key && n.push(t.key + "="),
            n.join("&")
        },
        toArray: function(t) {
            var i = this._getItemsAsjQuery(t && t.connected)
              , n = [];
            return t = t || {},
            i.each((function() {
                n.push(e(t.item || this).attr(t.attribute || "id") || "")
            }
            )),
            n
        },
        _intersectsWith: function(e) {
            var t = this.positionAbs.left
              , i = t + this.helperProportions.width
              , n = this.positionAbs.top
              , s = n + this.helperProportions.height
              , o = e.left
              , a = o + e.width
              , r = e.top
              , l = r + e.height
              , u = this.offset.click.top
              , d = this.offset.click.left
              , c = "x" === this.options.axis || n + u > r && n + u < l
              , h = "y" === this.options.axis || t + d > o && t + d < a
              , f = c && h;
            return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > e[this.floating ? "width" : "height"] ? f : o < t + this.helperProportions.width / 2 && i - this.helperProportions.width / 2 < a && r < n + this.helperProportions.height / 2 && s - this.helperProportions.height / 2 < l
        },
        _intersectsWithPointer: function(e) {
            var t, i, n = "x" === this.options.axis || this._isOverAxis(this.positionAbs.top + this.offset.click.top, e.top, e.height), s = "y" === this.options.axis || this._isOverAxis(this.positionAbs.left + this.offset.click.left, e.left, e.width);
            return !(!n || !s) && (t = this._getDragVerticalDirection(),
            i = this._getDragHorizontalDirection(),
            this.floating ? "right" === i || "down" === t ? 2 : 1 : t && ("down" === t ? 2 : 1))
        },
        _intersectsWithSides: function(e) {
            var t = this._isOverAxis(this.positionAbs.top + this.offset.click.top, e.top + e.height / 2, e.height)
              , i = this._isOverAxis(this.positionAbs.left + this.offset.click.left, e.left + e.width / 2, e.width)
              , n = this._getDragVerticalDirection()
              , s = this._getDragHorizontalDirection();
            return this.floating && s ? "right" === s && i || "left" === s && !i : n && ("down" === n && t || "up" === n && !t)
        },
        _getDragVerticalDirection: function() {
            var e = this.positionAbs.top - this.lastPositionAbs.top;
            return 0 !== e && (e > 0 ? "down" : "up")
        },
        _getDragHorizontalDirection: function() {
            var e = this.positionAbs.left - this.lastPositionAbs.left;
            return 0 !== e && (e > 0 ? "right" : "left")
        },
        refresh: function(e) {
            return this._refreshItems(e),
            this._setHandleClassName(),
            this.refreshPositions(),
            this
        },
        _connectWith: function() {
            var e = this.options;
            return e.connectWith.constructor === String ? [e.connectWith] : e.connectWith
        },
        _getItemsAsjQuery: function(t) {
            function i() {
                r.push(this)
            }
            var n, s, o, a, r = [], l = [], u = this._connectWith();
            if (u && t)
                for (n = u.length - 1; n >= 0; n--)
                    for (s = (o = e(u[n], this.document[0])).length - 1; s >= 0; s--)
                        (a = e.data(o[s], this.widgetFullName)) && a !== this && !a.options.disabled && l.push([e.isFunction(a.options.items) ? a.options.items.call(a.element) : e(a.options.items, a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), a]);
            for (l.push([e.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
                options: this.options,
                item: this.currentItem
            }) : e(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]),
            n = l.length - 1; n >= 0; n--)
                l[n][0].each(i);
            return e(r)
        },
        _removeCurrentsFromItems: function() {
            var t = this.currentItem.find(":data(" + this.widgetName + "-item)");
            this.items = e.grep(this.items, (function(e) {
                for (var i = 0; i < t.length; i++)
                    if (t[i] === e.item[0])
                        return !1;
                return !0
            }
            ))
        },
        _refreshItems: function(t) {
            this.items = [],
            this.containers = [this];
            var i, n, s, o, a, r, l, u, d = this.items, c = [[e.isFunction(this.options.items) ? this.options.items.call(this.element[0], t, {
                item: this.currentItem
            }) : e(this.options.items, this.element), this]], h = this._connectWith();
            if (h && this.ready)
                for (i = h.length - 1; i >= 0; i--)
                    for (n = (s = e(h[i], this.document[0])).length - 1; n >= 0; n--)
                        (o = e.data(s[n], this.widgetFullName)) && o !== this && !o.options.disabled && (c.push([e.isFunction(o.options.items) ? o.options.items.call(o.element[0], t, {
                            item: this.currentItem
                        }) : e(o.options.items, o.element), o]),
                        this.containers.push(o));
            for (i = c.length - 1; i >= 0; i--)
                for (a = c[i][1],
                n = 0,
                u = (r = c[i][0]).length; n < u; n++)
                    (l = e(r[n])).data(this.widgetName + "-item", a),
                    d.push({
                        item: l,
                        instance: a,
                        width: 0,
                        height: 0,
                        left: 0,
                        top: 0
                    })
        },
        refreshPositions: function(t) {
            var i, n, s, o;
            for (this.floating = !!this.items.length && ("x" === this.options.axis || this._isFloating(this.items[0].item)),
            this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset()),
            i = this.items.length - 1; i >= 0; i--)
                (n = this.items[i]).instance !== this.currentContainer && this.currentContainer && n.item[0] !== this.currentItem[0] || (s = this.options.toleranceElement ? e(this.options.toleranceElement, n.item) : n.item,
                t || (n.width = s.outerWidth(),
                n.height = s.outerHeight()),
                o = s.offset(),
                n.left = o.left,
                n.top = o.top);
            if (this.options.custom && this.options.custom.refreshContainers)
                this.options.custom.refreshContainers.call(this);
            else
                for (i = this.containers.length - 1; i >= 0; i--)
                    o = this.containers[i].element.offset(),
                    this.containers[i].containerCache.left = o.left,
                    this.containers[i].containerCache.top = o.top,
                    this.containers[i].containerCache.width = this.containers[i].element.outerWidth(),
                    this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
            return this
        },
        _createPlaceholder: function(t) {
            var i, n = (t = t || this).options;
            n.placeholder && n.placeholder.constructor !== String || (i = n.placeholder,
            n.placeholder = {
                element: function() {
                    var n = t.currentItem[0].nodeName.toLowerCase()
                      , s = e("<" + n + ">", t.document[0]);
                    return t._addClass(s, "ui-sortable-placeholder", i || t.currentItem[0].className)._removeClass(s, "ui-sortable-helper"),
                    "tbody" === n ? t._createTrPlaceholder(t.currentItem.find("tr").eq(0), e("<tr>", t.document[0]).appendTo(s)) : "tr" === n ? t._createTrPlaceholder(t.currentItem, s) : "img" === n && s.attr("src", t.currentItem.attr("src")),
                    i || s.css("visibility", "hidden"),
                    s
                },
                update: function(e, s) {
                    i && !n.forcePlaceholderSize || (s.height() || s.height(t.currentItem.innerHeight() - parseInt(t.currentItem.css("paddingTop") || 0, 10) - parseInt(t.currentItem.css("paddingBottom") || 0, 10)),
                    s.width() || s.width(t.currentItem.innerWidth() - parseInt(t.currentItem.css("paddingLeft") || 0, 10) - parseInt(t.currentItem.css("paddingRight") || 0, 10)))
                }
            }),
            t.placeholder = e(n.placeholder.element.call(t.element, t.currentItem)),
            t.currentItem.after(t.placeholder),
            n.placeholder.update(t, t.placeholder)
        },
        _createTrPlaceholder: function(t, i) {
            var n = this;
            t.children().each((function() {
                e("<td>&#160;</td>", n.document[0]).attr("colspan", e(this).attr("colspan") || 1).appendTo(i)
            }
            ))
        },
        _contactContainers: function(t) {
            var i, n, s, o, a, r, l, u, d, c, h = null, f = null;
            for (i = this.containers.length - 1; i >= 0; i--)
                if (!e.contains(this.currentItem[0], this.containers[i].element[0]))
                    if (this._intersectsWith(this.containers[i].containerCache)) {
                        if (h && e.contains(this.containers[i].element[0], h.element[0]))
                            continue;
                        h = this.containers[i],
                        f = i
                    } else
                        this.containers[i].containerCache.over && (this.containers[i]._trigger("out", t, this._uiHash(this)),
                        this.containers[i].containerCache.over = 0);
            if (h)
                if (1 === this.containers.length)
                    this.containers[f].containerCache.over || (this.containers[f]._trigger("over", t, this._uiHash(this)),
                    this.containers[f].containerCache.over = 1);
                else {
                    for (s = 1e4,
                    o = null,
                    a = (d = h.floating || this._isFloating(this.currentItem)) ? "left" : "top",
                    r = d ? "width" : "height",
                    c = d ? "pageX" : "pageY",
                    n = this.items.length - 1; n >= 0; n--)
                        e.contains(this.containers[f].element[0], this.items[n].item[0]) && this.items[n].item[0] !== this.currentItem[0] && (l = this.items[n].item.offset()[a],
                        u = !1,
                        t[c] - l > this.items[n][r] / 2 && (u = !0),
                        Math.abs(t[c] - l) < s && (s = Math.abs(t[c] - l),
                        o = this.items[n],
                        this.direction = u ? "up" : "down"));
                    if (!o && !this.options.dropOnEmpty)
                        return;
                    if (this.currentContainer === this.containers[f])
                        return void (this.currentContainer.containerCache.over || (this.containers[f]._trigger("over", t, this._uiHash()),
                        this.currentContainer.containerCache.over = 1));
                    o ? this._rearrange(t, o, null, !0) : this._rearrange(t, null, this.containers[f].element, !0),
                    this._trigger("change", t, this._uiHash()),
                    this.containers[f]._trigger("change", t, this._uiHash(this)),
                    this.currentContainer = this.containers[f],
                    this.options.placeholder.update(this.currentContainer, this.placeholder),
                    this.containers[f]._trigger("over", t, this._uiHash(this)),
                    this.containers[f].containerCache.over = 1
                }
        },
        _createHelper: function(t) {
            var i = this.options
              , n = e.isFunction(i.helper) ? e(i.helper.apply(this.element[0], [t, this.currentItem])) : "clone" === i.helper ? this.currentItem.clone() : this.currentItem;
            return n.parents("body").length || e("parent" !== i.appendTo ? i.appendTo : this.currentItem[0].parentNode)[0].appendChild(n[0]),
            n[0] === this.currentItem[0] && (this._storedCSS = {
                width: this.currentItem[0].style.width,
                height: this.currentItem[0].style.height,
                position: this.currentItem.css("position"),
                top: this.currentItem.css("top"),
                left: this.currentItem.css("left")
            }),
            n[0].style.width && !i.forceHelperSize || n.width(this.currentItem.width()),
            n[0].style.height && !i.forceHelperSize || n.height(this.currentItem.height()),
            n
        },
        _adjustOffsetFromHelper: function(t) {
            "string" == typeof t && (t = t.split(" ")),
            e.isArray(t) && (t = {
                left: +t[0],
                top: +t[1] || 0
            }),
            "left"in t && (this.offset.click.left = t.left + this.margins.left),
            "right"in t && (this.offset.click.left = this.helperProportions.width - t.right + this.margins.left),
            "top"in t && (this.offset.click.top = t.top + this.margins.top),
            "bottom"in t && (this.offset.click.top = this.helperProportions.height - t.bottom + this.margins.top)
        },
        _getParentOffset: function() {
            this.offsetParent = this.helper.offsetParent();
            var t = this.offsetParent.offset();
            return "absolute" === this.cssPosition && this.scrollParent[0] !== this.document[0] && e.contains(this.scrollParent[0], this.offsetParent[0]) && (t.left += this.scrollParent.scrollLeft(),
            t.top += this.scrollParent.scrollTop()),
            (this.offsetParent[0] === this.document[0].body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && e.ui.ie) && (t = {
                top: 0,
                left: 0
            }),
            {
                top: t.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: t.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if ("relative" === this.cssPosition) {
                var e = this.currentItem.position();
                return {
                    top: e.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                    left: e.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                }
            }
            return {
                top: 0,
                left: 0
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
                top: parseInt(this.currentItem.css("marginTop"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var t, i, n, s = this.options;
            "parent" === s.containment && (s.containment = this.helper[0].parentNode),
            "document" !== s.containment && "window" !== s.containment || (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, "document" === s.containment ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left, ("document" === s.containment ? this.document.height() || document.body.parentNode.scrollHeight : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]),
            /^(document|window|parent)$/.test(s.containment) || (t = e(s.containment)[0],
            i = e(s.containment).offset(),
            n = "hidden" !== e(t).css("overflow"),
            this.containment = [i.left + (parseInt(e(t).css("borderLeftWidth"), 10) || 0) + (parseInt(e(t).css("paddingLeft"), 10) || 0) - this.margins.left, i.top + (parseInt(e(t).css("borderTopWidth"), 10) || 0) + (parseInt(e(t).css("paddingTop"), 10) || 0) - this.margins.top, i.left + (n ? Math.max(t.scrollWidth, t.offsetWidth) : t.offsetWidth) - (parseInt(e(t).css("borderLeftWidth"), 10) || 0) - (parseInt(e(t).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, i.top + (n ? Math.max(t.scrollHeight, t.offsetHeight) : t.offsetHeight) - (parseInt(e(t).css("borderTopWidth"), 10) || 0) - (parseInt(e(t).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
        },
        _convertPositionTo: function(t, i) {
            i || (i = this.position);
            var n = "absolute" === t ? 1 : -1
              , s = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && e.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent
              , o = /(html|body)/i.test(s[0].tagName);
            return {
                top: i.top + this.offset.relative.top * n + this.offset.parent.top * n - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : o ? 0 : s.scrollTop()) * n,
                left: i.left + this.offset.relative.left * n + this.offset.parent.left * n - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : o ? 0 : s.scrollLeft()) * n
            }
        },
        _generatePosition: function(t) {
            var i, n, s = this.options, o = t.pageX, a = t.pageY, r = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && e.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent, l = /(html|body)/i.test(r[0].tagName);
            return "relative" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()),
            this.originalPosition && (this.containment && (t.pageX - this.offset.click.left < this.containment[0] && (o = this.containment[0] + this.offset.click.left),
            t.pageY - this.offset.click.top < this.containment[1] && (a = this.containment[1] + this.offset.click.top),
            t.pageX - this.offset.click.left > this.containment[2] && (o = this.containment[2] + this.offset.click.left),
            t.pageY - this.offset.click.top > this.containment[3] && (a = this.containment[3] + this.offset.click.top)),
            s.grid && (i = this.originalPageY + Math.round((a - this.originalPageY) / s.grid[1]) * s.grid[1],
            a = this.containment ? i - this.offset.click.top >= this.containment[1] && i - this.offset.click.top <= this.containment[3] ? i : i - this.offset.click.top >= this.containment[1] ? i - s.grid[1] : i + s.grid[1] : i,
            n = this.originalPageX + Math.round((o - this.originalPageX) / s.grid[0]) * s.grid[0],
            o = this.containment ? n - this.offset.click.left >= this.containment[0] && n - this.offset.click.left <= this.containment[2] ? n : n - this.offset.click.left >= this.containment[0] ? n - s.grid[0] : n + s.grid[0] : n)),
            {
                top: a - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : l ? 0 : r.scrollTop()),
                left: o - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : l ? 0 : r.scrollLeft())
            }
        },
        _rearrange: function(e, t, i, n) {
            i ? i[0].appendChild(this.placeholder[0]) : t.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? t.item[0] : t.item[0].nextSibling),
            this.counter = this.counter ? ++this.counter : 1;
            var s = this.counter;
            this._delay((function() {
                s === this.counter && this.refreshPositions(!n)
            }
            ))
        },
        _clear: function(e, t) {
            function i(e, t, i) {
                return function(n) {
                    i._trigger(e, n, t._uiHash(t))
                }
            }
            this.reverting = !1;
            var n, s = [];
            if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem),
            this._noFinalSort = null,
            this.helper[0] === this.currentItem[0]) {
                for (n in this._storedCSS)
                    "auto" !== this._storedCSS[n] && "static" !== this._storedCSS[n] || (this._storedCSS[n] = "");
                this.currentItem.css(this._storedCSS),
                this._removeClass(this.currentItem, "ui-sortable-helper")
            } else
                this.currentItem.show();
            for (this.fromOutside && !t && s.push((function(e) {
                this._trigger("receive", e, this._uiHash(this.fromOutside))
            }
            )),
            !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition.parent === this.currentItem.parent()[0] || t || s.push((function(e) {
                this._trigger("update", e, this._uiHash())
            }
            )),
            this !== this.currentContainer && (t || (s.push((function(e) {
                this._trigger("remove", e, this._uiHash())
            }
            )),
            s.push(function(e) {
                return function(t) {
                    e._trigger("receive", t, this._uiHash(this))
                }
            }
            .call(this, this.currentContainer)),
            s.push(function(e) {
                return function(t) {
                    e._trigger("update", t, this._uiHash(this))
                }
            }
            .call(this, this.currentContainer)))),
            n = this.containers.length - 1; n >= 0; n--)
                t || s.push(i("deactivate", this, this.containers[n])),
                this.containers[n].containerCache.over && (s.push(i("out", this, this.containers[n])),
                this.containers[n].containerCache.over = 0);
            if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor),
            this.storedStylesheet.remove()),
            this._storedOpacity && this.helper.css("opacity", this._storedOpacity),
            this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex),
            this.dragging = !1,
            t || this._trigger("beforeStop", e, this._uiHash()),
            this.placeholder[0].parentNode.removeChild(this.placeholder[0]),
            this.cancelHelperRemoval || (this.helper[0] !== this.currentItem[0] && this.helper.remove(),
            this.helper = null),
            !t) {
                for (n = 0; n < s.length; n++)
                    s[n].call(this, e);
                this._trigger("stop", e, this._uiHash())
            }
            return this.fromOutside = !1,
            !this.cancelHelperRemoval
        },
        _trigger: function() {
            !1 === e.Widget.prototype._trigger.apply(this, arguments) && this.cancel()
        },
        _uiHash: function(t) {
            var i = t || this;
            return {
                helper: i.helper,
                placeholder: i.placeholder || e([]),
                position: i.position,
                originalPosition: i.originalPosition,
                offset: i.positionAbs,
                item: i.currentItem,
                sender: t ? t.element : null
            }
        }
    })
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./button", "../version", "../keycode", "../safe-active-element", "../widget"], e) : e(jQuery)
}((function(e) {
    function t(e) {
        return function() {
            var t = this.element.val();
            e.apply(this, arguments),
            this._refresh(),
            t !== this.element.val() && this._trigger("change")
        }
    }
    return e.widget("ui.spinner", {
        version: "1.12.1",
        defaultElement: "<input>",
        widgetEventPrefix: "spin",
        options: {
            classes: {
                "ui-spinner": "ui-corner-all",
                "ui-spinner-down": "ui-corner-br",
                "ui-spinner-up": "ui-corner-tr"
            },
            culture: null,
            icons: {
                down: "ui-icon-triangle-1-s",
                up: "ui-icon-triangle-1-n"
            },
            incremental: !0,
            max: null,
            min: null,
            numberFormat: null,
            page: 10,
            step: 1,
            change: null,
            spin: null,
            start: null,
            stop: null
        },
        _create: function() {
            this._setOption("max", this.options.max),
            this._setOption("min", this.options.min),
            this._setOption("step", this.options.step),
            "" !== this.value() && this._value(this.element.val(), !0),
            this._draw(),
            this._on(this._events),
            this._refresh(),
            this._on(this.window, {
                beforeunload: function() {
                    this.element.removeAttr("autocomplete")
                }
            })
        },
        _getCreateOptions: function() {
            var t = this._super()
              , i = this.element;
            return e.each(["min", "max", "step"], (function(e, n) {
                var s = i.attr(n);
                null != s && s.length && (t[n] = s)
            }
            )),
            t
        },
        _events: {
            keydown: function(e) {
                this._start(e) && this._keydown(e) && e.preventDefault()
            },
            keyup: "_stop",
            focus: function() {
                this.previous = this.element.val()
            },
            blur: function(e) {
                this.cancelBlur ? delete this.cancelBlur : (this._stop(),
                this._refresh(),
                this.previous !== this.element.val() && this._trigger("change", e))
            },
            mousewheel: function(e, t) {
                if (t) {
                    if (!this.spinning && !this._start(e))
                        return !1;
                    this._spin((t > 0 ? 1 : -1) * this.options.step, e),
                    clearTimeout(this.mousewheelTimer),
                    this.mousewheelTimer = this._delay((function() {
                        this.spinning && this._stop(e)
                    }
                    ), 100),
                    e.preventDefault()
                }
            },
            "mousedown .ui-spinner-button": function(t) {
                function i() {
                    this.element[0] === e.ui.safeActiveElement(this.document[0]) || (this.element.trigger("focus"),
                    this.previous = n,
                    this._delay((function() {
                        this.previous = n
                    }
                    )))
                }
                var n;
                n = this.element[0] === e.ui.safeActiveElement(this.document[0]) ? this.previous : this.element.val(),
                t.preventDefault(),
                i.call(this),
                this.cancelBlur = !0,
                this._delay((function() {
                    delete this.cancelBlur,
                    i.call(this)
                }
                )),
                !1 !== this._start(t) && this._repeat(null, e(t.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, t)
            },
            "mouseup .ui-spinner-button": "_stop",
            "mouseenter .ui-spinner-button": function(t) {
                if (e(t.currentTarget).hasClass("ui-state-active"))
                    return !1 !== this._start(t) && void this._repeat(null, e(t.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, t)
            },
            "mouseleave .ui-spinner-button": "_stop"
        },
        _enhance: function() {
            this.uiSpinner = this.element.attr("autocomplete", "off").wrap("<span>").parent().append("<a></a><a></a>")
        },
        _draw: function() {
            this._enhance(),
            this._addClass(this.uiSpinner, "ui-spinner", "ui-widget ui-widget-content"),
            this._addClass("ui-spinner-input"),
            this.element.attr("role", "spinbutton"),
            this.buttons = this.uiSpinner.children("a").attr("tabIndex", -1).attr("aria-hidden", !0).button({
                classes: {
                    "ui-button": ""
                }
            }),
            this._removeClass(this.buttons, "ui-corner-all"),
            this._addClass(this.buttons.first(), "ui-spinner-button ui-spinner-up"),
            this._addClass(this.buttons.last(), "ui-spinner-button ui-spinner-down"),
            this.buttons.first().button({
                icon: this.options.icons.up,
                showLabel: !1
            }),
            this.buttons.last().button({
                icon: this.options.icons.down,
                showLabel: !1
            }),
            this.buttons.height() > Math.ceil(.5 * this.uiSpinner.height()) && this.uiSpinner.height() > 0 && this.uiSpinner.height(this.uiSpinner.height())
        },
        _keydown: function(t) {
            var i = this.options
              , n = e.ui.keyCode;
            switch (t.keyCode) {
            case n.UP:
                return this._repeat(null, 1, t),
                !0;
            case n.DOWN:
                return this._repeat(null, -1, t),
                !0;
            case n.PAGE_UP:
                return this._repeat(null, i.page, t),
                !0;
            case n.PAGE_DOWN:
                return this._repeat(null, -i.page, t),
                !0
            }
            return !1
        },
        _start: function(e) {
            return !(!this.spinning && !1 === this._trigger("start", e)) && (this.counter || (this.counter = 1),
            this.spinning = !0,
            !0)
        },
        _repeat: function(e, t, i) {
            e = e || 500,
            clearTimeout(this.timer),
            this.timer = this._delay((function() {
                this._repeat(40, t, i)
            }
            ), e),
            this._spin(t * this.options.step, i)
        },
        _spin: function(e, t) {
            var i = this.value() || 0;
            this.counter || (this.counter = 1),
            i = this._adjustValue(i + e * this._increment(this.counter)),
            this.spinning && !1 === this._trigger("spin", t, {
                value: i
            }) || (this._value(i),
            this.counter++)
        },
        _increment: function(t) {
            var i = this.options.incremental;
            return i ? e.isFunction(i) ? i(t) : Math.floor(t * t * t / 5e4 - t * t / 500 + 17 * t / 200 + 1) : 1
        },
        _precision: function() {
            var e = this._precisionOf(this.options.step);
            return null !== this.options.min && (e = Math.max(e, this._precisionOf(this.options.min))),
            e
        },
        _precisionOf: function(e) {
            var t = e.toString()
              , i = t.indexOf(".");
            return -1 === i ? 0 : t.length - i - 1
        },
        _adjustValue: function(e) {
            var t, i, n = this.options;
            return i = e - (t = null !== n.min ? n.min : 0),
            e = t + (i = Math.round(i / n.step) * n.step),
            e = parseFloat(e.toFixed(this._precision())),
            null !== n.max && e > n.max ? n.max : null !== n.min && e < n.min ? n.min : e
        },
        _stop: function(e) {
            this.spinning && (clearTimeout(this.timer),
            clearTimeout(this.mousewheelTimer),
            this.counter = 0,
            this.spinning = !1,
            this._trigger("stop", e))
        },
        _setOption: function(e, t) {
            var i, n, s;
            if ("culture" === e || "numberFormat" === e)
                return i = this._parse(this.element.val()),
                this.options[e] = t,
                void this.element.val(this._format(i));
            "max" !== e && "min" !== e && "step" !== e || "string" == typeof t && (t = this._parse(t)),
            "icons" === e && (n = this.buttons.first().find(".ui-icon"),
            this._removeClass(n, null, this.options.icons.up),
            this._addClass(n, null, t.up),
            s = this.buttons.last().find(".ui-icon"),
            this._removeClass(s, null, this.options.icons.down),
            this._addClass(s, null, t.down)),
            this._super(e, t)
        },
        _setOptionDisabled: function(e) {
            this._super(e),
            this._toggleClass(this.uiSpinner, null, "ui-state-disabled", !!e),
            this.element.prop("disabled", !!e),
            this.buttons.button(e ? "disable" : "enable")
        },
        _setOptions: t((function(e) {
            this._super(e)
        }
        )),
        _parse: function(e) {
            return "string" == typeof e && "" !== e && (e = window.Globalize && this.options.numberFormat ? Globalize.parseFloat(e, 10, this.options.culture) : +e),
            "" === e || isNaN(e) ? null : e
        },
        _format: function(e) {
            return "" === e ? "" : window.Globalize && this.options.numberFormat ? Globalize.format(e, this.options.numberFormat, this.options.culture) : e
        },
        _refresh: function() {
            this.element.attr({
                "aria-valuemin": this.options.min,
                "aria-valuemax": this.options.max,
                "aria-valuenow": this._parse(this.element.val())
            })
        },
        isValid: function() {
            var e = this.value();
            return null !== e && e === this._adjustValue(e)
        },
        _value: function(e, t) {
            var i;
            "" !== e && null !== (i = this._parse(e)) && (t || (i = this._adjustValue(i)),
            e = this._format(i)),
            this.element.val(e),
            this._refresh()
        },
        _destroy: function() {
            this.element.prop("disabled", !1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),
            this.uiSpinner.replaceWith(this.element)
        },
        stepUp: t((function(e) {
            this._stepUp(e)
        }
        )),
        _stepUp: function(e) {
            this._start() && (this._spin((e || 1) * this.options.step),
            this._stop())
        },
        stepDown: t((function(e) {
            this._stepDown(e)
        }
        )),
        _stepDown: function(e) {
            this._start() && (this._spin((e || 1) * -this.options.step),
            this._stop())
        },
        pageUp: t((function(e) {
            this._stepUp((e || 1) * this.options.page)
        }
        )),
        pageDown: t((function(e) {
            this._stepDown((e || 1) * this.options.page)
        }
        )),
        value: function(e) {
            if (!arguments.length)
                return this._parse(this.element.val());
            t(this._value).call(this, e)
        },
        widget: function() {
            return this.uiSpinner
        }
    }),
    !1 !== e.uiBackCompat && e.widget("ui.spinner", e.ui.spinner, {
        _enhance: function() {
            this.uiSpinner = this.element.attr("autocomplete", "off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())
        },
        _uiSpinnerHtml: function() {
            return "<span>"
        },
        _buttonHtml: function() {
            return "<a></a><a></a>"
        }
    }),
    e.ui.spinner
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../escape-selector", "../keycode", "../safe-active-element", "../unique-id", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    var t;
    return e.widget("ui.tabs", {
        version: "1.12.1",
        delay: 300,
        options: {
            active: null,
            classes: {
                "ui-tabs": "ui-corner-all",
                "ui-tabs-nav": "ui-corner-all",
                "ui-tabs-panel": "ui-corner-bottom",
                "ui-tabs-tab": "ui-corner-top"
            },
            collapsible: !1,
            event: "click",
            heightStyle: "content",
            hide: null,
            show: null,
            activate: null,
            beforeActivate: null,
            beforeLoad: null,
            load: null
        },
        _isLocal: (t = /#.*$/,
        function(e) {
            var i, n;
            i = e.href.replace(t, ""),
            n = location.href.replace(t, "");
            try {
                i = decodeURIComponent(i)
            } catch (e) {}
            try {
                n = decodeURIComponent(n)
            } catch (e) {}
            return e.hash.length > 1 && i === n
        }
        ),
        _create: function() {
            var t = this
              , i = this.options;
            this.running = !1,
            this._addClass("ui-tabs", "ui-widget ui-widget-content"),
            this._toggleClass("ui-tabs-collapsible", null, i.collapsible),
            this._processTabs(),
            i.active = this._initialActive(),
            e.isArray(i.disabled) && (i.disabled = e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"), (function(e) {
                return t.tabs.index(e)
            }
            )))).sort()),
            !1 !== this.options.active && this.anchors.length ? this.active = this._findActive(i.active) : this.active = e(),
            this._refresh(),
            this.active.length && this.load(i.active)
        },
        _initialActive: function() {
            var t = this.options.active
              , i = this.options.collapsible
              , n = location.hash.substring(1);
            return null === t && (n && this.tabs.each((function(i, s) {
                if (e(s).attr("aria-controls") === n)
                    return t = i,
                    !1
            }
            )),
            null === t && (t = this.tabs.index(this.tabs.filter(".ui-tabs-active"))),
            null !== t && -1 !== t || (t = !!this.tabs.length && 0)),
            !1 !== t && -1 === (t = this.tabs.index(this.tabs.eq(t))) && (t = !i && 0),
            !i && !1 === t && this.anchors.length && (t = 0),
            t
        },
        _getCreateEventData: function() {
            return {
                tab: this.active,
                panel: this.active.length ? this._getPanelForTab(this.active) : e()
            }
        },
        _tabKeydown: function(t) {
            var i = e(e.ui.safeActiveElement(this.document[0])).closest("li")
              , n = this.tabs.index(i)
              , s = !0;
            if (!this._handlePageNav(t)) {
                switch (t.keyCode) {
                case e.ui.keyCode.RIGHT:
                case e.ui.keyCode.DOWN:
                    n++;
                    break;
                case e.ui.keyCode.UP:
                case e.ui.keyCode.LEFT:
                    s = !1,
                    n--;
                    break;
                case e.ui.keyCode.END:
                    n = this.anchors.length - 1;
                    break;
                case e.ui.keyCode.HOME:
                    n = 0;
                    break;
                case e.ui.keyCode.SPACE:
                    return t.preventDefault(),
                    clearTimeout(this.activating),
                    void this._activate(n);
                case e.ui.keyCode.ENTER:
                    return t.preventDefault(),
                    clearTimeout(this.activating),
                    void this._activate(n !== this.options.active && n);
                default:
                    return
                }
                t.preventDefault(),
                clearTimeout(this.activating),
                n = this._focusNextTab(n, s),
                t.ctrlKey || t.metaKey || (i.attr("aria-selected", "false"),
                this.tabs.eq(n).attr("aria-selected", "true"),
                this.activating = this._delay((function() {
                    this.option("active", n)
                }
                ), this.delay))
            }
        },
        _panelKeydown: function(t) {
            this._handlePageNav(t) || t.ctrlKey && t.keyCode === e.ui.keyCode.UP && (t.preventDefault(),
            this.active.trigger("focus"))
        },
        _handlePageNav: function(t) {
            return t.altKey && t.keyCode === e.ui.keyCode.PAGE_UP ? (this._activate(this._focusNextTab(this.options.active - 1, !1)),
            !0) : t.altKey && t.keyCode === e.ui.keyCode.PAGE_DOWN ? (this._activate(this._focusNextTab(this.options.active + 1, !0)),
            !0) : void 0
        },
        _findNextTab: function(t, i) {
            function n() {
                return t > s && (t = 0),
                t < 0 && (t = s),
                t
            }
            for (var s = this.tabs.length - 1; -1 !== e.inArray(n(), this.options.disabled); )
                t = i ? t + 1 : t - 1;
            return t
        },
        _focusNextTab: function(e, t) {
            return e = this._findNextTab(e, t),
            this.tabs.eq(e).trigger("focus"),
            e
        },
        _setOption: function(e, t) {
            "active" !== e ? (this._super(e, t),
            "collapsible" === e && (this._toggleClass("ui-tabs-collapsible", null, t),
            t || !1 !== this.options.active || this._activate(0)),
            "event" === e && this._setupEvents(t),
            "heightStyle" === e && this._setupHeightStyle(t)) : this._activate(t)
        },
        _sanitizeSelector: function(e) {
            return e ? e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : ""
        },
        refresh: function() {
            var t = this.options
              , i = this.tablist.children(":has(a[href])");
            t.disabled = e.map(i.filter(".ui-state-disabled"), (function(e) {
                return i.index(e)
            }
            )),
            this._processTabs(),
            !1 !== t.active && this.anchors.length ? this.active.length && !e.contains(this.tablist[0], this.active[0]) ? this.tabs.length === t.disabled.length ? (t.active = !1,
            this.active = e()) : this._activate(this._findNextTab(Math.max(0, t.active - 1), !1)) : t.active = this.tabs.index(this.active) : (t.active = !1,
            this.active = e()),
            this._refresh()
        },
        _refresh: function() {
            this._setOptionDisabled(this.options.disabled),
            this._setupEvents(this.options.event),
            this._setupHeightStyle(this.options.heightStyle),
            this.tabs.not(this.active).attr({
                "aria-selected": "false",
                "aria-expanded": "false",
                tabIndex: -1
            }),
            this.panels.not(this._getPanelForTab(this.active)).hide().attr({
                "aria-hidden": "true"
            }),
            this.active.length ? (this.active.attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            }),
            this._addClass(this.active, "ui-tabs-active", "ui-state-active"),
            this._getPanelForTab(this.active).show().attr({
                "aria-hidden": "false"
            })) : this.tabs.eq(0).attr("tabIndex", 0)
        },
        _processTabs: function() {
            var t = this
              , i = this.tabs
              , n = this.anchors
              , s = this.panels;
            this.tablist = this._getList().attr("role", "tablist"),
            this._addClass(this.tablist, "ui-tabs-nav", "ui-helper-reset ui-helper-clearfix ui-widget-header"),
            this.tablist.on("mousedown" + this.eventNamespace, "> li", (function(t) {
                e(this).is(".ui-state-disabled") && t.preventDefault()
            }
            )).on("focus" + this.eventNamespace, ".ui-tabs-anchor", (function() {
                e(this).closest("li").is(".ui-state-disabled") && this.blur()
            }
            )),
            this.tabs = this.tablist.find("> li:has(a[href])").attr({
                role: "tab",
                tabIndex: -1
            }),
            this._addClass(this.tabs, "ui-tabs-tab", "ui-state-default"),
            this.anchors = this.tabs.map((function() {
                return e("a", this)[0]
            }
            )).attr({
                role: "presentation",
                tabIndex: -1
            }),
            this._addClass(this.anchors, "ui-tabs-anchor"),
            this.panels = e(),
            this.anchors.each((function(i, n) {
                var s, o, a, r = e(n).uniqueId().attr("id"), l = e(n).closest("li"), u = l.attr("aria-controls");
                t._isLocal(n) ? (a = (s = n.hash).substring(1),
                o = t.element.find(t._sanitizeSelector(s))) : (s = "#" + (a = l.attr("aria-controls") || e({}).uniqueId()[0].id),
                (o = t.element.find(s)).length || (o = t._createPanel(a)).insertAfter(t.panels[i - 1] || t.tablist),
                o.attr("aria-live", "polite")),
                o.length && (t.panels = t.panels.add(o)),
                u && l.data("ui-tabs-aria-controls", u),
                l.attr({
                    "aria-controls": a,
                    "aria-labelledby": r
                }),
                o.attr("aria-labelledby", r)
            }
            )),
            this.panels.attr("role", "tabpanel"),
            this._addClass(this.panels, "ui-tabs-panel", "ui-widget-content"),
            i && (this._off(i.not(this.tabs)),
            this._off(n.not(this.anchors)),
            this._off(s.not(this.panels)))
        },
        _getList: function() {
            return this.tablist || this.element.find("ol, ul").eq(0)
        },
        _createPanel: function(t) {
            return e("<div>").attr("id", t).data("ui-tabs-destroy", !0)
        },
        _setOptionDisabled: function(t) {
            var i, n, s;
            for (e.isArray(t) && (t.length ? t.length === this.anchors.length && (t = !0) : t = !1),
            s = 0; n = this.tabs[s]; s++)
                i = e(n),
                !0 === t || -1 !== e.inArray(s, t) ? (i.attr("aria-disabled", "true"),
                this._addClass(i, null, "ui-state-disabled")) : (i.removeAttr("aria-disabled"),
                this._removeClass(i, null, "ui-state-disabled"));
            this.options.disabled = t,
            this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, !0 === t)
        },
        _setupEvents: function(t) {
            var i = {};
            t && e.each(t.split(" "), (function(e, t) {
                i[t] = "_eventHandler"
            }
            )),
            this._off(this.anchors.add(this.tabs).add(this.panels)),
            this._on(!0, this.anchors, {
                click: function(e) {
                    e.preventDefault()
                }
            }),
            this._on(this.anchors, i),
            this._on(this.tabs, {
                keydown: "_tabKeydown"
            }),
            this._on(this.panels, {
                keydown: "_panelKeydown"
            }),
            this._focusable(this.tabs),
            this._hoverable(this.tabs)
        },
        _setupHeightStyle: function(t) {
            var i, n = this.element.parent();
            "fill" === t ? (i = n.height(),
            i -= this.element.outerHeight() - this.element.height(),
            this.element.siblings(":visible").each((function() {
                var t = e(this)
                  , n = t.css("position");
                "absolute" !== n && "fixed" !== n && (i -= t.outerHeight(!0))
            }
            )),
            this.element.children().not(this.panels).each((function() {
                i -= e(this).outerHeight(!0)
            }
            )),
            this.panels.each((function() {
                e(this).height(Math.max(0, i - e(this).innerHeight() + e(this).height()))
            }
            )).css("overflow", "auto")) : "auto" === t && (i = 0,
            this.panels.each((function() {
                i = Math.max(i, e(this).height("").height())
            }
            )).height(i))
        },
        _eventHandler: function(t) {
            var i = this.options
              , n = this.active
              , s = e(t.currentTarget).closest("li")
              , o = s[0] === n[0]
              , a = o && i.collapsible
              , r = a ? e() : this._getPanelForTab(s)
              , l = n.length ? this._getPanelForTab(n) : e()
              , u = {
                oldTab: n,
                oldPanel: l,
                newTab: a ? e() : s,
                newPanel: r
            };
            t.preventDefault(),
            s.hasClass("ui-state-disabled") || s.hasClass("ui-tabs-loading") || this.running || o && !i.collapsible || !1 === this._trigger("beforeActivate", t, u) || (i.active = !a && this.tabs.index(s),
            this.active = o ? e() : s,
            this.xhr && this.xhr.abort(),
            l.length || r.length || e.error("jQuery UI Tabs: Mismatching fragment identifier."),
            r.length && this.load(this.tabs.index(s), t),
            this._toggle(t, u))
        },
        _toggle: function(t, i) {
            function n() {
                o.running = !1,
                o._trigger("activate", t, i)
            }
            function s() {
                o._addClass(i.newTab.closest("li"), "ui-tabs-active", "ui-state-active"),
                a.length && o.options.show ? o._show(a, o.options.show, n) : (a.show(),
                n())
            }
            var o = this
              , a = i.newPanel
              , r = i.oldPanel;
            this.running = !0,
            r.length && this.options.hide ? this._hide(r, this.options.hide, (function() {
                o._removeClass(i.oldTab.closest("li"), "ui-tabs-active", "ui-state-active"),
                s()
            }
            )) : (this._removeClass(i.oldTab.closest("li"), "ui-tabs-active", "ui-state-active"),
            r.hide(),
            s()),
            r.attr("aria-hidden", "true"),
            i.oldTab.attr({
                "aria-selected": "false",
                "aria-expanded": "false"
            }),
            a.length && r.length ? i.oldTab.attr("tabIndex", -1) : a.length && this.tabs.filter((function() {
                return 0 === e(this).attr("tabIndex")
            }
            )).attr("tabIndex", -1),
            a.attr("aria-hidden", "false"),
            i.newTab.attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            })
        },
        _activate: function(t) {
            var i, n = this._findActive(t);
            n[0] !== this.active[0] && (n.length || (n = this.active),
            i = n.find(".ui-tabs-anchor")[0],
            this._eventHandler({
                target: i,
                currentTarget: i,
                preventDefault: e.noop
            }))
        },
        _findActive: function(t) {
            return !1 === t ? e() : this.tabs.eq(t)
        },
        _getIndex: function(t) {
            return "string" == typeof t && (t = this.anchors.index(this.anchors.filter("[href$='" + e.ui.escapeSelector(t) + "']"))),
            t
        },
        _destroy: function() {
            this.xhr && this.xhr.abort(),
            this.tablist.removeAttr("role").off(this.eventNamespace),
            this.anchors.removeAttr("role tabIndex").removeUniqueId(),
            this.tabs.add(this.panels).each((function() {
                e.data(this, "ui-tabs-destroy") ? e(this).remove() : e(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")
            }
            )),
            this.tabs.each((function() {
                var t = e(this)
                  , i = t.data("ui-tabs-aria-controls");
                i ? t.attr("aria-controls", i).removeData("ui-tabs-aria-controls") : t.removeAttr("aria-controls")
            }
            )),
            this.panels.show(),
            "content" !== this.options.heightStyle && this.panels.css("height", "")
        },
        enable: function(t) {
            var i = this.options.disabled;
            !1 !== i && (void 0 === t ? i = !1 : (t = this._getIndex(t),
            i = e.isArray(i) ? e.map(i, (function(e) {
                return e !== t ? e : null
            }
            )) : e.map(this.tabs, (function(e, i) {
                return i !== t ? i : null
            }
            ))),
            this._setOptionDisabled(i))
        },
        disable: function(t) {
            var i = this.options.disabled;
            if (!0 !== i) {
                if (void 0 === t)
                    i = !0;
                else {
                    if (t = this._getIndex(t),
                    -1 !== e.inArray(t, i))
                        return;
                    i = e.isArray(i) ? e.merge([t], i).sort() : [t]
                }
                this._setOptionDisabled(i)
            }
        },
        load: function(t, i) {
            t = this._getIndex(t);
            var n = this
              , s = this.tabs.eq(t)
              , o = s.find(".ui-tabs-anchor")
              , a = this._getPanelForTab(s)
              , r = {
                tab: s,
                panel: a
            }
              , l = function(e, t) {
                "abort" === t && n.panels.stop(!1, !0),
                n._removeClass(s, "ui-tabs-loading"),
                a.removeAttr("aria-busy"),
                e === n.xhr && delete n.xhr
            };
            this._isLocal(o[0]) || (this.xhr = e.ajax(this._ajaxSettings(o, i, r)),
            this.xhr && "canceled" !== this.xhr.statusText && (this._addClass(s, "ui-tabs-loading"),
            a.attr("aria-busy", "true"),
            this.xhr.done((function(e, t, s) {
                setTimeout((function() {
                    a.php(e),
                    n._trigger("load", i, r),
                    l(s, t)
                }
                ), 1)
            }
            )).fail((function(e, t) {
                setTimeout((function() {
                    l(e, t)
                }
                ), 1)
            }
            ))))
        },
        _ajaxSettings: function(t, i, n) {
            var s = this;
            return {
                url: t.attr("href").replace(/#.*$/, ""),
                beforeSend: function(t, o) {
                    return s._trigger("beforeLoad", i, e.extend({
                        jqXHR: t,
                        ajaxSettings: o
                    }, n))
                }
            }
        },
        _getPanelForTab: function(t) {
            var i = e(t).attr("aria-controls");
            return this.element.find(this._sanitizeSelector("#" + i))
        }
    }),
    !1 !== e.uiBackCompat && e.widget("ui.tabs", e.ui.tabs, {
        _processTabs: function() {
            this._superApply(arguments),
            this._addClass(this.tabs, "ui-tab")
        }
    }),
    e.ui.tabs
}
)),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "../keycode", "../position", "../unique-id", "../version", "../widget"], e) : e(jQuery)
}((function(e) {
    return e.widget("ui.tooltip", {
        version: "1.12.1",
        options: {
            classes: {
                "ui-tooltip": "ui-corner-all ui-widget-shadow"
            },
            content: function() {
                var t = e(this).attr("title") || "";
                return e("<a>").text(t).html()
            },
            hide: !0,
            items: "[title]:not([disabled])",
            position: {
                my: "left top+15",
                at: "left bottom",
                collision: "flipfit flip"
            },
            show: !0,
            track: !1,
            close: null,
            open: null
        },
        _addDescribedBy: function(t, i) {
            var n = (t.attr("aria-describedby") || "").split(/\s+/);
            n.push(i),
            t.data("ui-tooltip-id", i).attr("aria-describedby", e.trim(n.join(" ")))
        },
        _removeDescribedBy: function(t) {
            var i = t.data("ui-tooltip-id")
              , n = (t.attr("aria-describedby") || "").split(/\s+/)
              , s = e.inArray(i, n);
            -1 !== s && n.splice(s, 1),
            t.removeData("ui-tooltip-id"),
            (n = e.trim(n.join(" "))) ? t.attr("aria-describedby", n) : t.removeAttr("aria-describedby")
        },
        _create: function() {
            this._on({
                mouseover: "open",
                focusin: "open"
            }),
            this.tooltips = {},
            this.parents = {},
            this.liveRegion = e("<div>").attr({
                role: "log",
                "aria-live": "assertive",
                "aria-relevant": "additions"
            }).appendTo(this.document[0].body),
            this._addClass(this.liveRegion, null, "ui-helper-hidden-accessible"),
            this.disabledTitles = e([])
        },
        _setOption: function(t, i) {
            var n = this;
            this._super(t, i),
            "content" === t && e.each(this.tooltips, (function(e, t) {
                n._updateContent(t.element)
            }
            ))
        },
        _setOptionDisabled: function(e) {
            this[e ? "_disable" : "_enable"]()
        },
        _disable: function() {
            var t = this;
            e.each(this.tooltips, (function(i, n) {
                var s = e.Event("blur");
                s.target = s.currentTarget = n.element[0],
                t.close(s, !0)
            }
            )),
            this.disabledTitles = this.disabledTitles.add(this.element.find(this.options.items).addBack().filter((function() {
                var t = e(this);
                if (t.is("[title]"))
                    return t.data("ui-tooltip-title", t.attr("title")).removeAttr("title")
            }
            )))
        },
        _enable: function() {
            this.disabledTitles.each((function() {
                var t = e(this);
                t.data("ui-tooltip-title") && t.attr("title", t.data("ui-tooltip-title"))
            }
            )),
            this.disabledTitles = e([])
        },
        open: function(t) {
            var i = this
              , n = e(t ? t.target : this.element).closest(this.options.items);
            n.length && !n.data("ui-tooltip-id") && (n.attr("title") && n.data("ui-tooltip-title", n.attr("title")),
            n.data("ui-tooltip-open", !0),
            t && "mouseover" === t.type && n.parents().each((function() {
                var t, n = e(this);
                n.data("ui-tooltip-open") && ((t = e.Event("blur")).target = t.currentTarget = this,
                i.close(t, !0)),
                n.attr("title") && (n.uniqueId(),
                i.parents[this.id] = {
                    element: this,
                    title: n.attr("title")
                },
                n.attr("title", ""))
            }
            )),
            this._registerCloseHandlers(t, n),
            this._updateContent(n, t))
        },
        _updateContent: function(e, t) {
            var i, n = this.options.content, s = this, o = t ? t.type : null;
            if ("string" == typeof n || n.nodeType || n.jquery)
                return this._open(t, e, n);
            (i = n.call(e[0], (function(i) {
                s._delay((function() {
                    e.data("ui-tooltip-open") && (t && (t.type = o),
                    this._open(t, e, i))
                }
                ))
            }
            ))) && this._open(t, e, i)
        },
        _open: function(t, i, n) {
            function s(e) {
                u.of = e,
                a.is(":hidden") || a.position(u)
            }
            var o, a, r, l, u = e.extend({}, this.options.position);
            n && ((o = this._find(i)) ? o.tooltip.find(".ui-tooltip-content").html(n) : (i.is("[title]") && (t && "mouseover" === t.type ? i.attr("title", "") : i.removeAttr("title")),
            o = this._tooltip(i),
            a = o.tooltip,
            this._addDescribedBy(i, a.attr("id")),
            a.find(".ui-tooltip-content").html(n),
            this.liveRegion.children().hide(),
            (l = e("<div>").html(a.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),
            l.removeAttr("id").find("[id]").removeAttr("id"),
            l.appendTo(this.liveRegion),
            this.options.track && t && /^mouse/.test(t.type) ? (this._on(this.document, {
                mousemove: s
            }),
            s(t)) : a.position(e.extend({
                of: i
            }, this.options.position)),
            a.hide(),
            this._show(a, this.options.show),
            this.options.track && this.options.show && this.options.show.delay && (r = this.delayedShow = setInterval((function() {
                a.is(":visible") && (s(u.of),
                clearInterval(r))
            }
            ), e.fx.interval)),
            this._trigger("open", t, {
                tooltip: a
            })))
        },
        _registerCloseHandlers: function(t, i) {
            var n = {
                keyup: function(t) {
                    if (t.keyCode === e.ui.keyCode.ESCAPE) {
                        var n = e.Event(t);
                        n.currentTarget = i[0],
                        this.close(n, !0)
                    }
                }
            };
            i[0] !== this.element[0] && (n.remove = function() {
                this._removeTooltip(this._find(i).tooltip)
            }
            ),
            t && "mouseover" !== t.type || (n.mouseleave = "close"),
            t && "focusin" !== t.type || (n.focusout = "close"),
            this._on(!0, i, n)
        },
        close: function(t) {
            var i, n = this, s = e(t ? t.currentTarget : this.element), o = this._find(s);
            o ? (i = o.tooltip,
            o.closing || (clearInterval(this.delayedShow),
            s.data("ui-tooltip-title") && !s.attr("title") && s.attr("title", s.data("ui-tooltip-title")),
            this._removeDescribedBy(s),
            o.hiding = !0,
            i.stop(!0),
            this._hide(i, this.options.hide, (function() {
                n._removeTooltip(e(this))
            }
            )),
            s.removeData("ui-tooltip-open"),
            this._off(s, "mouseleave focusout keyup"),
            s[0] !== this.element[0] && this._off(s, "remove"),
            this._off(this.document, "mousemove"),
            t && "mouseleave" === t.type && e.each(this.parents, (function(t, i) {
                e(i.element).attr("title", i.title),
                delete n.parents[t]
            }
            )),
            o.closing = !0,
            this._trigger("close", t, {
                tooltip: i
            }),
            o.hiding || (o.closing = !1))) : s.removeData("ui-tooltip-open")
        },
        _tooltip: function(t) {
            var i = e("<div>").attr("role", "tooltip")
              , n = e("<div>").appendTo(i)
              , s = i.uniqueId().attr("id");
            return this._addClass(n, "ui-tooltip-content"),
            this._addClass(i, "ui-tooltip", "ui-widget ui-widget-content"),
            i.appendTo(this._appendTo(t)),
            this.tooltips[s] = {
                element: t,
                tooltip: i
            }
        },
        _find: function(e) {
            var t = e.data("ui-tooltip-id");
            return t ? this.tooltips[t] : null
        },
        _removeTooltip: function(e) {
            e.remove(),
            delete this.tooltips[e.attr("id")]
        },
        _appendTo: function(e) {
            var t = e.closest(".ui-front, dialog");
            return t.length || (t = this.document[0].body),
            t
        },
        _destroy: function() {
            var t = this;
            e.each(this.tooltips, (function(i, n) {
                var s = e.Event("blur")
                  , o = n.element;
                s.target = s.currentTarget = o[0],
                t.close(s, !0),
                e("#" + i).remove(),
                o.data("ui-tooltip-title") && (o.attr("title") || o.attr("title", o.data("ui-tooltip-title")),
                o.removeData("ui-tooltip-title"))
            }
            )),
            this.liveRegion.remove()
        }
    }),
    !1 !== e.uiBackCompat && e.widget("ui.tooltip", e.ui.tooltip, {
        options: {
            tooltipClass: null
        },
        _tooltip: function() {
            var e = this._superApply(arguments);
            return this.options.tooltipClass && e.tooltip.addClass(this.options.tooltipClass),
            e
        }
    }),
    e.ui.tooltip
}
)),
function() {
    var e, t, i, n, s, o, a, r, l, u, d, c, h, f, p, m, g, v, b, y, _, w, x, k, C = [].slice, D = [].indexOf || function(e) {
        for (var t = 0, i = this.length; t < i; t++)
            if (t in this && this[t] === e)
                return t;
        return -1
    }
    ;
    (e = window.jQuery || window.Zepto || window.$).payment = {},
    e.payment.fn = {},
    e.fn.payment = function() {
        var t, i;
        return i = arguments[0],
        t = 2 <= arguments.length ? C.call(arguments, 1) : [],
        e.payment.fn[i].apply(this, t)
    }
    ,
    s = /(\d{1,4})/g,
    e.payment.cards = n = [{
        type: "elo",
        patterns: [4011, 4312, 4389, 4514, 4573, 4576, 5041, 5066, 5067, 509, 6277, 6362, 6363, 650, 6516, 6550],
        format: s,
        length: [16],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "visaelectron",
        patterns: [4026, 417500, 4405, 4508, 4844, 4913, 4917],
        format: s,
        length: [16],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "maestro",
        patterns: [5018, 502, 503, 506, 56, 58, 639, 6220, 67],
        format: s,
        length: [12, 13, 14, 15, 16, 17, 18, 19],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "forbrugsforeningen",
        patterns: [600],
        format: s,
        length: [16],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "dankort",
        patterns: [5019],
        format: s,
        length: [16],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "visa",
        patterns: [4],
        format: s,
        length: [13, 16, 19],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "mastercard",
        patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],
        format: s,
        length: [16],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "amex",
        patterns: [34, 37],
        format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/,
        length: [15],
        cvcLength: [3, 4],
        luhn: !0
    }, {
        type: "dinersclub",
        patterns: [30, 36, 38, 39],
        format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/,
        length: [14],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "discover",
        patterns: [60, 64, 65, 622],
        format: s,
        length: [16],
        cvcLength: [3],
        luhn: !0
    }, {
        type: "unionpay",
        patterns: [62, 88],
        format: s,
        length: [16, 17, 18, 19],
        cvcLength: [3],
        luhn: !1
    }, {
        type: "jcb",
        patterns: [35],
        format: s,
        length: [16],
        cvcLength: [3],
        luhn: !0
    }],
    t = function(e) {
        var t, i, s, o, a, r, l;
        for (e = (e + "").replace(/\D/g, ""),
        s = 0,
        a = n.length; s < a; s++)
            for (o = 0,
            r = (l = (t = n[s]).patterns).length; o < r; o++)
                if (i = l[o] + "",
                e.substr(0, i.length) === i)
                    return t
    }
    ,
    i = function(e) {
        var t, i, s;
        for (i = 0,
        s = n.length; i < s; i++)
            if ((t = n[i]).type === e)
                return t
    }
    ,
    h = function(e) {
        var t, i, n, s, o, a;
        for (n = !0,
        s = 0,
        o = 0,
        a = (i = (e + "").split("").reverse()).length; o < a; o++)
            t = i[o],
            t = parseInt(t, 10),
            (n = !n) && (t *= 2),
            t > 9 && (t -= 9),
            s += t;
        return s % 10 == 0
    }
    ,
    c = function(e) {
        var t;
        return null != e.prop("selectionStart") && e.prop("selectionStart") !== e.prop("selectionEnd") || !(null == ("undefined" != typeof document && null !== document && null != (t = document.selection) ? t.createRange : void 0) || !document.selection.createRange().text)
    }
    ,
    x = function(e, t) {
        var i, n, s, o, a;
        try {
            n = t.prop("selectionStart")
        } catch (e) {
            e,
            n = null
        }
        if (o = t.val(),
        t.val(e),
        null !== n && t.is(":focus"))
            return n === o.length && (n = e.length),
            o !== e && (a = o.slice(n - 1, +n + 1 || 9e9),
            i = e.slice(n - 1, +n + 1 || 9e9),
            s = e[n],
            /\d/.test(s) && a === s + " " && i === " " + s && (n += 1)),
            t.prop("selectionStart", n),
            t.prop("selectionEnd", n)
    }
    ,
    v = function(e) {
        var t, i, n, s, o, a, r, l;
        for (null == e && (e = ""),
        n = "\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19",
        s = "0123456789",
        a = "",
        r = 0,
        l = (t = e.split("")).length; r < l; r++)
            i = t[r],
            (o = n.indexOf(i)) > -1 && (i = s[o]),
            a += i;
        return a
    }
    ,
    g = function(t) {
        var i;
        return i = e(t.currentTarget),
        setTimeout((function() {
            var e;
            return e = i.val(),
            e = (e = v(e)).replace(/\D/g, ""),
            x(e, i)
        }
        ))
    }
    ,
    p = function(t) {
        var i;
        return i = e(t.currentTarget),
        setTimeout((function() {
            var t;
            return t = i.val(),
            t = v(t),
            t = e.payment.formatCardNumber(t),
            x(t, i)
        }
        ))
    }
    ,
    r = function(i) {
        var n, s, o, a, r, l, u;
        if (o = String.fromCharCode(i.which),
        /^\d+$/.test(o) && (n = e(i.currentTarget),
        u = n.val(),
        s = t(u + o),
        a = (u.replace(/\D/g, "") + o).length,
        l = 19,
        s && (l = s.length[s.length.length - 1]),
        !(a >= l || null != n.prop("selectionStart") && n.prop("selectionStart") !== u.length)))
            return (r = s && "amex" === s.type ? /^(\d{4}|\d{4}\s\d{6})$/ : /(?:^|\s)(\d{4})$/).test(u) ? (i.preventDefault(),
            setTimeout((function() {
                return n.val(u + " " + o)
            }
            ))) : r.test(u + o) ? (i.preventDefault(),
            setTimeout((function() {
                return n.val(u + o + " ")
            }
            ))) : void 0
    }
    ,
    o = function(t) {
        var i, n;
        if (i = e(t.currentTarget),
        n = i.val(),
        8 === t.which && (null == i.prop("selectionStart") || i.prop("selectionStart") === n.length))
            return /\d\s$/.test(n) ? (t.preventDefault(),
            setTimeout((function() {
                return i.val(n.replace(/\d\s$/, ""))
            }
            ))) : /\s\d?$/.test(n) ? (t.preventDefault(),
            setTimeout((function() {
                return i.val(n.replace(/\d$/, ""))
            }
            ))) : void 0
    }
    ,
    m = function(t) {
        var i;
        return i = e(t.currentTarget),
        setTimeout((function() {
            var t;
            return t = i.val(),
            t = v(t),
            t = e.payment.formatExpiry(t),
            x(t, i)
        }
        ))
    }
    ,
    l = function(t) {
        var i, n, s;
        if (n = String.fromCharCode(t.which),
        /^\d+$/.test(n))
            return i = e(t.currentTarget),
            s = i.val() + n,
            /^\d$/.test(s) && "0" !== s && "1" !== s ? (t.preventDefault(),
            setTimeout((function() {
                return i.val("0" + s + " / ")
            }
            ))) : /^\d\d$/.test(s) ? (t.preventDefault(),
            setTimeout((function() {
                var e, t;
                return e = parseInt(s[0], 10),
                (t = parseInt(s[1], 10)) > 2 && 0 !== e ? i.val("0" + e + " / " + t) : i.val(s + " / ")
            }
            ))) : void 0
    }
    ,
    u = function(t) {
        var i, n, s;
        if (n = String.fromCharCode(t.which),
        /^\d+$/.test(n))
            return s = (i = e(t.currentTarget)).val(),
            /^\d\d$/.test(s) ? i.val(s + " / ") : void 0
    }
    ,
    d = function(t) {
        var i, n, s;
        if ("/" === (s = String.fromCharCode(t.which)) || " " === s)
            return n = (i = e(t.currentTarget)).val(),
            /^\d$/.test(n) && "0" !== n ? i.val("0" + n + " / ") : void 0
    }
    ,
    a = function(t) {
        var i, n;
        if (i = e(t.currentTarget),
        n = i.val(),
        8 === t.which && (null == i.prop("selectionStart") || i.prop("selectionStart") === n.length))
            return /\d\s\/\s$/.test(n) ? (t.preventDefault(),
            setTimeout((function() {
                return i.val(n.replace(/\d\s\/\s$/, ""))
            }
            ))) : void 0
    }
    ,
    f = function(t) {
        var i;
        return i = e(t.currentTarget),
        setTimeout((function() {
            var e;
            return e = i.val(),
            e = (e = v(e)).replace(/\D/g, "").slice(0, 4),
            x(e, i)
        }
        ))
    }
    ,
    w = function(e) {
        var t;
        return !(!e.metaKey && !e.ctrlKey) || 32 !== e.which && (0 === e.which || (e.which < 33 || (t = String.fromCharCode(e.which),
        !!/[\d\s]/.test(t))))
    }
    ,
    y = function(i) {
        var n, s, o, a;
        if (n = e(i.currentTarget),
        o = String.fromCharCode(i.which),
        /^\d+$/.test(o) && !c(n))
            return a = (n.val() + o).replace(/\D/g, ""),
            (s = t(a)) ? a.length <= s.length[s.length.length - 1] : a.length <= 16
    }
    ,
    _ = function(t) {
        var i, n;
        if (i = e(t.currentTarget),
        n = String.fromCharCode(t.which),
        /^\d+$/.test(n) && !c(i))
            return !((i.val() + n).replace(/\D/g, "").length > 6) && void 0
    }
    ,
    b = function(t) {
        var i, n;
        if (i = e(t.currentTarget),
        n = String.fromCharCode(t.which),
        /^\d+$/.test(n) && !c(i))
            return (i.val() + n).length <= 4
    }
    ,
    k = function(t) {
        var i, s, o, a, r;
        if (r = (i = e(t.currentTarget)).val(),
        a = e.payment.cardType(r) || "unknown",
        !i.hasClass(a))
            return s = function() {
                var e, t, i;
                for (i = [],
                e = 0,
                t = n.length; e < t; e++)
                    o = n[e],
                    i.push(o.type);
                return i
            }(),
            i.removeClass("unknown"),
            i.removeClass(s.join(" ")),
            i.addClass(a),
            i.toggleClass("identified", "unknown" !== a),
            i.trigger("payment.cardType", a)
    }
    ,
    e.payment.fn.formatCardCVC = function() {
        return this.on("keypress", w),
        this.on("keypress", b),
        this.on("paste", f),
        this.on("change", f),
        this.on("input", f),
        this
    }
    ,
    e.payment.fn.formatCardExpiry = function() {
        return this.on("keypress", w),
        this.on("keypress", _),
        this.on("keypress", l),
        this.on("keypress", d),
        this.on("keypress", u),
        this.on("keydown", a),
        this.on("change", m),
        this.on("input", m),
        this
    }
    ,
    e.payment.fn.formatCardNumber = function() {
        return this.on("keypress", w),
        this.on("keypress", y),
        this.on("keypress", r),
        this.on("keydown", o),
        this.on("keyup", k),
        this.on("paste", p),
        this.on("blur", p),
        this.on("change", p),
        this.on("input", p),
        this.on("input", k),
        this
    }
    ,
    e.payment.fn.restrictNumeric = function() {
        return this.on("keypress", w),
        this.on("paste", g),
        this.on("change", g),
        this.on("input", g),
        this
    }
    ,
    e.payment.fn.cardExpiryVal = function() {
        return e.payment.cardExpiryVal(e(this).val())
    }
    ,
    e.payment.cardExpiryVal = function(e) {
        var t, i, n;
        return t = (n = e.split(/[\s\/]+/, 2))[0],
        2 === (null != (i = n[1]) ? i.length : void 0) && /^\d+$/.test(i) && (i = (new Date).getFullYear().toString().slice(0, 2) + i),
        {
            month: t = parseInt(t, 10),
            year: i = parseInt(i, 10)
        }
    }
    ,
    e.payment.validateCardNumber = function(e) {
        var i, n;
        return e = (e + "").replace(/\s+|-/g, ""),
        !!/^\d+$/.test(e) && (!!(i = t(e)) && (n = e.length,
        D.call(i.length, n) >= 0 && (!1 === i.luhn || h(e))))
    }
    ,
    e.payment.validateCardExpiry = function(t, i) {
        var n, s, o;
        return "object" == typeof t && "month"in t && (t = (o = t).month,
        i = o.year),
        !(!t || !i) && (t = e.trim(t),
        i = e.trim(i),
        !!/^\d+$/.test(t) && (!!/^\d+$/.test(i) && (1 <= t && t <= 12 && (2 === i.length && (i = i < 70 ? "20" + i : "19" + i),
        4 === i.length && (s = new Date(i,t),
        n = new Date,
        s.setMonth(s.getMonth() - 1),
        s.setMonth(s.getMonth() + 1, 1),
        s > n)))))
    }
    ,
    e.payment.validateCardCVC = function(t, n) {
        var s, o;
        return t = e.trim(t),
        !!/^\d+$/.test(t) && (null != (s = i(n)) ? (o = t.length,
        D.call(s.cvcLength, o) >= 0) : t.length >= 3 && t.length <= 4)
    }
    ,
    e.payment.cardType = function(e) {
        var i;
        return e && (null != (i = t(e)) ? i.type : void 0) || null
    }
    ,
    e.payment.formatCardNumber = function(i) {
        var n, s, o, a;
        return i = i.replace(/\D/g, ""),
        (n = t(i)) ? (o = n.length[n.length.length - 1],
        i = i.slice(0, o),
        n.format.global ? null != (a = i.match(n.format)) ? a.join(" ") : void 0 : null != (s = n.format.exec(i)) ? (s.shift(),
        (s = e.grep(s, (function(e) {
            return e
        }
        ))).join(" ")) : void 0) : i
    }
    ,
    e.payment.formatExpiry = function(e) {
        var t, i, n, s;
        return (i = e.match(/^\D*(\d{1,2})(\D+)?(\d{1,4})?/)) ? (t = i[1] || "",
        n = i[2] || "",
        (s = i[3] || "").length > 0 ? n = " / " : " /" === n ? (t = t.substring(0, 1),
        n = "") : 2 === t.length || n.length > 0 ? n = " / " : 1 === t.length && "0" !== t && "1" !== t && (t = "0" + t,
        n = " / "),
        t + n + s) : ""
    }
}
.call(this),
"undefined" == typeof jQuery)
    throw new Error("Bootstrap's JavaScript requires jQuery");
!function() {
    "use strict";
    var e = jQuery.fn.jquery.split(" ")[0].split(".");
    if (e[0] < 2 && e[1] < 9 || 1 == e[0] && 9 == e[1] && e[2] < 1 || e[0] > 3)
        throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")
}(),
function(e) {
    "use strict";
    function t() {
        var e = document.createElement("bootstrap")
          , t = {
            WebkitTransition: "webkitTransitionEnd",
            MozTransition: "transitionend",
            OTransition: "oTransitionEnd otransitionend",
            transition: "transitionend"
        };
        for (var i in t)
            if (void 0 !== e.style[i])
                return {
                    end: t[i]
                };
        return !1
    }
    e.fn.emulateTransitionEnd = function(t) {
        var i = !1
          , n = this;
        return e(this).one("bsTransitionEnd", (function() {
            i = !0
        }
        )),
        setTimeout((function() {
            i || e(n).trigger(e.support.transition.end)
        }
        ), t),
        this
    }
    ,
    e((function() {
        e.support.transition = t(),
        e.support.transition && (e.event.special.bsTransitionEnd = {
            bindType: e.support.transition.end,
            delegateType: e.support.transition.end,
            handle: function(t) {
                if (e(t.target).is(this))
                    return t.handleObj.handler.apply(this, arguments)
            }
        })
    }
    ))
}(jQuery),
function(e) {
    "use strict";
    function t(t) {
        return this.each((function() {
            var i = e(this)
              , s = i.data("bs.alert");
            s || i.data("bs.alert", s = new n(this)),
            "string" == typeof t && s[t].call(i)
        }
        ))
    }
    var i = '[data-dismiss="alert"]'
      , n = function(t) {
        e(t).on("click", i, this.close)
    };
    n.VERSION = "3.4.1",
    n.TRANSITION_DURATION = 150,
    n.prototype.close = function(t) {
        function i() {
            a.detach().trigger("closed.bs.alert").remove()
        }
        var s = e(this)
          , o = s.attr("data-target");
        o || (o = (o = s.attr("href")) && o.replace(/.*(?=#[^\s]*$)/, "")),
        o = "#" === o ? [] : o;
        var a = e(document).find(o);
        t && t.preventDefault(),
        a.length || (a = s.closest(".alert")),
        a.trigger(t = e.Event("close.bs.alert")),
        t.isDefaultPrevented() || (a.removeClass("in"),
        e.support.transition && a.hasClass("fade") ? a.one("bsTransitionEnd", i).emulateTransitionEnd(n.TRANSITION_DURATION) : i())
    }
    ;
    var s = e.fn.alert;
    e.fn.alert = t,
    e.fn.alert.Constructor = n,
    e.fn.alert.noConflict = function() {
        return e.fn.alert = s,
        this
    }
    ,
    e(document).on("click.bs.alert.data-api", i, n.prototype.close)
}(jQuery),
function(e) {
    "use strict";
    function t(t) {
        return this.each((function() {
            var n = e(this)
              , s = n.data("bs.button")
              , o = "object" == typeof t && t;
            s || n.data("bs.button", s = new i(this,o)),
            "toggle" == t ? s.toggle() : t && s.setState(t)
        }
        ))
    }
    var i = function(t, n) {
        this.$element = e(t),
        this.options = e.extend({}, i.DEFAULTS, n),
        this.isLoading = !1
    };
    i.VERSION = "3.4.1",
    i.DEFAULTS = {
        loadingText: "loading..."
    },
    i.prototype.setState = function(t) {
        var i = "disabled"
          , n = this.$element
          , s = n.is("input") ? "val" : "html"
          , o = n.data();
        t += "Text",
        null == o.resetText && n.data("resetText", n[s]()),
        setTimeout(e.proxy((function() {
            n[s](null == o[t] ? this.options[t] : o[t]),
            "loadingText" == t ? (this.isLoading = !0,
            n.addClass(i).attr(i, i).prop(i, !0)) : this.isLoading && (this.isLoading = !1,
            n.removeClass(i).removeAttr(i).prop(i, !1))
        }
        ), this), 0)
    }
    ,
    i.prototype.toggle = function() {
        var e = !0
          , t = this.$element.closest('[data-toggle="buttons"]');
        if (t.length) {
            var i = this.$element.find("input");
            "radio" == i.prop("type") ? (i.prop("checked") && (e = !1),
            t.find(".active").removeClass("active"),
            this.$element.addClass("active")) : "checkbox" == i.prop("type") && (i.prop("checked") !== this.$element.hasClass("active") && (e = !1),
            this.$element.toggleClass("active")),
            i.prop("checked", this.$element.hasClass("active")),
            e && i.trigger("change")
        } else
            this.$element.attr("aria-pressed", !this.$element.hasClass("active")),
            this.$element.toggleClass("active")
    }
    ;
    var n = e.fn.button;
    e.fn.button = t,
    e.fn.button.Constructor = i,
    e.fn.button.noConflict = function() {
        return e.fn.button = n,
        this
    }
    ,
    e(document).on("click.bs.button.data-api", '[data-toggle^="button"]', (function(i) {
        var n = e(i.target).closest(".btn");
        t.call(n, "toggle"),
        e(i.target).is('input[type="radio"], input[type="checkbox"]') || (i.preventDefault(),
        n.is("input,button") ? n.trigger("focus") : n.find("input:visible,button:visible").first().trigger("focus"))
    }
    )).on("focus.bs.button.data-api blur.bs.button.data-api", '[data-toggle^="button"]', (function(t) {
        e(t.target).closest(".btn").toggleClass("focus", /^focus(in)?$/.test(t.type))
    }
    ))
}(jQuery),
function(e) {
    "use strict";
    function t(t) {
        return this.each((function() {
            var n = e(this)
              , s = n.data("bs.carousel")
              , o = e.extend({}, i.DEFAULTS, n.data(), "object" == typeof t && t)
              , a = "string" == typeof t ? t : o.slide;
            s || n.data("bs.carousel", s = new i(this,o)),
            "number" == typeof t ? s.to(t) : a ? s[a]() : o.interval && s.pause().cycle()
        }
        ))
    }
    var i = function(t, i) {
        this.$element = e(t),
        this.$indicators = this.$element.find(".carousel-indicators"),
        this.options = i,
        this.paused = null,
        this.sliding = null,
        this.interval = null,
        this.$active = null,
        this.$items = null,
        this.options.keyboard && this.$element.on("keydown.bs.carousel", e.proxy(this.keydown, this)),
        "hover" == this.options.pause && !("ontouchstart"in document.documentElement) && this.$element.on("mouseenter.bs.carousel", e.proxy(this.pause, this)).on("mouseleave.bs.carousel", e.proxy(this.cycle, this))
    };
    i.VERSION = "3.4.1",
    i.TRANSITION_DURATION = 600,
    i.DEFAULTS = {
        interval: 5e3,
        pause: "hover",
        wrap: !0,
        keyboard: !0
    },
    i.prototype.keydown = function(e) {
        if (!/input|textarea/i.test(e.target.tagName)) {
            switch (e.which) {
            case 37:
                this.prev();
                break;
            case 39:
                this.next();
                break;
            default:
                return
            }
            e.preventDefault()
        }
    }
    ,
    i.prototype.cycle = function(t) {
        return t || (this.paused = !1),
        this.interval && clearInterval(this.interval),
        this.options.interval && !this.paused && (this.interval = setInterval(e.proxy(this.next, this), this.options.interval)),
        this
    }
    ,
    i.prototype.getItemIndex = function(e) {
        return this.$items = e.parent().children(".item"),
        this.$items.index(e || this.$active)
    }
    ,
    i.prototype.getItemForDirection = function(e, t) {
        var i = this.getItemIndex(t);
        if (("prev" == e && 0 === i || "next" == e && i == this.$items.length - 1) && !this.options.wrap)
            return t;
        var n = (i + ("prev" == e ? -1 : 1)) % this.$items.length;
        return this.$items.eq(n)
    }
    ,
    i.prototype.to = function(e) {
        var t = this
          , i = this.getItemIndex(this.$active = this.$element.find(".item.active"));
        if (!(e > this.$items.length - 1 || e < 0))
            return this.sliding ? this.$element.one("slid.bs.carousel", (function() {
                t.to(e)
            }
            )) : i == e ? this.pause().cycle() : this.slide(e > i ? "next" : "prev", this.$items.eq(e))
    }
    ,
    i.prototype.pause = function(t) {
        return t || (this.paused = !0),
        this.$element.find(".next, .prev").length && e.support.transition && (this.$element.trigger(e.support.transition.end),
        this.cycle(!0)),
        this.interval = clearInterval(this.interval),
        this
    }
    ,
    i.prototype.next = function() {
        if (!this.sliding)
            return this.slide("next")
    }
    ,
    i.prototype.prev = function() {
        if (!this.sliding)
            return this.slide("prev")
    }
    ,
    i.prototype.slide = function(t, n) {
        var s = this.$element.find(".item.active")
          , o = n || this.getItemForDirection(t, s)
          , a = this.interval
          , r = "next" == t ? "left" : "right"
          , l = this;
        if (o.hasClass("active"))
            return this.sliding = !1;
        var u = o[0]
          , d = e.Event("slide.bs.carousel", {
            relatedTarget: u,
            direction: r
        });
        if (this.$element.trigger(d),
        !d.isDefaultPrevented()) {
            if (this.sliding = !0,
            a && this.pause(),
            this.$indicators.length) {
                this.$indicators.find(".active").removeClass("active");
                var c = e(this.$indicators.children()[this.getItemIndex(o)]);
                c && c.addClass("active")
            }
            var h = e.Event("slid.bs.carousel", {
                relatedTarget: u,
                direction: r
            });
            return e.support.transition && this.$element.hasClass("slide") ? (o.addClass(t),
            "object" == typeof o && o.length && o[0].offsetWidth,
            s.addClass(r),
            o.addClass(r),
            s.one("bsTransitionEnd", (function() {
                o.removeClass([t, r].join(" ")).addClass("active"),
                s.removeClass(["active", r].join(" ")),
                l.sliding = !1,
                setTimeout((function() {
                    l.$element.trigger(h)
                }
                ), 0)
            }
            )).emulateTransitionEnd(i.TRANSITION_DURATION)) : (s.removeClass("active"),
            o.addClass("active"),
            this.sliding = !1,
            this.$element.trigger(h)),
            a && this.cycle(),
            this
        }
    }
    ;
    var n = e.fn.carousel;
    e.fn.carousel = t,
    e.fn.carousel.Constructor = i,
    e.fn.carousel.noConflict = function() {
        return e.fn.carousel = n,
        this
    }
    ;
    var s = function(i) {
        var n = e(this)
          , s = n.attr("href");
        s && (s = s.replace(/.*(?=#[^\s]+$)/, ""));
        var o = n.attr("data-target") || s
          , a = e(document).find(o);
        if (a.hasClass("carousel")) {
            var r = e.extend({}, a.data(), n.data())
              , l = n.attr("data-slide-to");
            l && (r.interval = !1),
            t.call(a, r),
            l && a.data("bs.carousel").to(l),
            i.preventDefault()
        }
    };
    e(document).on("click.bs.carousel.data-api", "[data-slide]", s).on("click.bs.carousel.data-api", "[data-slide-to]", s),
    e(window).on("load", (function() {
        e('[data-ride="carousel"]').each((function() {
            var i = e(this);
            t.call(i, i.data())
        }
        ))
    }
    ))
}(jQuery),
function(e) {
    "use strict";
    function t(t) {
        var i, n = t.attr("data-target") || (i = t.attr("href")) && i.replace(/.*(?=#[^\s]+$)/, "");
        return e(document).find(n)
    }
    function i(t) {
        return this.each((function() {
            var i = e(this)
              , s = i.data("bs.collapse")
              , o = e.extend({}, n.DEFAULTS, i.data(), "object" == typeof t && t);
            !s && o.toggle && /show|hide/.test(t) && (o.toggle = !1),
            s || i.data("bs.collapse", s = new n(this,o)),
            "string" == typeof t && s[t]()
        }
        ))
    }
    var n = function(t, i) {
        this.$element = e(t),
        this.options = e.extend({}, n.DEFAULTS, i),
        this.$trigger = e('[data-toggle="collapse"][href="#' + t.id + '"],[data-toggle="collapse"][data-target="#' + t.id + '"]'),
        this.transitioning = null,
        this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger),
        this.options.toggle && this.toggle()
    };
    n.VERSION = "3.4.1",
    n.TRANSITION_DURATION = 350,
    n.DEFAULTS = {
        toggle: !0
    },
    n.prototype.dimension = function() {
        return this.$element.hasClass("width") ? "width" : "height"
    }
    ,
    n.prototype.show = function() {
        if (!this.transitioning && !this.$element.hasClass("in")) {
            var t, s = this.$parent && this.$parent.children(".panel").children(".in, .collapsing");
            if (!(s && s.length && (t = s.data("bs.collapse")) && t.transitioning)) {
                var o = e.Event("show.bs.collapse");
                if (this.$element.trigger(o),
                !o.isDefaultPrevented()) {
                    s && s.length && (i.call(s, "hide"),
                    t || s.data("bs.collapse", null));
                    var a = this.dimension();
                    this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded", !0),
                    this.$trigger.removeClass("collapsed").attr("aria-expanded", !0),
                    this.transitioning = 1;
                    var r = function() {
                        this.$element.removeClass("collapsing").addClass("collapse in")[a](""),
                        this.transitioning = 0,
                        this.$element.trigger("shown.bs.collapse")
                    };
                    if (!e.support.transition)
                        return r.call(this);
                    var l = e.camelCase(["scroll", a].join("-"));
                    this.$element.one("bsTransitionEnd", e.proxy(r, this)).emulateTransitionEnd(n.TRANSITION_DURATION)[a](this.$element[0][l])
                }
            }
        }
    }
    ,
    n.prototype.hide = function() {
        if (!this.transitioning && this.$element.hasClass("in")) {
            var t = e.Event("hide.bs.collapse");
            if (this.$element.trigger(t),
            !t.isDefaultPrevented()) {
                var i = this.dimension();
                this.$element[i](this.$element[i]())[0].offsetHeight,
                this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1),
                this.$trigger.addClass("collapsed").attr("aria-expanded", !1),
                this.transitioning = 1;
                var s = function() {
                    this.transitioning = 0,
                    this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")
                };
                if (!e.support.transition)
                    return s.call(this);
                this.$element[i](0).one("bsTransitionEnd", e.proxy(s, this)).emulateTransitionEnd(n.TRANSITION_DURATION)
            }
        }
    }
    ,
    n.prototype.toggle = function() {
        this[this.$element.hasClass("in") ? "hide" : "show"]()
    }
    ,
    n.prototype.getParent = function() {
        return e(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(e.proxy((function(i, n) {
            var s = e(n);
            this.addAriaAndCollapsedClass(t(s), s)
        }
        ), this)).end()
    }
    ,
    n.prototype.addAriaAndCollapsedClass = function(e, t) {
        var i = e.hasClass("in");
        e.attr("aria-expanded", i),
        t.toggleClass("collapsed", !i).attr("aria-expanded", i)
    }
    ;
    var s = e.fn.collapse;
    e.fn.collapse = i,
    e.fn.collapse.Constructor = n,
    e.fn.collapse.noConflict = function() {
        return e.fn.collapse = s,
        this
    }
    ,
    e(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', (function(n) {
        var s = e(this);
        s.attr("data-target") || n.preventDefault();
        var o = t(s)
          , a = o.data("bs.collapse") ? "toggle" : s.data();
        i.call(o, a)
    }
    ))
}(jQuery),
function(e) {
    "use strict";
    function t(t) {
        var i = t.attr("data-target");
        i || (i = (i = t.attr("href")) && /#[A-Za-z]/.test(i) && i.replace(/.*(?=#[^\s]*$)/, ""));
        var n = "#" !== i ? e(document).find(i) : null;
        return n && n.length ? n : t.parent()
    }
    function i(i) {
        i && 3 === i.which || (e(s).remove(),
        e(o).each((function() {
            var n = e(this)
              , s = t(n)
              , o = {
                relatedTarget: this
            };
            s.hasClass("open") && (i && "click" == i.type && /input|textarea/i.test(i.target.tagName) && e.contains(s[0], i.target) || (s.trigger(i = e.Event("hide.bs.dropdown", o)),
            i.isDefaultPrevented() || (n.attr("aria-expanded", "false"),
            s.removeClass("open").trigger(e.Event("hidden.bs.dropdown", o)))))
        }
        )))
    }
    function n(t) {
        return this.each((function() {
            var i = e(this)
              , n = i.data("bs.dropdown");
            n || i.data("bs.dropdown", n = new a(this)),
            "string" == typeof t && n[t].call(i)
        }
        ))
    }
    var s = ".dropdown-backdrop"
      , o = '[data-toggle="dropdown"]'
      , a = function(t) {
        e(t).on("click.bs.dropdown", this.toggle)
    };
    a.VERSION = "3.4.1",
    a.prototype.toggle = function(n) {
        var s = e(this);
        if (!s.is(".disabled, :disabled")) {
            var o = t(s)
              , a = o.hasClass("open");
            if (i(),
            !a) {
                "ontouchstart"in document.documentElement && !o.closest(".navbar-nav").length && e(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(e(this)).on("click", i);
                var r = {
                    relatedTarget: this
                };
                if (o.trigger(n = e.Event("show.bs.dropdown", r)),
                n.isDefaultPrevented())
                    return;
                s.trigger("focus").attr("aria-expanded", "true"),
                o.toggleClass("open").trigger(e.Event("shown.bs.dropdown", r))
            }
            return !1
        }
    }
    ,
    a.prototype.keydown = function(i) {
        if (/(38|40|27|32)/.test(i.which) && !/input|textarea/i.test(i.target.tagName)) {
            var n = e(this);
            if (i.preventDefault(),
            i.stopPropagation(),
            !n.is(".disabled, :disabled")) {
                var s = t(n)
                  , a = s.hasClass("open");
                if (!a && 27 != i.which || a && 27 == i.which)
                    return 27 == i.which && s.find(o).trigger("focus"),
                    n.trigger("click");
                var r = " li:not(.disabled):visible a"
                  , l = s.find(".dropdown-menu" + r);
                if (l.length) {
                    var u = l.index(i.target);
                    38 == i.which && u > 0 && u--,
                    40 == i.which && u < l.length - 1 && u++,
                    ~u || (u = 0),
                    l.eq(u).trigger("focus")
                }
            }
        }
    }
    ;
    var r = e.fn.dropdown;
    e.fn.dropdown = n,
    e.fn.dropdown.Constructor = a,
    e.fn.dropdown.noConflict = function() {
        return e.fn.dropdown = r,
        this
    }
    ,
    e(document).on("click.bs.dropdown.data-api", i).on("click.bs.dropdown.data-api", ".dropdown form", (function(e) {
        e.stopPropagation()
    }
    )).on("click.bs.dropdown.data-api", o, a.prototype.toggle).on("keydown.bs.dropdown.data-api", o, a.prototype.keydown).on("keydown.bs.dropdown.data-api", ".dropdown-menu", a.prototype.keydown)
}(jQuery),
function(e) {
    "use strict";
    function t(t, n) {
        return this.each((function() {
            var s = e(this)
              , o = s.data("bs.modal")
              , a = e.extend({}, i.DEFAULTS, s.data(), "object" == typeof t && t);
            o || s.data("bs.modal", o = new i(this,a)),
            "string" == typeof t ? o[t](n) : a.show && o.show(n)
        }
        ))
    }
    var i = function(t, i) {
        this.options = i,
        this.$body = e(document.body),
        this.$element = e(t),
        this.$dialog = this.$element.find(".modal-dialog"),
        this.$backdrop = null,
        this.isShown = null,
        this.originalBodyPad = null,
        this.scrollbarWidth = 0,
        this.ignoreBackdropClick = !1,
        this.fixedContent = ".navbar-fixed-top, .navbar-fixed-bottom",
        this.options.remote && this.$element.find(".modal-content").load(this.options.remote, e.proxy((function() {
            this.$element.trigger("loaded.bs.modal")
        }
        ), this))
    };
    i.VERSION = "3.4.1",
    i.TRANSITION_DURATION = 300,
    i.BACKDROP_TRANSITION_DURATION = 150,
    i.DEFAULTS = {
        backdrop: !0,
        keyboard: !0,
        show: !0
    },
    i.prototype.toggle = function(e) {
        return this.isShown ? this.hide() : this.show(e)
    }
    ,
    i.prototype.show = function(t) {
        var n = this
          , s = e.Event("show.bs.modal", {
            relatedTarget: t
        });
        this.$element.trigger(s),
        this.isShown || s.isDefaultPrevented() || (this.isShown = !0,
        this.checkScrollbar(),
        this.setScrollbar(),
        this.$body.addClass("modal-open"),
        this.escape(),
        this.resize(),
        this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', e.proxy(this.hide, this)),
        this.$dialog.on("mousedown.dismiss.bs.modal", (function() {
            n.$element.one("mouseup.dismiss.bs.modal", (function(t) {
                e(t.target).is(n.$element) && (n.ignoreBackdropClick = !0)
            }
            ))
        }
        )),
        this.backdrop((function() {
            var s = e.support.transition && n.$element.hasClass("fade");
            n.$element.parent().length || n.$element.appendTo(n.$body),
            n.$element.show().scrollTop(0),
            n.adjustDialog(),
            s && n.$element[0].offsetWidth,
            n.$element.addClass("in"),
            n.enforceFocus();
            var o = e.Event("shown.bs.modal", {
                relatedTarget: t
            });
            s ? n.$dialog.one("bsTransitionEnd", (function() {
                n.$element.trigger("focus").trigger(o)
            }
            )).emulateTransitionEnd(i.TRANSITION_DURATION) : n.$element.trigger("focus").trigger(o)
        }
        )))
    }
    ,
    i.prototype.hide = function(t) {
        t && t.preventDefault(),
        t = e.Event("hide.bs.modal"),
        this.$element.trigger(t),
        this.isShown && !t.isDefaultPrevented() && (this.isShown = !1,
        this.escape(),
        this.resize(),
        e(document).off("focusin.bs.modal"),
        this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),
        this.$dialog.off("mousedown.dismiss.bs.modal"),
        e.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", e.proxy(this.hideModal, this)).emulateTransitionEnd(i.TRANSITION_DURATION) : this.hideModal())
    }
    ,
    i.prototype.enforceFocus = function() {
        e(document).off("focusin.bs.modal").on("focusin.bs.modal", e.proxy((function(e) {
            document === e.target || this.$element[0] === e.target || this.$element.has(e.target).length || this.$element.trigger("focus")
        }
        ), this))
    }
    ,
    i.prototype.escape = function() {
        this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", e.proxy((function(e) {
            27 == e.which && this.hide()
        }
        ), this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal")
    }
    ,
    i.prototype.resize = function() {
        this.isShown ? e(window).on("resize.bs.modal", e.proxy(this.handleUpdate, this)) : e(window).off("resize.bs.modal")
    }
    ,
    i.prototype.hideModal = function() {
        var e = this;
        this.$element.hide(),
        this.backdrop((function() {
            e.$body.removeClass("modal-open"),
            e.resetAdjustments(),
            e.resetScrollbar(),
            e.$element.trigger("hidden.bs.modal")
        }
        ))
    }
    ,
    i.prototype.removeBackdrop = function() {
        this.$backdrop && this.$backdrop.remove(),
        this.$backdrop = null
    }
    ,
    i.prototype.backdrop = function(t) {
        var n = this
          , s = this.$element.hasClass("fade") ? "fade" : "";
        if (this.isShown && this.options.backdrop) {
            var o = e.support.transition && s;
            if (this.$backdrop = e(document.createElement("div")).addClass("modal-backdrop " + s).appendTo(this.$body),
            this.$element.on("click.dismiss.bs.modal", e.proxy((function(e) {
                this.ignoreBackdropClick ? this.ignoreBackdropClick = !1 : e.target === e.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus() : this.hide())
            }
            ), this)),
            o && this.$backdrop[0].offsetWidth,
            this.$backdrop.addClass("in"),
            !t)
                return;
            o ? this.$backdrop.one("bsTransitionEnd", t).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION) : t()
        } else if (!this.isShown && this.$backdrop) {
            this.$backdrop.removeClass("in");
            var a = function() {
                n.removeBackdrop(),
                t && t()
            };
            e.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION) : a()
        } else
            t && t()
    }
    ,
    i.prototype.handleUpdate = function() {
        this.adjustDialog()
    }
    ,
    i.prototype.adjustDialog = function() {
        var e = this.$element[0].scrollHeight > document.documentElement.clientHeight;
        this.$element.css({
            paddingLeft: !this.bodyIsOverflowing && e ? this.scrollbarWidth : "",
            paddingRight: this.bodyIsOverflowing && !e ? this.scrollbarWidth : ""
        })
    }
    ,
    i.prototype.resetAdjustments = function() {
        this.$element.css({
            paddingLeft: "",
            paddingRight: ""
        })
    }
    ,
    i.prototype.checkScrollbar = function() {
        var e = window.innerWidth;
        if (!e) {
            var t = document.documentElement.getBoundingClientRect();
            e = t.right - Math.abs(t.left)
        }
        this.bodyIsOverflowing = document.body.clientWidth < e,
        this.scrollbarWidth = this.measureScrollbar()
    }
    ,
    i.prototype.setScrollbar = function() {
        var t = parseInt(this.$body.css("padding-right") || 0, 10);
        this.originalBodyPad = document.body.style.paddingRight || "";
        var i = this.scrollbarWidth;
        this.bodyIsOverflowing && (this.$body.css("padding-right", t + i),
        e(this.fixedContent).each((function(t, n) {
            var s = n.style.paddingRight
              , o = e(n).css("padding-right");
            e(n).data("padding-right", s).css("padding-right", parseFloat(o) + i + "px")
        }
        )))
    }
    ,
    i.prototype.resetScrollbar = function() {
        this.$body.css("padding-right", this.originalBodyPad),
        e(this.fixedContent).each((function(t, i) {
            var n = e(i).data("padding-right");
            e(i).removeData("padding-right"),
            i.style.paddingRight = n || ""
        }
        ))
    }
    ,
    i.prototype.measureScrollbar = function() {
        var e = document.createElement("div");
        e.className = "modal-scrollbar-measure",
        this.$body.append(e);
        var t = e.offsetWidth - e.clientWidth;
        return this.$body[0].removeChild(e),
        t
    }
    ;
    var n = e.fn.modal;
    e.fn.modal = t,
    e.fn.modal.Constructor = i,
    e.fn.modal.noConflict = function() {
        return e.fn.modal = n,
        this
    }
    ,
    e(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', (function(i) {
        var n = e(this)
          , s = n.attr("href")
          , o = n.attr("data-target") || s && s.replace(/.*(?=#[^\s]+$)/, "")
          , a = e(document).find(o)
          , r = a.data("bs.modal") ? "toggle" : e.extend({
            remote: !/#/.test(s) && s
        }, a.data(), n.data());
        n.is("a") && i.preventDefault(),
        a.one("show.bs.modal", (function(e) {
            e.isDefaultPrevented() || a.one("hidden.bs.modal", (function() {
                n.is(":visible") && n.trigger("focus")
            }
            ))
        }
        )),
        t.call(a, r, this)
    }
    ))
}(jQuery),
function(e) {
    "use strict";
    function t(t, i) {
        var n = t.nodeName.toLowerCase();
        if (-1 !== e.inArray(n, i))
            return -1 === e.inArray(n, o) || Boolean(t.nodeValue.match(r) || t.nodeValue.match(l));
        for (var s = e(i).filter((function(e, t) {
            return t instanceof RegExp
        }
        )), a = 0, u = s.length; a < u; a++)
            if (n.match(s[a]))
                return !0;
        return !1
    }
    function i(i, n, s) {
        if (0 === i.length)
            return i;
        if (s && "function" == typeof s)
            return s(i);
        if (!document.implementation || !document.implementation.createHTMLDocument)
            return i;
        var o = document.implementation.createHTMLDocument("sanitization");
        o.body.innerHTML = i;
        for (var a = e.map(n, (function(e, t) {
            return t
        }
        )), r = e(o.body).find("*"), l = 0, u = r.length; l < u; l++) {
            var d = r[l]
              , c = d.nodeName.toLowerCase();
            if (-1 !== e.inArray(c, a))
                for (var h = e.map(d.attributes, (function(e) {
                    return e
                }
                )), f = [].concat(n["*"] || [], n[c] || []), p = 0, m = h.length; p < m; p++)
                    t(h[p], f) || d.removeAttribute(h[p].nodeName);
            else
                d.parentNode.removeChild(d)
        }
        return o.body.innerHTML
    }
    function n(t) {
        return this.each((function() {
            var i = e(this)
              , n = i.data("bs.tooltip")
              , s = "object" == typeof t && t;
            !n && /destroy|hide/.test(t) || (n || i.data("bs.tooltip", n = new u(this,s)),
            "string" == typeof t && n[t]())
        }
        ))
    }
    var s = ["sanitize", "whiteList", "sanitizeFn"]
      , o = ["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]
      , a = {
        "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i],
        a: ["target", "href", "title", "rel"],
        area: [],
        b: [],
        br: [],
        col: [],
        code: [],
        div: [],
        em: [],
        hr: [],
        h1: [],
        h2: [],
        h3: [],
        h4: [],
        h5: [],
        h6: [],
        i: [],
        img: ["src", "alt", "title", "width", "height"],
        li: [],
        ol: [],
        p: [],
        pre: [],
        s: [],
        small: [],
        span: [],
        sub: [],
        sup: [],
        strong: [],
        u: [],
        ul: []
    }
      , r = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
      , l = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
      , u = function(e, t) {
        this.type = null,
        this.options = null,
        this.enabled = null,
        this.timeout = null,
        this.hoverState = null,
        this.$element = null,
        this.inState = null,
        this.init("tooltip", e, t)
    };
    u.VERSION = "3.4.1",
    u.TRANSITION_DURATION = 150,
    u.DEFAULTS = {
        animation: !0,
        placement: "top",
        selector: !1,
        template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
        trigger: "hover focus",
        title: "",
        delay: 0,
        html: !1,
        container: !1,
        viewport: {
            selector: "body",
            padding: 0
        },
        sanitize: !0,
        sanitizeFn: null,
        whiteList: a
    },
    u.prototype.init = function(t, i, n) {
        if (this.enabled = !0,
        this.type = t,
        this.$element = e(i),
        this.options = this.getOptions(n),
        this.$viewport = this.options.viewport && e(document).find(e.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : this.options.viewport.selector || this.options.viewport),
        this.inState = {
            click: !1,
            hover: !1,
            focus: !1
        },
        this.$element[0]instanceof document.constructor && !this.options.selector)
            throw new Error("`selector` option must be specified when initializing " + this.type + " on the window.document object!");
        for (var s = this.options.trigger.split(" "), o = s.length; o--; ) {
            var a = s[o];
            if ("click" == a)
                this.$element.on("click." + this.type, this.options.selector, e.proxy(this.toggle, this));
            else if ("manual" != a) {
                var r = "hover" == a ? "mouseenter" : "focusin"
                  , l = "hover" == a ? "mouseleave" : "focusout";
                this.$element.on(r + "." + this.type, this.options.selector, e.proxy(this.enter, this)),
                this.$element.on(l + "." + this.type, this.options.selector, e.proxy(this.leave, this))
            }
        }
        this.options.selector ? this._options = e.extend({}, this.options, {
            trigger: "manual",
            selector: ""
        }) : this.fixTitle()
    }
    ,
    u.prototype.getDefaults = function() {
        return u.DEFAULTS
    }
    ,
    u.prototype.getOptions = function(t) {
        var n = this.$element.data();
        for (var o in n)
            n.hasOwnProperty(o) && -1 !== e.inArray(o, s) && delete n[o];
        return (t = e.extend({}, this.getDefaults(), n, t)).delay && "number" == typeof t.delay && (t.delay = {
            show: t.delay,
            hide: t.delay
        }),
        t.sanitize && (t.template = i(t.template, t.whiteList, t.sanitizeFn)),
        t
    }
    ,
    u.prototype.getDelegateOptions = function() {
        var t = {}
          , i = this.getDefaults();
        return this._options && e.each(this._options, (function(e, n) {
            i[e] != n && (t[e] = n)
        }
        )),
        t
    }
    ,
    u.prototype.enter = function(t) {
        var i = t instanceof this.constructor ? t : e(t.currentTarget).data("bs." + this.type);
        if (i || (i = new this.constructor(t.currentTarget,this.getDelegateOptions()),
        e(t.currentTarget).data("bs." + this.type, i)),
        t instanceof e.Event && (i.inState["focusin" == t.type ? "focus" : "hover"] = !0),
        i.tip().hasClass("in") || "in" == i.hoverState)
            i.hoverState = "in";
        else {
            if (clearTimeout(i.timeout),
            i.hoverState = "in",
            !i.options.delay || !i.options.delay.show)
                return i.show();
            i.timeout = setTimeout((function() {
                "in" == i.hoverState && i.show()
            }
            ), i.options.delay.show)
        }
    }
    ,
    u.prototype.isInStateTrue = function() {
        for (var e in this.inState)
            if (this.inState[e])
                return !0;
        return !1
    }
    ,
    u.prototype.leave = function(t) {
        var i = t instanceof this.constructor ? t : e(t.currentTarget).data("bs." + this.type);
        if (i || (i = new this.constructor(t.currentTarget,this.getDelegateOptions()),
        e(t.currentTarget).data("bs." + this.type, i)),
        t instanceof e.Event && (i.inState["focusout" == t.type ? "focus" : "hover"] = !1),
        !i.isInStateTrue()) {
            if (clearTimeout(i.timeout),
            i.hoverState = "out",
            !i.options.delay || !i.options.delay.hide)
                return i.hide();
            i.timeout = setTimeout((function() {
                "out" == i.hoverState && i.hide()
            }
            ), i.options.delay.hide)
        }
    }
    ,
    u.prototype.show = function() {
        var t = e.Event("show.bs." + this.type);
        if (this.hasContent() && this.enabled) {
            this.$element.trigger(t);
            var i = e.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);
            if (t.isDefaultPrevented() || !i)
                return;
            var n = this
              , s = this.tip()
              , o = this.getUID(this.type);
            this.setContent(),
            s.attr("id", o),
            this.$element.attr("aria-describedby", o),
            this.options.animation && s.addClass("fade");
            var a = "function" == typeof this.options.placement ? this.options.placement.call(this, s[0], this.$element[0]) : this.options.placement
              , r = /\s?auto?\s?/i
              , l = r.test(a);
            l && (a = a.replace(r, "") || "top"),
            s.detach().css({
                top: 0,
                left: 0,
                display: "block"
            }).addClass(a).data("bs." + this.type, this),
            this.options.container ? s.appendTo(e(document).find(this.options.container)) : s.insertAfter(this.$element),
            this.$element.trigger("inserted.bs." + this.type);
            var d = this.getPosition()
              , c = s[0].offsetWidth
              , h = s[0].offsetHeight;
            if (l) {
                var f = a
                  , p = this.getPosition(this.$viewport);
                a = "bottom" == a && d.bottom + h > p.bottom ? "top" : "top" == a && d.top - h < p.top ? "bottom" : "right" == a && d.right + c > p.width ? "left" : "left" == a && d.left - c < p.left ? "right" : a,
                s.removeClass(f).addClass(a)
            }
            var m = this.getCalculatedOffset(a, d, c, h);
            this.applyPlacement(m, a);
            var g = function() {
                var e = n.hoverState;
                n.$element.trigger("shown.bs." + n.type),
                n.hoverState = null,
                "out" == e && n.leave(n)
            };
            e.support.transition && this.$tip.hasClass("fade") ? s.one("bsTransitionEnd", g).emulateTransitionEnd(u.TRANSITION_DURATION) : g()
        }
    }
    ,
    u.prototype.applyPlacement = function(t, i) {
        var n = this.tip()
          , s = n[0].offsetWidth
          , o = n[0].offsetHeight
          , a = parseInt(n.css("margin-top"), 10)
          , r = parseInt(n.css("margin-left"), 10);
        isNaN(a) && (a = 0),
        isNaN(r) && (r = 0),
        t.top += a,
        t.left += r,
        e.offset.setOffset(n[0], e.extend({
            using: function(e) {
                n.css({
                    top: Math.round(e.top),
                    left: Math.round(e.left)
                })
            }
        }, t), 0),
        n.addClass("in");
        var l = n[0].offsetWidth
          , u = n[0].offsetHeight;
        "top" == i && u != o && (t.top = t.top + o - u);
        var d = this.getViewportAdjustedDelta(i, t, l, u);
        d.left ? t.left += d.left : t.top += d.top;
        var c = /top|bottom/.test(i)
          , h = c ? 2 * d.left - s + l : 2 * d.top - o + u
          , f = c ? "offsetWidth" : "offsetHeight";
        n.offset(t),
        this.replaceArrow(h, n[0][f], c)
    }
    ,
    u.prototype.replaceArrow = function(e, t, i) {
        this.arrow().css(i ? "left" : "top", 50 * (1 - e / t) + "%").css(i ? "top" : "left", "")
    }
    ,
    u.prototype.setContent = function() {
        var e = this.tip()
          , t = this.getTitle();
        this.options.php ? (this.options.sanitize && (t = i(t, this.options.whiteList, this.options.sanitizeFn)),
        e.find(".tooltip-inner").html(t)) : e.find(".tooltip-inner").text(t),
        e.removeClass("fade in top bottom left right")
    }
    ,
    u.prototype.hide = function(t) {
        function i() {
            "in" != n.hoverState && s.detach(),
            n.$element && n.$element.removeAttr("aria-describedby").trigger("hidden.bs." + n.type),
            t && t()
        }
        var n = this
          , s = e(this.$tip)
          , o = e.Event("hide.bs." + this.type);
        if (this.$element.trigger(o),
        !o.isDefaultPrevented())
            return s.removeClass("in"),
            e.support.transition && s.hasClass("fade") ? s.one("bsTransitionEnd", i).emulateTransitionEnd(u.TRANSITION_DURATION) : i(),
            this.hoverState = null,
            this
    }
    ,
    u.prototype.fixTitle = function() {
        var e = this.$element;
        (e.attr("title") || "string" != typeof e.attr("data-original-title")) && e.attr("data-original-title", e.attr("title") || "").attr("title", "")
    }
    ,
    u.prototype.hasContent = function() {
        return this.getTitle()
    }
    ,
    u.prototype.getPosition = function(t) {
        var i = (t = t || this.$element)[0]
          , n = "BODY" == i.tagName
          , s = i.getBoundingClientRect();
        null == s.width && (s = e.extend({}, s, {
            width: s.right - s.left,
            height: s.bottom - s.top
        }));
        var o = window.SVGElement && i instanceof window.SVGElement
          , a = n ? {
            top: 0,
            left: 0
        } : o ? null : t.offset()
          , r = {
            scroll: n ? document.documentElement.scrollTop || document.body.scrollTop : t.scrollTop()
        }
          , l = n ? {
            width: e(window).width(),
            height: e(window).height()
        } : null;
        return e.extend({}, s, r, l, a)
    }
    ,
    u.prototype.getCalculatedOffset = function(e, t, i, n) {
        return "bottom" == e ? {
            top: t.top + t.height,
            left: t.left + t.width / 2 - i / 2
        } : "top" == e ? {
            top: t.top - n,
            left: t.left + t.width / 2 - i / 2
        } : "left" == e ? {
            top: t.top + t.height / 2 - n / 2,
            left: t.left - i
        } : {
            top: t.top + t.height / 2 - n / 2,
            left: t.left + t.width
        }
    }
    ,
    u.prototype.getViewportAdjustedDelta = function(e, t, i, n) {
        var s = {
            top: 0,
            left: 0
        };
        if (!this.$viewport)
            return s;
        var o = this.options.viewport && this.options.viewport.padding || 0
          , a = this.getPosition(this.$viewport);
        if (/right|left/.test(e)) {
            var r = t.top - o - a.scroll
              , l = t.top + o - a.scroll + n;
            r < a.top ? s.top = a.top - r : l > a.top + a.height && (s.top = a.top + a.height - l)
        } else {
            var u = t.left - o
              , d = t.left + o + i;
            u < a.left ? s.left = a.left - u : d > a.right && (s.left = a.left + a.width - d)
        }
        return s
    }
    ,
    u.prototype.getTitle = function() {
        var e = this.$element
          , t = this.options;
        return e.attr("data-original-title") || ("function" == typeof t.title ? t.title.call(e[0]) : t.title)
    }
    ,
    u.prototype.getUID = function(e) {
        do {
            e += ~~(1e6 * Math.random())
        } while (document.getElementById(e));
        return e
    }
    ,
    u.prototype.tip = function() {
        if (!this.$tip && (this.$tip = e(this.options.template),
        1 != this.$tip.length))
            throw new Error(this.type + " `template` option must consist of exactly 1 top-level element!");
        return this.$tip
    }
    ,
    u.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
    }
    ,
    u.prototype.enable = function() {
        this.enabled = !0
    }
    ,
    u.prototype.disable = function() {
        this.enabled = !1
    }
    ,
    u.prototype.toggleEnabled = function() {
        this.enabled = !this.enabled
    }
    ,
    u.prototype.toggle = function(t) {
        var i = this;
        t && ((i = e(t.currentTarget).data("bs." + this.type)) || (i = new this.constructor(t.currentTarget,this.getDelegateOptions()),
        e(t.currentTarget).data("bs." + this.type, i))),
        t ? (i.inState.click = !i.inState.click,
        i.isInStateTrue() ? i.enter(i) : i.leave(i)) : i.tip().hasClass("in") ? i.leave(i) : i.enter(i)
    }
    ,
    u.prototype.destroy = function() {
        var e = this;
        clearTimeout(this.timeout),
        this.hide((function() {
            e.$element.off("." + e.type).removeData("bs." + e.type),
            e.$tip && e.$tip.detach(),
            e.$tip = null,
            e.$arrow = null,
            e.$viewport = null,
            e.$element = null
        }
        ))
    }
    ,
    u.prototype.sanitizeHtml = function(e) {
        return i(e, this.options.whiteList, this.options.sanitizeFn)
    }
    ;
    var d = e.fn.tooltip;
    e.fn.tooltip = n,
    e.fn.tooltip.Constructor = u,
    e.fn.tooltip.noConflict = function() {
        return e.fn.tooltip = d,
        this
    }
}(jQuery),
function(e) {
    "use strict";
    function t(t) {
        return this.each((function() {
            var n = e(this)
              , s = n.data("bs.popover")
              , o = "object" == typeof t && t;
            !s && /destroy|hide/.test(t) || (s || n.data("bs.popover", s = new i(this,o)),
            "string" == typeof t && s[t]())
        }
        ))
    }
    var i = function(e, t) {
        this.init("popover", e, t)
    };
    if (!e.fn.tooltip)
        throw new Error("Popover requires tooltip.js");
    i.VERSION = "3.4.1",
    i.DEFAULTS = e.extend({}, e.fn.tooltip.Constructor.DEFAULTS, {
        placement: "right",
        trigger: "click",
        content: "",
        template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
    }),
    i.prototype = e.extend({}, e.fn.tooltip.Constructor.prototype),
    i.prototype.constructor = i,
    i.prototype.getDefaults = function() {
        return i.DEFAULTS
    }
    ,
    i.prototype.setContent = function() {
        var e = this.tip()
          , t = this.getTitle()
          , i = this.getContent();
        if (this.options.php) {
            var n = typeof i;
            this.options.sanitize && (t = this.sanitizeHtml(t),
            "string" === n && (i = this.sanitizeHtml(i))),
            e.find(".popover-title").html(t),
            e.find(".popover-content").children().detach().end()["string" === n ? "html" : "append"](i)
        } else
            e.find(".popover-title").text(t),
            e.find(".popover-content").children().detach().end().text(i);
        e.removeClass("fade top bottom left right in"),
        e.find(".popover-title").html() || e.find(".popover-title").hide()
    }
    ,
    i.prototype.hasContent = function() {
        return this.getTitle() || this.getContent()
    }
    ,
    i.prototype.getContent = function() {
        var e = this.$element
          , t = this.options;
        return e.attr("data-content") || ("function" == typeof t.content ? t.content.call(e[0]) : t.content)
    }
    ,
    i.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".arrow")
    }
    ;
    var n = e.fn.popover;
    e.fn.popover = t,
    e.fn.popover.Constructor = i,
    e.fn.popover.noConflict = function() {
        return e.fn.popover = n,
        this
    }
}(jQuery),
function(e) {
    "use strict";
    function t(i, n) {
        this.$body = e(document.body),
        this.$scrollElement = e(i).is(document.body) ? e(window) : e(i),
        this.options = e.extend({}, t.DEFAULTS, n),
        this.selector = (this.options.target || "") + " .nav li > a",
        this.offsets = [],
        this.targets = [],
        this.activeTarget = null,
        this.scrollHeight = 0,
        this.$scrollElement.on("scroll.bs.scrollspy", e.proxy(this.process, this)),
        this.refresh(),
        this.process()
    }
    function i(i) {
        return this.each((function() {
            var n = e(this)
              , s = n.data("bs.scrollspy")
              , o = "object" == typeof i && i;
            s || n.data("bs.scrollspy", s = new t(this,o)),
            "string" == typeof i && s[i]()
        }
        ))
    }
    t.VERSION = "3.4.1",
    t.DEFAULTS = {
        offset: 10
    },
    t.prototype.getScrollHeight = function() {
        return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
    }
    ,
    t.prototype.refresh = function() {
        var t = this
          , i = "offset"
          , n = 0;
        this.offsets = [],
        this.targets = [],
        this.scrollHeight = this.getScrollHeight(),
        e.isWindow(this.$scrollElement[0]) || (i = "position",
        n = this.$scrollElement.scrollTop()),
        this.$body.find(this.selector).map((function() {
            var t = e(this)
              , s = t.data("target") || t.attr("href")
              , o = /^#./.test(s) && e(s);
            return o && o.length && o.is(":visible") && [[o[i]().top + n, s]] || null
        }
        )).sort((function(e, t) {
            return e[0] - t[0]
        }
        )).each((function() {
            t.offsets.push(this[0]),
            t.targets.push(this[1])
        }
        ))
    }
    ,
    t.prototype.process = function() {
        var e, t = this.$scrollElement.scrollTop() + this.options.offset, i = this.getScrollHeight(), n = this.options.offset + i - this.$scrollElement.height(), s = this.offsets, o = this.targets, a = this.activeTarget;
        if (this.scrollHeight != i && this.refresh(),
        t >= n)
            return a != (e = o[o.length - 1]) && this.activate(e);
        if (a && t < s[0])
            return this.activeTarget = null,
            this.clear();
        for (e = s.length; e--; )
            a != o[e] && t >= s[e] && (void 0 === s[e + 1] || t < s[e + 1]) && this.activate(o[e])
    }
    ,
    t.prototype.activate = function(t) {
        this.activeTarget = t,
        this.clear();
        var i = this.selector + '[data-target="' + t + '"],' + this.selector + '[href="' + t + '"]'
          , n = e(i).parents("li").addClass("active");
        n.parent(".dropdown-menu").length && (n = n.closest("li.dropdown").addClass("active")),
        n.trigger("activate.bs.scrollspy")
    }
    ,
    t.prototype.clear = function() {
        e(this.selector).parentsUntil(this.options.target, ".active").removeClass("active")
    }
    ;
    var n = e.fn.scrollspy;
    e.fn.scrollspy = i,
    e.fn.scrollspy.Constructor = t,
    e.fn.scrollspy.noConflict = function() {
        return e.fn.scrollspy = n,
        this
    }
    ,
    e(window).on("load.bs.scrollspy.data-api", (function() {
        e('[data-spy="scroll"]').each((function() {
            var t = e(this);
            i.call(t, t.data())
        }
        ))
    }
    ))
}(jQuery),
function(e) {
    "use strict";
    function t(t) {
        return this.each((function() {
            var n = e(this)
              , s = n.data("bs.tab");
            s || n.data("bs.tab", s = new i(this)),
            "string" == typeof t && s[t]()
        }
        ))
    }
    var i = function(t) {
        this.element = e(t)
    };
    i.VERSION = "3.4.1",
    i.TRANSITION_DURATION = 150,
    i.prototype.show = function() {
        var t = this.element
          , i = t.closest("ul:not(.dropdown-menu)")
          , n = t.data("target");
        if (n || (n = (n = t.attr("href")) && n.replace(/.*(?=#[^\s]*$)/, "")),
        !t.parent("li").hasClass("active")) {
            var s = i.find(".active:last a")
              , o = e.Event("hide.bs.tab", {
                relatedTarget: t[0]
            })
              , a = e.Event("show.bs.tab", {
                relatedTarget: s[0]
            });
            if (s.trigger(o),
            t.trigger(a),
            !a.isDefaultPrevented() && !o.isDefaultPrevented()) {
                var r = e(document).find(n);
                this.activate(t.closest("li"), i),
                this.activate(r, r.parent(), (function() {
                    s.trigger({
                        type: "hidden.bs.tab",
                        relatedTarget: t[0]
                    }),
                    t.trigger({
                        type: "shown.bs.tab",
                        relatedTarget: s[0]
                    })
                }
                ))
            }
        }
    }
    ,
    i.prototype.activate = function(t, n, s) {
        function o() {
            a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1),
            t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0),
            r ? (t[0].offsetWidth,
            t.addClass("in")) : t.removeClass("fade"),
            t.parent(".dropdown-menu").length && t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0),
            s && s()
        }
        var a = n.find("> .active")
          , r = s && e.support.transition && (a.length && a.hasClass("fade") || !!n.find("> .fade").length);
        a.length && r ? a.one("bsTransitionEnd", o).emulateTransitionEnd(i.TRANSITION_DURATION) : o(),
        a.removeClass("in")
    }
    ;
    var n = e.fn.tab;
    e.fn.tab = t,
    e.fn.tab.Constructor = i,
    e.fn.tab.noConflict = function() {
        return e.fn.tab = n,
        this
    }
    ;
    var s = function(i) {
        i.preventDefault(),
        t.call(e(this), "show")
    };
    e(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', s).on("click.bs.tab.data-api", '[data-toggle="pill"]', s)
}(jQuery),
function(e) {
    "use strict";
    function t(t) {
        return this.each((function() {
            var n = e(this)
              , s = n.data("bs.affix")
              , o = "object" == typeof t && t;
            s || n.data("bs.affix", s = new i(this,o)),
            "string" == typeof t && s[t]()
        }
        ))
    }
    var i = function(t, n) {
        this.options = e.extend({}, i.DEFAULTS, n);
        var s = this.options.target === i.DEFAULTS.target ? e(this.options.target) : e(document).find(this.options.target);
        this.$target = s.on("scroll.bs.affix.data-api", e.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", e.proxy(this.checkPositionWithEventLoop, this)),
        this.$element = e(t),
        this.affixed = null,
        this.unpin = null,
        this.pinnedOffset = null,
        this.checkPosition()
    };
    i.VERSION = "3.4.1",
    i.RESET = "affix affix-top affix-bottom",
    i.DEFAULTS = {
        offset: 0,
        target: window
    },
    i.prototype.getState = function(e, t, i, n) {
        var s = this.$target.scrollTop()
          , o = this.$element.offset()
          , a = this.$target.height();
        if (null != i && "top" == this.affixed)
            return s < i && "top";
        if ("bottom" == this.affixed)
            return null != i ? !(s + this.unpin <= o.top) && "bottom" : !(s + a <= e - n) && "bottom";
        var r = null == this.affixed
          , l = r ? s : o.top;
        return null != i && s <= i ? "top" : null != n && l + (r ? a : t) >= e - n && "bottom"
    }
    ,
    i.prototype.getPinnedOffset = function() {
        if (this.pinnedOffset)
            return this.pinnedOffset;
        this.$element.removeClass(i.RESET).addClass("affix");
        var e = this.$target.scrollTop()
          , t = this.$element.offset();
        return this.pinnedOffset = t.top - e
    }
    ,
    i.prototype.checkPositionWithEventLoop = function() {
        setTimeout(e.proxy(this.checkPosition, this), 1)
    }
    ,
    i.prototype.checkPosition = function() {
        if (this.$element.is(":visible")) {
            var t = this.$element.height()
              , n = this.options.offset
              , s = n.top
              , o = n.bottom
              , a = Math.max(e(document).height(), e(document.body).height());
            "object" != typeof n && (o = s = n),
            "function" == typeof s && (s = n.top(this.$element)),
            "function" == typeof o && (o = n.bottom(this.$element));
            var r = this.getState(a, t, s, o);
            if (this.affixed != r) {
                null != this.unpin && this.$element.css("top", "");
                var l = "affix" + (r ? "-" + r : "")
                  , u = e.Event(l + ".bs.affix");
                if (this.$element.trigger(u),
                u.isDefaultPrevented())
                    return;
                this.affixed = r,
                this.unpin = "bottom" == r ? this.getPinnedOffset() : null,
                this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix", "affixed") + ".bs.affix")
            }
            "bottom" == r && this.$element.offset({
                top: a - t - o
            })
        }
    }
    ;
    var n = e.fn.affix;
    e.fn.affix = t,
    e.fn.affix.Constructor = i,
    e.fn.affix.noConflict = function() {
        return e.fn.affix = n,
        this
    }
    ,
    e(window).on("load", (function() {
        e('[data-spy="affix"]').each((function() {
            var i = e(this)
              , n = i.data();
            n.offset = n.offset || {},
            null != n.offsetBottom && (n.offset.bottom = n.offsetBottom),
            null != n.offsetTop && (n.offset.top = n.offsetTop),
            t.call(i, n)
        }
        ))
    }
    ))
}(jQuery),
function(e) {
    "use strict";
    var t = function(e, t) {
        this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null,
        this.init("tooltip", e, t)
    };
    t.DEFAULTS = {
        animation: !0,
        placement: "top",
        selector: !1,
        template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
        trigger: "hover focus",
        title: "",
        delay: 0,
        html: !1,
        container: !1
    },
    t.prototype.init = function(t, i, n) {
        this.enabled = !0,
        this.type = t,
        this.$element = e(i),
        this.options = this.getOptions(n);
        for (var s = this.options.trigger.split(" "), o = s.length; o--; ) {
            var a = s[o];
            if ("click" == a)
                this.$element.on("click." + this.type, this.options.selector, e.proxy(this.toggle, this));
            else if ("manual" != a) {
                var r = "hover" == a ? "mouseenter" : "focus"
                  , l = "hover" == a ? "mouseleave" : "blur";
                this.$element.on(r + "." + this.type, this.options.selector, e.proxy(this.enter, this)),
                this.$element.on(l + "." + this.type, this.options.selector, e.proxy(this.leave, this))
            }
        }
        this.options.selector ? this._options = e.extend({}, this.options, {
            trigger: "manual",
            selector: ""
        }) : this.fixTitle()
    }
    ,
    t.prototype.getDefaults = function() {
        return t.DEFAULTS
    }
    ,
    t.prototype.getOptions = function(t) {
        return (t = e.extend({}, this.getDefaults(), this.$element.data(), t)).delay && "number" == typeof t.delay && (t.delay = {
            show: t.delay,
            hide: t.delay
        }),
        t
    }
    ,
    t.prototype.getDelegateOptions = function() {
        var t = {}
          , i = this.getDefaults();
        return this._options && e.each(this._options, (function(e, n) {
            i[e] != n && (t[e] = n)
        }
        )),
        t
    }
    ,
    t.prototype.enter = function(t) {
        var i = t instanceof this.constructor ? t : e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
        if (clearTimeout(i.timeout),
        i.hoverState = "in",
        !i.options.delay || !i.options.delay.show)
            return i.show();
        i.timeout = setTimeout((function() {
            "in" == i.hoverState && i.show()
        }
        ), i.options.delay.show)
    }
    ,
    t.prototype.leave = function(t) {
        var i = t instanceof this.constructor ? t : e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
        if (clearTimeout(i.timeout),
        i.hoverState = "out",
        !i.options.delay || !i.options.delay.hide)
            return i.hide();
        i.timeout = setTimeout((function() {
            "out" == i.hoverState && i.hide()
        }
        ), i.options.delay.hide)
    }
    ,
    t.prototype.show = function() {
        var t = e.Event("show.bs." + this.type);
        if (this.hasContent() && this.enabled) {
            if (this.$element.trigger(t),
            t.isDefaultPrevented())
                return;
            var i = this.tip();
            this.setContent(),
            this.options.animation && i.addClass("fade");
            var n = "function" == typeof this.options.placement ? this.options.placement.call(this, i[0], this.$element[0]) : this.options.placement
              , s = /\s?auto?\s?/i
              , o = s.test(n);
            o && (n = n.replace(s, "") || "top"),
            i.detach().css({
                top: 0,
                left: 0,
                display: "block"
            }).addClass(n),
            this.options.container ? i.appendTo(this.options.container) : i.insertAfter(this.$element);
            var a = this.getPosition()
              , r = i[0].offsetWidth
              , l = i[0].offsetHeight;
            if (o) {
                var u = this.$element.parent()
                  , d = n
                  , c = document.documentElement.scrollTop || document.body.scrollTop
                  , h = "body" == this.options.container ? window.innerWidth : u.outerWidth()
                  , f = "body" == this.options.container ? window.innerHeight : u.outerHeight()
                  , p = "body" == this.options.container ? 0 : u.offset().left;
                n = "bottom" == n && a.top + a.height + l - c > f ? "top" : "top" == n && a.top - c - l < 0 ? "bottom" : "right" == n && a.right + r > h ? "left" : "left" == n && a.left - r < p ? "right" : n,
                i.removeClass(d).addClass(n)
            }
            var m = this.getCalculatedOffset(n, a, r, l);
            this.applyPlacement(m, n),
            this.$element.trigger("shown.bs." + this.type)
        }
    }
    ,
    t.prototype.applyPlacement = function(e, t) {
        var i, n = this.tip(), s = n[0].offsetWidth, o = n[0].offsetHeight, a = parseInt(n.css("margin-top"), 10), r = parseInt(n.css("margin-left"), 10);
        isNaN(a) && (a = 0),
        isNaN(r) && (r = 0),
        e.top = e.top + a,
        e.left = e.left + r,
        n.offset(e).addClass("in");
        var l = n[0].offsetWidth
          , u = n[0].offsetHeight;
        if ("top" == t && u != o && (i = !0,
        e.top = e.top + o - u),
        /bottom|top/.test(t)) {
            var d = 0;
            e.left < 0 && (d = -2 * e.left,
            e.left = 0,
            n.offset(e),
            l = n[0].offsetWidth,
            u = n[0].offsetHeight),
            this.replaceArrow(d - s + l, l, "left")
        } else
            this.replaceArrow(u - o, u, "top");
        i && n.offset(e)
    }
    ,
    t.prototype.replaceArrow = function(e, t, i) {
        this.arrow().css(i, e ? 50 * (1 - e / t) + "%" : "")
    }
    ,
    t.prototype.setContent = function() {
        var e = this.tip()
          , t = this.getTitle();
        e.find(".tooltip-inner")[this.options.php ? "html" : "text"](t),
        e.removeClass("fade in top bottom left right")
    }
    ,
    t.prototype.hide = function() {
        function t() {
            "in" != i.hoverState && n.detach()
        }
        var i = this
          , n = this.tip()
          , s = e.Event("hide.bs." + this.type);
        if (this.$element.trigger(s),
        !s.isDefaultPrevented())
            return n.removeClass("in"),
            e.support.transition && this.$tip.hasClass("fade") ? n.one(e.support.transition.end, t).emulateTransitionEnd(150) : t(),
            this.$element.trigger("hidden.bs." + this.type),
            this
    }
    ,
    t.prototype.fixTitle = function() {
        var e = this.$element;
        (e.attr("title") || "string" != typeof e.attr("data-original-title")) && e.attr("data-original-title", e.attr("title") || "").attr("title", "")
    }
    ,
    t.prototype.hasContent = function() {
        return this.getTitle()
    }
    ,
    t.prototype.getPosition = function() {
        var t = this.$element[0];
        return e.extend({}, "function" == typeof t.getBoundingClientRect ? t.getBoundingClientRect() : {
            width: t.offsetWidth,
            height: t.offsetHeight
        }, this.$element.offset())
    }
    ,
    t.prototype.getCalculatedOffset = function(e, t, i, n) {
        return "bottom" == e ? {
            top: t.top + t.height,
            left: t.left + t.width / 2 - i / 2
        } : "top" == e ? {
            top: t.top - n,
            left: t.left + t.width / 2 - i / 2
        } : "left" == e ? {
            top: t.top + t.height / 2 - n / 2,
            left: t.left - i
        } : {
            top: t.top + t.height / 2 - n / 2,
            left: t.left + t.width
        }
    }
    ,
    t.prototype.getTitle = function() {
        var e = this.$element
          , t = this.options;
        return e.attr("data-original-title") || ("function" == typeof t.title ? t.title.call(e[0]) : t.title)
    }
    ,
    t.prototype.tip = function() {
        return this.$tip = this.$tip || e(this.options.template)
    }
    ,
    t.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
    }
    ,
    t.prototype.validate = function() {
        this.$element[0].parentNode || (this.hide(),
        this.$element = null,
        this.options = null)
    }
    ,
    t.prototype.enable = function() {
        this.enabled = !0
    }
    ,
    t.prototype.disable = function() {
        this.enabled = !1
    }
    ,
    t.prototype.toggleEnabled = function() {
        this.enabled = !this.enabled
    }
    ,
    t.prototype.toggle = function(t) {
        var i = t ? e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type) : this;
        i.tip().hasClass("in") ? i.leave(i) : i.enter(i)
    }
    ,
    t.prototype.destroy = function() {
        this.hide().$element.off("." + this.type).removeData("bs." + this.type)
    }
    ;
    var i = e.fn.tooltip;
    e.fn.tooltip = function(i) {
        return this.each((function() {
            var n = e(this)
              , s = n.data("bs.tooltip")
              , o = "object" == typeof i && i;
            s || n.data("bs.tooltip", s = new t(this,o)),
            "string" == typeof i && s[i]()
        }
        ))
    }
    ,
    e.fn.tooltip.Constructor = t,
    e.fn.tooltip.noConflict = function() {
        return e.fn.tooltip = i,
        this
    }
}(window.jQuery),
function(e) {
    "use strict";
    var t = function(e, t) {
        this.init("popover", e, t)
    };
    if (!e.fn.tooltip)
        throw new Error("Popover requires tooltip.js");
    t.DEFAULTS = e.extend({}, e.fn.tooltip.Constructor.DEFAULTS, {
        placement: "right",
        trigger: "click",
        content: "",
        template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
    }),
    t.prototype = e.extend({}, e.fn.tooltip.Constructor.prototype),
    t.prototype.constructor = t,
    t.prototype.getDefaults = function() {
        return t.DEFAULTS
    }
    ,
    t.prototype.setContent = function() {
        var e = this.tip()
          , t = this.getTitle()
          , i = this.getContent();
        e.find(".popover-title")[this.options.php ? "html" : "text"](t),
        e.find(".popover-content")[this.options.php ? "html" : "text"](i),
        e.removeClass("fade top bottom left right in"),
        e.find(".popover-title").html() || e.find(".popover-title").hide()
    }
    ,
    t.prototype.hasContent = function() {
        return this.getTitle() || this.getContent()
    }
    ,
    t.prototype.getContent = function() {
        var e = this.$element
          , t = this.options;
        return e.attr("data-content") || ("function" == typeof t.content ? t.content.call(e[0]) : t.content)
    }
    ,
    t.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".arrow")
    }
    ,
    t.prototype.tip = function() {
        return this.$tip || (this.$tip = e(this.options.template)),
        this.$tip
    }
    ;
    var i = e.fn.popover;
    e.fn.popover = function(i) {
        return this.each((function() {
            var n = e(this)
              , s = n.data("bs.popover")
              , o = "object" == typeof i && i;
            s || n.data("bs.popover", s = new t(this,o)),
            "string" == typeof i && s[i]()
        }
        ))
    }
    ,
    e.fn.popover.Constructor = t,
    e.fn.popover.noConflict = function() {
        return e.fn.popover = i,
        this
    }
}(window.jQuery),
function(e) {
    var t = function(e) {
        if (!e)
            e = window.event;
        e.cancelBubble = !0,
        e.stopPropagation && e.stopPropagation()
    };
    e.fn.checkbox = function(i) {
        try {
            document.execCommand("BackgroundImageCache", !1, !0)
        } catch (e) {}
        var n = {
            cls: "jquery-checkbox",
            empty: "empty.png"
        };
        n = e.extend(n, i || {});
        var s = function(t) {
            var i = t.checked
              , n = t.disabled
              , s = e(t);
            return t.stateInterval && clearInterval(t.stateInterval),
            t.stateInterval = setInterval((function() {
                t.disabled !== n && (n = !!t.disabled,
                s.trigger(n ? "disable" : "enable")),
                t.checked !== i && (i = !!t.checked,
                s.trigger(i ? "check" : "uncheck"))
            }
            ), 10),
            s
        };
        return this.each((function() {
            var i = this
              , o = s(i);
            i.wrapper && i.wrapper.remove();
            const a = new Image;
            a.src = n.empty;
            const r = e(document.createElement("span")).addClass("mark").html(a)
              , l = e(document.createElement("span"));
            l.addClass(n.cls).html(r),
            i.wrapper = l,
            i.wrapperInner = i.wrapper.children("span:eq(0)"),
            i.wrapper.hover((function(e) {
                t(e)
            }
            ), (function(e) {
                t(e)
            }
            )),
            o.css({
                position: "absolute",
                zIndex: -1,
                visibility: "hidden"
            }).after(i.wrapper);
            var u = !1;
            o.attr("id") && ((u = e("label[for=" + o.attr("id") + "]")).length || (u = !1)),
            u || (u = o.closest ? o.closest("label") : o.parents("label:eq(0)")).length || (u = !1),
            u && (u.hover((function(e) {
                i.wrapper.trigger("mouseover", [e])
            }
            ), (function(e) {
                i.wrapper.trigger("mouseout", [e])
            }
            )),
            u.click((function(e) {
                return o.trigger("click", [e]),
                t(e),
                !1
            }
            ))),
            i.wrapper.click((function(e) {
                return o.trigger("click", [e]),
                t(e),
                !1
            }
            )),
            o.click((function(e) {
                t(e)
            }
            )),
            o.bind("disable", (function() {
                i.wrapperInner.addClass(n.cls + "-disabled")
            }
            )).bind("enable", (function() {
                i.wrapperInner.removeClass(n.cls + "-disabled")
            }
            )),
            o.bind("check", (function() {
                i.wrapper.addClass(n.cls + "-checked")
            }
            )).bind("uncheck", (function() {
                i.wrapper.removeClass(n.cls + "-checked")
            }
            )),
            e("img", i.wrapper).bind("dragstart", (function() {
                return !1
            }
            )).bind("mousedown", (function() {
                return !1
            }
            )),
            window.getSelection && i.wrapper.css("MozUserSelect", "none"),
            i.checked && i.wrapper.addClass(n.cls + "-checked"),
            i.disabled && i.wrapperInner.addClass(n.cls + "-disabled")
        }
        ))
    }
}(jQuery),
$((function() {
    window.$translations = {
        cs: {
            cc_number: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            cc_expiration_date: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            cc_verification: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            cc_holder_name: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            user_id: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            phone_number: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            personal_code: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            corporate_id: {
                blank: "can't be blank",
                invalid: "is invalid"
            }
        },
        cz: {
            cc_number: {
                blank: "nem\u016f\u017ee b\xfdt pr\xe1zdn\xe9",
                invalid: "je neplatn\xe9"
            },
            cc_expiration_date: {
                blank: "nem\u016f\u017ee b\xfdt pr\xe1zdn\xe9",
                invalid: "je neplatn\xe9"
            },
            cc_verification: {
                blank: "nem\u016f\u017ee b\xfdt pr\xe1zdn\xe9",
                invalid: "je neplatn\xe9"
            },
            cc_holder_name: {
                blank: "nem\u016f\u017ee b\xfdt pr\xe1zdn\xe9",
                invalid: "je neplatn\xe9"
            },
            user_id: {
                blank: "nem\u016f\u017ee b\xfdt pr\xe1zdn\xe9",
                invalid: "je neplatn\xe9"
            },
            phone_number: {
                blank: "nem\u016f\u017ee b\xfdt pr\xe1zdn\xe9",
                invalid: "je neplatn\xe9"
            },
            personal_code: {
                blank: "nem\u016f\u017ee b\xfdt pr\xe1zdn\xe9",
                invalid: "je neplatn\xe9"
            },
            corporate_id: {
                blank: "nem\u016f\u017ee b\xfdt pr\xe1zdn\xe9",
                invalid: "je neplatn\xe9"
            }
        },
        da: {
            cc_number: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            cc_expiration_date: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            cc_verification: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            cc_holder_name: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            user_id: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            phone_number: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            personal_code: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            corporate_id: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            }
        },
        de: {
            cc_number: {
                blank: "Muss ausgef\xfcllt sein",
                invalid: "ist  nicht korrekt"
            },
            cc_expiration_date: {
                blank: "Muss ausgef\xfcllt sein",
                invalid: "ist  nicht korrekt"
            },
            cc_verification: {
                blank: "Muss ausgef\xfcllt sein",
                invalid: "ist  nicht korrekt"
            },
            cc_holder_name: {
                blank: "Muss ausgef\xfcllt sein",
                invalid: "ist  nicht korrekt"
            },
            user_id: {
                blank: "Muss ausgef\xfcllt sein",
                invalid: "ist  nicht korrekt"
            },
            phone_number: {
                blank: "Muss ausgef\xfcllt sein",
                invalid: "ist  nicht korrekt"
            },
            personal_code: {
                blank: "Muss ausgef\xfcllt sein",
                invalid: "ist  nicht korrekt"
            },
            corporate_id: {
                blank: "Muss ausgef\xfcllt sein",
                invalid: "ist  nicht korrekt"
            }
        },
        en: {
            cc_number: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            cc_expiration_date: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            cc_verification: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            cc_holder_name: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            user_id: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            phone_number: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            personal_code: {
                blank: "can't be blank",
                invalid: "is invalid"
            },
            corporate_id: {
                blank: "can't be blank",
                invalid: "is invalid"
            }
        },
        es: {
            cc_number: {
                blank: "debe aparecer rellenado",
                invalid: "no vale"
            },
            cc_expiration_date: {
                blank: "debe aparecer rellenado",
                invalid: "no vale"
            },
            cc_verification: {
                blank: "debe aparecer rellenado",
                invalid: "no vale"
            },
            cc_holder_name: {
                blank: "debe aparecer rellenado",
                invalid: "no vale"
            },
            user_id: {
                blank: "debe aparecer rellenado",
                invalid: "no vale"
            },
            phone_number: {
                blank: "debe aparecer rellenado",
                invalid: "no vale"
            },
            personal_code: {
                blank: "debe aparecer rellenado",
                invalid: "no vale"
            },
            corporate_id: {
                blank: "debe aparecer rellenado",
                invalid: "no vale"
            }
        },
        et: {
            cc_number: {
                blank: "peab olema t\xe4idetud",
                invalid: "ei ole korrektne"
            },
            cc_expiration_date: {
                blank: "peab olema t\xe4idetud",
                invalid: "ei ole korrektne"
            },
            cc_verification: {
                blank: "peab olema t\xe4idetud",
                invalid: "ei ole korrektne"
            },
            cc_holder_name: {
                blank: "peab olema t\xe4idetud",
                invalid: "ei ole korrektne"
            },
            user_id: {
                blank: "peab olema t\xe4idetud",
                invalid: "ei ole korrektne"
            },
            phone_number: {
                blank: "peab olema t\xe4idetud",
                invalid: "ei ole korrektne"
            },
            personal_code: {
                blank: "peab olema t\xe4idetud",
                invalid: "ei ole korrektne"
            },
            corporate_id: {
                blank: "peab olema t\xe4idetud",
                invalid: "ei ole korrektne"
            }
        },
        fi: {
            cc_number: {
                blank: "pit\xe4\xe4 olla t\xe4ytetty",
                invalid: "v\xe4\xe4r\xe4"
            },
            cc_expiration_date: {
                blank: "pit\xe4\xe4 olla t\xe4ytetty",
                invalid: "v\xe4\xe4r\xe4"
            },
            cc_verification: {
                blank: "pit\xe4\xe4 olla t\xe4ytetty",
                invalid: "v\xe4\xe4r\xe4"
            },
            cc_holder_name: {
                blank: "pit\xe4\xe4 olla t\xe4ytetty",
                invalid: "v\xe4\xe4r\xe4"
            },
            user_id: {
                blank: "pit\xe4\xe4 olla t\xe4ytetty",
                invalid: "v\xe4\xe4r\xe4"
            },
            phone_number: {
                blank: "pit\xe4\xe4 olla t\xe4ytetty",
                invalid: "v\xe4\xe4r\xe4"
            },
            personal_code: {
                blank: "pit\xe4\xe4 olla t\xe4ytetty",
                invalid: "v\xe4\xe4r\xe4"
            },
            corporate_id: {
                blank: "pit\xe4\xe4 olla t\xe4ytetty",
                invalid: "v\xe4\xe4r\xe4"
            }
        },
        fr: {
            cc_number: {
                blank: "champ obligatoire",
                invalid: "inacceptable"
            },
            cc_expiration_date: {
                blank: "champ obligatoire",
                invalid: "inacceptable"
            },
            cc_verification: {
                blank: "champ obligatoire",
                invalid: "inacceptable"
            },
            cc_holder_name: {
                blank: "champ obligatoire",
                invalid: "inacceptable"
            },
            user_id: {
                blank: "champ obligatoire",
                invalid: "inacceptable"
            },
            phone_number: {
                blank: "champ obligatoire",
                invalid: "inacceptable"
            },
            personal_code: {
                blank: "champ obligatoire",
                invalid: "inacceptable"
            },
            corporate_id: {
                blank: "champ obligatoire",
                invalid: "inacceptable"
            }
        },
        hu: {
            cc_number: {
                blank: "nem lehet \xfcres",
                invalid: "\xe9rv\xe9nytelen"
            },
            cc_expiration_date: {
                blank: "nem lehet \xfcres",
                invalid: "\xe9rv\xe9nytelen"
            },
            cc_verification: {
                blank: "nem lehet \xfcres",
                invalid: "\xe9rv\xe9nytelen"
            },
            cc_holder_name: {
                blank: "nem lehet \xfcres",
                invalid: "\xe9rv\xe9nytelen"
            },
            user_id: {
                blank: "nem lehet \xfcres",
                invalid: "\xe9rv\xe9nytelen"
            },
            phone_number: {
                blank: "nem lehet \xfcres",
                invalid: "\xe9rv\xe9nytelen"
            },
            personal_code: {
                blank: "nem lehet \xfcres",
                invalid: "\xe9rv\xe9nytelen"
            },
            corporate_id: {
                blank: "nem lehet \xfcres",
                invalid: "\xe9rv\xe9nytelen"
            }
        },
        it: {
            cc_number: {
                blank: "obbligatamente per la compilazione",
                invalid: "illecito"
            },
            cc_expiration_date: {
                blank: "obbligatamente per la compilazione",
                invalid: "illecito"
            },
            cc_verification: {
                blank: "obbligatamente per la compilazione",
                invalid: "illecito"
            },
            cc_holder_name: {
                blank: "obbligatamente per la compilazione",
                invalid: "illecito"
            },
            user_id: {
                blank: "obbligatamente per la compilazione",
                invalid: "illecito"
            },
            phone_number: {
                blank: "obbligatamente per la compilazione",
                invalid: "illecito"
            },
            personal_code: {
                blank: "obbligatamente per la compilazione",
                invalid: "illecito"
            },
            corporate_id: {
                blank: "obbligatamente per la compilazione",
                invalid: "illecito"
            }
        },
        lt: {
            cc_number: {
                blank: "turi b\u016bti u\u017epildyta",
                invalid: "negalioja"
            },
            cc_expiration_date: {
                blank: "turi b\u016bti u\u017epildyta",
                invalid: "negalioja"
            },
            cc_verification: {
                blank: "turi b\u016bti u\u017epildyta",
                invalid: "negalioja"
            },
            cc_holder_name: {
                blank: "turi b\u016bti u\u017epildyta",
                invalid: "negalioja"
            },
            user_id: {
                blank: "turi b\u016bti u\u017epildyta",
                invalid: "negalioja"
            },
            phone_number: {
                blank: "turi b\u016bti u\u017epildyta",
                invalid: "negalioja"
            },
            personal_code: {
                blank: "turi b\u016bti u\u017epildyta",
                invalid: "negalioja"
            },
            corporate_id: {
                blank: "turi b\u016bti u\u017epildyta",
                invalid: "negalioja"
            }
        },
        lv: {
            cc_number: {
                blank: "Nevar b\u016bt tuk\u0161s",
                invalid: "nav korekts"
            },
            cc_expiration_date: {
                blank: "Nevar b\u016bt tuk\u0161s",
                invalid: "nav korekts"
            },
            cc_verification: {
                blank: "Nevar b\u016bt tuk\u0161s",
                invalid: "nav korekts"
            },
            cc_holder_name: {
                blank: "Nevar b\u016bt tuk\u0161s",
                invalid: "nav korekts"
            },
            user_id: {
                blank: "Nevar b\u016bt tuk\u0161s",
                invalid: "nav korekts"
            },
            phone_number: {
                blank: "Nevar b\u016bt tuk\u0161s",
                invalid: "nav korekts"
            },
            personal_code: {
                blank: "Nevar b\u016bt tuk\u0161s",
                invalid: "nav korekts"
            },
            corporate_id: {
                blank: "Nevar b\u016bt tuk\u0161s",
                invalid: "nav korekts"
            }
        },
        nl: {
            cc_number: {
                blank: "kan niet blanco zijn",
                invalid: "is ongeldig"
            },
            cc_expiration_date: {
                blank: "kan niet blanco zijn",
                invalid: "is ongeldig"
            },
            cc_verification: {
                blank: "kan niet blanco zijn",
                invalid: "is ongeldig"
            },
            cc_holder_name: {
                blank: "kan niet blanco zijn",
                invalid: "is ongeldig"
            },
            user_id: {
                blank: "kan niet blanco zijn",
                invalid: "is ongeldig"
            },
            phone_number: {
                blank: "kan niet blanco zijn",
                invalid: "is ongeldig"
            },
            personal_code: {
                blank: "kan niet blanco zijn",
                invalid: "is ongeldig"
            },
            corporate_id: {
                blank: "kan niet blanco zijn",
                invalid: "is ongeldig"
            }
        },
        no: {
            cc_number: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            cc_expiration_date: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            cc_verification: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            cc_holder_name: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            user_id: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            phone_number: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            personal_code: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            },
            corporate_id: {
                blank: "kan ikke v\xe6re tom",
                invalid: "er ugyldig"
            }
        },
        pl: {
            cc_number: {
                blank: "nie mo\u017ce by\u0107 puste",
                invalid: "jest nieprawid\u0142owy"
            },
            cc_expiration_date: {
                blank: "nie mo\u017ce by\u0107 puste",
                invalid: "jest nieprawid\u0142owy"
            },
            cc_verification: {
                blank: "nie mo\u017ce by\u0107 puste",
                invalid: "jest nieprawid\u0142owy"
            },
            cc_holder_name: {
                blank: "nie mo\u017ce by\u0107 puste",
                invalid: "jest nieprawid\u0142owy"
            },
            user_id: {
                blank: "nie mo\u017ce by\u0107 puste",
                invalid: "jest nieprawid\u0142owy"
            },
            phone_number: {
                blank: "nie mo\u017ce by\u0107 puste",
                invalid: "jest nieprawid\u0142owy"
            },
            personal_code: {
                blank: "nie mo\u017ce by\u0107 puste",
                invalid: "jest nieprawid\u0142owy"
            },
            corporate_id: {
                blank: "nie mo\u017ce by\u0107 puste",
                invalid: "jest nieprawid\u0142owy"
            }
        },
        pt: {
            cc_number: {
                blank: "n\xe3o pode estar em branco",
                invalid: "\xe9 inv\xe1lido"
            },
            cc_expiration_date: {
                blank: "n\xe3o pode estar em branco",
                invalid: "\xe9 inv\xe1lido"
            },
            cc_verification: {
                blank: "n\xe3o pode estar em branco",
                invalid: "\xe9 inv\xe1lido"
            },
            cc_holder_name: {
                blank: "n\xe3o pode estar em branco",
                invalid: "\xe9 inv\xe1lido"
            },
            user_id: {
                blank: "n\xe3o pode estar em branco",
                invalid: "\xe9 inv\xe1lido"
            },
            phone_number: {
                blank: "n\xe3o pode estar em branco",
                invalid: "\xe9 inv\xe1lido"
            },
            personal_code: {
                blank: "n\xe3o pode estar em branco",
                invalid: "\xe9 inv\xe1lido"
            },
            corporate_id: {
                blank: "n\xe3o pode estar em branco",
                invalid: "\xe9 inv\xe1lido"
            }
        },
        ru: {
            cc_number: {
                blank: "\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c",
                invalid: "\u043d\u0435\u0432\u0435\u0440\u043d\u043e"
            },
            cc_expiration_date: {
                blank: "\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c",
                invalid: "\u043d\u0435\u0432\u0435\u0440\u043d\u043e"
            },
            cc_verification: {
                blank: "\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c",
                invalid: "\u043d\u0435\u0432\u0435\u0440\u043d\u043e"
            },
            cc_holder_name: {
                blank: "\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c",
                invalid: "\u043d\u0435\u0432\u0435\u0440\u043d\u043e"
            },
            user_id: {
                blank: "\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c",
                invalid: "\u043d\u0435\u0432\u0435\u0440\u043d\u043e"
            },
            phone_number: {
                blank: "\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c",
                invalid: "\u043d\u0435\u0432\u0435\u0440\u043d\u043e"
            },
            personal_code: {
                blank: "\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c",
                invalid: "\u043d\u0435\u0432\u0435\u0440\u043d\u043e"
            },
            corporate_id: {
                blank: "\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c",
                invalid: "\u043d\u0435\u0432\u0435\u0440\u043d\u043e"
            }
        },
        sk: {
            cc_number: {
                blank: "nem\xf4\u017ee by\u0165 pr\xe1zdne",
                invalid: "je neplatn\xe9"
            },
            cc_expiration_date: {
                blank: "nem\xf4\u017ee by\u0165 pr\xe1zdne",
                invalid: "je neplatn\xe9"
            },
            cc_verification: {
                blank: "nem\xf4\u017ee by\u0165 pr\xe1zdne",
                invalid: "je neplatn\xe9"
            },
            cc_holder_name: {
                blank: "nem\xf4\u017ee by\u0165 pr\xe1zdne",
                invalid: "je neplatn\xe9"
            },
            user_id: {
                blank: "nem\xf4\u017ee by\u0165 pr\xe1zdne",
                invalid: "je neplatn\xe9"
            },
            phone_number: {
                blank: "nem\xf4\u017ee by\u0165 pr\xe1zdne",
                invalid: "je neplatn\xe9"
            },
            personal_code: {
                blank: "nem\xf4\u017ee by\u0165 pr\xe1zdne",
                invalid: "je neplatn\xe9"
            },
            corporate_id: {
                blank: "nem\xf4\u017ee by\u0165 pr\xe1zdne",
                invalid: "je neplatn\xe9"
            }
        },
        sv: {
            cc_number: {
                blank: "M\xe5ste vara fyllt i ",
                invalid: "\xe4r inte korrekt"
            },
            cc_expiration_date: {
                blank: "M\xe5ste vara fyllt i ",
                invalid: "\xe4r inte korrekt"
            },
            cc_verification: {
                blank: "M\xe5ste vara fyllt i ",
                invalid: "\xe4r inte korrekt"
            },
            cc_holder_name: {
                blank: "M\xe5ste vara fyllt i ",
                invalid: "\xe4r inte korrekt"
            },
            user_id: {
                blank: "M\xe5ste vara fyllt i ",
                invalid: "\xe4r inte korrekt"
            },
            phone_number: {
                blank: "M\xe5ste vara fyllt i ",
                invalid: "\xe4r inte korrekt"
            },
            personal_code: {
                blank: "M\xe5ste vara fyllt i ",
                invalid: "\xe4r inte korrekt"
            },
            corporate_id: {
                blank: "M\xe5ste vara fyllt i ",
                invalid: "\xe4r inte korrekt"
            }
        }
    }
}
)),
function() {
    $((function() {
        $(".iframe-form").each((function() {
            var e, t, i, n;
            if (t = $(this).find(".cc_expiration_date"),
            e = $(this).find(".cc_verification"),
            i = t.attr("placeholder"))
                return n = i.length + 1,
                t.attr("size", n),
                e.attr("size", n)
        }
        )),
        window.submitParesWithCVC = function(e) {
            return $("body").css({
                background: ""
            }),
            $("#placeholder").css({
                display: "none"
            }),
            $("#dimmed_background_box").hide(),
            $(".pareq_form_detail").hide(),
            $("#transaction-processing-container").show(),
            $("#pares").val(e),
            $("#pares_form").get(0).submit()
        }
        ,
        window.submitModirumPares = function(e) {
            return $("body").css({
                background: ""
            }),
            $("#placeholder").css({
                display: "none"
            }),
            $("#dimmed_background_box").hide(),
            $(".pareq_form_detail").hide(),
            $("#transaction-processing-container").show(),
            $.each(e, (function(e, t) {
                $("<input>").attr({
                    type: "hidden",
                    id: e,
                    name: e,
                    value: t
                }).appendTo("form#pares_form")
            }
            )),
            $("#pares_form").get(0).submit()
        }
        ,
        window.postShrinkMessage = function(e) {
            var t;
            return t = '{"resize_iframe": "shrink"}',
            parent.postMessage(t, e)
        }
        ,
        window.submitPareqForm = function() {
            return $("#pareq_form").get(0).submit()
        }
        ,
        window.expandIframe = function() {
            var e;
            return e = $("#iframe_wrapper"),
            $("#placeholder").css({
                display: "block"
            }),
            $(window).width() < 960 ? (e.css({
                height: $(window).height(),
                width: $(window).width(),
                top: "50%",
                left: "50%",
                "z-index": 9999,
                transform: "translate(-50%, -50%)"
            }),
            $("#placeholder").css({
                minWidth: $(window).width()
            })) : e.css({
                height: 640,
                width: 960,
                top: "50%",
                left: "50%",
                transform: "translate(-50%, -50%)"
            }),
            e.css({
                position: "absolute",
                zIndex: 9999
            })
        }
    }
    ))
}
.call(this),
$(document).ready((function() {
    var e = ["name", "cycle-unit", "cycle-length"];
    $("#customer_details_plan_token").change((function() {
        if ("" === $(this).val())
            $(".plan_details .read-only").hide();
        else {
            var t = $("#customer_details_plan_token option:selected")
              , i = t.data("trial-period-type");
            if ($.each(e, (function(e, i) {
                var n = t.data(i);
                if ("" !== n)
                    if ("cycle-unit" === i)
                        $(".plan_details #cycle-length").show(),
                        $(".plan_details #cycle-length .unit").text(n);
                    else
                        $(".plan_details #" + i).show(),
                        $(".plan_details #" + i + " .value").text(n)
            }
            )),
            "until_trial_cycles_end" === i) {
                var n = t.data("trial-period-amount")
                  , s = t.data("trial-period-unit");
                $(".plan_details #trial-period-amount").show(),
                $(".plan_details #trial-period-amount .value").text(n),
                $(".plan_details #trial-period-amount .unit").text(s)
            } else
                $(".plan_details #trial-period-amount").hide();
            $(".plan_details #cycle-price").show(),
            $(".plan_details #cycle-price .value").val(t.data("currency") + "" + t.data("cycle-price"))
        }
    }
    )),
    $(".linkpay_preview .payment_valid").each((function(e, t) {
        var i = t.parentNode;
        i.classList.add("has-error"),
        i.classList.contains("customer_details_transaction_amount") && i.getElementsByClassName("form-group")[0].classList.add("red-border")
    }
    )),
    $("#terms_of_service").change((function() {
        $(this).is(":checked") ? $("input[name='cc_details[terms_of_service_accepted]']").attr("value", !0) : $("input[name='cc_details[terms_of_service_accepted]']").attr("value", !1)
    }
    )),
    $("span.close-modal").click((function() {
        $(this).parents("div.modal").modal("hide")
    }
    )),
    $(".account-block .account .btn").click((function() {}
    )),
    1 == $("input[name='iban_accounts[debtor_iban]']").length && $("input[name='iban_accounts[debtor_iban]']").click(),
    $("#confirm_ob_authorisation").on("click", (function() {
        $("#cancel_ob_authorisation").prop("disabled", !0)
    }
    )),
    $("#cancel_ob_authorisation").on("click", (function() {
        $("#confirm_ob_authorisation").prop("disabled", !0)
    }
    ))
}
));
var XRegExp = function(e) {
    "use strict";
    function t(e, t, i, n, s) {
        var o;
        if (e[w] = {
            captureNames: t
        },
        s)
            return e;
        if (e.__proto__)
            e.__proto__ = y.prototype;
        else
            for (o in y.prototype)
                e[o] = y.prototype[o];
        return e[w].source = i,
        e[w].flags = n ? n.split("").sort().join("") : n,
        e
    }
    function i(e) {
        return k.replace.call(e, /([\s\S])(?=[\s\S]*\1)/g, "")
    }
    function n(n, s) {
        if (!y.isRegExp(n))
            throw new TypeError("Type RegExp expected");
        var r = n[w] || {}
          , l = o(n)
          , u = ""
          , d = ""
          , c = null
          , h = null;
        return (s = s || {}).removeG && (d += "g"),
        s.removeY && (d += "y"),
        d && (l = k.replace.call(l, new RegExp("[" + d + "]+","g"), "")),
        s.addG && (u += "g"),
        s.addY && (u += "y"),
        u && (l = i(l + u)),
        s.isInternalOnly || (r.source !== e && (c = r.source),
        null != r.flags && (h = u ? i(r.flags + u) : r.flags)),
        n = t(new RegExp(n.source,l), a(n) ? r.captureNames.slice(0) : null, c, h, s.isInternalOnly)
    }
    function s(e) {
        return parseInt(e, 16)
    }
    function o(e) {
        return O ? e.flags : k.exec.call(/\/([a-z]*)$/i, RegExp.prototype.toString.call(e))[1]
    }
    function a(e) {
        return !(!e[w] || !e[w].captureNames)
    }
    function r(e) {
        return parseInt(e, 10).toString(16)
    }
    function l(e, t) {
        var i, n = e.length;
        for (i = 0; i < n; ++i)
            if (e[i] === t)
                return i;
        return -1
    }
    function u(e, t) {
        return j.call(e) === "[object " + t + "]"
    }
    function d(e, t, i) {
        return k.test.call(i.indexOf("x") > -1 ? /^(?:\s+|#.*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/ : /^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/, e.slice(t))
    }
    function c(e) {
        for (; e.length < 4; )
            e = "0" + e;
        return e
    }
    function h(e, t) {
        var n;
        if (i(t) !== t)
            throw new SyntaxError("Invalid duplicate regex flag " + t);
        for (e = k.replace.call(e, /^\(\?([\w$]+)\)/, (function(e, n) {
            if (k.test.call(/[gy]/, n))
                throw new SyntaxError("Cannot use flag g or y in mode modifier " + e);
            return t = i(t + n),
            ""
        }
        )),
        n = 0; n < t.length; ++n)
            if (!L[t.charAt(n)])
                throw new SyntaxError("Unknown regex flag " + t.charAt(n));
        return {
            pattern: e,
            flags: t
        }
    }
    function f(e) {
        var t = {};
        return u(e, "String") ? (y.forEach(e, /[^\s,]+/, (function(e) {
            t[e] = !0
        }
        )),
        t) : e
    }
    function p(e) {
        if (!/^[\w$]$/.test(e))
            throw new Error("Flag must be a single character A-Za-z0-9_$");
        L[e] = !0
    }
    function m(e, t, i, n, s) {
        for (var o, a, r = S.length, l = e.charAt(i), u = null; r--; )
            if (!((a = S[r]).leadChar && a.leadChar !== l || a.scope !== n && "all" !== a.scope || a.flag && -1 === t.indexOf(a.flag)) && (o = y.exec(e, a.regex, i, "sticky"))) {
                u = {
                    matchLength: o[0].length,
                    output: a.handler.call(s, o, n, t),
                    reparse: a.reparse
                };
                break
            }
        return u
    }
    function g(e) {
        x.astral = e
    }
    function v(e) {
        RegExp.prototype.exec = (e ? C : k).exec,
        RegExp.prototype.test = (e ? C : k).test,
        String.prototype.match = (e ? C : k).match,
        String.prototype.replace = (e ? C : k).replace,
        String.prototype.split = (e ? C : k).split,
        x.natives = e
    }
    function b(e) {
        if (null == e)
            throw new TypeError("Cannot convert null or undefined to object");
        return e
    }
    var y, _, w = "xregexp", x = {
        astral: !1,
        natives: !1
    }, k = {
        exec: RegExp.prototype.exec,
        test: RegExp.prototype.test,
        match: String.prototype.match,
        replace: String.prototype.replace,
        split: String.prototype.split
    }, C = {}, D = {}, T = {}, S = [], I = "default", P = "class", E = {
        default: /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,
        class: /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/
    }, A = /\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g, M = k.exec.call(/()??/, "")[1] === e, N = function() {
        var e = !0;
        try {
            new RegExp("","u")
        } catch (t) {
            e = !1
        }
        return e
    }(), $ = function() {
        var e = !0;
        try {
            new RegExp("","y")
        } catch (t) {
            e = !1
        }
        return e
    }(), O = /a/.flags !== e, L = {
        g: !0,
        i: !0,
        m: !0,
        u: N,
        y: $
    }, j = {}.toString;
    return (y = function(i, s) {
        var o, a, r, l, u, d = {
            hasNamedCapture: !1,
            captureNames: []
        }, c = I, f = "", p = 0;
        if (y.isRegExp(i)) {
            if (s !== e)
                throw new TypeError("Cannot supply flags when copying a RegExp");
            return n(i)
        }
        if (i = i === e ? "" : String(i),
        s = s === e ? "" : String(s),
        y.isInstalled("astral") && -1 === s.indexOf("A") && (s += "A"),
        T[i] || (T[i] = {}),
        !T[i][s]) {
            for (l = (o = h(i, s)).pattern,
            u = o.flags; p < l.length; ) {
                do {
                    (o = m(l, u, p, c, d)) && o.reparse && (l = l.slice(0, p) + o.output + l.slice(p + o.matchLength))
                } while (o && o.reparse);
                o ? (f += o.output,
                p += o.matchLength || 1) : (f += a = y.exec(l, E[c], p, "sticky")[0],
                p += a.length,
                "[" === a && c === I ? c = P : "]" === a && c === P && (c = I))
            }
            T[i][s] = {
                pattern: k.replace.call(f, /\(\?:\)(?=\(\?:\))|^\(\?:\)|\(\?:\)$/g, ""),
                flags: k.replace.call(u, /[^gimuy]+/g, ""),
                captures: d.hasNamedCapture ? d.captureNames : null
            }
        }
        return r = T[i][s],
        t(new RegExp(r.pattern,r.flags), r.captures, i, s)
    }
    ).prototype = new RegExp,
    y.version = "3.1.0-dev",
    y.addToken = function(e, t, i) {
        var s, o = (i = i || {}).optionalFlags;
        if (i.flag && p(i.flag),
        o)
            for (o = k.split.call(o, ""),
            s = 0; s < o.length; ++s)
                p(o[s]);
        S.push({
            regex: n(e, {
                addG: !0,
                addY: $,
                isInternalOnly: !0
            }),
            handler: t,
            scope: i.scope || I,
            flag: i.flag,
            reparse: i.reparse,
            leadChar: i.leadChar
        }),
        y.cache.flush("patterns")
    }
    ,
    y.cache = function(e, t) {
        return D[e] || (D[e] = {}),
        D[e][t] || (D[e][t] = y(e, t))
    }
    ,
    y.cache.flush = function(e) {
        "patterns" === e ? T = {} : D = {}
    }
    ,
    y.escape = function(e) {
        return k.replace.call(b(e), /[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
    }
    ,
    y.exec = function(e, t, i, s) {
        var o, a, r = "g", l = !1;
        return (l = $ && !!(s || t.sticky && !1 !== s)) && (r += "y"),
        t[w] = t[w] || {},
        (a = t[w][r] || (t[w][r] = n(t, {
            addG: !0,
            addY: l,
            removeY: !1 === s,
            isInternalOnly: !0
        }))).lastIndex = i = i || 0,
        o = C.exec.call(a, e),
        s && o && o.index !== i && (o = null),
        t.global && (t.lastIndex = o ? a.lastIndex : 0),
        o
    }
    ,
    y.forEach = function(e, t, i) {
        for (var n, s = 0, o = -1; n = y.exec(e, t, s); )
            i(n, ++o, e, t),
            s = n.index + (n[0].length || 1)
    }
    ,
    y.globalize = function(e) {
        return n(e, {
            addG: !0
        })
    }
    ,
    y.install = function(e) {
        e = f(e),
        !x.astral && e.astral && g(!0),
        !x.natives && e.natives && v(!0)
    }
    ,
    y.isInstalled = function(e) {
        return !!x[e]
    }
    ,
    y.isRegExp = function(e) {
        return "[object RegExp]" === j.call(e)
    }
    ,
    y.match = function(e, t, i) {
        var s, o, a = t.global && "one" !== i || "all" === i, r = (a ? "g" : "") + (t.sticky ? "y" : "") || "noGY";
        return t[w] = t[w] || {},
        o = t[w][r] || (t[w][r] = n(t, {
            addG: !!a,
            addY: !!t.sticky,
            removeG: "one" === i,
            isInternalOnly: !0
        })),
        s = k.match.call(b(e), o),
        t.global && (t.lastIndex = "one" === i && s ? s.index + s[0].length : 0),
        a ? s || [] : s && s[0]
    }
    ,
    y.matchChain = function(e, t) {
        return function e(i, n) {
            var s, o = t[n].regex ? t[n] : {
                regex: t[n]
            }, a = [], r = function(e) {
                if (o.backref) {
                    if (!(e.hasOwnProperty(o.backref) || +o.backref < e.length))
                        throw new ReferenceError("Backreference to undefined group: " + o.backref);
                    a.push(e[o.backref] || "")
                } else
                    a.push(e[0])
            };
            for (s = 0; s < i.length; ++s)
                y.forEach(i[s], o.regex, r);
            return n !== t.length - 1 && a.length ? e(a, n + 1) : a
        }([e], 0)
    }
    ,
    y.replace = function(e, t, i, s) {
        var o, a = y.isRegExp(t), r = t.global && "one" !== s || "all" === s, l = (r ? "g" : "") + (t.sticky ? "y" : "") || "noGY", u = t;
        return a ? (t[w] = t[w] || {},
        u = t[w][l] || (t[w][l] = n(t, {
            addG: !!r,
            addY: !!t.sticky,
            removeG: "one" === s,
            isInternalOnly: !0
        }))) : r && (u = new RegExp(y.escape(String(t)),"g")),
        o = C.replace.call(b(e), u, i),
        a && t.global && (t.lastIndex = 0),
        o
    }
    ,
    y.replaceEach = function(e, t) {
        var i, n;
        for (i = 0; i < t.length; ++i)
            n = t[i],
            e = y.replace(e, n[0], n[1], n[2]);
        return e
    }
    ,
    y.split = function(e, t, i) {
        return C.split.call(b(e), t, i)
    }
    ,
    y.test = function(e, t, i, n) {
        return !!y.exec(e, t, i, n)
    }
    ,
    y.uninstall = function(e) {
        e = f(e),
        x.astral && e.astral && g(!1),
        x.natives && e.natives && v(!1)
    }
    ,
    y.union = function(e, t) {
        var i, n, s, o, a = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g, r = [], l = 0, d = function(e, t, s) {
            var o = n[l - i];
            if (t) {
                if (++l,
                o)
                    return "(?<" + o + ">"
            } else if (s)
                return "\\" + (+s + i);
            return e
        };
        if (!u(e, "Array") || !e.length)
            throw new TypeError("Must provide a nonempty array of patterns to merge");
        for (o = 0; o < e.length; ++o)
            s = e[o],
            y.isRegExp(s) ? (i = l,
            n = s[w] && s[w].captureNames || [],
            r.push(k.replace.call(y(s.source).source, a, d))) : r.push(y.escape(s));
        return y(r.join("|"), t)
    }
    ,
    C.exec = function(t) {
        var i, s, o, a = this.lastIndex, r = k.exec.apply(this, arguments);
        if (r) {
            if (!M && r.length > 1 && l(r, "") > -1 && (s = n(this, {
                removeG: !0,
                isInternalOnly: !0
            }),
            k.replace.call(String(t).slice(r.index), s, (function() {
                var t, i = arguments.length;
                for (t = 1; t < i - 2; ++t)
                    arguments[t] === e && (r[t] = e)
            }
            ))),
            this[w] && this[w].captureNames)
                for (o = 1; o < r.length; ++o)
                    (i = this[w].captureNames[o - 1]) && (r[i] = r[o]);
            this.global && !r[0].length && this.lastIndex > r.index && (this.lastIndex = r.index)
        }
        return this.global || (this.lastIndex = a),
        r
    }
    ,
    C.test = function(e) {
        return !!C.exec.call(this, e)
    }
    ,
    C.match = function(e) {
        var t;
        if (y.isRegExp(e)) {
            if (e.global)
                return t = k.match.apply(this, arguments),
                e.lastIndex = 0,
                t
        } else
            e = new RegExp(e);
        return C.exec.call(e, b(this))
    }
    ,
    C.replace = function(t, i) {
        var n, s, o, a = y.isRegExp(t);
        return a ? (t[w] && (s = t[w].captureNames),
        n = t.lastIndex) : t += "",
        o = u(i, "Function") ? k.replace.call(String(this), t, (function() {
            var n, o = arguments;
            if (s)
                for (o[0] = new String(o[0]),
                n = 0; n < s.length; ++n)
                    s[n] && (o[0][s[n]] = o[n + 1]);
            return a && t.global && (t.lastIndex = o[o.length - 2] + o[0].length),
            i.apply(e, o)
        }
        )) : k.replace.call(null == this ? this : String(this), t, (function() {
            var e = arguments;
            return k.replace.call(String(i), A, (function(t, i, n) {
                var o;
                if (i) {
                    if ((o = +i) <= e.length - 3)
                        return e[o] || "";
                    if ((o = s ? l(s, i) : -1) < 0)
                        throw new SyntaxError("Backreference to undefined group " + t);
                    return e[o + 1] || ""
                }
                if ("$" === n)
                    return "$";
                if ("&" === n || 0 == +n)
                    return e[0];
                if ("`" === n)
                    return e[e.length - 1].slice(0, e[e.length - 2]);
                if ("'" === n)
                    return e[e.length - 1].slice(e[e.length - 2] + e[0].length);
                if (n = +n,
                !isNaN(n)) {
                    if (n > e.length - 3)
                        throw new SyntaxError("Backreference to undefined group " + t);
                    return e[n] || ""
                }
                throw new SyntaxError("Invalid token " + t)
            }
            ))
        }
        )),
        a && (t.global ? t.lastIndex = 0 : t.lastIndex = n),
        o
    }
    ,
    C.split = function(t, i) {
        if (!y.isRegExp(t))
            return k.split.apply(this, arguments);
        var n, s = String(this), o = [], a = t.lastIndex, r = 0;
        return i = (i === e ? -1 : i) >>> 0,
        y.forEach(s, t, (function(e) {
            e.index + e[0].length > r && (o.push(s.slice(r, e.index)),
            e.length > 1 && e.index < s.length && Array.prototype.push.apply(o, e.slice(1)),
            n = e[0].length,
            r = e.index + n)
        }
        )),
        r === s.length ? k.test.call(t, "") && !n || o.push("") : o.push(s.slice(r)),
        t.lastIndex = a,
        o.length > i ? o.slice(0, i) : o
    }
    ,
    (_ = y.addToken)(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/, (function(e, t) {
        if ("B" === e[1] && t === I)
            return e[0];
        throw new SyntaxError("Invalid escape " + e[0])
    }
    ), {
        scope: "all",
        leadChar: "\\"
    }),
    _(/\\u{([\dA-Fa-f]+)}/, (function(e, t, i) {
        var n = s(e[1]);
        if (n > 1114111)
            throw new SyntaxError("Invalid Unicode code point " + e[0]);
        if (n <= 65535)
            return "\\u" + c(r(n));
        if (N && i.indexOf("u") > -1)
            return e[0];
        throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u")
    }
    ), {
        scope: "all",
        leadChar: "\\"
    }),
    _(/\[(\^?)]/, (function(e) {
        return e[1] ? "[\\s\\S]" : "\\b\\B"
    }
    ), {
        leadChar: "["
    }),
    _(/\(\?#[^)]*\)/, (function(e, t, i) {
        return d(e.input, e.index + e[0].length, i) ? "" : "(?:)"
    }
    ), {
        leadChar: "("
    }),
    _(/\s+|#.*/, (function(e, t, i) {
        return d(e.input, e.index + e[0].length, i) ? "" : "(?:)"
    }
    ), {
        flag: "x"
    }),
    _(/\./, (function() {
        return "[\\s\\S]"
    }
    ), {
        flag: "s",
        leadChar: "."
    }),
    _(/\\k<([\w$]+)>/, (function(e) {
        var t = isNaN(e[1]) ? l(this.captureNames, e[1]) + 1 : +e[1]
          , i = e.index + e[0].length;
        if (!t || t > this.captureNames.length)
            throw new SyntaxError("Backreference to undefined group " + e[0]);
        return "\\" + t + (i === e.input.length || isNaN(e.input.charAt(i)) ? "" : "(?:)")
    }
    ), {
        leadChar: "\\"
    }),
    _(/\\(\d+)/, (function(e, t) {
        if (!(t === I && /^[1-9]/.test(e[1]) && +e[1] <= this.captureNames.length) && "0" !== e[1])
            throw new SyntaxError("Cannot use octal escape or backreference to undefined group " + e[0]);
        return e[0]
    }
    ), {
        scope: "all",
        leadChar: "\\"
    }),
    _(/\(\?P?<([\w$]+)>/, (function(e) {
        if (!isNaN(e[1]))
            throw new SyntaxError("Cannot use integer as capture name " + e[0]);
        if ("length" === e[1] || "__proto__" === e[1])
            throw new SyntaxError("Cannot use reserved word as capture name " + e[0]);
        if (l(this.captureNames, e[1]) > -1)
            throw new SyntaxError("Cannot use same name for multiple groups " + e[0]);
        return this.captureNames.push(e[1]),
        this.hasNamedCapture = !0,
        "("
    }
    ), {
        leadChar: "("
    }),
    _(/\((?!\?)/, (function(e, t, i) {
        return i.indexOf("n") > -1 ? "(?:" : (this.captureNames.push(null),
        "(")
    }
    ), {
        optionalFlags: "n",
        leadChar: "("
    }),
    y
}();
!function(e) {
    "use strict";
    function t(e) {
        return e.replace(/[- _]+/g, "").toLowerCase()
    }
    function i(e) {
        for (; e.length < 4; )
            e = "0" + e;
        return e
    }
    function n(e) {
        return parseInt(e, 16)
    }
    function s(e) {
        return parseInt(e, 10).toString(16)
    }
    function o(e) {
        var t = /^\\[xu](.+)/.exec(e);
        return t ? n(t[1]) : e.charCodeAt("\\" === e.charAt(0) ? 1 : 0)
    }
    function a(t) {
        var n, a = "", r = -1;
        return e.forEach(t, /(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/, (function(e) {
            (n = o(e[1])) > r + 1 && (a += "\\u" + i(s(r + 1)),
            n > r + 2 && (a += "-\\u" + i(s(n - 1)))),
            r = o(e[2] || e[1])
        }
        )),
        r < 65535 && (a += "\\u" + i(s(r + 1)),
        r < 65534 && (a += "-\\uFFFF")),
        a
    }
    function r(e) {
        var t = "b!";
        return d[e][t] || (d[e][t] = a(d[e].bmp))
    }
    function l(e, t) {
        var i = d[e]
          , n = "";
        return i.bmp && !i.isBmpLast && (n = "[" + i.bmp + "]" + (i.astral ? "|" : "")),
        i.astral && (n += i.astral),
        i.isBmpLast && i.bmp && (n += (i.astral ? "|" : "") + "[" + i.bmp + "]"),
        t ? "(?:(?!" + n + ")(?:[\ud800-\udbff][\udc00-\udfff]|[\0-\uffff]))" : "(?:" + n + ")"
    }
    function u(e, t) {
        var i = t ? "a!" : "a=";
        return d[e][i] || (d[e][i] = l(e, t))
    }
    var d = {};
    e.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/, (function(e, i, n) {
        var s = "Invalid double negation "
          , o = "Unknown Unicode token "
          , a = "Unicode token missing data "
          , l = "Astral mode required for Unicode token "
          , c = "Astral mode does not support Unicode tokens within character classes"
          , h = "P" === e[1] || !!e[2]
          , f = n.indexOf("A") > -1
          , p = t(e[4] || e[3])
          , m = d[p];
        if ("P" === e[1] && e[2])
            throw new SyntaxError(s + e[0]);
        if (!d.hasOwnProperty(p))
            throw new SyntaxError(o + e[0]);
        if (m.inverseOf) {
            if (p = t(m.inverseOf),
            !d.hasOwnProperty(p))
                throw new ReferenceError(a + e[0] + " -> " + m.inverseOf);
            m = d[p],
            h = !h
        }
        if (!m.bmp && !f)
            throw new SyntaxError(l + e[0]);
        if (f) {
            if ("class" === i)
                throw new SyntaxError(c);
            return u(p, h)
        }
        return "class" === i ? h ? r(p) : m.bmp : (h ? "[^" : "[") + m.bmp + "]"
    }
    ), {
        scope: "all",
        optionalFlags: "A",
        leadChar: "\\"
    }),
    e.addUnicodeData = function(i) {
        var n, s, o = "Unicode token requires name", a = "Unicode token has no character data ";
        for (s = 0; s < i.length; ++s) {
            if (!(n = i[s]).name)
                throw new Error(o);
            if (!(n.inverseOf || n.bmp || n.astral))
                throw new Error(a + n.name);
            d[t(n.name)] = n,
            n.alias && (d[t(n.alias)] = n)
        }
        e.cache.flush("patterns")
    }
}(XRegExp),
function(e) {
    "use strict";
    if (!e.addUnicodeData)
        throw new ReferenceError("Unicode Base must be loaded before Unicode Categories");
    e.addUnicodeData([{
        name: "C",
        alias: "Other",
        isBmpLast: !0,
        bmp: "\0-\x1f\x7f-\x9f\xad\u0378\u0379\u0380-\u0383\u038b\u038d\u03a2\u0530\u0557\u0558\u0560\u0588\u058b\u058c\u0590\u05c8-\u05cf\u05eb-\u05ef\u05f5-\u0605\u061c\u061d\u06dd\u070e\u070f\u074b\u074c\u07b2-\u07bf\u07fb-\u07ff\u082e\u082f\u083f\u085c\u085d\u085f-\u089f\u08b5-\u08e2\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de\u09e4\u09e5\u09fc-\u0a00\u0a04\u0a0b-\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43-\u0a46\u0a49\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d\u0a5f-\u0a65\u0a76-\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1-\u0adf\u0ae4\u0ae5\u0af2-\u0af8\u0afa-\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b45\u0b46\u0b49\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b64\u0b65\u0b78-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0bff\u0c04\u0c0d\u0c11\u0c29\u0c3a-\u0c3c\u0c45\u0c49\u0c4e-\u0c54\u0c57\u0c5b-\u0c5f\u0c64\u0c65\u0c70-\u0c77\u0c80\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce4\u0ce5\u0cf0\u0cf3-\u0d00\u0d04\u0d0d\u0d11\u0d3b\u0d3c\u0d45\u0d49\u0d4f-\u0d56\u0d58-\u0d5e\u0d64\u0d65\u0d76-\u0d78\u0d80\u0d81\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5\u0dd7\u0de0-\u0de5\u0df0\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ee0-\u0eff\u0f48\u0f6d-\u0f70\u0f98\u0fbd\u0fcd\u0fdb-\u0fff\u10c6\u10c8-\u10cc\u10ce\u10cf\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u137d-\u137f\u139a-\u139f\u13f6\u13f7\u13fe\u13ff\u169d-\u169f\u16f9-\u16ff\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d\u1771\u1774-\u177f\u17de\u17df\u17ea-\u17ef\u17fa-\u17ff\u180e\u180f\u181a-\u181f\u1878-\u187f\u18ab-\u18af\u18f6-\u18ff\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c\u1a1d\u1a5f\u1a7d\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae\u1aaf\u1abf-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c80-\u1cbf\u1cc8-\u1ccf\u1cf7\u1cfa-\u1cff\u1df6-\u1dfb\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u200b-\u200f\u202a-\u202e\u2060-\u206f\u2072\u2073\u208f\u209d-\u209f\u20bf-\u20cf\u20f1-\u20ff\u218c-\u218f\u23fb-\u23ff\u2427-\u243f\u244b-\u245f\u2b74\u2b75\u2b96\u2b97\u2bba-\u2bbc\u2bc9\u2bd2-\u2beb\u2bf0-\u2bff\u2c2f\u2c5f\u2cf4-\u2cf8\u2d26\u2d28-\u2d2c\u2d2e\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2e43-\u2e7f\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040\u3097\u3098\u3100-\u3104\u312e-\u3130\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f\u32ff\u4db6-\u4dbf\u9fd6-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua6f8-\ua6ff\ua7ae\ua7af\ua7b8-\ua7f6\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c5-\ua8cd\ua8da-\ua8df\ua8fe\ua8ff\ua954-\ua95e\ua97d-\ua97f\ua9ce\ua9da-\ua9dd\ua9ff\uaa37-\uaa3f\uaa4e\uaa4f\uaa5a\uaa5b\uaac3-\uaada\uaaf7-\uab00\uab07\uab08\uab0f\uab10\uab17-\uab1f\uab27\uab2f\uab66-\uab6f\uabee\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\uf8ff\ufa6e\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90\ufd91\ufdc8-\ufdef\ufdfe\ufdff\ufe1a-\ufe1f\ufe53\ufe67\ufe6c-\ufe6f\ufe75\ufefd-\uff00\uffbf-\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd-\uffdf\uffe7\uffef-\ufffb\ufffe\uffff",
        astral: "\ud834[\udcf6-\udcff\udd27\udd28\udd73-\udd7a\udde9-\uddff\ude46-\udeff\udf57-\udf5f\udf72-\udfff]|\ud836[\ude8c-\ude9a\udea0\udeb0-\udfff]|\ud83c[\udc2c-\udc2f\udc94-\udc9f\udcaf\udcb0\udcc0\udcd0\udcf6-\udcff\udd0d-\udd0f\udd2f\udd6c-\udd6f\udd9b-\udde5\ude03-\ude0f\ude3b-\ude3f\ude49-\ude4f\ude52-\udeff]|\ud81a[\ude39-\ude3f\ude5f\ude6a-\ude6d\ude70-\udecf\udeee\udeef\udef6-\udeff\udf46-\udf4f\udf5a\udf62\udf78-\udf7c\udf90-\udfff]|\ud809[\udc6f\udc75-\udc7f\udd44-\udfff]|\ud81b[\udc00-\udeff\udf45-\udf4f\udf7f-\udf8e\udfa0-\udfff]|\ud86e[\udc1e\udc1f]|\ud83d[\udd7a\udda4\uded1-\udedf\udeed-\udeef\udef4-\udeff\udf74-\udf7f\udfd5-\udfff]|\ud801[\udc9e\udc9f\udcaa-\udcff\udd28-\udd2f\udd64-\udd6e\udd70-\uddff\udf37-\udf3f\udf56-\udf5f\udf68-\udfff]|\ud800[\udc0c\udc27\udc3b\udc3e\udc4e\udc4f\udc5e-\udc7f\udcfb-\udcff\udd03-\udd06\udd34-\udd36\udd8d-\udd8f\udd9c-\udd9f\udda1-\uddcf\uddfe-\ude7f\ude9d-\ude9f\uded1-\udedf\udefc-\udeff\udf24-\udf2f\udf4b-\udf4f\udf7b-\udf7f\udf9e\udfc4-\udfc7\udfd6-\udfff]|\ud869[\uded7-\udeff]|\ud83b[\udc00-\uddff\ude04\ude20\ude23\ude25\ude26\ude28\ude33\ude38\ude3a\ude3c-\ude41\ude43-\ude46\ude48\ude4a\ude4c\ude50\ude53\ude55\ude56\ude58\ude5a\ude5c\ude5e\ude60\ude63\ude65\ude66\ude6b\ude73\ude78\ude7d\ude7f\ude8a\ude9c-\udea0\udea4\udeaa\udebc-\udeef\udef2-\udfff]|\ud87e[\ude1e-\udfff]|\udb40[\udc00-\udcff\uddf0-\udfff]|\ud804[\udc4e-\udc51\udc70-\udc7e\udcbd\udcc2-\udccf\udce9-\udcef\udcfa-\udcff\udd35\udd44-\udd4f\udd77-\udd7f\uddce\uddcf\udde0\uddf5-\uddff\ude12\ude3e-\ude7f\ude87\ude89\ude8e\ude9e\udeaa-\udeaf\udeeb-\udeef\udefa-\udeff\udf04\udf0d\udf0e\udf11\udf12\udf29\udf31\udf34\udf3a\udf3b\udf45\udf46\udf49\udf4a\udf4e\udf4f\udf51-\udf56\udf58-\udf5c\udf64\udf65\udf6d-\udf6f\udf75-\udfff]|\ud83a[\udcc5\udcc6\udcd7-\udfff]|\ud80d[\udc2f-\udfff]|\ud86d[\udf35-\udf3f]|[\ud807\ud80a\ud80b\ud80e-\ud810\ud812-\ud819\ud81c-\ud82b\ud82d\ud82e\ud830-\ud833\ud837-\ud839\ud83f\ud874-\ud87d\ud87f-\udb3f\udb41-\udbff][\udc00-\udfff]|\ud806[\udc00-\udc9f\udcf3-\udcfe\udd00-\udebf\udef9-\udfff]|\ud803[\udc49-\udc7f\udcb3-\udcbf\udcf3-\udcf9\udd00-\ude5f\ude7f-\udfff]|\ud835[\udc55\udc9d\udca0\udca1\udca3\udca4\udca7\udca8\udcad\udcba\udcbc\udcc4\udd06\udd0b\udd0c\udd15\udd1d\udd3a\udd3f\udd45\udd47-\udd49\udd51\udea6\udea7\udfcc\udfcd]|\ud805[\udc00-\udc7f\udcc8-\udccf\udcda-\udd7f\uddb6\uddb7\uddde-\uddff\ude45-\ude4f\ude5a-\ude7f\udeb8-\udebf\udeca-\udeff\udf1a-\udf1c\udf2c-\udf2f\udf40-\udfff]|\ud802[\udc06\udc07\udc09\udc36\udc39-\udc3b\udc3d\udc3e\udc56\udc9f-\udca6\udcb0-\udcdf\udcf3\udcf6-\udcfa\udd1c-\udd1e\udd3a-\udd3e\udd40-\udd7f\uddb8-\uddbb\uddd0\uddd1\ude04\ude07-\ude0b\ude14\ude18\ude34-\ude37\ude3b-\ude3e\ude48-\ude4f\ude59-\ude5f\udea0-\udebf\udee7-\udeea\udef7-\udeff\udf36-\udf38\udf56\udf57\udf73-\udf77\udf92-\udf98\udf9d-\udfa8\udfb0-\udfff]|\ud808[\udf9a-\udfff]|\ud82f[\udc6b-\udc6f\udc7d-\udc7f\udc89-\udc8f\udc9a\udc9b\udca0-\udfff]|\ud82c[\udc02-\udfff]|\ud811[\ude47-\udfff]|\ud83e[\udc0c-\udc0f\udc48-\udc4f\udc5a-\udc5f\udc88-\udc8f\udcae-\udd0f\udd19-\udd7f\udd85-\uddbf\uddc1-\udfff]|\ud873[\udea2-\udfff]"
    }, {
        name: "Cc",
        alias: "Control",
        bmp: "\0-\x1f\x7f-\x9f"
    }, {
        name: "Cf",
        alias: "Format",
        bmp: "\xad\u0600-\u0605\u061c\u06dd\u070f\u180e\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u206f\ufeff\ufff9-\ufffb",
        astral: "\udb40[\udc01\udc20-\udc7f]|\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|\ud804\udcbd"
    }, {
        name: "Cn",
        alias: "Unassigned",
        bmp: "\u0378\u0379\u0380-\u0383\u038b\u038d\u03a2\u0530\u0557\u0558\u0560\u0588\u058b\u058c\u0590\u05c8-\u05cf\u05eb-\u05ef\u05f5-\u05ff\u061d\u070e\u074b\u074c\u07b2-\u07bf\u07fb-\u07ff\u082e\u082f\u083f\u085c\u085d\u085f-\u089f\u08b5-\u08e2\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de\u09e4\u09e5\u09fc-\u0a00\u0a04\u0a0b-\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43-\u0a46\u0a49\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d\u0a5f-\u0a65\u0a76-\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1-\u0adf\u0ae4\u0ae5\u0af2-\u0af8\u0afa-\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b45\u0b46\u0b49\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b64\u0b65\u0b78-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0bff\u0c04\u0c0d\u0c11\u0c29\u0c3a-\u0c3c\u0c45\u0c49\u0c4e-\u0c54\u0c57\u0c5b-\u0c5f\u0c64\u0c65\u0c70-\u0c77\u0c80\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce4\u0ce5\u0cf0\u0cf3-\u0d00\u0d04\u0d0d\u0d11\u0d3b\u0d3c\u0d45\u0d49\u0d4f-\u0d56\u0d58-\u0d5e\u0d64\u0d65\u0d76-\u0d78\u0d80\u0d81\u0d84\u0d97-\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5\u0dd7\u0de0-\u0de5\u0df0\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ee0-\u0eff\u0f48\u0f6d-\u0f70\u0f98\u0fbd\u0fcd\u0fdb-\u0fff\u10c6\u10c8-\u10cc\u10ce\u10cf\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u137d-\u137f\u139a-\u139f\u13f6\u13f7\u13fe\u13ff\u169d-\u169f\u16f9-\u16ff\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d\u1771\u1774-\u177f\u17de\u17df\u17ea-\u17ef\u17fa-\u17ff\u180f\u181a-\u181f\u1878-\u187f\u18ab-\u18af\u18f6-\u18ff\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c\u1a1d\u1a5f\u1a7d\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae\u1aaf\u1abf-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c80-\u1cbf\u1cc8-\u1ccf\u1cf7\u1cfa-\u1cff\u1df6-\u1dfb\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u2065\u2072\u2073\u208f\u209d-\u209f\u20bf-\u20cf\u20f1-\u20ff\u218c-\u218f\u23fb-\u23ff\u2427-\u243f\u244b-\u245f\u2b74\u2b75\u2b96\u2b97\u2bba-\u2bbc\u2bc9\u2bd2-\u2beb\u2bf0-\u2bff\u2c2f\u2c5f\u2cf4-\u2cf8\u2d26\u2d28-\u2d2c\u2d2e\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2e43-\u2e7f\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040\u3097\u3098\u3100-\u3104\u312e-\u3130\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f\u32ff\u4db6-\u4dbf\u9fd6-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua6f8-\ua6ff\ua7ae\ua7af\ua7b8-\ua7f6\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c5-\ua8cd\ua8da-\ua8df\ua8fe\ua8ff\ua954-\ua95e\ua97d-\ua97f\ua9ce\ua9da-\ua9dd\ua9ff\uaa37-\uaa3f\uaa4e\uaa4f\uaa5a\uaa5b\uaac3-\uaada\uaaf7-\uab00\uab07\uab08\uab0f\uab10\uab17-\uab1f\uab27\uab2f\uab66-\uab6f\uabee\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\ud7ff\ufa6e\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90\ufd91\ufdc8-\ufdef\ufdfe\ufdff\ufe1a-\ufe1f\ufe53\ufe67\ufe6c-\ufe6f\ufe75\ufefd\ufefe\uff00\uffbf-\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd-\uffdf\uffe7\uffef-\ufff8\ufffe\uffff",
        astral: "\udb40[\udc00\udc02-\udc1f\udc80-\udcff\uddf0-\udfff]|\ud834[\udcf6-\udcff\udd27\udd28\udde9-\uddff\ude46-\udeff\udf57-\udf5f\udf72-\udfff]|\ud83c[\udc2c-\udc2f\udc94-\udc9f\udcaf\udcb0\udcc0\udcd0\udcf6-\udcff\udd0d-\udd0f\udd2f\udd6c-\udd6f\udd9b-\udde5\ude03-\ude0f\ude3b-\ude3f\ude49-\ude4f\ude52-\udeff]|\ud81a[\ude39-\ude3f\ude5f\ude6a-\ude6d\ude70-\udecf\udeee\udeef\udef6-\udeff\udf46-\udf4f\udf5a\udf62\udf78-\udf7c\udf90-\udfff]|\ud809[\udc6f\udc75-\udc7f\udd44-\udfff]|\ud81b[\udc00-\udeff\udf45-\udf4f\udf7f-\udf8e\udfa0-\udfff]|\ud86e[\udc1e\udc1f]|\ud83d[\udd7a\udda4\uded1-\udedf\udeed-\udeef\udef4-\udeff\udf74-\udf7f\udfd5-\udfff]|\ud801[\udc9e\udc9f\udcaa-\udcff\udd28-\udd2f\udd64-\udd6e\udd70-\uddff\udf37-\udf3f\udf56-\udf5f\udf68-\udfff]|\ud800[\udc0c\udc27\udc3b\udc3e\udc4e\udc4f\udc5e-\udc7f\udcfb-\udcff\udd03-\udd06\udd34-\udd36\udd8d-\udd8f\udd9c-\udd9f\udda1-\uddcf\uddfe-\ude7f\ude9d-\ude9f\uded1-\udedf\udefc-\udeff\udf24-\udf2f\udf4b-\udf4f\udf7b-\udf7f\udf9e\udfc4-\udfc7\udfd6-\udfff]|\ud869[\uded7-\udeff]|\ud83b[\udc00-\uddff\ude04\ude20\ude23\ude25\ude26\ude28\ude33\ude38\ude3a\ude3c-\ude41\ude43-\ude46\ude48\ude4a\ude4c\ude50\ude53\ude55\ude56\ude58\ude5a\ude5c\ude5e\ude60\ude63\ude65\ude66\ude6b\ude73\ude78\ude7d\ude7f\ude8a\ude9c-\udea0\udea4\udeaa\udebc-\udeef\udef2-\udfff]|[\udbbf\udbff][\udffe\udfff]|\ud87e[\ude1e-\udfff]|\ud82f[\udc6b-\udc6f\udc7d-\udc7f\udc89-\udc8f\udc9a\udc9b\udca4-\udfff]|\ud83a[\udcc5\udcc6\udcd7-\udfff]|\ud80d[\udc2f-\udfff]|\ud86d[\udf35-\udf3f]|[\ud807\ud80a\ud80b\ud80e-\ud810\ud812-\ud819\ud81c-\ud82b\ud82d\ud82e\ud830-\ud833\ud837-\ud839\ud83f\ud874-\ud87d\ud87f-\udb3f\udb41-\udb7f][\udc00-\udfff]|\ud806[\udc00-\udc9f\udcf3-\udcfe\udd00-\udebf\udef9-\udfff]|\ud803[\udc49-\udc7f\udcb3-\udcbf\udcf3-\udcf9\udd00-\ude5f\ude7f-\udfff]|\ud835[\udc55\udc9d\udca0\udca1\udca3\udca4\udca7\udca8\udcad\udcba\udcbc\udcc4\udd06\udd0b\udd0c\udd15\udd1d\udd3a\udd3f\udd45\udd47-\udd49\udd51\udea6\udea7\udfcc\udfcd]|\ud836[\ude8c-\ude9a\udea0\udeb0-\udfff]|\ud805[\udc00-\udc7f\udcc8-\udccf\udcda-\udd7f\uddb6\uddb7\uddde-\uddff\ude45-\ude4f\ude5a-\ude7f\udeb8-\udebf\udeca-\udeff\udf1a-\udf1c\udf2c-\udf2f\udf40-\udfff]|\ud802[\udc06\udc07\udc09\udc36\udc39-\udc3b\udc3d\udc3e\udc56\udc9f-\udca6\udcb0-\udcdf\udcf3\udcf6-\udcfa\udd1c-\udd1e\udd3a-\udd3e\udd40-\udd7f\uddb8-\uddbb\uddd0\uddd1\ude04\ude07-\ude0b\ude14\ude18\ude34-\ude37\ude3b-\ude3e\ude48-\ude4f\ude59-\ude5f\udea0-\udebf\udee7-\udeea\udef7-\udeff\udf36-\udf38\udf56\udf57\udf73-\udf77\udf92-\udf98\udf9d-\udfa8\udfb0-\udfff]|\ud808[\udf9a-\udfff]|\ud804[\udc4e-\udc51\udc70-\udc7e\udcc2-\udccf\udce9-\udcef\udcfa-\udcff\udd35\udd44-\udd4f\udd77-\udd7f\uddce\uddcf\udde0\uddf5-\uddff\ude12\ude3e-\ude7f\ude87\ude89\ude8e\ude9e\udeaa-\udeaf\udeeb-\udeef\udefa-\udeff\udf04\udf0d\udf0e\udf11\udf12\udf29\udf31\udf34\udf3a\udf3b\udf45\udf46\udf49\udf4a\udf4e\udf4f\udf51-\udf56\udf58-\udf5c\udf64\udf65\udf6d-\udf6f\udf75-\udfff]|\ud82c[\udc02-\udfff]|\ud811[\ude47-\udfff]|\ud83e[\udc0c-\udc0f\udc48-\udc4f\udc5a-\udc5f\udc88-\udc8f\udcae-\udd0f\udd19-\udd7f\udd85-\uddbf\uddc1-\udfff]|\ud873[\udea2-\udfff]"
    }, {
        name: "Co",
        alias: "Private_Use",
        bmp: "\ue000-\uf8ff",
        astral: "[\udb80-\udbbe\udbc0-\udbfe][\udc00-\udfff]|[\udbbf\udbff][\udc00-\udffd]"
    }, {
        name: "Cs",
        alias: "Surrogate",
        bmp: "\ud800-\udfff"
    }, {
        name: "L",
        alias: "Letter",
        bmp: "A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0-\u08b4\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2183\u2184\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u3006\u3031-\u3035\u303b\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6e5\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ad\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",
        astral: "\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud83a[\udc00-\udcc4]|\ud801[\udc00-\udc9d\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud80d[\udc00-\udc2e]|\ud87e[\udc00-\ude1d]|\ud81b[\udf00-\udf44\udf50\udf93-\udf9f]|[\ud80c\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud805[\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udf00-\udf19]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud809[\udc80-\udd43]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud808[\udc00-\udf99]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud811[\udc00-\ude46]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud82c[\udc00\udc01]|\ud873[\udc00-\udea1]"
    }, {
        name: "Ll",
        alias: "Lowercase_Letter",
        bmp: "a-z\xb5\xdf-\xf6\xf8-\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u0371\u0373\u0377\u037b-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7b\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f\ua771-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7fa\uab30-\uab5a\uab60-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",
        astral: "\ud803[\udcc0-\udcf2]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud801[\udc28-\udc4f]|\ud806[\udcc0-\udcdf]"
    }, {
        name: "Lm",
        alias: "Modifier_Letter",
        bmp: "\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0374\u037a\u0559\u0640\u06e5\u06e6\u07f4\u07f5\u07fa\u081a\u0824\u0828\u0971\u0e46\u0ec6\u10fc\u17d7\u1843\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78\u1d9b-\u1dbf\u2071\u207f\u2090-\u209c\u2c7c\u2c7d\u2d6f\u2e2f\u3005\u3031-\u3035\u303b\u309d\u309e\u30fc-\u30fe\ua015\ua4f8-\ua4fd\ua60c\ua67f\ua69c\ua69d\ua717-\ua71f\ua770\ua788\ua7f8\ua7f9\ua9cf\ua9e6\uaa70\uaadd\uaaf3\uaaf4\uab5c-\uab5f\uff70\uff9e\uff9f",
        astral: "\ud81a[\udf40-\udf43]|\ud81b[\udf93-\udf9f]"
    }, {
        name: "Lo",
        alias: "Other_Letter",
        bmp: "\xaa\xba\u01bb\u01c0-\u01c3\u0294\u05d0-\u05ea\u05f0-\u05f2\u0620-\u063f\u0641-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u0800-\u0815\u0840-\u0858\u08a0-\u08b4\u0904-\u0939\u093d\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e45\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10d0-\u10fa\u10fd-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17dc\u1820-\u1842\u1844-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c77\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u2135-\u2138\u2d30-\u2d67\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3006\u303c\u3041-\u3096\u309f\u30a1-\u30fa\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua014\ua016-\ua48c\ua4d0-\ua4f7\ua500-\ua60b\ua610-\ua61f\ua62a\ua62b\ua66e\ua6a0-\ua6e5\ua78f\ua7f7\ua7fb-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9e0-\ua9e4\ua9e7-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa6f\uaa71-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb\uaadc\uaae0-\uaaea\uaaf2\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff66-\uff6f\uff71-\uff9d\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",
        astral: "\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud83a[\udc00-\udcc4]|\ud803[\udc00-\udc48]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud80d[\udc00-\udc2e]|\ud87e[\udc00-\ude1d]|\ud81b[\udf00-\udf44\udf50]|[\ud80c\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud805[\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udf00-\udf19]|\ud806[\udcff\udec0-\udef8]|\ud809[\udc80-\udd43]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud808[\udc00-\udf99]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf63-\udf77\udf7d-\udf8f]|\ud801[\udc50-\udc9d\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud811[\udc00-\ude46]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud82c[\udc00\udc01]|\ud873[\udc00-\udea1]"
    }, {
        name: "Lt",
        alias: "Titlecase_Letter",
        bmp: "\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc"
    }, {
        name: "Lu",
        alias: "Uppercase_Letter",
        bmp: "A-Z\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ad\ua7b0-\ua7b4\ua7b6\uff21-\uff3a",
        astral: "\ud806[\udca0-\udcbf]|\ud803[\udc80-\udcb2]|\ud801[\udc00-\udc27]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]"
    }, {
        name: "M",
        alias: "Mark",
        bmp: "\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c00-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d01-\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u192b\u1930-\u193b\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1ab0-\u1abe\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9e5\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f",
        astral: "\ud805[\udcb0-\udcc3\uddaf-\uddb5\uddb8-\uddc0\udddc\udddd\ude30-\ude40\udeab-\udeb7\udf1d-\udf2b]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud804[\udc00-\udc02\udc38-\udc46\udc7f-\udc82\udcb0-\udcba\udd00-\udd02\udd27-\udd34\udd73\udd80-\udd82\uddb3-\uddc0\uddca-\uddcc\ude2c-\ude37\udedf-\udeea\udf00-\udf03\udf3c\udf3e-\udf44\udf47\udf48\udf4b-\udf4d\udf57\udf62\udf63\udf66-\udf6c\udf70-\udf74]|\ud81b[\udf51-\udf7e\udf8f-\udf92]|\ud81a[\udef0-\udef4\udf30-\udf36]|\ud82f[\udc9d\udc9e]|\ud800[\uddfd\udee0\udf76-\udf7a]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud802[\ude01-\ude03\ude05\ude06\ude0c-\ude0f\ude38-\ude3a\ude3f\udee5\udee6]|\ud83a[\udcd0-\udcd6]|\udb40[\udd00-\uddef]"
    }, {
        name: "Mc",
        alias: "Spacing_Mark",
        bmp: "\u0903\u093b\u093e-\u0940\u0949-\u094c\u094e\u094f\u0982\u0983\u09be-\u09c0\u09c7\u09c8\u09cb\u09cc\u09d7\u0a03\u0a3e-\u0a40\u0a83\u0abe-\u0ac0\u0ac9\u0acb\u0acc\u0b02\u0b03\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82\u0c83\u0cbe\u0cc0-\u0cc4\u0cc7\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0d02\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57\u0d82\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2\u0df3\u0f3e\u0f3f\u0f7f\u102b\u102c\u1031\u1038\u103b\u103c\u1056\u1057\u1062-\u1064\u1067-\u106d\u1083\u1084\u1087-\u108c\u108f\u109a-\u109c\u17b6\u17be-\u17c5\u17c7\u17c8\u1923-\u1926\u1929-\u192b\u1930\u1931\u1933-\u1938\u1a19\u1a1a\u1a55\u1a57\u1a61\u1a63\u1a64\u1a6d-\u1a72\u1b04\u1b35\u1b3b\u1b3d-\u1b41\u1b43\u1b44\u1b82\u1ba1\u1ba6\u1ba7\u1baa\u1be7\u1bea-\u1bec\u1bee\u1bf2\u1bf3\u1c24-\u1c2b\u1c34\u1c35\u1ce1\u1cf2\u1cf3\u302e\u302f\ua823\ua824\ua827\ua880\ua881\ua8b4-\ua8c3\ua952\ua953\ua983\ua9b4\ua9b5\ua9ba\ua9bb\ua9bd-\ua9c0\uaa2f\uaa30\uaa33\uaa34\uaa4d\uaa7b\uaa7d\uaaeb\uaaee\uaaef\uaaf5\uabe3\uabe4\uabe6\uabe7\uabe9\uabea\uabec",
        astral: "\ud834[\udd65\udd66\udd6d-\udd72]|\ud804[\udc00\udc02\udc82\udcb0-\udcb2\udcb7\udcb8\udd2c\udd82\uddb3-\uddb5\uddbf\uddc0\ude2c-\ude2e\ude32\ude33\ude35\udee0-\udee2\udf02\udf03\udf3e\udf3f\udf41-\udf44\udf47\udf48\udf4b-\udf4d\udf57\udf62\udf63]|\ud805[\udcb0-\udcb2\udcb9\udcbb-\udcbe\udcc1\uddaf-\uddb1\uddb8-\uddbb\uddbe\ude30-\ude32\ude3b\ude3c\ude3e\udeac\udeae\udeaf\udeb6\udf20\udf21\udf26]|\ud81b[\udf51-\udf7e]"
    }, {
        name: "Me",
        alias: "Enclosing_Mark",
        bmp: "\u0488\u0489\u1abe\u20dd-\u20e0\u20e2-\u20e4\ua670-\ua672"
    }, {
        name: "Mn",
        alias: "Nonspacing_Mark",
        bmp: "\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962\u0963\u0981\u09bc\u09c1-\u09c4\u09cd\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\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b62\u0b63\u0b82\u0bc0\u0bcd\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c81\u0cbc\u0cbf\u0cc6\u0ccc\u0ccd\u0ce2\u0ce3\u0d01\u0d41-\u0d44\u0d4d\u0d62\u0d63\u0dca\u0dd2-\u0dd4\u0dd6\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1bab-\u1bad\u1be6\u1be8\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u3099\u309a\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaec\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f",
        astral: "\ud805[\udcb3-\udcb8\udcba\udcbf\udcc0\udcc2\udcc3\uddb2-\uddb5\uddbc\uddbd\uddbf\uddc0\udddc\udddd\ude33-\ude3a\ude3d\ude3f\ude40\udeab\udead\udeb0-\udeb5\udeb7\udf1d-\udf1f\udf22-\udf25\udf27-\udf2b]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud81a[\udef0-\udef4\udf30-\udf36]|\ud81b[\udf8f-\udf92]|\ud82f[\udc9d\udc9e]|\ud800[\uddfd\udee0\udf76-\udf7a]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud802[\ude01-\ude03\ude05\ude06\ude0c-\ude0f\ude38-\ude3a\ude3f\udee5\udee6]|\ud804[\udc01\udc38-\udc46\udc7f-\udc81\udcb3-\udcb6\udcb9\udcba\udd00-\udd02\udd27-\udd2b\udd2d-\udd34\udd73\udd80\udd81\uddb6-\uddbe\uddca-\uddcc\ude2f-\ude31\ude34\ude36\ude37\udedf\udee3-\udeea\udf00\udf01\udf3c\udf40\udf66-\udf6c\udf70-\udf74]|\ud83a[\udcd0-\udcd6]|\udb40[\udd00-\uddef]"
    }, {
        name: "N",
        alias: "Number",
        bmp: "0-9\xb2\xb3\xb9\xbc-\xbe\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u09f4-\u09f9\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0b72-\u0b77\u0be6-\u0bf2\u0c66-\u0c6f\u0c78-\u0c7e\u0ce6-\u0cef\u0d66-\u0d75\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f33\u1040-\u1049\u1090-\u1099\u1369-\u137c\u16ee-\u16f0\u17e0-\u17e9\u17f0-\u17f9\u1810-\u1819\u1946-\u194f\u19d0-\u19da\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3007\u3021-\u3029\u3038-\u303a\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua620-\ua629\ua6e6-\ua6ef\ua830-\ua835\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19",
        astral: "\ud800[\udd07-\udd33\udd40-\udd78\udd8a\udd8b\udee1-\udefb\udf20-\udf23\udf41\udf4a\udfd1-\udfd5]|\ud801[\udca0-\udca9]|\ud803[\udcfa-\udcff\ude60-\ude7e]|\ud835[\udfce-\udfff]|\ud83a[\udcc7-\udccf]|\ud81a[\ude60-\ude69\udf50-\udf59\udf5b-\udf61]|\ud806[\udce0-\udcf2]|\ud804[\udc52-\udc6f\udcf0-\udcf9\udd36-\udd3f\uddd0-\uddd9\udde1-\uddf4\udef0-\udef9]|\ud834[\udf60-\udf71]|\ud83c[\udd00-\udd0c]|\ud809[\udc00-\udc6e]|\ud802[\udc58-\udc5f\udc79-\udc7f\udca7-\udcaf\udcfb-\udcff\udd16-\udd1b\uddbc\uddbd\uddc0-\uddcf\uddd2-\uddff\ude40-\ude47\ude7d\ude7e\ude9d-\ude9f\udeeb-\udeef\udf58-\udf5f\udf78-\udf7f\udfa9-\udfaf]|\ud805[\udcd0-\udcd9\ude50-\ude59\udec0-\udec9\udf30-\udf3b]"
    }, {
        name: "Nd",
        alias: "Decimal_Number",
        bmp: "0-9\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19",
        astral: "\ud801[\udca0-\udca9]|\ud835[\udfce-\udfff]|\ud805[\udcd0-\udcd9\ude50-\ude59\udec0-\udec9\udf30-\udf39]|\ud806[\udce0-\udce9]|\ud804[\udc66-\udc6f\udcf0-\udcf9\udd36-\udd3f\uddd0-\uddd9\udef0-\udef9]|\ud81a[\ude60-\ude69\udf50-\udf59]"
    }, {
        name: "Nl",
        alias: "Letter_Number",
        bmp: "\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef",
        astral: "\ud809[\udc00-\udc6e]|\ud800[\udd40-\udd74\udf41\udf4a\udfd1-\udfd5]"
    }, {
        name: "No",
        alias: "Other_Number",
        bmp: "\xb2\xb3\xb9\xbc-\xbe\u09f4-\u09f9\u0b72-\u0b77\u0bf0-\u0bf2\u0c78-\u0c7e\u0d70-\u0d75\u0f2a-\u0f33\u1369-\u137c\u17f0-\u17f9\u19da\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215f\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua830-\ua835",
        astral: "\ud804[\udc52-\udc65\udde1-\uddf4]|\ud803[\udcfa-\udcff\ude60-\ude7e]|\ud83c[\udd00-\udd0c]|\ud806[\udcea-\udcf2]|\ud83a[\udcc7-\udccf]|\ud802[\udc58-\udc5f\udc79-\udc7f\udca7-\udcaf\udcfb-\udcff\udd16-\udd1b\uddbc\uddbd\uddc0-\uddcf\uddd2-\uddff\ude40-\ude47\ude7d\ude7e\ude9d-\ude9f\udeeb-\udeef\udf58-\udf5f\udf78-\udf7f\udfa9-\udfaf]|\ud805[\udf3a\udf3b]|\ud81a[\udf5b-\udf61]|\ud834[\udf60-\udf71]|\ud800[\udd07-\udd33\udd75-\udd78\udd8a\udd8b\udee1-\udefb\udf20-\udf23]"
    }, {
        name: "P",
        alias: "Punctuation",
        bmp: "!-#%-\\x2A,-/:;\\x3F@\\x5B-\\x5D_\\x7B}\xa1\xa7\xab\xb6\xb7\xbb\xbf\u037e\u0387\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u2308-\u230b\u2329\u232a\u2768-\u2775\u27c5\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30-\u2e42\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua8fc\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65",
        astral: "\ud802[\udc57\udd1f\udd3f\ude50-\ude58\ude7f\udef0-\udef6\udf39-\udf3f\udf99-\udf9c]|\ud809[\udc70-\udc74]|\ud805[\udcc6\uddc1-\uddd7\ude41-\ude43\udf3c-\udf3e]|\ud836[\ude87-\ude8b]|\ud801\udd6f|\ud82f\udc9f|\ud804[\udc47-\udc4d\udcbb\udcbc\udcbe-\udcc1\udd40-\udd43\udd74\udd75\uddc5-\uddc9\uddcd\udddb\udddd-\udddf\ude38-\ude3d\udea9]|\ud800[\udd00-\udd02\udf9f\udfd0]|\ud81a[\ude6e\ude6f\udef5\udf37-\udf3b\udf44]"
    }, {
        name: "Pc",
        alias: "Connector_Punctuation",
        bmp: "_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f"
    }, {
        name: "Pd",
        alias: "Dash_Punctuation",
        bmp: "\\x2D\u058a\u05be\u1400\u1806\u2010-\u2015\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d"
    }, {
        name: "Pe",
        alias: "Close_Punctuation",
        bmp: "\\x29\\x5D}\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u2309\u230b\u232a\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u27ed\u27ef\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u2e23\u2e25\u2e27\u2e29\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e\u301f\ufd3e\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63"
    }, {
        name: "Pf",
        alias: "Final_Punctuation",
        bmp: "\xbb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d\u2e21"
    }, {
        name: "Pi",
        alias: "Initial_Punctuation",
        bmp: "\xab\u2018\u201b\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c\u2e20"
    }, {
        name: "Po",
        alias: "Other_Punctuation",
        bmp: "!-#%-'\\x2A,\\x2E/:;\\x3F@\\x5C\xa1\xa7\xb6\xb7\xbf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u2e3c-\u2e3f\u2e41\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua8fc\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65",
        astral: "\ud802[\udc57\udd1f\udd3f\ude50-\ude58\ude7f\udef0-\udef6\udf39-\udf3f\udf99-\udf9c]|\ud809[\udc70-\udc74]|\ud805[\udcc6\uddc1-\uddd7\ude41-\ude43\udf3c-\udf3e]|\ud836[\ude87-\ude8b]|\ud801\udd6f|\ud82f\udc9f|\ud804[\udc47-\udc4d\udcbb\udcbc\udcbe-\udcc1\udd40-\udd43\udd74\udd75\uddc5-\uddc9\uddcd\udddb\udddd-\udddf\ude38-\ude3d\udea9]|\ud800[\udd00-\udd02\udf9f\udfd0]|\ud81a[\ude6e\ude6f\udef5\udf37-\udf3b\udf44]"
    }, {
        name: "Ps",
        alias: "Open_Punctuation",
        bmp: "\\x28\\x5B\\x7B\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2308\u230a\u2329\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u27ec\u27ee\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u2e22\u2e24\u2e26\u2e28\u2e42\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3f\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62"
    }, {
        name: "S",
        alias: "Symbol",
        bmp: "\\x24\\x2B<->\\x5E`\\x7C~\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20be\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u23fa\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd",
        astral: "\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd18\udd80-\udd84\uddc0]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\udd9a\udde6-\ude02\ude10-\ude3a\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\udd79\udd7b-\udda3\udda5-\uded0\udee0-\udeec\udef0-\udef3\udf00-\udf73\udf80-\udfd4]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud800[\udd37-\udd3f\udd79-\udd89\udd8c\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud82f\udc9c|\ud805\udf3f|\ud802[\udc77\udc78\udec8]|\ud81a[\udf3c-\udf3f\udf45]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud83b[\udef0\udef1]"
    }, {
        name: "Sc",
        alias: "Currency_Symbol",
        bmp: "\\x24\xa2-\xa5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20be\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"
    }, {
        name: "Sk",
        alias: "Modifier_Symbol",
        bmp: "\\x5E`\xa8\xaf\xb4\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3",
        astral: "\ud83c[\udffb-\udfff]"
    }, {
        name: "Sm",
        alias: "Math_Symbol",
        bmp: "\\x2B<->\\x7C~\xac\xb1\xd7\xf7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec",
        astral: "\ud83b[\udef0\udef1]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]"
    }, {
        name: "So",
        alias: "Other_Symbol",
        bmp: "\xa6\xa9\xae\xb0\u0482\u058d\u058e\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u218a\u218b\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fa\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd",
        astral: "\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd18\udd80-\udd84\uddc0]|\ud83d[\udc00-\udd79\udd7b-\udda3\udda5-\uded0\udee0-\udeec\udef0-\udef3\udf00-\udf73\udf80-\udfd4]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\udd9a\udde6-\ude02\ude10-\ude3a\ude40-\ude48\ude50\ude51\udf00-\udffa]|\ud800[\udd37-\udd3f\udd79-\udd89\udd8c\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud82f\udc9c|\ud805\udf3f|\ud802[\udc77\udc78\udec8]|\ud81a[\udf3c-\udf3f\udf45]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]"
    }, {
        name: "Z",
        alias: "Separator",
        bmp: " \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"
    }, {
        name: "Zl",
        alias: "Line_Separator",
        bmp: "\u2028"
    }, {
        name: "Zp",
        alias: "Paragraph_Separator",
        bmp: "\u2029"
    }, {
        name: "Zs",
        alias: "Space_Separator",
        bmp: " \xa0\u1680\u2000-\u200a\u202f\u205f\u3000"
    }])
}(XRegExp),
function() {
    $((function() {
        var e, t;
        for (t = $("a"),
        e = 0; e < t.length; )
            "allowowner" !== t[e].rel && (t[e].rel = "noopener noreferrer"),
            e++
    }
    ))
}
.call(this);
var igwFunction = {
    dropDownPayLang: function() {
        $(".payment_lang .valueLan").on("click", (function(e) {
            $(".payment_lang_dropdown").toggleClass("active"),
            e.stopPropagation()
        }
        )),
        $("body:not('.payment_lang .valueLan')").click((function() {
            $(".payment_lang_dropdown").removeClass("active")
        }
        ))
    },
    selectedPayLang: function() {
        $(".payment_lang_dropdown li").on("click", (function() {
            var e = $(this).text();
            $(".payment_lang .valueLan").html(e),
            $(".payment_lang_dropdown").toggleClass("active"),
            $(".payment_lang_dropdown li").removeClass("dropdown_active_text"),
            $(this).addClass("dropdown_active_text"),
            locale = $(this).attr("data-value"),
            form = $("#cc_form, #cvc_form"),
            form.length ? (action = form.attr("action"),
            action = action.replace(/locale=[a-z]+/, "locale=" + locale),
            form.attr("action", action),
            field = $("<input type=hidden name=updated_locale value=" + locale + ">"),
            form.append(field),
            form.off("submit"),
            form.submit()) : (current_path = $("a.change_locale_link").attr("href"),
            current_path && (window.location.href = current_path + "?locale=" + locale))
        }
        ))
    },
    checkSelector: function(e) {
        switch (element = null,
        e) {
        case "body":
            element = $(".main");
            break;
        case "line":
            element = $(".line");
            break;
        case "control_label":
            element = $("#iframe_payment_form_with_skin .control-label");
            break;
        case "help_inline":
            element = $("#iframe_payment_form_with_skin .help-inline, .has-error .control-label, .has-error .form-control");
            break;
        case "form_control":
            element = $("#iframe_payment_form_with_skin .form-control");
            break;
        case "btn_purchase":
            element = $("#iframe_payment_form_with_skin .btn-purchase");
            break;
        case "card_logos":
            element = $("#iframe_payment_form_with_skin .payment_footer")
        }
        return element
    },
    resetBackground: function(e, t, i) {
        "body" == e && "background-color" == t && "" == i ? $("#iframe_payment_form_with_skin").removeAttr("style").css("background-color", "transparent") : "body" == e && "background-color" == t && "" != i && $("#iframe_payment_form_with_skin").css("background-image", "none")
    },
    addStylingMessageListener: function(e, t) {
        window.addEventListener("message", (function(i) {
            i.origin !== e && i.origin !== t || $.each(i.data, (function(e, t) {
                selector = igwFunction.checkSelector(e),
                null != selector && $.each(t, (function(t, i) {
                    $.each(i, (function(t, i) {
                        selector.css(t, i),
                        igwFunction.resetBackground(e, t, i)
                    }
                    ))
                }
                ))
            }
            ))
        }
        ))
    },
    triggerValidateIframeSkinPreview: function() {
        $("#transaction_request_cc_number").val(514).change(),
        $("#transaction_request_cc_expiration_date").val(""),
        $("#transaction_request_cc_verification").val(111),
        window.reValidateForm(),
        window.reValidateTokenForm(),
        $("#transaction_request_cc_number").focusin()
    },
    checkLinkTransactionState: function(e, t) {
        $.ajax({
            dataType: "json",
            url: e,
            type: "GET",
            data: {
                format: "json"
            },
            timeout: 1e4,
            success: function(e) {
                e.state != t && location.reload()
            },
            complete: function(i) {
                setTimeout((function() {
                    null != i.responseJSON ? igwFunction.checkLinkTransactionState(e, i.responseJSON.state) : igwFunction.checkLinkTransactionState(e, t)
                }
                ), 2e3)
            }
        })
    },
    checkForUpdates: function(e, t) {
        igwFunction.checkLinkTransactionState(e, t)
    },
    showLogoLinkpayPreview: function(e, t) {
        window.addEventListener("message", (function(i) {
            i.origin !== e && i.origin !== t || (localStorage.setItem("linkpayLogo", i.data.linkpayLogoUrlPreview),
            localStorage.setItem("use_image_as_logo", i.data.useImageAsLogo),
            i.data.linkpayLogoUrlPreview.length > 0 ? ($("#merchant_logo").html("<img src='" + i.data.linkpayLogoUrlPreview + "' id='img-logo' width='100%' />"),
            i.data.useImageAsLogo ? $("#img-logo").addClass("small_image") : $("#img-logo").removeClass("small_image")) : $("#merchant_logo").children().remove("#img-logo"),
            igwFunction.postMessageHeightOfIframe(i.origin))
        }
        ))
    },
    getImageFromLocalStorage: function() {
        base64Image = localStorage.getItem("linkpayLogo"),
        base64Image.length > 0 && ($("#merchant_logo").html("<img src='" + base64Image + "' id='img-logo' width='100%' />"),
        localStorage.getItem("use_image_as_logo") && $("#img-logo").addClass("small_image"))
    },
    postMessageHeightOfIframe: function(e) {
        window.parent.postMessage($("#formPayment").innerHeight(), e)
    },
    autoRedirectAfterDelay: function(e, t) {
        setTimeout((function() {
            window.location.replace(e),
            $("#backform").length > 0 && $("#backform").submit()
        }
        ), t)
    },
    hideFormError: function() {
        $(".action-buttons input").prop("disabled", !1),
        $("#user_info input").prop("disabled", !1),
        $("#select_authentication_method .error-input").removeClass("error-input"),
        $(".linkpay-alerts").hide(),
        $("#user_info .error-input").removeClass("error-input"),
        $(".seb-decouple").removeClass("error-decouple-block"),
        $(".swed-decouple").removeClass("error-decouple-block"),
        $(".luminor-decouple").removeClass("error-decouple-block")
    },
    redirectAfterTenSeconds: function(e) {
        setTimeout((function() {
            location.href = e
        }
        ), 1e4)
    },
    termsOfServiceChecked: function() {
        $("#terms_of_service").length > 0 && ($("#terms_of_service").on("click", (function() {
            $(this).is(":checked") ? $("#cc_submit").removeAttr("disabled") : $("#cc_submit").attr("disabled", "true")
        }
        )),
        $("#terms_of_service").is(":checked") ? $("#cc_submit").removeAttr("disabled") : $("#cc_submit").attr("disabled", "true"))
    },
    handleNuapayCallback: function(e) {
        var t = window.location.href.split("#");
        t.length < 2 && (t = window.location.href.split("?"));
        var i = t[1];
        window.location.href = e + "?" + i
    },
    autoHideSpinnerLoading: function() {
        setTimeout((function() {
            $("#spinner-loading").hide(),
            $("#payment-summary").removeClass("hide")
        }
        ), 500)
    }
};
$.htmlPrefilter = function(e) {
    return e
}
,
$(document).ready((function() {
    $('[data-toggle="tooltip"]').tooltip({
        placement: "top",
        trigger: "hover"
    })
}
)),
$(document).ready((function() {
    function e(e) {
        e.preventDefault(),
        e.stopPropagation(),
        e.stopImmediatePropagation()
    }
    $("#cc_submit , #formPayment input[type=submit]").click((function(t) {
        var i = $(this).parents("form");
        return 0 === i.length || ("cc_form" === i.attr("id") && window.reValidateForm(),
        $(this).prop("disabled", !0),
        i.submit(),
        e(t)),
        !1
    }
    )),
    $("#cc_submit_form").click((function(t) {
        var i = $(this).parents("form");
        return 0 !== i.length && (window.reValidateForm(),
        i.find(".has-error").length > 0 || (i.submit(),
        i.attr("data-submitted", !0),
        $(this).attr("data-clicked", !0),
        $(".btn-cancel-payment, .btn-back-payment").attr("submitted", !0),
        e(t)),
        !1)
    }
    )),
    $(".payment-options button[type=submit]").on("click", (function(t) {
        return $(this).parents("form").submit(),
        e(t),
        $(".payment-options button[type=submit]").attr("data-clicked", !0).prop("disabled", !0),
        !1
    }
    )),
    $(".btn-cancel-payment, .btn-back-payment").on("click", (function(t) {
        if (e(t),
        $(this).attr("submitted") && 0 === $(".has-error").length)
            return !1;
        $(this).attr("data-clicked", !0),
        $(this).prop("disabled", !0),
        $(this).parents("form").submit(),
        $("#formPayment .btn-submit").attr("disabled", !0),
        $("#cc_submit").attr("disabled", !0),
        $("#select_authentication_method input[type=submit]").attr("disabled", !0)
    }
    )),
    $("#confirm_ob_authorisation, #cancel_ob_authorisation").on("click", (function(t) {
        e(t),
        $(this).parents("form").submit(),
        $(this).attr("disabled", !0)
    }
    ))
}
));
var OpenBankingDecouple = {
    scaMethodCheck: function(e) {
        var t = $(e).data("sca-method")
          , i = $("#psu-account-type").val();
        "AUTHENTICATE_IN_BANK" === t ? $("#btn-account-type .btn").removeClass("is-active") : $("#btn-account-type #btn-" + i).addClass("is-active"),
        $(".auth-block .method-name").parent().find("select,input").prop("disabled", !0),
        $(".auth-block").removeClass("is-active"),
        $(e).parent().addClass("is-active"),
        $("input[name='link_transaction[sca_method]']").val($(e).data("sca-method")),
        $(".auth-block.is-active .account-selected").find("select,input").prop("disabled", !1)
    },
    debtorIbanCheck: function(e) {
        var t = !0;
        $(".account-block .account .btn").removeClass("is-active"),
        $(e).addClass("is-active"),
        $("#debtor_iban").val($(e).parent().data("iban")),
        $(".account-block .account .btn.is-active").length > 0 && (t = !0 === $(e).parents("form").data("checkFundsConfirmations") && OpenBankingDecouple.checkFundsAvailable($(e))),
        !0 === $("#cc_submit").data("clicked") && (t = !0),
        $("#cc_submit").prop("disabled", t)
    },
    checkFundsAvailable: function(e) {
        var t = $(e).data("fundsAvailable")
          , i = !0;
        return void 0 === t ? OpenBankingDecouple.sendFundsConfirmations(e) : !1 === t ? OpenBankingDecouple.showFundsAvaiableMessage(e) : i = !1,
        i
    },
    sendFundsConfirmations: function(e) {
        var t = $(e).parent().data("iban")
          , i = $(e).parents("form").data("fundsConfirmationsPath")
          , n = {
            iban: t
        };
        $.ajax({
            dataType: "json",
            url: i,
            type: "POST",
            data: n,
            success: function(t) {
                !1 === t.fundsAvailable ? $(e).attr("data-funds-available", !1) : $(e).attr("data-funds-available", !0)
            },
            complete: function() {
                OpenBankingDecouple.recheckSelectingAccount()
            }
        })
    },
    recheckSelectingAccount: function() {
        var e = $(".account-block .account .btn.is-active")
          , t = e.parents("form").data("checkFundsConfirmations")
          , i = e.data("fundsAvailable");
        t && !1 === i ? ($("#cc_submit").prop("disabled", !0),
        OpenBankingDecouple.showFundsAvaiableMessage(e)) : $("#cc_submit").prop("disabled", !1)
    },
    showFundsAvaiableMessage: function(e) {
        e.parent().addClass("has-error"),
        e.siblings(".message-block").show()
    },
    removeMessageBlock: function(e) {
        $("#select_authentication_method").find(".message-block.has-error").remove(),
        $(e).parents("form").find("input[type='submit']").prop("disabled", !1)
    },
    selectCustomer: function(e) {
        var t = $(e).parent().data("customer");
        $("#link_transaction_ob_customer").val(t)
    },
    selectPsuAccountType: function(e) {
        var t = $(e).attr("id").substr(4);
        t && ($(".account-selected").find("select,input").prop("disabled", !0),
        $("#btn-account-type button").removeClass("is-active"),
        $("#btn-" + t).addClass("is-active"),
        $(".form").removeClass("account-selected"),
        $(".form-" + t).addClass("account-selected"),
        $(".account-selected").find("select,input").prop("disabled", !1),
        $(".auth-block .form input").val(""),
        $("#psu-account-type").val(t))
    }
};
!function(e, t) {
    "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.Cleave = t() : e.Cleave = t()
}(this, (function() {
    return function(e) {
        function t(n) {
            if (i[n])
                return i[n].exports;
            var s = i[n] = {
                exports: {},
                id: n,
                loaded: !1
            };
            return e[n].call(s.exports, s, s.exports, t),
            s.loaded = !0,
            s.exports
        }
        var i = {};
        return t.m = e,
        t.c = i,
        t.p = "",
        t(0)
    }([function(e, t, i) {
        (function(t) {
            "use strict";
            var n = function(e, t) {
                var i = this
                  , s = !1;
                if ("string" == typeof e ? (i.element = document.querySelector(e),
                s = document.querySelectorAll(e).length > 1) : void 0 !== e.length && e.length > 0 ? (i.element = e[0],
                s = e.length > 1) : i.element = e,
                !i.element)
                    throw new Error("[cleave.js] Please check the element");
                if (s)
                    try {
                        console.warn("[cleave.js] Multiple input fields matched, cleave.js will only take the first one.")
                    } catch (e) {}
                t.initValue = i.element.value,
                i.properties = n.DefaultProperties.assign({}, t),
                i.init()
            };
            n.prototype = {
                init: function() {
                    var e = this
                      , t = e.properties;
                    return t.numeral || t.phone || t.creditCard || t.time || t.date || 0 !== t.blocksLength || t.prefix ? (t.maxLength = n.Util.getMaxLength(t.blocks),
                    e.isAndroid = n.Util.isAndroid(),
                    e.lastInputValue = "",
                    e.isBackward = "",
                    e.onChangeListener = e.onChange.bind(e),
                    e.onKeyDownListener = e.onKeyDown.bind(e),
                    e.onFocusListener = e.onFocus.bind(e),
                    e.onCutListener = e.onCut.bind(e),
                    e.onCopyListener = e.onCopy.bind(e),
                    e.initSwapHiddenInput(),
                    e.element.addEventListener("input", e.onChangeListener),
                    e.element.addEventListener("keydown", e.onKeyDownListener),
                    e.element.addEventListener("focus", e.onFocusListener),
                    e.element.addEventListener("cut", e.onCutListener),
                    e.element.addEventListener("copy", e.onCopyListener),
                    e.initPhoneFormatter(),
                    e.initDateFormatter(),
                    e.initTimeFormatter(),
                    e.initNumeralFormatter(),
                    void ((t.initValue || t.prefix && !t.noImmediatePrefix) && e.onInput(t.initValue))) : void e.onInput(t.initValue)
                },
                initSwapHiddenInput: function() {
                    var e = this;
                    if (e.properties.swapHiddenInput) {
                        var t = e.element.cloneNode(!0);
                        e.element.parentNode.insertBefore(t, e.element),
                        e.elementSwapHidden = e.element,
                        e.elementSwapHidden.type = "hidden",
                        e.element = t,
                        e.element.id = ""
                    }
                },
                initNumeralFormatter: function() {
                    var e = this.properties;
                    e.numeral && (e.numeralFormatter = new n.NumeralFormatter(e.numeralDecimalMark,e.numeralIntegerScale,e.numeralDecimalScale,e.numeralThousandsGroupStyle,e.numeralPositiveOnly,e.stripLeadingZeroes,e.prefix,e.signBeforePrefix,e.tailPrefix,e.delimiter))
                },
                initTimeFormatter: function() {
                    var e = this.properties;
                    e.time && (e.timeFormatter = new n.TimeFormatter(e.timePattern,e.timeFormat),
                    e.blocks = e.timeFormatter.getBlocks(),
                    e.blocksLength = e.blocks.length,
                    e.maxLength = n.Util.getMaxLength(e.blocks))
                },
                initDateFormatter: function() {
                    var e = this.properties;
                    e.date && (e.dateFormatter = new n.DateFormatter(e.datePattern,e.dateMin,e.dateMax),
                    e.blocks = e.dateFormatter.getBlocks(),
                    e.blocksLength = e.blocks.length,
                    e.maxLength = n.Util.getMaxLength(e.blocks))
                },
                initPhoneFormatter: function() {
                    var e = this.properties;
                    if (e.phone)
                        try {
                            e.phoneFormatter = new n.PhoneFormatter(new e.root.Cleave.AsYouTypeFormatter(e.phoneRegionCode),e.delimiter)
                        } catch (e) {
                            throw new Error("[cleave.js] Please include phone-type-formatter.{country}.js lib")
                        }
                },
                onKeyDown: function(e) {
                    var t = this
                      , i = e.which || e.keyCode;
                    t.lastInputValue = t.element.value,
                    t.isBackward = 8 === i
                },
                onChange: function(e) {
                    var t = this
                      , i = t.properties
                      , s = n.Util;
                    t.isBackward = t.isBackward || "deleteContentBackward" === e.inputType;
                    var o = s.getPostDelimiter(t.lastInputValue, i.delimiter, i.delimiters);
                    t.isBackward && o ? i.postDelimiterBackspace = o : i.postDelimiterBackspace = !1,
                    this.onInput(this.element.value)
                },
                onFocus: function() {
                    var e = this
                      , t = e.properties;
                    e.lastInputValue = e.element.value,
                    t.prefix && t.noImmediatePrefix && !e.element.value && this.onInput(t.prefix),
                    n.Util.fixPrefixCursor(e.element, t.prefix, t.delimiter, t.delimiters)
                },
                onCut: function(e) {
                    n.Util.checkFullSelection(this.element.value) && (this.copyClipboardData(e),
                    this.onInput(""))
                },
                onCopy: function(e) {
                    n.Util.checkFullSelection(this.element.value) && this.copyClipboardData(e)
                },
                copyClipboardData: function(e) {
                    var t = this
                      , i = t.properties
                      , s = n.Util
                      , o = t.element.value
                      , a = "";
                    a = i.copyDelimiter ? o : s.stripDelimiters(o, i.delimiter, i.delimiters);
                    try {
                        e.clipboardData ? e.clipboardData.setData("Text", a) : window.clipboardData.setData("Text", a),
                        e.preventDefault()
                    } catch (e) {}
                },
                onInput: function(e) {
                    var t = this
                      , i = t.properties
                      , s = n.Util
                      , o = s.getPostDelimiter(e, i.delimiter, i.delimiters);
                    return i.numeral || !i.postDelimiterBackspace || o || (e = s.headStr(e, e.length - i.postDelimiterBackspace.length)),
                    i.phone ? (!i.prefix || i.noImmediatePrefix && !e.length ? i.result = i.phoneFormatter.format(e) : i.result = i.prefix + i.phoneFormatter.format(e).slice(i.prefix.length),
                    void t.updateValueState()) : i.numeral ? (i.prefix && i.noImmediatePrefix && 0 === e.length ? i.result = "" : i.result = i.numeralFormatter.format(e),
                    void t.updateValueState()) : (i.date && (e = i.dateFormatter.getValidatedDate(e)),
                    i.time && (e = i.timeFormatter.getValidatedTime(e)),
                    e = s.stripDelimiters(e, i.delimiter, i.delimiters),
                    e = s.getPrefixStrippedValue(e, i.prefix, i.prefixLength, i.result, i.delimiter, i.delimiters, i.noImmediatePrefix, i.tailPrefix, i.signBeforePrefix),
                    e = i.numericOnly ? s.strip(e, /[^\d]/g) : e,
                    e = i.uppercase ? e.toUpperCase() : e,
                    e = i.lowercase ? e.toLowerCase() : e,
                    i.prefix && (i.tailPrefix ? e += i.prefix : e = i.prefix + e,
                    0 === i.blocksLength) ? (i.result = e,
                    void t.updateValueState()) : (i.creditCard && t.updateCreditCardPropsByValue(e),
                    e = s.headStr(e, i.maxLength),
                    i.result = s.getFormattedValue(e, i.blocks, i.blocksLength, i.delimiter, i.delimiters, i.delimiterLazyShow),
                    void t.updateValueState()))
                },
                updateCreditCardPropsByValue: function(e) {
                    var t, i = this, s = i.properties, o = n.Util;
                    o.headStr(s.result, 4) !== o.headStr(e, 4) && (t = n.CreditCardDetector.getInfo(e, s.creditCardStrictMode),
                    s.blocks = t.blocks,
                    s.blocksLength = s.blocks.length,
                    s.maxLength = o.getMaxLength(s.blocks),
                    s.creditCardType !== t.type && (s.creditCardType = t.type,
                    s.onCreditCardTypeChanged.call(i, s.creditCardType)))
                },
                updateValueState: function() {
                    var e = this
                      , t = n.Util
                      , i = e.properties;
                    if (e.element) {
                        var s = e.element.selectionEnd
                          , o = e.element.value
                          , a = i.result;
                        if (s = t.getNextCursorPosition(s, o, a, i.delimiter, i.delimiters),
                        e.isAndroid)
                            return void window.setTimeout((function() {
                                e.element.value = a,
                                t.setSelection(e.element, s, i.document, !1),
                                e.callOnValueChanged()
                            }
                            ), 1);
                        e.element.value = a,
                        i.swapHiddenInput && (e.elementSwapHidden.value = e.getRawValue()),
                        t.setSelection(e.element, s, i.document, !1),
                        e.callOnValueChanged()
                    }
                },
                callOnValueChanged: function() {
                    var e = this
                      , t = e.properties;
                    t.onValueChanged.call(e, {
                        target: {
                            name: e.element.name,
                            value: t.result,
                            rawValue: e.getRawValue()
                        }
                    })
                },
                setPhoneRegionCode: function(e) {
                    var t = this;
                    t.properties.phoneRegionCode = e,
                    t.initPhoneFormatter(),
                    t.onChange()
                },
                setRawValue: function(e) {
                    var t = this
                      , i = t.properties;
                    e = null != e ? e.toString() : "",
                    i.numeral && (e = e.replace(".", i.numeralDecimalMark)),
                    i.postDelimiterBackspace = !1,
                    t.element.value = e,
                    t.onInput(e)
                },
                getRawValue: function() {
                    var e = this
                      , t = e.properties
                      , i = n.Util
                      , s = e.element.value;
                    return t.rawValueTrimPrefix && (s = i.getPrefixStrippedValue(s, t.prefix, t.prefixLength, t.result, t.delimiter, t.delimiters, t.noImmediatePrefix, t.tailPrefix, t.signBeforePrefix)),
                    t.numeral ? t.numeralFormatter.getRawValue(s) : i.stripDelimiters(s, t.delimiter, t.delimiters)
                },
                getISOFormatDate: function() {
                    var e = this.properties;
                    return e.date ? e.dateFormatter.getISOFormatDate() : ""
                },
                getISOFormatTime: function() {
                    var e = this.properties;
                    return e.time ? e.timeFormatter.getISOFormatTime() : ""
                },
                getFormattedValue: function() {
                    return this.element.value
                },
                destroy: function() {
                    var e = this;
                    e.element.removeEventListener("input", e.onChangeListener),
                    e.element.removeEventListener("keydown", e.onKeyDownListener),
                    e.element.removeEventListener("focus", e.onFocusListener),
                    e.element.removeEventListener("cut", e.onCutListener),
                    e.element.removeEventListener("copy", e.onCopyListener)
                },
                toString: function() {
                    return "[Cleave Object]"
                }
            },
            n.NumeralFormatter = i(1),
            n.DateFormatter = i(2),
            n.TimeFormatter = i(3),
            n.PhoneFormatter = i(4),
            n.CreditCardDetector = i(5),
            n.Util = i(6),
            n.DefaultProperties = i(7),
            ("object" == typeof t && t ? t : window).Cleave = n,
            e.exports = n
        }
        ).call(t, function() {
            return this
        }())
    }
    , function(e) {
        "use strict";
        var t = function(e, i, n, s, o, a, r, l, u, d) {
            var c = this;
            c.numeralDecimalMark = e || ".",
            c.numeralIntegerScale = i > 0 ? i : 0,
            c.numeralDecimalScale = n >= 0 ? n : 2,
            c.numeralThousandsGroupStyle = s || t.groupStyle.thousand,
            c.numeralPositiveOnly = !!o,
            c.stripLeadingZeroes = !1 !== a,
            c.prefix = r || "" === r ? r : "",
            c.signBeforePrefix = !!l,
            c.tailPrefix = !!u,
            c.delimiter = d || "" === d ? d : ",",
            c.delimiterRE = d ? new RegExp("\\" + d,"g") : ""
        };
        t.groupStyle = {
            thousand: "thousand",
            lakh: "lakh",
            wan: "wan",
            none: "none"
        },
        t.prototype = {
            getRawValue: function(e) {
                return e.replace(this.delimiterRE, "").replace(this.numeralDecimalMark, ".")
            },
            format: function(e) {
                var i, n, s, o, a = this, r = "";
                switch (e = e.replace(/[A-Za-z]/g, "").replace(a.numeralDecimalMark, "M").replace(/[^\dM-]/g, "").replace(/^\-/, "N").replace(/\-/g, "").replace("N", a.numeralPositiveOnly ? "" : "-").replace("M", a.numeralDecimalMark),
                a.stripLeadingZeroes && (e = e.replace(/^(-)?0+(?=\d)/, "$1")),
                n = "-" === e.slice(0, 1) ? "-" : "",
                s = void 0 !== a.prefix ? a.signBeforePrefix ? n + a.prefix : a.prefix + n : n,
                o = e,
                e.indexOf(a.numeralDecimalMark) >= 0 && (o = (i = e.split(a.numeralDecimalMark))[0],
                r = a.numeralDecimalMark + i[1].slice(0, a.numeralDecimalScale)),
                "-" === n && (o = o.slice(1)),
                a.numeralIntegerScale > 0 && (o = o.slice(0, a.numeralIntegerScale)),
                a.numeralThousandsGroupStyle) {
                case t.groupStyle.lakh:
                    o = o.replace(/(\d)(?=(\d\d)+\d$)/g, "$1" + a.delimiter);
                    break;
                case t.groupStyle.wan:
                    o = o.replace(/(\d)(?=(\d{4})+$)/g, "$1" + a.delimiter);
                    break;
                case t.groupStyle.thousand:
                    o = o.replace(/(\d)(?=(\d{3})+$)/g, "$1" + a.delimiter)
                }
                return a.tailPrefix ? n + o.toString() + (a.numeralDecimalScale > 0 ? r.toString() : "") + a.prefix : s + o.toString() + (a.numeralDecimalScale > 0 ? r.toString() : "")
            }
        },
        e.exports = t
    }
    , function(e) {
        "use strict";
        var t = function(e, t, i) {
            var n = this;
            n.date = [],
            n.blocks = [],
            n.datePattern = e,
            n.dateMin = t.split("-").reverse().map((function(e) {
                return parseInt(e, 10)
            }
            )),
            2 === n.dateMin.length && n.dateMin.unshift(0),
            n.dateMax = i.split("-").reverse().map((function(e) {
                return parseInt(e, 10)
            }
            )),
            2 === n.dateMax.length && n.dateMax.unshift(0),
            n.initBlocks()
        };
        t.prototype = {
            initBlocks: function() {
                var e = this;
                e.datePattern.forEach((function(t) {
                    "Y" === t ? e.blocks.push(4) : e.blocks.push(2)
                }
                ))
            },
            getISOFormatDate: function() {
                var e = this
                  , t = e.date;
                return t[2] ? t[2] + "-" + e.addLeadingZero(t[1]) + "-" + e.addLeadingZero(t[0]) : ""
            },
            getBlocks: function() {
                return this.blocks
            },
            getValidatedDate: function(e) {
                var t = this
                  , i = "";
                return e = e.replace(/[^\d]/g, ""),
                t.blocks.forEach((function(n, s) {
                    if (e.length > 0) {
                        var o = e.slice(0, n)
                          , a = o.slice(0, 1)
                          , r = e.slice(n);
                        switch (t.datePattern[s]) {
                        case "d":
                            "00" === o ? o = "01" : parseInt(a, 10) > 3 ? o = "0" + a : parseInt(o, 10) > 31 && (o = "31");
                            break;
                        case "m":
                            "00" === o ? o = "01" : parseInt(a, 10) > 1 ? o = "0" + a : parseInt(o, 10) > 12 && (o = "12")
                        }
                        i += o,
                        e = r
                    }
                }
                )),
                this.getFixedDateString(i)
            },
            getFixedDateString: function(e) {
                var t, i, n, s = this, o = s.datePattern, a = [], r = 0, l = 0, u = 0, d = 0, c = 0, h = 0, f = !1;
                4 === e.length && "y" !== o[0].toLowerCase() && "y" !== o[1].toLowerCase() && (c = 2 - (d = "d" === o[0] ? 0 : 2),
                t = parseInt(e.slice(d, d + 2), 10),
                i = parseInt(e.slice(c, c + 2), 10),
                a = this.getFixedDate(t, i, 0)),
                8 === e.length && (o.forEach((function(e, t) {
                    switch (e) {
                    case "d":
                        r = t;
                        break;
                    case "m":
                        l = t;
                        break;
                    default:
                        u = t
                    }
                }
                )),
                h = 2 * u,
                d = r <= u ? 2 * r : 2 * r + 2,
                c = l <= u ? 2 * l : 2 * l + 2,
                t = parseInt(e.slice(d, d + 2), 10),
                i = parseInt(e.slice(c, c + 2), 10),
                n = parseInt(e.slice(h, h + 4), 10),
                f = 4 === e.slice(h, h + 4).length,
                a = this.getFixedDate(t, i, n)),
                4 !== e.length || "y" !== o[0] && "y" !== o[1] || (h = 2 - (c = "m" === o[0] ? 0 : 2),
                i = parseInt(e.slice(c, c + 2), 10),
                n = parseInt(e.slice(h, h + 2), 10),
                f = 2 === e.slice(h, h + 2).length,
                a = [0, i, n]),
                6 !== e.length || "Y" !== o[0] && "Y" !== o[1] || (h = 2 - .5 * (c = "m" === o[0] ? 0 : 4),
                i = parseInt(e.slice(c, c + 2), 10),
                n = parseInt(e.slice(h, h + 4), 10),
                f = 4 === e.slice(h, h + 4).length,
                a = [0, i, n]),
                a = s.getRangeFixedDate(a),
                s.date = a;
                var p = 0 === a.length ? e : o.reduce((function(e, t) {
                    switch (t) {
                    case "d":
                        return e + (0 === a[0] ? "" : s.addLeadingZero(a[0]));
                    case "m":
                        return e + (0 === a[1] ? "" : s.addLeadingZero(a[1]));
                    case "y":
                        return e + (f ? s.addLeadingZeroForYear(a[2], !1) : "");
                    case "Y":
                        return e + (f ? s.addLeadingZeroForYear(a[2], !0) : "")
                    }
                }
                ), "");
                return p
            },
            getRangeFixedDate: function(e) {
                var t = this
                  , i = t.datePattern
                  , n = t.dateMin || []
                  , s = t.dateMax || [];
                return !e.length || n.length < 3 && s.length < 3 || i.find((function(e) {
                    return "y" === e.toLowerCase()
                }
                )) && 0 === e[2] ? e : s.length && (s[2] < e[2] || s[2] === e[2] && (s[1] < e[1] || s[1] === e[1] && s[0] < e[0])) ? s : n.length && (n[2] > e[2] || n[2] === e[2] && (n[1] > e[1] || n[1] === e[1] && n[0] > e[0])) ? n : e
            },
            getFixedDate: function(e, t, i) {
                return e = Math.min(e, 31),
                t = Math.min(t, 12),
                i = parseInt(i || 0, 10),
                (t < 7 && t % 2 == 0 || t > 8 && t % 2 == 1) && (e = Math.min(e, 2 === t ? this.isLeapYear(i) ? 29 : 28 : 30)),
                [e, t, i]
            },
            isLeapYear: function(e) {
                return e % 4 == 0 && e % 100 != 0 || e % 400 == 0
            },
            addLeadingZero: function(e) {
                return (e < 10 ? "0" : "") + e
            },
            addLeadingZeroForYear: function(e, t) {
                return t ? (e < 10 ? "000" : e < 100 ? "00" : e < 1e3 ? "0" : "") + e : (e < 10 ? "0" : "") + e
            }
        },
        e.exports = t
    }
    , function(e) {
        "use strict";
        var t = function(e, t) {
            var i = this;
            i.time = [],
            i.blocks = [],
            i.timePattern = e,
            i.timeFormat = t,
            i.initBlocks()
        };
        t.prototype = {
            initBlocks: function() {
                var e = this;
                e.timePattern.forEach((function() {
                    e.blocks.push(2)
                }
                ))
            },
            getISOFormatTime: function() {
                var e = this
                  , t = e.time;
                return t[2] ? e.addLeadingZero(t[0]) + ":" + e.addLeadingZero(t[1]) + ":" + e.addLeadingZero(t[2]) : ""
            },
            getBlocks: function() {
                return this.blocks
            },
            getTimeFormatOptions: function() {
                return "12" === String(this.timeFormat) ? {
                    maxHourFirstDigit: 1,
                    maxHours: 12,
                    maxMinutesFirstDigit: 5,
                    maxMinutes: 60
                } : {
                    maxHourFirstDigit: 2,
                    maxHours: 23,
                    maxMinutesFirstDigit: 5,
                    maxMinutes: 60
                }
            },
            getValidatedTime: function(e) {
                var t = this
                  , i = "";
                e = e.replace(/[^\d]/g, "");
                var n = t.getTimeFormatOptions();
                return t.blocks.forEach((function(s, o) {
                    if (e.length > 0) {
                        var a = e.slice(0, s)
                          , r = a.slice(0, 1)
                          , l = e.slice(s);
                        switch (t.timePattern[o]) {
                        case "h":
                            parseInt(r, 10) > n.maxHourFirstDigit ? a = "0" + r : parseInt(a, 10) > n.maxHours && (a = n.maxHours + "");
                            break;
                        case "m":
                        case "s":
                            parseInt(r, 10) > n.maxMinutesFirstDigit ? a = "0" + r : parseInt(a, 10) > n.maxMinutes && (a = n.maxMinutes + "")
                        }
                        i += a,
                        e = l
                    }
                }
                )),
                this.getFixedTimeString(i)
            },
            getFixedTimeString: function(e) {
                var t, i, n, s = this, o = s.timePattern, a = [], r = 0, l = 0, u = 0, d = 0, c = 0, h = 0;
                return 6 === e.length && (o.forEach((function(e, t) {
                    switch (e) {
                    case "s":
                        r = 2 * t;
                        break;
                    case "m":
                        l = 2 * t;
                        break;
                    case "h":
                        u = 2 * t
                    }
                }
                )),
                h = u,
                c = l,
                d = r,
                t = parseInt(e.slice(d, d + 2), 10),
                i = parseInt(e.slice(c, c + 2), 10),
                n = parseInt(e.slice(h, h + 2), 10),
                a = this.getFixedTime(n, i, t)),
                4 === e.length && s.timePattern.indexOf("s") < 0 && (o.forEach((function(e, t) {
                    switch (e) {
                    case "m":
                        l = 2 * t;
                        break;
                    case "h":
                        u = 2 * t
                    }
                }
                )),
                h = u,
                c = l,
                t = 0,
                i = parseInt(e.slice(c, c + 2), 10),
                n = parseInt(e.slice(h, h + 2), 10),
                a = this.getFixedTime(n, i, t)),
                s.time = a,
                0 === a.length ? e : o.reduce((function(e, t) {
                    switch (t) {
                    case "s":
                        return e + s.addLeadingZero(a[2]);
                    case "m":
                        return e + s.addLeadingZero(a[1]);
                    case "h":
                        return e + s.addLeadingZero(a[0])
                    }
                }
                ), "")
            },
            getFixedTime: function(e, t, i) {
                return i = Math.min(parseInt(i || 0, 10), 60),
                t = Math.min(t, 60),
                [e = Math.min(e, 60), t, i]
            },
            addLeadingZero: function(e) {
                return (e < 10 ? "0" : "") + e
            }
        },
        e.exports = t
    }
    , function(e) {
        "use strict";
        var t = function(e, t) {
            var i = this;
            i.delimiter = t || "" === t ? t : " ",
            i.delimiterRE = t ? new RegExp("\\" + t,"g") : "",
            i.formatter = e
        };
        t.prototype = {
            setFormatter: function(e) {
                this.formatter = e
            },
            format: function(e) {
                var t = this;
                t.formatter.clear();
                for (var i, n = "", s = !1, o = 0, a = (e = (e = (e = e.replace(/[^\d+]/g, "")).replace(/^\+/, "B").replace(/\+/g, "").replace("B", "+")).replace(t.delimiterRE, "")).length; o < a; o++)
                    i = t.formatter.inputDigit(e.charAt(o)),
                    /[\s()-]/g.test(i) ? (n = i,
                    s = !0) : s || (n = i);
                return (n = n.replace(/[()]/g, "")).replace(/[\s-]/g, t.delimiter)
            }
        },
        e.exports = t
    }
    , function(e) {
        "use strict";
        var t = {
            blocks: {
                uatp: [4, 5, 6],
                amex: [4, 6, 5],
                diners: [4, 6, 4],
                discover: [4, 4, 4, 4],
                mastercard: [4, 4, 4, 4],
                dankort: [4, 4, 4, 4],
                instapayment: [4, 4, 4, 4],
                jcb15: [4, 6, 5],
                jcb: [4, 4, 4, 4],
                maestro: [4, 4, 4, 4],
                visa: [4, 4, 4, 4],
                mir: [4, 4, 4, 4],
                unionPay: [4, 4, 4, 4],
                general: [4, 4, 4, 4]
            },
            re: {
                uatp: /^(?!1800)1\d{0,14}/,
                amex: /^3[47]\d{0,13}/,
                discover: /^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,
                diners: /^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,
                mastercard: /^(5[1-5]\d{0,2}|22[2-9]\d{0,1}|2[3-7]\d{0,2})\d{0,12}/,
                dankort: /^(5019|4175|4571)\d{0,12}/,
                instapayment: /^63[7-9]\d{0,13}/,
                jcb15: /^(?:2131|1800)\d{0,11}/,
                jcb: /^(?:35\d{0,2})\d{0,12}/,
                maestro: /^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,
                mir: /^220[0-4]\d{0,12}/,
                visa: /^4\d{0,15}/,
                unionPay: /^(62|81)\d{0,14}/
            },
            getStrictBlocks: function(e) {
                var t = e.reduce((function(e, t) {
                    return e + t
                }
                ), 0);
                return e.concat(19 - t)
            },
            getInfo: function(e, i) {
                var n = t.blocks
                  , s = t.re;
                for (var o in i = !!i,
                s)
                    if (s[o].test(e)) {
                        var a = n[o];
                        return {
                            type: o,
                            blocks: i ? this.getStrictBlocks(a) : a
                        }
                    }
                return {
                    type: "unknown",
                    blocks: i ? this.getStrictBlocks(n.general) : n.general
                }
            }
        };
        e.exports = t
    }
    , function(e) {
        "use strict";
        var t = {
            noop: function() {},
            strip: function(e, t) {
                return e.replace(t, "")
            },
            getPostDelimiter: function(e, t, i) {
                if (0 === i.length)
                    return e.slice(-t.length) === t ? t : "";
                var n = "";
                return i.forEach((function(t) {
                    e.slice(-t.length) === t && (n = t)
                }
                )),
                n
            },
            getDelimiterREByDelimiter: function(e) {
                return new RegExp(e.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"),"g")
            },
            getNextCursorPosition: function(e, t, i, n, s) {
                return t.length === e ? i.length : e + this.getPositionOffset(e, t, i, n, s)
            },
            getPositionOffset: function(e, t, i, n, s) {
                var o, a, r;
                return o = this.stripDelimiters(t.slice(0, e), n, s),
                a = this.stripDelimiters(i.slice(0, e), n, s),
                0 !== (r = o.length - a.length) ? r / Math.abs(r) : 0
            },
            stripDelimiters: function(e, t, i) {
                var n = this;
                if (0 === i.length) {
                    var s = t ? n.getDelimiterREByDelimiter(t) : "";
                    return e.replace(s, "")
                }
                return i.forEach((function(t) {
                    t.split("").forEach((function(t) {
                        e = e.replace(n.getDelimiterREByDelimiter(t), "")
                    }
                    ))
                }
                )),
                e
            },
            headStr: function(e, t) {
                return e.slice(0, t)
            },
            getMaxLength: function(e) {
                return e.reduce((function(e, t) {
                    return e + t
                }
                ), 0)
            },
            getPrefixStrippedValue: function(e, t, i, n, s, o, a, r, l) {
                if (0 === i)
                    return e;
                if (e === t && "" !== e)
                    return "";
                if (l && "-" == e.slice(0, 1)) {
                    var u = "-" == n.slice(0, 1) ? n.slice(1) : n;
                    return "-" + this.getPrefixStrippedValue(e.slice(1), t, i, u, s, o, a, r, l)
                }
                if (n.slice(0, i) !== t && !r)
                    return a && !n && e ? e : "";
                if (n.slice(-i) !== t && r)
                    return a && !n && e ? e : "";
                var d = this.stripDelimiters(n, s, o);
                return e.slice(0, i) === t || r ? e.slice(-i) !== t && r ? d.slice(0, -i - 1) : r ? e.slice(0, -i) : e.slice(i) : d.slice(i)
            },
            getFirstDiffIndex: function(e, t) {
                for (var i = 0; e.charAt(i) === t.charAt(i); )
                    if ("" === e.charAt(i++))
                        return -1;
                return i
            },
            getFormattedValue: function(e, t, i, n, s, o) {
                var a = ""
                  , r = s.length > 0
                  , l = "";
                return 0 === i ? e : (t.forEach((function(t, u) {
                    if (e.length > 0) {
                        var d = e.slice(0, t)
                          , c = e.slice(t);
                        l = r ? s[o ? u - 1 : u] || l : n,
                        o ? (u > 0 && (a += l),
                        a += d) : (a += d,
                        d.length === t && u < i - 1 && (a += l)),
                        e = c
                    }
                }
                )),
                a)
            },
            fixPrefixCursor: function(e, t, i, n) {
                if (e) {
                    var s = e.value
                      , o = i || n[0] || " ";
                    if (e.setSelectionRange && t && !(t.length + o.length <= s.length)) {
                        var a = 2 * s.length;
                        setTimeout((function() {
                            e.setSelectionRange(a, a)
                        }
                        ), 1)
                    }
                }
            },
            checkFullSelection: function(e) {
                try {
                    return (window.getSelection() || document.getSelection() || {}).toString().length === e.length
                } catch (e) {}
                return !1
            },
            setSelection: function(e, t, i) {
                if (e === this.getActiveElement(i) && !(e && e.value.length <= t))
                    if (e.createTextRange) {
                        var n = e.createTextRange();
                        n.move("character", t),
                        n.select()
                    } else
                        try {
                            e.setSelectionRange(t, t)
                        } catch (e) {
                            console.warn("The input element type does not support selection")
                        }
            },
            getActiveElement: function(e) {
                var t = e.activeElement;
                return t && t.shadowRoot ? this.getActiveElement(t.shadowRoot) : t
            },
            isAndroid: function() {
                return navigator && /android/i.test(navigator.userAgent)
            },
            isAndroidBackspaceKeydown: function(e, t) {
                return !!(this.isAndroid() && e && t) && t === e.slice(0, -1)
            }
        };
        e.exports = t
    }
    , function(e, t) {
        (function(t) {
            "use strict";
            var i = {
                assign: function(e, i) {
                    return i = i || {},
                    (e = e || {}).creditCard = !!i.creditCard,
                    e.creditCardStrictMode = !!i.creditCardStrictMode,
                    e.creditCardType = "",
                    e.onCreditCardTypeChanged = i.onCreditCardTypeChanged || function() {}
                    ,
                    e.phone = !!i.phone,
                    e.phoneRegionCode = i.phoneRegionCode || "AU",
                    e.phoneFormatter = {},
                    e.time = !!i.time,
                    e.timePattern = i.timePattern || ["h", "m", "s"],
                    e.timeFormat = i.timeFormat || "24",
                    e.timeFormatter = {},
                    e.date = !!i.date,
                    e.datePattern = i.datePattern || ["d", "m", "Y"],
                    e.dateMin = i.dateMin || "",
                    e.dateMax = i.dateMax || "",
                    e.dateFormatter = {},
                    e.numeral = !!i.numeral,
                    e.numeralIntegerScale = i.numeralIntegerScale > 0 ? i.numeralIntegerScale : 0,
                    e.numeralDecimalScale = i.numeralDecimalScale >= 0 ? i.numeralDecimalScale : 2,
                    e.numeralDecimalMark = i.numeralDecimalMark || ".",
                    e.numeralThousandsGroupStyle = i.numeralThousandsGroupStyle || "thousand",
                    e.numeralPositiveOnly = !!i.numeralPositiveOnly,
                    e.stripLeadingZeroes = !1 !== i.stripLeadingZeroes,
                    e.signBeforePrefix = !!i.signBeforePrefix,
                    e.tailPrefix = !!i.tailPrefix,
                    e.swapHiddenInput = !!i.swapHiddenInput,
                    e.numericOnly = e.creditCard || e.date || !!i.numericOnly,
                    e.uppercase = !!i.uppercase,
                    e.lowercase = !!i.lowercase,
                    e.prefix = e.creditCard || e.date ? "" : i.prefix || "",
                    e.noImmediatePrefix = !!i.noImmediatePrefix,
                    e.prefixLength = e.prefix.length,
                    e.rawValueTrimPrefix = !!i.rawValueTrimPrefix,
                    e.copyDelimiter = !!i.copyDelimiter,
                    e.initValue = void 0 !== i.initValue && null !== i.initValue ? i.initValue.toString() : "",
                    e.delimiter = i.delimiter || "" === i.delimiter ? i.delimiter : i.date ? "/" : i.time ? ":" : i.numeral ? "," : (i.phone,
                    " "),
                    e.delimiterLength = e.delimiter.length,
                    e.delimiterLazyShow = !!i.delimiterLazyShow,
                    e.delimiters = i.delimiters || [],
                    e.blocks = i.blocks || [],
                    e.blocksLength = e.blocks.length,
                    e.root = "object" == typeof t && t ? t : window,
                    e.document = i.document || e.root.document,
                    e.maxLength = 0,
                    e.backspace = !1,
                    e.result = "",
                    e.onValueChanged = i.onValueChanged || function() {}
                    ,
                    e
                }
            };
            e.exports = i
        }
        ).call(t, function() {
            return this
        }())
    }
    ])
}
)),
function() {
    $((function() {
        if ("function" == typeof window.Cleave && document.querySelector("[data-card-format]"))
            return new Cleave("[data-card-format]",{
                creditCard: !0,
                onCreditCardTypeChanged: function(e) {
                    document.querySelector("[data-card-format]").dataset.cardType = e
                }
            }),
            new Cleave("[data-mmyy-format]",{
                date: !0,
                datePattern: ["m", "y"],
                delimiter: " / "
            })
    }
    ))
}
.call(this);
