var LZString = {
    _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    _f: String.fromCharCode,
    compressToBase64: function(e) {
        if (e == null) return "";
        var t = "";
        var n, r, i, s, o, u, a;
        var f = 0;
        e = LZString.compress(e);
        while (f < e.length * 2) {
            if (f % 2 == 0) {
                n = e.charCodeAt(f / 2) >> 8;
                r = e.charCodeAt(f / 2) & 255;
                if (f / 2 + 1 < e.length) i = e.charCodeAt(f / 2 + 1) >> 8;
                else i = NaN
            } else {
                n = e.charCodeAt((f - 1) / 2) & 255;
                if ((f + 1) / 2 < e.length) {
                    r = e.charCodeAt((f + 1) / 2) >> 8;
                    i = e.charCodeAt((f + 1) / 2) & 255
                } else r = i = NaN
            }
            f += 3;
            s = n >> 2;
            o = (n & 3) << 4 | r >> 4;
            u = (r & 15) << 2 | i >> 6;
            a = i & 63;
            if (isNaN(r)) {
                u = a = 64
            } else if (isNaN(i)) {
                a = 64
            }
            t = t + LZString._keyStr.charAt(s) + LZString._keyStr.charAt(o) + LZString._keyStr.charAt(u) + LZString._keyStr.charAt(a)
        }
        return t
    },
    decompressFromBase64: function(e) {
        if (e == null) return "";
        var t = "",
            n = 0,
            r, i, s, o, u, a, f, l, c = 0,
            h = LZString._f;
        e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
        while (c < e.length) {
            u = LZString._keyStr.indexOf(e.charAt(c++));
            a = LZString._keyStr.indexOf(e.charAt(c++));
            f = LZString._keyStr.indexOf(e.charAt(c++));
            l = LZString._keyStr.indexOf(e.charAt(c++));
            i = u << 2 | a >> 4;
            s = (a & 15) << 4 | f >> 2;
            o = (f & 3) << 6 | l;
            if (n % 2 == 0) {
                r = i << 8;
                if (f != 64) {
                    t += h(r | s)
                }
                if (l != 64) {
                    r = o << 8
                }
            } else {
                t = t + h(r | i);
                if (f != 64) {
                    r = s << 8
                }
                if (l != 64) {
                    t += h(r | o)
                }
            }
            n += 3
        }
        return LZString.decompress(t)
    },
    compressToUTF16: function(e) {
        if (e == null) return "";
        var t = "",
            n, r, i, s = 0,
            o = LZString._f;
        e = LZString.compress(e);
        for (n = 0; n < e.length; n++) {
            r = e.charCodeAt(n);
            switch (s++) {
                case 0:
                    t += o((r >> 1) + 32);
                    i = (r & 1) << 14;
                    break;
                case 1:
                    t += o(i + (r >> 2) + 32);
                    i = (r & 3) << 13;
                    break;
                case 2:
                    t += o(i + (r >> 3) + 32);
                    i = (r & 7) << 12;
                    break;
                case 3:
                    t += o(i + (r >> 4) + 32);
                    i = (r & 15) << 11;
                    break;
                case 4:
                    t += o(i + (r >> 5) + 32);
                    i = (r & 31) << 10;
                    break;
                case 5:
                    t += o(i + (r >> 6) + 32);
                    i = (r & 63) << 9;
                    break;
                case 6:
                    t += o(i + (r >> 7) + 32);
                    i = (r & 127) << 8;
                    break;
                case 7:
                    t += o(i + (r >> 8) + 32);
                    i = (r & 255) << 7;
                    break;
                case 8:
                    t += o(i + (r >> 9) + 32);
                    i = (r & 511) << 6;
                    break;
                case 9:
                    t += o(i + (r >> 10) + 32);
                    i = (r & 1023) << 5;
                    break;
                case 10:
                    t += o(i + (r >> 11) + 32);
                    i = (r & 2047) << 4;
                    break;
                case 11:
                    t += o(i + (r >> 12) + 32);
                    i = (r & 4095) << 3;
                    break;
                case 12:
                    t += o(i + (r >> 13) + 32);
                    i = (r & 8191) << 2;
                    break;
                case 13:
                    t += o(i + (r >> 14) + 32);
                    i = (r & 16383) << 1;
                    break;
                case 14:
                    t += o(i + (r >> 15) + 32, (r & 32767) + 32);
                    s = 0;
                    break
            }
        }
        return t + o(i + 32)
    },
    decompressFromUTF16: function(e) {
        if (e == null) return "";
        var t = "",
            n, r, i = 0,
            s = 0,
            o = LZString._f;
        while (s < e.length) {
            r = e.charCodeAt(s) - 32;
            switch (i++) {
                case 0:
                    n = r << 1;
                    break;
                case 1:
                    t += o(n | r >> 14);
                    n = (r & 16383) << 2;
                    break;
                case 2:
                    t += o(n | r >> 13);
                    n = (r & 8191) << 3;
                    break;
                case 3:
                    t += o(n | r >> 12);
                    n = (r & 4095) << 4;
                    break;
                case 4:
                    t += o(n | r >> 11);
                    n = (r & 2047) << 5;
                    break;
                case 5:
                    t += o(n | r >> 10);
                    n = (r & 1023) << 6;
                    break;
                case 6:
                    t += o(n | r >> 9);
                    n = (r & 511) << 7;
                    break;
                case 7:
                    t += o(n | r >> 8);
                    n = (r & 255) << 8;
                    break;
                case 8:
                    t += o(n | r >> 7);
                    n = (r & 127) << 9;
                    break;
                case 9:
                    t += o(n | r >> 6);
                    n = (r & 63) << 10;
                    break;
                case 10:
                    t += o(n | r >> 5);
                    n = (r & 31) << 11;
                    break;
                case 11:
                    t += o(n | r >> 4);
                    n = (r & 15) << 12;
                    break;
                case 12:
                    t += o(n | r >> 3);
                    n = (r & 7) << 13;
                    break;
                case 13:
                    t += o(n | r >> 2);
                    n = (r & 3) << 14;
                    break;
                case 14:
                    t += o(n | r >> 1);
                    n = (r & 1) << 15;
                    break;
                case 15:
                    t += o(n | r);
                    i = 0;
                    break
            }
            s++
        }
        return LZString.decompress(t)
    },
    compressToUint8Array: function(e) {
        var t = LZString.compress(e);
        var n = new Uint8Array(t.length * 2);
        for (var r = 0, i = t.length; r < i; r++) {
            var s = t.charCodeAt(r);
            n[r * 2] = s >>> 8;
            n[r * 2 + 1] = s % 256
        }
        return n
    },
    decompressFromUint8Array: function(e) {
        if (e === null || e === undefined) {
            return LZString.decompress(e)
        } else {
            var t = new Array(e.length / 2);
            for (var n = 0, r = t.length; n < r; n++) {
                t[n] = e[n * 2] * 256 + e[n * 2 + 1]
            }
            return LZString.decompress(String.fromCharCode.apply(null, t))
        }
    },
    compressToEncodedURIComponent: function(e) {
        return LZString.compressToBase64(e).replace(/=/g, "$").replace(/\//g, "-")
    },
    decompressFromEncodedURIComponent: function(e) {
        if (e) e = e.replace(/$/g, "=").replace(/-/g, "/");
        return LZString.decompressFromBase64(e)
    },
    compress: function(e) {
        if (e == null) return "";
        var t, n, r = {},
            i = {},
            s = "",
            o = "",
            u = "",
            a = 2,
            f = 3,
            l = 2,
            c = "",
            h = 0,
            p = 0,
            d, v = LZString._f;
        for (d = 0; d < e.length; d += 1) {
            s = e.charAt(d);
            if (!Object.prototype.hasOwnProperty.call(r, s)) {
                r[s] = f++;
                i[s] = true
            }
            o = u + s;
            if (Object.prototype.hasOwnProperty.call(r, o)) {
                u = o
            } else {
                if (Object.prototype.hasOwnProperty.call(i, u)) {
                    if (u.charCodeAt(0) < 256) {
                        for (t = 0; t < l; t++) {
                            h = h << 1;
                            if (p == 15) {
                                p = 0;
                                c += v(h);
                                h = 0
                            } else {
                                p++
                            }
                        }
                        n = u.charCodeAt(0);
                        for (t = 0; t < 8; t++) {
                            h = h << 1 | n & 1;
                            if (p == 15) {
                                p = 0;
                                c += v(h);
                                h = 0
                            } else {
                                p++
                            }
                            n = n >> 1
                        }
                    } else {
                        n = 1;
                        for (t = 0; t < l; t++) {
                            h = h << 1 | n;
                            if (p == 15) {
                                p = 0;
                                c += v(h);
                                h = 0
                            } else {
                                p++
                            }
                            n = 0
                        }
                        n = u.charCodeAt(0);
                        for (t = 0; t < 16; t++) {
                            h = h << 1 | n & 1;
                            if (p == 15) {
                                p = 0;
                                c += v(h);
                                h = 0
                            } else {
                                p++
                            }
                            n = n >> 1
                        }
                    }
                    a--;
                    if (a == 0) {
                        a = Math.pow(2, l);
                        l++
                    }
                    delete i[u]
                } else {
                    n = r[u];
                    for (t = 0; t < l; t++) {
                        h = h << 1 | n & 1;
                        if (p == 15) {
                            p = 0;
                            c += v(h);
                            h = 0
                        } else {
                            p++
                        }
                        n = n >> 1
                    }
                }
                a--;
                if (a == 0) {
                    a = Math.pow(2, l);
                    l++
                }
                r[o] = f++;
                u = String(s)
            }
        }
        if (u !== "") {
            if (Object.prototype.hasOwnProperty.call(i, u)) {
                if (u.charCodeAt(0) < 256) {
                    for (t = 0; t < l; t++) {
                        h = h << 1;
                        if (p == 15) {
                            p = 0;
                            c += v(h);
                            h = 0
                        } else {
                            p++
                        }
                    }
                    n = u.charCodeAt(0);
                    for (t = 0; t < 8; t++) {
                        h = h << 1 | n & 1;
                        if (p == 15) {
                            p = 0;
                            c += v(h);
                            h = 0
                        } else {
                            p++
                        }
                        n = n >> 1
                    }
                } else {
                    n = 1;
                    for (t = 0; t < l; t++) {
                        h = h << 1 | n;
                        if (p == 15) {
                            p = 0;
                            c += v(h);
                            h = 0
                        } else {
                            p++
                        }
                        n = 0
                    }
                    n = u.charCodeAt(0);
                    for (t = 0; t < 16; t++) {
                        h = h << 1 | n & 1;
                        if (p == 15) {
                            p = 0;
                            c += v(h);
                            h = 0
                        } else {
                            p++
                        }
                        n = n >> 1
                    }
                }
                a--;
                if (a == 0) {
                    a = Math.pow(2, l);
                    l++
                }
                delete i[u]
            } else {
                n = r[u];
                for (t = 0; t < l; t++) {
                    h = h << 1 | n & 1;
                    if (p == 15) {
                        p = 0;
                        c += v(h);
                        h = 0
                    } else {
                        p++
                    }
                    n = n >> 1
                }
            }
            a--;
            if (a == 0) {
                a = Math.pow(2, l);
                l++
            }
        }
        n = 2;
        for (t = 0; t < l; t++) {
            h = h << 1 | n & 1;
            if (p == 15) {
                p = 0;
                c += v(h);
                h = 0
            } else {
                p++
            }
            n = n >> 1
        }
        while (true) {
            h = h << 1;
            if (p == 15) {
                c += v(h);
                break
            } else p++
        }
        return c
    },
    decompress: function(e) {
        if (e == null) return "";
        if (e == "") return null;
        var t = [],
            n, r = 4,
            i = 4,
            s = 3,
            o = "",
            u = "",
            a, f, l, c, h, p, d, v = LZString._f,
            m = {
                string: e,
                val: e.charCodeAt(0),
                position: 32768,
                index: 1
            };
        for (a = 0; a < 3; a += 1) {
            t[a] = a
        }
        l = 0;
        h = Math.pow(2, 2);
        p = 1;
        while (p != h) {
            c = m.val & m.position;
            m.position >>= 1;
            if (m.position == 0) {
                m.position = 32768;
                m.val = m.string.charCodeAt(m.index++)
            }
            l |= (c > 0 ? 1 : 0) * p;
            p <<= 1
        }
        switch (n = l) {
            case 0:
                l = 0;
                h = Math.pow(2, 8);
                p = 1;
                while (p != h) {
                    c = m.val & m.position;
                    m.position >>= 1;
                    if (m.position == 0) {
                        m.position = 32768;
                        m.val = m.string.charCodeAt(m.index++)
                    }
                    l |= (c > 0 ? 1 : 0) * p;
                    p <<= 1
                }
                d = v(l);
                break;
            case 1:
                l = 0;
                h = Math.pow(2, 16);
                p = 1;
                while (p != h) {
                    c = m.val & m.position;
                    m.position >>= 1;
                    if (m.position == 0) {
                        m.position = 32768;
                        m.val = m.string.charCodeAt(m.index++)
                    }
                    l |= (c > 0 ? 1 : 0) * p;
                    p <<= 1
                }
                d = v(l);
                break;
            case 2:
                return ""
        }
        t[3] = d;
        f = u = d;
        while (true) {
            if (m.index > m.string.length) {
                return ""
            }
            l = 0;
            h = Math.pow(2, s);
            p = 1;
            while (p != h) {
                c = m.val & m.position;
                m.position >>= 1;
                if (m.position == 0) {
                    m.position = 32768;
                    m.val = m.string.charCodeAt(m.index++)
                }
                l |= (c > 0 ? 1 : 0) * p;
                p <<= 1
            }
            switch (d = l) {
                case 0:
                    l = 0;
                    h = Math.pow(2, 8);
                    p = 1;
                    while (p != h) {
                        c = m.val & m.position;
                        m.position >>= 1;
                        if (m.position == 0) {
                            m.position = 32768;
                            m.val = m.string.charCodeAt(m.index++)
                        }
                        l |= (c > 0 ? 1 : 0) * p;
                        p <<= 1
                    }
                    t[i++] = v(l);
                    d = i - 1;
                    r--;
                    break;
                case 1:
                    l = 0;
                    h = Math.pow(2, 16);
                    p = 1;
                    while (p != h) {
                        c = m.val & m.position;
                        m.position >>= 1;
                        if (m.position == 0) {
                            m.position = 32768;
                            m.val = m.string.charCodeAt(m.index++)
                        }
                        l |= (c > 0 ? 1 : 0) * p;
                        p <<= 1
                    }
                    t[i++] = v(l);
                    d = i - 1;
                    r--;
                    break;
                case 2:
                    return u
            }
            if (r == 0) {
                r = Math.pow(2, s);
                s++
            }
            if (t[d]) {
                o = t[d]
            } else {
                if (d === i) {
                    o = f + f.charAt(0)
                } else {
                    return null
                }
            }
            u += o;
            t[i++] = f + o.charAt(0);
            r--;
            f = o;
            if (r == 0) {
                r = Math.pow(2, s);
                s++
            }
        }
    }
};
if (typeof module !== "undefined" && module != null) {
    module.exports = LZString
}
