{"version":3,"file":"svga-web-forked.umd.cjs","sources":["../src/downloader.ts","../src/parser/version.ts","../node_modules/.pnpm/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js","../node_modules/.pnpm/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js","../node_modules/.pnpm/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js","../node_modules/.pnpm/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js","../node_modules/.pnpm/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js","../node_modules/.pnpm/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js","../node_modules/.pnpm/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/util/longbits.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/util/minimal.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/writer.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/writer_buffer.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/reader.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/reader_buffer.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/rpc/service.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/rpc.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/roots.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/src/index-minimal.js","../node_modules/.pnpm/protobufjs@7.3.2/node_modules/protobufjs/minimal.js","../src/proto/svga.js","../src/parser/frame-entity.ts","../src/parser/video-entity.ts","../src/parser/index.ts","../src/player/path/index.ts","../src/player/path/ellipse-path.ts","../src/player/path/rect-path.ts","../src/player/path/bezier-path.ts","../src/player/offscreen.canvas.render.ts","../src/player/renderer.ts","../src/player/noop.ts","../src/player/animator.ts","../src/player/index.ts","../src/db.ts"],"sourcesContent":["export default class Downloader {\n  request: XMLHttpRequest | null\n\n  constructor() {\n    this.request = null\n  }\n\n  get(svgaResourceLink: string): Promise<ArrayBuffer> {\n    if (!svgaResourceLink) {\n      throw new Error('download link undefined')\n    }\n\n    return new Promise((resolve, reject) => {\n      const request = new XMLHttpRequest()\n\n      request.open('GET', svgaResourceLink, true)\n      request.responseType = 'arraybuffer'\n      request.onloadend = () => {\n        if (\n          request.response &&\n          (request.status === 200 || request.status === 304)\n        ) {\n          resolve(request.response)\n        } else {\n          reject(request)\n        }\n      }\n      request.onerror = () => reject(request.response)\n      request.send()\n\n      this.request = request\n    })\n  }\n\n  cancel(): void {\n    this.request && this.request.abort()\n  }\n\n  destroy(): void {\n    this.request && this.request.abort()\n  }\n}\n","export enum Version {\n  VERSION_1 = 1,\n  VERSION_2 = 2,\n}\n\nexport function getVersion(dataHeader: Uint8Array): Version {\n  if (\n    dataHeader[0] == 80 &&\n    dataHeader[1] == 75 &&\n    dataHeader[2] == 3 &&\n    dataHeader[3] == 4\n  ) {\n    return Version.VERSION_1\n  } else {\n    return Version.VERSION_2\n  }\n}\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n    var params  = new Array(arguments.length - 1),\r\n        offset  = 0,\r\n        index   = 2,\r\n        pending = true;\r\n    while (index < arguments.length)\r\n        params[offset++] = arguments[index++];\r\n    return new Promise(function executor(resolve, reject) {\r\n        params[offset] = function callback(err/*, varargs */) {\r\n            if (pending) {\r\n                pending = false;\r\n                if (err)\r\n                    reject(err);\r\n                else {\r\n                    var params = new Array(arguments.length - 1),\r\n                        offset = 0;\r\n                    while (offset < params.length)\r\n                        params[offset++] = arguments[offset];\r\n                    resolve.apply(null, params);\r\n                }\r\n            }\r\n        };\r\n        try {\r\n            fn.apply(ctx || null, params);\r\n        } catch (err) {\r\n            if (pending) {\r\n                pending = false;\r\n                reject(err);\r\n            }\r\n        }\r\n    });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n    var p = string.length;\r\n    if (!p)\r\n        return 0;\r\n    var n = 0;\r\n    while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n        ++n;\r\n    return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n    var parts = null,\r\n        chunk = [];\r\n    var i = 0, // output index\r\n        j = 0, // goto index\r\n        t;     // temporary\r\n    while (start < end) {\r\n        var b = buffer[start++];\r\n        switch (j) {\r\n            case 0:\r\n                chunk[i++] = b64[b >> 2];\r\n                t = (b & 3) << 4;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                chunk[i++] = b64[t | b >> 4];\r\n                t = (b & 15) << 2;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                chunk[i++] = b64[t | b >> 6];\r\n                chunk[i++] = b64[b & 63];\r\n                j = 0;\r\n                break;\r\n        }\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (j) {\r\n        chunk[i++] = b64[t];\r\n        chunk[i++] = 61;\r\n        if (j === 1)\r\n            chunk[i++] = 61;\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n    var start = offset;\r\n    var j = 0, // goto index\r\n        t;     // temporary\r\n    for (var i = 0; i < string.length;) {\r\n        var c = string.charCodeAt(i++);\r\n        if (c === 61 && j > 1)\r\n            break;\r\n        if ((c = s64[c]) === undefined)\r\n            throw Error(invalidEncoding);\r\n        switch (j) {\r\n            case 0:\r\n                t = c;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n                t = c;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n                t = c;\r\n                j = 3;\r\n                break;\r\n            case 3:\r\n                buffer[offset++] = (t & 3) << 6 | c;\r\n                j = 0;\r\n                break;\r\n        }\r\n    }\r\n    if (j === 1)\r\n        throw Error(invalidEncoding);\r\n    return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n    return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n    /**\r\n     * Registered listeners.\r\n     * @type {Object.<string,*>}\r\n     * @private\r\n     */\r\n    this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n        fn  : fn,\r\n        ctx : ctx || this\r\n    });\r\n    return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n    if (evt === undefined)\r\n        this._listeners = {};\r\n    else {\r\n        if (fn === undefined)\r\n            this._listeners[evt] = [];\r\n        else {\r\n            var listeners = this._listeners[evt];\r\n            for (var i = 0; i < listeners.length;)\r\n                if (listeners[i].fn === fn)\r\n                    listeners.splice(i, 1);\r\n                else\r\n                    ++i;\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n    var listeners = this._listeners[evt];\r\n    if (listeners) {\r\n        var args = [],\r\n            i = 1;\r\n        for (; i < arguments.length;)\r\n            args.push(arguments[i++]);\r\n        for (i = 0; i < listeners.length;)\r\n            listeners[i].fn.apply(listeners[i++].ctx, args);\r\n    }\r\n    return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n    // float: typed array\r\n    if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n        var f32 = new Float32Array([ -0 ]),\r\n            f8b = new Uint8Array(f32.buffer),\r\n            le  = f8b[3] === 128;\r\n\r\n        function writeFloat_f32_cpy(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n        }\r\n\r\n        function writeFloat_f32_rev(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[3];\r\n            buf[pos + 1] = f8b[2];\r\n            buf[pos + 2] = f8b[1];\r\n            buf[pos + 3] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n        function readFloat_f32_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        function readFloat_f32_rev(buf, pos) {\r\n            f8b[3] = buf[pos    ];\r\n            f8b[2] = buf[pos + 1];\r\n            f8b[1] = buf[pos + 2];\r\n            f8b[0] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n    // float: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0)\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n            else if (isNaN(val))\r\n                writeUint(2143289344, buf, pos);\r\n            else if (val > 3.4028234663852886e+38) // +-Infinity\r\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n            else if (val < 1.1754943508222875e-38) // denormal\r\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n            else {\r\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n            }\r\n        }\r\n\r\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n        function readFloat_ieee754(readUint, buf, pos) {\r\n            var uint = readUint(buf, pos),\r\n                sign = (uint >> 31) * 2 + 1,\r\n                exponent = uint >>> 23 & 255,\r\n                mantissa = uint & 8388607;\r\n            return exponent === 255\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 1.401298464324817e-45 * mantissa\r\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n        }\r\n\r\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n    })();\r\n\r\n    // double: typed array\r\n    if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n        var f64 = new Float64Array([-0]),\r\n            f8b = new Uint8Array(f64.buffer),\r\n            le  = f8b[7] === 128;\r\n\r\n        function writeDouble_f64_cpy(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n            buf[pos + 4] = f8b[4];\r\n            buf[pos + 5] = f8b[5];\r\n            buf[pos + 6] = f8b[6];\r\n            buf[pos + 7] = f8b[7];\r\n        }\r\n\r\n        function writeDouble_f64_rev(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[7];\r\n            buf[pos + 1] = f8b[6];\r\n            buf[pos + 2] = f8b[5];\r\n            buf[pos + 3] = f8b[4];\r\n            buf[pos + 4] = f8b[3];\r\n            buf[pos + 5] = f8b[2];\r\n            buf[pos + 6] = f8b[1];\r\n            buf[pos + 7] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n        function readDouble_f64_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            f8b[4] = buf[pos + 4];\r\n            f8b[5] = buf[pos + 5];\r\n            f8b[6] = buf[pos + 6];\r\n            f8b[7] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        function readDouble_f64_rev(buf, pos) {\r\n            f8b[7] = buf[pos    ];\r\n            f8b[6] = buf[pos + 1];\r\n            f8b[5] = buf[pos + 2];\r\n            f8b[4] = buf[pos + 3];\r\n            f8b[3] = buf[pos + 4];\r\n            f8b[2] = buf[pos + 5];\r\n            f8b[1] = buf[pos + 6];\r\n            f8b[0] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n    // double: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n            } else if (isNaN(val)) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(2146959360, buf, pos + off1);\r\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n            } else {\r\n                var mantissa;\r\n                if (val < 2.2250738585072014e-308) { // denormal\r\n                    mantissa = val / 5e-324;\r\n                    writeUint(mantissa >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n                } else {\r\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n                    if (exponent === 1024)\r\n                        exponent = 1023;\r\n                    mantissa = val * Math.pow(2, -exponent);\r\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n                }\r\n            }\r\n        }\r\n\r\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n            var lo = readUint(buf, pos + off0),\r\n                hi = readUint(buf, pos + off1);\r\n            var sign = (hi >> 31) * 2 + 1,\r\n                exponent = hi >>> 20 & 2047,\r\n                mantissa = 4294967296 * (hi & 1048575) + lo;\r\n            return exponent === 2047\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 5e-324 * mantissa\r\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n        }\r\n\r\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n    })();\r\n\r\n    return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n    buf[pos    ] =  val        & 255;\r\n    buf[pos + 1] =  val >>> 8  & 255;\r\n    buf[pos + 2] =  val >>> 16 & 255;\r\n    buf[pos + 3] =  val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n    buf[pos    ] =  val >>> 24;\r\n    buf[pos + 1] =  val >>> 16 & 255;\r\n    buf[pos + 2] =  val >>> 8  & 255;\r\n    buf[pos + 3] =  val        & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n    return (buf[pos    ]\r\n          | buf[pos + 1] << 8\r\n          | buf[pos + 2] << 16\r\n          | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n    return (buf[pos    ] << 24\r\n          | buf[pos + 1] << 16\r\n          | buf[pos + 2] << 8\r\n          | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n    try {\r\n        var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n        if (mod && (mod.length || Object.keys(mod).length))\r\n            return mod;\r\n    } catch (e) {} // eslint-disable-line no-empty\r\n    return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n    var len = 0,\r\n        c = 0;\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c = string.charCodeAt(i);\r\n        if (c < 128)\r\n            len += 1;\r\n        else if (c < 2048)\r\n            len += 2;\r\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n            ++i;\r\n            len += 4;\r\n        } else\r\n            len += 3;\r\n    }\r\n    return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n    var len = end - start;\r\n    if (len < 1)\r\n        return \"\";\r\n    var parts = null,\r\n        chunk = [],\r\n        i = 0, // char offset\r\n        t;     // temporary\r\n    while (start < end) {\r\n        t = buffer[start++];\r\n        if (t < 128)\r\n            chunk[i++] = t;\r\n        else if (t > 191 && t < 224)\r\n            chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n        else if (t > 239 && t < 365) {\r\n            t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n            chunk[i++] = 0xD800 + (t >> 10);\r\n            chunk[i++] = 0xDC00 + (t & 1023);\r\n        } else\r\n            chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n    var start = offset,\r\n        c1, // character 1\r\n        c2; // character 2\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c1 = string.charCodeAt(i);\r\n        if (c1 < 128) {\r\n            buffer[offset++] = c1;\r\n        } else if (c1 < 2048) {\r\n            buffer[offset++] = c1 >> 6       | 192;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n            ++i;\r\n            buffer[offset++] = c1 >> 18      | 240;\r\n            buffer[offset++] = c1 >> 12 & 63 | 128;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else {\r\n            buffer[offset++] = c1 >> 12      | 224;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        }\r\n    }\r\n    return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n    var SIZE   = size || 8192;\r\n    var MAX    = SIZE >>> 1;\r\n    var slab   = null;\r\n    var offset = SIZE;\r\n    return function pool_alloc(size) {\r\n        if (size < 1 || size > MAX)\r\n            return alloc(size);\r\n        if (offset + size > SIZE) {\r\n            slab = alloc(SIZE);\r\n            offset = 0;\r\n        }\r\n        var buf = slice.call(slab, offset, offset += size);\r\n        if (offset & 7) // align to 32 bit\r\n            offset = (offset | 7) + 1;\r\n        return buf;\r\n    };\r\n}\r\n","\"use strict\";\r\nmodule.exports = LongBits;\r\n\r\nvar util = require(\"../util/minimal\");\r\n\r\n/**\r\n * Constructs new long bits.\r\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\r\n * @memberof util\r\n * @constructor\r\n * @param {number} lo Low 32 bits, unsigned\r\n * @param {number} hi High 32 bits, unsigned\r\n */\r\nfunction LongBits(lo, hi) {\r\n\r\n    // note that the casts below are theoretically unnecessary as of today, but older statically\r\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\r\n\r\n    /**\r\n     * Low bits.\r\n     * @type {number}\r\n     */\r\n    this.lo = lo >>> 0;\r\n\r\n    /**\r\n     * High bits.\r\n     * @type {number}\r\n     */\r\n    this.hi = hi >>> 0;\r\n}\r\n\r\n/**\r\n * Zero bits.\r\n * @memberof util.LongBits\r\n * @type {util.LongBits}\r\n */\r\nvar zero = LongBits.zero = new LongBits(0, 0);\r\n\r\nzero.toNumber = function() { return 0; };\r\nzero.zzEncode = zero.zzDecode = function() { return this; };\r\nzero.length = function() { return 1; };\r\n\r\n/**\r\n * Zero hash.\r\n * @memberof util.LongBits\r\n * @type {string}\r\n */\r\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\r\n\r\n/**\r\n * Constructs new long bits from the specified number.\r\n * @param {number} value Value\r\n * @returns {util.LongBits} Instance\r\n */\r\nLongBits.fromNumber = function fromNumber(value) {\r\n    if (value === 0)\r\n        return zero;\r\n    var sign = value < 0;\r\n    if (sign)\r\n        value = -value;\r\n    var lo = value >>> 0,\r\n        hi = (value - lo) / 4294967296 >>> 0;\r\n    if (sign) {\r\n        hi = ~hi >>> 0;\r\n        lo = ~lo >>> 0;\r\n        if (++lo > 4294967295) {\r\n            lo = 0;\r\n            if (++hi > 4294967295)\r\n                hi = 0;\r\n        }\r\n    }\r\n    return new LongBits(lo, hi);\r\n};\r\n\r\n/**\r\n * Constructs new long bits from a number, long or string.\r\n * @param {Long|number|string} value Value\r\n * @returns {util.LongBits} Instance\r\n */\r\nLongBits.from = function from(value) {\r\n    if (typeof value === \"number\")\r\n        return LongBits.fromNumber(value);\r\n    if (util.isString(value)) {\r\n        /* istanbul ignore else */\r\n        if (util.Long)\r\n            value = util.Long.fromString(value);\r\n        else\r\n            return LongBits.fromNumber(parseInt(value, 10));\r\n    }\r\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\r\n};\r\n\r\n/**\r\n * Converts this long bits to a possibly unsafe JavaScript number.\r\n * @param {boolean} [unsigned=false] Whether unsigned or not\r\n * @returns {number} Possibly unsafe number\r\n */\r\nLongBits.prototype.toNumber = function toNumber(unsigned) {\r\n    if (!unsigned && this.hi >>> 31) {\r\n        var lo = ~this.lo + 1 >>> 0,\r\n            hi = ~this.hi     >>> 0;\r\n        if (!lo)\r\n            hi = hi + 1 >>> 0;\r\n        return -(lo + hi * 4294967296);\r\n    }\r\n    return this.lo + this.hi * 4294967296;\r\n};\r\n\r\n/**\r\n * Converts this long bits to a long.\r\n * @param {boolean} [unsigned=false] Whether unsigned or not\r\n * @returns {Long} Long\r\n */\r\nLongBits.prototype.toLong = function toLong(unsigned) {\r\n    return util.Long\r\n        ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\r\n        /* istanbul ignore next */\r\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\r\n};\r\n\r\nvar charCodeAt = String.prototype.charCodeAt;\r\n\r\n/**\r\n * Constructs new long bits from the specified 8 characters long hash.\r\n * @param {string} hash Hash\r\n * @returns {util.LongBits} Bits\r\n */\r\nLongBits.fromHash = function fromHash(hash) {\r\n    if (hash === zeroHash)\r\n        return zero;\r\n    return new LongBits(\r\n        ( charCodeAt.call(hash, 0)\r\n        | charCodeAt.call(hash, 1) << 8\r\n        | charCodeAt.call(hash, 2) << 16\r\n        | charCodeAt.call(hash, 3) << 24) >>> 0\r\n    ,\r\n        ( charCodeAt.call(hash, 4)\r\n        | charCodeAt.call(hash, 5) << 8\r\n        | charCodeAt.call(hash, 6) << 16\r\n        | charCodeAt.call(hash, 7) << 24) >>> 0\r\n    );\r\n};\r\n\r\n/**\r\n * Converts this long bits to a 8 characters long hash.\r\n * @returns {string} Hash\r\n */\r\nLongBits.prototype.toHash = function toHash() {\r\n    return String.fromCharCode(\r\n        this.lo        & 255,\r\n        this.lo >>> 8  & 255,\r\n        this.lo >>> 16 & 255,\r\n        this.lo >>> 24      ,\r\n        this.hi        & 255,\r\n        this.hi >>> 8  & 255,\r\n        this.hi >>> 16 & 255,\r\n        this.hi >>> 24\r\n    );\r\n};\r\n\r\n/**\r\n * Zig-zag encodes this long bits.\r\n * @returns {util.LongBits} `this`\r\n */\r\nLongBits.prototype.zzEncode = function zzEncode() {\r\n    var mask =   this.hi >> 31;\r\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\r\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\r\n    return this;\r\n};\r\n\r\n/**\r\n * Zig-zag decodes this long bits.\r\n * @returns {util.LongBits} `this`\r\n */\r\nLongBits.prototype.zzDecode = function zzDecode() {\r\n    var mask = -(this.lo & 1);\r\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\r\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\r\n    return this;\r\n};\r\n\r\n/**\r\n * Calculates the length of this longbits when encoded as a varint.\r\n * @returns {number} Length\r\n */\r\nLongBits.prototype.length = function length() {\r\n    var part0 =  this.lo,\r\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\r\n        part2 =  this.hi >>> 24;\r\n    return part2 === 0\r\n         ? part1 === 0\r\n           ? part0 < 16384\r\n             ? part0 < 128 ? 1 : 2\r\n             : part0 < 2097152 ? 3 : 4\r\n           : part1 < 16384\r\n             ? part1 < 128 ? 5 : 6\r\n             : part1 < 2097152 ? 7 : 8\r\n         : part2 < 128 ? 9 : 10;\r\n};\r\n","\"use strict\";\r\nvar util = exports;\r\n\r\n// used to return a Promise where callback is omitted\r\nutil.asPromise = require(\"@protobufjs/aspromise\");\r\n\r\n// converts to / from base64 encoded strings\r\nutil.base64 = require(\"@protobufjs/base64\");\r\n\r\n// base class of rpc.Service\r\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\r\n\r\n// float handling accross browsers\r\nutil.float = require(\"@protobufjs/float\");\r\n\r\n// requires modules optionally and hides the call from bundlers\r\nutil.inquire = require(\"@protobufjs/inquire\");\r\n\r\n// converts to / from utf8 encoded strings\r\nutil.utf8 = require(\"@protobufjs/utf8\");\r\n\r\n// provides a node-like buffer pool in the browser\r\nutil.pool = require(\"@protobufjs/pool\");\r\n\r\n// utility to work with the low and high bits of a 64 bit value\r\nutil.LongBits = require(\"./longbits\");\r\n\r\n/**\r\n * Whether running within node or not.\r\n * @memberof util\r\n * @type {boolean}\r\n */\r\nutil.isNode = Boolean(typeof global !== \"undefined\"\r\n                   && global\r\n                   && global.process\r\n                   && global.process.versions\r\n                   && global.process.versions.node);\r\n\r\n/**\r\n * Global object reference.\r\n * @memberof util\r\n * @type {Object}\r\n */\r\nutil.global = util.isNode && global\r\n           || typeof window !== \"undefined\" && window\r\n           || typeof self   !== \"undefined\" && self\r\n           || this; // eslint-disable-line no-invalid-this\r\n\r\n/**\r\n * An immuable empty array.\r\n * @memberof util\r\n * @type {Array.<*>}\r\n * @const\r\n */\r\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\r\n\r\n/**\r\n * An immutable empty object.\r\n * @type {Object}\r\n * @const\r\n */\r\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\r\n\r\n/**\r\n * Tests if the specified value is an integer.\r\n * @function\r\n * @param {*} value Value to test\r\n * @returns {boolean} `true` if the value is an integer\r\n */\r\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\r\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\r\n};\r\n\r\n/**\r\n * Tests if the specified value is a string.\r\n * @param {*} value Value to test\r\n * @returns {boolean} `true` if the value is a string\r\n */\r\nutil.isString = function isString(value) {\r\n    return typeof value === \"string\" || value instanceof String;\r\n};\r\n\r\n/**\r\n * Tests if the specified value is a non-null object.\r\n * @param {*} value Value to test\r\n * @returns {boolean} `true` if the value is a non-null object\r\n */\r\nutil.isObject = function isObject(value) {\r\n    return value && typeof value === \"object\";\r\n};\r\n\r\n/**\r\n * Checks if a property on a message is considered to be present.\r\n * This is an alias of {@link util.isSet}.\r\n * @function\r\n * @param {Object} obj Plain object or message instance\r\n * @param {string} prop Property name\r\n * @returns {boolean} `true` if considered to be present, otherwise `false`\r\n */\r\nutil.isset =\r\n\r\n/**\r\n * Checks if a property on a message is considered to be present.\r\n * @param {Object} obj Plain object or message instance\r\n * @param {string} prop Property name\r\n * @returns {boolean} `true` if considered to be present, otherwise `false`\r\n */\r\nutil.isSet = function isSet(obj, prop) {\r\n    var value = obj[prop];\r\n    if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\r\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\r\n    return false;\r\n};\r\n\r\n/**\r\n * Any compatible Buffer instance.\r\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\r\n * @interface Buffer\r\n * @extends Uint8Array\r\n */\r\n\r\n/**\r\n * Node's Buffer class if available.\r\n * @type {Constructor<Buffer>}\r\n */\r\nutil.Buffer = (function() {\r\n    try {\r\n        var Buffer = util.inquire(\"buffer\").Buffer;\r\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons):\r\n        return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\r\n    } catch (e) {\r\n        /* istanbul ignore next */\r\n        return null;\r\n    }\r\n})();\r\n\r\n// Internal alias of or polyfull for Buffer.from.\r\nutil._Buffer_from = null;\r\n\r\n// Internal alias of or polyfill for Buffer.allocUnsafe.\r\nutil._Buffer_allocUnsafe = null;\r\n\r\n/**\r\n * Creates a new buffer of whatever type supported by the environment.\r\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\r\n * @returns {Uint8Array|Buffer} Buffer\r\n */\r\nutil.newBuffer = function newBuffer(sizeOrArray) {\r\n    /* istanbul ignore next */\r\n    return typeof sizeOrArray === \"number\"\r\n        ? util.Buffer\r\n            ? util._Buffer_allocUnsafe(sizeOrArray)\r\n            : new util.Array(sizeOrArray)\r\n        : util.Buffer\r\n            ? util._Buffer_from(sizeOrArray)\r\n            : typeof Uint8Array === \"undefined\"\r\n                ? sizeOrArray\r\n                : new Uint8Array(sizeOrArray);\r\n};\r\n\r\n/**\r\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\r\n * @type {Constructor<Uint8Array>}\r\n */\r\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\r\n\r\n/**\r\n * Any compatible Long instance.\r\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\r\n * @interface Long\r\n * @property {number} low Low bits\r\n * @property {number} high High bits\r\n * @property {boolean} unsigned Whether unsigned or not\r\n */\r\n\r\n/**\r\n * Long.js's Long class if available.\r\n * @type {Constructor<Long>}\r\n */\r\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\r\n         || /* istanbul ignore next */ util.global.Long\r\n         || util.inquire(\"long\");\r\n\r\n/**\r\n * Regular expression used to verify 2 bit (`bool`) map keys.\r\n * @type {RegExp}\r\n * @const\r\n */\r\nutil.key2Re = /^true|false|0|1$/;\r\n\r\n/**\r\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\r\n * @type {RegExp}\r\n * @const\r\n */\r\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\r\n\r\n/**\r\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\r\n * @type {RegExp}\r\n * @const\r\n */\r\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\r\n\r\n/**\r\n * Converts a number or long to an 8 characters long hash string.\r\n * @param {Long|number} value Value to convert\r\n * @returns {string} Hash\r\n */\r\nutil.longToHash = function longToHash(value) {\r\n    return value\r\n        ? util.LongBits.from(value).toHash()\r\n        : util.LongBits.zeroHash;\r\n};\r\n\r\n/**\r\n * Converts an 8 characters long hash string to a long or number.\r\n * @param {string} hash Hash\r\n * @param {boolean} [unsigned=false] Whether unsigned or not\r\n * @returns {Long|number} Original value\r\n */\r\nutil.longFromHash = function longFromHash(hash, unsigned) {\r\n    var bits = util.LongBits.fromHash(hash);\r\n    if (util.Long)\r\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\r\n    return bits.toNumber(Boolean(unsigned));\r\n};\r\n\r\n/**\r\n * Merges the properties of the source object into the destination object.\r\n * @memberof util\r\n * @param {Object.<string,*>} dst Destination object\r\n * @param {Object.<string,*>} src Source object\r\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\r\n * @returns {Object.<string,*>} Destination object\r\n */\r\nfunction merge(dst, src, ifNotSet) { // used by converters\r\n    for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\r\n        if (dst[keys[i]] === undefined || !ifNotSet)\r\n            dst[keys[i]] = src[keys[i]];\r\n    return dst;\r\n}\r\n\r\nutil.merge = merge;\r\n\r\n/**\r\n * Converts the first character of a string to lower case.\r\n * @param {string} str String to convert\r\n * @returns {string} Converted string\r\n */\r\nutil.lcFirst = function lcFirst(str) {\r\n    return str.charAt(0).toLowerCase() + str.substring(1);\r\n};\r\n\r\n/**\r\n * Creates a custom error constructor.\r\n * @memberof util\r\n * @param {string} name Error name\r\n * @returns {Constructor<Error>} Custom error constructor\r\n */\r\nfunction newError(name) {\r\n\r\n    function CustomError(message, properties) {\r\n\r\n        if (!(this instanceof CustomError))\r\n            return new CustomError(message, properties);\r\n\r\n        // Error.call(this, message);\r\n        // ^ just returns a new error instance because the ctor can be called as a function\r\n\r\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\r\n\r\n        /* istanbul ignore next */\r\n        if (Error.captureStackTrace) // node\r\n            Error.captureStackTrace(this, CustomError);\r\n        else\r\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\r\n\r\n        if (properties)\r\n            merge(this, properties);\r\n    }\r\n\r\n    CustomError.prototype = Object.create(Error.prototype, {\r\n        constructor: {\r\n            value: CustomError,\r\n            writable: true,\r\n            enumerable: false,\r\n            configurable: true,\r\n        },\r\n        name: {\r\n            get: function get() { return name; },\r\n            set: undefined,\r\n            enumerable: false,\r\n            // configurable: false would accurately preserve the behavior of\r\n            // the original, but I'm guessing that was not intentional.\r\n            // For an actual error subclass, this property would\r\n            // be configurable.\r\n            configurable: true,\r\n        },\r\n        toString: {\r\n            value: function value() { return this.name + \": \" + this.message; },\r\n            writable: true,\r\n            enumerable: false,\r\n            configurable: true,\r\n        },\r\n    });\r\n\r\n    return CustomError;\r\n}\r\n\r\nutil.newError = newError;\r\n\r\n/**\r\n * Constructs a new protocol error.\r\n * @classdesc Error subclass indicating a protocol specifc error.\r\n * @memberof util\r\n * @extends Error\r\n * @template T extends Message<T>\r\n * @constructor\r\n * @param {string} message Error message\r\n * @param {Object.<string,*>} [properties] Additional properties\r\n * @example\r\n * try {\r\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\r\n * } catch (e) {\r\n *     if (e instanceof ProtocolError && e.instance)\r\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\r\n * }\r\n */\r\nutil.ProtocolError = newError(\"ProtocolError\");\r\n\r\n/**\r\n * So far decoded message instance.\r\n * @name util.ProtocolError#instance\r\n * @type {Message<T>}\r\n */\r\n\r\n/**\r\n * A OneOf getter as returned by {@link util.oneOfGetter}.\r\n * @typedef OneOfGetter\r\n * @type {function}\r\n * @returns {string|undefined} Set field name, if any\r\n */\r\n\r\n/**\r\n * Builds a getter for a oneof's present field name.\r\n * @param {string[]} fieldNames Field names\r\n * @returns {OneOfGetter} Unbound getter\r\n */\r\nutil.oneOfGetter = function getOneOf(fieldNames) {\r\n    var fieldMap = {};\r\n    for (var i = 0; i < fieldNames.length; ++i)\r\n        fieldMap[fieldNames[i]] = 1;\r\n\r\n    /**\r\n     * @returns {string|undefined} Set field name, if any\r\n     * @this Object\r\n     * @ignore\r\n     */\r\n    return function() { // eslint-disable-line consistent-return\r\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\r\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\r\n                return keys[i];\r\n    };\r\n};\r\n\r\n/**\r\n * A OneOf setter as returned by {@link util.oneOfSetter}.\r\n * @typedef OneOfSetter\r\n * @type {function}\r\n * @param {string|undefined} value Field name\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Builds a setter for a oneof's present field name.\r\n * @param {string[]} fieldNames Field names\r\n * @returns {OneOfSetter} Unbound setter\r\n */\r\nutil.oneOfSetter = function setOneOf(fieldNames) {\r\n\r\n    /**\r\n     * @param {string} name Field name\r\n     * @returns {undefined}\r\n     * @this Object\r\n     * @ignore\r\n     */\r\n    return function(name) {\r\n        for (var i = 0; i < fieldNames.length; ++i)\r\n            if (fieldNames[i] !== name)\r\n                delete this[fieldNames[i]];\r\n    };\r\n};\r\n\r\n/**\r\n * Default conversion options used for {@link Message#toJSON} implementations.\r\n *\r\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\r\n *\r\n * - Longs become strings\r\n * - Enums become string keys\r\n * - Bytes become base64 encoded strings\r\n * - (Sub-)Messages become plain objects\r\n * - Maps become plain objects with all string keys\r\n * - Repeated fields become arrays\r\n * - NaN and Infinity for float and double fields become strings\r\n *\r\n * @type {IConversionOptions}\r\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\r\n */\r\nutil.toJSONOptions = {\r\n    longs: String,\r\n    enums: String,\r\n    bytes: String,\r\n    json: true\r\n};\r\n\r\n// Sets up buffer utility according to the environment (called in index-minimal)\r\nutil._configure = function() {\r\n    var Buffer = util.Buffer;\r\n    /* istanbul ignore if */\r\n    if (!Buffer) {\r\n        util._Buffer_from = util._Buffer_allocUnsafe = null;\r\n        return;\r\n    }\r\n    // because node 4.x buffers are incompatible & immutable\r\n    // see: https://github.com/dcodeIO/protobuf.js/pull/665\r\n    util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\r\n        /* istanbul ignore next */\r\n        function Buffer_from(value, encoding) {\r\n            return new Buffer(value, encoding);\r\n        };\r\n    util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\r\n        /* istanbul ignore next */\r\n        function Buffer_allocUnsafe(size) {\r\n            return new Buffer(size);\r\n        };\r\n};\r\n","\"use strict\";\r\nmodule.exports = Writer;\r\n\r\nvar util      = require(\"./util/minimal\");\r\n\r\nvar BufferWriter; // cyclic\r\n\r\nvar LongBits  = util.LongBits,\r\n    base64    = util.base64,\r\n    utf8      = util.utf8;\r\n\r\n/**\r\n * Constructs a new writer operation instance.\r\n * @classdesc Scheduled writer operation.\r\n * @constructor\r\n * @param {function(*, Uint8Array, number)} fn Function to call\r\n * @param {number} len Value byte length\r\n * @param {*} val Value to write\r\n * @ignore\r\n */\r\nfunction Op(fn, len, val) {\r\n\r\n    /**\r\n     * Function to call.\r\n     * @type {function(Uint8Array, number, *)}\r\n     */\r\n    this.fn = fn;\r\n\r\n    /**\r\n     * Value byte length.\r\n     * @type {number}\r\n     */\r\n    this.len = len;\r\n\r\n    /**\r\n     * Next operation.\r\n     * @type {Writer.Op|undefined}\r\n     */\r\n    this.next = undefined;\r\n\r\n    /**\r\n     * Value to write.\r\n     * @type {*}\r\n     */\r\n    this.val = val; // type varies\r\n}\r\n\r\n/* istanbul ignore next */\r\nfunction noop() {} // eslint-disable-line no-empty-function\r\n\r\n/**\r\n * Constructs a new writer state instance.\r\n * @classdesc Copied writer state.\r\n * @memberof Writer\r\n * @constructor\r\n * @param {Writer} writer Writer to copy state from\r\n * @ignore\r\n */\r\nfunction State(writer) {\r\n\r\n    /**\r\n     * Current head.\r\n     * @type {Writer.Op}\r\n     */\r\n    this.head = writer.head;\r\n\r\n    /**\r\n     * Current tail.\r\n     * @type {Writer.Op}\r\n     */\r\n    this.tail = writer.tail;\r\n\r\n    /**\r\n     * Current buffer length.\r\n     * @type {number}\r\n     */\r\n    this.len = writer.len;\r\n\r\n    /**\r\n     * Next state.\r\n     * @type {State|null}\r\n     */\r\n    this.next = writer.states;\r\n}\r\n\r\n/**\r\n * Constructs a new writer instance.\r\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\r\n * @constructor\r\n */\r\nfunction Writer() {\r\n\r\n    /**\r\n     * Current length.\r\n     * @type {number}\r\n     */\r\n    this.len = 0;\r\n\r\n    /**\r\n     * Operations head.\r\n     * @type {Object}\r\n     */\r\n    this.head = new Op(noop, 0, 0);\r\n\r\n    /**\r\n     * Operations tail\r\n     * @type {Object}\r\n     */\r\n    this.tail = this.head;\r\n\r\n    /**\r\n     * Linked forked states.\r\n     * @type {Object|null}\r\n     */\r\n    this.states = null;\r\n\r\n    // When a value is written, the writer calculates its byte length and puts it into a linked\r\n    // list of operations to perform when finish() is called. This both allows us to allocate\r\n    // buffers of the exact required size and reduces the amount of work we have to do compared\r\n    // to first calculating over objects and then encoding over objects. In our case, the encoding\r\n    // part is just a linked list walk calling operations with already prepared values.\r\n}\r\n\r\nvar create = function create() {\r\n    return util.Buffer\r\n        ? function create_buffer_setup() {\r\n            return (Writer.create = function create_buffer() {\r\n                return new BufferWriter();\r\n            })();\r\n        }\r\n        /* istanbul ignore next */\r\n        : function create_array() {\r\n            return new Writer();\r\n        };\r\n};\r\n\r\n/**\r\n * Creates a new writer.\r\n * @function\r\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\r\n */\r\nWriter.create = create();\r\n\r\n/**\r\n * Allocates a buffer of the specified size.\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\nWriter.alloc = function alloc(size) {\r\n    return new util.Array(size);\r\n};\r\n\r\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\r\n/* istanbul ignore else */\r\nif (util.Array !== Array)\r\n    Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\r\n\r\n/**\r\n * Pushes a new operation to the queue.\r\n * @param {function(Uint8Array, number, *)} fn Function to call\r\n * @param {number} len Value byte length\r\n * @param {number} val Value to write\r\n * @returns {Writer} `this`\r\n * @private\r\n */\r\nWriter.prototype._push = function push(fn, len, val) {\r\n    this.tail = this.tail.next = new Op(fn, len, val);\r\n    this.len += len;\r\n    return this;\r\n};\r\n\r\nfunction writeByte(val, buf, pos) {\r\n    buf[pos] = val & 255;\r\n}\r\n\r\nfunction writeVarint32(val, buf, pos) {\r\n    while (val > 127) {\r\n        buf[pos++] = val & 127 | 128;\r\n        val >>>= 7;\r\n    }\r\n    buf[pos] = val;\r\n}\r\n\r\n/**\r\n * Constructs a new varint writer operation instance.\r\n * @classdesc Scheduled varint writer operation.\r\n * @extends Op\r\n * @constructor\r\n * @param {number} len Value byte length\r\n * @param {number} val Value to write\r\n * @ignore\r\n */\r\nfunction VarintOp(len, val) {\r\n    this.len = len;\r\n    this.next = undefined;\r\n    this.val = val;\r\n}\r\n\r\nVarintOp.prototype = Object.create(Op.prototype);\r\nVarintOp.prototype.fn = writeVarint32;\r\n\r\n/**\r\n * Writes an unsigned 32 bit value as a varint.\r\n * @param {number} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.uint32 = function write_uint32(value) {\r\n    // here, the call to this.push has been inlined and a varint specific Op subclass is used.\r\n    // uint32 is by far the most frequently used operation and benefits significantly from this.\r\n    this.len += (this.tail = this.tail.next = new VarintOp(\r\n        (value = value >>> 0)\r\n                < 128       ? 1\r\n        : value < 16384     ? 2\r\n        : value < 2097152   ? 3\r\n        : value < 268435456 ? 4\r\n        :                     5,\r\n    value)).len;\r\n    return this;\r\n};\r\n\r\n/**\r\n * Writes a signed 32 bit value as a varint.\r\n * @function\r\n * @param {number} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.int32 = function write_int32(value) {\r\n    return value < 0\r\n        ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\r\n        : this.uint32(value);\r\n};\r\n\r\n/**\r\n * Writes a 32 bit value as a varint, zig-zag encoded.\r\n * @param {number} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.sint32 = function write_sint32(value) {\r\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\r\n};\r\n\r\nfunction writeVarint64(val, buf, pos) {\r\n    while (val.hi) {\r\n        buf[pos++] = val.lo & 127 | 128;\r\n        val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\r\n        val.hi >>>= 7;\r\n    }\r\n    while (val.lo > 127) {\r\n        buf[pos++] = val.lo & 127 | 128;\r\n        val.lo = val.lo >>> 7;\r\n    }\r\n    buf[pos++] = val.lo;\r\n}\r\n\r\n/**\r\n * Writes an unsigned 64 bit value as a varint.\r\n * @param {Long|number|string} value Value to write\r\n * @returns {Writer} `this`\r\n * @throws {TypeError} If `value` is a string and no long library is present.\r\n */\r\nWriter.prototype.uint64 = function write_uint64(value) {\r\n    var bits = LongBits.from(value);\r\n    return this._push(writeVarint64, bits.length(), bits);\r\n};\r\n\r\n/**\r\n * Writes a signed 64 bit value as a varint.\r\n * @function\r\n * @param {Long|number|string} value Value to write\r\n * @returns {Writer} `this`\r\n * @throws {TypeError} If `value` is a string and no long library is present.\r\n */\r\nWriter.prototype.int64 = Writer.prototype.uint64;\r\n\r\n/**\r\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\r\n * @param {Long|number|string} value Value to write\r\n * @returns {Writer} `this`\r\n * @throws {TypeError} If `value` is a string and no long library is present.\r\n */\r\nWriter.prototype.sint64 = function write_sint64(value) {\r\n    var bits = LongBits.from(value).zzEncode();\r\n    return this._push(writeVarint64, bits.length(), bits);\r\n};\r\n\r\n/**\r\n * Writes a boolish value as a varint.\r\n * @param {boolean} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.bool = function write_bool(value) {\r\n    return this._push(writeByte, 1, value ? 1 : 0);\r\n};\r\n\r\nfunction writeFixed32(val, buf, pos) {\r\n    buf[pos    ] =  val         & 255;\r\n    buf[pos + 1] =  val >>> 8   & 255;\r\n    buf[pos + 2] =  val >>> 16  & 255;\r\n    buf[pos + 3] =  val >>> 24;\r\n}\r\n\r\n/**\r\n * Writes an unsigned 32 bit value as fixed 32 bits.\r\n * @param {number} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.fixed32 = function write_fixed32(value) {\r\n    return this._push(writeFixed32, 4, value >>> 0);\r\n};\r\n\r\n/**\r\n * Writes a signed 32 bit value as fixed 32 bits.\r\n * @function\r\n * @param {number} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\r\n\r\n/**\r\n * Writes an unsigned 64 bit value as fixed 64 bits.\r\n * @param {Long|number|string} value Value to write\r\n * @returns {Writer} `this`\r\n * @throws {TypeError} If `value` is a string and no long library is present.\r\n */\r\nWriter.prototype.fixed64 = function write_fixed64(value) {\r\n    var bits = LongBits.from(value);\r\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\r\n};\r\n\r\n/**\r\n * Writes a signed 64 bit value as fixed 64 bits.\r\n * @function\r\n * @param {Long|number|string} value Value to write\r\n * @returns {Writer} `this`\r\n * @throws {TypeError} If `value` is a string and no long library is present.\r\n */\r\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\r\n\r\n/**\r\n * Writes a float (32 bit).\r\n * @function\r\n * @param {number} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.float = function write_float(value) {\r\n    return this._push(util.float.writeFloatLE, 4, value);\r\n};\r\n\r\n/**\r\n * Writes a double (64 bit float).\r\n * @function\r\n * @param {number} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.double = function write_double(value) {\r\n    return this._push(util.float.writeDoubleLE, 8, value);\r\n};\r\n\r\nvar writeBytes = util.Array.prototype.set\r\n    ? function writeBytes_set(val, buf, pos) {\r\n        buf.set(val, pos); // also works for plain array values\r\n    }\r\n    /* istanbul ignore next */\r\n    : function writeBytes_for(val, buf, pos) {\r\n        for (var i = 0; i < val.length; ++i)\r\n            buf[pos + i] = val[i];\r\n    };\r\n\r\n/**\r\n * Writes a sequence of bytes.\r\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.bytes = function write_bytes(value) {\r\n    var len = value.length >>> 0;\r\n    if (!len)\r\n        return this._push(writeByte, 1, 0);\r\n    if (util.isString(value)) {\r\n        var buf = Writer.alloc(len = base64.length(value));\r\n        base64.decode(value, buf, 0);\r\n        value = buf;\r\n    }\r\n    return this.uint32(len)._push(writeBytes, len, value);\r\n};\r\n\r\n/**\r\n * Writes a string.\r\n * @param {string} value Value to write\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.string = function write_string(value) {\r\n    var len = utf8.length(value);\r\n    return len\r\n        ? this.uint32(len)._push(utf8.write, len, value)\r\n        : this._push(writeByte, 1, 0);\r\n};\r\n\r\n/**\r\n * Forks this writer's state by pushing it to a stack.\r\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.fork = function fork() {\r\n    this.states = new State(this);\r\n    this.head = this.tail = new Op(noop, 0, 0);\r\n    this.len = 0;\r\n    return this;\r\n};\r\n\r\n/**\r\n * Resets this instance to the last state.\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.reset = function reset() {\r\n    if (this.states) {\r\n        this.head   = this.states.head;\r\n        this.tail   = this.states.tail;\r\n        this.len    = this.states.len;\r\n        this.states = this.states.next;\r\n    } else {\r\n        this.head = this.tail = new Op(noop, 0, 0);\r\n        this.len  = 0;\r\n    }\r\n    return this;\r\n};\r\n\r\n/**\r\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\r\n * @returns {Writer} `this`\r\n */\r\nWriter.prototype.ldelim = function ldelim() {\r\n    var head = this.head,\r\n        tail = this.tail,\r\n        len  = this.len;\r\n    this.reset().uint32(len);\r\n    if (len) {\r\n        this.tail.next = head.next; // skip noop\r\n        this.tail = tail;\r\n        this.len += len;\r\n    }\r\n    return this;\r\n};\r\n\r\n/**\r\n * Finishes the write operation.\r\n * @returns {Uint8Array} Finished buffer\r\n */\r\nWriter.prototype.finish = function finish() {\r\n    var head = this.head.next, // skip noop\r\n        buf  = this.constructor.alloc(this.len),\r\n        pos  = 0;\r\n    while (head) {\r\n        head.fn(head.val, buf, pos);\r\n        pos += head.len;\r\n        head = head.next;\r\n    }\r\n    // this.head = this.tail = null;\r\n    return buf;\r\n};\r\n\r\nWriter._configure = function(BufferWriter_) {\r\n    BufferWriter = BufferWriter_;\r\n    Writer.create = create();\r\n    BufferWriter._configure();\r\n};\r\n","\"use strict\";\r\nmodule.exports = BufferWriter;\r\n\r\n// extends Writer\r\nvar Writer = require(\"./writer\");\r\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\r\n\r\nvar util = require(\"./util/minimal\");\r\n\r\n/**\r\n * Constructs a new buffer writer instance.\r\n * @classdesc Wire format writer using node buffers.\r\n * @extends Writer\r\n * @constructor\r\n */\r\nfunction BufferWriter() {\r\n    Writer.call(this);\r\n}\r\n\r\nBufferWriter._configure = function () {\r\n    /**\r\n     * Allocates a buffer of the specified size.\r\n     * @function\r\n     * @param {number} size Buffer size\r\n     * @returns {Buffer} Buffer\r\n     */\r\n    BufferWriter.alloc = util._Buffer_allocUnsafe;\r\n\r\n    BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\r\n        ? function writeBytesBuffer_set(val, buf, pos) {\r\n          buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\r\n          // also works for plain array values\r\n        }\r\n        /* istanbul ignore next */\r\n        : function writeBytesBuffer_copy(val, buf, pos) {\r\n          if (val.copy) // Buffer values\r\n            val.copy(buf, pos, 0, val.length);\r\n          else for (var i = 0; i < val.length;) // plain array values\r\n            buf[pos++] = val[i++];\r\n        };\r\n};\r\n\r\n\r\n/**\r\n * @override\r\n */\r\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\r\n    if (util.isString(value))\r\n        value = util._Buffer_from(value, \"base64\");\r\n    var len = value.length >>> 0;\r\n    this.uint32(len);\r\n    if (len)\r\n        this._push(BufferWriter.writeBytesBuffer, len, value);\r\n    return this;\r\n};\r\n\r\nfunction writeStringBuffer(val, buf, pos) {\r\n    if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\r\n        util.utf8.write(val, buf, pos);\r\n    else if (buf.utf8Write)\r\n        buf.utf8Write(val, pos);\r\n    else\r\n        buf.write(val, pos);\r\n}\r\n\r\n/**\r\n * @override\r\n */\r\nBufferWriter.prototype.string = function write_string_buffer(value) {\r\n    var len = util.Buffer.byteLength(value);\r\n    this.uint32(len);\r\n    if (len)\r\n        this._push(writeStringBuffer, len, value);\r\n    return this;\r\n};\r\n\r\n\r\n/**\r\n * Finishes the write operation.\r\n * @name BufferWriter#finish\r\n * @function\r\n * @returns {Buffer} Finished buffer\r\n */\r\n\r\nBufferWriter._configure();\r\n","\"use strict\";\r\nmodule.exports = Reader;\r\n\r\nvar util      = require(\"./util/minimal\");\r\n\r\nvar BufferReader; // cyclic\r\n\r\nvar LongBits  = util.LongBits,\r\n    utf8      = util.utf8;\r\n\r\n/* istanbul ignore next */\r\nfunction indexOutOfRange(reader, writeLength) {\r\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\r\n}\r\n\r\n/**\r\n * Constructs a new reader instance using the specified buffer.\r\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\r\n * @constructor\r\n * @param {Uint8Array} buffer Buffer to read from\r\n */\r\nfunction Reader(buffer) {\r\n\r\n    /**\r\n     * Read buffer.\r\n     * @type {Uint8Array}\r\n     */\r\n    this.buf = buffer;\r\n\r\n    /**\r\n     * Read buffer position.\r\n     * @type {number}\r\n     */\r\n    this.pos = 0;\r\n\r\n    /**\r\n     * Read buffer length.\r\n     * @type {number}\r\n     */\r\n    this.len = buffer.length;\r\n}\r\n\r\nvar create_array = typeof Uint8Array !== \"undefined\"\r\n    ? function create_typed_array(buffer) {\r\n        if (buffer instanceof Uint8Array || Array.isArray(buffer))\r\n            return new Reader(buffer);\r\n        throw Error(\"illegal buffer\");\r\n    }\r\n    /* istanbul ignore next */\r\n    : function create_array(buffer) {\r\n        if (Array.isArray(buffer))\r\n            return new Reader(buffer);\r\n        throw Error(\"illegal buffer\");\r\n    };\r\n\r\nvar create = function create() {\r\n    return util.Buffer\r\n        ? function create_buffer_setup(buffer) {\r\n            return (Reader.create = function create_buffer(buffer) {\r\n                return util.Buffer.isBuffer(buffer)\r\n                    ? new BufferReader(buffer)\r\n                    /* istanbul ignore next */\r\n                    : create_array(buffer);\r\n            })(buffer);\r\n        }\r\n        /* istanbul ignore next */\r\n        : create_array;\r\n};\r\n\r\n/**\r\n * Creates a new reader using the specified buffer.\r\n * @function\r\n * @param {Uint8Array|Buffer} buffer Buffer to read from\r\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\r\n * @throws {Error} If `buffer` is not a valid buffer\r\n */\r\nReader.create = create();\r\n\r\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\r\n\r\n/**\r\n * Reads a varint as an unsigned 32 bit value.\r\n * @function\r\n * @returns {number} Value read\r\n */\r\nReader.prototype.uint32 = (function read_uint32_setup() {\r\n    var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\r\n    return function read_uint32() {\r\n        value = (         this.buf[this.pos] & 127       ) >>> 0; if (this.buf[this.pos++] < 128) return value;\r\n        value = (value | (this.buf[this.pos] & 127) <<  7) >>> 0; if (this.buf[this.pos++] < 128) return value;\r\n        value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\r\n        value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\r\n        value = (value | (this.buf[this.pos] &  15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\r\n\r\n        /* istanbul ignore if */\r\n        if ((this.pos += 5) > this.len) {\r\n            this.pos = this.len;\r\n            throw indexOutOfRange(this, 10);\r\n        }\r\n        return value;\r\n    };\r\n})();\r\n\r\n/**\r\n * Reads a varint as a signed 32 bit value.\r\n * @returns {number} Value read\r\n */\r\nReader.prototype.int32 = function read_int32() {\r\n    return this.uint32() | 0;\r\n};\r\n\r\n/**\r\n * Reads a zig-zag encoded varint as a signed 32 bit value.\r\n * @returns {number} Value read\r\n */\r\nReader.prototype.sint32 = function read_sint32() {\r\n    var value = this.uint32();\r\n    return value >>> 1 ^ -(value & 1) | 0;\r\n};\r\n\r\n/* eslint-disable no-invalid-this */\r\n\r\nfunction readLongVarint() {\r\n    // tends to deopt with local vars for octet etc.\r\n    var bits = new LongBits(0, 0);\r\n    var i = 0;\r\n    if (this.len - this.pos > 4) { // fast route (lo)\r\n        for (; i < 4; ++i) {\r\n            // 1st..4th\r\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\r\n            if (this.buf[this.pos++] < 128)\r\n                return bits;\r\n        }\r\n        // 5th\r\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\r\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\r\n        if (this.buf[this.pos++] < 128)\r\n            return bits;\r\n        i = 0;\r\n    } else {\r\n        for (; i < 3; ++i) {\r\n            /* istanbul ignore if */\r\n            if (this.pos >= this.len)\r\n                throw indexOutOfRange(this);\r\n            // 1st..3th\r\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\r\n            if (this.buf[this.pos++] < 128)\r\n                return bits;\r\n        }\r\n        // 4th\r\n        bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\r\n        return bits;\r\n    }\r\n    if (this.len - this.pos > 4) { // fast route (hi)\r\n        for (; i < 5; ++i) {\r\n            // 6th..10th\r\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\r\n            if (this.buf[this.pos++] < 128)\r\n                return bits;\r\n        }\r\n    } else {\r\n        for (; i < 5; ++i) {\r\n            /* istanbul ignore if */\r\n            if (this.pos >= this.len)\r\n                throw indexOutOfRange(this);\r\n            // 6th..10th\r\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\r\n            if (this.buf[this.pos++] < 128)\r\n                return bits;\r\n        }\r\n    }\r\n    /* istanbul ignore next */\r\n    throw Error(\"invalid varint encoding\");\r\n}\r\n\r\n/* eslint-enable no-invalid-this */\r\n\r\n/**\r\n * Reads a varint as a signed 64 bit value.\r\n * @name Reader#int64\r\n * @function\r\n * @returns {Long} Value read\r\n */\r\n\r\n/**\r\n * Reads a varint as an unsigned 64 bit value.\r\n * @name Reader#uint64\r\n * @function\r\n * @returns {Long} Value read\r\n */\r\n\r\n/**\r\n * Reads a zig-zag encoded varint as a signed 64 bit value.\r\n * @name Reader#sint64\r\n * @function\r\n * @returns {Long} Value read\r\n */\r\n\r\n/**\r\n * Reads a varint as a boolean.\r\n * @returns {boolean} Value read\r\n */\r\nReader.prototype.bool = function read_bool() {\r\n    return this.uint32() !== 0;\r\n};\r\n\r\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\r\n    return (buf[end - 4]\r\n          | buf[end - 3] << 8\r\n          | buf[end - 2] << 16\r\n          | buf[end - 1] << 24) >>> 0;\r\n}\r\n\r\n/**\r\n * Reads fixed 32 bits as an unsigned 32 bit integer.\r\n * @returns {number} Value read\r\n */\r\nReader.prototype.fixed32 = function read_fixed32() {\r\n\r\n    /* istanbul ignore if */\r\n    if (this.pos + 4 > this.len)\r\n        throw indexOutOfRange(this, 4);\r\n\r\n    return readFixed32_end(this.buf, this.pos += 4);\r\n};\r\n\r\n/**\r\n * Reads fixed 32 bits as a signed 32 bit integer.\r\n * @returns {number} Value read\r\n */\r\nReader.prototype.sfixed32 = function read_sfixed32() {\r\n\r\n    /* istanbul ignore if */\r\n    if (this.pos + 4 > this.len)\r\n        throw indexOutOfRange(this, 4);\r\n\r\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\r\n};\r\n\r\n/* eslint-disable no-invalid-this */\r\n\r\nfunction readFixed64(/* this: Reader */) {\r\n\r\n    /* istanbul ignore if */\r\n    if (this.pos + 8 > this.len)\r\n        throw indexOutOfRange(this, 8);\r\n\r\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\r\n}\r\n\r\n/* eslint-enable no-invalid-this */\r\n\r\n/**\r\n * Reads fixed 64 bits.\r\n * @name Reader#fixed64\r\n * @function\r\n * @returns {Long} Value read\r\n */\r\n\r\n/**\r\n * Reads zig-zag encoded fixed 64 bits.\r\n * @name Reader#sfixed64\r\n * @function\r\n * @returns {Long} Value read\r\n */\r\n\r\n/**\r\n * Reads a float (32 bit) as a number.\r\n * @function\r\n * @returns {number} Value read\r\n */\r\nReader.prototype.float = function read_float() {\r\n\r\n    /* istanbul ignore if */\r\n    if (this.pos + 4 > this.len)\r\n        throw indexOutOfRange(this, 4);\r\n\r\n    var value = util.float.readFloatLE(this.buf, this.pos);\r\n    this.pos += 4;\r\n    return value;\r\n};\r\n\r\n/**\r\n * Reads a double (64 bit float) as a number.\r\n * @function\r\n * @returns {number} Value read\r\n */\r\nReader.prototype.double = function read_double() {\r\n\r\n    /* istanbul ignore if */\r\n    if (this.pos + 8 > this.len)\r\n        throw indexOutOfRange(this, 4);\r\n\r\n    var value = util.float.readDoubleLE(this.buf, this.pos);\r\n    this.pos += 8;\r\n    return value;\r\n};\r\n\r\n/**\r\n * Reads a sequence of bytes preceeded by its length as a varint.\r\n * @returns {Uint8Array} Value read\r\n */\r\nReader.prototype.bytes = function read_bytes() {\r\n    var length = this.uint32(),\r\n        start  = this.pos,\r\n        end    = this.pos + length;\r\n\r\n    /* istanbul ignore if */\r\n    if (end > this.len)\r\n        throw indexOutOfRange(this, length);\r\n\r\n    this.pos += length;\r\n    if (Array.isArray(this.buf)) // plain array\r\n        return this.buf.slice(start, end);\r\n\r\n    if (start === end) { // fix for IE 10/Win8 and others' subarray returning array of size 1\r\n        var nativeBuffer = util.Buffer;\r\n        return nativeBuffer\r\n            ? nativeBuffer.alloc(0)\r\n            : new this.buf.constructor(0);\r\n    }\r\n    return this._slice.call(this.buf, start, end);\r\n};\r\n\r\n/**\r\n * Reads a string preceeded by its byte length as a varint.\r\n * @returns {string} Value read\r\n */\r\nReader.prototype.string = function read_string() {\r\n    var bytes = this.bytes();\r\n    return utf8.read(bytes, 0, bytes.length);\r\n};\r\n\r\n/**\r\n * Skips the specified number of bytes if specified, otherwise skips a varint.\r\n * @param {number} [length] Length if known, otherwise a varint is assumed\r\n * @returns {Reader} `this`\r\n */\r\nReader.prototype.skip = function skip(length) {\r\n    if (typeof length === \"number\") {\r\n        /* istanbul ignore if */\r\n        if (this.pos + length > this.len)\r\n            throw indexOutOfRange(this, length);\r\n        this.pos += length;\r\n    } else {\r\n        do {\r\n            /* istanbul ignore if */\r\n            if (this.pos >= this.len)\r\n                throw indexOutOfRange(this);\r\n        } while (this.buf[this.pos++] & 128);\r\n    }\r\n    return this;\r\n};\r\n\r\n/**\r\n * Skips the next element of the specified wire type.\r\n * @param {number} wireType Wire type received\r\n * @returns {Reader} `this`\r\n */\r\nReader.prototype.skipType = function(wireType) {\r\n    switch (wireType) {\r\n        case 0:\r\n            this.skip();\r\n            break;\r\n        case 1:\r\n            this.skip(8);\r\n            break;\r\n        case 2:\r\n            this.skip(this.uint32());\r\n            break;\r\n        case 3:\r\n            while ((wireType = this.uint32() & 7) !== 4) {\r\n                this.skipType(wireType);\r\n            }\r\n            break;\r\n        case 5:\r\n            this.skip(4);\r\n            break;\r\n\r\n        /* istanbul ignore next */\r\n        default:\r\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\r\n    }\r\n    return this;\r\n};\r\n\r\nReader._configure = function(BufferReader_) {\r\n    BufferReader = BufferReader_;\r\n    Reader.create = create();\r\n    BufferReader._configure();\r\n\r\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\r\n    util.merge(Reader.prototype, {\r\n\r\n        int64: function read_int64() {\r\n            return readLongVarint.call(this)[fn](false);\r\n        },\r\n\r\n        uint64: function read_uint64() {\r\n            return readLongVarint.call(this)[fn](true);\r\n        },\r\n\r\n        sint64: function read_sint64() {\r\n            return readLongVarint.call(this).zzDecode()[fn](false);\r\n        },\r\n\r\n        fixed64: function read_fixed64() {\r\n            return readFixed64.call(this)[fn](true);\r\n        },\r\n\r\n        sfixed64: function read_sfixed64() {\r\n            return readFixed64.call(this)[fn](false);\r\n        }\r\n\r\n    });\r\n};\r\n","\"use strict\";\r\nmodule.exports = BufferReader;\r\n\r\n// extends Reader\r\nvar Reader = require(\"./reader\");\r\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\r\n\r\nvar util = require(\"./util/minimal\");\r\n\r\n/**\r\n * Constructs a new buffer reader instance.\r\n * @classdesc Wire format reader using node buffers.\r\n * @extends Reader\r\n * @constructor\r\n * @param {Buffer} buffer Buffer to read from\r\n */\r\nfunction BufferReader(buffer) {\r\n    Reader.call(this, buffer);\r\n\r\n    /**\r\n     * Read buffer.\r\n     * @name BufferReader#buf\r\n     * @type {Buffer}\r\n     */\r\n}\r\n\r\nBufferReader._configure = function () {\r\n    /* istanbul ignore else */\r\n    if (util.Buffer)\r\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\r\n};\r\n\r\n\r\n/**\r\n * @override\r\n */\r\nBufferReader.prototype.string = function read_string_buffer() {\r\n    var len = this.uint32(); // modifies pos\r\n    return this.buf.utf8Slice\r\n        ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\r\n        : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\r\n};\r\n\r\n/**\r\n * Reads a sequence of bytes preceeded by its length as a varint.\r\n * @name BufferReader#bytes\r\n * @function\r\n * @returns {Buffer} Value read\r\n */\r\n\r\nBufferReader._configure();\r\n","\"use strict\";\r\nmodule.exports = Service;\r\n\r\nvar util = require(\"../util/minimal\");\r\n\r\n// Extends EventEmitter\r\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\r\n\r\n/**\r\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\r\n *\r\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\r\n * @typedef rpc.ServiceMethodCallback\r\n * @template TRes extends Message<TRes>\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {TRes} [response] Response message\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\r\n * @typedef rpc.ServiceMethod\r\n * @template TReq extends Message<TReq>\r\n * @template TRes extends Message<TRes>\r\n * @type {function}\r\n * @param {TReq|Properties<TReq>} request Request message or plain object\r\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\r\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\r\n */\r\n\r\n/**\r\n * Constructs a new RPC service instance.\r\n * @classdesc An RPC service as returned by {@link Service#create}.\r\n * @exports rpc.Service\r\n * @extends util.EventEmitter\r\n * @constructor\r\n * @param {RPCImpl} rpcImpl RPC implementation\r\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\r\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\r\n */\r\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\r\n\r\n    if (typeof rpcImpl !== \"function\")\r\n        throw TypeError(\"rpcImpl must be a function\");\r\n\r\n    util.EventEmitter.call(this);\r\n\r\n    /**\r\n     * RPC implementation. Becomes `null` once the service is ended.\r\n     * @type {RPCImpl|null}\r\n     */\r\n    this.rpcImpl = rpcImpl;\r\n\r\n    /**\r\n     * Whether requests are length-delimited.\r\n     * @type {boolean}\r\n     */\r\n    this.requestDelimited = Boolean(requestDelimited);\r\n\r\n    /**\r\n     * Whether responses are length-delimited.\r\n     * @type {boolean}\r\n     */\r\n    this.responseDelimited = Boolean(responseDelimited);\r\n}\r\n\r\n/**\r\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\r\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\r\n * @param {Constructor<TReq>} requestCtor Request constructor\r\n * @param {Constructor<TRes>} responseCtor Response constructor\r\n * @param {TReq|Properties<TReq>} request Request message or plain object\r\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\r\n * @returns {undefined}\r\n * @template TReq extends Message<TReq>\r\n * @template TRes extends Message<TRes>\r\n */\r\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\r\n\r\n    if (!request)\r\n        throw TypeError(\"request must be specified\");\r\n\r\n    var self = this;\r\n    if (!callback)\r\n        return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\r\n\r\n    if (!self.rpcImpl) {\r\n        setTimeout(function() { callback(Error(\"already ended\")); }, 0);\r\n        return undefined;\r\n    }\r\n\r\n    try {\r\n        return self.rpcImpl(\r\n            method,\r\n            requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\r\n            function rpcCallback(err, response) {\r\n\r\n                if (err) {\r\n                    self.emit(\"error\", err, method);\r\n                    return callback(err);\r\n                }\r\n\r\n                if (response === null) {\r\n                    self.end(/* endedByRPC */ true);\r\n                    return undefined;\r\n                }\r\n\r\n                if (!(response instanceof responseCtor)) {\r\n                    try {\r\n                        response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\r\n                    } catch (err) {\r\n                        self.emit(\"error\", err, method);\r\n                        return callback(err);\r\n                    }\r\n                }\r\n\r\n                self.emit(\"data\", response, method);\r\n                return callback(null, response);\r\n            }\r\n        );\r\n    } catch (err) {\r\n        self.emit(\"error\", err, method);\r\n        setTimeout(function() { callback(err); }, 0);\r\n        return undefined;\r\n    }\r\n};\r\n\r\n/**\r\n * Ends this service and emits the `end` event.\r\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\r\n * @returns {rpc.Service} `this`\r\n */\r\nService.prototype.end = function end(endedByRPC) {\r\n    if (this.rpcImpl) {\r\n        if (!endedByRPC) // signal end to rpcImpl\r\n            this.rpcImpl(null, null, null);\r\n        this.rpcImpl = null;\r\n        this.emit(\"end\").off();\r\n    }\r\n    return this;\r\n};\r\n","\"use strict\";\r\n\r\n/**\r\n * Streaming RPC helpers.\r\n * @namespace\r\n */\r\nvar rpc = exports;\r\n\r\n/**\r\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\r\n * @typedef RPCImpl\r\n * @type {function}\r\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\r\n * @param {Uint8Array} requestData Request data\r\n * @param {RPCImplCallback} callback Callback function\r\n * @returns {undefined}\r\n * @example\r\n * function rpcImpl(method, requestData, callback) {\r\n *     if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\r\n *         throw Error(\"no such method\");\r\n *     asynchronouslyObtainAResponse(requestData, function(err, responseData) {\r\n *         callback(err, responseData);\r\n *     });\r\n * }\r\n */\r\n\r\n/**\r\n * Node-style callback as used by {@link RPCImpl}.\r\n * @typedef RPCImplCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any, otherwise `null`\r\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\nrpc.Service = require(\"./rpc/service\");\r\n","\"use strict\";\r\nmodule.exports = {};\r\n\r\n/**\r\n * Named roots.\r\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\r\n * Can also be used manually to make roots available across modules.\r\n * @name roots\r\n * @type {Object.<string,Root>}\r\n * @example\r\n * // pbjs -r myroot -o compiled.js ...\r\n *\r\n * // in another module:\r\n * require(\"./compiled.js\");\r\n *\r\n * // in any subsequent module:\r\n * var root = protobuf.roots[\"myroot\"];\r\n */\r\n","\"use strict\";\r\nvar protobuf = exports;\r\n\r\n/**\r\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\r\n * @name build\r\n * @type {string}\r\n * @const\r\n */\r\nprotobuf.build = \"minimal\";\r\n\r\n// Serialization\r\nprotobuf.Writer       = require(\"./writer\");\r\nprotobuf.BufferWriter = require(\"./writer_buffer\");\r\nprotobuf.Reader       = require(\"./reader\");\r\nprotobuf.BufferReader = require(\"./reader_buffer\");\r\n\r\n// Utility\r\nprotobuf.util         = require(\"./util/minimal\");\r\nprotobuf.rpc          = require(\"./rpc\");\r\nprotobuf.roots        = require(\"./roots\");\r\nprotobuf.configure    = configure;\r\n\r\n/* istanbul ignore next */\r\n/**\r\n * Reconfigures the library according to the environment.\r\n * @returns {undefined}\r\n */\r\nfunction configure() {\r\n    protobuf.util._configure();\r\n    protobuf.Writer._configure(protobuf.BufferWriter);\r\n    protobuf.Reader._configure(protobuf.BufferReader);\r\n}\r\n\r\n// Set up buffer utility according to the environment\r\nconfigure();\r\n","// minimal library entry point.\r\n\r\n\"use strict\";\r\nmodule.exports = require(\"./src/index-minimal\");\r\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\nimport * as $protobuf from \"protobufjs/minimal\";\n\n// Common aliases\nconst $Reader = $protobuf.Reader, $util = $protobuf.util;\n\n// Exported root namespace\nconst $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n\nexport const com = $root.com = (() => {\n\n    /**\n     * Namespace com.\n     * @exports com\n     * @namespace\n     */\n    const com = {};\n\n    com.opensource = (function() {\n\n        /**\n         * Namespace opensource.\n         * @memberof com\n         * @namespace\n         */\n        const opensource = {};\n\n        opensource.svga = (function() {\n\n            /**\n             * Namespace svga.\n             * @memberof com.opensource\n             * @namespace\n             */\n            const svga = {};\n\n            svga.MovieParams = (function() {\n\n                /**\n                 * Properties of a MovieParams.\n                 * @memberof com.opensource.svga\n                 * @interface IMovieParams\n                 * @property {number|null} [viewBoxWidth] MovieParams viewBoxWidth\n                 * @property {number|null} [viewBoxHeight] MovieParams viewBoxHeight\n                 * @property {number|null} [fps] MovieParams fps\n                 * @property {number|null} [frames] MovieParams frames\n                 */\n\n                /**\n                 * Constructs a new MovieParams.\n                 * @memberof com.opensource.svga\n                 * @classdesc Represents a MovieParams.\n                 * @implements IMovieParams\n                 * @constructor\n                 * @param {com.opensource.svga.IMovieParams=} [p] Properties to set\n                 */\n                function MovieParams(p) {\n                    if (p)\n                        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                            if (p[ks[i]] != null)\n                                this[ks[i]] = p[ks[i]];\n                }\n\n                /**\n                 * MovieParams viewBoxWidth.\n                 * @member {number} viewBoxWidth\n                 * @memberof com.opensource.svga.MovieParams\n                 * @instance\n                 */\n                MovieParams.prototype.viewBoxWidth = 0;\n\n                /**\n                 * MovieParams viewBoxHeight.\n                 * @member {number} viewBoxHeight\n                 * @memberof com.opensource.svga.MovieParams\n                 * @instance\n                 */\n                MovieParams.prototype.viewBoxHeight = 0;\n\n                /**\n                 * MovieParams fps.\n                 * @member {number} fps\n                 * @memberof com.opensource.svga.MovieParams\n                 * @instance\n                 */\n                MovieParams.prototype.fps = 0;\n\n                /**\n                 * MovieParams frames.\n                 * @member {number} frames\n                 * @memberof com.opensource.svga.MovieParams\n                 * @instance\n                 */\n                MovieParams.prototype.frames = 0;\n\n                /**\n                 * Decodes a MovieParams message from the specified reader or buffer.\n                 * @function decode\n                 * @memberof com.opensource.svga.MovieParams\n                 * @static\n                 * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                 * @param {number} [l] Message length if known beforehand\n                 * @returns {com.opensource.svga.MovieParams} MovieParams\n                 * @throws {Error} If the payload is not a reader or valid buffer\n                 * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                 */\n                MovieParams.decode = function decode(r, l) {\n                    if (!(r instanceof $Reader))\n                        r = $Reader.create(r);\n                    var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.MovieParams();\n                    while (r.pos < c) {\n                        var t = r.uint32();\n                        switch (t >>> 3) {\n                        case 1: {\n                                m.viewBoxWidth = r.float();\n                                break;\n                            }\n                        case 2: {\n                                m.viewBoxHeight = r.float();\n                                break;\n                            }\n                        case 3: {\n                                m.fps = r.int32();\n                                break;\n                            }\n                        case 4: {\n                                m.frames = r.int32();\n                                break;\n                            }\n                        default:\n                            r.skipType(t & 7);\n                            break;\n                        }\n                    }\n                    return m;\n                };\n\n                /**\n                 * Gets the default type url for MovieParams\n                 * @function getTypeUrl\n                 * @memberof com.opensource.svga.MovieParams\n                 * @static\n                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                 * @returns {string} The default type url\n                 */\n                MovieParams.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                    if (typeUrlPrefix === undefined) {\n                        typeUrlPrefix = \"type.googleapis.com\";\n                    }\n                    return typeUrlPrefix + \"/com.opensource.svga.MovieParams\";\n                };\n\n                return MovieParams;\n            })();\n\n            svga.SpriteEntity = (function() {\n\n                /**\n                 * Properties of a SpriteEntity.\n                 * @memberof com.opensource.svga\n                 * @interface ISpriteEntity\n                 * @property {string|null} [imageKey] SpriteEntity imageKey\n                 * @property {Array.<com.opensource.svga.IFrameEntity>|null} [frames] SpriteEntity frames\n                 * @property {string|null} [matteKey] SpriteEntity matteKey\n                 */\n\n                /**\n                 * Constructs a new SpriteEntity.\n                 * @memberof com.opensource.svga\n                 * @classdesc Represents a SpriteEntity.\n                 * @implements ISpriteEntity\n                 * @constructor\n                 * @param {com.opensource.svga.ISpriteEntity=} [p] Properties to set\n                 */\n                function SpriteEntity(p) {\n                    this.frames = [];\n                    if (p)\n                        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                            if (p[ks[i]] != null)\n                                this[ks[i]] = p[ks[i]];\n                }\n\n                /**\n                 * SpriteEntity imageKey.\n                 * @member {string} imageKey\n                 * @memberof com.opensource.svga.SpriteEntity\n                 * @instance\n                 */\n                SpriteEntity.prototype.imageKey = \"\";\n\n                /**\n                 * SpriteEntity frames.\n                 * @member {Array.<com.opensource.svga.IFrameEntity>} frames\n                 * @memberof com.opensource.svga.SpriteEntity\n                 * @instance\n                 */\n                SpriteEntity.prototype.frames = $util.emptyArray;\n\n                /**\n                 * SpriteEntity matteKey.\n                 * @member {string} matteKey\n                 * @memberof com.opensource.svga.SpriteEntity\n                 * @instance\n                 */\n                SpriteEntity.prototype.matteKey = \"\";\n\n                /**\n                 * Decodes a SpriteEntity message from the specified reader or buffer.\n                 * @function decode\n                 * @memberof com.opensource.svga.SpriteEntity\n                 * @static\n                 * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                 * @param {number} [l] Message length if known beforehand\n                 * @returns {com.opensource.svga.SpriteEntity} SpriteEntity\n                 * @throws {Error} If the payload is not a reader or valid buffer\n                 * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                 */\n                SpriteEntity.decode = function decode(r, l) {\n                    if (!(r instanceof $Reader))\n                        r = $Reader.create(r);\n                    var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.SpriteEntity();\n                    while (r.pos < c) {\n                        var t = r.uint32();\n                        switch (t >>> 3) {\n                        case 1: {\n                                m.imageKey = r.string();\n                                break;\n                            }\n                        case 2: {\n                                if (!(m.frames && m.frames.length))\n                                    m.frames = [];\n                                m.frames.push($root.com.opensource.svga.FrameEntity.decode(r, r.uint32()));\n                                break;\n                            }\n                        case 3: {\n                                m.matteKey = r.string();\n                                break;\n                            }\n                        default:\n                            r.skipType(t & 7);\n                            break;\n                        }\n                    }\n                    return m;\n                };\n\n                /**\n                 * Gets the default type url for SpriteEntity\n                 * @function getTypeUrl\n                 * @memberof com.opensource.svga.SpriteEntity\n                 * @static\n                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                 * @returns {string} The default type url\n                 */\n                SpriteEntity.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                    if (typeUrlPrefix === undefined) {\n                        typeUrlPrefix = \"type.googleapis.com\";\n                    }\n                    return typeUrlPrefix + \"/com.opensource.svga.SpriteEntity\";\n                };\n\n                return SpriteEntity;\n            })();\n\n            svga.AudioEntity = (function() {\n\n                /**\n                 * Properties of an AudioEntity.\n                 * @memberof com.opensource.svga\n                 * @interface IAudioEntity\n                 * @property {string|null} [audioKey] AudioEntity audioKey\n                 * @property {number|null} [startFrame] AudioEntity startFrame\n                 * @property {number|null} [endFrame] AudioEntity endFrame\n                 * @property {number|null} [startTime] AudioEntity startTime\n                 * @property {number|null} [totalTime] AudioEntity totalTime\n                 */\n\n                /**\n                 * Constructs a new AudioEntity.\n                 * @memberof com.opensource.svga\n                 * @classdesc Represents an AudioEntity.\n                 * @implements IAudioEntity\n                 * @constructor\n                 * @param {com.opensource.svga.IAudioEntity=} [p] Properties to set\n                 */\n                function AudioEntity(p) {\n                    if (p)\n                        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                            if (p[ks[i]] != null)\n                                this[ks[i]] = p[ks[i]];\n                }\n\n                /**\n                 * AudioEntity audioKey.\n                 * @member {string} audioKey\n                 * @memberof com.opensource.svga.AudioEntity\n                 * @instance\n                 */\n                AudioEntity.prototype.audioKey = \"\";\n\n                /**\n                 * AudioEntity startFrame.\n                 * @member {number} startFrame\n                 * @memberof com.opensource.svga.AudioEntity\n                 * @instance\n                 */\n                AudioEntity.prototype.startFrame = 0;\n\n                /**\n                 * AudioEntity endFrame.\n                 * @member {number} endFrame\n                 * @memberof com.opensource.svga.AudioEntity\n                 * @instance\n                 */\n                AudioEntity.prototype.endFrame = 0;\n\n                /**\n                 * AudioEntity startTime.\n                 * @member {number} startTime\n                 * @memberof com.opensource.svga.AudioEntity\n                 * @instance\n                 */\n                AudioEntity.prototype.startTime = 0;\n\n                /**\n                 * AudioEntity totalTime.\n                 * @member {number} totalTime\n                 * @memberof com.opensource.svga.AudioEntity\n                 * @instance\n                 */\n                AudioEntity.prototype.totalTime = 0;\n\n                /**\n                 * Decodes an AudioEntity message from the specified reader or buffer.\n                 * @function decode\n                 * @memberof com.opensource.svga.AudioEntity\n                 * @static\n                 * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                 * @param {number} [l] Message length if known beforehand\n                 * @returns {com.opensource.svga.AudioEntity} AudioEntity\n                 * @throws {Error} If the payload is not a reader or valid buffer\n                 * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                 */\n                AudioEntity.decode = function decode(r, l) {\n                    if (!(r instanceof $Reader))\n                        r = $Reader.create(r);\n                    var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.AudioEntity();\n                    while (r.pos < c) {\n                        var t = r.uint32();\n                        switch (t >>> 3) {\n                        case 1: {\n                                m.audioKey = r.string();\n                                break;\n                            }\n                        case 2: {\n                                m.startFrame = r.int32();\n                                break;\n                            }\n                        case 3: {\n                                m.endFrame = r.int32();\n                                break;\n                            }\n                        case 4: {\n                                m.startTime = r.int32();\n                                break;\n                            }\n                        case 5: {\n                                m.totalTime = r.int32();\n                                break;\n                            }\n                        default:\n                            r.skipType(t & 7);\n                            break;\n                        }\n                    }\n                    return m;\n                };\n\n                /**\n                 * Gets the default type url for AudioEntity\n                 * @function getTypeUrl\n                 * @memberof com.opensource.svga.AudioEntity\n                 * @static\n                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                 * @returns {string} The default type url\n                 */\n                AudioEntity.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                    if (typeUrlPrefix === undefined) {\n                        typeUrlPrefix = \"type.googleapis.com\";\n                    }\n                    return typeUrlPrefix + \"/com.opensource.svga.AudioEntity\";\n                };\n\n                return AudioEntity;\n            })();\n\n            svga.Layout = (function() {\n\n                /**\n                 * Properties of a Layout.\n                 * @memberof com.opensource.svga\n                 * @interface ILayout\n                 * @property {number|null} [x] Layout x\n                 * @property {number|null} [y] Layout y\n                 * @property {number|null} [width] Layout width\n                 * @property {number|null} [height] Layout height\n                 */\n\n                /**\n                 * Constructs a new Layout.\n                 * @memberof com.opensource.svga\n                 * @classdesc Represents a Layout.\n                 * @implements ILayout\n                 * @constructor\n                 * @param {com.opensource.svga.ILayout=} [p] Properties to set\n                 */\n                function Layout(p) {\n                    if (p)\n                        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                            if (p[ks[i]] != null)\n                                this[ks[i]] = p[ks[i]];\n                }\n\n                /**\n                 * Layout x.\n                 * @member {number} x\n                 * @memberof com.opensource.svga.Layout\n                 * @instance\n                 */\n                Layout.prototype.x = 0;\n\n                /**\n                 * Layout y.\n                 * @member {number} y\n                 * @memberof com.opensource.svga.Layout\n                 * @instance\n                 */\n                Layout.prototype.y = 0;\n\n                /**\n                 * Layout width.\n                 * @member {number} width\n                 * @memberof com.opensource.svga.Layout\n                 * @instance\n                 */\n                Layout.prototype.width = 0;\n\n                /**\n                 * Layout height.\n                 * @member {number} height\n                 * @memberof com.opensource.svga.Layout\n                 * @instance\n                 */\n                Layout.prototype.height = 0;\n\n                /**\n                 * Decodes a Layout message from the specified reader or buffer.\n                 * @function decode\n                 * @memberof com.opensource.svga.Layout\n                 * @static\n                 * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                 * @param {number} [l] Message length if known beforehand\n                 * @returns {com.opensource.svga.Layout} Layout\n                 * @throws {Error} If the payload is not a reader or valid buffer\n                 * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                 */\n                Layout.decode = function decode(r, l) {\n                    if (!(r instanceof $Reader))\n                        r = $Reader.create(r);\n                    var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.Layout();\n                    while (r.pos < c) {\n                        var t = r.uint32();\n                        switch (t >>> 3) {\n                        case 1: {\n                                m.x = r.float();\n                                break;\n                            }\n                        case 2: {\n                                m.y = r.float();\n                                break;\n                            }\n                        case 3: {\n                                m.width = r.float();\n                                break;\n                            }\n                        case 4: {\n                                m.height = r.float();\n                                break;\n                            }\n                        default:\n                            r.skipType(t & 7);\n                            break;\n                        }\n                    }\n                    return m;\n                };\n\n                /**\n                 * Gets the default type url for Layout\n                 * @function getTypeUrl\n                 * @memberof com.opensource.svga.Layout\n                 * @static\n                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                 * @returns {string} The default type url\n                 */\n                Layout.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                    if (typeUrlPrefix === undefined) {\n                        typeUrlPrefix = \"type.googleapis.com\";\n                    }\n                    return typeUrlPrefix + \"/com.opensource.svga.Layout\";\n                };\n\n                return Layout;\n            })();\n\n            svga.Transform = (function() {\n\n                /**\n                 * Properties of a Transform.\n                 * @memberof com.opensource.svga\n                 * @interface ITransform\n                 * @property {number|null} [a] Transform a\n                 * @property {number|null} [b] Transform b\n                 * @property {number|null} [c] Transform c\n                 * @property {number|null} [d] Transform d\n                 * @property {number|null} [tx] Transform tx\n                 * @property {number|null} [ty] Transform ty\n                 */\n\n                /**\n                 * Constructs a new Transform.\n                 * @memberof com.opensource.svga\n                 * @classdesc Represents a Transform.\n                 * @implements ITransform\n                 * @constructor\n                 * @param {com.opensource.svga.ITransform=} [p] Properties to set\n                 */\n                function Transform(p) {\n                    if (p)\n                        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                            if (p[ks[i]] != null)\n                                this[ks[i]] = p[ks[i]];\n                }\n\n                /**\n                 * Transform a.\n                 * @member {number} a\n                 * @memberof com.opensource.svga.Transform\n                 * @instance\n                 */\n                Transform.prototype.a = 0;\n\n                /**\n                 * Transform b.\n                 * @member {number} b\n                 * @memberof com.opensource.svga.Transform\n                 * @instance\n                 */\n                Transform.prototype.b = 0;\n\n                /**\n                 * Transform c.\n                 * @member {number} c\n                 * @memberof com.opensource.svga.Transform\n                 * @instance\n                 */\n                Transform.prototype.c = 0;\n\n                /**\n                 * Transform d.\n                 * @member {number} d\n                 * @memberof com.opensource.svga.Transform\n                 * @instance\n                 */\n                Transform.prototype.d = 0;\n\n                /**\n                 * Transform tx.\n                 * @member {number} tx\n                 * @memberof com.opensource.svga.Transform\n                 * @instance\n                 */\n                Transform.prototype.tx = 0;\n\n                /**\n                 * Transform ty.\n                 * @member {number} ty\n                 * @memberof com.opensource.svga.Transform\n                 * @instance\n                 */\n                Transform.prototype.ty = 0;\n\n                /**\n                 * Decodes a Transform message from the specified reader or buffer.\n                 * @function decode\n                 * @memberof com.opensource.svga.Transform\n                 * @static\n                 * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                 * @param {number} [l] Message length if known beforehand\n                 * @returns {com.opensource.svga.Transform} Transform\n                 * @throws {Error} If the payload is not a reader or valid buffer\n                 * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                 */\n                Transform.decode = function decode(r, l) {\n                    if (!(r instanceof $Reader))\n                        r = $Reader.create(r);\n                    var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.Transform();\n                    while (r.pos < c) {\n                        var t = r.uint32();\n                        switch (t >>> 3) {\n                        case 1: {\n                                m.a = r.float();\n                                break;\n                            }\n                        case 2: {\n                                m.b = r.float();\n                                break;\n                            }\n                        case 3: {\n                                m.c = r.float();\n                                break;\n                            }\n                        case 4: {\n                                m.d = r.float();\n                                break;\n                            }\n                        case 5: {\n                                m.tx = r.float();\n                                break;\n                            }\n                        case 6: {\n                                m.ty = r.float();\n                                break;\n                            }\n                        default:\n                            r.skipType(t & 7);\n                            break;\n                        }\n                    }\n                    return m;\n                };\n\n                /**\n                 * Gets the default type url for Transform\n                 * @function getTypeUrl\n                 * @memberof com.opensource.svga.Transform\n                 * @static\n                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                 * @returns {string} The default type url\n                 */\n                Transform.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                    if (typeUrlPrefix === undefined) {\n                        typeUrlPrefix = \"type.googleapis.com\";\n                    }\n                    return typeUrlPrefix + \"/com.opensource.svga.Transform\";\n                };\n\n                return Transform;\n            })();\n\n            svga.ShapeEntity = (function() {\n\n                /**\n                 * Properties of a ShapeEntity.\n                 * @memberof com.opensource.svga\n                 * @interface IShapeEntity\n                 * @property {com.opensource.svga.ShapeEntity.ShapeType|null} [type] ShapeEntity type\n                 * @property {com.opensource.svga.ShapeEntity.IShapeArgs|null} [shape] ShapeEntity shape\n                 * @property {com.opensource.svga.ShapeEntity.IRectArgs|null} [rect] ShapeEntity rect\n                 * @property {com.opensource.svga.ShapeEntity.IEllipseArgs|null} [ellipse] ShapeEntity ellipse\n                 * @property {com.opensource.svga.ShapeEntity.IShapeStyle|null} [styles] ShapeEntity styles\n                 * @property {com.opensource.svga.ITransform|null} [transform] ShapeEntity transform\n                 */\n\n                /**\n                 * Constructs a new ShapeEntity.\n                 * @memberof com.opensource.svga\n                 * @classdesc Represents a ShapeEntity.\n                 * @implements IShapeEntity\n                 * @constructor\n                 * @param {com.opensource.svga.IShapeEntity=} [p] Properties to set\n                 */\n                function ShapeEntity(p) {\n                    if (p)\n                        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                            if (p[ks[i]] != null)\n                                this[ks[i]] = p[ks[i]];\n                }\n\n                /**\n                 * ShapeEntity type.\n                 * @member {com.opensource.svga.ShapeEntity.ShapeType} type\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @instance\n                 */\n                ShapeEntity.prototype.type = 0;\n\n                /**\n                 * ShapeEntity shape.\n                 * @member {com.opensource.svga.ShapeEntity.IShapeArgs|null|undefined} shape\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @instance\n                 */\n                ShapeEntity.prototype.shape = null;\n\n                /**\n                 * ShapeEntity rect.\n                 * @member {com.opensource.svga.ShapeEntity.IRectArgs|null|undefined} rect\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @instance\n                 */\n                ShapeEntity.prototype.rect = null;\n\n                /**\n                 * ShapeEntity ellipse.\n                 * @member {com.opensource.svga.ShapeEntity.IEllipseArgs|null|undefined} ellipse\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @instance\n                 */\n                ShapeEntity.prototype.ellipse = null;\n\n                /**\n                 * ShapeEntity styles.\n                 * @member {com.opensource.svga.ShapeEntity.IShapeStyle|null|undefined} styles\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @instance\n                 */\n                ShapeEntity.prototype.styles = null;\n\n                /**\n                 * ShapeEntity transform.\n                 * @member {com.opensource.svga.ITransform|null|undefined} transform\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @instance\n                 */\n                ShapeEntity.prototype.transform = null;\n\n                // OneOf field names bound to virtual getters and setters\n                let $oneOfFields;\n\n                /**\n                 * ShapeEntity args.\n                 * @member {\"shape\"|\"rect\"|\"ellipse\"|undefined} args\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @instance\n                 */\n                Object.defineProperty(ShapeEntity.prototype, \"args\", {\n                    get: $util.oneOfGetter($oneOfFields = [\"shape\", \"rect\", \"ellipse\"]),\n                    set: $util.oneOfSetter($oneOfFields)\n                });\n\n                /**\n                 * Decodes a ShapeEntity message from the specified reader or buffer.\n                 * @function decode\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @static\n                 * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                 * @param {number} [l] Message length if known beforehand\n                 * @returns {com.opensource.svga.ShapeEntity} ShapeEntity\n                 * @throws {Error} If the payload is not a reader or valid buffer\n                 * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                 */\n                ShapeEntity.decode = function decode(r, l) {\n                    if (!(r instanceof $Reader))\n                        r = $Reader.create(r);\n                    var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.ShapeEntity();\n                    while (r.pos < c) {\n                        var t = r.uint32();\n                        switch (t >>> 3) {\n                        case 1: {\n                                m.type = r.int32();\n                                break;\n                            }\n                        case 2: {\n                                m.shape = $root.com.opensource.svga.ShapeEntity.ShapeArgs.decode(r, r.uint32());\n                                break;\n                            }\n                        case 3: {\n                                m.rect = $root.com.opensource.svga.ShapeEntity.RectArgs.decode(r, r.uint32());\n                                break;\n                            }\n                        case 4: {\n                                m.ellipse = $root.com.opensource.svga.ShapeEntity.EllipseArgs.decode(r, r.uint32());\n                                break;\n                            }\n                        case 10: {\n                                m.styles = $root.com.opensource.svga.ShapeEntity.ShapeStyle.decode(r, r.uint32());\n                                break;\n                            }\n                        case 11: {\n                                m.transform = $root.com.opensource.svga.Transform.decode(r, r.uint32());\n                                break;\n                            }\n                        default:\n                            r.skipType(t & 7);\n                            break;\n                        }\n                    }\n                    return m;\n                };\n\n                /**\n                 * Gets the default type url for ShapeEntity\n                 * @function getTypeUrl\n                 * @memberof com.opensource.svga.ShapeEntity\n                 * @static\n                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                 * @returns {string} The default type url\n                 */\n                ShapeEntity.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                    if (typeUrlPrefix === undefined) {\n                        typeUrlPrefix = \"type.googleapis.com\";\n                    }\n                    return typeUrlPrefix + \"/com.opensource.svga.ShapeEntity\";\n                };\n\n                /**\n                 * ShapeType enum.\n                 * @name com.opensource.svga.ShapeEntity.ShapeType\n                 * @enum {number}\n                 * @property {number} SHAPE=0 SHAPE value\n                 * @property {number} RECT=1 RECT value\n                 * @property {number} ELLIPSE=2 ELLIPSE value\n                 * @property {number} KEEP=3 KEEP value\n                 */\n                ShapeEntity.ShapeType = (function() {\n                    const valuesById = {}, values = Object.create(valuesById);\n                    values[valuesById[0] = \"SHAPE\"] = 0;\n                    values[valuesById[1] = \"RECT\"] = 1;\n                    values[valuesById[2] = \"ELLIPSE\"] = 2;\n                    values[valuesById[3] = \"KEEP\"] = 3;\n                    return values;\n                })();\n\n                ShapeEntity.ShapeArgs = (function() {\n\n                    /**\n                     * Properties of a ShapeArgs.\n                     * @memberof com.opensource.svga.ShapeEntity\n                     * @interface IShapeArgs\n                     * @property {string|null} [d] ShapeArgs d\n                     */\n\n                    /**\n                     * Constructs a new ShapeArgs.\n                     * @memberof com.opensource.svga.ShapeEntity\n                     * @classdesc Represents a ShapeArgs.\n                     * @implements IShapeArgs\n                     * @constructor\n                     * @param {com.opensource.svga.ShapeEntity.IShapeArgs=} [p] Properties to set\n                     */\n                    function ShapeArgs(p) {\n                        if (p)\n                            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                                if (p[ks[i]] != null)\n                                    this[ks[i]] = p[ks[i]];\n                    }\n\n                    /**\n                     * ShapeArgs d.\n                     * @member {string} d\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeArgs\n                     * @instance\n                     */\n                    ShapeArgs.prototype.d = \"\";\n\n                    /**\n                     * Decodes a ShapeArgs message from the specified reader or buffer.\n                     * @function decode\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeArgs\n                     * @static\n                     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                     * @param {number} [l] Message length if known beforehand\n                     * @returns {com.opensource.svga.ShapeEntity.ShapeArgs} ShapeArgs\n                     * @throws {Error} If the payload is not a reader or valid buffer\n                     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                     */\n                    ShapeArgs.decode = function decode(r, l) {\n                        if (!(r instanceof $Reader))\n                            r = $Reader.create(r);\n                        var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.ShapeEntity.ShapeArgs();\n                        while (r.pos < c) {\n                            var t = r.uint32();\n                            switch (t >>> 3) {\n                            case 1: {\n                                    m.d = r.string();\n                                    break;\n                                }\n                            default:\n                                r.skipType(t & 7);\n                                break;\n                            }\n                        }\n                        return m;\n                    };\n\n                    /**\n                     * Gets the default type url for ShapeArgs\n                     * @function getTypeUrl\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeArgs\n                     * @static\n                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                     * @returns {string} The default type url\n                     */\n                    ShapeArgs.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                        if (typeUrlPrefix === undefined) {\n                            typeUrlPrefix = \"type.googleapis.com\";\n                        }\n                        return typeUrlPrefix + \"/com.opensource.svga.ShapeEntity.ShapeArgs\";\n                    };\n\n                    return ShapeArgs;\n                })();\n\n                ShapeEntity.RectArgs = (function() {\n\n                    /**\n                     * Properties of a RectArgs.\n                     * @memberof com.opensource.svga.ShapeEntity\n                     * @interface IRectArgs\n                     * @property {number|null} [x] RectArgs x\n                     * @property {number|null} [y] RectArgs y\n                     * @property {number|null} [width] RectArgs width\n                     * @property {number|null} [height] RectArgs height\n                     * @property {number|null} [cornerRadius] RectArgs cornerRadius\n                     */\n\n                    /**\n                     * Constructs a new RectArgs.\n                     * @memberof com.opensource.svga.ShapeEntity\n                     * @classdesc Represents a RectArgs.\n                     * @implements IRectArgs\n                     * @constructor\n                     * @param {com.opensource.svga.ShapeEntity.IRectArgs=} [p] Properties to set\n                     */\n                    function RectArgs(p) {\n                        if (p)\n                            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                                if (p[ks[i]] != null)\n                                    this[ks[i]] = p[ks[i]];\n                    }\n\n                    /**\n                     * RectArgs x.\n                     * @member {number} x\n                     * @memberof com.opensource.svga.ShapeEntity.RectArgs\n                     * @instance\n                     */\n                    RectArgs.prototype.x = 0;\n\n                    /**\n                     * RectArgs y.\n                     * @member {number} y\n                     * @memberof com.opensource.svga.ShapeEntity.RectArgs\n                     * @instance\n                     */\n                    RectArgs.prototype.y = 0;\n\n                    /**\n                     * RectArgs width.\n                     * @member {number} width\n                     * @memberof com.opensource.svga.ShapeEntity.RectArgs\n                     * @instance\n                     */\n                    RectArgs.prototype.width = 0;\n\n                    /**\n                     * RectArgs height.\n                     * @member {number} height\n                     * @memberof com.opensource.svga.ShapeEntity.RectArgs\n                     * @instance\n                     */\n                    RectArgs.prototype.height = 0;\n\n                    /**\n                     * RectArgs cornerRadius.\n                     * @member {number} cornerRadius\n                     * @memberof com.opensource.svga.ShapeEntity.RectArgs\n                     * @instance\n                     */\n                    RectArgs.prototype.cornerRadius = 0;\n\n                    /**\n                     * Decodes a RectArgs message from the specified reader or buffer.\n                     * @function decode\n                     * @memberof com.opensource.svga.ShapeEntity.RectArgs\n                     * @static\n                     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                     * @param {number} [l] Message length if known beforehand\n                     * @returns {com.opensource.svga.ShapeEntity.RectArgs} RectArgs\n                     * @throws {Error} If the payload is not a reader or valid buffer\n                     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                     */\n                    RectArgs.decode = function decode(r, l) {\n                        if (!(r instanceof $Reader))\n                            r = $Reader.create(r);\n                        var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.ShapeEntity.RectArgs();\n                        while (r.pos < c) {\n                            var t = r.uint32();\n                            switch (t >>> 3) {\n                            case 1: {\n                                    m.x = r.float();\n                                    break;\n                                }\n                            case 2: {\n                                    m.y = r.float();\n                                    break;\n                                }\n                            case 3: {\n                                    m.width = r.float();\n                                    break;\n                                }\n                            case 4: {\n                                    m.height = r.float();\n                                    break;\n                                }\n                            case 5: {\n                                    m.cornerRadius = r.float();\n                                    break;\n                                }\n                            default:\n                                r.skipType(t & 7);\n                                break;\n                            }\n                        }\n                        return m;\n                    };\n\n                    /**\n                     * Gets the default type url for RectArgs\n                     * @function getTypeUrl\n                     * @memberof com.opensource.svga.ShapeEntity.RectArgs\n                     * @static\n                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                     * @returns {string} The default type url\n                     */\n                    RectArgs.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                        if (typeUrlPrefix === undefined) {\n                            typeUrlPrefix = \"type.googleapis.com\";\n                        }\n                        return typeUrlPrefix + \"/com.opensource.svga.ShapeEntity.RectArgs\";\n                    };\n\n                    return RectArgs;\n                })();\n\n                ShapeEntity.EllipseArgs = (function() {\n\n                    /**\n                     * Properties of an EllipseArgs.\n                     * @memberof com.opensource.svga.ShapeEntity\n                     * @interface IEllipseArgs\n                     * @property {number|null} [x] EllipseArgs x\n                     * @property {number|null} [y] EllipseArgs y\n                     * @property {number|null} [radiusX] EllipseArgs radiusX\n                     * @property {number|null} [radiusY] EllipseArgs radiusY\n                     */\n\n                    /**\n                     * Constructs a new EllipseArgs.\n                     * @memberof com.opensource.svga.ShapeEntity\n                     * @classdesc Represents an EllipseArgs.\n                     * @implements IEllipseArgs\n                     * @constructor\n                     * @param {com.opensource.svga.ShapeEntity.IEllipseArgs=} [p] Properties to set\n                     */\n                    function EllipseArgs(p) {\n                        if (p)\n                            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                                if (p[ks[i]] != null)\n                                    this[ks[i]] = p[ks[i]];\n                    }\n\n                    /**\n                     * EllipseArgs x.\n                     * @member {number} x\n                     * @memberof com.opensource.svga.ShapeEntity.EllipseArgs\n                     * @instance\n                     */\n                    EllipseArgs.prototype.x = 0;\n\n                    /**\n                     * EllipseArgs y.\n                     * @member {number} y\n                     * @memberof com.opensource.svga.ShapeEntity.EllipseArgs\n                     * @instance\n                     */\n                    EllipseArgs.prototype.y = 0;\n\n                    /**\n                     * EllipseArgs radiusX.\n                     * @member {number} radiusX\n                     * @memberof com.opensource.svga.ShapeEntity.EllipseArgs\n                     * @instance\n                     */\n                    EllipseArgs.prototype.radiusX = 0;\n\n                    /**\n                     * EllipseArgs radiusY.\n                     * @member {number} radiusY\n                     * @memberof com.opensource.svga.ShapeEntity.EllipseArgs\n                     * @instance\n                     */\n                    EllipseArgs.prototype.radiusY = 0;\n\n                    /**\n                     * Decodes an EllipseArgs message from the specified reader or buffer.\n                     * @function decode\n                     * @memberof com.opensource.svga.ShapeEntity.EllipseArgs\n                     * @static\n                     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                     * @param {number} [l] Message length if known beforehand\n                     * @returns {com.opensource.svga.ShapeEntity.EllipseArgs} EllipseArgs\n                     * @throws {Error} If the payload is not a reader or valid buffer\n                     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                     */\n                    EllipseArgs.decode = function decode(r, l) {\n                        if (!(r instanceof $Reader))\n                            r = $Reader.create(r);\n                        var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.ShapeEntity.EllipseArgs();\n                        while (r.pos < c) {\n                            var t = r.uint32();\n                            switch (t >>> 3) {\n                            case 1: {\n                                    m.x = r.float();\n                                    break;\n                                }\n                            case 2: {\n                                    m.y = r.float();\n                                    break;\n                                }\n                            case 3: {\n                                    m.radiusX = r.float();\n                                    break;\n                                }\n                            case 4: {\n                                    m.radiusY = r.float();\n                                    break;\n                                }\n                            default:\n                                r.skipType(t & 7);\n                                break;\n                            }\n                        }\n                        return m;\n                    };\n\n                    /**\n                     * Gets the default type url for EllipseArgs\n                     * @function getTypeUrl\n                     * @memberof com.opensource.svga.ShapeEntity.EllipseArgs\n                     * @static\n                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                     * @returns {string} The default type url\n                     */\n                    EllipseArgs.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                        if (typeUrlPrefix === undefined) {\n                            typeUrlPrefix = \"type.googleapis.com\";\n                        }\n                        return typeUrlPrefix + \"/com.opensource.svga.ShapeEntity.EllipseArgs\";\n                    };\n\n                    return EllipseArgs;\n                })();\n\n                ShapeEntity.ShapeStyle = (function() {\n\n                    /**\n                     * Properties of a ShapeStyle.\n                     * @memberof com.opensource.svga.ShapeEntity\n                     * @interface IShapeStyle\n                     * @property {com.opensource.svga.ShapeEntity.ShapeStyle.IRGBAColor|null} [fill] ShapeStyle fill\n                     * @property {com.opensource.svga.ShapeEntity.ShapeStyle.IRGBAColor|null} [stroke] ShapeStyle stroke\n                     * @property {number|null} [strokeWidth] ShapeStyle strokeWidth\n                     * @property {com.opensource.svga.ShapeEntity.ShapeStyle.LineCap|null} [lineCap] ShapeStyle lineCap\n                     * @property {com.opensource.svga.ShapeEntity.ShapeStyle.LineJoin|null} [lineJoin] ShapeStyle lineJoin\n                     * @property {number|null} [miterLimit] ShapeStyle miterLimit\n                     * @property {number|null} [lineDashI] ShapeStyle lineDashI\n                     * @property {number|null} [lineDashII] ShapeStyle lineDashII\n                     * @property {number|null} [lineDashIII] ShapeStyle lineDashIII\n                     */\n\n                    /**\n                     * Constructs a new ShapeStyle.\n                     * @memberof com.opensource.svga.ShapeEntity\n                     * @classdesc Represents a ShapeStyle.\n                     * @implements IShapeStyle\n                     * @constructor\n                     * @param {com.opensource.svga.ShapeEntity.IShapeStyle=} [p] Properties to set\n                     */\n                    function ShapeStyle(p) {\n                        if (p)\n                            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                                if (p[ks[i]] != null)\n                                    this[ks[i]] = p[ks[i]];\n                    }\n\n                    /**\n                     * ShapeStyle fill.\n                     * @member {com.opensource.svga.ShapeEntity.ShapeStyle.IRGBAColor|null|undefined} fill\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.fill = null;\n\n                    /**\n                     * ShapeStyle stroke.\n                     * @member {com.opensource.svga.ShapeEntity.ShapeStyle.IRGBAColor|null|undefined} stroke\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.stroke = null;\n\n                    /**\n                     * ShapeStyle strokeWidth.\n                     * @member {number} strokeWidth\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.strokeWidth = 0;\n\n                    /**\n                     * ShapeStyle lineCap.\n                     * @member {com.opensource.svga.ShapeEntity.ShapeStyle.LineCap} lineCap\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.lineCap = 0;\n\n                    /**\n                     * ShapeStyle lineJoin.\n                     * @member {com.opensource.svga.ShapeEntity.ShapeStyle.LineJoin} lineJoin\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.lineJoin = 0;\n\n                    /**\n                     * ShapeStyle miterLimit.\n                     * @member {number} miterLimit\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.miterLimit = 0;\n\n                    /**\n                     * ShapeStyle lineDashI.\n                     * @member {number} lineDashI\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.lineDashI = 0;\n\n                    /**\n                     * ShapeStyle lineDashII.\n                     * @member {number} lineDashII\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.lineDashII = 0;\n\n                    /**\n                     * ShapeStyle lineDashIII.\n                     * @member {number} lineDashIII\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @instance\n                     */\n                    ShapeStyle.prototype.lineDashIII = 0;\n\n                    /**\n                     * Decodes a ShapeStyle message from the specified reader or buffer.\n                     * @function decode\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @static\n                     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                     * @param {number} [l] Message length if known beforehand\n                     * @returns {com.opensource.svga.ShapeEntity.ShapeStyle} ShapeStyle\n                     * @throws {Error} If the payload is not a reader or valid buffer\n                     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                     */\n                    ShapeStyle.decode = function decode(r, l) {\n                        if (!(r instanceof $Reader))\n                            r = $Reader.create(r);\n                        var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.ShapeEntity.ShapeStyle();\n                        while (r.pos < c) {\n                            var t = r.uint32();\n                            switch (t >>> 3) {\n                            case 1: {\n                                    m.fill = $root.com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor.decode(r, r.uint32());\n                                    break;\n                                }\n                            case 2: {\n                                    m.stroke = $root.com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor.decode(r, r.uint32());\n                                    break;\n                                }\n                            case 3: {\n                                    m.strokeWidth = r.float();\n                                    break;\n                                }\n                            case 4: {\n                                    m.lineCap = r.int32();\n                                    break;\n                                }\n                            case 5: {\n                                    m.lineJoin = r.int32();\n                                    break;\n                                }\n                            case 6: {\n                                    m.miterLimit = r.float();\n                                    break;\n                                }\n                            case 7: {\n                                    m.lineDashI = r.float();\n                                    break;\n                                }\n                            case 8: {\n                                    m.lineDashII = r.float();\n                                    break;\n                                }\n                            case 9: {\n                                    m.lineDashIII = r.float();\n                                    break;\n                                }\n                            default:\n                                r.skipType(t & 7);\n                                break;\n                            }\n                        }\n                        return m;\n                    };\n\n                    /**\n                     * Gets the default type url for ShapeStyle\n                     * @function getTypeUrl\n                     * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                     * @static\n                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                     * @returns {string} The default type url\n                     */\n                    ShapeStyle.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                        if (typeUrlPrefix === undefined) {\n                            typeUrlPrefix = \"type.googleapis.com\";\n                        }\n                        return typeUrlPrefix + \"/com.opensource.svga.ShapeEntity.ShapeStyle\";\n                    };\n\n                    ShapeStyle.RGBAColor = (function() {\n\n                        /**\n                         * Properties of a RGBAColor.\n                         * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                         * @interface IRGBAColor\n                         * @property {number|null} [r] RGBAColor r\n                         * @property {number|null} [g] RGBAColor g\n                         * @property {number|null} [b] RGBAColor b\n                         * @property {number|null} [a] RGBAColor a\n                         */\n\n                        /**\n                         * Constructs a new RGBAColor.\n                         * @memberof com.opensource.svga.ShapeEntity.ShapeStyle\n                         * @classdesc Represents a RGBAColor.\n                         * @implements IRGBAColor\n                         * @constructor\n                         * @param {com.opensource.svga.ShapeEntity.ShapeStyle.IRGBAColor=} [p] Properties to set\n                         */\n                        function RGBAColor(p) {\n                            if (p)\n                                for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                                    if (p[ks[i]] != null)\n                                        this[ks[i]] = p[ks[i]];\n                        }\n\n                        /**\n                         * RGBAColor r.\n                         * @member {number} r\n                         * @memberof com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor\n                         * @instance\n                         */\n                        RGBAColor.prototype.r = 0;\n\n                        /**\n                         * RGBAColor g.\n                         * @member {number} g\n                         * @memberof com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor\n                         * @instance\n                         */\n                        RGBAColor.prototype.g = 0;\n\n                        /**\n                         * RGBAColor b.\n                         * @member {number} b\n                         * @memberof com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor\n                         * @instance\n                         */\n                        RGBAColor.prototype.b = 0;\n\n                        /**\n                         * RGBAColor a.\n                         * @member {number} a\n                         * @memberof com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor\n                         * @instance\n                         */\n                        RGBAColor.prototype.a = 0;\n\n                        /**\n                         * Decodes a RGBAColor message from the specified reader or buffer.\n                         * @function decode\n                         * @memberof com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor\n                         * @static\n                         * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                         * @param {number} [l] Message length if known beforehand\n                         * @returns {com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor} RGBAColor\n                         * @throws {Error} If the payload is not a reader or valid buffer\n                         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                         */\n                        RGBAColor.decode = function decode(r, l) {\n                            if (!(r instanceof $Reader))\n                                r = $Reader.create(r);\n                            var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor();\n                            while (r.pos < c) {\n                                var t = r.uint32();\n                                switch (t >>> 3) {\n                                case 1: {\n                                        m.r = r.float();\n                                        break;\n                                    }\n                                case 2: {\n                                        m.g = r.float();\n                                        break;\n                                    }\n                                case 3: {\n                                        m.b = r.float();\n                                        break;\n                                    }\n                                case 4: {\n                                        m.a = r.float();\n                                        break;\n                                    }\n                                default:\n                                    r.skipType(t & 7);\n                                    break;\n                                }\n                            }\n                            return m;\n                        };\n\n                        /**\n                         * Gets the default type url for RGBAColor\n                         * @function getTypeUrl\n                         * @memberof com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor\n                         * @static\n                         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                         * @returns {string} The default type url\n                         */\n                        RGBAColor.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                            if (typeUrlPrefix === undefined) {\n                                typeUrlPrefix = \"type.googleapis.com\";\n                            }\n                            return typeUrlPrefix + \"/com.opensource.svga.ShapeEntity.ShapeStyle.RGBAColor\";\n                        };\n\n                        return RGBAColor;\n                    })();\n\n                    /**\n                     * LineCap enum.\n                     * @name com.opensource.svga.ShapeEntity.ShapeStyle.LineCap\n                     * @enum {number}\n                     * @property {number} LineCap_BUTT=0 LineCap_BUTT value\n                     * @property {number} LineCap_ROUND=1 LineCap_ROUND value\n                     * @property {number} LineCap_SQUARE=2 LineCap_SQUARE value\n                     */\n                    ShapeStyle.LineCap = (function() {\n                        const valuesById = {}, values = Object.create(valuesById);\n                        values[valuesById[0] = \"LineCap_BUTT\"] = 0;\n                        values[valuesById[1] = \"LineCap_ROUND\"] = 1;\n                        values[valuesById[2] = \"LineCap_SQUARE\"] = 2;\n                        return values;\n                    })();\n\n                    /**\n                     * LineJoin enum.\n                     * @name com.opensource.svga.ShapeEntity.ShapeStyle.LineJoin\n                     * @enum {number}\n                     * @property {number} LineJoin_MITER=0 LineJoin_MITER value\n                     * @property {number} LineJoin_ROUND=1 LineJoin_ROUND value\n                     * @property {number} LineJoin_BEVEL=2 LineJoin_BEVEL value\n                     */\n                    ShapeStyle.LineJoin = (function() {\n                        const valuesById = {}, values = Object.create(valuesById);\n                        values[valuesById[0] = \"LineJoin_MITER\"] = 0;\n                        values[valuesById[1] = \"LineJoin_ROUND\"] = 1;\n                        values[valuesById[2] = \"LineJoin_BEVEL\"] = 2;\n                        return values;\n                    })();\n\n                    return ShapeStyle;\n                })();\n\n                return ShapeEntity;\n            })();\n\n            svga.FrameEntity = (function() {\n\n                /**\n                 * Properties of a FrameEntity.\n                 * @memberof com.opensource.svga\n                 * @interface IFrameEntity\n                 * @property {number|null} [alpha] FrameEntity alpha\n                 * @property {com.opensource.svga.ILayout|null} [layout] FrameEntity layout\n                 * @property {com.opensource.svga.ITransform|null} [transform] FrameEntity transform\n                 * @property {string|null} [clipPath] FrameEntity clipPath\n                 * @property {Array.<com.opensource.svga.IShapeEntity>|null} [shapes] FrameEntity shapes\n                 */\n\n                /**\n                 * Constructs a new FrameEntity.\n                 * @memberof com.opensource.svga\n                 * @classdesc Represents a FrameEntity.\n                 * @implements IFrameEntity\n                 * @constructor\n                 * @param {com.opensource.svga.IFrameEntity=} [p] Properties to set\n                 */\n                function FrameEntity(p) {\n                    this.shapes = [];\n                    if (p)\n                        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                            if (p[ks[i]] != null)\n                                this[ks[i]] = p[ks[i]];\n                }\n\n                /**\n                 * FrameEntity alpha.\n                 * @member {number} alpha\n                 * @memberof com.opensource.svga.FrameEntity\n                 * @instance\n                 */\n                FrameEntity.prototype.alpha = 0;\n\n                /**\n                 * FrameEntity layout.\n                 * @member {com.opensource.svga.ILayout|null|undefined} layout\n                 * @memberof com.opensource.svga.FrameEntity\n                 * @instance\n                 */\n                FrameEntity.prototype.layout = null;\n\n                /**\n                 * FrameEntity transform.\n                 * @member {com.opensource.svga.ITransform|null|undefined} transform\n                 * @memberof com.opensource.svga.FrameEntity\n                 * @instance\n                 */\n                FrameEntity.prototype.transform = null;\n\n                /**\n                 * FrameEntity clipPath.\n                 * @member {string} clipPath\n                 * @memberof com.opensource.svga.FrameEntity\n                 * @instance\n                 */\n                FrameEntity.prototype.clipPath = \"\";\n\n                /**\n                 * FrameEntity shapes.\n                 * @member {Array.<com.opensource.svga.IShapeEntity>} shapes\n                 * @memberof com.opensource.svga.FrameEntity\n                 * @instance\n                 */\n                FrameEntity.prototype.shapes = $util.emptyArray;\n\n                /**\n                 * Decodes a FrameEntity message from the specified reader or buffer.\n                 * @function decode\n                 * @memberof com.opensource.svga.FrameEntity\n                 * @static\n                 * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                 * @param {number} [l] Message length if known beforehand\n                 * @returns {com.opensource.svga.FrameEntity} FrameEntity\n                 * @throws {Error} If the payload is not a reader or valid buffer\n                 * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                 */\n                FrameEntity.decode = function decode(r, l) {\n                    if (!(r instanceof $Reader))\n                        r = $Reader.create(r);\n                    var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.FrameEntity();\n                    while (r.pos < c) {\n                        var t = r.uint32();\n                        switch (t >>> 3) {\n                        case 1: {\n                                m.alpha = r.float();\n                                break;\n                            }\n                        case 2: {\n                                m.layout = $root.com.opensource.svga.Layout.decode(r, r.uint32());\n                                break;\n                            }\n                        case 3: {\n                                m.transform = $root.com.opensource.svga.Transform.decode(r, r.uint32());\n                                break;\n                            }\n                        case 4: {\n                                m.clipPath = r.string();\n                                break;\n                            }\n                        case 5: {\n                                if (!(m.shapes && m.shapes.length))\n                                    m.shapes = [];\n                                m.shapes.push($root.com.opensource.svga.ShapeEntity.decode(r, r.uint32()));\n                                break;\n                            }\n                        default:\n                            r.skipType(t & 7);\n                            break;\n                        }\n                    }\n                    return m;\n                };\n\n                /**\n                 * Gets the default type url for FrameEntity\n                 * @function getTypeUrl\n                 * @memberof com.opensource.svga.FrameEntity\n                 * @static\n                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                 * @returns {string} The default type url\n                 */\n                FrameEntity.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                    if (typeUrlPrefix === undefined) {\n                        typeUrlPrefix = \"type.googleapis.com\";\n                    }\n                    return typeUrlPrefix + \"/com.opensource.svga.FrameEntity\";\n                };\n\n                return FrameEntity;\n            })();\n\n            svga.MovieEntity = (function() {\n\n                /**\n                 * Properties of a MovieEntity.\n                 * @memberof com.opensource.svga\n                 * @interface IMovieEntity\n                 * @property {string|null} [version] MovieEntity version\n                 * @property {com.opensource.svga.IMovieParams|null} [params] MovieEntity params\n                 * @property {Object.<string,Uint8Array>|null} [images] MovieEntity images\n                 * @property {Array.<com.opensource.svga.ISpriteEntity>|null} [sprites] MovieEntity sprites\n                 * @property {Array.<com.opensource.svga.IAudioEntity>|null} [audios] MovieEntity audios\n                 */\n\n                /**\n                 * Constructs a new MovieEntity.\n                 * @memberof com.opensource.svga\n                 * @classdesc Represents a MovieEntity.\n                 * @implements IMovieEntity\n                 * @constructor\n                 * @param {com.opensource.svga.IMovieEntity=} [p] Properties to set\n                 */\n                function MovieEntity(p) {\n                    this.images = {};\n                    this.sprites = [];\n                    this.audios = [];\n                    if (p)\n                        for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n                            if (p[ks[i]] != null)\n                                this[ks[i]] = p[ks[i]];\n                }\n\n                /**\n                 * MovieEntity version.\n                 * @member {string} version\n                 * @memberof com.opensource.svga.MovieEntity\n                 * @instance\n                 */\n                MovieEntity.prototype.version = \"\";\n\n                /**\n                 * MovieEntity params.\n                 * @member {com.opensource.svga.IMovieParams|null|undefined} params\n                 * @memberof com.opensource.svga.MovieEntity\n                 * @instance\n                 */\n                MovieEntity.prototype.params = null;\n\n                /**\n                 * MovieEntity images.\n                 * @member {Object.<string,Uint8Array>} images\n                 * @memberof com.opensource.svga.MovieEntity\n                 * @instance\n                 */\n                MovieEntity.prototype.images = $util.emptyObject;\n\n                /**\n                 * MovieEntity sprites.\n                 * @member {Array.<com.opensource.svga.ISpriteEntity>} sprites\n                 * @memberof com.opensource.svga.MovieEntity\n                 * @instance\n                 */\n                MovieEntity.prototype.sprites = $util.emptyArray;\n\n                /**\n                 * MovieEntity audios.\n                 * @member {Array.<com.opensource.svga.IAudioEntity>} audios\n                 * @memberof com.opensource.svga.MovieEntity\n                 * @instance\n                 */\n                MovieEntity.prototype.audios = $util.emptyArray;\n\n                /**\n                 * Decodes a MovieEntity message from the specified reader or buffer.\n                 * @function decode\n                 * @memberof com.opensource.svga.MovieEntity\n                 * @static\n                 * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n                 * @param {number} [l] Message length if known beforehand\n                 * @returns {com.opensource.svga.MovieEntity} MovieEntity\n                 * @throws {Error} If the payload is not a reader or valid buffer\n                 * @throws {$protobuf.util.ProtocolError} If required fields are missing\n                 */\n                MovieEntity.decode = function decode(r, l) {\n                    if (!(r instanceof $Reader))\n                        r = $Reader.create(r);\n                    var c = l === undefined ? r.len : r.pos + l, m = new $root.com.opensource.svga.MovieEntity(), k, value;\n                    while (r.pos < c) {\n                        var t = r.uint32();\n                        switch (t >>> 3) {\n                        case 1: {\n                                m.version = r.string();\n                                break;\n                            }\n                        case 2: {\n                                m.params = $root.com.opensource.svga.MovieParams.decode(r, r.uint32());\n                                break;\n                            }\n                        case 3: {\n                                if (m.images === $util.emptyObject)\n                                    m.images = {};\n                                var c2 = r.uint32() + r.pos;\n                                k = \"\";\n                                value = [];\n                                while (r.pos < c2) {\n                                    var tag2 = r.uint32();\n                                    switch (tag2 >>> 3) {\n                                    case 1:\n                                        k = r.string();\n                                        break;\n                                    case 2:\n                                        value = r.bytes();\n                                        break;\n                                    default:\n                                        r.skipType(tag2 & 7);\n                                        break;\n                                    }\n                                }\n                                m.images[k] = value;\n                                break;\n                            }\n                        case 4: {\n                                if (!(m.sprites && m.sprites.length))\n                                    m.sprites = [];\n                                m.sprites.push($root.com.opensource.svga.SpriteEntity.decode(r, r.uint32()));\n                                break;\n                            }\n                        case 5: {\n                                if (!(m.audios && m.audios.length))\n                                    m.audios = [];\n                                m.audios.push($root.com.opensource.svga.AudioEntity.decode(r, r.uint32()));\n                                break;\n                            }\n                        default:\n                            r.skipType(t & 7);\n                            break;\n                        }\n                    }\n                    return m;\n                };\n\n                /**\n                 * Gets the default type url for MovieEntity\n                 * @function getTypeUrl\n                 * @memberof com.opensource.svga.MovieEntity\n                 * @static\n                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n                 * @returns {string} The default type url\n                 */\n                MovieEntity.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n                    if (typeUrlPrefix === undefined) {\n                        typeUrlPrefix = \"type.googleapis.com\";\n                    }\n                    return typeUrlPrefix + \"/com.opensource.svga.MovieEntity\";\n                };\n\n                return MovieEntity;\n            })();\n\n            return svga;\n        })();\n\n        return opensource;\n    })();\n\n    return com;\n})();\n\nexport { $root as default };\n","import { com } from '../proto/svga'\nimport svga = com.opensource.svga\n\nexport interface IParseStyles extends svga.ShapeEntity.ShapeStyle {\n  fillStr: string\n  strokeStr: string\n  lineJoinStr: CanvasLineJoin\n  lineCapStr: CanvasLineCap\n}\n\ninterface ShapeEntity {\n  /** ShapeEntity type. */\n  type: svga.ShapeEntity.ShapeType\n  /** ShapeEntity shape. */\n  shape?: svga.ShapeEntity.ShapeArgs\n  /** ShapeEntity rect. */\n  rect?: svga.ShapeEntity.RectArgs\n  /** ShapeEntity ellipse. */\n  ellipse?: svga.ShapeEntity.EllipseArgs\n  /** ShapeEntity styles. */\n  styles?: IParseStyles\n  /** ShapeEntity transform. */\n  transform?: svga.Transform\n  /** ShapeEntity args. */\n  args?: 'shape' | 'rect' | 'ellipse'\n}\n\nexport default class FrameEntity {\n  static lastShapes: ShapeEntity[] = []\n\n  public alpha: number\n  public layout: svga.Layout\n  public transform: svga.Transform\n  public clipPath: string | null\n  public shapes: ShapeEntity[] = []\n\n  constructor(spec: svga.IFrameEntity) {\n    this.alpha = spec.alpha || 0.0\n\n    this.layout = {\n      x: spec.layout?.x || 0.0,\n      y: spec.layout?.y || 0.0,\n      width: spec.layout?.width || 0.0,\n      height: spec.layout?.height || 0.0,\n    }\n\n    this.transform = {\n      a: spec.transform?.a || 1.0,\n      b: spec.transform?.b || 0.0,\n      c: spec.transform?.c || 0.0,\n      d: spec.transform?.d || 1.0,\n      tx: spec.transform?.tx || 0.0,\n      ty: spec.transform?.ty || 0.0,\n    }\n\n    this.clipPath = spec.clipPath || null\n\n    if (spec.shapes) {\n      if (\n        spec.shapes[0] &&\n        spec.shapes[0].type === svga.ShapeEntity.ShapeType.KEEP\n      ) {\n        this.shapes = FrameEntity.lastShapes\n      } else {\n        const shapes = (spec.shapes as ShapeEntity[]).map((shape) => {\n          if (!Object.prototype.hasOwnProperty.call(shape, 'type')) {\n            Object.defineProperty(shape, 'type', {\n              value: shape.type,\n              enumerable: true,\n            })\n          }\n\n          if (shape.styles) {\n            if (shape.styles.fill) {\n              const { r, g, b, a } = shape.styles\n                .fill as svga.ShapeEntity.ShapeStyle.RGBAColor\n              shape.styles.fillStr = `rgba(${parseInt(\n                (r * 255).toString(),\n              )}, ${parseInt((g * 255).toString())}, ${parseInt(\n                (b * 255).toString(),\n              )}, ${a})`\n            }\n\n            if (shape.styles.stroke) {\n              const { r, g, b, a } = shape.styles\n                .stroke as svga.ShapeEntity.ShapeStyle.RGBAColor\n              shape.styles.strokeStr = `rgba(${parseInt(\n                (r * 255).toString(),\n              )}, ${parseInt((g * 255).toString())}, ${parseInt(\n                (b * 255).toString(),\n              )}, ${a})`\n            }\n\n            switch (shape.styles.lineJoin) {\n              case svga.ShapeEntity.ShapeStyle.LineJoin.LineJoin_MITER:\n                shape.styles.lineJoinStr = 'miter'\n                break\n              case svga.ShapeEntity.ShapeStyle.LineJoin.LineJoin_ROUND:\n                shape.styles.lineJoinStr = 'round'\n                break\n              case svga.ShapeEntity.ShapeStyle.LineJoin.LineJoin_BEVEL:\n                shape.styles.lineJoinStr = 'bevel'\n                break\n            }\n\n            switch (shape.styles.lineCap) {\n              case svga.ShapeEntity.ShapeStyle.LineCap.LineCap_BUTT:\n                shape.styles.lineCapStr = 'butt'\n                break\n              case svga.ShapeEntity.ShapeStyle.LineCap.LineCap_ROUND:\n                shape.styles.lineCapStr = 'round'\n                break\n              case svga.ShapeEntity.ShapeStyle.LineCap.LineCap_SQUARE:\n                shape.styles.lineCapStr = 'square'\n                break\n            }\n          }\n          return shape\n        })\n\n        FrameEntity.lastShapes = shapes\n        this.shapes = shapes\n      }\n    }\n  }\n}\n","import { com } from '../proto/svga'\nimport FrameEntity from './frame-entity'\nimport svga = com.opensource.svga\n\nexport interface VideoSize {\n  width: number\n  height: number\n}\n\nexport interface ImageSources {\n  [key: string]: CanvasImageSource | ArrayBuffer\n}\n\ninterface AudioSource extends svga.AudioEntity {\n  source: ArrayBuffer\n}\n\nexport interface AudioSources {\n  [key: string]: AudioSource\n}\n\nexport type DynamicElement =\n  | CanvasImageSource\n  | {\n      source: CanvasImageSource\n      fit: 'contain' | 'cover' | 'fill' | 'none'\n    }\n\nexport interface DynamicElements {\n  [key: string]: DynamicElement | undefined\n}\n\nexport interface Sprite {\n  imageKey: string | null\n  frames: Array<FrameEntity>\n}\n\nexport default class VideoEntity {\n  public version: string\n  public videoSize: VideoSize = { width: 0, height: 0 }\n  public FPS: number\n  public frames: number\n  public images: ImageSources = {}\n  public audios: AudioSources = {}\n  public dynamicElements: DynamicElements = {}\n  public sprites: Array<Sprite> = []\n\n  constructor(\n    spec: svga.MovieEntity,\n    images: ImageSources,\n    audios: AudioSources,\n  ) {\n    this.version = spec.version\n    this.videoSize.width = spec.params?.viewBoxWidth || 0.0\n    this.videoSize.height = spec.params?.viewBoxHeight || 0.0\n    this.FPS = spec.params?.fps || 20\n    this.frames = spec.params?.frames || 0\n\n    this.sprites = spec.sprites.map(({ imageKey = null, frames }) => {\n      return {\n        imageKey,\n        frames: (frames || []).map((obj) => new FrameEntity(obj)),\n      }\n    })\n\n    this.images = images\n    this.audios = audios\n  }\n}\n","import ParserWorker from './worker.ts?worker&inline'\nimport VideoEntity from './video-entity'\nimport { getVersion, Version } from './version'\n\nexport * from './frame-entity'\nexport * from './video-entity'\nexport * from './version'\n\nexport default class Parser {\n  private static worker: Worker | null\n  private static destroying = false\n  private static usageNO = 1\n  private static workingCount = 0\n\n  constructor() {\n    Parser.ensureWorker()\n  }\n\n  /**\n   * Ensure worker instance available\n   * @private\n   */\n  private static ensureWorker(): Worker {\n    this.worker = this.worker || new ParserWorker()\n    this.destroying = false\n    return this.worker\n  }\n\n  /**\n   * Destroy worker\n   * @private\n   */\n  private static destroyWorker(): void {\n    this.worker?.terminate()\n    this.worker = null\n    this.destroying = false\n  }\n\n  /**\n   * parse SVGA ArrayBuffer data to VideoEntity\n   * @param data\n   */\n  public do(data: ArrayBuffer): Promise<VideoEntity> {\n    const dataHeader = new Uint8Array(data, 0, 4)\n\n    if (getVersion(dataHeader) === Version.VERSION_1) {\n      throw new Error('this parser does not support version@1.x of svga.')\n    }\n\n    if (!data) {\n      throw new Error('Parser Data not found')\n    }\n\n    return new Promise((resolve) => {\n      const worker = Parser.ensureWorker()\n      const no = Parser.usageNO++\n      const messageHandler = ({\n        data: { result, id },\n      }: {\n        data: { result: VideoEntity; id: number }\n      }) => {\n        if (id === no) {\n          resolve(result)\n\n          worker.removeEventListener('message', messageHandler)\n          Parser.workingCount--\n\n          if (Parser.destroying) {\n            this.destroy()\n          }\n        }\n      }\n\n      Parser.workingCount++\n\n      worker.addEventListener('message', messageHandler)\n      worker.postMessage({ data, id: no }, [data])\n    })\n  }\n\n  /**\n   * Destroy the web worker under the hood, may delay if still working\n   */\n  public destroy(): void {\n    if (Parser.worker === null) {\n      return\n    }\n\n    if (Parser.workingCount > 0) {\n      Parser.destroying = true\n      return\n    }\n\n    Parser.destroyWorker()\n  }\n}\n","import { IParseStyles } from '../../parser'\nimport { com } from '../../proto/svga'\nimport svga = com.opensource.svga\n\nexport function resetShapeStyles(\n  context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n  styles?: IParseStyles,\n): void {\n  if (!styles) {\n    return\n  }\n\n  context.strokeStyle = styles?.strokeStr || 'transparent'\n\n  if (styles) {\n    context.lineWidth = styles.strokeWidth\n    context.lineCap = styles.lineCapStr\n    context.lineJoin = styles.lineJoinStr\n    context.miterLimit = styles.miterLimit\n  }\n\n  context.fillStyle = styles?.fillStr || 'transparent'\n\n  if (styles.lineDashI || styles.lineDashII || styles.lineDashIII) {\n    context.setLineDash([\n      styles.lineDashI ? styles.lineDashI : 0,\n      styles.lineDashII ? styles.lineDashII : 0,\n      styles.lineDashIII ? styles.lineDashIII : 0,\n    ])\n  }\n}\n\nexport function applyTransform(\n  context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n  transform?: svga.Transform,\n): void {\n  if (!transform) {\n    return\n  }\n\n  context.transform(\n    transform.a || 1.0,\n    transform.b || 0,\n    transform.c || 0,\n    transform.d || 1.0,\n    transform.tx || 0,\n    transform.ty || 0,\n  )\n}\n","import { com } from '../../proto/svga'\nimport { IParseStyles } from '../../parser'\nimport { applyTransform, resetShapeStyles } from './index'\nimport svga = com.opensource.svga\n\ninterface IEllipsePath {\n  x: number\n  y: number\n  transform?: svga.Transform\n  styles?: IParseStyles\n  radiusX: number\n  radiusY: number\n}\n\nexport function drawEllipse(\n  context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n  obj: IEllipsePath,\n): void {\n  context.save()\n\n  resetShapeStyles(context, obj.styles)\n\n  applyTransform(context, obj.transform)\n\n  const x = obj.x - obj.radiusX\n  const y = obj.y - obj.radiusY\n  const w = obj.radiusX * 2\n  const h = obj.radiusY * 2\n\n  const kappa = 0.5522848\n\n  const ox = (w / 2) * kappa\n  const oy = (h / 2) * kappa\n\n  const xe = x + w\n  const ye = y + h\n\n  const xm = x + w / 2\n  const ym = y + h / 2\n\n  context.beginPath()\n  context.moveTo(x, ym)\n  context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y)\n  context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym)\n  context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye)\n  context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym)\n\n  if (obj.styles?.fill) {\n    context.fill()\n  }\n  if (obj.styles?.stroke) {\n    context.stroke()\n  }\n\n  context.restore()\n}\n","import { com } from '../../proto/svga'\nimport { IParseStyles } from '../../parser'\nimport { applyTransform, resetShapeStyles } from './index'\nimport svga = com.opensource.svga\n\ninterface IRectPath {\n  x: number\n  y: number\n  width: number\n  height: number\n  cornerRadius: number\n  transform?: svga.Transform\n  styles?: IParseStyles\n}\n\nexport function drawRect(\n  context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n  obj: IRectPath,\n): void {\n  context.save()\n\n  resetShapeStyles(context, obj.styles)\n\n  applyTransform(context, obj.transform)\n\n  const x = obj.x\n  const y = obj.y\n  const width = obj.width\n  const height = obj.height\n  let radius = obj.cornerRadius\n\n  if (width < 2 * radius) {\n    radius = width / 2\n  }\n\n  if (height < 2 * radius) {\n    radius = height / 2\n  }\n\n  context.beginPath()\n  context.moveTo(x + radius, y)\n  context.arcTo(x + width, y, x + width, y + height, radius)\n  context.arcTo(x + width, y + height, x, y + height, radius)\n  context.arcTo(x, y + height, x, y, radius)\n  context.arcTo(x, y, x + width, y, radius)\n\n  context.closePath()\n\n  if (obj.styles?.fill) {\n    context.fill()\n  }\n  if (obj.styles?.stroke) {\n    context.stroke()\n  }\n  context.restore()\n}\n","import { com } from '../../proto/svga'\nimport { IParseStyles } from '../../parser'\nimport { applyTransform, resetShapeStyles } from './index'\nimport svga = com.opensource.svga\n\nenum PathMethod {\n  M = 'M',\n  m = 'm',\n  L = 'L',\n  l = 'l',\n  H = 'H',\n  h = 'h',\n  V = 'V',\n  v = 'v',\n  C = 'C',\n  c = 'c',\n  S = 'S',\n  s = 's',\n  Q = 'Q',\n  q = 'q',\n  A = 'A',\n  a = 'a',\n  Z = 'Z',\n  z = 'z',\n}\n\ninterface IPoint {\n  x: number\n  y: number\n  x1: number\n  y1: number\n  x2: number\n  y2: number\n}\n\ninterface IBezierPath {\n  d: string\n  transform?: svga.Transform\n  styles?: IParseStyles\n}\n\nexport function drawBezier(\n  context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n  obj: IBezierPath,\n): void {\n  context.save()\n\n  resetShapeStyles(context, obj.styles)\n\n  applyTransform(context, obj.transform)\n\n  const currentPoint = { x: 0, y: 0, x1: 0, y1: 0, x2: 0, y2: 0 }\n\n  context.beginPath()\n\n  const d = obj.d.replace(/([a-zA-Z])/g, '|||$1 ').replace(/,/g, ' ')\n\n  d.split('|||').forEach((segment) => {\n    if (segment.length == 0) return\n    const firstLetter = segment.substr(0, 1) as PathMethod\n    const args = segment.substr(1).trim().split(' ')\n    drawBezierElement(context, currentPoint, firstLetter, args)\n  })\n\n  if (obj.styles?.fill) {\n    context.fill()\n  }\n  if (obj.styles?.stroke) {\n    context.stroke()\n  }\n\n  context.restore()\n}\n\nfunction drawBezierElement(\n  context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n  currentPoint: IPoint,\n  method: PathMethod,\n  args: string[],\n): void {\n  switch (method) {\n    case PathMethod.M:\n      currentPoint.x = Number(args[0])\n      currentPoint.y = Number(args[1])\n      context.moveTo(currentPoint.x, currentPoint.y)\n      break\n    case PathMethod.m:\n      currentPoint.x += Number(args[0])\n      currentPoint.y += Number(args[1])\n      context.moveTo(currentPoint.x, currentPoint.y)\n      break\n    case PathMethod.L:\n      currentPoint.x = Number(args[0])\n      currentPoint.y = Number(args[1])\n      context.lineTo(currentPoint.x, currentPoint.y)\n      break\n    case PathMethod.l:\n      currentPoint.x += Number(args[0])\n      currentPoint.y += Number(args[1])\n      context.lineTo(currentPoint.x, currentPoint.y)\n      break\n    case PathMethod.H:\n      currentPoint.x = Number(args[0])\n      context.lineTo(currentPoint.x, currentPoint.y)\n      break\n    case PathMethod.h:\n      currentPoint.x += Number(args[0])\n      context.lineTo(currentPoint.x, currentPoint.y)\n      break\n    case PathMethod.V:\n      currentPoint.y = Number(args[0])\n      context.lineTo(currentPoint.x, currentPoint.y)\n      break\n    case PathMethod.v:\n      currentPoint.y += Number(args[0])\n      context.lineTo(currentPoint.x, currentPoint.y)\n      break\n    case PathMethod.C:\n      currentPoint.x1 = Number(args[0])\n      currentPoint.y1 = Number(args[1])\n      currentPoint.x2 = Number(args[2])\n      currentPoint.y2 = Number(args[3])\n      currentPoint.x = Number(args[4])\n      currentPoint.y = Number(args[5])\n      context.bezierCurveTo(\n        currentPoint.x1,\n        currentPoint.y1,\n        currentPoint.x2,\n        currentPoint.y2,\n        currentPoint.x,\n        currentPoint.y,\n      )\n      break\n    case PathMethod.c:\n      currentPoint.x1 = currentPoint.x + Number(args[0])\n      currentPoint.y1 = currentPoint.y + Number(args[1])\n      currentPoint.x2 = currentPoint.x + Number(args[2])\n      currentPoint.y2 = currentPoint.y + Number(args[3])\n      currentPoint.x += Number(args[4])\n      currentPoint.y += Number(args[5])\n      context.bezierCurveTo(\n        currentPoint.x1,\n        currentPoint.y1,\n        currentPoint.x2,\n        currentPoint.y2,\n        currentPoint.x,\n        currentPoint.y,\n      )\n      break\n    case PathMethod.S:\n      if (\n        currentPoint.x1 &&\n        currentPoint.y1 &&\n        currentPoint.x2 &&\n        currentPoint.y2\n      ) {\n        currentPoint.x1 = currentPoint.x - currentPoint.x2 + currentPoint.x\n        currentPoint.y1 = currentPoint.y - currentPoint.y2 + currentPoint.y\n        currentPoint.x2 = Number(args[0])\n        currentPoint.y2 = Number(args[1])\n        currentPoint.x = Number(args[2])\n        currentPoint.y = Number(args[3])\n        context.bezierCurveTo(\n          currentPoint.x1,\n          currentPoint.y1,\n          currentPoint.x2,\n          currentPoint.y2,\n          currentPoint.x,\n          currentPoint.y,\n        )\n      } else {\n        currentPoint.x1 = Number(args[0])\n        currentPoint.y1 = Number(args[1])\n        currentPoint.x = Number(args[2])\n        currentPoint.y = Number(args[3])\n        context.quadraticCurveTo(\n          currentPoint.x1,\n          currentPoint.y1,\n          currentPoint.x,\n          currentPoint.y,\n        )\n      }\n      break\n    case PathMethod.s:\n      if (\n        currentPoint.x1 &&\n        currentPoint.y1 &&\n        currentPoint.x2 &&\n        currentPoint.y2\n      ) {\n        currentPoint.x1 = currentPoint.x - currentPoint.x2 + currentPoint.x\n        currentPoint.y1 = currentPoint.y - currentPoint.y2 + currentPoint.y\n        currentPoint.x2 = currentPoint.x + Number(args[0])\n        currentPoint.y2 = currentPoint.y + Number(args[1])\n        currentPoint.x += Number(args[2])\n        currentPoint.y += Number(args[3])\n        context.bezierCurveTo(\n          currentPoint.x1,\n          currentPoint.y1,\n          currentPoint.x2,\n          currentPoint.y2,\n          currentPoint.x,\n          currentPoint.y,\n        )\n      } else {\n        currentPoint.x1 = currentPoint.x + Number(args[0])\n        currentPoint.y1 = currentPoint.y + Number(args[1])\n        currentPoint.x += Number(args[2])\n        currentPoint.y += Number(args[3])\n        context.quadraticCurveTo(\n          currentPoint.x1,\n          currentPoint.y1,\n          currentPoint.x,\n          currentPoint.y,\n        )\n      }\n      break\n    case PathMethod.Q:\n      currentPoint.x1 = Number(args[0])\n      currentPoint.y1 = Number(args[1])\n      currentPoint.x = Number(args[2])\n      currentPoint.y = Number(args[3])\n      context.quadraticCurveTo(\n        currentPoint.x1,\n        currentPoint.y1,\n        currentPoint.x,\n        currentPoint.y,\n      )\n      break\n    case PathMethod.q:\n      currentPoint.x1 = currentPoint.x + Number(args[0])\n      currentPoint.y1 = currentPoint.y + Number(args[1])\n      currentPoint.x += Number(args[2])\n      currentPoint.y += Number(args[3])\n      context.quadraticCurveTo(\n        currentPoint.x1,\n        currentPoint.y1,\n        currentPoint.x,\n        currentPoint.y,\n      )\n      break\n    case PathMethod.A:\n      break\n    case PathMethod.a:\n      break\n    case PathMethod.Z:\n    case PathMethod.z:\n      context.closePath()\n      break\n    default:\n      break\n  }\n}\n","import { drawEllipse } from './path/ellipse-path'\nimport { drawRect } from './path/rect-path'\nimport { drawBezier } from './path/bezier-path'\nimport { DynamicElements, ImageSources, Sprite } from '../parser'\nimport { com } from '../proto/svga'\nimport svga = com.opensource.svga\n\nfunction render(\n  canvas: HTMLCanvasElement | OffscreenCanvas,\n  bitmapCache: ImageSources,\n  dynamicElements: DynamicElements,\n  sprites: Array<Sprite>,\n  currentFrame: number,\n): HTMLCanvasElement | OffscreenCanvas {\n  const context = canvas.getContext('2d')\n\n  if (context === null) {\n    console.error('svga render fail, 2d context null')\n    return canvas\n  }\n\n  sprites.forEach((sprite) => {\n    const frameItem = sprite.frames[currentFrame]\n\n    if (frameItem.alpha < 0.05) {\n      return\n    }\n\n    context.save()\n    context.globalAlpha = frameItem.alpha\n    context.transform(\n      frameItem.transform.a || 1,\n      frameItem.transform.b || 0,\n      frameItem.transform.c || 0,\n      frameItem.transform.d || 1,\n      frameItem.transform.tx || 0,\n      frameItem.transform.ty || 0,\n    )\n\n    const img = sprite.imageKey && bitmapCache[sprite.imageKey]\n    if (img) {\n      if (frameItem.clipPath) {\n        drawBezier(context, {\n          d: frameItem.clipPath,\n        })\n        context.clip()\n      }\n      if (img instanceof Image) {\n        context.drawImage(img, 0, 0, img.width, img.height)\n      } else {\n        context.drawImage(img as ImageBitmap, 0, 0)\n      }\n    }\n\n    const dynamicElement = sprite.imageKey && dynamicElements[sprite.imageKey]\n    if (dynamicElement) {\n      const { source, fit } =\n        'fit' in dynamicElement\n          ? dynamicElement\n          : { source: dynamicElement, fit: 'none' }\n      let sourceWidth: number, sourceHeight: number\n      if (source instanceof HTMLImageElement) {\n        sourceWidth = source.naturalWidth\n        sourceHeight = source.naturalHeight\n      } else if (source instanceof HTMLVideoElement) {\n        sourceWidth = source.videoWidth\n        sourceHeight = source.videoHeight\n      } else if (source instanceof SVGImageElement) {\n        sourceWidth = source.width.baseVal.value\n        sourceHeight = source.height.baseVal.value\n      } else if (source instanceof VideoFrame) {\n        sourceWidth = source.codedWidth\n        sourceHeight = source.codedHeight\n      } else {\n        sourceWidth = source?.width || 0\n        sourceHeight = source?.height || 0\n      }\n\n      switch (fit) {\n        case 'contain': {\n          const wRatio = frameItem.layout.width / sourceWidth\n          const hRatio = frameItem.layout.height / sourceHeight\n          const ratio = Math.min(wRatio, hRatio)\n          const width = ratio * sourceWidth\n          const height = ratio * sourceHeight\n          context.drawImage(\n            source,\n            (frameItem.layout.width - width) / 2,\n            (frameItem.layout.height - height) / 2,\n            width,\n            height,\n          )\n          break\n        }\n        case 'cover': {\n          const wRatio = frameItem.layout.width / sourceWidth\n          const hRatio = frameItem.layout.height / sourceHeight\n          const ratio = Math.max(wRatio, hRatio)\n          const width = ratio * sourceWidth\n          const height = ratio * sourceHeight\n          context.drawImage(\n            source,\n            (frameItem.layout.width - width) / 2,\n            (frameItem.layout.height - height) / 2,\n            width,\n            height,\n          )\n          break\n        }\n        case 'fill':\n          context.drawImage(\n            source,\n            0,\n            0,\n            frameItem.layout.width,\n            frameItem.layout.height,\n          )\n          break\n        case 'none':\n        default:\n          context.drawImage(\n            source,\n            (frameItem.layout.width - sourceWidth) / 2,\n            (frameItem.layout.height - sourceHeight) / 2,\n          )\n          break\n      }\n    }\n\n    frameItem.shapes &&\n      frameItem.shapes.forEach((shape) => {\n        if (\n          shape.type === svga.ShapeEntity.ShapeType.SHAPE &&\n          shape.shape &&\n          shape.shape.d\n        ) {\n          drawBezier(context, {\n            d: shape.shape.d,\n            transform: shape.transform,\n            styles: shape.styles,\n          })\n        } else if (\n          shape.type === svga.ShapeEntity.ShapeType.ELLIPSE &&\n          shape.ellipse\n        ) {\n          drawEllipse(context, {\n            x: shape.ellipse.x || 0.0,\n            y: shape.ellipse.y || 0.0,\n            radiusX: shape.ellipse.radiusX || 0.0,\n            radiusY: shape.ellipse.radiusY || 0.0,\n            transform: shape.transform,\n            styles: shape.styles,\n          })\n        } else if (\n          shape.type === svga.ShapeEntity.ShapeType.RECT &&\n          shape.rect\n        ) {\n          drawRect(context, {\n            x: shape.rect.x || 0.0,\n            y: shape.rect.y || 0.0,\n            width: shape.rect.width || 0.0,\n            height: shape.rect.height || 0.0,\n            cornerRadius: shape.rect.cornerRadius || 0.0,\n            transform: shape.transform,\n            styles: shape.styles,\n          })\n        }\n      })\n    context.restore()\n  })\n\n  return canvas\n}\n\nexport default render\n","import render from './offscreen.canvas.render'\nimport { com } from '../proto/svga'\nimport VideoEntity, {\n  DynamicElements,\n  ImageSources,\n  Sprite,\n} from '../parser/video-entity'\nimport svga = com.opensource.svga\n\ninterface AudioConfig extends svga.AudioEntity {\n  audio: HTMLAudioElement\n}\n\nfunction polyfillCreateImageBitmap() {\n  /* Safari and Edge polyfill for createImageBitmap\n   * https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap\n   */\n  if (!('createImageBitmap' in window)) {\n    Object.assign(window, {\n      createImageBitmap: async function (blob: Blob) {\n        return new Promise((resolve, reject) => {\n          const img = document.createElement('img')\n          img.addEventListener('load', function () {\n            resolve(this)\n          })\n          img.addEventListener('error', function (e) {\n            // console.log('createImageBitmap error', e);\n            reject(e)\n          })\n          img.src = URL.createObjectURL(blob)\n        })\n      },\n    })\n  }\n}\n\nexport default class Renderer {\n  private readonly target: HTMLCanvasElement\n  private audios: HTMLAudioElement[] = []\n  private audioConfigs: { [frame: number]: AudioConfig[] | undefined } = {}\n  isCacheFrame = false\n  private readonly frameCache: { [frame: number]: ImageBitmap } = {}\n  private readonly offscreenCanvas: HTMLCanvasElement | OffscreenCanvas\n\n  constructor(target: HTMLCanvasElement) {\n    polyfillCreateImageBitmap()\n    this.target = target\n    this.offscreenCanvas = window.OffscreenCanvas\n      ? new window.OffscreenCanvas(target.width, target.height)\n      : document.createElement('canvas')\n  }\n\n  public async prepare(videoItem: VideoEntity): Promise<void> {\n    this.audios = []\n    this.audioConfigs = {}\n    // 重新设置 canvas 的尺寸，哪怕设置的值与原值没有区别，都会导致 canvas 重绘，在移动端上会清屏 https://blog.csdn.net/harmsworth2016/article/details/118426390\n    if (this.target.width !== videoItem.videoSize.width) {\n      this.target.width = videoItem.videoSize.width\n    }\n    if (this.target.height !== videoItem.videoSize.height) {\n      this.target.height = videoItem.videoSize.height\n    }\n\n    const addAudioConfig = (frame: number, ac: AudioConfig) => {\n      const acs = this.audioConfigs[frame] || []\n      acs.push(ac)\n      this.audioConfigs[frame] = acs\n    }\n\n    const loadImages = Object.entries(videoItem.images).map(\n      async ([key, item]) => {\n        if (item instanceof ArrayBuffer) {\n          const blob = new Blob([item], { type: 'image/png' })\n          const bitmap = await createImageBitmap(blob)\n          videoItem.images[key] = bitmap\n        }\n        return item\n      },\n    )\n\n    const loadAudios = Object.values(videoItem.audios).map(\n      ({ source, startFrame, endFrame, audioKey, startTime, totalTime }) =>\n        new Promise((resolve) => {\n          const audio = new Audio(\n            URL.createObjectURL(\n              new Blob([new Uint8Array(source)], { type: 'audio/x-mpeg' }),\n            ),\n          )\n\n          const ac: AudioConfig = {\n            audioKey,\n            audio,\n            startFrame,\n            endFrame,\n            startTime,\n            totalTime,\n          }\n          addAudioConfig(startFrame, ac)\n          addAudioConfig(endFrame, ac)\n          this.audios.push(audio)\n\n          audio.onloadeddata = resolve\n          audio.load()\n        }),\n    )\n\n    await Promise.all([...loadAudios, ...loadImages])\n  }\n\n  public processAudio(frame: number): void {\n    const acs = this.audioConfigs[frame]\n    if (!acs || acs.length === 0) {\n      return\n    }\n\n    acs.forEach(function (ac) {\n      if (ac.startFrame === frame) {\n        ac.audio.currentTime = ac.startTime\n        ac.audio.play()\n        return\n      }\n\n      if (ac.endFrame === frame) {\n        ac.audio.pause()\n        ac.audio.currentTime = 0\n        return\n      }\n    })\n  }\n\n  public clear(): void {\n    const context2d = this.target.getContext('2d')\n    context2d?.clearRect(0, 0, this.target.width, this.target.height)\n  }\n\n  public drawFrame(\n    images: ImageSources,\n    sprites: Array<Sprite>,\n    dynamicElements: DynamicElements,\n    frame: number,\n  ): void {\n    const context2d = this.target.getContext('2d')\n    if (!context2d) {\n      return\n    }\n\n    context2d.clearRect(0, 0, this.target.width, this.target.height)\n\n    if (this.isCacheFrame && this.frameCache[frame]) {\n      const ofsFrame = this.frameCache[frame]\n      context2d.drawImage(ofsFrame, 0, 0)\n      return\n    }\n\n    const ofsCanvas = this.offscreenCanvas\n\n    ofsCanvas.width = this.target.width\n    ofsCanvas.height = this.target.height\n\n    render(ofsCanvas, images, dynamicElements, sprites, frame)\n\n    context2d.drawImage(ofsCanvas, 0, 0)\n\n    if (this.isCacheFrame) {\n      createImageBitmap(ofsCanvas).then((bitMap) => {\n        this.frameCache[frame] = bitMap\n      })\n    }\n  }\n\n  public stopAllAudio(): void {\n    this.audios.forEach(function (audio) {\n      audio.pause()\n      audio.currentTime = 0\n    })\n  }\n}\n","export function noop(): void {\n  // no operation\n}\n","import { noop } from './noop'\n\nconst WORKER = `onmessage = function () {\n  setTimeout(function() {postMessage(null)}, 1 / 60)\n}`\n\nexport enum FILL_MODE {\n  FORWARDS = 'forwards',\n  BACKWARDS = 'backwards',\n}\n\nexport default class Animator {\n  public noExecutionDelay = false\n  public startValue = 0\n  public endValue = 0\n  public duration = 0\n  public repeatNumber = 1\n  public loop = false\n  public fillRule: FILL_MODE = FILL_MODE.FORWARDS\n  public onUpdate: (frame: number) => unknown = noop\n  public onEnd: () => unknown = noop\n  private isRunning = false\n  private startTimestamp = 0\n  private timeoutWorker: Worker | null = null\n\n  /**\n   * Get current time in milliseconds\n   * @private\n   */\n  private static currentTimeMillisecond(): number {\n    return performance ? performance.now() : new Date().getTime()\n  }\n\n  /**\n   * Start animation\n   * @param initialFrame\n   */\n  public start(initialFrame: number): void {\n    this.isRunning = true\n    this.startTimestamp = Animator.currentTimeMillisecond()\n\n    initialFrame &&\n      (this.startTimestamp -=\n        (initialFrame / (this.endValue - this.startValue)) * this.duration)\n\n    if (this.noExecutionDelay && this.timeoutWorker === null) {\n      this.timeoutWorker = new Worker(\n        window.URL.createObjectURL(new Blob([WORKER])),\n      )\n    }\n\n    this.doFrame()\n  }\n\n  /**\n   * Stop animation\n   */\n  public stop(): void {\n    this.isRunning = false\n\n    if (this.timeoutWorker !== null) {\n      this.timeoutWorker.terminate()\n      this.timeoutWorker = null\n    }\n  }\n\n  /**\n   * Process a frame, and process later frames repeatedly\n   */\n  private readonly doFrame = () => {\n    const deltaTime = Animator.currentTimeMillisecond() - this.startTimestamp\n    let fraction: number\n    if (!this.loop && deltaTime >= this.duration * this.repeatNumber) {\n      fraction = this.fillRule === FILL_MODE.BACKWARDS ? 0.0 : 1.0\n      this.isRunning = false\n    } else {\n      fraction = (deltaTime % this.duration) / this.duration\n    }\n    const frame = (this.endValue - this.startValue) * fraction + this.startValue\n    this.onUpdate(frame)\n\n    if (this.isRunning) {\n      if (this.timeoutWorker) {\n        this.timeoutWorker.onmessage = this.doFrame\n        this.timeoutWorker.postMessage(null)\n      } else {\n        window.requestAnimationFrame(this.doFrame)\n      }\n    } else {\n      if (this.timeoutWorker !== null) {\n        this.timeoutWorker.terminate()\n        this.timeoutWorker = null\n      }\n\n      this.onEnd()\n    }\n  }\n}\n","import Renderer from './renderer'\nimport Animator, { FILL_MODE } from './animator'\nimport VideoEntity from '../parser/video-entity'\nimport { noop } from './noop'\n\nexport * from './animator'\nexport * from './offscreen.canvas.render'\nexport * from './renderer'\n\nexport enum EVENT_TYPES {\n  START = 'start',\n  PROCESS = 'process',\n  PAUSE = 'pause',\n  RESUME = 'resume',\n  STOP = 'stop',\n  END = 'end',\n  CLEAR = 'clear',\n}\n\ninterface options {\n  loop?: number | boolean\n  fillMode?: FILL_MODE\n  playMode?: PLAY_MODE\n  startFrame?: number\n  endFrame?: number\n  cacheFrames?: boolean\n  intersectionObserverRender?: boolean\n  noExecutionDelay?: boolean\n}\n\nexport enum PLAY_MODE {\n  FORWARDS = 'forwards',\n  FALLBACKS = 'fallbacks',\n}\n\nexport default class Player {\n  public currentFrame = 0\n  public readonly container: HTMLCanvasElement\n  private videoItem: VideoEntity | null = null\n  private playMode: PLAY_MODE = PLAY_MODE.FORWARDS\n  private startFrame = 0\n  private endFrame = 0\n  private intersectionObserverRenderShow = true\n  private intersectionObserver: IntersectionObserver | null = null\n  private renderer: Renderer\n  private animator: Animator\n  private $onEvent: {\n    [EVENT_TYPES.START]: () => unknown\n    [EVENT_TYPES.PROCESS]: () => unknown\n    [EVENT_TYPES.PAUSE]: () => unknown\n    [EVENT_TYPES.RESUME]: () => unknown\n    [EVENT_TYPES.STOP]: () => unknown\n    [EVENT_TYPES.END]: () => unknown\n    [EVENT_TYPES.CLEAR]: () => unknown\n  } = {\n    start: noop,\n    process: noop,\n    pause: noop,\n    resume: noop,\n    stop: noop,\n    end: noop,\n    clear: noop,\n  }\n\n  constructor(\n    element: string | HTMLCanvasElement,\n    videoItem?: VideoEntity,\n    options?: options,\n  ) {\n    this.container =\n      typeof element === 'string'\n        ? <HTMLCanvasElement>document.body.querySelector(element)\n        : element\n\n    if (!this.container) {\n      throw new Error('container undefined.')\n    }\n\n    if (!this.container.getContext) {\n      throw new Error('container should be HTMLCanvasElement.')\n    }\n\n    this.renderer = new Renderer(this.container)\n    this.animator = new Animator()\n    videoItem && this.mount(videoItem)\n\n    if (options) {\n      this.set(options)\n    }\n  }\n\n  public get progress(): number {\n    if (!this.videoItem) {\n      return 0\n    }\n\n    return ((this.currentFrame + 1) / this.videoItem.frames) * 100\n  }\n\n  /**\n   * Set svga player options\n   * @param loop\n   * @param fillMode\n   * @param playMode\n   * @param startFrame\n   * @param endFrame\n   * @param cacheFrames\n   * @param intersectionObserverRender\n   * @param noExecutionDelay\n   */\n  public set({\n    loop = true,\n    fillMode = FILL_MODE.FORWARDS,\n    playMode = PLAY_MODE.FORWARDS,\n    startFrame = 0,\n    endFrame = 0,\n    cacheFrames = false,\n    intersectionObserverRender = false,\n    noExecutionDelay = false,\n  }: options): void {\n    this.playMode = playMode\n    this.startFrame = startFrame\n    this.endFrame = endFrame\n    this.handleIntersectionObserver(intersectionObserverRender)\n\n    this.setAnimatorLoop(loop)\n    this.animator.fillRule = fillMode\n    this.animator.noExecutionDelay = noExecutionDelay\n\n    this.renderer.isCacheFrame = cacheFrames\n  }\n\n  public mount(videoItem: VideoEntity): Promise<void> {\n    this.currentFrame = 0\n    this.videoItem = videoItem\n    return this.renderer.prepare(videoItem)\n  }\n\n  public start(): void {\n    if (!this.videoItem) {\n      throw new Error('video item undefined.')\n    }\n    this.startAnimation(this.videoItem)\n    this.$onEvent.start()\n  }\n\n  public resume(): void {\n    this.animator.start(this.currentFrame)\n    this.$onEvent.resume()\n  }\n\n  public pause(): void {\n    this.animator.stop()\n    this.$onEvent.pause()\n  }\n\n  public stop(): void {\n    this.animator.stop()\n    this.renderer.clear()\n\n    this.currentFrame = 0\n\n    this.renderer.stopAllAudio()\n    this.$onEvent.stop()\n  }\n\n  public clear(): void {\n    this.animator.stop()\n    this.renderer.clear()\n    this.$onEvent.clear()\n  }\n\n  public destroy(): void {\n    this.animator.stop()\n    this.renderer.clear()\n    this.videoItem = null\n  }\n\n  public $on(eventName: EVENT_TYPES, execFunction: () => unknown): this {\n    this.$onEvent[eventName] = execFunction\n\n    if (eventName === 'end') {\n      this.animator.onEnd = () => this.$onEvent.end()\n    }\n\n    return this\n  }\n\n  /**\n   * 监听容器是否处于浏览器视窗内\n   * @param on\n   * @private\n   */\n  private handleIntersectionObserver(on: boolean): void {\n    const hasIntersectionObserver =\n      typeof window !== 'undefined' && 'IntersectionObserver' in window\n    if (hasIntersectionObserver && on) {\n      this.intersectionObserver = new IntersectionObserver(\n        (entries) => {\n          this.intersectionObserverRenderShow =\n            entries[0]?.intersectionRatio > 0\n        },\n        {\n          rootMargin: '0px',\n          threshold: [0, 0.5, 1],\n        },\n      )\n      this.intersectionObserver.observe(this.container)\n    } else {\n      if (this.intersectionObserver) {\n        this.intersectionObserver.disconnect()\n      }\n      this.intersectionObserverRenderShow = true\n    }\n  }\n\n  private setAnimatorLoop(loop: number | boolean): void {\n    switch (typeof loop) {\n      case 'boolean':\n        this.animator.loop = loop\n        break\n      case 'number':\n        if (loop <= 0) {\n          console.warn(\n            '[svga-web] set loop to 0 is deprecated, use \"loop: true\" instead',\n          )\n          this.animator.loop = true\n        } else {\n          this.animator.loop = false\n          this.animator.repeatNumber = loop\n        }\n    }\n  }\n\n  /**\n   * Start animation\n   * @param images\n   * @param sprites\n   * @param frames\n   * @param FPS\n   * @param dynamicElements\n   * @private\n   */\n  private startAnimation({\n    images,\n    sprites,\n    frames,\n    FPS,\n    dynamicElements,\n  }: VideoEntity): void {\n    const { playMode, startFrame, endFrame } = this\n    const totalFramesCount = frames - 1\n\n    // 如果开始动画的当前帧是最后一帧，重置为第 0 帧\n    if (this.currentFrame === totalFramesCount) {\n      this.currentFrame = startFrame || 0\n    }\n\n    this.animator.startValue =\n      playMode === PLAY_MODE.FALLBACKS\n        ? endFrame || totalFramesCount\n        : startFrame || 0\n    this.animator.endValue =\n      playMode === PLAY_MODE.FALLBACKS\n        ? startFrame || 0\n        : endFrame || totalFramesCount\n\n    if (endFrame > 0 && endFrame > startFrame) {\n      frames = endFrame - startFrame\n    } else if (endFrame <= 0 && startFrame > 0) {\n      frames = frames - startFrame\n    }\n\n    this.animator.duration = frames * (1.0 / FPS) * 1000\n\n    this.animator.onUpdate = (value: number) => {\n      value = Math.floor(value)\n\n      if (this.currentFrame === value) {\n        return void 0\n      }\n\n      if (this.playMode === PLAY_MODE.FORWARDS) {\n        this.renderer.processAudio(value)\n      }\n\n      this.currentFrame = value\n\n      if (this.intersectionObserverRenderShow) {\n        this.renderer.drawFrame(\n          images,\n          sprites,\n          dynamicElements,\n          this.currentFrame,\n        )\n      }\n\n      this.$onEvent.process()\n    }\n\n    if (this.playMode === PLAY_MODE.FORWARDS) {\n      this.renderer.processAudio(0)\n    }\n    this.animator.start(this.currentFrame)\n  }\n}\n","import { version } from '../package.json'\nimport VideoEntity from './parser/video-entity'\n\nexport default class DB {\n  private storeName: string\n  private dbPromise: Promise<IDBDatabase>\n\n  constructor(\n    { name, storeName } = {\n      name: 'svga-web.' + version,\n      storeName: 'svga_file',\n    },\n  ) {\n    this.storeName = storeName\n    this.dbPromise = new Promise<IDBDatabase>(function (resolve, reject) {\n      if (window.indexedDB) {\n        const request = window.indexedDB.open(name)\n\n        request.onerror = function (err) {\n          reject(new Error('[svgaWeb.DB] indexedDB open fail' + err))\n        }\n\n        request.onsuccess = function () {\n          resolve(request.result)\n        }\n\n        request.onupgradeneeded = function () {\n          const db = request.result\n          if (!db.objectStoreNames.contains(storeName)) {\n            db.createObjectStore(storeName)\n          }\n        }\n      } else {\n        throw new Error('[svgaWeb.DB] indexedDB not supported')\n      }\n    })\n  }\n\n  async find(id: IDBValidKey): Promise<VideoEntity | null> {\n    return this.dbPromise.then(\n      (db) =>\n        new Promise((resolve) => {\n          const tx = db.transaction([this.storeName], 'readonly')\n          const req = tx.objectStore(this.storeName).get(id)\n          req.onsuccess = () => resolve(req.result)\n        }),\n    )\n  }\n\n  async insert(id: IDBValidKey, data: VideoEntity): Promise<Event> {\n    return this.dbPromise.then(\n      (db) =>\n        new Promise((resolve) => {\n          const tx = db.transaction([this.storeName], 'readwrite')\n          tx.objectStore(this.storeName).put(data, id)\n          tx.oncomplete = resolve\n        }),\n    )\n  }\n\n  async delete(id: IDBValidKey): Promise<Event> {\n    return this.dbPromise.then(\n      (db) =>\n        new Promise((resolve) => {\n          const tx = db.transaction([this.storeName], 'readwrite')\n          const req = tx.objectStore(this.storeName).delete(id)\n          req.onsuccess = resolve\n        }),\n    )\n  }\n}\n"],"names":["svgaResourceLink","resolve","reject","request","Version","dataHeader","fn","ctx","params","offset","index","pending","err","base64","exports","string","p","n","b64","s64","i","buffer","start","end","parts","chunk","j","t","b","invalidEncoding","c","evt","listeners","args","f32","f8b","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloat_ieee754","writeUint","sign","exponent","mantissa","readFloat_ieee754","readUint","uint","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","e","utf8","len","c1","c2","alloc","slice","size","SIZE","MAX","slab","LongBits","util","require$$0","zero","zeroHash","value","unsigned","charCodeAt","hash","mask","part0","part1","part2","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","global","this","obj","prop","Buffer","sizeOrArray","bits","merge","dst","src","ifNotSet","keys","str","newError","name","CustomError","message","properties","fieldNames","fieldMap","encoding","Writer","BufferWriter","noop","writer","create","push","write_uint32","write_int32","write_sint32","write_uint64","write_sint64","write_bool","write_fixed32","write_fixed64","write_float","write_double","writeBytes_set","writeBytes_for","write_bytes","write_string","fork","reset","ldelim","head","tail","finish","BufferWriter_","write_bytes_buffer","write_string_buffer","Reader","BufferReader","reader","writeLength","create_typed_array","create_array","read_uint32_setup","read_int32","read_sint32","read_bool","read_fixed32","read_sfixed32","read_float","read_double","read_bytes","length","nativeBuffer","read_string","bytes","skip","wireType","BufferReader_","read_string_buffer","rpcImpl","requestDelimited","responseDelimited","rpcCall","method","requestCtor","responseCtor","callback","self","response","endedByRPC","rpc","protobuf","configure","$protobuf.Reader","$protobuf.util","$protobuf.roots","com","opensource","svga","MovieParams","ks","r","l","m","typeUrlPrefix","SpriteEntity","AudioEntity","Layout","Transform","ShapeEntity","$oneOfFields","valuesById","values","ShapeArgs","RectArgs","EllipseArgs","ShapeStyle","RGBAColor","FrameEntity","MovieEntity","k","tag2","_FrameEntity","spec","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","shapes","shape","g","a","images","audios","imageKey","frames","_Parser","ParserWorker","data","worker","no","messageHandler","result","id","context","styles","transform","x","y","w","h","kappa","ox","oy","xe","ye","xm","ym","width","height","radius","currentPoint","segment","firstLetter","canvas","bitmapCache","dynamicElements","sprites","currentFrame","sprite","frameItem","img","dynamicElement","source","fit","sourceWidth","sourceHeight","wRatio","hRatio","ratio","blob","target","videoItem","addAudioConfig","frame","ac","acs","loadImages","key","item","bitmap","loadAudios","startFrame","endFrame","audioKey","startTime","totalTime","audio","context2d","ofsFrame","ofsCanvas","bitMap","FILL_MODE","deltaTime","fraction","initialFrame","EVENT_TYPES","PLAY_MODE","element","options","loop","fillMode","playMode","cacheFrames","intersectionObserverRender","noExecutionDelay","eventName","execFunction","on","entries","FPS","totalFramesCount","storeName","db","req","tx"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}