JSZip
/*!
JSZip - A Javascript class for generating and reading zip files
<http://stuartk.com/jszip>
(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com>
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
JSZip uses the library zlib.js released under the following license :
zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License
*/
!function(a) {
    "object" == typeof exports ? module.exports = a() : "function" == typeof define && define.amd ? define(a) : "undefined" != typeof window ? window.JSZip = a() : "undefined" != typeof global ? global.JSZip = a() : "undefined" != typeof self && (self.JSZip = a())
}(function() {
    return function a(b, c, d) {
        function e(g, h) {
            if (!c[g]) {
                if (!b[g]) {
                    var i = "function" == typeof require && require;
                    if (!h && i)
                        return i(g, !0);
                    if (f)
                        return f(g, !0);
                    throw new Error("Cannot find module '" + g + "'")
                }
                var j = c[g] = {
                    exports: {}
                };
                b[g][0].call(j.exports, function(a) {
                    var c = b[g][1][a];
                    return e(c ? c : a)
                }, j, j.exports, a, b, c, d)
            }
            return c[g].exports
        }
        for (var f = "function" == typeof require && require, g = 0; g < d.length; g++)
            e(d[g]);
        return e
    }({
        1: [function(a, b, c) {
            "use strict";
            var d = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
            c.encode = function(a) {
                for (var b, c, e, f, g, h, i, j = "", k = 0; k < a.length; )
                    b = a.charCodeAt(k++),
                    c = a.charCodeAt(k++),
                    e = a.charCodeAt(k++),
                    f = b >> 2,
                    g = (3 & b) << 4 | c >> 4,
                    h = (15 & c) << 2 | e >> 6,
                    i = 63 & e,
                    isNaN(c) ? h = i = 64 : isNaN(e) && (i = 64),
                    j = j + d.charAt(f) + d.charAt(g) + d.charAt(h) + d.charAt(i);
                return j
            }
            ,
            c.decode = function(a) {
                var b, c, e, f, g, h, i, j = "", k = 0;
                for (a = a.replace(/[^A-Za-z0-9\+\/\=]/g, ""); k < a.length; )
                    f = d.indexOf(a.charAt(k++)),
                    g = d.indexOf(a.charAt(k++)),
                    h = d.indexOf(a.charAt(k++)),
                    i = d.indexOf(a.charAt(k++)),
                    b = f << 2 | g >> 4,
                    c = (15 & g) << 4 | h >> 2,
                    e = (3 & h) << 6 | i,
                    j += String.fromCharCode(b),
                    64 != h && (j += String.fromCharCode(c)),
                    64 != i && (j += String.fromCharCode(e));
                return j
            }
        }
        , {}],
        2: [function(a, b) {
            "use strict";
            function c() {
                this.compressedSize = 0,
                this.uncompressedSize = 0,
                this.crc32 = 0,
                this.compressionMethod = null,
                this.compressedContent = null
            }
            c.prototype = {
                getContent: function() {
                    return null
                },
                getCompressedContent: function() {
                    return null
                }
            },
            b.exports = c
        }
        , {}],
        3: [function(a, b, c) {
            "use strict";
            c.STORE = {
                magic: "\x00\x00",
                compress: function(a) {
                    return a
                },
                uncompress: function(a) {
                    return a
                },
                compressInputType: null,
                uncompressInputType: null
            },
            c.DEFLATE = a("./flate")
        }
        , {
            "./flate": 6
        }],
        4: [function(a, b) {
            "use strict";
            function c() {
                this.data = null,
                this.length = 0,
                this.index = 0
            }
            var d = a("./utils");
            c.prototype = {
                checkOffset: function(a) {
                    this.checkIndex(this.index + a)
                },
                checkIndex: function(a) {
                    if (this.length < a || 0 > a)
                        throw new Error("End of data reached (data length = " + this.length + ", asked index = " + a + "). Corrupted zip ?")
                },
                setIndex: function(a) {
                    this.checkIndex(a),
                    this.index = a
                },
                skip: function(a) {
                    this.setIndex(this.index + a)
                },
                byteAt: function() {},
                readInt: function(a) {
                    var b, c = 0;
                    for (this.checkOffset(a),
                    b = this.index + a - 1; b >= this.index; b--)
                        c = (c << 8) + this.byteAt(b);
                    return this.index += a,
                    c
                },
                readString: function(a) {
                    return d.transformTo("string", this.readData(a))
                },
                readData: function() {},
                lastIndexOfSignature: function() {},
                readDate: function() {
                    var a = this.readInt(4);
                    return new Date((a >> 25 & 127) + 1980,(a >> 21 & 15) - 1,a >> 16 & 31,a >> 11 & 31,a >> 5 & 63,(31 & a) << 1)
                }
            },
            b.exports = c
        }
        , {
            "./utils": 14
        }],
        5: [function(a, b, c) {
            "use strict";
            c.base64 = !1,
            c.binary = !1,
            c.dir = !1,
            c.date = null,
            c.compression = null
        }
        , {}],
        6: [function(a, b, c) {
            "use strict";
            var d = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array
              , e = a("zlibjs/bin/rawdeflate.min").Zlib
              , f = a("zlibjs/bin/rawinflate.min").Zlib;
            c.uncompressInputType = d ? "uint8array" : "array",
            c.compressInputType = d ? "uint8array" : "array",
            c.magic = "\b\x00",
            c.compress = function(a) {
                var b = new e.RawDeflate(a);
                return b.compress()
            }
            ,
            c.uncompress = function(a) {
                var b = new f.RawInflate(a);
                return b.decompress()
            }
        }
        , {
            "zlibjs/bin/rawdeflate.min": 19,
            "zlibjs/bin/rawinflate.min": 20
        }],
        7: [function(a, b) {
            "use strict";
            function c(a, b) {
                return this instanceof c ? (this.files = {},
                this.root = "",
                a && this.load(a, b),
                void (this.clone = function() {
                    var a = new c;
                    for (var b in this)
                        "function" != typeof this[b] && (a[b] = this[b]);
                    return a
                }
                )) : new c(a,b)
            }
            c.prototype = a("./object"),
            c.prototype.load = a("./load"),
            c.support = a("./support"),
            c.defaults = a("./defaults"),
            c.utils = a("./utils"),
            c.base64 = a("./base64"),
            c.compressions = a("./compressions"),
            b.exports = c
        }
        , {
            "./base64": 1,
            "./compressions": 3,
            "./defaults": 5,
            "./load": 8,
            "./object": 9,
            "./support": 12,
            "./utils": 14
        }],
        8: [function(a, b) {
            "use strict";
            var c = a("./base64")
              , d = a("./zipEntries");
            b.exports = function(a, b) {
                var e, f, g, h;
                for (b = b || {},
                b.base64 && (a = c.decode(a)),
                f = new d(a,b),
                e = f.files,
                g = 0; g < e.length; g++)
                    h = e[g],
                    this.file(h.fileName, h.decompressed, {
                        binary: !0,
                        optimizedBinaryString: !0,
                        date: h.date,
                        dir: h.dir
                    });
                return this
            }
        }
        , {
            "./base64": 1,
            "./zipEntries": 15
        }],
        9: [function(a, b) {
            "use strict";
            var c, d, e = a("./support"), f = a("./utils"), g = a("./signature"), h = a("./defaults"), i = a("./base64"), j = a("./compressions"), k = a("./compressedObject"), l = a("./nodeBuffer");
            e.uint8array && "function" == typeof TextEncoder && "function" == typeof TextDecoder && (c = new TextEncoder("utf-8"),
            d = new TextDecoder("utf-8"));
            var m = function(a) {
                if (a._data instanceof k && (a._data = a._data.getContent(),
                a.options.binary = !0,
                a.options.base64 = !1,
                "uint8array" === f.getTypeOf(a._data))) {
                    var b = a._data;
                    a._data = new Uint8Array(b.length),
                    0 !== b.length && a._data.set(b, 0)
                }
                return a._data
            }
              , n = function(a) {
                var b = m(a)
                  , d = f.getTypeOf(b);
                if ("string" === d) {
                    if (!a.options.binary) {
                        if (c)
                            return c.encode(b);
                        if (e.nodebuffer)
                            return l(b, "utf-8")
                    }
                    return a.asBinary()
                }
                return b
            }
              , o = function(a) {
                var b = m(this);
                return null === b || "undefined" == typeof b ? "" : (this.options.base64 && (b = i.decode(b)),
                b = a && this.options.binary ? A.utf8decode(b) : f.transformTo("string", b),
                a || this.options.binary || (b = A.utf8encode(b)),
                b)
            }
              , p = function(a, b, c) {
                this.name = a,
                this._data = b,
                this.options = c
            };
            p.prototype = {
                asText: function() {
                    return o.call(this, !0)
                },
                asBinary: function() {
                    return o.call(this, !1)
                },
                asNodeBuffer: function() {
                    var a = n(this);
                    return f.transformTo("nodebuffer", a)
                },
                asUint8Array: function() {
                    var a = n(this);
                    return f.transformTo("uint8array", a)
                },
                asArrayBuffer: function() {
                    return this.asUint8Array().buffer
                }
            };
            var q = function(a, b) {
                var c, d = "";
                for (c = 0; b > c; c++)
                    d += String.fromCharCode(255 & a),
                    a >>>= 8;
                return d
            }
              , r = function() {
                var a, b, c = {};
                for (a = 0; a < arguments.length; a++)
                    for (b in arguments[a])
                        arguments[a].hasOwnProperty(b) && "undefined" == typeof c[b] && (c[b] = arguments[a][b]);
                return c
            }
              , s = function(a) {
                return a = a || {},
                a.base64 !== !0 || null !== a.binary && void 0 !== a.binary || (a.binary = !0),
                a = r(a, h),
                a.date = a.date || new Date,
                null !== a.compression && (a.compression = a.compression.toUpperCase()),
                a
            }
              , t = function(a, b, c) {
                var d = u(a)
                  , e = f.getTypeOf(b);
                if (d && v.call(this, d),
                c = s(c),
                c.dir || null === b || "undefined" == typeof b)
                    c.base64 = !1,
                    c.binary = !1,
                    b = null;
                else if ("string" === e)
                    c.binary && !c.base64 && c.optimizedBinaryString !== !0 && (b = f.string2binary(b));
                else {
                    if (c.base64 = !1,
                    c.binary = !0,
                    !(e || b instanceof k))
                        throw new Error("The data of '" + a + "' is in an unsupported format !");
                    "arraybuffer" === e && (b = f.transformTo("uint8array", b))
                }
                var g = new p(a,b,c);
                return this.files[a] = g,
                g
            }
              , u = function(a) {
                "/" == a.slice(-1) && (a = a.substring(0, a.length - 1));
                var b = a.lastIndexOf("/");
                return b > 0 ? a.substring(0, b) : ""
            }
              , v = function(a) {
                return "/" != a.slice(-1) && (a += "/"),
                this.files[a] || t.call(this, a, null, {
                    dir: !0
                }),
                this.files[a]
            }
              , w = function(a, b) {
                var c, d = new k;
                return a._data instanceof k ? (d.uncompressedSize = a._data.uncompressedSize,
                d.crc32 = a._data.crc32,
                0 === d.uncompressedSize || a.options.dir ? (b = j.STORE,
                d.compressedContent = "",
                d.crc32 = 0) : a._data.compressionMethod === b.magic ? d.compressedContent = a._data.getCompressedContent() : (c = a._data.getContent(),
                d.compressedContent = b.compress(f.transformTo(b.compressInputType, c)))) : (c = n(a),
                (!c || 0 === c.length || a.options.dir) && (b = j.STORE,
                c = ""),
                d.uncompressedSize = c.length,
                d.crc32 = this.crc32(c),
                d.compressedContent = b.compress(f.transformTo(b.compressInputType, c))),
                d.compressedSize = d.compressedContent.length,
                d.compressionMethod = b.magic,
                d
            }
              , x = function(a, b, c, d) {
                var e, f, h = (c.compressedContent,
                this.utf8encode(b.name)), i = h !== b.name, j = b.options, k = "", l = "";
                e = j.date.getHours(),
                e <<= 6,
                e |= j.date.getMinutes(),
                e <<= 5,
                e |= j.date.getSeconds() / 2,
                f = j.date.getFullYear() - 1980,
                f <<= 4,
                f |= j.date.getMonth() + 1,
                f <<= 5,
                f |= j.date.getDate(),
                i && (l = q(1, 1) + q(this.crc32(h), 4) + h,
                k += "up" + q(l.length, 2) + l);
                var m = "";
                m += "\n\x00",
                m += i ? "\x00\b" : "\x00\x00",
                m += c.compressionMethod,
                m += q(e, 2),
                m += q(f, 2),
                m += q(c.crc32, 4),
                m += q(c.compressedSize, 4),
                m += q(c.uncompressedSize, 4),
                m += q(h.length, 2),
                m += q(k.length, 2);
                var n = g.LOCAL_FILE_HEADER + m + h + k
                  , o = g.CENTRAL_FILE_HEADER + "\x00" + m + "\x00\x00\x00\x00\x00\x00" + (b.options.dir === !0 ? "\x00\x00\x00" : "\x00\x00\x00\x00") + q(d, 4) + h + k;
                return {
                    fileRecord: n,
                    dirRecord: o,
                    compressedObject: c
                }
            }
              , y = function() {
                this.data = []
            };
            y.prototype = {
                append: function(a) {
                    a = f.transformTo("string", a),
                    this.data.push(a)
                },
                finalize: function() {
                    return this.data.join("")
                }
            };
            var z = function(a) {
                this.data = new Uint8Array(a),
                this.index = 0
            };
            z.prototype = {
                append: function(a) {
                    0 !== a.length && (a = f.transformTo("uint8array", a),
                    this.data.set(a, this.index),
                    this.index += a.length)
                },
                finalize: function() {
                    return this.data
                }
            };
            var A = {
                load: function() {
                    throw new Error("Load method is not defined. Is the file jszip-load.js included ?")
                },
                filter: function(a) {
                    var b, c, d, e, f = [];
                    for (b in this.files)
                        this.files.hasOwnProperty(b) && (d = this.files[b],
                        e = new p(d.name,d._data,r(d.options)),
                        c = b.slice(this.root.length, b.length),
                        b.slice(0, this.root.length) === this.root && a(c, e) && f.push(e));
                    return f
                },
                file: function(a, b, c) {
                    if (1 === arguments.length) {
                        if (f.isRegExp(a)) {
                            var d = a;
                            return this.filter(function(a, b) {
                                return !b.options.dir && d.test(a)
                            })
                        }
                        return this.filter(function(b, c) {
                            return !c.options.dir && b === a
                        })[0] || null
                    }
                    return a = this.root + a,
                    t.call(this, a, b, c),
                    this
                },
                folder: function(a) {
                    if (!a)
                        return this;
                    if (f.isRegExp(a))
                        return this.filter(function(b, c) {
                            return c.options.dir && a.test(b)
                        });
                    var b = this.root + a
                      , c = v.call(this, b)
                      , d = this.clone();
                    return d.root = c.name,
                    d
                },
                remove: function(a) {
                    a = this.root + a;
                    var b = this.files[a];
                    if (b || ("/" != a.slice(-1) && (a += "/"),
                    b = this.files[a]),
                    b)
                        if (b.options.dir)
                            for (var c = this.filter(function(b, c) {
                                return c.name.slice(0, a.length) === a
                            }), d = 0; d < c.length; d++)
                                delete this.files[c[d].name];
                        else
                            delete this.files[a];
                    return this
                },
                generate: function(a) {
                    a = r(a || {}, {
                        base64: !0,
                        compression: "STORE",
                        type: "base64"
                    }),
                    f.checkSupport(a.type);
                    var b, c, d = [], e = 0, h = 0;
                    for (var k in this.files)
                        if (this.files.hasOwnProperty(k)) {
                            var l = this.files[k]
                              , m = l.options.compression || a.compression.toUpperCase()
                              , n = j[m];
                            if (!n)
                                throw new Error(m + " is not a valid compression method !");
                            var o = w.call(this, l, n)
                              , p = x.call(this, k, l, o, e);
                            e += p.fileRecord.length + o.compressedSize,
                            h += p.dirRecord.length,
                            d.push(p)
                        }
                    var s = "";
                    s = g.CENTRAL_DIRECTORY_END + "\x00\x00\x00\x00" + q(d.length, 2) + q(d.length, 2) + q(h, 4) + q(e, 4) + "\x00\x00";
                    var t = a.type.toLowerCase();
                    for (b = "uint8array" === t || "arraybuffer" === t || "blob" === t || "nodebuffer" === t ? new z(e + h + s.length) : new y(e + h + s.length),
                    c = 0; c < d.length; c++)
                        b.append(d[c].fileRecord),
                        b.append(d[c].compressedObject.compressedContent);
                    for (c = 0; c < d.length; c++)
                        b.append(d[c].dirRecord);
                    b.append(s);
                    var u = b.finalize();
                    switch (a.type.toLowerCase()) {
                    case "uint8array":
                    case "arraybuffer":
                    case "nodebuffer":
                        return f.transformTo(a.type.toLowerCase(), u);
                    case "blob":
                        return f.arrayBuffer2Blob(f.transformTo("arraybuffer", u));
                    case "base64":
                        return a.base64 ? i.encode(u) : u;
                    default:
                        return u
                    }
                },
                crc32: function(a, b) {
                    if ("undefined" == typeof a || !a.length)
                        return 0;
                    var c = "string" !== f.getTypeOf(a)
                      , d = [0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117];
                    "undefined" == typeof b && (b = 0);
                    var e = 0
                      , g = 0
                      , h = 0;
                    b = -1 ^ b;
                    for (var i = 0, j = a.length; j > i; i++)
                        h = c ? a[i] : a.charCodeAt(i),
                        g = 255 & (b ^ h),
                        e = d[g],
                        b = b >>> 8 ^ e;
                    return -1 ^ b
                },
                utf8encode: function(a) {
                    if (c) {
                        var b = c.encode(a);
                        return f.transformTo("string", b)
                    }
                    if (e.nodebuffer)
                        return f.transformTo("string", l(a, "utf-8"));
                    for (var d = [], g = 0, h = 0; h < a.length; h++) {
                        var i = a.charCodeAt(h);
                        128 > i ? d[g++] = String.fromCharCode(i) : i > 127 && 2048 > i ? (d[g++] = String.fromCharCode(i >> 6 | 192),
                        d[g++] = String.fromCharCode(63 & i | 128)) : (d[g++] = String.fromCharCode(i >> 12 | 224),
                        d[g++] = String.fromCharCode(i >> 6 & 63 | 128),
                        d[g++] = String.fromCharCode(63 & i | 128))
                    }
                    return d.join("")
                },
                utf8decode: function(a) {
                    var b = []
                      , c = 0
                      , g = f.getTypeOf(a)
                      , h = "string" !== g
                      , i = 0
                      , j = 0
                      , k = 0
                      , l = 0;
                    if (d)
                        return d.decode(f.transformTo("uint8array", a));
                    if (e.nodebuffer)
                        return f.transformTo("nodebuffer", a).toString("utf-8");
                    for (; i < a.length; )
                        j = h ? a[i] : a.charCodeAt(i),
                        128 > j ? (b[c++] = String.fromCharCode(j),
                        i++) : j > 191 && 224 > j ? (k = h ? a[i + 1] : a.charCodeAt(i + 1),
                        b[c++] = String.fromCharCode((31 & j) << 6 | 63 & k),
                        i += 2) : (k = h ? a[i + 1] : a.charCodeAt(i + 1),
                        l = h ? a[i + 2] : a.charCodeAt(i + 2),
                        b[c++] = String.fromCharCode((15 & j) << 12 | (63 & k) << 6 | 63 & l),
                        i += 3);
                    return b.join("")
                }
            };
            b.exports = A
        }
        , {
            "./base64": 1,
            "./compressedObject": 2,
            "./compressions": 3,
            "./defaults": 5,
            "./nodeBuffer": 17,
            "./signature": 10,
            "./support": 12,
            "./utils": 14
        }],
        10: [function(a, b, c) {
            "use strict";
            c.LOCAL_FILE_HEADER = "PK",
            c.CENTRAL_FILE_HEADER = "PK",
            c.CENTRAL_DIRECTORY_END = "PK",
            c.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK",
            c.ZIP64_CENTRAL_DIRECTORY_END = "PK",
            c.DATA_DESCRIPTOR = "PK\b"
        }
        , {}],
        11: [function(a, b) {
            "use strict";
            function c(a, b) {
                this.data = a,
                b || (this.data = e.string2binary(this.data)),
                this.length = this.data.length,
                this.index = 0
            }
            var d = a("./dataReader")
              , e = a("./utils");
            c.prototype = new d,
            c.prototype.byteAt = function(a) {
                return this.data.charCodeAt(a)
            }
            ,
            c.prototype.lastIndexOfSignature = function(a) {
                return this.data.lastIndexOf(a)
            }
            ,
            c.prototype.readData = function(a) {
                this.checkOffset(a);
                var b = this.data.slice(this.index, this.index + a);
                return this.index += a,
                b
            }
            ,
            b.exports = c
        }
        , {
            "./dataReader": 4,
            "./utils": 14
        }],
        12: [function(a, b, c) {
            var d = a("__browserify_process");
            if (c.base64 = !0,
            c.array = !0,
            c.string = !0,
            c.arraybuffer = "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8Array,
            c.nodebuffer = !d.browser,
            c.uint8array = "undefined" != typeof Uint8Array,
            "undefined" == typeof ArrayBuffer)
                c.blob = !1;
            else {
                var e = new ArrayBuffer(0);
                try {
                    c.blob = 0 === new Blob([e],{
                        type: "application/zip"
                    }).size
                } catch (f) {
                    try {
                        var g = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder
                          , h = new g;
                        h.append(e),
                        c.blob = 0 === h.getBlob("application/zip").size
                    } catch (f) {
                        c.blob = !1
                    }
                }
            }
        }
        , {
            __browserify_process: 18
        }],
        13: [function(a, b) {
            "use strict";
            function c(a) {
                a && (this.data = a,
                this.length = this.data.length,
                this.index = 0)
            }
            var d = a("./dataReader");
            c.prototype = new d,
            c.prototype.byteAt = function(a) {
                return this.data[a]
            }
            ,
            c.prototype.lastIndexOfSignature = function(a) {
                for (var b = a.charCodeAt(0), c = a.charCodeAt(1), d = a.charCodeAt(2), e = a.charCodeAt(3), f = this.length - 4; f >= 0; --f)
                    if (this.data[f] === b && this.data[f + 1] === c && this.data[f + 2] === d && this.data[f + 3] === e)
                        return f;
                return -1
            }
            ,
            c.prototype.readData = function(a) {
                this.checkOffset(a);
                var b = this.data.subarray(this.index, this.index + a);
                return this.index += a,
                b
            }
            ,
            b.exports = c
        }
        , {
            "./dataReader": 4
        }],
        14: [function(a, b, c) {
            "use strict";
            function d(a) {
                return a
            }
            function e(a, b) {
                for (var c = 0; c < a.length; ++c)
                    b[c] = 255 & a.charCodeAt(c);
                return b
            }
            function f(a) {
                var b = 65536
                  , d = []
                  , e = a.length
                  , f = c.getTypeOf(a)
                  , g = 0
                  , h = !0;
                try {
                    switch (f) {
                    case "uint8array":
                        String.fromCharCode.apply(null, new Uint8Array(0));
                        break;
                    case "nodebuffer":
                        String.fromCharCode.apply(null, j(0))
                    }
                } catch (i) {
                    h = !1
                }
                if (!h) {
                    for (var k = "", l = 0; l < a.length; l++)
                        k += String.fromCharCode(a[l]);
                    return k
                }
                for (; e > g && b > 1; )
                    try {
                        d.push("array" === f || "nodebuffer" === f ? String.fromCharCode.apply(null, a.slice(g, Math.min(g + b, e))) : String.fromCharCode.apply(null, a.subarray(g, Math.min(g + b, e)))),
                        g += b
                    } catch (i) {
                        b = Math.floor(b / 2)
                    }
                return d.join("")
            }
            function g(a, b) {
                for (var c = 0; c < a.length; c++)
                    b[c] = a[c];
                return b
            }
            var h = a("./support")
              , i = a("./compressions")
              , j = a("./nodeBuffer");
            c.string2binary = function(a) {
                for (var b = "", c = 0; c < a.length; c++)
                    b += String.fromCharCode(255 & a.charCodeAt(c));
                return b
            }
            ,
            c.string2Uint8Array = function(a) {
                return c.transformTo("uint8array", a)
            }
            ,
            c.uint8Array2String = function(a) {
                return c.transformTo("string", a)
            }
            ,
            c.string2Blob = function(a) {
                var b = c.transformTo("arraybuffer", a);
                return c.arrayBuffer2Blob(b)
            }
            ,
            c.arrayBuffer2Blob = function(a) {
                c.checkSupport("blob");
                try {
                    return new Blob([a],{
                        type: "application/zip"
                    })
                } catch (b) {
                    try {
                        var d = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder
                          , e = new d;
                        return e.append(a),
                        e.getBlob("application/zip")
                    } catch (b) {
                        throw new Error("Bug : can't construct the Blob.")
                    }
                }
            }
            ;
            var k = {};
            k.string = {
                string: d,
                array: function(a) {
                    return e(a, new Array(a.length))
                },
                arraybuffer: function(a) {
                    return k.string.uint8array(a).buffer
                },
                uint8array: function(a) {
                    return e(a, new Uint8Array(a.length))
                },
                nodebuffer: function(a) {
                    return e(a, j(a.length))
                }
            },
            k.array = {
                string: f,
                array: d,
                arraybuffer: function(a) {
                    return new Uint8Array(a).buffer
                },
                uint8array: function(a) {
                    return new Uint8Array(a)
                },
                nodebuffer: function(a) {
                    return j(a)
                }
            },
            k.arraybuffer = {
                string: function(a) {
                    return f(new Uint8Array(a))
                },
                array: function(a) {
                    return g(new Uint8Array(a), new Array(a.byteLength))
                },
                arraybuffer: d,
                uint8array: function(a) {
                    return new Uint8Array(a)
                },
                nodebuffer: function(a) {
                    return j(new Uint8Array(a))
                }
            },
            k.uint8array = {
                string: f,
                array: function(a) {
                    return g(a, new Array(a.length))
                },
                arraybuffer: function(a) {
                    return a.buffer
                },
                uint8array: d,
                nodebuffer: function(a) {
                    return j(a)
                }
            },
            k.nodebuffer = {
                string: f,
                array: function(a) {
                    return g(a, new Array(a.length))
                },
                arraybuffer: function(a) {
                    return k.nodebuffer.uint8array(a).buffer
                },
                uint8array: function(a) {
                    return g(a, new Uint8Array(a.length))
                },
                nodebuffer: d
            },
            c.transformTo = function(a, b) {
                if (b || (b = ""),
                !a)
                    return b;
                c.checkSupport(a);
                var d = c.getTypeOf(b)
                  , e = k[d][a](b);
                return e
            }
            ,
            c.getTypeOf = function(a) {
                return "string" == typeof a ? "string" : "[object Array]" === Object.prototype.toString.call(a) ? "array" : h.nodebuffer && j.test(a) ? "nodebuffer" : h.uint8array && a instanceof Uint8Array ? "uint8array" : h.arraybuffer && a instanceof ArrayBuffer ? "arraybuffer" : void 0
            }
            ,
            c.checkSupport = function(a) {
                var b = h[a.toLowerCase()];
                if (!b)
                    throw new Error(a + " is not supported by this browser")
            }
            ,
            c.MAX_VALUE_16BITS = 65535,
            c.MAX_VALUE_32BITS = -1,
            c.pretty = function(a) {
                var b, c, d = "";
                for (c = 0; c < (a || "").length; c++)
                    b = a.charCodeAt(c),
                    d += "\\x" + (16 > b ? "0" : "") + b.toString(16).toUpperCase();
                return d
            }
            ,
            c.findCompression = function(a) {
                for (var b in i)
                    if (i.hasOwnProperty(b) && i[b].magic === a)
                        return i[b];
                return null
            }
            ,
            c.isRegExp = function(a) {
                return "[object RegExp]" === Object.prototype.toString.call(a)
            }
        }
        , {
            "./compressions": 3,
            "./nodeBuffer": 17,
            "./support": 12
        }],
        15: [function(a, b) {
            "use strict";
            function c(a, b) {
                this.files = [],
                this.loadOptions = b,
                a && this.load(a)
            }
            var d = a("./stringReader")
              , e = a("./nodeBufferReader")
              , f = a("./uint8ArrayReader")
              , g = a("./utils")
              , h = a("./signature")
              , i = a("./zipEntry")
              , j = a("./support");
            c.prototype = {
                checkSignature: function(a) {
                    var b = this.reader.readString(4);
                    if (b !== a)
                        throw new Error("Corrupted zip or bug : unexpected signature (" + g.pretty(b) + ", expected " + g.pretty(a) + ")")
                },
                readBlockEndOfCentral: function() {
                    this.diskNumber = this.reader.readInt(2),
                    this.diskWithCentralDirStart = this.reader.readInt(2),
                    this.centralDirRecordsOnThisDisk = this.reader.readInt(2),
                    this.centralDirRecords = this.reader.readInt(2),
                    this.centralDirSize = this.reader.readInt(4),
                    this.centralDirOffset = this.reader.readInt(4),
                    this.zipCommentLength = this.reader.readInt(2),
                    this.zipComment = this.reader.readString(this.zipCommentLength)
                },
                readBlockZip64EndOfCentral: function() {
                    this.zip64EndOfCentralSize = this.reader.readInt(8),
                    this.versionMadeBy = this.reader.readString(2),
                    this.versionNeeded = this.reader.readInt(2),
                    this.diskNumber = this.reader.readInt(4),
                    this.diskWithCentralDirStart = this.reader.readInt(4),
                    this.centralDirRecordsOnThisDisk = this.reader.readInt(8),
                    this.centralDirRecords = this.reader.readInt(8),
                    this.centralDirSize = this.reader.readInt(8),
                    this.centralDirOffset = this.reader.readInt(8),
                    this.zip64ExtensibleData = {};
                    for (var a, b, c, d = this.zip64EndOfCentralSize - 44, e = 0; d > e; )
                        a = this.reader.readInt(2),
                        b = this.reader.readInt(4),
                        c = this.reader.readString(b),
                        this.zip64ExtensibleData[a] = {
                            id: a,
                            length: b,
                            value: c
                        }
                },
                readBlockZip64EndOfCentralLocator: function() {
                    if (this.diskWithZip64CentralDirStart = this.reader.readInt(4),
                    this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8),
                    this.disksCount = this.reader.readInt(4),
                    this.disksCount > 1)
                        throw new Error("Multi-volumes zip are not supported")
                },
                readLocalFiles: function() {
                    var a, b;
                    for (a = 0; a < this.files.length; a++)
                        b = this.files[a],
                        this.reader.setIndex(b.localHeaderOffset),
                        this.checkSignature(h.LOCAL_FILE_HEADER),
                        b.readLocalPart(this.reader),
                        b.handleUTF8()
                },
                readCentralDir: function() {
                    var a;
                    for (this.reader.setIndex(this.centralDirOffset); this.reader.readString(4) === h.CENTRAL_FILE_HEADER; )
                        a = new i({
                            zip64: this.zip64
                        },this.loadOptions),
                        a.readCentralPart(this.reader),
                        this.files.push(a)
                },
                readEndOfCentral: function() {
                    var a = this.reader.lastIndexOfSignature(h.CENTRAL_DIRECTORY_END);
                    if (-1 === a)
                        throw new Error("Corrupted zip : can't find end of central directory");
                    if (this.reader.setIndex(a),
                    this.checkSignature(h.CENTRAL_DIRECTORY_END),
                    this.readBlockEndOfCentral(),
                    this.diskNumber === g.MAX_VALUE_16BITS || this.diskWithCentralDirStart === g.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === g.MAX_VALUE_16BITS || this.centralDirRecords === g.MAX_VALUE_16BITS || this.centralDirSize === g.MAX_VALUE_32BITS || this.centralDirOffset === g.MAX_VALUE_32BITS) {
                        if (this.zip64 = !0,
                        a = this.reader.lastIndexOfSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),
                        -1 === a)
                            throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");
                        this.reader.setIndex(a),
                        this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),
                        this.readBlockZip64EndOfCentralLocator(),
                        this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),
                        this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_END),
                        this.readBlockZip64EndOfCentral()
                    }
                },
                prepareReader: function(a) {
                    var b = g.getTypeOf(a);
                    this.reader = "string" !== b || j.uint8array ? "nodebuffer" === b ? new e(a) : new f(g.transformTo("uint8array", a)) : new d(a,this.loadOptions.optimizedBinaryString)
                },
                load: function(a) {
                    this.prepareReader(a),
                    this.readEndOfCentral(),
                    this.readCentralDir(),
                    this.readLocalFiles()
                }
            },
            b.exports = c
        }
        , {
            "./nodeBufferReader": 17,
            "./signature": 10,
            "./stringReader": 11,
            "./support": 12,
            "./uint8ArrayReader": 13,
            "./utils": 14,
            "./zipEntry": 16
        }],
        16: [function(a, b) {
            "use strict";
            function c(a, b) {
                this.options = a,
                this.loadOptions = b
            }
            var d = a("./stringReader")
              , e = a("./utils")
              , f = a("./compressedObject")
              , g = a("./object");
            c.prototype = {
                isEncrypted: function() {
                    return 1 === (1 & this.bitFlag)
                },
                useUTF8: function() {
                    return 2048 === (2048 & this.bitFlag)
                },
                prepareCompressedContent: function(a, b, c) {
                    return function() {
                        var d = a.index;
                        a.setIndex(b);
                        var e = a.readData(c);
                        return a.setIndex(d),
                        e
                    }
                },
                prepareContent: function(a, b, c, d, f) {
                    return function() {
                        var a = e.transformTo(d.uncompressInputType, this.getCompressedContent())
                          , b = d.uncompress(a);
                        if (b.length !== f)
                            throw new Error("Bug : uncompressed data size mismatch");
                        return b
                    }
                },
                readLocalPart: function(a) {
                    var b, c;
                    if (a.skip(22),
                    this.fileNameLength = a.readInt(2),
                    c = a.readInt(2),
                    this.fileName = a.readString(this.fileNameLength),
                    a.skip(c),
                    -1 == this.compressedSize || -1 == this.uncompressedSize)
                        throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)");
                    if (b = e.findCompression(this.compressionMethod),
                    null === b)
                        throw new Error("Corrupted zip : compression " + e.pretty(this.compressionMethod) + " unknown (inner file : " + this.fileName + ")");
                    if (this.decompressed = new f,
                    this.decompressed.compressedSize = this.compressedSize,
                    this.decompressed.uncompressedSize = this.uncompressedSize,
                    this.decompressed.crc32 = this.crc32,
                    this.decompressed.compressionMethod = this.compressionMethod,
                    this.decompressed.getCompressedContent = this.prepareCompressedContent(a, a.index, this.compressedSize, b),
                    this.decompressed.getContent = this.prepareContent(a, a.index, this.compressedSize, b, this.uncompressedSize),
                    this.loadOptions.checkCRC32 && (this.decompressed = e.transformTo("string", this.decompressed.getContent()),
                    g.crc32(this.decompressed) !== this.crc32))
                        throw new Error("Corrupted zip : CRC32 mismatch")
                },
                readCentralPart: function(a) {
                    if (this.versionMadeBy = a.readString(2),
                    this.versionNeeded = a.readInt(2),
                    this.bitFlag = a.readInt(2),
                    this.compressionMethod = a.readString(2),
                    this.date = a.readDate(),
                    this.crc32 = a.readInt(4),
                    this.compressedSize = a.readInt(4),
                    this.uncompressedSize = a.readInt(4),
                    this.fileNameLength = a.readInt(2),
                    this.extraFieldsLength = a.readInt(2),
                    this.fileCommentLength = a.readInt(2),
                    this.diskNumberStart = a.readInt(2),
                    this.internalFileAttributes = a.readInt(2),
                    this.externalFileAttributes = a.readInt(4),
                    this.localHeaderOffset = a.readInt(4),
                    this.isEncrypted())
                        throw new Error("Encrypted zip are not supported");
                    this.fileName = a.readString(this.fileNameLength),
                    this.readExtraFields(a),
                    this.parseZIP64ExtraField(a),
                    this.fileComment = a.readString(this.fileCommentLength),
                    this.dir = 16 & this.externalFileAttributes ? !0 : !1
                },
                parseZIP64ExtraField: function() {
                    if (this.extraFields[1]) {
                        var a = new d(this.extraFields[1].value);
                        this.uncompressedSize === e.MAX_VALUE_32BITS && (this.uncompressedSize = a.readInt(8)),
                        this.compressedSize === e.MAX_VALUE_32BITS && (this.compressedSize = a.readInt(8)),
                        this.localHeaderOffset === e.MAX_VALUE_32BITS && (this.localHeaderOffset = a.readInt(8)),
                        this.diskNumberStart === e.MAX_VALUE_32BITS && (this.diskNumberStart = a.readInt(4))
                    }
                },
                readExtraFields: function(a) {
                    var b, c, d, e = a.index;
                    for (this.extraFields = this.extraFields || {}; a.index < e + this.extraFieldsLength; )
                        b = a.readInt(2),
                        c = a.readInt(2),
                        d = a.readString(c),
                        this.extraFields[b] = {
                            id: b,
                            length: c,
                            value: d
                        }
                },
                handleUTF8: function() {
                    if (this.useUTF8())
                        this.fileName = g.utf8decode(this.fileName),
                        this.fileComment = g.utf8decode(this.fileComment);
                    else {
                        var a = this.findExtraFieldUnicodePath();
                        null !== a && (this.fileName = a)
                    }
                },
                findExtraFieldUnicodePath: function() {
                    var a = this.extraFields[28789];
                    if (a) {
                        var b = new d(a.value);
                        return 1 !== b.readInt(1) ? null : g.crc32(this.fileName) !== b.readInt(4) ? null : g.utf8decode(b.readString(a.length - 5))
                    }
                    return null
                }
            },
            b.exports = c
        }
        , {
            "./compressedObject": 2,
            "./object": 9,
            "./stringReader": 11,
            "./utils": 14
        }],
        17: [function() {}
        , {}],
        18: [function(a, b) {
            var c = b.exports = {};
            c.nextTick = function() {
                var a = "undefined" != typeof window && window.setImmediate
                  , b = "undefined" != typeof window && window.postMessage && window.addEventListener;
                if (a)
                    return function(a) {
                        return window.setImmediate(a)
                    }
                    ;
                if (b) {
                    var c = [];
                    return window.addEventListener("message", function(a) {
                        var b = a.source;
                        if ((b === window || null === b) && "process-tick" === a.data && (a.stopPropagation(),
                        c.length > 0)) {
                            var d = c.shift();
                            d()
                        }
                    }, !0),
                    function(a) {
                        c.push(a),
                        window.postMessage("process-tick", "*")
                    }
                }
                return function(a) {
                    setTimeout(a, 0)
                }
            }(),
            c.title = "browser",
            c.browser = !0,
            c.env = {},
            c.argv = [],
            c.binding = function() {
                throw new Error("process.binding is not supported")
            }
            ,
            c.cwd = function() {
                return "/"
            }
            ,
            c.chdir = function() {
                throw new Error("process.chdir is not supported")
            }
        }
        , {}],
        19: [function() {
            /** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */
            (function() {
                "use strict";
                function a(a, b) {
                    var c = a.split(".")
                      , d = n;
                    !(c[0]in d) && d.execScript && d.execScript("var " + c[0]);
                    for (var e; c.length && (e = c.shift()); )
                        c.length || b === l ? d = d[e] ? d[e] : d[e] = {} : d[e] = b
                }
                function b(a, b) {
                    if (this.index = "number" == typeof b ? b : 0,
                    this.d = 0,
                    this.buffer = a instanceof (o ? Uint8Array : Array) ? a : new (o ? Uint8Array : Array)(32768),
                    2 * this.buffer.length <= this.index)
                        throw Error("invalid index");
                    this.buffer.length <= this.index && c(this)
                }
                function c(a) {
                    var b, c = a.buffer, d = c.length, e = new (o ? Uint8Array : Array)(d << 1);
                    if (o)
                        e.set(c);
                    else
                        for (b = 0; d > b; ++b)
                            e[b] = c[b];
                    return a.buffer = e
                }
                function d(a) {
                    this.buffer = new (o ? Uint16Array : Array)(2 * a),
                    this.length = 0
                }
                function e(a, b) {
                    this.e = w,
                    this.f = 0,
                    this.input = o && a instanceof Array ? new Uint8Array(a) : a,
                    this.c = 0,
                    b && (b.lazy && (this.f = b.lazy),
                    "number" == typeof b.compressionType && (this.e = b.compressionType),
                    b.outputBuffer && (this.b = o && b.outputBuffer instanceof Array ? new Uint8Array(b.outputBuffer) : b.outputBuffer),
                    "number" == typeof b.outputIndex && (this.c = b.outputIndex)),
                    this.b || (this.b = new (o ? Uint8Array : Array)(32768))
                }
                function f(a, b) {
                    this.length = a,
                    this.g = b
                }
                function g(a, b) {
                    function c(a, b) {
                        var c, d = a.g, e = [], f = 0;
                        c = z[a.length],
                        e[f++] = 65535 & c,
                        e[f++] = c >> 16 & 255,
                        e[f++] = c >> 24;
                        var g;
                        switch (m) {
                        case 1 === d:
                            g = [0, d - 1, 0];
                            break;
                        case 2 === d:
                            g = [1, d - 2, 0];
                            break;
                        case 3 === d:
                            g = [2, d - 3, 0];
                            break;
                        case 4 === d:
                            g = [3, d - 4, 0];
                            break;
                        case 6 >= d:
                            g = [4, d - 5, 1];
                            break;
                        case 8 >= d:
                            g = [5, d - 7, 1];
                            break;
                        case 12 >= d:
                            g = [6, d - 9, 2];
                            break;
                        case 16 >= d:
                            g = [7, d - 13, 2];
                            break;
                        case 24 >= d:
                            g = [8, d - 17, 3];
                            break;
                        case 32 >= d:
                            g = [9, d - 25, 3];
                            break;
                        case 48 >= d:
                            g = [10, d - 33, 4];
                            break;
                        case 64 >= d:
                            g = [11, d - 49, 4];
                            break;
                        case 96 >= d:
                            g = [12, d - 65, 5];
                            break;
                        case 128 >= d:
                            g = [13, d - 97, 5];
                            break;
                        case 192 >= d:
                            g = [14, d - 129, 6];
                            break;
                        case 256 >= d:
                            g = [15, d - 193, 6];
                            break;
                        case 384 >= d:
                            g = [16, d - 257, 7];
                            break;
                        case 512 >= d:
                            g = [17, d - 385, 7];
                            break;
                        case 768 >= d:
                            g = [18, d - 513, 8];
                            break;
                        case 1024 >= d:
                            g = [19, d - 769, 8];
                            break;
                        case 1536 >= d:
                            g = [20, d - 1025, 9];
                            break;
                        case 2048 >= d:
                            g = [21, d - 1537, 9];
                            break;
                        case 3072 >= d:
                            g = [22, d - 2049, 10];
                            break;
                        case 4096 >= d:
                            g = [23, d - 3073, 10];
                            break;
                        case 6144 >= d:
                            g = [24, d - 4097, 11];
                            break;
                        case 8192 >= d:
                            g = [25, d - 6145, 11];
                            break;
                        case 12288 >= d:
                            g = [26, d - 8193, 12];
                            break;
                        case 16384 >= d:
                            g = [27, d - 12289, 12];
                            break;
                        case 24576 >= d:
                            g = [28, d - 16385, 13];
                            break;
                        case 32768 >= d:
                            g = [29, d - 24577, 13];
                            break;
                        default:
                            throw "invalid distance"
                        }
                        c = g,
                        e[f++] = c[0],
                        e[f++] = c[1],
                        e[f++] = c[2];
                        var h, i;
                        for (h = 0,
                        i = e.length; i > h; ++h)
                            r[s++] = e[h];
                        u[e[0]]++,
                        v[e[3]]++,
                        t = a.length + b - 1,
                        n = null
                    }
                    var d, e, f, g, i, j, k, n, p, q = {}, r = o ? new Uint16Array(2 * b.length) : [], s = 0, t = 0, u = new (o ? Uint32Array : Array)(286), v = new (o ? Uint32Array : Array)(30), w = a.f;
                    if (!o) {
                        for (f = 0; 285 >= f; )
                            u[f++] = 0;
                        for (f = 0; 29 >= f; )
                            v[f++] = 0
                    }
                    for (u[256] = 1,
                    d = 0,
                    e = b.length; e > d; ++d) {
                        for (f = i = 0,
                        g = 3; g > f && d + f !== e; ++f)
                            i = i << 8 | b[d + f];
                        if (q[i] === l && (q[i] = []),
                        j = q[i],
                        !(0 < t--)) {
                            for (; 0 < j.length && 32768 < d - j[0]; )
                                j.shift();
                            if (d + 3 >= e) {
                                for (n && c(n, -1),
                                f = 0,
                                g = e - d; g > f; ++f)
                                    p = b[d + f],
                                    r[s++] = p,
                                    ++u[p];
                                break
                            }
                            0 < j.length ? (k = h(b, d, j),
                            n ? n.length < k.length ? (p = b[d - 1],
                            r[s++] = p,
                            ++u[p],
                            c(k, 0)) : c(n, -1) : k.length < w ? n = k : c(k, 0)) : n ? c(n, -1) : (p = b[d],
                            r[s++] = p,
                            ++u[p])
                        }
                        j.push(d)
                    }
                    return r[s++] = 256,
                    u[256]++,
                    a.j = u,
                    a.i = v,
                    o ? r.subarray(0, s) : r
                }
                function h(a, b, c) {
                    var d, e, g, h, i, j, k = 0, l = a.length;
                    h = 0,
                    j = c.length;
                    a: for (; j > h; h++) {
                        if (d = c[j - h - 1],
                        g = 3,
                        k > 3) {
                            for (i = k; i > 3; i--)
                                if (a[d + i - 1] !== a[b + i - 1])
                                    continue a;
                            g = k
                        }
                        for (; 258 > g && l > b + g && a[d + g] === a[b + g]; )
                            ++g;
                        if (g > k && (e = d,
                        k = g),
                        258 === g)
                            break
                    }
                    return new f(k,b - e)
                }
                function i(a, b) {
                    var c, e, f, g, h, i = a.length, k = new d(572), l = new (o ? Uint8Array : Array)(i);
                    if (!o)
                        for (g = 0; i > g; g++)
                            l[g] = 0;
                    for (g = 0; i > g; ++g)
                        0 < a[g] && k.push(g, a[g]);
                    if (c = Array(k.length / 2),
                    e = new (o ? Uint32Array : Array)(k.length / 2),
                    1 === c.length)
                        return l[k.pop().index] = 1,
                        l;
                    for (g = 0,
                    h = k.length / 2; h > g; ++g)
                        c[g] = k.pop(),
                        e[g] = c[g].value;
                    for (f = j(e, e.length, b),
                    g = 0,
                    h = c.length; h > g; ++g)
                        l[c[g].index] = f[g];
                    return l
                }
                function j(a, b, c) {
                    function d(a) {
                        var c = n[a][p[a]];
                        c === b ? (d(a + 1),
                        d(a + 1)) : --l[c],
                        ++p[a]
                    }
                    var e, f, g, h, i, j = new (o ? Uint16Array : Array)(c), k = new (o ? Uint8Array : Array)(c), l = new (o ? Uint8Array : Array)(b), m = Array(c), n = Array(c), p = Array(c), q = (1 << c) - b, r = 1 << c - 1;
                    for (j[c - 1] = b,
                    f = 0; c > f; ++f)
                        r > q ? k[f] = 0 : (k[f] = 1,
                        q -= r),
                        q <<= 1,
                        j[c - 2 - f] = (j[c - 1 - f] / 2 | 0) + b;
                    for (j[0] = k[0],
                    m[0] = Array(j[0]),
                    n[0] = Array(j[0]),
                    f = 1; c > f; ++f)
                        j[f] > 2 * j[f - 1] + k[f] && (j[f] = 2 * j[f - 1] + k[f]),
                        m[f] = Array(j[f]),
                        n[f] = Array(j[f]);
                    for (e = 0; b > e; ++e)
                        l[e] = c;
                    for (g = 0; g < j[c - 1]; ++g)
                        m[c - 1][g] = a[g],
                        n[c - 1][g] = g;
                    for (e = 0; c > e; ++e)
                        p[e] = 0;
                    for (1 === k[c - 1] && (--l[0],
                    ++p[c - 1]),
                    f = c - 2; f >= 0; --f) {
                        for (h = e = 0,
                        i = p[f + 1],
                        g = 0; g < j[f]; g++)
                            h = m[f + 1][i] + m[f + 1][i + 1],
                            h > a[e] ? (m[f][g] = h,
                            n[f][g] = b,
                            i += 2) : (m[f][g] = a[e],
                            n[f][g] = e,
                            ++e);
                        p[f] = 0,
                        1 === k[f] && d(f)
                    }
                    return l
                }
                function k(a) {
                    var b, c, d, e, f = new (o ? Uint16Array : Array)(a.length), g = [], h = [], i = 0;
                    for (b = 0,
                    c = a.length; c > b; b++)
                        g[a[b]] = (0 | g[a[b]]) + 1;
                    for (b = 1,
                    c = 16; c >= b; b++)
                        h[b] = i,
                        i += 0 | g[b],
                        i <<= 1;
                    for (b = 0,
                    c = a.length; c > b; b++)
                        for (i = h[a[b]],
                        h[a[b]] += 1,
                        d = f[b] = 0,
                        e = a[b]; e > d; d++)
                            f[b] = f[b] << 1 | 1 & i,
                            i >>>= 1;
                    return f
                }
                var l = void 0
                  , m = !0
                  , n = this
                  , o = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array && "undefined" != typeof DataView;
                b.prototype.a = function(a, b, d) {
                    var e, f = this.buffer, g = this.index, h = this.d, i = f[g];
                    if (d && b > 1 && (a = b > 8 ? (u[255 & a] << 24 | u[a >>> 8 & 255] << 16 | u[a >>> 16 & 255] << 8 | u[a >>> 24 & 255]) >> 32 - b : u[a] >> 8 - b),
                    8 > b + h)
                        i = i << b | a,
                        h += b;
                    else
                        for (e = 0; b > e; ++e)
                            i = i << 1 | a >> b - e - 1 & 1,
                            8 === ++h && (h = 0,
                            f[g++] = u[i],
                            i = 0,
                            g === f.length && (f = c(this)));
                    f[g] = i,
                    this.buffer = f,
                    this.d = h,
                    this.index = g
                }
                ,
                b.prototype.finish = function() {
                    var a, b = this.buffer, c = this.index;
                    return 0 < this.d && (b[c] <<= 8 - this.d,
                    b[c] = u[b[c]],
                    c++),
                    o ? a = b.subarray(0, c) : (b.length = c,
                    a = b),
                    a
                }
                ;
                var p, q = new (o ? Uint8Array : Array)(256);
                for (p = 0; 256 > p; ++p) {
                    for (var r = p, s = r, t = 7, r = r >>> 1; r; r >>>= 1)
                        s <<= 1,
                        s |= 1 & r,
                        --t;
                    q[p] = (s << t & 255) >>> 0
                }
                var u = q;
                d.prototype.getParent = function(a) {
                    return 2 * ((a - 2) / 4 | 0)
                }
                ,
                d.prototype.push = function(a, b) {
                    var c, d, e, f = this.buffer;
                    for (c = this.length,
                    f[this.length++] = b,
                    f[this.length++] = a; c > 0 && (d = this.getParent(c),
                    f[c] > f[d]); )
                        e = f[c],
                        f[c] = f[d],
                        f[d] = e,
                        e = f[c + 1],
                        f[c + 1] = f[d + 1],
                        f[d + 1] = e,
                        c = d;
                    return this.length
                }
                ,
                d.prototype.pop = function() {
                    var a, b, c, d, e, f = this.buffer;
                    for (b = f[0],
                    a = f[1],
                    this.length -= 2,
                    f[0] = f[this.length],
                    f[1] = f[this.length + 1],
                    e = 0; d = 2 * e + 2,
                    !(d >= this.length) && (d + 2 < this.length && f[d + 2] > f[d] && (d += 2),
                    f[d] > f[e]); )
                        c = f[e],
                        f[e] = f[d],
                        f[d] = c,
                        c = f[e + 1],
                        f[e + 1] = f[d + 1],
                        f[d + 1] = c,
                        e = d;
                    return {
                        index: a,
                        value: b,
                        length: this.length
                    }
                }
                ;
                var v, w = 2, x = [];
                for (v = 0; 288 > v; v++)
                    switch (m) {
                    case 143 >= v:
                        x.push([v + 48, 8]);
                        break;
                    case 255 >= v:
                        x.push([v - 144 + 400, 9]);
                        break;
                    case 279 >= v:
                        x.push([v - 256 + 0, 7]);
                        break;
                    case 287 >= v:
                        x.push([v - 280 + 192, 8]);
                        break;
                    default:
                        throw "invalid literal: " + v
                    }
                e.prototype.h = function() {
                    var a, c, d, e, f = this.input;
                    switch (this.e) {
                    case 0:
                        for (d = 0,
                        e = f.length; e > d; ) {
                            c = o ? f.subarray(d, d + 65535) : f.slice(d, d + 65535),
                            d += c.length;
                            var h = c
                              , j = d === e
                              , n = l
                              , p = l
                              , q = l
                              , r = l
                              , s = l
                              , t = this.b
                              , u = this.c;
                            if (o) {
                                for (t = new Uint8Array(this.b.buffer); t.length <= u + h.length + 5; )
                                    t = new Uint8Array(t.length << 1);
                                t.set(this.b)
                            }
                            if (n = j ? 1 : 0,
                            t[u++] = 0 | n,
                            p = h.length,
                            q = ~p + 65536 & 65535,
                            t[u++] = 255 & p,
                            t[u++] = p >>> 8 & 255,
                            t[u++] = 255 & q,
                            t[u++] = q >>> 8 & 255,
                            o)
                                t.set(h, u),
                                u += h.length,
                                t = t.subarray(0, u);
                            else {
                                for (r = 0,
                                s = h.length; s > r; ++r)
                                    t[u++] = h[r];
                                t.length = u
                            }
                            this.c = u,
                            this.b = t
                        }
                        break;
                    case 1:
                        var v = new b(o ? new Uint8Array(this.b.buffer) : this.b,this.c);
                        v.a(1, 1, m),
                        v.a(1, 2, m);
                        var y, z, A, B = g(this, f);
                        for (y = 0,
                        z = B.length; z > y; y++)
                            if (A = B[y],
                            b.prototype.a.apply(v, x[A]),
                            A > 256)
                                v.a(B[++y], B[++y], m),
                                v.a(B[++y], 5),
                                v.a(B[++y], B[++y], m);
                            else if (256 === A)
                                break;
                        this.b = v.finish(),
                        this.c = this.b.length;
                        break;
                    case w:
                        var C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R = new b(o ? new Uint8Array(this.b.buffer) : this.b,this.c), S = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], T = Array(19);
                        for (C = w,
                        R.a(1, 1, m),
                        R.a(C, 2, m),
                        D = g(this, f),
                        H = i(this.j, 15),
                        I = k(H),
                        J = i(this.i, 7),
                        K = k(J),
                        E = 286; E > 257 && 0 === H[E - 1]; E--)
                            ;
                        for (F = 30; F > 1 && 0 === J[F - 1]; F--)
                            ;
                        var U, V, W, X, Y, Z, $ = E, _ = F, ab = new (o ? Uint32Array : Array)($ + _), bb = new (o ? Uint32Array : Array)(316), cb = new (o ? Uint8Array : Array)(19);
                        for (U = V = 0; $ > U; U++)
                            ab[V++] = H[U];
                        for (U = 0; _ > U; U++)
                            ab[V++] = J[U];
                        if (!o)
                            for (U = 0,
                            X = cb.length; X > U; ++U)
                                cb[U] = 0;
                        for (U = Y = 0,
                        X = ab.length; X > U; U += V) {
                            for (V = 1; X > U + V && ab[U + V] === ab[U]; ++V)
                                ;
                            if (W = V,
                            0 === ab[U])
                                if (3 > W)
                                    for (; 0 < W--; )
                                        bb[Y++] = 0,
                                        cb[0]++;
                                else
                                    for (; W > 0; )
                                        Z = 138 > W ? W : 138,
                                        Z > W - 3 && W > Z && (Z = W - 3),
                                        10 >= Z ? (bb[Y++] = 17,
                                        bb[Y++] = Z - 3,
                                        cb[17]++) : (bb[Y++] = 18,
                                        bb[Y++] = Z - 11,
                                        cb[18]++),
                                        W -= Z;
                            else if (bb[Y++] = ab[U],
                            cb[ab[U]]++,
                            W--,
                            3 > W)
                                for (; 0 < W--; )
                                    bb[Y++] = ab[U],
                                    cb[ab[U]]++;
                            else
                                for (; W > 0; )
                                    Z = 6 > W ? W : 6,
                                    Z > W - 3 && W > Z && (Z = W - 3),
                                    bb[Y++] = 16,
                                    bb[Y++] = Z - 3,
                                    cb[16]++,
                                    W -= Z
                        }
                        for (a = o ? bb.subarray(0, Y) : bb.slice(0, Y),
                        L = i(cb, 7),
                        P = 0; 19 > P; P++)
                            T[P] = L[S[P]];
                        for (G = 19; G > 4 && 0 === T[G - 1]; G--)
                            ;
                        for (M = k(L),
                        R.a(E - 257, 5, m),
                        R.a(F - 1, 5, m),
                        R.a(G - 4, 4, m),
                        P = 0; G > P; P++)
                            R.a(T[P], 3, m);
                        for (P = 0,
                        Q = a.length; Q > P; P++)
                            if (N = a[P],
                            R.a(M[N], L[N], m),
                            N >= 16) {
                                switch (P++,
                                N) {
                                case 16:
                                    O = 2;
                                    break;
                                case 17:
                                    O = 3;
                                    break;
                                case 18:
                                    O = 7;
                                    break;
                                default:
                                    throw "invalid code: " + N
                                }
                                R.a(a[P], O, m)
                            }
                        var db, eb, fb, gb, hb, ib, jb, kb, lb = [I, H], mb = [K, J];
                        for (hb = lb[0],
                        ib = lb[1],
                        jb = mb[0],
                        kb = mb[1],
                        db = 0,
                        eb = D.length; eb > db; ++db)
                            if (fb = D[db],
                            R.a(hb[fb], ib[fb], m),
                            fb > 256)
                                R.a(D[++db], D[++db], m),
                                gb = D[++db],
                                R.a(jb[gb], kb[gb], m),
                                R.a(D[++db], D[++db], m);
                            else if (256 === fb)
                                break;
                        this.b = R.finish(),
                        this.c = this.b.length;
                        break;
                    default:
                        throw "invalid compression type"
                    }
                    return this.b
                }
                ;
                var y = function() {
                    function a(a) {
                        switch (m) {
                        case 3 === a:
                            return [257, a - 3, 0];
                        case 4 === a:
                            return [258, a - 4, 0];
                        case 5 === a:
                            return [259, a - 5, 0];
                        case 6 === a:
                            return [260, a - 6, 0];
                        case 7 === a:
                            return [261, a - 7, 0];
                        case 8 === a:
                            return [262, a - 8, 0];
                        case 9 === a:
                            return [263, a - 9, 0];
                        case 10 === a:
                            return [264, a - 10, 0];
                        case 12 >= a:
                            return [265, a - 11, 1];
                        case 14 >= a:
                            return [266, a - 13, 1];
                        case 16 >= a:
                            return [267, a - 15, 1];
                        case 18 >= a:
                            return [268, a - 17, 1];
                        case 22 >= a:
                            return [269, a - 19, 2];
                        case 26 >= a:
                            return [270, a - 23, 2];
                        case 30 >= a:
                            return [271, a - 27, 2];
                        case 34 >= a:
                            return [272, a - 31, 2];
                        case 42 >= a:
                            return [273, a - 35, 3];
                        case 50 >= a:
                            return [274, a - 43, 3];
                        case 58 >= a:
                            return [275, a - 51, 3];
                        case 66 >= a:
                            return [276, a - 59, 3];
                        case 82 >= a:
                            return [277, a - 67, 4];
                        case 98 >= a:
                            return [278, a - 83, 4];
                        case 114 >= a:
                            return [279, a - 99, 4];
                        case 130 >= a:
                            return [280, a - 115, 4];
                        case 162 >= a:
                            return [281, a - 131, 5];
                        case 194 >= a:
                            return [282, a - 163, 5];
                        case 226 >= a:
                            return [283, a - 195, 5];
                        case 257 >= a:
                            return [284, a - 227, 5];
                        case 258 === a:
                            return [285, a - 258, 0];
                        default:
                            throw "invalid length: " + a
                        }
                    }
                    var b, c, d = [];
                    for (b = 3; 258 >= b; b++)
                        c = a(b),
                        d[b] = c[2] << 24 | c[1] << 16 | c[0];
                    return d
                }()
                  , z = o ? new Uint32Array(y) : y;
                a("Zlib.RawDeflate", e),
                a("Zlib.RawDeflate.prototype.compress", e.prototype.h);
                var A, B, C, D, E = {
                    NONE: 0,
                    FIXED: 1,
                    DYNAMIC: w
                };
                if (Object.keys)
                    A = Object.keys(E);
                else
                    for (B in A = [],
                    C = 0,
                    E)
                        A[C++] = B;
                for (C = 0,
                D = A.length; D > C; ++C)
                    B = A[C],
                    a("Zlib.RawDeflate.CompressionType." + B, E[B])
            }
            ).call(this)
        }
        , {}],
        20: [function() {
            /** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */
            (function() {
                "use strict";
                function a(a, b) {
                    var c = a.split(".")
                      , d = g;
                    !(c[0]in d) && d.execScript && d.execScript("var " + c[0]);
                    for (var e; c.length && (e = c.shift()); )
                        c.length || void 0 === b ? d = d[e] ? d[e] : d[e] = {} : d[e] = b
                }
                function b(a) {
                    var b, c, d, e, f, g, i, j, k, l, m = a.length, n = 0, o = Number.POSITIVE_INFINITY;
                    for (j = 0; m > j; ++j)
                        a[j] > n && (n = a[j]),
                        a[j] < o && (o = a[j]);
                    for (b = 1 << n,
                    c = new (h ? Uint32Array : Array)(b),
                    d = 1,
                    e = 0,
                    f = 2; n >= d; ) {
                        for (j = 0; m > j; ++j)
                            if (a[j] === d) {
                                for (g = 0,
                                i = e,
                                k = 0; d > k; ++k)
                                    g = g << 1 | 1 & i,
                                    i >>= 1;
                                for (l = d << 16 | j,
                                k = g; b > k; k += f)
                                    c[k] = l;
                                ++e
                            }
                        ++d,
                        e <<= 1,
                        f <<= 1
                    }
                    return [c, n, o]
                }
                function c(a, b) {
                    switch (this.g = [],
                    this.h = 32768,
                    this.c = this.f = this.d = this.k = 0,
                    this.input = h ? new Uint8Array(a) : a,
                    this.l = !1,
                    this.i = j,
                    this.q = !1,
                    (b || !(b = {})) && (b.index && (this.d = b.index),
                    b.bufferSize && (this.h = b.bufferSize),
                    b.bufferType && (this.i = b.bufferType),
                    b.resize && (this.q = b.resize)),
                    this.i) {
                    case i:
                        this.a = 32768,
                        this.b = new (h ? Uint8Array : Array)(32768 + this.h + 258);
                        break;
                    case j:
                        this.a = 0,
                        this.b = new (h ? Uint8Array : Array)(this.h),
                        this.e = this.v,
                        this.m = this.s,
                        this.j = this.t;
                        break;
                    default:
                        throw Error("invalid inflate mode")
                    }
                }
                function d(a, b) {
                    for (var c, d = a.f, e = a.c, f = a.input, g = a.d, h = f.length; b > e; ) {
                        if (g >= h)
                            throw Error("input buffer is broken");
                        d |= f[g++] << e,
                        e += 8
                    }
                    return c = d & (1 << b) - 1,
                    a.f = d >>> b,
                    a.c = e - b,
                    a.d = g,
                    c
                }
                function e(a, b) {
                    for (var c, d, e = a.f, f = a.c, g = a.input, h = a.d, i = g.length, j = b[0], k = b[1]; k > f && !(h >= i); )
                        e |= g[h++] << f,
                        f += 8;
                    return c = j[e & (1 << k) - 1],
                    d = c >>> 16,
                    a.f = e >> d,
                    a.c = f - d,
                    a.d = h,
                    65535 & c
                }
                function f(a) {
                    function c(a, b, c) {
                        var f, g, h, i = this.p;
                        for (h = 0; a > h; )
                            switch (f = e(this, b)) {
                            case 16:
                                for (g = 3 + d(this, 2); g--; )
                                    c[h++] = i;
                                break;
                            case 17:
                                for (g = 3 + d(this, 3); g--; )
                                    c[h++] = 0;
                                i = 0;
                                break;
                            case 18:
                                for (g = 11 + d(this, 7); g--; )
                                    c[h++] = 0;
                                i = 0;
                                break;
                            default:
                                i = c[h++] = f
                            }
                        return this.p = i,
                        c
                    }
                    var f, g, i, j, k = d(a, 5) + 257, l = d(a, 5) + 1, m = d(a, 4) + 4, o = new (h ? Uint8Array : Array)(n.length);
                    for (j = 0; m > j; ++j)
                        o[n[j]] = d(a, 3);
                    if (!h)
                        for (j = m,
                        m = o.length; m > j; ++j)
                            o[n[j]] = 0;
                    f = b(o),
                    g = new (h ? Uint8Array : Array)(k),
                    i = new (h ? Uint8Array : Array)(l),
                    a.p = 0,
                    a.j(b(c.call(a, k, f, g)), b(c.call(a, l, f, i)))
                }
                var g = this
                  , h = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array && "undefined" != typeof DataView
                  , i = 0
                  , j = 1;
                c.prototype.u = function() {
                    for (; !this.l; ) {
                        var a = d(this, 3);
                        switch (1 & a && (this.l = !0),
                        a >>>= 1) {
                        case 0:
                            var b = this.input
                              , c = this.d
                              , e = this.b
                              , g = this.a
                              , k = b.length
                              , l = void 0
                              , m = void 0
                              , n = e.length
                              , o = void 0;
                            if (this.c = this.f = 0,
                            c + 1 >= k)
                                throw Error("invalid uncompressed block header: LEN");
                            if (l = b[c++] | b[c++] << 8,
                            c + 1 >= k)
                                throw Error("invalid uncompressed block header: NLEN");
                            if (m = b[c++] | b[c++] << 8,
                            l === ~m)
                                throw Error("invalid uncompressed block header: length verify");
                            if (c + l > b.length)
                                throw Error("input buffer is broken");
                            switch (this.i) {
                            case i:
                                for (; g + l > e.length; ) {
                                    if (o = n - g,
                                    l -= o,
                                    h)
                                        e.set(b.subarray(c, c + o), g),
                                        g += o,
                                        c += o;
                                    else
                                        for (; o--; )
                                            e[g++] = b[c++];
                                    this.a = g,
                                    e = this.e(),
                                    g = this.a
                                }
                                break;
                            case j:
                                for (; g + l > e.length; )
                                    e = this.e({
                                        o: 2
                                    });
                                break;
                            default:
                                throw Error("invalid inflate mode")
                            }
                            if (h)
                                e.set(b.subarray(c, c + l), g),
                                g += l,
                                c += l;
                            else
                                for (; l--; )
                                    e[g++] = b[c++];
                            this.d = c,
                            this.a = g,
                            this.b = e;
                            break;
                        case 1:
                            this.j(z, B);
                            break;
                        case 2:
                            f(this);
                            break;
                        default:
                            throw Error("unknown BTYPE: " + a)
                        }
                    }
                    return this.m()
                }
                ;
                var k, l, m = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], n = h ? new Uint16Array(m) : m, o = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 258, 258], p = h ? new Uint16Array(o) : o, q = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0], r = h ? new Uint8Array(q) : q, s = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], t = h ? new Uint16Array(s) : s, u = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], v = h ? new Uint8Array(u) : u, w = new (h ? Uint8Array : Array)(288);
                for (k = 0,
                l = w.length; l > k; ++k)
                    w[k] = 143 >= k ? 8 : 255 >= k ? 9 : 279 >= k ? 7 : 8;
                var x, y, z = b(w), A = new (h ? Uint8Array : Array)(30);
                for (x = 0,
                y = A.length; y > x; ++x)
                    A[x] = 5;
                var B = b(A);
                c.prototype.j = function(a, b) {
                    var c = this.b
                      , f = this.a;
                    this.n = a;
                    for (var g, h, i, j, k = c.length - 258; 256 !== (g = e(this, a)); )
                        if (256 > g)
                            f >= k && (this.a = f,
                            c = this.e(),
                            f = this.a),
                            c[f++] = g;
                        else
                            for (h = g - 257,
                            j = p[h],
                            0 < r[h] && (j += d(this, r[h])),
                            g = e(this, b),
                            i = t[g],
                            0 < v[g] && (i += d(this, v[g])),
                            f >= k && (this.a = f,
                            c = this.e(),
                            f = this.a); j--; )
                                c[f] = c[f++ - i];
                    for (; 8 <= this.c; )
                        this.c -= 8,
                        this.d--;
                    this.a = f
                }
                ,
                c.prototype.t = function(a, b) {
                    var c = this.b
                      , f = this.a;
                    this.n = a;
                    for (var g, h, i, j, k = c.length; 256 !== (g = e(this, a)); )
                        if (256 > g)
                            f >= k && (c = this.e(),
                            k = c.length),
                            c[f++] = g;
                        else
                            for (h = g - 257,
                            j = p[h],
                            0 < r[h] && (j += d(this, r[h])),
                            g = e(this, b),
                            i = t[g],
                            0 < v[g] && (i += d(this, v[g])),
                            f + j > k && (c = this.e(),
                            k = c.length); j--; )
                                c[f] = c[f++ - i];
                    for (; 8 <= this.c; )
                        this.c -= 8,
                        this.d--;
                    this.a = f
                }
                ,
                c.prototype.e = function() {
                    var a, b, c = new (h ? Uint8Array : Array)(this.a - 32768), d = this.a - 32768, e = this.b;
                    if (h)
                        c.set(e.subarray(32768, c.length));
                    else
                        for (a = 0,
                        b = c.length; b > a; ++a)
                            c[a] = e[a + 32768];
                    if (this.g.push(c),
                    this.k += c.length,
                    h)
                        e.set(e.subarray(d, d + 32768));
                    else
                        for (a = 0; 32768 > a; ++a)
                            e[a] = e[d + a];
                    return this.a = 32768,
                    e
                }
                ,
                c.prototype.v = function(a) {
                    var b, c, d, e, f = this.input.length / this.d + 1 | 0, g = this.input, i = this.b;
                    return a && ("number" == typeof a.o && (f = a.o),
                    "number" == typeof a.r && (f += a.r)),
                    2 > f ? (c = (g.length - this.d) / this.n[2],
                    e = 258 * (c / 2) | 0,
                    d = e < i.length ? i.length + e : i.length << 1) : d = i.length * f,
                    h ? (b = new Uint8Array(d),
                    b.set(i)) : b = i,
                    this.b = b
                }
                ,
                c.prototype.m = function() {
                    var a, b, c, d, e, f = 0, g = this.b, i = this.g, j = new (h ? Uint8Array : Array)(this.k + (this.a - 32768));
                    if (0 === i.length)
                        return h ? this.b.subarray(32768, this.a) : this.b.slice(32768, this.a);
                    for (b = 0,
                    c = i.length; c > b; ++b)
                        for (a = i[b],
                        d = 0,
                        e = a.length; e > d; ++d)
                            j[f++] = a[d];
                    for (b = 32768,
                    c = this.a; c > b; ++b)
                        j[f++] = g[b];
                    return this.g = [],
                    this.buffer = j
                }
                ,
                c.prototype.s = function() {
                    var a, b = this.a;
                    return h ? this.q ? (a = new Uint8Array(b),
                    a.set(this.b.subarray(0, b))) : a = this.b.subarray(0, b) : (this.b.length > b && (this.b.length = b),
                    a = this.b),
                    this.buffer = a
                }
                ,
                a("Zlib.RawInflate", c),
                a("Zlib.RawInflate.prototype.decompress", c.prototype.u);
                var C, D, E, F, G = {
                    ADAPTIVE: j,
                    BLOCK: i
                };
                if (Object.keys)
                    C = Object.keys(G);
                else
                    for (D in C = [],
                    E = 0,
                    G)
                        C[E++] = D;
                for (E = 0,
                F = C.length; F > E; ++E)
                    D = C[E],
                    a("Zlib.RawInflate.BufferType." + D, G[D])
            }
            ).call(this)
        }
        , {}]
    }, {}, [7])(7)
})
JSZip的更多相关文章
- 网页端压缩解压缩插件JSZIP库的使用
		
JSZIP这个库支持在网页端生成zip格式的文件, 官方网站是:http://stuk.github.io/jszip/ 官方网站的DEMO如下: <!DOCTYPE html> < ...
 - Egret  压缩与解压(jszip)
		
一 jszip是什么 二 为什么要用jszip 三 如果使用zip 一 jszip是什么 jszip 是一个 JavaScript 库,可直接在浏览器上创建 zip 压缩档. 二 为什么要用jszip ...
 - Node.js使用jszip实现打包zip压缩包
		
一.前言 最近有这样的一个需求,需要把两个同名的.mtl文件和.obj文件打包成一个同名的.zip压缩包.刚开始文件不多的时候,只有几个,或者十几个,甚至二三十个的时候,还能勉强接受手动修改,但是随着 ...
 - jszip 前端生成zip文件下载
		
[文档地址] export const ZipFileCreate = () => { Promise.all([ // 下面是引入依赖包 require('jszip'), import('f ...
 - 【咸鱼教程】JsZip压缩与解压教程
		
引擎版本3.0.6 教程目录一 为什么要用jszip二 如何使用jszip 2.1 下载jszip库 2.2 导入jszip库 2.3 加载和解压zip代码三 Demo源码下载 一 ...
 - jQuery.qrcode 生成二维码,并使用 jszip、FileSaver 下载 zip 压缩包至本地。
		
生成二维码 引用 jquery.qrcode.js :连接:https://files.cnblogs.com/files/kitty-blog/jquery.qrcode.js .https:// ...
 - Jszip的使用和打包下载图片
		
因为canvas总结到后面又想到了jszip的一些事情,那就索性也回去看看吧.试过,至少谷歌和火狐都是支持jszip的. 1. jszip的使用 官方文档说的很清楚了,而且也有读取zip文件.生成z ...
 - 【探索】利用 canvas 实现数据压缩
		
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
 - Zip 压缩和解压技术在 HTML5 中的应用
		
JSZip 是一款可以创建.读取.修改 .zip 文件的 javaScript 工具.在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这 ...
 
随机推荐
- JS&ASPDotNet_大文件上传问题
			
HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...
 - 如何快速优雅的解决:ORA-02290: 违反检查约束条件 异常问题
			
在向oracle保存数据时,控制台报错如下: 很明显是保存时,该表的设计不允许某个字段非空导致的,但由于该表的数量较多,采用断点的方式有太过麻烦, 这里笔者采用 oracle 的客户端连接工具orac ...
 - 企业级技术解决方案:hbase+es
			
1:需求: 解决海量数据的存储,并且能够实现海量数据的秒级查询 Hbase是典型的nosql,是一种构建在HDFS之上的分布式.面向列的存储系统,在需要的时候可以进行实时的大规模数据集的读写操作:但是 ...
 - SQL GROUP BY两个列
			
首先group by 的简单说明: group by 一般和聚合函数一起使用才有意义,比如 count sum avg等,使用group by的两个要素: (1) 出现在select后面的字段 要 ...
 - React-Native 之 GD (七)下拉刷新 及 上拉加载更多
			
1.下拉刷新 使用第三方插件 下载插件: $ npm install react-native-pull@latest --save 引入: import {PullList} from 'reac ...
 - p2p传输协议
			
老司机是如何飙车的——P2P传输协议 转载来自2017-03-27 15:23 点波蓝字关注变智者 秋明山上人行稀,常有车手较高低,如今车道依旧在,不见当年老司机.其实老司机们从未离去,只不过好的车手 ...
 - centOS 7 安装nginx服务
			
一.安装相关依赖 yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum insta ...
 - docker 命令汇总2
			
docker version [root@cu-tmp-201 ~]# docker version Client: Version: 18.09.6 API version: 1.39 Go ver ...
 - 龙珠MAD-视频列表(收集更新)
			
博主最喜欢的动漫实际上就是龙珠.因此也喜欢收集或创作一些龙珠视频. 一些是一个分享列表.喜欢可以转载或收藏哦.(不定时持续更新) http://test.migucloud.com/vi0/360/3 ...
 - idea中gradle的springboot的项目热部署
			
1:在build.gradle中添加热部署依赖(我gradle版本是5.5.1) // 添加 热部署依赖implementation 'org.springframework.boot:spring- ...